From: Motion Team Date: Tue, 25 Oct 2016 14:23:19 +0000 (+0200) Subject: Built motion from commit 68f82a2.|0.0.148 X-Git-Url: http://repos.xcallymotion.com/base/%22angular-material.themes.css/%22javascript:;/%22avatar.png//%22https:?a=commitdiff_plain;h=d991a0a35dc77d4ace6199edc44d3334aa61486f;p=motion.git Built motion from commit 68f82a2.|0.0.148 --- diff --git a/package.json b/package.json index 0bac3a1..b979677 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "fs-extra": "^0.26.7", "geoip-lite": "^1.1.6", "google-tts-api": "0.0.1", + "heapdump": "^0.3.7", "html-pdf": "^1.4.0", "html-to-text": "^1.6.2", "ipaddr.js": "^1.0.4", diff --git a/public/app/4c685f79.app.js b/public/app/4a68e305.app.js similarity index 95% rename from public/app/4c685f79.app.js rename to public/app/4a68e305.app.js index 88165f0..ffa2b7c 100644 --- a/public/app/4c685f79.app.js +++ b/public/app/4a68e305.app.js @@ -16,11 +16,11 @@ return a("/api/voice/queues/:id/:controller/:controller2",{name:"@id"},{update:{ cellClass:"text-center ui-grid-vcenter",cellTemplate:"
{{row.entity.application}} ({{row.entity.queuename}})
"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'
{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}{{\'APPLICATION_TIMEOUT\' | translate}} []
',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"
{{row.entity.membername || ''}}
"}],data:[],gridMenuTitleFilter:function(a){var b=g.defer();return b.resolve(f.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b}},e.get({id:b.getCurrentUser().id,controller:"openchannel",controller1:"queues"}).$promise.then(function(b){a.table1.data=b.rows})["finally"](function(){d.socket.on("user_has_openchannel_queue:save",function(c){c.UserId!=b.getCurrentUser().id||_.find(a.table1.data,{id:c.OpenChannelQueueId})||a.table1.data.push({id:c.OpenChannelQueueId,UserHasOpenChannelQueue:c})}),d.socket.on("user_has_openchannel_queue:remove",function(c){c.UserId===b.getCurrentUser().id&&_.remove(a.table1.data,{id:c.OpenChannelQueueId})})})["catch"](function(a){console.error(a)}),h.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){d.socket.on("report_openchannel_session:save",function(b){var c=_.find(a.table2.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&i(function(){_.remove(a.table2.data,{id:b.id})},1e4)):b.leaveAt||a.table2.data.push(b)}),d.socket.on("report_openchannel_session:remove",function(b){_.remove(a.table2.data,{id:b.id})})})["catch"](function(a){console.log(a)})},a.initWidget=function(b){var e;switch(b){case"timeout":case"waiting":e=h;break;default:e=c}return e.get({id:b}).$promise.then(function(c){a[b]=c.value,a.charts={interactions:{labels:[f.instant("APPLICATION_DASHBOARD_NEW"),f.instant("APPLICATION_DASHBOARD_OPEN"),f.instant("APPLICATION_DASHBOARD_PENDING"),f.instant("APPLICATION_DASHBOARD_CLOSED")],values:[a["new"],a.open,a.pending,a.closed],colours:["#44B6AE","#578EBE","#35AA47","#8775A7"]}},d.socket.on("report_openchannel_dashboard:"+b,function(c){a[b]=c.value,a.charts.interactions.values=[a["new"],a.open,a.pending,a.closed]})})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("DashboardSmsCtrl",["$scope","Auth","SmsRoom","socket","Agent","$translate","$q","ReportSmsSession","$timeout",function(a,b,c,d,e,f,g,h,i){a.Auth=b,a.moment=moment,a["new"]=0,a.open=0,a.pending=0,a.closed=0,a.initAgent=function(){a.table1={enableGridMenu:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,multiSelect:!0,columnDefs:[{name:"UserHasSmsQueue.queue",headerCellFilter:"translate",displayName:"APPLICATION_QUEUE",cellClass:"text-center ui-grid-vcenter"}],data:[],onRegisterApi:function(b){a.gridApi=b}},a.table2={headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,columnDefs:[{name:"roomid",displayName:"APPLICATION_INTERACTION_ID",headerCellFilter:"translate"},{name:"accountname",displayName:"APPLICATION_ACCOUNT_NAME",headerCellFilter:"translate"},{name:"application",displayName:"APPLICATION_APPLICATION",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"
{{row.entity.application}} ({{row.entity.queuename}})
"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'
{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}{{\'APPLICATION_TIMEOUT\' | translate}} []
',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"membername",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"
{{row.entity.membername || ''}}
"}],data:[],gridMenuTitleFilter:function(a){var b=g.defer();return b.resolve(f.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b}},e.get({id:b.getCurrentUser().id,controller:"sms",controller1:"queues"}).$promise.then(function(b){a.table1.data=b.rows})["finally"](function(){d.socket.on("user_has_sms_queue:save",function(c){c.UserId!=b.getCurrentUser().id||_.find(a.table1.data,{id:c.SmsQueueId})||a.table1.data.push({id:c.SmsQueueId,UserHasSmsQueue:c})}),d.socket.on("user_has_sms_queue:remove",function(c){c.UserId===b.getCurrentUser().id&&_.remove(a.table1.data,{id:c.SmsQueueId})})})["catch"](function(a){console.error(a)}),h.get({controller:"waiting",controller2:"applications"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){d.socket.on("report_sms_session:save",function(b){var c=_.find(a.table2.data,{id:b.id});c?(_.merge(c,b),b.leaveAt&&i(function(){_.remove(a.table2.data,{id:b.id})},1e4)):b.leaveAt||a.table2.data.push(b)}),d.socket.on("report_sms_session:remove",function(b){_.remove(a.table2.data,{id:b.id})})})["catch"](function(a){console.log(a)})},a.initWidget=function(b){var e;switch(b){case"timeout":case"waiting":e=h;break;default:e=c}return e.get({id:b}).$promise.then(function(c){a[b]=c.value,a.charts={interactions:{labels:[f.instant("APPLICATION_DASHBOARD_NEW"),f.instant("APPLICATION_DASHBOARD_OPEN"),f.instant("APPLICATION_DASHBOARD_PENDING"),f.instant("APPLICATION_DASHBOARD_CLOSED")],values:[a["new"],a.open,a.pending,a.closed],colours:["#44B6AE","#578EBE","#35AA47","#8775A7"]}},d.socket.on("report_sms_dashboard:"+b,function(c){a[b]=c.value,a.charts.interactions.values=[a["new"],a.open,a.pending,a.closed]})})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("DashboardVoiceCtrl",["$scope","$rootScope","$timeout","Auth","ReportQueue","ReportCall","Agent","VoiceQueue","Dashboard","socket",function(a,b,c,d,e,f,g,h,i,j){a.moment=moment,a.radioSwitch={size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"success",onColor:"danger"};var k=function(a,b){var c=a?30*a+130:177;angular.element(document.getElementsByName(b)[0]).css("height",c+"px")};a.initUser=function(){var b;if(a.user=d.getCurrentUser(),a.voice={},a.$on("$destroy",function(){b&&(b.terminate(),j.socket.removeAllListeners("dashboard:voice:waiting"),j.socket.removeAllListeners("dashboard:voice:active"),j.socket.removeAllListeners("dashboard:voice:complete"),j.socket.removeAllListeners("dashboard:voice:abandon"),j.socket.removeAllListeners("dashboard:voice:unmanaged"),j.socket.removeAllListeners("dashboard:voice:holdtime"),j.socket.removeAllListeners("dashboard:voice:talktime"))}),a.onmessage=function(b){a.voice=b.data,a.$apply()},window.Worker){switch(b=new Worker("assets/workers/dashboard/voice/worker.js"),a.user.role){case"admin":h.get().$promise.then(function(a){return b.postMessage({evt:"myQueues",queues:a.rows}),i.get({id:"voice",controller:"init"}).$promise}).then(function(a){a.evt="dashboard:voice:init",b.postMessage(a)})["catch"](function(a){console.error(a)});break;case"user":b.postMessage({evt:"myQueues",queues:a.user.PVoiceQueues}),i.get({id:"voice",controller:"init"}).$promise.then(function(a){a.evt="dashboard:voice:init",b.postMessage(a)})}b.onmessage=a.onmessage}j.socket.on("dashboard:voice:waiting",function(a){a.evt="dashboard:voice:waiting",b.postMessage(a)}),j.socket.on("dashboard:voice:active",function(a){a.evt="dashboard:voice:active",b.postMessage(a)}),j.socket.on("dashboard:voice:complete",function(a){a.evt="dashboard:voice:complete",b.postMessage(a)}),j.socket.on("dashboard:voice:abandon",function(a){a.evt="dashboard:voice:abandon",b.postMessage(a)}),j.socket.on("dashboard:voice:unmanaged",function(a){a.evt="dashboard:voice:unmanaged",b.postMessage(a)}),j.socket.on("dashboard:voice:talktime",function(a){a.evt="dashboard:voice:talktime",b.postMessage(a)}),j.socket.on("dashboard:voice:holdtime",function(a){a.evt="dashboard:voice:holdtime",b.postMessage(a)}),j.socket.on("dashboard:voice:outbound",function(a){a.evt="dashboard:voice:outbound",b.postMessage(a)})},a.initAgent=function(){return a.agent=d.getCurrentUser(),j.socket.on("voice:queue:agent:join",function(b){b.loggedAt=moment().format("YYYY-MM-DD HH:mm:ss"),b.callstaken=0,a.table1.data.push(b)}),j.socket.on("voice:queue:agent:leave",function(b){_.remove(a.table1.data,{queue:b.queue})}),a.table1={enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,enableSorting:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,columnDefs:[{name:"queue",headerCellFilter:"translate",displayName:"APPLICATION_QUEUE",cellClass:"text-center ui-grid-vcenter"},{name:"loggedAt",displayName:"logged At",cellClass:"text-center ui-grid-vcenter",cellTemplate:'
'},{name:"lastcall",headerCellFilter:"translate",displayName:"APPLICATION_LAST_CALL",cellClass:"text-center ui-grid-vcenter",cellTemplate:'
'},{name:"callstaken",headerCellFilter:"translate",displayName:"APPLICATION_CALLS_TAKEN",cellClass:"text-center ui-grid-vcenter",cellTemplate:"
{{row.entity.callstaken || 0}}
"}],data:[],onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){k(a.table1.paginationPageSize>a.table1.data.length?a.table1.data.length:a.table1.paginationPageSize,"table1")}),a.gridApi.pagination.on.paginationChanged(a,function(b,c){k(c>a.table1.data.length?a.table1.data.length:c,"table1")})}},a.table2={enableGridMenu:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:0,multiSelect:!1,columnDefs:[{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate"},{name:"status",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:'
{{\'APPLICATION_QUEUESTATUS_WAITING\' | translate}}{{\'APPLICATION_TALKING\' | translate}}{{\'APPLICATION_QUEUESTATUS_COMPLETE\' | translate}}{{\'APPLICATION_QUEUESTATUS_ABANDON\' | translate}}[]
',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"caller",displayName:"APPLICATION_CALLER",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"
{{row.entity.calleridnum || ''}} {{row.entity.calleridname || ''}}
",enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1},{name:"position",displayName:"APPLICATION_POSITION",headerCellFilter:"translate"},{name:"lastAssignedTo",displayName:"APPLICATION_AGENT",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"}],data:[],onRegisterApi:function(b){a.gridApi1=b,a.gridApi1.grid.registerDataChangeCallback(function(){k(a.gridApi1.core.getVisibleRows(a.gridApi1.grid).length,"table2")})}},a.table3={exporterCsvFilename:"abandoned_calls.csv",enableRowHeaderSelection:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!1,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,enableSelectAll:!1,enableHorizontalScrollbar:0,enableVerticalScrollbar:1,columnDefs:[{name:"queue",displayName:"APPLICATION_QUEUE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter"},{name:"caller",displayName:"APPLICATION_CALLER",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"
{{row.entity.calleridnum || ''}} {{row.entity.calleridname || ''}}
"},{name:"createdAt",displayName:"APPLICATION_DATE",headerCellFilter:"translate",cellClass:"text-center ui-grid-vcenter",cellTemplate:"
{{row.entity.updatedAt | date:'yyyy-MM-dd HH:mm:ss'}}
"},{name:"lastAssignedTo",cellClass:"text-center ui-grid-vcenter",displayName:"APPLICATION_LAST_ASSIGNED_TO",headerCellFilter:"translate"},{name:"assigned",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",cellTemplate:'
',enableFiltering:!1}],data:[],onRegisterApi:function(b){a.gridApi2=b,a.gridApi2.grid.registerDataChangeCallback(function(){k(a.gridApi2.core.getVisibleRows(a.gridApi2.grid).length,"table3")})}},g.get({id:d.getCurrentUser().id,controller:"voice",controller1:"queues"}).$promise.then(function(b){a.table1.data=_.map(b.rows,function(a){return{queue:a.UserHasVoiceQueue.queue,loggedAt:a.UserHasVoiceQueue.loggedAt,callstaken:a.UserHasVoiceQueue.callstaken,lastcall:a.UserHasVoiceQueue.lastcall}})})["finally"](function(){k(a.table1.paginationPageSize>a.table1.data.length?a.table1.data.length:a.table1.paginationPageSize,"table1"),j.socket.on("voice:queue:update",function(b){var c=_.find(a.table1.data,{queue:b.queue});c?_.merge(c,b):a.table1.data.push(b)}),j.socket.on("user_has_voice_queue:remove",function(b){b.UserId===d.getCurrentUser().id&&_.remove(a.table1.data,{queue:b.queue})}),j.socket.on("user_has_voice_queue:save",function(b){if(b.UserId===d.getCurrentUser().id){var c=_.find(a.table1.data,{queue:b.queue});!c&&b.logged&&a.table1.data.unshift({queue:b.queue,loggedAt:moment(),lastcall:null,callstaken:0})}})})["catch"](function(a){console.error(a)}),e.get({id:"waiting",controller:"calls"}).$promise.then(function(b){a.table2.data=b.rows})["finally"](function(){j.socket.on("report_queue:save",function(b){a.table2.data.push(b)}),j.socket.on("report_queue:update",function(b){var d=_.find(a.table2.data,{id:b.id});d&&(_.merge(d,b),b.queuecallerleaveAt&&c(function(){_.remove(a.table2.data,{id:b.id})},3e3))})})["catch"](function(a){console.error(a)}),e.get({controller:"abandoned",controller2:"all"}).$promise.then(function(b){a.table3.data=b.rows})["catch"](function(a){console.error(a)})["finally"](function(){j.socket.on("report_queue:update",function(b){b.queuecallerabandon&&a.table3.data.unshift(b)})})},a.updateItem=function(b){return e.update({id:b.id},{assigned:b.assigned,lastAssignedTo:b.assigned?a.agent.name:void 0}).$promise["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.desk",{url:"/desk",template:"
","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").factory("DeskAccount",["$resource",function(a){return a("/api/desk/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("DeskListCtrl",["$scope","$http","$rootScope","xAlert","$translate","socket","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={accountsByPage:{name:"10",value:10}},a.accountsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.accounts={checked:[]},a.check=function(b,c){c?a.accounts.checked=angular.copy(_.map(a.displayedDeskAccounts,"id")):a.accounts.checked=[]},a.getAccounts=function(b){return _.map(a.displayedDeskAccounts,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){f.unsyncUpdates("desk_account"),b.url="/api/desk/accounts",h.getPage(b).then(function(d){a.displayedDeskAccounts=d.rows,b.pagination.numberOfPages=d.total_pages,c.updateTableConfig(a.accountsByPage,a.displayedDeskAccounts.length),c.updateTableConfig(a.conf.accountsByPage,a.displayedDeskAccounts.length)}),f.socket.on("desk_account:save",function(){a.initList(b)}),f.socket.on("desk_account:remove",function(c){a.accounts.checked=_.without(a.accounts.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/desk/accounts/"+a).success(function(){d.show(e.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){d.error(a)})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/desk/accounts",{params:{id:a.accounts.checked}}).success(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){d.error(a)})}),a.checkAccount=function(a){b.get("/api/desk/accounts/"+a+"/check").then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.desk.list",{url:"/list",templateUrl:"app/desk/list/list.html",controller:"DeskListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("DeskViewCtrl",["$scope","$http","$stateParams","$translate","$location","WizardHandler","socket","xAlert","Modal","desk_com",function(a,b,c,d,e,f,g,h,i,j){a.$stateParams=c,a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:500,scrollInertia:0},a.initConfiguration=function(){a.formsConfiguration={},a.configuration={}},a.goNext=function(){f.wizard().next()},a.formValidation=function(a){return a},a.$on("$destroy",function(){g.unsyncUpdates("desk_configuration"),g.unsyncUpdates("desk_field")}),a.initView=function(){b.get("/api/desk/accounts/"+c.id).success(function(b){a.account=b}).error(function(a){h.error(a)})},a.updateItem=function(){b.put("/api/desk/accounts/"+c.id,a.account).success(function(){h.show(d.instant("MESSAGE_WELL_DONE")+".","success")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.getConfigurations=function(){b.get("/api/desk/configurations",{params:{AccountId:c.id}}).success(function(b){a.configurations=b,g.socket.on("desk_configuration:remove",function(b){_.remove(a.configurations,{id:b.id})})}).error(function(a){h.error(a)})},a.deleteConfiguration=i.confirm["delete"](function(a){b["delete"]("api/desk/configurations/"+a).success(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.createConfiguration=function(){a.configuration.AccountId=c.id,b.post("api/desk/configurations",a.configuration).success(function(a){e.path("desk/view/"+c.id+"/configurations/settings/"+a.id)}).error(function(){h.show("Something went wrong!","danger")})},a.fieldType=["string","variable"],a.descFieldType=["string","key_value"],a.getFields=function(){b.get("/api/desk/accounts/"+c.id+"/fields").success(function(b){a.accountFields=j.fields.concat(b)}).error(function(a){h.error(a)})},a.getConfiguration=function(){b.get("/api/desk/configurations/"+c.configurationId).success(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,g.socket.on("desk_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})}).error(function(a){h.error(a)})},a.getVariables=function(){b.get("/api/variables").success(function(b){a.variables=b.rows}).error(function(a){h.error(a)})},a.removeItem=function(a){b["delete"]("api/desk/fields/"+a.id).success(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addItemSubject=function(){var d={type:"string",content:""};b.post("/api/desk/configurations/"+c.configurationId+"/subject",d).success(function(b){a.subjectConfig.push(b)}).error(function(){h.show("Something went wrong!","danger")})},a.addItemDescription=function(){var d={type:"string",content:""};b.post("/api/desk/configurations/"+c.configurationId+"/description",d).success(function(b){a.descriptionConfig.push(b)}).error(function(){h.show("Something went wrong!","danger")})},a.addItemField=function(){var d={content:""};b.post("/api/desk/configurations/"+c.configurationId+"/field",d).success(function(b){a.fieldConfig.push(b)}).error(function(){h.show("Something went wrong!","danger")})},a.updateField=function(a){b.put("/api/desk/fields/"+a.id,a).success(function(){}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.changeType=function(b){"variable"===b.type?b.content="":"string"===b.type&&(b.VariableId=null),a.updateField(b)},a.changeDescType=function(b){"key_value"===b.type?(b.content="","string"===b.keyType?b.VariableId=null:"variable"===b.keyType&&(b.keyContent="")):"string"===b.type&&(b.VariableId=null,b.key="",b.keyContent=""),a.updateField(b)},a.changeFieldType=function(b){if(b.content="",b.idField){var c=_.find(a.accountFields,"id",b.idField);c&&(b.customField=_.result(c,"custom",!0))}a.updateField(b)},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"id",b);return c?c.data.choices?c.data.choices:null:void 0}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.desk.view",{url:"/view/:id",templateUrl:"app/desk/view/view.html",controller:"DeskViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.desk.view.account",{url:"/account",templateUrl:"app/desk/view/view.account.html"}).state("main.desk.view.configurations",{url:"/configurations",templateUrl:"app/desk/view/view.configurations.html"}).state("main.desk.view.configurations.settings",{url:"/settings/:configurationId",templateUrl:"app/desk/view/view.configurationSettings.html",controller:"DeskViewCtrl"}).state("main.desk.view.configuration",{url:"/configuration",templateUrl:"app/desk/view/view.configuration.html"})}]),angular.module("xCallyShuttleApp").controller("DeskWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={}},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){console.log(a.item),b.post("api/desk/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/desk/list")}).error(function(){e.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.desk.wizard",{url:"/wizard",templateUrl:"app/desk/wizard/wizard.html",controller:"DeskWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.freshdesk",{url:"/freshdesk",template:"
","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").factory("FreshdeskAccount",["$resource",function(a){return a("/api/freshdesk/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("FreshdeskListCtrl",["$scope","$http","$rootScope","xAlert","$translate","socket","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={accountsByPage:{name:"10",value:10}},a.accountsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.accounts={checked:[]},a.check=function(b,c){c?a.accounts.checked=angular.copy(_.map(a.displayedFreshdeskAccounts,"id")):a.accounts.checked=[]},a.getAccounts=function(b){return _.map(a.displayedFreshdeskAccounts,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){f.unsyncUpdates("freshdesk_account"),b.url="/api/freshdesk/accounts",h.getPage(b).then(function(d){a.displayedFreshdeskAccounts=d.rows,b.pagination.numberOfPages=d.total_pages,c.updateTableConfig(a.accountsByPage,a.displayedFreshdeskAccounts.length),c.updateTableConfig(a.conf.accountsByPage,a.displayedFreshdeskAccounts.length)}),f.socket.on("freshdesk_account:save",function(){a.initList(b)}),f.socket.on("freshdesk_account:remove",function(c){a.accounts.checked=_.without(a.accounts.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/freshdesk/accounts/"+a).success(function(){d.show(e.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){d.error(a)})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/freshdesk/accounts",{params:{id:a.accounts.checked}}).success(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){d.error(a)})}),a.checkAccount=function(a){b.get("/api/freshdesk/accounts/"+a+"/check").then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.freshdesk.list",{url:"/list",templateUrl:"app/freshdesk/list/list.html",controller:"FreshdeskListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("FreshdeskViewCtrl",["$scope","$http","$stateParams","$translate","$location","$filter","WizardHandler","socket","xAlert","Modal",function(a,b,c,d,e,f,g,h,i,j){a.$stateParams=c,a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:500,scrollInertia:0},a.initConfiguration=function(){a.formsConfiguration={},a.configuration={}},a.goNext=function(){g.wizard().next()},a.formValidation=function(a){return a},a.$on("$destroy",function(){h.unsyncUpdates("freshdesk_configuration"),h.unsyncUpdates("freshdesk_field")}),a.initView=function(){b.get("/api/freshdesk/accounts/"+c.id).success(function(b){a.account=b}).error(function(a){i.error(a)})},a.updateItem=function(){b.put("/api/freshdesk/accounts/"+c.id,a.account).success(function(){i.show(d.instant("MESSAGE_WELL_DONE")+".","success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.getConfigurations=function(){b.get("/api/freshdesk/configurations",{params:{AccountId:c.id}}).success(function(b){a.configurations=b,h.socket.on("freshdesk_configuration:remove",function(b){_.remove(a.configurations,{id:b.id})})}).error(function(a){i.error(a)})},a.deleteConfiguration=j.confirm["delete"](function(a){b["delete"]("api/freshdesk/configurations/"+a).success(function(){i.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.createConfiguration=function(){a.configuration.AccountId=c.id,b.post("api/freshdesk/configurations",a.configuration).success(function(a){e.path("freshdesk/view/"+c.id+"/configurations/settings/"+a.id)}).error(function(){i.show("Something went wrong!","danger")})},a.fieldType=["string","variable"],a.descFieldType=["string","key_value"],a.getFields=function(){b.get("/api/freshdesk/accounts/"+c.id+"/fields").success(function(b){a.accountFields=[],b=f("freshdesk")(b),_.forEach(b,function(b){a.accountFields.push(b.ticket_field)})}).error(function(a){i.error(a)})},a.getConfiguration=function(){b.get("/api/freshdesk/configurations/"+c.configurationId).success(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,h.socket.on("freshdesk_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})}).error(function(a){i.error(a)})},a.getVariables=function(){b.get("/api/variables").success(function(b){a.variables=b.rows}).error(function(a){i.error(a)})},a.removeItem=function(a){b["delete"]("api/freshdesk/fields/"+a.id).success(function(){i.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addItemSubject=function(){var d={type:"string",content:""};b.post("/api/freshdesk/configurations/"+c.configurationId+"/subject",d).success(function(b){a.subjectConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.addItemDescription=function(){var d={type:"string",content:""};b.post("/api/freshdesk/configurations/"+c.configurationId+"/description",d).success(function(b){a.descriptionConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.addItemField=function(){var d={content:""};b.post("/api/freshdesk/configurations/"+c.configurationId+"/field",d).success(function(b){a.fieldConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.updateField=function(a){b.put("/api/freshdesk/fields/"+a.id,a).success(function(){}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.changeType=function(b){"variable"===b.type?b.content="":"string"===b.type&&(b.VariableId=null),a.updateField(b)},a.changeDescType=function(b){"key_value"===b.type?(b.content="","string"===b.keyType?b.VariableId=null:"variable"===b.keyType&&(b.keyContent="")):"string"===b.type&&(b.VariableId=null,b.key="",b.keyContent=""),a.updateField(b)},a.changeFieldType=function(b){if(b.content="",b.idField){var c=_.find(a.accountFields,"name",b.idField);c&&(b.customField=!_.result(c,"default",!0))}a.updateField(b)},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"name",b);return c?c.choices.length>0?c.choices:null:void 0}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.freshdesk.view",{url:"/view/:id",templateUrl:"app/freshdesk/view/view.html",controller:"FreshdeskViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.freshdesk.view.account",{url:"/account",templateUrl:"app/freshdesk/view/view.account.html"}).state("main.freshdesk.view.configurations",{url:"/configurations",templateUrl:"app/freshdesk/view/view.configurations.html"}).state("main.freshdesk.view.configurations.settings",{url:"/settings/:configurationId",templateUrl:"app/freshdesk/view/view.configurationSettings.html",controller:"FreshdeskViewCtrl"}).state("main.freshdesk.view.configuration",{url:"/configuration",templateUrl:"app/freshdesk/view/view.configuration.html"})}]),angular.module("xCallyShuttleApp").controller("FreshdeskWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){ a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={}},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){console.log(a.item),b.post("api/freshdesk/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/freshdesk/list")}).error(function(){e.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.freshdesk.wizard",{url:"/wizard",templateUrl:"app/freshdesk/wizard/wizard.html",controller:"FreshdeskWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.iframe",{url:"/iframe",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("IframeViewCtrl",["$scope","Auth","Integration","xAlert","$translate","$sce",function(a,b,c,d,e,f){a.Auth=b,a.initView=function(){return c.get({state:"iframe"}).$promise.then(function(c){a.iframe=_.first(c.rows),a.iframe.remoteUri?a.url=f.trustAsResourceUrl(a.iframe.remoteUri):b.isAgent()&&d.show(e.instant("MESSAGE_NO_IFRAME_CONFIGURED")+".","danger")})["catch"](function(a){d.error(a)})},a.updateItem=function(){return b.isAgent()?void 0:c.update({id:a.iframe.id},a.iframe).$promise.then(function(){d.show(e.instant("MESSAGE_WELL_DONE")+".","success")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.iframe.view",{url:"/view",templateUrl:"app/iframe/view/view.html",controller:"IframeViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("Integration",["$resource",function(a){return a("/api/integrations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.integrations",{url:"/integrations",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:19}}})}]),angular.module("xCallyShuttleApp").controller("IntegrationListCtrl",["$scope","Modal","socket","FileUploader","Integration","xAlert",function(a,b,c,d,e,f){a.integrationsByPage=10;var g=a.uploader=new d({url:"api/integrations",autoUpload:!0,removeAfterUpload:!0});g.filters.push({name:"zipFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|zip|".indexOf(b)}}),g.onSuccessItem=function(a,b,c,d){console.info("onSuccessItem",a,b,c,d),f.show(b.name,"success")},g.onErrorItem=function(a,b,c,d){console.info("onErrorItem",a,b,c,d),b.errors.forEach(function(a){f.error(err)})},a.deleteItem=b.confirm["delete"](function(a){e["delete"]({id:a},function(){f.show("Integration Removed","success")},function(a){f.error(a)})}),a.initList=function(){a.integrations=e.query({},function(a){c.syncUpdates("integration",a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.integrations.list",{url:"/list",templateUrl:"app/integration/list/list.html",controller:"IntegrationListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty",{url:"/jscripty",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("JscriptyProject",["$resource",function(a){return a("/api/jscripty/projects/:id/:controller/:action/:action2",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("JscriptyProjectListCtrl",["$scope","$uibModal","JscriptyProject","gridOptions","Auth",function(a,b,c,d,e){a.Auth=e,a.initView=function(){var b={exporterCsvFilename:"jscriptyProjects.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:300,buttons:[{"class":"blue-hoki",icon:"icon-settings",href:"/jscripty/projects/view/{{row.entity.id}}",hide:e.isAgent()},{"class":" green-turquoise",icon:"fa fa-play",onClick:"grid.appScope.openJscriptyTab(row.entity)"},{"class":"purple",icon:"icon-book-open",href:"/jscripty/projects/report/{{row.entity.id}}/sessions",hide:e.isAgent()},{"class":"red-sunglo",icon:"fa fa-trash",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)",hide:e.isAgent()}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/jscripty/project/list/list.create.modal.html",controller:"JscriptyProjectListCreateCtrl"});c.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("JscriptyProjectListCreateCtrl",["$scope","$translate","$uibModalInstance","JscriptyProject","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){console.log(a),e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty.projects.list",{url:"/list",templateUrl:"app/jscripty/project/list/list.html",controller:"JscriptyProjectListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty.projects",{url:"/projects",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("JscriptyProjectReportCtrl",["$scope","uiGridConstants","$http","$state","$stateParams","socket","Auth","Modal","xAlert","$translate","$rootScope","gridOptions","JscriptyProject","$location",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){a.projectStats={started:0,incomplete:0,completed:0},a.projectId=e.id,a.initView=function(){m.get({id:e.id}).$promise.then(function(b){a.project=b})["catch"](function(a){i.error(a)}),m.get({id:e.id,controller:"sessions"}).$promise.then(function(b){var c=_.groupBy(b.rows,"status");a.projectStats.started=c.started?c.started.length:0,a.projectStats.completed=c.completed?c.completed.length:0,a.projectStats.incomplete=c.incomplete?c.incomplete.length:0})["catch"](function(a){i.error(a)})},a.pdf=function(a,b){var c=[];if(a){var d=html2canvas(document.getElementById(a)),e=d.parse(),f=d.render(e),g=f.toDataURL("image/png");c.push({image:g,width:500,style:"img"})}b.length&&_.forEach(b,function(a){var b=html2canvas(document.getElementById(a.question_id)),d=b.parse(),e=b.render(d),f=e.toDataURL("image/png");c.push({image:f,width:500,style:"img"})});var h={content:c};pdfMake.createPdf(h).download("Project_summary.pdf")},a.getProjectSessions=function(){var c={exporterCsvFilename:"jscriptyProjects.csv",columnDefs:[{name:"session_id",displayName:"APPLICATION_SESSIONID"},{name:"queue",displayName:"APPLICATION_QUEUE"},{name:"membername",displayName:"APPLICATION_AGENT"},{name:"calleridnum",displayName:"APPLICATION_CALLERIDNUM"},{name:"createdAt",displayName:"APPLICATION_STARTEDAT",filterHeaderTemplate:'
',filters:[{name:"From",condition:b.filter.GREATER_THAN_OR_EQUAL},{name:"To",condition:b.filter.LESS_THAN_OR_EQUAL}]},{name:"completedAt",displayName:"APPLICATION_COMPLETEDAT",filterHeaderTemplate:'
',filters:[{name:"From",condition:b.filter.GREATER_THAN_OR_EQUAL},{name:"To",condition:b.filter.LESS_THAN_OR_EQUAL}]},{name:"status",displayName:"APPLICATION_STATUS"},{name:"last_question_id",displayName:"APPLICATION_LASTQUESTIONID"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/jscripty/projects/report/{{row.entity.projectId}}/session/{{row.entity.session_id}}",name:"Detail"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteSession(row.entity.session_id)"}]}]};a.gridOptions=l.gridOptions(m,c,a,{id:e.id,controller:"sessions"})},a.deleteSession=function(b){m["delete"]({id:e.id,controller:"sessions",action:b}).$promise.then(function(b){a.gridOptions.getPage(),a.initView(),i.show(j.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){i.error(a)})},a.getSessionDetails=function(){m.get({id:e.id,controller:"sessions",action:e.sessionId}).$promise.then(function(b){a.session=b,a.sessionQuestions=b.ReportJscriptyQuestions})["catch"](function(a){i.error(a)})},a.getQuestionSummary=function(){var b={exporterCsvFilename:"jscriptyProjects.csv",columnDefs:[{name:"question_id",displayName:"APPLICATION_QUESTIONID"},{name:"question_type",displayName:"APPLICATION_QUESTIONTYPE"},{name:"question_label",displayName:"APPLICATION_QUESTIONLABEL"},{name:"question_text",displayName:"APPLICATION_QUESTION"},{name:"count",displayName:"APPLICATION_COUNT",enableFiltering:!1},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/jscripty/projects/report/"+e.id+"/detail/{{row.entity.question_id}}",name:"Detail"}]}]};a.gridOptions=l.gridOptions(m,b,a,{id:e.id,controller:"questions",action:"summary"})},a.getQuestionInputs=function(){var b={exporterCsvFilename:"jscriptyProjects.csv",columnDefs:[{name:"session_id",displayName:"APPLICATION_SESSIONID"},{name:"question_id",displayName:"APPLICATION_QUESTIONID",enableFiltering:!1},{name:"question_label",displayName:"APPLICATION_QUESTIONLABEL",enableFiltering:!1},{name:"question_text",displayName:"APPLICATION_QUESTION",enableFiltering:!1},{name:"input_label",displayName:"APPLICATION_INPUTLABEL",enableFiltering:!1},{name:"input_value",cellTemplate:'
{{row.entity.input_value}}
',displayName:"APPLICATION_INPUTVALUE",enableFiltering:!1}]};a.gridOptions=l.gridOptions(m,b,a,{id:e.id,controller:"inputs"})},a.getProjectDetail=function(){a.projectDetail=[],m.query({id:e.id,controller:"questions",action:"detail"}).$promise.then(function(b){console.log(e.questionId),e.questionId?a.projectDetail.push(_.find(b,function(a){return a.question_id==parseInt(e.questionId)})):a.projectDetail=b,console.log(a.projectDetail)})["catch"](function(a){i.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty.projects.report",{url:"/report/:id",templateUrl:"app/jscripty/project/report/report.html",controller:"JscriptyProjectReportCtrl"}).state("main.jscripty.projects.report.sessions",{url:"/sessions",templateUrl:"app/jscripty/project/report/report.sessions.html"}).state("main.jscripty.projects.report.summary",{url:"/summary",templateUrl:"app/jscripty/project/report/report.summary.html"}).state("main.jscripty.projects.report.inputs",{url:"/inputs",templateUrl:"app/jscripty/project/report/report.inputs.html"}).state("main.jscripty.projects.report.detail",{url:"/detail",templateUrl:"app/jscripty/project/report/report.detail.html"}).state("main.jscripty.projects.report.questionDetail",{url:"/detail/:questionId",controller:"JscriptyProjectReportCtrl",templateUrl:"app/jscripty/project/report/report.detail.html"}).state("main.jscripty.projects.report.sessionDetail",{url:"/session/:sessionId",controller:"JscriptyProjectReportCtrl",templateUrl:"app/jscripty/project/report/report.session.detail.html"})}]),angular.module("xCallyShuttleApp").controller("JscriptyProjectViewCtrl",["$scope","$http","$state","$stateParams","socket","Auth","Modal","xAlert","$translate","$rootScope",function(a,b,c,d,e,f,g,h,i,j){a.jscriptyProject={},a.getProject=function(){b.get("/api/jscripty/projects/"+d.id).success(function(b){a.jscriptyProject=b,angular.element(document).ready(function(){window.onerror=function(a,b,c){try{if(null!=a&&-1!=a.indexOf("Script error."));else{var d=new Image;d.src="assets/plugins/mxgraph/images/1x1.png?msg="+encodeURIComponent(a)+"&url="+encodeURIComponent(b)+"&lnum="+encodeURIComponent(c)}}catch(e){}},b.token=f.getToken();var a=new EditorUi(new Editor);a.openString(b.draft,b.name,b),a.editor.graphChangeListener=function(a,b){var c=b.properties.rtChange||!1;c||(this.modified=!0)}}),e.syncUpdates("jscripty_project",[b],function(a,c,d){c.id===b.id})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.jscripty.projects.view",{url:"/view/:id",templateUrl:"app/jscripty/project/view/view.html",controller:"JscriptyProjectViewCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",serie:!0,cache:!1,files:["assets/plugins/mxgraph/css/common.css","assets/plugins/mxgraph/css/explorer.css","assets/plugins/mxgraph/styles/grapheditor.css","assets/plugins/mxgraph/styles/custom.css","assets/plugins/jscripty/js/custom.js","assets/plugins/mxgraph/js/mxClient.js","assets/plugins/jscripty/js/Editor.js","assets/plugins/jscripty/js/Graph.js","assets/plugins/jscripty/js/EditorUi.js","assets/plugins/jscripty/js/Actions.js","assets/plugins/jscripty/js/Menus.js","assets/plugins/jscripty/js/Sidebar.js","assets/plugins/jscripty/js/Toolbar.js","assets/plugins/jscripty/js/Dialogs.js"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("LandingCtrl",["$scope","$location","$window","$timeout","Auth","Setting","YourDashboard",function(a,b,c,d,e,f,g){function h(b,c){var d,f,g=b.length;for(d=0;g>d;d++)if(_.includes(c,b[d].id))if(b[d].SubModules&&b[d].SubModules.length){if(f=h(b[d].SubModules,c))return f}else switch(b[d].id){case 2:var i={};i[e.getRole()]=!0;var j=_.find(a.tempDashboards,i);if(j)return"/tools/yourdashboards/show/"+j.id;break;default:return b[d].path}}function i(c){c||(a.message="MESSAGE_NO_AVAILABLE_MODULES"),d(function(){b.path(c)},500)}a.initLanding=function(){a.year=moment().year(),f.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)});var c,d;return(d=e.getCurrentUser().$promise)?d.then(function(b){switch(c=b,c.role){case"user":if(_.includes(_.map(b.Modules,"id"),2))return g.get().$promise.then(function(d){a.tempDashboards=d.rows,i(h(c.Modules,_.map(b.Modules,"id")))})["catch"](function(){_.remove(c.Modules,{id:2}),i(h(c.Modules,_.map(b.Modules,"id")))});i(h(c.Modules,_.map(b.Modules,"id")));break;case"admin":case"agent":i("/dashboard/voice")}})["catch"](function(a){console.error(a),b.path("/login")}):void b.path("/login")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("landing",{url:"/landing",templateUrl:"app/landing/landing.html",controller:"LandingCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/error.css","assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("LoginCtrl",["$scope","Auth","$location","$window","$rootScope","Setting","xAlert","$stateParams",function(a,b,c,d,e,f,g,h){a.year=moment().year(),a.recovered=h.reset,a.userLogin={},a.userSignUp={},a.loginSubmitted=!1,a.signupSubmitted=!1,a.errorLogin=!1,a.errorSignup=!1,a.errorLog="",a.forgotPassword=!1,a.showRecoverMessage=!1,a.flagLogin1=!1,a.getInfo=function(){return f.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)})},a.toggleLogin=function(){a.flagLogin1=!a.flagLogin1},a.toggleForgotPassword=function(b){a.showRecoverMessage=!1,a.userLogin.email="",a.forgotPassword=b},e.bodyLayout="login",a.$on("$viewContentLoaded",function(){Metronic.init(),Layout.init()}),a.recover=function(){b.recover({email:a.userLogin.email}).then(function(){a.showRecoverMessage=!0})["catch"](function(b){console.log(b),a.showRecoverMessage=!1,g.error(b)})},a.login=function(d){a.loginSubmitted=!0,d.$valid?b.login({name:a.userLogin.name,password:a.userLogin.password,remember:a.userLogin.remember}).then(function(){c.path("/landing")})["catch"](function(b){a.errorLog=b.message||"error",a.errorLogin=!0}):a.errorLogin=!0},a.signup=function(c){a.signupSubmitted=!0,c.$valid?b.createUser({email:a.userSignUp.email,fullname:a.userSignUp.fullname,name:a.userSignUp.name,password:a.userSignUp.password,role:a.userSignUp.role,online:!0})["catch"](function(b){a.errorLog=b.message||"error",a.errorSignup=!0}):a.errorSignup=!0},a.loginOauth=function(a){d.location.href="/auth/"+a}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("login",{url:"/login",templateUrl:"app/login/login.html",params:{reset:null},controller:"LoginCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("Action",["$resource",function(a){return a("/api/actions/:name/:controller",{name:"@name"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("Ami",["$resource",function(a){return a("/api/ami/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("ChooseContactModalCtrl",["$scope","$uibModalInstance","data","xAlert","$translate","Contact",function(a,b,c,d,e,f){function g(){return f.get({id:c.eventId,controller:"checkevent"}).$promise.then(function(b){a.contacts=b.rows})["catch"](function(a){d.error(a)})}function h(){return delete c.type,f.get(c).$promise.then(function(b){a.contacts=b.rows})["catch"](function(a){d.error(a)})}a.open=function(a){b.close(a)},a.getContacts=function(){switch(c.type){case"event":g();break;case"detail":h();break;default:b.dismiss("cancel")}},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("CloseEditedTabModalCtrl",["$scope","$uibModalInstance",function(a,b){a.close=function(){b.close()},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("CloseEditedTabModalJscriptyCtrl",["$scope","$uibModalInstance","project","JscriptyProject","xAlert",function(a,b,c,d,e){a.init=function(){a.project=c},a.close=function(){d.update({id:a.project.projectId,controller:"sessions",action:a.project.sessionId},{status:"incomplete",completedAt:Date(),last_question_id:a.project.lastQuestionId}).$promise.then(function(a){e.show("Project Ended","success")}),b.close()},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("ContactManagerSetDisposition",["$scope","$uibModalInstance","VoiceDisposition",function(a,b,c){a.initDisposition=function(){return c.get().$promise.then(function(b){a.dispositions=b.rows})["catch"](function(a){console.error(a)})},a.item={},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").controller("customGridDateFilterModalCtrl",["$scope","$rootScope","$log","$uibModalInstance","term","hasTime",function(a,b,c,d,e,f){if(a.hasTime=f,a.dateTime={},e)if(f){var g=e.split(" ");a.dateTime.filterDate=moment(g[0]),a.dateTime.time=e[1]?moment(g[1],"HH:mm"):moment()}else a.dateTime.filterDate=moment(e);else f&&(a.dateTime.time=moment());a.setFilterDate=function(b){d.close({date:moment(b).format("YYYY-MM-DD").toString(),time:f?a.dateTime.time?moment(a.dateTime.time).format("HH:mm").toString():moment().format("HH:mm").toString():null})},a.cancelDateFilter=function(){d.dismiss()}}]),angular.module("xCallyShuttleApp").controller("customGridTagsModalCtrl",["$scope","$rootScope","$log","$uibModalInstance","term","Tag","xAlert",function(a,b,c,d,e,f,g){a.initModal=function(){return a.item={},f.get().$promise.then(function(b){a.tags=_.map(b.rows,"name"),a.item.myTags=e})["catch"](function(a){console.log("error retrieving tags"),g.error(a),d.dismiss()})},a.setFilterTags=function(){d.close(a.item.myTags)},a.cancelTagsFilter=function(){d.dismiss()}}]),angular.module("xCallyShuttleApp").factory("templateVariable",["$translate",function(a){return[{id:"voice",label:a.instant("APPLICATION_VOICE"),title:a.instant("APPLICATION_VOICE"),groups:[{label:a.instant("APPLICATION_QUEUE"),values:[{value:"{{uniqueid}}",label:a.instant("APPLICATION_UNIQUEID"),description:a.instant("APPLICATION_UNIQUEID")},{value:"{{calleridnum}}",label:a.instant("APPLICATION_CALLERIDNUM"),description:a.instant("APPLICATION_CALLERIDNUM")},{value:"{{calleridname}}",label:a.instant("APPLICATION_CALLERIDNAME"),description:a.instant("APPLICATION_CALLERIDNAME")},{value:"{{queue}}",label:a.instant("APPLICATION_QUEUE"),description:a.instant("APPLICATION_QUEUE")},{value:"{{interface}}",label:a.instant("APPLICATION_INTERFACE"),description:a.instant("APPLICATION_INTERFACE")},{value:"{{membername}}",label:a.instant("APPLICATION_MEMBERNAME"),description:a.instant("APPLICATION_MEMBERNAME")},{value:"{{holdtime}}",label:a.instant("APPLICATION_HOLDTIME"),description:a.instant("APPLICATION_HOLDTIME")},{value:"{{talktime}}",label:a.instant("APPLICATION_TALKTIME"),description:a.instant("APPLICATION_TALKTIME")},{value:"{{connectedlinenum}}",label:a.instant("APPLICATION_CONNECTEDLINENUM"),description:a.instant("APPLICATION_CONNECTEDLINENUM")},{value:"{{connectedlinename}}",label:a.instant("APPLICATION_CONNECTEDLINENAME"),description:a.instant("APPLICATION_CONNECTEDLINENAME")},{value:"{{agentconnectAt}}",label:a.instant("APPLICATION_CONNECTED_AT"),description:a.instant("APPLICATION_CONNECTED_AT")},{value:"{{agentcalledAt}}",label:a.instant("APPLICATION_CALLED_AT"),description:a.instant("APPLICATION_CALLED_AT")},{value:"{{agentcompleteAt}}",label:a.instant("APPLICATION_COMPLETED_AT"),description:a.instant("APPLICATION_AGENT_CALLED_AT")},{value:"{{reason}}",label:a.instant("APPLICATION_REASON"),description:a.instant("APPLICATION_REASON")},{value:"{{lastevent}}",label:a.instant("APPLICATION_LAST_EVENT"),description:a.instant("APPLICATION_LAST_EVENT")},{value:"{{channel}}",label:a.instant("APPLICATION_CHANNEL"),description:a.instant("APPLICATION_CHANNEL")}]}]},{id:"chat",label:a.instant("APPLICATION_CHAT"),title:a.instant("APPLICATION_CHAT"),groups:[{label:a.instant("APPLICATION_VARIABLES"),values:[{value:"{{username}}",label:a.instant("APPLICATION_USERNAME"),description:a.instant("APPLICATION_USERNAME")},{value:"{{email}}",label:a.instant("APPLICATION_MAIL"),description:a.instant("APPLICATION_MAIL")},{value:"{{text}}",label:a.instant("APPLICATION_TEXT"),description:a.instant("APPLICATION_TEXT")},{value:"{{chatWebsite}}",label:a.instant("APPLICATION_WEBSITE"),description:a.instant("APPLICATION_WEBSITE")}]}]},{id:"mail",label:a.instant("APPLICATION_MAIL"),title:a.instant("APPLICATION_MAIL"),groups:[{label:a.instant("APPLICATION_INTERACTION"),values:[{value:"{{interactionId}}",label:a.instant("APPLICATION_INTERACTION_ID"),description:a.instant("APPLICATION_INTERACTION_ID")},{value:"{{subject}}",label:a.instant("APPLICATION_SUBJECT"),description:a.instant("APPLICATION_SUBJECT")},{value:"{{{body}}}",label:a.instant("APPLICATION_MESSAGE"),description:a.instant("APPLICATION_MESSAGE")},{value:"{{accountName}}",label:a.instant("APPLICATION_ACCOUNT"),description:a.instant("APPLICATION_ACCOUNT")},{value:"{{from}}",label:"From",description:"From"},{value:"{{to}}",label:"To",description:"To"},{value:"{{cc}}",label:"Cc",description:"Cc"},{value:"{{agentName}}",label:a.instant("APPLICATION_AGENT_NAME"),description:a.instant("APPLICATION_AGENT_NAME")},{value:"{{agentEmail}}",label:a.instant("APPLICATION_AGENT_EMAIL"),description:a.instant("APPLICATION_AGENT_EMAIL")},{value:"{{createdAt}}",label:a.instant("APPLICATION_CREATED_AT"),description:a.instant("APPLICATION_CREATED_AT")}]}]}]}]),angular.module("xCallyShuttleApp").controller("gridDatePickerFilterCtrl",["$scope","$timeout","$uibModal","uiGridConstants",function(a,b,c,d){b(function(){a.col.colDef.name;a.openDatePicker=function(b){var d=c.open({templateUrl:"app/main/customDateFilter.modal.html",controller:"customGridDateFilterModalCtrl",size:"md",windowClass:"custom-date-filter-modal",resolve:{term:[function(){return b.term||null}],hasTime:b.hasTime||!1}});d.result.then(function(c){a.colFilter.listTerm=[],a.colFilter.term=c.date,b.hasTime&&(a.colFilter.term+=" "+c.time)})}})}]),angular.module("xCallyShuttleApp").factory("gridOptions",["Modal","xAlert","$translate","$interval","$q","usSpinnerService",function(a,b,c,d,e,f){return{gridOptions:function(d,g,h,i,j,k,l){function m(a,b){a.filter&&a.filter.term&&b&&(o[a.name]=a.filter.term),a.filters&&(a.filters.length>1?a.filters.forEach(function(b){b.term?64===b.condition?o[a.name+"_uiFrom"]=b.term:256===b.condition&&(o[a.name+"_uiTo"]=b.term):64===b.condition?delete o[a.name+"_uiFrom"]:256===b.condition&&delete o[a.name+"_uiTo"]}):a.filters.length&&a.filters[0].term?o[a.name]=a.filters[0].term:delete o[a.name])}h.id=[];var n=k?"gridOptions"+k:"gridOptions",o={offset:0,limit:10},p={offset:0,limit:10};g.draggable&&(g.rowTemplate='
',g.useExternalPagination=!1,g.enablePaginationControls=!1,g.showGridFooter=!1);var q=function(a){var b=a&&a>h[n].paginationPageSize?h[n].paginationPageSize:a,c=b?30*b+120:177,d=angular.element(document.getElementsByName(n)).length?angular.element(document.getElementsByName(n)[0]):angular.element(document.getElementsByClassName("ui-grid")[0]);d.css("height",c+"px")},r=function(a,b){return h[n].enablePaginationControls||(delete o.offset,delete o.limit),f.spin("spinner-grid"),i=a||i,d=b||d,d.get(i?_.merge(o,i):o).$promise.then(function(a){h[n].totalItems=a.count,h[n].data=a.rows,q(a.rows.length),l&&l()})["catch"](function(a){console.error(a)})["finally"](function(){f.stop("spinner-grid")})};return h.deleteItem=a.confirm["delete"](function(a){var e=i?angular.copy(i):{};return _.merge(e,{id:a}),d.remove(e).$promise.then(function(){r(),b.show(c.instant("MESSAGE_WELL_DONE")+"!","success"),h.gridApi.selection.clearSelectedRows(),h.id=[]})["catch"](function(a){b.error(a)})}),h.deleteItems=a.confirm["delete"](function(){var a=i?angular.copy(i):{};return _.merge(a,{ids:h.id}),d["delete"](a).$promise.then(function(){r(),b.show(c.instant("MESSAGE_WELL_DONE")+"!","success"),h.gridApi.selection.clearSelectedRows(),h.id=[]})["catch"](function(a){b.error(a)})}),g.columnDefs.forEach(function(a){m(a,!0),a.hasOwnProperty("displayName")||(a.displayName="APPLICATION_"+a.name.toUpperCase()),a.headerCellFilter="translate",a.hasOwnProperty("buttons")&&(a.displayName="",a.cellClass="ui-grid-vcenter",a.enableSorting=!1,a.enableFiltering=!1,a.enableColumnMenu=!1,a.cellTemplate="
",a.buttons.forEach(function(b){if(b.directive)a.cellTemplate+=b.directive;else{if(a.cellTemplate+="':"",b.name)switch(b.name){case"delete":a.cellTemplate+='';break;case"profile":case"settings":case"detail":case"embedding":a.cellTemplate+='';break;case"view":a.cellTemplate+='';break;case"clone":a.cellTemplate+='';break;case"permits":a.cellTemplate+='';break;case"copy":a.cellTemplate+='';break;case"select":a.cellTemplate+='';break;case"preview":a.cellTemplate+='';break;case"contacts":a.cellTemplate+='';break;case"download":case"export":a.cellTemplate+='';break;case"agents":a.cellTemplate+='';break;case"run":a.cellTemplate+='';break;case"mailRoom":a.cellTemplate+='';break;case"chatRoom":a.cellTemplate+='';break;case"faxRoom":a.cellTemplate+='';break;case"smsRoom":a.cellTemplate+='';break;case"check":a.cellTemplate+='';break;case"queues":a.cellTemplate+='';break;default:a.cellTemplate+="{{'APPLICATION_"+b.name.toUpperCase()+"' | translate}}"}else a.cellTemplate+=b.displayName?"{{'"+b.displayName+"' | translate}}":"";a.cellTemplate+=" "}}),a.cellTemplate+="
",delete a.buttons)}),_.merge({enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableRowSelection:!0,enableSelectAll:!0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,multiSelect:!0,getPage:r,gridMenuTitleFilter:function(a){var b=e.defer();return b.resolve(c.instant(a)),b.promise},exporterAllDataFn:function(){return p.offset=o.offset,p.limit=o.limit,o={offset:0,limit:null},r().then(function(){o.offset=p.offset,o.limit=p.limit,r()})},exporterFieldCallback:function(a,b,c,d){if("applications"===c.field&&b.entity.Applications){var e="";return _.forEach(b.entity.Applications,function(a){e+=a.app+"("+a.appdata.join(",")+")"}),e}return d},exporterHeaderFilter:c.instant,onRegisterApi:function(a){h.gridApi=a,h.gridApi.selection&&(h.gridApi.selection.on.rowSelectionChanged(h,function(a){a.isSelected?h.id.push(h.gridApi.grid.options.primaryKey?a.entity[h.gridApi.grid.options.primaryKey]:a.entity.id):_.pull(h.id,h.gridApi.grid.options.primaryKey?a.entity[h.gridApi.grid.options.primaryKey]:a.entity.id)}),h.gridApi.selection.on.rowSelectionChangedBatch(h,function(a){a[0].isSelected?h.id=_.union(h.id,_.map(a,h.gridApi.grid.options.primaryKey?"entity."+h.gridApi.grid.options.primaryKey:"entity.id")):_.map(a,h.gridApi.grid.options.primaryKey?"entity."+h.gridApi.grid.options.primaryKey:"entity.id").forEach(function(a){_.pull(h.id,a)})})),h.gridApi.core.on.sortChanged(h,function(a,b){0===b.length?o.order=null:o.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),r()});for(var e=0;e
'+c.instant("TOUR_MAIN_DISCOVER_MOTION")+"
",curtainClass:"myCurtainClass"}]},(f.isAdmin()||b.userModules[1])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/dashboard/voice"},{type:"title",heading:c.instant("TOUR_MAIN_DASHBOARD"),text:c.instant("TOUR_MAIN_DASHBOARD_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[2])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/tools/yourdashboards/show/1"},{type:"title",heading:c.instant("TOUR_MAIN_YOURDASHBOARD"),text:c.instant("TOUR_MAIN_YOURDASHBOARD_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[4])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/staff/agents/list"},{type:"title",heading:c.instant("TOUR_MAIN_AGENTS"),text:c.instant("TOUR_MAIN_AGENTS_MESSAGE"),curtainClass:"myCurtainClass"}])),f.isAdmin()&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/channels/voice/queues/list"},{type:"title",heading:c.instant("TOUR_MAIN_VOICE_QUEUE"),text:c.instant("TOUR_MAIN_VOICE_QUEUE_ADD_MESSAGE"),curtainClass:"myCurtainClass"}])),b.license.chat&&(f.isAdmin()||b.userModules[30])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/channels/chat/queues/list"},{type:"title",heading:c.instant("TOUR_MAIN_CHAT_QUEUE"),text:c.instant("TOUR_MAIN_CHAT_QUEUE_MESSAGE"),curtainClass:"myCurtainClass"}])),b.license.openchannel&&(f.isAdmin()||b.userModules[46])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/channels/openchannel/accounts/list"},{type:"title",heading:c.instant("TOUR_MAIN_OPENCHANNEL"),text:c.instant("TOUR_MAIN_OPENCHANNEL_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[14])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/square/projects/list"},{type:"title",heading:c.instant("TOUR_MAIN_SQUARE_PROJECT"),text:c.instant("TOUR_MAIN_SQUARE_PROJECT_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[52])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/tools/trunks/list"},{type:"title",heading:c.instant("TOUR_MAIN_TRUNKS"),text:c.instant("TOUR_MAIN_TRUNKS_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[52])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/tools/triggers/list"},{type:"title",heading:c.instant("TOUR_MAIN_TRIGGERS"),text:c.instant("TOUR_MAIN__MESSAGE"),curtainClass:"myCurtainClass"}])),b.license.jscripty&&(f.isAdmin()||b.userModules[50])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/jscripty/projects/list"},{type:"title",heading:c.instant("TOUR_MAIN_JSCRIPTY"),text:c.instant("TOUR_MAIN_JSCRIPTY_MESSAGE"),curtainClass:"myCurtainClass"}])),(f.isAdmin()||b.userModules[17])&&(b.tourConfig.main=b.tourConfig.main.concat([{type:"location_change",path:"/analytics/reports/list"},{type:"title",heading:c.instant("TOUR_MAIN_REPORTS"),text:c.instant("TOUR_MAIN_REPORTS_MESSAGE"),curtainClass:"myCurtainClass"}])),b.tourConfig.main=b.tourConfig.main.concat([{type:"title",heading:c.instant("TOUR_MAIN_END"),text:c.instant("TOUR_MAIN_END_MESSAGE"),curtainClass:"myCurtainClass"}])}a.awesomeThings=[],b.workspaces=[],a.Auth=f,b.userModules={},a.keepMeLoggedModalInstance=void 0,f.getCurrentUser().$promise.then(function(a){a.Modules.forEach(function(a){b.userModules[a.id]=!0}),o()})["catch"](function(a){g.error(a)}),b.onTourFinish=function(){n.set("skipTour",!0),b.tempTourPath&&m.path(b.tempTourPath)},b.onTourSkip=function(){n.set("skipTour",!0)},d(function(){n.get("skipTour")||(b.activeTour.main=!0)}),a.select=function(a){switch(a.type){case"chatRoom":case"mailRoom":case"faxRoom":a.unread=0}},e.socket.on("agent:save",function(b){!b.online&&f.isAgent()&&(a.keepMeLoggedModalInstance||(a.keepMeLoggedModalInstance=h.open({animation:!0,backdrop:"static",keyboard:!1,templateUrl:"app/main/keepMeLogged.modal.html",controller:["$scope","$uibModalInstance",function(a,b){a.close=function(){b.close(!0)},a.cancel=function(){b.close(!1)}}]}),a.keepMeLoggedModalInstance.result.then(function(a){a?l.location.reload():(f.logout(),m.path("/login"))})))}),a.openTdTab=function(a){b.workspaces.push({type:"tdDisposal",name:"Motion Dialer Disposition","class":"icon-control-forward",active:!0,spooler:a})},a.deselect=function(){},a.isAdmin=f.isAdmin,a.isLoggedIn=f.isLoggedIn,a.getCurrentUser=f.getCurrentUser,a.CurrentUser=f.getCurrentUser(),e.socket.on("user_has_voice_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),e.socket.on("user_has_chat_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),e.socket.on("user_has_mail_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),e.socket.on("user_has_fax_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),e.socket.on("user_has_sms_queue_permit:change",function(){a.CurrentUser=f.getCurrentUser()}),a.mainTab={active:!0},a.closeJscriptyTab=function(a){if(b.workspaces[a].edited){var c=h.open({animation:!0,templateUrl:"app/main/closeEditedTab.modal.jscripty.html",controller:"CloseEditedTabModalJscriptyCtrl",resolve:{project:b.workspaces[a]}});c.result.then(function(){b.workspaces.splice(a,1)})}else b.workspaces.splice(a,1)},b.closeTab=function(a){var c;b.workspaces[a].edited?"jscripty"===b.workspaces[a].type?b.workspaces[a].end():(c=h.open({animation:!0,templateUrl:"app/main/closeEditedTab.modal.html",controller:"CloseEditedTabModalCtrl"}),c.result.then(function(){b.workspaces.splice(a,1)},function(){i.info("Modal dismissed at: "+new Date)})):b.workspaces.splice(a,1)},a.createContact=function(d,e){return e.CompanyId||delete e.CompanyId,k.save(e).$promise.then(function(e){b.workspaces.splice(d,1);var f=e.firstName;e.lastName&&(f+=" "+e.lastName),a.openContactTab({firstName:e.firstName,lastName:e.lastName,id:e.id}),g.show(c.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){g.error(a)})};var p=function(b){var c=h.open({animation:!0,templateUrl:"app/main/chooseContact.modal.html",controller:"ChooseContactModalCtrl",resolve:{data:function(){return{type:"event",eventId:b.id}}}});c.result.then(function(c){c?a.openContactTab(c,b):a.newContact(b)},function(){i.info("Modal dismissed at: "+new Date)})};a.updateContact=function(a,d){var e=angular.copy(d);return e.CompanyId||(e.CompanyId=null),k.update({id:e.id},e).$promise.then(function(){b.workspaces[a].edited=!1,g.show(c.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){g.error(a)})},e.socket.on("report_integration:contactmanager",function(a){p(a)}),e.socket.on("report_integration:jscripty",function(b){a.openJscriptyTab({name:"Jscripty",id:b.projectId,calleridnum:b.calleridnum,calleridname:b.calleridname,queue:b.queue,membername:b.membername})}),e.socket.on("report_integration:salesforce",function(a){l.open(a.url,"_blank")}),e.socket.on("report_integration:tdDisposal",function(b){a.openTdTab(b)}),b.openContactTab=function(a,c){var d=_.find(b.workspaces,{contactID:a.id});if(d)d.active=!0;else{var e=a.firstName;a.lastName&&(e+=" "+a.lastName),b.workspaces.push({name:e,type:"contact",contactID:a.id,"class":"icon-user",active:!0,data:c||null})}},a.openJscriptyTab=function(a){b.workspaces.push({name:a.name,type:"jscripty",active:!0,data:a})},a.newContact=function(a){b.workspaces.push({name:"New Contact",type:"newContact","class":"icon-user",active:!0,data:a||null})},a.$on("$viewContentLoaded",function(){Metronic.init()}),b.language=c.use(),a.changeLanguage=function(a){return c.use(a).then(function(a){b.language=a,-1!==["main.jscripty.projects.view","main.square.projects.view"].indexOf(j.current.name)&&l.location.reload()})["catch"](function(a){console.error(a)})},a.$on("$destroy",function(){console.log("main $destroy"),e.unsyncUpdates("user_has_voice_queue_permit"),e.unsyncUpdates("user_has_chat_queue_permit"),e.unsyncUpdates("user_has_mail_queue_permit"),e.unsyncUpdates("user_has_fax_queue_permit"),e.unsyncUpdates("user_has_sms_queue_permit")})}]),angular.module("xCallyShuttleApp").directive("ngSpinnerBar",["$rootScope",function(a){return{link:function(b,c){c.addClass("hide"),a.$on("$stateChangeStart",function(){"spinner-page"===c[0].id&&c.removeClass("hide")}),a.$on("$stateChangeSuccess",function(){"spinner-page"===c[0].id&&(c.addClass("hide"),$("body").removeClass("page-on-load"),Layout.setSidebarMenuActiveLink("match"),setTimeout(function(){Metronic.scrollTop()},1e3))}),a.$on("$spinnerStart",function(){"spinner-request"===c[0].id&&c.removeClass("hide")}),a.$on("$spinnerStop",function(){"spinner-request"===c[0].id&&c.addClass("hide")}),a.$on("$stateNotFound",function(){"spinner-page"===c[0].id&&c.addClass("hide")}),a.$on("$stateChangeError",function(){"spinner-page"===c[0].id&&c.addClass("hide")})}}}]).directive("a",function(){return{restrict:"E",link:function(a,b,c){(c.ngClick||""===c.href||"#"===c.href)&&b.on("click",function(a){a.preventDefault()})}}}).directive("nxEqual",function(){return{require:"ngModel",link:function(a,b,c,d){return c.nxEqual?(a.$watch(c.nxEqual,function(a){d.$setValidity("nxEqual",a===d.$viewValue)}),void d.$parsers.push(function(b){var e=b===a.$eval(c.nxEqual);return d.$setValidity("nxEqual",e),e?b:void 0})):void console.error("nxEqual expects a model as an argument!")}}}).directive("ngEnter",function(){return function(a,b,c){b.bind("keydown keypress",function(b){13===b.which&&(a.$apply(function(){a.$eval(c.ngEnter)}),b.preventDefault())})}}).directive("dropdownMenuHover",function(){return{link:function(a,b){b.dropdownHover()}}}).directive("uiSelectRequired",function(){return{require:"ngModel",link:function(a,b,c,d){d.$validators.uiSelectRequired=function(a){return a&&a.length}}}}).directive("rpattern",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){function e(a,b){return null==b||""===b||!h||a.test(b)?(d.$setValidity("pattern",!0),b):void d.$setValidity("pattern",!1)}var f,g=c.rpattern,h=!0;g&&(g.match(/^\/(.*)\/$/)?(g=new RegExp(g.substr(1,g.length-2)),f=function(a){return e(g,a)}):f=function(b){var c=a.$eval(g);if(!c||!c.test)throw new Error("Expected "+g+" to be a RegExp but was "+c);return e(c,b)}),d.$formatters.push(f),d.$parsers.push(f),c.$observe("required",function(a){h=a,f(d.$viewValue)})}}}).directive("newContact",["$compile","xAlert","socket","$translate","$timeout","List","Tag","Company","ReportCall","$uibModal","$rootScope","Auth",function(a,b,c,d,e,f,g,h,i,j,k,l){return{restrict:"E",scope:{workspace:"=",index:"=",submit:"&onSubmit"},templateUrl:"app/main/template/template.contactTab.html",compile:function(a,m){return function(a,m,n){function o(){a.$watch("contact",function(b,c){angular.equals(b,c)||(a.workspace.edited=!0)},!0)}a.license=k.license,a.Auth=l,a.forms={general:{}},a.firstLoad=!0,a.detail={tab:"main"},a.contact={CompanyId:"",disposed:!1},a.submitButtonLabel=d.instant("APPLICATION_CONFIRM"),a.getAgent=function(){return l.getCurrentUser().$promise.then(function(b){a.agent=b})["catch"](function(a){b.error(a)})},a.callPhoneBar=function(c,e){var f;switch(e){case"call":f="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/originate/"+c;break;case"transfer":f="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/transfer?number="+c;break;default:f="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/originate/"+c}return $http.get(f).success(function(){b.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){b.error(a)})},a.dispose=function(){return j.open({animation:!0,templateUrl:"app/main/cm.disposition.html",controller:"ContactManagerSetDisposition"}).result.then(function(c){return i.update({id:a.workspace.data.uniqueid},c).$promise.then(function(){a.contact.disposed=!0,b.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})})},a.init=function(){a.workspace.data&&(a.contact.firstName=a.workspace.data.calleridname?a.workspace.data.calleridname:a.workspace.data.messageId?a.workspace.data.messageId:a.workspace.data.uniqueid?a.workspace.data.uniqueid:"",a.workspace.data.calleridnum&&(a.contact.phone=a.workspace.data.calleridnum),a.workspace.data.from&&(a.contact.email=a.workspace.data.from)),a.getTags(),a.getCompanies(),a.getLists(),a.getAgent()},a.getLists=function(){return f.get().$promise.then(function(b){a.lists=b.rows,c.syncUpdates("list",a.lists),a.contact.ListId=a.lists[0]?a.lists[0].id:null,a.getCustomFields()})["catch"](function(a){b.error(a)})},a.getCustomFields=function(){return f.get({listId:a.contact.ListId,controller:"customfields"}).$promise.then(function(b){a.customFields=b.rows,a.customFields.forEach(function(a){a.values=JSON.parse(a.values)}),c.socket.on("custom_field:remove",function(b){_.remove(a.customFields,function(a){return b.id==a.id})}),c.socket.on("custom_field:save",function(b){if(b.ListId===a.contact.ListId){var c=_.find(a.customFields,{id:b.id});c||("string"==typeof b.values&&(b.values=JSON.parse(b.values)),a.customFields.push(b))}}),!a.firstLoad||a.workspace.data?(a.workspace.edited=!0,a.firstLoad=!1):(a.firstLoad=!1,o())})["catch"](function(a){console.error(a),b.error(a)})},a.getTags=function(){return g.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a),b.error(a)})},a.getCompanies=function(){return h.get().$promise.then(function(b){a.companies=b.rows,a.companies.unshift({id:"",name:"-- None --"}),c.syncUpdates("company",a.companies)})["catch"](function(a){console.error(a),b.error(a)})},e(function(){a.init()})}}}}]).directive("contact",["$compile","xAlert","socket","$timeout","List","Tag","Company","Contact","$translate","gridOptions","$uibModal","ReportCall","$rootScope","usSpinnerService","uiGridConstants","$log","Auth","$http",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r){return{restrict:"E",scope:{workspace:"=",index:"=",submit:"&onSubmit"},templateUrl:"app/main/template/template.contactTab.html",compile:function(a,j){return function(a,j,s){function t(b){var c=[],d={};_.forEach(a.columns[a.log[b].show][a.log[b].detail].indexes,function(e,f){d={name:e,displayName:a.columns[a.log[b].show][a.log[b].detail].header[f],headerCellFilter:"translate",enableSorting:!1,enableColumnMenu:!1},"createdAt"===e&&(d.cellTemplate="
{{row.entity.createdAt | date:'dd/MM/yyyy HH:mm:ss'}}
",d.filterHeaderTemplate='
',d.filters=[{name:"From",condition:o.filter.GREATER_THAN_OR_EQUAL},{name:"To",condition:o.filter.LESS_THAN_OR_EQUAL}]),c.push(d)}),a.columns[a.log[b].show][a.log[b].detail].actions&&c.push(a.columns[a.log[b].show][a.log[b].detail].actions),c.forEach(function(a){u(a,b,!0),a.hasOwnProperty("displayName")||(a.displayName="APPLICATION_"+a.name.toUpperCase()),a.headerCellFilter="translate",a.hasOwnProperty("buttons")&&(a.displayName="",a.cellClass="ui-grid-vcenter",a.enableSorting=!1,a.enableFiltering=!1,a.enableColumnMenu=!1,a.cellTemplate="
",a.buttons.forEach(function(b){if(b.directive)a.cellTemplate+=b.directive;else{if(a.cellTemplate+="':"",b.name)switch(b.name){case"delete":a.cellTemplate+='';break;case"profile":case"settings":case"detail":case"embedding":a.cellTemplate+='';break;case"agents":a.cellTemplate+='';break;case"run":a.cellTemplate+='';break;case"mailRoom":a.cellTemplate+='';break;case"chatRoom":a.cellTemplate+='';break;case"faxRoom":a.cellTemplate+='';break;case"smsRoom":a.cellTemplate+='';break;default:a.cellTemplate+="{{'APPLICATION_"+b.name.toUpperCase()+"' | translate}}"}else a.cellTemplate+=b.displayName?"{{'"+b.displayName+"' | translate}}":"";a.cellTemplate+=" "}}),a.cellTemplate+="
",delete a.buttons)});var e={enablePaginationControls:!0,exporterCsvFilename:b+".csv",columnDefs:c,enableGridMenu:!0,headerCellFilter:"translate",enableHorizontalScrollbar:0,enableVerticalScrollbar:0,enableFiltering:!0,showGridFooter:!0,paginationPageSizes:[10,25,50,75],paginationPageSize:10,useExternalPagination:!0,useExternalSorting:!0,useExternalFiltering:!0,showTreeExpandNoChildren:!0,data:[],gridMenuTitleFilter:function(a){var b=$q.defer();return b.resolve(i.instant(a)),b.promise},onRegisterApi:function(c){a.gridApi=c,a.gridApi.grid.registerDataChangeCallback(function(){}),a.gridApi.core.on.sortChanged(a,function(a,c){0===c.length?v.order=null:v.order=c[0].name+" "+c[0].sort.direction.toUpperCase(),w(b)}),a.gridApi.pagination.on.paginationChanged(a,function(a,c){v.offset=(a-1)*c,v.limit=c,w(b)}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){u(a,b)}),w(b)})}};w(b,e)}function u(a,b,c){a.filter&&a.filter.term&&c&&(v[b][a.name]=a.filter.term),a.filters&&(a.filters.length>1?a.filters.forEach(function(c){c.term?64===c.condition?v[b][a.name+"_uiFrom"]=c.term:256===c.condition&&(v[b][a.name+"_uiTo"]=c.term):64===c.condition?delete v[b][a.name+"_uiFrom"]:256===c.condition&&delete v[b][a.name+"_uiTo"]}):a.filters.length&&a.filters[0].term?v[b][a.name]=a.filters[0].term:delete v[b][a.name])}a.moment=moment,a.license=m.license,a.forms={general:{}},a.detail={tab:"main"},a.log={daily:{show:"phone",type:"inbound",detail:"general"},history:{show:"phone",type:"inbound",detail:"general"}},a.columns={phone:{general:{header:["APPLICATION_SOURCE","APPLICATION_DESTINATION","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["source","destination","disposition","createdAt"]},queue:{header:["APPLICATION_CALLERID","APPLICATION_QUEUE","APPLICATION_DATE"],indexes:["calleridnum","queue","createdAt"]}},email:{general:{header:["APPLICATION_FROM","APPLICATION_TO","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["from","account","disposition","createdAt"],actions:{name:"action",displayName:"",width:40,buttons:[{"class":"green",name:"mailRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'mailRoom')"}]}}},chat:{general:{header:["APPLICATION_WEBSITE","APPLICATION_VISITOR","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["website","contact","disposition","createdAt"],actions:{name:"action",displayName:"",width:40,buttons:[{"class":"green",name:"chatRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'chatRoom')"}]}}},fax:{general:{header:["APPLICATION_FROM","APPLICATION_TO","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["contact","account","disposition","createdAt"],actions:{name:"action",displayName:"",width:40,buttons:[{"class":"green",name:"faxRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'faxRoom')"}]}}},sms:{general:{header:["APPLICATION_ACCOUNT","APPLICATION_FROM","APPLICATION_DISPOSITION","APPLICATION_DATE"],indexes:["account","contact","disposition","createdAt"],actions:{name:"action",displayName:"",width:40,buttons:[{"class":"green",name:"smsRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'smsRoom')"}]}}}},a.Auth=q,a.getAgent=function(){return q.getCurrentUser().$promise.then(function(b){a.agent=b})["catch"](function(a){b.error(a)})},a.callPhoneBar=function(c,d){var e;switch(d){case"call":e="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/originate/"+c;break;case"transfer":e="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/transfer?number="+c;break;default:e="http://127.0.0.1:"+a.agent.phoneBarRemoteControlPort+"/api/originate/"+c}return r.get(e).success(function(){b.show(i.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){b.error(a)})},a.copy=function(a){var c=k.open({animation:!0,size:"small",templateUrl:"app/contactmanager/contact/list/copy.modal.html",controller:"ContactManagerListCopyModalCtrl"});c.result.then(function(c){return h.save({id:a,controller:"copy"},c).$promise.then(function(a){m.openContactTab({firstName:a.firstName,lastName:a.lastName,id:a.id})})["catch"](function(a){b.error(a)})},function(){p.info("Modal dismissed at: "+new Date)})},a.merge=function(c){var d=k.open({animation:!0,size:"lg",templateUrl:"app/main/mergeContact.choose.modal.html",controller:"ContactManagerMergeContactChoose",resolve:{listId:c.ListId}});d.result.then(function(d){var e=k.open({animation:!0,size:"lg",templateUrl:"app/main/mergeContact.merge.modal.html",controller:"ContactManagerMergeContactMerge",resolve:{contactId:d,mergeContact:c}});e.result.then(function(e){return e.oldContact=c.id,h.save({id:d,controller:"merge"},e).$promise.then(function(b){m.workspaces.splice(a.index,1),_.remove(m.workspaces,{contactID:b.id}),m.openContactTab({firstName:b.firstName,lastName:b.lastName,id:b.id})})["catch"](function(a){b.error(a)})},function(){p.info("Modal dismissed at: "+new Date)})},function(){p.info("Modal dismissed at: "+new Date)})},a.dispose=function(){return k.open({animation:!0,templateUrl:"app/main/cm.disposition.modal.html",controller:"ContactManagerSetDisposition"}).result.then(function(c){return l.update({id:a.workspace.data.uniqueid},c).$promise.then(function(){a.contact.disposed=!0,b.show(i.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})})},a.companyInfo=function(b){k.open({animation:!0,size:"lg",templateUrl:"app/main/company.info.modal.html",controller:["$scope","$uibModalInstance","company",function(a,b,c){a.company=c,a.close=function(){b.dismiss("cancel")}}],resolve:{company:_.find(a.companies,{id:b})}})},a.updateLog=function(b,c,d,e){c&&(a.log[b].show=c),d&&(a.log[b].detail=d),e&&(a.log[b].type=e),t(b)},a.openRoom=function(a,b,c){var d=_.find(m.workspaces,{id:a,type:b});if(d)d.active=!0;else{var e;switch(b){case"mailRoom":e="icon-envelope";break;case"chatRoom":e="fa fa-users";break;case"faxRoom":e="fa fa-fax";break;case"smsRoom":e="glyphicon glyphicon-comment"}m.workspaces.push({id:a,type:b,"class":e,active:!0,data:c})}};var v={daily:{offset:0,limit:10},history:{offset:0,limit:10}},w=function(b,c){return n.spin("spinner-grid"),h.get(_.merge(_.merge({id:a.workspace.contactID,controller:"log",logType:b,order:"createdAt DESC"},a.log[b]),v[b])).$promise.then(function(d){c&&(a["gridOptions"+b]=c),a["gridOptions"+b].totalItems=d.count,a["gridOptions"+b].data=d.rows,x("gridOptions"+b,d.rows.length)})["catch"](function(a){console.error(a)})["finally"](function(){n.stop("spinner-grid")})},x=function(a,b){var c=b?30*b+120:177;angular.element(document.getElementsByName(a)[0]).css("height",c+"px")};a.getContact=function(){return h.get({id:a.workspace.contactID}).$promise.then(function(b){a.contact=b,a.contact.CompanyId||(a.contact.CompanyId=""),a.getCustomFields(b.ListId),a.updateLog("daily"),a.updateLog("history")})["catch"](function(a){console.error(a),b.error(a)})},a.getTags=function(){return f.get().$promise.then(function(b){a.tags=_.map(b.rows,"name")})["catch"](function(a){console.error(a),b.error(a)})},a.getCompanies=function(){return g.get().$promise.then(function(b){a.companies=b.rows,a.companies.unshift({id:"",name:"-- None --"}),c.syncUpdates("company",a.companies)})["catch"](function(a){console.error(a),b.error(a)})},a.getCustomFields=function(d){return a.customFields=[],e.get({listId:d,controller:"customfields"}).$promise.then(function(b){b.rows.forEach(function(b){try{"select"===b.type&&(b.values=JSON.parse(b.values)),a.customFields.push(b)}catch(c){console.log("Cf not valid:",b.alias)}}),c.socket.on("custom_field:remove",function(b){_.remove(a.customFields,function(a){return b.id==a.id})}),c.socket.on("custom_field:save",function(b){if(b.ListId===d){var c=_.find(a.customFields,{id:b.id});c||("string"==typeof b.values&&(b.values=JSON.parse(b.values)),a.customFields.push(b))}})})["catch"](function(a){console.error(a),b.error(a)})},d(function(){a.getTags(),a.getCompanies(),a.getContact(),a.getAgent()})}}}}]).directive("jscripty",["$compile","xAlert","$http","socket","JscriptyProject",function(a,b,c,d,e){return{restrict:"E",scope:{workspace:"=",index:"=",submit:"&onSubmit"},templateUrl:"app/main/template/template.jscriptyTab.html",compile:function(a,d){return function(a,d,f){a.count=0,a.questions=[];var g,h=a.workspace.data.id;c.get("/api/jscripty/projects/"+h+"/download").success(function(b){b?c.post("/api/jscripty/projects/"+h+"/sessions",{projectId:h,status:"started",queue:a.workspace.data.queue,calleridnum:a.workspace.data.calleridnum,callername:a.workspace.data.callername,membername:a.workspace.data.membername}).success(function(c){g=c.session_id,a.workspace.edited=!0,a.workspace.sessionId=g,a.workspace.projectId=h;var d=mxUtils.parseXml(b),e=new mxCodec(d);a.decObj=e.decode(d.documentElement);var f=_.find(a.decObj.cells,function(a){return a.vertex&&"start"==a.value.nodeName});if("OFF"==f.getAttribute("state")){var j=_.find(f.edges,function(a){return a.source.id==f.id}).target;a.questions[a.count]=a.currentQuestion=i(j)}else a.questions[a.count]=a.currentQuestion=f;a.saveQuestions()}):(console.log("No project published!"),alert("No project published!"),a.submit({index:a.index}))}),a.next=function(b,c){switch(a.currentQuestion.answer&&a.currentQuestion.answer!=c&&(a.questions=_.take(a.questions,a.count+1)),a.currentQuestion.answer=c,b.value.nodeName){case"question":b=i(b)}a.questions[a.count]=a.currentQuestion,a.currentQuestion=b,a.count++,a.questions[a.count]=b,a.saveQuestions()};var i=function(a){var b=[];return a.options=[],_.forEach(a.edges,function(c,d){if(c.source.id==a.id&&c.value){var e=String(c.value).split(",");e.length>1?(_.forEach(e,function(b,d){var e=Object.create(c);e.setValue(b),a.edges.push(e),a.options.push(b)}),b.push(c)):a.options.push(e[0])}}),_.forEach(b,function(b){_.remove(a.edges,function(a){return a.value==b.value&&a.id==b.id})}),a};a.end=function(){a.saveQuestions(),a.workspace.lastQuestionId=a.questions[a.questions.length-1].id,"end"==a.questions[a.questions.length-1].value.nodeName&&(a.workspace.edited=!1,e.update({id:h,controller:"sessions",action:g},{status:"completed",completedAt:Date(),last_question_id:a.questions[a.questions.length-1].id}).$promise.then(function(a){b.show("Project Ended","success")})),a.submit({index:a.index})},a.workspace.end=a.end,a.back=function(){a.count--,a.currentQuestion=a.questions[a.count]},a.setCurrentQuestion=function(b){a.count=b,a.currentQuestion=a.questions[a.count]},a.saveQuestions=function(){for(var c=[],d=[],f=0;f"},{name:">="},{name:"LIKE"},{name:"NOT LIKE"},{name:"IS NULL"},{name:"IS NOT NULL"},{name:"IS EMPTY"},{name:"IS NOT EMPTY"}],b.inputIsRequired=function(a){if(a.condition)switch(a.condition){case"IS NULL":case"IS NOT NULL":case"IS EMPTY":case"IS NOT EMPTY":a.required=!1;break;default:a.required=!0}},b.addCondition=function(){b.group.rules.push({condition:"=",field:"",value:""})},b.removeCondition=function(a){b.group.rules.splice(a,1)},b.addGroup=function(){b.group.rules.push({group:{operator:"AND",rules:[{condition:"=",field:"",value:""}]}})},b.randomName=function(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")},b.removeGroup=function(){b.$parent.group&&b.$parent.group.rules.splice(b.$parent.$index,1)},e||(e=a(d)),c.append(e(b,function(a){return a}))}}}}]).directive("dynamicName",["$compile",function(a){return{restrict:"A",terminal:!0,priority:1e3,link:function(b,c,d){c.attr("name",b.$eval(d.dynamicName)),c.removeAttr("dynamic-name"),a(c)(b)}}}]).directive("onReadFile",["$parse",function(a){return{restrict:"A",scope:!1,link:function(b,c,d){var e=a(d.onReadFile);c.on("change",function(a){var c=new FileReader;c.onload=function(a){b.$apply(function(){e(b,{$fileContent:a.target.result})})},c.readAsText((a.srcElement||a.target).files[0])})}}}]).directive("motionFileDownload",["xAlert","$translate","$timeout","$location","FileSaver","$compile",function(a,b,c,d,e,f){return{restrict:"E",template:'{{btncontent || \'\'}}',scope:{mimetype:"=",filename:"=",resource:"=",params:"=",btnclass:"@",btncontent:"@",tooltiptext:"@"},link:function(b,c,d){var f=c.children()[0];b.$on("download-start",function(){$(f).attr("disabled","disabled")}),b.$on("downloaded",function(a,c){var d=base64ToBlob(c,b.mimetype);e.saveAs(d,b.filename),$(f).attr("disabled",!1)}),b.download=function(){return b.$emit("download-start"),b.resource.get(b.params).$promise.then(function(a){b.$emit("downloaded",a.downloadString)})["catch"](function(b){a.error(b),$(f).attr("disabled",!1)})}}}}]).directive("audioFileDownload",["xAlert","$translate","$uibModal",function(a,b,c){return{restrict:"E",template:'',scope:{resource:"=",params:"="},link:function(b,d,e){var f=d.children()[0];b.$on("download-start",function(a,c){b.tempHtml=$(f).html(),$(f).attr("disabled","disabled").html(' Loading...')}),b.$on("downloaded",function(a,d){c.open({animation:!0,size:"small",templateUrl:"app/main/audioFileDownload.play.modal.html",controller:["$scope","$uibModalInstance","$sce","audio",function(a,b,c,d){a.audio=c.trustAsResourceUrl("data:audio/wav;base64,"+d.data),a.close=function(){b.dismiss("cancel")}}],resolve:{audio:function(){return{data:d}}}});$(f).html(b.tempHtml).attr("disabled",!1)}),b.$on("error",function(a,c){$(f).html(b.tempHtml).attr("disabled",!1)}),b.download=function(){return b.$emit("download-start"),b.resource.get(b.params).$promise.then(function(a){b.$emit("downloaded",a.downloadString)})["catch"](function(c){a.error(c),b.$emit("error")})}}}}]).directive("uiRequired",function(){return{require:"ngModel",link:function(a,b,c,d){d.$validators.required=function(a,b){ -return!(b&&0===b.length&&"true"===c.uiRequired)},c.$observe("uiRequired",function(){d.$setValidity("required",!("true"===c.uiRequired&&d.$viewValue&&0===d.$viewValue.length))})}}}).directive("schrollBottom",function(){return{scope:{schrollBottom:"="},link:function(a,b){a.$watchCollection("schrollBottom",function(a){a&&$(b).scrollTop($(b)[0].scrollHeight)})}}}).directive("customGridDateFilterHeader",function(){return{templateUrl:"app/main/customDateFilterHeader.html",controller:"gridDatePickerFilterCtrl"}}).directive("customGridTagsFilterHeader",function(){return{templateUrl:"app/main/customTagsFilterHeader.html",controller:"gridTagsFilterCtrl"}}).directive("infiniteScroll",["$window",function(a){return{link:function(a,b,c){var d=parseInt(c.threshold)||0,e=b[0];b.bind("scroll",function(){a.$eval(c.canLoad)&&e.scrollTop+e.offsetHeight>=e.scrollHeight-d&&a.$apply(c.infiniteScroll)})}}}]).directive("tigerDialDisposal",["$compile","xAlert","socket","$translate","$timeout","$rootScope","MotionDialerSpooler","Agent",function(a,b,c,d,e,f,g,h){return{restrict:"E",scope:{workspace:"=",index:"="},templateUrl:"app/main/template/template.tigerDialDisposal.html",compile:function(a,c){return function(a,c,i){a.moment=moment,a.entitySpooler={},a.forms={td:{}},a.init=function(){return h.get().$promise.then(function(b){a.agents=[],b&&b.rows.forEach(function(b){a.agents.push("SIP/"+b.name)})})["catch"](function(a){b.error(a)})},a.save=function(){var c;switch(a.entitySpooler.retrieve){case"CLOSED":c=g.close({id:parseInt(a.workspace.spooler.ticketId)});break;case"OPEN":c=g.open({id:parseInt(a.workspace.spooler.ticketId)});break;case"BLACK_LIST":c=g.blacklist({id:parseInt(a.workspace.spooler.ticketId)});break;case"PLANNED":c=g.planning({id:parseInt(a.workspace.spooler.ticketId),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm")});break;case"PLANNED_PEER":c=g.planningpeer({id:parseInt(a.workspace.spooler.ticketId),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm"),peer:a.entitySpooler.planningpeer})}c?c.$promise.then(function(c){c.status>0?b.show(d.instant("MESSAGE_WELL_DONE"),"success"):c.response?c.response.RMI.errors.forEach(function(c){c?(b.show(c.field+": "+c.error,"danger"),f.workspaces.splice(a.index,1)):b.show("Please, check your connection!","danger")}):b.show("Please, check your connection!","danger")})["catch"](function(a){b.error(a)}):b.show("RETRIEVE NOT FOUND","danger")},e(function(){a.init()})}}}}]).directive("cssTimer",["$window","$interval",function(a,b){return{restrict:"EA",template:"{{ millis | formatMilliseconds | date:format }}",scope:{interval:"@",format:"@",startTime:"="},link:function(a,c,d){function e(){a.millis=Math.abs((new Date).getTime()-new Date(a.startTime).getTime())+1e3,a.activeInterval=b(function(){a.millis+=a.interval},a.interval)}a.interval||(a.interval=1e3),a.format||(a.format="HH:mm:ss"),e(),a.$watch("startTime",function(c,d){b.cancel(a.activeInterval),e()},!0)}}}]),angular.module("xCallyShuttleApp").filter("propsFilter",function(){return function(a,b){var c=[];return angular.isArray(a)?a.forEach(function(a){for(var d=!1,e=Object.keys(b),f=0;f=0}),b}}).filter("freshdesk",function(){var a=["requester","subject","agent","description"];return function(b){return _.remove(b,function(b){return a.indexOf(b.ticket_field.name)>=0}),b}}).filter("zendesk",function(){var a=["subject","assignee","description"];return function(b){return _.remove(b,function(b){return a.indexOf(b.type)>=0}),b}}).filter("slice",function(){return function(a,b,c){return a?a.slice(b,c):void 0}}).filter("trusted",["$sce",function(a){var b=document.createElement("div");return function(c){return b.innerHTML=c,a.trustAsHtml(b.textContent)}}]).filter("formatMilliseconds",[function(){return function(a){return new Date(1970,0,1).setMilliseconds(a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main",{"abstract":!0,templateUrl:"app/main/main.html",controller:"MainCtrl",resolve:{authorization:["$q","Auth","$state","$timeout","$location","localStorageService",function(a,b,c,d,e,f){return b.getToken()?a.when():(f.remove("loggedIn"),d(function(){e.path("/login")}),a.reject())}],deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/plugins/mxgraph/js/mxClient.js","assets/plugins/ckeditor/ckeditor.js","assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("xAlert",["$translate","Notification","$state",function(a,b,c){return{show:function(c,d){switch(d){case"success":b.success({message:c,title:' '+a.instant("MESSAGE_SUCCESS")+"!",delay:5e3});break;case"info":b.info({message:c,title:' '+a.instant("MESSAGE_INFO")+"!",delay:5e3});break;case"danger":b.error({message:c,title:' '+a.instant("MESSAGE_ERROR")+"!",delay:1e4});break;case"warning":b.warning({message:c,title:' '+a.instant("MESSAGE_WARNING")+"!",delay:1e4});break;default:b.info(c)}},error:function(d){var e,f;d?d.status&&401===d.status?(e="Unauthorized!",f=!0):e=d.data?d.data.translatedMessage||d.data.message||d.data||"Generic Error":d.translatedMessage||d.message||"Generic Error":e="Generic Error",b.error({message:a.instant(e),title:' '+a.instant("MESSAGE_ERROR")+"!",delay:1e4}),f&&c.go("login")}}}]).factory("stResource",["$q","$filter","$timeout","$rootScope","$http","$translate","xAlert",function(a,b,c,d,e,f,g){return{getPage:function(b){var c={page:Math.ceil(b.pagination.start/b.pagination.number),per_page:b.pagination.number};b.sort.predicate&&(c.sort_by=b.sort.predicate,c.sort_order=b.sort.reverse?"DESC":"ASC"),_.forIn(b.search.predicateObject,function(a,b){c[b]=a}),b.search.params&&(c.clientQuery={},_.forIn(b.search.params,function(a,b){c.clientQuery[b]=a})),d.$broadcast("$spinnerStart"),e.get(b.url,{params:c}).success(function(a){f.resolve(a),d.$broadcast("$spinnerStop")}).error(function(a){g.error(a),d.$broadcast("$spinnerStop")});var f=a.defer();return f.promise}}}]).factory("xNotification",["$translate","Notification","$rootScope",function(a,b,c){return{show:function(d,e,f,g,h,i){var j=c.$new(),k={message:e,title:d,templateUrl:"app/main/template/template.notification.html",delay:g,scope:j};switch(j.acceptBtn=a.instant("APPLICATION_ACCEPT"),j.rejectBtn=a.instant("APPLICATION_REJECT"),j.nAccept=h,j.nReject=i,f){case"chat":j["class"]="alert-info",j.icon="icon-bubble";break;case"mail":j["class"]="alert-success",j.icon="icon-envelope";break;case"fax":j["class"]="alert-warning",j.icon="fa fa-fax";break;case"sms":j["class"]="alert-danger",j.icon="glyphicon glyphicon-comment";break;case"openchannel":j["class"]="alert-danger",j.icon="icon-globe";break;default:j["class"]="alert-info"}return new b(k)}}}]),angular.module("xCallyShuttleApp").controller("ContactManagerMergeContactChoose",["$scope","$translate","Contact","gridOptions","List","uiGridConstants","xAlert","$stateParams","Company","$uibModalInstance","listId",function(a,b,c,d,e,f,g,h,i,j,k){a.initView=function(){var b;return e.get().$promise.then(function(b){return a.lists=[],a.customFields=[],b.rows.forEach(function(b,c){_.forEach(b.CustomFields,function(b){a.customFields.push({name:b.name,alias:b.alias})}),a.lists.push({value:b.id,label:b.name})}),i.get().$promise}).then(function(b){a.companies=[],b.rows.forEach(function(b,c){a.companies.push({value:b.id,label:b.name})})}).then(function(){var e=[{"class":"blue-hoki",name:"select",onClick:"grid.appScope.choose(row.entity.id)"}];b={exporterCsvFilename:"Contacts.csv",columnDefs:[{name:"firstName"},{name:"lastName"},{name:"phone"},{name:"email"},{name:"ListId",displayName:"APPLICATION_LIST",field:"List.name",enableFiltering:!1},{name:"CompanyId",displayName:"APPLICATION_COMPANY",field:"Company.name",filter:{type:f.filter.SELECT,term:h.companyId||null,selectOptions:a.companies}}]},_.forEach(a.customFields,function(a){b.columnDefs.push({name:a.name,displayName:a.alias,visible:!1})}),b.columnDefs.push({name:"action",width:30,buttons:e}),a.gridOptions=d.gridOptions(c,b,a,{ListId:k})})["catch"](function(a){g.error(a)})},a.choose=function(a){j.close(a)},a.cancel=function(){j.dismiss()}}]),angular.module("xCallyShuttleApp").controller("ContactManagerMergeContactMerge",["$scope","$translate","Contact","xAlert","Company","$uibModalInstance","contactId","List","mergeContact","Tag",function(a,b,c,d,e,f,g,h,i,j){a.initView=function(){return e.get().$promise.then(function(b){return a.companies=b.rows,a.companies.unshift({id:"",name:"-- None --"}),j.get().$promise}).then(function(b){return a.tags=_.map(b.rows,"name"),c.get({id:g}).$promise}).then(function(b){a.fields={},a.contact={};var c=_.merge(_.keys(b),_.keys(i));return _.forEach(c,function(c){switch(c){case"tags":a.contact.tags=_.union(b.tags||[],i.tags||[]);break;case"$promise":case"$resolved":break;default:a.fields[c]=[],b[c]&&a.fields[c].push(b[c]),i[c]&&a.fields[c].push(i[c]),a.contact[c]=a.fields[c][0]||null}}),h.get({listId:b.ListId,controller:"customfields"}).$promise}).then(function(b){a.customFields=b.rows,a.customFields.forEach(function(a){a.values=JSON.parse(a.values)})})["catch"](function(a){d.error(a)})},a.merge=function(){a.contact.CompanyId||(a.contact.CompanyId=null),f.close(a.contact)},a.cancel=function(){f.dismiss()}}]),angular.module("xCallyShuttleApp").factory("Widget",["$resource",function(a){return a("/api/widgets/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("MarketCtrl",["$scope","$http","$translate","socket","xAlert","Modal","$timeout","Integration",function(a,b,c,d,e,f,g,h){function i(a,b){return Math.floor(Math.random()*(b-a+1))+a}a.initView=function(){return h.get().$promise.then(function(b){a.integrations=b.rows,a.groupedIntegration=_.chunk(a.integrations,4),d.syncUpdates("integration",a.integrations,function(){a.groupedIntegration=_.chunk(a.integrations,4)})})["catch"](function(a){e.error(a,"danger")})},a.isProgressing=!1,a.$on("$destroy",function(){d.unsyncUpdates("integration")}),a.installIntegration=function(b){return navigator.onLine?(a.status="Downloading",a.percentage=i(1,50),a.isProgressing=!0,b.downloading=!0,h.update({id:b.id},{active:!0}).$promise.then(function(){g(function(){a.percentage=i(51,99),a.status="Installing"},2500),g(function(){a.percentage=100,a.isProgressing=!1,a.status="Completed!",b.downloading=!1,e.show(c.instant("MESSAGE_WELL_DONE")+".","success")},5e3)})["catch"](function(){b.downloading=!1,a.percentage=0,a.isProgressing=!1,e.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})):void e.show(c.instant("MESSAGE_NO_INTERNET_CONNECTION")+".","danger")},a.uninstallIntegration=function(b){return navigator.onLine?(a.status="Uninstalling",a.percentage=i(1,99),a.isProgressing=!0,b.downloading=!0,h.update({id:b.id},{active:!1}).$promise.then(function(){g(function(){a.percentage=100,a.isProgressing=!1,a.status="Completed!",b.downloading=!1,e.show(c.instant("MESSAGE_WELL_DONE")+".","success")},5e3)})["catch"](function(){b.downloading=!1,a.percentage=0,a.isProgressing=!1,e.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})):void e.show(c.instant("MESSAGE_NO_INTERNET_CONNECTION")+".","danger")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.market",{url:"/market",templateUrl:"app/market/market.html",controller:"MarketCtrl",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("MotionbarCtrl",["$scope","$stateParams","$cookieStore","$window","$location","Auth",function(a,b,c,d,e,f){console.log(b),b.token&&b.userId&&b.role&&b.redirectTo?(f.loginWithToken(b.token,b.userId,b.role),d.location.href=decodeURIComponent(b.redirectTo)):e.path("/login")}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("motionbar",{url:"/motionbar?redirectTo&token&userId&role",template:"
",controller:"MotionbarCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.blacklist",{url:"/blacklist",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MotionDialerBlackListListCtrl",["$scope","$uibModal","$translate","xAlert","Modal","MotionDialerBlackList","uiGridConstants",function(a,b,c,d,e,f,g){a.initView=function(){a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"id",width:60},{name:"phone"},{name:"description",enableSorting:!1},{name:"updatedtime",sort:{direction:g.DESC},enableFiltering:!1},{name:"action",cellTemplate:'
',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},f.list({page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:d.show("Please, check your connection!","danger")})["catch"](function(a){d.error(a)})},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/blacklist/list/list.create.modal.html",controller:"MotionDialerBlackListListCreateCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.deleteItem=e.confirm["delete"](function(b){return f["delete"]({id:b}).$promise.then(function(e){e.status>0?(_.remove(a.gridOptions.data,{id:b}),d.show(c.instant("MESSAGE_WELL_DONE"),"success")):d.show(e.message||"Please, check your connection!","danger")})["catch"](function(a){d.error(a)})})}]),angular.module("xCallyShuttleApp").controller("MotionDialerBlackListListCreateCtrl",["$scope","$translate","$uibModalInstance","MotionDialerBlackList","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.insert(a.item).$promise.then(function(a){a.status>0?(e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):e.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.blacklist.list",{url:"/list",templateUrl:"app/motiondialer/blacklist/list/list.html",controller:"MotionDialerBlackListListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerBlackList",["$resource",function(a){return a("/api/rest/blacklist/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.info",{url:"/info",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerSystem",["$resource",function(a){return a("/api/rest/system/:controller",null,{properties:{method:"POST",params:{controller:"properties"}}})}]),angular.module("xCallyShuttleApp").controller("MotionDialerInfoViewCtrl",["$scope","xAlert","MotionDialerSystem",function(a,b,c){a.getProperties=function(){return c.properties().$promise.then(function(c){console.log(c),c.status>0?a.properties=c.response.RMI:b.show(c.message||"Please, check your connection!","danger")})["catch"](function(a){b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.info.view",{url:"/view",templateUrl:"app/motiondialer/info/view/view.html",controller:"MotionDialerInfoViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.motiondialer.info.view.about",{url:"/about",templateUrl:"app/motiondialer/info/view/view.about.html"}).state("main.motiondialer.info.view.details",{url:"/details",templateUrl:"app/motiondialer/info/view/view.details.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.lists",{url:"/lists",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MotionDialerListListCtrl",["$scope","$uibModal","$translate","xAlert","Modal","MotionDialerList","uiGridConstants","usSpinnerService",function(a,b,c,d,e,f,g,h){a.initView=function(){return a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"id",width:60},{name:"name"},{name:"description",enableSorting:!1},{name:"updatedtime",sort:{direction:g.DESC},enableFiltering:!1},{name:"action",cellTemplate:'
',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},f.list({page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:d.show("Please, check your connection!","danger")})["catch"](function(a){d.error(a)})["finally"](function(){h.stop("spinner-grid")})},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/list/list/list.create.modal.html",controller:"MotionDialerListListCreateCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.deleteItem=e.confirm["delete"](function(b){return f["delete"]({id:b}).$promise.then(function(e){e.status>0?(_.remove(a.gridOptions.data,{id:b}),d.show(c.instant("MESSAGE_WELL_DONE"),"success")):d.show(e.message||"Please, check your connection!","danger")})["catch"](function(a){d.error(a)})})}]),angular.module("xCallyShuttleApp").controller("MotionDialerListListCreateCtrl",["$scope","$translate","$uibModalInstance","MotionDialerList","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.insert(a.item).$promise.then(function(a){a.status>0?(e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):e.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.lists.list",{url:"/list",templateUrl:"app/motiondialer/list/list/list.html",controller:"MotionDialerListListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerContact",["$resource",function(a){return a("/api/rest/contact/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").factory("MotionDialerList",["$resource",function(a){return a("/api/rest/list/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewContactCreateCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerContact","xAlert","MotionDialerTimezone",function(a,b,c,d,e,f,g){a.form={},a.item={},a.timezones=g.list(),a.save=function(){return console.log(a.item),e.insert({id_list:parseInt(d.id),name:a.item.name,phones:a.item.phones.trim().split(","),description:a.item.description||""}).$promise.then(function(a){console.log(a),a.status>0?(f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):f.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerListContactImportModalCtrl",["$scope","$uibModalInstance","$stateParams","indexes","csv","xAlert","MotionDialerContact","MotionDialerTimezone",function(a,b,c,d,e,f,g,h){function i(b){if(b>=a.csvLength||a.stopped)return void(a.importing=!1);var d={id_list:parseInt(c.id),name:"",phones:[],variables:[],description:"",account:"",timezone:""},f={};return _.forOwn(a.item,function(a,c){switch(c){case"phones":_.forEach(a,function(a){e[b][a]&&d.phones.push(e[b][a])});break;case"variables":_.forEach(a,function(a){e[b][a]&&(f={},f[a]=e[b][a],d.variables.push(f))});break;default:d[c]=e[b][a]}}),d.phones.length?(d.timezone||delete d.timezone,g.insert(d).$promise.then(function(b){b.status>0?(a["import"].success+=j,a["import"].succeeded++,k.push(b.response.RMI)):(console.log(b),a["import"].fail+=j,a["import"].failed++)})["catch"](function(b){console.log(b),a["import"].fail+=j,a["import"].failed++})["finally"](function(){i(b+1)})):(a.noPhone.push(b+2),a["import"].fail+=j,a["import"].failed++,i(b+1),void 0)}a.form={},a.item={},a.timezones=h.list(),a.uiTimeZones=[],_.forEach(a.timezones,function(b){_.forEach(b.zones,function(c){c.group=b.group,a.uiTimeZones.push(c)})}),console.log(d),console.log(e),a.indexes=d,a.importing=!1,a.submitted=!1,a.stopped=!1,a["import"]={success:0,fail:0,succeeded:0,failed:0},a.csvLength=e.length;var j=100/a.csvLength,k=[];a.start=function(){a.noPhone=[],a.importing=!0,a.submitted=!0,i(0)},a.close=function(){b.close(k)},a.stop=function(){a.stopped=!0}}]),angular.module("xCallyShuttleApp").controller("MotionDialerListViewCtrl",["$scope","$translate","$stateParams","$uibModal","xAlert","uiGridConstants","usSpinnerService","MotionDialerList","MotionDialerContact","Modal","FileUploader","Papa",function(a,b,c,d,e,f,g,h,i,j,k,l){a.getList=function(){return h.find({id:parseInt(c.id)}).$promise.then(function(b){b.status>0?a.list=b.response.RMI:e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.updateList=function(){return h.update({id:a.list.id,name:a.list.name,description:a.list.description}).$promise.then(function(a){a.status>0?e.show(b.instant("MESSAGE_WELL_DONE"),"success"):e.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.getContacts=function(){return a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"name"},{name:"phones",cellTemplate:"
{{row.entity.phones.join(',')}}
",cellClass:"ui-grid-vcenter"},{name:"description",enableSorting:!1},{name:"updatedtime",sort:{direction:f.DESC},enableFiltering:!1},{name:"action",cellTemplate:'
',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},i.list({id_list:parseInt(c.id),page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})["finally"](function(){g.stop("spinner-grid")})},a.deleteContact=j.confirm["delete"](function(c){return i["delete"]({id:c}).$promise.then(function(d){d.status>0?(_.remove(a.gridOptions.data,{id:c}),e.show(b.instant("MESSAGE_WELL_DONE"),"success")):e.show(d.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})}),a.createContact=function(){var b=d.open({animation:!0,templateUrl:"app/motiondialer/list/view/view.contact.create.modal.html",controller:"MotionDialerViewContactCreateCtrl"});b.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})};var m=a.uploader=new k({queueLimit:1,clearInputAfterAddedToQueue:!0});m.onAfterAddingFile=function(b){l.parse(b._file,{header:!0,complete:function(b){a.uploader.clearQueue(),a["import"](b.data)},error:function(a){e.error(a)}})},a["import"]=function(b){var c=d.open({animation:!0,backdrop:"static",keyboard:!1,templateUrl:"app/motiondialer/list/view/view.contact.import.modal.html",controller:"MotionDialerListContactImportModalCtrl",resolve:{indexes:function(){return _.keys(b[0])},csv:function(){return b}}});c.result.then(function(b){console.log(b),a.gridOptions.data=a.gridOptions.data.concat(b)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.lists.view",{url:"/view/:id",templateUrl:"app/motiondialer/list/view/view.html",controller:"MotionDialerListViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.motiondialer.lists.view.settings",{url:"/settings",templateUrl:"app/motiondialer/list/view/view.settings.html"}).state("main.motiondialer.lists.view.contacts",{url:"/contacts",templateUrl:"app/motiondialer/list/view/view.contacts.html"})}]),angular.module("xCallyShuttleApp").factory("MotionDialerTimezone",function(){return{list:function(){return[{group:"US (Common)",zones:[{value:"America/Puerto_Rico",name:"Puerto Rico (Atlantic)"},{value:"America/New_York",name:"New York (Eastern)"},{value:"America/Chicago",name:"Chicago (Central)"},{value:"America/Denver",name:"Denver (Mountain)"},{value:"America/Phoenix",name:"Phoenix (MST)"},{value:"America/Los_Angeles",name:"Los Angeles (Pacific)"},{value:"America/Anchorage",name:"Anchorage (Alaska)"},{value:"Pacific/Honolulu",name:"Honolulu (Hawaii)"}]},{group:"America",zones:[{value:"America/Adak",name:"Adak"},{value:"America/Anchorage",name:"Anchorage"},{value:"America/Anguilla",name:"Anguilla"},{value:"America/Antigua",name:"Antigua"},{value:"America/Araguaina",name:"Araguaina"},{value:"America/Argentina/Buenos_Aires",name:"Argentina - Buenos Aires"},{value:"America/Argentina/Catamarca",name:"Argentina - Catamarca"},{value:"America/Argentina/ComodRivadavia",name:"Argentina - ComodRivadavia"},{value:"America/Argentina/Cordoba",name:"Argentina - Cordoba"},{value:"America/Argentina/Jujuy",name:"Argentina - Jujuy"},{value:"America/Argentina/La_Rioja",name:"Argentina - La Rioja"},{value:"America/Argentina/Mendoza",name:"Argentina - Mendoza"},{value:"America/Argentina/Rio_Gallegos",name:"Argentina - Rio Gallegos"},{value:"America/Argentina/Salta",name:"Argentina - Salta"},{value:"America/Argentina/San_Juan",name:"Argentina - San Juan"},{value:"America/Argentina/San_Luis",name:"Argentina - San Luis"},{value:"America/Argentina/Tucuman",name:"Argentina - Tucuman"},{value:"America/Argentina/Ushuaia",name:"Argentina - Ushuaia"},{value:"America/Aruba",name:"Aruba"},{value:"America/Asuncion",name:"Asuncion"},{value:"America/Atikokan",name:"Atikokan"},{value:"America/Atka",name:"Atka"},{value:"America/Bahia",name:"Bahia"},{value:"America/Barbados",name:"Barbados"},{value:"America/Belem",name:"Belem"},{value:"America/Belize",name:"Belize"},{value:"America/Blanc-Sablon",name:"Blanc-Sablon"},{value:"America/Boa_Vista",name:"Boa Vista"},{value:"America/Bogota",name:"Bogota"},{value:"America/Boise",name:"Boise"},{value:"America/Buenos_Aires",name:"Buenos Aires"},{value:"America/Cambridge_Bay",name:"Cambridge Bay"},{value:"America/Campo_Grande",name:"Campo Grande"},{value:"America/Cancun",name:"Cancun"},{value:"America/Caracas",name:"Caracas"},{value:"America/Catamarca",name:"Catamarca"},{value:"America/Cayenne",name:"Cayenne"},{value:"America/Cayman",name:"Cayman"},{value:"America/Chicago",name:"Chicago"},{value:"America/Chihuahua",name:"Chihuahua"},{value:"America/Coral_Harbour",name:"Coral Harbour"},{value:"America/Cordoba",name:"Cordoba"},{value:"America/Costa_Rica",name:"Costa Rica"},{value:"America/Cuiaba",name:"Cuiaba"},{value:"America/Curacao",name:"Curacao"},{value:"America/Danmarkshavn",name:"Danmarkshavn"},{value:"America/Dawson",name:"Dawson"},{value:"America/Dawson_Creek",name:"Dawson Creek"},{value:"America/Denver",name:"Denver"},{value:"America/Detroit",name:"Detroit"},{value:"America/Dominica",name:"Dominica"},{value:"America/Edmonton",name:"Edmonton"},{value:"America/Eirunepe",name:"Eirunepe"},{value:"America/El_Salvador",name:"El Salvador"},{value:"America/Ensenada",name:"Ensenada"},{value:"America/Fortaleza",name:"Fortaleza"},{value:"America/Fort_Wayne",name:"Fort Wayne"},{value:"America/Glace_Bay",name:"Glace Bay"},{value:"America/Godthab",name:"Godthab"},{value:"America/Goose_Bay",name:"Goose Bay"},{value:"America/Grand_Turk",name:"Grand Turk"},{value:"America/Grenada",name:"Grenada"},{value:"America/Guadeloupe",name:"Guadeloupe"},{value:"America/Guatemala",name:"Guatemala"},{value:"America/Guayaquil",name:"Guayaquil"},{value:"America/Guyana",name:"Guyana"},{value:"America/Halifax",name:"Halifax"},{value:"America/Havana",name:"Havana"},{value:"America/Hermosillo",name:"Hermosillo"},{value:"America/Indiana/Indianapolis",name:"Indiana - Indianapolis"},{value:"America/Indiana/Knox",name:"Indiana - Knox"},{value:"America/Indiana/Marengo",name:"Indiana - Marengo"},{value:"America/Indiana/Petersburg",name:"Indiana - Petersburg"},{value:"America/Indiana/Tell_City",name:"Indiana - Tell City"},{value:"America/Indiana/Vevay",name:"Indiana - Vevay"},{value:"America/Indiana/Vincennes",name:"Indiana - Vincennes"},{value:"America/Indiana/Winamac",name:"Indiana - Winamac"},{value:"America/Indianapolis",name:"Indianapolis"},{value:"America/Inuvik",name:"Inuvik"},{value:"America/Iqaluit",name:"Iqaluit"},{value:"America/Jamaica",name:"Jamaica"},{value:"America/Jujuy",name:"Jujuy"},{value:"America/Juneau",name:"Juneau"},{value:"America/Kentucky/Louisville",name:"Kentucky - Louisville"},{value:"America/Kentucky/Monticello",name:"Kentucky - Monticello"},{value:"America/Knox_IN",name:"Knox IN"},{value:"America/La_Paz",name:"La Paz"},{value:"America/Lima",name:"Lima"},{value:"America/Los_Angeles",name:"Los Angeles"},{value:"America/Louisville",name:"Louisville"},{value:"America/Maceio",name:"Maceio"},{value:"America/Managua",name:"Managua"},{value:"America/Manaus",name:"Manaus"},{value:"America/Marigot",name:"Marigot"},{value:"America/Martinique",name:"Martinique"},{value:"America/Matamoros",name:"Matamoros"},{value:"America/Mazatlan",name:"Mazatlan"},{value:"America/Mendoza",name:"Mendoza"},{value:"America/Menominee",name:"Menominee"},{value:"America/Merida",name:"Merida"},{value:"America/Mexico_City",name:"Mexico City"},{value:"America/Miquelon",name:"Miquelon"},{value:"America/Moncton",name:"Moncton"},{value:"America/Monterrey",name:"Monterrey" -},{value:"America/Montevideo",name:"Montevideo"},{value:"America/Montreal",name:"Montreal"},{value:"America/Montserrat",name:"Montserrat"},{value:"America/Nassau",name:"Nassau"},{value:"America/New_York",name:"New York"},{value:"America/Nipigon",name:"Nipigon"},{value:"America/Nome",name:"Nome"},{value:"America/Noronha",name:"Noronha"},{value:"America/North_Dakota/Center",name:"North Dakota - Center"},{value:"America/North_Dakota/New_Salem",name:"North Dakota - New Salem"},{value:"America/Ojinaga",name:"Ojinaga"},{value:"America/Panama",name:"Panama"},{value:"America/Pangnirtung",name:"Pangnirtung"},{value:"America/Paramaribo",name:"Paramaribo"},{value:"America/Phoenix",name:"Phoenix"},{value:"America/Port-au-Prince",name:"Port-au-Prince"},{value:"America/Porto_Acre",name:"Porto Acre"},{value:"America/Port_of_Spain",name:"Port of Spain"},{value:"America/Porto_Velho",name:"Porto Velho"},{value:"America/Puerto_Rico",name:"Puerto Rico"},{value:"America/Rainy_River",name:"Rainy River"},{value:"America/Rankin_Inlet",name:"Rankin Inlet"},{value:"America/Recife",name:"Recife"},{value:"America/Regina",name:"Regina"},{value:"America/Resolute",name:"Resolute"},{value:"America/Rio_Branco",name:"Rio Branco"},{value:"America/Rosario",name:"Rosario"},{value:"America/Santa_Isabel",name:"Santa Isabel"},{value:"America/Santarem",name:"Santarem"},{value:"America/Santiago",name:"Santiago"},{value:"America/Santo_Domingo",name:"Santo Domingo"},{value:"America/Sao_Paulo",name:"Sao Paulo"},{value:"America/Scoresbysund",name:"Scoresbysund"},{value:"America/Shiprock",name:"Shiprock"},{value:"America/St_Barthelemy",name:"St Barthelemy"},{value:"America/St_Johns",name:"St Johns"},{value:"America/St_Kitts",name:"St Kitts"},{value:"America/St_Lucia",name:"St Lucia"},{value:"America/St_Thomas",name:"St Thomas"},{value:"America/St_Vincent",name:"St Vincent"},{value:"America/Swift_Current",name:"Swift Current"},{value:"America/Tegucigalpa",name:"Tegucigalpa"},{value:"America/Thule",name:"Thule"},{value:"America/Thunder_Bay",name:"Thunder Bay"},{value:"America/Tijuana",name:"Tijuana"},{value:"America/Toronto",name:"Toronto"},{value:"America/Tortola",name:"Tortola"},{value:"America/Vancouver",name:"Vancouver"},{value:"America/Virgin",name:"Virgin"},{value:"America/Whitehorse",name:"Whitehorse"},{value:"America/Winnipeg",name:"Winnipeg"},{value:"America/Yakutat",name:"Yakutat"},{value:"America/Yellowknife",name:"Yellowknife"}]},{group:"Europe",zones:[{value:"Europe/Amsterdam",name:"Amsterdam"},{value:"Europe/Andorra",name:"Andorra"},{value:"Europe/Athens",name:"Athens"},{value:"Europe/Belfast",name:"Belfast"},{value:"Europe/Belgrade",name:"Belgrade"},{value:"Europe/Berlin",name:"Berlin"},{value:"Europe/Bratislava",name:"Bratislava"},{value:"Europe/Brussels",name:"Brussels"},{value:"Europe/Bucharest",name:"Bucharest"},{value:"Europe/Budapest",name:"Budapest"},{value:"Europe/Chisinau",name:"Chisinau"},{value:"Europe/Copenhagen",name:"Copenhagen"},{value:"Europe/Dublin",name:"Dublin"},{value:"Europe/Gibraltar",name:"Gibraltar"},{value:"Europe/Guernsey",name:"Guernsey"},{value:"Europe/Helsinki",name:"Helsinki"},{value:"Europe/Isle_of_Man",name:"Isle of Man"},{value:"Europe/Istanbul",name:"Istanbul"},{value:"Europe/Jersey",name:"Jersey"},{value:"Europe/Kaliningrad",name:"Kaliningrad"},{value:"Europe/Kiev",name:"Kiev"},{value:"Europe/Lisbon",name:"Lisbon"},{value:"Europe/Ljubljana",name:"Ljubljana"},{value:"Europe/London",name:"London"},{value:"Europe/Luxembourg",name:"Luxembourg"},{value:"Europe/Madrid",name:"Madrid"},{value:"Europe/Malta",name:"Malta"},{value:"Europe/Mariehamn",name:"Mariehamn"},{value:"Europe/Minsk",name:"Minsk"},{value:"Europe/Monaco",name:"Monaco"},{value:"Europe/Moscow",name:"Moscow"},{value:"Europe/Nicosia",name:"Nicosia"},{value:"Europe/Oslo",name:"Oslo"},{value:"Europe/Paris",name:"Paris"},{value:"Europe/Podgorica",name:"Podgorica"},{value:"Europe/Prague",name:"Prague"},{value:"Europe/Riga",name:"Riga"},{value:"Europe/Rome",name:"Rome"},{value:"Europe/Samara",name:"Samara"},{value:"Europe/San_Marino",name:"San Marino"},{value:"Europe/Sarajevo",name:"Sarajevo"},{value:"Europe/Simferopol",name:"Simferopol"},{value:"Europe/Skopje",name:"Skopje"},{value:"Europe/Sofia",name:"Sofia"},{value:"Europe/Stockholm",name:"Stockholm"},{value:"Europe/Tallinn",name:"Tallinn"},{value:"Europe/Tirane",name:"Tirane"},{value:"Europe/Tiraspol",name:"Tiraspol"},{value:"Europe/Uzhgorod",name:"Uzhgorod"},{value:"Europe/Vaduz",name:"Vaduz"},{value:"Europe/Vatican",name:"Vatican"},{value:"Europe/Vienna",name:"Vienna"},{value:"Europe/Vilnius",name:"Vilnius"},{value:"Europe/Volgograd",name:"Volgograd"},{value:"Europe/Warsaw",name:"Warsaw"},{value:"Europe/Zagreb",name:"Zagreb"},{value:"Europe/Zaporozhye",name:"Zaporozhye"},{value:"Europe/Zurich",name:"Zurich"}]},{group:"Asia",zones:[{value:"Asia/Aden",name:"Aden"},{value:"Asia/Almaty",name:"Almaty"},{value:"Asia/Amman",name:"Amman"},{value:"Asia/Anadyr",name:"Anadyr"},{value:"Asia/Aqtau",name:"Aqtau"},{value:"Asia/Aqtobe",name:"Aqtobe"},{value:"Asia/Ashgabat",name:"Ashgabat"},{value:"Asia/Ashkhabad",name:"Ashkhabad"},{value:"Asia/Baghdad",name:"Baghdad"},{value:"Asia/Bahrain",name:"Bahrain"},{value:"Asia/Baku",name:"Baku"},{value:"Asia/Bangkok",name:"Bangkok"},{value:"Asia/Beirut",name:"Beirut"},{value:"Asia/Bishkek",name:"Bishkek"},{value:"Asia/Brunei",name:"Brunei"},{value:"Asia/Calcutta",name:"Calcutta"},{value:"Asia/Choibalsan",name:"Choibalsan"},{value:"Asia/Chongqing",name:"Chongqing"},{value:"Asia/Chungking",name:"Chungking"},{value:"Asia/Colombo",name:"Colombo"},{value:"Asia/Dacca",name:"Dacca"},{value:"Asia/Damascus",name:"Damascus"},{value:"Asia/Dhaka",name:"Dhaka"},{value:"Asia/Dili",name:"Dili"},{value:"Asia/Dubai",name:"Dubai"},{value:"Asia/Dushanbe",name:"Dushanbe"},{value:"Asia/Gaza",name:"Gaza"},{value:"Asia/Harbin",name:"Harbin"},{value:"Asia/Ho_Chi_Minh",name:"Ho Chi Minh"},{value:"Asia/Hong_Kong",name:"Hong Kong"},{value:"Asia/Hovd",name:"Hovd"},{value:"Asia/Irkutsk",name:"Irkutsk"},{value:"Asia/Istanbul",name:"Istanbul"},{value:"Asia/Jakarta",name:"Jakarta"},{value:"Asia/Jayapura",name:"Jayapura"},{value:"Asia/Jerusalem",name:"Jerusalem"},{value:"Asia/Kabul",name:"Kabul"},{value:"Asia/Kamchatka",name:"Kamchatka"},{value:"Asia/Karachi",name:"Karachi"},{value:"Asia/Kashgar",name:"Kashgar"},{value:"Asia/Kathmandu",name:"Kathmandu"},{value:"Asia/Katmandu",name:"Katmandu"},{value:"Asia/Kolkata",name:"Kolkata"},{value:"Asia/Krasnoyarsk",name:"Krasnoyarsk"},{value:"Asia/Kuala_Lumpur",name:"Kuala Lumpur"},{value:"Asia/Kuching",name:"Kuching"},{value:"Asia/Kuwait",name:"Kuwait"},{value:"Asia/Macao",name:"Macao"},{value:"Asia/Macau",name:"Macau"},{value:"Asia/Magadan",name:"Magadan"},{value:"Asia/Makassar",name:"Makassar"},{value:"Asia/Manila",name:"Manila"},{value:"Asia/Muscat",name:"Muscat"},{value:"Asia/Nicosia",name:"Nicosia"},{value:"Asia/Novokuznetsk",name:"Novokuznetsk"},{value:"Asia/Novosibirsk",name:"Novosibirsk"},{value:"Asia/Omsk",name:"Omsk"},{value:"Asia/Oral",name:"Oral"},{value:"Asia/Phnom_Penh",name:"Phnom Penh"},{value:"Asia/Pontianak",name:"Pontianak"},{value:"Asia/Pyongyang",name:"Pyongyang"},{value:"Asia/Qatar",name:"Qatar"},{value:"Asia/Qyzylorda",name:"Qyzylorda"},{value:"Asia/Rangoon",name:"Rangoon"},{value:"Asia/Riyadh",name:"Riyadh"},{value:"Asia/Saigon",name:"Saigon"},{value:"Asia/Sakhalin",name:"Sakhalin"},{value:"Asia/Samarkand",name:"Samarkand"},{value:"Asia/Seoul",name:"Seoul"},{value:"Asia/Shanghai",name:"Shanghai"},{value:"Asia/Singapore",name:"Singapore"},{value:"Asia/Taipei",name:"Taipei"},{value:"Asia/Tashkent",name:"Tashkent"},{value:"Asia/Tbilisi",name:"Tbilisi"},{value:"Asia/Tehran",name:"Tehran"},{value:"Asia/Tel_Aviv",name:"Tel Aviv"},{value:"Asia/Thimbu",name:"Thimbu"},{value:"Asia/Thimphu",name:"Thimphu"},{value:"Asia/Tokyo",name:"Tokyo"},{value:"Asia/Ujung_Pandang",name:"Ujung Pandang"},{value:"Asia/Ulaanbaatar",name:"Ulaanbaatar"},{value:"Asia/Ulan_Bator",name:"Ulan Bator"},{value:"Asia/Urumqi",name:"Urumqi"},{value:"Asia/Vientiane",name:"Vientiane"},{value:"Asia/Vladivostok",name:"Vladivostok"},{value:"Asia/Yakutsk",name:"Yakutsk"},{value:"Asia/Yekaterinburg",name:"Yekaterinburg"},{value:"Asia/Yerevan",name:"Yerevan"}]},{group:"Africa",zones:[{value:"Africa/Abidjan",name:"Abidjan"},{value:"Africa/Accra",name:"Accra"},{value:"Africa/Addis_Ababa",name:"Addis Ababa"},{value:"Africa/Algiers",name:"Algiers"},{value:"Africa/Asmara",name:"Asmara"},{value:"Africa/Asmera",name:"Asmera"},{value:"Africa/Bamako",name:"Bamako"},{value:"Africa/Bangui",name:"Bangui"},{value:"Africa/Banjul",name:"Banjul"},{value:"Africa/Bissau",name:"Bissau"},{value:"Africa/Blantyre",name:"Blantyre"},{value:"Africa/Brazzaville",name:"Brazzaville"},{value:"Africa/Bujumbura",name:"Bujumbura"},{value:"Africa/Cairo",name:"Cairo"},{value:"Africa/Casablanca",name:"Casablanca"},{value:"Africa/Ceuta",name:"Ceuta"},{value:"Africa/Conakry",name:"Conakry"},{value:"Africa/Dakar",name:"Dakar"},{value:"Africa/Dar_es_Salaam",name:"Dar es Salaam"},{value:"Africa/Djibouti",name:"Djibouti"},{value:"Africa/Douala",name:"Douala"},{value:"Africa/El_Aaiun",name:"El Aaiun"},{value:"Africa/Freetown",name:"Freetown"},{value:"Africa/Gaborone",name:"Gaborone"},{value:"Africa/Harare",name:"Harare"},{value:"Africa/Johannesburg",name:"Johannesburg"},{value:"Africa/Kampala",name:"Kampala"},{value:"Africa/Khartoum",name:"Khartoum"},{value:"Africa/Kigali",name:"Kigali"},{value:"Africa/Kinshasa",name:"Kinshasa"},{value:"Africa/Lagos",name:"Lagos"},{value:"Africa/Libreville",name:"Libreville"},{value:"Africa/Lome",name:"Lome"},{value:"Africa/Luanda",name:"Luanda"},{value:"Africa/Lubumbashi",name:"Lubumbashi"},{value:"Africa/Lusaka",name:"Lusaka"},{value:"Africa/Malabo",name:"Malabo"},{value:"Africa/Maputo",name:"Maputo"},{value:"Africa/Maseru",name:"Maseru"},{value:"Africa/Mbabane",name:"Mbabane"},{value:"Africa/Mogadishu",name:"Mogadishu"},{value:"Africa/Monrovia",name:"Monrovia"},{value:"Africa/Nairobi",name:"Nairobi"},{value:"Africa/Ndjamena",name:"Ndjamena"},{value:"Africa/Niamey",name:"Niamey"},{value:"Africa/Nouakchott",name:"Nouakchott"},{value:"Africa/Ouagadougou",name:"Ouagadougou"},{value:"Africa/Porto-Novo",name:"Porto-Novo"},{value:"Africa/Sao_Tome",name:"Sao Tome"},{value:"Africa/Timbuktu",name:"Timbuktu"},{value:"Africa/Tripoli",name:"Tripoli"},{value:"Africa/Tunis",name:"Tunis"},{value:"Africa/Windhoek",name:"Windhoek"}]},{group:"Australia",zones:[{value:"Australia/ACT",name:"ACT"},{value:"Australia/Adelaide",name:"Adelaide"},{value:"Australia/Brisbane",name:"Brisbane"},{value:"Australia/Broken_Hill",name:"Broken Hill"},{value:"Australia/Canberra",name:"Canberra"},{value:"Australia/Currie",name:"Currie"},{value:"Australia/Darwin",name:"Darwin"},{value:"Australia/Eucla",name:"Eucla"},{value:"Australia/Hobart",name:"Hobart"},{value:"Australia/LHI",name:"LHI"},{value:"Australia/Lindeman",name:"Lindeman"},{value:"Australia/Lord_Howe",name:"Lord Howe"},{value:"Australia/Melbourne",name:"Melbourne"},{value:"Australia/North",name:"North"},{value:"Australia/NSW",name:"NSW"},{value:"Australia/Perth",name:"Perth"},{value:"Australia/Queensland",name:"Queensland"},{value:"Australia/South",name:"South"},{value:"Australia/Sydney",name:"Sydney"},{value:"Australia/Tasmania",name:"Tasmania"},{value:"Australia/Victoria",name:"Victoria"},{value:"Australia/West",name:"West"},{value:"Australia/Yancowinna",name:"Yancowinna"}]},{group:"Indian",zones:[{value:"Indian/Antananarivo",name:"Antananarivo"},{value:"Indian/Chagos",name:"Chagos"},{value:"Indian/Christmas",name:"Christmas"},{value:"Indian/Cocos",name:"Cocos"},{value:"Indian/Comoro",name:"Comoro"},{value:"Indian/Kerguelen",name:"Kerguelen"},{value:"Indian/Mahe",name:"Mahe"},{value:"Indian/Maldives",name:"Maldives"},{value:"Indian/Mauritius",name:"Mauritius"},{value:"Indian/Mayotte",name:"Mayotte"},{value:"Indian/Reunion",name:"Reunion"}]},{group:"Atlantic",zones:[{value:"Atlantic/Azores",name:"Azores"},{value:"Atlantic/Bermuda",name:"Bermuda"},{value:"Atlantic/Canary",name:"Canary"},{value:"Atlantic/Cape_Verde",name:"Cape Verde"},{value:"Atlantic/Faeroe",name:"Faeroe"},{value:"Atlantic/Faroe",name:"Faroe"},{value:"Atlantic/Jan_Mayen",name:"Jan Mayen"},{value:"Atlantic/Madeira",name:"Madeira"},{value:"Atlantic/Reykjavik",name:"Reykjavik"},{value:"Atlantic/South_Georgia",name:"South Georgia"},{value:"Atlantic/Stanley",name:"Stanley"},{value:"Atlantic/St_Helena",name:"St Helena"}]},{group:"Pacific",zones:[{value:"Pacific/Apia",name:"Apia"},{value:"Pacific/Auckland",name:"Auckland"},{value:"Pacific/Chatham",name:"Chatham"},{value:"Pacific/Easter",name:"Easter"},{value:"Pacific/Efate",name:"Efate"},{value:"Pacific/Enderbury",name:"Enderbury"},{value:"Pacific/Fakaofo",name:"Fakaofo"},{value:"Pacific/Fiji",name:"Fiji"},{value:"Pacific/Funafuti",name:"Funafuti"},{value:"Pacific/Galapagos",name:"Galapagos"},{value:"Pacific/Gambier",name:"Gambier"},{value:"Pacific/Guadalcanal",name:"Guadalcanal"},{value:"Pacific/Guam",name:"Guam"},{value:"Pacific/Honolulu",name:"Honolulu"},{value:"Pacific/Johnston",name:"Johnston"},{value:"Pacific/Kiritimati",name:"Kiritimati"},{value:"Pacific/Kosrae",name:"Kosrae"},{value:"Pacific/Kwajalein",name:"Kwajalein"},{value:"Pacific/Majuro",name:"Majuro"},{value:"Pacific/Marquesas",name:"Marquesas"},{value:"Pacific/Midway",name:"Midway"},{value:"Pacific/Nauru",name:"Nauru"},{value:"Pacific/Niue",name:"Niue"},{value:"Pacific/Norfolk",name:"Norfolk"},{value:"Pacific/Noumea",name:"Noumea"},{value:"Pacific/Pago_Pago",name:"Pago Pago"},{value:"Pacific/Palau",name:"Palau"},{value:"Pacific/Pitcairn",name:"Pitcairn"},{value:"Pacific/Ponape",name:"Ponape"},{value:"Pacific/Port_Moresby",name:"Port Moresby"},{value:"Pacific/Rarotonga",name:"Rarotonga"},{value:"Pacific/Saipan",name:"Saipan"},{value:"Pacific/Samoa",name:"Samoa"},{value:"Pacific/Tahiti",name:"Tahiti"},{value:"Pacific/Tarawa",name:"Tarawa"},{value:"Pacific/Tongatapu",name:"Tongatapu"},{value:"Pacific/Truk",name:"Truk"},{value:"Pacific/Wake",name:"Wake"},{value:"Pacific/Wallis",name:"Wallis"},{value:"Pacific/Yap",name:"Yap"}]},{group:"Antarctica",zones:[{value:"Antarctica/Casey",name:"Casey"},{value:"Antarctica/Davis",name:"Davis"},{value:"Antarctica/DumontDUrville",name:"DumontDUrville"},{value:"Antarctica/Macquarie",name:"Macquarie"},{value:"Antarctica/Mawson",name:"Mawson"},{value:"Antarctica/McMurdo",name:"McMurdo"},{value:"Antarctica/Palmer",name:"Palmer"},{value:"Antarctica/Rothera",name:"Rothera"},{value:"Antarctica/South_Pole",name:"South Pole"},{value:"Antarctica/Syowa",name:"Syowa"},{value:"Antarctica/Vostok",name:"Vostok"}]},{group:"Arctic",zones:[{value:"Arctic/Longyearbyen",name:"Longyearbyen"}]},{group:"UTC",zones:[{value:"UTC",name:"UTC"}]},{group:"Manual Offsets",zones:[{value:"UTC-12",name:"UTC-12"},{value:"UTC-11",name:"UTC-11"},{value:"UTC-10",name:"UTC-10"},{value:"UTC-9",name:"UTC-9"},{value:"UTC-8",name:"UTC-8"},{value:"UTC-7",name:"UTC-7"},{value:"UTC-6",name:"UTC-6"},{value:"UTC-5",name:"UTC-5"},{value:"UTC-4",name:"UTC-4"},{value:"UTC-3",name:"UTC-3"},{value:"UTC-2",name:"UTC-2"},{value:"UTC-1",name:"UTC-1"},{value:"UTC+0",name:"UTC+0"},{value:"UTC+1",name:"UTC+1"},{value:"UTC+2",name:"UTC+2"},{value:"UTC+3",name:"UTC+3"},{value:"UTC+4",name:"UTC+4"},{value:"UTC+5",name:"UTC+5"},{value:"UTC+6",name:"UTC+6"},{value:"UTC+7",name:"UTC+7"},{value:"UTC+8",name:"UTC+8"},{value:"UTC+9",name:"UTC+9"},{value:"UTC+10",name:"UTC+10"},{value:"UTC+11",name:"UTC+11"},{value:"UTC+12",name:"UTC+12"},{value:"UTC+13",name:"UTC+13"},{value:"UTC+14",name:"UTC+14"}]}]}}}),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer",{url:"/motiondialer",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:16}}})}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessListCtrl",["$scope","$uibModal","$translate","xAlert","Modal","MotionDialerProcess","uiGridConstants","usSpinnerService",function(a,b,c,d,e,f,g,h){a.initView=function(){return a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"id",width:60},{name:"name"},{name:"queue",enableSorting:!1},{name:"extension",enableSorting:!1},{name:"id_list",enableSorting:!1,cellTemplate:'',cellClass:"ui-grid-vcenter"},{name:"status",cellTemplate:"",cellClass:"ui-grid-vcenter",filter:{type:g.filter.SELECT,selectOptions:[{value:"RUN",label:"RUNNING"},{value:"STOP",label:"STOPPED"}]}},{name:"updatedtime",sort:{direction:g.DESC},enableFiltering:!1},{name:"action",cellTemplate:'
',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},f.list({page:1,size:6e5}).$promise.then(function(b){console.log(b),b.status>0?a.gridOptions.data=b.response.RMI.rows:d.show("Please, check your connection!","danger")})["catch"](function(a){d.error(a)})["finally"](function(){h.stop("spinner-grid")})},a.createProcessQueue=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/process/list/list.create.queue.modal.html",controller:"MotionDialerProcessListCreateQueueCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.createProcessSquare=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/process/list/list.create.square.modal.html",controller:"MotionDialerProcessListCreateSquareCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.deleteItem=e.confirm["delete"](function(b){return f["delete"]({id:b}).$promise.then(function(e){e.status>0?(_.remove(a.gridOptions.data,{id:b}),d.show(c.instant("MESSAGE_WELL_DONE"),"success")):d.show(e.message||"Please, check your connection!","danger")})["catch"](function(a){d.error(a)})})}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessListCreateQueueCtrl",["$scope","$translate","$uibModalInstance","MotionDialerProcess","MotionDialerList","Trunk","VoiceQueue","Route","xAlert",function(a,b,c,d,e,f,g,h,i){a.form={},a.item={fetch_sort:"ASC",timeout:3},a.initModal=function(){return g.get().$promise.then(function(b){return a.queues={},b&&(a.queues=b.rows),f.get().$promise}).then(function(b){return a.trunks={},b&&(a.trunks=b.rows),a.trunks.push({name:"fake"}),e.list({page:1,size:6e5}).$promise}).then(function(b){a.lists={},b.status>0?a.lists=b.response.RMI.rows:i.show("Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.save=function(){console.log(a.item);var e="_process_"+a.item.name+Math.round(1e5*Math.random()),f="Generated by Motion Dialer, Process Queue"+(a.item.description?", "+a.item.description:"");return h.save({appdata:"Internal Call",context:"from-sip",exten:e.replace(/\s/g,"_"),type:"internal",description:f,Applications:[{appdata:["CDR(type)=tigerdial"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["QUEUE_PRIO=99"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["CALLERID(name)=${AUTODIAL_NAME}"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["CALLERID(num)=${AUTODIAL_PHONE}"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:[a.item.queue.name,"","","",a.item.timeout],app:"Queue",interval:"*,*,*,*",type:"internal"}]}).$promise.then(function(b){return d.insert({name:a.item.name,id_list:a.item.list.id,queue:a.item.queue.name,device:a.item.device.name,context:"from-sip",extension:e.replace(/\s/g,"_"),description:a.item.description,auto_closed:!0,fetch_sort:a.item.fetch_sort,hooks:[{target:"http://localhost:9000/api/report/integrations/tdDisposal",type:"http",http_method:"POST",json:"true",event:"hangup"}]}).$promise}).then(function(a){a.status>0?(i.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):i.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessListCreateSquareCtrl",["$scope","$translate","$uibModalInstance","MotionDialerProcess","MotionDialerList","SquareProject","Trunk","Route","xAlert",function(a,b,c,d,e,f,g,h,i){a.form={},a.item={fetch_sort:"ASC"},a.initModal=function(){return f.get().$promise.then(function(b){return a.projects={},b&&(a.projects=b.rows),g.get().$promise}).then(function(b){return a.trunks={},b&&(a.trunks=b.rows),a.trunks.push({name:"fake"}),e.list({page:1,size:6e5}).$promise}).then(function(b){a.lists={},b.status>0?a.lists=b.response.RMI.rows:i.show("Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.save=function(){console.log(a.item);var e="_process_"+a.item.name+Math.round(1e5*Math.random()),f="Generated by Motion Dialer, Process Square"+(a.item.description?", "+a.item.description:"");return h.save({appdata:"Internal Call",context:"from-sip",exten:e.replace(/\s/g,"_"),type:"internal",description:f,Applications:[{appdata:["CDR(type)=tigerdial"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["agi://127.0.0.1/square",a.item.project.name],app:"AGI",interval:"*,*,*,*",type:"internal"}]}).$promise.then(function(b){return d.insert({name:a.item.name,id_list:a.item.list.id,queue:"none",device:a.item.device.name,context:"from-sip",extension:e.replace(/\s/g,"_"),description:a.item.description,auto_closed:!0,channel_limit:15,fetch_sort:a.item.fetch_sort}).$promise}).then(function(a){a.status>0?(i.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):i.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.processes.list",{url:"/list",templateUrl:"app/motiondialer/process/list/list.html",controller:"MotionDialerProcessListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerProcess",["$resource",function(a){return a("/api/rest/process/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").factory("MotionDialerSpooler",["$resource",function(a){return a("/api/rest/spooler/:controller/:retrieve/:peer",null,{list:{method:"POST",params:{controller:"list"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},summary:{method:"POST",params:{controller:"summary"}},close:{method:"POST",params:{controller:"retrieve",retrieve:"close"}},open:{method:"POST",params:{controller:"retrieve",retrieve:"open"}},blacklist:{method:"POST",params:{controller:"retrieve",retrieve:"blacklist"}},planning:{method:"POST",params:{controller:"retrieve",retrieve:"planning"}},planningpeer:{method:"POST",params:{controller:"retrieve",retrieve:"planning",peer:"peer"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.processes",{url:"/processes",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessViewCtrl",["$scope","$translate","$stateParams","$uibModal","xAlert","uiGridConstants","usSpinnerService","MotionDialerProcess","MotionDialerSpooler","Modal","VoiceQueue",function(a,b,c,d,e,f,g,h,i,j,k){a.process={},a.techs=["SIP","IAX","LOCAL","KHOMP"],a.dialFormats=["tech/device/number","tech/number@device"],a.checkDuplicates=["ALWAYS","IFOPEN","NO"],a.codecs=["g729","ilbc","gsm","ulaw","alaw"],a.getProcess=function(){return h.find({id:parseInt(c.id)}).$promise.then(function(b){console.log(b),b.status>0?(b.response.RMI.codecs=b.response.RMI.codecs.split(","),a.process=b.response.RMI,a.process.hooks&&a.process.hooks.length?a.process.disposal=!0:a.process.disposal=!1):e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.getSummary=function(){return i.summary({id_process:parseInt(c.id)}).$promise.then(function(b){if(b.status>0){a.summary=b.response.RMI.totals,a.total=0;for(var c=0;c0?(c.response.RMI.codecs=c.response.RMI.codecs.split(","),a.process=c.response.RMI,a.process.hooks&&a.process.hooks.length?a.process.disposal=!0:a.process.disposal=!1,e.show(b.instant("MESSAGE_WELL_DONE"),"success")):c.response.RMI.errors.forEach(function(a){a?e.show(a.field+": "+a.error,"danger"):e.show("Please, check your connection!","danger")})})["catch"](function(a){e.error(a)})},a.getSpooler=function(){return g.spin("spinner-grid"),a.gridOptions||(a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,headerCellFilter:"translate",columnDefs:[{name:"name"},{name:"phones",cellTemplate:"
{{row.entity.phones.join(',')}}
",cellClass:"ui-grid-vcenter"},{name:"retrieve",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",filter:{type:f.filter.SELECT,selectOptions:[{value:"PLANNED_PEER",label:"PLANNED PEER"},{value:"PLANNED",label:"PLANNED"},{value:"BLACK_LIST",label:"BLACKLIST"},{value:"OPEN",label:"OPEN"},{value:"CLOSED",label:"CLOSED"},{value:"MAX_ATTEMPTS",label:"MAX ATTEMPTS"},{value:"COUNTER_BLOCK",label:"COUNTER BLOCK"},{value:"PLANNED_REQUEST",label:"PLANNED REQUEST"},{value:"DELETE",label:"DELETE"}]}},{name:"counter",enableFiltering:!1},{name:"planningtime",cellTemplate:"
{{row.entity.planningtime | date:'yyyy-MM-dd HH:mm'}}
",cellClass:"ui-grid-vcenter",enableFiltering:!1},{name:"action",cellTemplate:'
',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]}),i.list({id_process:parseInt(c.id),page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})["finally"](function(){g.stop("spinner-grid")})},a.deleteSpooler=j.confirm["delete"](function(c){return i["delete"]({id:c}).$promise.then(function(d){d.status>0?(_.remove(a.gridOptions.data,{id:c}),e.show(b.instant("MESSAGE_WELL_DONE"),"success")):e.show(d.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})}),a.historySpooler=function(b){var c=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.spooler.history.modal.html",controller:"MotionDialerViewSpoolerHistoryCtrl",resolve:{historySpooler:function(){return b}}});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.editSpooler=function(a){var b=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.spooler.edit.modal.html",controller:"MotionDialerViewSpoolerEditCtrl",resolve:{entitySpooler:function(){return a}}});b.result.then(function(){})},a.initSettings=function(){return a.queues=null,k.get().$promise.then(function(b){b&&(a.queues=b.rows)})["catch"](function(a){e.error(a)})},a.createInterval=function(b){var c=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.create.interval.modal.html",controller:"MotionDialerViewCreateIntervalCtrl",resolve:{objectProcess:function(){return a.process},intervalType:function(){return b},intervalValue:function(){return b?"8:00-20:00|MON-FRI|*|*":"00:01-07:59|SAT-SUN|*|*"}}});c.result.then(function(b){a.process=b})},a.editInterval=function(b,c){var e=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.create.interval.modal.html",controller:"MotionDialerViewCreateIntervalCtrl",resolve:{objectProcess:function(){return a.process},intervalType:function(){return b},intervalValue:function(){return c}}});e.result.then(function(b){a.process=b})},a.deleteInterval=j.confirm["delete"](function(c,d){var f={id:a.process.id};return d?(f.intervals=[],f.intervals=f.intervals.concat(a.process.intervals),f.intervals.splice(c,1)):(f.not_intervals=[],f.not_intervals=f.not_intervals.concat(a.process.not_intervals),f.not_intervals.splice(c,1)),h.update(f).$promise.then(function(c){c.status>0?(c.response.RMI.codecs=c.response.RMI.codecs.split(","),a.process=c.response.RMI,e.show(b.instant("MESSAGE_WELL_DONE"),"success")):c.response.RMI.errors.forEach(function(a){a?e.show(a.field+": "+a.error,"danger"):e.show("Please, check your connection!","danger")})})["catch"](function(a){e.error(a)})}),a.runOrStop=function(){var b=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.run.process.modal.html",controller:"MotionDialerViewRunProcessCtrl",resolve:{statusProcess:function(){return a.process.status}}});b.result.then(function(b){a.process.status=b.status})}}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewCreateIntervalCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerProcess","xAlert","objectProcess","intervalType","intervalValue","interval",function(a,b,c,d,e,f,g,h,i,j){function k(a){var b,c=a.split("|"),d={};return c.forEach(function(a,c){switch(c){case 0:"*"!==a?(b=a.split("-"),d.t_from=moment(b[0],"HH:mm"),d.t_to=moment(b[1],"HH:mm"),d.alwaysTime=!1):(d.t_from=moment(new Date),d.t_to=moment(new Date),d.alwaysTime=!0);break;case 1:"*"!==a?(b=a.split("-"),d.wd_from=b[0].toLowerCase(),d.wd_to=b[1]?b[1].toLowerCase():"always"):(d.wd_from="always",d.wd_to="always");break;case 2:"*"!==a?(b=a.split("-"),d.md_from=b[0],d.md_to=b[1]?b[1]:"always"):(d.md_from="always",d.md_to="always");break;case 3:"*"!==a?(b=a.split("-"),d.m_from=b[0],d.m_to=b[1]?b[1]:"always"):(d.m_from="always",d.m_to="always")}}),d}function l(a){var b,c,d,e;return b=a.t_from&&a.t_to&&!a.alwaysTime?moment(a.t_from).format("HH:mm")+"-"+moment(a.t_to).format("HH:mm"):"*",a.wd_from&&"always"!==a.wd_from?(c=a.wd_from.toUpperCase(),a.wd_to&&"always"!==a.wd_to&&(c+="-"+a.wd_to.toUpperCase())):c="*",a.md_from&&"always"!==a.md_from?(d=a.md_from,a.md_to&&"always"!==a.md_to&&(d+="-"+a.md_to)):d="*",a.m_from&&"always"!==a.m_from?(e=a.m_from,a.m_to&&"always"!==a.m_to&&(e+="-"+a.m_to)):e="*",b+"|"+c+"|"+d+"|"+e}a.form={},a.$interval=j.interval,a.splittedInterval=k(i),a.save=function(){var d=l(a.splittedInterval);console.log(d);var i={id:g.id};return h?(i.intervals=[],i.intervals=i.intervals.concat(g.intervals),i.intervals.push(d)):(i.not_intervals=[],i.not_intervals=i.not_intervals.concat(g.not_intervals),i.not_intervals.push(d)),console.log(i),e.update(i).$promise.then(function(a){ -a.status>0?(a.response.RMI.codecs=a.response.RMI.codecs.split(","),f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a.response.RMI)):a.response.RMI.errors.forEach(function(a){a?f.show(a.field+": "+a.error,"danger"):f.show("Please, check your connection!","danger")})})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.processes.view",{url:"/view/:id",templateUrl:"app/motiondialer/process/view/view.html",controller:"MotionDialerProcessViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.motiondialer.processes.view.overview",{url:"/overview",templateUrl:"app/motiondialer/process/view/view.overview.html"}).state("main.motiondialer.processes.view.settings",{url:"/settings",templateUrl:"app/motiondialer/process/view/view.settings.html"}).state("main.motiondialer.processes.view.intervals",{url:"/intervals",templateUrl:"app/motiondialer/process/view/view.intervals.html"}).state("main.motiondialer.processes.view.spooler",{url:"/spooler",templateUrl:"app/motiondialer/process/view/view.spooler.html"})}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewRunProcessCtrl",["$scope","$stateParams","$uibModalInstance","$translate","statusProcess","MotionDialerProcess","xAlert",function(a,b,c,d,e,f,g){a.status="RUN"===e?"STOP":"RUN",a.yes=function(){f.update({id:parseInt(b.id),status:a.status}).$promise.then(function(a){a.status>0?(g.show(d.instant("MESSAGE_WELL_DONE"),"success"),c.close(a.response.RMI)):g.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){g.error(a)})},a.no=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewSpoolerEditCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerSpooler","xAlert","entitySpooler","Agent",function(a,b,c,d,e,f,g,h){a.moment=moment,a.initModal=function(){return h.get().$promise.then(function(b){a.agents=[],b&&b.rows.forEach(function(b){a.agents.push("SIP/"+b.name)})})["catch"](function(a){f.error(a)})},a.entitySpooler=g,a.save=function(){var d;switch(a.entitySpooler.retrieve){case"CLOSED":d=e.close({id:parseInt(a.entitySpooler.id)});break;case"OPEN":d=e.open({id:parseInt(a.entitySpooler.id)});break;case"BLACK_LIST":d=e.blacklist({id:parseInt(a.entitySpooler.id)});break;case"PLANNED":d=e.planning({id:parseInt(a.entitySpooler.id),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm")});break;case"PLANNED_PEER":d=e.planningpeer({id:parseInt(a.entitySpooler.id),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm"),peer:a.entitySpooler.planningpeer})}d?d.$promise.then(function(a){console.log(a),a.status>0?(f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close()):a.response.RMI.errors.forEach(function(a){a?f.show(a.field+": "+a.error,"danger"):f.show("Please, check your connection!","danger")})})["catch"](function(a){f.error(a)}):f.show("RETRIEVE NOT FOUND","danger")},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewSpoolerHistoryCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerSpooler","xAlert","historySpooler",function(a,b,c,d,e,f,g){a.historySpooler=g,a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").factory("ReportMotionDialer",["$resource",function(a){return a("/api/report/motiondialer/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("ResetCtrl",["$scope","Auth","$location","$window","$rootScope","Setting","xAlert","$stateParams","$state",function(a,b,c,d,e,f,g,h,i){a.userReset={},a.getInfo=function(){return f.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)})},e.bodyLayout="login",a.$on("$viewContentLoaded",function(){Metronic.init(),Layout.init()}),a.reset=function(){b.reset({token:h.token,password:a.userReset.password}).then(function(){i.go("login",{reset:!0})})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("reset",{url:"/reset/:token",templateUrl:"app/reset/reset.html",controller:"ResetCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("SalesforceListCtrl",["$scope","SalesforceAccount","gridOptions","xAlert","$translate",function(a,b,c,d,e){a.initView=function(){var d={exporterCsvFilename:"salesforce_account.csv",columnDefs:[{name:"name",displayName:"APPLICATION_NAME"},{name:"username"},{name:"remoteUri",displayName:"APPLICATION_URI"},{name:"action",buttons:[{"class":"blue-hoki",href:"/salesforce/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkAccount(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.checkAccount=function(a){return b.check({id:a}).$promise.then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.list",{url:"/list",templateUrl:"app/salesforce/list/list.html",controller:"SalesforceListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("SalesforceAccount",["$resource",function(a){return a("/api/salesforce/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"},fields:{params:{controller:"fields"},isArray:!0},check:{params:{controller:"check"}}})}]).factory("SalesforceConfiguration",["$resource",function(a){return a("/api/salesforce/accounts/:accountId/configurations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]).factory("SalesforceField",["$resource",function(a){return a("/api/salesforce/accounts/:accountId/configurations/:configurationId/fields/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce",{url:"/salesforce",template:"
","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view.configurations",{url:"/configurations",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SalesforceViewConfigurationListCtrl",["$scope","$stateParams","$translate","gridOptions","SalesforceConfiguration","$uibModal",function(a,b,c,d,e,f){a.initView=function(){var c={exporterCsvFilename:"salesforce_configurations.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/salesforce/view/{{row.entity.AccountId}}/configurations/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(e,c,a,{accountId:b.id})},a.createItem=function(){var b=f.open({animation:!0,templateUrl:"app/salesforce/view/configuration/list/create.modal.html",controller:"SalesforceCreateConfigurationCtrl"});b.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("SalesforceCreateConfigurationCtrl",["$scope","$translate","$uibModalInstance","SalesforceConfiguration","xAlert","$stateParams","channel",function(a,b,c,d,e,f,g){a.form={},a.item={},a.channels=g,a.item.channel="voice",a.item.type="Queue",a.save=function(){return d.save({accountId:f.id},a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view.configurations.list",{url:"/list",templateUrl:"app/salesforce/view/configuration/list/list.html",controller:"SalesforceViewConfigurationListCtrl"})}]),angular.module("xCallyShuttleApp").controller("SalesforceViewConfigurationViewCtrl",["$scope","$filter","$stateParams","$translate","socket","variable","xAlert","SalesforceAccount","SalesforceConfiguration","SalesforceField","Variable",function(a,b,c,d,e,f,g,h,i,j,k){a.$on("$destroy",function(){e.unsyncUpdates("salesforce_field")}),a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:300,scrollInertia:0},a.fieldType=[{type:"string",title:"String"},{type:"variable",title:"Variable"},{type:"customVariable",title:"Custom Variable"}],a.descFieldType=[{type:"string",title:"String"},{type:"keyValue",title:"Key Value"}],a.groupVariableByGroup=function(a){switch(a.group){case"voice_queue":return"Voice: Queue";default:return"Other"}},a.initView=function(){a.configurationName="",a.subjectConfig=[],a.descriptionConfig=[],a.fieldConfig=[],a.variables=f},a.getConfiguration=function(){return i.get({accountId:c.id,id:c.configurationId}).$promise.then(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,e.socket.on("salesforce_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})})["catch"](function(a){g.error(a)})},a.getCustomVariables=function(){return k.get().$promise.then(function(b){a.customVariables=b.rows})["catch"](function(a){g.error(a)})},a.getFields=function(){return h.fields({id:c.id}).$promise.then(function(c){a.accountFields=_.sortByOrder(b("salesforce")(c),"name","asc"),console.log(a.accountFields)})["catch"](function(a){g.error(a)})},a.addItem=function(b){var d={};switch(b){case"subject":case"description":d={type:"string",content:""};break;case"field":d={content:""}}return i.save({accountId:c.id,id:c.configurationId,controller:b},d).$promise.then(function(c){switch(b){case"subject":a.subjectConfig.push(c);break;case"description":a.descriptionConfig.push(c);break;case"field":a.fieldConfig.push(c)}})["catch"](function(a){g.error(a)})},a.changeType=function(b){"variable"===b.type?(b.content="",b.variableName=""):"string"===b.type?(b.VariableId=null,b.variableName=""):"customVariable"===b.type&&(b.VariableId=null,b.content=""),a.updateField(b)},a.updateField=function(a){return j.update({accountId:c.id,configurationId:c.configurationId,id:a.id},a).$promise.then(function(){})["catch"](function(a){g.error(a)})},a.removeItem=function(a){return j["delete"]({accountId:c.id,configurationId:c.configurationId,id:a.id}).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){g.error(a)})},a.changeDescType=function(b){"keyValue"===b.type?(b.content="","string"===b.keyType?(b.VariableId=null,b.variableName=""):"variable"===b.keyType?(b.keyContent="",b.VariableId=null):"customVariable"===b.keyType&&(b.keyContent="",b.variableName="")):"string"===b.type&&(b.VariableId=null,b.variableName="",b.key="",b.keyContent=""),a.updateField(b)},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"name",b);if(c)switch(c.type){case"picklist":return c.picklistValues;default:return}}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view.configurations.view",{url:"/view/:configurationId",templateUrl:"app/salesforce/view/configuration/view/view.html",controller:"SalesforceViewConfigurationViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("SalesforceViewCtrl",["$scope","$http","$stateParams","$translate","$location","WizardHandler","socket","xAlert","Modal","$filter","SalesforceAccount",function(a,b,c,d,e,f,g,h,i,j,k){a.initView=function(){return k.get({id:c.id}).$promise.then(function(b){a.account=b})["catch"](function(a){h.error(a)})},a.updateItem=function(){return k.update({id:c.id},a.account).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE")+".","success")})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view",{url:"/view/:id",templateUrl:"app/salesforce/view/view.html",controller:"SalesforceViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.salesforce.view.account",{url:"/account",templateUrl:"app/salesforce/view/view.account.html"})}]),angular.module("xCallyShuttleApp").controller("SalesforceWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={},a.item.serverUrl=c.protocol()+"://"+location.host},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){console.log(a.item),b.post("api/salesforce/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/salesforce/list")}).error(function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.wizard",{url:"/wizard",templateUrl:"app/salesforce/wizard/wizard.html",controller:"SalesforceWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.customization",{url:"/customization",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("CustomizationGeneralViewCtrl",["$scope","gridOptions","$uibModal","FileUploader","$cookieStore","xAlert","$translate","Setting","$rootScope",function(a,b,c,d,e,f,g,h,i){a.radioSwitch={isActive:!!i.license.custom,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"};var j=a.uploader=new d({url:"api/settings/logo/main",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+e.get("token")}});j.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),j.onSuccessItem=function(a,b){i.settings.logo=b.logo,f.show(g.instant("MESSAGE_WELL_DONE"),"success")},j.onErrorItem=function(){f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},j.onCompleteAll=function(){j.clearQueue()};var k=a.uploader2=new d({url:"api/settings/logo/login",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+e.get("token")}});k.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),k.onSuccessItem=function(a,b){f.show(g.instant("MESSAGE_WELL_DONE"),"success")},k.onErrorItem=function(){f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},k.onCompleteAll=function(){k.clearQueue()},a.initView=function(){return h.get({id:1}).$promise.then(function(b){a.settings={defaultLogo:b.defaultLogo,defaultLoginLogo:b.defaultLoginLogo,footerWhiteLabel:b.footerWhiteLabel,defaultFooterWhiteLabel:b.defaultFooterWhiteLabel}})["catch"](function(a){f.error(a)})},a.update=function(){return h.update({id:1},a.settings).$promise.then(function(b){_.merge(i.settings,a.settings),f.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.customization.view.general",{url:"/general",templateUrl:"app/setting/customization/view/general/general.html",controller:"CustomizationGeneralViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("CustomizationViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.customization.view",{url:"/view",templateUrl:"app/setting/customization/view/view.html",controller:"CustomizationViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.general",{url:"/general",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("GeneralMainViewCtrl",["$scope","xAlert","$translate","Setting",function(a,b,c,d){a.initView=function(){return d.get({id:1}).$promise.then(function(b){a.settings={agi_port:b.agi_port,min_internal:b.min_internal,min_mailbox:b.min_mailbox,securePassword:b.securePassword}})["catch"](function(a){b.error(a)})},a.update=function(){return d.update({id:1},a.settings).$promise.then(function(a){b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.general.view.main",{url:"/main",templateUrl:"app/setting/general/view/main/main.html",controller:"GeneralMainViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("GeneralViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.general.view",{url:"/view",templateUrl:"app/setting/general/view/view.html",controller:"GeneralViewCtrl"})}]),angular.module("xCallyShuttleApp").factory("License",["$resource",function(a){return a("/api/licenses/:id/:controller",{id:"@id"},{request:{method:"POST",params:{id:"request"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.license",{url:"/license",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("LicenseUpdateCtrl",["$scope","$translate","$uibModalInstance","xAlert","Setting",function(a,b,c,d,e){a.form={},a.item={},a.getLicense=function(){return e.get({id:1}).$promise.then(function(b){a.item.license=b.license})["catch"](function(a){d.error(a)})},a.update=function(){return e.update({id:1},a.item).$promise.then(function(a){d.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("LicenseViewCtrl",["$scope","$rootScope","$translate","License","xAlert","$window","$uibModal",function(a,b,c,d,e,f,g){a.radioSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initView=function(){return d.get(function(b){a.item=b.license})},a.submitRequest=function(){return d.request(a.item,function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")},function(a){switch(a.status){case 304:e.show(a.statusText,"info");break;default:e.error(a)}})},a.updateLicense=function(){var a=g.open({animation:!0,templateUrl:"app/setting/license/view/update.modal.html",controller:"LicenseUpdateCtrl"});a.result.then(function(){f.location.reload()})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.license.view",{url:"/view",templateUrl:"app/setting/license/view/view.html",controller:"LicenseViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/pricing-tables.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("Externip",["$resource",function(a){return a("/api/network/externips/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("Localnet",["$resource",function(a){return a("/api/network/localnets/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network",{url:"/network",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ExternipCtrl",["$scope","$uibModal","gridOptions","Externip",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"network_externip.csv",columnDefs:[{name:"value"},{name:"action",buttons:[{"class":"blue-hoki",onClick:"grid.appScope.createItem(row.entity)",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(d,b,a)},a.createItem=function(c){var d=b.open({animation:!0,templateUrl:"app/setting/network/view/externip/externip.create.modal.html",controller:"ExternipCreateCtrl",resolve:{item:c}});d.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("ExternipCreateCtrl",["$scope","$translate","$uibModalInstance","$stateParams","Externip","xAlert","item",function(a,b,c,d,e,f,g){a.initModal=function(){a.form={},a.item=g||{},a.title=g?b.instant("APPLICATION_EDIT_EXTERNIP"):b.instant("APPLICATION_NEW_EXTERNIP")},a.save=function(){return g?e.update({id:a.item.id},a.item).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)}):e.save({},a.item).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network.view.externip",{url:"/externip",templateUrl:"app/setting/network/view/externip/externip.html",controller:"ExternipCtrl"})}]),angular.module("xCallyShuttleApp").controller("LocalnetCtrl",["$scope","gridOptions","Localnet","$uibModal",function(a,b,c,d){a.initView=function(){var d={exporterCsvFilename:"network_localnet.csv",columnDefs:[{name:"value"},{name:"action",buttons:[{"class":"blue-hoki",onClick:"grid.appScope.createItem(row.entity)",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a)},a.createItem=function(b){var c=d.open({animation:!0,templateUrl:"app/setting/network/view/localnet/localnet.create.modal.html",controller:"LocalnetCreateCtrl",resolve:{item:b}});c.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("LocalnetCreateCtrl",["$scope","$translate","$uibModalInstance","$stateParams","Localnet","xAlert","item",function(a,b,c,d,e,f,g){a.initModal=function(){if(a.form={},a.item=g||{},a.title=g?b.instant("APPLICATION_EDIT_LOCALNET"):b.instant("APPLICATION_NEW_LOCALNET"),g&&g.value){var c=a.item.value.split("/");c.length>1&&(a.item.address=c[0],a.item.mask=c[1])}},a.save=function(){var d=a.item.address+"/"+a.item.mask;return g?e.update({id:a.item.id},{value:d}).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)}):e.save({},{value:d}).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network.view.localnet",{url:"/localnet",templateUrl:"app/setting/network/view/localnet/localnet.html",controller:"LocalnetCtrl"})}]),angular.module("xCallyShuttleApp").controller("NetworkViewCtrl",function(){}),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network.view",{url:"/view",templateUrl:"app/setting/network/view/view.html",controller:"NetworkViewCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting",{url:"/setting",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:18}}})}]),angular.module("xCallyShuttleApp").factory("Setting",["$resource",function(a){return a("/api/settings/:id/:controller/:param",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("Smtp",["$resource",function(a){return a("/api/mail/servers/out/:id/:controller/:controller2",{id:"@id"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.smtp",{url:"/smtp",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SmtpViewCtrl",["$scope","$stateParams","$translate","socket","MailServerOut","Setting","MailAccount","xAlert",function(a,b,c,d,e,f,g,h){a.initView=function(){return a.smtpDisabled=!1,a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.item={account:{service:!0,MailServerOut:{ssl:!1}}},a.$on("$destroy",function(){d.socket.removeAllListeners("mail_server_out:state")}),d.socket.on("mail_server_out:state",function(b){a.item&&Number(b.id)===a.item.account.MailServerOut.id&&(a.item.account.MailServerOut.state=b.state,a.item.account.MailServerOut.source=JSON.parse(b.source))}),f.get({id:"smtp"}).$promise.then(function(b){a.item.account=b})["catch"](function(b){switch(b.status){case 404:a.item.account.name=null,a.item.account.address=null,a.item.account.MailServerOut={ssl:!1},h.show("Service SMTP server not configured.","info");break;default:h.error(b)}})},a.updateItem=function(){return a.item.account.id?(delete a.item.account.MailServerOut.state,delete a.item.account.MailServerOut.source,f.update({id:"smtp",controller:a.item.account.id},a.item.account).$promise.then(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})):f.save({id:"smtp"},{description:"Custom Account",name:a.item.account.name,address:a.item.account.address,service:a.item.account.service,custom:!0,MailServerOut:a.item.account.MailServerOut}).$promise.then(function(b){a.item.account=b,h.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},a.test=function(){return e.get({id:a.item.account.MailServerOut.id,controller:"test"}).$promise["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.smtp.view",{url:"/view",templateUrl:"app/setting/smtp/view/view.html",controller:"SmtpViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system",{url:"/system",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SystemViewConsoleCtrl",["$scope","Setting","xAlert","usSpinnerService","$timeout","$translate","socket",function(a,b,c,d,e,f,g){function h(b){var c=_.findIndex(a.commandHistory.commands,function(a){return a===b});-1!==c&&a.commandHistory.commands.splice(c,1),a.commandHistory.commands.unshift(b)}a.output=""+f.instant("APPLICATION_CONSOLE_WELCOME")+"
",a.item={command:""},a.commandHistory={commands:[],index:-1},a.busy=!1,a.cmdFocus=function(){e(function(){angular.element("#command").trigger("focus")})},a.sendCmd=function(){return a.commandHistory.index=-1,a.tmp=a.item.command,a.item.command="",a.output+="motion*CLI> "+a.tmp+"
",a.tmp?(h(a.tmp.trim()),a.busy=!0,d.spin("console-spinner"),b.save({controller:"asterisk"},{command:a.tmp}).$promise):void 0},g.socket.on("console:result",function(b){a.output+=b.content.replace(/(?:\r\n|\r|\n)/g,"
").replace("Response: Follows
Privilege: Command
","").replace(/ActionID: .[0-9]*
/,"").replace(/ActionID: .[0-9]*/,"")+"
",d.stop("console-spinner"),a.busy=!1,a.cmdFocus()}),g.socket.on("console:error",function(b){d.stop("console-spinner"),a.output+="command error:"+b.data.message+"
",a.busy=!1,a.cmdFocus()}),a.keyUp=function(b){switch(b.keyCode){case 40:a.commandHistory.commands[a.commandHistory.index-1]?a.item.command=a.commandHistory.commands[--a.commandHistory.index]:(a.item.command="",a.commandHistory.index=-1);break;case 38:a.commandHistory.commands[a.commandHistory.index+1]&&(a.item.command=a.commandHistory.commands[++a.commandHistory.index]);break;case 37:break;case 39:break;default:a.commandHistory.index=-1}},e(function(){angular.element("#command").trigger("focus"),d.stop("console-spinner")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view.console",{url:"/console",templateUrl:"app/setting/system/view/console/console.html",controller:"SystemViewConsoleCtrl"})}]),angular.module("xCallyShuttleApp").controller("SystemViewGeneralCtrl",["$scope","$stateParams","$translate","socket","Setting","xAlert","usSpinnerService",function(a,b,c,d,e,f,g){function h(b){a.system.memory={labels:_.keys(b.memory.details),values:_.values(_.map(b.memory.details,function(a){return Math.round(a/1024)})),Total:Math.round(b.memory.Total/1024)},g.stop("memory-spinner"),a.system.disks=[],_.forEach(b.disks,function(b){a.system.disks.push({mount:b.mount,size:Number((b.size/1048576).toFixed(2)),values:_.values(_.map(b.details,function(a){return Number((a/1048576).toFixed(2))})),labels:_.keys(b.details)})}),a.system.mount=a.system.disks[0],g.stop("disk-spinner"),a.system.cpu={motion:Math.round(b.cpu.motion),cores:[]},_.forEach(b.cpu.cores,function(b){delete b.nice,delete b.irq,a.system.cpu.cores.push({labels:_.keys(b),values:_.values(b),colours:["#803690","#DCDCDC","#00ADF9"]})}),g.stop("cpu-spinner")}a.system={mount:void 0},a.initView=function(){return g.spin("memory-spinner"),g.spin("disk-spinner"),g.spin("cpu-spinner"),e.get({controller:"system"}).$promise.then(function(a){h(a)})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view.general",{url:"/general",templateUrl:"app/setting/system/view/general/general.html",controller:"SystemViewGeneralCtrl"})}]),angular.module("xCallyShuttleApp").controller("SystemViewLogsCtrl",["$scope","$stateParams","$translate","socket","Setting","xAlert","usSpinnerService",function(a,b,c,d,e,f,g){a.initView=function(){return a.logs={errors:"",output:""},g.spin("logs-spinner"),e.get({controller:"logs"}).$promise.then(function(b){a.logs=b,g.stop("logs-spinner")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view.logs",{url:"/logs",templateUrl:"app/setting/system/view/logs/logs.html",controller:"SystemViewLogsCtrl"})}]),angular.module("xCallyShuttleApp").controller("SystemViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view",{url:"/view",templateUrl:"app/setting/system/view/view.html",controller:"SystemViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("UpdateListCtrl",["$scope","gridOptions","$uibModal","$location","Update","xAlert","$log","$translate","$state",function(a,b,c,d,e,f,g,h,i){a.initCounter=function(){a.$on("timer-stopped",function(a,b){f.show(h.instant("MESSAGE_UPDATE_COMPLETED")+' Read more',"success"),i.go("main.setting.updates.list")})},a.initView=function(){return e.get({controller:"current"}).$promise.then(function(b){ -a.currentVersion=b.currentVersion,a.latestVersion=b.latestVersion})["catch"](function(a){console.log(a)})},a.pull=function(){var a=c.open({animation:!0,templateUrl:"app/setting/update/list/list.pull.html",controller:"UpdateListPullCtrl"});a.result.then(function(){return d.path("/setting/updates/landing"),e.pull().$promise.then(function(a){var b=!1;a&&(a.summary&&_.forOwn(a.summary,function(a){a&&(b=!0)}),(a.insertions&&!_.isEmpty(a.insertions)||a.deletions&&!_.isEmpty(a.deletions))&&(b=!0)),b?f.show(h.instant("MESSAGE_PULL_COMPLETED"),"success"):(f.show(h.instant("MESSAGE_NO_UPDATES"),"success"),d.path("/setting/updates/list"))})["catch"](function(a){console.log(a),f.error(a),d.path("/setting/updates/list")})},function(){g.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.updates.list",{url:"/list",templateUrl:"app/setting/update/list/list.html",controller:"UpdateListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"css",insertBefore:"#ng_load_plugins_before",files:["assets/css/pricing-table.css"]}])}]}}).state("main.setting.updates.landing",{url:"/landing",templateUrl:"app/setting/update/list/landing.html",controller:"UpdateListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"css",insertBefore:"#ng_load_plugins_before",files:["assets/css/error.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("UpdateListPullCtrl",["$scope","$uibModalInstance",function(a,b){a.modal={dismissable:!0,title:"Confirm Update",html:"Are you sure you want to update?",buttons:[{classes:"btn btn-success",text:"Update",click:function(){b.close()}},{classes:"btn default",text:"Cancel",click:function(){b.dismiss("cancel")}}]}}]),angular.module("xCallyShuttleApp").factory("Update",["$resource",function(a){return a("/api/updates/:id/:controller",{id:"@id"},{pull:{method:"GET",params:{id:"pull"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.updates",{url:"/updates",template:"
","abstract":!0,data:{permissions:{only:["hasUpdate"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("SquareOdbcListCtrl",["$scope","$uibModal","$translate","SquareOdbc","gridOptions","xAlert",function(a,b,c,d,e,f){a.initView=function(){var b={exporterCsvFilename:"odbc.csv",columnDefs:[{name:"name"},{name:"dsn",displayName:"APPLICATION_ODBC"},{name:"description"},{name:"action",width:250,buttons:[{"class":"blue-hoki",href:"/square/odbc/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkConnection(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=e.gridOptions(d,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/square/odbc/list/list.create.modal.html",controller:"SquareOdbcListCreateCtrl"});c.result.then(function(){a.gridOptions.getPage()})},a.checkConnection=function(a){return d.get({id:a,controller:"check"}).$promise.then(function(){f.show(c.instant("MESSAGE_CONNECTION_VERIFIED"),"success")})["catch"](function(){f.show(c.instant("MESSAGE_CONNECTION_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").controller("SquareOdbcListCreateCtrl",["$scope","$translate","$uibModalInstance","SquareOdbc","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.item.dsn||(a.item.dsn="DRIVER=MySQL;SERVER=127.0.0.1;UID=xcall;PWD=password;DATABASE=motion"),a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbc.list",{url:"/list",templateUrl:"app/square/odbc/list/list.html",controller:"SquareOdbcListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbc",{url:"/odbc",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("SquareOdbc",["$resource",function(a){return a("/api/square/odbc/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SquareOdbcViewCtrl",["$scope","$translate","$stateParams","SquareOdbc","xAlert",function(a,b,c,d,e){a.odbc={},a.getOdbc=function(){return d.get({id:c.id}).$promise.then(function(b){a.odbc=b})["catch"](function(a){e.error(a)})},a.updateOdbc=function(){var f=angular.copy(a.odbc);return d.update({id:c.id},f).$promise.then(function(){e.show(b.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbc.view",{url:"/view/:id",templateUrl:"app/square/odbc/view/view.html",controller:"SquareOdbcViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.square.odbc.view.settings",{url:"/settings",templateUrl:"app/square/odbc/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("SquareProjectListCtrl",["$scope","$uibModal","SquareProject","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"projects.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:160,buttons:[{"class":"blue-hoki",href:"/square/projects/view/{{row.entity.id}}",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/square/project/list/list.create.modal.html",controller:"SquareProjectListCreateCtrl"});c.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("SquareProjectListCreateCtrl",["$scope","$translate","$uibModalInstance","SquareProject","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects.list",{url:"/list",templateUrl:"app/square/project/list/list.html",controller:"SquareProjectListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects",{url:"/projects",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("SquareProject",["$resource",function(a){return a("/api/square/projects/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SquareProjectViewCtrl",["$scope","$stateParams","Auth","xAlert","SquareProject","socket","$translate","$log","$uibModal",function(a,b,c,d,e,f,g,h,i){a.squareProject={},a.$on("$destroy",function(){f.unsyncUpdates("square_project")}),a.getProject=function(){return e.get({id:b.id}).$promise.then(function(b){a.squareProject=b,angular.element(document).ready(function(){window.onerror=function(a,b,c){try{if(null!==a&&-1!==a.indexOf("Script error."));else{var e=new Image;e.src="assets/plugins/mxgraph/images/1x1.png?msg="+encodeURIComponent(a)+"&url="+encodeURIComponent(b)+"&lnum="+encodeURIComponent(c)}}catch(f){d.error(f)}},b.token=c.getToken();var a=new EditorUi(new Editor);a.openString(b.preproduction,b.name,b),a.editor.graphChangeListener=function(a,b){var c=b.properties.rtChange||!1;c||(this.modified=!0)}}),f.socket.on("square_project:save",function(c){c.id===b.id&&(a.squareProject=_.merge(a.squareProject,c))})})["catch"](function(a){d.error(a)})},a.editNotes=function(){var c=i.open({animation:!0,templateUrl:"app/square/project/view/projectNotes.modal.html",controller:["$scope","$uibModalInstance","notes",function(a,b,c){a.notes=c,a.close=function(){b.close(a.notes)},a.cancel=function(){b.dismiss("cancel")}}],resolve:{notes:{value:a.squareProject.notes}}});c.result.then(function(a){return e.update({id:b.id},{notes:a.value}).$promise.then(function(){d.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){d.error(a)})},function(){h.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects.view",{url:"/view/:id",templateUrl:"app/square/project/view/view.html",controller:"SquareProjectViewCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",serie:!0,cache:!1,files:["assets/plugins/mxgraph/css/common.css","assets/plugins/mxgraph/css/explorer.css","assets/plugins/mxgraph/styles/grapheditor.css","assets/plugins/mxgraph/styles/custom.css","assets/plugins/square/js/custom.js","assets/plugins/mxgraph/js/mxClient.js","assets/plugins/square/js/Editor.js","assets/plugins/square/js/Graph.js","assets/plugins/square/js/EditorUi.js","assets/plugins/square/js/Actions.js","assets/plugins/square/js/Menus.js","assets/plugins/square/js/Sidebar.js","assets/plugins/square/js/Toolbar.js","assets/plugins/square/js/Dialogs.js"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.realtime",{url:"/realtime",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:14}}})}]),angular.module("xCallyShuttleApp").factory("ReportSquare",["$resource",function(a){return a("/api/report/square/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ReportSquareDetail",["$resource",function(a){return a("/api/report/square/details/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SquareRealtimeViewGeneralCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportSquare","usSpinnerService","$q","uiGridConstants",function(a,b,c,d,e,f,g,h,i,j){function k(b){return h.spin("spinner-grid"),g.get(m).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){b&&l(),h.stop("spinner-grid")})}function l(){e.socket.on("report_square:save",function(b){if(b.leaveAt){var c=_.remove(a.gridOptions.data,{id:b.id});c&&k()}else{var d=_.find(a.gridOptions.data,{id:b.id});if(!d&&a.gridOptions.data.length
',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){n(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?m.order=null:m.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),k()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){m.offset=(a-1)*b,m.limit=b,k()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?m[a.name]=a.filters[0].term:delete m[a.name]}),k()})}},k(!0)};var n=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_square")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.realtime.view.general",{url:"/general",templateUrl:"app/square/realtime/view/general/general.html",controller:"SquareRealtimeViewGeneralCtrl"})}]),angular.module("xCallyShuttleApp").controller("SquareRealtimeViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.realtime.view",{url:"/view",templateUrl:"app/square/realtime/view/view.html",controller:"SquareRealtimeViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("SquareRecordingListCtrl",["$scope","SquareRecording","gridOptions","uiGridConstants",function(a,b,c,d){a.SquareRecording=b;a.initView=function(){var e={exporterCsvFilename:"recordings.csv",rowHeight:30,columnDefs:[{name:"uniqueid"},{name:"callerid",displayName:"APPLICATION_CALLERIDNUM"},{name:"filename"},{name:"extension"},{name:"projectName",displayName:"APPLICATION_PROJECT"},{name:"createdAt",displayName:"APPLICATION_DATE",cellFilter:"date:'yyyy-MM-dd HH:mm'",filterHeaderTemplate:'
',filters:[{name:"From",condition:d.filter.GREATER_THAN_OR_EQUAL,hasTime:!0},{name:"To",condition:d.filter.LESS_THAN_OR_EQUAL,hasTime:!0}],sort:{direction:d.DESC,priority:0}},{name:"audio",displayName:"",width:100,enableSorting:!1,enableFiltering:!1,cellClass:"ui-grid-vcenter",cellTemplate:"
{{'MESSAGE_GSM_PREVIEW_NOT_SUPPORTED' | translate}}
"},{name:"action",width:80,buttons:[{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.filename || row.entity.uniqueid, row.entity.id)"},{directive:""}]}]};a.gridOptions=c.gridOptions(b,e,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.recordings.list",{url:"/list",templateUrl:"app/square/recording/list/list.html",controller:"SquareRecordingListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.recordings",{url:"/recordings",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("SquareRecording",["$resource",function(a){return a("/api/square/recordings/:id/:controller",{id:"@id"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square",{url:"/square",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:14}}})}]),angular.module("xCallyShuttleApp").factory("Agent",["$resource",function(a){return a("/api/agents/:id/:controller/:controller1/:controller2/:controller3",{id:"@id"},{changePassword:{method:"PUT",params:{controller:"password"}},update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents",{url:"/agents",template:"
","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}}})}]),angular.module("xCallyShuttleApp").controller("AgentListCtrl",["$scope","$timeout","Agent","Auth","gridOptions",function(a,b,c,d,e){a.initView=function(){a.Auth=d;var b={exporterCsvFilename:"agents.csv",columnDefs:[{name:"fullname"},{name:"name",displayName:"APPLICATION_USERNAME"},{name:"internal"},{name:"email"},{name:"description"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/staff/agents/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-meadow",href:"/staff/agents/view/{{row.entity.id}}/queues/voice",name:"queues"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"}]}]};a.gridOptions=e.gridOptions(c,b,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents.list",{url:"/list",templateUrl:"app/staff/agent/list/list.html",controller:"AgentListCtrl",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}}})}]),angular.module("xCallyShuttleApp").controller("AgentViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$cookieStore","Agent","FileUploader","Auth","MailQueue","User","VoiceQueue","ChatQueue","FaxQueue","SmsQueue","OpenChannelQueue","Setting",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.Auth=i,a.radioSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initVoiceQueues=function(){var a={},b={};return l.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{name:a.name}}),g.get({id:e.id,controller:"voice",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"voice",e.id,g)})["catch"](function(a){console.error(a)})},a.initChatQueues=function(){var a={},b={};return m.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"chat",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"chat",e.id,g)})["catch"](function(a){console.error(a)})},a.initMailQueues=function(){var a={},b={};return j.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"mail",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"mail",e.id,g)})["catch"](function(a){console.error(a)})},a.initSmsQueues=function(){var a={},b={};return o.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"sms",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"sms",e.id,g)})["catch"](function(a){console.error(a)})},a.initFaxQueues=function(){var a={},b={};return n.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"fax",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"fax",e.id,g)})["catch"](function(a){console.error(a)})},a.initOpenchannelQueues=function(){var a={},b={};return p.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"openchannel",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"openchannel",e.id,g)})["catch"](function(a){console.error(a)})},a.updatePassword=function(){var b={newPassword:a.agent.newPwd};return i.isAdmin()?b.id=e.id:b.oldPassword=a.agent.currentPwd,k.changePassword(b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})};var r=a.uploader=new h({url:"api/users/"+e.id+"/avatar",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+f.get("token")}});r.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),r.onSuccessItem=function(b,e){a.agent.userpic=e.userpic,a.agent.id===i.getCurrentUser().id&&(i.getCurrentUser().userpic=e.userpic),c.show(d.instant("MESSAGE_WELL_DONE"),"success")},r.onErrorItem=function(){c.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},r.onCompleteAll=function(){r.clearQueue()},a.initView=function(){return g.get({id:e.id}).$promise.then(function(b){return a.agent=b,a.agent.transport=a.agent.transport?a.agent.transport.split(","):[],a.agent.allow=a.agent.allow?a.agent.allow.split(";"):[],a.agent.nat=a.agent.nat?a.agent.nat.split(","):[],q.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){c.error(a)})},a.patchItem=function(){return g.update({id:e.id},{chatCapacity:a.agent.chatCapacity,mailCapacity:a.agent.mailCapacity,faxCapacity:a.agent.faxCapacity,smsCapacity:a.agent.smsCapacity,openchannelCapacity:a.agent.openchannelCapacity}).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})},a.updateItem=function(){var b=angular.copy(a.agent);return delete b.password,delete b.md5secret,b.transport=b.transport.join(","),b.allow=b.allow.join(";"),b.nat=b.nat.join(","),g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents.view",{url:"/view/:id",templateUrl:"app/staff/agent/view/view.html",controller:"AgentViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]},data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.account",{url:"/account",templateUrl:"app/staff/agent/view/view.account.html",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}},resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}}).state("main.staff.agents.view.voice",{url:"/voice",templateUrl:"app/staff/agent/view/view.voice.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.chat",{url:"/chat",templateUrl:"app/staff/agent/view/view.chat.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.mail",{url:"/mail",templateUrl:"app/staff/agent/view/view.mail.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.fax",{url:"/fax",templateUrl:"app/staff/agent/view/view.fax.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.sms",{url:"/sms",templateUrl:"app/staff/agent/view/view.sms.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.openchannel",{url:"/openchannel",templateUrl:"app/staff/agent/view/view.openchannel.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.motionbar",{url:"/motionbar",templateUrl:"app/staff/agent/view/view.motionbar.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.queues",{url:"/queues",templateUrl:"app/staff/agent/view/view.queues.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}},cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.staff.agents.view.queues.voice",{url:"/voice",templateUrl:"app/staff/agent/view/view.queues.voice.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:7}}}).state("main.staff.agents.view.queues.chat",{url:"/chat",templateUrl:"app/staff/agent/view/view.queues.chat.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:8}}}).state("main.staff.agents.view.queues.mail",{url:"/mail",templateUrl:"app/staff/agent/view/view.queues.mail.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:9}}}).state("main.staff.agents.view.queues.fax",{url:"/fax",templateUrl:"app/staff/agent/view/view.queues.fax.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:10}}}).state("main.staff.agents.view.queues.sms",{url:"/sms",templateUrl:"app/staff/agent/view/view.queues.sms.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:11}}}).state("main.staff.agents.view.queues.openchannel",{url:"/openchannel",templateUrl:"app/staff/agent/view/view.queues.openchannel.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:20}}})}]),angular.module("xCallyShuttleApp").controller("AgentWizardCtrl",["$scope","$rootScope","$location","$translate","$http","Agent","VoiceQueue","ChatQueue","MailQueue","SmsQueue","FaxQueue","OpenChannelQueue","Setting","xAlert","WizardHandler",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a.maxAmount=1e3,a._data={voice:{queues:[]},chat:{queues:[]},mail:{queues:[]},sms:{queues:[]},fax:{queues:[]},openchannel:{queues:[]}},a._agent=angular.copy(a._data),a.forms={info:void 0,voice:void 0},a.item={role:"agent",allow:["alaw","ulaw","gsm"],transport:["udp"],context:"from-sip"},a.next=function(){o.wizard().next()},a.getAmount=function(){return m.get({controller:"internal",internal:a.item.minInternal}).$promise.then(function(b){a.item.minInternal=Number(b.value),a.maxAmount=b.range||1e3})["catch"](function(a){n.error(a)})},a.exitValidation=function(a){return a},a.getFirstFreeInternal=function(){return m.get({controller:"internal"}).$promise.then(function(b){return a.internal=b,a.item.internal=b.value,a.item.minInternal=b.value,a.maxAmount=b.range||1e3,m.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){n.error(a)})},a.createItem=function(){var b=angular.copy(a.item);return delete b.minInternal,b.transport&&(b.transport=b.transport.join(",")),a.item.allow&&(b.allow=b.allow.join(";")),b.channels=a._agent,f.save(b).$promise.then(function(a){c.path("/staff/agents/view/"+a.id+"/queues/voice")})["catch"](function(a){console.log(a),n.error(a)})},a.createItems=function(){var b=angular.copy(a.item);return delete b.internal,b.transport&&(b.transport=b.transport.join(",")),b.allow&&(b.allow=b.allow.join(";")),f.save({id:"bulk"},b).$promise.then(function(){c.path("/staff/agents/list")})["catch"](function(a){console.log(a),n.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents.wizard",{url:"/wizard",templateUrl:"app/staff/agent/wizard/wizard.html",controller:"AgentWizardCtrl",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}},resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.staff.agents.bulk",{url:"/bulk",templateUrl:"app/staff/agent/wizard/wizard-bulk.html",controller:"AgentWizardCtrl",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff",{url:"/staff",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("TeamCreateCtrl",["$scope","$uibModalInstance","Team","xAlert",function(a,b,c,d){a.form={},a.item={},a.ok=function(){return c.save(a.item).$promise.then(function(){b.close(a.item)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("TeamListCtrl",["$scope","Team","gridOptions","$uibModal",function(a,b,c,d){a.initView=function(){var d={exporterCsvFilename:"teams.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:100,buttons:[{"class":"{{row.entity.defaultEntry ? 'blue-hoki disabled' : 'blue-hoki'}}",href:"/staff/teams/view/{{row.entity.id}}/settings",name:"profile"},{"class":"{{row.entity.defaultEntry ? 'green-turquoise disabled' : 'green-turquoise'}}",name:"agents",href:"/staff/teams/view/{{row.entity.id}}/agents"},{"class":"{{row.entity.defaultEntry ? 'red-sunglo disabled' : 'red-sunglo'}}",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.createItem=function(){d.open({animation:!0,templateUrl:"app/staff/team/list/create.modal.html",controller:"TeamCreateCtrl"}).result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.teams.list",{url:"/list",templateUrl:"app/staff/team/list/list.html",controller:"TeamListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Team",["$resource",function(a){return a("/api/teams/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.teams",{url:"/teams",template:"
","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"landing"}}})}]),angular.module("xCallyShuttleApp").controller("TeamViewCtrl",["$scope","$http","$stateParams","$translate","Team","Agent","xAlert",function(a,b,c,d,e,f,g){var h=function(){return{select:function(b){return console.log("agents",b),e.save({id:a.team.id,controller:"agents"},{agents:b})},deselect:function(b){return e["delete"]({id:a.team.id,controller:"agents",agents:b})}}};a.initView=function(){return e.get({id:c.id}).$promise.then(function(b){a.team=b})["catch"](function(a){g.error(a)})},a.initAgents=function(){return f.get().$promise.then(function(b){return a.agents=b.rows,e.get({id:c.id,controller:"agents"}).$promise}).then(function(b){ComponentsDropdowns.bindTeam(_.map(b.rows,"id"),_.map(a.agents,function(a){return{id:a.id,name:a.name,fullname:a.fullname,internal:a.internal}}),h)})["catch"](function(a){g.error(a)})},a.updateItem=function(){var b=angular.copy(a.team);return e.update({id:c.id},b).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a); -})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.teams.view",{url:"/view/:id",templateUrl:"app/staff/team/view/view.html",controller:"TeamViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.staff.teams.view.agents",{url:"/agents",templateUrl:"app/staff/team/view/view.agents.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]}])}]}}).state("main.staff.teams.view.settings",{url:"/settings",templateUrl:"app/staff/team/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("TelephoneListCtrl",["$scope","Telephone","gridOptions",function(a,b,c){a.initView=function(){var d={exporterCsvFilename:"telephones.csv",columnDefs:[{name:"fullname"},{name:"name"},{name:"internal"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/staff/telephones/view/{{row.entity.id}}/account",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones.list",{url:"/list",templateUrl:"app/staff/telephone/list/list.html",controller:"TelephoneListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("Telephone",["$resource",function(a){return a("/api/telephones/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones",{url:"/telephones",template:"
","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"landing"}}})}]),angular.module("xCallyShuttleApp").controller("TelephoneViewCtrl",["$scope","$http","$stateParams","$translate","$cookieStore","Auth","xAlert","Telephone","Setting",function(a,b,c,d,e,f,g,h,i){a.initView=function(){return a.Auth=f,a.forms={},h.get({id:c.id}).$promise.then(function(b){return delete b.password,a.item=b,a.item.transport=a.item.transport?a.item.transport.split(","):[],a.item.allow=a.item.allow?a.item.allow.split(";"):[],i.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){g.error(a)})},a.updateItem=function(){var b=angular.copy(a.item);return b.transport=b.transport.join(","),b.allow=b.allow.join(";"),h.update(b).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)})},a.updatePassword=function(){return h.update({password:a.item.password}).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones.view",{url:"/view/:id",templateUrl:"app/staff/telephone/view/view.html",controller:"TelephoneViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.staff.telephones.view.account",{url:"/account",templateUrl:"app/staff/telephone/view/view.account.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css","assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}}).state("main.staff.telephones.view.voice",{url:"/voice",templateUrl:"app/staff/telephone/view/view.voice.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("TelephoneWizardCtrl",["$scope","$http","$location","WizardHandler","xAlert","$translate","Telephone","Setting",function(a,b,c,d,e,f,g,h){a.forms={},a.item={allow:["alaw","ulaw","gsm"],transport:["udp"],context:"from-sip"},a.next=function(){d.wizard().next()},a.exitValidation=function(a){return a},a.getFirstFreeInternal=function(){return h.get({controller:"internal"}).$promise.then(function(b){return a.item.internal=b.value,h.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){e.error(a)})},a.createItem=function(){var b=angular.copy(a.item);return b.transport&&(b.transport=b.transport.join(",")),a.item.allow&&(b.allow=b.allow.join(";")),g.save(b).$promise.then(function(){c.path("/staff/telephones/list")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones.wizard",{url:"/wizard",templateUrl:"app/staff/telephone/wizard/wizard.html",controller:"TelephoneWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("UserListCtrl",["$scope","$timeout","User","Auth","gridOptions",function(a,b,c,d,e){function f(a){if(a){var b=_.words(a),c=_.map(b,function(a){return a?a[0]:""});return c.join("").toUpperCase()}return!1}a.getUserAvatar=function(a,c,d){b(function(){angular.element("#userImg"+a).avatar({useGravatar:!1,initials:d?[]:f(c),fallbackImage:"api/users/avatar/"+d,size:80})})},a.isAdmin=function(a){return"admin"===a},a.initView=function(){var b={exporterCsvFilename:"users.csv",columnDefs:[{name:"fullname"},{name:"name",displayName:"APPLICATION_USERNAME"},{name:"internal"},{name:"email"},{name:"description"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/staff/users/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-meadow",href:"/staff/users/view/{{row.entity.id}}/permit/voice",name:"permits",hide:"grid.appScope.isAdmin(row.entity.role)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"}]}]};a.gridOptions=e.gridOptions(c,b,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users.list",{url:"/list",templateUrl:"app/staff/user/list/list.html",controller:"UserListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Module",["$resource",function(a){return a("/api/modules/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("User",["$resource",function(a){return a("/api/users/:id/:controller/:controller2/:controller3",{id:"@id"},{changePassword:{method:"PUT",params:{controller:"password"}},update:{method:"PUT"},me:{method:"GET",params:{id:"me"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users",{url:"/users",template:"
","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"landing"}}})}]),angular.module("xCallyShuttleApp").controller("UserViewCtrl",["$scope","$stateParams","$cookieStore","$translate","FileUploader","User","Auth","xAlert","MailQueue","VoiceQueue","ChatQueue","FaxQueue","SmsQueue","OpenChannelQueue","Team","Module","Setting",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){function r(a,b){var c,d,e=b.length;for(c=0;e>c;c++){if(b[c].id===a)return b[c];if(b[c].SubModules&&b[c].SubModules.length&&(d=r(a,b[c].SubModules)))return d}}function s(b){var c=r(b.ModuleId,a.modules);if(b.status===!0)c.status=!0;else{var d=_.filter(c.SubModules,{status:!0});d.length||(c.status=!1)}c.ModuleId&&s(c)}function t(a,b){a.forEach(function(a){a.status=b,a.SubModules&&a.SubModules.length&&t(a.SubModules,b)})}function u(a,b){b.forEach(function(b){_.find(a,{id:b.id})?b.status=!0:b.status=!1,b.SubModules&&b.SubModules.length&&u(a,b.SubModules)})}function v(a,b){return a=_.union(a,_.map(_.filter(b,{status:!0}),"id")),b.forEach(function(b){b.SubModules&&b.SubModules.length&&(a=_.union(a,v(a,b.SubModules)))}),a}a.Auth=g,a._=_,a.moduleSwitch={onText:"On",offText:"Off",isActive:!0,size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initVoiceQueues=function(){var a={},c={};return j.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"voice",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"voice",b.id,f)})["catch"](function(a){console.error(a)})},a.initChatQueues=function(){var a={},c={};return k.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"chat",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"chat",b.id,f)})["catch"](function(a){console.error(a)})},a.initMailQueues=function(){var a={},c={};return i.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"mail",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"mail",b.id,f)})["catch"](function(a){console.error(a)})},a.initSmsQueues=function(){var a={},c={};return m.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"sms",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"sms",b.id,f)})["catch"](function(a){console.error(a)})},a.initFaxQueues=function(){var a={},c={};return l.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"fax",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"fax",b.id,f)})["catch"](function(a){console.error(a)})},a.initOpenchannelQueues=function(){var a={},c={};return n.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"openchannel",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"openchannel",b.id,f)})["catch"](function(a){console.error(a)})},a.initView=function(){return f.get({id:b.id}).$promise.then(function(b){return a.user=b,a.user.transport=a.user.transport?a.user.transport.split(","):[],a.user.allow=a.user.allow?a.user.allow.split(";"):[],q.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){h.error(a)})},a.updateItem=function(){var c=angular.copy(a.user);return delete c.password,delete c.md5secret,c.transport=c.transport.join(","),c.allow=c.allow.join(";"),f.update({id:b.id},c).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},a.updatePassword=function(){var c={newPassword:a.user.newPwd};return g.isAdmin()?c.id=b.id:c.oldPassword=a.user.currentPwd,f.changePassword(c).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})};var w=a.uploader=new e({url:"api/users/"+b.id+"/avatar",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+c.get("token")}});w.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),a.getModules=function(){return a.associatedModules=[],p.get().$promise.then(function(c){return a.modules=_.filter(c.rows,function(a){return!a.ModuleId}),f.query({id:b.id,controller:"allowed",controller2:"modules"}).$promise}).then(function(b){u(b,a.modules)})["catch"](function(a){h.error(a)})},a.updatePermissions=function(c){c.ModuleId&&s(c),c.SubModules&&c.SubModules.length&&t(c.SubModules,c.status);var e=v([],a.modules);return f.save({id:b.id,controller:"allowed",controller2:"modules"},{modules:e}).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},w.onSuccessItem=function(b,c){a.user.userpic=c.userpic,a.user.id===g.getCurrentUser().id&&(g.getCurrentUser().userpic=c.userpic),h.show(d.instant("MESSAGE_WELL_DONE"),"success")},w.onErrorItem=function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},w.onCompleteAll=function(){w.clearQueue()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users.view",{url:"/view/:id",templateUrl:"app/staff/user/view/view.html",controller:"UserViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.staff.users.view.account",{url:"/account",templateUrl:"app/staff/user/view/view.account.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css","assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}}).state("main.staff.users.view.voice",{url:"/voice",templateUrl:"app/staff/user/view/view.voice.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}}).state("main.staff.users.view.permit",{url:"/permit",templateUrl:"app/staff/user/view/view.permit.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}},cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.staff.users.view.permit.voice",{url:"/voice",templateUrl:"app/staff/user/view/view.permit.voice.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}}).state("main.staff.users.view.permit.chat",{url:"/chat",templateUrl:"app/staff/user/view/view.permit.chat.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.chat"}}}).state("main.staff.users.view.permit.mail",{url:"/mail",templateUrl:"app/staff/user/view/view.permit.mail.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.mail"}}}).state("main.staff.users.view.permit.fax",{url:"/fax",templateUrl:"app/staff/user/view/view.permit.fax.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.fax"}}}).state("main.staff.users.view.permit.sms",{url:"/sms",templateUrl:"app/staff/user/view/view.permit.sms.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.sms"}}}).state("main.staff.users.view.permit.openchannel",{url:"/openchannel",templateUrl:"app/staff/user/view/view.permit.openchannel.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.openchannel"}}}).state("main.staff.users.view.permit.modules",{url:"/modules",templateUrl:"app/staff/user/view/view.permit.modules.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("UserWizardCtrl",["$scope","$location","WizardHandler","xAlert","$translate","User","Setting","Auth",function(a,b,c,d,e,f,g,h){a.initWizard=function(){return a.Auht=h,a.forms={info:void 0,voice:void 0},a.item={role:"user",host:"dynamic",context:"from-sip"},g.get({controller:"internal"}).$promise.then(function(b){return a.item.internal=b.value,g.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){d.error(a)})},a.next=function(){c.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){return f.save(a.item).$promise.then(function(a){b.path("user"===a.role?"/staff/users/view/"+a.id+"/permit/voice":"/staff/users/view/"+a.id+"/account")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users.wizard",{url:"/wizard",templateUrl:"app/staff/user/wizard/wizard.html",controller:"UserWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("SugarcrmListCtrl",["$scope","SugarcrmAccount","gridOptions","xAlert","$translate","Modal",function(a,b,c,d,e,f){a.initView=function(){var d={exporterCsvFilename:"sugarcrm_account.csv",columnDefs:[{name:"name",displayName:"APPLICATION_NAME"},{name:"username"},{name:"remoteUri",displayName:"APPLICATION_REMOTE_ADDRESS"},{name:"action",width:250,buttons:[{"class":"blue-hoki",href:"/sugarcrm/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkAccount(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.checkAccount=function(a){return b.get({id:a,controller:"check"}).$promise.then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(a){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm.list",{url:"/list",templateUrl:"app/sugarcrm/list/list.html",controller:"SugarcrmListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm",{url:"/sugarcrm",template:"
","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").factory("SugarcrmAccount",["$resource",function(a){return a("/api/sugarcrm/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("SugarcrmConfiguration",["$resource",function(a){return a("/api/sugarcrm/configurations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("SugarcrmField",["$resource",function(a){return a("/api/sugarcrm/fields/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SugarcrmViewCtrl",["$scope","$http","$stateParams","$translate","$location","$filter","WizardHandler","socket","xAlert","Modal",function(a,b,c,d,e,f,g,h,i,j){a.$stateParams=c,a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:500,scrollInertia:0},a.initConfiguration=function(){a.formsConfiguration={},a.configuration={}},a.goNext=function(){g.wizard().next()},a.formValidation=function(a){return a},a.$on("$destroy",function(){h.unsyncUpdates("sugarcrm_configuration"),h.unsyncUpdates("sugarcrm_field")}),a.initView=function(){b.get("/api/sugarcrm/accounts/"+c.id).success(function(b){a.account=b}).error(function(a){i.error(a)})},a.updateItem=function(){b.put("/api/sugarcrm/accounts/"+c.id,a.account).success(function(){i.show(d.instant("MESSAGE_WELL_DONE")+".","success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.getConfigurations=function(){b.get("/api/sugarcrm/configurations",{params:{AccountId:c.id}}).success(function(b){a.configurations=b,h.socket.on("sugarcrm_configuration:remove",function(b){_.remove(a.configurations,{id:b.id})})}).error(function(a){i.error(a)})},a.deleteConfiguration=j.confirm["delete"](function(a){b["delete"]("api/sugarcrm/configurations/"+a).success(function(){i.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.createConfiguration=function(){a.configuration.AccountId=c.id,b.post("api/sugarcrm/configurations",a.configuration).success(function(a){e.path("sugarcrm/view/"+c.id+"/configurations/settings/"+a.id)}).error(function(){i.show("Something went wrong!","danger")})},a.fieldType=["string","variable"],a.descFieldType=["string","key_value"],a.getFields=function(){b.get("/api/sugarcrm/accounts/"+c.id+"/fields").success(function(b){a.accountFields=_.sortByOrder(f("sugarcrm")(_.toArray(b)),"name","asc"),_.forEach(b,function(a){a.options=_.toArray(a.options)})}).error(function(a){i.error(a)})},a.getConfiguration=function(){b.get("/api/sugarcrm/configurations/"+c.configurationId).success(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,h.socket.on("sugarcrm_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})}).error(function(a){i.error(a)})},a.getVariables=function(){b.get("/api/variables").success(function(b){a.variables=b.rows}).error(function(a){i.error(a)})},a.removeItem=function(a){b["delete"]("api/sugarcrm/fields/"+a.id).success(function(){i.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addItemSubject=function(){var d={type:"string",content:""};b.post("/api/sugarcrm/configurations/"+c.configurationId+"/subject",d).success(function(b){a.subjectConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.addItemDescription=function(){var d={type:"string",content:""};b.post("/api/sugarcrm/configurations/"+c.configurationId+"/description",d).success(function(b){a.descriptionConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.addItemField=function(){var d={content:""};b.post("/api/sugarcrm/configurations/"+c.configurationId+"/field",d).success(function(b){a.fieldConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.updateField=function(a){b.put("/api/sugarcrm/fields/"+a.id,a).success(function(){}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.changeType=function(b){"variable"===b.type?b.content="":"string"===b.type&&(b.VariableId=null),a.updateField(b)},a.changeDescType=function(b){"key_value"===b.type?(b.content="","string"===b.keyType?b.VariableId=null:"variable"===b.keyType&&(b.keyContent="")):"string"===b.type&&(b.VariableId=null,b.key="",b.keyContent=""),a.updateField(b)},a.changeFieldType=function(b){b.content="",a.updateField(b)},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"name",b);return c?c.options.length>0?c.options:null:void 0}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm.view",{url:"/view/:id",templateUrl:"app/sugarcrm/view/view.html",controller:"SugarcrmViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.sugarcrm.view.account",{url:"/account",templateUrl:"app/sugarcrm/view/view.account.html"}).state("main.sugarcrm.view.configurations",{url:"/configurations",templateUrl:"app/sugarcrm/view/view.configurations.html"}).state("main.sugarcrm.view.configurations.settings",{url:"/settings/:configurationId",templateUrl:"app/sugarcrm/view/view.configurationSettings.html",controller:"SugarcrmViewCtrl"}).state("main.sugarcrm.view.configuration",{url:"/configuration",templateUrl:"app/sugarcrm/view/view.configuration.html"})}]),angular.module("xCallyShuttleApp").controller("SugarcrmkWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={}},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("api/sugarcrm/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/sugarcrm/list")}).error(function(){e.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm.wizard",{url:"/wizard",templateUrl:"app/sugarcrm/wizard/wizard.html",controller:"SugarcrmkWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("CannedAnswer",["$resource",function(a){return a("/api/answers/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.answers",{url:"/answers",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:58}}})}]),angular.module("xCallyShuttleApp").controller("AnswerListCtrl",["$scope","$uibModal","CannedAnswer","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"answers.csv",columnDefs:[{name:"key",displayName:"APPLICATION_NAME"},{name:"value"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/answers/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.key, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){b.open({animation:!0,templateUrl:"app/tools/answer/list/list.create.modal.html",controller:"AnswerListCreateCtrl"}).result.then(function(b){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("AnswerListCreateCtrl",["$scope","$translate","$uibModalInstance","CannedAnswer","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.answers.list",{url:"/list",templateUrl:"app/tools/answer/list/list.html",controller:"AnswerListCtrl"})}]),angular.module("xCallyShuttleApp").controller("AnswerViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location","CannedAnswer",function(a,b,c,d,e,f,g){a.getAnswer=function(){return g.get({id:e.id}).$promise.then(function(b){a.answer=b})["catch"](function(a){c.error(a)})},a.updateAnswer=function(){var b=angular.copy(a.answer);return g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.answers.view",{url:"/view/:id",templateUrl:"app/tools/answer/view/view.html",controller:"AnswerViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.answers.view.settings",{url:"/settings",templateUrl:"app/tools/answer/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").factory("Automation",["$resource",function(a){return a("/api/automations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations",{url:"/automations",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:51}}})}]),angular.module("xCallyShuttleApp").controller("AutomationListCtrl",["$scope","$http","$translate","xAlert","Automation","gridOptions",function(a,b,c,d,e,f){a.onText="On",a.offText="Off",a.isActive=!0,a.size="mini",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initView=function(){var b={exporterCsvFilename:"Automations.csv",columnDefs:[{name:"name"},{name:"description"},{name:"channel"},{name:"status",cellTemplate:'
',width:100,enableFiltering:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/automations/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=f.gridOptions(e,b,a)},a.updateItem=function(a){return e.update({id:a.id},a).$promise.then(function(){d.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations.list",{url:"/list",templateUrl:"app/tools/automation/list/list.html",controller:"AutomationListCtrl"})}]),angular.module("xCallyShuttleApp").controller("AutomationViewCtrl",["$scope","$stateParams","$http","$translate","xAlert","automations","Automation","$location",function(a,b,c,d,e,f,g,h){a.$automations=f,a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.forms={general:{}},a.addCondition=function(b){a.automation[b].push({field:"",operator:"",value:""})},a.removeCondition=function(b,c){a.automation[b].splice(c,1)},a.addAction=function(){a.automation.Actions.push({action:"",data1:"",data2:"",data3:"",data4:"",data5:""})},a.resetActionData=function(a){a.data1="",a.data2="",a.data3="",a.data4="",a.data5=""},a.removeAction=function(b){a.automation.Actions.splice(b,1)},a.initView=function(){return g.get({id:b.id}).$promise.then(function(b){a.automation=b})["catch"](function(a){e.error(a),h.path("/tools/automations/list")})},a.updateAutomation=function(){return g.update({id:b.id},a.automation).$promise.then(function(){e.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),e.error(a)})},a.exitValidation=function(b){return console.log(b&&(a.automation.All.length||a.automation.Any.length)&&a.automation.Actions.length),!(!b||!a.automation.All.length&&!a.automation.Any.length||!a.automation.Actions.length)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations.view",{url:"/view/:id",templateUrl:"app/tools/automation/view/view.html",controller:"AutomationViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}}).state("main.tools.automations.view.settings",{url:"/settings",templateUrl:"app/tools/automation/view/view.settings.html"}).state("main.tools.automations.view.routes",{url:"/routes",templateUrl:"app/tools/automation/view/view.routes.html"}).state("main.tools.automations.view.application",{url:"/application",templateUrl:"app/tools/automation/view/view.application.html" +return!(b&&0===b.length&&"true"===c.uiRequired)},c.$observe("uiRequired",function(){d.$setValidity("required",!("true"===c.uiRequired&&d.$viewValue&&0===d.$viewValue.length))})}}}).directive("schrollBottom",function(){return{scope:{schrollBottom:"="},link:function(a,b){a.$watchCollection("schrollBottom",function(a){a&&$(b).scrollTop($(b)[0].scrollHeight)})}}}).directive("customGridDateFilterHeader",function(){return{templateUrl:"app/main/customDateFilterHeader.html",controller:"gridDatePickerFilterCtrl"}}).directive("customGridTagsFilterHeader",function(){return{templateUrl:"app/main/customTagsFilterHeader.html",controller:"gridTagsFilterCtrl"}}).directive("infiniteScroll",["$window",function(a){return{link:function(a,b,c){var d=parseInt(c.threshold)||0,e=b[0];b.bind("scroll",function(){a.$eval(c.canLoad)&&e.scrollTop+e.offsetHeight>=e.scrollHeight-d&&a.$apply(c.infiniteScroll)})}}}]).directive("tigerDialDisposal",["$compile","xAlert","socket","$translate","$timeout","$rootScope","MotionDialerSpooler","Agent",function(a,b,c,d,e,f,g,h){return{restrict:"E",scope:{workspace:"=",index:"="},templateUrl:"app/main/template/template.tigerDialDisposal.html",compile:function(a,c){return function(a,c,i){a.moment=moment,a.entitySpooler={},a.forms={td:{}},a.init=function(){return h.get().$promise.then(function(b){a.agents=[],b&&b.rows.forEach(function(b){a.agents.push("SIP/"+b.name)})})["catch"](function(a){b.error(a)})},a.save=function(){var c;switch(a.entitySpooler.retrieve){case"CLOSED":c=g.close({id:parseInt(a.workspace.spooler.ticketId)});break;case"OPEN":c=g.open({id:parseInt(a.workspace.spooler.ticketId)});break;case"BLACK_LIST":c=g.blacklist({id:parseInt(a.workspace.spooler.ticketId)});break;case"PLANNED":c=g.planning({id:parseInt(a.workspace.spooler.ticketId),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm")});break;case"PLANNED_PEER":c=g.planningpeer({id:parseInt(a.workspace.spooler.ticketId),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm"),peer:a.entitySpooler.planningpeer})}c?c.$promise.then(function(c){c.status>0?b.show(d.instant("MESSAGE_WELL_DONE"),"success"):c.response?c.response.RMI.errors.forEach(function(c){c?(b.show(c.field+": "+c.error,"danger"),f.workspaces.splice(a.index,1)):b.show("Please, check your connection!","danger")}):b.show("Please, check your connection!","danger")})["catch"](function(a){b.error(a)}):b.show("RETRIEVE NOT FOUND","danger")},e(function(){a.init()})}}}}]).directive("cssTimer",["$window","$interval",function(a,b){return{restrict:"EA",template:"{{ millis | formatMilliseconds | date:format }}",scope:{interval:"@",format:"@",startTime:"="},link:function(a,c,d){function e(){a.millis=Math.abs((new Date).getTime()-new Date(a.startTime).getTime())+1e3,a.activeInterval=b(function(){a.millis+=a.interval},a.interval)}a.interval||(a.interval=1e3),a.format||(a.format="HH:mm:ss"),e(),a.$watch("startTime",function(c,d){b.cancel(a.activeInterval),e()},!0)}}}]),angular.module("xCallyShuttleApp").filter("propsFilter",function(){return function(a,b){var c=[];return angular.isArray(a)?a.forEach(function(a){for(var d=!1,e=Object.keys(b),f=0;f=0}),b}}).filter("freshdesk",function(){var a=["requester","subject","agent","description"];return function(b){return _.remove(b,function(b){return a.indexOf(b.ticket_field.name)>=0}),b}}).filter("zendesk",function(){var a=["subject","assignee","description"];return function(b){return _.remove(b,function(b){return a.indexOf(b.type)>=0}),b}}).filter("slice",function(){return function(a,b,c){return a?a.slice(b,c):void 0}}).filter("trusted",["$sce",function(a){var b=document.createElement("div");return function(c){return b.innerHTML=c,a.trustAsHtml(b.textContent)}}]).filter("formatMilliseconds",[function(){return function(a){return new Date(1970,0,1).setMilliseconds(a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main",{"abstract":!0,templateUrl:"app/main/main.html",controller:"MainCtrl",resolve:{authorization:["$q","Auth","$state","$timeout","$location","localStorageService",function(a,b,c,d,e,f){return b.getToken()?a.when():(f.remove("loggedIn"),d(function(){e.path("/login")}),a.reject())}],deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/plugins/mxgraph/js/mxClient.js","assets/plugins/ckeditor/ckeditor.js","assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("xAlert",["$translate","Notification","$state",function(a,b,c){return{show:function(c,d){switch(d){case"success":b.success({message:c,title:' '+a.instant("MESSAGE_SUCCESS")+"!",delay:5e3});break;case"info":b.info({message:c,title:' '+a.instant("MESSAGE_INFO")+"!",delay:5e3});break;case"danger":b.error({message:c,title:' '+a.instant("MESSAGE_ERROR")+"!",delay:1e4});break;case"warning":b.warning({message:c,title:' '+a.instant("MESSAGE_WARNING")+"!",delay:1e4});break;default:b.info(c)}},error:function(d){var e,f;d?d.status&&401===d.status?(e="Unauthorized!",f=!0):d.data?(e=d.data.translatedMessage||d.data.message||d.data||"Generic Error",console.log(d)):e=d.translatedMessage||d.message||"Generic Error":e="Generic Error",b.error({message:a.instant(e),title:' '+a.instant("MESSAGE_ERROR")+"!",delay:1e4}),f&&c.go("login")}}}]).factory("stResource",["$q","$filter","$timeout","$rootScope","$http","$translate","xAlert",function(a,b,c,d,e,f,g){return{getPage:function(b){var c={page:Math.ceil(b.pagination.start/b.pagination.number),per_page:b.pagination.number};b.sort.predicate&&(c.sort_by=b.sort.predicate,c.sort_order=b.sort.reverse?"DESC":"ASC"),_.forIn(b.search.predicateObject,function(a,b){c[b]=a}),b.search.params&&(c.clientQuery={},_.forIn(b.search.params,function(a,b){c.clientQuery[b]=a})),d.$broadcast("$spinnerStart"),e.get(b.url,{params:c}).success(function(a){f.resolve(a),d.$broadcast("$spinnerStop")}).error(function(a){g.error(a),d.$broadcast("$spinnerStop")});var f=a.defer();return f.promise}}}]).factory("xNotification",["$translate","Notification","$rootScope",function(a,b,c){return{show:function(d,e,f,g,h,i){var j=c.$new(),k={message:e,title:d,templateUrl:"app/main/template/template.notification.html",delay:g,scope:j};switch(j.acceptBtn=a.instant("APPLICATION_ACCEPT"),j.rejectBtn=a.instant("APPLICATION_REJECT"),j.nAccept=h,j.nReject=i,f){case"chat":j["class"]="alert-info",j.icon="icon-bubble";break;case"mail":j["class"]="alert-success",j.icon="icon-envelope";break;case"fax":j["class"]="alert-warning",j.icon="fa fa-fax";break;case"sms":j["class"]="alert-danger",j.icon="glyphicon glyphicon-comment";break;case"openchannel":j["class"]="alert-danger",j.icon="icon-globe";break;default:j["class"]="alert-info"}return new b(k)}}}]),angular.module("xCallyShuttleApp").controller("ContactManagerMergeContactChoose",["$scope","$translate","Contact","gridOptions","List","uiGridConstants","xAlert","$stateParams","Company","$uibModalInstance","listId",function(a,b,c,d,e,f,g,h,i,j,k){a.initView=function(){var b;return e.get().$promise.then(function(b){return a.lists=[],a.customFields=[],b.rows.forEach(function(b,c){_.forEach(b.CustomFields,function(b){a.customFields.push({name:b.name,alias:b.alias})}),a.lists.push({value:b.id,label:b.name})}),i.get().$promise}).then(function(b){a.companies=[],b.rows.forEach(function(b,c){a.companies.push({value:b.id,label:b.name})})}).then(function(){var e=[{"class":"blue-hoki",name:"select",onClick:"grid.appScope.choose(row.entity.id)"}];b={exporterCsvFilename:"Contacts.csv",columnDefs:[{name:"firstName"},{name:"lastName"},{name:"phone"},{name:"email"},{name:"ListId",displayName:"APPLICATION_LIST",field:"List.name",enableFiltering:!1},{name:"CompanyId",displayName:"APPLICATION_COMPANY",field:"Company.name",filter:{type:f.filter.SELECT,term:h.companyId||null,selectOptions:a.companies}}]},_.forEach(a.customFields,function(a){b.columnDefs.push({name:a.name,displayName:a.alias,visible:!1})}),b.columnDefs.push({name:"action",width:30,buttons:e}),a.gridOptions=d.gridOptions(c,b,a,{ListId:k})})["catch"](function(a){g.error(a)})},a.choose=function(a){j.close(a)},a.cancel=function(){j.dismiss()}}]),angular.module("xCallyShuttleApp").controller("ContactManagerMergeContactMerge",["$scope","$translate","Contact","xAlert","Company","$uibModalInstance","contactId","List","mergeContact","Tag",function(a,b,c,d,e,f,g,h,i,j){a.initView=function(){return e.get().$promise.then(function(b){return a.companies=b.rows,a.companies.unshift({id:"",name:"-- None --"}),j.get().$promise}).then(function(b){return a.tags=_.map(b.rows,"name"),c.get({id:g}).$promise}).then(function(b){a.fields={},a.contact={};var c=_.merge(_.keys(b),_.keys(i));return _.forEach(c,function(c){switch(c){case"tags":a.contact.tags=_.union(b.tags||[],i.tags||[]);break;case"$promise":case"$resolved":break;default:a.fields[c]=[],b[c]&&a.fields[c].push(b[c]),i[c]&&a.fields[c].push(i[c]),a.contact[c]=a.fields[c][0]||null}}),h.get({listId:b.ListId,controller:"customfields"}).$promise}).then(function(b){a.customFields=b.rows,a.customFields.forEach(function(a){a.values=JSON.parse(a.values)})})["catch"](function(a){d.error(a)})},a.merge=function(){a.contact.CompanyId||(a.contact.CompanyId=null),f.close(a.contact)},a.cancel=function(){f.dismiss()}}]),angular.module("xCallyShuttleApp").factory("Widget",["$resource",function(a){return a("/api/widgets/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("MarketCtrl",["$scope","$http","$translate","socket","xAlert","Modal","$timeout","Integration",function(a,b,c,d,e,f,g,h){function i(a,b){return Math.floor(Math.random()*(b-a+1))+a}a.initView=function(){return h.get().$promise.then(function(b){a.integrations=b.rows,a.groupedIntegration=_.chunk(a.integrations,4),d.syncUpdates("integration",a.integrations,function(){a.groupedIntegration=_.chunk(a.integrations,4)})})["catch"](function(a){e.error(a,"danger")})},a.isProgressing=!1,a.$on("$destroy",function(){d.unsyncUpdates("integration")}),a.installIntegration=function(b){return navigator.onLine?(a.status="Downloading",a.percentage=i(1,50),a.isProgressing=!0,b.downloading=!0,h.update({id:b.id},{active:!0}).$promise.then(function(){g(function(){a.percentage=i(51,99),a.status="Installing"},2500),g(function(){a.percentage=100,a.isProgressing=!1,a.status="Completed!",b.downloading=!1,e.show(c.instant("MESSAGE_WELL_DONE")+".","success")},5e3)})["catch"](function(){b.downloading=!1,a.percentage=0,a.isProgressing=!1,e.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})):void e.show(c.instant("MESSAGE_NO_INTERNET_CONNECTION")+".","danger")},a.uninstallIntegration=function(b){return navigator.onLine?(a.status="Uninstalling",a.percentage=i(1,99),a.isProgressing=!0,b.downloading=!0,h.update({id:b.id},{active:!1}).$promise.then(function(){g(function(){a.percentage=100,a.isProgressing=!1,a.status="Completed!",b.downloading=!1,e.show(c.instant("MESSAGE_WELL_DONE")+".","success")},5e3)})["catch"](function(){b.downloading=!1,a.percentage=0,a.isProgressing=!1,e.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})):void e.show(c.instant("MESSAGE_NO_INTERNET_CONNECTION")+".","danger")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.market",{url:"/market",templateUrl:"app/market/market.html",controller:"MarketCtrl",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("MotionbarCtrl",["$scope","$stateParams","$cookieStore","$window","$location","Auth",function(a,b,c,d,e,f){console.log(b),b.token&&b.userId&&b.role&&b.redirectTo?(f.loginWithToken(b.token,b.userId,b.role),d.location.href=decodeURIComponent(b.redirectTo)):e.path("/login")}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("motionbar",{url:"/motionbar?redirectTo&token&userId&role",template:"
",controller:"MotionbarCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.blacklist",{url:"/blacklist",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MotionDialerBlackListListCtrl",["$scope","$uibModal","$translate","xAlert","Modal","MotionDialerBlackList","uiGridConstants",function(a,b,c,d,e,f,g){a.initView=function(){a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"id",width:60},{name:"phone"},{name:"description",enableSorting:!1},{name:"updatedtime",sort:{direction:g.DESC},enableFiltering:!1},{name:"action",cellTemplate:'
',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},f.list({page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:d.show("Please, check your connection!","danger")})["catch"](function(a){d.error(a)})},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/blacklist/list/list.create.modal.html",controller:"MotionDialerBlackListListCreateCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.deleteItem=e.confirm["delete"](function(b){return f["delete"]({id:b}).$promise.then(function(e){e.status>0?(_.remove(a.gridOptions.data,{id:b}),d.show(c.instant("MESSAGE_WELL_DONE"),"success")):d.show(e.message||"Please, check your connection!","danger")})["catch"](function(a){d.error(a)})})}]),angular.module("xCallyShuttleApp").controller("MotionDialerBlackListListCreateCtrl",["$scope","$translate","$uibModalInstance","MotionDialerBlackList","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.insert(a.item).$promise.then(function(a){a.status>0?(e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):e.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.blacklist.list",{url:"/list",templateUrl:"app/motiondialer/blacklist/list/list.html",controller:"MotionDialerBlackListListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerBlackList",["$resource",function(a){return a("/api/rest/blacklist/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.info",{url:"/info",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerSystem",["$resource",function(a){return a("/api/rest/system/:controller",null,{properties:{method:"POST",params:{controller:"properties"}}})}]),angular.module("xCallyShuttleApp").controller("MotionDialerInfoViewCtrl",["$scope","xAlert","MotionDialerSystem",function(a,b,c){a.getProperties=function(){return c.properties().$promise.then(function(c){console.log(c),c.status>0?a.properties=c.response.RMI:b.show(c.message||"Please, check your connection!","danger")})["catch"](function(a){b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.info.view",{url:"/view",templateUrl:"app/motiondialer/info/view/view.html",controller:"MotionDialerInfoViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.motiondialer.info.view.about",{url:"/about",templateUrl:"app/motiondialer/info/view/view.about.html"}).state("main.motiondialer.info.view.details",{url:"/details",templateUrl:"app/motiondialer/info/view/view.details.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.lists",{url:"/lists",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MotionDialerListListCtrl",["$scope","$uibModal","$translate","xAlert","Modal","MotionDialerList","uiGridConstants","usSpinnerService",function(a,b,c,d,e,f,g,h){a.initView=function(){return a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"id",width:60},{name:"name"},{name:"description",enableSorting:!1},{name:"updatedtime",sort:{direction:g.DESC},enableFiltering:!1},{name:"action",cellTemplate:'
',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},f.list({page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:d.show("Please, check your connection!","danger")})["catch"](function(a){d.error(a)})["finally"](function(){h.stop("spinner-grid")})},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/list/list/list.create.modal.html",controller:"MotionDialerListListCreateCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.deleteItem=e.confirm["delete"](function(b){return f["delete"]({id:b}).$promise.then(function(e){e.status>0?(_.remove(a.gridOptions.data,{id:b}),d.show(c.instant("MESSAGE_WELL_DONE"),"success")):d.show(e.message||"Please, check your connection!","danger")})["catch"](function(a){d.error(a)})})}]),angular.module("xCallyShuttleApp").controller("MotionDialerListListCreateCtrl",["$scope","$translate","$uibModalInstance","MotionDialerList","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.insert(a.item).$promise.then(function(a){a.status>0?(e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):e.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.lists.list",{url:"/list",templateUrl:"app/motiondialer/list/list/list.html",controller:"MotionDialerListListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerContact",["$resource",function(a){return a("/api/rest/contact/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").factory("MotionDialerList",["$resource",function(a){return a("/api/rest/list/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewContactCreateCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerContact","xAlert","MotionDialerTimezone",function(a,b,c,d,e,f,g){a.form={},a.item={},a.timezones=g.list(),a.save=function(){return console.log(a.item),e.insert({id_list:parseInt(d.id),name:a.item.name,phones:a.item.phones.trim().split(","),description:a.item.description||""}).$promise.then(function(a){console.log(a),a.status>0?(f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):f.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerListContactImportModalCtrl",["$scope","$uibModalInstance","$stateParams","indexes","csv","xAlert","MotionDialerContact","MotionDialerTimezone",function(a,b,c,d,e,f,g,h){function i(b){if(b>=a.csvLength||a.stopped)return void(a.importing=!1);var d={id_list:parseInt(c.id),name:"",phones:[],variables:[],description:"",account:"",timezone:""},f={};return _.forOwn(a.item,function(a,c){switch(c){case"phones":_.forEach(a,function(a){e[b][a]&&d.phones.push(e[b][a])});break;case"variables":_.forEach(a,function(a){e[b][a]&&(f={},f[a]=e[b][a],d.variables.push(f))});break;default:d[c]=e[b][a]}}),d.phones.length?(d.timezone||delete d.timezone,g.insert(d).$promise.then(function(b){b.status>0?(a["import"].success+=j,a["import"].succeeded++,k.push(b.response.RMI)):(console.log(b),a["import"].fail+=j,a["import"].failed++)})["catch"](function(b){console.log(b),a["import"].fail+=j,a["import"].failed++})["finally"](function(){i(b+1)})):(a.noPhone.push(b+2),a["import"].fail+=j,a["import"].failed++,i(b+1),void 0)}a.form={},a.item={},a.timezones=h.list(),a.uiTimeZones=[],_.forEach(a.timezones,function(b){_.forEach(b.zones,function(c){c.group=b.group,a.uiTimeZones.push(c)})}),console.log(d),console.log(e),a.indexes=d,a.importing=!1,a.submitted=!1,a.stopped=!1,a["import"]={success:0,fail:0,succeeded:0,failed:0},a.csvLength=e.length;var j=100/a.csvLength,k=[];a.start=function(){a.noPhone=[],a.importing=!0,a.submitted=!0,i(0)},a.close=function(){b.close(k)},a.stop=function(){a.stopped=!0}}]),angular.module("xCallyShuttleApp").controller("MotionDialerListViewCtrl",["$scope","$translate","$stateParams","$uibModal","xAlert","uiGridConstants","usSpinnerService","MotionDialerList","MotionDialerContact","Modal","FileUploader","Papa",function(a,b,c,d,e,f,g,h,i,j,k,l){a.getList=function(){return h.find({id:parseInt(c.id)}).$promise.then(function(b){b.status>0?a.list=b.response.RMI:e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.updateList=function(){return h.update({id:a.list.id,name:a.list.name,description:a.list.description}).$promise.then(function(a){a.status>0?e.show(b.instant("MESSAGE_WELL_DONE"),"success"):e.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.getContacts=function(){return a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"name"},{name:"phones",cellTemplate:"
{{row.entity.phones.join(',')}}
",cellClass:"ui-grid-vcenter"},{name:"description",enableSorting:!1},{name:"updatedtime",sort:{direction:f.DESC},enableFiltering:!1},{name:"action",cellTemplate:'
',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},i.list({id_list:parseInt(c.id),page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})["finally"](function(){g.stop("spinner-grid")})},a.deleteContact=j.confirm["delete"](function(c){return i["delete"]({id:c}).$promise.then(function(d){d.status>0?(_.remove(a.gridOptions.data,{id:c}),e.show(b.instant("MESSAGE_WELL_DONE"),"success")):e.show(d.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})}),a.createContact=function(){var b=d.open({animation:!0,templateUrl:"app/motiondialer/list/view/view.contact.create.modal.html",controller:"MotionDialerViewContactCreateCtrl"});b.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})};var m=a.uploader=new k({queueLimit:1,clearInputAfterAddedToQueue:!0});m.onAfterAddingFile=function(b){l.parse(b._file,{header:!0,complete:function(b){a.uploader.clearQueue(),a["import"](b.data)},error:function(a){e.error(a)}})},a["import"]=function(b){var c=d.open({animation:!0,backdrop:"static",keyboard:!1,templateUrl:"app/motiondialer/list/view/view.contact.import.modal.html",controller:"MotionDialerListContactImportModalCtrl",resolve:{indexes:function(){return _.keys(b[0])},csv:function(){return b}}});c.result.then(function(b){console.log(b),a.gridOptions.data=a.gridOptions.data.concat(b)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.lists.view",{url:"/view/:id",templateUrl:"app/motiondialer/list/view/view.html",controller:"MotionDialerListViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.motiondialer.lists.view.settings",{url:"/settings",templateUrl:"app/motiondialer/list/view/view.settings.html"}).state("main.motiondialer.lists.view.contacts",{url:"/contacts",templateUrl:"app/motiondialer/list/view/view.contacts.html"})}]),angular.module("xCallyShuttleApp").factory("MotionDialerTimezone",function(){return{list:function(){return[{group:"US (Common)",zones:[{value:"America/Puerto_Rico",name:"Puerto Rico (Atlantic)"},{value:"America/New_York",name:"New York (Eastern)"},{value:"America/Chicago",name:"Chicago (Central)"},{value:"America/Denver",name:"Denver (Mountain)"},{value:"America/Phoenix",name:"Phoenix (MST)"},{value:"America/Los_Angeles",name:"Los Angeles (Pacific)"},{value:"America/Anchorage",name:"Anchorage (Alaska)"},{value:"Pacific/Honolulu",name:"Honolulu (Hawaii)"}]},{group:"America",zones:[{value:"America/Adak",name:"Adak"},{value:"America/Anchorage",name:"Anchorage"},{value:"America/Anguilla",name:"Anguilla"},{value:"America/Antigua",name:"Antigua"},{value:"America/Araguaina",name:"Araguaina"},{value:"America/Argentina/Buenos_Aires",name:"Argentina - Buenos Aires"},{value:"America/Argentina/Catamarca",name:"Argentina - Catamarca"},{value:"America/Argentina/ComodRivadavia",name:"Argentina - ComodRivadavia"},{value:"America/Argentina/Cordoba",name:"Argentina - Cordoba"},{value:"America/Argentina/Jujuy",name:"Argentina - Jujuy"},{value:"America/Argentina/La_Rioja",name:"Argentina - La Rioja"},{value:"America/Argentina/Mendoza",name:"Argentina - Mendoza"},{value:"America/Argentina/Rio_Gallegos",name:"Argentina - Rio Gallegos"},{value:"America/Argentina/Salta",name:"Argentina - Salta"},{value:"America/Argentina/San_Juan",name:"Argentina - San Juan"},{value:"America/Argentina/San_Luis",name:"Argentina - San Luis"},{value:"America/Argentina/Tucuman",name:"Argentina - Tucuman"},{value:"America/Argentina/Ushuaia",name:"Argentina - Ushuaia"},{value:"America/Aruba",name:"Aruba"},{value:"America/Asuncion",name:"Asuncion"},{value:"America/Atikokan",name:"Atikokan"},{value:"America/Atka",name:"Atka"},{value:"America/Bahia",name:"Bahia"},{value:"America/Barbados",name:"Barbados"},{value:"America/Belem",name:"Belem"},{value:"America/Belize",name:"Belize"},{value:"America/Blanc-Sablon",name:"Blanc-Sablon"},{value:"America/Boa_Vista",name:"Boa Vista"},{value:"America/Bogota",name:"Bogota"},{value:"America/Boise",name:"Boise"},{value:"America/Buenos_Aires",name:"Buenos Aires"},{value:"America/Cambridge_Bay",name:"Cambridge Bay"},{value:"America/Campo_Grande",name:"Campo Grande"},{value:"America/Cancun",name:"Cancun"},{value:"America/Caracas",name:"Caracas"},{value:"America/Catamarca",name:"Catamarca"},{value:"America/Cayenne",name:"Cayenne"},{value:"America/Cayman",name:"Cayman"},{value:"America/Chicago",name:"Chicago"},{value:"America/Chihuahua",name:"Chihuahua"},{value:"America/Coral_Harbour",name:"Coral Harbour"},{value:"America/Cordoba",name:"Cordoba"},{value:"America/Costa_Rica",name:"Costa Rica"},{value:"America/Cuiaba",name:"Cuiaba"},{value:"America/Curacao",name:"Curacao"},{value:"America/Danmarkshavn",name:"Danmarkshavn"},{value:"America/Dawson",name:"Dawson"},{value:"America/Dawson_Creek",name:"Dawson Creek"},{value:"America/Denver",name:"Denver"},{value:"America/Detroit",name:"Detroit"},{value:"America/Dominica",name:"Dominica"},{value:"America/Edmonton",name:"Edmonton"},{value:"America/Eirunepe",name:"Eirunepe"},{value:"America/El_Salvador",name:"El Salvador"},{value:"America/Ensenada",name:"Ensenada"},{value:"America/Fortaleza",name:"Fortaleza"},{value:"America/Fort_Wayne",name:"Fort Wayne"},{value:"America/Glace_Bay",name:"Glace Bay"},{value:"America/Godthab",name:"Godthab"},{value:"America/Goose_Bay",name:"Goose Bay"},{value:"America/Grand_Turk",name:"Grand Turk"},{value:"America/Grenada",name:"Grenada"},{value:"America/Guadeloupe",name:"Guadeloupe"},{value:"America/Guatemala",name:"Guatemala"},{value:"America/Guayaquil",name:"Guayaquil"},{value:"America/Guyana",name:"Guyana"},{value:"America/Halifax",name:"Halifax"},{value:"America/Havana",name:"Havana"},{value:"America/Hermosillo",name:"Hermosillo"},{value:"America/Indiana/Indianapolis",name:"Indiana - Indianapolis"},{value:"America/Indiana/Knox",name:"Indiana - Knox"},{value:"America/Indiana/Marengo",name:"Indiana - Marengo"},{value:"America/Indiana/Petersburg",name:"Indiana - Petersburg"},{value:"America/Indiana/Tell_City",name:"Indiana - Tell City"},{value:"America/Indiana/Vevay",name:"Indiana - Vevay"},{value:"America/Indiana/Vincennes",name:"Indiana - Vincennes"},{value:"America/Indiana/Winamac",name:"Indiana - Winamac"},{value:"America/Indianapolis",name:"Indianapolis"},{value:"America/Inuvik",name:"Inuvik"},{value:"America/Iqaluit",name:"Iqaluit"},{value:"America/Jamaica",name:"Jamaica"},{value:"America/Jujuy",name:"Jujuy"},{value:"America/Juneau",name:"Juneau"},{value:"America/Kentucky/Louisville",name:"Kentucky - Louisville"},{value:"America/Kentucky/Monticello",name:"Kentucky - Monticello"},{value:"America/Knox_IN",name:"Knox IN"},{value:"America/La_Paz",name:"La Paz"},{value:"America/Lima",name:"Lima"},{value:"America/Los_Angeles",name:"Los Angeles"},{value:"America/Louisville",name:"Louisville"},{value:"America/Maceio",name:"Maceio"},{value:"America/Managua",name:"Managua"},{value:"America/Manaus",name:"Manaus"},{value:"America/Marigot",name:"Marigot"},{value:"America/Martinique",name:"Martinique"},{value:"America/Matamoros",name:"Matamoros"},{value:"America/Mazatlan",name:"Mazatlan"},{value:"America/Mendoza",name:"Mendoza"},{value:"America/Menominee",name:"Menominee"},{value:"America/Merida",name:"Merida"},{value:"America/Mexico_City",name:"Mexico City"},{value:"America/Miquelon",name:"Miquelon"},{value:"America/Moncton",name:"Moncton"},{value:"America/Monterrey", +name:"Monterrey"},{value:"America/Montevideo",name:"Montevideo"},{value:"America/Montreal",name:"Montreal"},{value:"America/Montserrat",name:"Montserrat"},{value:"America/Nassau",name:"Nassau"},{value:"America/New_York",name:"New York"},{value:"America/Nipigon",name:"Nipigon"},{value:"America/Nome",name:"Nome"},{value:"America/Noronha",name:"Noronha"},{value:"America/North_Dakota/Center",name:"North Dakota - Center"},{value:"America/North_Dakota/New_Salem",name:"North Dakota - New Salem"},{value:"America/Ojinaga",name:"Ojinaga"},{value:"America/Panama",name:"Panama"},{value:"America/Pangnirtung",name:"Pangnirtung"},{value:"America/Paramaribo",name:"Paramaribo"},{value:"America/Phoenix",name:"Phoenix"},{value:"America/Port-au-Prince",name:"Port-au-Prince"},{value:"America/Porto_Acre",name:"Porto Acre"},{value:"America/Port_of_Spain",name:"Port of Spain"},{value:"America/Porto_Velho",name:"Porto Velho"},{value:"America/Puerto_Rico",name:"Puerto Rico"},{value:"America/Rainy_River",name:"Rainy River"},{value:"America/Rankin_Inlet",name:"Rankin Inlet"},{value:"America/Recife",name:"Recife"},{value:"America/Regina",name:"Regina"},{value:"America/Resolute",name:"Resolute"},{value:"America/Rio_Branco",name:"Rio Branco"},{value:"America/Rosario",name:"Rosario"},{value:"America/Santa_Isabel",name:"Santa Isabel"},{value:"America/Santarem",name:"Santarem"},{value:"America/Santiago",name:"Santiago"},{value:"America/Santo_Domingo",name:"Santo Domingo"},{value:"America/Sao_Paulo",name:"Sao Paulo"},{value:"America/Scoresbysund",name:"Scoresbysund"},{value:"America/Shiprock",name:"Shiprock"},{value:"America/St_Barthelemy",name:"St Barthelemy"},{value:"America/St_Johns",name:"St Johns"},{value:"America/St_Kitts",name:"St Kitts"},{value:"America/St_Lucia",name:"St Lucia"},{value:"America/St_Thomas",name:"St Thomas"},{value:"America/St_Vincent",name:"St Vincent"},{value:"America/Swift_Current",name:"Swift Current"},{value:"America/Tegucigalpa",name:"Tegucigalpa"},{value:"America/Thule",name:"Thule"},{value:"America/Thunder_Bay",name:"Thunder Bay"},{value:"America/Tijuana",name:"Tijuana"},{value:"America/Toronto",name:"Toronto"},{value:"America/Tortola",name:"Tortola"},{value:"America/Vancouver",name:"Vancouver"},{value:"America/Virgin",name:"Virgin"},{value:"America/Whitehorse",name:"Whitehorse"},{value:"America/Winnipeg",name:"Winnipeg"},{value:"America/Yakutat",name:"Yakutat"},{value:"America/Yellowknife",name:"Yellowknife"}]},{group:"Europe",zones:[{value:"Europe/Amsterdam",name:"Amsterdam"},{value:"Europe/Andorra",name:"Andorra"},{value:"Europe/Athens",name:"Athens"},{value:"Europe/Belfast",name:"Belfast"},{value:"Europe/Belgrade",name:"Belgrade"},{value:"Europe/Berlin",name:"Berlin"},{value:"Europe/Bratislava",name:"Bratislava"},{value:"Europe/Brussels",name:"Brussels"},{value:"Europe/Bucharest",name:"Bucharest"},{value:"Europe/Budapest",name:"Budapest"},{value:"Europe/Chisinau",name:"Chisinau"},{value:"Europe/Copenhagen",name:"Copenhagen"},{value:"Europe/Dublin",name:"Dublin"},{value:"Europe/Gibraltar",name:"Gibraltar"},{value:"Europe/Guernsey",name:"Guernsey"},{value:"Europe/Helsinki",name:"Helsinki"},{value:"Europe/Isle_of_Man",name:"Isle of Man"},{value:"Europe/Istanbul",name:"Istanbul"},{value:"Europe/Jersey",name:"Jersey"},{value:"Europe/Kaliningrad",name:"Kaliningrad"},{value:"Europe/Kiev",name:"Kiev"},{value:"Europe/Lisbon",name:"Lisbon"},{value:"Europe/Ljubljana",name:"Ljubljana"},{value:"Europe/London",name:"London"},{value:"Europe/Luxembourg",name:"Luxembourg"},{value:"Europe/Madrid",name:"Madrid"},{value:"Europe/Malta",name:"Malta"},{value:"Europe/Mariehamn",name:"Mariehamn"},{value:"Europe/Minsk",name:"Minsk"},{value:"Europe/Monaco",name:"Monaco"},{value:"Europe/Moscow",name:"Moscow"},{value:"Europe/Nicosia",name:"Nicosia"},{value:"Europe/Oslo",name:"Oslo"},{value:"Europe/Paris",name:"Paris"},{value:"Europe/Podgorica",name:"Podgorica"},{value:"Europe/Prague",name:"Prague"},{value:"Europe/Riga",name:"Riga"},{value:"Europe/Rome",name:"Rome"},{value:"Europe/Samara",name:"Samara"},{value:"Europe/San_Marino",name:"San Marino"},{value:"Europe/Sarajevo",name:"Sarajevo"},{value:"Europe/Simferopol",name:"Simferopol"},{value:"Europe/Skopje",name:"Skopje"},{value:"Europe/Sofia",name:"Sofia"},{value:"Europe/Stockholm",name:"Stockholm"},{value:"Europe/Tallinn",name:"Tallinn"},{value:"Europe/Tirane",name:"Tirane"},{value:"Europe/Tiraspol",name:"Tiraspol"},{value:"Europe/Uzhgorod",name:"Uzhgorod"},{value:"Europe/Vaduz",name:"Vaduz"},{value:"Europe/Vatican",name:"Vatican"},{value:"Europe/Vienna",name:"Vienna"},{value:"Europe/Vilnius",name:"Vilnius"},{value:"Europe/Volgograd",name:"Volgograd"},{value:"Europe/Warsaw",name:"Warsaw"},{value:"Europe/Zagreb",name:"Zagreb"},{value:"Europe/Zaporozhye",name:"Zaporozhye"},{value:"Europe/Zurich",name:"Zurich"}]},{group:"Asia",zones:[{value:"Asia/Aden",name:"Aden"},{value:"Asia/Almaty",name:"Almaty"},{value:"Asia/Amman",name:"Amman"},{value:"Asia/Anadyr",name:"Anadyr"},{value:"Asia/Aqtau",name:"Aqtau"},{value:"Asia/Aqtobe",name:"Aqtobe"},{value:"Asia/Ashgabat",name:"Ashgabat"},{value:"Asia/Ashkhabad",name:"Ashkhabad"},{value:"Asia/Baghdad",name:"Baghdad"},{value:"Asia/Bahrain",name:"Bahrain"},{value:"Asia/Baku",name:"Baku"},{value:"Asia/Bangkok",name:"Bangkok"},{value:"Asia/Beirut",name:"Beirut"},{value:"Asia/Bishkek",name:"Bishkek"},{value:"Asia/Brunei",name:"Brunei"},{value:"Asia/Calcutta",name:"Calcutta"},{value:"Asia/Choibalsan",name:"Choibalsan"},{value:"Asia/Chongqing",name:"Chongqing"},{value:"Asia/Chungking",name:"Chungking"},{value:"Asia/Colombo",name:"Colombo"},{value:"Asia/Dacca",name:"Dacca"},{value:"Asia/Damascus",name:"Damascus"},{value:"Asia/Dhaka",name:"Dhaka"},{value:"Asia/Dili",name:"Dili"},{value:"Asia/Dubai",name:"Dubai"},{value:"Asia/Dushanbe",name:"Dushanbe"},{value:"Asia/Gaza",name:"Gaza"},{value:"Asia/Harbin",name:"Harbin"},{value:"Asia/Ho_Chi_Minh",name:"Ho Chi Minh"},{value:"Asia/Hong_Kong",name:"Hong Kong"},{value:"Asia/Hovd",name:"Hovd"},{value:"Asia/Irkutsk",name:"Irkutsk"},{value:"Asia/Istanbul",name:"Istanbul"},{value:"Asia/Jakarta",name:"Jakarta"},{value:"Asia/Jayapura",name:"Jayapura"},{value:"Asia/Jerusalem",name:"Jerusalem"},{value:"Asia/Kabul",name:"Kabul"},{value:"Asia/Kamchatka",name:"Kamchatka"},{value:"Asia/Karachi",name:"Karachi"},{value:"Asia/Kashgar",name:"Kashgar"},{value:"Asia/Kathmandu",name:"Kathmandu"},{value:"Asia/Katmandu",name:"Katmandu"},{value:"Asia/Kolkata",name:"Kolkata"},{value:"Asia/Krasnoyarsk",name:"Krasnoyarsk"},{value:"Asia/Kuala_Lumpur",name:"Kuala Lumpur"},{value:"Asia/Kuching",name:"Kuching"},{value:"Asia/Kuwait",name:"Kuwait"},{value:"Asia/Macao",name:"Macao"},{value:"Asia/Macau",name:"Macau"},{value:"Asia/Magadan",name:"Magadan"},{value:"Asia/Makassar",name:"Makassar"},{value:"Asia/Manila",name:"Manila"},{value:"Asia/Muscat",name:"Muscat"},{value:"Asia/Nicosia",name:"Nicosia"},{value:"Asia/Novokuznetsk",name:"Novokuznetsk"},{value:"Asia/Novosibirsk",name:"Novosibirsk"},{value:"Asia/Omsk",name:"Omsk"},{value:"Asia/Oral",name:"Oral"},{value:"Asia/Phnom_Penh",name:"Phnom Penh"},{value:"Asia/Pontianak",name:"Pontianak"},{value:"Asia/Pyongyang",name:"Pyongyang"},{value:"Asia/Qatar",name:"Qatar"},{value:"Asia/Qyzylorda",name:"Qyzylorda"},{value:"Asia/Rangoon",name:"Rangoon"},{value:"Asia/Riyadh",name:"Riyadh"},{value:"Asia/Saigon",name:"Saigon"},{value:"Asia/Sakhalin",name:"Sakhalin"},{value:"Asia/Samarkand",name:"Samarkand"},{value:"Asia/Seoul",name:"Seoul"},{value:"Asia/Shanghai",name:"Shanghai"},{value:"Asia/Singapore",name:"Singapore"},{value:"Asia/Taipei",name:"Taipei"},{value:"Asia/Tashkent",name:"Tashkent"},{value:"Asia/Tbilisi",name:"Tbilisi"},{value:"Asia/Tehran",name:"Tehran"},{value:"Asia/Tel_Aviv",name:"Tel Aviv"},{value:"Asia/Thimbu",name:"Thimbu"},{value:"Asia/Thimphu",name:"Thimphu"},{value:"Asia/Tokyo",name:"Tokyo"},{value:"Asia/Ujung_Pandang",name:"Ujung Pandang"},{value:"Asia/Ulaanbaatar",name:"Ulaanbaatar"},{value:"Asia/Ulan_Bator",name:"Ulan Bator"},{value:"Asia/Urumqi",name:"Urumqi"},{value:"Asia/Vientiane",name:"Vientiane"},{value:"Asia/Vladivostok",name:"Vladivostok"},{value:"Asia/Yakutsk",name:"Yakutsk"},{value:"Asia/Yekaterinburg",name:"Yekaterinburg"},{value:"Asia/Yerevan",name:"Yerevan"}]},{group:"Africa",zones:[{value:"Africa/Abidjan",name:"Abidjan"},{value:"Africa/Accra",name:"Accra"},{value:"Africa/Addis_Ababa",name:"Addis Ababa"},{value:"Africa/Algiers",name:"Algiers"},{value:"Africa/Asmara",name:"Asmara"},{value:"Africa/Asmera",name:"Asmera"},{value:"Africa/Bamako",name:"Bamako"},{value:"Africa/Bangui",name:"Bangui"},{value:"Africa/Banjul",name:"Banjul"},{value:"Africa/Bissau",name:"Bissau"},{value:"Africa/Blantyre",name:"Blantyre"},{value:"Africa/Brazzaville",name:"Brazzaville"},{value:"Africa/Bujumbura",name:"Bujumbura"},{value:"Africa/Cairo",name:"Cairo"},{value:"Africa/Casablanca",name:"Casablanca"},{value:"Africa/Ceuta",name:"Ceuta"},{value:"Africa/Conakry",name:"Conakry"},{value:"Africa/Dakar",name:"Dakar"},{value:"Africa/Dar_es_Salaam",name:"Dar es Salaam"},{value:"Africa/Djibouti",name:"Djibouti"},{value:"Africa/Douala",name:"Douala"},{value:"Africa/El_Aaiun",name:"El Aaiun"},{value:"Africa/Freetown",name:"Freetown"},{value:"Africa/Gaborone",name:"Gaborone"},{value:"Africa/Harare",name:"Harare"},{value:"Africa/Johannesburg",name:"Johannesburg"},{value:"Africa/Kampala",name:"Kampala"},{value:"Africa/Khartoum",name:"Khartoum"},{value:"Africa/Kigali",name:"Kigali"},{value:"Africa/Kinshasa",name:"Kinshasa"},{value:"Africa/Lagos",name:"Lagos"},{value:"Africa/Libreville",name:"Libreville"},{value:"Africa/Lome",name:"Lome"},{value:"Africa/Luanda",name:"Luanda"},{value:"Africa/Lubumbashi",name:"Lubumbashi"},{value:"Africa/Lusaka",name:"Lusaka"},{value:"Africa/Malabo",name:"Malabo"},{value:"Africa/Maputo",name:"Maputo"},{value:"Africa/Maseru",name:"Maseru"},{value:"Africa/Mbabane",name:"Mbabane"},{value:"Africa/Mogadishu",name:"Mogadishu"},{value:"Africa/Monrovia",name:"Monrovia"},{value:"Africa/Nairobi",name:"Nairobi"},{value:"Africa/Ndjamena",name:"Ndjamena"},{value:"Africa/Niamey",name:"Niamey"},{value:"Africa/Nouakchott",name:"Nouakchott"},{value:"Africa/Ouagadougou",name:"Ouagadougou"},{value:"Africa/Porto-Novo",name:"Porto-Novo"},{value:"Africa/Sao_Tome",name:"Sao Tome"},{value:"Africa/Timbuktu",name:"Timbuktu"},{value:"Africa/Tripoli",name:"Tripoli"},{value:"Africa/Tunis",name:"Tunis"},{value:"Africa/Windhoek",name:"Windhoek"}]},{group:"Australia",zones:[{value:"Australia/ACT",name:"ACT"},{value:"Australia/Adelaide",name:"Adelaide"},{value:"Australia/Brisbane",name:"Brisbane"},{value:"Australia/Broken_Hill",name:"Broken Hill"},{value:"Australia/Canberra",name:"Canberra"},{value:"Australia/Currie",name:"Currie"},{value:"Australia/Darwin",name:"Darwin"},{value:"Australia/Eucla",name:"Eucla"},{value:"Australia/Hobart",name:"Hobart"},{value:"Australia/LHI",name:"LHI"},{value:"Australia/Lindeman",name:"Lindeman"},{value:"Australia/Lord_Howe",name:"Lord Howe"},{value:"Australia/Melbourne",name:"Melbourne"},{value:"Australia/North",name:"North"},{value:"Australia/NSW",name:"NSW"},{value:"Australia/Perth",name:"Perth"},{value:"Australia/Queensland",name:"Queensland"},{value:"Australia/South",name:"South"},{value:"Australia/Sydney",name:"Sydney"},{value:"Australia/Tasmania",name:"Tasmania"},{value:"Australia/Victoria",name:"Victoria"},{value:"Australia/West",name:"West"},{value:"Australia/Yancowinna",name:"Yancowinna"}]},{group:"Indian",zones:[{value:"Indian/Antananarivo",name:"Antananarivo"},{value:"Indian/Chagos",name:"Chagos"},{value:"Indian/Christmas",name:"Christmas"},{value:"Indian/Cocos",name:"Cocos"},{value:"Indian/Comoro",name:"Comoro"},{value:"Indian/Kerguelen",name:"Kerguelen"},{value:"Indian/Mahe",name:"Mahe"},{value:"Indian/Maldives",name:"Maldives"},{value:"Indian/Mauritius",name:"Mauritius"},{value:"Indian/Mayotte",name:"Mayotte"},{value:"Indian/Reunion",name:"Reunion"}]},{group:"Atlantic",zones:[{value:"Atlantic/Azores",name:"Azores"},{value:"Atlantic/Bermuda",name:"Bermuda"},{value:"Atlantic/Canary",name:"Canary"},{value:"Atlantic/Cape_Verde",name:"Cape Verde"},{value:"Atlantic/Faeroe",name:"Faeroe"},{value:"Atlantic/Faroe",name:"Faroe"},{value:"Atlantic/Jan_Mayen",name:"Jan Mayen"},{value:"Atlantic/Madeira",name:"Madeira"},{value:"Atlantic/Reykjavik",name:"Reykjavik"},{value:"Atlantic/South_Georgia",name:"South Georgia"},{value:"Atlantic/Stanley",name:"Stanley"},{value:"Atlantic/St_Helena",name:"St Helena"}]},{group:"Pacific",zones:[{value:"Pacific/Apia",name:"Apia"},{value:"Pacific/Auckland",name:"Auckland"},{value:"Pacific/Chatham",name:"Chatham"},{value:"Pacific/Easter",name:"Easter"},{value:"Pacific/Efate",name:"Efate"},{value:"Pacific/Enderbury",name:"Enderbury"},{value:"Pacific/Fakaofo",name:"Fakaofo"},{value:"Pacific/Fiji",name:"Fiji"},{value:"Pacific/Funafuti",name:"Funafuti"},{value:"Pacific/Galapagos",name:"Galapagos"},{value:"Pacific/Gambier",name:"Gambier"},{value:"Pacific/Guadalcanal",name:"Guadalcanal"},{value:"Pacific/Guam",name:"Guam"},{value:"Pacific/Honolulu",name:"Honolulu"},{value:"Pacific/Johnston",name:"Johnston"},{value:"Pacific/Kiritimati",name:"Kiritimati"},{value:"Pacific/Kosrae",name:"Kosrae"},{value:"Pacific/Kwajalein",name:"Kwajalein"},{value:"Pacific/Majuro",name:"Majuro"},{value:"Pacific/Marquesas",name:"Marquesas"},{value:"Pacific/Midway",name:"Midway"},{value:"Pacific/Nauru",name:"Nauru"},{value:"Pacific/Niue",name:"Niue"},{value:"Pacific/Norfolk",name:"Norfolk"},{value:"Pacific/Noumea",name:"Noumea"},{value:"Pacific/Pago_Pago",name:"Pago Pago"},{value:"Pacific/Palau",name:"Palau"},{value:"Pacific/Pitcairn",name:"Pitcairn"},{value:"Pacific/Ponape",name:"Ponape"},{value:"Pacific/Port_Moresby",name:"Port Moresby"},{value:"Pacific/Rarotonga",name:"Rarotonga"},{value:"Pacific/Saipan",name:"Saipan"},{value:"Pacific/Samoa",name:"Samoa"},{value:"Pacific/Tahiti",name:"Tahiti"},{value:"Pacific/Tarawa",name:"Tarawa"},{value:"Pacific/Tongatapu",name:"Tongatapu"},{value:"Pacific/Truk",name:"Truk"},{value:"Pacific/Wake",name:"Wake"},{value:"Pacific/Wallis",name:"Wallis"},{value:"Pacific/Yap",name:"Yap"}]},{group:"Antarctica",zones:[{value:"Antarctica/Casey",name:"Casey"},{value:"Antarctica/Davis",name:"Davis"},{value:"Antarctica/DumontDUrville",name:"DumontDUrville"},{value:"Antarctica/Macquarie",name:"Macquarie"},{value:"Antarctica/Mawson",name:"Mawson"},{value:"Antarctica/McMurdo",name:"McMurdo"},{value:"Antarctica/Palmer",name:"Palmer"},{value:"Antarctica/Rothera",name:"Rothera"},{value:"Antarctica/South_Pole",name:"South Pole"},{value:"Antarctica/Syowa",name:"Syowa"},{value:"Antarctica/Vostok",name:"Vostok"}]},{group:"Arctic",zones:[{value:"Arctic/Longyearbyen",name:"Longyearbyen"}]},{group:"UTC",zones:[{value:"UTC",name:"UTC"}]},{group:"Manual Offsets",zones:[{value:"UTC-12",name:"UTC-12"},{value:"UTC-11",name:"UTC-11"},{value:"UTC-10",name:"UTC-10"},{value:"UTC-9",name:"UTC-9"},{value:"UTC-8",name:"UTC-8"},{value:"UTC-7",name:"UTC-7"},{value:"UTC-6",name:"UTC-6"},{value:"UTC-5",name:"UTC-5"},{value:"UTC-4",name:"UTC-4"},{value:"UTC-3",name:"UTC-3"},{value:"UTC-2",name:"UTC-2"},{value:"UTC-1",name:"UTC-1"},{value:"UTC+0",name:"UTC+0"},{value:"UTC+1",name:"UTC+1"},{value:"UTC+2",name:"UTC+2"},{value:"UTC+3",name:"UTC+3"},{value:"UTC+4",name:"UTC+4"},{value:"UTC+5",name:"UTC+5"},{value:"UTC+6",name:"UTC+6"},{value:"UTC+7",name:"UTC+7"},{value:"UTC+8",name:"UTC+8"},{value:"UTC+9",name:"UTC+9"},{value:"UTC+10",name:"UTC+10"},{value:"UTC+11",name:"UTC+11"},{value:"UTC+12",name:"UTC+12"},{value:"UTC+13",name:"UTC+13"},{value:"UTC+14",name:"UTC+14"}]}]}}}),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer",{url:"/motiondialer",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:16}}})}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessListCtrl",["$scope","$uibModal","$translate","xAlert","Modal","MotionDialerProcess","uiGridConstants","usSpinnerService",function(a,b,c,d,e,f,g,h){a.initView=function(){return a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,columnDefs:[{name:"id",width:60},{name:"name"},{name:"queue",enableSorting:!1},{name:"extension",enableSorting:!1},{name:"id_list",enableSorting:!1,cellTemplate:'',cellClass:"ui-grid-vcenter"},{name:"status",cellTemplate:"",cellClass:"ui-grid-vcenter",filter:{type:g.filter.SELECT,selectOptions:[{value:"RUN",label:"RUNNING"},{value:"STOP",label:"STOPPED"}]}},{name:"updatedtime",sort:{direction:g.DESC},enableFiltering:!1},{name:"action",cellTemplate:'
',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]},f.list({page:1,size:6e5}).$promise.then(function(b){console.log(b),b.status>0?a.gridOptions.data=b.response.RMI.rows:d.show("Please, check your connection!","danger")})["catch"](function(a){d.error(a)})["finally"](function(){h.stop("spinner-grid")})},a.createProcessQueue=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/process/list/list.create.queue.modal.html",controller:"MotionDialerProcessListCreateQueueCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.createProcessSquare=function(){var c=b.open({animation:!0,templateUrl:"app/motiondialer/process/list/list.create.square.modal.html",controller:"MotionDialerProcessListCreateSquareCtrl"});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.deleteItem=e.confirm["delete"](function(b){return f["delete"]({id:b}).$promise.then(function(e){e.status>0?(_.remove(a.gridOptions.data,{id:b}),d.show(c.instant("MESSAGE_WELL_DONE"),"success")):d.show(e.message||"Please, check your connection!","danger")})["catch"](function(a){d.error(a)})})}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessListCreateQueueCtrl",["$scope","$translate","$uibModalInstance","MotionDialerProcess","MotionDialerList","Trunk","VoiceQueue","Route","xAlert",function(a,b,c,d,e,f,g,h,i){a.form={},a.item={fetch_sort:"ASC",timeout:3},a.initModal=function(){return g.get().$promise.then(function(b){return a.queues={},b&&(a.queues=b.rows),f.get().$promise}).then(function(b){return a.trunks={},b&&(a.trunks=b.rows),a.trunks.push({name:"fake"}),e.list({page:1,size:6e5}).$promise}).then(function(b){a.lists={},b.status>0?a.lists=b.response.RMI.rows:i.show("Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.save=function(){console.log(a.item);var e="_process_"+a.item.name+Math.round(1e5*Math.random()),f="Generated by Motion Dialer, Process Queue"+(a.item.description?", "+a.item.description:"");return h.save({appdata:"Internal Call",context:"from-sip",exten:e.replace(/\s/g,"_"),type:"internal",description:f,Applications:[{appdata:["CDR(type)=tigerdial"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["QUEUE_PRIO=99"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["CALLERID(name)=${AUTODIAL_NAME}"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["CALLERID(num)=${AUTODIAL_PHONE}"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:[a.item.queue.name,"","","",a.item.timeout],app:"Queue",interval:"*,*,*,*",type:"internal"}]}).$promise.then(function(b){return d.insert({name:a.item.name,id_list:a.item.list.id,queue:a.item.queue.name,device:a.item.device.name,context:"from-sip",extension:e.replace(/\s/g,"_"),description:a.item.description,auto_closed:!0,fetch_sort:a.item.fetch_sort,hooks:[{target:"http://localhost:9000/api/report/integrations/tdDisposal",type:"http",http_method:"POST",json:"true",event:"hangup"}]}).$promise}).then(function(a){a.status>0?(i.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):i.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessListCreateSquareCtrl",["$scope","$translate","$uibModalInstance","MotionDialerProcess","MotionDialerList","SquareProject","Trunk","Route","xAlert",function(a,b,c,d,e,f,g,h,i){a.form={},a.item={fetch_sort:"ASC"},a.initModal=function(){return f.get().$promise.then(function(b){return a.projects={},b&&(a.projects=b.rows),g.get().$promise}).then(function(b){return a.trunks={},b&&(a.trunks=b.rows),a.trunks.push({name:"fake"}),e.list({page:1,size:6e5}).$promise}).then(function(b){a.lists={},b.status>0?a.lists=b.response.RMI.rows:i.show("Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.save=function(){console.log(a.item);var e="_process_"+a.item.name+Math.round(1e5*Math.random()),f="Generated by Motion Dialer, Process Square"+(a.item.description?", "+a.item.description:"");return h.save({appdata:"Internal Call",context:"from-sip",exten:e.replace(/\s/g,"_"),type:"internal",description:f,Applications:[{appdata:["CDR(type)=tigerdial"],app:"Set",interval:"*,*,*,*",type:"internal"},{appdata:["agi://127.0.0.1/square",a.item.project.name],app:"AGI",interval:"*,*,*,*",type:"internal"}]}).$promise.then(function(b){return d.insert({name:a.item.name,id_list:a.item.list.id,queue:"none",device:a.item.device.name,context:"from-sip",extension:e.replace(/\s/g,"_"),description:a.item.description,auto_closed:!0,channel_limit:15,fetch_sort:a.item.fetch_sort}).$promise}).then(function(a){a.status>0?(i.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)):i.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){i.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.processes.list",{url:"/list",templateUrl:"app/motiondialer/process/list/list.html",controller:"MotionDialerProcessListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").factory("MotionDialerProcess",["$resource",function(a){return a("/api/rest/process/:controller",null,{list:{method:"POST",params:{controller:"list"}},insert:{method:"POST",params:{controller:"insert"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},update:{method:"POST",params:{controller:"update"}}})}]),angular.module("xCallyShuttleApp").factory("MotionDialerSpooler",["$resource",function(a){return a("/api/rest/spooler/:controller/:retrieve/:peer",null,{list:{method:"POST",params:{controller:"list"}},"delete":{method:"POST",params:{controller:"delete"}},find:{method:"POST",params:{controller:"find"}},summary:{method:"POST",params:{controller:"summary"}},close:{method:"POST",params:{controller:"retrieve",retrieve:"close"}},open:{method:"POST",params:{controller:"retrieve",retrieve:"open"}},blacklist:{method:"POST",params:{controller:"retrieve",retrieve:"blacklist"}},planning:{method:"POST",params:{controller:"retrieve",retrieve:"planning"}},planningpeer:{method:"POST",params:{controller:"retrieve",retrieve:"planning",peer:"peer"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.processes",{url:"/processes",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MotionDialerProcessViewCtrl",["$scope","$translate","$stateParams","$uibModal","xAlert","uiGridConstants","usSpinnerService","MotionDialerProcess","MotionDialerSpooler","Modal","VoiceQueue",function(a,b,c,d,e,f,g,h,i,j,k){a.process={},a.techs=["SIP","IAX","LOCAL","KHOMP"],a.dialFormats=["tech/device/number","tech/number@device"],a.checkDuplicates=["ALWAYS","IFOPEN","NO"],a.codecs=["g729","ilbc","gsm","ulaw","alaw"],a.getProcess=function(){return h.find({id:parseInt(c.id)}).$promise.then(function(b){console.log(b),b.status>0?(b.response.RMI.codecs=b.response.RMI.codecs.split(","),a.process=b.response.RMI,a.process.hooks&&a.process.hooks.length?a.process.disposal=!0:a.process.disposal=!1):e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})},a.getSummary=function(){return i.summary({id_process:parseInt(c.id)}).$promise.then(function(b){if(b.status>0){a.summary=b.response.RMI.totals,a.total=0;for(var c=0;c0?(c.response.RMI.codecs=c.response.RMI.codecs.split(","),a.process=c.response.RMI,a.process.hooks&&a.process.hooks.length?a.process.disposal=!0:a.process.disposal=!1,e.show(b.instant("MESSAGE_WELL_DONE"),"success")):c.response.RMI.errors.forEach(function(a){a?e.show(a.field+": "+a.error,"danger"):e.show("Please, check your connection!","danger")})})["catch"](function(a){e.error(a)})},a.getSpooler=function(){return g.spin("spinner-grid"),a.gridOptions||(a.gridOptions={paginationPageSizes:[10,25,50,75],paginationPageSize:10,enableFiltering:!0,enableSorting:!0,enableGridMenu:!0,flatEntityAccess:!0,showGridFooter:!0,fastWatch:!0,headerCellFilter:"translate",columnDefs:[{name:"name"},{name:"phones",cellTemplate:"
{{row.entity.phones.join(',')}}
",cellClass:"ui-grid-vcenter"},{name:"retrieve",displayName:"APPLICATION_STATUS",headerCellFilter:"translate",filter:{type:f.filter.SELECT,selectOptions:[{value:"PLANNED_PEER",label:"PLANNED PEER"},{value:"PLANNED",label:"PLANNED"},{value:"BLACK_LIST",label:"BLACKLIST"},{value:"OPEN",label:"OPEN"},{value:"CLOSED",label:"CLOSED"},{value:"MAX_ATTEMPTS",label:"MAX ATTEMPTS"},{value:"COUNTER_BLOCK",label:"COUNTER BLOCK"},{value:"PLANNED_REQUEST",label:"PLANNED REQUEST"},{value:"DELETE",label:"DELETE"}]}},{name:"counter",enableFiltering:!1},{name:"planningtime",cellTemplate:"
{{row.entity.planningtime | date:'yyyy-MM-dd HH:mm'}}
",cellClass:"ui-grid-vcenter",enableFiltering:!1},{name:"action",cellTemplate:'
',enableSorting:!1,cellClass:"ui-grid-vcenter",enableFiltering:!1}]}),i.list({id_process:parseInt(c.id),page:1,size:6e5}).$promise.then(function(b){b.status>0?a.gridOptions.data=b.response.RMI.rows:e.show(b.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})["finally"](function(){g.stop("spinner-grid")})},a.deleteSpooler=j.confirm["delete"](function(c){return i["delete"]({id:c}).$promise.then(function(d){d.status>0?(_.remove(a.gridOptions.data,{id:c}),e.show(b.instant("MESSAGE_WELL_DONE"),"success")):e.show(d.message||"Please, check your connection!","danger")})["catch"](function(a){e.error(a)})}),a.historySpooler=function(b){var c=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.spooler.history.modal.html",controller:"MotionDialerViewSpoolerHistoryCtrl",resolve:{historySpooler:function(){return b}}});c.result.then(function(b){a.gridOptions.data.push(b.response.RMI)})},a.editSpooler=function(a){var b=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.spooler.edit.modal.html",controller:"MotionDialerViewSpoolerEditCtrl",resolve:{entitySpooler:function(){return a}}});b.result.then(function(){})},a.initSettings=function(){return a.queues=null,k.get().$promise.then(function(b){b&&(a.queues=b.rows)})["catch"](function(a){e.error(a)})},a.createInterval=function(b){var c=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.create.interval.modal.html",controller:"MotionDialerViewCreateIntervalCtrl",resolve:{objectProcess:function(){return a.process},intervalType:function(){return b},intervalValue:function(){return b?"8:00-20:00|MON-FRI|*|*":"00:01-07:59|SAT-SUN|*|*"}}});c.result.then(function(b){a.process=b})},a.editInterval=function(b,c){var e=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.create.interval.modal.html",controller:"MotionDialerViewCreateIntervalCtrl",resolve:{objectProcess:function(){return a.process},intervalType:function(){return b},intervalValue:function(){return c}}});e.result.then(function(b){a.process=b})},a.deleteInterval=j.confirm["delete"](function(c,d){var f={id:a.process.id};return d?(f.intervals=[],f.intervals=f.intervals.concat(a.process.intervals),f.intervals.splice(c,1)):(f.not_intervals=[],f.not_intervals=f.not_intervals.concat(a.process.not_intervals),f.not_intervals.splice(c,1)),h.update(f).$promise.then(function(c){c.status>0?(c.response.RMI.codecs=c.response.RMI.codecs.split(","),a.process=c.response.RMI,e.show(b.instant("MESSAGE_WELL_DONE"),"success")):c.response.RMI.errors.forEach(function(a){a?e.show(a.field+": "+a.error,"danger"):e.show("Please, check your connection!","danger")})})["catch"](function(a){e.error(a)})}),a.runOrStop=function(){var b=d.open({animation:!0,templateUrl:"app/motiondialer/process/view/view.run.process.modal.html",controller:"MotionDialerViewRunProcessCtrl",resolve:{statusProcess:function(){return a.process.status}}});b.result.then(function(b){a.process.status=b.status})}}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewCreateIntervalCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerProcess","xAlert","objectProcess","intervalType","intervalValue","interval",function(a,b,c,d,e,f,g,h,i,j){function k(a){var b,c=a.split("|"),d={};return c.forEach(function(a,c){switch(c){case 0:"*"!==a?(b=a.split("-"),d.t_from=moment(b[0],"HH:mm"),d.t_to=moment(b[1],"HH:mm"),d.alwaysTime=!1):(d.t_from=moment(new Date),d.t_to=moment(new Date),d.alwaysTime=!0);break;case 1:"*"!==a?(b=a.split("-"),d.wd_from=b[0].toLowerCase(),d.wd_to=b[1]?b[1].toLowerCase():"always"):(d.wd_from="always",d.wd_to="always");break;case 2:"*"!==a?(b=a.split("-"),d.md_from=b[0],d.md_to=b[1]?b[1]:"always"):(d.md_from="always",d.md_to="always");break;case 3:"*"!==a?(b=a.split("-"),d.m_from=b[0],d.m_to=b[1]?b[1]:"always"):(d.m_from="always",d.m_to="always")}}),d}function l(a){var b,c,d,e;return b=a.t_from&&a.t_to&&!a.alwaysTime?moment(a.t_from).format("HH:mm")+"-"+moment(a.t_to).format("HH:mm"):"*",a.wd_from&&"always"!==a.wd_from?(c=a.wd_from.toUpperCase(),a.wd_to&&"always"!==a.wd_to&&(c+="-"+a.wd_to.toUpperCase())):c="*",a.md_from&&"always"!==a.md_from?(d=a.md_from,a.md_to&&"always"!==a.md_to&&(d+="-"+a.md_to)):d="*",a.m_from&&"always"!==a.m_from?(e=a.m_from,a.m_to&&"always"!==a.m_to&&(e+="-"+a.m_to)):e="*",b+"|"+c+"|"+d+"|"+e}a.form={},a.$interval=j.interval,a.splittedInterval=k(i),a.save=function(){var d=l(a.splittedInterval);console.log(d);var i={id:g.id};return h?(i.intervals=[],i.intervals=i.intervals.concat(g.intervals),i.intervals.push(d)):(i.not_intervals=[],i.not_intervals=i.not_intervals.concat(g.not_intervals),i.not_intervals.push(d)),console.log(i), +e.update(i).$promise.then(function(a){a.status>0?(a.response.RMI.codecs=a.response.RMI.codecs.split(","),f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a.response.RMI)):a.response.RMI.errors.forEach(function(a){a?f.show(a.field+": "+a.error,"danger"):f.show("Please, check your connection!","danger")})})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.motiondialer.processes.view",{url:"/view/:id",templateUrl:"app/motiondialer/process/view/view.html",controller:"MotionDialerProcessViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.motiondialer.processes.view.overview",{url:"/overview",templateUrl:"app/motiondialer/process/view/view.overview.html"}).state("main.motiondialer.processes.view.settings",{url:"/settings",templateUrl:"app/motiondialer/process/view/view.settings.html"}).state("main.motiondialer.processes.view.intervals",{url:"/intervals",templateUrl:"app/motiondialer/process/view/view.intervals.html"}).state("main.motiondialer.processes.view.spooler",{url:"/spooler",templateUrl:"app/motiondialer/process/view/view.spooler.html"})}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewRunProcessCtrl",["$scope","$stateParams","$uibModalInstance","$translate","statusProcess","MotionDialerProcess","xAlert",function(a,b,c,d,e,f,g){a.status="RUN"===e?"STOP":"RUN",a.yes=function(){f.update({id:parseInt(b.id),status:a.status}).$promise.then(function(a){a.status>0?(g.show(d.instant("MESSAGE_WELL_DONE"),"success"),c.close(a.response.RMI)):g.show(a.message||"Please, check your connection!","danger")})["catch"](function(a){g.error(a)})},a.no=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewSpoolerEditCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerSpooler","xAlert","entitySpooler","Agent",function(a,b,c,d,e,f,g,h){a.moment=moment,a.initModal=function(){return h.get().$promise.then(function(b){a.agents=[],b&&b.rows.forEach(function(b){a.agents.push("SIP/"+b.name)})})["catch"](function(a){f.error(a)})},a.entitySpooler=g,a.save=function(){var d;switch(a.entitySpooler.retrieve){case"CLOSED":d=e.close({id:parseInt(a.entitySpooler.id)});break;case"OPEN":d=e.open({id:parseInt(a.entitySpooler.id)});break;case"BLACK_LIST":d=e.blacklist({id:parseInt(a.entitySpooler.id)});break;case"PLANNED":d=e.planning({id:parseInt(a.entitySpooler.id),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm")});break;case"PLANNED_PEER":d=e.planningpeer({id:parseInt(a.entitySpooler.id),date:moment(a.entitySpooler.planningtime).format("YYYY-MM-DD HH:mm"),peer:a.entitySpooler.planningpeer})}d?d.$promise.then(function(a){console.log(a),a.status>0?(f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close()):a.response.RMI.errors.forEach(function(a){a?f.show(a.field+": "+a.error,"danger"):f.show("Please, check your connection!","danger")})})["catch"](function(a){f.error(a)}):f.show("RETRIEVE NOT FOUND","danger")},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("MotionDialerViewSpoolerHistoryCtrl",["$scope","$translate","$uibModalInstance","$stateParams","MotionDialerSpooler","xAlert","historySpooler",function(a,b,c,d,e,f,g){a.historySpooler=g,a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").factory("ReportMotionDialer",["$resource",function(a){return a("/api/report/motiondialer/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("ResetCtrl",["$scope","Auth","$location","$window","$rootScope","Setting","xAlert","$stateParams","$state",function(a,b,c,d,e,f,g,h,i){a.userReset={},a.getInfo=function(){return f.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)})},e.bodyLayout="login",a.$on("$viewContentLoaded",function(){Metronic.init(),Layout.init()}),a.reset=function(){b.reset({token:h.token,password:a.userReset.password}).then(function(){i.go("login",{reset:!0})})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("reset",{url:"/reset/:token",templateUrl:"app/reset/reset.html",controller:"ResetCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("SalesforceListCtrl",["$scope","SalesforceAccount","gridOptions","xAlert","$translate",function(a,b,c,d,e){a.initView=function(){var d={exporterCsvFilename:"salesforce_account.csv",columnDefs:[{name:"name",displayName:"APPLICATION_NAME"},{name:"username"},{name:"remoteUri",displayName:"APPLICATION_URI"},{name:"action",buttons:[{"class":"blue-hoki",href:"/salesforce/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkAccount(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.checkAccount=function(a){return b.check({id:a}).$promise.then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.list",{url:"/list",templateUrl:"app/salesforce/list/list.html",controller:"SalesforceListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("SalesforceAccount",["$resource",function(a){return a("/api/salesforce/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"},fields:{params:{controller:"fields"},isArray:!0},check:{params:{controller:"check"}}})}]).factory("SalesforceConfiguration",["$resource",function(a){return a("/api/salesforce/accounts/:accountId/configurations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]).factory("SalesforceField",["$resource",function(a){return a("/api/salesforce/accounts/:accountId/configurations/:configurationId/fields/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce",{url:"/salesforce",template:"
","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view.configurations",{url:"/configurations",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SalesforceViewConfigurationListCtrl",["$scope","$stateParams","$translate","gridOptions","SalesforceConfiguration","$uibModal",function(a,b,c,d,e,f){a.initView=function(){var c={exporterCsvFilename:"salesforce_configurations.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/salesforce/view/{{row.entity.AccountId}}/configurations/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(e,c,a,{accountId:b.id})},a.createItem=function(){var b=f.open({animation:!0,templateUrl:"app/salesforce/view/configuration/list/create.modal.html",controller:"SalesforceCreateConfigurationCtrl"});b.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("SalesforceCreateConfigurationCtrl",["$scope","$translate","$uibModalInstance","SalesforceConfiguration","xAlert","$stateParams","channel",function(a,b,c,d,e,f,g){a.form={},a.item={},a.channels=g,a.item.channel="voice",a.item.type="Queue",a.save=function(){return d.save({accountId:f.id},a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view.configurations.list",{url:"/list",templateUrl:"app/salesforce/view/configuration/list/list.html",controller:"SalesforceViewConfigurationListCtrl"})}]),angular.module("xCallyShuttleApp").controller("SalesforceViewConfigurationViewCtrl",["$scope","$filter","$stateParams","$translate","socket","variable","xAlert","SalesforceAccount","SalesforceConfiguration","SalesforceField","Variable",function(a,b,c,d,e,f,g,h,i,j,k){a.$on("$destroy",function(){e.unsyncUpdates("salesforce_field")}),a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:300,scrollInertia:0},a.fieldType=[{type:"string",title:"String"},{type:"variable",title:"Variable"},{type:"customVariable",title:"Custom Variable"}],a.descFieldType=[{type:"string",title:"String"},{type:"keyValue",title:"Key Value"}],a.groupVariableByGroup=function(a){switch(a.group){case"voice_queue":return"Voice: Queue";default:return"Other"}},a.initView=function(){a.configurationName="",a.subjectConfig=[],a.descriptionConfig=[],a.fieldConfig=[],a.variables=f},a.getConfiguration=function(){return i.get({accountId:c.id,id:c.configurationId}).$promise.then(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,e.socket.on("salesforce_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})})["catch"](function(a){g.error(a)})},a.getCustomVariables=function(){return k.get().$promise.then(function(b){a.customVariables=b.rows})["catch"](function(a){g.error(a)})},a.getFields=function(){return h.fields({id:c.id}).$promise.then(function(c){a.accountFields=_.sortByOrder(b("salesforce")(c),"name","asc"),console.log(a.accountFields)})["catch"](function(a){g.error(a)})},a.addItem=function(b){var d={};switch(b){case"subject":case"description":d={type:"string",content:""};break;case"field":d={content:""}}return i.save({accountId:c.id,id:c.configurationId,controller:b},d).$promise.then(function(c){switch(b){case"subject":a.subjectConfig.push(c);break;case"description":a.descriptionConfig.push(c);break;case"field":a.fieldConfig.push(c)}})["catch"](function(a){g.error(a)})},a.changeType=function(b){"variable"===b.type?(b.content="",b.variableName=""):"string"===b.type?(b.VariableId=null,b.variableName=""):"customVariable"===b.type&&(b.VariableId=null,b.content=""),a.updateField(b)},a.updateField=function(a){return j.update({accountId:c.id,configurationId:c.configurationId,id:a.id},a).$promise.then(function(){})["catch"](function(a){g.error(a)})},a.removeItem=function(a){return j["delete"]({accountId:c.id,configurationId:c.configurationId,id:a.id}).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){g.error(a)})},a.changeDescType=function(b){"keyValue"===b.type?(b.content="","string"===b.keyType?(b.VariableId=null,b.variableName=""):"variable"===b.keyType?(b.keyContent="",b.VariableId=null):"customVariable"===b.keyType&&(b.keyContent="",b.variableName="")):"string"===b.type&&(b.VariableId=null,b.variableName="",b.key="",b.keyContent=""),a.updateField(b)},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"name",b);if(c)switch(c.type){case"picklist":return c.picklistValues;default:return}}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view.configurations.view",{url:"/view/:configurationId",templateUrl:"app/salesforce/view/configuration/view/view.html",controller:"SalesforceViewConfigurationViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("SalesforceViewCtrl",["$scope","$http","$stateParams","$translate","$location","WizardHandler","socket","xAlert","Modal","$filter","SalesforceAccount",function(a,b,c,d,e,f,g,h,i,j,k){a.initView=function(){return k.get({id:c.id}).$promise.then(function(b){a.account=b})["catch"](function(a){h.error(a)})},a.updateItem=function(){return k.update({id:c.id},a.account).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE")+".","success")})["catch"](function(a){h.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.view",{url:"/view/:id",templateUrl:"app/salesforce/view/view.html",controller:"SalesforceViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.salesforce.view.account",{url:"/account",templateUrl:"app/salesforce/view/view.account.html"})}]),angular.module("xCallyShuttleApp").controller("SalesforceWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={},a.item.serverUrl=c.protocol()+"://"+location.host},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){console.log(a.item),b.post("api/salesforce/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/salesforce/list")}).error(function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.salesforce.wizard",{url:"/wizard",templateUrl:"app/salesforce/wizard/wizard.html",controller:"SalesforceWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.customization",{url:"/customization",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("CustomizationGeneralViewCtrl",["$scope","gridOptions","$uibModal","FileUploader","$cookieStore","xAlert","$translate","Setting","$rootScope",function(a,b,c,d,e,f,g,h,i){a.radioSwitch={isActive:!!i.license.custom,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"};var j=a.uploader=new d({url:"api/settings/logo/main",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+e.get("token")}});j.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),j.onSuccessItem=function(a,b){i.settings.logo=b.logo,f.show(g.instant("MESSAGE_WELL_DONE"),"success")},j.onErrorItem=function(){f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},j.onCompleteAll=function(){j.clearQueue()};var k=a.uploader2=new d({url:"api/settings/logo/login",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+e.get("token")}});k.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),k.onSuccessItem=function(a,b){f.show(g.instant("MESSAGE_WELL_DONE"),"success")},k.onErrorItem=function(){f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},k.onCompleteAll=function(){k.clearQueue()},a.initView=function(){return h.get({id:1}).$promise.then(function(b){a.settings={defaultLogo:b.defaultLogo,defaultLoginLogo:b.defaultLoginLogo,footerWhiteLabel:b.footerWhiteLabel,defaultFooterWhiteLabel:b.defaultFooterWhiteLabel}})["catch"](function(a){f.error(a)})},a.update=function(){return h.update({id:1},a.settings).$promise.then(function(b){_.merge(i.settings,a.settings),f.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.customization.view.general",{url:"/general",templateUrl:"app/setting/customization/view/general/general.html",controller:"CustomizationGeneralViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("CustomizationViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.customization.view",{url:"/view",templateUrl:"app/setting/customization/view/view.html",controller:"CustomizationViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.general",{url:"/general",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("GeneralMainViewCtrl",["$scope","xAlert","$translate","Setting",function(a,b,c,d){a.initView=function(){return d.get({id:1}).$promise.then(function(b){a.settings={agi_port:b.agi_port,min_internal:b.min_internal,min_mailbox:b.min_mailbox,securePassword:b.securePassword}})["catch"](function(a){b.error(a)})},a.update=function(){return d.update({id:1},a.settings).$promise.then(function(a){b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.general.view.main",{url:"/main",templateUrl:"app/setting/general/view/main/main.html",controller:"GeneralMainViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("GeneralViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.general.view",{url:"/view",templateUrl:"app/setting/general/view/view.html",controller:"GeneralViewCtrl"})}]),angular.module("xCallyShuttleApp").factory("License",["$resource",function(a){return a("/api/licenses/:id/:controller",{id:"@id"},{request:{method:"POST",params:{id:"request"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.license",{url:"/license",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("LicenseUpdateCtrl",["$scope","$translate","$uibModalInstance","xAlert","Setting",function(a,b,c,d,e){a.form={},a.item={},a.getLicense=function(){return e.get({id:1}).$promise.then(function(b){a.item.license=b.license})["catch"](function(a){d.error(a)})},a.update=function(){return e.update({id:1},a.item).$promise.then(function(a){d.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){d.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").controller("LicenseViewCtrl",["$scope","$rootScope","$translate","License","xAlert","$window","$uibModal",function(a,b,c,d,e,f,g){a.radioSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initView=function(){return d.get(function(b){a.item=b.license})},a.submitRequest=function(){return d.request(a.item,function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")},function(a){switch(a.status){case 304:e.show(a.statusText,"info");break;default:e.error(a)}})},a.updateLicense=function(){var a=g.open({animation:!0,templateUrl:"app/setting/license/view/update.modal.html",controller:"LicenseUpdateCtrl"});a.result.then(function(){f.location.reload()})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.license.view",{url:"/view",templateUrl:"app/setting/license/view/view.html",controller:"LicenseViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/pricing-tables.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("Externip",["$resource",function(a){return a("/api/network/externips/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("Localnet",["$resource",function(a){return a("/api/network/localnets/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network",{url:"/network",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ExternipCtrl",["$scope","$uibModal","gridOptions","Externip",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"network_externip.csv",columnDefs:[{name:"value"},{name:"action",buttons:[{"class":"blue-hoki",onClick:"grid.appScope.createItem(row.entity)",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(d,b,a)},a.createItem=function(c){var d=b.open({animation:!0,templateUrl:"app/setting/network/view/externip/externip.create.modal.html",controller:"ExternipCreateCtrl",resolve:{item:c}});d.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("ExternipCreateCtrl",["$scope","$translate","$uibModalInstance","$stateParams","Externip","xAlert","item",function(a,b,c,d,e,f,g){a.initModal=function(){a.form={},a.item=g||{},a.title=g?b.instant("APPLICATION_EDIT_EXTERNIP"):b.instant("APPLICATION_NEW_EXTERNIP")},a.save=function(){return g?e.update({id:a.item.id},a.item).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)}):e.save({},a.item).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network.view.externip",{url:"/externip",templateUrl:"app/setting/network/view/externip/externip.html",controller:"ExternipCtrl"})}]),angular.module("xCallyShuttleApp").controller("LocalnetCtrl",["$scope","gridOptions","Localnet","$uibModal",function(a,b,c,d){a.initView=function(){var d={exporterCsvFilename:"network_localnet.csv",columnDefs:[{name:"value"},{name:"action",buttons:[{"class":"blue-hoki",onClick:"grid.appScope.createItem(row.entity)",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=b.gridOptions(c,d,a)},a.createItem=function(b){var c=d.open({animation:!0,templateUrl:"app/setting/network/view/localnet/localnet.create.modal.html",controller:"LocalnetCreateCtrl",resolve:{item:b}});c.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("LocalnetCreateCtrl",["$scope","$translate","$uibModalInstance","$stateParams","Localnet","xAlert","item",function(a,b,c,d,e,f,g){a.initModal=function(){if(a.form={},a.item=g||{},a.title=g?b.instant("APPLICATION_EDIT_LOCALNET"):b.instant("APPLICATION_NEW_LOCALNET"),g&&g.value){var c=a.item.value.split("/");c.length>1&&(a.item.address=c[0],a.item.mask=c[1])}},a.save=function(){var d=a.item.address+"/"+a.item.mask;return g?e.update({id:a.item.id},{value:d}).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)}):e.save({},{value:d}).$promise.then(function(a){f.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){f.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network.view.localnet",{url:"/localnet",templateUrl:"app/setting/network/view/localnet/localnet.html",controller:"LocalnetCtrl"})}]),angular.module("xCallyShuttleApp").controller("NetworkViewCtrl",function(){}),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.network.view",{url:"/view",templateUrl:"app/setting/network/view/view.html",controller:"NetworkViewCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting",{url:"/setting",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:18}}})}]),angular.module("xCallyShuttleApp").factory("Setting",["$resource",function(a){return a("/api/settings/:id/:controller/:param",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("Smtp",["$resource",function(a){return a("/api/mail/servers/out/:id/:controller/:controller2",{id:"@id"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.smtp",{url:"/smtp",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SmtpViewCtrl",["$scope","$stateParams","$translate","socket","MailServerOut","Setting","MailAccount","xAlert",function(a,b,c,d,e,f,g,h){a.initView=function(){return a.smtpDisabled=!1,a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.CONST_TIMEOUT=3e4,a.item={account:{service:!0,MailServerOut:{ssl:!1}}},a.$on("$destroy",function(){d.socket.removeAllListeners("mail_server_out:state")}),d.socket.on("mail_server_out:state",function(b){a.item&&Number(b.id)===a.item.account.MailServerOut.id&&(a.item.account.MailServerOut.state=b.state,a.item.account.MailServerOut.source=JSON.parse(b.source))}),f.get({id:"smtp"}).$promise.then(function(b){a.item.account=b})["catch"](function(b){switch(b.status){case 404:a.item.account.name=null,a.item.account.address=null,a.item.account.MailServerOut={ssl:!1},h.show("Service SMTP server not configured.","info");break;default:h.error(b)}})},a.updateItem=function(){return a.item.account.id?(delete a.item.account.MailServerOut.state,delete a.item.account.MailServerOut.source,f.update({id:"smtp",controller:a.item.account.id},a.item.account).$promise.then(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})):f.save({id:"smtp"},{description:"Custom Account",name:a.item.account.name,address:a.item.account.address,service:a.item.account.service,custom:!0,MailServerOut:a.item.account.MailServerOut}).$promise.then(function(b){a.item.account=b,h.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},a.test=function(){return e.get({id:a.item.account.MailServerOut.id,controller:"test"}).$promise["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.smtp.view",{url:"/view",templateUrl:"app/setting/smtp/view/view.html",controller:"SmtpViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system",{url:"/system",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SystemViewConsoleCtrl",["$scope","Setting","xAlert","usSpinnerService","$timeout","$translate","socket",function(a,b,c,d,e,f,g){function h(b){var c=_.findIndex(a.commandHistory.commands,function(a){return a===b});-1!==c&&a.commandHistory.commands.splice(c,1),a.commandHistory.commands.unshift(b)}a.output=""+f.instant("APPLICATION_CONSOLE_WELCOME")+"
",a.item={command:""},a.commandHistory={commands:[],index:-1},a.busy=!1,a.cmdFocus=function(){e(function(){angular.element("#command").trigger("focus")})},a.sendCmd=function(){return a.commandHistory.index=-1,a.tmp=a.item.command,a.item.command="",a.output+="motion*CLI> "+a.tmp+"
",a.tmp?(h(a.tmp.trim()),a.busy=!0,d.spin("console-spinner"),b.save({controller:"asterisk"},{command:a.tmp}).$promise):void 0},g.socket.on("console:result",function(b){a.output+=b.content.replace(/(?:\r\n|\r|\n)/g,"
").replace("Response: Follows
Privilege: Command
","").replace(/ActionID: .[0-9]*
/,"").replace(/ActionID: .[0-9]*/,"")+"
",d.stop("console-spinner"),a.busy=!1,a.cmdFocus()}),g.socket.on("console:error",function(b){d.stop("console-spinner"),a.output+="command error:"+b.data.message+"
",a.busy=!1,a.cmdFocus()}),a.keyUp=function(b){switch(b.keyCode){case 40:a.commandHistory.commands[a.commandHistory.index-1]?a.item.command=a.commandHistory.commands[--a.commandHistory.index]:(a.item.command="",a.commandHistory.index=-1);break;case 38:a.commandHistory.commands[a.commandHistory.index+1]&&(a.item.command=a.commandHistory.commands[++a.commandHistory.index]);break;case 37:break;case 39:break;default:a.commandHistory.index=-1}},e(function(){angular.element("#command").trigger("focus"),d.stop("console-spinner")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view.console",{url:"/console",templateUrl:"app/setting/system/view/console/console.html",controller:"SystemViewConsoleCtrl"})}]),angular.module("xCallyShuttleApp").controller("SystemViewGeneralCtrl",["$scope","$stateParams","$translate","socket","Setting","xAlert","usSpinnerService",function(a,b,c,d,e,f,g){function h(b){a.system.memory={labels:_.keys(b.memory.details),values:_.values(_.map(b.memory.details,function(a){return Math.round(a/1024)})),Total:Math.round(b.memory.Total/1024)},g.stop("memory-spinner"),a.system.disks=[],_.forEach(b.disks,function(b){a.system.disks.push({mount:b.mount,size:Number((b.size/1048576).toFixed(2)),values:_.values(_.map(b.details,function(a){return Number((a/1048576).toFixed(2))})),labels:_.keys(b.details)})}),a.system.mount=a.system.disks[0],g.stop("disk-spinner"),a.system.cpu={motion:Math.round(b.cpu.motion),cores:[]},_.forEach(b.cpu.cores,function(b){delete b.nice,delete b.irq,a.system.cpu.cores.push({labels:_.keys(b),values:_.values(b),colours:["#803690","#DCDCDC","#00ADF9"]})}),g.stop("cpu-spinner")}a.system={mount:void 0},a.initView=function(){return g.spin("memory-spinner"),g.spin("disk-spinner"),g.spin("cpu-spinner"),e.get({controller:"system"}).$promise.then(function(a){h(a)})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view.general",{url:"/general",templateUrl:"app/setting/system/view/general/general.html",controller:"SystemViewGeneralCtrl"})}]),angular.module("xCallyShuttleApp").controller("SystemViewLogsCtrl",["$scope","$stateParams","$translate","socket","Setting","xAlert","usSpinnerService",function(a,b,c,d,e,f,g){a.initView=function(){return a.logs={errors:"",output:""},g.spin("logs-spinner"),e.get({controller:"logs"}).$promise.then(function(b){a.logs=b,g.stop("logs-spinner")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view.logs",{url:"/logs",templateUrl:"app/setting/system/view/logs/logs.html",controller:"SystemViewLogsCtrl"})}]),angular.module("xCallyShuttleApp").controller("SystemViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.system.view",{url:"/view",templateUrl:"app/setting/system/view/view.html",controller:"SystemViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("UpdateListCtrl",["$scope","gridOptions","$uibModal","$location","Update","xAlert","$log","$translate","$state",function(a,b,c,d,e,f,g,h,i){a.initCounter=function(){a.$on("timer-stopped",function(a,b){f.show(h.instant("MESSAGE_UPDATE_COMPLETED")+' Read more',"success"),i.go("main.setting.updates.list")})},a.initView=function(){return e.get({controller:"current" +}).$promise.then(function(b){a.currentVersion=b.currentVersion,a.latestVersion=b.latestVersion})["catch"](function(a){console.log(a)})},a.pull=function(){var a=c.open({animation:!0,templateUrl:"app/setting/update/list/list.pull.html",controller:"UpdateListPullCtrl"});a.result.then(function(){return d.path("/setting/updates/landing"),e.pull().$promise.then(function(a){var b=!1;a&&(a.summary&&_.forOwn(a.summary,function(a){a&&(b=!0)}),(a.insertions&&!_.isEmpty(a.insertions)||a.deletions&&!_.isEmpty(a.deletions))&&(b=!0)),b?f.show(h.instant("MESSAGE_PULL_COMPLETED"),"success"):(f.show(h.instant("MESSAGE_NO_UPDATES"),"success"),d.path("/setting/updates/list"))})["catch"](function(a){console.log(a),f.error(a),d.path("/setting/updates/list")})},function(){g.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.updates.list",{url:"/list",templateUrl:"app/setting/update/list/list.html",controller:"UpdateListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"css",insertBefore:"#ng_load_plugins_before",files:["assets/css/pricing-table.css"]}])}]}}).state("main.setting.updates.landing",{url:"/landing",templateUrl:"app/setting/update/list/landing.html",controller:"UpdateListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"css",insertBefore:"#ng_load_plugins_before",files:["assets/css/error.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("UpdateListPullCtrl",["$scope","$uibModalInstance",function(a,b){a.modal={dismissable:!0,title:"Confirm Update",html:"Are you sure you want to update?",buttons:[{classes:"btn btn-success",text:"Update",click:function(){b.close()}},{classes:"btn default",text:"Cancel",click:function(){b.dismiss("cancel")}}]}}]),angular.module("xCallyShuttleApp").factory("Update",["$resource",function(a){return a("/api/updates/:id/:controller",{id:"@id"},{pull:{method:"GET",params:{id:"pull"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.setting.updates",{url:"/updates",template:"
","abstract":!0,data:{permissions:{only:["hasUpdate"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("SquareOdbcListCtrl",["$scope","$uibModal","$translate","SquareOdbc","gridOptions","xAlert",function(a,b,c,d,e,f){a.initView=function(){var b={exporterCsvFilename:"odbc.csv",columnDefs:[{name:"name"},{name:"dsn",displayName:"APPLICATION_ODBC"},{name:"description"},{name:"action",width:250,buttons:[{"class":"blue-hoki",href:"/square/odbc/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkConnection(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=e.gridOptions(d,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/square/odbc/list/list.create.modal.html",controller:"SquareOdbcListCreateCtrl"});c.result.then(function(){a.gridOptions.getPage()})},a.checkConnection=function(a){return d.get({id:a,controller:"check"}).$promise.then(function(){f.show(c.instant("MESSAGE_CONNECTION_VERIFIED"),"success")})["catch"](function(){f.show(c.instant("MESSAGE_CONNECTION_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").controller("SquareOdbcListCreateCtrl",["$scope","$translate","$uibModalInstance","SquareOdbc","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.item.dsn||(a.item.dsn="DRIVER=MySQL;SERVER=127.0.0.1;UID=xcall;PWD=password;DATABASE=motion"),a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbc.list",{url:"/list",templateUrl:"app/square/odbc/list/list.html",controller:"SquareOdbcListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbc",{url:"/odbc",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("SquareOdbc",["$resource",function(a){return a("/api/square/odbc/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SquareOdbcViewCtrl",["$scope","$translate","$stateParams","SquareOdbc","xAlert",function(a,b,c,d,e){a.odbc={},a.getOdbc=function(){return d.get({id:c.id}).$promise.then(function(b){a.odbc=b})["catch"](function(a){e.error(a)})},a.updateOdbc=function(){var f=angular.copy(a.odbc);return d.update({id:c.id},f).$promise.then(function(){e.show(b.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbc.view",{url:"/view/:id",templateUrl:"app/square/odbc/view/view.html",controller:"SquareOdbcViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.square.odbc.view.settings",{url:"/settings",templateUrl:"app/square/odbc/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("SquareProjectListCtrl",["$scope","$uibModal","SquareProject","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"projects.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:160,buttons:[{"class":"blue-hoki",href:"/square/projects/view/{{row.entity.id}}",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/square/project/list/list.create.modal.html",controller:"SquareProjectListCreateCtrl"});c.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("SquareProjectListCreateCtrl",["$scope","$translate","$uibModalInstance","SquareProject","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects.list",{url:"/list",templateUrl:"app/square/project/list/list.html",controller:"SquareProjectListCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects",{url:"/projects",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("SquareProject",["$resource",function(a){return a("/api/square/projects/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SquareProjectViewCtrl",["$scope","$stateParams","Auth","xAlert","SquareProject","socket","$translate","$log","$uibModal",function(a,b,c,d,e,f,g,h,i){a.squareProject={},a.$on("$destroy",function(){f.unsyncUpdates("square_project")}),a.getProject=function(){return e.get({id:b.id}).$promise.then(function(b){a.squareProject=b,angular.element(document).ready(function(){window.onerror=function(a,b,c){try{if(null!==a&&-1!==a.indexOf("Script error."));else{var e=new Image;e.src="assets/plugins/mxgraph/images/1x1.png?msg="+encodeURIComponent(a)+"&url="+encodeURIComponent(b)+"&lnum="+encodeURIComponent(c)}}catch(f){d.error(f)}},b.token=c.getToken();var a=new EditorUi(new Editor);a.openString(b.preproduction,b.name,b),a.editor.graphChangeListener=function(a,b){var c=b.properties.rtChange||!1;c||(this.modified=!0)}}),f.socket.on("square_project:save",function(c){c.id===b.id&&(a.squareProject=_.merge(a.squareProject,c))})})["catch"](function(a){d.error(a)})},a.editNotes=function(){var c=i.open({animation:!0,templateUrl:"app/square/project/view/projectNotes.modal.html",controller:["$scope","$uibModalInstance","notes",function(a,b,c){a.notes=c,a.close=function(){b.close(a.notes)},a.cancel=function(){b.dismiss("cancel")}}],resolve:{notes:{value:a.squareProject.notes}}});c.result.then(function(a){return e.update({id:b.id},{notes:a.value}).$promise.then(function(){d.show(g.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){d.error(a)})},function(){h.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects.view",{url:"/view/:id",templateUrl:"app/square/project/view/view.html",controller:"SquareProjectViewCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",serie:!0,cache:!1,files:["assets/plugins/mxgraph/css/common.css","assets/plugins/mxgraph/css/explorer.css","assets/plugins/mxgraph/styles/grapheditor.css","assets/plugins/mxgraph/styles/custom.css","assets/plugins/square/js/custom.js","assets/plugins/mxgraph/js/mxClient.js","assets/plugins/square/js/Editor.js","assets/plugins/square/js/Graph.js","assets/plugins/square/js/EditorUi.js","assets/plugins/square/js/Actions.js","assets/plugins/square/js/Menus.js","assets/plugins/square/js/Sidebar.js","assets/plugins/square/js/Toolbar.js","assets/plugins/square/js/Dialogs.js"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.realtime",{url:"/realtime",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:14}}})}]),angular.module("xCallyShuttleApp").factory("ReportSquare",["$resource",function(a){return a("/api/report/square/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("ReportSquareDetail",["$resource",function(a){return a("/api/report/square/details/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SquareRealtimeViewGeneralCtrl",["$scope","$log","$uibModal","$translate","socket","xAlert","ReportSquare","usSpinnerService","$q","uiGridConstants",function(a,b,c,d,e,f,g,h,i,j){function k(b){return h.spin("spinner-grid"),g.get(m).$promise.then(function(b){a.gridOptions.totalItems=b.count,a.gridOptions.data=b.rows})["catch"](function(a){f.error(a)})["finally"](function(){b&&l(),h.stop("spinner-grid")})}function l(){e.socket.on("report_square:save",function(b){if(b.leaveAt){var c=_.remove(a.gridOptions.data,{id:b.id});c&&k()}else{var d=_.find(a.gridOptions.data,{id:b.id});if(!d&&a.gridOptions.data.length
',enableSorting:!1,enableColumnMenu:!1,enableFiltering:!1}],data:[],gridMenuTitleFilter:function(a){var b=i.defer();return b.resolve(d.instant(a)),b.promise},onRegisterApi:function(b){a.gridApi=b,a.gridApi.grid.registerDataChangeCallback(function(){n(a.gridApi.core.getVisibleRows(a.gridApi.grid).length)}),a.gridApi.core.on.sortChanged(a,function(a,b){0===b.length?m.order=null:m.order=b[0].name+" "+b[0].sort.direction.toUpperCase(),k()}),a.gridApi.pagination.on.paginationChanged(a,function(a,b){m.offset=(a-1)*b,m.limit=b,k()}),a.gridApi.core.on.filterChanged(a,function(){var a=this.grid;a.columns.forEach(function(a){a.filters[0].term?m[a.name]=a.filters[0].term:delete m[a.name]}),k()})}},k(!0)};var n=function(a){var b=a?30*a+130:270;angular.element(document.getElementsByClassName("ui-grid")[0]).css("height",b+"px"),angular.element(document.getElementsByClassName("ui-grid-viewport")).css("height",30*a+"px")};a.$on("$destroy",function(){e.unsyncUpdates("report_square")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.realtime.view.general",{url:"/general",templateUrl:"app/square/realtime/view/general/general.html",controller:"SquareRealtimeViewGeneralCtrl"})}]),angular.module("xCallyShuttleApp").controller("SquareRealtimeViewCtrl",["$scope",function(a){}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.realtime.view",{url:"/view",templateUrl:"app/square/realtime/view/view.html",controller:"SquareRealtimeViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("SquareRecordingListCtrl",["$scope","SquareRecording","gridOptions","uiGridConstants",function(a,b,c,d){a.SquareRecording=b;a.initView=function(){var e={exporterCsvFilename:"recordings.csv",rowHeight:30,columnDefs:[{name:"uniqueid"},{name:"callerid",displayName:"APPLICATION_CALLERIDNUM"},{name:"filename"},{name:"extension"},{name:"projectName",displayName:"APPLICATION_PROJECT"},{name:"createdAt",displayName:"APPLICATION_DATE",cellFilter:"date:'yyyy-MM-dd HH:mm'",filterHeaderTemplate:'
',filters:[{name:"From",condition:d.filter.GREATER_THAN_OR_EQUAL,hasTime:!0},{name:"To",condition:d.filter.LESS_THAN_OR_EQUAL,hasTime:!0}],sort:{direction:d.DESC,priority:0}},{name:"audio",displayName:"",width:100,enableSorting:!1,enableFiltering:!1,cellClass:"ui-grid-vcenter",cellTemplate:"
{{'MESSAGE_GSM_PREVIEW_NOT_SUPPORTED' | translate}}
"},{name:"action",width:80,buttons:[{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.filename || row.entity.uniqueid, row.entity.id)"},{directive:""}]}]};a.gridOptions=c.gridOptions(b,e,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.recordings.list",{url:"/list",templateUrl:"app/square/recording/list/list.html",controller:"SquareRecordingListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.recordings",{url:"/recordings",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("SquareRecording",["$resource",function(a){return a("/api/square/recordings/:id/:controller",{id:"@id"},{update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square",{url:"/square",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:14}}})}]),angular.module("xCallyShuttleApp").factory("Agent",["$resource",function(a){return a("/api/agents/:id/:controller/:controller1/:controller2/:controller3",{id:"@id"},{changePassword:{method:"PUT",params:{controller:"password"}},update:{method:"PUT"},patch:{method:"PATCH"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents",{url:"/agents",template:"
","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}}})}]),angular.module("xCallyShuttleApp").controller("AgentListCtrl",["$scope","$timeout","Agent","Auth","gridOptions",function(a,b,c,d,e){a.initView=function(){a.Auth=d;var b={exporterCsvFilename:"agents.csv",columnDefs:[{name:"fullname"},{name:"name",displayName:"APPLICATION_USERNAME"},{name:"internal"},{name:"email"},{name:"description"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/staff/agents/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-meadow",href:"/staff/agents/view/{{row.entity.id}}/queues/voice",name:"queues"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"}]}]};a.gridOptions=e.gridOptions(c,b,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents.list",{url:"/list",templateUrl:"app/staff/agent/list/list.html",controller:"AgentListCtrl",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}}})}]),angular.module("xCallyShuttleApp").controller("AgentViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$cookieStore","Agent","FileUploader","Auth","MailQueue","User","VoiceQueue","ChatQueue","FaxQueue","SmsQueue","OpenChannelQueue","Setting",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.Auth=i,a.radioSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initVoiceQueues=function(){var a={},b={};return l.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{name:a.name}}),g.get({id:e.id,controller:"voice",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"voice",e.id,g)})["catch"](function(a){console.error(a)})},a.initChatQueues=function(){var a={},b={};return m.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"chat",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"chat",e.id,g)})["catch"](function(a){console.error(a)})},a.initMailQueues=function(){var a={},b={};return j.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"mail",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"mail",e.id,g)})["catch"](function(a){console.error(a)})},a.initSmsQueues=function(){var a={},b={};return o.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"sms",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"sms",e.id,g)})["catch"](function(a){console.error(a)})},a.initFaxQueues=function(){var a={},b={};return n.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"fax",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"fax",e.id,g)})["catch"](function(a){console.error(a)})},a.initOpenchannelQueues=function(){var a={},b={};return p.get().$promise.then(function(b){return a.queues=_.map(b.rows,function(a){return{id:a.id,name:a.name}}),g.get({id:e.id,controller:"openchannel",controller2:"queues"}).$promise}).then(function(a){b.queues=_.map(a.rows,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindAgent(a,b,"openchannel",e.id,g)})["catch"](function(a){console.error(a)})},a.updatePassword=function(){var b={newPassword:a.agent.newPwd};return i.isAdmin()?b.id=e.id:b.oldPassword=a.agent.currentPwd,k.changePassword(b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})};var r=a.uploader=new h({url:"api/users/"+e.id+"/avatar",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+f.get("token")}});r.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),r.onSuccessItem=function(b,e){a.agent.userpic=e.userpic,a.agent.id===i.getCurrentUser().id&&(i.getCurrentUser().userpic=e.userpic),c.show(d.instant("MESSAGE_WELL_DONE"),"success")},r.onErrorItem=function(){c.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},r.onCompleteAll=function(){r.clearQueue()},a.initView=function(){return g.get({id:e.id}).$promise.then(function(b){return a.agent=b,a.agent.transport=a.agent.transport?a.agent.transport.split(","):[],a.agent.allow=a.agent.allow?a.agent.allow.split(";"):[],a.agent.nat=a.agent.nat?a.agent.nat.split(","):[],q.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){c.error(a)})},a.patchItem=function(){return g.update({id:e.id},{chatCapacity:a.agent.chatCapacity,mailCapacity:a.agent.mailCapacity,faxCapacity:a.agent.faxCapacity,smsCapacity:a.agent.smsCapacity,openchannelCapacity:a.agent.openchannelCapacity}).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})},a.updateItem=function(){var b=angular.copy(a.agent);return delete b.password,delete b.md5secret,b.transport=b.transport.join(","),b.allow=b.allow.join(";"),b.nat=b.nat.join(","),g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents.view",{url:"/view/:id",templateUrl:"app/staff/agent/view/view.html",controller:"AgentViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]},data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.account",{url:"/account",templateUrl:"app/staff/agent/view/view.account.html",data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:4}},resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}}).state("main.staff.agents.view.voice",{url:"/voice",templateUrl:"app/staff/agent/view/view.voice.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.chat",{url:"/chat",templateUrl:"app/staff/agent/view/view.chat.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.mail",{url:"/mail",templateUrl:"app/staff/agent/view/view.mail.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.fax",{url:"/fax",templateUrl:"app/staff/agent/view/view.fax.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.sms",{url:"/sms",templateUrl:"app/staff/agent/view/view.sms.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.openchannel",{url:"/openchannel",templateUrl:"app/staff/agent/view/view.openchannel.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.motionbar",{url:"/motionbar",templateUrl:"app/staff/agent/view/view.motionbar.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}}}).state("main.staff.agents.view.queues",{url:"/queues",templateUrl:"app/staff/agent/view/view.queues.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:4}},cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.staff.agents.view.queues.voice",{url:"/voice",templateUrl:"app/staff/agent/view/view.queues.voice.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:7}}}).state("main.staff.agents.view.queues.chat",{url:"/chat",templateUrl:"app/staff/agent/view/view.queues.chat.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:8}}}).state("main.staff.agents.view.queues.mail",{url:"/mail",templateUrl:"app/staff/agent/view/view.queues.mail.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:9}}}).state("main.staff.agents.view.queues.fax",{url:"/fax",templateUrl:"app/staff/agent/view/view.queues.fax.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:10}}}).state("main.staff.agents.view.queues.sms",{url:"/sms",templateUrl:"app/staff/agent/view/view.queues.sms.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:11}}}).state("main.staff.agents.view.queues.openchannel",{url:"/openchannel",templateUrl:"app/staff/agent/view/view.queues.openchannel.html",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:20}}})}]),angular.module("xCallyShuttleApp").controller("AgentWizardCtrl",["$scope","$rootScope","$location","$translate","$http","Agent","VoiceQueue","ChatQueue","MailQueue","SmsQueue","FaxQueue","OpenChannelQueue","Setting","xAlert","WizardHandler",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){a.maxAmount=1e3,a._data={voice:{queues:[]},chat:{queues:[]},mail:{queues:[]},sms:{queues:[]},fax:{queues:[]},openchannel:{queues:[]}},a._agent=angular.copy(a._data),a.forms={info:void 0,voice:void 0},a.item={role:"agent",allow:["alaw","ulaw","gsm"],transport:["udp"],context:"from-sip"},a.next=function(){o.wizard().next()},a.getAmount=function(){return m.get({controller:"internal",internal:a.item.minInternal}).$promise.then(function(b){a.item.minInternal=Number(b.value),a.maxAmount=b.range||1e3})["catch"](function(a){n.error(a)})},a.exitValidation=function(a){return a},a.getFirstFreeInternal=function(){return m.get({controller:"internal"}).$promise.then(function(b){return a.internal=b,a.item.internal=b.value,a.item.minInternal=b.value,a.maxAmount=b.range||1e3,m.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){n.error(a)})},a.createItem=function(){var b=angular.copy(a.item);return delete b.minInternal,b.transport&&(b.transport=b.transport.join(",")),a.item.allow&&(b.allow=b.allow.join(";")),b.channels=a._agent,f.save(b).$promise.then(function(a){c.path("/staff/agents/view/"+a.id+"/queues/voice")})["catch"](function(a){console.log(a),n.error(a)})},a.createItems=function(){var b=angular.copy(a.item);return delete b.internal,b.transport&&(b.transport=b.transport.join(",")),b.allow&&(b.allow=b.allow.join(";")),f.save({id:"bulk"},b).$promise.then(function(){c.path("/staff/agents/list")})["catch"](function(a){console.log(a),n.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.agents.wizard",{url:"/wizard",templateUrl:"app/staff/agent/wizard/wizard.html",controller:"AgentWizardCtrl",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}},resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.staff.agents.bulk",{url:"/bulk",templateUrl:"app/staff/agent/wizard/wizard-bulk.html",controller:"AgentWizardCtrl",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff",{url:"/staff",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("TeamCreateCtrl",["$scope","$uibModalInstance","Team","xAlert",function(a,b,c,d){a.form={},a.item={},a.ok=function(){return c.save(a.item).$promise.then(function(){b.close(a.item)})["catch"](function(a){d.error(a)})},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("TeamListCtrl",["$scope","Team","gridOptions","$uibModal",function(a,b,c,d){a.initView=function(){var d={exporterCsvFilename:"teams.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:100,buttons:[{"class":"{{row.entity.defaultEntry ? 'blue-hoki disabled' : 'blue-hoki'}}",href:"/staff/teams/view/{{row.entity.id}}/settings",name:"profile"},{"class":"{{row.entity.defaultEntry ? 'green-turquoise disabled' : 'green-turquoise'}}",name:"agents",href:"/staff/teams/view/{{row.entity.id}}/agents"},{"class":"{{row.entity.defaultEntry ? 'red-sunglo disabled' : 'red-sunglo'}}",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.createItem=function(){d.open({animation:!0,templateUrl:"app/staff/team/list/create.modal.html",controller:"TeamCreateCtrl"}).result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.teams.list",{url:"/list",templateUrl:"app/staff/team/list/list.html",controller:"TeamListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Team",["$resource",function(a){return a("/api/teams/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.teams",{url:"/teams",template:"
","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"landing"}}})}]),angular.module("xCallyShuttleApp").controller("TeamViewCtrl",["$scope","$http","$stateParams","$translate","Team","Agent","xAlert",function(a,b,c,d,e,f,g){var h=function(){return{select:function(b){return console.log("agents",b),e.save({id:a.team.id,controller:"agents"},{agents:b})},deselect:function(b){return e["delete"]({id:a.team.id,controller:"agents",agents:b})}}};a.initView=function(){return e.get({id:c.id}).$promise.then(function(b){a.team=b})["catch"](function(a){g.error(a)})},a.initAgents=function(){return f.get().$promise.then(function(b){return a.agents=b.rows,e.get({id:c.id,controller:"agents"}).$promise}).then(function(b){ComponentsDropdowns.bindTeam(_.map(b.rows,"id"),_.map(a.agents,function(a){return{id:a.id,name:a.name,fullname:a.fullname,internal:a.internal}}),h)})["catch"](function(a){g.error(a)})},a.updateItem=function(){var b=angular.copy(a.team);return e.update({id:c.id},b).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){ +g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.teams.view",{url:"/view/:id",templateUrl:"app/staff/team/view/view.html",controller:"TeamViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.staff.teams.view.agents",{url:"/agents",templateUrl:"app/staff/team/view/view.agents.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]}])}]}}).state("main.staff.teams.view.settings",{url:"/settings",templateUrl:"app/staff/team/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("TelephoneListCtrl",["$scope","Telephone","gridOptions",function(a,b,c){a.initView=function(){var d={exporterCsvFilename:"telephones.csv",columnDefs:[{name:"fullname"},{name:"name"},{name:"internal"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/staff/telephones/view/{{row.entity.id}}/account",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones.list",{url:"/list",templateUrl:"app/staff/telephone/list/list.html",controller:"TelephoneListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").factory("Telephone",["$resource",function(a){return a("/api/telephones/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones",{url:"/telephones",template:"
","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"landing"}}})}]),angular.module("xCallyShuttleApp").controller("TelephoneViewCtrl",["$scope","$http","$stateParams","$translate","$cookieStore","Auth","xAlert","Telephone","Setting",function(a,b,c,d,e,f,g,h,i){a.initView=function(){return a.Auth=f,a.forms={},h.get({id:c.id}).$promise.then(function(b){return delete b.password,a.item=b,a.item.transport=a.item.transport?a.item.transport.split(","):[],a.item.allow=a.item.allow?a.item.allow.split(";"):[],i.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){g.error(a)})},a.updateItem=function(){var b=angular.copy(a.item);return b.transport=b.transport.join(","),b.allow=b.allow.join(";"),h.update(b).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)})},a.updatePassword=function(){return h.update({password:a.item.password}).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones.view",{url:"/view/:id",templateUrl:"app/staff/telephone/view/view.html",controller:"TelephoneViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.staff.telephones.view.account",{url:"/account",templateUrl:"app/staff/telephone/view/view.account.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css","assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}}).state("main.staff.telephones.view.voice",{url:"/voice",templateUrl:"app/staff/telephone/view/view.voice.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("TelephoneWizardCtrl",["$scope","$http","$location","WizardHandler","xAlert","$translate","Telephone","Setting",function(a,b,c,d,e,f,g,h){a.forms={},a.item={allow:["alaw","ulaw","gsm"],transport:["udp"],context:"from-sip"},a.next=function(){d.wizard().next()},a.exitValidation=function(a){return a},a.getFirstFreeInternal=function(){return h.get({controller:"internal"}).$promise.then(function(b){return a.item.internal=b.value,h.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){e.error(a)})},a.createItem=function(){var b=angular.copy(a.item);return b.transport&&(b.transport=b.transport.join(",")),a.item.allow&&(b.allow=b.allow.join(";")),g.save(b).$promise.then(function(){c.path("/staff/telephones/list")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.telephones.wizard",{url:"/wizard",templateUrl:"app/staff/telephone/wizard/wizard.html",controller:"TelephoneWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("UserListCtrl",["$scope","$timeout","User","Auth","gridOptions",function(a,b,c,d,e){function f(a){if(a){var b=_.words(a),c=_.map(b,function(a){return a?a[0]:""});return c.join("").toUpperCase()}return!1}a.getUserAvatar=function(a,c,d){b(function(){angular.element("#userImg"+a).avatar({useGravatar:!1,initials:d?[]:f(c),fallbackImage:"api/users/avatar/"+d,size:80})})},a.isAdmin=function(a){return"admin"===a},a.initView=function(){var b={exporterCsvFilename:"users.csv",columnDefs:[{name:"fullname"},{name:"name",displayName:"APPLICATION_USERNAME"},{name:"internal"},{name:"email"},{name:"description"},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/staff/users/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-meadow",href:"/staff/users/view/{{row.entity.id}}/permit/voice",name:"permits",hide:"grid.appScope.isAdmin(row.entity.role)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.fullname, row.entity.id)"}]}]};a.gridOptions=e.gridOptions(c,b,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users.list",{url:"/list",templateUrl:"app/staff/user/list/list.html",controller:"UserListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Module",["$resource",function(a){return a("/api/modules/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("User",["$resource",function(a){return a("/api/users/:id/:controller/:controller2/:controller3",{id:"@id"},{changePassword:{method:"PUT",params:{controller:"password"}},update:{method:"PUT"},me:{method:"GET",params:{id:"me"}}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users",{url:"/users",template:"
","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"landing"}}})}]),angular.module("xCallyShuttleApp").controller("UserViewCtrl",["$scope","$stateParams","$cookieStore","$translate","FileUploader","User","Auth","xAlert","MailQueue","VoiceQueue","ChatQueue","FaxQueue","SmsQueue","OpenChannelQueue","Team","Module","Setting",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){function r(a,b){var c,d,e=b.length;for(c=0;e>c;c++){if(b[c].id===a)return b[c];if(b[c].SubModules&&b[c].SubModules.length&&(d=r(a,b[c].SubModules)))return d}}function s(b){var c=r(b.ModuleId,a.modules);if(b.status===!0)c.status=!0;else{var d=_.filter(c.SubModules,{status:!0});d.length||(c.status=!1)}c.ModuleId&&s(c)}function t(a,b){a.forEach(function(a){a.status=b,a.SubModules&&a.SubModules.length&&t(a.SubModules,b)})}function u(a,b){b.forEach(function(b){_.find(a,{id:b.id})?b.status=!0:b.status=!1,b.SubModules&&b.SubModules.length&&u(a,b.SubModules)})}function v(a,b){return a=_.union(a,_.map(_.filter(b,{status:!0}),"id")),b.forEach(function(b){b.SubModules&&b.SubModules.length&&(a=_.union(a,v(a,b.SubModules)))}),a}a.Auth=g,a._=_,a.moduleSwitch={onText:"On",offText:"Off",isActive:!0,size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initVoiceQueues=function(){var a={},c={};return j.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"voice",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"voice",b.id,f)})["catch"](function(a){console.error(a)})},a.initChatQueues=function(){var a={},c={};return k.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"chat",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"chat",b.id,f)})["catch"](function(a){console.error(a)})},a.initMailQueues=function(){var a={},c={};return i.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"mail",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"mail",b.id,f)})["catch"](function(a){console.error(a)})},a.initSmsQueues=function(){var a={},c={};return m.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"sms",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"sms",b.id,f)})["catch"](function(a){console.error(a)})},a.initFaxQueues=function(){var a={},c={};return l.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"fax",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"fax",b.id,f)})["catch"](function(a){console.error(a)})},a.initOpenchannelQueues=function(){var a={},c={};return n.get().$promise.then(function(c){return a.queues=_.map(c.rows,function(a){return{id:a.id,name:a.name}}),f.query({id:b.id,controller:"allowed",controller2:"openchannel",controller3:"queues"}).$promise}).then(function(a){c.queues=_.map(a,function(a){return{id:a.id,name:a.name}})}).then(function(){ComponentsDropdowns.bindPermit(a,c,"openchannel",b.id,f)})["catch"](function(a){console.error(a)})},a.initView=function(){return f.get({id:b.id}).$promise.then(function(b){return a.user=b,a.user.transport=a.user.transport?a.user.transport.split(","):[],a.user.allow=a.user.allow?a.user.allow.split(";"):[],q.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){h.error(a)})},a.updateItem=function(){var c=angular.copy(a.user);return delete c.password,delete c.md5secret,c.transport=c.transport.join(","),c.allow=c.allow.join(";"),f.update({id:b.id},c).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},a.updatePassword=function(){var c={newPassword:a.user.newPwd};return g.isAdmin()?c.id=b.id:c.oldPassword=a.user.currentPwd,f.changePassword(c).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})};var w=a.uploader=new e({url:"api/users/"+b.id+"/avatar",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+c.get("token")}});w.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),a.getModules=function(){return a.associatedModules=[],p.get().$promise.then(function(c){return a.modules=_.filter(c.rows,function(a){return!a.ModuleId}),f.query({id:b.id,controller:"allowed",controller2:"modules"}).$promise}).then(function(b){u(b,a.modules)})["catch"](function(a){h.error(a)})},a.updatePermissions=function(c){c.ModuleId&&s(c),c.SubModules&&c.SubModules.length&&t(c.SubModules,c.status);var e=v([],a.modules);return f.save({id:b.id,controller:"allowed",controller2:"modules"},{modules:e}).$promise.then(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){h.error(a)})},w.onSuccessItem=function(b,c){a.user.userpic=c.userpic,a.user.id===g.getCurrentUser().id&&(g.getCurrentUser().userpic=c.userpic),h.show(d.instant("MESSAGE_WELL_DONE"),"success")},w.onErrorItem=function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},w.onCompleteAll=function(){w.clearQueue()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users.view",{url:"/view/:id",templateUrl:"app/staff/user/view/view.html",controller:"UserViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.staff.users.view.account",{url:"/account",templateUrl:"app/staff/user/view/view.account.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css","assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}}).state("main.staff.users.view.voice",{url:"/voice",templateUrl:"app/staff/user/view/view.voice.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}}).state("main.staff.users.view.permit",{url:"/permit",templateUrl:"app/staff/user/view/view.permit.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}},cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/plugins/jquery-quicksearch/jquery.quicksearch.js","assets/scripts/components-dropdowns.js"]})}]}}).state("main.staff.users.view.permit.voice",{url:"/voice",templateUrl:"app/staff/user/view/view.permit.voice.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}}).state("main.staff.users.view.permit.chat",{url:"/chat",templateUrl:"app/staff/user/view/view.permit.chat.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.chat"}}}).state("main.staff.users.view.permit.mail",{url:"/mail",templateUrl:"app/staff/user/view/view.permit.mail.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.mail"}}}).state("main.staff.users.view.permit.fax",{url:"/fax",templateUrl:"app/staff/user/view/view.permit.fax.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.fax"}}}).state("main.staff.users.view.permit.sms",{url:"/sms",templateUrl:"app/staff/user/view/view.permit.sms.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.sms"}}}).state("main.staff.users.view.permit.openchannel",{url:"/openchannel",templateUrl:"app/staff/user/view/view.permit.openchannel.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.openchannel"}}}).state("main.staff.users.view.permit.modules",{url:"/modules",templateUrl:"app/staff/user/view/view.permit.modules.html",data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").controller("UserWizardCtrl",["$scope","$location","WizardHandler","xAlert","$translate","User","Setting","Auth",function(a,b,c,d,e,f,g,h){a.initWizard=function(){return a.Auht=h,a.forms={info:void 0,voice:void 0},a.item={role:"user",host:"dynamic",context:"from-sip"},g.get({controller:"internal"}).$promise.then(function(b){return a.item.internal=b.value,g.get({id:1}).$promise}).then(function(b){a.setting=b})["catch"](function(a){d.error(a)})},a.next=function(){c.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){return f.save(a.item).$promise.then(function(a){b.path("user"===a.role?"/staff/users/view/"+a.id+"/permit/voice":"/staff/users/view/"+a.id+"/account")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.staff.users.wizard",{url:"/wizard",templateUrl:"app/staff/user/wizard/wizard.html",controller:"UserWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("SugarcrmListCtrl",["$scope","SugarcrmAccount","gridOptions","xAlert","$translate","Modal",function(a,b,c,d,e,f){a.initView=function(){var d={exporterCsvFilename:"sugarcrm_account.csv",columnDefs:[{name:"name",displayName:"APPLICATION_NAME"},{name:"username"},{name:"remoteUri",displayName:"APPLICATION_REMOTE_ADDRESS"},{name:"action",width:250,buttons:[{"class":"blue-hoki",href:"/sugarcrm/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkAccount(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.checkAccount=function(a){return b.get({id:a,controller:"check"}).$promise.then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(a){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm.list",{url:"/list",templateUrl:"app/sugarcrm/list/list.html",controller:"SugarcrmListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm",{url:"/sugarcrm",template:"
","abstract":!0,data:{permissions:{only:["admin"],redirectTo:"main.dashboard.voice"}}})}]),angular.module("xCallyShuttleApp").factory("SugarcrmAccount",["$resource",function(a){return a("/api/sugarcrm/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("SugarcrmConfiguration",["$resource",function(a){return a("/api/sugarcrm/configurations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").factory("SugarcrmField",["$resource",function(a){return a("/api/sugarcrm/fields/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").controller("SugarcrmViewCtrl",["$scope","$http","$stateParams","$translate","$location","$filter","WizardHandler","socket","xAlert","Modal",function(a,b,c,d,e,f,g,h,i,j){a.$stateParams=c,a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:500,scrollInertia:0},a.initConfiguration=function(){a.formsConfiguration={},a.configuration={}},a.goNext=function(){g.wizard().next()},a.formValidation=function(a){return a},a.$on("$destroy",function(){h.unsyncUpdates("sugarcrm_configuration"),h.unsyncUpdates("sugarcrm_field")}),a.initView=function(){b.get("/api/sugarcrm/accounts/"+c.id).success(function(b){a.account=b}).error(function(a){i.error(a)})},a.updateItem=function(){b.put("/api/sugarcrm/accounts/"+c.id,a.account).success(function(){i.show(d.instant("MESSAGE_WELL_DONE")+".","success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.getConfigurations=function(){b.get("/api/sugarcrm/configurations",{params:{AccountId:c.id}}).success(function(b){a.configurations=b,h.socket.on("sugarcrm_configuration:remove",function(b){_.remove(a.configurations,{id:b.id})})}).error(function(a){i.error(a)})},a.deleteConfiguration=j.confirm["delete"](function(a){b["delete"]("api/sugarcrm/configurations/"+a).success(function(){i.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.createConfiguration=function(){a.configuration.AccountId=c.id,b.post("api/sugarcrm/configurations",a.configuration).success(function(a){e.path("sugarcrm/view/"+c.id+"/configurations/settings/"+a.id)}).error(function(){i.show("Something went wrong!","danger")})},a.fieldType=["string","variable"],a.descFieldType=["string","key_value"],a.getFields=function(){b.get("/api/sugarcrm/accounts/"+c.id+"/fields").success(function(b){a.accountFields=_.sortByOrder(f("sugarcrm")(_.toArray(b)),"name","asc"),_.forEach(b,function(a){a.options=_.toArray(a.options)})}).error(function(a){i.error(a)})},a.getConfiguration=function(){b.get("/api/sugarcrm/configurations/"+c.configurationId).success(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,h.socket.on("sugarcrm_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})}).error(function(a){i.error(a)})},a.getVariables=function(){b.get("/api/variables").success(function(b){a.variables=b.rows}).error(function(a){i.error(a)})},a.removeItem=function(a){b["delete"]("api/sugarcrm/fields/"+a.id).success(function(){i.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addItemSubject=function(){var d={type:"string",content:""};b.post("/api/sugarcrm/configurations/"+c.configurationId+"/subject",d).success(function(b){a.subjectConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.addItemDescription=function(){var d={type:"string",content:""};b.post("/api/sugarcrm/configurations/"+c.configurationId+"/description",d).success(function(b){a.descriptionConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.addItemField=function(){var d={content:""};b.post("/api/sugarcrm/configurations/"+c.configurationId+"/field",d).success(function(b){a.fieldConfig.push(b)}).error(function(){i.show("Something went wrong!","danger")})},a.updateField=function(a){b.put("/api/sugarcrm/fields/"+a.id,a).success(function(){}).error(function(){i.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.changeType=function(b){"variable"===b.type?b.content="":"string"===b.type&&(b.VariableId=null),a.updateField(b)},a.changeDescType=function(b){"key_value"===b.type?(b.content="","string"===b.keyType?b.VariableId=null:"variable"===b.keyType&&(b.keyContent="")):"string"===b.type&&(b.VariableId=null,b.key="",b.keyContent=""),a.updateField(b)},a.changeFieldType=function(b){b.content="",a.updateField(b)},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"name",b);return c?c.options.length>0?c.options:null:void 0}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm.view",{url:"/view/:id",templateUrl:"app/sugarcrm/view/view.html",controller:"SugarcrmViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.sugarcrm.view.account",{url:"/account",templateUrl:"app/sugarcrm/view/view.account.html"}).state("main.sugarcrm.view.configurations",{url:"/configurations",templateUrl:"app/sugarcrm/view/view.configurations.html"}).state("main.sugarcrm.view.configurations.settings",{url:"/settings/:configurationId",templateUrl:"app/sugarcrm/view/view.configurationSettings.html",controller:"SugarcrmViewCtrl"}).state("main.sugarcrm.view.configuration",{url:"/configuration",templateUrl:"app/sugarcrm/view/view.configuration.html"})}]),angular.module("xCallyShuttleApp").controller("SugarcrmkWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={}},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("api/sugarcrm/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/sugarcrm/list")}).error(function(){e.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sugarcrm.wizard",{url:"/wizard",templateUrl:"app/sugarcrm/wizard/wizard.html",controller:"SugarcrmkWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("CannedAnswer",["$resource",function(a){return a("/api/answers/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.answers",{url:"/answers",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:58}}})}]),angular.module("xCallyShuttleApp").controller("AnswerListCtrl",["$scope","$uibModal","CannedAnswer","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"answers.csv",columnDefs:[{name:"key",displayName:"APPLICATION_NAME"},{name:"value"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/answers/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.key, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){b.open({animation:!0,templateUrl:"app/tools/answer/list/list.create.modal.html",controller:"AnswerListCreateCtrl"}).result.then(function(b){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("AnswerListCreateCtrl",["$scope","$translate","$uibModalInstance","CannedAnswer","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.answers.list",{url:"/list",templateUrl:"app/tools/answer/list/list.html",controller:"AnswerListCtrl"})}]),angular.module("xCallyShuttleApp").controller("AnswerViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location","CannedAnswer",function(a,b,c,d,e,f,g){a.getAnswer=function(){return g.get({id:e.id}).$promise.then(function(b){a.answer=b})["catch"](function(a){c.error(a)})},a.updateAnswer=function(){var b=angular.copy(a.answer);return g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.answers.view",{url:"/view/:id",templateUrl:"app/tools/answer/view/view.html",controller:"AnswerViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.answers.view.settings",{url:"/settings",templateUrl:"app/tools/answer/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").factory("Automation",["$resource",function(a){return a("/api/automations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations",{url:"/automations",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:51}}})}]),angular.module("xCallyShuttleApp").controller("AutomationListCtrl",["$scope","$http","$translate","xAlert","Automation","gridOptions",function(a,b,c,d,e,f){a.onText="On",a.offText="Off",a.isActive=!0,a.size="mini",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initView=function(){var b={exporterCsvFilename:"Automations.csv",columnDefs:[{name:"name"},{name:"description"},{name:"channel"},{name:"status",cellTemplate:'
',width:100,enableFiltering:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/automations/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=f.gridOptions(e,b,a)},a.updateItem=function(a){return e.update({id:a.id},a).$promise.then(function(){d.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations.list",{url:"/list",templateUrl:"app/tools/automation/list/list.html",controller:"AutomationListCtrl"})}]),angular.module("xCallyShuttleApp").controller("AutomationViewCtrl",["$scope","$stateParams","$http","$translate","xAlert","automations","Automation","$location",function(a,b,c,d,e,f,g,h){a.$automations=f,a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.forms={general:{}},a.addCondition=function(b){a.automation[b].push({field:"",operator:"",value:""})},a.removeCondition=function(b,c){a.automation[b].splice(c,1)},a.addAction=function(){a.automation.Actions.push({action:"",data1:"",data2:"",data3:"",data4:"",data5:""})},a.resetActionData=function(a){a.data1="",a.data2="",a.data3="",a.data4="",a.data5=""},a.removeAction=function(b){a.automation.Actions.splice(b,1)},a.initView=function(){return g.get({id:b.id}).$promise.then(function(b){a.automation=b})["catch"](function(a){e.error(a),h.path("/tools/automations/list")})},a.updateAutomation=function(){return g.update({id:b.id},a.automation).$promise.then(function(){e.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),e.error(a)})},a.exitValidation=function(b){return console.log(b&&(a.automation.All.length||a.automation.Any.length)&&a.automation.Actions.length),!(!b||!a.automation.All.length&&!a.automation.Any.length||!a.automation.Actions.length)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations.view",{url:"/view/:id",templateUrl:"app/tools/automation/view/view.html",controller:"AutomationViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}}).state("main.tools.automations.view.settings",{url:"/settings",templateUrl:"app/tools/automation/view/view.settings.html"}).state("main.tools.automations.view.routes",{url:"/routes",templateUrl:"app/tools/automation/view/view.routes.html"}).state("main.tools.automations.view.application",{url:"/application",templateUrl:"app/tools/automation/view/view.application.html" })}]),angular.module("xCallyShuttleApp").controller("AutomationWizardCtrl",["$scope","$http","$location","xAlert","automations","WizardHandler","Automation",function(a,b,c,d,e,f,g){a.$automations=e,a.statusSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.tempData={voice:{},mail:{},chat:{},fax:{}},a.item={All:[],Any:[],Actions:[]},a.forms={general:void 0,settings:void 0},a.addCondition=function(b){a.item[b].push({field:"",operator:"",value:""})},a.removeCondition=function(b,c){a.item[b].splice(c,1)},a.addAction=function(){a.item.Actions.push({action:"",data1:"",data2:"",data3:"",data4:"",data5:""})},a.resetActionData=function(a){a.data1="",a.data2="",a.data3="",a.data4="",a.data5=""},a.removeAction=function(b){a.item.Actions.splice(b,1)},a.$watch("item.channel",function(b,c){c&&(a.tempData[c].All=_.clone(a.item.All,!0),a.tempData[c].Any=_.clone(a.item.Any,!0),a.tempData[c].Actions=_.clone(a.item.Actions,!0)),a.item.All=a.tempData[b].All?a.tempData[b].All:[],a.item.Any=a.tempData[b].Any?a.tempData[b].Any:[],a.item.Actions=a.tempData[b].Actions?a.tempData[b].Actions:[]},!0),a.item.channel="mail",a.createItem=function(){return g.save(a.item).$promise.then(function(){c.path("/tools/automations/list")})["catch"](function(a){console.error(a),d.error(a)})},a.next=function(){f.wizard().next()},a.previous=function(){f.wizard().previous()},a.exitValidation=function(a){return a},a.exitSettingsValidation=function(b){return!(!b||!a.item.All.length&&!a.item.Any.length||!a.item.Actions.length)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.automations.wizard",{url:"/wizard",templateUrl:"app/tools/automation/wizard/wizard.html",controller:"AutomationWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("Interval",["$resource",function(a){return a("/api/intervals/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.intervals",{url:"/intervals",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:53}}})}]),angular.module("xCallyShuttleApp").controller("IntervalListCtrl",["$scope","$uibModal","Interval","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"intervals.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/intervals/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/tools/interval/list/list.create.modal.html",controller:"IntervalListCreateCtrl"});c.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("IntervalListCreateCtrl",["$scope","$translate","$uibModalInstance","Interval","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.intervals.list",{url:"/list",templateUrl:"app/tools/interval/list/list.html",controller:"IntervalListCtrl"})}]),angular.module("xCallyShuttleApp").controller("IntervalViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","socket","$location","WizardHandler","Modal","interval",function(a,b,c,d,e,f,g,h,i,j){function k(b){var c,d,e,f;c=b.t_from&&b.t_to&&!b.alwaysTime?moment(b.t_from).format("HH:mm")+"-"+moment(b.t_to).format("HH:mm"):"*",b.wd_from&&"always"!==b.wd_from?(d=b.wd_from,b.wd_to&&"always"!==b.wd_to&&(d+="-"+b.wd_to)):d="*",b.md_from&&"always"!==b.md_from?(e=b.md_from,b.md_to&&"always"!==b.md_to&&(e+="-"+b.md_to)):e="*",b.m_from&&"always"!==b.m_from?(f=b.m_from,b.m_to&&"always"!==b.m_to&&(f+="-"+b.m_to)):f="*",void 0!==a.selectedSubInterval?a.interval.SubIntervals[a.selectedSubInterval].interval=c+","+d+","+e+","+f:a.subinterval.interval=c+","+d+","+e+","+f}a.$translate=d,a.$interval=j.interval,a.selectedSubInterval=void 0,a["switch"]={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.gridOptions={columnDefs:[{name:"name",displayName:"APPLICATION_NAME",headerCellFilter:"translate"},{name:"interval",displayName:"APPLICATION_INTERVAL",headerCellFilter:"translate"},{name:"action",displayName:"APPLICATION_ACTION",headerCellFilter:"translate",width:125,cellTemplate:'{{\'APPLICATION_SETTINGS\' | translate}}{{\'APPLICATION_DELETE\' | translate}}'}]},a.forms={subinterval:void 0,general:void 0},a.initSubInterval=function(b){b&&(a.selectedSubInterval=void 0),a.subinterval={},a.splittedInterval={t_from:moment(new Date),t_to:moment(new Date),wd_from:"always",wd_to:"always",md_from:"always",md_to:"always",m_from:"always",m_to:"always",alwaysTime:!0}},a.next=function(){h.wizard().next()},a.previous=function(){h.wizard().previous()},a.exitValidation=function(a){return a},a.deselectAndRedirect=function(b){a.selectedSubInterval=void 0,g.path(b)},a.getInterval=function(){b.get("/api/intervals/"+e.id).success(function(b){a.interval=b,a.gridOptions.data=b.SubIntervals}).error(function(a){console.error(a),g.path("/tools/intervals/list")})},a.openSubInterval=function(b){a.selectedSubInterval=b,g.path("/tools/intervals/view/"+e.id+"/subintervals/settings")},a.updateInterval=function(f){a.selectedSubInterval=void 0,b.put("/api/intervals/"+e.id,a.interval).success(function(){a.getInterval(),c.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),f&&g.path("/tools/intervals/view/"+e.id+"/"+f)}).error(function(a){c.error(a)})},a.getSubInterval=function(){void 0===a.selectedSubInterval&&g.path("/tools/intervals/list"),a.splittedInterval={t_from:moment(new Date),t_to:moment(new Date)};var b,c=a.interval.SubIntervals[a.selectedSubInterval]?a.interval.SubIntervals[a.selectedSubInterval].interval.split(","):["*","*","*","*"];c.forEach(function(c,d){switch(d){case 0:"*"!==c?(b=c.split("-"),a.splittedInterval.t_from=moment(b[0],"HH:mm"),a.splittedInterval.t_to=moment(b[1],"HH:mm"),a.splittedInterval.alwaysTime=!1):(a.splittedInterval.t_from=moment(new Date),a.splittedInterval.t_to=moment(new Date),a.splittedInterval.alwaysTime=!0);break;case 1:"*"!==c?(b=c.split("-"),a.splittedInterval.wd_from=b[0],a.splittedInterval.wd_to=b[1]?b[1]:"always"):(a.splittedInterval.wd_from="always",a.splittedInterval.wd_to="always");break;case 2:"*"!==c?(b=c.split("-"),a.splittedInterval.md_from=b[0],a.splittedInterval.md_to=b[1]?b[1]:"always"):(a.splittedInterval.md_from="always",a.splittedInterval.md_to="always");break;case 3:"*"!==c?(b=c.split("-"),a.splittedInterval.m_from=b[0],a.splittedInterval.m_to=b[1]?b[1]:"always"):(a.splittedInterval.m_from="always",a.splittedInterval.m_to="always")}})},a.$watch("splittedInterval",function(a){a&&k(a)},!0),a.addSubInterval=function(){a.interval.SubIntervals.push(a.subinterval),a.updateInterval("subintervals")},a.deleteSubInterval=i.confirm["delete"](function(b){a.interval.SubIntervals.splice(b,1),a.updateInterval()})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.intervals.view",{url:"/view/:id",templateUrl:"app/tools/interval/view/view.html",controller:"IntervalViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.intervals.view.settings",{url:"/settings",templateUrl:"app/tools/interval/view/view.settings.html"}).state("main.tools.intervals.view.subintervals",{url:"/subintervals",templateUrl:"app/tools/interval/view/view.subintervals.html"}).state("main.tools.intervals.view.subinterval",{url:"/subinterval",templateUrl:"app/tools/interval/view/view.subinterval.html"}).state("main.tools.intervals.view.subintervals.settings",{url:"/settings",templateUrl:"app/tools/interval/view/view.subintervalSettings.html"})}]),angular.module("xCallyShuttleApp").controller("PauseListCtrl",["$scope","$log","$uibModal","$translate","Pause","gridOptions",function(a,b,c,d,e,f){a.initView=function(){var b={exporterCsvFilename:"pauses.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/pauses/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=f.gridOptions(e,b,a)},a.createItem=function(){var b=c.open({animation:!0,templateUrl:"app/tools/pause/list/list.create.modal.html",controller:"PauseListCreateCtrl"});b.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("PauseListCreateCtrl",["$scope","$translate","$uibModalInstance","Pause","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.pauses.list",{url:"/list",templateUrl:"app/tools/pause/list/list.html",controller:"PauseListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Pause",["$resource",function(a){return a("/api/pauses/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.pauses",{url:"/pauses",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:57}}})}]),angular.module("xCallyShuttleApp").controller("PauseViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location","Pause",function(a,b,c,d,e,f,g){a.getPause=function(){return g.get({id:e.id}).$promise.then(function(b){a.pause=b})["catch"](function(a){c.error(a)})},a.updatePause=function(){var b=angular.copy(a.pause);return g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.pauses.view",{url:"/view/:id",templateUrl:"app/tools/pause/view/view.html",controller:"PauseViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.pauses.view.settings",{url:"/settings",templateUrl:"app/tools/pause/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("SchedulerListCtrl",["$scope","Scheduler","gridOptions","xAlert","$translate","socket",function(a,b,c,d,e,f){a._=_,a.switches={isActive:!0,size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.scheduleTypes=[{name:"APPLICATION_REPORT_EXTRACTION",value:"report"},{name:"APPLICATION_HISTORY_MOVE",value:"history"},{name:"APPLICATION_DB_BACKUP",value:"backup"}],a.initView=function(){var d={exporterCsvFilename:"Schedules.csv",columnDefs:[{name:"name"},{name:"type",cellTemplate:'
{{grid.appScope._.find(grid.appScope.scheduleTypes,{value:row.entity.type}).name | translate}}
'},{name:"description"},{name:"active",cellTemplate:'
',enableFiltering:!1,enableSorting:!1},{name:"sendMail",displayName:"APPLICATION_SEND_MAIL",cellTemplate:'
',enableFiltering:!1,enableSorting:!1},{name:"action",width:100,buttons:[{"class":"blue-hoki",href:"/tools/scheduler/view/{{row.entity.id}}/settings",name:"settings"},{"class":"green-turquoise",name:"run",onClick:"grid.appScope.runSchedule(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.updateItem=function(a){return b.update({id:a.id},a).$promise.then(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),d.error(a)})},a.runSchedule=function(a){return b.get({id:a,controller:"run"}).$promise.then(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.scheduler.list",{url:"/list",templateUrl:"app/tools/scheduler/list/list.html",controller:"SchedulerListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Scheduler",["$resource",function(a){return a("/api/scheduler/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.scheduler",{url:"/scheduler",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:61}}})}]),angular.module("xCallyShuttleApp").controller("SchedulerViewCtrl",["$scope","xAlert","$translate","$stateParams","socket","$location","ReportTree","Scheduler","DefaultReport","CustomReport","$timeout","MailServerOut",function(a,b,c,d,e,f,g,h,i,j,k,l){function m(){switch(a.schedule.cronType=a.rangeExec.type,a.rangeExec.type){case"daily":a.schedule.cron="00 "+a.rangeExec.hour+" * * *";break;case"weekly":a.schedule.cron="00 "+a.rangeExec.hour+" * * "+a.rangeExec.weekDays.join(",");break;case"monthly":a.schedule.cron="00 "+a.rangeExec.hour+" "+a.rangeExec.monthDay+" * *"}}function n(b){var c;switch(b.cronType){case"daily":a.rangeExec.hour=Number(b.cron.split(" ")[1]),a.rangeExec.type=b.cronType;break;case"weekly":c=b.cron.split(" "),a.rangeExec.hour=Number(c[1]),c[4].split(",").forEach(function(b){a.rangeExec.weekDays.push(Number(b))}),a.rangeExec.type=b.cronType;break;case"monthly":c=b.cron.split(" "),a.rangeExec.hour=Number(c[1]),a.rangeExec.monthDay=Number(c[2]),a.rangeExec.type=b.cronType;break;case"currentDay":a.switchValues.today=!0}a.$watch("rangeExec",function(b){a.switchValues.today||m()},!0)}a.forms={},a.rangeExec={weekDays:[],monthDay:null,hour:0,type:null},a.initReports=function(){var c;return a.reports=[],a.tempTodayCron=null,g.query().$promise.then(function(b){return a.defaultTreeData=JSON.parse(b[0].tree),a.customTreeData=JSON.parse(b[1].tree),i.get().$promise}).then(function(b){return a.defRep=b.rows,a.defRep.length&&_.forEach(a.defRep,function(b){c=_.find(a.defaultTreeData,{id:b.parent}),c&&(b.parent="Motion Reports - "+c.text,b.type="default")}),j.get().$promise}).then(function(b){return a.cusRep=b.rows,a.cusRep.length&&_.forEach(a.cusRep,function(b){c=_.find(a.customTreeData,{id:b.parent}),c&&(b.parent="Custom Reports - "+c.text,b.type="custom")}),l.get().$promise}).then(function(b){a.mailServers=b.rows})["catch"](function(a){b.error(a)})},a.initView=function(){return h.get({id:d.id}).$promise.then(function(b){a.schedule=b,n(b)}).then(function(){e.socket.on("schedule:update",function(b){a.schedule.id===b.id&&(a.schedule.active=b.active,a.schedule.sendMail=b.sendMail)})})["catch"](function(a){console.error(a),f.path("/tools/scheduler/list")})},a.refreshSlider=function(){k(function(){a.$broadcast("rzSliderForceRender"),a.refreshSlider=null})},a.monthDays=function(){for(var a=[],b=1;31>=b;b++)a.push(b);return a}(),a.hours=function(){for(var a=[],b=0;23>=b;b++)a.push(b);return a}(),a.setReportTree=function(b){a.schedule.reportType=b.type},a.validitySlider={ceil:24,floor:0,showTicks:!0},a.switchValues={today:!1},a.switches={isActive:!0,size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.scheduleTypes=[{name:"APPLICATION_REPORT_EXTRACTION",value:"report"}],a.todayCron=[{name:"15 min",value:"*/15 * * * *"},{name:"30 min",value:"*/30 * * * *"},{name:"1 h",value:"0 * * * *"}],a.reportRanges=[{name:"APPLICATION_PREVIOUS_DAY",value:"yesterday"},{name:"APPLICATION_LAST_SEVEN_DAYS",value:"last7"},{name:"APPLICATION_LAST_THIRTY_DAYS",value:"last30"},{name:"APPLICATION_LAST_MONTH",value:"lastMonth"}],a.cronTypes=[{name:"APPLICATION_DAY",value:"daily"},{name:"APPLICATION_WEEK",value:"weekly"},{name:"APPLICATION_MONTH",value:"monthly"}],a.weekDays=[{name:"APPLICATION_MONDAY",value:1},{name:"APPLICATION_TUESDAY",value:2},{name:"APPLICATION_WEDNESDAY",value:3},{name:"APPLICATION_THURSDAY",value:4},{name:"APPLICATION_FRIDAY",value:5},{name:"APPLICATION_SATURDAY",value:6},{name:"APPLICATION_SUNDAY",value:0}],a.checkToday=function(){a.switchValues.today?(a.schedule.cron=angular.copy(a.tempTodayCron),a.schedule.cronType="currentDay"):(a.tempTodayCron=angular.copy(a.schedule.cron),a.schedule.cron=void 0,m())},a.updateSchedule=function(){return h.update({id:a.schedule.id},a.schedule).$promise.then(function(){b.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),b.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.scheduler.view",{url:"/view/:id",templateUrl:"app/tools/scheduler/view/view.html",controller:"SchedulerViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.scheduler.view.settings",{url:"/settings",templateUrl:"app/tools/scheduler/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("SchedulerWizardCtrl",["$scope","WizardHandler","$location","xAlert","Scheduler","ReportTree","$translate","DefaultReport","CustomReport","MailServerOut",function(a,b,c,d,e,f,g,h,i,j){function k(){switch(a.item.cronType=a.rangeExec.type,a.rangeExec.type){case"daily":a.item.cron="00 "+a.rangeExec.hour+" * * *";break;case"weekly":a.item.cron="00 "+a.rangeExec.hour+" * * "+a.rangeExec.weekDays.join(",");break;case"monthly":a.item.cron="00 "+a.rangeExec.hour+" "+a.rangeExec.monthDay+" * *"}}a.forms={},a.item={validityStart:8,validityEnd:16,type:"report",reportType:"default"},a.initReports=function(){a.reports=[];var b;return f.query().$promise.then(function(b){return a.defaultTreeData=JSON.parse(b[0].tree),a.customTreeData=JSON.parse(b[1].tree),h.get().$promise}).then(function(c){return a.defRep=c.rows,a.defRep.length&&_.forEach(a.defRep,function(c){b=_.find(a.defaultTreeData,{id:c.parent}),b&&(c.parent="Motion Reports - "+b.text,c.type="default")}),i.get().$promise}).then(function(c){return a.cusRep=c.rows,a.cusRep.length&&_.forEach(a.cusRep,function(c){b=_.find(a.customTreeData,{id:c.parent}),b&&(c.parent="Custom Reports - "+b.text,c.type="custom")}),j.get().$promise}).then(function(b){a.mailServers=b.rows;var c=_.find(a.mailServers,{MailAccountId:null});c&&(c.username+=" (custom)")})["catch"](function(a){d.error(a)})},a.setReportTree=function(b){a.item.reportType=b.type},a.validitySlider={ceil:24,floor:0,showTicks:!0},a.switchValues={today:!1},a.switches={isActive:!0,size:"mini",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.scheduleTypes=[{name:"APPLICATION_REPORT_EXTRACTION",value:"report"}],a.todayCron=[{name:"15 min",value:"*/15 * * * *"},{name:"30 min",value:"*/30 * * * *"},{name:"1 h",value:"0 * * * *"}],a.reportRanges=[{name:"APPLICATION_PREVIOUS_DAY",value:"yesterday"},{name:"APPLICATION_LAST_SEVEN_DAYS",value:"last7"},{name:"APPLICATION_LAST_THIRTY_DAYS",value:"last30"},{name:"APPLICATION_LAST_MONTH",value:"lastMonth"}],a.cronTypes=[{name:"APPLICATION_DAY",value:"daily"},{name:"APPLICATION_WEEK",value:"weekly"},{name:"APPLICATION_MONTH",value:"monthly"}],a.weekDays=[{name:"APPLICATION_MONDAY",value:1},{name:"APPLICATION_TUESDAY",value:2},{name:"APPLICATION_WEDNESDAY",value:3},{name:"APPLICATION_THURSDAY",value:4},{name:"APPLICATION_FRIDAY",value:5},{name:"APPLICATION_SATURDAY",value:6},{name:"APPLICATION_SUNDAY",value:0}],a.tempTodayCron=null,a.checkToday=function(){a.switchValues.today?(a.item.cron=angular.copy(a.tempTodayCron),a.item.cronType="currentDay"):(a.tempTodayCron=angular.copy(a.item.cron),a.item.cron=void 0,k())},a.monthDays=function(){for(var a=[],b=1;31>=b;b++)a.push(b);return a}(),a.hours=function(){for(var a=[],b=0;23>=b;b++)a.push(b);return a}(),a.rangeExec={weekDays:[],monthDay:null,hour:0,type:null},a.$watch("rangeExec",function(b){a.switchValues.today||k()},!0),a.next=function(){b.wizard().next()},a.previous=function(){b.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){return e.save(a.item).$promise.then(function(){c.path("/tools/scheduler/list")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.scheduler.wizard",{url:"/wizard",templateUrl:"app/tools/scheduler/wizard/wizard.html",controller:"SchedulerWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("SoundListCtrl",["$scope","$http","socket","Modal","$q","FileUploader","$translate","xAlert","$cookieStore","$sce","Sound",function(a,b,c,d,e,f,g,h,i,j,k){a.Sound=k,a.isCollapsed=!0,a.downloadButtonClass="btn btn-xs blue-hoki",a["delete"]=d.confirm["delete"](function(a){b["delete"]("/api/sounds/"+a).success(function(a){}).error(function(a){console.log(a)})}),a.updateAudio=function(a,c){var d=e.defer();return b.put("/api/sounds/"+a,c).success(function(a){d.resolve()}).error(function(a){console.log(a.message),d.reject(a.message)}),d.promise},a.$on("$destroy",function(){c.unsyncUpdates("sound")}),a.initList=function(){b.get("/api/sounds").success(function(b){a.sounds=b.rows,b.rows.length||(a.isCollapsed=!1),c.syncUpdates("sound",a.sounds,function(){a.sounds.length||(a.isCollapsed=!1)})})};var l=a.uploader=new f({url:"/api/sounds",withCredentials:!0,headers:{Authorization:"Bearer "+i.get("token")}});l.filters.push({name:"customFilter",fn:function(a,b){return this.queue.length<10}}),l.onWhenAddingFileFailed=function(a,b,c){console.info("onWhenAddingFileFailed",a,b,c)},l.onAfterAddingFile=function(a){console.info("onAfterAddingFile",a)},l.onAfterAddingAll=function(a){console.info("onAfterAddingAll",a)},l.onBeforeUploadItem=function(a){console.info("onBeforeUploadItem",a)},l.onProgressItem=function(a,b){console.info("onProgressItem",a,b),a.isUploading=!0},l.onProgressAll=function(a){console.info("onProgressAll",a)},l.onSuccessItem=function(a,b,c,d){console.info("onSuccessItem",a,b,c,d),a.isUploading=!1},l.onErrorItem=function(a,b,c,d){console.info("onErrorItem",a,b,c,d),a.responseMessage=b,a.isUploading=!1},l.onCancelItem=function(a,b,c,d){console.info("onCancelItem",a,b,c,d),a.isUploading=!1},l.onCompleteItem=function(a,b,c,d){console.info("onCompleteItem",a,b,c,d),a.isUploading=!1},l.onCompleteAll=function(){console.info("onCompleteAll")}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.sounds.list",{url:"/list",templateUrl:"app/tools/sound/list/list.html",controller:"SoundListCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js"]})}]}})}]),angular.module("xCallyShuttleApp").factory("Sound",["$resource",function(a){return a("/api/sounds/:id/:controller",{name:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.sounds",{url:"/sounds",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:60}}})}]),angular.module("xCallyShuttleApp").controller("TagListCtrl",["$scope","$uibModal","Tag","gridOptions","$rootScope",function(a,b,c,d,e){a.initView=function(){var b={exporterCsvFilename:"tag.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/tags/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/tools/tag/list/list.create.modal.html",controller:"TagListCreateCtrl"});c.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("TagListCreateCtrl",["$scope","$translate","$uibModalInstance","Tag","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.tags.list",{url:"/list",templateUrl:"app/tools/tag/list/list.html",controller:"TagListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Tag",["$resource",function(a){return a("/api/tags/:id/:controller/:tag",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.tags",{url:"/tags",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:55}}})}]),angular.module("xCallyShuttleApp").controller("TagViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location","Tag","gridOptions","List","Company","Contact","uiGridConstants","usSpinnerService",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(){m.stop("spinner-grid"),a.readyGrid=!0}a.getTag=function(){return g.get({id:e.id}).$promise.then(function(b){a.tag=b})["catch"](function(a){c.error(a)})},a.updateTag=function(){var b=angular.copy(a.tag);return g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){c.error(a)})},a.initChat=function(){m.spin("spinner-grid");var b={enableRowSelection:!1,exporterCsvFilename:"tagChat.csv",columnDefs:[{name:"type"},{name:"status"},{name:"ChatWebsite.name",displayName:"APPLICATION_WEBSITE"},{name:"ChatVisitor.email",displayName:"APPLICATION_VISITOR"},{name:"action",width:40,buttons:[{"class":"green",name:"chatRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'chatRoom')"}]}]};a.gridOptions=h.gridOptions(g,b,a,{controller:"chat",tag:a.tag.name},null,null,n())},a.initMail=function(){m.spin("spinner-grid");var b={enableRowSelection:!1,exporterCsvFilename:"tagMail.csv",columnDefs:[{name:"subject"},{name:"from"},{name:"account"},{name:"status"},{name:"action",width:40,buttons:[{"class":"green",name:"mailRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'mailRoom')"}]}]};a.gridOptions=h.gridOptions(g,b,a,{controller:"mail",tag:a.tag.name},null,null,n())},a.initFax=function(){m.spin("spinner-grid");var b={enableRowSelection:!1,exporterCsvFilename:"tagFax.csv",columnDefs:[{name:"from"},{name:"account"},{name:"status"},{name:"action",width:40,buttons:[{"class":"green",name:"faxRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'faxRoom')"}]}]};a.gridOptions=h.gridOptions(g,b,a,{controller:"fax",tag:a.tag.name},null,null,n())},a.initSms=function(){m.spin("spinner-grid");var b={enableRowSelection:!1,exporterCsvFilename:"tagSms.csv",columnDefs:[{name:"from"},{name:"status"},{name:"action",width:40,buttons:[{"class":"green",name:"smsRoom",onClick:"grid.appScope.openRoom(row.entity.id, 'smsRoom')"}]}]};a.gridOptions=h.gridOptions(g,b,a,{controller:"sms",tag:a.tag.name},null,null,n())},a.initContacts=function(){a.readyGrid=!1,m.spin("spinner-grid");var b;return i.get().$promise.then(function(b){return a.lists=[],b.rows.forEach(function(b,c){a.lists.push({value:b.id,label:b.name})}),j.get().$promise}).then(function(b){a.companies=[],b.rows.forEach(function(b,c){a.companies.push({value:b.id,label:b.name})})}).then(function(){b={enableRowSelection:!1,exporterCsvFilename:"tagContacts.csv",columnDefs:[{name:"firstName"},{name:"lastName"},{name:"phone"},{name:"email"},{name:"ListId",displayName:"APPLICATION_LIST",field:"List.name",filter:{type:l.filter.SELECT,selectOptions:a.lists}},{name:"CompanyId",displayName:"APPLICATION_COMPANY",field:"Company.name",filter:{type:l.filter.SELECT,term:e.companyId||null,selectOptions:a.companies}},{name:"action",width:40,buttons:[{"class":"blue-hoki",name:"profile",onClick:"grid.appScope.openContactTab(row.entity)"}]}]},a.gridOptions=h.gridOptions(g,b,a,{controller:"contacts",tag:a.tag.name},null,null,n())})["catch"](function(a){c.error(a)})},a.openRoom=function(b,c){var d=_.find(a.workspaces,{id:b,type:c});if(d)d.active=!0;else{var e;switch(c){case"mailRoom":e="icon-envelope";break;case"chatRoom":e="fa fa-users";break;case"faxRoom":e="fa fa-fax";break;case"smsRoom":e="glyphicon glyphicon-comment"}a.workspaces.push({id:b,type:c,"class":e,active:!0})}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.tags.view",{url:"/view/:id",templateUrl:"app/tools/tag/view/view.html",controller:"TagViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.tags.view.settings",{url:"/settings",templateUrl:"app/tools/tag/view/view.settings.html"}).state("main.tools.tags.view.chat",{url:"/chat",templateUrl:"app/tools/tag/view/view.chat.html"}).state("main.tools.tags.view.mail",{url:"/mail",templateUrl:"app/tools/tag/view/view.mail.html"}).state("main.tools.tags.view.fax",{url:"/fax",templateUrl:"app/tools/tag/view/view.fax.html"}).state("main.tools.tags.view.sms",{ url:"/sms",templateUrl:"app/tools/tag/view/view.sms.html"}).state("main.tools.tags.view.contacts",{url:"/contacts",templateUrl:"app/tools/tag/view/view.contacts.html"})}]),angular.module("xCallyShuttleApp").controller("TemplateListCtrl",["$scope","Template","gridOptions",function(a,b,c){a.initView=function(){var d={exporterCsvFilename:"templates.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/templates/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.templates.list",{url:"/list",templateUrl:"app/tools/template/list/list.html",controller:"TemplateListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Template",["$resource",function(a){return a("/api/templates/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.templates",{url:"/templates",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:56}}})}]),angular.module("xCallyShuttleApp").controller("TemplateViewCtrl",["$scope","$rootScope","$http","$translate","$stateParams","xAlert","Template","templateVariable","Variable",function(a,b,c,d,e,f,g,h,i){a.initItem=function(){CKEDITOR.plugins.addExternal("richparams","/assets/plugins/ckeditor-richparams/"),a.options={language:b.language,allowedContent:!0,entities:!1,skin:"office2013",contentsCss:"/assets/css/global/richparams.css",extraPlugins:"richparams,autogrow",autoGrow_minHeight:450,richparams:h,disableNativeSpellChecker:!1,toolbar:[{name:"clipboard",items:["Cut","Copy","Paste","PasteText","PasteFromWord","-","Undo","Redo"]},{name:"links",items:["Link","Unlink","Anchor"]},{name:"insert",items:["Image","Table","HorizontalRule","SpecialChar"]},{name:"tools",items:["Maximize"]},{name:"document",items:["Source"]},"/",{name:"basicstyles",items:["Bold","Italic","Underline","Strike","Subscript","Superscript","-","RemoveFormat"]},{name:"paragraph",items:["NumberedList","BulletedList","-","Outdent","Indent","-","Blockquote"]},{name:"styles",items:["Styles","Format"]},"/",{name:"motion",items:["voice","chat","mail"]}]},a.form={},a.item={},a.item=g.get({id:e.id})},a.updateItem=function(){return g.update(a.item).$promise.then(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.templates.view",{url:"/view/:id",templateUrl:"app/tools/template/view/view.html",controller:"TemplateViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.templates.view.settings",{url:"/settings",templateUrl:"app/tools/template/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("TemplateWizardCtrl",["$scope","$rootScope","$location","$http","WizardHandler","xAlert","Template","templateVariable",function(a,b,c,d,e,f,g,h){a.initWizard=function(){CKEDITOR.plugins.addExternal("richparams","/assets/plugins/ckeditor-richparams/"),a.options={language:b.language,allowedContent:!0,entities:!1,skin:"office2013",contentsCss:"/assets/css/global/richparams.css",extraPlugins:"richparams,autogrow",autoGrow_minHeight:450,disableNativeSpellChecker:!1,richparams:h,toolbar:[{name:"clipboard",items:["Cut","Copy","Paste","PasteText","PasteFromWord","-","Undo","Redo"]},{name:"links",items:["Link","Unlink","Anchor"]},{name:"insert",items:["Image","Table","HorizontalRule","SpecialChar"]},{name:"tools",items:["Maximize"]},{name:"document",items:["Source"]},"/",{name:"basicstyles",items:["Bold","Italic","Underline","Strike","Subscript","Superscript","-","RemoveFormat"]},{name:"paragraph",items:["NumberedList","BulletedList","-","Outdent","Indent","-","Blockquote"]},{name:"styles",items:["Styles","Format"]},"/",{name:"motion",items:["voice","chat","mail"]}]},a.item={},a.form={}},a.exitValidation=function(a){return a},a.createItem=function(){return g.save({name:a.item.name,description:a.item.description,subject:a.item.subject||null,html:a.item.html||null,text:a.item.text||null}).$promise.then(function(){c.path("/tools/templates/list")})["catch"](function(a){f.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.templates.wizard",{url:"/wizard",templateUrl:"app/tools/template/wizard/wizard.html",controller:"TemplateWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools",{url:"/tools",template:"
","abstract":!0,data:{permissions:{only:["admin","user","agent"],redirectTo:"landing",id:13}}})}]),angular.module("xCallyShuttleApp").controller("TriggerListCtrl",["$scope","$http","$translate","Modal","xAlert","Trigger","gridOptions",function(a,b,c,d,e,f,g){a.onText="On",a.offText="Off",a.isActive=!0,a.size="mini",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initView=function(){var b={exporterCsvFilename:"Triggers.csv",columnDefs:[{name:"name"},{name:"description"},{name:"channel"},{name:"status",cellTemplate:'
',width:100,enableFiltering:!1},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/triggers/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=g.gridOptions(f,b,a)},a.updateItem=function(a){return f.update({id:a.id},a).$promise.then(function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.triggers.list",{url:"/list",templateUrl:"app/tools/trigger/list/list.html",controller:"TriggerListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Trigger",["$resource",function(a){return a("/api/triggers/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.triggers",{url:"/triggers",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:50}}})}]),angular.module("xCallyShuttleApp").controller("TriggerViewCtrl",["$scope","$stateParams","$http","$translate","xAlert","triggers","Trigger","$location",function(a,b,c,d,e,f,g,h){a.$triggers=f,a.recordSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.forms={general:{}},a.addCondition=function(b){a.trigger[b].push({field:"",operator:"",value:""})},a.removeCondition=function(b,c){a.trigger[b].splice(c,1)},a.addAction=function(){a.trigger.Actions.push({action:"",data1:"",data2:"",data3:"",data4:"",data5:""})},a.resetActionData=function(a){a.data1="",a.data2="",a.data3="",a.data4="",a.data5=""},a.removeAction=function(b){a.trigger.Actions.splice(b,1)},a.initView=function(){return g.get({id:b.id}).$promise.then(function(b){a.trigger=b})["catch"](function(a){e.error(a),h.path("/tools/triggers/list")})},a.updateTrigger=function(){return g.update({id:b.id},a.trigger).$promise.then(function(){e.show(d.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),e.error(a)})},a.exitValidation=function(b){return!(!b||!a.trigger.All.length&&!a.trigger.Any.length||!a.trigger.Actions.length)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.triggers.view",{url:"/view/:id",templateUrl:"app/tools/trigger/view/view.html",controller:"TriggerViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}}).state("main.tools.triggers.view.settings",{url:"/settings",templateUrl:"app/tools/trigger/view/view.settings.html"}).state("main.tools.triggers.view.routes",{url:"/routes",templateUrl:"app/tools/trigger/view/view.routes.html"}).state("main.tools.triggers.view.application",{url:"/application",templateUrl:"app/tools/trigger/view/view.application.html"})}]),angular.module("xCallyShuttleApp").controller("TriggerWizardCtrl",["$scope","$http","$location","xAlert","triggers","WizardHandler","Trigger",function(a,b,c,d,e,f,g){a.$triggers=e,a.statusSwitch={onText:"On",offText:"Off",isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.tempData={voice:{},mail:{},chat:{},fax:{}},a.item={All:[],Any:[],Actions:[]},a.forms={general:void 0,settings:void 0},a.addCondition=function(b){a.item[b].push({field:"",operator:"",value:""})},a.removeCondition=function(b,c){a.item[b].splice(c,1)},a.addAction=function(){a.item.Actions.push({action:"",data1:"",data2:"",data3:"",data4:"",data5:""})},a.resetActionData=function(a){a.data1="",a.data2="",a.data3="",a.data4="",a.data5=""},a.removeAction=function(b){a.item.Actions.splice(b,1)},a.$watch("item.channel",function(b,c){c&&(a.tempData[c].All=_.clone(a.item.All,!0),a.tempData[c].Any=_.clone(a.item.Any,!0),a.tempData[c].Actions=_.clone(a.item.Actions,!0)),a.item.All=a.tempData[b].All?a.tempData[b].All:[],a.item.Any=a.tempData[b].Any?a.tempData[b].Any:[],a.item.Actions=a.tempData[b].Actions?a.tempData[b].Actions:[]},!0),a.item.channel="voice",a.createItem=function(){return g.save(a.item).$promise.then(function(){c.path("/tools/triggers/list")})["catch"](function(a){console.error(a),d.error(a)})},a.next=function(){f.wizard().next()},a.previous=function(){f.wizard().previous()},a.exitValidation=function(a){return a},a.exitSettingsValidation=function(b){return!(!b||!a.item.All.length&&!a.item.Any.length||!a.item.Actions.length)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.triggers.wizard",{url:"/wizard",templateUrl:"app/tools/trigger/wizard/wizard.html",controller:"TriggerWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("TrunkListCtrl",["$scope","Trunk","gridOptions","xAlert","$translate","socket",function(a,b,c,d,e,f){function g(){f.socket.on("trunk:update",function(b){var c=_.find(a.gridOptions.data,{name:b.name});c&&(c.status=b.status,c.peerstatus=b.peerstatus)})}a.isActive=!0,a.size="mini",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initView=function(){var d={exporterCsvFilename:"Trunks.csv",columnDefs:[{name:"name"},{name:"active",cellTemplate:'
'},{name:"host"},{name:"description"},{name:"status",cellTemplate:'
{{row.entity.status}}
'},{name:"peerstatus",cellTemplate:'
{{row.entity.peerstatus}}
'},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/trunks/view/{{row.entity.name}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.name)"}]}]};a.gridOptions=c.gridOptions(b,d,a,null,null,null,g)},a.updateItem=function(a){return b.update({id:a.name},a).$promise.then(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.error(a),d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.trunks.list",{url:"/list",templateUrl:"app/tools/trunk/list/list.html",controller:"TrunkListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Trunk",["$resource",function(a){return a("/api/trunks/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.trunks",{url:"/trunks",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:52}}})}]),angular.module("xCallyShuttleApp").controller("TrunkViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","socket","$location","Trunk","VoiceContext",function(a,b,c,d,e,f,g,h,i){a.activeSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.initView=function(){return h.get({id:e.id}).$promise.then(function(b){b.nat=b.nat?b.nat.split(","):[],b.allow=b.allow?b.allow.split(";"):[],b.insecure=b.insecure?b.insecure.split(","):[],b.transport=b.transport?b.transport.split(","):[],a.trunk=b}).then(function(){f.socket.on("trunk:update",function(b){a.trunk.name===b.name&&(a.trunk.status=b.status)})})["catch"](function(a){console.error(a),g.path("/tools/trunks/list")})},a.updateTrunk=function(){""===a.trunk.password&&delete a.trunk.password;var b=angular.copy(a.trunk);return b.nat=b.nat.join(","),b.allow=b.allow.join(";"),b.insecure=b.insecure.join(","),b.transport=b.transport.join(","),h.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){c.error(a)})},a.getContexts=function(){return i.get().$promise.then(function(b){a.voiceContexts=b.rows})["catch"](function(a){c.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.trunks.view",{url:"/view/:id",templateUrl:"app/tools/trunk/view/view.html",controller:"TrunkViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.trunks.view.settings",{url:"/settings",templateUrl:"app/tools/trunk/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("TrunkWizardCtrl",["$scope","WizardHandler","$location","xAlert","Trunk",function(a,b,c,d,e){a.initWizard=function(){a.forms={},a.item={context:"from-voip-provider"}},a.next=function(){b.wizard().next()},a.previous=function(){b.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){return a.item.fromuser=a.item.defaultuser,a.item.fromdomain=a.item.host,e.save(a.item).$promise.then(function(){c.path("/tools/trunks/list")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.trunks.wizard",{url:"/wizard",templateUrl:"app/tools/trunk/wizard/wizard.html",controller:"TrunkWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("VariableListCtrl",["$scope","$uibModal","Variable","gridOptions",function(a,b,c,d){a.initView=function(){var b={exporterCsvFilename:"variables.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:75,buttons:[{"class":"blue-hoki",href:"/tools/variables/view/{{row.entity.id}}/settings",name:"settings"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(c,b,a)},a.createItem=function(){var c=b.open({animation:!0,templateUrl:"app/tools/variable/list/list.create.modal.html",controller:"VariableListCreateCtrl"});c.result.then(function(b){console.log(b),a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("VariableListCreateCtrl",["$scope","$translate","$uibModalInstance","Variable","xAlert",function(a,b,c,d,e){a.form={},a.item={},a.save=function(){return d.save(a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.variables.list",{url:"/list",templateUrl:"app/tools/variable/list/list.html",controller:"VariableListCtrl"})}]),angular.module("xCallyShuttleApp").factory("Variable",["$resource",function(a){return a("/api/variables/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.variables",{url:"/variables",template:"
","abstract":!0,data:{permissions:{only:["admin","user"],redirectTo:"landing",id:54}}})}]),angular.module("xCallyShuttleApp").controller("VariableViewCtrl",["$scope","$translate","$stateParams","xAlert","Variable",function(a,b,c,d,e){a.getVariable=function(){return e.get({id:c.id}).$promise.then(function(b){a.variable=b})["catch"](function(a){d.error(a)})},a.updateVariable=function(){return e.update({id:c.id},a.variable).$promise.then(function(){d.show(b.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.variables.view",{url:"/view/:id",templateUrl:"app/tools/variable/view/view.html",controller:"VariableViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.tools.variables.view.settings",{url:"/settings",templateUrl:"app/tools/variable/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("YourdashboardListCloneModalCtrl",["$scope","$uibModalInstance",function(a,b){a.forms={dashboard:void 0},a.item={},a.ok=function(){b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("YourdashboardListCreateModalCtrl",["$scope","$uibModalInstance",function(a,b){a.forms={dashboard:void 0},a.item={},a.ok=function(){a.item.model=JSON.stringify({title:a.item.name}),b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("YourdashboardListCtrl",["$scope","$http","$translate","xAlert","Modal","$uibModal","$log","YourDashboard","gridOptions",function(a,b,c,d,e,f,g,h,i){a.initView=function(){var b={exporterCsvFilename:"voice_contexts.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:125,buttons:[{"class":"green",href:"/tools/yourdashboards/show/{{row.entity.id}}",name:"view"},{"class":"blue-hoki",href:"/tools/yourdashboards/view/{{row.entity.id}}/settings",name:"settings"},{"class":"{{row.entity.defaultEntry ? 'red-sunglo disabled' : 'red-sunglo'}}",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"},{"class":"purple",name:"clone",onClick:"grid.appScope.clone(row.entity.id)"}]}]};a.gridOptions=i.gridOptions(h,b,a)},a.create=function(){var b=f.open({animation:!0,templateUrl:"app/tools/yourdashboard/list/create.modal.html",controller:"YourdashboardListCreateModalCtrl"});b.result.then(function(b){return h.save(b).$promise.then(function(){d.show(c.instant("MESSAGE_WELL_DONE"),"success"),a.gridOptions.getPage()})["catch"](function(a){console.error(a),d.error(a)})},function(){g.info("Modal dismissed at: "+new Date)})},a.clone=function(b){var e=f.open({animation:!0,templateUrl:"app/tools/yourdashboard/list/clone.modal.html",controller:"YourdashboardListCloneModalCtrl"});e.result.then(function(e){return h.save({id:b,controller:"clone"},e).$promise.then(function(){d.show(c.instant("MESSAGE_WELL_DONE"),"success"),a.gridOptions.getPage()})["catch"](function(a){console.error(a),d.error(a)})},function(){g.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.yourdashboards.list",{url:"/list",templateUrl:"app/tools/yourdashboard/list/list.html",controller:"YourdashboardListCtrl",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:59}}})}]),angular.module("xCallyShuttleApp").controller("LeaveEditedDashboardModalCtrl",["$scope","$uibModalInstance",function(a,b){a.close=function(){b.close()},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("YourdashboardShowCtrl",["$scope","$rootScope","localStorageService","xAlert","$translate","Auth","$stateParams","$location","$uibModal","$log","YourDashboard",function(a,b,c,d,e,f,g,h,i,j,k){function l(a){var b,c;if(!a)return 0;for(a=a.toString(),b=c=a.length;b--;){var d=a[b].charCodeAt();d>=56320&&57343>=d&&b--,d>127&&2047>=d?c++:d>2047&&65535>=d&&(c+=2)}return c}a.Auth=f,a.editMode=!1,a.getDashboard=function(){return k.get({id:g.id}).$promise.then(function(b){!b[f.getRole()]&&h.path("/landing");var c={name:"dashboard",structure:"4-8",enableconfirmdelete:!0,maximizable:!0,collapsible:!0};b.model=JSON.parse(b.model||'{"title":"Dashboard"}'),b.editable=!(!f.isAdmin()||!b.editable),a.dashboard=_.merge(c,b)})["catch"](function(a){h.path("/tools/yourdashboards/list")})},a.$on("$locationChangeStart",function(b,c,d){if(a.editMode){b.preventDefault();var e=i.open({animation:!0,templateUrl:"app/tools/yourdashboard/show/leaveEditedDashboard.modal.html",controller:"LeaveEditedDashboardModalCtrl"});e.result.then(function(b){a.editMode=!1;var d=location.protocol+"//"+location.host;h.path(c.replace(d,""))},function(){j.info("Modal dismissed at: "+new Date)})}});var m=function(c,f,h){var i=angular.copy(a.dashboard);return i.name=a.dashboard.model.title,i.model=JSON.stringify(i.model),l(i.model)<=64e3?k.update({id:g.id},i).$promise.then(function(){d.show(e.instant("MESSAGE_DASHBOARD_SAVED")+"!","success"),a.editMode=!1})["catch"](function(b){d.error(b),i.model=JSON.parse(i.model),i.name="dashboard",a.dashboard=i}):(d.show(e.instant("MESSAGE_DASHBOARD_TOO_BIG")+"!","warning"),void b.$broadcast("adfToggleEditMode"))};a.$on("adfDashboardChanged",m),a.$on("adfIsEditMode",function(){a.editMode=!0}),a.$on("destroy",function(){console.log("main dashboard")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.yourdashboards.show",{url:"/show/:id",templateUrl:"app/tools/yourdashboard/show/show.html",controller:"YourdashboardShowCtrl",data:{permissions:{only:["admin","user"],redirectTo:"landing",id:2}}})}]),angular.module("xCallyShuttleApp").controller("YourdashboardViewCtrl",["$scope","$rootScope","xAlert","$translate","$stateParams","$location","YourDashboard",function(a,b,c,d,e,f,g){a.radioSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.getDashboard=function(){return g.get({id:e.id}).$promise.then(function(b){delete b.model,a.dashboard=b})["catch"](function(){f.path("/tools/yourdashboards/list")})},a.updateDashboard=function(){var b=angular.copy(a.dashboard);return g.update({id:e.id},b).$promise.then(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(d){c.error(d),a.dashboard=b})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.yourdashboards.view",{url:"/view/:id",templateUrl:"app/tools/yourdashboard/view/view.html",controller:"YourdashboardViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]},data:{permissions:{only:["admin","user"],redirectTo:"landing",id:59}}}).state("main.tools.yourdashboards.view.settings",{url:"/settings",templateUrl:"app/tools/yourdashboard/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").factory("YourDashboard",["$resource",function(a){return a("/api/dashboards/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.tools.yourdashboards",{url:"/yourdashboards",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ZendeskListCtrl",["$scope","ZendeskAccount","gridOptions","xAlert","$translate",function(a,b,c,d,e){a.initView=function(){var d={exporterCsvFilename:"zendesk_account.csv",columnDefs:[{name:"name",displayName:"APPLICATION_NAME"},{name:"username"},{name:"remoteUri",displayName:"APPLICATION_URI"},{name:"action",buttons:[{"class":"blue-hoki",href:"/zendesk/view/{{row.entity.id}}/account",name:"profile"},{"class":"green-jungle",name:"check",onClick:"grid.appScope.checkAccount(row.entity.id)"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=c.gridOptions(b,d,a)},a.checkAccount=function(a){return b.check({id:a}).$promise.then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.list",{url:"/list",templateUrl:"app/zendesk/list/list.html",controller:"ZendeskListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.view.configurations",{url:"/configurations",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ZendeskViewConfigurationListCtrl",["$scope","$stateParams","$translate","gridOptions","ZendeskConfiguration","$uibModal",function(a,b,c,d,e,f){a.initView=function(){var c={exporterCsvFilename:"zendesk_configurations.csv",columnDefs:[{name:"name"},{name:"description"},{name:"action",width:125,buttons:[{"class":"blue-hoki",href:"/zendesk/view/{{row.entity.AccountId}}/configurations/view/{{row.entity.id}}",name:"profile"},{"class":"red-sunglo",name:"delete",onClick:"grid.appScope.deleteItem(row.entity.name, row.entity.id)"}]}]};a.gridOptions=d.gridOptions(e,c,a,{accountId:b.id})},a.createItem=function(){var b=f.open({animation:!0,templateUrl:"app/zendesk/view/configuration/list/create.modal.html",controller:"ZendeskCreateConfigurationCtrl"});b.result.then(function(){a.gridOptions.getPage()})}}]),angular.module("xCallyShuttleApp").controller("ZendeskCreateConfigurationCtrl",["$scope","$translate","$uibModalInstance","ZendeskConfiguration","xAlert","$stateParams","channel",function(a,b,c,d,e,f,g){a.form={},a.item={},a.channels=g,a.item.channel="voice",a.item.type="Queue",a.save=function(){return d.save({accountId:f.id},a.item).$promise.then(function(a){e.show(b.instant("MESSAGE_WELL_DONE"),"success"),c.close(a)})["catch"](function(a){e.error(a)})},a.cancel=function(){c.dismiss()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.view.configurations.list",{url:"/list",templateUrl:"app/zendesk/view/configuration/list/list.html",controller:"ZendeskViewConfigurationListCtrl"})}]),angular.module("xCallyShuttleApp").controller("ZendeskViewConfigurationViewCtrl",["$scope","$stateParams","$filter","$translate","socket","ZendeskConfiguration","xAlert","variable","Variable","ZendeskAccount","Tag","ZendeskField",function(a,b,c,d,e,f,g,h,i,j,k,l){a.$on("$destroy",function(){e.unsyncUpdates("zendesk_field")}),a.config={autoHideScrollbar:!1,theme:"dark",advanced:{updateOnContentResize:!0},setHeight:300,scrollInertia:0},a.fieldType=[{type:"string",title:"String"},{type:"variable",title:"Variable"},{type:"customVariable",title:"Custom Variable"}],a.descFieldType=[{type:"string",title:"String"},{type:"keyValue",title:"Key Value"}],a.groupVariableByGroup=function(a){switch(a.group){case"voice_queue":return"Voice: Queue";case"voice_outbound":return"Voice: Outbound";default:return"Other"}},a.initView=function(){a.configurationName="",a.subjectConfig=[],a.descriptionConfig=[],a.fieldConfig=[],a.selectedTags={tags:[]},a.variables=h},a.getConfiguration=function(){return f.get({accountId:b.id,id:b.configurationId}).$promise.then(function(b){a.configurationName=b.name,a.subjectConfig=b.Subject,a.descriptionConfig=b.Description,a.fieldConfig=b.Field,a.selectedTags={tags:_.map(b.Tags,function(a){return a.id})},e.socket.on("zendesk_field:remove",function(b){_.remove(a.subjectConfig,{id:b.id}),_.remove(a.descriptionConfig,{id:b.id}),_.remove(a.fieldConfig,{id:b.id})})})["catch"](function(a){g.error(a)})},a.getCustomVariables=function(){return i.get().$promise.then(function(b){a.customVariables=b.rows})["catch"](function(a){g.error(a)})},a.getFields=function(){return j.fields({id:b.id}).$promise.then(function(b){a.accountFields=c("zendesk")(b)})["catch"](function(a){g.error(a)})},a.getTags=function(){return k.get().$promise.then(function(b){a.tags=b.rows})["catch"](function(a){g.error(a)})},a.addItem=function(c){var d={};switch(c){case"subject":case"description":d={type:"string",content:""};break;case"field":d={content:""}}return f.save({accountId:b.id,id:b.configurationId,controller:c},d).$promise.then(function(b){switch(c){case"subject":a.subjectConfig.push(b);break;case"description":a.descriptionConfig.push(b);break;case"field":a.fieldConfig.push(b)}})["catch"](function(a){g.error(a)})},a.changeType=function(b){"variable"===b.type?(b.content="",b.variableName=""):"string"===b.type?(b.VariableId=null,b.variableName=""):"customVariable"===b.type&&(b.VariableId=null,b.content=""),a.updateField(b)},a.updateField=function(a){return l.update({accountId:b.id,configurationId:b.configurationId,id:a.id},a).$promise.then(function(){})["catch"](function(a){g.error(a)})},a.removeItem=function(a){return l["delete"]({accountId:b.id,configurationId:b.configurationId,id:a.id}).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE")+"!","success")})["catch"](function(a){g.error(a)})},a.changeDescType=function(b){"keyValue"===b.type?(b.content="","string"===b.keyType?(b.VariableId=null,b.variableName=""):"variable"===b.keyType?(b.keyContent="",b.VariableId=null):"customVariable"===b.keyType&&(b.keyContent="",b.variableName="")):"string"===b.type&&(b.VariableId=null,b.variableName="",b.key="",b.keyContent=""),a.updateField(b)},a.changeFieldType=function(b){if(b.content="",b.variableName="",b.nameField="",b.VariableId=null,b.idField){var c=_.find(a.accountFields,"id",b.idField);c&&(c.system_field_options?(b.customField=!1,b.nameField=c.title.toLowerCase()):b.customField=!0)}a.updateField(b)},a.updateTags=function(){return f.update({accountId:b.id, id:b.configurationId,controller:"tags"},a.selectedTags.tags).$promise.then(function(){g.show(d.instant("MESSAGE_WELL_DONE")+".","success")})["catch"](function(a){g.error(a)})},a.getSystemFieldOptions=function(b){if(b){var c=_.find(a.accountFields,"id",b);return c?c.system_field_options?c.system_field_options:null:void 0}}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.view.configurations.view",{url:"/view/:configurationId",templateUrl:"app/zendesk/view/configuration/view/view.html",controller:"ZendeskViewConfigurationViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("ZendeskViewCtrl",["$scope","$stateParams","$translate","xAlert","Modal","ZendeskAccount",function(a,b,c,d,e,f){a.initView=function(){return f.get({id:b.id}).$promise.then(function(b){a.account=b})["catch"](function(a){d.error(a)})},a.updateItem=function(){return f.update({id:b.id},a.account).$promise.then(function(){d.show(c.instant("MESSAGE_WELL_DONE")+".","success")})["catch"](function(a){d.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.view",{url:"/view/:id",templateUrl:"app/zendesk/view/view.html",controller:"ZendeskViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.zendesk.view.account",{url:"/account",templateUrl:"app/zendesk/view/view.account.html"})}]),angular.module("xCallyShuttleApp").controller("ZendeskWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler","ZendeskAccount",function(a,b,c,d,e,f,g){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={},a.item.authType="password",a.item.serverUrl=c.protocol()+"://"+location.host},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){return g.save(a.item).$promise.then(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/zendesk/list")})["catch"](function(a){e.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.wizard",{url:"/wizard",templateUrl:"app/zendesk/wizard/wizard.html",controller:"ZendeskWizardCtrl"})}]),angular.module("xCallyShuttleApp").factory("ZendeskAccount",["$resource",function(a){return a("/api/zendesk/accounts/:id/:controller",{id:"@id"},{update:{method:"PUT"},fields:{params:{controller:"fields"},isArray:!0},check:{params:{controller:"check"}}})}]).factory("ZendeskConfiguration",["$resource",function(a){return a("/api/zendesk/accounts/:accountId/configurations/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]).factory("ZendeskField",["$resource",function(a){return a("/api/zendesk/accounts/:accountId/configurations/:configurationId/fields/:id/:controller",{id:"@id"},{update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk",{url:"/zendesk",template:"
","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("Auth",["$location","$rootScope","$http","User","$cookieStore","$q","localStorageService",function(a,b,c,d,e,f,g){var h={};return e.get("token")&&(h=d.me()),{login:function(a,i){var j=i||angular.noop,k=f.defer();return c.post("/auth/local",{name:a.name,password:a.password,remember:a.remember}).success(function(a){return e.put("role",a.role),e.put("token",a.token),e.put("userId",a.userId),g.set("loggedIn",!0),h=d.me({},function(){b.$broadcast("login")}),k.resolve(a),j()}).error(function(a){return this.logout(),k.reject(a),j(a)}.bind(this)),k.promise},recover:function(a,b){var d=b||angular.noop,e=f.defer();return c.post("/auth/local/recover",{email:a.email}).success(function(a){return e.resolve(a),d()}).error(function(a){return e.reject(a),d(a)}.bind(this)),e.promise},reset:function(a,b){var d=b||angular.noop,e=f.defer();return c.post("/auth/local/reset/"+a.token,{password:a.password}).success(function(a){return e.resolve(a),d()}).error(function(a){return e.reject(a),d(a)}.bind(this)),e.promise},loginWithToken:function(a,c,f){e.put("role",f),e.put("token",a),e.put("userId",c),h=d.me({},function(){b.$broadcast("login")})},logout:function(){e.remove("role"),e.remove("token"),e.remove("userId"),g.set("loggedIn"),h={},b.$broadcast("logout")},createUser:function(a,b){var c=b||angular.noop;return d.save(a,function(b){return e.put("token",b.token),h=d.me(),c(a)},function(a){return this.logout(),c(a)}.bind(this)).$promise},changePassword:function(a,b,c){var e=c||angular.noop;return d.changePassword({id:h.id},{oldPassword:a,newPassword:b},function(a){return e(null,a)},function(a){return e(a)}).$promise},getCurrentUser:function(){return h},isLoggedIn:function(){return h.hasOwnProperty("role")},isLoggedInAsync:function(a){h.hasOwnProperty("$promise")?h.$promise.then(function(){a(!0)})["catch"](function(){a(!1)}):a(h.hasOwnProperty("role")?!0:!1)},isAdmin:function(){return"admin"===(e.get("role")||h.role)},isUser:function(){return"user"===(e.get("role")||h.role)},isAgent:function(){return"agent"===(e.get("role")||h.role)},getRole:function(){return h.role},getToken:function(){return e.get("token")}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderAccountEmail",["$compile","$timeout","MailAccount","xAlert","Template",function(a,b,c,d,e){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/accountEmail/actionBuilder.html",compile:function(f){function g(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var h,i;return h=f.contents().remove(),function(f,j){f.randomName=g(),b(function(){return c.get().$promise.then(function(a){return _.forEach(a.rows,function(a){a.id=String(a.id)}),f.accounts=a,e.get().$promise}).then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),f.templates=a.rows})["catch"](function(a){d.error(a)})}),i||(i=a(h)),j.append(i(f,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderAccountSms",["$compile","$timeout","SmsAccount","xAlert",function(a,b,c,d){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/accountSms/actionBuilder.html",compile:function(e){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var g,h;return g=e.contents().remove(),function(e,i){e.randomName=f(),b(function(){return c.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),e.accounts=a})["catch"](function(a){d.error(a)})}),h||(h=a(g)),i.append(h(e,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderAccountTemplate",["$compile","xAlert","$http","$timeout","Template","MailAccount",function(a,b,c,d,e,f){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/accountTemplate/actionBuilder.html",compile:function(c){function g(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var h,i;return h=c.contents().remove(),function(c,j){c.randomName=g(),d(function(){return e.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),c.templates=a}).then(function(){return f.get()}).then(function(a){c.accounts=a})["catch"](function(a){b.error(a)})}),i||(i=a(h)),j.append(i(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderClose",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/close/actionBuilder.html",compile:function(b){function c(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var d,e;return d=b.contents().remove(),function(b,f){b.randomName=c(),e||(e=a(d)),f.append(e(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderEmail",["$compile","xAlert","$timeout","Template",function(a,b,c,d){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/email/actionBuilder.html",compile:function(e){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var g,h;return g=e.contents().remove(),function(e,i){e.randomName=f(),c(function(){return d.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),e.templates=a.rows})["catch"](function(a){b.error(a)})}),h||(h=a(g)),i.append(h(e,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderForward",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/forward/actionBuilder.html",compile:function(b){function c(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var d,e;return d=b.contents().remove(),function(b,f){b.randomName=c(),e||(e=a(d)),f.append(e(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderHttp",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/http/actionBuilder.html",compile:function(b){function c(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var d,e;return d=b.contents().remove(),function(b,f){b.randomName=c(),b.methods=["GET","POST"],e||(e=a(d)),f.append(e(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderIntegration",["$compile","xAlert","$http","$timeout","Integration","$translate","ZendeskAccount","DeskAccount","SalesforceAccount","FreshdeskAccount","SugarcrmAccount",function(a,b,c,d,e,f,g,h,i,j,k){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/integration/actionBuilder.html",compile:function(c){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var l,m;return l=c.contents().remove(),function(c,n){c.randomName=f(),d(function(){return e.get({active:1}).$promise.then(function(a){_.remove(a.rows,function(a){return"iframe"===a.state}),c.integrations=a.rows,c.element.data1&&o()})["catch"](function(a){b.error(a)})});var o=function(){var a;switch(c.element.data1){case"zendesk":a=g;break;case"desk":a=h;break;case"salesforce":a=i;break;case"freshdesk":a=j;break;case"sugarcrm":a=k}return a?a.get().$promise.then(function(a){c.accounts=a.rows,c.element.data2&&p()})["catch"](function(a){b.error(a)}):void 0},p=function(){c.configurations=_.find(c.accounts,{id:Number(c.element.data2)}).Configurations};c.changeIntegration=function(){c.element.data2="",o()},c.changeAccount=function(){c.element.data3="",p()},m||(m=a(l)),n.append(m(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderJscripty",["$compile","xAlert","$http","$timeout","Template","$translate","JscriptyProject",function(a,b,c,d,e,f,g){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/jscripty/actionBuilder.html",compile:function(c){var e,f;return e=c.contents().remove(),function(c,h){function i(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}c.randomName=i(),d(function(){return g.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),c.projects=a.rows})["catch"](function(a){b.error(a)})}),f||(f=a(e)),h.append(f(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderMotionBar",["$compile","xAlert","$http","$timeout","Template",function(a,b,c,d,e){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/motionbar/actionBuilder.html",compile:function(c){var f,g;return f=c.contents().remove(),function(c,h){function i(){return e.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),c.templates=a.rows})["catch"](function(a){b.error(a)})}function j(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}c.randomName=j(),c.motionActions=[{name:"Popup",value:"0"},{name:"URL",value:"1"},{name:"Windows App",value:"2"}],c.changeMode=function(){c.element.data2="",c.element.data3="",i()},d(function(){return i()}),g||(g=a(f)),h.append(g(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderStatus",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/status/actionBuilder.html",compile:function(b){var c,d;return c=b.contents().remove(),function(b,e){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}b.randomName=f(),b.states=[{name:"APPLICATION_STATUS_NEW",value:"NEW"},{name:"APPLICATION_STATUS_OPEN",value:"OPEN"},{name:"APPLICATION_STATUS_PENDING",value:"PENDING"},{name:"APPLICATION_STATUS_CLOSED",value:"CLOSED"}],d||(d=a(c)),e.append(d(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderTag",["$compile","xAlert","$http","$timeout","Tag",function(a,b,c,d,e){return{restrict:"E",scope:{myElement:"=element",form:"="},templateUrl:"components/directives/action/tag/actionBuilder.html",compile:function(c){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var g,h;return g=c.contents().remove(),function(c,i){console.log("myElement",c.myElement),c.randomName=f(),c.data={tags:c.myElement.data1?c.myElement.data1.split(";"):[]},c.$watch("data.tags",function(a){c.myElement.data1=a.join(";")}),d(function(){return e.get().$promise.then(function(a){c.tags=a.rows})["catch"](function(a){b.error(a)})}),h||(h=a(g)),i.append(h(c,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderTemplate",["$compile","xAlert","$timeout","Template",function(a,b,c,d){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/template/actionBuilder.html",compile:function(e){function f(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var g,h;return g=e.contents().remove(),function(e,i){e.randomName=f(),c(function(){return d.get().$promise.then(function(a){_.forEach(a.rows,function(a){a.id=String(a.id)}),e.templates=a.rows})["catch"](function(a){b.error(a)})}),h||(h=a(g)),i.append(h(e,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("actionBuilderUrlForward",["$compile",function(a){return{restrict:"E",scope:{element:"=",form:"="},templateUrl:"components/directives/action/urlforward/actionBuilder.html",compile:function(b){function c(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}var d,e;return d=b.contents().remove(),function(b,f){b.randomName=c(),b.types=[{name:"HTTP GET",value:"GET"},{name:"HTTP POST",value:"POST"}],e||(e=a(d)),f.append(e(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").directive("conditionBuilder",["$compile","$timeout","$translate","xAlert",function(a,b,c,d){return{restrict:"E",scope:{element:"=",serviceindex:"=",service:"=",form:"="},templateUrl:"components/directives/condition/conditionBuilder.html",compile:function(e){var f,g;return f=e.contents().remove(),function(e,h){function i(a){var b=_.find(e.service.services[e.serviceindex].conditions,{value:a});if(b)if(e.elementType=b.type,b.arr)e.values=b.arr;else if(b.resource)return b.resource.get(b.params||{}).$promise.then(function(a){e.values=_.map(a.rows,function(a){return{name:a[b.resName||b.resValue],value:a[b.resValue]}})})["catch"](function(a){d.show(c.instant(a.message),"danger")})}function j(a,b){var c=[];for(a=a||5,b=b||"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";--a;)c.push(b.charAt(Math.floor(Math.random()*b.length)));return c.join("")}e._=_,e.randomName=j(),b(function(){e.element.field&&i(e.element.field)}),e.checkCondition=function(a){e.element.value="",e.element.operator="",i(a)},g||(g=a(f)),h.append(g(e,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").factory("xNotificationLicense",["Notification","$rootScope","$location",function(a,b,c){return{show:function(d){var e=b.$new();return e["class"]="alert-warning",e.icon="fa fa-exclamation-triangle",e.more=function(){c.path("/setting/license/view")},new a({delay:d,templateUrl:"components/factories/xNotificationLicense/xNotificationLicense.html",scope:e})}}}]),angular.module("xCallyShuttleApp").filter("secToTime",[function(){return function(a){return new Date(1970,0,1).setSeconds(a)}}]),angular.module("xCallyShuttleApp").controller("FooterController",["$scope","Setting",function(a,b){a.year=moment().year(),a.$on("$includeContentLoaded",function(){Layout.initFooter()}),a.initFooter=function(){return b.get({controller:"info"}).$promise.then(function(b){a.info=b})["catch"](function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("HeaderController",["$scope","$rootScope","$location","$state","$http","$interval","$notification","Auth","xAlert","socket","xNotificationLicense","toastr","localStorageService","Agent","SmsReport","MailReport","OpenChannelReport","ChatReport","ChatRoom","xNotification","$timeout","$translate","$window","User","Pause","Action","FaxReport","List","MailAccount","ChatWebsite","FaxAccount","SmsAccount","OpenChannelAccount","ReportAgent","$uibModal","$log","ReportDial",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K){function L(a,b,c){return null===b&&(b=50),null===c&&(c="..."),a&&a.length>b?a.substring(0,b-c.length)+c:a}function M(b){var c,d="reason";switch(b){case"mail":c=p;break;case"chat":c=r;break;case"fax":c=A;break;case"sms":c=o;break;case"agent":c=H,d="lastevent";break;case"dial":c=K,d="dialstatus";break;case"openchannel":c=q;break;default:return}return c.get({limit:10,order:"updatedAt DESC"}).$promise.then(function(c){_.forEach(c.rows,function(a){if(a[d])switch(a[d].toLowerCase()){case"answer":case"connect":case"complete":a.status="taken";break;case"answered_elsewhere":a.status="taken_elsewhere";break;case"called":a.status="lost";break;case"busy":a.status="busy";break;case"rejected":a.status="rejected";break;case"cancel":case"abandoned":a.status="abandoned"}}),a.agentNotifications[b].rows=c.rows,j.socket.on("report_"+b+":save",function(c){c.status="none",a.agentNotifications[b].rows.unshift(c),"agent"!==b&&"dial"!==b&&(a.agentNotifications[b].timeout[c.id]=setTimeout(function(){clearTimeout(a.agentNotifications[b].timeout[c.id]),_.find(a.agentNotifications[b].rows,{id:c.id}).status="lost",angular.element(document.getElementById("header_"+b+"_notification_bar")).hasClass("open")||a.agentNotifications[b]["new"]++,delete a.agentNotifications[b].timeout[c.id]},1e3*c.timeslot))}),j.socket.on("report_"+b+":update",function(c){if("agent"===b){var e=_.find(a.activeCalls,{id:c.id});e&&(c.agentcomplete||c.agentringnoanswer||c.agentdump)?_.remove(a.activeCalls,{id:c.id}):!c.agentconnectAt||c.agentcomplete||c.agentringnoanswer||c.agentdump||a.activeCalls.push(c)}var f=_.find(a.agentNotifications[b].rows,{id:c.id});if(f&&("agent"!==b&&"dial"!==b&&a.agentNotifications[b].timeout[c.id]&&(clearTimeout(a.agentNotifications[b].timeout[c.id]),delete a.agentNotifications[b].timeout[c.id]),c[d])){switch(c[d].toLowerCase()){case"answer":case"connect":case"complete":c.status="taken";break;case"answered_elsewhere":c.status="taken_elsewhere",angular.element(document.getElementById("header_"+b+"_notification_bar")).hasClass("open")||a.agentNotifications.chat["new"]++;break;case"busy":c.status="busy",angular.element(document.getElementById("header_"+b+"_notification_bar")).hasClass("open")||a.agentNotifications[b]["new"]++;break;case"rejected":c.status="rejected";break;case"cancel":case"abandoned":c.status="abandoned",angular.element(document.getElementById("header_"+b+"_notification_bar")).hasClass("open")||a.agentNotifications[b]["new"]++}_.merge(f,c)}})})["catch"](function(a){i.error(a)})}function N(){return a.headerAgent=h.getCurrentUser(),a.readyTimer=1e3*moment().unix(),y.get().$promise.then(function(b){a.headerPauses=b.rows,j.syncUpdates("pause",a.headerPauses)}).then(function(){j.socket.on("agent:save",function(b){a.headerAgent.id===b.id&&(_.merge(a.headerAgent,b),b.voicePause&&b.mailPause&&b.chatPause&&b.faxPause&&b.smsPause&&b.openchannelPause||(a.readyTimer=1e3*moment().unix()))})})["finally"](function(){h.getCurrentUser().loginInPause&&!m.get("loggedIn")&&a.headerPause("pause")})["catch"](function(a){console.log("Error synchronizing agent status:",a)})}function O(){return H.get({id:"active",controller:"calls"}).$promise.then(function(b){a.activeCalls=b.rows})["catch"](function(a){i.error(a)})}a.moment=moment,$(document).on("click",".tabbed-dropdown",function(a){a.stopPropagation()}),a.license.token!==a.license.token2&&(h.isAdmin()||h.isUser())&&f(function(){"main.setting.license.view"!==d.current.name&&k.show(3e4)},3e4),a.openRoom=function(b,c){var d=_.find(a.workspaces,{id:b,type:c});if(d)d.active=!0;else{var e;switch(c){case"mailRoom":e="icon-envelope";break;case"chatRoom":e="fa fa-users";break;case"faxRoom":e="fa fa-fax";break;case"smsRoom":e="glyphicon glyphicon-comment";break;case"openchannelRoom":e="icon-globe"}a.workspaces.push({id:b,type:c,"class":e,active:!0})}},a.toggleSidebar=function(){b.settings.layout.pageSidebarClosed=!b.settings.layout.pageSidebarClosed,m.set("sidebarClosed",b.settings.layout.pageSidebarClosed)},a.chooseContact=function(b){var c=I.open({animation:!0,templateUrl:"app/main/chooseContact.modal.html",controller:"ChooseContactModalCtrl",resolve:{data:function(){return{type:"detail",phone:b,mobile:b}}}});c.result.then(function(c){c?a.openContactTab(c):a.newContact({calleridnum:b})},function(){J.info("Modal dismissed at: "+new Date)})},a.loadNotifications=function(b){if(!a.busyLoad[b].end){a.busyLoad[b].busy=!0;var c,d="reason";switch(b){case"mail":c=p;break;case"chat":c=r;break;case"fax":c=A;break;case"sms":c=o;break;case"agent":c=H,d="lastevent";break;case"dial":c=K,d="dialstatus";break;case"openchannel":c=q;break;default:return}return c.get({limit:10,offset:a.agentNotifications[b].rows.length,order:"updatedAt DESC"}).$promise.then(function(c){c.rows.length?(_.forEach(c.rows,function(a){if(a[d])switch(a[d].toLowerCase()){case"answer":case"connect":case"complete":a.status="taken";break;case"answered_elsewhere":a.status="taken_elsewhere";break;case"called":a.status="lost";break;case"busy":a.status="busy";break;case"rejected":a.status="rejected";break;case"abandoned":a.status="abandoned"}}),a.agentNotifications[b].rows=a.agentNotifications[b].rows.concat(c.rows)):a.busyLoad[b].end=!0,a.busyLoad[b].busy=!1})["catch"](function(a){i.error(a)})}},a.headerPause=function(b,c,d){return z.save({name:b,agent:a.headerAgent.id,type:c||"DEFAULT PAUSE",data4:c||"DEFAULT PAUSE",channel:d||"all"}).$promise.then(function(){i.show(v.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){i.error(a)})},h.isAgent()&&(N(),a.agentNotifications={mail:{rows:[],"new":0,timeout:{}},chat:{rows:[],"new":0,timeout:{}},fax:{rows:[],"new":0,timeout:{}},sms:{rows:[],"new":0,timeout:{}},agent:{rows:[],"new":0},dial:{rows:[],"new":0},openchannel:{rows:[],"new":0}},a.busyLoad={mail:{busy:!1,end:!1},chat:{busy:!1,end:!1},fax:{busy:!1,end:!1},sms:{busy:!1,end:!1},agent:{busy:!1,end:!1},dial:{busy:!1,end:!1},openchannel:{busy:!1,end:!1}},O(),M("agent"),M("dial"),a.license.mail&&M("mail"),a.license.chat&&M("chat"),a.license.fax&&M("fax"),a.license.messaging&&M("sms"),a.license.openchannel&&M("openchannel")),j.socket.on("user_has_chat_room:save",function(b){var c;return s.get({id:Number(b.ChatRoomId)}).$promise.then(function(b){console.log("chatRoom",b),c=b;var d=_.find(a.workspaces,{id:Number(c.id),type:"chatRoom"});d?d.name=a.getFullnames(c):a.workspaces.push({id:c.id,name:a.getFullnames(c),type:"chatRoom","class":"icon-bubble",unread:1})})["catch"](function(a){console.error(a)})}),j.socket.on("chat_message:save",function(b){var c;if(b.UserId!==h.getCurrentUser().id){var d=_.find(a.workspaces,{id:Number(b.ChatRoomId),type:"chatRoom"});if(!d)return s.get({id:Number(b.ChatRoomId)}).$promise.then(function(b){c=b,a.workspaces.push({id:c.id,name:a.getFullnames(b),type:"chatRoom","class":"icon-bubble",unread:1})})["catch"](function(a){console.error(a)})}});var P=function(){return w.Notification},Q=function(){b.settings.layout.onFocus=!0},R=function(){b.settings.layout.onFocus=!1};w.onfocus=Q,w.onblur=R,a.getFullnames=function(a){var b=_.map(a.Users,"fullname");return a.ChatVisitor&&b.unshift(a.ChatVisitor.fullname),_.without(b,h.getCurrentUser().fullname).join(", ")},a.openContact=function(b,c,d){if(d&&""!==d){var e,f;switch(b){case"mail":e=C,f={email:d};break;case"chat":e=D,f={email:d};break;case"fax":e=E,f={fax:d};break;case"sms":e=F,f={mobile:d};break;default:return}return e.get({id:c}).$promise.then(function(a){return a.ListId?B.save({listId:a.ListId,controller:"contacts"},f).$promise:null}).then(function(b){if(b){var c=_.find(a.workspaces,{contactID:b.id});c?c.active=!0:a.workspaces.push({active:!0,"class":"icon-user",contactID:b.id,name:b.email,type:"contact"})}else i.show(v.instant("MESSAGE_NO_LIST_CONFIGURED"),"info")})["catch"](function(a){console.error(a)})}},a.initHeader=function(){"agent"===h.getCurrentUser().role&&(j.socket.on("report_chat:save",function(a){P&&!b.settings.layout.onFocus&&g("CHAT CHANNEL",{icon:"assets/images/media/channels/chat64.png",body:"NEW Incoming Chat Visitor!",delay:1e3*a.timeslot});var c=""+v.instant("APPLICATION_FROM")+": "+a.visitorname+"
"+v.instant("APPLICATION_EMAIL")+": "+a.visitoremail;"queue"===a.application&&(c+="
"+v.instant("APPLICATION_QUEUE")+": "+a.queuename),t.show(v.instant("APPLICATION_NEW_CHAT_REQUEST"),c,"chat",1e3*a.timeslot,function(){return r.get({id:a.id,controller1:"accept",controller2:a.uniqueid}).$promise.then(function(){i.show("Chat properly assigned","success")})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_CHAT_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return r.get({id:a.id,controller1:"reject"}).$promise.then(function(){i.show("Chat properly rejected","success")})["catch"](function(a){i.error(a)})})}),j.socket.on("report_mail:save",function(c){var d=_.find(a.workspaces,{id:c.roomid,type:"mailRoom"});if(!d){var e=""+v.instant("APPLICATION_ACCOUNT")+": "+c.accountname+"
"+v.instant("APPLICATION_FROM")+": "+c.from+"
"+v.instant("APPLICATION_SUBJECT")+": "+(L(c.subject,30,"...")||"No subject");"queue"===c.application&&(e+="
"+v.instant("APPLICATION_QUEUE")+": "+c.queuename),t.show(v.instant("APPLICATION_NEW_MAIL_REQUEST"),e,"mail",1e3*c.timeslot,function(){return p.get({id:c.id,controller1:"accept",controller2:c.uniqueid}).$promise.then(function(){var b=_.find(a.workspaces,{id:c.roomid,type:"mailRoom"});b?b.active=!0:a.workspaces.push({id:c.roomid,name:c.subject||"No subject",type:"mailRoom","class":"icon-envelope",active:!0,unread:0})})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_MAIL_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return p.get({id:c.id,controller1:"reject"}).$promise["catch"](function(a){i.error(a)})}),P&&!b.settings.layout.onFocus?g("MAIL CHANNEL",{icon:"assets/images/media/channels/mail64.png",body:"NEW Incoming Mail Message!",delay:1e3*c.timeslot}):console.log("Notification API not supported in your browser")}}),j.socket.on("report_sms:save",function(b){var c=""+v.instant("APPLICATION_ACCOUNT")+": "+b.accountname+"
"+v.instant("APPLICATION_FROM")+": "+b.from;"queue"===b.application&&(c+="
"+v.instant("APPLICATION_QUEUE")+": "+b.queuename),t.show(v.instant("APPLICATION_NEW_SMS_REQUEST"),c,"sms",1e3*b.timeslot,function(){return o.get({id:b.id,controller1:"accept",controller2:b.uniqueid}).$promise.then(function(){var c=_.find(a.workspaces,{id:b.roomid,type:"smsRoom"});c?c.active=!0:a.workspaces.push({id:b.roomid,name:b.from,type:"smsRoom","class":"glyphicon glyphicon-comment",active:!0})})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_SMS_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return o.get({id:b.id,controller1:"reject"}).$promise.then(function(){i.show("SMS properly rejected","success")})["catch"](function(a){i.error(a)})}),P?g("SMS CHANNEL",{icon:"assets/images/media/channels/chat64.png",body:"NEW Incoming SMS Message!",delay:1e3*b.timeslot}):console.log("Notification API not supported in your browser")}),j.socket.on("report_openchannel:save",function(b){var c=""+v.instant("APPLICATION_ACCOUNT")+": "+b.accountname+"
"+v.instant("APPLICATION_FROM")+": "+b.from;"queue"===b.application&&(c+="
"+v.instant("APPLICATION_QUEUE")+": "+b.queuename),t.show(v.instant("APPLICATION_NEW_MESSAGE"),c,"openchannel",1e3*b.timeslot,function(){return q.get({id:b.id,controller1:"accept",controller2:b.uniqueid}).$promise.then(function(){var c=_.find(a.workspaces,{id:b.roomid,type:"openchannelRoom"});c?c.active=!0:a.workspaces.push({id:b.roomid,name:b.from,type:"openchannelRoom","class":"icon-globe",active:!0})})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return q.get({id:b.id,controller1:"reject"}).$promise.then(function(){i.show("Message properly rejected","success")})["catch"](function(a){i.error(a)})}),P?g("OPEN CHANNEL",{icon:"assets/images/media/channels/chat64.png",body:"NEW Incoming Message!",delay:1e3*b.timeslot}):console.log("Notification API not supported in your browser")}),j.socket.on("report_fax:save",function(c){var d=_.find(a.workspaces,{id:c.roomid,type:"faxRoom"});if(!d){var e=""+v.instant("APPLICATION_ACCOUNT")+": "+c.accountname+"
"+v.instant("APPLICATION_PHONE")+": "+c.from;"queue"===c.application&&(e+="
"+v.instant("APPLICATION_QUEUE")+": "+c.queuename),t.show(v.instant("APPLICATION_NEW_FAX_REQUEST"),e,"fax",1e3*c.timeslot,function(){return A.get({id:c.id,controller1:"accept",controller2:c.uniqueid}).$promise.then(function(){var b=_.find(a.workspaces,{id:c.roomid,type:"faxRoom"});b?b.active=!0:a.workspaces.push({id:c.roomid,name:c.from,type:"faxRoom","class":"fa fa-fax",active:!0,unread:0})})["catch"](function(a){switch(a.status){case 504:i.show(v.instant("MESSAGE_FAX_ALREADY_MANAGED"),"info");break;default:i.error(a)}})},function(){return A.get({id:c.id,controller1:"reject"}).$promise["catch"](function(a){i.err(a)})}),P&&!b.settings.layout.onFocus?g("FAX CHANNEL",{icon:"assets/images/media/channels/telephone124.png",body:"NEW Incoming Fax Message!",delay:1e3*c.timeslot}):console.log("Notification API not supported in your browser")}})); diff --git a/public/assets/plugins/jscripty/js/Actions.js b/public/assets/plugins/jscripty/js/Actions.js index 00a0b95..aeaa420 100644 --- a/public/assets/plugins/jscripty/js/Actions.js +++ b/public/assets/plugins/jscripty/js/Actions.js @@ -1 +1,634 @@ -var _0x4b12=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x64\x69\x74\x6F\x72\x55\x69","\x61\x63\x74\x69\x6F\x6E\x73","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x65\x64\x69\x74\x6F\x72","\x67\x72\x61\x70\x68","\x6E\x65\x77","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x68\x6F\x77\x44\x69\x61\x6C\x6F\x67","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E","\x6F\x70\x65\x6E","\x73\x61\x76\x65","\x73\x61\x76\x65\x46\x69\x6C\x65","\x43\x74\x72\x6C\x2B\x53","\x73\x61\x76\x65\x41\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2D\x53","\x70\x75\x62\x6C\x69\x73\x68","\x70\x75\x62\x6C\x69\x73\x68\x46\x69\x6C\x65","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x50","\x76\x61\x72\x69\x61\x62\x6C\x65","\x69\x6D\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x43\x74\x72\x6C\x2B\x45","\x65\x64\x69\x74\x46\x69\x6C\x65","\x65\x64\x69\x74","\x67\x65\x74","\x62\x69\x6E\x64","\x70\x75\x74","\x72\x65\x6E\x61\x6D\x65","\x70\x72\x69\x6E\x74","\x70\x72\x69\x6E\x74\x53\x63\x72\x65\x65\x6E","\x73\x70\x72\x69\x74\x65\x2D\x70\x72\x69\x6E\x74","\x43\x74\x72\x6C\x2B\x50","\x70\x72\x65\x76\x69\x65\x77","\x73\x68\x6F\x77","\x75\x6E\x64\x6F","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x73\x70\x72\x69\x74\x65\x2D\x75\x6E\x64\x6F","\x43\x74\x72\x6C\x2B\x5A","\x72\x65\x64\x6F","\x73\x70\x72\x69\x74\x65\x2D\x72\x65\x64\x6F","\x43\x74\x72\x6C\x2B\x59","\x63\x75\x74","\x73\x70\x72\x69\x74\x65\x2D\x63\x75\x74","\x43\x74\x72\x6C\x2B\x58","\x63\x6F\x70\x79","\x73\x70\x72\x69\x74\x65\x2D\x63\x6F\x70\x79","\x43\x74\x72\x6C\x2B\x43","\x70\x61\x73\x74\x65","\x73\x70\x72\x69\x74\x65\x2D\x70\x61\x73\x74\x65","\x43\x74\x72\x6C\x2B\x56","\x64\x65\x6C\x65\x74\x65","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x44\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x67\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x44","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x56","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x45","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x43\x74\x72\x6C\x2B\x41","\x68\x6F\x6D\x65","\x48\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x50\x61\x67\x65\x20\x55\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x50\x61\x67\x65\x20\x44\x6F\x77\x6E","\x65\x78\x70\x61\x6E\x64","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x45\x6E\x74\x65\x72","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x42\x61\x63\x6B\x73\x70\x61\x63\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x6F\x72\x64\x65\x72\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x46","\x74\x6F\x42\x61\x63\x6B","\x43\x74\x72\x6C\x2B\x42","\x67\x72\x6F\x75\x70","\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x43\x74\x72\x6C\x2B\x47","\x75\x6E\x67\x72\x6F\x75\x70","\x75\x6E\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x55","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x65\x64\x69\x74\x4C\x69\x6E\x6B","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","","\x65\x6E\x74\x65\x72\x56\x61\x6C\x75\x65","\x70\x72\x6F\x6D\x70\x74","\x73\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x6C\x65\x6E\x67\x74\x68","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x75\x70\x64\x61\x74\x65\x47\x72\x6F\x75\x70\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x43\x65\x6C\x6C\x53\x69\x7A\x65","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x77\x6F\x72\x64\x57\x72\x61\x70","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x77\x72\x61\x70","\x53\x54\x59\x4C\x45\x5F\x57\x48\x49\x54\x45\x5F\x53\x50\x41\x43\x45","\x73\x74\x79\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x30","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x54\x41\x54\x49\x4F\x4E","\x20\x28","\x20\x30\x2D\x33\x36\x30\x29","\x74\x69\x6C\x74","\x69\x73\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x63\x6C\x6F\x6E\x65","\x78","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x79","\x73\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x76\x69\x65\x77","\x53\x54\x59\x4C\x45\x5F\x44\x49\x52\x45\x43\x54\x49\x4F\x4E","\x65\x61\x73\x74","\x73\x6F\x75\x74\x68","\x77\x65\x73\x74","\x6E\x6F\x72\x74\x68","\x43\x74\x72\x6C\x2B\x52","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x54\x6F","\x7A\x6F\x6F\x6D\x49\x6E","\x41\x64\x64","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x53\x75\x62\x74\x72\x61\x63\x74","\x66\x69\x74\x57\x69\x6E\x64\x6F\x77","\x66\x69\x74","\x66\x69\x74\x50\x61\x67\x65","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x66\x75\x6E\x63\x74","\x70\x61\x67\x65\x56\x69\x65\x77","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x6D\x69\x6E","\x66\x6C\x6F\x6F\x72","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x6D\x61\x78","\x72\x6F\x75\x6E\x64","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x66\x69\x74\x50\x61\x67\x65\x57\x69\x64\x74\x68","\x63\x75\x73\x74\x6F\x6D\x5A\x6F\x6F\x6D","\x63\x75\x73\x74\x6F\x6D","\x20\x28\x25\x29","\x67\x65\x74\x53\x63\x61\x6C\x65","\x67\x72\x69\x64","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x75\x70\x64\x61\x74\x65\x47\x72\x61\x70\x68\x43\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x47","\x73\x65\x74\x54\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x65\x64\x43\x61\x6C\x6C\x62\x61\x63\x6B","\x67\x75\x69\x64\x65\x73","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x74\x6F\x6F\x6C\x74\x69\x70\x73","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x72\x65\x76\x61\x6C\x69\x64\x61\x74\x65","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x73\x63\x61\x6C\x65","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x61\x75\x74\x6F","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x76\x61\x6C\x69\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x6F\x75\x74\x6C\x69\x6E\x65","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x43\x74\x72\x6C\x2B\x51","\x63\x6F\x70\x79\x43\x6F\x6E\x6E\x65\x63\x74","\x69\x73\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x68\x65\x6C\x70","\x6C\x61\x6E\x67\x75\x61\x67\x65","\x69\x73\x4C\x61\x6E\x67\x75\x61\x67\x65\x53\x75\x70\x70\x6F\x72\x74\x65\x64","\x5F","\x2F\x68\x65\x6C\x70","\x2E\x68\x74\x6D\x6C","\x61\x62\x6F\x75\x74","\x20\x43\x61\x6C\x6C\x79\x20\x53\x71\x75\x61\x72\x65","\x46\x31","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x46\x6C\x61\x67\x73","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x73\x68\x61\x64\x6F\x77","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x64\x61\x73\x68\x65\x64","\x72\x6F\x75\x6E\x64\x65\x64","\x63\x75\x72\x76\x65\x64","\x29","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x73\x74\x61\x74\x65","\x74\x72\x69\x67\x67\x65\x72\x58","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x74\x72\x69\x67\x67\x65\x72\x59","\x61\x64\x64\x50\x6F\x69\x6E\x74\x41\x74","\x72\x65\x6D\x6F\x76\x65\x57\x61\x79\x70\x6F\x69\x6E\x74","\x68\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x64\x65\x78","\x72\x65\x6D\x6F\x76\x65\x50\x6F\x69\x6E\x74","\x69\x6D\x61\x67\x65","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x69\x6E\x73\x65\x72\x74\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x67\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45","\x75\x72\x6C","\x6F\x6E\x6C\x6F\x61\x64","\x6F\x6E\x65\x72\x72\x6F\x72","\x66\x69\x6C\x65\x4E\x6F\x74\x46\x6F\x75\x6E\x64","\x61\x6C\x65\x72\x74","\x73\x72\x63","\x63\x61\x6C\x6C","\x6C\x61\x62\x65\x6C","\x65\x6E\x61\x62\x6C\x65\x64","\x69\x63\x6F\x6E\x43\x6C\x73","\x73\x68\x6F\x72\x74\x63\x75\x74","\x65\x78\x74\x65\x6E\x64","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x74\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x65\x64\x43\x61\x6C\x6C\x62\x61\x63\x6B","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64"];_0x4b12[0];function Actions(_0x6633x2){this[_0x4b12[1]]= _0x6633x2;this[_0x4b12[2]]= new Object();this[_0x4b12[3]]()}Actions[_0x4b12[4]][_0x4b12[3]]= function(){var _0x6633x3=this[_0x4b12[1]];var _0x6633x4=_0x6633x3[_0x4b12[5]];var _0x6633x5=_0x6633x4[_0x4b12[6]];this[_0x4b12[10]](_0x4b12[7],function(){_0x6633x3[_0x4b12[9]]( new NewDialog(_0x6633x3)[_0x4b12[8]],300,180,true,true)});this[_0x4b12[10]](_0x4b12[11],function(){_0x6633x3[_0x4b12[9]]( new OpenDialog(_0x6633x3)[_0x4b12[8]],300,180,true,true)});this[_0x4b12[10]](_0x4b12[12],function(){_0x6633x3[_0x4b12[13]](false)},null,null,_0x4b12[14]);this[_0x4b12[10]](_0x4b12[15],function(){_0x6633x3[_0x4b12[13]](true)},null,null,_0x4b12[16]);this[_0x4b12[10]](_0x4b12[17],function(){_0x6633x3[_0x4b12[18]](false)},null,null,_0x4b12[19]);this[_0x4b12[10]](_0x4b12[20],function(){_0x6633x3[_0x4b12[9]]( new VariableDialog(_0x6633x3)[_0x4b12[8]],300,180,true,true)});this[_0x4b12[10]](_0x4b12[21],function(){_0x6633x3[_0x4b12[9]]( new ImportDialog(_0x6633x3)[_0x4b12[8]],300,200,true,true)});this[_0x4b12[10]](_0x4b12[22],function(){_0x6633x3[_0x4b12[9]]( new ExportDialog(_0x6633x3)[_0x4b12[8]],300,200,true,true)},null,null,_0x4b12[23]);this[_0x4b12[28]](_0x4b12[24], new Action(mxResources[_0x4b12[26]](_0x4b12[25]),mxUtils[_0x4b12[27]](this,function(){this[_0x4b12[1]][_0x4b12[9]]( new EditFileDialog(_0x6633x3)[_0x4b12[8]],620,420,true,true)})));this[_0x4b12[10]](_0x4b12[29],function(){_0x6633x3[_0x4b12[9]]( new RenameDialog(_0x6633x3)[_0x4b12[8]],300,180,true,true)});this[_0x4b12[10]](_0x4b12[30],function(){mxUtils[_0x4b12[31]](_0x6633x5)},null,_0x4b12[32],_0x4b12[33]);this[_0x4b12[10]](_0x4b12[34],function(){mxUtils[_0x4b12[35]](_0x6633x5,null,10,10)});this[_0x4b12[10]](_0x4b12[36],function(){_0x6633x4[_0x4b12[37]][_0x4b12[36]]()},null,_0x4b12[38],_0x4b12[39]);this[_0x4b12[10]](_0x4b12[40],function(){_0x6633x4[_0x4b12[37]][_0x4b12[40]]()},null,_0x4b12[41],_0x4b12[42]);this[_0x4b12[10]](_0x4b12[43],function(){mxClipboard[_0x4b12[43]](_0x6633x5)},null,_0x4b12[44],_0x4b12[45]);this[_0x4b12[10]](_0x4b12[46],function(){mxClipboard[_0x4b12[46]](_0x6633x5)},null,_0x4b12[47],_0x4b12[48]);this[_0x4b12[10]](_0x4b12[49],function(){mxClipboard[_0x4b12[49]](_0x6633x5)},false,_0x4b12[50],_0x4b12[51]);this[_0x4b12[10]](_0x4b12[52],function(){_0x6633x5[_0x4b12[53]]()},null,null,_0x4b12[54]);this[_0x4b12[10]](_0x4b12[55],function(){var _0x6633x6=_0x6633x5[_0x4b12[56]];_0x6633x5[_0x4b12[59]](_0x6633x5[_0x4b12[58]](_0x6633x5[_0x4b12[57]](),_0x6633x6,_0x6633x6,true))},null,null,_0x4b12[60]);this[_0x4b12[10]](_0x4b12[61],function(){_0x6633x5[_0x4b12[61]]()},null,null,_0x4b12[62]);this[_0x4b12[10]](_0x4b12[63],function(){_0x6633x5[_0x4b12[63]]()},null,null,_0x4b12[64]);this[_0x4b12[10]](_0x4b12[65],function(){_0x6633x5[_0x4b12[65]]()},null,null,_0x4b12[66]);this[_0x4b12[10]](_0x4b12[67],function(){_0x6633x5[_0x4b12[67]]()},null,null,_0x4b12[68]);this[_0x4b12[10]](_0x4b12[69],function(){_0x6633x5[_0x4b12[69]]()},null,null,_0x4b12[70]);this[_0x4b12[10]](_0x4b12[71],function(){_0x6633x5[_0x4b12[71]]()},null,null,_0x4b12[72]);this[_0x4b12[10]](_0x4b12[73],function(){_0x6633x5[_0x4b12[74]](false)},null,null,_0x4b12[75]);this[_0x4b12[10]](_0x4b12[76],function(){_0x6633x5[_0x4b12[74]](true)},null,null,_0x4b12[77]);this[_0x4b12[10]](_0x4b12[78],function(){_0x6633x5[_0x4b12[79]](false)},null,null,_0x4b12[80]);this[_0x4b12[10]](_0x4b12[81],function(){_0x6633x5[_0x4b12[79]](true)},null,null,_0x4b12[82]);this[_0x4b12[10]](_0x4b12[83],function(){_0x6633x5[_0x4b12[85]](_0x6633x5[_0x4b12[84]](null,0))},null,null,_0x4b12[86]);this[_0x4b12[10]](_0x4b12[87],function(){_0x6633x5[_0x4b12[59]](_0x6633x5[_0x4b12[88]]())},null,null,_0x4b12[89]);this[_0x4b12[10]](_0x4b12[90],function(){_0x6633x5[_0x4b12[91]]()});this[_0x4b12[10]](_0x4b12[92],function(){var _0x6633x7=_0x6633x5[_0x4b12[93]]();var _0x6633x8=_0x6633x5[_0x4b12[94]](_0x6633x7);if(_0x6633x8== null){_0x6633x8= _0x4b12[95]};_0x6633x8= mxUtils[_0x4b12[97]](mxResources[_0x4b12[26]](_0x4b12[96]),_0x6633x8);if(_0x6633x8!= null){_0x6633x5[_0x4b12[98]](_0x6633x7,_0x6633x8)}});this[_0x4b12[10]](_0x4b12[99],function(){var _0x6633x7=_0x6633x5[_0x4b12[93]]();var _0x6633x8=_0x6633x5[_0x4b12[94]](_0x6633x7);if(_0x6633x8!= null){window[_0x4b12[11]](_0x6633x8)}});this[_0x4b12[10]](_0x4b12[100],function(){var _0x6633x9=_0x6633x5[_0x4b12[57]]();if(_0x6633x9!= null){_0x6633x5[_0x4b12[102]]()[_0x4b12[101]]();try{for(var _0x6633xa=0;_0x6633xa< _0x6633x9[_0x4b12[103]];_0x6633xa++){var _0x6633x7=_0x6633x9[_0x6633xa];if(_0x6633x5[_0x4b12[102]]()[_0x4b12[104]](_0x6633x7)){_0x6633x5[_0x4b12[105]]([_0x6633x7],20)}else {_0x6633x5[_0x4b12[106]](_0x6633x7)}}}finally{_0x6633x5[_0x4b12[102]]()[_0x4b12[107]]()}}});this[_0x4b12[10]](_0x4b12[108],function(){var _0x6633xb=_0x6633x5[_0x4b12[110]]()[_0x4b12[109]](_0x6633x5[_0x4b12[93]]());var _0x6633xc=_0x4b12[111];if(_0x6633xb!= null&& _0x6633xb[_0x4b12[113]][mxConstants[_0x4b12[112]]]== _0x4b12[111]){_0x6633xc= null};_0x6633x5[_0x4b12[114]](mxConstants.STYLE_WHITE_SPACE,_0x6633xc)});this[_0x4b12[10]](_0x4b12[115],function(){var _0x6633xc=_0x4b12[116];var _0x6633xb=_0x6633x5[_0x4b12[110]]()[_0x4b12[109]](_0x6633x5[_0x4b12[93]]());if(_0x6633xb!= null){_0x6633xc= _0x6633xb[_0x4b12[113]][mxConstants[_0x4b12[117]]]|| _0x6633xc};_0x6633xc= mxUtils[_0x4b12[97]](mxResources[_0x4b12[26]](_0x4b12[96])+ _0x4b12[118]+ mxResources[_0x4b12[26]](_0x4b12[115])+ _0x4b12[119],_0x6633xc);if(_0x6633xc!= null){_0x6633x5[_0x4b12[114]](mxConstants.STYLE_ROTATION,_0x6633xc)}});this[_0x4b12[10]](_0x4b12[120],function(){var _0x6633x9=_0x6633x5[_0x4b12[57]]();if(_0x6633x9!= null){_0x6633x5[_0x4b12[102]]()[_0x4b12[101]]();try{for(var _0x6633xa=0;_0x6633xa< _0x6633x9[_0x4b12[103]];_0x6633xa++){var _0x6633x7=_0x6633x9[_0x6633xa];if(_0x6633x5[_0x4b12[102]]()[_0x4b12[121]](_0x6633x7)&& _0x6633x5[_0x4b12[102]]()[_0x4b12[104]](_0x6633x7)== 0){var _0x6633xd=_0x6633x5[_0x4b12[122]](_0x6633x7);if(_0x6633xd!= null){_0x6633xd= _0x6633xd[_0x4b12[123]]();_0x6633xd[_0x4b12[124]]+= _0x6633xd[_0x4b12[125]]/ 2- _0x6633xd[_0x4b12[126]]/ 2;_0x6633xd[_0x4b12[127]]+= _0x6633xd[_0x4b12[126]]/ 2- _0x6633xd[_0x4b12[125]]/ 2;var _0x6633xe=_0x6633xd[_0x4b12[125]];_0x6633xd[_0x4b12[125]]= _0x6633xd[_0x4b12[126]];_0x6633xd[_0x4b12[126]]= _0x6633xe;_0x6633x5[_0x4b12[102]]()[_0x4b12[128]](_0x6633x7,_0x6633xd);var _0x6633xb=_0x6633x5[_0x4b12[129]][_0x4b12[109]](_0x6633x7);if(_0x6633xb!= null){var _0x6633xf=_0x6633xb[_0x4b12[113]][mxConstants[_0x4b12[130]]]|| _0x4b12[131];if(_0x6633xf== _0x4b12[131]){_0x6633xf= _0x4b12[132]}else {if(_0x6633xf== _0x4b12[132]){_0x6633xf= _0x4b12[133]}else {if(_0x6633xf== _0x4b12[133]){_0x6633xf= _0x4b12[134]}else {if(_0x6633xf== _0x4b12[134]){_0x6633xf= _0x4b12[131]}}}};_0x6633x5[_0x4b12[114]](mxConstants.STYLE_DIRECTION,_0x6633xf,[_0x6633x7])}}}}}finally{_0x6633x5[_0x4b12[102]]()[_0x4b12[107]]()}}},null,null,_0x4b12[135]);this[_0x4b12[10]](_0x4b12[136],function(){_0x6633x5[_0x4b12[137]](1)});this[_0x4b12[10]](_0x4b12[138],function(){_0x6633x5[_0x4b12[138]]()},null,null,_0x4b12[139]);this[_0x4b12[10]](_0x4b12[140],function(){_0x6633x5[_0x4b12[140]]()},null,null,_0x4b12[141]);this[_0x4b12[10]](_0x4b12[142],function(){_0x6633x5[_0x4b12[143]]()});this[_0x4b12[10]](_0x4b12[144],mxUtils[_0x4b12[27]](this,function(){if(!_0x6633x5[_0x4b12[145]]){this[_0x4b12[26]](_0x4b12[147])[_0x4b12[146]]()};var _0x6633x10=_0x6633x5[_0x4b12[148]];var _0x6633x11=_0x6633x5[_0x4b12[149]];var _0x6633x12=_0x6633x5[_0x4b12[8]][_0x4b12[150]]- 20;var _0x6633x13=_0x6633x5[_0x4b12[8]][_0x4b12[151]]- 20;var _0x6633x14=Math[_0x4b12[153]](100* Math[_0x4b12[152]](_0x6633x12/ _0x6633x10[_0x4b12[125]]/ _0x6633x11,_0x6633x13/ _0x6633x10[_0x4b12[126]]/ _0x6633x11))/ 100;_0x6633x5[_0x4b12[137]](_0x6633x14);_0x6633x5[_0x4b12[8]][_0x4b12[154]]= Math[_0x4b12[157]](_0x6633x5[_0x4b12[129]][_0x4b12[155]][_0x4b12[124]]* _0x6633x14- Math[_0x4b12[156]](10,(_0x6633x5[_0x4b12[8]][_0x4b12[150]]- _0x6633x10[_0x4b12[125]]* _0x6633x11* _0x6633x14)/ 2));_0x6633x5[_0x4b12[8]][_0x4b12[158]]= Math[_0x4b12[157]](_0x6633x5[_0x4b12[129]][_0x4b12[155]][_0x4b12[127]]* _0x6633x14- Math[_0x4b12[156]](10,(_0x6633x5[_0x4b12[8]][_0x4b12[151]]- _0x6633x10[_0x4b12[126]]* _0x6633x11* _0x6633x14)/ 2))}));this[_0x4b12[10]](_0x4b12[159],mxUtils[_0x4b12[27]](this,function(){if(!_0x6633x5[_0x4b12[145]]){this[_0x4b12[26]](_0x4b12[147])[_0x4b12[146]]()};var _0x6633x10=_0x6633x5[_0x4b12[148]];var _0x6633x11=_0x6633x5[_0x4b12[149]];var _0x6633x12=_0x6633x5[_0x4b12[8]][_0x4b12[150]]- 20;var _0x6633x14=Math[_0x4b12[153]](100* _0x6633x12/ _0x6633x10[_0x4b12[125]]/ _0x6633x11)/ 100;_0x6633x5[_0x4b12[137]](_0x6633x14);_0x6633x5[_0x4b12[8]][_0x4b12[154]]= Math[_0x4b12[157]](_0x6633x5[_0x4b12[129]][_0x4b12[155]][_0x4b12[124]]* _0x6633x14- Math[_0x4b12[156]](10,(_0x6633x5[_0x4b12[8]][_0x4b12[150]]- _0x6633x10[_0x4b12[125]]* _0x6633x11* _0x6633x14)/ 2));_0x6633x5[_0x4b12[8]][_0x4b12[158]]= Math[_0x4b12[157]](_0x6633x5[_0x4b12[129]][_0x4b12[155]][_0x4b12[127]]* _0x6633x14- Math[_0x4b12[156]](10,(_0x6633x5[_0x4b12[8]][_0x4b12[151]]- _0x6633x10[_0x4b12[126]]* _0x6633x11* _0x6633x14)/ 2))}));this[_0x4b12[28]](_0x4b12[160], new Action(mxResources[_0x4b12[26]](_0x4b12[161]),function(){var _0x6633xc=mxUtils[_0x4b12[97]](mxResources[_0x4b12[26]](_0x4b12[96])+ _0x4b12[162],parseInt(_0x6633x5[_0x4b12[110]]()[_0x4b12[163]]()* 100));if(_0x6633xc!= null&& _0x6633xc[_0x4b12[103]]> 0&& !isNaN(parseInt(_0x6633xc))){_0x6633x5[_0x4b12[137]](parseInt(_0x6633xc)/ 100)}}));var _0x6633x15=null;_0x6633x15= this[_0x4b12[10]](_0x4b12[164],function(){_0x6633x5[_0x4b12[166]](!_0x6633x5[_0x4b12[165]]());_0x6633x4[_0x4b12[167]]()},null,null,_0x4b12[168]);_0x6633x15[_0x4b12[169]](true);_0x6633x15[_0x4b12[170]](function(){return _0x6633x5[_0x4b12[165]]()});_0x6633x15= this[_0x4b12[10]](_0x4b12[171],function(){_0x6633x5[_0x4b12[173]][_0x4b12[172]]= !_0x6633x5[_0x4b12[173]][_0x4b12[172]]});_0x6633x15[_0x4b12[169]](true);_0x6633x15[_0x4b12[170]](function(){return _0x6633x5[_0x4b12[173]][_0x4b12[172]]});_0x6633x15= this[_0x4b12[10]](_0x4b12[174],function(){_0x6633x5[_0x4b12[176]][_0x4b12[177]](!_0x6633x5[_0x4b12[176]][_0x4b12[175]]())});_0x6633x15[_0x4b12[169]](true);_0x6633x15[_0x4b12[170]](function(){return _0x6633x5[_0x4b12[176]][_0x4b12[175]]()});_0x6633x15= this[_0x4b12[10]](_0x4b12[178],function(){_0x6633x5[_0x4b12[179]]= !_0x6633x5[_0x4b12[179]];_0x6633x5[_0x4b12[129]][_0x4b12[180]]()});_0x6633x15[_0x4b12[169]](true);_0x6633x15[_0x4b12[170]](function(){return _0x6633x5[_0x4b12[179]]});_0x6633x15= this[_0x4b12[10]](_0x4b12[181],function(){_0x6633x5[_0x4b12[181]]= !_0x6633x5[_0x4b12[181]];_0x6633x4[_0x4b12[167]]();if(!_0x6633x5[_0x4b12[181]]){var _0x6633x16=_0x6633x5[_0x4b12[129]][_0x4b12[155]];_0x6633x5[_0x4b12[129]][_0x4b12[183]](_0x6633x16[_0x4b12[124]]- _0x6633x5[_0x4b12[8]][_0x4b12[154]]/ _0x6633x5[_0x4b12[129]][_0x4b12[182]],_0x6633x16[_0x4b12[127]]- _0x6633x5[_0x4b12[8]][_0x4b12[158]]/ _0x6633x5[_0x4b12[129]][_0x4b12[182]]);_0x6633x5[_0x4b12[8]][_0x4b12[154]]= 0;_0x6633x5[_0x4b12[8]][_0x4b12[158]]= 0;_0x6633x5[_0x4b12[184]]()}else {var _0x6633x17=_0x6633x5[_0x4b12[129]][_0x4b12[155]][_0x4b12[124]];var _0x6633x18=_0x6633x5[_0x4b12[129]][_0x4b12[155]][_0x4b12[127]];_0x6633x5[_0x4b12[129]][_0x4b12[155]][_0x4b12[124]]= 0;_0x6633x5[_0x4b12[129]][_0x4b12[155]][_0x4b12[127]]= 0;_0x6633x5[_0x4b12[184]]();_0x6633x5[_0x4b12[8]][_0x4b12[154]]-= Math[_0x4b12[157]](_0x6633x17* _0x6633x5[_0x4b12[129]][_0x4b12[182]]);_0x6633x5[_0x4b12[8]][_0x4b12[158]]-= Math[_0x4b12[157]](_0x6633x18* _0x6633x5[_0x4b12[129]][_0x4b12[182]])}},!mxClient.IS_TOUCH);_0x6633x15[_0x4b12[169]](true);_0x6633x15[_0x4b12[170]](function(){return _0x6633x5[_0x4b12[8]][_0x4b12[113]][_0x4b12[185]]== _0x4b12[186]});_0x6633x15= this[_0x4b12[10]](_0x4b12[147],mxUtils[_0x4b12[27]](this,function(){_0x6633x5[_0x4b12[145]]= !_0x6633x5[_0x4b12[145]];_0x6633x5[_0x4b12[187]]= _0x6633x5[_0x4b12[145]];_0x6633x5[_0x4b12[188]]= _0x6633x5[_0x4b12[187]];_0x6633x5[_0x4b12[129]][_0x4b12[189]]();_0x6633x5[_0x4b12[184]]();_0x6633x4[_0x4b12[167]]();_0x6633x4[_0x4b12[191]][_0x4b12[190]]();if(mxUtils[_0x4b12[192]](_0x6633x5[_0x4b12[8]])){if(_0x6633x5[_0x4b12[145]]){_0x6633x5[_0x4b12[8]][_0x4b12[154]]-= 20;_0x6633x5[_0x4b12[8]][_0x4b12[158]]-= 20}else {_0x6633x5[_0x4b12[8]][_0x4b12[154]]+= 20;_0x6633x5[_0x4b12[8]][_0x4b12[158]]+= 20}}}));_0x6633x15[_0x4b12[169]](true);_0x6633x15[_0x4b12[170]](function(){return _0x6633x5[_0x4b12[145]]});_0x6633x15= this[_0x4b12[10]](_0x4b12[193],function(){_0x6633x5[_0x4b12[195]](!_0x6633x5[_0x4b12[194]][_0x4b12[175]]())},null,null,_0x4b12[196]);_0x6633x15[_0x4b12[169]](true);_0x6633x15[_0x4b12[170]](function(){return _0x6633x5[_0x4b12[194]][_0x4b12[175]]()});_0x6633x15= this[_0x4b12[10]](_0x4b12[197],function(){_0x6633x5[_0x4b12[194]][_0x4b12[199]](!_0x6633x5[_0x4b12[194]][_0x4b12[198]]())});_0x6633x15[_0x4b12[169]](true);_0x6633x15[_0x4b12[170]](function(){return _0x6633x5[_0x4b12[194]][_0x4b12[198]]()});this[_0x4b12[10]](_0x4b12[200],function(){var _0x6633x19=_0x4b12[95];if(mxResources[_0x4b12[202]](mxClient[_0x4b12[201]])){_0x6633x19= _0x4b12[203]+ mxClient[_0x4b12[201]]};window[_0x4b12[11]](RESOURCES_PATH+ _0x4b12[204]+ _0x6633x19+ _0x4b12[205])});this[_0x4b12[28]](_0x4b12[206], new Action(mxResources[_0x4b12[26]](_0x4b12[206])+ _0x4b12[207],function(){_0x6633x3[_0x4b12[9]]( new AboutDialog(_0x6633x3)[_0x4b12[8]],320,280,true,true)},null,null,_0x4b12[208]));var _0x6633x1a=mxUtils[_0x4b12[27]](this,function(_0x6633x1b,_0x6633x1c){this[_0x4b12[10]](_0x6633x1b,function(){_0x6633x5[_0x4b12[209]](mxConstants.STYLE_FONTSTYLE,_0x6633x1c)})});_0x6633x1a(_0x4b12[210],mxConstants.FONT_BOLD);_0x6633x1a(_0x4b12[211],mxConstants.FONT_ITALIC);_0x6633x1a(_0x4b12[212],mxConstants.FONT_UNDERLINE);this[_0x4b12[10]](_0x4b12[213],function(){_0x6633x5[_0x4b12[214]](mxConstants.STYLE_SHADOW)});this[_0x4b12[10]](_0x4b12[215],function(){_0x6633x5[_0x4b12[214]](mxConstants.STYLE_DASHED)});this[_0x4b12[10]](_0x4b12[216],function(){_0x6633x5[_0x4b12[214]](mxConstants.STYLE_ROUNDED)});this[_0x4b12[10]](_0x4b12[217],function(){_0x6633x5[_0x4b12[214]](mxConstants.STYLE_CURVED)});this[_0x4b12[10]](_0x4b12[113],function(){var _0x6633x9=_0x6633x5[_0x4b12[57]]();if(_0x6633x9!= null&& _0x6633x9[_0x4b12[103]]> 0){var _0x6633x1d=_0x6633x5[_0x4b12[102]]();var _0x6633x1c=mxUtils[_0x4b12[97]](mxResources[_0x4b12[26]](_0x4b12[96])+ _0x4b12[118]+ mxResources[_0x4b12[26]](_0x4b12[113])+ _0x4b12[218],_0x6633x1d[_0x4b12[219]](_0x6633x9[0])|| _0x4b12[95]);if(_0x6633x1c!= null){_0x6633x5[_0x4b12[220]](_0x6633x1c,_0x6633x9)}}});this[_0x4b12[10]](_0x4b12[221],function(){_0x6633x5[_0x4b12[222]](_0x6633x5[_0x4b12[93]]())});this[_0x4b12[10]](_0x4b12[223],function(){var _0x6633x7=_0x6633x5[_0x4b12[93]]();if(_0x6633x7!= null&& _0x6633x5[_0x4b12[102]]()[_0x4b12[224]](_0x6633x7)){var _0x6633x1e=_0x6633x4[_0x4b12[6]][_0x4b12[226]][_0x4b12[225]](_0x6633x7);if(_0x6633x1e instanceof mxEdgeHandler){var _0x6633x16=_0x6633x5[_0x4b12[129]][_0x4b12[155]];var _0x6633x6=_0x6633x5[_0x4b12[129]][_0x4b12[182]];var _0x6633x17=_0x6633x16[_0x4b12[124]];var _0x6633x18=_0x6633x16[_0x4b12[127]];var _0x6633x1f=_0x6633x5[_0x4b12[102]]()[_0x4b12[227]](_0x6633x7);var _0x6633x20=_0x6633x5[_0x4b12[122]](_0x6633x1f);if(_0x6633x5[_0x4b12[102]]()[_0x4b12[121]](_0x6633x1f)&& _0x6633x20!= null){_0x6633x17+= _0x6633x20[_0x4b12[124]];_0x6633x18+= _0x6633x20[_0x4b12[127]]};_0x6633x1e[_0x4b12[232]](_0x6633x1e[_0x4b12[228]],_0x6633x5[_0x4b12[230]][_0x4b12[229]]/ _0x6633x6- _0x6633x17,_0x6633x5[_0x4b12[230]][_0x4b12[231]]/ _0x6633x6- _0x6633x18)}}});this[_0x4b12[10]](_0x4b12[233],function(){var _0x6633x21=_0x6633x3[_0x4b12[2]][_0x4b12[26]](_0x4b12[233]);if(_0x6633x21[_0x4b12[234]]!= null){_0x6633x21[_0x4b12[234]][_0x4b12[236]](_0x6633x21[_0x4b12[234]][_0x4b12[228]],_0x6633x21[_0x4b12[235]])}});this[_0x4b12[10]](_0x4b12[237],function(){function _0x6633x22(_0x6633xc,_0x6633x23,_0x6633x24){var _0x6633x25=null;var _0x6633x9=_0x6633x5[_0x4b12[57]]();_0x6633x5[_0x4b12[102]]()[_0x4b12[101]]();try{if(_0x6633x9[_0x4b12[103]]== 0){var _0x6633x26=_0x6633x5[_0x4b12[238]]();_0x6633x9= [_0x6633x5[_0x4b12[240]](_0x6633x5[_0x4b12[239]](),null,_0x4b12[95],_0x6633x26,_0x6633x26,_0x6633x23,_0x6633x24)];_0x6633x25= _0x6633x9};_0x6633x5[_0x4b12[114]](mxConstants.STYLE_IMAGE,_0x6633xc,_0x6633x9);_0x6633x5[_0x4b12[114]](mxConstants.STYLE_SHAPE,_0x4b12[237],_0x6633x9);if(_0x6633x5[_0x4b12[241]]()== 1){if(_0x6633x23!= null&& _0x6633x24!= null){var _0x6633x7=_0x6633x9[0];var _0x6633xd=_0x6633x5[_0x4b12[102]]()[_0x4b12[242]](_0x6633x7);if(_0x6633xd!= null){_0x6633xd= _0x6633xd[_0x4b12[123]]();_0x6633xd[_0x4b12[125]]= _0x6633x23;_0x6633xd[_0x4b12[126]]= _0x6633x24;_0x6633x5[_0x4b12[102]]()[_0x4b12[128]](_0x6633x7,_0x6633xd)}}}}finally{_0x6633x5[_0x4b12[102]]()[_0x4b12[107]]()};if(_0x6633x25!= null){_0x6633x5[_0x4b12[59]](_0x6633x25);_0x6633x5[_0x4b12[243]](_0x6633x25[0])}}var _0x6633xc=_0x4b12[95];var _0x6633xb=_0x6633x5[_0x4b12[110]]()[_0x4b12[109]](_0x6633x5[_0x4b12[93]]());if(_0x6633xb!= null){_0x6633xc= _0x6633xb[_0x4b12[113]][mxConstants[_0x4b12[244]]]|| _0x6633xc};_0x6633xc= mxUtils[_0x4b12[97]](mxResources[_0x4b12[26]](_0x4b12[96])+ _0x4b12[118]+ mxResources[_0x4b12[26]](_0x4b12[245])+ _0x4b12[218],_0x6633xc);if(_0x6633xc!= null){if(_0x6633xc[_0x4b12[103]]> 0){var _0x6633x27= new Image();_0x6633x27[_0x4b12[246]]= function(){_0x6633x22(_0x6633xc,_0x6633x27[_0x4b12[125]],_0x6633x27[_0x4b12[126]])};_0x6633x27[_0x4b12[247]]= function(){mxUtils[_0x4b12[249]](mxResources[_0x4b12[26]](_0x4b12[248]))};_0x6633x27[_0x4b12[250]]= _0x6633xc}}})};Actions[_0x4b12[4]][_0x4b12[10]]= function(_0x6633x1b,_0x6633x28,_0x6633x29,_0x6633x2a,_0x6633x2b){return this[_0x4b12[28]](_0x6633x1b, new Action(mxResources[_0x4b12[26]](_0x6633x1b),_0x6633x28,_0x6633x29,_0x6633x2a,_0x6633x2b))};Actions[_0x4b12[4]][_0x4b12[28]]= function(_0x6633x2c,_0x6633x15){this[_0x4b12[2]][_0x6633x2c]= _0x6633x15;return _0x6633x15};Actions[_0x4b12[4]][_0x4b12[26]]= function(_0x6633x2c){return this[_0x4b12[2]][_0x6633x2c]};function Action(_0x6633x2e,_0x6633x28,_0x6633x29,_0x6633x2a,_0x6633x2b){mxEventSource[_0x4b12[251]](this);this[_0x4b12[252]]= _0x6633x2e;this[_0x4b12[146]]= _0x6633x28;this[_0x4b12[253]]= (_0x6633x29!= null)?_0x6633x29:true;this[_0x4b12[254]]= _0x6633x2a;this[_0x4b12[255]]= _0x6633x2b}mxUtils[_0x4b12[256]](Action,mxEventSource);Action[_0x4b12[4]][_0x4b12[177]]= function(_0x6633xc){if(this[_0x4b12[253]]!= _0x6633xc){this[_0x4b12[253]]= _0x6633xc;this[_0x4b12[258]]( new mxEventObject(_0x4b12[257]))}};Action[_0x4b12[4]][_0x4b12[169]]= function(_0x6633xc){this[_0x4b12[259]]= _0x6633xc};Action[_0x4b12[4]][_0x4b12[170]]= function(_0x6633x28){this[_0x4b12[260]]= _0x6633x28};Action[_0x4b12[4]][_0x4b12[261]]= function(){return this[_0x4b12[260]]()} \ No newline at end of file +'use strict'; +/** + * $Id: Actions.js,v 1.7 2013-02-14 07:48:01 gaudenz Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ +/** + * Constructs the actions object for the given UI. + */ +function Actions(editorUi) { + this.editorUi = editorUi; + this.actions = new Object(); + this.init(); +}; + +/** + * Adds the default actions. + */ +Actions.prototype.init = function() { + var ui = this.editorUi; + var editor = ui.editor; + var graph = editor.graph; + + // File actions + this.addAction('new', function() { + ui.showDialog(new NewDialog(ui).container, 300, 180, true, true); + }); + this.addAction('open', function() { + ui.showDialog(new OpenDialog(ui).container, 300, 180, true, true); + }); + this.addAction('save', function() { + ui.saveFile(false); + }, null, null, 'Ctrl+S'); + this.addAction('saveAs', function() { + ui.saveFile(true); + }, null, null, 'Ctrl+Shift-S'); + this.addAction('publish', function() { + ui.publishFile(false); + }, null, null, 'Ctrl+Shift+P'); + this.addAction('variable', function() { + ui.showDialog(new VariableDialog(ui).container, 300, 180, true, true); + }); + this.addAction('import', function() { + ui.showDialog(new ImportDialog(ui).container, 300, 200, true, true); + }); + this.addAction('export', function() { + ui.showDialog(new ExportDialog(ui).container, 300, 200, true, true); + }, null, null, 'Ctrl+E'); + this.put('editFile', new Action(mxResources.get('edit'), mxUtils.bind(this, + function() { + this.editorUi.showDialog(new EditFileDialog(ui).container, 620, 420, + true, true); + }))); + this.addAction('rename', function() { + ui.showDialog(new RenameDialog(ui).container, 300, 180, true, true); + }); + this.addAction('print', function() { + mxUtils.printScreen(graph); + }, null, 'sprite-print', 'Ctrl+P'); + this.addAction('preview', function() { + mxUtils.show(graph, null, 10, 10); + }); + + // Edit actions + this.addAction('undo', function() { + editor.undoManager.undo(); + }, null, 'sprite-undo', 'Ctrl+Z'); + this.addAction('redo', function() { + editor.undoManager.redo(); + }, null, 'sprite-redo', 'Ctrl+Y'); + this.addAction('cut', function() { + mxClipboard.cut(graph); + }, null, 'sprite-cut', 'Ctrl+X'); + this.addAction('copy', function() { + mxClipboard.copy(graph); + }, null, 'sprite-copy', 'Ctrl+C'); + this.addAction('paste', function() { + mxClipboard.paste(graph); + }, false, 'sprite-paste', 'Ctrl+V'); + this.addAction('delete', function() { + graph.removeCells(); + }, null, null, 'Delete'); + this.addAction('duplicate', function() { + var s = graph.gridSize; + graph.setSelectionCells(graph.moveCells(graph.getSelectionCells(), s, s, + true)); + }, null, null, 'Ctrl+D'); + this.addAction('selectVertices', function() { + graph.selectVertices(); + }, null, null, 'Ctrl+Shift+V'); + this.addAction('selectEdges', function() { + graph.selectEdges(); + }, null, null, 'Ctrl+Shift+E'); + this.addAction('selectAll', function() { + graph.selectAll(); + }, null, null, 'Ctrl+A'); + + // Navigation actions + this.addAction('home', function() { + graph.home(); + }, null, null, 'Home'); + this.addAction('exitGroup', function() { + graph.exitGroup(); + }, null, null, 'Page Up'); + this.addAction('enterGroup', function() { + graph.enterGroup(); + }, null, null, 'Page Down'); + this.addAction('expand', function() { + graph.foldCells(false); + }, null, null, 'Enter'); + this.addAction('collapse', function() { + graph.foldCells(true); + }, null, null, 'Backspace'); + + // Arrange actions + this.addAction('toFront', function() { + graph.orderCells(false); + }, null, null, 'Ctrl+F'); + this.addAction('toBack', function() { + graph.orderCells(true); + }, null, null, 'Ctrl+B'); + this.addAction('group', function() { + graph.setSelectionCell(graph.groupCells(null, 0)); + }, null, null, 'Ctrl+G'); + this.addAction('ungroup', function() { + graph.setSelectionCells(graph.ungroupCells()); + }, null, null, 'Ctrl+U'); + this.addAction('removeFromGroup', function() { + graph.removeCellsFromParent(); + }); + this.addAction('editLink', function() { + var cell = graph.getSelectionCell(); + var link = graph.getLinkForCell(cell); + + if (link == null) { + link = ''; + } + + link = mxUtils.prompt(mxResources.get('enterValue'), link); + + if (link != null) { + graph.setLinkForCell(cell, link); + } + }); + this.addAction('openLink', function() { + var cell = graph.getSelectionCell(); + var link = graph.getLinkForCell(cell); + + if (link != null) { + window.open(link); + } + }); + this.addAction('autosize', function() { + var cells = graph.getSelectionCells(); + + if (cells != null) { + graph.getModel().beginUpdate(); + try { + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + + if (graph.getModel().getChildCount(cell)) { + graph.updateGroupBounds([cell], 20); + } else { + graph.updateCellSize(cell); + } + } + } finally { + graph.getModel().endUpdate(); + } + } + }); + this.addAction('wordWrap', function() { + var state = graph.getView().getState(graph.getSelectionCell()); + var value = 'wrap'; + + if (state != null && state.style[mxConstants.STYLE_WHITE_SPACE] == 'wrap') { + value = null; + } + + graph.setCellStyles(mxConstants.STYLE_WHITE_SPACE, value); + }); + this.addAction('rotation', function() { + var value = '0'; + var state = graph.getView().getState(graph.getSelectionCell()); + + if (state != null) { + value = state.style[mxConstants.STYLE_ROTATION] || value; + } + + value = mxUtils.prompt(mxResources.get('enterValue') + ' (' + + mxResources.get('rotation') + ' 0-360)', value); + + if (value != null) { + graph.setCellStyles(mxConstants.STYLE_ROTATION, value); + } + }); + this.addAction('tilt', function() { + var cells = graph.getSelectionCells(); + + if (cells != null) { + graph.getModel().beginUpdate(); + try { + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + + if (graph.getModel().isVertex(cell) && graph.getModel().getChildCount( + cell) == 0) { + var geo = graph.getCellGeometry(cell); + + if (geo != null) { + // Rotates the size and position in the geometry + geo = geo.clone(); + geo.x += geo.width / 2 - geo.height / 2; + geo.y += geo.height / 2 - geo.width / 2; + var tmp = geo.width; + geo.width = geo.height; + geo.height = tmp; + graph.getModel().setGeometry(cell, geo); + + // Reads the current direction and advances by 90 degrees + var state = graph.view.getState(cell); + + if (state != null) { + var dir = state.style[mxConstants.STYLE_DIRECTION] || 'east' /*default*/ ; + + if (dir == 'east') { + dir = 'south'; + } else if (dir == 'south') { + dir = 'west'; + } else if (dir == 'west') { + dir = 'north'; + } else if (dir == 'north') { + dir = 'east'; + } + + graph.setCellStyles(mxConstants.STYLE_DIRECTION, dir, [cell]); + } + } + } + } + } finally { + graph.getModel().endUpdate(); + } + } + }, null, null, 'Ctrl+R'); + + // View actions + this.addAction('actualSize', function() { + graph.zoomTo(1); + }); + this.addAction('zoomIn', function() { + graph.zoomIn(); + }, null, null, 'Add'); + this.addAction('zoomOut', function() { + graph.zoomOut(); + }, null, null, 'Subtract'); + this.addAction('fitWindow', function() { + graph.fit(); + }); + + this.addAction('fitPage', mxUtils.bind(this, function() { + if (!graph.pageVisible) { + this.get('pageView').funct(); + } + + var fmt = graph.pageFormat; + var ps = graph.pageScale; + var cw = graph.container.clientWidth - 20; + var ch = graph.container.clientHeight - 20; + + var scale = Math.floor(100 * Math.min(cw / fmt.width / ps, ch / fmt.height / + ps)) / 100; + graph.zoomTo(scale); + + graph.container.scrollLeft = Math.round(graph.view.translate.x * scale - + Math.max(10, (graph.container.clientWidth - fmt.width * ps * scale) / 2) + ); + graph.container.scrollTop = Math.round(graph.view.translate.y * scale - + Math.max(10, (graph.container.clientHeight - fmt.height * ps * scale) / + 2)); + })); + this.addAction('fitPageWidth', mxUtils.bind(this, function() { + if (!graph.pageVisible) { + this.get('pageView').funct(); + } + + var fmt = graph.pageFormat; + var ps = graph.pageScale; + var cw = graph.container.clientWidth - 20; + + var scale = Math.floor(100 * cw / fmt.width / ps) / 100; + graph.zoomTo(scale); + + graph.container.scrollLeft = Math.round(graph.view.translate.x * scale - + Math.max(10, (graph.container.clientWidth - fmt.width * ps * scale) / 2) + ); + graph.container.scrollTop = Math.round(graph.view.translate.y * scale - + Math.max(10, (graph.container.clientHeight - fmt.height * ps * scale) / + 2)); + })); + this.put('customZoom', new Action(mxResources.get('custom'), function() { + var value = mxUtils.prompt(mxResources.get('enterValue') + ' (%)', + parseInt(graph.getView().getScale() * 100)); + + if (value != null && value.length > 0 && !isNaN(parseInt(value))) { + graph.zoomTo(parseInt(value) / 100); + } + })); + + // Option actions + var action = null; + action = this.addAction('grid', function() { + graph.setGridEnabled(!graph.isGridEnabled()); + editor.updateGraphComponents(); + }, null, null, 'Ctrl+Shift+G'); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.isGridEnabled(); + }); + action = this.addAction('guides', function() { + graph.graphHandler.guidesEnabled = !graph.graphHandler.guidesEnabled; + }); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.graphHandler.guidesEnabled; + }); + action = this.addAction('tooltips', function() { + graph.tooltipHandler.setEnabled(!graph.tooltipHandler.isEnabled()); + }); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.tooltipHandler.isEnabled(); + }); + action = this.addAction('navigation', function() { + graph.foldingEnabled = !graph.foldingEnabled; + graph.view.revalidate(); + }); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.foldingEnabled; + }); + action = this.addAction('scrollbars', function() { + graph.scrollbars = !graph.scrollbars; + editor.updateGraphComponents(); + + if (!graph.scrollbars) { + var t = graph.view.translate; + graph.view.setTranslate(t.x - graph.container.scrollLeft / graph.view.scale, + t.y - graph.container.scrollTop / graph.view.scale); + graph.container.scrollLeft = 0; + graph.container.scrollTop = 0; + graph.sizeDidChange(); + } else { + var dx = graph.view.translate.x; + var dy = graph.view.translate.y; + + graph.view.translate.x = 0; + graph.view.translate.y = 0; + graph.sizeDidChange(); + graph.container.scrollLeft -= Math.round(dx * graph.view.scale); + graph.container.scrollTop -= Math.round(dy * graph.view.scale); + } + }, !mxClient.IS_TOUCH); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.container.style.overflow == 'auto'; + }); + action = this.addAction('pageView', mxUtils.bind(this, function() { + graph.pageVisible = !graph.pageVisible; + graph.pageBreaksVisible = graph.pageVisible; + graph.preferPageSize = graph.pageBreaksVisible; + graph.view.validate(); + graph.sizeDidChange(); + + editor.updateGraphComponents(); + editor.outline.update(); + + if (mxUtils.hasScrollbars(graph.container)) { + if (graph.pageVisible) { + graph.container.scrollLeft -= 20; + graph.container.scrollTop -= 20; + } else { + graph.container.scrollLeft += 20; + graph.container.scrollTop += 20; + } + } + })); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.pageVisible; + }); + action = this.addAction('connect', function() { + graph.setConnectable(!graph.connectionHandler.isEnabled()); + }, null, null, 'Ctrl+Q'); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.connectionHandler.isEnabled(); + }); + action = this.addAction('copyConnect', function() { + graph.connectionHandler.setCreateTarget(!graph.connectionHandler.isCreateTarget()); + }); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.connectionHandler.isCreateTarget(); + }); + + // Help actions + this.addAction('help', function() { + var ext = ''; + + if (mxResources.isLanguageSupported(mxClient.language)) { + ext = '_' + mxClient.language; + } + + window.open(RESOURCES_PATH + '/help' + ext + '.html'); + }); + this.put('about', new Action(mxResources.get('about') + ' Cally Square', + function() { + ui.showDialog(new AboutDialog(ui).container, 320, 280, true, true); + }, null, null, 'F1')); + + // Font style actions + var toggleFontStyle = mxUtils.bind(this, function(key, style) { + this.addAction(key, function() { + graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, style); + }); + }); + + toggleFontStyle('bold', mxConstants.FONT_BOLD); + toggleFontStyle('italic', mxConstants.FONT_ITALIC); + toggleFontStyle('underline', mxConstants.FONT_UNDERLINE); + + // Format actions + this.addAction('shadow', function() { + graph.toggleCellStyles(mxConstants.STYLE_SHADOW); + }); + this.addAction('dashed', function() { + graph.toggleCellStyles(mxConstants.STYLE_DASHED); + }); + this.addAction('rounded', function() { + graph.toggleCellStyles(mxConstants.STYLE_ROUNDED); + }); + this.addAction('curved', function() { + graph.toggleCellStyles(mxConstants.STYLE_CURVED); + }); + this.addAction('style', function() { + var cells = graph.getSelectionCells(); + + if (cells != null && cells.length > 0) { + var model = graph.getModel(); + var style = mxUtils.prompt(mxResources.get('enterValue') + ' (' + + mxResources.get('style') + ')', + model.getStyle(cells[0]) || ''); + + if (style != null) { + graph.setCellStyle(style, cells); + } + } + }); + this.addAction('setAsDefaultEdge', function() { + graph.setDefaultEdge(graph.getSelectionCell()); + }); + this.addAction('addWaypoint', function() { + var cell = graph.getSelectionCell(); + + if (cell != null && graph.getModel().isEdge(cell)) { + var handler = editor.graph.selectionCellsHandler.getHandler(cell); + + if (handler instanceof mxEdgeHandler) { + var t = graph.view.translate; + var s = graph.view.scale; + var dx = t.x; + var dy = t.y; + + var parent = graph.getModel().getParent(cell); + var pgeo = graph.getCellGeometry(parent); + + if (graph.getModel().isVertex(parent) && pgeo != null) { + dx += pgeo.x; + dy += pgeo.y; + } + + handler.addPointAt(handler.state, graph.panningHandler.triggerX / s - dx, + graph.panningHandler.triggerY / s - dy); + } + } + }); + this.addAction('removeWaypoint', function() { + // TODO: Action should run with "this" set to action + var rmWaypointAction = ui.actions.get('removeWaypoint'); + + if (rmWaypointAction.handler != null) { + // NOTE: Popupevent handled and action updated in Menus.createPopupMenu + rmWaypointAction.handler.removePoint(rmWaypointAction.handler.state, + rmWaypointAction.index); + } + }); + this.addAction('image', function() { + function updateImage(value, w, h) { + var select = null; + var cells = graph.getSelectionCells(); + + graph.getModel().beginUpdate(); + try { + // Inserts new cell if no cell is selected + if (cells.length == 0) { + var gs = graph.getGridSize(); + cells = [graph.insertVertex(graph.getDefaultParent(), null, '', gs, gs, + w, h)]; + select = cells; + } + + graph.setCellStyles(mxConstants.STYLE_IMAGE, value, cells); + graph.setCellStyles(mxConstants.STYLE_SHAPE, 'image', cells); + + if (graph.getSelectionCount() == 1) { + if (w != null && h != null) { + var cell = cells[0]; + var geo = graph.getModel().getGeometry(cell); + + if (geo != null) { + geo = geo.clone(); + geo.width = w; + geo.height = h; + graph.getModel().setGeometry(cell, geo); + } + } + } + } finally { + graph.getModel().endUpdate(); + } + + if (select != null) { + graph.setSelectionCells(select); + graph.scrollCellToVisible(select[0]); + } + }; + + var value = ''; + var state = graph.getView().getState(graph.getSelectionCell()); + + if (state != null) { + value = state.style[mxConstants.STYLE_IMAGE] || value; + } + + value = mxUtils.prompt(mxResources.get('enterValue') + ' (' + mxResources.get( + 'url') + ')', value); + + if (value != null) { + if (value.length > 0) { + var img = new Image(); + + img.onload = function() { + updateImage(value, img.width, img.height); + }; + img.onerror = function() { + mxUtils.alert(mxResources.get('fileNotFound')); + }; + + img.src = value; + } + } + }); +}; + +/** + * Registers the given action under the given name. + */ +Actions.prototype.addAction = function(key, funct, enabled, iconCls, shortcut) { + return this.put(key, new Action(mxResources.get(key), funct, enabled, iconCls, + shortcut)); +}; + +/** + * Registers the given action under the given name. + */ +Actions.prototype.put = function(name, action) { + this.actions[name] = action; + + return action; +}; + +/** + * Returns the action for the given name or null if no such action exists. + */ +Actions.prototype.get = function(name) { + return this.actions[name]; +}; + +/** + * Constructs a new action for the given parameters. + */ +function Action(label, funct, enabled, iconCls, shortcut) { + mxEventSource.call(this); + this.label = label; + this.funct = funct; + this.enabled = (enabled != null) ? enabled : true; + this.iconCls = iconCls; + this.shortcut = shortcut; +}; + +// Action inherits from mxEventSource +mxUtils.extend(Action, mxEventSource); + +/** + * Sets the enabled state of the action and fires a stateChanged event. + */ +Action.prototype.setEnabled = function(value) { + if (this.enabled != value) { + this.enabled = value; + this.fireEvent(new mxEventObject('stateChanged')); + } +}; + +/** + * Sets the enabled state of the action and fires a stateChanged event. + */ +Action.prototype.setToggleAction = function(value) { + this.toggleAction = value; +}; + +/** + * Sets the enabled state of the action and fires a stateChanged event. + */ +Action.prototype.setSelectedCallback = function(funct) { + this.selectedCallback = funct; +}; + +/** + * Sets the enabled state of the action and fires a stateChanged event. + */ +Action.prototype.isSelected = function() { + return this.selectedCallback(); +}; diff --git a/public/assets/plugins/jscripty/js/Dialogs.js b/public/assets/plugins/jscripty/js/Dialogs.js index 3ec6252..791874e 100644 --- a/public/assets/plugins/jscripty/js/Dialogs.js +++ b/public/assets/plugins/jscripty/js/Dialogs.js @@ -1 +1,1194 @@ -var _0x1ac9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x69\x6E\x70\x75\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x74\x79\x70\x65","\x63\x68\x65\x63\x6B\x62\x6F\x78","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x68\x65\x63\x6B\x65\x64","\x47\x45\x54","\x6F\x70\x65\x6E","\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x42\x65\x61\x72\x65\x72\x20","\x74\x6F\x6B\x65\x6E","\x64\x61\x74\x61","\x65\x64\x69\x74\x6F\x72","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x70\x61\x72\x73\x65","\x73\x65\x6C\x65\x63\x74","\x6F\x70\x74\x69\x6F\x6E","\x74\x65\x78\x74","\x2D\x2D\x20\x4E\x6F\x6E\x65\x20\x2D\x2D","\x76\x61\x6C\x75\x65","\x2D\x31","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x25","\x72\x65\x70\x6C\x61\x63\x65","\x66\x6F\x72\x45\x61\x63\x68","\x73\x65\x6C\x65\x63\x74\x65\x64","\x72\x6F\x77\x73","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x66\x6F\x72\x6D\x2D\x63\x6F\x6E\x74\x72\x6F\x6C\x20\x73\x65\x6C\x65\x63\x74\x32","\x30","\x66\x69\x6C\x74\x65\x72","\x73\x65\x6C\x65\x63\x74\x2D\x67\x72\x6F\x75\x70\x2D\x66\x61\x74\x68\x65\x72","\x74\x6F\x55\x70\x70\x65\x72\x43\x61\x73\x65","\x73\x65\x6C\x65\x63\x74\x2D\x67\x72\x6F\x75\x70\x2D\x73\x6F\x6E","\x2D","\x63\x61\x70\x69\x74\x61\x6C\x69\x7A\x65","","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x73\x63\x72\x6F\x6C\x6C\x57\x69\x64\x74\x68","\x62\x6F\x64\x79","\x72\x6F\x75\x6E\x64","\x6D\x61\x78","\x73\x63\x72\x6F\x6C\x6C\x48\x65\x69\x67\x68\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x44\x69\x61\x6C\x6F\x67","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x6D\x6F\x64\x61\x6C\x20\x66\x61\x64\x65\x20\x69\x6E\x20\x63\x65\x6E\x74\x65\x72","\x64\x69\x73\x70\x6C\x61\x79","\x73\x74\x79\x6C\x65","\x62\x6C\x6F\x63\x6B","\x70\x61\x64\x64\x69\x6E\x67\x52\x69\x67\x68\x74","\x31\x32\x70\x78","\x67\x65\x4D\x6F\x64\x61\x6C\x44\x69\x61\x6C\x6F\x67","\x6D\x6F\x64\x61\x6C\x2D\x64\x69\x61\x6C\x6F\x67","\x62\x67","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x6D\x6F\x64\x61\x6C\x2D\x62\x61\x63\x6B\x64\x72\x6F\x70\x20\x66\x61\x64\x65\x20\x69\x6E","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x6F\x6E\x44\x69\x61\x6C\x6F\x67\x43\x6C\x6F\x73\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x6C\x6F\x73\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x6D\x6F\x64\x61\x6C\x2D\x63\x6F\x6E\x74\x65\x6E\x74","\x6D\x6F\x64\x61\x6C\x2D\x68\x65\x61\x64\x65\x72","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79","\x6D\x6F\x64\x61\x6C\x2D\x66\x6F\x6F\x74\x65\x72","\x68\x34","\x63\x72\x65\x61\x74\x65\x48\x65\x61\x64\x65\x72","\x69\x6D\x70\x6F\x72\x74","\x67\x65\x74","\x20\x58\x4D\x4C","\x77\x72\x69\x74\x65","\x68\x69\x64\x65\x44\x69\x61\x6C\x6F\x67","\x62\x75\x74\x74\x6F\x6E","\x72\x6F\x77","\x63\x6F\x6C\x2D\x6D\x64\x2D\x31\x32","\x74\x65\x78\x74\x61\x72\x65\x61","\x77\x69\x64\x74\x68","\x31\x30\x30\x25","\x68\x65\x69\x67\x68\x74","\x33\x37\x34\x70\x78","\x66\x69\x6C\x65","\x61\x63\x63\x65\x70\x74","\x74\x65\x78\x74\x2F\x78\x6D\x6C","\x63\x68\x61\x6E\x67\x65","\x66\x69\x6C\x65\x73","\x74\x61\x72\x67\x65\x74","\x6C\x6F\x67","\x6F\x6E\x6C\x6F\x61\x64","\x72\x65\x73\x75\x6C\x74","\x72\x65\x61\x64\x41\x73\x54\x65\x78\x74","\x46\x61\x69\x6C\x65\x64\x20\x74\x6F\x20\x6C\x6F\x61\x64\x20\x66\x6F\x72\x6D\x61\x74\x20\x66\x69\x6C\x65","\x46\x61\x69\x6C\x65\x64\x20\x74\x6F\x20\x6C\x6F\x61\x64\x20\x66\x69\x6C\x65","\x61\x64\x64\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x62\x69\x6E\x64","\x62\x74\x6E\x20\x62\x6C\x75\x65","\x63\x61\x6E\x63\x65\x6C","\x62\x74\x6E\x20\x64\x65\x66\x61\x75\x6C\x74","\x61\x62\x6F\x75\x74","\x20\x43\x61\x6C\x6C\x79\x20\x53\x71\x75\x61\x72\x65","\x69\x6D\x67","\x62\x6F\x72\x64\x65\x72","\x30\x70\x78","\x31\x37\x36","\x31\x35\x31","\x73\x72\x63","\x2F\x6C\x6F\x67\x6F\x2E\x70\x6E\x67","\x62\x72","\x50\x6F\x77\x65\x72\x65\x64\x20\x62\x79\x20\x58\x65\x6E\x69\x61\x6C\x61\x62\x20","\x56\x45\x52\x53\x49\x4F\x4E","\x61","\x68\x72\x65\x66","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x63\x61\x6C\x6C\x79\x73\x71\x75\x61\x72\x65\x2E\x63\x6F\x6D\x2F","\x5F\x62\x6C\x61\x6E\x6B","\x77\x77\x77\x2E\x63\x61\x6C\x6C\x79\x73\x71\x75\x61\x72\x65\x2E\x63\x6F\x6D","\x73\x61\x76\x65\x41\x73","\x6E\x61\x6D\x65","\x5F","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x63\x6F\x6C\x2D\x6D\x64\x2D\x34","\x63\x6F\x6C\x2D\x6D\x64\x2D\x38","\x6C\x61\x62\x65\x6C","\x63\x6F\x6E\x74\x72\x6F\x6C\x2D\x6C\x61\x62\x65\x6C\x20\x70\x75\x6C\x6C\x2D\x72\x69\x67\x68\x74","\x5F\x63\x6F\x70\x79","\x69\x64","\x66\x6F\x72\x6D\x2D\x63\x6F\x6E\x74\x72\x6F\x6C","\x73\x61\x76\x65","\x6E\x65\x77","\x5F\x6E\x65\x77","\x76\x61\x72\x69\x61\x62\x6C\x65","\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x6E\x61\x6D\x65","\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73","\x6C\x65\x6E\x67\x74\x68","\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x76\x69\x65\x77\x2F","\x72\x65\x6E\x61\x6D\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x50\x55\x54","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x6E\x61\x6D\x65\x3D","\x50\x72\x6F\x6A\x65\x63\x74\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x6C\x79\x20\x72\x65\x6E\x61\x6D\x65\x64","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x6D\x65\x73\x73\x61\x67\x65","\x65\x72\x72\x6F\x72\x73","\x6F\x6E\x65\x72\x72\x6F\x72","\x73\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x61\x6C\x65\x72\x74","\x65\x64\x69\x74","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x73\x74\x6F\x70\x50\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E","\x70\x72\x65\x76\x65\x6E\x74\x44\x65\x66\x61\x75\x6C\x74","\x64\x61\x74\x61\x54\x72\x61\x6E\x73\x66\x65\x72","\x64\x72\x61\x67\x6F\x76\x65\x72","\x64\x72\x6F\x70","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x20\x66\x6F\x72\x6D","\x65\x78\x70\x6F\x72\x74","\x66\x6F\x72\x6D\x2D\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x20\x66\x6F\x72\x6D\x2D\x72\x6F\x77\x2D\x73\x65\x70\x65\x72\x61\x74\x65\x64","\x66\x6F\x72\x6D\x2D\x67\x72\x6F\x75\x70\x20\x6C\x61\x73\x74","\x63\x6F\x6C\x2D\x73\x6D\x2D\x34\x20\x63\x6F\x6E\x74\x72\x6F\x6C\x2D\x6C\x61\x62\x65\x6C","\x63\x6F\x6C\x2D\x73\x6D\x2D\x38","\x67\x65\x74\x58\x6D\x6C","\x73\x69\x6D\x75\x6C\x61\x74\x65","\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3D","\x67\x72\x61\x70\x68","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x20\x66\x6F\x72\x6D\x20\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x2D\x73\x63\x72\x6F\x6C\x6C","\x20","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x69\x6E\x70\x75\x74\x47\x72\x6F\x75\x70","\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x66\x6F\x72\x6D\x2D\x67\x72\x6F\x75\x70","\x64\x69\x73\x61\x62\x6C\x65\x64","\x6F\x6E\x63\x6C\x69\x63\x6B","\x4F\x4E","\x4F\x46\x46","\x62\x74\x6E\x20\x62\x74\x6E\x2D\x64\x61\x6E\x67\x65\x72\x20\x62\x74\x6E\x2D\x6D\x64","\x62\x74\x6E\x20\x62\x74\x6E\x2D\x73\x75\x63\x63\x65\x73\x73\x20\x62\x74\x6E\x2D\x6D\x64","\x73\x74\x61\x74\x65","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x42\x6F\x64\x79","\x71\x75\x65\x73\x74\x69\x6F\x6E","\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72","\x49\x6E\x73\x65\x72\x74\x20\x6C\x61\x62\x65\x6C\x20\x66\x6F\x72\x20\x22\x4F\x74\x68\x65\x72\x22\x20\x61\x6E\x73\x77\x65\x72\x20\x6F\x70\x74\x69\x6F\x6E","\x6F\x74\x68\x65\x72","\x2F\x61\x70\x69\x2F\x73\x6D\x73\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x61\x63\x63\x6F\x75\x6E\x74\x5F\x69\x64","\x6D\x61\x78\x6C\x65\x6E\x67\x74\x68","\x31\x36\x30","\x73\x6D\x73\x5F\x74\x65\x78\x74","\x2B","\x62\x74\x6E\x20\x67\x72\x65\x65\x6E","\x61\x64\x64","\x68\x65\x6C\x70\x5F","\x70","\x68\x65\x6C\x70\x2D\x62\x6C\x6F\x63\x6B","\x63\x68\x69\x6C\x64\x72\x65\x6E","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x6D\x6F\x64\x65\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x73\x42\x79\x54\x61\x67\x4E\x61\x6D\x65","\x72\x65\x66\x72\x65\x73\x68","\x63\x6F\x6C\x2D\x6D\x64\x2D\x35","\x63\x6F\x6C\x2D\x6D\x64\x2D\x32","\x49\x6E\x73\x65\x72\x74\x20\x6C\x61\x62\x65\x6C","\x6E\x75\x6D\x62\x65\x72","\x78","\x70\x61\x72\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x62\x74\x6E\x20\x72\x65\x64"];_0x1ac9[0];function createCheckbox(_0xf862x2){var _0xf862x3=document[_0x1ac9[2]](_0x1ac9[1]);_0xf862x3[_0x1ac9[5]](_0x1ac9[3],_0x1ac9[4]);if(_0xf862x2){_0xf862x3[_0x1ac9[5]](_0x1ac9[6],true)};return _0xf862x3}function createDropdownFromApi(_0xf862x5,_0xf862x2,_0xf862x6,_0xf862x7,_0xf862x8,_0xf862x9,_0xf862xa){var _0xf862xb= new XMLHttpRequest();_0xf862xb[_0x1ac9[8]](_0x1ac9[7],_0xf862x5,false);_0xf862xb[_0x1ac9[14]](_0x1ac9[9],_0x1ac9[10]+ _0xf862x8[_0x1ac9[13]][_0x1ac9[12]][_0x1ac9[11]]);_0xf862xb[_0x1ac9[15]](null);var _0xf862xc=[];if(_0xf862xb[_0x1ac9[16]]=== 200){_0xf862xc= JSON[_0x1ac9[18]](_0xf862xb[_0x1ac9[17]])};var _0xf862x3=document[_0x1ac9[2]](_0x1ac9[19]);var _0xf862xd=document[_0x1ac9[2]](_0x1ac9[20]);_0xf862xd[_0x1ac9[21]]= _0x1ac9[22];_0xf862xd[_0x1ac9[23]]= _0x1ac9[24];_0xf862x3[_0x1ac9[25]](_0xf862xd);_0xf862xc[_0x1ac9[30]][_0x1ac9[28]](function(_0xf862xe){_0xf862xd= document[_0x1ac9[2]](_0x1ac9[20]);_0xf862xd[_0x1ac9[21]]= _0xf862xe[_0xf862x6];if(_0xf862x9&& _0xf862xa){_0xf862x9[_0x1ac9[28]](function(_0xf862xf){_0xf862xa= _0xf862xa[_0x1ac9[27]](_0x1ac9[26]+ _0xf862xf+ _0x1ac9[26],_0xf862xe[_0xf862xf])});_0xf862xd[_0x1ac9[23]]= _0xf862xa;_0xf862xd[_0x1ac9[29]]= (_0xf862xa== _0xf862x2)}else {_0xf862xd[_0x1ac9[23]]= _0xf862xe[_0xf862x7];_0xf862xd[_0x1ac9[29]]= (_0xf862xe[_0xf862x7]== _0xf862x2)};_0xf862x3[_0x1ac9[25]](_0xf862xd)});_0xf862x3[_0x1ac9[31]]= _0x1ac9[32];return _0xf862x3}function createGroupedDropdownFromApi(_0xf862x5,_0xf862x2,_0xf862x6,_0xf862x7,_0xf862x8,_0xf862x11,_0xf862x12){var _0xf862xb= new XMLHttpRequest();_0xf862xb[_0x1ac9[8]](_0x1ac9[7],_0xf862x5,false);_0xf862xb[_0x1ac9[14]](_0x1ac9[9],_0x1ac9[10]+ _0xf862x8[_0x1ac9[13]][_0x1ac9[12]][_0x1ac9[11]]);_0xf862xb[_0x1ac9[15]](null);var _0xf862xc=[];if(_0xf862xb[_0x1ac9[16]]=== 200){_0xf862xc= JSON[_0x1ac9[18]](_0xf862xb[_0x1ac9[17]])};var _0xf862x3=document[_0x1ac9[2]](_0x1ac9[19]);var _0xf862xd=document[_0x1ac9[2]](_0x1ac9[20]);_0xf862xd[_0x1ac9[21]]= _0x1ac9[22];_0xf862xd[_0x1ac9[23]]= _0x1ac9[33];_0xf862x3[_0x1ac9[25]](_0xf862xd);var _0xf862x13=_0xf862x11?_0xf862xc[_0x1ac9[30]]:_0xf862xc;var _0xf862x14={};var _0xf862x15={};_0xf862x14[_0xf862x12]= null;var _0xf862x16=_[_0x1ac9[34]](_0xf862x13,_0xf862x14);var _0xf862x17={};_0xf862x16[_0x1ac9[28]](function(_0xf862xe){_0xf862xd= document[_0x1ac9[2]](_0x1ac9[20]);_0xf862xd[_0x1ac9[31]]= _0x1ac9[35];_0xf862xd[_0x1ac9[21]]= _0xf862xe[_0xf862x6][_0x1ac9[36]]();_0xf862xd[_0x1ac9[23]]= _0xf862xe[_0xf862x7];_0xf862xd[_0x1ac9[29]]= (_0xf862xe[_0xf862x7]== _0xf862x2);_0xf862x3[_0x1ac9[25]](_0xf862xd);_0xf862x15[_0xf862x12]= _0xf862xe[_0xf862x7];_0xf862x17= _[_0x1ac9[34]](_0xf862x13,_0xf862x15);_0xf862x17[_0x1ac9[28]](function(_0xf862xe){_0xf862xd= document[_0x1ac9[2]](_0x1ac9[20]);_0xf862xd[_0x1ac9[31]]= _0x1ac9[37];_0xf862xd[_0x1ac9[21]]= _0x1ac9[38]+ _[_0x1ac9[39]](_0xf862xe[_0xf862x6]);_0xf862xd[_0x1ac9[23]]= _0xf862xe[_0xf862x7];_0xf862xd[_0x1ac9[29]]= (_0xf862xe[_0xf862x7]== _0xf862x2);_0xf862x3[_0x1ac9[25]](_0xf862xd)})});_0xf862x3[_0x1ac9[31]]= _0x1ac9[32];return _0xf862x3}function createDropdownFromArray(_0xf862x19,_0xf862x2){var _0xf862x3=document[_0x1ac9[2]](_0x1ac9[19]);for(var _0xf862x1a in _0xf862x19){var _0xf862xd=document[_0x1ac9[2]](_0x1ac9[20]);_0xf862xd[_0x1ac9[21]]= _0xf862x19[_0xf862x1a];_0xf862xd[_0x1ac9[23]]= _0xf862x1a;if(_0xf862x2> 0|| _0xf862x2!= _0x1ac9[40]){_0xf862xd[_0x1ac9[29]]= (_0xf862x2=== _0xf862x1a)?true:false};_0xf862x3[_0x1ac9[25]](_0xf862xd)};_0xf862x3[_0x1ac9[31]]= _0x1ac9[32];return _0xf862x3}function Dialog(_0xf862x8,_0xf862x1c,_0xf862x1d,_0xf862x1e,_0xf862x1f,_0xf862x20,_0xf862x21){var _0xf862x22=0;if(mxClient[_0x1ac9[41]]&& document[_0x1ac9[42]]!= 9){_0xf862x22= 60};_0xf862x1d+= _0xf862x22;_0xf862x1e+= _0xf862x22;var _0xf862x23=Math[_0x1ac9[46]](0,Math[_0x1ac9[45]]((document[_0x1ac9[44]][_0x1ac9[43]]- _0xf862x1d)/ 2));var _0xf862x24=Math[_0x1ac9[46]](0,Math[_0x1ac9[45]]((Math[_0x1ac9[46]](document[_0x1ac9[44]][_0x1ac9[47]],document[_0x1ac9[48]][_0x1ac9[47]])- _0xf862x1e)/ 3));var _0xf862x25=_0xf862x8[_0x1ac9[50]](_0x1ac9[49]);_0xf862x25[_0x1ac9[31]]= _0x1ac9[51];_0xf862x25[_0x1ac9[53]][_0x1ac9[52]]= _0x1ac9[54];_0xf862x25[_0x1ac9[53]][_0x1ac9[55]]= _0x1ac9[56];var _0xf862x26=_0xf862x8[_0x1ac9[50]](_0x1ac9[57]);_0xf862x26[_0x1ac9[31]]= _0x1ac9[58];_0xf862x26[_0x1ac9[25]](_0xf862x1c);_0xf862x25[_0x1ac9[25]](_0xf862x26);if(this[_0x1ac9[59]]== null){this[_0x1ac9[59]]= _0xf862x8[_0x1ac9[50]](_0x1ac9[60]);this[_0x1ac9[59]][_0x1ac9[31]]= _0x1ac9[61];if(mxClient[_0x1ac9[62]]){ new mxDivResizer(this[_0x1ac9[59]])}};if(_0xf862x1f){document[_0x1ac9[44]][_0x1ac9[25]](this[_0x1ac9[59]])};document[_0x1ac9[44]][_0x1ac9[25]](_0xf862x25);this[_0x1ac9[63]]= _0xf862x21;this[_0x1ac9[64]]= _0xf862x25}Dialog[_0x1ac9[66]][_0x1ac9[65]]= function(){if(this[_0x1ac9[63]]!= null){this[_0x1ac9[63]]();this[_0x1ac9[63]]= null};this[_0x1ac9[64]][_0x1ac9[68]][_0x1ac9[67]](this[_0x1ac9[64]]);this[_0x1ac9[59]][_0x1ac9[68]][_0x1ac9[67]](this[_0x1ac9[59]])};function ImportDialog(_0xf862x8){var _0xf862x28=_0xf862x8[_0x1ac9[50]](_0x1ac9[69]);var _0xf862x29=_0xf862x8[_0x1ac9[50]](_0x1ac9[70]);var _0xf862x2a=_0xf862x8[_0x1ac9[50]](_0x1ac9[71]);var _0xf862x2b=_0xf862x8[_0x1ac9[50]](_0x1ac9[72]);var _0xf862x2c=_0xf862x8[_0x1ac9[74]](_0x1ac9[73]);mxUtils[_0x1ac9[78]](_0xf862x2c,mxResources[_0x1ac9[76]](_0x1ac9[75])+ _0x1ac9[77]);var _0xf862x2d=mxUtils[_0x1ac9[80]](_0x1ac9[40],function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x2d[_0x1ac9[31]]= _0x1ac9[65];_0xf862x29[_0x1ac9[25]](_0xf862x2d);_0xf862x29[_0x1ac9[25]](_0xf862x2c);var _0xf862x2e=_0xf862x8[_0x1ac9[50]](_0x1ac9[81]);var _0xf862x2f=_0xf862x8[_0x1ac9[50]](_0x1ac9[82]);var _0xf862x30=document[_0x1ac9[2]](_0x1ac9[83]);_0xf862x30[_0x1ac9[53]][_0x1ac9[84]]= _0x1ac9[85];_0xf862x30[_0x1ac9[53]][_0x1ac9[86]]= _0x1ac9[87];var _0xf862x3=document[_0x1ac9[2]](_0x1ac9[1]);_0xf862x3[_0x1ac9[3]]= _0x1ac9[88];_0xf862x3[_0x1ac9[5]](_0x1ac9[89],_0x1ac9[90]);_0xf862x3[_0x1ac9[100]](_0x1ac9[91],function _0xf862x31(_0xf862x32){var _0xf862x33=_0xf862x32[_0x1ac9[93]][_0x1ac9[92]][0];console[_0x1ac9[94]](_0xf862x33);if(_0xf862x33){if(_0xf862x33[_0x1ac9[3]]=== _0x1ac9[90]){var _0xf862x34= new FileReader();_0xf862x34[_0x1ac9[95]]= function(_0xf862x35){var _0xf862x36=_0xf862x35[_0x1ac9[93]][_0x1ac9[96]];mxUtils[_0x1ac9[78]](_0xf862x30,_0xf862x36)};_0xf862x34[_0x1ac9[97]](_0xf862x33)}else {alert(_0x1ac9[98])}}else {alert(_0x1ac9[99])}},false);_0xf862x2f[_0x1ac9[25]](_0xf862x3);_0xf862x2f[_0x1ac9[25]](_0xf862x30);_0xf862x2e[_0x1ac9[25]](_0xf862x2f);_0xf862x2a[_0x1ac9[25]](_0xf862x2e);var _0xf862x37=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[75]),mxUtils[_0x1ac9[103]](this,function(_0xf862x38){var _0xf862x39=mxUtils[_0x1ac9[101]](_0xf862x30[_0x1ac9[23]]);_0xf862x8[_0x1ac9[13]][_0x1ac9[102]](_0xf862x39[_0x1ac9[48]]);_0xf862x8[_0x1ac9[79]]()}));_0xf862x37[_0x1ac9[31]]= _0x1ac9[104];var _0xf862x3a=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[105]),function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x3a[_0x1ac9[31]]= _0x1ac9[106];_0xf862x2b[_0x1ac9[25]](_0xf862x37);_0xf862x2b[_0x1ac9[25]](_0xf862x3a);_0xf862x28[_0x1ac9[25]](_0xf862x29);_0xf862x28[_0x1ac9[25]](_0xf862x2a);_0xf862x28[_0x1ac9[25]](_0xf862x2b);this[_0x1ac9[64]]= _0xf862x28}function AboutDialog(_0xf862x8){var _0xf862x28=_0xf862x8[_0x1ac9[50]](_0x1ac9[69]);var _0xf862x29=_0xf862x8[_0x1ac9[50]](_0x1ac9[70]);var _0xf862x2a=_0xf862x8[_0x1ac9[50]](_0x1ac9[71]);var _0xf862x2b=_0xf862x8[_0x1ac9[50]](_0x1ac9[72]);var _0xf862x2c=_0xf862x8[_0x1ac9[74]](_0x1ac9[73]);mxUtils[_0x1ac9[78]](_0xf862x2c,mxResources[_0x1ac9[76]](_0x1ac9[107])+ _0x1ac9[108]);var _0xf862x2d=mxUtils[_0x1ac9[80]](_0x1ac9[40],function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x2d[_0x1ac9[31]]= _0x1ac9[65];_0xf862x29[_0x1ac9[25]](_0xf862x2d);_0xf862x29[_0x1ac9[25]](_0xf862x2c);var _0xf862x3c=document[_0x1ac9[2]](_0x1ac9[109]);_0xf862x3c[_0x1ac9[53]][_0x1ac9[110]]= _0x1ac9[111];_0xf862x3c[_0x1ac9[5]](_0x1ac9[84],_0x1ac9[112]);_0xf862x3c[_0x1ac9[5]](_0x1ac9[84],_0x1ac9[113]);_0xf862x3c[_0x1ac9[5]](_0x1ac9[114],IMAGE_PATH+ _0x1ac9[115]);_0xf862x2a[_0x1ac9[25]](_0xf862x3c);mxUtils[_0x1ac9[116]](_0xf862x2a);mxUtils[_0x1ac9[78]](_0xf862x2a,_0x1ac9[117]+ mxClient[_0x1ac9[118]]);mxUtils[_0x1ac9[116]](_0xf862x2a);var _0xf862x3d=document[_0x1ac9[2]](_0x1ac9[119]);_0xf862x3d[_0x1ac9[5]](_0x1ac9[120],_0x1ac9[121]);_0xf862x3d[_0x1ac9[5]](_0x1ac9[93],_0x1ac9[122]);mxUtils[_0x1ac9[78]](_0xf862x3d,_0x1ac9[123]);_0xf862x2a[_0x1ac9[25]](_0xf862x3d);mxUtils[_0x1ac9[116]](_0xf862x2a);mxUtils[_0x1ac9[116]](_0xf862x2a);var _0xf862x3a=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[65]),function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x3a[_0x1ac9[31]]= _0x1ac9[106];_0xf862x2b[_0x1ac9[25]](_0xf862x3a);_0xf862x28[_0x1ac9[25]](_0xf862x29);_0xf862x28[_0x1ac9[25]](_0xf862x2a);_0xf862x28[_0x1ac9[25]](_0xf862x2b);this[_0x1ac9[64]]= _0xf862x28}function SaveDialog(_0xf862x8){var _0xf862x28=_0xf862x8[_0x1ac9[50]](_0x1ac9[69]);var _0xf862x29=_0xf862x8[_0x1ac9[50]](_0x1ac9[70]);var _0xf862x2a=_0xf862x8[_0x1ac9[50]](_0x1ac9[71]);var _0xf862x2b=_0xf862x8[_0x1ac9[50]](_0x1ac9[72]);var _0xf862x2c=_0xf862x8[_0x1ac9[74]](_0x1ac9[73]);mxUtils[_0x1ac9[78]](_0xf862x2c,mxResources[_0x1ac9[76]](_0x1ac9[124]));var _0xf862x2d=mxUtils[_0x1ac9[80]](_0x1ac9[40],function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x2d[_0x1ac9[31]]= _0x1ac9[65];_0xf862x29[_0x1ac9[25]](_0xf862x2d);_0xf862x29[_0x1ac9[25]](_0xf862x2c);var _0xf862x3f=_0x1ac9[125];var _0xf862x40=_0x1ac9[126]+ _0xf862x3f;var _0xf862x2=_0xf862x8[_0x1ac9[13]][_0x1ac9[127]]();var _0xf862x2e=_0xf862x8[_0x1ac9[50]](_0x1ac9[81]);var _0xf862x2f=_0xf862x8[_0x1ac9[50]](_0x1ac9[128]);var _0xf862x41=_0xf862x8[_0x1ac9[50]](_0x1ac9[129]);var _0xf862x42=document[_0x1ac9[2]](_0x1ac9[130]);_0xf862x42[_0x1ac9[31]]= _0x1ac9[131];mxUtils[_0x1ac9[78]](_0xf862x42,mxResources[_0x1ac9[76]](_0xf862x3f));_0xf862x2f[_0x1ac9[25]](_0xf862x42);var _0xf862x43=document[_0x1ac9[2]](_0x1ac9[1]);_0xf862x43[_0x1ac9[5]](_0x1ac9[23],_0xf862x2+ _0x1ac9[132]);_0xf862x43[_0x1ac9[5]](_0x1ac9[133],_0xf862x40);_0xf862x43[_0x1ac9[31]]= _0x1ac9[134];_0xf862x41[_0x1ac9[25]](_0xf862x43);_0xf862x2e[_0x1ac9[25]](_0xf862x2f);_0xf862x2e[_0x1ac9[25]](_0xf862x41);_0xf862x2a[_0x1ac9[25]](_0xf862x2e);var _0xf862x37=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[135]),function(){_0xf862x8[_0x1ac9[124]](_0xf862x43[_0x1ac9[23]]);_0xf862x8[_0x1ac9[79]]()});_0xf862x37[_0x1ac9[31]]= _0x1ac9[104];var _0xf862x3a=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[105]),function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x3a[_0x1ac9[31]]= _0x1ac9[106];_0xf862x2b[_0x1ac9[25]](_0xf862x37);_0xf862x2b[_0x1ac9[25]](_0xf862x3a);_0xf862x28[_0x1ac9[25]](_0xf862x29);_0xf862x28[_0x1ac9[25]](_0xf862x2a);_0xf862x28[_0x1ac9[25]](_0xf862x2b);this[_0x1ac9[64]]= _0xf862x28}function NewDialog(_0xf862x8){var _0xf862x28=_0xf862x8[_0x1ac9[50]](_0x1ac9[69]);var _0xf862x29=_0xf862x8[_0x1ac9[50]](_0x1ac9[70]);var _0xf862x2a=_0xf862x8[_0x1ac9[50]](_0x1ac9[71]);var _0xf862x2b=_0xf862x8[_0x1ac9[50]](_0x1ac9[72]);var _0xf862x2c=_0xf862x8[_0x1ac9[74]](_0x1ac9[73]);mxUtils[_0x1ac9[78]](_0xf862x2c,mxResources[_0x1ac9[76]](_0x1ac9[136]));var _0xf862x2d=mxUtils[_0x1ac9[80]](_0x1ac9[40],function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x2d[_0x1ac9[31]]= _0x1ac9[65];_0xf862x29[_0x1ac9[25]](_0xf862x2d);_0xf862x29[_0x1ac9[25]](_0xf862x2c);var _0xf862x3f=_0x1ac9[125];var _0xf862x40=_0x1ac9[126]+ _0xf862x3f;var _0xf862x2=_0xf862x8[_0x1ac9[13]][_0x1ac9[127]]();var _0xf862x2e=_0xf862x8[_0x1ac9[50]](_0x1ac9[81]);var _0xf862x2f=_0xf862x8[_0x1ac9[50]](_0x1ac9[128]);var _0xf862x41=_0xf862x8[_0x1ac9[50]](_0x1ac9[129]);var _0xf862x42=document[_0x1ac9[2]](_0x1ac9[130]);_0xf862x42[_0x1ac9[31]]= _0x1ac9[131];mxUtils[_0x1ac9[78]](_0xf862x42,mxResources[_0x1ac9[76]](_0xf862x3f));_0xf862x2f[_0x1ac9[25]](_0xf862x42);var _0xf862x43=document[_0x1ac9[2]](_0x1ac9[1]);_0xf862x43[_0x1ac9[5]](_0x1ac9[23],_0xf862x2+ _0x1ac9[137]);_0xf862x43[_0x1ac9[5]](_0x1ac9[133],_0xf862x40);_0xf862x43[_0x1ac9[31]]= _0x1ac9[134];_0xf862x41[_0x1ac9[25]](_0xf862x43);_0xf862x2e[_0x1ac9[25]](_0xf862x2f);_0xf862x2e[_0x1ac9[25]](_0xf862x41);_0xf862x2a[_0x1ac9[25]](_0xf862x2e);var _0xf862x37=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[136]),function(){_0xf862x8[_0x1ac9[136]](_0xf862x43[_0x1ac9[23]]);_0xf862x8[_0x1ac9[79]]()});_0xf862x37[_0x1ac9[31]]= _0x1ac9[104];var _0xf862x3a=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[105]),function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x3a[_0x1ac9[31]]= _0x1ac9[106];_0xf862x2b[_0x1ac9[25]](_0xf862x37);_0xf862x2b[_0x1ac9[25]](_0xf862x3a);_0xf862x28[_0x1ac9[25]](_0xf862x29);_0xf862x28[_0x1ac9[25]](_0xf862x2a);_0xf862x28[_0x1ac9[25]](_0xf862x2b);this[_0x1ac9[64]]= _0xf862x28}function VariableDialog(_0xf862x8){var _0xf862x28=_0xf862x8[_0x1ac9[50]](_0x1ac9[69]);var _0xf862x29=_0xf862x8[_0x1ac9[50]](_0x1ac9[70]);var _0xf862x2a=_0xf862x8[_0x1ac9[50]](_0x1ac9[71]);var _0xf862x2b=_0xf862x8[_0x1ac9[50]](_0x1ac9[72]);var _0xf862x2c=_0xf862x8[_0x1ac9[74]](_0x1ac9[73]);mxUtils[_0x1ac9[78]](_0xf862x2c,mxResources[_0x1ac9[76]](_0x1ac9[138]));var _0xf862x2d=mxUtils[_0x1ac9[80]](_0x1ac9[40],function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x2d[_0x1ac9[31]]= _0x1ac9[65];_0xf862x29[_0x1ac9[25]](_0xf862x2d);_0xf862x29[_0x1ac9[25]](_0xf862x2c);var _0xf862x3f=_0x1ac9[125];var _0xf862x40=_0x1ac9[126]+ _0xf862x3f;var _0xf862x2=_0xf862x8[_0x1ac9[13]][_0x1ac9[127]]();var _0xf862x2e=_0xf862x8[_0x1ac9[50]](_0x1ac9[81]);var _0xf862x2f=_0xf862x8[_0x1ac9[50]](_0x1ac9[128]);var _0xf862x41=_0xf862x8[_0x1ac9[50]](_0x1ac9[129]);var _0xf862x42=document[_0x1ac9[2]](_0x1ac9[130]);_0xf862x42[_0x1ac9[31]]= _0x1ac9[131];mxUtils[_0x1ac9[78]](_0xf862x42,mxResources[_0x1ac9[76]](_0xf862x3f));_0xf862x2f[_0x1ac9[25]](_0xf862x42);var _0xf862x43=document[_0x1ac9[2]](_0x1ac9[1]);_0xf862x43[_0x1ac9[5]](_0x1ac9[23],_0x1ac9[139]);_0xf862x43[_0x1ac9[5]](_0x1ac9[133],_0xf862x40);_0xf862x43[_0x1ac9[31]]= _0x1ac9[134];_0xf862x41[_0x1ac9[25]](_0xf862x43);_0xf862x2e[_0x1ac9[25]](_0xf862x2f);_0xf862x2e[_0x1ac9[25]](_0xf862x41);_0xf862x2a[_0x1ac9[25]](_0xf862x2e);var _0xf862x37=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[136]),function(){_0xf862x8[_0x1ac9[138]](_0xf862x43[_0x1ac9[23]]);_0xf862x8[_0x1ac9[79]]()});_0xf862x37[_0x1ac9[31]]= _0x1ac9[104];var _0xf862x3a=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[105]),function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x3a[_0x1ac9[31]]= _0x1ac9[106];_0xf862x2b[_0x1ac9[25]](_0xf862x37);_0xf862x2b[_0x1ac9[25]](_0xf862x3a);_0xf862x28[_0x1ac9[25]](_0xf862x29);_0xf862x28[_0x1ac9[25]](_0xf862x2a);_0xf862x28[_0x1ac9[25]](_0xf862x2b);this[_0x1ac9[64]]= _0xf862x28}function OpenDialog(_0xf862x8){var _0xf862x28=_0xf862x8[_0x1ac9[50]](_0x1ac9[69]);var _0xf862x29=_0xf862x8[_0x1ac9[50]](_0x1ac9[70]);var _0xf862x2a=_0xf862x8[_0x1ac9[50]](_0x1ac9[71]);var _0xf862x2b=_0xf862x8[_0x1ac9[50]](_0x1ac9[72]);var _0xf862x2c=_0xf862x8[_0x1ac9[74]](_0x1ac9[73]);mxUtils[_0x1ac9[78]](_0xf862x2c,mxResources[_0x1ac9[76]](_0x1ac9[8]));var _0xf862x2d=mxUtils[_0x1ac9[80]](_0x1ac9[40],function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x2d[_0x1ac9[31]]= _0x1ac9[65];_0xf862x29[_0x1ac9[25]](_0xf862x2d);_0xf862x29[_0x1ac9[25]](_0xf862x2c);var _0xf862x2e=_0xf862x8[_0x1ac9[50]](_0x1ac9[81]);var _0xf862x2f=_0xf862x8[_0x1ac9[50]](_0x1ac9[128]);var _0xf862x41=_0xf862x8[_0x1ac9[50]](_0x1ac9[129]);var _0xf862x42=document[_0x1ac9[2]](_0x1ac9[130]);_0xf862x42[_0x1ac9[31]]= _0x1ac9[131];mxUtils[_0x1ac9[78]](_0xf862x42,mxResources[_0x1ac9[76]](_0x1ac9[125]));_0xf862x2f[_0x1ac9[25]](_0xf862x42);var _0xf862xb= new XMLHttpRequest();_0xf862xb[_0x1ac9[8]](_0x1ac9[7],_0x1ac9[140],false);_0xf862xb[_0x1ac9[14]](_0x1ac9[9],_0x1ac9[10]+ _0xf862x8[_0x1ac9[13]][_0x1ac9[12]][_0x1ac9[11]]);_0xf862xb[_0x1ac9[15]](null);var _0xf862xc=[];if(_0xf862xb[_0x1ac9[16]]=== 200){_0xf862xc= JSON[_0x1ac9[18]](_0xf862xb[_0x1ac9[17]])[_0x1ac9[30]]};var _0xf862x43=document[_0x1ac9[2]](_0x1ac9[19]);for(var _0xf862x47=0;_0xf862x47< _0xf862xc[_0x1ac9[141]];_0xf862x47++){var _0xf862xd=document[_0x1ac9[2]](_0x1ac9[20]);_0xf862xd[_0x1ac9[21]]= _0xf862xc[_0xf862x47][_0x1ac9[125]];_0xf862xd[_0x1ac9[23]]= _0xf862xc[_0xf862x47][_0x1ac9[133]];_0xf862x43[_0x1ac9[25]](_0xf862xd)};_0xf862x43[_0x1ac9[31]]= _0x1ac9[134];_0xf862x41[_0x1ac9[25]](_0xf862x43);_0xf862x2e[_0x1ac9[25]](_0xf862x2f);_0xf862x2e[_0x1ac9[25]](_0xf862x41);_0xf862x2a[_0x1ac9[25]](_0xf862x2e);var _0xf862x37=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[8]),function(){console[_0x1ac9[94]](_0xf862x43);console[_0x1ac9[94]](_0xf862x43[_0x1ac9[23]]);window[_0x1ac9[8]](_0x1ac9[142]+ _0xf862x43[_0x1ac9[23]],_0x1ac9[122]);_0xf862x8[_0x1ac9[79]]()});_0xf862x37[_0x1ac9[31]]= _0x1ac9[104];var _0xf862x3a=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[105]),function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x3a[_0x1ac9[31]]= _0x1ac9[106];_0xf862x2b[_0x1ac9[25]](_0xf862x37);_0xf862x2b[_0x1ac9[25]](_0xf862x3a);_0xf862x28[_0x1ac9[25]](_0xf862x29);_0xf862x28[_0x1ac9[25]](_0xf862x2a);_0xf862x28[_0x1ac9[25]](_0xf862x2b);this[_0x1ac9[64]]= _0xf862x28}function RenameDialog(_0xf862x8){var _0xf862x28=_0xf862x8[_0x1ac9[50]](_0x1ac9[69]);var _0xf862x29=_0xf862x8[_0x1ac9[50]](_0x1ac9[70]);var _0xf862x2a=_0xf862x8[_0x1ac9[50]](_0x1ac9[71]);var _0xf862x2b=_0xf862x8[_0x1ac9[50]](_0x1ac9[72]);var _0xf862x2c=_0xf862x8[_0x1ac9[74]](_0x1ac9[73]);mxUtils[_0x1ac9[78]](_0xf862x2c,mxResources[_0x1ac9[76]](_0x1ac9[143]));var _0xf862x2d=mxUtils[_0x1ac9[80]](_0x1ac9[40],function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x2d[_0x1ac9[31]]= _0x1ac9[65];_0xf862x29[_0x1ac9[25]](_0xf862x2d);_0xf862x29[_0x1ac9[25]](_0xf862x2c);var _0xf862x2e=_0xf862x8[_0x1ac9[50]](_0x1ac9[81]);var _0xf862x2f=_0xf862x8[_0x1ac9[50]](_0x1ac9[128]);var _0xf862x41=_0xf862x8[_0x1ac9[50]](_0x1ac9[129]);var _0xf862x42=document[_0x1ac9[2]](_0x1ac9[130]);_0xf862x42[_0x1ac9[31]]= _0x1ac9[131];mxUtils[_0x1ac9[78]](_0xf862x42,mxResources[_0x1ac9[76]](_0x1ac9[125]));_0xf862x2f[_0x1ac9[25]](_0xf862x42);var _0xf862x3f=_0xf862x8[_0x1ac9[13]][_0x1ac9[144]];var _0xf862x3=document[_0x1ac9[2]](_0x1ac9[1]);_0xf862x3[_0x1ac9[5]](_0x1ac9[23],_0xf862x3f);_0xf862x3[_0x1ac9[31]]= _0x1ac9[134];_0xf862x41[_0x1ac9[25]](_0xf862x3);_0xf862x2e[_0x1ac9[25]](_0xf862x2f);_0xf862x2e[_0x1ac9[25]](_0xf862x41);_0xf862x2a[_0x1ac9[25]](_0xf862x2e);var _0xf862x37=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[135]),function(){var _0xf862xb= new XMLHttpRequest();_0xf862xb[_0x1ac9[8]](_0x1ac9[145],SAVE_URL+ _0xf862x8[_0x1ac9[13]][_0x1ac9[12]][_0x1ac9[133]],true);_0xf862xb[_0x1ac9[14]](_0x1ac9[146],_0x1ac9[147]);_0xf862xb[_0x1ac9[14]](_0x1ac9[9],_0x1ac9[10]+ _0xf862x8[_0x1ac9[13]][_0x1ac9[12]][_0x1ac9[11]]);_0xf862xb[_0x1ac9[15]](_0x1ac9[148]+ _0xf862x3[_0x1ac9[23]]);_0xf862xb[_0x1ac9[95]]= function(_0xf862x35){if(_0xf862xb[_0x1ac9[16]]=== 200){_0xf862x8[_0x1ac9[13]][_0x1ac9[150]](_0x1ac9[149]);_0xf862x8[_0x1ac9[13]][_0x1ac9[144]]= _0xf862x3[_0x1ac9[23]]}else {_0xf862x8[_0x1ac9[13]][_0x1ac9[150]](JSON[_0x1ac9[18]](_0xf862xb[_0x1ac9[17]])[_0x1ac9[152]][0][_0x1ac9[151]])}};_0xf862xb[_0x1ac9[153]]= function(_0xf862x35){mxUtils[_0x1ac9[155]](_0xf862xb[_0x1ac9[154]])};_0xf862x8[_0x1ac9[79]]()});_0xf862x37[_0x1ac9[31]]= _0x1ac9[104];var _0xf862x3a=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[105]),function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x3a[_0x1ac9[31]]= _0x1ac9[106];_0xf862x2b[_0x1ac9[25]](_0xf862x37);_0xf862x2b[_0x1ac9[25]](_0xf862x3a);_0xf862x28[_0x1ac9[25]](_0xf862x29);_0xf862x28[_0x1ac9[25]](_0xf862x2a);_0xf862x28[_0x1ac9[25]](_0xf862x2b);this[_0x1ac9[64]]= _0xf862x28}function EditFileDialog(_0xf862x8){var _0xf862x28=_0xf862x8[_0x1ac9[50]](_0x1ac9[69]);var _0xf862x29=_0xf862x8[_0x1ac9[50]](_0x1ac9[70]);var _0xf862x2a=_0xf862x8[_0x1ac9[50]](_0x1ac9[71]);var _0xf862x2b=_0xf862x8[_0x1ac9[50]](_0x1ac9[72]);var _0xf862x2c=_0xf862x8[_0x1ac9[74]](_0x1ac9[73]);mxUtils[_0x1ac9[78]](_0xf862x2c,mxResources[_0x1ac9[76]](_0x1ac9[156]));var _0xf862x2d=mxUtils[_0x1ac9[80]](_0x1ac9[40],function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x2d[_0x1ac9[31]]= _0x1ac9[65];_0xf862x29[_0x1ac9[25]](_0xf862x2d);_0xf862x29[_0x1ac9[25]](_0xf862x2c);var _0xf862x2e=_0xf862x8[_0x1ac9[50]](_0x1ac9[81]);var _0xf862x2f=_0xf862x8[_0x1ac9[50]](_0x1ac9[82]);var _0xf862x30=document[_0x1ac9[2]](_0x1ac9[83]);_0xf862x30[_0x1ac9[53]][_0x1ac9[84]]= _0x1ac9[85];_0xf862x30[_0x1ac9[53]][_0x1ac9[86]]= _0x1ac9[87];_0xf862x30[_0x1ac9[23]]= mxUtils[_0x1ac9[158]](_0xf862x8[_0x1ac9[13]][_0x1ac9[157]]());if(fileSupport){function _0xf862x4a(_0xf862x32){_0xf862x32[_0x1ac9[159]]();_0xf862x32[_0x1ac9[160]]();if(_0xf862x32[_0x1ac9[161]][_0x1ac9[92]][_0x1ac9[141]]> 0){var _0xf862x4b=_0xf862x32[_0x1ac9[161]][_0x1ac9[92]][0];var _0xf862x4c= new FileReader();_0xf862x4c[_0x1ac9[95]]= function(_0xf862x35){_0xf862x30[_0x1ac9[23]]= _0xf862x35[_0x1ac9[93]][_0x1ac9[96]]};_0xf862x4c[_0x1ac9[97]](_0xf862x4b)}}function _0xf862x4d(_0xf862x32){_0xf862x32[_0x1ac9[159]]();_0xf862x32[_0x1ac9[160]]()}_0xf862x30[_0x1ac9[100]](_0x1ac9[162],_0xf862x4d,false);_0xf862x30[_0x1ac9[100]](_0x1ac9[163],_0xf862x4a,false)};_0xf862x2f[_0x1ac9[25]](_0xf862x30);_0xf862x2e[_0x1ac9[25]](_0xf862x2f);_0xf862x2a[_0x1ac9[25]](_0xf862x2e);var _0xf862x37=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[135]),function(){var _0xf862x39=mxUtils[_0x1ac9[101]](_0xf862x30[_0x1ac9[23]]);_0xf862x8[_0x1ac9[13]][_0x1ac9[102]](_0xf862x39[_0x1ac9[48]]);_0xf862x8[_0x1ac9[79]]()});_0xf862x37[_0x1ac9[31]]= _0x1ac9[104];var _0xf862x3a=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[105]),function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x3a[_0x1ac9[31]]= _0x1ac9[106];_0xf862x2b[_0x1ac9[25]](_0xf862x37);_0xf862x2b[_0x1ac9[25]](_0xf862x3a);_0xf862x28[_0x1ac9[25]](_0xf862x29);_0xf862x28[_0x1ac9[25]](_0xf862x2a);_0xf862x28[_0x1ac9[25]](_0xf862x2b);this[_0x1ac9[64]]= _0xf862x28}function ExportDialog(_0xf862x8){var _0xf862x28=_0xf862x8[_0x1ac9[50]](_0x1ac9[69]);var _0xf862x29=_0xf862x8[_0x1ac9[50]](_0x1ac9[70]);var _0xf862x2a=_0xf862x8[_0x1ac9[50]](_0x1ac9[164]);var _0xf862x2b=_0xf862x8[_0x1ac9[50]](_0x1ac9[72]);var _0xf862x2c=_0xf862x8[_0x1ac9[74]](_0x1ac9[73]);mxUtils[_0x1ac9[78]](_0xf862x2c,mxResources[_0x1ac9[76]](_0x1ac9[165])+ _0x1ac9[77]);var _0xf862x2d=mxUtils[_0x1ac9[80]](_0x1ac9[40],function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x2d[_0x1ac9[31]]= _0x1ac9[65];_0xf862x29[_0x1ac9[25]](_0xf862x2d);_0xf862x29[_0x1ac9[25]](_0xf862x2c);var _0xf862x4f=_0xf862x8[_0x1ac9[50]](_0x1ac9[166]);var _0xf862x50=_0xf862x8[_0x1ac9[50]](_0x1ac9[167]);var _0xf862x42=document[_0x1ac9[2]](_0x1ac9[130]);_0xf862x42[_0x1ac9[31]]= _0x1ac9[168];mxUtils[_0x1ac9[78]](_0xf862x42,mxResources[_0x1ac9[76]](_0x1ac9[144]));var _0xf862x3=document[_0x1ac9[2]](_0x1ac9[1]);_0xf862x3[_0x1ac9[5]](_0x1ac9[23],_0xf862x8[_0x1ac9[13]][_0x1ac9[127]]());_0xf862x3[_0x1ac9[31]]= _0x1ac9[134];var _0xf862x25=_0xf862x8[_0x1ac9[50]](_0x1ac9[169]);_0xf862x25[_0x1ac9[25]](_0xf862x3);_0xf862x50[_0x1ac9[25]](_0xf862x42);_0xf862x50[_0x1ac9[25]](_0xf862x25);_0xf862x4f[_0x1ac9[25]](_0xf862x50);_0xf862x2a[_0x1ac9[25]](_0xf862x4f);var _0xf862x37=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[165]),mxUtils[_0x1ac9[103]](this,function(_0xf862x38){_0xf862x8[_0x1ac9[135]](false);var _0xf862x51=encodeURIComponent(mxUtils[_0x1ac9[170]](_0xf862x8[_0x1ac9[13]][_0x1ac9[157]]())); new mxXmlRequest(SAVE_URL+ _0xf862x8[_0x1ac9[13]][_0x1ac9[12]][_0x1ac9[133]]+ _0x1ac9[172],_0x1ac9[173]+ _0xf862x3[_0x1ac9[23]],_0x1ac9[7])[_0x1ac9[171]](document,_0x1ac9[122]);_0xf862x8[_0x1ac9[79]]()}));_0xf862x37[_0x1ac9[31]]= _0x1ac9[104];var _0xf862x3a=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[105]),function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x3a[_0x1ac9[31]]= _0x1ac9[106];_0xf862x2b[_0x1ac9[25]](_0xf862x37);_0xf862x2b[_0x1ac9[25]](_0xf862x3a);_0xf862x28[_0x1ac9[25]](_0xf862x29);_0xf862x28[_0x1ac9[25]](_0xf862x2a);_0xf862x28[_0x1ac9[25]](_0xf862x2b);this[_0x1ac9[64]]= _0xf862x28}function GeneralDialog(_0xf862x8,_0xf862x53){var _0xf862x54=_0xf862x8[_0x1ac9[13]][_0x1ac9[174]];var _0xf862x28=_0xf862x8[_0x1ac9[50]](_0x1ac9[69]);var _0xf862x29=_0xf862x8[_0x1ac9[50]](_0x1ac9[70]);var _0xf862x2a=_0xf862x8[_0x1ac9[50]](_0x1ac9[175]);var _0xf862x2b=_0xf862x8[_0x1ac9[50]](_0x1ac9[72]);var _0xf862x2c=_0xf862x8[_0x1ac9[74]](_0x1ac9[73]);mxUtils[_0x1ac9[78]](_0xf862x2c,mxResources[_0x1ac9[76]](_0x1ac9[156])+ _0x1ac9[176]+ mxResources[_0x1ac9[76]](_0xf862x53[_0x1ac9[23]][_0x1ac9[177]]));var _0xf862x2d=mxUtils[_0x1ac9[80]](_0x1ac9[40],function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x2d[_0x1ac9[31]]= _0x1ac9[65];_0xf862x29[_0x1ac9[25]](_0xf862x2d);_0xf862x29[_0x1ac9[25]](_0xf862x2c);var _0xf862x55=_0xf862x8[_0x1ac9[50]](_0x1ac9[166]);_0xf862x55[_0x1ac9[5]](_0x1ac9[133],_0x1ac9[178]);var _0xf862x56=_0xf862x53[_0x1ac9[23]][_0x1ac9[179]][_0x1ac9[141]];var _0xf862x4f=_0xf862x8[_0x1ac9[50]](_0x1ac9[166]);for(var _0xf862x57=0;_0xf862x57< _0xf862x56;_0xf862x57++){var _0xf862x3f=_0xf862x53[_0x1ac9[23]][_0x1ac9[179]][_0xf862x57][_0x1ac9[125]];var _0xf862x40=_0x1ac9[126]+ _0xf862x3f;var _0xf862x2=_0xf862x53[_0x1ac9[23]][_0x1ac9[179]][_0xf862x57][_0x1ac9[23]];console[_0x1ac9[94]](_0xf862x3f);var _0xf862x50=_0xf862x8[_0x1ac9[50]]((_0xf862x57== _0xf862x56- 1)?_0x1ac9[167]:_0x1ac9[180]);var _0xf862x42=document[_0x1ac9[2]](_0x1ac9[130]);_0xf862x42[_0x1ac9[31]]= _0x1ac9[168];mxUtils[_0x1ac9[78]](_0xf862x42,mxResources[_0x1ac9[76]](_0xf862x3f));_0xf862x50[_0x1ac9[25]](_0xf862x42);var _0xf862x3;switch(_0xf862x3f){case _0x1ac9[133]:_0xf862x3= document[_0x1ac9[2]](_0x1ac9[1]);_0xf862x2= _0xf862x53[_0x1ac9[133]];_0xf862x3[_0x1ac9[5]](_0x1ac9[23],_0xf862x2);_0xf862x3[_0x1ac9[5]](_0x1ac9[181],true);_0xf862x3[_0x1ac9[31]]= _0x1ac9[134];break;case _0x1ac9[187]:_0xf862x3= document[_0x1ac9[2]](_0x1ac9[1]);_0xf862x3[_0x1ac9[5]](_0x1ac9[3],_0x1ac9[80]);_0xf862x3[_0x1ac9[182]]= function(){if(this[_0x1ac9[23]]== _0x1ac9[183]){this[_0x1ac9[5]](_0x1ac9[23],_0x1ac9[184]);this[_0x1ac9[31]]= _0x1ac9[185]}else {this[_0x1ac9[31]]= _0x1ac9[186];this[_0x1ac9[5]](_0x1ac9[23],_0x1ac9[183])}};_0xf862x3[_0x1ac9[5]](_0x1ac9[23],_0xf862x2);_0xf862x3[_0x1ac9[31]]= (_0xf862x2== _0x1ac9[183]?_0x1ac9[186]:_0x1ac9[185]);break;case _0x1ac9[21]:_0xf862x3= document[_0x1ac9[2]](_0x1ac9[83]);_0xf862x3[_0x1ac9[188]]= _0xf862x2;_0xf862x3[_0x1ac9[31]]= _0x1ac9[134];break;case _0x1ac9[189]:_0xf862x3= document[_0x1ac9[2]](_0x1ac9[83]);_0xf862x3[_0x1ac9[188]]= _0xf862x2;_0xf862x3[_0x1ac9[31]]= _0x1ac9[134];break;case _0x1ac9[190]:_0xf862x3= document[_0x1ac9[2]](_0x1ac9[83]);_0xf862x3[_0x1ac9[188]]= _0xf862x2;_0xf862x3[_0x1ac9[31]]= _0x1ac9[134];break;case _0x1ac9[193]:_0xf862x3= document[_0x1ac9[2]](_0x1ac9[1]);_0xf862x3[_0x1ac9[5]](_0x1ac9[23],_0xf862x2);_0xf862x3[_0x1ac9[5]](_0x1ac9[191],_0x1ac9[192]);_0xf862x3[_0x1ac9[31]]= _0x1ac9[134];break;case _0x1ac9[195]:_0xf862x3= createDropdownFromApi(_0x1ac9[194],_0xf862x2,_0x1ac9[125],_0x1ac9[133],_0xf862x8);break;case _0x1ac9[198]:_0xf862x3= document[_0x1ac9[2]](_0x1ac9[83]);_0xf862x3[_0x1ac9[188]]= _0xf862x2;_0xf862x3[_0x1ac9[31]]= _0x1ac9[134];_0xf862x3[_0x1ac9[5]](_0x1ac9[196],_0x1ac9[197]);break;case _0x1ac9[201]:var _0xf862x3=mxUtils[_0x1ac9[80]](_0x1ac9[199],function(){var _0xf862x58=createDynamicInput(null,null,_0xf862x8);_0xf862x55[_0x1ac9[25]](_0xf862x58);_0xf862x2a[_0x1ac9[25]](_0xf862x55)});_0xf862x3[_0x1ac9[31]]= _0x1ac9[200];break;default:_0xf862x3= document[_0x1ac9[2]](_0x1ac9[1]);_0xf862x3[_0x1ac9[5]](_0x1ac9[23],_0xf862x2);_0xf862x3[_0x1ac9[31]]= _0x1ac9[134];break};_0xf862x3[_0x1ac9[5]](_0x1ac9[133],_0xf862x40);var _0xf862x25=_0xf862x8[_0x1ac9[50]](_0x1ac9[169]);_0xf862x25[_0x1ac9[25]](_0xf862x3);if(mxResources[_0x1ac9[76]](_0x1ac9[202]+ _0xf862x3f)){var _0xf862x59=_0xf862x8[_0x1ac9[50]](_0x1ac9[203]);_0xf862x59[_0x1ac9[31]]= _0x1ac9[204];mxUtils[_0x1ac9[78]](_0xf862x59,mxResources[_0x1ac9[76]](_0x1ac9[202]+ _0xf862x3f));_0xf862x25[_0x1ac9[25]](_0xf862x59)};_0xf862x50[_0x1ac9[25]](_0xf862x25);_0xf862x4f[_0x1ac9[25]](_0xf862x50)};_0xf862x2a[_0x1ac9[25]](_0xf862x4f);if(_0xf862x53[_0x1ac9[23]][_0x1ac9[177]]== _0x1ac9[1]){if(_0xf862x53[_0x1ac9[205]]){for(var _0xf862x47=0;_0xf862x47< _0xf862x53[_0x1ac9[205]][_0x1ac9[141]];_0xf862x47++){var _0xf862x5a=_0x1ac9[40];var _0xf862x5b=_0x1ac9[40];_[_0x1ac9[28]](_0xf862x53[_0x1ac9[205]][_0xf862x47][_0x1ac9[23]][_0x1ac9[179]],function(_0xf862x5c){if(_0xf862x5c[_0x1ac9[125]]== _0x1ac9[3]){_0xf862x5a= _0xf862x5c[_0x1ac9[23]]}else {if(_0xf862x5c[_0x1ac9[125]]== _0x1ac9[130]){_0xf862x5b= _0xf862x5c[_0x1ac9[23]]}}});var _0xf862x58=createDynamicInput(_0xf862x5a,_0xf862x5b,_0xf862x8);_0xf862x55[_0x1ac9[25]](_0xf862x58)}}};_0xf862x2a[_0x1ac9[25]](_0xf862x55);var _0xf862x37=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[135]),mxUtils[_0x1ac9[103]](this,function(_0xf862x38){for(var _0xf862x57=0;_0xf862x57< _0xf862x53[_0x1ac9[23]][_0x1ac9[179]][_0x1ac9[141]];_0xf862x57++){var _0xf862x40=_0x1ac9[126]+ _0xf862x53[_0x1ac9[23]][_0x1ac9[179]][_0xf862x57][_0x1ac9[125]];var _0xf862x3f=_0xf862x53[_0x1ac9[23]][_0x1ac9[179]][_0xf862x57][_0x1ac9[125]];console[_0x1ac9[94]](_0xf862x3f);_0xf862x53[_0x1ac9[5]](_0xf862x3f,document[_0x1ac9[206]](_0xf862x40)[_0x1ac9[23]]);console[_0x1ac9[94]](document[_0x1ac9[206]](_0xf862x40)[_0x1ac9[23]])};if(_0xf862x53[_0x1ac9[23]][_0x1ac9[177]]== _0x1ac9[1]){if(_0xf862x54[_0x1ac9[208]][_0x1ac9[207]](_0xf862x53)){_0xf862x53[_0x1ac9[205]]= []};if(document[_0x1ac9[206]](_0x1ac9[178])){var _0xf862x55=document[_0x1ac9[206]](_0x1ac9[178])[_0x1ac9[205]];for(var _0xf862x47=0;_0xf862x47< _0xf862x55[_0x1ac9[141]];_0xf862x47++){var _0xf862x5d=_0xf862x55[_0xf862x47][_0x1ac9[205]][1];var _0xf862x5e=_0xf862x55[_0xf862x47][_0x1ac9[205]][0];var _0xf862x39=mxUtils[_0x1ac9[209]]();var _0xf862x5f=_0xf862x39[_0x1ac9[2]](_0x1ac9[178]);_0xf862x5f[_0x1ac9[5]](_0x1ac9[3],_0xf862x55[_0xf862x47][_0x1ac9[210]](_0x1ac9[19])[0][_0x1ac9[23]]);_0xf862x5f[_0x1ac9[5]](_0x1ac9[130],_0xf862x55[_0xf862x47][_0x1ac9[210]](_0x1ac9[1])[0][_0x1ac9[23]]);var _0xf862x60= new mxCell(_0xf862x5f);_0xf862x54[_0x1ac9[208]][_0x1ac9[201]](_0xf862x53,_0xf862x60)}}};_0xf862x54[_0x1ac9[211]](_0xf862x53);_0xf862x8[_0x1ac9[79]]()}));_0xf862x37[_0x1ac9[31]]= _0x1ac9[104];var _0xf862x3a=mxUtils[_0x1ac9[80]](mxResources[_0x1ac9[76]](_0x1ac9[105]),function(){_0xf862x8[_0x1ac9[79]]()});_0xf862x3a[_0x1ac9[31]]= _0x1ac9[106];_0xf862x2b[_0x1ac9[25]](_0xf862x37);_0xf862x2b[_0x1ac9[25]](_0xf862x3a);_0xf862x28[_0x1ac9[25]](_0xf862x29);_0xf862x28[_0x1ac9[25]](_0xf862x2a);_0xf862x28[_0x1ac9[25]](_0xf862x2b);this[_0x1ac9[64]]= _0xf862x28}function createDynamicInput(_0xf862x5a,_0xf862x5b,_0xf862x8){var _0xf862x58=_0xf862x8[_0x1ac9[50]](_0x1ac9[180]);var _0xf862x2f=_0xf862x8[_0x1ac9[50]](_0x1ac9[212]);var _0xf862x41=_0xf862x8[_0x1ac9[50]](_0x1ac9[212]);var _0xf862x62=_0xf862x8[_0x1ac9[50]](_0x1ac9[213]);var _0xf862x3=document[_0x1ac9[2]](_0x1ac9[1]);_0xf862x3[_0x1ac9[5]](_0x1ac9[191],_0x1ac9[214]);_0xf862x3[_0x1ac9[23]]= _0xf862x5b;_0xf862x3[_0x1ac9[31]]= _0x1ac9[134];_0xf862x2f[_0x1ac9[25]](_0xf862x3);var _0xf862x43=document[_0x1ac9[2]](_0x1ac9[19]);var _0xf862xd=document[_0x1ac9[2]](_0x1ac9[20]);_0xf862xd[_0x1ac9[21]]= _0x1ac9[22];_0xf862xd[_0x1ac9[23]]= _0x1ac9[40];_0xf862x43[_0x1ac9[25]](_0xf862xd);var _0xf862x13=[_0x1ac9[21],_0x1ac9[215],_0x1ac9[83],_0x1ac9[4]];_0xf862x13[_0x1ac9[28]](function(_0xf862xe){_0xf862xd= document[_0x1ac9[2]](_0x1ac9[20]);_0xf862xd[_0x1ac9[21]]= _0xf862xe;_0xf862xd[_0x1ac9[23]]= _0xf862xe;_0xf862xd[_0x1ac9[29]]= (_0xf862xe== _0xf862x5a);_0xf862x43[_0x1ac9[25]](_0xf862xd)});_0xf862x43[_0x1ac9[31]]= _0x1ac9[134];_0xf862x41[_0x1ac9[25]](_0xf862x43);var _0xf862x63=mxUtils[_0x1ac9[80]](_0x1ac9[216],function(){var _0xf862x64=_0xf862x63[_0x1ac9[217]];var _0xf862x65=_0xf862x64[_0x1ac9[217]];document[_0x1ac9[206]](_0x1ac9[178])[_0x1ac9[67]](_0xf862x65)});_0xf862x63[_0x1ac9[31]]= _0x1ac9[218];_0xf862x62[_0x1ac9[25]](_0xf862x63);_0xf862x58[_0x1ac9[25]](_0xf862x2f);_0xf862x58[_0x1ac9[25]](_0xf862x41);_0xf862x58[_0x1ac9[25]](_0xf862x62);return _0xf862x58} \ No newline at end of file +'use strict'; +/** + * $Id: Dialogs.js,v 1.5 2013-01-29 17:23:31 gaudenz Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ +/** + * Constructs a new dialog. + */ + +function createCheckbox(value) { + var input = document.createElement('input'); + input.setAttribute('type', 'checkbox'); + if (value) { + input.setAttribute('checked', true); + } + return input; +} + +function createDropdownFromApi(path, value, option_name, option_value, editorUi, + keys, pattern) { + var req = new XMLHttpRequest(); + req.open('GET', path, false); // `false` makes the request synchronous + req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); + req.send(null); + var res = []; + if (req.status === 200) { + res = JSON.parse(req.response); + } + var input = document.createElement('select'); + var option = document.createElement('option'); + option.text = '-- None --'; + option.value = '-1'; + input.appendChild(option); + res.rows.forEach(function(elem) { + option = document.createElement('option'); + option.text = elem[option_name]; + if (keys && pattern) { + keys.forEach(function(key) { + pattern = pattern.replace('%' + key + '%', elem[key]); + }); + option.value = pattern; + option.selected = (pattern == value); + } else { + option.value = elem[option_value]; + option.selected = (elem[option_value] == value); + } + input.appendChild(option); + }); + input.className = 'form-control select2'; + + return input; +} + +function createGroupedDropdownFromApi(path, value, option_name, option_value, editorUi, paginated, associationField) { + var req = new XMLHttpRequest(); + req.open('GET', path, false); // `false` makes the request synchronous + req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); + req.send(null); + var res = []; + if (req.status === 200) { + res = JSON.parse(req.response); + } + var input = document.createElement('select'); + var option = document.createElement('option'); + option.text = '-- None --'; + option.value = '0'; + input.appendChild(option); + var selectValues = paginated ? res.rows : res; + var mainFilter = {}; + var groupFilter = {}; + mainFilter[associationField] = null; + var mainValues = _.filter(selectValues, mainFilter); + var groupValues = {}; + mainValues.forEach(function(elem) { + option = document.createElement('option'); + option.className = 'select-group-father'; + option.text = elem[option_name].toUpperCase(); + option.value = elem[option_value]; + option.selected = (elem[option_value] == value); + input.appendChild(option); + groupFilter[associationField] = elem[option_value]; + groupValues = _.filter(selectValues, groupFilter); + groupValues.forEach(function(elem) { + option = document.createElement('option'); + option.className = 'select-group-son'; + option.text = '-' + _.capitalize(elem[option_name]); + option.value = elem[option_value]; + option.selected = (elem[option_value] == value); + input.appendChild(option); + }); + }) + input.className = 'form-control select2'; + + return input; +} + +function createDropdownFromArray(array, value) { + var input = document.createElement('select'); + + for (var item in array) { + var option = document.createElement('option'); + option.text = array[item]; + option.value = item; + if (value > 0 || value != '') + option.selected = (value === item) ? true : false; + + input.appendChild(option); + } + + input.className = 'form-control select2'; + + return input; +} + +function Dialog(editorUi, elt, w, h, modal, closable, onClose) { + var dx = 0; + + if (mxClient.IS_IE && document.documentMode != 9) { + dx = 60; + } + + w += dx; + h += dx; + + var left = Math.max(0, Math.round((document.body.scrollWidth - w) / 2)); + var top = Math.max(0, Math.round((Math.max(document.body.scrollHeight, + document.documentElement.scrollHeight) - h) / 3)); + + var div = editorUi.createDiv('geDialog'); + div.className = 'modal fade in center'; + div.style.display = 'block'; + div.style.paddingRight = '12px'; + // div.style.width = w + 'px'; + // div.style.height = h + 'px'; + // div.style.left = left + 'px'; + // div.style.top = top + 'px'; + + var divModalDialog = editorUi.createDiv('geModalDialog'); + divModalDialog.className = 'modal-dialog'; + divModalDialog.appendChild(elt); + div.appendChild(divModalDialog); + + if (this.bg == null) { + this.bg = editorUi.createDiv('background'); + this.bg.className = 'modal-backdrop fade in'; + + if (mxClient.IS_QUIRKS) { + new mxDivResizer(this.bg); + } + } + + if (modal) { + document.body.appendChild(this.bg); + } + + document.body.appendChild(div); + + this.onDialogClose = onClose; + this.container = div; +}; + +/** + * Removes the dialog from the DOM. + */ +Dialog.prototype.close = function() { + if (this.onDialogClose != null) { + this.onDialogClose(); + this.onDialogClose = null; + } + + this.container.parentNode.removeChild(this.container); + this.bg.parentNode.removeChild(this.bg); +}; + +/** + * Constructs a new open dialog. + */ +function ImportDialog(editorUi) { + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('import') + ' XML'); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var row = editorUi.createDiv('row'); + var col1 = editorUi.createDiv('col-md-12'); + + var textarea = document.createElement('textarea'); + textarea.style.width = '100%'; + textarea.style.height = '374px'; + + var input = document.createElement('input'); + input.type = 'file'; + input.setAttribute('accept', 'text/xml'); + + input.addEventListener('change', function readSingleFile(evt) { + //Retrieve the first (and only!) File from the FileList object + var f = evt.target.files[0]; + console.log(f); + if (f) { + if (f.type === 'text/xml') { + var r = new FileReader(); + r.onload = function(e) { + var contents = e.target.result; + mxUtils.write(textarea, contents); + }; + r.readAsText(f); + } else { + alert('Failed to load format file'); + } + } else { + alert('Failed to load file'); + } + }, false); + + col1.appendChild(input); + col1.appendChild(textarea); + + row.appendChild(col1); + body.appendChild(row); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('import'), mxUtils.bind(this, + function(data) { + var doc = mxUtils.parseXml(textarea.value); + editorUi.editor.setGraphXml(doc.documentElement); + editorUi.hideDialog(); + })); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; + +}; + +/** + * Constructs a new about dialog. + */ +function AboutDialog(editorUi) { + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('about') + ' Cally Square'); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var img = document.createElement('img'); + img.style.border = '0px'; + img.setAttribute('width', '176'); + img.setAttribute('width', '151'); + img.setAttribute('src', IMAGE_PATH + '/logo.png'); + body.appendChild(img); + mxUtils.br(body); + mxUtils.write(body, 'Powered by Xenialab ' + mxClient.VERSION); + mxUtils.br(body); + var link = document.createElement('a'); + link.setAttribute('href', 'http://www.callysquare.com/'); + link.setAttribute('target', '_blank'); + mxUtils.write(link, 'www.callysquare.com'); + body.appendChild(link); + mxUtils.br(body); + mxUtils.br(body); + //--- END BODY + + var close = mxUtils.button(mxResources.get('close'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; +}; + +/** + * Constructs a new save dialog. + */ +function SaveDialog(editorUi) { + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('saveAs')); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var name = 'name'; + var id = '_' + name; + var value = editorUi.editor.getOrCreateFilename(); + + var row = editorUi.createDiv('row'); + var col1 = editorUi.createDiv('col-md-4'); + var col2 = editorUi.createDiv('col-md-8'); + + var label = document.createElement('label'); + label.className = 'control-label pull-right'; + mxUtils.write(label, mxResources.get(name)); + col1.appendChild(label); + + var select = document.createElement('input'); + select.setAttribute('value', value + '_copy'); + select.setAttribute('id', id) + select.className = 'form-control'; + col2.appendChild(select); + + row.appendChild(col1); + row.appendChild(col2); + body.appendChild(row); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('save'), function() { + editorUi.saveAs(select.value); + editorUi.hideDialog(); + }); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; + //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); +}; + +/** + * Constructs a new save dialog. + */ +function NewDialog(editorUi) { + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('new')); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var name = 'name'; + var id = '_' + name; + var value = editorUi.editor.getOrCreateFilename(); + + var row = editorUi.createDiv('row'); + var col1 = editorUi.createDiv('col-md-4'); + var col2 = editorUi.createDiv('col-md-8'); + + var label = document.createElement('label'); + label.className = 'control-label pull-right'; + mxUtils.write(label, mxResources.get(name)); + col1.appendChild(label); + + var select = document.createElement('input'); + select.setAttribute('value', value + '_new'); + select.setAttribute('id', id) + select.className = 'form-control'; + col2.appendChild(select); + + row.appendChild(col1); + row.appendChild(col2); + body.appendChild(row); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('new'), function() { + editorUi.new(select.value); + editorUi.hideDialog(); + }); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; + //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); +}; + +/** + * Constructs a new save dialog. + */ +function VariableDialog(editorUi) { + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('variable')); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var name = 'name'; + var id = '_' + name; + var value = editorUi.editor.getOrCreateFilename(); + + var row = editorUi.createDiv('row'); + var col1 = editorUi.createDiv('col-md-4'); + var col2 = editorUi.createDiv('col-md-8'); + + var label = document.createElement('label'); + label.className = 'control-label pull-right'; + mxUtils.write(label, mxResources.get(name)); + col1.appendChild(label); + + var select = document.createElement('input'); + select.setAttribute('value', 'variable name'); + select.setAttribute('id', id) + select.className = 'form-control'; + col2.appendChild(select); + + row.appendChild(col1); + row.appendChild(col2); + body.appendChild(row); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('new'), function() { + editorUi.variable(select.value); + editorUi.hideDialog(); + }); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; + //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); +}; + +/** + * Constructs a new save dialog. + */ +function OpenDialog(editorUi) { + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('open')); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var row = editorUi.createDiv('row'); + var col1 = editorUi.createDiv('col-md-4'); + var col2 = editorUi.createDiv('col-md-8'); + + var label = document.createElement('label'); + label.className = 'control-label pull-right'; + mxUtils.write(label, mxResources.get('name')); + col1.appendChild(label); + + var req = new XMLHttpRequest(); + req.open('GET', '/api/jscripty/projects', false); // `false` makes the request synchronous + req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); + req.send(null); + var res = []; + if (req.status === 200) { + res = JSON.parse(req.response).rows; + } + + var select = document.createElement('select'); + + for (var j = 0; j < res.length; j++) { + var option = document.createElement('option'); + option.text = res[j].name; + option.value = res[j].id; + select.appendChild(option); + } + select.className = 'form-control'; + col2.appendChild(select); + + row.appendChild(col1); + row.appendChild(col2); + body.appendChild(row); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('open'), function() { + console.log(select); + console.log(select.value); + window.open('jscripty/projects/view/' + select.value, '_blank'); + editorUi.hideDialog(); + }); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; + //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); +}; + +/** + * Constructs a new rename dialog. + */ +function RenameDialog(editorUi) { + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('rename')); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var row = editorUi.createDiv('row'); + var col1 = editorUi.createDiv('col-md-4'); + var col2 = editorUi.createDiv('col-md-8'); + + var label = document.createElement('label'); + label.className = 'control-label pull-right'; + mxUtils.write(label, mxResources.get('name')); + col1.appendChild(label); + var name = editorUi.editor.filename; + var input = document.createElement('input'); + input.setAttribute('value', name); + input.className = 'form-control'; + + col2.appendChild(input); + + row.appendChild(col1); + row.appendChild(col2); + body.appendChild(row); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('save'), function() { + var req = new XMLHttpRequest(); + + req.open("PUT", SAVE_URL + editorUi.editor.data.id, true); + req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); + req.send('name=' + input.value); + + req.onload = function(e) { + if (req.status === 200) { + editorUi.editor.setStatus('Project successfully renamed'); + editorUi.editor.filename = input.value; + + } else { + editorUi.editor.setStatus(JSON.parse(req.response).errors[0].message) + } + } + req.onerror = function(e) { + mxUtils.alert(req.statusText); + }; + editorUi.hideDialog(); + }); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; + //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); +}; +/** + * Constructs a new edit file dialog. + */ +function EditFileDialog(editorUi) { + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('edit')); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var row = editorUi.createDiv('row'); + var col1 = editorUi.createDiv('col-md-12'); + + var textarea = document.createElement('textarea'); + textarea.style.width = '100%'; + textarea.style.height = '374px'; + textarea.value = mxUtils.getPrettyXml(editorUi.editor.getGraphXml()); + + // Enables dropping files + if (fileSupport) { + function handleDrop(evt) { + evt.stopPropagation(); + evt.preventDefault(); + + if (evt.dataTransfer.files.length > 0) { + var file = evt.dataTransfer.files[0]; + + var reader = new FileReader(); + reader.onload = function(e) { + textarea.value = e.target.result; + }; + reader.readAsText(file); + } + }; + + function handleDragOver(evt) { + evt.stopPropagation(); + evt.preventDefault(); + }; + + // Setup the dnd listeners. + textarea.addEventListener('dragover', handleDragOver, false); + textarea.addEventListener('drop', handleDrop, false); + } + col1.appendChild(textarea); + + row.appendChild(col1); + body.appendChild(row); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('save'), function() { + var doc = mxUtils.parseXml(textarea.value); + editorUi.editor.setGraphXml(doc.documentElement); + editorUi.hideDialog(); + }); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; +}; + +/** + * Constructs a new export dialog. + */ +function ExportDialog(editorUi) { + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body form'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('export') + ' XML'); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var form = editorUi.createDiv('form-horizontal form-row-seperated'); + var group = editorUi.createDiv('form-group last'); + + var label = document.createElement('label'); + label.className = 'col-sm-4 control-label'; + mxUtils.write(label, mxResources.get('filename')); + + var input = document.createElement('input'); + input.setAttribute('value', editorUi.editor.getOrCreateFilename()); + input.className = 'form-control'; + + var div = editorUi.createDiv('col-sm-8'); + div.appendChild(input); + + group.appendChild(label); + group.appendChild(div); + form.appendChild(group); + + body.appendChild(form); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('export'), mxUtils.bind(this, + function(data) { + editorUi.save(false); + + var xml = encodeURIComponent(mxUtils.getXml(editorUi.editor.getGraphXml())); + new mxXmlRequest(SAVE_URL + editorUi.editor.data.id + '/download', + 'filename=' + input.value, 'GET').simulate(document, "_blank"); + editorUi.hideDialog(); + })); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; +}; + +/** + * Giuseppe Careri + * Constructs a new general dialog. + */ + +function GeneralDialog(editorUi, cell) { + var graph = editorUi.editor.graph; + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body form modal-body-scroll'); + var footer = editorUi.createDiv('modal-footer'); + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('edit') + ' ' + mxResources.get(cell.value + .nodeName)); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var inputGroup = editorUi.createDiv('form-horizontal form-row-seperated'); + inputGroup.setAttribute('id', 'inputGroup'); + var length = cell.value.attributes.length; + var form = editorUi.createDiv('form-horizontal form-row-seperated'); + + for (var i = 0; i < length; i++) { + var name = cell.value.attributes[i].name; + var id = '_' + name; + var value = cell.value.attributes[i].value; + console.log(name); + var group = editorUi.createDiv((i == length - 1) ? 'form-group last' : + 'form-group'); + + var label = document.createElement('label'); + label.className = 'col-sm-4 control-label'; + mxUtils.write(label, mxResources.get(name)); + group.appendChild(label); + + var input; + + switch (name) { + case 'id': + input = document.createElement('input'); + value = cell.id; + input.setAttribute('value', value); + input.setAttribute('disabled', true) + input.className = 'form-control'; + break; + case 'state': + input = document.createElement('input'); + input.setAttribute('type', 'button') + input.onclick = function() { + if (this.value == 'ON') { + this.setAttribute('value', 'OFF'); + this.className = 'btn btn-danger btn-md'; + } else { + this.className = 'btn btn-success btn-md'; + this.setAttribute('value', 'ON'); + } + + }; + input.setAttribute('value', value); + input.className = (value == 'ON' ? 'btn btn-success btn-md' : 'btn btn-danger btn-md'); + + break; + case 'text': + input = document.createElement('textarea'); + input.innerHTML = value; + input.className = 'form-control'; + break; + case 'Body': + input = document.createElement('textarea'); + input.innerHTML = value; + input.className = 'form-control'; + break; + case 'question': + input = document.createElement('textarea'); + input.innerHTML = value; + input.className = 'form-control'; + + break; + case 'other': + input = document.createElement('input'); + input.setAttribute('value', value); + input.setAttribute('placeholder', 'Insert label for "Other" answer option'); + input.className = 'form-control'; + break; + // case 'addtext': + // var input = document.createElement('input'); + // input.setAttribute('type', 'checkbox'); + // console.log('value', value); + // if (value == 'true') { + // input.setAttribute('checked', true); + // + // } else { + // input.removeAttribute("checked"); + // + // } + // // input.value = input.checked; + // + // input.onclick = function() { + // this.value = this.checked; + // + // console.log(input); + // if (this.checked) { + // console.log(this.checked); + // var rowdiv = editorUi.createDiv('form-group'); + // rowdiv.setAttribute('id', 'rowdiv'); + // var col1 = editorUi.createDiv('col-md-4'); + // var col2 = editorUi.createDiv('col-md-8'); + // var label = document.createElement('label'); + // // input.setAttribute('placeholder', 'Insert label'); + // label.className = 'pull-right control-label'; + // mxUtils.write(label, 'Texarea Label'); + // col1.appendChild(label); + // var input = document.createElement('input'); + // // input.setAttribute('placeholder', 'Insert label'); + // // input.value = inputValue; + // input.className = 'form-control'; + // col2.appendChild(input); + // rowdiv.appendChild(col1); + // rowdiv.appendChild(col2); + // inputGroup.appendChild(rowdiv); + // body.appendChild(inputGroup); + // } else { + // console.log(this.checked); + // document.getElementById('inputGroup').removeChild(document.getElementById('rowdiv')); + // } + // }; + // + // + // input.className = 'btn green'; + // break; + case 'account_id': + input = createDropdownFromApi('/api/sms/accounts', value, 'name', 'id', + editorUi); + break; + case 'sms_text': + input = document.createElement('textarea'); + input.innerHTML = value; + input.className = 'form-control'; + input.setAttribute('maxlength', "160"); + + break; + case 'add': + var input = mxUtils.button('+', function() { + var rowdiv = createDynamicInput(null, null, editorUi); + inputGroup.appendChild(rowdiv); + body.appendChild(inputGroup); + }) + + input.className = 'btn green'; + break; + default: + input = document.createElement('input'); + input.setAttribute('value', value); + input.className = 'form-control'; + break; + } + + input.setAttribute('id', id) + var div = editorUi.createDiv('col-sm-8'); + div.appendChild(input); + // Help + if (mxResources.get('help_' + name)) { + var help = editorUi.createDiv('p'); + help.className = 'help-block'; + mxUtils.write(help, mxResources.get('help_' + name)); + div.appendChild(help); + } + + group.appendChild(div); + form.appendChild(group); + } + body.appendChild(form); + // console.log(cell); + if (cell.value.nodeName == 'input') { + + if (cell.children) { + for (var j = 0; j < cell.children.length; j++) { + var selectValue = ''; + var inputValue = ''; + _.forEach(cell.children[j].value.attributes, function(element) { + // console.log(element); + if (element.name == 'type') { + selectValue = element.value; + + } else if (element.name == 'label') { + inputValue = element.value; + + } + }) + var rowdiv = createDynamicInput(selectValue, inputValue, editorUi); + inputGroup.appendChild(rowdiv); + + } + } + + } + body.appendChild(inputGroup); + + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('save'), mxUtils.bind(this, + function(data) { + for (var i = 0; i < cell.value.attributes.length; i++) { + var id = '_' + cell.value.attributes[i].name; + var name = cell.value.attributes[i].name; + console.log(name); + + cell.setAttribute(name, document.getElementById(id).value); + console.log(document.getElementById(id).value); + + + }; + + if (cell.value.nodeName == 'input') { + if (graph.model.getChildCount(cell)) { + cell.children = []; + } + if (document.getElementById('inputGroup')) { + var inputGroup = document.getElementById('inputGroup').children; + for (var j = 0; j < inputGroup.length; j++) { + + var divSelect = inputGroup[j].children[1]; + var divInput = inputGroup[j].children[0]; + var doc = mxUtils.createXmlDocument(); + var node = doc.createElement('inputGroup'); + node.setAttribute('type', inputGroup[j].getElementsByTagName('select')[0].value); + node.setAttribute('label', inputGroup[j].getElementsByTagName('input')[0].value); + var cells = new mxCell(node); + graph.model.add(cell, cells); + } + } + } + + graph.refresh(cell); + editorUi.hideDialog(); + })); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; +}; + + + +function createDynamicInput(selectValue, inputValue, editorUi) { + + var rowdiv = editorUi.createDiv('form-group'); + var col1 = editorUi.createDiv('col-md-5'); + var col2 = editorUi.createDiv('col-md-5'); + var col3 = editorUi.createDiv('col-md-2'); + + var input = document.createElement('input'); + input.setAttribute('placeholder', 'Insert label'); + input.value = inputValue; + input.className = 'form-control'; + col1.appendChild(input); + + var select = document.createElement('select'); + var option = document.createElement('option'); + option.text = '-- None --'; + option.value = ''; + select.appendChild(option); + + var selectValues = ['text', 'number', 'textarea', 'checkbox']; + selectValues.forEach(function(elem) { + option = document.createElement('option'); + option.text = elem; + option.value = elem; + option.selected = (elem == selectValue); + select.appendChild(option); + }) + select.className = 'form-control'; + col2.appendChild(select); + var button = mxUtils.button('x', function() { + var buttonParent = button.parentElement; + var divParent = buttonParent.parentElement; + document.getElementById('inputGroup').removeChild(divParent); + }) + + button.className = 'btn red'; + col3.appendChild(button); + rowdiv.appendChild(col1); + rowdiv.appendChild(col2); + rowdiv.appendChild(col3); + return rowdiv; + + +} diff --git a/public/assets/plugins/jscripty/js/Editor.js b/public/assets/plugins/jscripty/js/Editor.js index 0dd7af6..9858989 100644 --- a/public/assets/plugins/jscripty/js/Editor.js +++ b/public/assets/plugins/jscripty/js/Editor.js @@ -1 +1,888 @@ -var _0x991c=["\x49\x53\x5F\x54\x4F\x55\x43\x48","\x73\x74\x6F\x72\x61\x67\x65","\x6C\x6F\x63\x61\x6C","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x46\x69\x6C\x65","\x46\x69\x6C\x65\x52\x65\x61\x64\x65\x72","\x46\x69\x6C\x65\x4C\x69\x73\x74","\x74\x6F\x75\x63\x68","\x31","\x6F\x70\x65\x6E\x65\x72","\x63\x6F\x75\x6E\x74\x65\x72","\x63\x61\x6C\x6C","\x69\x6E\x69\x74","\x69\x6E\x69\x74\x53\x74\x65\x6E\x63\x69\x6C\x52\x65\x67\x69\x73\x74\x72\x79","\x67\x72\x61\x70\x68","\x6F\x75\x74\x6C\x69\x6E\x65","\x75\x70\x64\x61\x74\x65\x4F\x6E\x50\x61\x6E","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x55\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x73\x74\x61\x74\x75\x73","","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x64\x72\x61\x77\x69\x6E\x67","\x67\x65\x74","\x2E\x78\x6D\x6C","\x67\x65\x74\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x67\x72\x61\x70\x68\x43\x68\x61\x6E\x67\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x70\x70\x6C\x79","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x6F\x6E\x62\x65\x66\x6F\x72\x65\x75\x6E\x6C\x6F\x61\x64","\x61\x6C\x6C\x43\x68\x61\x6E\x67\x65\x73\x4C\x6F\x73\x74","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x65\x78\x74\x65\x6E\x64","\x67\x72\x69\x64\x49\x6D\x61\x67\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x2F\x67\x72\x69\x64\x2E\x67\x69\x66","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x49\x6D\x61\x67\x65","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C","\x73\x63\x61\x6C\x65","\x76\x69\x65\x77","\x67\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x69\x64","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x30","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x67\x75\x69\x64\x65\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x66\x6F\x6C\x64","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x78","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x64\x78","\x79","\x64\x79","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x70\x61\x67\x65","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x70\x61\x67\x65\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x48\x65\x69\x67\x68\x74","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x63\x6F\x64\x65","\x75\x70\x64\x61\x74\x65\x47\x72\x61\x70\x68\x43\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x65\x6E\x63\x6F\x64\x65","\x72\x6F\x75\x6E\x64","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x6E\x6F\x6E\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x73\x74\x79\x6C\x65","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x66\x69\x6C\x6C","\x72\x65\x63\x6F\x6E\x66\x69\x67\x75\x72\x65","\x23\x65\x62\x65\x62\x65\x62","\x62\x6F\x72\x64\x65\x72\x53\x74\x79\x6C\x65","\x73\x6F\x6C\x69\x64","\x62\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x23\x65\x35\x65\x35\x65\x35","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70\x57\x69\x64\x74\x68","\x31\x70\x78","\x62\x6F\x72\x64\x65\x72\x4C\x65\x66\x74\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x52\x69\x67\x68\x74\x57\x69\x64\x74\x68","\x30\x70\x78","\x62\x6F\x72\x64\x65\x72\x42\x6F\x74\x74\x6F\x6D\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72","\x76\x61\x6C\x69\x64\x61\x74\x65","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x68\x69\x64\x64\x65\x6E","\x61\x75\x74\x6F","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x75\x72\x6C\x28","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x6E\x6F\x64\x65","\x49\x53\x5F\x49\x45\x36","\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x2F\x67\x72\x61\x70\x68\x65\x64\x69\x74\x6F\x72\x2D\x69\x65\x36\x2E\x63\x73\x73","\x6C\x69\x6E\x6B","\x6C\x6F\x61\x64\x44\x65\x66\x61\x75\x6C\x74\x42\x75\x6E\x64\x6C\x65","\x61\x64\x64","\x44\x45\x46\x41\x55\x4C\x54\x5F\x48\x4F\x54\x53\x50\x4F\x54","\x63\x72\x65\x61\x74\x65\x4D\x61\x72\x6B\x65\x72","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6E\x67","\x53\x48\x41\x44\x4F\x57\x43\x4F\x4C\x4F\x52","\x23\x64\x30\x64\x30\x64\x30","\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x39\x39\x63\x63\x66\x66","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x23\x30\x30\x38\x38\x63\x66","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x23\x30\x30\x61\x38\x66\x66","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x43\x4F\x4C\x4F\x52","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x43\x4F\x4E\x4E\x45\x43\x54\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x63\x65\x65\x37\x66\x66","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x44\x45\x46\x41\x55\x4C\x54\x5F\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x47\x55\x49\x44\x45\x5F\x43\x4F\x4C\x4F\x52","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x43\x6F\x6C\x6F\x72","\x23\x63\x30\x63\x30\x63\x30","\x64\x65\x66\x61\x75\x6C\x74\x4F\x70\x61\x63\x69\x74\x79","\x63\x72\x65\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x77\x68\x69\x74\x65","\x23\x63\x61\x63\x61\x63\x61","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x6D\x69\x6E","\x66\x6C\x6F\x6F\x72","\x6D\x61\x78","\x63\x65\x69\x6C","\x70\x61\x6E\x47\x72\x61\x70\x68","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x75\x73\x65\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x6D\x61\x72\x67\x69\x6E\x4C\x65\x66\x74","\x70\x78","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x69\x6D\x61\x67\x65","\x73\x72\x63","\x64\x65\x73\x74\x72\x6F\x79","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x6E\x65","\x72\x65\x64\x72\x61\x77","\x72\x65\x64\x72\x61\x77\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x69\x73\x53\x68\x61\x64\x6F\x77","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x54\x52\x49\x43\x54\x48\x54\x4D\x4C","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x69\x6E\x73\x65\x72\x74\x42\x65\x66\x6F\x72\x65","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x2D\x31\x70\x78\x20\x2D\x31\x70\x78","\x64\x62\x6C\x63\x6C\x69\x63\x6B","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x69\x73\x48\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x68\x69\x64\x65","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x62\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x6D\x69\x6E\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x69\x73\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x70\x6F\x69\x6E\x74\x73","\x69\x73\x44\x61\x73\x68\x65\x64","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x61\x73\x68\x65\x64","\x61\x64\x64\x50\x69\x70\x65","\x73\x70\x6C\x69\x63\x65","\x76\x65\x72\x74\x69\x63\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x73\x6E\x61\x70\x54\x6F\x54\x65\x72\x6D\x69\x6E\x61\x6C\x73","\x73\x68\x6F\x75\x6C\x64\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x69\x73\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x72\x65\x6C\x61\x74\x69\x76\x65","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x41\x6C\x74\x44\x6F\x77\x6E","\x61\x64\x64\x49\x74\x65\x6D","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x63\x6F\x6E\x73\x75\x6D\x65","\x67\x65\x74\x49\x6E\x69\x74\x69\x61\x6C\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x69\x73\x44\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x44\x65\x6C\x61\x79\x65\x64","\x67\x65\x74\x43\x65\x6C\x6C","\x63\x65\x6C\x6C","\x67\x65\x74\x45\x76\x65\x6E\x74","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x46\x6F\x72\x50\x6F\x70\x75\x70\x45\x76\x65\x6E\x74","\x65\x64\x69\x74","\x67\x65\x74\x50\x72\x6F\x70\x65\x72\x74\x79","\x75\x6E\x64\x6F\x61\x62\x6C\x65\x45\x64\x69\x74\x48\x61\x70\x70\x65\x6E\x65\x64","\x67\x65\x74\x56\x69\x65\x77","\x63\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x53\x74\x61\x74\x65","\x70\x75\x73\x68","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x2F\x67\x65\x6E\x65\x72\x61\x6C\x2E\x78\x6D\x6C","\x6C\x6F\x61\x64\x53\x74\x65\x6E\x63\x69\x6C\x53\x65\x74","\x6C\x69\x62\x72\x61\x72\x69\x65\x73","\x70\x61\x63\x6B\x61\x67\x65\x73","\x67\x65\x74\x53\x74\x65\x6E\x63\x69\x6C","\x73\x74\x65\x6E\x63\x69\x6C\x73","\x67\x65\x74\x42\x61\x73\x65\x6E\x61\x6D\x65\x46\x6F\x72\x53\x74\x65\x6E\x63\x69\x6C","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x2E\x6A\x73","\x6C\x6F\x61\x64","\x67\x65\x74\x54\x65\x78\x74","\x2F","\x2E","\x73\x70\x6C\x69\x74","\x6D\x78\x67\x72\x61\x70\x68","\x67\x65\x74\x58\x6D\x6C","\x70\x61\x72\x73\x65\x53\x74\x65\x6E\x63\x69\x6C\x53\x65\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x6E\x61\x6D\x65","\x6E\x6F\x64\x65\x54\x79\x70\x65","\x4E\x4F\x44\x45\x54\x59\x50\x45\x5F\x45\x4C\x45\x4D\x45\x4E\x54","\x5F","\x72\x65\x70\x6C\x61\x63\x65","\x61\x64\x64\x53\x74\x65\x6E\x63\x69\x6C","\x77","\x68","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x70\x72\x6F\x64\x75\x63\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65\x72","\x64\x6F\x6E\x65","\x73\x65\x74\x43\x6F\x6E\x73\x75\x6D\x65\x72","\x65\x78\x65\x63\x75\x74\x65","\x73\x65\x74\x44\x61\x74\x61","\x64\x61\x74\x61","\x65\x72\x72\x6F\x72","\x63\x61\x6E\x63\x65\x6C","\x61\x6C\x65\x72\x74"];var useLocalStorage=(mxClient[_0x991c[0]]|| urlParams[_0x991c[1]]== _0x991c[2])&& typeof (localStorage)!= _0x991c[3];var fileSupport=window[_0x991c[4]]!= null&& window[_0x991c[5]]!= null&& window[_0x991c[6]]!= null;var touchStyle=mxClient[_0x991c[0]]|| urlParams[_0x991c[7]]== _0x991c[8];var counter=0;try{var op=window;while(op[_0x991c[9]]!= null&& !isNaN(op[_0x991c[9]][_0x991c[10]])){op= op[_0x991c[9]]};if(op!= null){op[_0x991c[10]]++;counter= op[_0x991c[10]]}}catch(e){};Editor= function(){mxEventSource[_0x991c[11]](this);this[_0x991c[12]]();this[_0x991c[13]]();this[_0x991c[14]]= new Graph();this[_0x991c[15]]= new mxOutline(this[_0x991c[14]]);this[_0x991c[15]][_0x991c[16]]= true;this[_0x991c[17]]= this[_0x991c[18]]();this[_0x991c[19]]= _0x991c[20];this[_0x991c[21]]= null;this[_0x991c[22]]= function(){return this[_0x991c[21]]|| mxResources[_0x991c[24]](_0x991c[23],[counter])+ _0x991c[25]};this[_0x991c[26]]= function(){return this[_0x991c[21]]};this[_0x991c[27]]= function(_0x9cf5x6){this[_0x991c[19]]= _0x9cf5x6;this[_0x991c[29]]( new mxEventObject(_0x991c[28]))};this[_0x991c[30]]= function(){return this[_0x991c[19]]};this[_0x991c[31]]= false;this[_0x991c[32]]= function(){this[_0x991c[31]]= true};this[_0x991c[14]][_0x991c[36]]()[_0x991c[35]](mxEvent.CHANGE,mxUtils[_0x991c[34]](this,function(){this[_0x991c[32]][_0x991c[33]](this,arguments)}));window[_0x991c[37]]= mxUtils[_0x991c[34]](this,function(){if(this[_0x991c[31]]){return mxResources[_0x991c[24]](_0x991c[38])}});this[_0x991c[14]][_0x991c[39]]= false;this[_0x991c[14]][_0x991c[40]]= true;this[_0x991c[14]][_0x991c[41]]= null};mxUtils[_0x991c[42]](Editor,mxEventSource);Editor[_0x991c[44]][_0x991c[43]]= IMAGE_PATH+ _0x991c[45];Editor[_0x991c[44]][_0x991c[46]]= IMAGE_PATH+ _0x991c[47];Editor[_0x991c[44]][_0x991c[48]]= function(_0x9cf5x7){var _0x9cf5x8= new mxCodec(_0x9cf5x7[_0x991c[49]]);if(_0x9cf5x7[_0x991c[50]]== _0x991c[51]){this[_0x991c[14]][_0x991c[53]][_0x991c[52]]= 1;this[_0x991c[14]][_0x991c[54]]= _0x9cf5x7[_0x991c[56]](_0x991c[55])!= _0x991c[57];this[_0x991c[14]][_0x991c[59]][_0x991c[58]]= _0x9cf5x7[_0x991c[56]](_0x991c[60])!= _0x991c[57];this[_0x991c[14]][_0x991c[62]](_0x9cf5x7[_0x991c[56]](_0x991c[61])!= _0x991c[57]);this[_0x991c[14]][_0x991c[64]](_0x9cf5x7[_0x991c[56]](_0x991c[63])!= _0x991c[57]);this[_0x991c[14]][_0x991c[65]]= _0x9cf5x7[_0x991c[56]](_0x991c[66])!= _0x991c[57];this[_0x991c[14]][_0x991c[40]]= _0x9cf5x7[_0x991c[56]](_0x991c[40])!= _0x991c[57];if(!this[_0x991c[14]][_0x991c[40]]){this[_0x991c[14]][_0x991c[68]][_0x991c[67]]= 0;this[_0x991c[14]][_0x991c[68]][_0x991c[69]]= 0;this[_0x991c[14]][_0x991c[53]][_0x991c[71]][_0x991c[70]]= Number(_0x9cf5x7[_0x991c[56]](_0x991c[72])|| 0);this[_0x991c[14]][_0x991c[53]][_0x991c[71]][_0x991c[73]]= Number(_0x9cf5x7[_0x991c[56]](_0x991c[74])|| 0)};this[_0x991c[14]][_0x991c[75]]= _0x9cf5x7[_0x991c[56]](_0x991c[76])== _0x991c[8];this[_0x991c[14]][_0x991c[77]]= this[_0x991c[14]][_0x991c[75]];this[_0x991c[14]][_0x991c[78]]= this[_0x991c[14]][_0x991c[77]];var _0x9cf5x9=_0x9cf5x7[_0x991c[56]](_0x991c[79]);if(_0x9cf5x9!= null){this[_0x991c[14]][_0x991c[79]]= _0x9cf5x9}else {this[_0x991c[14]][_0x991c[79]]= 1.5};var _0x9cf5xa=_0x9cf5x7[_0x991c[56]](_0x991c[80]);var _0x9cf5xb=_0x9cf5x7[_0x991c[56]](_0x991c[81]);if(_0x9cf5xa!= null&& _0x9cf5xb!= null){this[_0x991c[14]][_0x991c[82]]= new mxRectangle(0,0,parseFloat(_0x9cf5xa),parseFloat(_0x9cf5xb));this[_0x991c[15]][_0x991c[15]][_0x991c[82]]= this[_0x991c[14]][_0x991c[82]]};var _0x9cf5xc=_0x9cf5x7[_0x991c[56]](_0x991c[41]);if(_0x9cf5xc!= null&& _0x9cf5xc[_0x991c[83]]> 0){this[_0x991c[14]][_0x991c[41]]= _0x9cf5xc};_0x9cf5x8[_0x991c[84]](_0x9cf5x7,this[_0x991c[14]][_0x991c[36]]());this[_0x991c[85]]()}};Editor[_0x991c[44]][_0x991c[86]]= function(){var _0x9cf5xd= new mxCodec(mxUtils[_0x991c[87]]());var _0x9cf5x7=_0x9cf5xd[_0x991c[88]](this[_0x991c[14]][_0x991c[36]]());if(this[_0x991c[14]][_0x991c[53]][_0x991c[71]][_0x991c[70]]!= 0|| this[_0x991c[14]][_0x991c[53]][_0x991c[71]][_0x991c[73]]!= 0){_0x9cf5x7[_0x991c[90]](_0x991c[72],Math[_0x991c[89]](this[_0x991c[14]][_0x991c[53]][_0x991c[71]][_0x991c[70]]* 100)/ 100);_0x9cf5x7[_0x991c[90]](_0x991c[74],Math[_0x991c[89]](this[_0x991c[14]][_0x991c[53]][_0x991c[71]][_0x991c[73]]* 100)/ 100)};_0x9cf5x7[_0x991c[90]](_0x991c[55],(this[_0x991c[14]][_0x991c[91]]())?_0x991c[8]:_0x991c[57]);_0x9cf5x7[_0x991c[90]](_0x991c[60],(this[_0x991c[14]][_0x991c[59]][_0x991c[58]])?_0x991c[8]:_0x991c[57]);_0x9cf5x7[_0x991c[90]](_0x991c[60],(this[_0x991c[14]][_0x991c[59]][_0x991c[58]])?_0x991c[8]:_0x991c[57]);_0x9cf5x7[_0x991c[90]](_0x991c[61],(this[_0x991c[14]][_0x991c[93]][_0x991c[92]]())?_0x991c[8]:_0x991c[57]);_0x9cf5x7[_0x991c[90]](_0x991c[63],(this[_0x991c[14]][_0x991c[94]][_0x991c[92]]())?_0x991c[8]:_0x991c[57]);_0x9cf5x7[_0x991c[90]](_0x991c[66],(this[_0x991c[14]][_0x991c[65]])?_0x991c[8]:_0x991c[57]);_0x9cf5x7[_0x991c[90]](_0x991c[76],(this[_0x991c[14]][_0x991c[75]])?_0x991c[8]:_0x991c[57]);_0x9cf5x7[_0x991c[90]](_0x991c[79],this[_0x991c[14]][_0x991c[79]]);_0x9cf5x7[_0x991c[90]](_0x991c[80],this[_0x991c[14]][_0x991c[82]][_0x991c[95]]);_0x9cf5x7[_0x991c[90]](_0x991c[81],this[_0x991c[14]][_0x991c[82]][_0x991c[96]]);if(!this[_0x991c[14]][_0x991c[40]]){_0x9cf5x7[_0x991c[90]](_0x991c[40],_0x991c[57])};if(this[_0x991c[14]][_0x991c[41]]!= null){_0x9cf5x7[_0x991c[90]](_0x991c[41],this[_0x991c[14]][_0x991c[41]])};return _0x9cf5x7};Editor[_0x991c[44]][_0x991c[85]]= function(){var _0x9cf5xe=this[_0x991c[14]];var _0x9cf5xf=this[_0x991c[15]];if(_0x9cf5xe[_0x991c[68]]!= null&& _0x9cf5xf[_0x991c[15]][_0x991c[68]]!= null){if(_0x9cf5xe[_0x991c[41]]!= null){if(_0x9cf5xe[_0x991c[41]]== _0x991c[97]){_0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[98]]= _0x991c[100]}else {if(_0x9cf5xe[_0x991c[53]][_0x991c[101]]!= null){_0x9cf5xe[_0x991c[53]][_0x991c[101]][_0x991c[102]]= _0x9cf5xe[_0x991c[41]];_0x9cf5xe[_0x991c[53]][_0x991c[101]][_0x991c[103]]()};_0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[98]]= _0x9cf5xe[_0x991c[41]]}}else {_0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[98]]= _0x991c[20]};if(_0x9cf5xe[_0x991c[75]]){_0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[98]]= _0x991c[104];_0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[105]]= _0x991c[106];_0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[107]]= _0x991c[108];_0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[109]]= _0x991c[110];_0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[111]]= _0x991c[110];_0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[112]]= _0x991c[113];_0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[114]]= _0x991c[113]}else {_0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[115]]= _0x991c[20]};_0x9cf5xf[_0x991c[15]][_0x991c[68]][_0x991c[99]][_0x991c[98]]= _0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[98]];if(_0x9cf5xf[_0x991c[15]][_0x991c[75]]!= _0x9cf5xe[_0x991c[75]]|| _0x9cf5xf[_0x991c[15]][_0x991c[79]]!= _0x9cf5xe[_0x991c[79]]){_0x9cf5xf[_0x991c[15]][_0x991c[79]]= _0x9cf5xe[_0x991c[79]];_0x9cf5xf[_0x991c[15]][_0x991c[75]]= _0x9cf5xe[_0x991c[75]];_0x9cf5xf[_0x991c[15]][_0x991c[53]][_0x991c[116]]()};if(_0x9cf5xe[_0x991c[40]]&& _0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[117]]== _0x991c[118]&& !touchStyle){_0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[117]]= _0x991c[119]}else {if(!_0x9cf5xe[_0x991c[40]]|| touchStyle){_0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[117]]= _0x991c[118]}};var _0x9cf5x10=(mxClient[_0x991c[120]]&& document[_0x991c[121]]>= 9)?_0x991c[122]+ this[_0x991c[46]]+ _0x991c[123]:_0x991c[97];_0x9cf5xe[_0x991c[68]][_0x991c[99]][_0x991c[124]]= (!_0x9cf5xe[_0x991c[75]]&& _0x9cf5xe[_0x991c[91]]())?_0x991c[122]+ this[_0x991c[43]]+ _0x991c[123]:_0x9cf5x10;if(_0x9cf5xe[_0x991c[53]][_0x991c[101]]!= null){_0x9cf5xe[_0x991c[53]][_0x991c[101]][_0x991c[125]][_0x991c[99]][_0x991c[124]]= (this[_0x991c[14]][_0x991c[91]]())?_0x991c[122]+ this[_0x991c[43]]+ _0x991c[123]:_0x991c[97]}}};Editor[_0x991c[44]][_0x991c[12]]= function(){if(mxClient[_0x991c[126]]){mxClient[_0x991c[129]](_0x991c[127],CSS_PATH+ _0x991c[128])};mxResources[_0x991c[130]]= false;mxResources[_0x991c[131]](RESOURCE_BASE);mxConstants[_0x991c[132]]= 0.3;var _0x9cf5x11=mxConnectionHandler[_0x991c[44]][_0x991c[133]];mxConnectionHandler[_0x991c[44]][_0x991c[133]]= function(){var _0x9cf5x12=_0x9cf5x11[_0x991c[33]](this,arguments);_0x9cf5x12[_0x991c[134]]= mxUtils[_0x991c[34]](this,function(_0x9cf5x13,_0x9cf5x14){if(this[_0x991c[135]]()){return true};return mxCellMarker[_0x991c[44]][_0x991c[134]][_0x991c[33]](_0x9cf5x12,arguments)});return _0x9cf5x12};mxConstants[_0x991c[136]]= _0x991c[137];mxConstants[_0x991c[138]]= _0x991c[139];mxConstants[_0x991c[140]]= _0x991c[141];mxConstants[_0x991c[142]]= _0x991c[143];mxConstants[_0x991c[144]]= _0x991c[143];mxConstants[_0x991c[145]]= _0x991c[139];mxConstants[_0x991c[146]]= _0x991c[143];mxConstants[_0x991c[147]]= _0x991c[148];mxConstants[_0x991c[149]]= _0x991c[143];mxConstants[_0x991c[150]]= _0x991c[143];mxConstants[_0x991c[151]]= _0x991c[148];mxConstants[_0x991c[152]]= _0x991c[141];mxGraph[_0x991c[44]][_0x991c[153]]= _0x991c[154];mxGraph[_0x991c[44]][_0x991c[79]]= 1;mxRubberband[_0x991c[44]][_0x991c[155]]= 30;mxGraphView[_0x991c[44]][_0x991c[156]]= function(_0x9cf5x15){return new mxRectangleShape(_0x9cf5x15,this[_0x991c[14]][_0x991c[41]]|| _0x991c[157],_0x991c[158])};mxGraphView[_0x991c[44]][_0x991c[159]]= function(){var _0x9cf5x16=this[_0x991c[160]]();var _0x9cf5x17=(_0x9cf5x16[_0x991c[95]]> 0)?_0x9cf5x16[_0x991c[70]]/ this[_0x991c[52]]- this[_0x991c[71]][_0x991c[70]]:0;var _0x9cf5x18=(_0x9cf5x16[_0x991c[96]]> 0)?_0x9cf5x16[_0x991c[73]]/ this[_0x991c[52]]- this[_0x991c[71]][_0x991c[73]]:0;var _0x9cf5x19=_0x9cf5x16[_0x991c[95]]/ this[_0x991c[52]];var _0x9cf5x1a=_0x9cf5x16[_0x991c[96]]/ this[_0x991c[52]];var _0x9cf5x1b=this[_0x991c[14]][_0x991c[82]];var _0x9cf5x9=this[_0x991c[14]][_0x991c[79]];var _0x9cf5xa=_0x9cf5x1b[_0x991c[95]]* _0x9cf5x9;var _0x9cf5xb=_0x9cf5x1b[_0x991c[96]]* _0x9cf5x9;var _0x9cf5x1c=Math[_0x991c[162]](Math[_0x991c[161]](0,_0x9cf5x17)/ _0x9cf5xa);var _0x9cf5x1d=Math[_0x991c[162]](Math[_0x991c[161]](0,_0x9cf5x18)/ _0x9cf5xb);var _0x9cf5x1e=Math[_0x991c[164]](Math[_0x991c[163]](1,_0x9cf5x17+ _0x9cf5x19)/ _0x9cf5xa);var _0x9cf5x1f=Math[_0x991c[164]](Math[_0x991c[163]](1,_0x9cf5x18+ _0x9cf5x1a)/ _0x9cf5xb);var _0x9cf5x20=_0x9cf5x1e- _0x9cf5x1c;var _0x9cf5x21=_0x9cf5x1f- _0x9cf5x1d;var _0x9cf5x15= new mxRectangle(this[_0x991c[52]]* (this[_0x991c[71]][_0x991c[70]]+ _0x9cf5x1c* _0x9cf5xa),this[_0x991c[52]]* (this[_0x991c[71]][_0x991c[73]]+ _0x9cf5x1d* _0x9cf5xb),this[_0x991c[52]]* _0x9cf5x20* _0x9cf5xa,this[_0x991c[52]]* _0x9cf5x21* _0x9cf5xb);return _0x9cf5x15};var _0x9cf5x22=mxGraph[_0x991c[44]][_0x991c[165]];mxGraph[_0x991c[44]][_0x991c[165]]= function(_0x9cf5x23,_0x9cf5x24){_0x9cf5x22[_0x991c[33]](this,arguments);if((this[_0x991c[166]]!= mxConstants[_0x991c[167]]&& this[_0x991c[53]][_0x991c[101]]!= null)&& (!this[_0x991c[168]]|| !mxUtils[_0x991c[169]](this[_0x991c[68]]))){this[_0x991c[53]][_0x991c[101]][_0x991c[125]][_0x991c[99]][_0x991c[170]]= _0x9cf5x23+ _0x991c[171];this[_0x991c[53]][_0x991c[101]][_0x991c[125]][_0x991c[99]][_0x991c[172]]= _0x9cf5x24+ _0x991c[171]}};var _0x9cf5x25=this;mxGraphView[_0x991c[44]][_0x991c[173]]= function(){var _0x9cf5xc=this[_0x991c[14]][_0x991c[174]]();if(_0x9cf5xc!= null){if(this[_0x991c[124]]== null|| this[_0x991c[124]][_0x991c[175]]!= _0x9cf5xc[_0x991c[176]]){if(this[_0x991c[124]]!= null){this[_0x991c[124]][_0x991c[177]]()};var _0x9cf5x15= new mxRectangle(0,0,1,1);this[_0x991c[124]]= new mxImageShape(_0x9cf5x15,_0x9cf5xc[_0x991c[176]]);this[_0x991c[124]][_0x991c[166]]= this[_0x991c[14]][_0x991c[166]];this[_0x991c[124]][_0x991c[12]](this[_0x991c[178]]);this[_0x991c[124]][_0x991c[179]]()};this[_0x991c[180]](this[_0x991c[124]],_0x9cf5xc)}else {if(this[_0x991c[124]]!= null){this[_0x991c[124]][_0x991c[177]]();this[_0x991c[124]]= null}};if(this[_0x991c[14]][_0x991c[75]]){var _0x9cf5x15=this[_0x991c[159]]();if(this[_0x991c[101]]== null){this[_0x991c[101]]= this[_0x991c[156]](_0x9cf5x15);this[_0x991c[101]][_0x991c[52]]= 1;this[_0x991c[101]][_0x991c[181]]= true;this[_0x991c[101]][_0x991c[166]]= mxConstants[_0x991c[182]];this[_0x991c[101]][_0x991c[12]](this[_0x991c[14]][_0x991c[68]]);this[_0x991c[14]][_0x991c[68]][_0x991c[184]][_0x991c[99]][_0x991c[183]]= _0x991c[185];this[_0x991c[14]][_0x991c[68]][_0x991c[186]](this[_0x991c[101]][_0x991c[125]],this[_0x991c[14]][_0x991c[68]][_0x991c[184]]);this[_0x991c[101]][_0x991c[179]]();this[_0x991c[101]][_0x991c[125]][_0x991c[187]]= _0x991c[188];this[_0x991c[101]][_0x991c[125]][_0x991c[99]][_0x991c[189]]= _0x991c[190];mxEvent[_0x991c[35]](this[_0x991c[101]][_0x991c[125]],_0x991c[191],mxUtils[_0x991c[34]](this,function(_0x9cf5x14){this[_0x991c[14]][_0x991c[192]](_0x9cf5x14)}));mxEvent[_0x991c[198]](this[_0x991c[101]][_0x991c[125]],mxUtils[_0x991c[34]](this,function(_0x9cf5x14){this[_0x991c[14]][_0x991c[193]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x9cf5x14))}),mxUtils[_0x991c[34]](this,function(_0x9cf5x14){if(this[_0x991c[14]][_0x991c[93]]!= null&& this[_0x991c[14]][_0x991c[93]][_0x991c[194]]()){this[_0x991c[14]][_0x991c[93]][_0x991c[195]]()};if(this[_0x991c[14]][_0x991c[196]]&& !mxEvent[_0x991c[197]](_0x9cf5x14)){this[_0x991c[14]][_0x991c[193]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x9cf5x14))}}),mxUtils[_0x991c[34]](this,function(_0x9cf5x14){this[_0x991c[14]][_0x991c[193]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x9cf5x14))}))}else {this[_0x991c[101]][_0x991c[52]]= 1;this[_0x991c[101]][_0x991c[199]]= _0x9cf5x15;this[_0x991c[101]][_0x991c[179]]()};this[_0x991c[101]][_0x991c[125]][_0x991c[99]][_0x991c[124]]= (this[_0x991c[14]][_0x991c[91]]())?_0x991c[122]+ _0x9cf5x25[_0x991c[43]]+ _0x991c[123]:_0x991c[97]}else {if(this[_0x991c[101]]!= null){this[_0x991c[101]][_0x991c[177]]();this[_0x991c[101]]= null}}};mxGraph[_0x991c[44]][_0x991c[200]]= function(_0x9cf5x26,_0x9cf5x27,_0x9cf5x28){var _0x9cf5x29=this[_0x991c[53]][_0x991c[52]];var _0x9cf5x2a=this[_0x991c[53]][_0x991c[71]];var _0x9cf5x1b=this[_0x991c[82]];var _0x9cf5x9=_0x9cf5x29* this[_0x991c[79]];var _0x9cf5x2b=this[_0x991c[53]][_0x991c[159]]();_0x9cf5x27= _0x9cf5x2b[_0x991c[95]];_0x9cf5x28= _0x9cf5x2b[_0x991c[96]];var _0x9cf5x15= new mxRectangle(_0x9cf5x29* _0x9cf5x2a[_0x991c[70]],_0x9cf5x29* _0x9cf5x2a[_0x991c[73]],_0x9cf5x1b[_0x991c[95]]* _0x9cf5x9,_0x9cf5x1b[_0x991c[96]]* _0x9cf5x9);_0x9cf5x26= _0x9cf5x26&& Math[_0x991c[161]](_0x9cf5x15[_0x991c[95]],_0x9cf5x15[_0x991c[96]])> this[_0x991c[201]];var _0x9cf5x2c=(_0x9cf5x26)?Math[_0x991c[164]](_0x9cf5x27/ _0x9cf5x15[_0x991c[95]])- 1:0;var _0x9cf5x2d=(_0x9cf5x26)?Math[_0x991c[164]](_0x9cf5x28/ _0x9cf5x15[_0x991c[96]])- 1:0;var _0x9cf5x2e=_0x9cf5x2b[_0x991c[70]]+ _0x9cf5x27;var _0x9cf5x2f=_0x9cf5x2b[_0x991c[73]]+ _0x9cf5x28;if(this[_0x991c[202]]== null&& _0x9cf5x2c> 0){this[_0x991c[202]]= []};if(this[_0x991c[202]]!= null){for(var _0x9cf5x30=0;_0x9cf5x30<= _0x9cf5x2c;_0x9cf5x30++){var _0x9cf5x31=[ new mxPoint(_0x9cf5x2b[_0x991c[70]]+ (_0x9cf5x30+ 1)* _0x9cf5x15[_0x991c[95]],_0x9cf5x2b[_0x991c[73]]), new mxPoint(_0x9cf5x2b[_0x991c[70]]+ (_0x9cf5x30+ 1)* _0x9cf5x15[_0x991c[95]],_0x9cf5x2f)];if(this[_0x991c[202]][_0x9cf5x30]!= null){this[_0x991c[202]][_0x9cf5x30][_0x991c[52]]= 1;this[_0x991c[202]][_0x9cf5x30][_0x991c[203]]= _0x9cf5x31;this[_0x991c[202]][_0x9cf5x30][_0x991c[179]]()}else {var _0x9cf5x32= new mxPolyline(_0x9cf5x31,this[_0x991c[153]],this[_0x991c[52]]);_0x9cf5x32[_0x991c[166]]= this[_0x991c[166]];_0x9cf5x32[_0x991c[204]]= this[_0x991c[205]];_0x9cf5x32[_0x991c[206]]= false;_0x9cf5x32[_0x991c[52]]= _0x9cf5x29;_0x9cf5x32[_0x991c[12]](this[_0x991c[53]][_0x991c[178]]);_0x9cf5x32[_0x991c[179]]();this[_0x991c[202]][_0x9cf5x30]= _0x9cf5x32}};for(var _0x9cf5x30=_0x9cf5x2c;_0x9cf5x30< this[_0x991c[202]][_0x991c[83]];_0x9cf5x30++){this[_0x991c[202]][_0x9cf5x30][_0x991c[177]]()};this[_0x991c[202]][_0x991c[207]](_0x9cf5x2c,this[_0x991c[202]][_0x991c[83]]- _0x9cf5x2c)};if(this[_0x991c[208]]== null&& _0x9cf5x2d> 0){this[_0x991c[208]]= []};if(this[_0x991c[208]]!= null){for(var _0x9cf5x30=0;_0x9cf5x30<= _0x9cf5x2d;_0x9cf5x30++){var _0x9cf5x31=[ new mxPoint(_0x9cf5x2b[_0x991c[70]],_0x9cf5x2b[_0x991c[73]]+ (_0x9cf5x30+ 1)* _0x9cf5x15[_0x991c[96]]), new mxPoint(_0x9cf5x2e,_0x9cf5x2b[_0x991c[73]]+ (_0x9cf5x30+ 1)* _0x9cf5x15[_0x991c[96]])];if(this[_0x991c[208]][_0x9cf5x30]!= null){this[_0x991c[208]][_0x9cf5x30][_0x991c[52]]= 1;this[_0x991c[208]][_0x9cf5x30][_0x991c[203]]= _0x9cf5x31;this[_0x991c[208]][_0x9cf5x30][_0x991c[179]]()}else {var _0x9cf5x32= new mxPolyline(_0x9cf5x31,this[_0x991c[153]],_0x9cf5x29);_0x9cf5x32[_0x991c[166]]= this[_0x991c[166]];_0x9cf5x32[_0x991c[204]]= this[_0x991c[205]];_0x9cf5x32[_0x991c[206]]= false;_0x9cf5x32[_0x991c[52]]= _0x9cf5x29;_0x9cf5x32[_0x991c[12]](this[_0x991c[53]][_0x991c[178]]);_0x9cf5x32[_0x991c[179]]();this[_0x991c[208]][_0x9cf5x30]= _0x9cf5x32}};for(var _0x9cf5x30=_0x9cf5x2d;_0x9cf5x30< this[_0x991c[208]][_0x991c[83]];_0x9cf5x30++){this[_0x991c[208]][_0x9cf5x30][_0x991c[177]]()};this[_0x991c[208]][_0x991c[207]](_0x9cf5x2d,this[_0x991c[208]][_0x991c[83]]- _0x9cf5x2d)}};mxEdgeHandler[_0x991c[44]][_0x991c[209]]= true;mxGraphHandler[_0x991c[44]][_0x991c[58]]= true;var _0x9cf5x33=mxGraphHandler[_0x991c[44]][_0x991c[210]];mxGraphHandler[_0x991c[44]][_0x991c[210]]= function(_0x9cf5x34,_0x9cf5x35,_0x9cf5x14){for(var _0x9cf5x30=0;_0x9cf5x30< _0x9cf5x35[_0x991c[83]];_0x9cf5x30++){if(this[_0x991c[14]][_0x991c[36]]()[_0x991c[211]](_0x9cf5x35[_0x9cf5x30])){var _0x9cf5x36=this[_0x991c[14]][_0x991c[212]](_0x9cf5x35[_0x9cf5x30]);if(_0x9cf5x36!= null&& _0x9cf5x36[_0x991c[213]]){return false}}};return _0x9cf5x33[_0x991c[33]](this,arguments)};mxGuide[_0x991c[44]][_0x991c[214]]= function(_0x9cf5x14){return !mxEvent[_0x991c[215]](_0x9cf5x14)};mxPopupMenuAddItem= mxPopupMenu[_0x991c[44]][_0x991c[216]];mxPopupMenu[_0x991c[44]][_0x991c[216]]= function(_0x9cf5x37,_0x9cf5x38,_0x9cf5x39,_0x9cf5x34,_0x9cf5x3a,_0x9cf5x3b){var _0x9cf5x3c=mxPopupMenuAddItem[_0x991c[33]](this,arguments);if(_0x9cf5x3b!= null&& !_0x9cf5x3b){mxEvent[_0x991c[35]](_0x9cf5x3c,_0x991c[217],function(_0x9cf5x14){mxEvent[_0x991c[218]](_0x9cf5x14)})};return _0x9cf5x3c};var _0x9cf5x3d=mxGraphHandler[_0x991c[44]][_0x991c[219]];mxGraphHandler[_0x991c[44]][_0x991c[219]]= function(_0x9cf5x3e){var _0x9cf5x3f=this[_0x991c[14]][_0x991c[36]]();var _0x9cf5x40=_0x9cf5x3f[_0x991c[221]](this[_0x991c[14]][_0x991c[220]]());var _0x9cf5x41=_0x9cf5x3d[_0x991c[33]](this,arguments);var _0x9cf5x34=_0x9cf5x3f[_0x991c[221]](_0x9cf5x41);if(_0x9cf5x40== null|| (_0x9cf5x40!= _0x9cf5x41&& _0x9cf5x40!= _0x9cf5x34)){while(!this[_0x991c[14]][_0x991c[222]](_0x9cf5x41)&& !this[_0x991c[14]][_0x991c[222]](_0x9cf5x34)&& _0x9cf5x3f[_0x991c[211]](_0x9cf5x34)&& !this[_0x991c[14]][_0x991c[223]](_0x9cf5x34)){_0x9cf5x41= _0x9cf5x34;_0x9cf5x34= this[_0x991c[14]][_0x991c[36]]()[_0x991c[221]](_0x9cf5x41)}};return _0x9cf5x41};var _0x9cf5x42=mxGraphHandler[_0x991c[44]][_0x991c[224]];mxGraphHandler[_0x991c[44]][_0x991c[224]]= function(_0x9cf5x41){var _0x9cf5x3c=_0x9cf5x42[_0x991c[33]](this,arguments);var _0x9cf5x3f=this[_0x991c[14]][_0x991c[36]]();var _0x9cf5x40=_0x9cf5x3f[_0x991c[221]](this[_0x991c[14]][_0x991c[220]]());var _0x9cf5x34=_0x9cf5x3f[_0x991c[221]](_0x9cf5x41);if(_0x9cf5x40== null|| (_0x9cf5x40!= _0x9cf5x41&& _0x9cf5x40!= _0x9cf5x34)){if(!this[_0x991c[14]][_0x991c[222]](_0x9cf5x41)&& _0x9cf5x3f[_0x991c[211]](_0x9cf5x34)&& !this[_0x991c[14]][_0x991c[223]](_0x9cf5x34)){_0x9cf5x3c= true}};return _0x9cf5x3c};mxGraphHandler[_0x991c[44]][_0x991c[225]]= function(_0x9cf5x3e){var _0x9cf5x41=_0x9cf5x3e[_0x991c[226]]();if(_0x9cf5x41== null){_0x9cf5x41= this[_0x991c[227]]};var _0x9cf5x3f=this[_0x991c[14]][_0x991c[36]]();var _0x9cf5x34=_0x9cf5x3f[_0x991c[221]](_0x9cf5x41);while(this[_0x991c[14]][_0x991c[222]](_0x9cf5x41)&& _0x9cf5x3f[_0x991c[211]](_0x9cf5x34)&& !this[_0x991c[14]][_0x991c[223]](_0x9cf5x34)){_0x9cf5x41= _0x9cf5x34;_0x9cf5x34= _0x9cf5x3f[_0x991c[221]](_0x9cf5x41)};this[_0x991c[14]][_0x991c[229]](_0x9cf5x41,_0x9cf5x3e[_0x991c[228]]())};mxPanningHandler[_0x991c[44]][_0x991c[230]]= function(_0x9cf5x3e){var _0x9cf5x41=_0x9cf5x3e[_0x991c[226]]();var _0x9cf5x3f=this[_0x991c[14]][_0x991c[36]]();var _0x9cf5x34=_0x9cf5x3f[_0x991c[221]](_0x9cf5x41);while(_0x9cf5x3f[_0x991c[211]](_0x9cf5x34)&& !this[_0x991c[14]][_0x991c[223]](_0x9cf5x34)){if(this[_0x991c[14]][_0x991c[222]](_0x9cf5x34)){_0x9cf5x41= _0x9cf5x34};_0x9cf5x34= _0x9cf5x3f[_0x991c[221]](_0x9cf5x34)};return _0x9cf5x41}};Editor[_0x991c[44]][_0x991c[18]]= function(){var _0x9cf5xe=this[_0x991c[14]];var _0x9cf5x43= new mxUndoManager();var _0x9cf5x44=function(_0x9cf5x45,_0x9cf5x14){_0x9cf5x43[_0x991c[233]](_0x9cf5x14[_0x991c[232]](_0x991c[231]))};_0x9cf5xe[_0x991c[36]]()[_0x991c[35]](mxEvent.UNDO,_0x9cf5x44);_0x9cf5xe[_0x991c[234]]()[_0x991c[35]](mxEvent.UNDO,_0x9cf5x44);var _0x9cf5x46=function(_0x9cf5x45,_0x9cf5x14){var _0x9cf5x47=_0x9cf5xe[_0x991c[236]](_0x9cf5x14[_0x991c[232]](_0x991c[231])[_0x991c[235]]);var _0x9cf5x35=[];for(var _0x9cf5x30=1;_0x9cf5x30< _0x9cf5x47[_0x991c[83]];_0x9cf5x30++){if(_0x9cf5xe[_0x991c[53]][_0x991c[237]](_0x9cf5x47[_0x9cf5x30])!= null){_0x9cf5x35[_0x991c[238]](_0x9cf5x47[_0x9cf5x30])}};_0x9cf5xe[_0x991c[239]](_0x9cf5x35)};_0x9cf5x43[_0x991c[35]](mxEvent.UNDO,_0x9cf5x46);_0x9cf5x43[_0x991c[35]](mxEvent.REDO,_0x9cf5x46);return _0x9cf5x43};Editor[_0x991c[44]][_0x991c[13]]= function(){mxStencilRegistry[_0x991c[241]](STENCIL_PATH+ _0x991c[240])};(function(){mxStencilRegistry[_0x991c[242]]= {};mxStencilRegistry[_0x991c[243]]= [];mxStencilRegistry[_0x991c[244]]= function(_0x9cf5x48){var _0x9cf5x3c=mxStencilRegistry[_0x991c[245]][_0x9cf5x48];if(_0x9cf5x3c== null){var _0x9cf5x49=mxStencilRegistry[_0x991c[246]](_0x9cf5x48);if(_0x9cf5x49!= null){var _0x9cf5x4a=mxStencilRegistry[_0x991c[242]][_0x9cf5x49];if(_0x9cf5x4a!= null){if(mxStencilRegistry[_0x991c[243]][_0x9cf5x49]== null){mxStencilRegistry[_0x991c[243]][_0x9cf5x49]= 1;for(var _0x9cf5x30=0;_0x9cf5x30< _0x9cf5x4a[_0x991c[83]];_0x9cf5x30++){var _0x9cf5x4b=_0x9cf5x4a[_0x9cf5x30];if(_0x9cf5x4b[_0x991c[248]]()[_0x991c[247]](_0x9cf5x4b[_0x991c[83]]- 4,_0x9cf5x4b[_0x991c[83]])== _0x991c[25]){mxStencilRegistry[_0x991c[241]](_0x9cf5x4b,null)}else {if(_0x9cf5x4b[_0x991c[248]]()[_0x991c[247]](_0x9cf5x4b[_0x991c[83]]- 3,_0x9cf5x4b[_0x991c[83]])== _0x991c[249]){var _0x9cf5x4c=mxUtils[_0x991c[250]](_0x9cf5x4b);if(_0x9cf5x4c!= null){eval[_0x991c[11]](window,_0x9cf5x4c[_0x991c[251]]())}}else {}}}}}else {mxStencilRegistry[_0x991c[241]](STENCIL_PATH+ _0x991c[252]+ _0x9cf5x49+ _0x991c[25],null)};_0x9cf5x3c= mxStencilRegistry[_0x991c[245]][_0x9cf5x48]}};return _0x9cf5x3c};mxStencilRegistry[_0x991c[246]]= function(_0x9cf5x48){var _0x9cf5x4d=_0x9cf5x48[_0x991c[254]](_0x991c[253]);var _0x9cf5x4e=null;if(_0x9cf5x4d[_0x991c[83]]> 0&& _0x9cf5x4d[0]== _0x991c[255]){_0x9cf5x4e= _0x9cf5x4d[1];for(var _0x9cf5x30=2;_0x9cf5x30< _0x9cf5x4d[_0x991c[83]]- 1;_0x9cf5x30++){_0x9cf5x4e+= _0x991c[252]+ _0x9cf5x4d[_0x9cf5x30]}};return _0x9cf5x4e};mxStencilRegistry[_0x991c[241]]= function(_0x9cf5x4f,_0x9cf5x50,_0x9cf5x51){_0x9cf5x51= (_0x9cf5x51!= null)?_0x9cf5x51:false;var _0x9cf5x52=mxStencilRegistry[_0x991c[243]][_0x9cf5x4f];if(_0x9cf5x51|| _0x9cf5x52== null){var _0x9cf5x53=false;if(_0x9cf5x52== null){var _0x9cf5x4c=mxUtils[_0x991c[250]](_0x9cf5x4f);_0x9cf5x52= _0x9cf5x4c[_0x991c[256]]();mxStencilRegistry[_0x991c[243]][_0x9cf5x4f]= _0x9cf5x52;_0x9cf5x53= true};mxStencilRegistry[_0x991c[257]](_0x9cf5x52,_0x9cf5x50,_0x9cf5x53)}};mxStencilRegistry[_0x991c[257]]= function(_0x9cf5x54,_0x9cf5x50,_0x9cf5x53){_0x9cf5x53= (_0x9cf5x53!= null)?_0x9cf5x53:true;var _0x9cf5x55=_0x9cf5x54[_0x991c[258]];var _0x9cf5x56=_0x9cf5x55[_0x991c[184]];var _0x9cf5x57=_0x991c[20];var _0x9cf5x48=_0x9cf5x55[_0x991c[56]](_0x991c[259]);if(_0x9cf5x48!= null){_0x9cf5x57= _0x9cf5x48+ _0x991c[253]};while(_0x9cf5x56!= null){if(_0x9cf5x56[_0x991c[260]]== mxConstants[_0x991c[261]]){_0x9cf5x48= _0x9cf5x56[_0x991c[56]](_0x991c[259]);if(_0x9cf5x48!= null){_0x9cf5x57= _0x9cf5x57[_0x991c[248]]();var _0x9cf5x58=_0x9cf5x48[_0x991c[263]](/ /g,_0x991c[262]);if(_0x9cf5x53){mxStencilRegistry[_0x991c[264]](_0x9cf5x57+ _0x9cf5x58[_0x991c[248]](), new mxStencil(_0x9cf5x56))};if(_0x9cf5x50!= null){var _0x9cf5x19=_0x9cf5x56[_0x991c[56]](_0x991c[265]);var _0x9cf5x1a=_0x9cf5x56[_0x991c[56]](_0x991c[266]);_0x9cf5x19= (_0x9cf5x19== null)?80:parseInt(_0x9cf5x19,10);_0x9cf5x1a= (_0x9cf5x1a== null)?80:parseInt(_0x9cf5x1a,10);_0x9cf5x50(_0x9cf5x57,_0x9cf5x58,_0x9cf5x48,_0x9cf5x19,_0x9cf5x1a)}}};_0x9cf5x56= _0x9cf5x56[_0x991c[267]]}}})();OpenFile= function(_0x9cf5x59){this[_0x991c[268]]= null;this[_0x991c[269]]= null;this[_0x991c[270]]= _0x9cf5x59};OpenFile[_0x991c[44]][_0x991c[271]]= function(_0x9cf5x6){this[_0x991c[269]]= _0x9cf5x6;this[_0x991c[272]]()};OpenFile[_0x991c[44]][_0x991c[273]]= function(_0x9cf5x6,_0x9cf5x5a){this[_0x991c[274]]= _0x9cf5x6;this[_0x991c[21]]= _0x9cf5x5a;this[_0x991c[272]]()};OpenFile[_0x991c[44]][_0x991c[275]]= function(_0x9cf5x5b){this[_0x991c[276]]();mxUtils[_0x991c[277]](_0x9cf5x5b)};OpenFile[_0x991c[44]][_0x991c[272]]= function(){if(this[_0x991c[269]]!= null&& this[_0x991c[274]]!= null){this[_0x991c[269]](this[_0x991c[274]],this[_0x991c[21]]);this[_0x991c[276]]()}};OpenFile[_0x991c[44]][_0x991c[276]]= function(){if(this[_0x991c[270]]!= null){this[_0x991c[270]]()}} \ No newline at end of file +/** + * $Id: Editor.js,v 1.14 2013/03/06 17:57:10 boris Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ +// Specifies if local storage should be used (eg. on the iPad which has no filesystem) +var useLocalStorage = (mxClient.IS_TOUCH || urlParams['storage'] == 'local') && typeof(localStorage) != 'undefined'; +var fileSupport = window.File != null && window.FileReader != null && window.FileList != null; + +// Specifies if connector should be shown on selected cells +var touchStyle = mxClient.IS_TOUCH || urlParams['touch'] == '1'; + +// Counts open editor tabs (must be global for cross-window access) +var counter = 0; + +// Cross-domain window access is not allowed in FF, so if we +// were opened from another domain then this will fail. +try { + var op = window; + + while (op.opener != null && !isNaN(op.opener.counter)) { + op = op.opener; + } + + // Increments the counter in the first opener in the chain + if (op != null) { + op.counter++; + counter = op.counter; + } +} catch (e) { + // ignore +} + +/** + * Editor constructor executed on page load. + */ +Editor = function() { + mxEventSource.call(this); + this.init(); + this.initStencilRegistry(); + this.graph = new Graph(); + this.outline = new mxOutline(this.graph); + this.outline.updateOnPan = true; + this.undoManager = this.createUndoManager(); + this.status = ''; + + // Contains the name which was used for the last save. Default value is null. + this.filename = null; + + this.getOrCreateFilename = function() { + return this.filename || mxResources.get('drawing', [counter]) + '.xml'; + }; + + this.getFilename = function() { + return this.filename; + }; + + // Sets the status and fires a statusChanged event + this.setStatus = function(value) { + this.status = value; + this.fireEvent(new mxEventObject('statusChanged')); + }; + + // Returns the current status + this.getStatus = function() { + return this.status; + }; + + // Contains the current modified state of the diagram. This is false for + // new diagrams and after the diagram was saved. + this.modified = false; + + // Updates modified state if graph changes + this.graphChangeListener = function() { + this.modified = true; + }; + this.graph.getModel().addListener(mxEvent.CHANGE, mxUtils.bind(this, function() { + this.graphChangeListener.apply(this, arguments); + })); + + // Installs dialog if browser window is closed without saving + // This must be disabled during save and image export + window.onbeforeunload = mxUtils.bind(this, function() { + if (this.modified) { + return mxResources.get('allChangesLost'); + } + }); + + // Sets persistent graph state defaults + this.graph.resetViewOnRootChange = false; + this.graph.scrollbars = true; + this.graph.background = null; +}; + +// Editor inherits from mxEventSource +mxUtils.extend(Editor, mxEventSource); + +/** + * Specifies the image URL to be used for the grid. + */ +Editor.prototype.gridImage = IMAGE_PATH + '/grid.gif'; + +/** + * Specifies the image URL to be used for the transparent background. + */ +Editor.prototype.transparentImage = IMAGE_PATH + '/transparent.gif'; + +/** + * Sets the XML node for the current diagram. + */ +Editor.prototype.setGraphXml = function(node) { + var dec = new mxCodec(node.ownerDocument); + + if (node.nodeName == 'mxGraphModel') { + this.graph.view.scale = 1; + this.graph.gridEnabled = node.getAttribute('grid') != '0'; + this.graph.graphHandler.guidesEnabled = node.getAttribute('guides') != '0'; + this.graph.setTooltips(node.getAttribute('tooltips') != '0'); + this.graph.setConnectable(node.getAttribute('connect') != '0'); + this.graph.foldingEnabled = node.getAttribute('fold') != '0'; + this.graph.scrollbars = node.getAttribute('scrollbars') != '0'; + + if (!this.graph.scrollbars) { + this.graph.container.scrollLeft = 0; + this.graph.container.scrollTop = 0; + this.graph.view.translate.x = Number(node.getAttribute('dx') || 0); + this.graph.view.translate.y = Number(node.getAttribute('dy') || 0); + } + + this.graph.pageVisible = node.getAttribute('page') == '1'; + this.graph.pageBreaksVisible = this.graph.pageVisible; + this.graph.preferPageSize = this.graph.pageBreaksVisible; + + // Loads the persistent state settings + var ps = node.getAttribute('pageScale'); + + if (ps != null) { + this.graph.pageScale = ps; + } else { + this.graph.pageScale = 1.5; + } + + var pw = node.getAttribute('pageWidth'); + var ph = node.getAttribute('pageHeight'); + + if (pw != null && ph != null) { + this.graph.pageFormat = new mxRectangle(0, 0, parseFloat(pw), parseFloat(ph)); + this.outline.outline.pageFormat = this.graph.pageFormat; + } + + // Loads the persistent state settings + var bg = node.getAttribute('background'); + + if (bg != null && bg.length > 0) { + this.graph.background = bg; + } + + dec.decode(node, this.graph.getModel()); + this.updateGraphComponents(); + } +}; + +/** + * Returns the XML node that represents the current diagram. + */ +Editor.prototype.getGraphXml = function() { + var enc = new mxCodec(mxUtils.createXmlDocument()); + var node = enc.encode(this.graph.getModel()); + + if (this.graph.view.translate.x != 0 || this.graph.view.translate.y != 0) { + node.setAttribute('dx', Math.round(this.graph.view.translate.x * 100) / 100); + node.setAttribute('dy', Math.round(this.graph.view.translate.y * 100) / 100); + } + + node.setAttribute('grid', (this.graph.isGridEnabled()) ? '1' : '0'); + node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0'); + node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0'); + node.setAttribute('tooltips', (this.graph.tooltipHandler.isEnabled()) ? '1' : '0'); + node.setAttribute('connect', (this.graph.connectionHandler.isEnabled()) ? '1' : '0'); + node.setAttribute('fold', (this.graph.foldingEnabled) ? '1' : '0'); + node.setAttribute('page', (this.graph.pageVisible) ? '1' : '0'); + node.setAttribute('pageScale', this.graph.pageScale); + node.setAttribute('pageWidth', this.graph.pageFormat.width); + node.setAttribute('pageHeight', this.graph.pageFormat.height); + + if (!this.graph.scrollbars) { + node.setAttribute('scrollbars', '0'); + } + + if (this.graph.background != null) { + node.setAttribute('background', this.graph.background); + } + + return node; +}; + +/** + * Keeps the graph container in sync with the persistent graph state + */ +Editor.prototype.updateGraphComponents = function() { + var graph = this.graph; + var outline = this.outline; + + if (graph.container != null && outline.outline.container != null) { + if (graph.background != null) { + if (graph.background == 'none') { + graph.container.style.backgroundColor = 'transparent'; + } else { + if (graph.view.backgroundPageShape != null) { + graph.view.backgroundPageShape.fill = graph.background; + graph.view.backgroundPageShape.reconfigure(); + } + + graph.container.style.backgroundColor = graph.background; + } + } else { + graph.container.style.backgroundColor = ''; + } + + if (graph.pageVisible) { + graph.container.style.backgroundColor = '#ebebeb'; + graph.container.style.borderStyle = 'solid'; + graph.container.style.borderColor = '#e5e5e5'; + graph.container.style.borderTopWidth = '1px'; + graph.container.style.borderLeftWidth = '1px'; + graph.container.style.borderRightWidth = '0px'; + graph.container.style.borderBottomWidth = '0px'; + } else { + graph.container.style.border = ''; + } + + outline.outline.container.style.backgroundColor = graph.container.style.backgroundColor; + + if (outline.outline.pageVisible != graph.pageVisible || + outline.outline.pageScale != graph.pageScale) { + outline.outline.pageScale = graph.pageScale; + outline.outline.pageVisible = graph.pageVisible; + outline.outline.view.validate(); + } + + if (graph.scrollbars && graph.container.style.overflow == 'hidden' && !touchStyle) { + graph.container.style.overflow = 'auto'; + } else if (!graph.scrollbars || touchStyle) { + graph.container.style.overflow = 'hidden'; + } + + // Transparent.gif is a workaround for focus repaint problems in IE + var noBackground = (mxClient.IS_IE && document.documentMode >= 9) ? 'url(' + this.transparentImage + ')' : 'none'; + graph.container.style.backgroundImage = (!graph.pageVisible && graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : noBackground; + + if (graph.view.backgroundPageShape != null) { + graph.view.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : 'none'; + } + } +}; + +/** + * Initializes the environment. + */ +Editor.prototype.init = function() { + // Adds stylesheet for IE6 + if (mxClient.IS_IE6) { + mxClient.link('stylesheet', CSS_PATH + '/grapheditor-ie6.css'); + } + + // Adds required resources (disables loading of fallback properties, this can only + // be used if we know that all keys are defined in the language specific file) + mxResources.loadDefaultBundle = false; + mxResources.add(RESOURCE_BASE); + + // Makes the connection hotspot smaller + mxConstants.DEFAULT_HOTSPOT = 0.3; + + var mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker; + mxConnectionHandler.prototype.createMarker = function() { + var marker = mxConnectionHandlerCreateMarker.apply(this, arguments); + + // Overrides to ignore hotspot only for target terminal + marker.intersects = mxUtils.bind(this, function(state, evt) { + if (this.isConnecting()) { + return true; + } + + return mxCellMarker.prototype.intersects.apply(marker, arguments); + }); + + return marker; + }; + + // Makes the shadow brighter + mxConstants.SHADOWCOLOR = '#d0d0d0'; + + // Changes some default colors + mxConstants.HANDLE_FILLCOLOR = '#99ccff'; + mxConstants.HANDLE_STROKECOLOR = '#0088cf'; + mxConstants.VERTEX_SELECTION_COLOR = '#00a8ff'; + mxConstants.OUTLINE_COLOR = '#00a8ff'; + mxConstants.OUTLINE_HANDLE_FILLCOLOR = '#99ccff'; + mxConstants.OUTLINE_HANDLE_STROKECOLOR = '#00a8ff'; + mxConstants.CONNECT_HANDLE_FILLCOLOR = '#cee7ff'; + mxConstants.EDGE_SELECTION_COLOR = '#00a8ff'; + mxConstants.DEFAULT_VALID_COLOR = '#00a8ff'; + mxConstants.LABEL_HANDLE_FILLCOLOR = '#cee7ff'; + mxConstants.GUIDE_COLOR = '#0088cf'; + + mxGraph.prototype.pageBreakColor = '#c0c0c0'; + mxGraph.prototype.pageScale = 1; + + // Increases default rubberband opacity (default is 20) + mxRubberband.prototype.defaultOpacity = 30; + + // Changes border color of background page shape + mxGraphView.prototype.createBackgroundPageShape = function(bounds) { + return new mxRectangleShape(bounds, this.graph.background || 'white', '#cacaca'); + }; + + // Fits the number of background pages to the graph + mxGraphView.prototype.getBackgroundPageBounds = function() { + var gb = this.getGraphBounds(); + + // Computes unscaled, untranslated graph bounds + var x = (gb.width > 0) ? gb.x / this.scale - this.translate.x : 0; + var y = (gb.height > 0) ? gb.y / this.scale - this.translate.y : 0; + var w = gb.width / this.scale; + var h = gb.height / this.scale; + + var fmt = this.graph.pageFormat; + var ps = this.graph.pageScale; + + var pw = fmt.width * ps; + var ph = fmt.height * ps; + + var x0 = Math.floor(Math.min(0, x) / pw); + var y0 = Math.floor(Math.min(0, y) / ph); + var xe = Math.ceil(Math.max(1, x + w) / pw); + var ye = Math.ceil(Math.max(1, y + h) / ph); + + var rows = xe - x0; + var cols = ye - y0; + + var bounds = new mxRectangle(this.scale * (this.translate.x + x0 * pw), this.scale * + (this.translate.y + y0 * ph), this.scale * rows * pw, this.scale * cols * ph); + + return bounds; + }; + + // Add panning for background page in VML + var graphPanGraph = mxGraph.prototype.panGraph; + mxGraph.prototype.panGraph = function(dx, dy) { + graphPanGraph.apply(this, arguments); + + if ((this.dialect != mxConstants.DIALECT_SVG && this.view.backgroundPageShape != null) && + (!this.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.container))) { + this.view.backgroundPageShape.node.style.marginLeft = dx + 'px'; + this.view.backgroundPageShape.node.style.marginTop = dy + 'px'; + } + }; + + var editor = this; + + // Uses HTML for background pages (to support grid background image) + mxGraphView.prototype.validateBackground = function() { + var bg = this.graph.getBackgroundImage(); + + if (bg != null) { + if (this.backgroundImage == null || this.backgroundImage.image != bg.src) { + if (this.backgroundImage != null) { + this.backgroundImage.destroy(); + } + + var bounds = new mxRectangle(0, 0, 1, 1); + + this.backgroundImage = new mxImageShape(bounds, bg.src); + this.backgroundImage.dialect = this.graph.dialect; + this.backgroundImage.init(this.backgroundPane); + this.backgroundImage.redraw(); + } + + this.redrawBackgroundImage(this.backgroundImage, bg); + } else if (this.backgroundImage != null) { + this.backgroundImage.destroy(); + this.backgroundImage = null; + } + + if (this.graph.pageVisible) { + var bounds = this.getBackgroundPageBounds(); + + if (this.backgroundPageShape == null) { + this.backgroundPageShape = this.createBackgroundPageShape(bounds); + this.backgroundPageShape.scale = 1; + this.backgroundPageShape.isShadow = true; + this.backgroundPageShape.dialect = mxConstants.DIALECT_STRICTHTML; + this.backgroundPageShape.init(this.graph.container); + // Required for the browser to render the background page in correct order + this.graph.container.firstChild.style.position = 'absolute'; + this.graph.container.insertBefore(this.backgroundPageShape.node, this.graph.container.firstChild); + this.backgroundPageShape.redraw(); + + this.backgroundPageShape.node.className = 'geBackgroundPage'; + this.backgroundPageShape.node.style.backgroundPosition = '-1px -1px'; + + // Adds listener for double click handling on background + mxEvent.addListener(this.backgroundPageShape.node, 'dblclick', + mxUtils.bind(this, function(evt) { + this.graph.dblClick(evt); + }) + ); + + // Adds basic listeners for graph event dispatching outside of the + // container and finishing the handling of a single gesture + mxEvent.addGestureListeners(this.backgroundPageShape.node, + mxUtils.bind(this, function(evt) { + this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(evt)); + }), + mxUtils.bind(this, function(evt) { + // Hides the tooltip if mouse is outside container + if (this.graph.tooltipHandler != null && + this.graph.tooltipHandler.isHideOnHover()) { + this.graph.tooltipHandler.hide(); + } + + if (this.graph.isMouseDown && + !mxEvent.isConsumed(evt)) { + this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE, + new mxMouseEvent(evt)); + } + }), + mxUtils.bind(this, function(evt) { + this.graph.fireMouseEvent(mxEvent.MOUSE_UP, + new mxMouseEvent(evt)); + })); + } else { + this.backgroundPageShape.scale = 1; + this.backgroundPageShape.bounds = bounds; + this.backgroundPageShape.redraw(); + } + + this.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ? + 'url(' + editor.gridImage + ')' : 'none'; + } else if (this.backgroundPageShape != null) { + this.backgroundPageShape.destroy(); + this.backgroundPageShape = null; + } + }; + + // Draws page breaks only within the page + mxGraph.prototype.updatePageBreaks = function(visible, width, height) { + var scale = this.view.scale; + var tr = this.view.translate; + var fmt = this.pageFormat; + var ps = scale * this.pageScale; + + var bounds2 = this.view.getBackgroundPageBounds(); + + width = bounds2.width; + height = bounds2.height; + var bounds = new mxRectangle(scale * tr.x, scale * tr.y, + fmt.width * ps, fmt.height * ps); + + // Does not show page breaks if the scale is too small + visible = visible && Math.min(bounds.width, bounds.height) > this.minPageBreakDist; + + var horizontalCount = (visible) ? Math.ceil(width / bounds.width) - 1 : 0; + var verticalCount = (visible) ? Math.ceil(height / bounds.height) - 1 : 0; + var right = bounds2.x + width; + var bottom = bounds2.y + height; + + if (this.horizontalPageBreaks == null && horizontalCount > 0) { + this.horizontalPageBreaks = []; + } + + if (this.horizontalPageBreaks != null) { + for (var i = 0; i <= horizontalCount; i++) { + var pts = [new mxPoint(bounds2.x + (i + 1) * bounds.width, bounds2.y), + new mxPoint(bounds2.x + (i + 1) * bounds.width, bottom) + ]; + + if (this.horizontalPageBreaks[i] != null) { + this.horizontalPageBreaks[i].scale = 1; + this.horizontalPageBreaks[i].points = pts; + this.horizontalPageBreaks[i].redraw(); + } else { + var pageBreak = new mxPolyline(pts, this.pageBreakColor, this.scale); + pageBreak.dialect = this.dialect; + pageBreak.isDashed = this.pageBreakDashed; + pageBreak.addPipe = false; + pageBreak.scale = scale; + pageBreak.init(this.view.backgroundPane); + pageBreak.redraw(); + + this.horizontalPageBreaks[i] = pageBreak; + } + } + + for (var i = horizontalCount; i < this.horizontalPageBreaks.length; i++) { + this.horizontalPageBreaks[i].destroy(); + } + + this.horizontalPageBreaks.splice(horizontalCount, this.horizontalPageBreaks.length - horizontalCount); + } + + if (this.verticalPageBreaks == null && verticalCount > 0) { + this.verticalPageBreaks = []; + } + + if (this.verticalPageBreaks != null) { + for (var i = 0; i <= verticalCount; i++) { + var pts = [new mxPoint(bounds2.x, bounds2.y + (i + 1) * bounds.height), + new mxPoint(right, bounds2.y + (i + 1) * bounds.height) + ]; + + if (this.verticalPageBreaks[i] != null) { + this.verticalPageBreaks[i].scale = 1; //scale; + this.verticalPageBreaks[i].points = pts; + this.verticalPageBreaks[i].redraw(); + } else { + var pageBreak = new mxPolyline(pts, this.pageBreakColor, scale); + pageBreak.dialect = this.dialect; + pageBreak.isDashed = this.pageBreakDashed; + pageBreak.addPipe = false; + pageBreak.scale = scale; + pageBreak.init(this.view.backgroundPane); + pageBreak.redraw(); + + this.verticalPageBreaks[i] = pageBreak; + } + } + + for (var i = verticalCount; i < this.verticalPageBreaks.length; i++) { + this.verticalPageBreaks[i].destroy(); + } + + this.verticalPageBreaks.splice(verticalCount, this.verticalPageBreaks.length - verticalCount); + } + }; + + // Enables snapping to off-grid terminals for edge waypoints + mxEdgeHandler.prototype.snapToTerminals = true; + + // Enables guides + mxGraphHandler.prototype.guidesEnabled = true; + + // Disables removing relative children from parents + var mxGraphHandlerShouldRemoveCellsFromParent = mxGraphHandler.prototype.shouldRemoveCellsFromParent; + mxGraphHandler.prototype.shouldRemoveCellsFromParent = function(parent, cells, evt) { + for (var i = 0; i < cells.length; i++) { + if (this.graph.getModel().isVertex(cells[i])) { + var geo = this.graph.getCellGeometry(cells[i]); + + if (geo != null && geo.relative) { + return false; + } + } + } + + return mxGraphHandlerShouldRemoveCellsFromParent.apply(this, arguments); + }; + + // Alt-move disables guides + mxGuide.prototype.isEnabledForEvent = function(evt) { + return !mxEvent.isAltDown(evt); + }; + + // Consumes click events for disabled menu items + mxPopupMenuAddItem = mxPopupMenu.prototype.addItem; + mxPopupMenu.prototype.addItem = function(title, image, funct, parent, iconCls, enabled) { + var result = mxPopupMenuAddItem.apply(this, arguments); + + if (enabled != null && !enabled) { + mxEvent.addListener(result, 'mousedown', function(evt) { + mxEvent.consume(evt); + }); + } + + return result; + }; + + // Selects descendants before children selection mode + var graphHandlerGetInitialCellForEvent = mxGraphHandler.prototype.getInitialCellForEvent; + mxGraphHandler.prototype.getInitialCellForEvent = function(me) { + var model = this.graph.getModel(); + var psel = model.getParent(this.graph.getSelectionCell()); + var cell = graphHandlerGetInitialCellForEvent.apply(this, arguments); + var parent = model.getParent(cell); + + if (psel == null || (psel != cell && psel != parent)) { + while (!this.graph.isCellSelected(cell) && !this.graph.isCellSelected(parent) && + model.isVertex(parent) && !this.graph.isValidRoot(parent)) { + cell = parent; + parent = this.graph.getModel().getParent(cell); + } + } + + return cell; + }; + + // Selection is delayed to mouseup if child selected + var graphHandlerIsDelayedSelection = mxGraphHandler.prototype.isDelayedSelection; + mxGraphHandler.prototype.isDelayedSelection = function(cell) { + var result = graphHandlerIsDelayedSelection.apply(this, arguments); + var model = this.graph.getModel(); + var psel = model.getParent(this.graph.getSelectionCell()); + var parent = model.getParent(cell); + + if (psel == null || (psel != cell && psel != parent)) { + if (!this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent)) { + result = true; + } + } + + return result; + }; + + // Delayed selection of parent group + mxGraphHandler.prototype.selectDelayed = function(me) { + var cell = me.getCell(); + + if (cell == null) { + cell = this.cell; + } + + var model = this.graph.getModel(); + var parent = model.getParent(cell); + + while (this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent)) { + cell = parent; + parent = model.getParent(cell); + } + + this.graph.selectCellForEvent(cell, me.getEvent()); + }; + + // Returns last selected ancestor + mxPanningHandler.prototype.getCellForPopupEvent = function(me) { + var cell = me.getCell(); + var model = this.graph.getModel(); + var parent = model.getParent(cell); + + while (model.isVertex(parent) && !this.graph.isValidRoot(parent)) { + if (this.graph.isCellSelected(parent)) { + cell = parent; + } + + parent = model.getParent(parent); + } + + return cell; + }; +}; + +/** + * Creates and returns a new undo manager. + */ +Editor.prototype.createUndoManager = function() { + var graph = this.graph; + var undoMgr = new mxUndoManager(); + + // Installs the command history + var listener = function(sender, evt) { + undoMgr.undoableEditHappened(evt.getProperty('edit')); + }; + + graph.getModel().addListener(mxEvent.UNDO, listener); + graph.getView().addListener(mxEvent.UNDO, listener); + + // Keeps the selection in sync with the history + var undoHandler = function(sender, evt) { + var cand = graph.getSelectionCellsForChanges(evt.getProperty('edit').changes); + var cells = []; + + for (var i = 1; i < cand.length; i++) { + if (graph.view.getState(cand[i]) != null) { + cells.push(cand[i]); + } + } + + graph.setSelectionCells(cells); + }; + + undoMgr.addListener(mxEvent.UNDO, undoHandler); + undoMgr.addListener(mxEvent.REDO, undoHandler); + + return undoMgr; +}; + +/** + * Adds basic stencil set (no namespace). + */ +Editor.prototype.initStencilRegistry = function() { + // Loads default stencils + mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/general.xml'); +}; + +/** + * Overrides stencil registry for dynamic loading of stencils. + */ +(function() { + /** + * Maps from library names to an array of Javascript filenames, + * which are synchronously loaded. Currently only stencil files + * (.xml) and JS files (.js) are supported. + * IMPORTANT: For embedded diagrams to work entries must also + * be added in EmbedServlet.java. + */ + mxStencilRegistry.libraries = {}; + + /** + * Stores all package names that have been dynamically loaded. + * Each package is only loaded once. + */ + mxStencilRegistry.packages = []; + + // Extends the default stencil registry to add dynamic loading + mxStencilRegistry.getStencil = function(name) { + var result = mxStencilRegistry.stencils[name]; + + if (result == null) { + var basename = mxStencilRegistry.getBasenameForStencil(name); + + // Loads stencil files and tries again + if (basename != null) { + var libs = mxStencilRegistry.libraries[basename]; + + if (libs != null) { + if (mxStencilRegistry.packages[basename] == null) { + mxStencilRegistry.packages[basename] = 1; + + for (var i = 0; i < libs.length; i++) { + var fname = libs[i]; + + if (fname.toLowerCase().substring(fname.length - 4, fname.length) == '.xml') { + mxStencilRegistry.loadStencilSet(fname, null); + } else if (fname.toLowerCase().substring(fname.length - 3, fname.length) == '.js') { + var req = mxUtils.load(fname); + + if (req != null) { + eval.call(window, req.getText()); + } + } else { + // FIXME: This does not yet work as the loading is triggered after + // the shape was used in the graph, at which point the keys have + // typically been translated in the calling method. + //mxResources.add(fname); + } + } + } + } else { + mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/' + basename + '.xml', null); + } + + result = mxStencilRegistry.stencils[name]; + } + } + + return result; + }; + + // Returns the basename for the given stencil or null if no file must be + // loaded to render the given stencil. + mxStencilRegistry.getBasenameForStencil = function(name) { + var parts = name.split('.'); + var tmp = null; + + if (parts.length > 0 && parts[0] == 'mxgraph') { + tmp = parts[1]; + + for (var i = 2; i < parts.length - 1; i++) { + tmp += '/' + parts[i]; + } + } + + return tmp; + }; + + // Loads the given stencil set + mxStencilRegistry.loadStencilSet = function(stencilFile, postStencilLoad, force) { + force = (force != null) ? force : false; + + // Uses additional cache for detecting previous load attempts + var xmlDoc = mxStencilRegistry.packages[stencilFile]; + + if (force || xmlDoc == null) { + var install = false; + + if (xmlDoc == null) { + var req = mxUtils.load(stencilFile); + xmlDoc = req.getXml(); + mxStencilRegistry.packages[stencilFile] = xmlDoc; + install = true; + } + + mxStencilRegistry.parseStencilSet(xmlDoc, postStencilLoad, install); + } + }; + + // Parses the given stencil set + mxStencilRegistry.parseStencilSet = function(xmlDocument, postStencilLoad, install) { + install = (install != null) ? install : true; + var root = xmlDocument.documentElement; + var shape = root.firstChild; + var packageName = ''; + var name = root.getAttribute('name'); + + if (name != null) { + packageName = name + '.'; + } + + while (shape != null) { + if (shape.nodeType == mxConstants.NODETYPE_ELEMENT) { + name = shape.getAttribute('name'); + + if (name != null) { + packageName = packageName.toLowerCase(); + var stencilName = name.replace(/ /g, "_"); + + if (install) { + mxStencilRegistry.addStencil(packageName + stencilName.toLowerCase(), new mxStencil(shape)); + } + + if (postStencilLoad != null) { + var w = shape.getAttribute('w'); + var h = shape.getAttribute('h'); + + w = (w == null) ? 80 : parseInt(w, 10); + h = (h == null) ? 80 : parseInt(h, 10); + + postStencilLoad(packageName, stencilName, name, w, h); + } + } + } + + shape = shape.nextSibling; + } + }; +})(); + +/** + * Class for asynchronously opening a new window and loading a file at the same + * time. This acts as a bridge between the open dialog and the new editor. + */ +OpenFile = function(done) { + this.producer = null; + this.consumer = null; + this.done = done; +}; + +/** + * Registers the editor from the new window. + */ +OpenFile.prototype.setConsumer = function(value) { + this.consumer = value; + this.execute(); +}; + +/** + * Sets the data from the loaded file. + */ +OpenFile.prototype.setData = function(value, filename) { + this.data = value; + this.filename = filename; + this.execute(); +}; + +/** + * Displays an error message. + */ +OpenFile.prototype.error = function(msg) { + this.cancel(); + mxUtils.alert(msg); +}; + +/** + * Consumes the data. + */ +OpenFile.prototype.execute = function() { + if (this.consumer != null && this.data != null) { + this.consumer(this.data, this.filename); + this.cancel(); + } +}; + +/** + * Cancels the operation. + */ +OpenFile.prototype.cancel = function() { + if (this.done != null) { + this.done(); + } +}; diff --git a/public/assets/plugins/jscripty/js/EditorUi.js b/public/assets/plugins/jscripty/js/EditorUi.js index 983ad26..8d5d72b 100644 --- a/public/assets/plugins/jscripty/js/EditorUi.js +++ b/public/assets/plugins/jscripty/js/EditorUi.js @@ -1 +1,1345 @@ -var _0x4455=["\x65\x64\x69\x74\x6F\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x45\x64\x69\x74\x6F\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x67\x72\x61\x70\x68","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x73\x74\x79\x6C\x65","\x68\x69\x64\x64\x65\x6E","\x73\x72\x63","\x73\x75\x62\x6D\x65\x6E\x75\x49\x6D\x61\x67\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x61\x63\x74\x69\x6F\x6E\x73","\x6D\x65\x6E\x75\x73","\x63\x72\x65\x61\x74\x65\x44\x69\x76\x73","\x72\x65\x66\x72\x65\x73\x68","\x63\x72\x65\x61\x74\x65\x55\x69","\x65\x76\x65\x6E\x74","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x41\x6C\x6C\x6F\x77\x65\x64","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x62\x69\x6E\x64","\x62\x6F\x64\x79","\x6F\x6E\x73\x65\x6C\x65\x63\x74\x73\x74\x61\x72\x74","\x6D\x65\x6E\x75\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x6E\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x74\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x64\x69\x61\x67\x72\x61\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x69\x64\x65\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x66\x6F\x6F\x74\x65\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x6F\x6E\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x69\x6E\x69\x74","\x74\x61\x62\x69\x6E\x64\x65\x78","\x30","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x75\x72\x73\x6F\x72","\x64\x65\x66\x61\x75\x6C\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x67\x72\x69\x64\x49\x6D\x61\x67\x65","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x2D\x31\x70\x78\x20\x2D\x31\x70\x78","\x66\x6F\x63\x75\x73","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x61\x70\x70\x6C\x79","\x6D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x73\x74\x61\x72\x74","\x65\x6E\x64","\x69\x6E\x70\x75\x74","\x71\x75\x65\x73\x74\x69\x6F\x6E","\x65\x6D\x61\x69\x6C","\x6E","\x63\x72\x65\x61\x74\x65\x4D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x63\x65\x6C\x6C","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x74\x61\x67\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x73\x6F\x75\x72\x63\x65","\x69\x6E\x64\x65\x78\x4F\x66","\x73\x74\x61\x72\x74\x45\x64\x69\x74\x69\x6E\x67\x41\x74\x43\x65\x6C\x6C","\x69\x73\x56\x65\x72\x74\x65\x78","\x6C\x6F\x67","\x73\x68\x6F\x77\x44\x69\x61\x6C\x6F\x67","\x63\x6F\x6E\x73\x75\x6D\x65","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x6F\x75\x74\x6C\x69\x6E\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x75\x74\x6C\x69\x6E\x65","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x67\x65\x73\x74\x75\x72\x65\x63\x68\x61\x6E\x67\x65","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x73\x63\x61\x6C\x65\x28","\x73\x63\x61\x6C\x65","\x67\x65\x74\x44\x72\x61\x77\x50\x61\x6E\x65","\x76\x69\x65\x77","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x67\x65\x73\x74\x75\x72\x65\x65\x6E\x64","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x7A\x6F\x6F\x6D\x54\x6F\x43\x65\x6E\x74\x65\x72","\x7A\x6F\x6F\x6D","\x76\x69\x73\x69\x62\x6C\x65","\x63\x72\x65\x61\x74\x65\x4B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x4B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x72\x65\x73\x69\x7A\x65","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x75\x70\x64\x61\x74\x65","\x6F\x70\x65\x6E","\x73\x70\x6C\x69\x74\x53\x69\x7A\x65","\x6D\x65\x6E\x75\x62\x61\x72\x48\x65\x69\x67\x68\x74","\x74\x6F\x6F\x6C\x62\x61\x72\x48\x65\x69\x67\x68\x74","\x66\x6F\x6F\x74\x65\x72\x48\x65\x69\x67\x68\x74","\x68\x73\x70\x6C\x69\x74\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x76\x73\x70\x6C\x69\x74\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x64\x64\x55\x6E\x64\x6F\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x73\x74\x65","\x67\x65\x74","\x69\x73\x45\x6D\x70\x74\x79","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x74","\x63\x6F\x70\x79","\x6F\x70\x65\x6E\x65\x72","\x6F\x70\x65\x6E\x46\x69\x6C\x65","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x63\x6C\x65\x61\x72","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x69\x6E\x76\x61\x6C\x69\x64\x4F\x72\x4D\x69\x73\x73\x69\x6E\x67\x46\x69\x6C\x65","\x3A\x20","\x6D\x65\x73\x73\x61\x67\x65","\x61\x6C\x65\x72\x74","\x73\x65\x74\x43\x6F\x6E\x73\x75\x6D\x65\x72","\x6F\x70\x65\x6E\x53\x74\x72\x69\x6E\x67","\x64\x61\x74\x61","\x6E\x65\x77","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x67\x65\x74\x49\x74\x65\x6D","\x72\x65\x70\x6C\x61\x63\x65","\x63\x6F\x6E\x66\x69\x72\x6D","\x73\x65\x74\x49\x74\x65\x6D","\x73\x61\x76\x65\x64","\x20","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x6C\x65\x6E\x67\x74\x68","\x50\x4F\x53\x54","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x42\x65\x61\x72\x65\x72\x20","\x74\x6F\x6B\x65\x6E","\x6F\x6E\x6C\x6F\x61\x64","\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x50\x72\x6F\x6A\x65\x63\x74\x20","\x6E\x61\x6D\x65","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x70\x61\x72\x73\x65","\x20\x69\x73\x20\x6F\x70\x65\x6E\x69\x6E\x67\x20\x69\x6E\x20\x6E\x65\x77\x20\x77\x69\x6E\x64\x6F\x77\x21","\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x76\x69\x65\x77\x2F","\x69\x64","\x5F\x62\x6C\x61\x6E\x6B","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x65\x72\x72\x6F\x72\x73","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x20\x28","\x73\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x6F\x6E\x65\x72\x72\x6F\x72","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D\x70\x72\x6F\x6A\x65\x63\x74\x5F\x6E\x65\x77\x26\x6E\x61\x6D\x65\x3D","\x73\x65\x6E\x64","\x64\x72\x61\x77\x69\x6E\x67\x54\x6F\x6F\x4C\x61\x72\x67\x65","\x70\x6F\x70\x75\x70","\x73\x61\x76\x65","\x50\x55\x54","\x55\x70\x64\x61\x74\x65\x64\x20\x61\x74\x20","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x64\x72\x61\x66\x74\x3D","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x66\x69\x6C\x65","\x73\x61\x76\x65\x41\x73","\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x2F","\x45\x72\x72\x6F\x72\x20\x63\x6C\x6F\x6E\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x45\x72\x72\x6F\x72\x20\x63\x6C\x6F\x6E\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D\x70\x72\x6F\x6A\x65\x63\x74\x5F\x63\x6C\x6F\x6E\x65\x64\x26\x6E\x61\x6D\x65\x3D","\x26\x64\x72\x61\x66\x74\x3D","\x26\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E\x3D","\x76\x61\x6C\x69\x64\x61\x74\x65","\x67\x65\x74\x52\x6F\x6F\x74","\x6D\x6F\x64\x65\x6C","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x41\x74","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x3C\x62\x72\x3E","\x73\x65\x74\x43\x65\x6C\x6C\x57\x61\x72\x6E\x69\x6E\x67","","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x51\x75\x65\x73\x74\x69\x6F\x6E\x20\x63\x61\x6E\x20\x6E\x6F\x74\x20\x62\x65\x20\x65\x6D\x70\x74\x79","\x0A","\x6C\x61\x62\x65\x6C","\x4C\x61\x62\x65\x6C\x20\x63\x61\x6E\x20\x6E\x6F\x74\x20\x62\x65\x20\x65\x6D\x70\x74\x79","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x6C\x6F\x63\x6B","\x4F\x6E\x6C\x79\x20\x6F\x6E\x65\x20\x53\x74\x61\x72\x74\x20\x62\x6C\x6F\x63\x6B\x20\x69\x73\x20\x61\x6C\x6C\x6F\x77\x65\x64","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x67\x65\x74\x49\x64","\x67\x65\x74\x43\x65\x6C\x6C","\x67\x65\x74\x56\x61\x6C\x75\x65","\x6E\x75\x6C\x6C","\x56\x61\x6C\x75\x65\x20\x63\x61\x6E\x20\x6E\x6F\x74\x20\x62\x65\x20\x65\x6D\x70\x74\x79","\x2C","\x73\x70\x6C\x69\x74","\x74\x72\x69\x6D","\x56\x61\x6C\x75\x65","\x20\x63\x61\x6E\x20\x6E\x6F\x74\x20\x62\x65\x20\x65\x6D\x70\x74\x79","\x66\x6F\x72\x45\x61\x63\x68","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x67\x65\x74\x45\x64\x67\x65\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x67\x65\x74\x43\x65\x6C\x6C\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x76\x61\x6C\x69\x64\x61\x74\x65\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x63\x68\x69\x6C\x64\x72\x65\x6E","\x70\x75\x62\x6C\x69\x73\x68","\x50\x75\x62\x6C\x69\x73\x68\x65\x64\x20\x61\x74\x20","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x66\x69\x6C\x65","\x76\x61\x72\x69\x61\x62\x6C\x65","\x56\x61\x72\x69\x61\x62\x6C\x65\x20\x63\x72\x65\x61\x74\x65\x64\x20\x61\x74\x20","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x3A\x20","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65","\x6E\x61\x6D\x65\x3D","\x67\x65\x74\x55\x72\x6C","\x70\x61\x74\x68\x6E\x61\x6D\x65","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x3F","\x26","\x3D","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x61\x6E\x55\x6E\x64\x6F","\x63\x61\x6E\x52\x65\x64\x6F","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x74\x6F\x42\x61\x63\x6B","\x64\x61\x73\x68\x65\x64","\x72\x6F\x75\x6E\x64\x65\x64","\x73\x68\x61\x64\x6F\x77","\x74\x69\x6C\x74","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x63\x75\x72\x76\x65\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x77\x6F\x72\x64\x57\x72\x61\x70","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x67\x72\x6F\x75\x70","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x75\x6E\x67\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x61\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x74\x65\x78\x74","\x66\x6F\x72\x6D\x61\x74","\x61\x72\x72\x61\x6E\x67\x65","\x6C\x69\x6E\x65\x77\x69\x64\x74\x68","\x73\x70\x61\x63\x69\x6E\x67","\x6C\x69\x6E\x65","\x6C\x69\x6E\x65\x65\x6E\x64","\x6C\x69\x6E\x65\x73\x74\x61\x72\x74","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x61\x6C\x69\x67\x6E","\x67\x65\x74\x53\x74\x61\x74\x65","\x69\x73\x4C\x6F\x6F\x70","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x68\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x65\x78\x70\x61\x6E\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x65\x64\x69\x74\x4C\x69\x6E\x6B","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x6D\x69\x6E","\x6D\x61\x78","\x68\x65\x69\x67\x68\x74","\x70\x78","\x74\x6F\x70","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x77\x69\x64\x74\x68","\x62\x6F\x74\x74\x6F\x6D","\x6C\x65\x66\x74","\x64\x69\x73\x70\x6C\x61\x79","\x6E\x6F\x6E\x65","\x68\x73\x70\x6C\x69\x74","\x76\x73\x70\x6C\x69\x74","\x67\x65\x4D\x65\x6E\x75\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x53\x69\x64\x65\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x4F\x75\x74\x6C\x69\x6E\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x44\x69\x61\x67\x72\x61\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x46\x6F\x6F\x74\x65\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x48\x73\x70\x6C\x69\x74","\x67\x65\x56\x73\x70\x6C\x69\x74","\x30\x70\x78","\x72\x69\x67\x68\x74","\x6D\x65\x6E\x75\x62\x61\x72","\x67\x65\x4D\x65\x6E\x75\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75\x62\x61\x72","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x74\x6F\x6F\x6C\x62\x61\x72","\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x73\x69\x64\x65\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x53\x69\x64\x65\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x46\x6F\x6F\x74\x65\x72","\x73\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x74\x61\x74\x75\x73\x43\x68\x61\x6E\x67\x65\x64","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x65\x74\x53\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x61\x64\x64\x53\x70\x6C\x69\x74\x48\x61\x6E\x64\x6C\x65\x72","\x61","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x49\x74\x65\x6D\x20\x67\x65\x53\x74\x61\x74\x75\x73","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x67\x65\x46\x6F\x6F\x74\x65\x72","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x48\x65\x61\x64\x65\x72","\x63\x72\x65\x61\x74\x65\x46\x6F\x72\x6D","\x66\x6F\x72\x6D","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x78","\x79","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x74\x6F\x75\x63\x68\x6D\x6F\x76\x65","\x6D\x6F\x75\x73\x65\x75\x70","\x74\x6F\x75\x63\x68\x65\x6E\x64","\x68\x69\x64\x65\x44\x69\x61\x6C\x6F\x67","\x64\x69\x61\x6C\x6F\x67","\x49\x53\x5F\x56\x4D\x4C","\x63\x6C\x6F\x73\x65","\x73\x61\x76\x65\x46\x69\x6C\x65","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x70\x75\x62\x6C\x69\x73\x68\x46\x69\x6C\x65","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x61\x6E\x69\x6D\x61\x74\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x65\x78\x65\x63\x75\x74\x65","\x43\x61\x6D\x69\x6E\x6F","\x75\x73\x65\x72\x41\x67\x65\x6E\x74","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x72\x74\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x49\x53\x5F\x4D\x41\x43","\x6D\x65\x74\x61\x4B\x65\x79","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x65\x6E\x61\x62\x6C\x65\x64","\x66\x75\x6E\x63\x74","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x4B\x65\x79","\x62\x69\x6E\x64\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x4B\x65\x79","\x65\x73\x63\x61\x70\x65","\x65\x6E\x74\x65\x72","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x65\x78\x70\x6F\x72\x74","\x63\x6F\x6E\x6E\x65\x63\x74","\x67\x72\x69\x64","\x61\x62\x6F\x75\x74","\x20\x6D\x75\x73\x74\x20\x68\x61\x76\x65\x20","\x20\x6F\x75\x74\x67\x6F\x69\x6E\x67\x20\x65\x64\x67\x65\x2E","\x70\x75\x73\x68","\x20\x69\x6E\x63\x6F\x6D\x69\x6E\x67\x20\x65\x64\x67\x65\x2E"];EditorUi= function(_0xdc42x1,_0xdc42x2){this[_0x4455[0]]= _0xdc42x1|| new Editor();this[_0x4455[1]]= _0xdc42x2|| document[_0x4455[3]](_0x4455[2]);var _0xdc42x3=_0xdc42x1[_0x4455[4]];var _0xdc42x4=this;this[_0x4455[1]][_0x4455[6]][_0x4455[5]]= _0x4455[7]; new Image()[_0x4455[8]]= mxPopupMenu[_0x4455[10]][_0x4455[9]];if(mxConnectionHandler[_0x4455[10]][_0x4455[11]]!= null){ new Image()[_0x4455[8]]= mxConnectionHandler[_0x4455[10]][_0x4455[11]][_0x4455[8]]};this[_0x4455[12]]= new Actions(this);this[_0x4455[13]]= new Menus(this);this[_0x4455[14]]();this[_0x4455[15]]();this[_0x4455[16]]();var _0xdc42x5=mxUtils[_0x4455[20]](this,function(_0xdc42x6){if(_0xdc42x6== null){_0xdc42x6= window[_0x4455[17]]};if(this[_0x4455[18]](_0xdc42x6)){return true};return _0xdc42x3[_0x4455[19]]()});if(this[_0x4455[1]]== document[_0x4455[21]]){this[_0x4455[23]][_0x4455[22]]= _0xdc42x5;this[_0x4455[23]][_0x4455[24]]= _0xdc42x5;this[_0x4455[25]][_0x4455[22]]= _0xdc42x5;this[_0x4455[25]][_0x4455[24]]= _0xdc42x5;this[_0x4455[26]][_0x4455[22]]= _0xdc42x5;this[_0x4455[26]][_0x4455[24]]= _0xdc42x5;this[_0x4455[27]][_0x4455[22]]= _0xdc42x5;this[_0x4455[27]][_0x4455[24]]= _0xdc42x5;this[_0x4455[28]][_0x4455[22]]= _0xdc42x5;this[_0x4455[28]][_0x4455[24]]= _0xdc42x5};if(mxClient[_0x4455[29]]&& ( typeof (document[_0x4455[30]])=== _0x4455[31]|| document[_0x4455[30]]< 9)){mxEvent[_0x4455[33]](this[_0x4455[26]],_0x4455[32],_0xdc42x5);mxEvent[_0x4455[33]](this[_0x4455[27]],_0x4455[32],_0xdc42x5)}else {this[_0x4455[26]][_0x4455[34]]= _0xdc42x5;this[_0x4455[27]][_0x4455[34]]= _0xdc42x5};_0xdc42x3[_0x4455[35]](this[_0x4455[26]]);_0xdc42x3[_0x4455[15]]();_0xdc42x3[_0x4455[1]][_0x4455[38]](_0x4455[36],_0x4455[37]);_0xdc42x3[_0x4455[1]][_0x4455[6]][_0x4455[39]]= _0x4455[40];_0xdc42x3[_0x4455[1]][_0x4455[6]][_0x4455[41]]= _0x4455[42]+ _0xdc42x1[_0x4455[43]]+ _0x4455[44];_0xdc42x3[_0x4455[1]][_0x4455[6]][_0x4455[45]]= _0x4455[46];_0xdc42x3[_0x4455[1]][_0x4455[47]]();var _0xdc42x7=_0xdc42x3[_0x4455[48]];_0xdc42x3[_0x4455[48]]= function(_0xdc42x8,_0xdc42x9,_0xdc42xa){if(_0xdc42x8== mxEvent[_0x4455[49]]){this[_0x4455[1]][_0x4455[47]]()};_0xdc42x7[_0x4455[50]](this,arguments)};this[_0x4455[58]](_0xdc42x3[_0x4455[51]],[_0x4455[52],_0x4455[53],_0x4455[54],_0x4455[55],_0x4455[56]],[[1,1],[0,0],[1,1],[1,_0x4455[57]],[1,_0x4455[57]]],[[0,0],[1,_0x4455[57]],[1,_0x4455[57]],[1,_0x4455[57]],[1,_0x4455[57]]]);_0xdc42x3[_0x4455[59]]= function(_0xdc42x6,_0xdc42xb){var _0xdc42xc=[_0x4455[55]];var _0xdc42xd= new mxEventObject(mxEvent.DOUBLE_CLICK,_0x4455[17],_0xdc42x6,_0x4455[60],_0xdc42xb);this[_0x4455[61]](_0xdc42xd);if(this[_0x4455[62]]()&& !mxEvent[_0x4455[63]](_0xdc42x6)&& !_0xdc42xd[_0x4455[63]]()){if(this[_0x4455[65]]()[_0x4455[64]](_0xdc42xb)){if(_0xdc42xc[_0x4455[69]](_0xdc42xb[_0x4455[68]][_0x4455[67]][_0x4455[66]])>= 0){this[_0x4455[70]](_0xdc42xb)}}else {if(this[_0x4455[65]]()[_0x4455[71]](_0xdc42xb)){console[_0x4455[72]](_0xdc42x4);console[_0x4455[72]](_0xdc42xb);_0xdc42x4[_0x4455[73]]( new GeneralDialog(_0xdc42x4,_0xdc42xb)[_0x4455[1]],320,280,true,true)}};_0xdc42xd[_0x4455[74]]()}};_0xdc42x3[_0x4455[76]][_0x4455[75]]= true;_0xdc42x3[_0x4455[76]][_0x4455[77]]= mxUtils[_0x4455[20]](this,function(_0xdc42xe,_0xdc42xb,_0xdc42x6){this[_0x4455[13]][_0x4455[78]](_0xdc42xe,_0xdc42xb,_0xdc42x6)});_0xdc42x1[_0x4455[80]][_0x4455[35]](this[_0x4455[79]]);mxEvent[_0x4455[82]](document,mxUtils[_0x4455[20]](this,function(_0xdc42x6){_0xdc42x3[_0x4455[76]][_0x4455[81]]()}));if(mxClient[_0x4455[83]]){mxEvent[_0x4455[33]](_0xdc42x3[_0x4455[1]],_0x4455[84],mxUtils[_0x4455[20]](this,function(_0xdc42x6){_0xdc42x3[_0x4455[89]][_0x4455[88]]()[_0x4455[38]](_0x4455[85],_0x4455[86]+ _0xdc42x6[_0x4455[87]]+ _0x4455[44]);_0xdc42x3[_0x4455[89]][_0x4455[91]]()[_0x4455[6]][_0x4455[90]]= _0x4455[7]}));mxEvent[_0x4455[33]](_0xdc42x3[_0x4455[1]],_0x4455[92],mxUtils[_0x4455[20]](this,function(_0xdc42x6){_0xdc42x3[_0x4455[89]][_0x4455[88]]()[_0x4455[93]](_0x4455[85]);_0xdc42x3[_0x4455[94]]= true;_0xdc42x3[_0x4455[95]](_0xdc42x6[_0x4455[87]]);_0xdc42x3[_0x4455[89]][_0x4455[91]]()[_0x4455[6]][_0x4455[90]]= _0x4455[96]}))};var _0xdc42xf=this[_0x4455[97]](_0xdc42x1);this[_0x4455[98]]= function(){return _0xdc42xf};mxEvent[_0x4455[33]](window,_0x4455[99],mxUtils[_0x4455[20]](this,function(){this[_0x4455[15]]();_0xdc42x3[_0x4455[100]]();this[_0x4455[0]][_0x4455[80]][_0x4455[101]](false);this[_0x4455[0]][_0x4455[80]][_0x4455[80]][_0x4455[100]]()}));this[_0x4455[35]]();this[_0x4455[102]]()};EditorUi[_0x4455[10]][_0x4455[103]]= (mxClient[_0x4455[83]])?16:8;EditorUi[_0x4455[10]][_0x4455[104]]= 33;EditorUi[_0x4455[10]][_0x4455[105]]= 36;EditorUi[_0x4455[10]][_0x4455[106]]= 28;EditorUi[_0x4455[10]][_0x4455[107]]= 204;EditorUi[_0x4455[10]][_0x4455[108]]= 190;EditorUi[_0x4455[10]][_0x4455[35]]= function(){this[_0x4455[109]]();this[_0x4455[110]]();var _0xdc42x10=this[_0x4455[12]][_0x4455[112]](_0x4455[111]);var _0xdc42x11=function(){_0xdc42x10[_0x4455[114]](!mxClipboard[_0x4455[113]]())};var _0xdc42x12=mxClipboard[_0x4455[115]];mxClipboard[_0x4455[115]]= function(){_0xdc42x12[_0x4455[50]](this,arguments);_0xdc42x11()};var _0xdc42x13=mxClipboard[_0x4455[116]];mxClipboard[_0x4455[116]]= function(){_0xdc42x13[_0x4455[50]](this,arguments);_0xdc42x11()}};EditorUi[_0x4455[10]][_0x4455[18]]= function(_0xdc42x6){return false};EditorUi[_0x4455[10]][_0x4455[102]]= function(){try{if(window[_0x4455[117]]!= null&& window[_0x4455[117]][_0x4455[118]]!= null){window[_0x4455[117]][_0x4455[118]][_0x4455[130]](mxUtils[_0x4455[20]](this,function(_0xdc42x14,_0xdc42x15){try{var _0xdc42x16=mxUtils[_0x4455[119]](_0xdc42x14);this[_0x4455[0]][_0x4455[121]](_0xdc42x16[_0x4455[120]]);this[_0x4455[0]][_0x4455[122]]= false;this[_0x4455[0]][_0x4455[124]][_0x4455[123]]();if(_0xdc42x15!= null){this[_0x4455[0]][_0x4455[125]]= _0xdc42x15}}catch(e){mxUtils[_0x4455[129]](mxResources[_0x4455[112]](_0x4455[126])+ _0x4455[127]+ e[_0x4455[128]])}}))}}catch(e){}};EditorUi[_0x4455[10]][_0x4455[131]]= function(_0xdc42x14,_0xdc42x15,_0xdc42x17){try{var _0xdc42x16=mxUtils[_0x4455[119]](_0xdc42x14);this[_0x4455[0]][_0x4455[121]](_0xdc42x16[_0x4455[120]]);this[_0x4455[0]][_0x4455[122]]= false;this[_0x4455[0]][_0x4455[124]][_0x4455[123]]();if(_0xdc42x15!= null){this[_0x4455[0]][_0x4455[125]]= _0xdc42x15};if(_0xdc42x17!= null){this[_0x4455[0]][_0x4455[132]]= _0xdc42x17}}catch(e){mxUtils[_0x4455[129]](mxResources[_0x4455[112]](_0x4455[126])+ _0x4455[127]+ e[_0x4455[128]])}};EditorUi[_0x4455[10]][_0x4455[133]]= function(_0xdc42x18){var _0xdc42x1=this[_0x4455[0]];if(_0xdc42x18!= null){var _0xdc42x14=mxUtils[_0x4455[135]](this[_0x4455[0]][_0x4455[134]]());try{if(useLocalStorage){if(localStorage[_0x4455[136]](_0xdc42x18)!= null&& !mxUtils[_0x4455[138]](mxResources[_0x4455[112]](_0x4455[137],[_0xdc42x18]))){return};localStorage[_0x4455[139]](_0xdc42x18,_0xdc42x14);this[_0x4455[0]][_0x4455[142]](mxResources[_0x4455[112]](_0x4455[140])+ _0x4455[141]+ new Date())}else {console[_0x4455[72]](_0xdc42x14[_0x4455[143]]);console[_0x4455[72]](MAX_REQUEST_SIZE);if(_0xdc42x14[_0x4455[143]]< MAX_REQUEST_SIZE){_0xdc42x14= encodeURIComponent(_0xdc42x14);_0xdc42x18= encodeURIComponent(_0xdc42x18);var _0xdc42x19= new XMLHttpRequest();_0xdc42x19[_0x4455[102]](_0x4455[144],SAVE_URL,true);_0xdc42x19[_0x4455[147]](_0x4455[145],_0x4455[146]);_0xdc42x19[_0x4455[147]](_0x4455[148],_0x4455[149]+ _0xdc42x1[_0x4455[132]][_0x4455[150]]);_0xdc42x19[_0x4455[151]]= function(_0xdc42x1a){if(_0xdc42x19[_0x4455[152]]=== 4){if(_0xdc42x19[_0x4455[153]]=== 201){_0xdc42x1[_0x4455[142]](_0x4455[154]+ JSON[_0x4455[157]](_0xdc42x19[_0x4455[156]])[_0x4455[155]]+ _0x4455[158]);setTimeout(function(){window[_0x4455[102]](_0x4455[159]+ JSON[_0x4455[157]](_0xdc42x19[_0x4455[156]])[_0x4455[160]],_0x4455[161])},1500)}else {try{var _0xdc42x1b=JSON[_0x4455[157]](_0xdc42x19[_0x4455[156]]);_0xdc42x1[_0x4455[142]](_0x4455[162]+ _0xdc42x1b[_0x4455[163]][0][_0x4455[128]])}catch(_0xdc42x1a){_0xdc42x1[_0x4455[142]](_0x4455[164]+ _0x4455[165]+ _0xdc42x19[_0x4455[153]]+ _0x4455[141]+ _0xdc42x19[_0x4455[166]]+ _0x4455[44])}}}};_0xdc42x19[_0x4455[167]]= function(_0xdc42x1a){mxUtils[_0x4455[129]](_0xdc42x19[_0x4455[166]])};_0xdc42x19[_0x4455[169]](_0x4455[168]+ _0xdc42x18)}else {mxUtils[_0x4455[129]](mxResources[_0x4455[112]](_0x4455[170]));mxUtils[_0x4455[171]](_0xdc42x14);return}};this[_0x4455[0]][_0x4455[125]]= _0xdc42x18;this[_0x4455[0]][_0x4455[122]]= false}catch(e){this[_0x4455[0]][_0x4455[142]](_0x4455[164])}}else {this[_0x4455[0]][_0x4455[142]](_0x4455[164])}};EditorUi[_0x4455[10]][_0x4455[172]]= function(_0xdc42x18){var _0xdc42x1=this[_0x4455[0]];if(_0xdc42x18!= null){var _0xdc42x14=mxUtils[_0x4455[135]](this[_0x4455[0]][_0x4455[134]]());try{if(useLocalStorage){if(localStorage[_0x4455[136]](_0xdc42x18)!= null&& !mxUtils[_0x4455[138]](mxResources[_0x4455[112]](_0x4455[137],[_0xdc42x18]))){return};localStorage[_0x4455[139]](_0xdc42x18,_0xdc42x14);this[_0x4455[0]][_0x4455[142]](mxResources[_0x4455[112]](_0x4455[140])+ _0x4455[141]+ new Date())}else {console[_0x4455[72]](_0xdc42x14[_0x4455[143]]);console[_0x4455[72]](MAX_REQUEST_SIZE);if(_0xdc42x14[_0x4455[143]]< MAX_REQUEST_SIZE){_0xdc42x14= encodeURIComponent(_0xdc42x14);var _0xdc42x19= new XMLHttpRequest();_0xdc42x19[_0x4455[102]](_0x4455[173],SAVE_URL+ this[_0x4455[0]][_0x4455[132]][_0x4455[160]],true);_0xdc42x19[_0x4455[147]](_0x4455[145],_0x4455[146]);_0xdc42x19[_0x4455[147]](_0x4455[148],_0x4455[149]+ _0xdc42x1[_0x4455[132]][_0x4455[150]]);_0xdc42x19[_0x4455[151]]= function(_0xdc42x1a){if(_0xdc42x19[_0x4455[152]]=== 4){if(_0xdc42x19[_0x4455[153]]=== 200){_0xdc42x1[_0x4455[142]](_0x4455[174]+ JSON[_0x4455[157]](_0xdc42x19[_0x4455[156]])[_0x4455[175]]+ _0x4455[165]+ _0xdc42x19[_0x4455[153]]+ _0x4455[141]+ _0xdc42x19[_0x4455[166]]+ _0x4455[44])}else {try{var _0xdc42x1b=JSON[_0x4455[157]](_0xdc42x19[_0x4455[156]]);_0xdc42x1[_0x4455[142]](_0x4455[176]+ _0xdc42x1b[_0x4455[163]][0][_0x4455[128]])}catch(_0xdc42x1a){_0xdc42x1[_0x4455[142]](_0x4455[177]+ _0x4455[165]+ _0xdc42x19[_0x4455[153]]+ _0x4455[141]+ _0xdc42x19[_0x4455[166]]+ _0x4455[44])}}}};_0xdc42x19[_0x4455[167]]= function(_0xdc42x1a){mxUtils[_0x4455[129]](_0xdc42x19[_0x4455[166]])};_0xdc42x19[_0x4455[169]](_0x4455[178]+ _0xdc42x14)}else {mxUtils[_0x4455[129]](mxResources[_0x4455[112]](_0x4455[170]));mxUtils[_0x4455[171]](_0xdc42x14);return}};this[_0x4455[0]][_0x4455[125]]= _0xdc42x18;this[_0x4455[0]][_0x4455[122]]= false}catch(e){this[_0x4455[0]][_0x4455[142]](_0x4455[179])}}else {this[_0x4455[0]][_0x4455[142]](_0x4455[179])}};EditorUi[_0x4455[10]][_0x4455[180]]= function(_0xdc42x18){var _0xdc42x1=this[_0x4455[0]];console[_0x4455[72]](_0xdc42x18);if(_0xdc42x18!= null){var _0xdc42x14=mxUtils[_0x4455[135]](this[_0x4455[0]][_0x4455[134]]());try{if(useLocalStorage){if(localStorage[_0x4455[136]](_0xdc42x18)!= null&& !mxUtils[_0x4455[138]](mxResources[_0x4455[112]](_0x4455[137],[_0xdc42x18]))){return};localStorage[_0x4455[139]](_0xdc42x18,_0xdc42x14);this[_0x4455[0]][_0x4455[142]](mxResources[_0x4455[112]](_0x4455[140])+ _0x4455[141]+ new Date())}else {console[_0x4455[72]](_0xdc42x14[_0x4455[143]]);console[_0x4455[72]](MAX_REQUEST_SIZE);if(_0xdc42x14[_0x4455[143]]< MAX_REQUEST_SIZE){_0xdc42x14= encodeURIComponent(_0xdc42x14);_0xdc42x18= encodeURIComponent(_0xdc42x18);var _0xdc42x19= new XMLHttpRequest();_0xdc42x19[_0x4455[102]](_0x4455[144],SAVE_URL,true);_0xdc42x19[_0x4455[147]](_0x4455[145],_0x4455[146]);_0xdc42x19[_0x4455[147]](_0x4455[148],_0x4455[149]+ _0xdc42x1[_0x4455[132]][_0x4455[150]]);_0xdc42x19[_0x4455[151]]= function(_0xdc42x1a){if(_0xdc42x19[_0x4455[152]]=== 4){if(_0xdc42x19[_0x4455[153]]=== 201){_0xdc42x1[_0x4455[142]](_0x4455[154]+ JSON[_0x4455[157]](_0xdc42x19[_0x4455[156]])[_0x4455[155]]+ _0x4455[158]);setTimeout(function(){window[_0x4455[102]](_0x4455[181]+ JSON[_0x4455[157]](_0xdc42x19[_0x4455[156]])[_0x4455[160]],_0x4455[161])},1500)}else {try{var _0xdc42x1b=JSON[_0x4455[157]](_0xdc42x19[_0x4455[156]]);_0xdc42x1[_0x4455[142]](_0x4455[182]+ _0xdc42x1b[_0x4455[163]][0][_0x4455[128]])}catch(_0xdc42x1a){_0xdc42x1[_0x4455[142]](_0x4455[183]+ _0x4455[165]+ _0xdc42x19[_0x4455[153]]+ _0x4455[141]+ _0xdc42x19[_0x4455[166]]+ _0x4455[44])}}}};_0xdc42x19[_0x4455[167]]= function(_0xdc42x1a){mxUtils[_0x4455[129]](_0xdc42x19[_0x4455[166]])};_0xdc42x19[_0x4455[169]](_0x4455[184]+ _0xdc42x18+ _0x4455[185]+ _0xdc42x14+ _0x4455[186]+ _0xdc42x14)}else {mxUtils[_0x4455[129]](mxResources[_0x4455[112]](_0x4455[170]));mxUtils[_0x4455[171]](_0xdc42x14);return}};this[_0x4455[0]][_0x4455[125]]= _0xdc42x18;this[_0x4455[0]][_0x4455[122]]= false}catch(e){this[_0x4455[0]][_0x4455[142]](_0x4455[179])}}else {this[_0x4455[0]][_0x4455[142]](_0x4455[179])}};EditorUi[_0x4455[10]][_0x4455[187]]= function(_0xdc42x1c,_0xdc42x1d){var _0xdc42x3=this[_0x4455[0]][_0x4455[4]];_0xdc42x1c= null!= _0xdc42x1c?_0xdc42x1c:_0xdc42x3[_0x4455[189]][_0x4455[188]]();_0xdc42x1d= null!= _0xdc42x1d?_0xdc42x1d:{};for(var _0xdc42x1e=!0,_0xdc42x1f=_0xdc42x3[_0x4455[189]][_0x4455[190]](_0xdc42x1c),_0xdc42x1a=0;_0xdc42x1a< _0xdc42x1f;_0xdc42x1a++){var _0xdc42x20=_0xdc42x3[_0x4455[189]][_0x4455[191]](_0xdc42x1c,_0xdc42x1a),_0xdc42x21=_0xdc42x1d;_0xdc42x3[_0x4455[192]](_0xdc42x20)&& (_0xdc42x21= {});_0xdc42x21= this[_0x4455[187]](_0xdc42x20,_0xdc42x21);null!= _0xdc42x21?_0xdc42x3[_0x4455[194]](_0xdc42x20,_0xdc42x21[_0x4455[137]](/\n/g,_0x4455[193])):_0xdc42x3[_0x4455[194]](_0xdc42x20,null);_0xdc42x1e= _0xdc42x1e&& null== _0xdc42x21};_0xdc42x1f= _0x4455[195];if(_0xdc42x3[_0x4455[189]][_0x4455[71]](_0xdc42x1c)){switch(_0xdc42x1c[_0x4455[67]][_0x4455[203]]){case _0x4455[55]:_0xdc42x1f= (_0xdc42x1c[_0x4455[67]][_0x4455[196]](_0x4455[55])!== _0x4455[195])?_0x4455[195]:_0x4455[197]+ _0x4455[198];_0xdc42x1f+= (_0xdc42x1c[_0x4455[67]][_0x4455[196]](_0x4455[199])!== _0x4455[195])?_0x4455[195]:_0x4455[200]+ _0x4455[198];break;case _0x4455[54]:_0xdc42x1f= (_0xdc42x1c[_0x4455[67]][_0x4455[196]](_0x4455[55])!== _0x4455[195])?_0x4455[195]:_0x4455[197]+ _0x4455[198];_0xdc42x1f+= (_0xdc42x1c[_0x4455[67]][_0x4455[196]](_0x4455[199])!== _0x4455[195])?_0x4455[195]:_0x4455[200]+ _0x4455[198];break;case _0x4455[52]:_0xdc42x1f= this[_0x4455[201]](_0x4455[52])?_0x4455[195]:_0x4455[202]+ _0x4455[198];_0xdc42x1f+= (_0xdc42x1c[_0x4455[67]][_0x4455[196]](_0x4455[199])!== _0x4455[195])?_0x4455[195]:_0x4455[200]+ _0x4455[198];break}};if(_0xdc42x3[_0x4455[189]][_0x4455[64]](_0xdc42x1c)){var _0xdc42x22=_0xdc42x3[_0x4455[189]][_0x4455[205]](_0xdc42x1c[_0x4455[68]][_0x4455[204]]());switch(_0xdc42x22[_0x4455[67]][_0x4455[203]]){case _0x4455[55]:var _0xdc42x23=String(_0xdc42x1c[_0x4455[206]]());console[_0x4455[72]](_0xdc42x23);if(_0xdc42x23=== _0x4455[207]|| _0xdc42x23=== _0x4455[31]){_0xdc42x1f= _0x4455[208]+ _0x4455[198]}else {var _0xdc42x24=_0xdc42x23[_0x4455[210]](_0x4455[209]);_0xdc42x24[_0x4455[214]](function(_0xdc42x25,_0xdc42x26){_0xdc42x1f= _0xdc42x1f+ ((_0xdc42x25[_0x4455[211]]()!== _0x4455[195])?_0x4455[195]:_0x4455[212]+ (_0xdc42x26+ 1)+ _0x4455[213]+ _0x4455[198])})};break}};_0xdc42x3[_0x4455[215]](_0xdc42x1c)&& !_0xdc42x1e&& (_0xdc42x1f+= (mxResources[_0x4455[112]](_0xdc42x3[_0x4455[216]])|| _0xdc42x3[_0x4455[216]])+ _0x4455[198]);_0xdc42x1f= _0xdc42x3[_0x4455[189]][_0x4455[64]](_0xdc42x1c)?_0xdc42x1f+ (_0xdc42x3[_0x4455[218]](_0xdc42x1c,_0xdc42x3[_0x4455[189]][_0x4455[217]](_0xdc42x1c,!0),_0xdc42x3[_0x4455[189]][_0x4455[217]](_0xdc42x1c,!1))|| _0x4455[195]):_0xdc42x1f+ (_0xdc42x3[_0x4455[219]](_0xdc42x1c)|| _0x4455[195]);_0xdc42x1a= _0xdc42x3[_0x4455[220]](_0xdc42x1c,_0xdc42x1d);null!= _0xdc42x1a&& (_0xdc42x1f+= _0xdc42x1a);null== _0xdc42x3[_0x4455[189]][_0x4455[221]](_0xdc42x1c)&& _0xdc42x3[_0x4455[89]][_0x4455[187]]();return 0< _0xdc42x1f[_0x4455[143]]|| !_0xdc42x1e?_0xdc42x1f:null};EditorUi[_0x4455[10]][_0x4455[201]]= function(_0xdc42x27){var _0xdc42x3=this[_0x4455[0]][_0x4455[4]];var _0xdc42x28=_0xdc42x3[_0x4455[222]]();var _0xdc42x29=0;_0xdc42x28[_0x4455[223]][_0x4455[214]](function(_0xdc42x2a){if(_0xdc42x3[_0x4455[189]][_0x4455[71]](_0xdc42x2a)&& _0xdc42x2a[_0x4455[67]][_0x4455[203]]== _0xdc42x27){_0xdc42x29++}});return _0xdc42x29> 1?false:true};EditorUi[_0x4455[10]][_0x4455[224]]= function(_0xdc42x18){var _0xdc42x1=this[_0x4455[0]];if(_0xdc42x18!= null){var _0xdc42x1b=this[_0x4455[187]]();if(_0xdc42x1b=== null){var _0xdc42x14=mxUtils[_0x4455[135]](this[_0x4455[0]][_0x4455[134]]());try{if(useLocalStorage){if(localStorage[_0x4455[136]](_0xdc42x18)!= null&& !mxUtils[_0x4455[138]](mxResources[_0x4455[112]](_0x4455[137],[_0xdc42x18]))){return};localStorage[_0x4455[139]](_0xdc42x18,_0xdc42x14);this[_0x4455[0]][_0x4455[142]](mxResources[_0x4455[112]](_0x4455[140])+ _0x4455[141]+ new Date())}else {console[_0x4455[72]](_0xdc42x14[_0x4455[143]]);console[_0x4455[72]](MAX_REQUEST_SIZE);if(_0xdc42x14[_0x4455[143]]< MAX_REQUEST_SIZE){_0xdc42x14= encodeURIComponent(_0xdc42x14);var _0xdc42x19= new XMLHttpRequest();_0xdc42x19[_0x4455[102]](_0x4455[173],SAVE_URL+ this[_0x4455[0]][_0x4455[132]][_0x4455[160]],true);_0xdc42x19[_0x4455[147]](_0x4455[145],_0x4455[146]);_0xdc42x19[_0x4455[147]](_0x4455[148],_0x4455[149]+ _0xdc42x1[_0x4455[132]][_0x4455[150]]);_0xdc42x19[_0x4455[151]]= function(_0xdc42x1a){if(_0xdc42x19[_0x4455[152]]=== 4){if(_0xdc42x19[_0x4455[153]]=== 200){_0xdc42x1[_0x4455[142]](_0x4455[225]+ JSON[_0x4455[157]](_0xdc42x19[_0x4455[156]])[_0x4455[175]]+ _0x4455[165]+ _0xdc42x19[_0x4455[153]]+ _0x4455[141]+ _0xdc42x19[_0x4455[166]]+ _0x4455[44])}else {try{var _0xdc42x1b=JSON[_0x4455[157]](_0xdc42x19[_0x4455[156]]);_0xdc42x1[_0x4455[142]](_0x4455[226]+ _0xdc42x1b[_0x4455[163]][0][_0x4455[128]])}catch(_0xdc42x1a){_0xdc42x1[_0x4455[142]](_0x4455[227]+ _0x4455[165]+ _0xdc42x19[_0x4455[153]]+ _0x4455[141]+ _0xdc42x19[_0x4455[166]]+ _0x4455[44])}}}};_0xdc42x19[_0x4455[167]]= function(_0xdc42x1a){mxUtils[_0x4455[129]](_0xdc42x19[_0x4455[166]])};_0xdc42x19[_0x4455[169]](_0x4455[178]+ _0xdc42x14+ _0x4455[186]+ _0xdc42x14)}else {mxUtils[_0x4455[129]](mxResources[_0x4455[112]](_0x4455[170]));mxUtils[_0x4455[171]](_0xdc42x14);return}};this[_0x4455[0]][_0x4455[125]]= _0xdc42x18;this[_0x4455[0]][_0x4455[122]]= false}catch(e){this[_0x4455[0]][_0x4455[142]](_0x4455[228])}}else {_0xdc42x1[_0x4455[142]](_0x4455[226])}}else {this[_0x4455[0]][_0x4455[142]](_0x4455[228])}};EditorUi[_0x4455[10]][_0x4455[229]]= function(_0xdc42x18){var _0xdc42x1=this[_0x4455[0]];if(_0xdc42x18!= null){try{var _0xdc42x19= new XMLHttpRequest();_0xdc42x19[_0x4455[102]](_0x4455[144],VARIABLE_URL,true);_0xdc42x19[_0x4455[147]](_0x4455[145],_0x4455[146]);_0xdc42x19[_0x4455[147]](_0x4455[148],_0x4455[149]+ _0xdc42x1[_0x4455[132]][_0x4455[150]]);_0xdc42x19[_0x4455[151]]= function(_0xdc42x1a){if(_0xdc42x19[_0x4455[152]]=== 4){if(_0xdc42x19[_0x4455[153]]=== 201){_0xdc42x1[_0x4455[142]](_0x4455[230]+ JSON[_0x4455[157]](_0xdc42x19[_0x4455[156]])[_0x4455[231]]+ _0x4455[165]+ _0xdc42x19[_0x4455[153]]+ _0x4455[141]+ _0xdc42x19[_0x4455[166]]+ _0x4455[44])}else {try{var _0xdc42x1b=JSON[_0x4455[157]](_0xdc42x19[_0x4455[156]]);_0xdc42x1[_0x4455[142]](_0x4455[232]+ _0xdc42x1b[_0x4455[163]][0][_0x4455[128]])}catch(_0xdc42x1a){_0xdc42x1[_0x4455[142]](_0x4455[233]+ _0x4455[165]+ _0xdc42x19[_0x4455[153]]+ _0x4455[141]+ _0xdc42x19[_0x4455[166]]+ _0x4455[44])}}}};_0xdc42x19[_0x4455[167]]= function(_0xdc42x1a){mxUtils[_0x4455[129]](_0xdc42x19[_0x4455[166]])};_0xdc42x19[_0x4455[169]](_0x4455[234]+ _0xdc42x18)}catch(e){this[_0x4455[0]][_0x4455[142]](_0x4455[233])}}else {this[_0x4455[0]][_0x4455[142]](_0x4455[233])}};EditorUi[_0x4455[10]][_0x4455[235]]= function(_0xdc42x2b){var _0xdc42x2c=(_0xdc42x2b!= null)?_0xdc42x2b:window[_0x4455[237]][_0x4455[236]];var _0xdc42x2d=(_0xdc42x2c[_0x4455[69]](_0x4455[238])> 0)?1:0;for(var _0xdc42x26 in urlParams){if(_0xdc42x2d== 0){_0xdc42x2c+= _0x4455[238]}else {_0xdc42x2c+= _0x4455[239]};_0xdc42x2c+= _0xdc42x26+ _0x4455[240]+ urlParams[_0xdc42x26];_0xdc42x2d++};return _0xdc42x2c};EditorUi[_0x4455[10]][_0x4455[109]]= function(){var _0xdc42x2e=this[_0x4455[12]][_0x4455[112]](_0x4455[241]);var _0xdc42x2f=this[_0x4455[12]][_0x4455[112]](_0x4455[242]);var _0xdc42x30=this[_0x4455[0]][_0x4455[124]];var _0xdc42x31=function(){_0xdc42x2e[_0x4455[114]](_0xdc42x30[_0x4455[243]]());_0xdc42x2f[_0x4455[114]](_0xdc42x30[_0x4455[244]]())};_0xdc42x30[_0x4455[33]](mxEvent.ADD,_0xdc42x31);_0xdc42x30[_0x4455[33]](mxEvent.UNDO,_0xdc42x31);_0xdc42x30[_0x4455[33]](mxEvent.REDO,_0xdc42x31);_0xdc42x30[_0x4455[33]](mxEvent.CLEAR,_0xdc42x31);_0xdc42x31()};EditorUi[_0x4455[10]][_0x4455[110]]= function(){var _0xdc42x32=mxUtils[_0x4455[20]](this,function(){var _0xdc42x3=this[_0x4455[0]][_0x4455[4]];var _0xdc42x33=!_0xdc42x3[_0x4455[245]]();var _0xdc42x34=false;var _0xdc42x35=false;var _0xdc42x36=_0xdc42x3[_0x4455[246]]();if(_0xdc42x36!= null){for(var _0xdc42x37=0;_0xdc42x37< _0xdc42x36[_0x4455[143]];_0xdc42x37++){var _0xdc42xb=_0xdc42x36[_0xdc42x37];if(_0xdc42x3[_0x4455[65]]()[_0x4455[64]](_0xdc42xb)){_0xdc42x35= true};if(_0xdc42x3[_0x4455[65]]()[_0x4455[71]](_0xdc42xb)){_0xdc42x34= true};if(_0xdc42x35&& _0xdc42x34){break}}};var _0xdc42x38=[_0x4455[115],_0x4455[116],_0x4455[247],_0x4455[248],_0x4455[249],_0x4455[250],_0x4455[6],_0x4455[251],_0x4455[252],_0x4455[253],_0x4455[254],_0x4455[255],_0x4455[256],_0x4455[257],_0x4455[258]];for(var _0xdc42x37=0;_0xdc42x37< _0xdc42x38[_0x4455[143]];_0xdc42x37++){this[_0x4455[12]][_0x4455[112]](_0xdc42x38[_0xdc42x37])[_0x4455[114]](_0xdc42x33)};this[_0x4455[12]][_0x4455[112]](_0x4455[259])[_0x4455[114]](_0xdc42x35);this[_0x4455[12]][_0x4455[112]](_0x4455[260])[_0x4455[114]](_0xdc42x34);this[_0x4455[12]][_0x4455[112]](_0x4455[261])[_0x4455[114]](_0xdc42x34);this[_0x4455[12]][_0x4455[112]](_0x4455[263])[_0x4455[114]](_0xdc42x3[_0x4455[262]]()> 1);this[_0x4455[12]][_0x4455[112]](_0x4455[265])[_0x4455[114]](_0xdc42x3[_0x4455[262]]()== 1&& _0xdc42x3[_0x4455[65]]()[_0x4455[190]](_0xdc42x3[_0x4455[264]]())> 0);var _0xdc42x39=_0xdc42x34&& _0xdc42x3[_0x4455[262]]()== 1;this[_0x4455[12]][_0x4455[112]](_0x4455[266])[_0x4455[114]](_0xdc42x39&& _0xdc42x3[_0x4455[65]]()[_0x4455[71]](_0xdc42x3[_0x4455[65]]()[_0x4455[221]](_0xdc42x3[_0x4455[264]]())));var _0xdc42x3a=[_0x4455[267],_0x4455[268],_0x4455[269],_0x4455[270],_0x4455[271],_0x4455[272],_0x4455[273],_0x4455[274],_0x4455[275]];for(var _0xdc42x37=0;_0xdc42x37< _0xdc42x3a[_0x4455[143]];_0xdc42x37++){this[_0x4455[13]][_0x4455[112]](_0xdc42x3a[_0xdc42x37])[_0x4455[114]](_0xdc42x33)};_0xdc42x3a= [_0x4455[276],_0x4455[277],_0x4455[278]];for(var _0xdc42x37=0;_0xdc42x37< _0xdc42x3a[_0x4455[143]];_0xdc42x37++){this[_0x4455[13]][_0x4455[112]](_0xdc42x3a[_0xdc42x37])[_0x4455[114]](_0xdc42x35)};this[_0x4455[12]][_0x4455[112]](_0x4455[279])[_0x4455[114]](_0xdc42x35);this[_0x4455[13]][_0x4455[112]](_0x4455[280])[_0x4455[114]](_0xdc42x3[_0x4455[262]]()> 1);this[_0x4455[13]][_0x4455[112]](_0x4455[283])[_0x4455[114]](_0xdc42x34|| (_0xdc42x35&& _0xdc42x3[_0x4455[282]](_0xdc42x3[_0x4455[89]][_0x4455[281]](_0xdc42x3[_0x4455[264]]()))));this[_0x4455[13]][_0x4455[112]](_0x4455[286])[_0x4455[114]](_0xdc42x3[_0x4455[284]]&& ((_0xdc42x3[_0x4455[89]][_0x4455[285]]!= null)|| (_0xdc42x3[_0x4455[262]]()== 1&& _0xdc42x3[_0x4455[192]](_0xdc42x3[_0x4455[264]]()))));this[_0x4455[12]][_0x4455[112]](_0x4455[287])[_0x4455[114]](_0xdc42x3[_0x4455[89]][_0x4455[285]]!= null);this[_0x4455[12]][_0x4455[112]](_0x4455[288])[_0x4455[114]](_0xdc42x3[_0x4455[89]][_0x4455[285]]!= null);var _0xdc42x3b=_0xdc42x3[_0x4455[262]]()== 1&& _0xdc42x3[_0x4455[192]](_0xdc42x3[_0x4455[264]]());this[_0x4455[12]][_0x4455[112]](_0x4455[289])[_0x4455[114]](_0xdc42x3b);this[_0x4455[12]][_0x4455[112]](_0x4455[290])[_0x4455[114]](_0xdc42x3b);this[_0x4455[12]][_0x4455[112]](_0x4455[291])[_0x4455[114]](_0xdc42x3b);this[_0x4455[12]][_0x4455[112]](_0x4455[292])[_0x4455[114]](_0xdc42x3[_0x4455[262]]()== 1);this[_0x4455[12]][_0x4455[112]](_0x4455[294])[_0x4455[114]](_0xdc42x3[_0x4455[262]]()== 1&& _0xdc42x3[_0x4455[293]](_0xdc42x3[_0x4455[264]]())!= null)});this[_0x4455[0]][_0x4455[4]][_0x4455[295]]()[_0x4455[33]](mxEvent.CHANGE,_0xdc42x32);_0xdc42x32()};EditorUi[_0x4455[10]][_0x4455[15]]= function(){var _0xdc42x3c=mxClient[_0x4455[29]]&& (document[_0x4455[30]]== null|| document[_0x4455[30]]== 5);var _0xdc42x3d=this[_0x4455[1]][_0x4455[296]];var _0xdc42x3e=this[_0x4455[1]][_0x4455[297]];if(this[_0x4455[1]]== document[_0x4455[21]]){_0xdc42x3d= document[_0x4455[21]][_0x4455[296]]|| document[_0x4455[120]][_0x4455[296]];_0xdc42x3e= (_0xdc42x3c)?document[_0x4455[21]][_0x4455[297]]|| document[_0x4455[120]][_0x4455[297]]:document[_0x4455[120]][_0x4455[297]]};var _0xdc42x3f=Math[_0x4455[299]](0,Math[_0x4455[298]](this[_0x4455[107]],_0xdc42x3d- this[_0x4455[103]]- 20));var _0xdc42x40=Math[_0x4455[299]](0,Math[_0x4455[298]](this[_0x4455[108]],_0xdc42x3e- this[_0x4455[104]]- this[_0x4455[105]]- this[_0x4455[106]]- this[_0x4455[103]]- 1));this[_0x4455[23]][_0x4455[6]][_0x4455[300]]= this[_0x4455[104]]+ _0x4455[301];this[_0x4455[25]][_0x4455[6]][_0x4455[302]]= this[_0x4455[104]]+ _0x4455[301];this[_0x4455[25]][_0x4455[6]][_0x4455[300]]= this[_0x4455[105]]+ _0x4455[301];var _0xdc42x41=this[_0x4455[104]]+ this[_0x4455[105]];if(!mxClient[_0x4455[303]]){_0xdc42x41+= 1};this[_0x4455[27]][_0x4455[6]][_0x4455[302]]= _0xdc42x41+ _0x4455[301];this[_0x4455[27]][_0x4455[6]][_0x4455[304]]= _0xdc42x3f+ _0x4455[301];this[_0x4455[79]][_0x4455[6]][_0x4455[304]]= _0xdc42x3f+ _0x4455[301];this[_0x4455[79]][_0x4455[6]][_0x4455[300]]= _0xdc42x40+ _0x4455[301];this[_0x4455[79]][_0x4455[6]][_0x4455[305]]= this[_0x4455[106]]+ _0x4455[301];this[_0x4455[26]][_0x4455[6]][_0x4455[306]]= (_0xdc42x3f+ this[_0x4455[103]])+ _0x4455[301];this[_0x4455[26]][_0x4455[6]][_0x4455[302]]= this[_0x4455[27]][_0x4455[6]][_0x4455[302]];this[_0x4455[28]][_0x4455[6]][_0x4455[300]]= this[_0x4455[106]]+ _0x4455[301];this[_0x4455[28]][_0x4455[6]][_0x4455[307]]= _0x4455[308];this[_0x4455[309]][_0x4455[6]][_0x4455[302]]= this[_0x4455[27]][_0x4455[6]][_0x4455[302]];this[_0x4455[309]][_0x4455[6]][_0x4455[305]]= this[_0x4455[79]][_0x4455[6]][_0x4455[305]];this[_0x4455[309]][_0x4455[6]][_0x4455[306]]= _0xdc42x3f+ _0x4455[301];this[_0x4455[310]][_0x4455[6]][_0x4455[304]]= this[_0x4455[27]][_0x4455[6]][_0x4455[304]];this[_0x4455[310]][_0x4455[6]][_0x4455[305]]= (_0xdc42x40+ this[_0x4455[106]])+ _0x4455[301];if(_0xdc42x3c){this[_0x4455[23]][_0x4455[6]][_0x4455[304]]= _0xdc42x3d+ _0x4455[301];this[_0x4455[25]][_0x4455[6]][_0x4455[304]]= this[_0x4455[23]][_0x4455[6]][_0x4455[304]];var _0xdc42x42=(_0xdc42x3e- _0xdc42x40- this[_0x4455[103]]- this[_0x4455[106]]- this[_0x4455[104]]- this[_0x4455[105]]);this[_0x4455[27]][_0x4455[6]][_0x4455[300]]= _0xdc42x42+ _0x4455[301];this[_0x4455[26]][_0x4455[6]][_0x4455[304]]= (_0xdc42x3d- _0xdc42x3f- this[_0x4455[103]])+ _0x4455[301];var _0xdc42x43=(_0xdc42x3e- this[_0x4455[106]]- this[_0x4455[104]]- this[_0x4455[105]]);this[_0x4455[26]][_0x4455[6]][_0x4455[300]]= _0xdc42x43+ _0x4455[301];this[_0x4455[28]][_0x4455[6]][_0x4455[304]]= this[_0x4455[23]][_0x4455[6]][_0x4455[304]];this[_0x4455[309]][_0x4455[6]][_0x4455[300]]= _0xdc42x43+ _0x4455[301]}else {this[_0x4455[27]][_0x4455[6]][_0x4455[305]]= (_0xdc42x40+ this[_0x4455[103]]+ this[_0x4455[106]])+ _0x4455[301];this[_0x4455[26]][_0x4455[6]][_0x4455[305]]= this[_0x4455[79]][_0x4455[6]][_0x4455[305]]}};EditorUi[_0x4455[10]][_0x4455[14]]= function(){this[_0x4455[23]]= this[_0x4455[312]](_0x4455[311]);this[_0x4455[25]]= this[_0x4455[312]](_0x4455[313]);this[_0x4455[27]]= this[_0x4455[312]](_0x4455[314]);this[_0x4455[79]]= this[_0x4455[312]](_0x4455[315]);this[_0x4455[26]]= this[_0x4455[312]](_0x4455[316]);this[_0x4455[28]]= this[_0x4455[312]](_0x4455[317]);this[_0x4455[309]]= this[_0x4455[312]](_0x4455[318]);this[_0x4455[310]]= this[_0x4455[312]](_0x4455[319]);this[_0x4455[23]][_0x4455[6]][_0x4455[302]]= _0x4455[320];this[_0x4455[23]][_0x4455[6]][_0x4455[306]]= _0x4455[320];this[_0x4455[23]][_0x4455[6]][_0x4455[321]]= _0x4455[320];this[_0x4455[25]][_0x4455[6]][_0x4455[306]]= _0x4455[320];this[_0x4455[25]][_0x4455[6]][_0x4455[321]]= _0x4455[320];this[_0x4455[27]][_0x4455[6]][_0x4455[306]]= _0x4455[320];this[_0x4455[79]][_0x4455[6]][_0x4455[306]]= _0x4455[320];this[_0x4455[26]][_0x4455[6]][_0x4455[321]]= _0x4455[320];this[_0x4455[28]][_0x4455[6]][_0x4455[306]]= _0x4455[320];this[_0x4455[28]][_0x4455[6]][_0x4455[321]]= _0x4455[320];this[_0x4455[28]][_0x4455[6]][_0x4455[305]]= _0x4455[320];this[_0x4455[310]][_0x4455[6]][_0x4455[306]]= _0x4455[320];this[_0x4455[310]][_0x4455[6]][_0x4455[300]]= this[_0x4455[103]]+ _0x4455[301];this[_0x4455[309]][_0x4455[6]][_0x4455[304]]= this[_0x4455[103]]+ _0x4455[301]};EditorUi[_0x4455[10]][_0x4455[16]]= function(){this[_0x4455[322]]= this[_0x4455[13]][_0x4455[324]](this[_0x4455[312]](_0x4455[323]));this[_0x4455[23]][_0x4455[325]](this[_0x4455[322]][_0x4455[1]]);this[_0x4455[326]]= this[_0x4455[328]](this[_0x4455[312]](_0x4455[327]));this[_0x4455[25]][_0x4455[325]](this[_0x4455[326]][_0x4455[1]]);this[_0x4455[329]]= this[_0x4455[330]](this[_0x4455[27]]);this[_0x4455[28]][_0x4455[325]](this[_0x4455[331]]());this[_0x4455[332]]= this[_0x4455[333]]();this[_0x4455[0]][_0x4455[33]](_0x4455[334],mxUtils[_0x4455[20]](this,function(){this[_0x4455[336]](this[_0x4455[0]][_0x4455[335]]())}));this[_0x4455[336]](this[_0x4455[0]][_0x4455[335]]());this[_0x4455[322]][_0x4455[1]][_0x4455[325]](this[_0x4455[332]]);this[_0x4455[1]][_0x4455[325]](this[_0x4455[23]]);this[_0x4455[1]][_0x4455[325]](this[_0x4455[25]]);this[_0x4455[1]][_0x4455[325]](this[_0x4455[27]]);this[_0x4455[1]][_0x4455[325]](this[_0x4455[79]]);this[_0x4455[1]][_0x4455[325]](this[_0x4455[26]]);this[_0x4455[1]][_0x4455[325]](this[_0x4455[28]]);this[_0x4455[1]][_0x4455[325]](this[_0x4455[309]]);this[_0x4455[1]][_0x4455[325]](this[_0x4455[310]]);this[_0x4455[337]](this[_0x4455[309]],true,0,mxUtils[_0x4455[20]](this,function(_0xdc42x44){this[_0x4455[107]]= _0xdc42x44;this[_0x4455[15]]();this[_0x4455[0]][_0x4455[4]][_0x4455[100]]();this[_0x4455[0]][_0x4455[80]][_0x4455[101]](false);this[_0x4455[0]][_0x4455[80]][_0x4455[80]][_0x4455[100]]()}));this[_0x4455[337]](this[_0x4455[310]],false,this[_0x4455[106]],mxUtils[_0x4455[20]](this,function(_0xdc42x44){this[_0x4455[108]]= _0xdc42x44;this[_0x4455[15]]();this[_0x4455[0]][_0x4455[80]][_0x4455[101]](false);this[_0x4455[0]][_0x4455[80]][_0x4455[80]][_0x4455[100]]()}))};EditorUi[_0x4455[10]][_0x4455[333]]= function(){var _0xdc42x2=document[_0x4455[339]](_0x4455[338]);_0xdc42x2[_0x4455[340]]= _0x4455[341];return _0xdc42x2};EditorUi[_0x4455[10]][_0x4455[333]]= function(){var _0xdc42x2=document[_0x4455[339]](_0x4455[338]);_0xdc42x2[_0x4455[340]]= _0x4455[341];return _0xdc42x2};EditorUi[_0x4455[10]][_0x4455[336]]= function(_0xdc42x44){this[_0x4455[332]][_0x4455[342]]= _0xdc42x44};EditorUi[_0x4455[10]][_0x4455[328]]= function(_0xdc42x2){return new Toolbar(this,_0xdc42x2)};EditorUi[_0x4455[10]][_0x4455[330]]= function(_0xdc42x2){return new Sidebar(this,_0xdc42x2)};EditorUi[_0x4455[10]][_0x4455[331]]= function(){return this[_0x4455[312]](_0x4455[343])};EditorUi[_0x4455[10]][_0x4455[312]]= function(_0xdc42x45){var _0xdc42x46=document[_0x4455[339]](_0x4455[344]);_0xdc42x46[_0x4455[340]]= _0xdc42x45;return _0xdc42x46};EditorUi[_0x4455[10]][_0x4455[345]]= function(_0xdc42x45){var _0xdc42x46=document[_0x4455[339]](_0xdc42x45);return _0xdc42x46};EditorUi[_0x4455[10]][_0x4455[346]]= function(_0xdc42x45){var _0xdc42x46=document[_0x4455[339]](_0x4455[347]);_0xdc42x46[_0x4455[340]]= _0xdc42x45;return _0xdc42x46};EditorUi[_0x4455[10]][_0x4455[337]]= function(_0xdc42x46,_0xdc42x47,_0xdc42x48,_0xdc42x49){var _0xdc42x4a=null;var _0xdc42x4b=null;function _0xdc42x4c(){return parseInt(((_0xdc42x47)?_0xdc42x46[_0x4455[6]][_0x4455[306]]:_0xdc42x46[_0x4455[6]][_0x4455[305]]))}function _0xdc42x4d(_0xdc42x6){if(_0xdc42x4a!= null){var _0xdc42x4e= new mxPoint(mxEvent[_0x4455[348]](_0xdc42x6),mxEvent[_0x4455[349]](_0xdc42x6));_0xdc42x49(Math[_0x4455[299]](0,_0xdc42x4b+ ((_0xdc42x47)?(_0xdc42x4e[_0x4455[350]]- _0xdc42x4a[_0x4455[350]]):(_0xdc42x4a[_0x4455[351]]- _0xdc42x4e[_0x4455[351]]))- _0xdc42x48));mxEvent[_0x4455[74]](_0xdc42x6)}}function _0xdc42x4f(_0xdc42x6){_0xdc42x4d(_0xdc42x6);_0xdc42x4a= null;_0xdc42x4b= null}mxEvent[_0x4455[82]](_0xdc42x46,function(_0xdc42x6){_0xdc42x4a= new mxPoint(mxEvent[_0x4455[348]](_0xdc42x6),mxEvent[_0x4455[349]](_0xdc42x6));_0xdc42x4b= _0xdc42x4c();mxEvent[_0x4455[74]](_0xdc42x6)});mxEvent[_0x4455[33]](document,_0x4455[352],_0xdc42x4d);mxEvent[_0x4455[33]](document,_0x4455[353],_0xdc42x4d);mxEvent[_0x4455[33]](document,_0x4455[354],_0xdc42x4f);mxEvent[_0x4455[33]](document,_0x4455[355],_0xdc42x4f)};EditorUi[_0x4455[10]][_0x4455[73]]= function(_0xdc42x46,_0xdc42x3d,_0xdc42x3e,_0xdc42x50,_0xdc42x51,_0xdc42x52){this[_0x4455[356]]();this[_0x4455[357]]= new Dialog(this,_0xdc42x46,_0xdc42x3d,(mxClient[_0x4455[358]])?_0xdc42x3e- 12:_0xdc42x3e,_0xdc42x50,_0xdc42x51,_0xdc42x52)};EditorUi[_0x4455[10]][_0x4455[356]]= function(){if(this[_0x4455[357]]!= null){this[_0x4455[357]][_0x4455[359]]();this[_0x4455[357]]= null;this[_0x4455[0]][_0x4455[4]][_0x4455[1]][_0x4455[47]]()}};EditorUi[_0x4455[10]][_0x4455[360]]= function(_0xdc42x53){if(!_0xdc42x53&& this[_0x4455[0]][_0x4455[125]]!= null){this[_0x4455[172]](this[_0x4455[0]][_0x4455[361]]())}else {this[_0x4455[73]]( new SaveDialog(this)[_0x4455[1]],300,100,true,true)}};EditorUi[_0x4455[10]][_0x4455[362]]= function(_0xdc42x53){if(!_0xdc42x53&& this[_0x4455[0]][_0x4455[125]]!= null){this[_0x4455[224]](this[_0x4455[0]][_0x4455[361]]())}else {}};EditorUi[_0x4455[10]][_0x4455[363]]= function(_0xdc42x54,_0xdc42x55,_0xdc42x56){var _0xdc42x3=this[_0x4455[0]][_0x4455[4]];var _0xdc42xb=_0xdc42x3[_0x4455[264]]();_0xdc42x55= this[_0x4455[364]]!= null?this[_0x4455[364]]:_0xdc42x55;_0xdc42x3[_0x4455[65]]()[_0x4455[365]]();try{_0xdc42x54[_0x4455[366]](_0xdc42x3[_0x4455[222]](),_0xdc42xb)}catch(e){throw e}finally{if(_0xdc42x55&& navigator[_0x4455[368]][_0x4455[69]](_0x4455[367])< 0){var _0xdc42x57= new mxMorphing(_0xdc42x3);_0xdc42x57[_0x4455[33]](mxEvent.DONE,mxUtils[_0x4455[20]](this,function(){_0xdc42x3[_0x4455[65]]()[_0x4455[369]]()}));_0xdc42x57[_0x4455[370]]()}else {_0xdc42x3[_0x4455[65]]()[_0x4455[369]]()}}};EditorUi[_0x4455[10]][_0x4455[97]]= function(_0xdc42x1){var _0xdc42x3=this[_0x4455[0]][_0x4455[4]];var _0xdc42xf= new mxKeyHandler(_0xdc42x3);_0xdc42xf[_0x4455[371]]= function(_0xdc42x6){return mxEvent[_0x4455[371]](_0xdc42x6)|| (mxClient[_0x4455[372]]&& _0xdc42x6[_0x4455[373]])};function _0xdc42x58(_0xdc42x59){if(!_0xdc42x3[_0x4455[245]]()){var _0xdc42x48=0;var _0xdc42x5a=0;if(_0xdc42x59== 37){_0xdc42x48= -1}else {if(_0xdc42x59== 38){_0xdc42x5a= -1}else {if(_0xdc42x59== 39){_0xdc42x48= 1}else {if(_0xdc42x59== 40){_0xdc42x5a= 1}}}};_0xdc42x3[_0x4455[374]](_0xdc42x3[_0x4455[246]](),_0xdc42x48,_0xdc42x5a);_0xdc42x3[_0x4455[375]](_0xdc42x3[_0x4455[264]]())}}var _0xdc42x5b=mxUtils[_0x4455[20]](this,function(_0xdc42x5c,_0xdc42x5d,_0xdc42x26,_0xdc42x5e){var _0xdc42x5f=this[_0x4455[12]][_0x4455[112]](_0xdc42x26);if(_0xdc42x5f!= null){var _0xdc42x20=function(){if(_0xdc42x5f[_0x4455[376]]){_0xdc42x5f[_0x4455[377]]()}};if(_0xdc42x5d){if(_0xdc42x5e){_0xdc42xf[_0x4455[378]](_0xdc42x5c,_0xdc42x20)}else {_0xdc42xf[_0x4455[379]](_0xdc42x5c,_0xdc42x20)}}else {if(_0xdc42x5e){_0xdc42xf[_0x4455[380]](_0xdc42x5c,_0xdc42x20)}else {_0xdc42xf[_0x4455[381]](_0xdc42x5c,_0xdc42x20)}}}});var _0xdc42x60=this;var _0xdc42x61=_0xdc42xf[_0x4455[382]];_0xdc42xf[_0x4455[382]]= function(_0xdc42x6){_0xdc42x60[_0x4455[356]]();_0xdc42x61[_0x4455[50]](this,arguments)};_0xdc42xf[_0x4455[383]]= function(){};_0xdc42xf[_0x4455[381]](8,function(){_0xdc42x3[_0x4455[384]](true)});_0xdc42xf[_0x4455[381]](13,function(){_0xdc42x3[_0x4455[384]](false)});_0xdc42xf[_0x4455[381]](33,function(){_0xdc42x3[_0x4455[288]]()});_0xdc42xf[_0x4455[381]](34,function(){_0xdc42x3[_0x4455[289]]()});_0xdc42xf[_0x4455[381]](36,function(){_0xdc42x3[_0x4455[287]]()});_0xdc42xf[_0x4455[381]](35,function(){_0xdc42x3[_0x4455[15]]()});_0xdc42xf[_0x4455[381]](37,function(){_0xdc42x58(37)});_0xdc42xf[_0x4455[381]](38,function(){_0xdc42x58(38)});_0xdc42xf[_0x4455[381]](39,function(){_0xdc42x58(39)});_0xdc42xf[_0x4455[381]](40,function(){_0xdc42x58(40)});_0xdc42xf[_0x4455[381]](113,function(){_0xdc42x3[_0x4455[70]]()});_0xdc42x5b(46,false,_0x4455[247]);_0xdc42x5b(82,true,_0x4455[257]);_0xdc42x5b(83,true,_0x4455[172]);_0xdc42x5b(83,true,_0x4455[180],true);_0xdc42x5b(107,false,_0x4455[385]);_0xdc42x5b(109,false,_0x4455[386]);_0xdc42x5b(65,true,_0x4455[387]);_0xdc42x5b(86,true,_0x4455[388],true);_0xdc42x5b(69,true,_0x4455[389],true);_0xdc42x5b(69,true,_0x4455[390]);_0xdc42x5b(66,true,_0x4455[253]);_0xdc42x5b(70,true,_0x4455[252]);_0xdc42x5b(68,true,_0x4455[248]);_0xdc42x5b(90,true,_0x4455[241]);_0xdc42x5b(89,true,_0x4455[242]);_0xdc42x5b(88,true,_0x4455[115]);_0xdc42x5b(67,true,_0x4455[116]);_0xdc42x5b(81,true,_0x4455[391]);_0xdc42x5b(86,true,_0x4455[111]);_0xdc42x5b(71,true,_0x4455[263]);_0xdc42x5b(71,true,_0x4455[392],true);_0xdc42x5b(85,true,_0x4455[265]);_0xdc42x5b(112,false,_0x4455[393]);_0xdc42x5b(80,true,_0x4455[224],true);return _0xdc42xf};EditorUi[_0x4455[10]][_0x4455[58]]= function(_0xdc42x3,_0xdc42x36,_0xdc42x62,_0xdc42x63){for(var _0xdc42x37=0;_0xdc42x37< _0xdc42x36[_0x4455[143]];_0xdc42x37++){_0xdc42x3[_0x4455[396]]( new mxMultiplicity(true,_0xdc42x36[_0xdc42x37],null,null,_0xdc42x62[_0xdc42x37][0],_0xdc42x62[_0xdc42x37][1],null,mxResources[_0x4455[112]](_0xdc42x36[_0xdc42x37])+ _0x4455[394]+ _0xdc42x62[_0xdc42x37][0]+ _0x4455[395],null));_0xdc42x3[_0x4455[396]]( new mxMultiplicity(false,_0xdc42x36[_0xdc42x37],null,null,_0xdc42x63[_0xdc42x37][0],_0xdc42x63[_0xdc42x37][1],null,mxResources[_0x4455[112]](_0xdc42x36[_0xdc42x37])+ _0x4455[394]+ _0xdc42x63[_0xdc42x37][0]+ _0x4455[397],null))}} \ No newline at end of file +/** + * $Id: EditorUi.js,v 1.21 2013/03/14 20:46:36 david Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ +/** + * Constructs a new graph editor + */ +EditorUi = function(editor, container) { + this.editor = editor || new Editor(); + this.container = container || document.getElementById('geEditor'); + var graph = editor.graph; + var self = this; + + // Disables scrollbars + this.container.style.overflow = 'hidden'; + + // Pre-fetches submenu image + new Image().src = mxPopupMenu.prototype.submenuImage; + + // Pre-fetches connect image + if (mxConnectionHandler.prototype.connectImage != null) { + new Image().src = mxConnectionHandler.prototype.connectImage.src; + } + + // Creates the user interface + this.actions = new Actions(this); + this.menus = new Menus(this); + this.createDivs(); + this.refresh(); + this.createUi(); + + // Disables HTML and text selection + var textEditing = mxUtils.bind(this, function(evt) { + if (evt == null) { + evt = window.event; + } + + if (this.isSelectionAllowed(evt)) { + return true; + } + + return graph.isEditing(); + }); + + // Disables text selection while not editing and no dialog visible + if (this.container == document.body) { + this.menubarContainer.onselectstart = textEditing; + this.menubarContainer.onmousedown = textEditing; + this.toolbarContainer.onselectstart = textEditing; + this.toolbarContainer.onmousedown = textEditing; + this.diagramContainer.onselectstart = textEditing; + this.diagramContainer.onmousedown = textEditing; + this.sidebarContainer.onselectstart = textEditing; + this.sidebarContainer.onmousedown = textEditing; + this.footerContainer.onselectstart = textEditing; + this.footerContainer.onmousedown = textEditing; + } + + // And uses built-in context menu while editing + if (mxClient.IS_IE && (typeof(document.documentMode) === 'undefined' || + document.documentMode < 9)) { + mxEvent.addListener(this.diagramContainer, 'contextmenu', textEditing); + mxEvent.addListener(this.sidebarContainer, 'contextmenu', textEditing); + } else { + // Allows browser context menu outside of diagram and sidebar + this.diagramContainer.oncontextmenu = textEditing; + this.sidebarContainer.oncontextmenu = textEditing; + } + + // Contains the main graph instance inside the given panel + graph.init(this.diagramContainer); + graph.refresh(); + + // Enables scrollbars and sets cursor style for the container + graph.container.setAttribute('tabindex', '0'); + // graph.container.style.overflow = (touchStyle) ? 'hidden' : 'auto'; + graph.container.style.cursor = 'default'; + graph.container.style.backgroundImage = 'url(' + editor.gridImage + ')'; + graph.container.style.backgroundPosition = '-1px -1px'; + graph.container.focus(); + + // Keeps graph container focused on mouse down + var graphFireMouseEvent = graph.fireMouseEvent; + graph.fireMouseEvent = function(evtName, me, sender) { + if (evtName == mxEvent.MOUSE_DOWN) { + this.container.focus(); + } + + graphFireMouseEvent.apply(this, arguments); + }; + + // Giuseppe Careri + // Defines invalid connections along with the error messages that they produce. + + this.createMultiplicities(graph.multiplicities, ['start', 'end', 'input', + 'question', 'email' + ], [ + [1, 1], + [0, 0], + [1, 1], + [1, 'n'], + [1, 'n'] + ], [ + [0, 0], + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'] + + ]); + + + // Giuseppe Careri + // Processes a doubleclick on an optional cell and fires a event. + // The event is fired initially. + // If the graph is enabled and the event has not been consumed, then is called with the given cell. + // The event is ignored if no cell was specified. + graph.dblClick = function(evt, cell) { + var edges = ['question']; + var mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell', + cell); + this.fireEvent(mxe); + + if (this.isEnabled() && !mxEvent.isConsumed(evt) && !mxe.isConsumed()) { + // Override dblClick Vertices and Edges + if (this.getModel().isEdge(cell)) { + if (edges.indexOf(cell.source.value.tagName) >= 0) + this.startEditingAtCell(cell); + } else if (this.getModel().isVertex(cell)) { + console.log(self); + console.log(cell); + self.showDialog(new GeneralDialog(self, cell).container, 320, 280, true, + true); + } + mxe.consume(); + } + } + + // Configures automatic expand on mouseover + graph.panningHandler.autoExpand = true; + + // Installs context menu + graph.panningHandler.factoryMethod = mxUtils.bind(this, function(menu, cell, + evt) { + this.menus.createPopupMenu(menu, cell, evt); + }); + + // Initializes the outline + editor.outline.init(this.outlineContainer); + + // Hides context menu + mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) { + graph.panningHandler.hideMenu(); + })); + + // Adds gesture handling (pinch to zoom) + if (mxClient.IS_TOUCH) { + mxEvent.addListener(graph.container, 'gesturechange', + mxUtils.bind(this, function(evt) { + graph.view.getDrawPane().setAttribute('transform', 'scale(' + evt.scale + + ')'); + graph.view.getOverlayPane().style.visibility = 'hidden'; + }) + ); + + mxEvent.addListener(graph.container, 'gestureend', + mxUtils.bind(this, function(evt) { + graph.view.getDrawPane().removeAttribute('transform'); + graph.zoomToCenter = true; + graph.zoom(evt.scale); + graph.view.getOverlayPane().style.visibility = 'visible'; + }) + ); + } + + // Create handler for key events + var keyHandler = this.createKeyHandler(editor); + + // Getter for key handler + this.getKeyHandler = function() { + return keyHandler; + }; + + // Updates the editor UI after the window has been resized + mxEvent.addListener(window, 'resize', mxUtils.bind(this, function() { + this.refresh(); + graph.sizeDidChange(); + this.editor.outline.update(false); + this.editor.outline.outline.sizeDidChange(); + })); + + // Updates action and menu states + this.init(); + this.open(); +}; + +/** + * Specifies the size of the split bar. + */ +EditorUi.prototype.splitSize = (mxClient.IS_TOUCH) ? 16 : 8; + +/** + * Specifies the height of the menubar. Default is 34. + */ +EditorUi.prototype.menubarHeight = 33; + +/** + * Specifies the height of the toolbar. Default is 36. + */ +EditorUi.prototype.toolbarHeight = 36; + +/** + * Specifies the height of the footer. Default is 28. + */ +EditorUi.prototype.footerHeight = 28; + +/** + * Specifies the position of the horizontal split bar. Default is 212. + */ +EditorUi.prototype.hsplitPosition = 204; + +/** + * Specifies the position of the vertical split bar. Default is 190. + */ +EditorUi.prototype.vsplitPosition = 190; + +/** + * Installs the listeners to update the action states. + */ +EditorUi.prototype.init = function() { + // Updates action states + this.addUndoListener(); + this.addSelectionListener(); + + // Overrides clipboard to update paste action state + var paste = this.actions.get('paste'); + + var updatePaste = function() { + paste.setEnabled(!mxClipboard.isEmpty()); + }; + + var mxClipboardCut = mxClipboard.cut; + mxClipboard.cut = function() { + mxClipboardCut.apply(this, arguments); + updatePaste(); + }; + + var mxClipboardCopy = mxClipboard.copy; + mxClipboard.copy = function() { + mxClipboardCopy.apply(this, arguments); + updatePaste(); + }; +}; + +/** + * Hook for allowing selection and context menu for certain events. + */ +EditorUi.prototype.isSelectionAllowed = function(evt) { + return false; +}; + +/** + * Opens the current diagram via the window.opener if one exists. + */ +EditorUi.prototype.open = function() { + // Cross-domain window access is not allowed in FF, so if we + // were opened from another domain then this will fail. + try { + if (window.opener != null && window.opener.openFile != null) { + window.opener.openFile.setConsumer(mxUtils.bind(this, function(xml, + filename) { + try { + var doc = mxUtils.parseXml(xml); + this.editor.setGraphXml(doc.documentElement); + this.editor.modified = false; + this.editor.undoManager.clear(); + + if (filename != null) { + this.editor.filename = filename; + } + } catch (e) { + mxUtils.alert(mxResources.get('invalidOrMissingFile') + ': ' + e.message); + } + })); + } + } catch (e) { + // ignore + } +}; + +/** + * Giuseppe Careri + * Opens the current diagram via string. + */ +EditorUi.prototype.openString = function(xml, filename, data) { + try { + var doc = mxUtils.parseXml(xml); + this.editor.setGraphXml(doc.documentElement); + this.editor.modified = false; + this.editor.undoManager.clear(); + + if (filename != null) { + this.editor.filename = filename; + } + + if (data != null) { + this.editor.data = data; + } + } catch (e) { + mxUtils.alert(mxResources.get('invalidOrMissingFile') + ': ' + e.message); + } +}; + +/** + * Saves As the current graph under the given project name. + */ +EditorUi.prototype.new = function(name) { + var editor = this.editor; + + if (name != null) { + var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); + try { + if (useLocalStorage) { + if (localStorage.getItem(name) != null && + !mxUtils.confirm(mxResources.get('replace', [name]))) { + return; + } + + localStorage.setItem(name, xml); + this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); + } else { + console.log(xml.length); + console.log(MAX_REQUEST_SIZE); + if (xml.length < MAX_REQUEST_SIZE) { + xml = encodeURIComponent(xml); + name = encodeURIComponent(name); + + var xhr = new XMLHttpRequest(); + xhr.open("POST", SAVE_URL, true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); + xhr.onload = function(e) { + if (xhr.readyState === 4) { + if (xhr.status === 201) { + editor.setStatus('Project ' + JSON.parse(xhr.response).name + + ' is opening in new window!'); + setTimeout(function() { + window.open('jscripty/projects/view/' + JSON.parse(xhr.response).id, + '_blank'); + }, 1500); + } else { + try { + var response = JSON.parse(xhr.response); + editor.setStatus('Error creating project: ' + response.errors[0].message); + } catch (e) { + editor.setStatus('Error creating project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } + } + } + }; + xhr.onerror = function(e) { + mxUtils.alert(xhr.statusText); + }; + xhr.send('description=project_new&name=' + name); + } else { + mxUtils.alert(mxResources.get('drawingTooLarge')); + mxUtils.popup(xml); + + return; + } + } + + this.editor.filename = name; + this.editor.modified = false; + } catch (e) { + this.editor.setStatus('Error creating project'); + } + } else { + this.editor.setStatus('Error creating project'); + } +}; + + +/** + * Saves the current graph under the given project name. + */ +EditorUi.prototype.save = function(name) { + var editor = this.editor; + + if (name != null) { + var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); + try { + if (useLocalStorage) { + if (localStorage.getItem(name) != null && + !mxUtils.confirm(mxResources.get('replace', [name]))) { + return; + } + + localStorage.setItem(name, xml); + this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); + } else { + console.log(xml.length); + console.log(MAX_REQUEST_SIZE); + if (xml.length < MAX_REQUEST_SIZE) { + xml = encodeURIComponent(xml); + + var xhr = new XMLHttpRequest(); + xhr.open("PUT", SAVE_URL + this.editor.data.id, true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); + xhr.onload = function(e) { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + editor.setStatus('Updated at ' + JSON.parse(xhr.response).updatedAt + + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } else { + try { + var response = JSON.parse(xhr.response); + editor.setStatus('Error saving project: ' + response.errors[0].message); + } catch (e) { + editor.setStatus('Error saving project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } + } + } + }; + xhr.onerror = function(e) { + mxUtils.alert(xhr.statusText); + }; + xhr.send('draft=' + xml); + } else { + mxUtils.alert(mxResources.get('drawingTooLarge')); + mxUtils.popup(xml); + + return; + } + } + + this.editor.filename = name; + this.editor.modified = false; + } catch (e) { + this.editor.setStatus('Error saving file'); + } + } else { + this.editor.setStatus('Error saving file'); + } +}; + +/** + * Saves As the current graph under the given project name. + */ +EditorUi.prototype.saveAs = function(name) { + var editor = this.editor; + console.log(name); + if (name != null) { + var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); + try { + if (useLocalStorage) { + if (localStorage.getItem(name) != null && + !mxUtils.confirm(mxResources.get('replace', [name]))) { + return; + } + + localStorage.setItem(name, xml); + this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); + } else { + console.log(xml.length); + console.log(MAX_REQUEST_SIZE); + if (xml.length < MAX_REQUEST_SIZE) { + xml = encodeURIComponent(xml); + name = encodeURIComponent(name); + + var xhr = new XMLHttpRequest(); + xhr.open("POST", SAVE_URL, true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); + xhr.onload = function(e) { + if (xhr.readyState === 4) { + if (xhr.status === 201) { + editor.setStatus('Project ' + JSON.parse(xhr.response).name + + ' is opening in new window!'); + setTimeout(function() { + window.open('jscripty/project/' + JSON.parse(xhr.response).id, + '_blank'); + }, 1500); + } else { + try { + var response = JSON.parse(xhr.response); + editor.setStatus('Error cloning project: ' + response.errors[0].message); + } catch (e) { + editor.setStatus('Error cloning project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } + } + } + }; + xhr.onerror = function(e) { + mxUtils.alert(xhr.statusText); + }; + xhr.send('description=project_cloned&name=' + name + + '&draft=' + xml + '&production=' + xml); + } else { + mxUtils.alert(mxResources.get('drawingTooLarge')); + mxUtils.popup(xml); + + return; + } + } + + this.editor.filename = name; + this.editor.modified = false; + } catch (e) { + this.editor.setStatus('Error saving file'); + } + } else { + this.editor.setStatus('Error saving file'); + } +}; + +/** + * Plush the current graph under the given project name. + */ +EditorUi.prototype.validate = function(a, b) { + var graph = this.editor.graph; + a = null != a ? a : graph.model.getRoot(); + b = null != b ? b : {}; + for (var c = !0, d = graph.model.getChildCount(a), e = 0; e < d; e++) { + var f = graph.model.getChildAt(a, e), + g = b; + graph.isValidRoot(f) && (g = {}); + g = this.validate(f, g); + null != g ? graph.setCellWarning(f, g.replace(/\n/g, "\x3cbr\x3e")) : graph.setCellWarning(f, null); + c = c && null == g + } + d = ""; + if (graph.model.isVertex(a)) { + switch (a.value.nodeName) { + case 'question': + d = (a.value.getAttribute('question') !== "") ? "" : + 'Question can not be empty' + "\n"; + d += (a.value.getAttribute('label') !== "") ? "" : 'Label can not be empty' + "\n"; + + break; + case 'input': + d = (a.value.getAttribute('question') !== "") ? "" : 'Question can not be empty' + "\n"; + d += (a.value.getAttribute('label') !== "") ? "" : 'Label can not be empty' + "\n"; + + break; + case 'start': + d = this.validateBlock('start') ? '' : "Only one Start block is allowed" + "\n"; + d += (a.value.getAttribute('label') !== "") ? "" : 'Label can not be empty' + "\n"; + + break; + } + } + + if (graph.model.isEdge(a)) { + var z = graph.model.getCell(a.source.getId()); + switch (z.value.nodeName) { + case 'question': + // var patt = /^[a-zA-Z0-9][a-zA-Z0-9\s]*$/; + var str = String(a.getValue()); + console.log(str); + if (str === 'null' || str === 'undefined') { + d = "Value can not be empty" + "\n"; + } else { + var result = str.split(","); + result.forEach(function(entry, key) { + d = d + ((entry.trim() !== "") ? "" : 'Value' + (key + 1) + ' can not be empty' + "\n"); + }); + } + // console.log(a.getValue()); + // if ((str == 'undefined') || (str == 'null')) { + // str = ' '; + // } + // d = ((a.getValue() !== "") && (a.getValue() !== 'undefined') && (a.getValue() !== null)) ? '' : "Value can not be empty" + "\n"; + // d = d + ((patt.test(str.trim())) ? "" : 'Value can not be empty' + "\n"); + // + // res.forEach(function(entry) { + // d = d + ((patt.test(entry.trim())) ? "" : 'Can not be empty' + "\n"); + // }); + break; + + } + } + + graph.isCellCollapsed(a) && !c && (d += (mxResources.get(graph.containsValidationErrorsResource) || graph.containsValidationErrorsResource) + "\n"); + d = graph.model.isEdge(a) ? d + (graph.getEdgeValidationError(a, graph.model.getTerminal(a, !0), graph.model.getTerminal(a, !1)) || "") : d + (graph.getCellValidationError(a) || ""); + e = graph.validateCell(a, b); + null != e && (d += e); + null == graph.model.getParent(a) && graph.view.validate(); + return 0 < d.length || !c ? d : null +} + +EditorUi.prototype.validateBlock = function(blockName) { + var graph = this.editor.graph; + var parent = graph.getDefaultParent(); + var count = 0; + // var model = graph.getModel(); + //We can also use model.getChildren(parent) + parent.children.forEach(function(n) { + if (graph.model.isVertex(n) && n.value.nodeName == blockName) { + count++; + } + }); + return count > 1 ? false : true; +} + +EditorUi.prototype.publish = function(name) { + + var editor = this.editor; + + if (name != null) { + + var response = this.validate(); + if (response === null) { + var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); + try { + if (useLocalStorage) { + if (localStorage.getItem(name) != null && + !mxUtils.confirm(mxResources.get('replace', [name]))) { + return; + } + + localStorage.setItem(name, xml); + this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); + } else { + console.log(xml.length); + console.log(MAX_REQUEST_SIZE); + if (xml.length < MAX_REQUEST_SIZE) { + xml = encodeURIComponent(xml); + + var xhr = new XMLHttpRequest(); + xhr.open("PUT", SAVE_URL + this.editor.data.id, true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); + xhr.onload = function(e) { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + editor.setStatus('Published at ' + JSON.parse(xhr.response).updatedAt + + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } else { + try { + var response = JSON.parse(xhr.response); + editor.setStatus('Error publishing project: ' + response.errors[0].message); + } catch (e) { + editor.setStatus('Error publishing project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } + } + } + }; + xhr.onerror = function(e) { + mxUtils.alert(xhr.statusText); + }; + xhr.send('draft=' + xml + '&production=' + xml); + } else { + mxUtils.alert(mxResources.get('drawingTooLarge')); + mxUtils.popup(xml); + + return; + } + } + + this.editor.filename = name; + this.editor.modified = false; + } catch (e) { + this.editor.setStatus('Error publishing file'); + } + } else { + editor.setStatus('Error publishing project: '); + } + } else { + this.editor.setStatus('Error publishing file'); + } + // } + + + +}; + +/** + * Create variable + */ +EditorUi.prototype.variable = function(name) { + var editor = this.editor; + + if (name != null) { + try { + + var xhr = new XMLHttpRequest(); + xhr.open("POST", VARIABLE_URL, true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); + xhr.onload = function(e) { + if (xhr.readyState === 4) { + if (xhr.status === 201) { + editor.setStatus('Variable created at ' + JSON.parse(xhr.response).createdAt + + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } else { + try { + var response = JSON.parse(xhr.response); + editor.setStatus('Error creating variable: ' + response.errors[0].message); + } catch (e) { + editor.setStatus('Error creating variable' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } + } + } + }; + xhr.onerror = function(e) { + mxUtils.alert(xhr.statusText); + }; + xhr.send('name=' + name); + } catch (e) { + this.editor.setStatus('Error creating variable'); + } + } else { + this.editor.setStatus('Error creating variable'); + } +}; + +/** + * Returns the URL for a copy of this editor with no state. + */ +EditorUi.prototype.getUrl = function(pathname) { + var href = (pathname != null) ? pathname : window.location.pathname; + var parms = (href.indexOf('?') > 0) ? 1 : 0; + + // Removes template URL parameter for new blank diagram + for (var key in urlParams) { + if (parms == 0) { + href += '?'; + } else { + href += '&'; + } + + href += key + '=' + urlParams[key]; + parms++; + } + + return href; +}; + +/** + * Updates the states of the given undo/redo items. + */ +EditorUi.prototype.addUndoListener = function() { + var undo = this.actions.get('undo'); + var redo = this.actions.get('redo'); + + var undoMgr = this.editor.undoManager; + + var undoListener = function() { + undo.setEnabled(undoMgr.canUndo()); + redo.setEnabled(undoMgr.canRedo()); + }; + + undoMgr.addListener(mxEvent.ADD, undoListener); + undoMgr.addListener(mxEvent.UNDO, undoListener); + undoMgr.addListener(mxEvent.REDO, undoListener); + undoMgr.addListener(mxEvent.CLEAR, undoListener); + + // Updates the button states once + undoListener(); +}; + +/** + * Updates the states of the given toolbar items based on the selection. + */ +EditorUi.prototype.addSelectionListener = function() { + var selectionListener = mxUtils.bind(this, function() { + var graph = this.editor.graph; + var selected = !graph.isSelectionEmpty(); + var vertexSelected = false; + var edgeSelected = false; + + var cells = graph.getSelectionCells(); + + if (cells != null) { + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + + if (graph.getModel().isEdge(cell)) { + edgeSelected = true; + } + + if (graph.getModel().isVertex(cell)) { + vertexSelected = true; + } + + if (edgeSelected && vertexSelected) { + break; + } + } + } + + // Updates action states + var actions = ['cut', 'copy', 'delete', 'duplicate', 'bold', 'italic', + 'style', 'underline', 'toFront', 'toBack', 'dashed', 'rounded', + 'shadow', + 'tilt', 'autosize' + ]; + + for (var i = 0; i < actions.length; i++) { + this.actions.get(actions[i]).setEnabled(selected); + } + + this.actions.get('curved').setEnabled(edgeSelected); + this.actions.get('rotation').setEnabled(vertexSelected); + this.actions.get('wordWrap').setEnabled(vertexSelected); + this.actions.get('group').setEnabled(graph.getSelectionCount() > 1); + this.actions.get('ungroup').setEnabled(graph.getSelectionCount() == 1 && + graph.getModel().getChildCount(graph.getSelectionCell()) > 0); + var oneVertexSelected = vertexSelected && graph.getSelectionCount() == 1; + this.actions.get('removeFromGroup').setEnabled(oneVertexSelected && + graph.getModel().isVertex(graph.getModel().getParent(graph.getSelectionCell())) + ); + + // Updates menu states + var menus = ['fontFamily', 'fontSize', 'alignment', 'position', 'text', + 'format', + 'arrange', 'linewidth', 'spacing' + ]; + + for (var i = 0; i < menus.length; i++) { + this.menus.get(menus[i]).setEnabled(selected); + } + + menus = ['line', 'lineend', 'linestart']; + + for (var i = 0; i < menus.length; i++) { + this.menus.get(menus[i]).setEnabled(edgeSelected); + } + + this.actions.get('setAsDefaultEdge').setEnabled(edgeSelected); + + this.menus.get('align').setEnabled(graph.getSelectionCount() > 1); + this.menus.get('direction').setEnabled(vertexSelected || (edgeSelected && + graph.isLoop(graph.view.getState(graph.getSelectionCell())))); + this.menus.get('navigation').setEnabled(graph.foldingEnabled && ((graph.view + .currentRoot != null) || + (graph.getSelectionCount() == 1 && graph.isValidRoot(graph.getSelectionCell())) + )); + this.actions.get('home').setEnabled(graph.view.currentRoot != null); + this.actions.get('exitGroup').setEnabled(graph.view.currentRoot != null); + var groupEnabled = graph.getSelectionCount() == 1 && graph.isValidRoot( + graph.getSelectionCell()); + this.actions.get('enterGroup').setEnabled(groupEnabled); + this.actions.get('expand').setEnabled(groupEnabled); + this.actions.get('collapse').setEnabled(groupEnabled); + this.actions.get('editLink').setEnabled(graph.getSelectionCount() == 1); + this.actions.get('openLink').setEnabled(graph.getSelectionCount() == 1 && + graph.getLinkForCell(graph.getSelectionCell()) != null); + }); + + this.editor.graph.getSelectionModel().addListener(mxEvent.CHANGE, + selectionListener); + selectionListener(); +}; + +/** + * Refreshes the viewport. + */ +EditorUi.prototype.refresh = function() { + var quirks = mxClient.IS_IE && (document.documentMode == null || document.documentMode == + 5); + var w = this.container.clientWidth; + var h = this.container.clientHeight; + + if (this.container == document.body) { + w = document.body.clientWidth || document.documentElement.clientWidth; + h = (quirks) ? document.body.clientHeight || document.documentElement.clientHeight : + document.documentElement.clientHeight; + } + + var effHsplitPosition = Math.max(0, Math.min(this.hsplitPosition, w - this.splitSize - + 20)); + var effVsplitPosition = Math.max(0, Math.min(this.vsplitPosition, h - this.menubarHeight - + this.toolbarHeight - this.footerHeight - this.splitSize - 1)); + + this.menubarContainer.style.height = this.menubarHeight + 'px'; + this.toolbarContainer.style.top = this.menubarHeight + 'px'; + this.toolbarContainer.style.height = this.toolbarHeight + 'px'; + + var tmp = this.menubarHeight + this.toolbarHeight; + + if (!mxClient.IS_QUIRKS) { + tmp += 1; + } + + this.sidebarContainer.style.top = tmp + 'px'; + this.sidebarContainer.style.width = effHsplitPosition + 'px'; + this.outlineContainer.style.width = effHsplitPosition + 'px'; + this.outlineContainer.style.height = effVsplitPosition + 'px'; + this.outlineContainer.style.bottom = this.footerHeight + 'px'; + this.diagramContainer.style.left = (effHsplitPosition + this.splitSize) + + 'px'; + this.diagramContainer.style.top = this.sidebarContainer.style.top; + this.footerContainer.style.height = this.footerHeight + 'px'; + this.footerContainer.style.display = 'none'; + this.hsplit.style.top = this.sidebarContainer.style.top; + this.hsplit.style.bottom = this.outlineContainer.style.bottom; + this.hsplit.style.left = effHsplitPosition + 'px'; + this.vsplit.style.width = this.sidebarContainer.style.width; + this.vsplit.style.bottom = (effVsplitPosition + this.footerHeight) + 'px'; + + if (quirks) { + this.menubarContainer.style.width = w + 'px'; + this.toolbarContainer.style.width = this.menubarContainer.style.width; + var sidebarHeight = (h - effVsplitPosition - this.splitSize - this.footerHeight - + this.menubarHeight - this.toolbarHeight); + this.sidebarContainer.style.height = sidebarHeight + 'px'; + this.diagramContainer.style.width = (w - effHsplitPosition - this.splitSize) + + 'px'; + var diagramHeight = (h - this.footerHeight - this.menubarHeight - this.toolbarHeight); + this.diagramContainer.style.height = diagramHeight + 'px'; + this.footerContainer.style.width = this.menubarContainer.style.width; + this.hsplit.style.height = diagramHeight + 'px'; + } else { + this.sidebarContainer.style.bottom = (effVsplitPosition + this.splitSize + + this.footerHeight) + 'px'; + this.diagramContainer.style.bottom = this.outlineContainer.style.bottom; + } +}; + +/** + * Creates the required containers. + */ +EditorUi.prototype.createDivs = function() { + this.menubarContainer = this.createDiv('geMenubarContainer'); + this.toolbarContainer = this.createDiv('geToolbarContainer'); + this.sidebarContainer = this.createDiv('geSidebarContainer'); + this.outlineContainer = this.createDiv('geOutlineContainer'); + this.diagramContainer = this.createDiv('geDiagramContainer'); + this.footerContainer = this.createDiv('geFooterContainer'); + this.hsplit = this.createDiv('geHsplit'); + this.vsplit = this.createDiv('geVsplit'); + + // Sets static style for containers + this.menubarContainer.style.top = '0px'; + this.menubarContainer.style.left = '0px'; + this.menubarContainer.style.right = '0px'; + this.toolbarContainer.style.left = '0px'; + this.toolbarContainer.style.right = '0px'; + this.sidebarContainer.style.left = '0px'; + this.outlineContainer.style.left = '0px'; + this.diagramContainer.style.right = '0px'; + this.footerContainer.style.left = '0px'; + this.footerContainer.style.right = '0px'; + this.footerContainer.style.bottom = '0px'; + this.vsplit.style.left = '0px'; + this.vsplit.style.height = this.splitSize + 'px'; + this.hsplit.style.width = this.splitSize + 'px'; +}; + +/** + * Creates the required containers. + */ +EditorUi.prototype.createUi = function() { + // Creates menubar + this.menubar = this.menus.createMenubar(this.createDiv('geMenubar')); + this.menubarContainer.appendChild(this.menubar.container); + + // Creates toolbar + this.toolbar = this.createToolbar(this.createDiv('geToolbar')); + this.toolbarContainer.appendChild(this.toolbar.container); + + // Creates the sidebar + this.sidebar = this.createSidebar(this.sidebarContainer); + + // Creates the footer + this.footerContainer.appendChild(this.createFooter()); + + // Adds status bar in menubar + this.statusContainer = this.createStatusContainer(); + + // Connects the status bar to the editor status + this.editor.addListener('statusChanged', mxUtils.bind(this, function() { + this.setStatusText(this.editor.getStatus()); + })); + + this.setStatusText(this.editor.getStatus()); + this.menubar.container.appendChild(this.statusContainer); + + // Inserts into DOM + this.container.appendChild(this.menubarContainer); + this.container.appendChild(this.toolbarContainer); + this.container.appendChild(this.sidebarContainer); + this.container.appendChild(this.outlineContainer); + this.container.appendChild(this.diagramContainer); + this.container.appendChild(this.footerContainer); + this.container.appendChild(this.hsplit); + this.container.appendChild(this.vsplit); + + // HSplit + this.addSplitHandler(this.hsplit, true, 0, mxUtils.bind(this, function( + value) { + this.hsplitPosition = value; + this.refresh(); + this.editor.graph.sizeDidChange(); + this.editor.outline.update(false); + this.editor.outline.outline.sizeDidChange(); + })); + + // VSplit + this.addSplitHandler(this.vsplit, false, this.footerHeight, mxUtils.bind( + this, + function(value) { + this.vsplitPosition = value; + this.refresh(); + this.editor.outline.update(false); + this.editor.outline.outline.sizeDidChange(); + })); +}; + +/** + * Creates a new toolbar for the given container. + */ +EditorUi.prototype.createStatusContainer = function() { + var container = document.createElement('a'); + container.className = 'geItem geStatus'; + + return container; +}; + +/** + * Creates a new toolbar for the given container. + */ +EditorUi.prototype.createStatusContainer = function() { + var container = document.createElement('a'); + container.className = 'geItem geStatus'; + + return container; +}; + +/** + * Creates a new toolbar for the given container. + */ +EditorUi.prototype.setStatusText = function(value) { + this.statusContainer.innerHTML = value; +}; + +/** + * Creates a new toolbar for the given container. + */ +EditorUi.prototype.createToolbar = function(container) { + return new Toolbar(this, container); +}; + +/** + * Creates a new sidebar for the given container. + */ +EditorUi.prototype.createSidebar = function(container) { + return new Sidebar(this, container); +}; + +/** + * Creates and returns a new footer. + */ +EditorUi.prototype.createFooter = function() { + return this.createDiv('geFooter'); +}; + +/** + * Creates the actual toolbar for the toolbar container. + */ +EditorUi.prototype.createDiv = function(classname) { + var elt = document.createElement('div'); + elt.className = classname; + + return elt; +}; + +/** + * Creates the custom header. + */ +EditorUi.prototype.createHeader = function(classname) { + var elt = document.createElement(classname); + return elt; +}; + +/** + * Creates the custom header. + */ +EditorUi.prototype.createForm = function(classname) { + var elt = document.createElement('form'); + elt.className = classname; + + return elt; +}; + +/** + * Updates the states of the given undo/redo items. + */ +EditorUi.prototype.addSplitHandler = function(elt, horizontal, dx, onChange) { + var start = null; + var initial = null; + + function getValue() { + return parseInt(((horizontal) ? elt.style.left : elt.style.bottom)); + }; + + function moveHandler(evt) { + if (start != null) { + var pt = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt)); + onChange(Math.max(0, initial + ((horizontal) ? (pt.x - start.x) : (start.y - + pt.y)) - dx)); + mxEvent.consume(evt); + } + }; + + function dropHandler(evt) { + moveHandler(evt); + start = null; + initial = null; + }; + + mxEvent.addGestureListeners(elt, function(evt) { + start = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt)); + initial = getValue(); + mxEvent.consume(evt); + }); + + mxEvent.addListener(document, 'mousemove', moveHandler); + mxEvent.addListener(document, 'touchmove', moveHandler); + mxEvent.addListener(document, 'mouseup', dropHandler); + mxEvent.addListener(document, 'touchend', dropHandler); +}; + +/** + * Displays a print dialog. + */ +EditorUi.prototype.showDialog = function(elt, w, h, modal, closable, onClose) { + this.hideDialog(); + this.dialog = new Dialog(this, elt, w, (mxClient.IS_VML) ? h - 12 : h, + modal, + closable, onClose); +}; + +/** + * Displays a print dialog. + */ +EditorUi.prototype.hideDialog = function() { + if (this.dialog != null) { + this.dialog.close(); + this.dialog = null; + this.editor.graph.container.focus(); + } +}; + +/** + * Adds the label menu items to the given menu and parent. + */ +EditorUi.prototype.saveFile = function(forceDialog) { + if (!forceDialog && this.editor.filename != null) { + this.save(this.editor.getOrCreateFilename()); + } else { + this.showDialog(new SaveDialog(this).container, 300, 100, true, true); + } +}; + +/** + * Adds the label menu items to the given menu and parent. + */ +EditorUi.prototype.publishFile = function(forceDialog) { + if (!forceDialog && this.editor.filename != null) { + this.publish(this.editor.getOrCreateFilename()); + } else { + //this.showDialog(new SaveDialog(this).container, 300, 100, true, true); + } +}; + +/** + * Executes the given layout. + */ +EditorUi.prototype.executeLayout = function(layout, animate, ignoreChildCount) { + var graph = this.editor.graph; + var cell = graph.getSelectionCell(); + + // Allow global overridding of animation + animate = this.animate != null ? this.animate : animate; + + graph.getModel().beginUpdate(); + try { + layout.execute(graph.getDefaultParent(), cell); + } catch (e) { + throw e; + } finally { + // Animates the changes in the graph model except + // for Camino, where animation is too slow + if (animate && navigator.userAgent.indexOf('Camino') < 0) { + // New API for animating graph layout results asynchronously + var morph = new mxMorphing(graph); + morph.addListener(mxEvent.DONE, mxUtils.bind(this, function() { + graph.getModel().endUpdate(); + })); + + morph.startAnimation(); + } else { + graph.getModel().endUpdate(); + } + } +}; + +/** + * Creates the keyboard event handler for the current graph and history. + */ +EditorUi.prototype.createKeyHandler = function(editor) { + var graph = this.editor.graph; + var keyHandler = new mxKeyHandler(graph); + + // Routes command-key to control-key on Mac + keyHandler.isControlDown = function(evt) { + return mxEvent.isControlDown(evt) || (mxClient.IS_MAC && evt.metaKey); + }; + + // Helper function to move cells with the cursor keys + function nudge(keyCode) { + if (!graph.isSelectionEmpty()) { + var dx = 0; + var dy = 0; + + if (keyCode == 37) { + dx = -1; + } else if (keyCode == 38) { + dy = -1; + } else if (keyCode == 39) { + dx = 1; + } else if (keyCode == 40) { + dy = 1; + } + + graph.moveCells(graph.getSelectionCells(), dx, dy); + graph.scrollCellToVisible(graph.getSelectionCell()); + } + }; + + // Binds keystrokes to actions + var bindAction = mxUtils.bind(this, function(code, control, key, shift) { + var action = this.actions.get(key); + + if (action != null) { + var f = function() { + if (action.enabled) { + action.funct(); + } + }; + + if (control) { + if (shift) { + keyHandler.bindControlShiftKey(code, f); + } else { + keyHandler.bindControlKey(code, f); + } + } else { + if (shift) { + keyHandler.bindShiftKey(code, f); + } else { + keyHandler.bindKey(code, f); + } + } + } + }); + + var ui = this; + var keyHandleEscape = keyHandler.escape; + keyHandler.escape = function(evt) { + ui.hideDialog(); + keyHandleEscape.apply(this, arguments); + }; + + // Ignores enter keystroke. Remove this line if you want the + // enter keystroke to stop editing. + keyHandler.enter = function() {}; + keyHandler.bindKey(8, function() { + graph.foldCells(true); + }); // Backspace + keyHandler.bindKey(13, function() { + graph.foldCells(false); + }); // Enter + keyHandler.bindKey(33, function() { + graph.exitGroup(); + }); // Page Up + keyHandler.bindKey(34, function() { + graph.enterGroup(); + }); // Page Down + keyHandler.bindKey(36, function() { + graph.home(); + }); // Home + keyHandler.bindKey(35, function() { + graph.refresh(); + }); // End + keyHandler.bindKey(37, function() { + nudge(37); + }); // Left arrow + keyHandler.bindKey(38, function() { + nudge(38); + }); // Up arrow + keyHandler.bindKey(39, function() { + nudge(39); + }); // Right arrow + keyHandler.bindKey(40, function() { + nudge(40); + }); // Down arrow + keyHandler.bindKey(113, function() { + graph.startEditingAtCell(); + }); + bindAction(46, false, 'delete'); // Delete + bindAction(82, true, 'tilt'); // Ctrl+R + bindAction(83, true, 'save'); // Ctrl+S + bindAction(83, true, 'saveAs', true); // Ctrl+Shift+S + bindAction(107, false, 'zoomIn'); // Add + bindAction(109, false, 'zoomOut'); // Subtract + bindAction(65, true, 'selectAll'); // Ctrl+A + bindAction(86, true, 'selectVertices', true); // Ctrl+Shift+V + bindAction(69, true, 'selectEdges', true); // Ctrl+Shift+E + bindAction(69, true, 'export'); // Ctrl+Shift+E + bindAction(66, true, 'toBack'); // Ctrl+B + bindAction(70, true, 'toFront'); // Ctrl+F + bindAction(68, true, 'duplicate'); // Ctrl+D + bindAction(90, true, 'undo'); // Ctrl+Z + bindAction(89, true, 'redo'); // Ctrl+Y + bindAction(88, true, 'cut'); // Ctrl+X + bindAction(67, true, 'copy'); // Ctrl+C + bindAction(81, true, 'connect'); // Ctrl+Q + bindAction(86, true, 'paste'); // Ctrl+V + bindAction(71, true, 'group'); // Ctrl+G + bindAction(71, true, 'grid', true); // Ctrl+Shift+G + bindAction(85, true, 'ungroup'); // Ctrl+U + bindAction(112, false, 'about'); // F1 + bindAction(80, true, 'publish', true); // Ctrl+Shift+P + + return keyHandler; +}; + +/** + * Giuseppe Careri + * Creates a new toolbar for the given container. + */ +EditorUi.prototype.createMultiplicities = function(graph, cells, source, + target) { + for (var i = 0; i < cells.length; i++) { + graph.push(new mxMultiplicity(true, cells[i], null, null, source[i][0], + source[i][1], null, mxResources.get(cells[i]) + ' must have ' + source[i][0] + ' outgoing edge.', null)); + graph.push(new mxMultiplicity(false, cells[i], null, null, target[i][0], + target[i][1], null, mxResources.get(cells[i]) + ' must have ' + target[i][0] + ' incoming edge.', null)); + }; +}; diff --git a/public/assets/plugins/jscripty/js/Graph.js b/public/assets/plugins/jscripty/js/Graph.js index a93a630..dda2a33 100644 --- a/public/assets/plugins/jscripty/js/Graph.js +++ b/public/assets/plugins/jscripty/js/Graph.js @@ -1 +1,644 @@ -var _0xed75=["\x63\x61\x6C\x6C","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x44\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x50\x61\x6E\x6E\x69\x6E\x67","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x73\x65\x74\x4D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x61\x6C\x6C\x6F\x77\x41\x75\x74\x6F\x50\x61\x6E\x6E\x69\x6E\x67","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x43\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x74\x61\x72\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x69\x73\x56\x61\x6C\x69\x64\x53\x6F\x75\x72\x63\x65","\x61\x70\x70\x6C\x79","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x6E\x65\x63\x74","\x32","\x61\x6C\x74\x65\x72\x6E\x61\x74\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x76\x65\x72\x74\x69\x63\x61\x6C","\x6C\x6F\x61\x64\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x67\x65\x74\x52\x75\x62\x62\x65\x72\x62\x61\x6E\x64","\x63\x75\x72\x73\x6F\x72","\x73\x74\x79\x6C\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x70\x6F\x69\x6E\x74\x65\x72","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x64\x65\x66\x61\x75\x6C\x74","\x69\x73\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x76\x69\x65\x77","\x67\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x68\x74\x6D\x6C","\x31","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x77\x72\x61\x70","\x67\x65\x74\x4C\x61\x62\x65\x6C\x56\x61\x6C\x75\x65","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x68\x74\x6D\x6C\x45\x6E\x74\x69\x74\x69\x65\x73","\x69\x73\x43\x65\x6C\x6C\x4C\x6F\x63\x6B\x65\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64","\x61\x63\x74\x69\x76\x65","\x67\x72\x61\x70\x68","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x73\x74\x61\x72\x74","\x70\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x63\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x69\x6E\x69\x74\x54\x6F\x75\x63\x68","\x65\x78\x74\x65\x6E\x64","\x6D\x69\x6E\x46\x69\x74\x53\x63\x61\x6C\x65","\x6D\x61\x78\x46\x69\x74\x53\x63\x61\x6C\x65","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x2F\x64\x65\x66\x61\x75\x6C\x74\x2E\x78\x6D\x6C","\x6C\x6F\x61\x64","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x64\x65\x63\x6F\x64\x65","\x66\x6C\x69\x70\x45\x64\x67\x65","\x67\x65\x74\x56\x61\x6C\x75\x65","\x45\x4C\x42\x4F\x57\x5F\x48\x4F\x52\x49\x5A\x4F\x4E\x54\x41\x4C","\x45\x4C\x42\x4F\x57\x5F\x56\x45\x52\x54\x49\x43\x41\x4C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C\x73","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x70\x6F\x69\x6E\x74\x73","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x53\x74\x79\x6C\x65","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x53\x74\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x65","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x69\x73\x43\x65\x6C\x6C\x46\x6F\x6C\x64\x61\x62\x6C\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x63\x72\x65\x61\x74\x65\x47\x72\x6F\x75\x70\x43\x65\x6C\x6C","\x67\x72\x6F\x75\x70","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x46\x6F\x72\x43\x65\x6C\x6C","","\x69\x73\x56\x65\x72\x74\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x5F","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x67\x65\x74","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x54\x6F\x53\x74\x72\x69\x6E\x67","\x6F\x62\x6A\x65\x63\x74","\x6C\x61\x62\x65\x6C","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x65\x6C\x6C\x4C\x61\x62\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x73\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x55\x73\x65\x72\x4F\x62\x6A\x65\x63\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x6C\x65\x6E\x67\x74\x68","\x6C\x69\x6E\x6B","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x73\x65\x74\x56\x61\x6C\x75\x65","\x6D\x6F\x64\x65\x6C","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x6D\x61\x72\x6B\x65\x72","\x66\x69\x72\x73\x74","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x75\x70\x64\x61\x74\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x67\x72\x61\x70\x68\x58","\x67\x72\x61\x70\x68\x59","\x67\x65\x74\x43\x65\x6C\x6C\x41\x74","\x73\x74\x61\x74\x65","\x73\x68\x61\x70\x65","\x6E\x6F\x64\x65","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x69\x73\x4D\x65\x6E\x75\x53\x68\x6F\x77\x69\x6E\x67","\x67\x65\x74\x43\x65\x6C\x6C","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x4D\x4F\x55\x53\x45\x5F\x55\x50","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x67\x65\x74\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x70\x6F\x70\x75\x70","\x63\x6F\x6E\x73\x75\x6D\x65","\x4D\x4F\x55\x53\x45\x5F\x4D\x4F\x56\x45","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x54\x6F\x70","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x67\x72\x69\x64\x53\x69\x7A\x65","\x73\x65\x6C\x65\x63\x74\x4F\x6E\x50\x6F\x70\x75\x70","\x75\x73\x65\x4C\x65\x66\x74\x42\x75\x74\x74\x6F\x6E\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x69\x73\x50\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x69\x67\x6E\x6F\x72\x65\x43\x65\x6C\x6C","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x69\x73\x53\x68\x69\x66\x74\x44\x6F\x77\x6E","\x75\x73\x65\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x6D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x64\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x63\x6F\x6E\x76\x65\x72\x74\x50\x6F\x69\x6E\x74","\x78","\x79","\x2F\x74\x6F\x75\x63\x68\x2D\x68\x61\x6E\x64\x6C\x65\x2E\x70\x6E\x67","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x73\x69\x7A\x65\x72\x49\x6D\x61\x67\x65","\x73\x72\x63","\x2F\x74\x6F\x75\x63\x68\x2D\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x2E\x70\x6E\x67","\x69\x6E\x69\x74","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x49\x6D\x67","\x63\x72\x65\x61\x74\x65\x49\x6D\x61\x67\x65","\x77\x69\x64\x74\x68","\x32\x39\x70\x78","\x68\x65\x69\x67\x68\x74","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x74\x69\x74\x6C\x65","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x70\x61\x64\x64\x69\x6E\x67","\x32\x70\x78","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x72\x65\x64\x72\x61\x77\x54\x6F\x6F\x6C\x73","\x72\x65\x64\x72\x61\x77","\x73\x69\x6E\x67\x6C\x65\x53\x69\x7A\x65\x72","\x6C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x78","\x74\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x2F\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x2E\x70\x6E\x67","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x49\x53\x5F\x49\x45","\x49\x53\x5F\x53\x56\x47","\x64\x69\x76","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x63\x65\x6E\x74\x65\x72","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x64\x69\x73\x70\x6C\x61\x79","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x69\x6E\x6C\x69\x6E\x65","\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E"];Graph= function(_0xa252x1,_0xa252x2,_0xa252x3,_0xa252x4){mxGraph[_0xed75[0]](this,_0xa252x1,_0xa252x2,_0xa252x3,_0xa252x4);this[_0xed75[1]](true);this[_0xed75[2]](false);this[_0xed75[3]](true);this[_0xed75[4]](!mxClient.IS_TOUCH);this[_0xed75[5]](false);this[_0xed75[6]](false);this[_0xed75[7]]= true;this[_0xed75[8]]= false;this[_0xed75[9]]= false;this[_0xed75[11]][_0xed75[10]]= true;this[_0xed75[12]](false);this[_0xed75[11]][_0xed75[13]](false);this[_0xed75[11]][_0xed75[14]]= function(){return mxConnectionHandler[_0xed75[16]][_0xed75[14]][_0xed75[15]](this,arguments)&& urlParams[_0xed75[17]]!= _0xed75[18]};this[_0xed75[19]]= _0xed75[20];if(_0xa252x4== null){this[_0xed75[21]]()};var _0xa252x5= new mxRubberband(this);this[_0xed75[22]]= function(){return _0xa252x5};this[_0xed75[29]][_0xed75[28]](mxEvent.PAN_START,mxUtils[_0xed75[27]](this,function(){this[_0xed75[25]][_0xed75[24]][_0xed75[23]]= _0xed75[26]}));this[_0xed75[29]][_0xed75[28]](mxEvent.PAN_END,mxUtils[_0xed75[27]](this,function(){this[_0xed75[25]][_0xed75[24]][_0xed75[23]]= _0xed75[30]}));this[_0xed75[31]]= function(_0xa252x6){var _0xa252x7=this[_0xed75[33]][_0xed75[32]](_0xa252x6);var _0xa252x8=(_0xa252x7!= null)?_0xa252x7[_0xed75[24]]:this[_0xed75[34]](_0xa252x6);return _0xa252x8[_0xed75[35]]== _0xed75[36]|| _0xa252x8[_0xed75[37]]== _0xed75[38]};this[_0xed75[40]][_0xed75[39]]= function(_0xa252x7){var _0xa252x9=mxCellRenderer[_0xed75[16]][_0xed75[39]][_0xed75[15]](this,arguments);if(_0xa252x7[_0xed75[24]][_0xed75[37]]== _0xed75[38]&& _0xa252x7[_0xed75[24]][_0xed75[35]]!= 1){_0xa252x9= mxUtils[_0xed75[41]](_0xa252x9,false)};return _0xa252x9};this[_0xed75[42]]= function(_0xa252x6){return false};this[_0xed75[11]][_0xed75[43]]= 16;var _0xa252xa=this[_0xed75[11]][_0xed75[44]];this[_0xed75[11]][_0xed75[44]]= function(_0xa252xb,_0xa252x7){if(_0xa252x7== null){if(!this[_0xed75[46]][_0xed75[29]][_0xed75[45]]){_0xa252x5[_0xed75[49]](_0xa252xb[_0xed75[47]](),_0xa252xb[_0xed75[48]]());this[_0xed75[46]][_0xed75[29]][_0xed75[50]]= false}}else {if(tapAndHoldStartsConnection){_0xa252xa[_0xed75[15]](this,arguments)}else {if(this[_0xed75[46]][_0xed75[52]](_0xa252x7[_0xed75[51]])&& this[_0xed75[46]][_0xed75[53]]()> 1){this[_0xed75[46]][_0xed75[54]](_0xa252x7[_0xed75[51]])}}}};if(touchStyle){this[_0xed75[55]]()}};mxUtils[_0xed75[56]](Graph,mxGraph);Graph[_0xed75[16]][_0xed75[57]]= null;Graph[_0xed75[16]][_0xed75[58]]= null;Graph[_0xed75[16]][_0xed75[21]]= function(){var _0xa252xc=mxUtils[_0xed75[61]](STYLE_PATH+ _0xed75[60])[_0xed75[59]]();var _0xa252xd= new mxCodec(_0xa252xc[_0xed75[62]]);_0xa252xd[_0xed75[64]](_0xa252xc,this[_0xed75[63]]())};Graph[_0xed75[16]][_0xed75[65]]= function(_0xa252xe){if(_0xa252xe!= null){var _0xa252x7=this[_0xed75[33]][_0xed75[32]](_0xa252xe);var _0xa252x8=(_0xa252x7!= null)?_0xa252x7[_0xed75[24]]:this[_0xed75[34]](_0xa252xe);if(_0xa252x8!= null){var _0xa252xf=mxUtils[_0xed75[66]](_0xa252x8,mxConstants.STYLE_ELBOW,mxConstants.ELBOW_HORIZONTAL);var _0xa252x10=(_0xa252xf== mxConstants[_0xed75[67]])?mxConstants[_0xed75[68]]:mxConstants[_0xed75[67]];this[_0xed75[69]](mxConstants.STYLE_ELBOW,_0xa252x10,[_0xa252xe])}}};Graph[_0xed75[16]][_0xed75[70]]= function(_0xa252x6){if(_0xa252x6!= null&& this[_0xed75[72]]()[_0xed75[71]](_0xa252x6)){var _0xa252x11=this[_0xed75[72]]()[_0xed75[73]]([_0xa252x6])[0];if(_0xa252x11[_0xed75[74]]!= null){_0xa252x11[_0xed75[74]][_0xed75[75]]= null};var _0xa252x8=_0xa252x11[_0xed75[76]]();_0xa252x8= mxUtils[_0xed75[77]](_0xa252x8,mxConstants.STYLE_ENTRY_X,null);_0xa252x8= mxUtils[_0xed75[77]](_0xa252x8,mxConstants.STYLE_ENTRY_Y,null);_0xa252x8= mxUtils[_0xed75[77]](_0xa252x8,mxConstants.STYLE_EXIT_X,null);_0xa252x8= mxUtils[_0xed75[77]](_0xa252x8,mxConstants.STYLE_EXIT_Y,null);_0xa252x11[_0xed75[77]](_0xa252x8);this[_0xed75[11]][_0xed75[78]]= function(_0xa252xb){return this[_0xed75[46]][_0xed75[33]][_0xed75[79]](_0xa252x11)};this[_0xed75[11]][_0xed75[80]]= function(){return this[_0xed75[46]][_0xed75[73]]([_0xa252x11])[0]}}};Graph[_0xed75[16]][_0xed75[81]]= function(_0xa252x6){return this[_0xed75[82]]&& this[_0xed75[83]](_0xa252x6)};Graph[_0xed75[16]][_0xed75[84]]= function(_0xa252x6){return this[_0xed75[83]](_0xa252x6)};Graph[_0xed75[16]][_0xed75[85]]= function(){var _0xa252x12=mxGraph[_0xed75[16]][_0xed75[85]][_0xed75[15]](this,arguments);_0xa252x12[_0xed75[77]](_0xed75[86]);return _0xa252x12};Graph[_0xed75[16]][_0xed75[87]]= function(_0xa252x6){var _0xa252x13=_0xed75[88];if(this[_0xed75[72]]()[_0xed75[89]](_0xa252x6)){_0xa252x13+= mxResources[_0xed75[93]](_0xed75[90]+ _0xa252x6[_0xed75[92]][_0xed75[91]])|| _0xed75[88]}else {if(this[_0xed75[72]]()[_0xed75[71]](_0xa252x6)){_0xa252x13= mxGraph[_0xed75[16]][_0xed75[87]][_0xed75[15]](this,arguments)}};return _0xa252x13};Graph[_0xed75[16]][_0xed75[94]]= function(_0xa252x6){if(_0xa252x6[_0xed75[92]]!= null&& typeof (_0xa252x6[_0xed75[92]])== _0xed75[95]){return _0xa252x6[_0xed75[92]][_0xed75[97]](_0xed75[96])};return mxGraph[_0xed75[16]][_0xed75[94]][_0xed75[15]](this,arguments)};Graph[_0xed75[16]][_0xed75[98]]= function(_0xa252x6,_0xa252x10,_0xa252x14){if(_0xa252x6[_0xed75[92]]!= null&& typeof (_0xa252x6[_0xed75[92]])== _0xed75[95]){var _0xa252x15=_0xa252x6[_0xed75[92]][_0xed75[99]](true);_0xa252x15[_0xed75[100]](_0xed75[96],_0xa252x10);_0xa252x10= _0xa252x15};mxGraph[_0xed75[16]][_0xed75[98]][_0xed75[15]](this,arguments)};Graph[_0xed75[16]][_0xed75[101]]= function(_0xa252x6,_0xa252x16){var _0xa252x10=null;if(_0xa252x6[_0xed75[92]]!= null&& typeof (_0xa252x6[_0xed75[92]])== _0xed75[95]){_0xa252x10= _0xa252x6[_0xed75[92]][_0xed75[99]](true)}else {var _0xa252x17=mxUtils[_0xed75[102]]();_0xa252x10= _0xa252x17[_0xed75[104]](_0xed75[103]);_0xa252x10[_0xed75[100]](_0xed75[96],_0xa252x6[_0xed75[92]])};if(_0xa252x16!= null&& _0xa252x16[_0xed75[105]]> 0){_0xa252x10[_0xed75[100]](_0xed75[106],_0xa252x16)}else {_0xa252x10[_0xed75[107]](_0xed75[106])};this[_0xed75[109]][_0xed75[108]](_0xa252x6,_0xa252x10)};Graph[_0xed75[16]][_0xed75[110]]= function(_0xa252x6){if(_0xa252x6[_0xed75[92]]!= null&& typeof (_0xa252x6[_0xed75[92]])== _0xed75[95]){return _0xa252x6[_0xed75[92]][_0xed75[97]](_0xed75[106])};return null};Graph[_0xed75[16]][_0xed75[55]]= function(){this[_0xed75[11]][_0xed75[112]][_0xed75[111]]= function(){return this[_0xed75[46]][_0xed75[11]][_0xed75[113]]!= null};this[_0xed75[28]](mxEvent.START_EDITING,function(_0xa252x18,_0xa252x19){this[_0xed75[29]][_0xed75[114]]()});var _0xa252x1a=false;var _0xa252x1b=null;this[_0xed75[115]]= function(_0xa252xb){mxGraph[_0xed75[16]][_0xed75[115]][_0xed75[15]](this,arguments);if(_0xa252xb[_0xed75[32]]()== null){var _0xa252x6=this[_0xed75[118]](_0xa252xb[_0xed75[116]],_0xa252xb[_0xed75[117]]);if(this[_0xed75[72]]()[_0xed75[71]](_0xa252x6)){_0xa252xb[_0xed75[119]]= this[_0xed75[33]][_0xed75[32]](_0xa252x6);if(_0xa252xb[_0xed75[119]]!= null&& _0xa252xb[_0xed75[119]][_0xed75[120]]!= null){this[_0xed75[25]][_0xed75[24]][_0xed75[23]]= _0xa252xb[_0xed75[119]][_0xed75[120]][_0xed75[121]][_0xed75[24]][_0xed75[23]]}}};if(_0xa252xb[_0xed75[32]]()== null){this[_0xed75[25]][_0xed75[24]][_0xed75[23]]= _0xed75[30]}};this[_0xed75[122]]= function(_0xa252x1c,_0xa252xb,_0xa252x18){if(_0xa252x1c== mxEvent[_0xed75[123]]){if(!this[_0xed75[29]][_0xed75[124]]()){_0xa252x1b= _0xa252xb[_0xed75[125]]();_0xa252x1a= (_0xa252x1b!= null)?this[_0xed75[52]](_0xa252x1b):this[_0xed75[126]]()}else {_0xa252x1a= false;_0xa252x1b= null}}else {if(_0xa252x1c== mxEvent[_0xed75[127]]){if(_0xa252x1a&& !this[_0xed75[128]]()){if(!this[_0xed75[29]][_0xed75[124]]()){var _0xa252x1d=mxEvent[_0xed75[130]](_0xa252xb[_0xed75[129]]());var _0xa252x1e=mxEvent[_0xed75[131]](_0xa252xb[_0xed75[129]]());this[_0xed75[29]][_0xed75[132]](_0xa252x1d+ 16,_0xa252x1e,_0xa252x1b,_0xa252xb[_0xed75[129]]())};_0xa252x1a= false;_0xa252x1b= null;_0xa252xb[_0xed75[133]]();return};_0xa252x1a= false;_0xa252x1b= null}};mxGraph[_0xed75[16]][_0xed75[122]][_0xed75[15]](this,arguments);if(_0xa252x1c== mxEvent[_0xed75[134]]&& _0xa252xb[_0xed75[135]]()){_0xa252x1a= false;_0xa252x1b= null}}};(function(){mxVertexHandler[_0xed75[16]][_0xed75[136]]= true;mxText[_0xed75[16]][_0xed75[137]]= 5;mxText[_0xed75[16]][_0xed75[138]]= 1;if(touchStyle){mxConstants[_0xed75[139]]= 16;mxConstants[_0xed75[140]]= 7;if(mxClient[_0xed75[141]]){mxVertexHandler[_0xed75[16]][_0xed75[142]]= 4;mxEdgeHandler[_0xed75[16]][_0xed75[142]]= 6;Graph[_0xed75[16]][_0xed75[142]]= 14;Graph[_0xed75[16]][_0xed75[143]]= 20;mxPanningHandler[_0xed75[16]][_0xed75[144]]= false;mxPanningHandler[_0xed75[16]][_0xed75[145]]= true;mxPanningHandler[_0xed75[16]][_0xed75[146]]= function(_0xa252xb){var _0xa252x19=_0xa252xb[_0xed75[129]]();return (this[_0xed75[145]]&& (this[_0xed75[147]]|| _0xa252xb[_0xed75[32]]()== null))|| (mxEvent[_0xed75[148]](_0xa252x19)&& mxEvent[_0xed75[149]](_0xa252x19))|| (this[_0xed75[150]]&& mxEvent[_0xed75[151]](_0xa252x19))}};var _0xa252x1f=mxGraphHandler[_0xed75[16]][_0xed75[152]];mxGraphHandler[_0xed75[16]][_0xed75[152]]= function(_0xa252x18,_0xa252xb){_0xa252x1f[_0xed75[15]](this,arguments);if(this[_0xed75[46]][_0xed75[52]](_0xa252xb[_0xed75[125]]())&& this[_0xed75[46]][_0xed75[53]]()> 1){this[_0xed75[153]]= false}};Graph[_0xed75[16]][_0xed75[154]]= function(_0xa252x1){this[_0xed75[155]]= new mxTooltipHandler(this);this[_0xed75[155]][_0xed75[156]](false);this[_0xed75[157]]= new mxSelectionCellsHandler(this);this[_0xed75[29]]= new mxPanningHandler(this);this[_0xed75[29]][_0xed75[158]]= false;this[_0xed75[11]]= new mxConnectionHandler(this);this[_0xed75[11]][_0xed75[156]](false);this[_0xed75[159]]= new mxGraphHandler(this)};mxConnectionHandler[_0xed75[16]][_0xed75[160]]= function(_0xa252xe,_0xa252x20){if(touchStyle&& _0xa252x20!= null){this[_0xed75[46]][_0xed75[161]](_0xa252x20)}else {this[_0xed75[46]][_0xed75[161]](_0xa252xe)}};var _0xa252x21=mxGraph[_0xed75[16]][_0xed75[162]];Graph[_0xed75[16]][_0xed75[162]]= function(_0xa252x19,_0xa252x6){if(_0xa252x6== null){var _0xa252x22=mxUtils[_0xed75[163]](this[_0xed75[25]],mxEvent[_0xed75[130]](_0xa252x19),mxEvent[_0xed75[131]](_0xa252x19));_0xa252x6= this[_0xed75[118]](_0xa252x22[_0xed75[164]],_0xa252x22[_0xed75[165]])};_0xa252x21[_0xed75[0]](this,_0xa252x19,_0xa252x6)};var _0xa252x23= new mxImage(IMAGE_PATH+ _0xed75[166],16,16);mxVertexHandler[_0xed75[16]][_0xed75[167]]= _0xa252x23;mxEdgeHandler[_0xed75[16]][_0xed75[167]]= _0xa252x23;mxOutline[_0xed75[16]][_0xed75[168]]= _0xa252x23; new Image()[_0xed75[169]]= _0xa252x23[_0xed75[169]];var _0xa252x24=IMAGE_PATH+ _0xed75[170];var _0xa252x25=mxVertexHandler[_0xed75[16]][_0xed75[171]];mxVertexHandler[_0xed75[16]][_0xed75[171]]= function(){_0xa252x25[_0xed75[15]](this,arguments);if(showConnectorImg&& this[_0xed75[46]][_0xed75[11]][_0xed75[111]]()&& this[_0xed75[46]][_0xed75[172]](this[_0xed75[119]][_0xed75[51]])&& !this[_0xed75[46]][_0xed75[84]](this[_0xed75[119]][_0xed75[51]])&& this[_0xed75[46]][_0xed75[53]]()== 1){this[_0xed75[173]]= mxUtils[_0xed75[174]](_0xa252x24);this[_0xed75[173]][_0xed75[24]][_0xed75[23]]= _0xed75[26];this[_0xed75[173]][_0xed75[24]][_0xed75[175]]= _0xed75[176];this[_0xed75[173]][_0xed75[24]][_0xed75[177]]= _0xed75[176];this[_0xed75[173]][_0xed75[24]][_0xed75[178]]= _0xed75[179];if(!mxClient[_0xed75[141]]){this[_0xed75[173]][_0xed75[100]](_0xed75[180],mxResources[_0xed75[93]](_0xed75[17]));mxEvent[_0xed75[181]](this[_0xed75[173]],this[_0xed75[46]],this[_0xed75[119]])};this[_0xed75[173]][_0xed75[24]][_0xed75[182]]= _0xed75[183];mxEvent[_0xed75[185]](this[_0xed75[173]],mxUtils[_0xed75[27]](this,function(_0xa252x19){this[_0xed75[46]][_0xed75[29]][_0xed75[114]]();var _0xa252x22=mxUtils[_0xed75[163]](this[_0xed75[46]][_0xed75[25]],mxEvent[_0xed75[130]](_0xa252x19),mxEvent[_0xed75[131]](_0xa252x19));this[_0xed75[46]][_0xed75[11]][_0xed75[49]](this[_0xed75[119]],_0xa252x22[_0xed75[164]],_0xa252x22[_0xed75[165]]);this[_0xed75[46]][_0xed75[184]]= true;mxEvent[_0xed75[133]](_0xa252x19)}));this[_0xed75[46]][_0xed75[25]][_0xed75[186]](this[_0xed75[173]])};this[_0xed75[187]]()};var _0xa252x26=mxVertexHandler[_0xed75[16]][_0xed75[188]];mxVertexHandler[_0xed75[16]][_0xed75[188]]= function(){_0xa252x26[_0xed75[15]](this);this[_0xed75[187]]()};mxVertexHandler[_0xed75[16]][_0xed75[187]]= function(){if(this[_0xed75[119]]!= null&& this[_0xed75[173]]!= null){if(mxVertexHandler[_0xed75[16]][_0xed75[189]]){this[_0xed75[173]][_0xed75[24]][_0xed75[190]]= (this[_0xed75[119]][_0xed75[164]]+ this[_0xed75[119]][_0xed75[175]]- this[_0xed75[173]][_0xed75[191]]/ 2)+ _0xed75[192];this[_0xed75[173]][_0xed75[24]][_0xed75[193]]= (this[_0xed75[119]][_0xed75[165]]- this[_0xed75[173]][_0xed75[194]]/ 2)+ _0xed75[192]}else {this[_0xed75[173]][_0xed75[24]][_0xed75[190]]= (this[_0xed75[119]][_0xed75[164]]+ this[_0xed75[119]][_0xed75[175]]+ mxConstants[_0xed75[139]]/ 2+ 4)+ _0xed75[192];this[_0xed75[173]][_0xed75[24]][_0xed75[193]]= (this[_0xed75[119]][_0xed75[165]]+ (this[_0xed75[119]][_0xed75[177]]- this[_0xed75[173]][_0xed75[194]])/ 2)+ _0xed75[192]}}};var _0xa252x27=mxVertexHandler[_0xed75[16]][_0xed75[195]];mxVertexHandler[_0xed75[16]][_0xed75[195]]= function(_0xa252x18,_0xa252xb){_0xa252x27[_0xed75[15]](this,arguments);if(this[_0xed75[173]]!= null){this[_0xed75[173]][_0xed75[197]][_0xed75[196]](this[_0xed75[173]]);this[_0xed75[173]]= null}}; new Image()[_0xed75[169]]= _0xa252x24}else {var _0xa252x28= new mxImage(IMAGE_PATH+ _0xed75[198],15,15);mxConnectionHandler[_0xed75[16]][_0xed75[199]]= _0xa252x28; new Image()[_0xed75[169]]= _0xa252x28[_0xed75[169]];if(urlParams[_0xed75[17]]== _0xed75[18]){var _0xa252x28= new mxImage(IMAGE_PATH+ _0xed75[198],15,15);var _0xa252x25=mxVertexHandler[_0xed75[16]][_0xed75[171]];mxVertexHandler[_0xed75[16]][_0xed75[171]]= function(){_0xa252x25[_0xed75[15]](this,arguments);if(showConnectorImg&& this[_0xed75[46]][_0xed75[11]][_0xed75[111]]()&& this[_0xed75[46]][_0xed75[172]](this[_0xed75[119]][_0xed75[51]])&& !this[_0xed75[46]][_0xed75[84]](this[_0xed75[119]][_0xed75[51]])&& this[_0xed75[46]][_0xed75[53]]()== 1){if(mxClient[_0xed75[200]]&& !mxClient[_0xed75[201]]){this[_0xed75[173]]= document[_0xed75[104]](_0xed75[202]);this[_0xed75[173]][_0xed75[24]][_0xed75[203]]= _0xed75[204]+ _0xa252x28[_0xed75[169]]+ _0xed75[205];this[_0xed75[173]][_0xed75[24]][_0xed75[206]]= _0xed75[207];this[_0xed75[173]][_0xed75[24]][_0xed75[208]]= _0xed75[209];this[_0xed75[173]][_0xed75[24]][_0xed75[175]]= (_0xa252x28[_0xed75[175]]+ 4)+ _0xed75[192];this[_0xed75[173]][_0xed75[24]][_0xed75[177]]= (_0xa252x28[_0xed75[177]]+ 4)+ _0xed75[192];this[_0xed75[173]][_0xed75[24]][_0xed75[210]]= (mxClient[_0xed75[211]])?_0xed75[212]:_0xed75[213]}else {this[_0xed75[173]]= mxUtils[_0xed75[174]](_0xa252x28[_0xed75[169]]);this[_0xed75[173]][_0xed75[24]][_0xed75[175]]= _0xa252x28[_0xed75[175]]+ _0xed75[192];this[_0xed75[173]][_0xed75[24]][_0xed75[177]]= _0xa252x28[_0xed75[177]]+ _0xed75[192]};this[_0xed75[173]][_0xed75[24]][_0xed75[23]]= _0xed75[26];this[_0xed75[173]][_0xed75[24]][_0xed75[178]]= _0xed75[179];this[_0xed75[173]][_0xed75[100]](_0xed75[180],mxResources[_0xed75[93]](_0xed75[17]));mxEvent[_0xed75[181]](this[_0xed75[173]],this[_0xed75[46]],this[_0xed75[119]]);this[_0xed75[173]][_0xed75[24]][_0xed75[182]]= _0xed75[183];mxEvent[_0xed75[28]](this[_0xed75[173]],_0xed75[214],mxUtils[_0xed75[27]](this,function(_0xa252x19){this[_0xed75[46]][_0xed75[29]][_0xed75[114]]();var _0xa252x22=mxUtils[_0xed75[163]](this[_0xed75[46]][_0xed75[25]],mxEvent[_0xed75[130]](_0xa252x19),mxEvent[_0xed75[131]](_0xa252x19));this[_0xed75[46]][_0xed75[11]][_0xed75[49]](this[_0xed75[119]],_0xa252x22[_0xed75[164]],_0xa252x22[_0xed75[165]]);this[_0xed75[46]][_0xed75[184]]= true;mxEvent[_0xed75[133]](_0xa252x19)}));this[_0xed75[46]][_0xed75[25]][_0xed75[186]](this[_0xed75[173]])};this[_0xed75[187]]()};var _0xa252x26=mxVertexHandler[_0xed75[16]][_0xed75[188]];mxVertexHandler[_0xed75[16]][_0xed75[188]]= function(){_0xa252x26[_0xed75[15]](this);this[_0xed75[187]]()};mxVertexHandler[_0xed75[16]][_0xed75[187]]= function(){if(this[_0xed75[119]]!= null&& this[_0xed75[173]]!= null){if(mxVertexHandler[_0xed75[16]][_0xed75[189]]){this[_0xed75[173]][_0xed75[24]][_0xed75[190]]= (this[_0xed75[119]][_0xed75[164]]+ this[_0xed75[119]][_0xed75[175]]- this[_0xed75[173]][_0xed75[191]]/ 2)+ _0xed75[192];this[_0xed75[173]][_0xed75[24]][_0xed75[193]]= (this[_0xed75[119]][_0xed75[165]]- this[_0xed75[173]][_0xed75[194]]/ 2)+ _0xed75[192]}else {this[_0xed75[173]][_0xed75[24]][_0xed75[190]]= (this[_0xed75[119]][_0xed75[164]]+ this[_0xed75[119]][_0xed75[175]]+ mxConstants[_0xed75[139]]/ 2+ 2)+ _0xed75[192];this[_0xed75[173]][_0xed75[24]][_0xed75[193]]= (this[_0xed75[119]][_0xed75[165]]+ (this[_0xed75[119]][_0xed75[177]]- this[_0xed75[173]][_0xed75[194]])/ 2)+ _0xed75[192]}}};var _0xa252x27=mxVertexHandler[_0xed75[16]][_0xed75[195]];mxVertexHandler[_0xed75[16]][_0xed75[195]]= function(_0xa252x18,_0xa252xb){_0xa252x27[_0xed75[15]](this,arguments);if(this[_0xed75[173]]!= null){this[_0xed75[173]][_0xed75[197]][_0xed75[196]](this[_0xed75[173]]);this[_0xed75[173]]= null}}}}})() \ No newline at end of file +/** + * $Id: Graph.js,v 1.14 2013-02-16 10:19:54 gaudenz Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ +/** + * Constructs a new graph instance. Note that the constructor does not take a + * container because the graph instance is needed for creating the UI, which + * in turn will create the container for the graph. Hence, the container is + * assigned later in EditorUi. + */ +Graph = function(container, model, renderHint, stylesheet) { + mxGraph.call(this, container, model, renderHint, stylesheet); + + this.setConnectable(true); + this.setDropEnabled(false); + this.setPanning(true); + this.setTooltips(!mxClient.IS_TOUCH); + this.setAllowLoops(false); + this.setMultigraph(false); + this.allowAutoPanning = true; + this.resetEdgesOnConnect = false; + this.constrainChildren = false; + + // Centers the port icon on the target port + this.connectionHandler.targetConnectImage = true; + + // Does not allow dangling edges + this.setAllowDanglingEdges(false); + + // Enables cloning of connection sources + this.connectionHandler.setCreateTarget(false); + + // Disables built-in connection starts + this.connectionHandler.isValidSource = function() { + return mxConnectionHandler.prototype.isValidSource.apply(this, arguments) && urlParams['connect'] != '2'; + }; + + // Sets the style to be used when an elbow edge is double clicked + this.alternateEdgeStyle = 'vertical'; + + if (stylesheet == null) { + this.loadStylesheet(); + } + + // Creates rubberband selection + var rubberband = new mxRubberband(this); + + this.getRubberband = function() { + return rubberband; + }; + + // Shows hand cursor while panning + this.panningHandler.addListener(mxEvent.PAN_START, mxUtils.bind(this, function() { + this.container.style.cursor = 'pointer'; + })); + + this.panningHandler.addListener(mxEvent.PAN_END, mxUtils.bind(this, function() { + this.container.style.cursor = 'default'; + })); + + // Adds support for HTML labels via style. Note: Currently, only the Java + // backend supports HTML labels but CSS support is limited to the following: + // http://docs.oracle.com/javase/6/docs/api/index.html?javax/swing/text/html/CSS.html + this.isHtmlLabel = function(cell) { + var state = this.view.getState(cell); + var style = (state != null) ? state.style : this.getCellStyle(cell); + + return style['html'] == '1' || style['whiteSpace'] == 'wrap'; + }; + + // HTML entities are displayed as plain text in wrapped plain text labels + this.cellRenderer.getLabelValue = function(state) { + var result = mxCellRenderer.prototype.getLabelValue.apply(this, arguments); + + if (state.style['whiteSpace'] == 'wrap' && state.style['html'] != 1) { + result = mxUtils.htmlEntities(result, false); + } + + return result; + }; + + // Unlocks all cells + this.isCellLocked = function(cell) { + return false; + }; + + // Tap and hold brings up context menu. + // Tolerance slightly below graph tolerance is better. + this.connectionHandler.tapAndHoldTolerance = 16; + + // Tap and hold on background starts rubberband on cell starts connecting + var connectionHandlerTapAndHold = this.connectionHandler.tapAndHold; + this.connectionHandler.tapAndHold = function(me, state) { + if (state == null) { + if (!this.graph.panningHandler.active) { + rubberband.start(me.getGraphX(), me.getGraphY()); + this.graph.panningHandler.panningTrigger = false; + } + } else if (tapAndHoldStartsConnection) { + connectionHandlerTapAndHold.apply(this, arguments); + } else if (this.graph.isCellSelected(state.cell) && this.graph.getSelectionCount() > 1) { + this.graph.removeSelectionCell(state.cell); + } + }; + + if (touchStyle) { + this.initTouch(); + } +}; + +// Graph inherits from mxGraph +mxUtils.extend(Graph, mxGraph); + +/** + * Allows to all values in fit. + */ +Graph.prototype.minFitScale = null; + +/** + * Allows to all values in fit. + */ +Graph.prototype.maxFitScale = null; + +/** + * Loads the stylesheet for this graph. + */ +Graph.prototype.loadStylesheet = function() { + var node = mxUtils.load(STYLE_PATH + '/default.xml').getDocumentElement(); + var dec = new mxCodec(node.ownerDocument); + dec.decode(node, this.getStylesheet()); +}; + +/** + * Inverts the elbow edge style without removing existing styles. + */ +Graph.prototype.flipEdge = function(edge) { + if (edge != null) { + var state = this.view.getState(edge); + var style = (state != null) ? state.style : this.getCellStyle(edge); + + if (style != null) { + var elbow = mxUtils.getValue(style, mxConstants.STYLE_ELBOW, + mxConstants.ELBOW_HORIZONTAL); + var value = (elbow == mxConstants.ELBOW_HORIZONTAL) ? + mxConstants.ELBOW_VERTICAL : mxConstants.ELBOW_HORIZONTAL; + this.setCellStyles(mxConstants.STYLE_ELBOW, value, [edge]); + } + } +}; + +/** + * Sets the default edge for future connections. + */ +Graph.prototype.setDefaultEdge = function(cell) { + if (cell != null && this.getModel().isEdge(cell)) { + // Take a snapshot of the cell at the moment of calling + var proto = this.getModel().cloneCells([cell])[0]; + + // Delete existing points + if (proto.geometry != null) { + proto.geometry.points = null; + } + + // Delete entry-/exitXY styles + var style = proto.getStyle(); + style = mxUtils.setStyle(style, mxConstants.STYLE_ENTRY_X, null); + style = mxUtils.setStyle(style, mxConstants.STYLE_ENTRY_Y, null); + style = mxUtils.setStyle(style, mxConstants.STYLE_EXIT_X, null); + style = mxUtils.setStyle(style, mxConstants.STYLE_EXIT_Y, null); + proto.setStyle(style); + + // Uses edge template for connect preview + this.connectionHandler.createEdgeState = function(me) { + return this.graph.view.createState(proto); + }; + + // Creates new connections from edge template + this.connectionHandler.factoryMethod = function() { + return this.graph.cloneCells([proto])[0]; + }; + } +}; + +/** + * Disables folding for non-swimlanes. + */ +Graph.prototype.isCellFoldable = function(cell) { + return this.foldingEnabled && this.isSwimlane(cell); +}; + +/** + * Disables drill-down for non-swimlanes. + */ +Graph.prototype.isValidRoot = function(cell) { + return this.isSwimlane(cell); +}; + +/** + * Overrides createGroupCell to set the group style for new groups to 'group'. + */ +Graph.prototype.createGroupCell = function() { + var group = mxGraph.prototype.createGroupCell.apply(this, arguments); + group.setStyle('group'); + + return group; +}; + +/** + * Giuseppe Careri + * Overrides tooltips to show position and size + */ +Graph.prototype.getTooltipForCell = function(cell) { + var tip = ''; + + if (this.getModel().isVertex(cell)) { + // var geo = this.getCellGeometry(cell); + + // var f2 = function(x) + // { + // return Math.round(parseFloat(x) * 100) / 100; + // }; + + // if (geo != null) + // { + // if (tip == null) + // { + // tip = ''; + // } + // else if (tip.length > 0) + // { + // tip += '\n'; + // } + + // tip += 'X: ' + f2(geo.x) + '\nY: ' + f2(geo.y) + '\nW: ' + f2(geo.width) + '\nH: ' + f2(geo.height); + // } + + tip += mxResources.get('description_' + cell.value.nodeName) || ''; + } else if (this.getModel().isEdge(cell)) { + tip = mxGraph.prototype.getTooltipForCell.apply(this, arguments); + } + + return tip; +}; + +/** + * Giuseppe Careri + * Returns the label for the given cell. + */ +Graph.prototype.convertValueToString = function(cell) { + if (cell.value != null && typeof(cell.value) == 'object') { + return cell.value.getAttribute('label'); + } + + return mxGraph.prototype.convertValueToString.apply(this, arguments); +}; + +/** + * Giuseppe Careri + * Handles label changes for XML user objects. + */ +Graph.prototype.cellLabelChanged = function(cell, value, autoSize) { + if (cell.value != null && typeof(cell.value) == 'object') { + var tmp = cell.value.cloneNode(true); + tmp.setAttribute('label', value); + value = tmp; + } + + mxGraph.prototype.cellLabelChanged.apply(this, arguments); +}; + +/** + * Sets the link for the given cell. + */ +Graph.prototype.setLinkForCell = function(cell, link) { + var value = null; + + if (cell.value != null && typeof(cell.value) == 'object') { + value = cell.value.cloneNode(true); + } else { + var doc = mxUtils.createXmlDocument(); + + value = doc.createElement('UserObject'); + value.setAttribute('label', cell.value); + } + + if (link != null && link.length > 0) { + value.setAttribute('link', link); + } else { + value.removeAttribute('link'); + } + + this.model.setValue(cell, value); +}; + +/** + * Returns the link for the given cell. + */ +Graph.prototype.getLinkForCell = function(cell) { + if (cell.value != null && typeof(cell.value) == 'object') { + return cell.value.getAttribute('link'); + } + + return null; +}; + +/** + * Customized graph for touch devices. + */ +Graph.prototype.initTouch = function() { + // Disables new connections via "hotspot" + this.connectionHandler.marker.isEnabled = function() { + return this.graph.connectionHandler.first != null; + }; + + // Hides menu when editing starts + this.addListener(mxEvent.START_EDITING, function(sender, evt) { + this.panningHandler.hideMenu(); + }); + + // Context menu for touchstyle + var showMenu = false; + var menuCell = null; + + // Checks if native hit detection did not return anything and does custom + // hit detection for edges to take into account the tolerance + this.updateMouseEvent = function(me) { + mxGraph.prototype.updateMouseEvent.apply(this, arguments); + + if (me.getState() == null) { + var cell = this.getCellAt(me.graphX, me.graphY); + + if (this.getModel().isEdge(cell)) { + me.state = this.view.getState(cell); + + if (me.state != null && me.state.shape != null) { + this.container.style.cursor = me.state.shape.node.style.cursor; + } + } + } + + if (me.getState() == null) { + this.container.style.cursor = 'default'; + } + }; + + // Handles popup menu on touch devices (tap selected cell) + this.fireMouseEvent = function(evtName, me, sender) { + if (evtName == mxEvent.MOUSE_DOWN) { + if (!this.panningHandler.isMenuShowing()) { + menuCell = me.getCell(); + showMenu = (menuCell != null) ? this.isCellSelected(menuCell) : this.isSelectionEmpty(); + } else { + showMenu = false; + menuCell = null; + } + } else if (evtName == mxEvent.MOUSE_UP) { + if (showMenu && !this.isEditing()) { + if (!this.panningHandler.isMenuShowing()) { + var x = mxEvent.getClientX(me.getEvent()); + var y = mxEvent.getClientY(me.getEvent()); + + this.panningHandler.popup(x + 16, y, menuCell, me.getEvent()); + } + + showMenu = false; + menuCell = null; + me.consume(); + + return; + } + + showMenu = false; + menuCell = null; + } + + mxGraph.prototype.fireMouseEvent.apply(this, arguments); + + if (evtName == mxEvent.MOUSE_MOVE && me.isConsumed()) { + showMenu = false; + menuCell = null; + } + }; +}; + +/** + * Implements touch devices. + */ +(function() { + // Enables rotation handle + mxVertexHandler.prototype.rotationEnabled = true; + + // Matches label positions of mxGraph 1.x + mxText.prototype.baseSpacingTop = 5; + mxText.prototype.baseSpacingBottom = 1; + + // Touch-specific static overrides + if (touchStyle) { + // Sets constants for touch style + mxConstants.HANDLE_SIZE = 16; + mxConstants.LABEL_HANDLE_SIZE = 7; + + // Larger tolerance and grid for real touch devices + if (mxClient.IS_TOUCH) { + mxVertexHandler.prototype.tolerance = 4; + mxEdgeHandler.prototype.tolerance = 6; + Graph.prototype.tolerance = 14; + Graph.prototype.gridSize = 20; + + // One finger pans (no rubberband selection) must start regardless of mouse button + mxPanningHandler.prototype.selectOnPopup = false; + mxPanningHandler.prototype.useLeftButtonForPanning = true; + mxPanningHandler.prototype.isPanningTrigger = function(me) { + var evt = me.getEvent(); + + return (this.useLeftButtonForPanning && (this.ignoreCell || me.getState() == null) + /* && + mxEvent.isLeftMouseButton(evt)*/ + ) || (mxEvent.isControlDown(evt) && + mxEvent.isShiftDown(evt)) || (this.usePopupTrigger && + mxEvent.isPopupTrigger(evt)); + }; + } + + // Don't clear selection if multiple cells selected + var graphHandlerMouseDown = mxGraphHandler.prototype.mouseDown; + mxGraphHandler.prototype.mouseDown = function(sender, me) { + graphHandlerMouseDown.apply(this, arguments); + + if (this.graph.isCellSelected(me.getCell()) && this.graph.getSelectionCount() > 1) { + this.delayedSelection = false; + } + }; + + // Changes order of panninghandler + Graph.prototype.createHandlers = function(container) { + this.tooltipHandler = new mxTooltipHandler(this); + this.tooltipHandler.setEnabled(false); + // Selection cells first + this.selectionCellsHandler = new mxSelectionCellsHandler(this); + this.panningHandler = new mxPanningHandler(this); + this.panningHandler.panningEnabled = false; + this.connectionHandler = new mxConnectionHandler(this); + this.connectionHandler.setEnabled(false); + this.graphHandler = new mxGraphHandler(this); + }; + + // On connect the target is selected and we clone the cell of the preview edge for insert + mxConnectionHandler.prototype.selectCells = function(edge, target) { + if (touchStyle && target != null) { + this.graph.setSelectionCell(target); + } else { + this.graph.setSelectionCell(edge); + } + }; + + // Overrides double click handling to use the tolerance + // FIXME: Double click on edges in iPad needs focus on textarea + var graphDblClick = mxGraph.prototype.dblClick; + Graph.prototype.dblClick = function(evt, cell) { + if (cell == null) { + var pt = mxUtils.convertPoint(this.container, + mxEvent.getClientX(evt), mxEvent.getClientY(evt)); + cell = this.getCellAt(pt.x, pt.y); + } + + graphDblClick.call(this, evt, cell); + }; + + // Rounded edge and vertex handles + var touchHandle = new mxImage(IMAGE_PATH + '/touch-handle.png', 16, 16); + mxVertexHandler.prototype.handleImage = touchHandle; + mxEdgeHandler.prototype.handleImage = touchHandle; + mxOutline.prototype.sizerImage = touchHandle; + + // Pre-fetches touch handle + new Image().src = touchHandle.src; + + // Adds connect icon to selected vertices + var connectorSrc = IMAGE_PATH + '/touch-connector.png'; + + var vertexHandlerInit = mxVertexHandler.prototype.init; + mxVertexHandler.prototype.init = function() { + vertexHandlerInit.apply(this, arguments); + + // Only show connector image on one cell and do not show on containers + if (showConnectorImg && this.graph.connectionHandler.isEnabled() && + this.graph.isCellConnectable(this.state.cell) && + !this.graph.isValidRoot(this.state.cell) && + this.graph.getSelectionCount() == 1) { + this.connectorImg = mxUtils.createImage(connectorSrc); + this.connectorImg.style.cursor = 'pointer'; + this.connectorImg.style.width = '29px'; + this.connectorImg.style.height = '29px'; + this.connectorImg.style.position = 'absolute'; + + if (!mxClient.IS_TOUCH) { + this.connectorImg.setAttribute('title', mxResources.get('connect')); + mxEvent.redirectMouseEvents(this.connectorImg, this.graph, this.state); + } + + // Adds 2px tolerance + this.connectorImg.style.padding = '2px'; + + // Starts connecting on touch/mouse down + mxEvent.addGestureListeners(this.connectorImg, + mxUtils.bind(this, function(evt) { + this.graph.panningHandler.hideMenu(); + var pt = mxUtils.convertPoint(this.graph.container, + mxEvent.getClientX(evt), mxEvent.getClientY(evt)); + this.graph.connectionHandler.start(this.state, pt.x, pt.y); + this.graph.isMouseDown = true; + mxEvent.consume(evt); + }) + ); + + this.graph.container.appendChild(this.connectorImg); + } + + this.redrawTools(); + }; + + var vertexHandlerRedraw = mxVertexHandler.prototype.redraw; + mxVertexHandler.prototype.redraw = function() { + vertexHandlerRedraw.apply(this); + this.redrawTools(); + }; + + mxVertexHandler.prototype.redrawTools = function() { + if (this.state != null && this.connectorImg != null) { + // Top right for single-sizer + if (mxVertexHandler.prototype.singleSizer) { + this.connectorImg.style.left = (this.state.x + this.state.width - this.connectorImg.offsetWidth / 2) + 'px'; + this.connectorImg.style.top = (this.state.y - this.connectorImg.offsetHeight / 2) + 'px'; + } else { + this.connectorImg.style.left = (this.state.x + this.state.width + mxConstants.HANDLE_SIZE / 2 + 4 /* - 2 padding*/ ) + 'px'; + this.connectorImg.style.top = (this.state.y + (this.state.height - this.connectorImg.offsetHeight) / 2) + 'px'; + } + } + }; + + var vertexHandlerDestroy = mxVertexHandler.prototype.destroy; + mxVertexHandler.prototype.destroy = function(sender, me) { + vertexHandlerDestroy.apply(this, arguments); + + if (this.connectorImg != null) { + this.connectorImg.parentNode.removeChild(this.connectorImg); + this.connectorImg = null; + } + }; + + // Pre-fetches touch connector + new Image().src = connectorSrc; + } else { + var img = new mxImage(IMAGE_PATH + '/connector.png', 15, 15); + mxConnectionHandler.prototype.connectImage = img; + + // Pre-fetches img + new Image().src = img.src; + + if (urlParams['connect'] == '2') // not touchStyle + { + var img = new mxImage(IMAGE_PATH + '/connector.png', 15, 15); + + var vertexHandlerInit = mxVertexHandler.prototype.init; + mxVertexHandler.prototype.init = function() { + vertexHandlerInit.apply(this, arguments); + + // Only show connector image on one cell and do not show on containers + if (showConnectorImg && this.graph.connectionHandler.isEnabled() && + this.graph.isCellConnectable(this.state.cell) && + !this.graph.isValidRoot(this.state.cell) && + this.graph.getSelectionCount() == 1) { + // Workaround for event redirection via image tag in quirks and IE8 + if (mxClient.IS_IE && !mxClient.IS_SVG) { + this.connectorImg = document.createElement('div'); + this.connectorImg.style.backgroundImage = 'url(' + img.src + ')'; + this.connectorImg.style.backgroundPosition = 'center'; + this.connectorImg.style.backgroundRepeat = 'no-repeat'; + this.connectorImg.style.width = (img.width + 4) + 'px'; + this.connectorImg.style.height = (img.height + 4) + 'px'; + this.connectorImg.style.display = (mxClient.IS_QUIRKS) ? 'inline' : 'inline-block'; + } else { + this.connectorImg = mxUtils.createImage(img.src); + this.connectorImg.style.width = img.width + 'px'; + this.connectorImg.style.height = img.height + 'px'; + } + + this.connectorImg.style.cursor = 'pointer'; + this.connectorImg.style.position = 'absolute'; + this.connectorImg.setAttribute('title', mxResources.get('connect')); + mxEvent.redirectMouseEvents(this.connectorImg, this.graph, this.state); + + // Adds 2px tolerance + this.connectorImg.style.padding = '2px'; + + // Starts connecting on touch/mouse down + mxEvent.addListener(this.connectorImg, 'mousedown', + mxUtils.bind(this, function(evt) { + this.graph.panningHandler.hideMenu(); + var pt = mxUtils.convertPoint(this.graph.container, + mxEvent.getClientX(evt), mxEvent.getClientY(evt)); + this.graph.connectionHandler.start(this.state, pt.x, pt.y); + this.graph.isMouseDown = true; + mxEvent.consume(evt); + }) + ); + + this.graph.container.appendChild(this.connectorImg); + } + + this.redrawTools(); + }; + + var vertexHandlerRedraw = mxVertexHandler.prototype.redraw; + mxVertexHandler.prototype.redraw = function() { + vertexHandlerRedraw.apply(this); + this.redrawTools(); + }; + + mxVertexHandler.prototype.redrawTools = function() { + if (this.state != null && this.connectorImg != null) { + // Top right for single-sizer + if (mxVertexHandler.prototype.singleSizer) { + this.connectorImg.style.left = (this.state.x + this.state.width - this.connectorImg.offsetWidth / 2) + 'px'; + this.connectorImg.style.top = (this.state.y - this.connectorImg.offsetHeight / 2) + 'px'; + } else { + this.connectorImg.style.left = (this.state.x + this.state.width + mxConstants.HANDLE_SIZE / 2 + 2 /* - 2 padding*/ ) + 'px'; + this.connectorImg.style.top = (this.state.y + (this.state.height - this.connectorImg.offsetHeight) / 2) + 'px'; + } + } + }; + + var vertexHandlerDestroy = mxVertexHandler.prototype.destroy; + mxVertexHandler.prototype.destroy = function(sender, me) { + vertexHandlerDestroy.apply(this, arguments); + + if (this.connectorImg != null) { + this.connectorImg.parentNode.removeChild(this.connectorImg); + this.connectorImg = null; + } + }; + } + } +})(); diff --git a/public/assets/plugins/jscripty/js/Menus.js b/public/assets/plugins/jscripty/js/Menus.js index 4f0a453..7d33b9e 100644 --- a/public/assets/plugins/jscripty/js/Menus.js +++ b/public/assets/plugins/jscripty/js/Menus.js @@ -1 +1,716 @@ -var _0x729a=["\x65\x64\x69\x74\x6F\x72\x55\x69","\x6D\x65\x6E\x75\x73","\x69\x6E\x69\x74","\x73\x72\x63","\x2F\x63\x68\x65\x63\x6B\x6D\x61\x72\x6B\x2E\x67\x69\x66","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x67\x72\x61\x70\x68","\x65\x64\x69\x74\x6F\x72","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x56\x65\x72\x64\x61\x6E\x61","\x54\x69\x6D\x65\x73\x20\x4E\x65\x77\x20\x52\x6F\x6D\x61\x6E","\x47\x61\x72\x61\x6D\x6F\x6E\x64","\x43\x6F\x6D\x69\x63\x20\x53\x61\x6E\x73\x20\x4D\x53","\x43\x6F\x75\x72\x69\x65\x72\x20\x4E\x65\x77","\x47\x65\x6F\x72\x67\x69\x61","\x4C\x75\x63\x69\x64\x61\x20\x43\x6F\x6E\x73\x6F\x6C\x65","\x54\x61\x68\x6F\x6D\x61","\x6C\x65\x6E\x67\x74\x68","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x73\x74\x79\x6C\x65\x43\x68\x61\x6E\x67\x65","\x73\x74\x79\x6C\x65","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x63\x75\x73\x74\x6F\x6D","\x67\x65\x74","","\x70\x72\x6F\x6D\x70\x74\x43\x68\x61\x6E\x67\x65","\x62\x69\x6E\x64","\x70\x75\x74","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x28\x70\x74\x29","\x31\x32","\x6C\x69\x6E\x65\x77\x69\x64\x74\x68","\x70\x78","\x53\x54\x59\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x28\x70\x78\x29","\x31","\x6C\x69\x6E\x65","\x73\x74\x72\x61\x69\x67\x68\x74","\x53\x54\x59\x4C\x45\x5F\x45\x44\x47\x45","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x53\x54\x59\x4C\x45\x5F\x45\x4C\x42\x4F\x57","\x65\x6C\x62\x6F\x77\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x76\x65\x72\x74\x69\x63\x61\x6C","\x6D\x61\x6E\x75\x61\x6C","\x73\x65\x67\x6D\x65\x6E\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x61\x75\x74\x6F\x6D\x61\x74\x69\x63","\x6F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x69\x6E\x65\x65\x6E\x64","\x63\x6C\x61\x73\x73\x69\x63","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x41\x52\x52\x4F\x57","\x41\x52\x52\x4F\x57\x5F\x43\x4C\x41\x53\x53\x49\x43","\x6F\x70\x65\x6E\x41\x72\x72\x6F\x77","\x41\x52\x52\x4F\x57\x5F\x4F\x50\x45\x4E","\x62\x6C\x6F\x63\x6B","\x41\x52\x52\x4F\x57\x5F\x42\x4C\x4F\x43\x4B","\x6F\x76\x61\x6C","\x41\x52\x52\x4F\x57\x5F\x4F\x56\x41\x4C","\x64\x69\x61\x6D\x6F\x6E\x64","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44","\x64\x69\x61\x6D\x6F\x6E\x64\x54\x68\x69\x6E","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44\x5F\x54\x48\x49\x4E","\x6E\x6F\x6E\x65","\x4E\x4F\x4E\x45","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x65\x6E\x64\x46\x69\x6C\x6C","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x61\x64\x64\x49\x74\x65\x6D","\x73\x69\x7A\x65","\x6C\x69\x6E\x65\x73\x74\x61\x72\x74","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x41\x52\x52\x4F\x57","\x73\x74\x61\x72\x74\x46\x69\x6C\x6C","\x73\x70\x61\x63\x69\x6E\x67","\x65\x6E\x61\x62\x6C\x65\x64","\x73\x68\x61\x64\x6F\x77","\x61\x63\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x44\x69\x73\x61\x62\x6C\x65\x64","\x74\x6F\x70","\x30","\x72\x69\x67\x68\x74","\x62\x6F\x74\x74\x6F\x6D","\x6C\x65\x66\x74","\x67\x6C\x6F\x62\x61\x6C","\x70\x65\x72\x69\x6D\x65\x74\x65\x72","\x73\x6F\x75\x72\x63\x65\x53\x70\x61\x63\x69\x6E\x67","\x74\x61\x72\x67\x65\x74\x53\x70\x61\x63\x69\x6E\x67","\x66\x6F\x72\x6D\x61\x74","\x61\x64\x64\x4D\x65\x6E\x75\x49\x74\x65\x6D","\x74\x65\x78\x74","\x61\x64\x64\x53\x75\x62\x6D\x65\x6E\x75","\x2D","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x61\x64\x64\x4D\x65\x6E\x75\x49\x74\x65\x6D\x73","\x61\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x77\x6F\x72\x64\x57\x72\x61\x70","\x74\x65\x78\x74\x4F\x70\x61\x63\x69\x74\x79","\x28\x25\x29","\x31\x30\x30","\x68\x69\x64\x65","\x6C\x65\x66\x74\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x41\x4C\x49\x47\x4E","\x41\x4C\x49\x47\x4E\x5F\x4C\x45\x46\x54","\x63\x65\x6E\x74\x65\x72","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x72\x69\x67\x68\x74\x41\x6C\x69\x67\x6E","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x74\x6F\x70\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x41\x4C\x49\x47\x4E","\x41\x4C\x49\x47\x4E\x5F\x54\x4F\x50","\x6D\x69\x64\x64\x6C\x65","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x62\x6F\x74\x74\x6F\x6D\x41\x6C\x69\x67\x6E","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x4F\x53\x49\x54\x49\x4F\x4E","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x4F\x53\x49\x54\x49\x4F\x4E","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x74\x69\x6C\x74","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x61\x6C\x69\x67\x6E","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73","\x6C\x61\x79\x6F\x75\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x46\x6C\x6F\x77","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x76\x65\x72\x74\x69\x63\x61\x6C\x46\x6C\x6F\x77","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x68\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x65\x78\x70\x61\x6E\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x61\x72\x72\x61\x6E\x67\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x74\x6F\x42\x61\x63\x6B","\x67\x72\x6F\x75\x70","\x75\x6E\x67\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x76\x69\x65\x77","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x25","\x7A\x6F\x6F\x6D\x54\x6F","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x66\x69\x74\x57\x69\x6E\x64\x6F\x77","\x63\x75\x73\x74\x6F\x6D\x5A\x6F\x6F\x6D","\x66\x69\x74\x50\x61\x67\x65","\x66\x69\x74\x50\x61\x67\x65\x57\x69\x64\x74\x68","\x66\x69\x6C\x65","\x6E\x65\x77","\x6F\x70\x65\x6E","\x73\x61\x76\x65","\x73\x61\x76\x65\x41\x73","\x70\x75\x62\x6C\x69\x73\x68","\x76\x61\x72\x69\x61\x62\x6C\x65","\x69\x6D\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x65\x64\x69\x74\x46\x69\x6C\x65","\x72\x65\x6E\x61\x6D\x65","\x70\x72\x69\x6E\x74","\x65\x64\x69\x74","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x75\x74","\x63\x6F\x70\x79","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x68\x65\x6C\x70","\x61\x62\x6F\x75\x74","\x61\x64\x64\x4D\x65\x6E\x75","\x65\x78\x65\x63\x75\x74\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x65\x6E\x74\x65\x72\x56\x61\x6C\x75\x65","\x20","\x70\x72\x6F\x6D\x70\x74","\x6C\x61\x62\x65\x6C","\x66\x75\x6E\x63\x74","\x74\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64","\x61\x64\x64\x43\x68\x65\x63\x6B\x6D\x61\x72\x6B","\x61\x64\x64\x53\x68\x6F\x72\x74\x63\x75\x74","\x73\x68\x6F\x72\x74\x63\x75\x74","\x73\x70\x61\x6E","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6F\x6C\x6F\x72","\x67\x72\x61\x79","\x77\x72\x69\x74\x65","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x2F\x63\x68\x65\x63\x6B\x6D\x61\x72\x6B\x2E\x67\x69\x66\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x32\x70\x78\x20\x35\x30\x25","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x73\x6D\x61\x72\x74\x53\x65\x70\x61\x72\x61\x74\x6F\x72\x73","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x69\x73\x45\x64\x67\x65","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x62\x65\x6E\x64\x73","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x57\x61\x79\x70\x6F\x69\x6E\x74","\x68\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x64\x65\x78","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75\x62\x61\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x63\x75\x72\x72\x65\x6E\x74\x4D\x65\x6E\x75","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x49\x74\x65\x6D","\x61\x64\x64\x4D\x65\x6E\x75\x48\x61\x6E\x64\x6C\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x64\x69\x76","\x20\x67\x65\x4D\x65\x6E\x75\x62\x61\x72\x4D\x65\x6E\x75","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x61\x70\x70\x6C\x79","\x64\x65\x73\x74\x72\x6F\x79","\x63\x75\x72\x72\x65\x6E\x74\x45\x6C\x74","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x2D\x73\x69\x64\x65\x62\x61\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x6F\x70\x75\x70","\x63\x6F\x6E\x73\x75\x6D\x65","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x63\x6C\x69\x63\x6B","\x63\x61\x6C\x6C","\x65\x78\x74\x65\x6E\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74"];Menus= function(_0x61f4x1){this[_0x729a[0]]= _0x61f4x1;this[_0x729a[1]]= new Object();this[_0x729a[2]](); new Image()[_0x729a[3]]= IMAGE_PATH+ _0x729a[4]};Menus[_0x729a[5]][_0x729a[2]]= function(){var _0x61f4x2=this[_0x729a[0]][_0x729a[7]][_0x729a[6]];this[_0x729a[30]](_0x729a[8], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){var _0x61f4x5=[_0x729a[9],_0x729a[10],_0x729a[11],_0x729a[12],_0x729a[13],_0x729a[14],_0x729a[15],_0x729a[16],_0x729a[17]];for(var _0x61f4x6=0;_0x61f4x6< _0x61f4x5[_0x729a[18]];_0x61f4x6++){var _0x61f4x7=this[_0x729a[20]](_0x61f4x3,_0x61f4x5[_0x61f4x6],[mxConstants[_0x729a[19]]],[_0x61f4x5[_0x61f4x6]],null,_0x61f4x4);_0x61f4x7[_0x729a[23]][_0x729a[22]][_0x729a[21]][_0x729a[8]]= _0x61f4x5[_0x61f4x6]};_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[28]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[25]),_0x729a[27],mxConstants.DEFAULT_FONTFAMILY,mxConstants.STYLE_FONTFAMILY,_0x61f4x4)})));this[_0x729a[30]](_0x729a[31], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){var _0x61f4x8=[6,8,9,10,11,12,14,18,24,36,48,72];for(var _0x61f4x6=0;_0x61f4x6< _0x61f4x8[_0x729a[18]];_0x61f4x6++){this[_0x729a[20]](_0x61f4x3,_0x61f4x8[_0x61f4x6],[mxConstants[_0x729a[32]]],[_0x61f4x8[_0x61f4x6]],null,_0x61f4x4)};_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[28]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[25]),_0x729a[33],_0x729a[34],mxConstants.STYLE_FONTSIZE,_0x61f4x4)})));this[_0x729a[30]](_0x729a[35], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){var _0x61f4x8=[1,2,3,4,8,12,16,24];for(var _0x61f4x6=0;_0x61f4x6< _0x61f4x8[_0x729a[18]];_0x61f4x6++){this[_0x729a[20]](_0x61f4x3,_0x61f4x8[_0x61f4x6]+ _0x729a[36],[mxConstants[_0x729a[37]]],[_0x61f4x8[_0x61f4x6]],null,_0x61f4x4)};_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[28]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[25]),_0x729a[38],_0x729a[39],mxConstants.STYLE_STROKEWIDTH,_0x61f4x4)})));this[_0x729a[30]](_0x729a[40], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[41]),[mxConstants[_0x729a[42]]],[null],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[43]),[mxConstants[_0x729a[42]]],[_0x729a[44]],null,_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[45]),[mxConstants[_0x729a[42]],mxConstants[_0x729a[46]]],[_0x729a[47],_0x729a[45]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[48]),[mxConstants[_0x729a[42]],mxConstants[_0x729a[46]]],[_0x729a[47],_0x729a[48]],null,_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[49]),[mxConstants[_0x729a[42]]],[_0x729a[50]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[51]),[mxConstants[_0x729a[42]]],[_0x729a[52]],null,_0x61f4x4)})));this[_0x729a[30]](_0x729a[53], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[54]),[mxConstants[_0x729a[55]]],[mxConstants[_0x729a[56]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[57]),[mxConstants[_0x729a[55]]],[mxConstants[_0x729a[58]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[59]),[mxConstants[_0x729a[55]]],[mxConstants[_0x729a[60]]],null,_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[61]),[mxConstants[_0x729a[55]]],[mxConstants[_0x729a[62]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[63]),[mxConstants[_0x729a[55]]],[mxConstants[_0x729a[64]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[65]),[mxConstants[_0x729a[55]]],[mxConstants[_0x729a[66]]],null,_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[67]),[mxConstants[_0x729a[55]]],[mxConstants[_0x729a[68]]],null,_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x729a[69]),null,function(){_0x61f4x2[_0x729a[71]](_0x729a[70],true)},_0x61f4x4,null,true);_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[28]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[73]),_0x729a[38],mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_ENDSIZE,_0x61f4x4)})));this[_0x729a[30]](_0x729a[74], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[54]),[mxConstants[_0x729a[75]]],[mxConstants[_0x729a[56]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[57]),[mxConstants[_0x729a[75]]],[mxConstants[_0x729a[58]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[59]),[mxConstants[_0x729a[75]]],[mxConstants[_0x729a[60]]],null,_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[61]),[mxConstants[_0x729a[75]]],[mxConstants[_0x729a[62]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[63]),[mxConstants[_0x729a[75]]],[mxConstants[_0x729a[64]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[65]),[mxConstants[_0x729a[75]]],[mxConstants[_0x729a[66]]],null,_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[67]),[mxConstants[_0x729a[75]]],[mxConstants[_0x729a[68]]],null,_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x729a[69]),null,function(){_0x61f4x2[_0x729a[71]](_0x729a[76],true)},_0x61f4x4,null,true);_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[28]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[73]),_0x729a[38],mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_STARTSIZE,_0x61f4x4)})));this[_0x729a[30]](_0x729a[77], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){var _0x61f4x9=this[_0x729a[0]][_0x729a[80]][_0x729a[26]](_0x729a[79])[_0x729a[78]];var _0x61f4xa=this[_0x729a[26]](_0x729a[40])[_0x729a[78]];if(_0x61f4x9|| _0x61f4x3[_0x729a[81]]){this[_0x729a[28]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[82]),_0x729a[38],_0x729a[83],mxConstants.STYLE_SPACING_TOP,_0x61f4x4,_0x61f4x9);this[_0x729a[28]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[84]),_0x729a[38],_0x729a[83],mxConstants.STYLE_SPACING_RIGHT,_0x61f4x4,_0x61f4x9);this[_0x729a[28]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[85]),_0x729a[38],_0x729a[83],mxConstants.STYLE_SPACING_BOTTOM,_0x61f4x4,_0x61f4x9);this[_0x729a[28]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[86]),_0x729a[38],_0x729a[83],mxConstants.STYLE_SPACING_LEFT,_0x61f4x4,_0x61f4x9);_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[28]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[87]),_0x729a[38],_0x729a[83],mxConstants.STYLE_SPACING,_0x61f4x4,_0x61f4x9);this[_0x729a[28]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[88]),_0x729a[38],_0x729a[83],mxConstants.STYLE_PERIMETER_SPACING,_0x61f4x4,_0x61f4x9)};if(_0x61f4xa|| _0x61f4x3[_0x729a[81]]){_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[28]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[89]),_0x729a[38],_0x729a[83],mxConstants.STYLE_SOURCE_PERIMETER_SPACING,_0x61f4x4,_0x61f4xa);this[_0x729a[28]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[90]),_0x729a[38],_0x729a[83],mxConstants.STYLE_TARGET_PERIMETER_SPACING,_0x61f4x4,_0x61f4xa)}})));this[_0x729a[30]](_0x729a[91], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){this[_0x729a[92]](_0x61f4x3,_0x729a[21],_0x61f4x4)})));this[_0x729a[30]](_0x729a[93], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){var _0x61f4xb=this[_0x729a[26]](_0x729a[93])[_0x729a[78]];_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[94]](_0x729a[8],_0x61f4x3,_0x61f4x4);this[_0x729a[94]](_0x729a[31],_0x61f4x3,_0x61f4x4);this[_0x729a[99]](_0x61f4x3,[_0x729a[95],_0x729a[96],_0x729a[97],_0x729a[98],_0x729a[95]],_0x61f4x4);this[_0x729a[94]](_0x729a[100],_0x61f4x3,_0x61f4x4);this[_0x729a[92]](_0x61f4x3,_0x729a[101],_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[28]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[102]),_0x729a[103],_0x729a[104],mxConstants.STYLE_TEXT_OPACITY,_0x61f4x4,_0x61f4xb);_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x729a[105]),null,function(){_0x61f4x2[_0x729a[71]](mxConstants.STYLE_NOLABEL,false)},_0x61f4x4,null,_0x61f4xb)})));this[_0x729a[30]](_0x729a[100], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[106]),[mxConstants[_0x729a[107]]],[mxConstants[_0x729a[108]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[109]),[mxConstants[_0x729a[107]]],[mxConstants[_0x729a[110]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[111]),[mxConstants[_0x729a[107]]],[mxConstants[_0x729a[112]]],null,_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[113]),[mxConstants[_0x729a[114]]],[mxConstants[_0x729a[115]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[116]),[mxConstants[_0x729a[114]]],[mxConstants[_0x729a[117]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[118]),[mxConstants[_0x729a[114]]],[mxConstants[_0x729a[119]]],null,_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[94]](_0x729a[120],_0x61f4x3,_0x61f4x4);this[_0x729a[94]](_0x729a[77],_0x61f4x3,_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);var _0x61f4xb=this[_0x729a[26]](_0x729a[93])[_0x729a[78]];_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x729a[48]),null,function(){_0x61f4x2[_0x729a[71]](mxConstants.STYLE_HORIZONTAL,true)},_0x61f4x4,null,_0x61f4xb)})));this[_0x729a[30]](_0x729a[120], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[86]),[mxConstants[_0x729a[121]],mxConstants[_0x729a[107]]],[mxConstants[_0x729a[108]],mxConstants[_0x729a[112]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[109]),[mxConstants[_0x729a[121]],mxConstants[_0x729a[107]]],[mxConstants[_0x729a[110]],mxConstants[_0x729a[110]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[84]),[mxConstants[_0x729a[121]],mxConstants[_0x729a[107]]],[mxConstants[_0x729a[112]],mxConstants[_0x729a[108]]],null,_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[82]),[mxConstants[_0x729a[122]],mxConstants[_0x729a[114]]],[mxConstants[_0x729a[115]],mxConstants[_0x729a[119]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[116]),[mxConstants[_0x729a[122]],mxConstants[_0x729a[114]]],[mxConstants[_0x729a[117]],mxConstants[_0x729a[117]]],null,_0x61f4x4);this[_0x729a[20]](_0x61f4x3,mxResources[_0x729a[26]](_0x729a[85]),[mxConstants[_0x729a[122]],mxConstants[_0x729a[114]]],[mxConstants[_0x729a[119]],mxConstants[_0x729a[115]]],null,_0x61f4x4)})));this[_0x729a[30]](_0x729a[123], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x729a[124]),null,function(){_0x61f4x2[_0x729a[71]](mxConstants.STYLE_FLIPH,false)},_0x61f4x4);_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x729a[125]),null,function(){_0x61f4x2[_0x729a[71]](mxConstants.STYLE_FLIPV,false)},_0x61f4x4);this[_0x729a[99]](_0x61f4x3,[_0x729a[95],_0x729a[126],_0x729a[127]],_0x61f4x4)})));this[_0x729a[30]](_0x729a[128], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x729a[106]),null,function(){_0x61f4x2[_0x729a[129]](mxConstants.ALIGN_LEFT)},_0x61f4x4);_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x729a[109]),null,function(){_0x61f4x2[_0x729a[129]](mxConstants.ALIGN_CENTER)},_0x61f4x4);_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x729a[111]),null,function(){_0x61f4x2[_0x729a[129]](mxConstants.ALIGN_RIGHT)},_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x729a[113]),null,function(){_0x61f4x2[_0x729a[129]](mxConstants.ALIGN_TOP)},_0x61f4x4);_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x729a[116]),null,function(){_0x61f4x2[_0x729a[129]](mxConstants.ALIGN_MIDDLE)},_0x61f4x4);_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x729a[118]),null,function(){_0x61f4x2[_0x729a[129]](mxConstants.ALIGN_BOTTOM)},_0x61f4x4)})));this[_0x729a[30]](_0x729a[130], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x729a[131]),null,mxUtils[_0x729a[29]](this,function(){var _0x61f4xc= new mxHierarchicalLayout(_0x61f4x2,mxConstants.DIRECTION_WEST);this[_0x729a[0]][_0x729a[132]](_0x61f4xc,true,true)}),_0x61f4x4);_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x729a[133]),null,mxUtils[_0x729a[29]](this,function(){var _0x61f4xc= new mxHierarchicalLayout(_0x61f4x2,mxConstants.DIRECTION_NORTH);this[_0x729a[0]][_0x729a[132]](_0x61f4xc,true,true)}),_0x61f4x4)})));this[_0x729a[30]](_0x729a[134], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){this[_0x729a[99]](_0x61f4x3,[_0x729a[135],_0x729a[95],_0x729a[136],_0x729a[137],_0x729a[95],_0x729a[138],_0x729a[139]],_0x61f4x4)})));this[_0x729a[30]](_0x729a[140], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){this[_0x729a[99]](_0x61f4x3,[_0x729a[141],_0x729a[142],_0x729a[95]],_0x61f4x4);this[_0x729a[94]](_0x729a[130],_0x61f4x3,_0x61f4x4);_0x61f4x3[_0x729a[24]](_0x61f4x4);this[_0x729a[99]](_0x61f4x3,[_0x729a[95],_0x729a[143],_0x729a[144],_0x729a[145]],_0x61f4x4)})));this[_0x729a[30]](_0x729a[146], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){this[_0x729a[99]](_0x61f4x3,[_0x729a[147]],_0x61f4x4);_0x61f4x3[_0x729a[24]]();var _0x61f4xd=[0.25,0.5,0.75,1,2,4];for(var _0x61f4x6=0;_0x61f4x6< _0x61f4xd[_0x729a[18]];_0x61f4x6++){(function(_0x61f4xe){_0x61f4x3[_0x729a[72]]((_0x61f4xe* 100)+ _0x729a[148],null,function(){_0x61f4x2[_0x729a[149]](_0x61f4xe)},_0x61f4x4)})(_0x61f4xd[_0x61f4x6])};this[_0x729a[99]](_0x61f4x3,[_0x729a[95],_0x729a[150],_0x729a[151],_0x729a[95],_0x729a[152],_0x729a[153],_0x729a[95],_0x729a[154],_0x729a[155]],_0x61f4x4)})));this[_0x729a[30]](_0x729a[156], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){this[_0x729a[99]](_0x61f4x3,[_0x729a[157],_0x729a[158],_0x729a[95],_0x729a[159],_0x729a[160],_0x729a[161],_0x729a[95],_0x729a[162],_0x729a[95],_0x729a[163],_0x729a[164],_0x729a[95],_0x729a[165],_0x729a[166],_0x729a[95],_0x729a[167]],_0x61f4x4)})));this[_0x729a[30]](_0x729a[168], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){this[_0x729a[99]](_0x61f4x3,[_0x729a[169],_0x729a[170],_0x729a[95],_0x729a[171],_0x729a[172],_0x729a[173],_0x729a[174],_0x729a[95],_0x729a[175],_0x729a[95],_0x729a[176],_0x729a[177],_0x729a[178]])})));this[_0x729a[30]](_0x729a[179], new Menu(mxUtils[_0x729a[29]](this,function(_0x61f4x3,_0x61f4x4){this[_0x729a[99]](_0x61f4x3,[_0x729a[179],_0x729a[95],_0x729a[180]])})))};Menus[_0x729a[5]][_0x729a[30]]= function(_0x61f4xf,_0x61f4x3){this[_0x729a[1]][_0x61f4xf]= _0x61f4x3};Menus[_0x729a[5]][_0x729a[26]]= function(_0x61f4xf){return this[_0x729a[1]][_0x61f4xf]};Menus[_0x729a[5]][_0x729a[94]]= function(_0x61f4xf,_0x61f4x3,_0x61f4x4){var _0x61f4xb=this[_0x729a[26]](_0x61f4xf)[_0x729a[78]];if(_0x61f4x3[_0x729a[81]]|| _0x61f4xb){var _0x61f4x10=_0x61f4x3[_0x729a[72]](mxResources[_0x729a[26]](_0x61f4xf),null,null,_0x61f4x4,null,_0x61f4xb);this[_0x729a[181]](_0x61f4xf,_0x61f4x3,_0x61f4x10)}};Menus[_0x729a[5]][_0x729a[181]]= function(_0x61f4xf,_0x61f4x11,_0x61f4x4){var _0x61f4x3=this[_0x729a[26]](_0x61f4xf);if(_0x61f4x3!= null&& (_0x61f4x11[_0x729a[81]]|| _0x61f4x3[_0x729a[78]])){this[_0x729a[26]](_0x61f4xf)[_0x729a[182]](_0x61f4x11,_0x61f4x4)}};Menus[_0x729a[5]][_0x729a[20]]= function(_0x61f4x3,_0x61f4x12,_0x61f4x13,_0x61f4x14,_0x61f4x15,_0x61f4x4){return _0x61f4x3[_0x729a[72]](_0x61f4x12,null,mxUtils[_0x729a[29]](this,function(){var _0x61f4x2=this[_0x729a[0]][_0x729a[7]][_0x729a[6]];_0x61f4x2[_0x729a[184]]()[_0x729a[183]]();try{for(var _0x61f4x6=0;_0x61f4x6< _0x61f4x13[_0x729a[18]];_0x61f4x6++){_0x61f4x2[_0x729a[185]](_0x61f4x13[_0x61f4x6],_0x61f4x14[_0x61f4x6])}}finally{_0x61f4x2[_0x729a[184]]()[_0x729a[186]]()}}),_0x61f4x4,_0x61f4x15)};Menus[_0x729a[5]][_0x729a[28]]= function(_0x61f4x3,_0x61f4x12,_0x61f4x16,_0x61f4x17,_0x61f4x18,_0x61f4x4,_0x61f4xb){return _0x61f4x3[_0x729a[72]](_0x61f4x12,null,mxUtils[_0x729a[29]](this,function(){var _0x61f4x2=this[_0x729a[0]][_0x729a[7]][_0x729a[6]];var _0x61f4x19=_0x61f4x17;var _0x61f4x1a=_0x61f4x2[_0x729a[189]]()[_0x729a[188]](_0x61f4x2[_0x729a[187]]());if(_0x61f4x1a!= null){_0x61f4x19= _0x61f4x1a[_0x729a[21]][_0x61f4x18]|| _0x61f4x19};_0x61f4x19= mxUtils[_0x729a[192]](mxResources[_0x729a[26]](_0x729a[190])+ ((_0x61f4x16[_0x729a[18]]> 0)?(_0x729a[191]+ _0x61f4x16):_0x729a[27]),_0x61f4x19);if(_0x61f4x19!= null&& _0x61f4x19[_0x729a[18]]> 0){_0x61f4x2[_0x729a[185]](_0x61f4x18,_0x61f4x19)}}),_0x61f4x4,null,_0x61f4xb)};Menus[_0x729a[5]][_0x729a[92]]= function(_0x61f4x3,_0x61f4x18,_0x61f4x4){var _0x61f4x1b=this[_0x729a[0]][_0x729a[80]][_0x729a[26]](_0x61f4x18);if(_0x61f4x1b!= null&& (_0x61f4x3[_0x729a[81]]|| _0x61f4x1b[_0x729a[78]])){var _0x61f4x1c=_0x61f4x3[_0x729a[72]](_0x61f4x1b[_0x729a[193]],null,_0x61f4x1b[_0x729a[194]],_0x61f4x4,null,_0x61f4x1b[_0x729a[78]]);if(_0x61f4x1b[_0x729a[195]]&& _0x61f4x1b[_0x729a[196]]()){this[_0x729a[197]](_0x61f4x1c)};this[_0x729a[198]](_0x61f4x1c,_0x61f4x1b);return _0x61f4x1c};return null};Menus[_0x729a[5]][_0x729a[198]]= function(_0x61f4x1c,_0x61f4x1b){if(_0x61f4x1b[_0x729a[199]]!= null){var _0x61f4x1d=_0x61f4x1c[_0x729a[23]][_0x729a[22]][_0x729a[22]];var _0x61f4x1e=document[_0x729a[201]](_0x729a[200]);_0x61f4x1e[_0x729a[21]][_0x729a[202]]= _0x729a[203];mxUtils[_0x729a[204]](_0x61f4x1e,_0x61f4x1b[_0x729a[199]]);_0x61f4x1d[_0x729a[205]](_0x61f4x1e)}};Menus[_0x729a[5]][_0x729a[197]]= function(_0x61f4x1c){var _0x61f4x1d=_0x61f4x1c[_0x729a[23]][_0x729a[22]];_0x61f4x1d[_0x729a[21]][_0x729a[206]]= _0x729a[207]+ IMAGE_PATH+ _0x729a[208];_0x61f4x1d[_0x729a[21]][_0x729a[209]]= _0x729a[210];_0x61f4x1d[_0x729a[21]][_0x729a[211]]= _0x729a[212]};Menus[_0x729a[5]][_0x729a[99]]= function(_0x61f4x3,_0x61f4x13,_0x61f4x4){for(var _0x61f4x6=0;_0x61f4x6< _0x61f4x13[_0x729a[18]];_0x61f4x6++){if(_0x61f4x13[_0x61f4x6]== _0x729a[95]){_0x61f4x3[_0x729a[24]](_0x61f4x4)}else {this[_0x729a[92]](_0x61f4x3,_0x61f4x13[_0x61f4x6],_0x61f4x4)}}};Menus[_0x729a[5]][_0x729a[213]]= function(_0x61f4x3,_0x61f4x1f,_0x61f4x20){var _0x61f4x2=this[_0x729a[0]][_0x729a[7]][_0x729a[6]];_0x61f4x3[_0x729a[214]]= true;if(_0x61f4x2[_0x729a[215]]()){this[_0x729a[99]](_0x61f4x3,[_0x729a[169],_0x729a[170],_0x729a[95],_0x729a[173],_0x729a[95]])}else {this[_0x729a[99]](_0x61f4x3,[_0x729a[174],_0x729a[95],_0x729a[171],_0x729a[172],_0x729a[95],_0x729a[175]]);if(_0x61f4x2[_0x729a[216]]()== 1&& _0x61f4x2[_0x729a[184]]()[_0x729a[217]](_0x61f4x2[_0x729a[187]]())){this[_0x729a[99]](_0x61f4x3,[_0x729a[218]])};_0x61f4x3[_0x729a[24]]()};if(_0x61f4x2[_0x729a[216]]()> 0){this[_0x729a[99]](_0x61f4x3,[_0x729a[141],_0x729a[142],_0x729a[95]]);if(_0x61f4x2[_0x729a[184]]()[_0x729a[217]](_0x61f4x2[_0x729a[187]]())){var _0x61f4x21=false;var _0x61f4x1f=_0x61f4x2[_0x729a[187]]();if(_0x61f4x1f!= null&& _0x61f4x2[_0x729a[184]]()[_0x729a[217]](_0x61f4x1f)){var _0x61f4x22=_0x61f4x2[_0x729a[220]][_0x729a[219]](_0x61f4x1f);if(_0x61f4x22 instanceof mxEdgeHandler&& _0x61f4x22[_0x729a[221]]!= null&& _0x61f4x22[_0x729a[221]][_0x729a[18]]> 2){var _0x61f4x23=_0x61f4x22[_0x729a[222]]( new mxMouseEvent(_0x61f4x20));var _0x61f4x24=this[_0x729a[0]][_0x729a[80]][_0x729a[26]](_0x729a[223]);_0x61f4x24[_0x729a[224]]= _0x61f4x22;_0x61f4x24[_0x729a[225]]= _0x61f4x23;_0x61f4x21= _0x61f4x23> 0&& _0x61f4x23< _0x61f4x22[_0x729a[221]][_0x729a[18]]}};this[_0x729a[99]](_0x61f4x3,[_0x729a[95],(_0x61f4x21)?_0x729a[223]:_0x729a[226]])}else {if(_0x61f4x2[_0x729a[216]]()> 1){_0x61f4x3[_0x729a[24]]();this[_0x729a[99]](_0x61f4x3,[_0x729a[143]])}};_0x61f4x3[_0x729a[24]]();if(_0x61f4x2[_0x729a[216]]()== 1){var _0x61f4x25=_0x61f4x2[_0x729a[227]](_0x61f4x2[_0x729a[187]]());if(_0x61f4x25!= null){this[_0x729a[99]](_0x61f4x3,[_0x729a[228]])}}}else {this[_0x729a[99]](_0x61f4x3,[_0x729a[95],_0x729a[176],_0x729a[177],_0x729a[95],_0x729a[178]])}};Menus[_0x729a[5]][_0x729a[229]]= function(_0x61f4x26){var _0x61f4x27= new Menubar(this[_0x729a[0]],_0x61f4x26);var _0x61f4x28=[_0x729a[156],_0x729a[168],_0x729a[146],_0x729a[91],_0x729a[93],_0x729a[140]];for(var _0x61f4x6=0;_0x61f4x6< _0x61f4x28[_0x729a[18]];_0x61f4x6++){_0x61f4x27[_0x729a[181]](mxResources[_0x729a[26]](_0x61f4x28[_0x61f4x6]),this[_0x729a[26]](_0x61f4x28[_0x61f4x6])[_0x729a[194]])};return _0x61f4x27};function Menubar(_0x61f4x1,_0x61f4x26){this[_0x729a[0]]= _0x61f4x1;this[_0x729a[230]]= _0x61f4x26;mxEvent[_0x729a[232]](document,mxUtils[_0x729a[29]](this,function(_0x61f4x20){this[_0x729a[231]]()}))}Menubar[_0x729a[5]][_0x729a[231]]= function(){if(this[_0x729a[233]]!= null){this[_0x729a[233]][_0x729a[231]]()}};Menubar[_0x729a[5]][_0x729a[181]]= function(_0x61f4x12,_0x61f4x2a){var _0x61f4x2b=document[_0x729a[201]](_0x729a[234]);_0x61f4x2b[_0x729a[237]](_0x729a[235],_0x729a[236]);_0x61f4x2b[_0x729a[238]]= _0x729a[239];mxUtils[_0x729a[204]](_0x61f4x2b,_0x61f4x12);this[_0x729a[240]](_0x61f4x2b,_0x61f4x2a);this[_0x729a[230]][_0x729a[205]](_0x61f4x2b);return _0x61f4x2b};Menubar[_0x729a[5]][_0x729a[240]]= function(_0x61f4x2b,_0x61f4x2a){if(_0x61f4x2a!= null){var _0x61f4x2c=true;var _0x61f4x2d=mxUtils[_0x729a[29]](this,function(_0x61f4x20){if(_0x61f4x2c&& _0x61f4x2b[_0x729a[78]]== null|| _0x61f4x2b[_0x729a[78]]){this[_0x729a[0]][_0x729a[7]][_0x729a[6]][_0x729a[241]][_0x729a[231]]();var _0x61f4x3= new mxPopupMenu(_0x61f4x2a);_0x61f4x3[_0x729a[242]][_0x729a[238]]+= _0x729a[243];_0x61f4x3[_0x729a[214]]= true;_0x61f4x3[_0x729a[81]]= true;_0x61f4x3[_0x729a[244]]= true;_0x61f4x3[_0x729a[231]]= mxUtils[_0x729a[29]](this,function(){mxPopupMenu[_0x729a[5]][_0x729a[231]][_0x729a[245]](_0x61f4x3,arguments);_0x61f4x3[_0x729a[246]]();this[_0x729a[233]]= null;this[_0x729a[247]]= null});var _0x61f4x2e=_0x61f4x2b[_0x729a[248]]+ document[_0x729a[251]](_0x729a[250])[_0x729a[249]]+ 22;var _0x61f4x2f=_0x61f4x2b[_0x729a[252]]+ _0x61f4x2b[_0x729a[253]]+ 140;_0x61f4x3[_0x729a[254]](_0x61f4x2e,_0x61f4x2f,null,_0x61f4x20);this[_0x729a[233]]= _0x61f4x3;this[_0x729a[247]]= _0x61f4x2b};_0x61f4x2c= true;mxEvent[_0x729a[255]](_0x61f4x20)});mxEvent[_0x729a[257]](_0x61f4x2b,_0x729a[256],mxUtils[_0x729a[29]](this,function(_0x61f4x20){if(this[_0x729a[233]]!= null&& this[_0x729a[247]]!= _0x61f4x2b){this[_0x729a[231]]();_0x61f4x2d(_0x61f4x20)}}));mxEvent[_0x729a[257]](_0x61f4x2b,_0x729a[258],mxUtils[_0x729a[29]](this,function(){_0x61f4x2c= this[_0x729a[247]]!= _0x61f4x2b}));mxEvent[_0x729a[257]](_0x61f4x2b,_0x729a[259],_0x61f4x2d)}};function Menu(_0x61f4x2a,_0x61f4xb){mxEventSource[_0x729a[260]](this);this[_0x729a[194]]= _0x61f4x2a;this[_0x729a[78]]= (_0x61f4xb!= null)?_0x61f4xb:true}mxUtils[_0x729a[261]](Menu,mxEventSource);Menu[_0x729a[5]][_0x729a[262]]= function(_0x61f4x19){if(this[_0x729a[78]]!= _0x61f4x19){this[_0x729a[78]]= _0x61f4x19;this[_0x729a[264]]( new mxEventObject(_0x729a[263]))}};Menu[_0x729a[5]][_0x729a[182]]= function(_0x61f4x3,_0x61f4x4){this[_0x729a[194]](_0x61f4x3,_0x61f4x4)} \ No newline at end of file +/** + * $Id: Menus.js,v 1.13 2013-02-20 16:21:29 gaudenz Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ +/** + * Constructs a new graph editor + */ +Menus = function(editorUi) { + this.editorUi = editorUi; + this.menus = new Object(); + this.init(); + + // Pre-fetches checkmark image + new Image().src = IMAGE_PATH + '/checkmark.gif'; +}; + +/** + * Adds the label menu items to the given menu and parent. + */ +Menus.prototype.init = function() { + var graph = this.editorUi.editor.graph; + + this.put('fontFamily', new Menu(mxUtils.bind(this, function(menu, parent) { + var fonts = ['Helvetica', 'Verdana', 'Times New Roman', 'Garamond', + 'Comic Sans MS', + 'Courier New', 'Georgia', 'Lucida Console', 'Tahoma' + ]; + + for (var i = 0; i < fonts.length; i++) { + var tr = this.styleChange(menu, fonts[i], [mxConstants.STYLE_FONTFAMILY], [ + fonts[i] + ], null, parent); + tr.firstChild.nextSibling.style.fontFamily = fonts[i]; + } + + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('custom'), '', mxConstants.DEFAULT_FONTFAMILY, + mxConstants.STYLE_FONTFAMILY, parent); + }))); + this.put('fontSize', new Menu(mxUtils.bind(this, function(menu, parent) { + var sizes = [6, 8, 9, 10, 11, 12, 14, 18, 24, 36, 48, 72]; + + for (var i = 0; i < sizes.length; i++) { + this.styleChange(menu, sizes[i], [mxConstants.STYLE_FONTSIZE], [sizes[i]], + null, parent); + } + + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('custom'), '(pt)', '12', + mxConstants.STYLE_FONTSIZE, parent); + }))); + this.put('linewidth', new Menu(mxUtils.bind(this, function(menu, parent) { + var sizes = [1, 2, 3, 4, 8, 12, 16, 24]; + + for (var i = 0; i < sizes.length; i++) { + this.styleChange(menu, sizes[i] + 'px', [mxConstants.STYLE_STROKEWIDTH], [ + sizes[i] + ], null, parent); + } + + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('custom'), '(px)', '1', + mxConstants.STYLE_STROKEWIDTH, parent); + }))); + this.put('line', new Menu(mxUtils.bind(this, function(menu, parent) { + this.styleChange(menu, mxResources.get('straight'), [mxConstants.STYLE_EDGE], [ + null + ], null, parent); + this.styleChange(menu, mxResources.get('entityRelation'), [mxConstants.STYLE_EDGE], [ + 'entityRelationEdgeStyle' + ], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('horizontal'), [mxConstants.STYLE_EDGE, + mxConstants.STYLE_ELBOW + ], ['elbowEdgeStyle', 'horizontal'], null, parent); + this.styleChange(menu, mxResources.get('vertical'), [mxConstants.STYLE_EDGE, + mxConstants.STYLE_ELBOW + ], ['elbowEdgeStyle', 'vertical'], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('manual'), [mxConstants.STYLE_EDGE], [ + 'segmentEdgeStyle' + ], null, parent); + this.styleChange(menu, mxResources.get('automatic'), [mxConstants.STYLE_EDGE], [ + 'orthogonalEdgeStyle' + ], null, parent); + }))); + this.put('lineend', new Menu(mxUtils.bind(this, function(menu, parent) { + this.styleChange(menu, mxResources.get('classic'), [mxConstants.STYLE_ENDARROW], [ + mxConstants.ARROW_CLASSIC + ], null, parent); + this.styleChange(menu, mxResources.get('openArrow'), [mxConstants.STYLE_ENDARROW], [ + mxConstants.ARROW_OPEN + ], null, parent); + this.styleChange(menu, mxResources.get('block'), [mxConstants.STYLE_ENDARROW], [ + mxConstants.ARROW_BLOCK + ], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('oval'), [mxConstants.STYLE_ENDARROW], [ + mxConstants.ARROW_OVAL + ], null, parent); + this.styleChange(menu, mxResources.get('diamond'), [mxConstants.STYLE_ENDARROW], [ + mxConstants.ARROW_DIAMOND + ], null, parent); + this.styleChange(menu, mxResources.get('diamondThin'), [mxConstants.STYLE_ENDARROW], [ + mxConstants.ARROW_DIAMOND_THIN + ], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('none'), [mxConstants.STYLE_ENDARROW], [ + mxConstants.NONE + ], null, parent); + menu.addSeparator(parent); + menu.addItem(mxResources.get('transparent'), null, function() { + graph.toggleCellStyles('endFill', true); + }, parent, null, true); + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('size'), '(px)', mxConstants.DEFAULT_MARKERSIZE, + mxConstants.STYLE_ENDSIZE, parent); + }))); + this.put('linestart', new Menu(mxUtils.bind(this, function(menu, parent) { + this.styleChange(menu, mxResources.get('classic'), [mxConstants.STYLE_STARTARROW], [ + mxConstants.ARROW_CLASSIC + ], null, parent); + this.styleChange(menu, mxResources.get('openArrow'), [mxConstants.STYLE_STARTARROW], [ + mxConstants.ARROW_OPEN + ], null, parent); + this.styleChange(menu, mxResources.get('block'), [mxConstants.STYLE_STARTARROW], [ + mxConstants.ARROW_BLOCK + ], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('oval'), [mxConstants.STYLE_STARTARROW], [ + mxConstants.ARROW_OVAL + ], null, parent); + this.styleChange(menu, mxResources.get('diamond'), [mxConstants.STYLE_STARTARROW], [ + mxConstants.ARROW_DIAMOND + ], null, parent); + this.styleChange(menu, mxResources.get('diamondThin'), [mxConstants.STYLE_STARTARROW], [ + mxConstants.ARROW_DIAMOND_THIN + ], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('none'), [mxConstants.STYLE_STARTARROW], [ + mxConstants.NONE + ], null, parent); + menu.addSeparator(parent); + menu.addItem(mxResources.get('transparent'), null, function() { + graph.toggleCellStyles('startFill', true); + }, parent, null, true); + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('size'), '(px)', mxConstants.DEFAULT_MARKERSIZE, + mxConstants.STYLE_STARTSIZE, parent); + }))); + this.put('spacing', new Menu(mxUtils.bind(this, function(menu, parent) { + // Uses shadow action and line menu to analyze selection + var vertexSelected = this.editorUi.actions.get('shadow').enabled; + var edgeSelected = this.get('line').enabled; + + if (vertexSelected || menu.showDisabled) { + this.promptChange(menu, mxResources.get('top'), '(px)', '0', + mxConstants.STYLE_SPACING_TOP, parent, vertexSelected); + this.promptChange(menu, mxResources.get('right'), '(px)', '0', + mxConstants.STYLE_SPACING_RIGHT, parent, vertexSelected); + this.promptChange(menu, mxResources.get('bottom'), '(px)', '0', + mxConstants.STYLE_SPACING_BOTTOM, parent, vertexSelected); + this.promptChange(menu, mxResources.get('left'), '(px)', '0', + mxConstants.STYLE_SPACING_LEFT, parent, vertexSelected); + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('global'), '(px)', '0', + mxConstants.STYLE_SPACING, parent, vertexSelected); + this.promptChange(menu, mxResources.get('perimeter'), '(px)', '0', + mxConstants.STYLE_PERIMETER_SPACING, parent, vertexSelected); + } + + if (edgeSelected || menu.showDisabled) { + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('sourceSpacing'), '(px)', '0', + mxConstants.STYLE_SOURCE_PERIMETER_SPACING, parent, edgeSelected); + this.promptChange(menu, mxResources.get('targetSpacing'), '(px)', '0', + mxConstants.STYLE_TARGET_PERIMETER_SPACING, parent, edgeSelected); + } + }))); + this.put('format', new Menu(mxUtils.bind(this, function(menu, parent) { + this.addMenuItem(menu, 'style', parent); + }))); + this.put('text', new Menu(mxUtils.bind(this, function(menu, parent) { + var enabled = this.get('text').enabled; + menu.addSeparator(parent); + this.addSubmenu('fontFamily', menu, parent); + this.addSubmenu('fontSize', menu, parent); + this.addMenuItems(menu, ['-', 'bold', 'italic', 'underline', '-'], + parent); + this.addSubmenu('alignment', menu, parent); + this.addMenuItem(menu, 'wordWrap', parent); + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('textOpacity'), '(%)', '100', + mxConstants.STYLE_TEXT_OPACITY, parent, enabled); + menu.addItem(mxResources.get('hide'), null, function() { + graph.toggleCellStyles(mxConstants.STYLE_NOLABEL, false); + }, parent, null, enabled); + }))); + this.put('alignment', new Menu(mxUtils.bind(this, function(menu, parent) { + this.styleChange(menu, mxResources.get('leftAlign'), [mxConstants.STYLE_ALIGN], [ + mxConstants.ALIGN_LEFT + ], null, parent); + this.styleChange(menu, mxResources.get('center'), [mxConstants.STYLE_ALIGN], [ + mxConstants.ALIGN_CENTER + ], null, parent); + this.styleChange(menu, mxResources.get('rightAlign'), [mxConstants.STYLE_ALIGN], [ + mxConstants.ALIGN_RIGHT + ], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('topAlign'), [mxConstants.STYLE_VERTICAL_ALIGN], [ + mxConstants.ALIGN_TOP + ], null, parent); + this.styleChange(menu, mxResources.get('middle'), [mxConstants.STYLE_VERTICAL_ALIGN], [ + mxConstants.ALIGN_MIDDLE + ], null, parent); + this.styleChange(menu, mxResources.get('bottomAlign'), [mxConstants.STYLE_VERTICAL_ALIGN], [ + mxConstants.ALIGN_BOTTOM + ], null, parent); + menu.addSeparator(parent); + this.addSubmenu('position', menu, parent); + this.addSubmenu('spacing', menu, parent); + menu.addSeparator(parent); + var enabled = this.get('text').enabled; + menu.addItem(mxResources.get('vertical'), null, function() { + graph.toggleCellStyles(mxConstants.STYLE_HORIZONTAL, true); + }, parent, null, enabled); + }))); + this.put('position', new Menu(mxUtils.bind(this, function(menu, parent) { + this.styleChange(menu, mxResources.get('left'), [mxConstants.STYLE_LABEL_POSITION, + mxConstants.STYLE_ALIGN + ], [mxConstants.ALIGN_LEFT, mxConstants.ALIGN_RIGHT], null, parent); + this.styleChange(menu, mxResources.get('center'), [mxConstants.STYLE_LABEL_POSITION, + mxConstants.STYLE_ALIGN + ], [mxConstants.ALIGN_CENTER, mxConstants.ALIGN_CENTER], null, parent); + this.styleChange(menu, mxResources.get('right'), [mxConstants.STYLE_LABEL_POSITION, + mxConstants.STYLE_ALIGN + ], [mxConstants.ALIGN_RIGHT, mxConstants.ALIGN_LEFT], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('top'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION, + mxConstants.STYLE_VERTICAL_ALIGN + ], [mxConstants.ALIGN_TOP, mxConstants.ALIGN_BOTTOM], null, parent); + this.styleChange(menu, mxResources.get('middle'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION, + mxConstants.STYLE_VERTICAL_ALIGN + ], [mxConstants.ALIGN_MIDDLE, mxConstants.ALIGN_MIDDLE], null, parent); + this.styleChange(menu, mxResources.get('bottom'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION, + mxConstants.STYLE_VERTICAL_ALIGN + ], [mxConstants.ALIGN_BOTTOM, mxConstants.ALIGN_TOP], null, parent); + }))); + this.put('direction', new Menu(mxUtils.bind(this, function(menu, parent) { + menu.addItem(mxResources.get('flipH'), null, function() { + graph.toggleCellStyles(mxConstants.STYLE_FLIPH, false); + }, parent); + menu.addItem(mxResources.get('flipV'), null, function() { + graph.toggleCellStyles(mxConstants.STYLE_FLIPV, false); + }, parent); + this.addMenuItems(menu, ['-', 'tilt', 'rotation'], parent); + }))); + this.put('align', new Menu(mxUtils.bind(this, function(menu, parent) { + menu.addItem(mxResources.get('leftAlign'), null, function() { + graph.alignCells(mxConstants.ALIGN_LEFT); + }, parent); + menu.addItem(mxResources.get('center'), null, function() { + graph.alignCells(mxConstants.ALIGN_CENTER); + }, parent); + menu.addItem(mxResources.get('rightAlign'), null, function() { + graph.alignCells(mxConstants.ALIGN_RIGHT); + }, parent); + menu.addSeparator(parent); + menu.addItem(mxResources.get('topAlign'), null, function() { + graph.alignCells(mxConstants.ALIGN_TOP); + }, parent); + menu.addItem(mxResources.get('middle'), null, function() { + graph.alignCells(mxConstants.ALIGN_MIDDLE); + }, parent); + menu.addItem(mxResources.get('bottomAlign'), null, function() { + graph.alignCells(mxConstants.ALIGN_BOTTOM); + }, parent); + }))); + this.put('layout', new Menu(mxUtils.bind(this, function(menu, parent) { + // menu.addItem(mxResources.get('horizontalTree'), null, mxUtils.bind(this, function() + // { + // if (!graph.isSelectionEmpty()) + // { + // var layout = new mxCompactTreeLayout(graph, true); + // layout.edgeRouting = false; + // layout.levelDistance = 30; + // this.editorUi.executeLayout(layout, true, true); + // } + // }), parent); + // menu.addItem(mxResources.get('verticalTree'), null, mxUtils.bind(this, function() + // { + // if (!graph.isSelectionEmpty()) + // { + // var layout = new mxCompactTreeLayout(graph, false); + // layout.edgeRouting = false; + // layout.levelDistance = 30; + // this.editorUi.executeLayout(layout, true, true); + // } + // }), parent); + // menu.addSeparator(parent); + menu.addItem(mxResources.get('horizontalFlow'), null, mxUtils.bind(this, + function() { + var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_WEST); + this.editorUi.executeLayout(layout, true, true); + }), parent); + menu.addItem(mxResources.get('verticalFlow'), null, mxUtils.bind(this, + function() { + var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_NORTH); + this.editorUi.executeLayout(layout, true, true); + }), parent); + //menu.addSeparator(parent); + // menu.addItem(mxResources.get('organic'), null, mxUtils.bind(this, function() + // { + // var layout = new mxFastOrganicLayout(graph); + // this.editorUi.executeLayout(layout, true, true); + // }), parent); + // menu.addItem(mxResources.get('circle'), null, mxUtils.bind(this, function() + // { + // var layout = new mxCircleLayout(graph); + // this.editorUi.executeLayout(layout, true, true, graph.getSelectionCells()); + // }), parent); + }))); + this.put('navigation', new Menu(mxUtils.bind(this, function(menu, parent) { + this.addMenuItems(menu, ['home', '-', 'exitGroup', 'enterGroup', '-', + 'expand', 'collapse' + ], parent); + }))); + this.put('arrange', new Menu(mxUtils.bind(this, function(menu, parent) { + this.addMenuItems(menu, ['toFront', 'toBack', '-'], parent); + //this.addSubmenu('direction', menu, parent); + this.addSubmenu('layout', menu, parent); + //this.addSubmenu('align', menu, parent); + menu.addSeparator(parent); + //this.addSubmenu('navigation', menu, parent); + this.addMenuItems(menu, ['-', 'group', 'ungroup', 'removeFromGroup'], + parent); + //this.addMenuItems(menu, ['-', 'group', 'ungroup', 'removeFromGroup', '-', 'autosize'], parent); + }))); + this.put('view', new Menu(mxUtils.bind(this, function(menu, parent) { + this.addMenuItems(menu, ['actualSize'], parent); + menu.addSeparator(); + var scales = [0.25, 0.5, 0.75, 1, 2, 4]; + + for (var i = 0; i < scales.length; i++) { + (function(scale) { + menu.addItem((scale * 100) + '%', null, function() { + graph.zoomTo(scale); + }, parent); + })(scales[i]); + } + + this.addMenuItems(menu, ['-', 'zoomIn', 'zoomOut', '-', 'fitWindow', + 'customZoom', '-', 'fitPage', 'fitPageWidth' + ], parent); + }))); + this.put('file', new Menu(mxUtils.bind(this, function(menu, parent) { + this.addMenuItems(menu, ['new', 'open', '-', 'save', 'saveAs', 'publish', + '-', 'variable', '-', 'import', 'export', '-', 'editFile', 'rename', '-', + 'print' + ], parent); + }))); + this.put('edit', new Menu(mxUtils.bind(this, function(menu, parent) { + this.addMenuItems(menu, ['undo', 'redo', '-', 'cut', 'copy', 'paste', + 'delete', '-', 'duplicate', '-', + 'selectVertices', 'selectEdges', 'selectAll' + ]); + }))); + this.put('help', new Menu(mxUtils.bind(this, function(menu, parent) { + this.addMenuItems(menu, ['help', '-', 'about']); + }))); +}; + +/** + * Adds the label menu items to the given menu and parent. + */ +Menus.prototype.put = function(name, menu) { + this.menus[name] = menu; +}; + +/** + * Adds the label menu items to the given menu and parent. + */ +Menus.prototype.get = function(name) { + return this.menus[name]; +}; + +/** + * Adds the given submenu. + */ +Menus.prototype.addSubmenu = function(name, menu, parent) { + var enabled = this.get(name).enabled; + + if (menu.showDisabled || enabled) { + var submenu = menu.addItem(mxResources.get(name), null, null, parent, null, + enabled); + this.addMenu(name, menu, submenu); + } +}; + +/** + * Adds the label menu items to the given menu and parent. + */ +Menus.prototype.addMenu = function(name, popupMenu, parent) { + var menu = this.get(name); + + if (menu != null && (popupMenu.showDisabled || menu.enabled)) { + this.get(name).execute(popupMenu, parent); + } +}; + +/** + * Adds a style change item to the given menu. + */ +Menus.prototype.styleChange = function(menu, label, keys, values, sprite, + parent) { + return menu.addItem(label, null, mxUtils.bind(this, function() { + var graph = this.editorUi.editor.graph; + + graph.getModel().beginUpdate(); + try { + for (var i = 0; i < keys.length; i++) { + graph.setCellStyles(keys[i], values[i]); + } + } finally { + graph.getModel().endUpdate(); + } + }), parent, sprite); +}; + +/** + * Adds a style change item with a prompt to the given menu. + */ +Menus.prototype.promptChange = function(menu, label, hint, defaultValue, key, + parent, enabled) { + return menu.addItem(label, null, mxUtils.bind(this, function() { + var graph = this.editorUi.editor.graph; + var value = defaultValue; + var state = graph.getView().getState(graph.getSelectionCell()); + + if (state != null) { + value = state.style[key] || value; + } + + value = mxUtils.prompt(mxResources.get('enterValue') + ((hint.length > 0) ? + (' ' + hint) : ''), value); + + if (value != null && value.length > 0) { + graph.setCellStyles(key, value); + } + }), parent, null, enabled); +}; + +/** + * Creates the keyboard event handler for the current graph and history. + */ +Menus.prototype.addMenuItem = function(menu, key, parent) { + var action = this.editorUi.actions.get(key); + + if (action != null && (menu.showDisabled || action.enabled)) { + var item = menu.addItem(action.label, null, action.funct, parent, null, + action.enabled); + + // Adds checkmark image + if (action.toggleAction && action.isSelected()) { + this.addCheckmark(item); + } + + this.addShortcut(item, action); + + return item; + } + + return null; +}; + +/** + * Adds a checkmark to the given menuitem. + */ +Menus.prototype.addShortcut = function(item, action) { + if (action.shortcut != null) { + var td = item.firstChild.nextSibling.nextSibling; + var span = document.createElement('span'); + span.style.color = 'gray'; + mxUtils.write(span, action.shortcut); + td.appendChild(span); + } +}; + +/** + * Adds a checkmark to the given menuitem. + */ +Menus.prototype.addCheckmark = function(item) { + var td = item.firstChild.nextSibling; + td.style.backgroundImage = 'url(' + IMAGE_PATH + '/checkmark.gif)'; + td.style.backgroundRepeat = 'no-repeat'; + td.style.backgroundPosition = '2px 50%'; +}; + +/** + * Creates the keyboard event handler for the current graph and history. + */ +Menus.prototype.addMenuItems = function(menu, keys, parent) { + for (var i = 0; i < keys.length; i++) { + if (keys[i] == '-') { + menu.addSeparator(parent); + } else { + this.addMenuItem(menu, keys[i], parent); + } + } +}; + +/** + * Creates the keyboard event handler for the current graph and history. + */ +Menus.prototype.createPopupMenu = function(menu, cell, evt) { + var graph = this.editorUi.editor.graph; + menu.smartSeparators = true; + + if (graph.isSelectionEmpty()) { + this.addMenuItems(menu, ['undo', 'redo', '-', 'paste', '-']); + } else { + this.addMenuItems(menu, ['delete', '-', 'cut', 'copy', '-', 'duplicate']); + + if (graph.getSelectionCount() == 1 && graph.getModel().isEdge(graph.getSelectionCell())) { + this.addMenuItems(menu, ['setAsDefaultEdge']); + } + + menu.addSeparator(); + } + + if (graph.getSelectionCount() > 0) { + this.addMenuItems(menu, ['toFront', 'toBack', '-']); + + if (graph.getModel().isEdge(graph.getSelectionCell())) { + var isWaypoint = false; + var cell = graph.getSelectionCell(); + + if (cell != null && graph.getModel().isEdge(cell)) { + var handler = graph.selectionCellsHandler.getHandler(cell); + + if (handler instanceof mxEdgeHandler && handler.bends != null && handler.bends + .length > 2) { + var index = handler.getHandleForEvent(new mxMouseEvent(evt)); + + // Configures removeWaypoint action before execution + var rmWaypointAction = this.editorUi.actions.get('removeWaypoint'); + rmWaypointAction.handler = handler; + rmWaypointAction.index = index; + + isWaypoint = index > 0 && index < handler.bends.length; + } + } + + this.addMenuItems(menu, ['-', (isWaypoint) ? 'removeWaypoint' : + 'addWaypoint' + ]); + } else if (graph.getSelectionCount() > 1) { + menu.addSeparator(); + this.addMenuItems(menu, ['group']); + } + + menu.addSeparator(); + + if (graph.getSelectionCount() == 1) { + var link = graph.getLinkForCell(graph.getSelectionCell()); + + if (link != null) { + this.addMenuItems(menu, ['openLink']); + } + } + } else { + this.addMenuItems(menu, ['-', 'selectVertices', 'selectEdges', '-', + 'selectAll' + ]); + } +}; + +/** + * Creates the keyboard event handler for the current graph and history. + */ +Menus.prototype.createMenubar = function(container) { + var menubar = new Menubar(this.editorUi, container); + // var menus = ['file', 'edit', 'view', 'format', 'text', 'arrange', + // 'help' + // ]; + var menus = ['file', 'edit', 'view', 'format', 'text', 'arrange']; + for (var i = 0; i < menus.length; i++) { + menubar.addMenu(mxResources.get(menus[i]), this.get(menus[i]).funct); + } + + return menubar; +}; + +/** + * Construcs a new menubar for the given editor. + */ +function Menubar(editorUi, container) { + this.editorUi = editorUi; + this.container = container; + + // Global handler to hide the current menu + mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) { + this.hideMenu(); + })); +}; + +/** + * Adds the menubar elements. + */ +Menubar.prototype.hideMenu = function() { + if (this.currentMenu != null) { + this.currentMenu.hideMenu(); + } +}; + +/** + * Adds a submenu to this menubar. + */ +Menubar.prototype.addMenu = function(label, funct) { + var elt = document.createElement('a'); + elt.setAttribute('href', 'javascript:void(0);'); + elt.className = 'geItem'; + mxUtils.write(elt, label); + + this.addMenuHandler(elt, funct); + this.container.appendChild(elt); + + return elt; +}; + +/** + * Adds a handler for showing a menu in the given element. + */ +Menubar.prototype.addMenuHandler = function(elt, funct) { + if (funct != null) { + var show = true; + + var clickHandler = mxUtils.bind(this, function(evt) { + if (show && elt.enabled == null || elt.enabled) { + this.editorUi.editor.graph.panningHandler.hideMenu(); + var menu = new mxPopupMenu(funct); + menu.div.className += ' geMenubarMenu'; + menu.smartSeparators = true; + menu.showDisabled = true; + menu.autoExpand = true; + + // Disables autoexpand and destroys menu when hidden + menu.hideMenu = mxUtils.bind(this, function() { + mxPopupMenu.prototype.hideMenu.apply(menu, arguments); + menu.destroy(); + this.currentMenu = null; + this.currentElt = null; + }); + + // Added width of the page-sidebar + var x = elt.offsetLeft + document.getElementById('page-sidebar').offsetWidth + + 22; + // Added static height of the page-navbar + var y = elt.offsetTop + elt.offsetHeight + 140; + + menu.popup(x, y, null, evt); + + //menu.popup(elt.offsetLeft + 4, elt.offsetTop + elt.offsetHeight + 4, null, evt); + this.currentMenu = menu; + this.currentElt = elt; + } + + show = true; + mxEvent.consume(evt); + }); + + // Shows menu automatically while in expanded state + mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) { + if (this.currentMenu != null && this.currentElt != elt) { + this.hideMenu(); + clickHandler(evt); + } + })); + + // Hides menu if already showing + mxEvent.addListener(elt, 'mousedown', mxUtils.bind(this, function() { + show = this.currentElt != elt; + })); + + mxEvent.addListener(elt, 'click', clickHandler); + } +}; + +/** + * Constructs a new action for the given parameters. + */ +function Menu(funct, enabled) { + mxEventSource.call(this); + this.funct = funct; + this.enabled = (enabled != null) ? enabled : true; +}; + +// Menu inherits from mxEventSource +mxUtils.extend(Menu, mxEventSource); + +/** + * Sets the enabled state of the action and fires a stateChanged event. + */ +Menu.prototype.setEnabled = function(value) { + if (this.enabled != value) { + this.enabled = value; + this.fireEvent(new mxEventObject('stateChanged')); + } +}; + +/** + * Sets the enabled state of the action and fires a stateChanged event. + */ +Menu.prototype.execute = function(menu, parent) { + this.funct(menu, parent); +}; diff --git a/public/assets/plugins/jscripty/js/Shapes.js b/public/assets/plugins/jscripty/js/Shapes.js index 9de119a..42e13ca 100644 --- a/public/assets/plugins/jscripty/js/Shapes.js +++ b/public/assets/plugins/jscripty/js/Shapes.js @@ -1 +1,1234 @@ -var _0x82f0=["\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x73\x74\x72\x75\x63\x74\x6F\x72","\x73\x69\x7A\x65","\x72\x65\x64\x72\x61\x77\x50\x61\x74\x68","\x73\x74\x79\x6C\x65","\x67\x65\x74\x56\x61\x6C\x75\x65","\x6D\x69\x6E","\x6D\x6F\x76\x65\x54\x6F","\x6C\x69\x6E\x65\x54\x6F","\x65\x6E\x64","\x63\x6C\x6F\x73\x65","\x63\x75\x62\x65","\x64\x65\x66\x61\x75\x6C\x74\x53\x68\x61\x70\x65\x73","\x6E\x6F\x74\x65","\x74\x61\x62\x57\x69\x64\x74\x68","\x74\x61\x62\x48\x65\x69\x67\x68\x74","\x74\x61\x62\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x72\x69\x67\x68\x74","\x6C\x65\x66\x74","\x66\x6F\x6C\x64\x65\x72","\x63\x61\x72\x64","\x71\x75\x61\x64\x54\x6F","\x74\x61\x70\x65","\x73\x74\x65\x70","\x63\x61\x6C\x6C","\x65\x78\x74\x65\x6E\x64","\x69\x73\x48\x74\x6D\x6C\x41\x6C\x6C\x6F\x77\x65\x64","\x70\x61\x69\x6E\x74\x46\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x62\x65\x67\x69\x6E","\x73\x74\x72\x6F\x6B\x65","\x61\x70\x70\x6C\x79","\x70\x6C\x75\x73","\x64\x6F\x75\x62\x6C\x65","\x73\x74\x72\x6F\x6B\x65\x77\x69\x64\x74\x68","\x6D\x61\x78","\x70\x61\x69\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x73\x65\x74\x44\x61\x73\x68\x65\x64","\x73\x79\x6D\x62\x6F\x6C","\x41\x6C\x69\x67\x6E","\x56\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x57\x69\x64\x74\x68","\x48\x65\x69\x67\x68\x74","\x53\x70\x61\x63\x69\x6E\x67","\x41\x72\x63\x53\x70\x61\x63\x69\x6E\x67","\x67\x65\x74\x41\x72\x63\x53\x69\x7A\x65","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x73\x61\x76\x65","\x70\x61\x69\x6E\x74\x56\x65\x72\x74\x65\x78\x53\x68\x61\x70\x65","\x72\x65\x73\x74\x6F\x72\x65","\x65\x78\x74","\x6D\x65\x73\x73\x61\x67\x65","\x61\x64\x64\x50\x69\x70\x65","\x63\x75\x72\x76\x65\x54\x6F","\x75\x6D\x6C\x41\x63\x74\x6F\x72","\x6C\x6F\x6C\x6C\x69\x70\x6F\x70","\x6A\x65\x74\x74\x79\x57\x69\x64\x74\x68","\x6A\x65\x74\x74\x79\x48\x65\x69\x67\x68\x74","\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74","\x6F\x75\x74\x65\x72\x53\x74\x72\x6F\x6B\x65","\x65\x6C\x6C\x69\x70\x73\x65","\x66\x69\x6C\x6C\x41\x6E\x64\x53\x74\x72\x6F\x6B\x65","\x73\x65\x74\x53\x68\x61\x64\x6F\x77","\x65\x6E\x64\x53\x74\x61\x74\x65","\x73\x74\x61\x72\x74\x53\x74\x61\x74\x65","\x69\x6E\x69\x74\x53\x68\x61\x70\x65\x73","\x78","\x79","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x73\x68\x61\x70\x65\x73","\x70\x61\x69\x6E\x74\x45\x64\x67\x65\x53\x68\x61\x70\x65","\x6C\x65\x6E\x67\x74\x68","\x73\x71\x72\x74","\x6C\x69\x6E\x6B","\x64\x61\x73\x68","\x61\x64\x64\x4D\x61\x72\x6B\x65\x72","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x75\x73\x65\x47\x72\x69\x64\x46\x6F\x72\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65","\x69\x6E\x69\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x73\x74\x61\x74\x65","\x67\x72\x61\x70\x68","\x76\x69\x65\x77","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x73\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65","\x73\x72\x63","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x44\x49\x41\x4C\x45\x43\x54\x5F\x56\x4D\x4C","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x67\x65\x74\x56\x69\x65\x77","\x63\x75\x72\x73\x6F\x72","\x6E\x6F\x64\x65","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x43\x75\x72\x73\x6F\x72","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x64\x65\x66\x61\x75\x6C\x74","\x72\x65\x64\x72\x61\x77","\x62\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x42\x6F\x75\x6E\x64\x73","\x64\x65\x73\x74\x72\x6F\x79","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x53\x6F\x75\x72\x63\x65","\x6D\x6F\x75\x73\x65\x4D\x6F\x76\x65","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x50\x6F\x69\x6E\x74","\x67\x65\x74\x45\x76\x65\x6E\x74","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64\x45\x76\x65\x6E\x74","\x73\x63\x61\x6C\x65","\x73\x6E\x61\x70","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65","\x6D\x6F\x76\x65\x53\x69\x7A\x65\x72\x54\x6F","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65","\x6D\x6F\x75\x73\x65\x55\x70","\x61\x70\x70\x6C\x79\x53\x74\x79\x6C\x65","\x72\x65\x73\x65\x74","\x67\x65\x74\x53\x68\x61\x70\x65\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x73\x68\x61\x70\x65","\x74\x6F\x52\x61\x64\x69\x61\x6E\x73","\x63\x6F\x73","\x73\x69\x6E","\x69\x73\x50\x61\x69\x6E\x74\x42\x6F\x75\x6E\x64\x73\x49\x6E\x76\x65\x72\x74\x65\x64","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x50\x6F\x69\x6E\x74","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x58","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x59","\x67\x65\x74\x52\x6F\x74\x61\x74\x65\x64\x50\x6F\x69\x6E\x74","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65\x55\x6E\x72\x6F\x74\x61\x74\x65\x64","\x72\x6F\x75\x6E\x64","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x63\x65\x6C\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x72\x74\x53\x69\x7A\x65","\x64\x65\x66\x61\x75\x6C\x74\x56\x61\x6C\x75\x65","\x73\x63\x61\x6C\x65\x46\x61\x63\x74\x6F\x72","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x41\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x73\x74\x65\x6E\x63\x69\x6C","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73"];(function(){function _0xd0d0x1(){}_0xd0d0x1[_0x82f0[0]]= new mxCylinder();_0xd0d0x1[_0x82f0[0]][_0x82f0[1]]= _0xd0d0x1;_0xd0d0x1[_0x82f0[0]][_0x82f0[2]]= 20;_0xd0d0x1[_0x82f0[0]][_0x82f0[3]]= function(_0xd0d0x2,_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6,_0xd0d0x7){var _0xd0d0x8=Math[_0x82f0[6]](_0xd0d0x5,Math[_0x82f0[6]](_0xd0d0x6,mxUtils[_0x82f0[5]](this[_0x82f0[4]],_0x82f0[2],this[_0x82f0[2]])));if(_0xd0d0x7){_0xd0d0x2[_0x82f0[7]](_0xd0d0x8,_0xd0d0x6);_0xd0d0x2[_0x82f0[8]](_0xd0d0x8,_0xd0d0x8);_0xd0d0x2[_0x82f0[8]](0,0);_0xd0d0x2[_0x82f0[7]](_0xd0d0x8,_0xd0d0x8);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0x8);_0xd0d0x2[_0x82f0[9]]()}else {_0xd0d0x2[_0x82f0[7]](0,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5- _0xd0d0x8,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0x8);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0x6);_0xd0d0x2[_0x82f0[8]](_0xd0d0x8,_0xd0d0x6);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0x6- _0xd0d0x8);_0xd0d0x2[_0x82f0[8]](0,0);_0xd0d0x2[_0x82f0[10]]();_0xd0d0x2[_0x82f0[9]]()}};mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[11]]= _0xd0d0x1;function _0xd0d0x9(){}_0xd0d0x9[_0x82f0[0]]= new mxCylinder();_0xd0d0x9[_0x82f0[0]][_0x82f0[1]]= _0xd0d0x9;_0xd0d0x9[_0x82f0[0]][_0x82f0[2]]= 30;_0xd0d0x9[_0x82f0[0]][_0x82f0[3]]= function(_0xd0d0x2,_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6,_0xd0d0x7){var _0xd0d0x8=Math[_0x82f0[6]](_0xd0d0x5,Math[_0x82f0[6]](_0xd0d0x6,mxUtils[_0x82f0[5]](this[_0x82f0[4]],_0x82f0[2],this[_0x82f0[2]])));if(_0xd0d0x7){_0xd0d0x2[_0x82f0[7]](_0xd0d0x5- _0xd0d0x8,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5- _0xd0d0x8,_0xd0d0x8);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0x8);_0xd0d0x2[_0x82f0[9]]()}else {_0xd0d0x2[_0x82f0[7]](0,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5- _0xd0d0x8,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0x8);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0x6);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0x6);_0xd0d0x2[_0x82f0[8]](0,0);_0xd0d0x2[_0x82f0[10]]();_0xd0d0x2[_0x82f0[9]]()}};mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[13]]= _0xd0d0x9;function _0xd0d0xa(){}_0xd0d0xa[_0x82f0[0]]= new mxCylinder();_0xd0d0xa[_0x82f0[0]][_0x82f0[1]]= _0xd0d0xa;_0xd0d0xa[_0x82f0[0]][_0x82f0[14]]= 60;_0xd0d0xa[_0x82f0[0]][_0x82f0[15]]= 20;_0xd0d0xa[_0x82f0[0]][_0x82f0[16]]= _0x82f0[17];_0xd0d0xa[_0x82f0[0]][_0x82f0[3]]= function(_0xd0d0x2,_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6,_0xd0d0x7){var _0xd0d0xb=mxUtils[_0x82f0[5]](this[_0x82f0[4]],_0x82f0[14],this[_0x82f0[14]]);var _0xd0d0xc=mxUtils[_0x82f0[5]](this[_0x82f0[4]],_0x82f0[15],this[_0x82f0[15]]);var _0xd0d0xd=mxUtils[_0x82f0[5]](this[_0x82f0[4]],_0x82f0[16],this[_0x82f0[16]]);var _0xd0d0xe=Math[_0x82f0[6]](_0xd0d0x5,_0xd0d0xb);var _0xd0d0xf=Math[_0x82f0[6]](_0xd0d0x6,_0xd0d0xc);if(_0xd0d0x7){if(_0xd0d0xd== _0x82f0[18]){_0xd0d0x2[_0x82f0[7]](0,_0xd0d0xf);_0xd0d0x2[_0x82f0[8]](_0xd0d0xe,_0xd0d0xf)}else {_0xd0d0x2[_0x82f0[7]](_0xd0d0x5- _0xd0d0xe,_0xd0d0xf);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0xf)};_0xd0d0x2[_0x82f0[9]]()}else {if(_0xd0d0xd== _0x82f0[18]){_0xd0d0x2[_0x82f0[7]](0,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0xe,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0xe,_0xd0d0xf);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0xf)}else {_0xd0d0x2[_0x82f0[7]](0,_0xd0d0xf);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5- _0xd0d0xe,_0xd0d0xf);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5- _0xd0d0xe,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,0)};_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0x6);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0x6);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0xf);_0xd0d0x2[_0x82f0[10]]();_0xd0d0x2[_0x82f0[9]]()}};mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[19]]= _0xd0d0xa;function _0xd0d0x10(){}_0xd0d0x10[_0x82f0[0]]= new mxCylinder();_0xd0d0x10[_0x82f0[0]][_0x82f0[1]]= _0xd0d0x10;_0xd0d0x10[_0x82f0[0]][_0x82f0[2]]= 30;_0xd0d0x10[_0x82f0[0]][_0x82f0[3]]= function(_0xd0d0x2,_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6,_0xd0d0x7){var _0xd0d0x8=Math[_0x82f0[6]](_0xd0d0x5,Math[_0x82f0[6]](_0xd0d0x6,mxUtils[_0x82f0[5]](this[_0x82f0[4]],_0x82f0[2],this[_0x82f0[2]])));if(!_0xd0d0x7){_0xd0d0x2[_0x82f0[7]](_0xd0d0x8,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0x6);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0x6);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0x8);_0xd0d0x2[_0x82f0[8]](_0xd0d0x8,0);_0xd0d0x2[_0x82f0[10]]();_0xd0d0x2[_0x82f0[9]]()}};mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[20]]= _0xd0d0x10;function _0xd0d0x11(){}_0xd0d0x11[_0x82f0[0]]= new mxCylinder();_0xd0d0x11[_0x82f0[0]][_0x82f0[1]]= _0xd0d0x11;_0xd0d0x11[_0x82f0[0]][_0x82f0[2]]= 0.4;_0xd0d0x11[_0x82f0[0]][_0x82f0[3]]= function(_0xd0d0x2,_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6,_0xd0d0x7){var _0xd0d0x8=mxUtils[_0x82f0[5]](this[_0x82f0[4]],_0x82f0[2],this[_0x82f0[2]]);var _0xd0d0xf=_0xd0d0x6* _0xd0d0x8;var _0xd0d0x12=1.4;if(!_0xd0d0x7){_0xd0d0x2[_0x82f0[7]](0,_0xd0d0xf/ 2);_0xd0d0x2[_0x82f0[21]](_0xd0d0x5/ 4,_0xd0d0xf* _0xd0d0x12,_0xd0d0x5/ 2,_0xd0d0xf/ 2);_0xd0d0x2[_0x82f0[21]](_0xd0d0x5* 3/ 4,_0xd0d0xf* (1- _0xd0d0x12),_0xd0d0x5,_0xd0d0xf/ 2);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0x6- _0xd0d0xf/ 2);_0xd0d0x2[_0x82f0[21]](_0xd0d0x5* 3/ 4,_0xd0d0x6- _0xd0d0xf* _0xd0d0x12,_0xd0d0x5/ 2,_0xd0d0x6- _0xd0d0xf/ 2);_0xd0d0x2[_0x82f0[21]](_0xd0d0x5/ 4,_0xd0d0x6- _0xd0d0xf* (1- _0xd0d0x12),0,_0xd0d0x6- _0xd0d0xf/ 2);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0xf/ 2);_0xd0d0x2[_0x82f0[10]]();_0xd0d0x2[_0x82f0[9]]()}};mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[22]]= _0xd0d0x11;function _0xd0d0x13(){}_0xd0d0x13[_0x82f0[0]]= new mxCylinder();_0xd0d0x13[_0x82f0[0]][_0x82f0[1]]= _0xd0d0x13;_0xd0d0x13[_0x82f0[0]][_0x82f0[2]]= 0.2;_0xd0d0x13[_0x82f0[0]][_0x82f0[3]]= function(_0xd0d0x2,_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6,_0xd0d0x7){var _0xd0d0x8=_0xd0d0x5* mxUtils[_0x82f0[5]](this[_0x82f0[4]],_0x82f0[2],this[_0x82f0[2]]);if(!_0xd0d0x7){_0xd0d0x2[_0x82f0[7]](0,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5- _0xd0d0x8,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0x6/ 2);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5- _0xd0d0x8,_0xd0d0x6);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0x6);_0xd0d0x2[_0x82f0[8]](_0xd0d0x8,_0xd0d0x6/ 2);_0xd0d0x2[_0x82f0[10]]();_0xd0d0x2[_0x82f0[9]]()}};mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[23]]= _0xd0d0x13;function _0xd0d0x14(){mxRectangleShape[_0x82f0[24]](this)}mxUtils[_0x82f0[25]](_0xd0d0x14,mxRectangleShape);_0xd0d0x14[_0x82f0[0]][_0x82f0[26]]= function(){return false};_0xd0d0x14[_0x82f0[0]][_0x82f0[27]]= function(_0xd0d0x15,_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6){var _0xd0d0x16=Math[_0x82f0[6]](_0xd0d0x5/ 5,_0xd0d0x6/ 5)+ 1;_0xd0d0x15[_0x82f0[28]]();_0xd0d0x15[_0x82f0[7]](_0xd0d0x3+ _0xd0d0x5/ 2,_0xd0d0x4+ _0xd0d0x16);_0xd0d0x15[_0x82f0[8]](_0xd0d0x3+ _0xd0d0x5/ 2,_0xd0d0x4+ _0xd0d0x6- _0xd0d0x16);_0xd0d0x15[_0x82f0[7]](_0xd0d0x3+ _0xd0d0x16,_0xd0d0x4+ _0xd0d0x6/ 2);_0xd0d0x15[_0x82f0[8]](_0xd0d0x3+ _0xd0d0x5- _0xd0d0x16,_0xd0d0x4+ _0xd0d0x6/ 2);_0xd0d0x15[_0x82f0[9]]();_0xd0d0x15[_0x82f0[29]]();mxRectangleShape[_0x82f0[0]][_0x82f0[27]][_0x82f0[30]](this,arguments)};mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[31]]= _0xd0d0x14;function _0xd0d0x17(){mxRectangleShape[_0x82f0[24]](this)}mxUtils[_0x82f0[25]](_0xd0d0x17,mxRectangleShape);_0xd0d0x17[_0x82f0[0]][_0x82f0[26]]= function(){return false};_0xd0d0x17[_0x82f0[0]][_0x82f0[27]]= function(_0xd0d0x15,_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6){if(this[_0x82f0[4]]!= null){if(this[_0x82f0[4]][_0x82f0[32]]== 1){var _0xd0d0x18=Math[_0x82f0[34]](2,this[_0x82f0[33]]+ 1);mxRectangleShape[_0x82f0[0]][_0x82f0[35]][_0x82f0[24]](this,_0xd0d0x15,_0xd0d0x3+ _0xd0d0x18,_0xd0d0x4+ _0xd0d0x18,_0xd0d0x5- 2* _0xd0d0x18,_0xd0d0x6- 2* _0xd0d0x18);mxRectangleShape[_0x82f0[0]][_0x82f0[27]][_0x82f0[30]](this,arguments);_0xd0d0x3+= _0xd0d0x18;_0xd0d0x4+= _0xd0d0x18;_0xd0d0x5-= 2* _0xd0d0x18;_0xd0d0x6-= 2* _0xd0d0x18};_0xd0d0x15[_0x82f0[36]](false);var _0xd0d0x19=0;var _0xd0d0x1a=null;do{_0xd0d0x1a= mxCellRenderer[_0x82f0[0]][_0x82f0[12]][this[_0x82f0[4]][_0x82f0[37]+ _0xd0d0x19]];if(_0xd0d0x1a!= null){var _0xd0d0x1b=this[_0x82f0[4]][_0x82f0[37]+ _0xd0d0x19+ _0x82f0[38]];var _0xd0d0x1c=this[_0x82f0[4]][_0x82f0[37]+ _0xd0d0x19+ _0x82f0[39]];var _0xd0d0x1d=this[_0x82f0[4]][_0x82f0[37]+ _0xd0d0x19+ _0x82f0[40]];var _0xd0d0x1e=this[_0x82f0[4]][_0x82f0[37]+ _0xd0d0x19+ _0x82f0[41]];var _0xd0d0x1f=this[_0x82f0[4]][_0x82f0[37]+ _0xd0d0x19+ _0x82f0[42]]|| 0;var _0xd0d0x20=this[_0x82f0[4]][_0x82f0[37]+ _0xd0d0x19+ _0x82f0[43]];if(_0xd0d0x20!= null){_0xd0d0x1f+= this[_0x82f0[44]](_0xd0d0x5+ this[_0x82f0[33]],_0xd0d0x6+ this[_0x82f0[33]])* _0xd0d0x20};var _0xd0d0x21=_0xd0d0x3;var _0xd0d0x22=_0xd0d0x4;if(_0xd0d0x1b== mxConstants[_0x82f0[45]]){_0xd0d0x21+= (_0xd0d0x5- _0xd0d0x1d)/ 2}else {if(_0xd0d0x1b== mxConstants[_0x82f0[46]]){_0xd0d0x21+= _0xd0d0x5- _0xd0d0x1d- _0xd0d0x1f}else {_0xd0d0x21+= _0xd0d0x1f}};if(_0xd0d0x1c== mxConstants[_0x82f0[47]]){_0xd0d0x22+= (_0xd0d0x6- _0xd0d0x1e)/ 2}else {if(_0xd0d0x1c== mxConstants[_0x82f0[48]]){_0xd0d0x22+= _0xd0d0x6- _0xd0d0x1e- _0xd0d0x1f}else {_0xd0d0x22+= _0xd0d0x1f}};_0xd0d0x15[_0x82f0[49]]();var _0xd0d0x23= new _0xd0d0x1a();_0xd0d0x23[_0x82f0[4]]= this[_0x82f0[4]];_0xd0d0x1a[_0x82f0[0]][_0x82f0[50]][_0x82f0[24]](_0xd0d0x23,_0xd0d0x15,_0xd0d0x21,_0xd0d0x22,_0xd0d0x1d,_0xd0d0x1e);_0xd0d0x15[_0x82f0[51]]()};_0xd0d0x19++}while(_0xd0d0x1a!= null);}};mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[52]]= _0xd0d0x17;function _0xd0d0x24(){}_0xd0d0x24[_0x82f0[0]]= new mxCylinder();_0xd0d0x24[_0x82f0[0]][_0x82f0[1]]= _0xd0d0x24;_0xd0d0x24[_0x82f0[0]][_0x82f0[3]]= function(_0xd0d0x2,_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6,_0xd0d0x7){if(_0xd0d0x7){_0xd0d0x2[_0x82f0[7]](0,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5/ 2,_0xd0d0x6/ 2);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,0);_0xd0d0x2[_0x82f0[9]]()}else {_0xd0d0x2[_0x82f0[7]](0,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0x6);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0x6);_0xd0d0x2[_0x82f0[10]]()}};mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[53]]= _0xd0d0x24;function _0xd0d0x25(){}_0xd0d0x25[_0x82f0[0]]= new mxCylinder();_0xd0d0x25[_0x82f0[0]][_0x82f0[1]]= _0xd0d0x25;_0xd0d0x25[_0x82f0[0]][_0x82f0[54]]= true;_0xd0d0x25[_0x82f0[0]][_0x82f0[3]]= function(_0xd0d0x2,_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6,_0xd0d0x7){var _0xd0d0x1d=_0xd0d0x5/ 3;var _0xd0d0x1e=_0xd0d0x6/ 4;if(!_0xd0d0x7){_0xd0d0x2[_0x82f0[7]](_0xd0d0x5/ 2,_0xd0d0x1e);_0xd0d0x2[_0x82f0[55]](_0xd0d0x5/ 2- _0xd0d0x1d,_0xd0d0x1e,_0xd0d0x5/ 2- _0xd0d0x1d,0,_0xd0d0x5/ 2,0);_0xd0d0x2[_0x82f0[55]](_0xd0d0x5/ 2+ _0xd0d0x1d,0,_0xd0d0x5/ 2+ _0xd0d0x1d,_0xd0d0x1e,_0xd0d0x5/ 2,_0xd0d0x1e);_0xd0d0x2[_0x82f0[10]]();_0xd0d0x2[_0x82f0[7]](_0xd0d0x5/ 2,_0xd0d0x1e);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5/ 2,2* _0xd0d0x6/ 3);_0xd0d0x2[_0x82f0[7]](_0xd0d0x5/ 2,_0xd0d0x6/ 3);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0x6/ 3);_0xd0d0x2[_0x82f0[7]](_0xd0d0x5/ 2,_0xd0d0x6/ 3);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0x6/ 3);_0xd0d0x2[_0x82f0[7]](_0xd0d0x5/ 2,2* _0xd0d0x6/ 3);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0x6);_0xd0d0x2[_0x82f0[7]](_0xd0d0x5/ 2,2* _0xd0d0x6/ 3);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0x6);_0xd0d0x2[_0x82f0[9]]()}};mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[56]]= _0xd0d0x25;function _0xd0d0x26(){}_0xd0d0x26[_0x82f0[0]]= new mxCylinder();_0xd0d0x26[_0x82f0[0]][_0x82f0[1]]= _0xd0d0x26;_0xd0d0x26[_0x82f0[0]][_0x82f0[2]]= 10;_0xd0d0x26[_0x82f0[0]][_0x82f0[54]]= true;_0xd0d0x26[_0x82f0[0]][_0x82f0[3]]= function(_0xd0d0x2,_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6,_0xd0d0x7){var _0xd0d0x27=mxUtils[_0x82f0[5]](this[_0x82f0[4]],_0x82f0[2],this[_0x82f0[2]]);var _0xd0d0x1d=_0xd0d0x27* 2/ 3;var _0xd0d0x1e=_0xd0d0x27;if(!_0xd0d0x7){_0xd0d0x2[_0x82f0[7]](_0xd0d0x5/ 2,_0xd0d0x1e);_0xd0d0x2[_0x82f0[55]](_0xd0d0x5/ 2- _0xd0d0x1d,_0xd0d0x1e,_0xd0d0x5/ 2- _0xd0d0x1d,0,_0xd0d0x5/ 2,0);_0xd0d0x2[_0x82f0[55]](_0xd0d0x5/ 2+ _0xd0d0x1d,0,_0xd0d0x5/ 2+ _0xd0d0x1d,_0xd0d0x1e,_0xd0d0x5/ 2,_0xd0d0x1e);_0xd0d0x2[_0x82f0[10]]();_0xd0d0x2[_0x82f0[7]](_0xd0d0x5/ 2,_0xd0d0x1e);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5/ 2,_0xd0d0x6);_0xd0d0x2[_0x82f0[9]]()}};mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[57]]= _0xd0d0x26;function _0xd0d0x28(){}_0xd0d0x28[_0x82f0[0]]= new mxCylinder();_0xd0d0x28[_0x82f0[0]][_0x82f0[1]]= _0xd0d0x28;_0xd0d0x28[_0x82f0[0]][_0x82f0[58]]= 32;_0xd0d0x28[_0x82f0[0]][_0x82f0[59]]= 12;_0xd0d0x28[_0x82f0[0]][_0x82f0[3]]= function(_0xd0d0x2,_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6,_0xd0d0x7){var _0xd0d0xe=mxUtils[_0x82f0[5]](this[_0x82f0[4]],_0x82f0[58],this[_0x82f0[58]]);var _0xd0d0xf=mxUtils[_0x82f0[5]](this[_0x82f0[4]],_0x82f0[59],this[_0x82f0[59]]);var _0xd0d0x29=_0xd0d0xe/ 2;var _0xd0d0x2a=_0xd0d0x29+ _0xd0d0xe/ 2;var _0xd0d0x2b=0.3* _0xd0d0x6- _0xd0d0xf/ 2;var _0xd0d0x2c=0.7* _0xd0d0x6- _0xd0d0xf/ 2;if(_0xd0d0x7){_0xd0d0x2[_0x82f0[7]](_0xd0d0x29,_0xd0d0x2b);_0xd0d0x2[_0x82f0[8]](_0xd0d0x2a,_0xd0d0x2b);_0xd0d0x2[_0x82f0[8]](_0xd0d0x2a,_0xd0d0x2b+ _0xd0d0xf);_0xd0d0x2[_0x82f0[8]](_0xd0d0x29,_0xd0d0x2b+ _0xd0d0xf);_0xd0d0x2[_0x82f0[7]](_0xd0d0x29,_0xd0d0x2c);_0xd0d0x2[_0x82f0[8]](_0xd0d0x2a,_0xd0d0x2c);_0xd0d0x2[_0x82f0[8]](_0xd0d0x2a,_0xd0d0x2c+ _0xd0d0xf);_0xd0d0x2[_0x82f0[8]](_0xd0d0x29,_0xd0d0x2c+ _0xd0d0xf);_0xd0d0x2[_0x82f0[9]]()}else {_0xd0d0x2[_0x82f0[7]](_0xd0d0x29,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,0);_0xd0d0x2[_0x82f0[8]](_0xd0d0x5,_0xd0d0x6);_0xd0d0x2[_0x82f0[8]](_0xd0d0x29,_0xd0d0x6);_0xd0d0x2[_0x82f0[8]](_0xd0d0x29,_0xd0d0x2c+ _0xd0d0xf);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0x2c+ _0xd0d0xf);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0x2c);_0xd0d0x2[_0x82f0[8]](_0xd0d0x29,_0xd0d0x2c);_0xd0d0x2[_0x82f0[8]](_0xd0d0x29,_0xd0d0x2b+ _0xd0d0xf);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0x2b+ _0xd0d0xf);_0xd0d0x2[_0x82f0[8]](0,_0xd0d0x2b);_0xd0d0x2[_0x82f0[8]](_0xd0d0x29,_0xd0d0x2b);_0xd0d0x2[_0x82f0[10]]();_0xd0d0x2[_0x82f0[9]]()}};mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[60]]= _0xd0d0x28;function _0xd0d0x2d(){}_0xd0d0x2d[_0x82f0[0]]= new mxDoubleEllipse();_0xd0d0x2d[_0x82f0[0]][_0x82f0[1]]= _0xd0d0x2d;_0xd0d0x2d[_0x82f0[0]][_0x82f0[61]]= true;_0xd0d0x2d[_0x82f0[0]][_0x82f0[50]]= function(_0xd0d0x15,_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6){var _0xd0d0x18=Math[_0x82f0[6]](4,Math[_0x82f0[6]](_0xd0d0x5/ 5,_0xd0d0x6/ 5));if(_0xd0d0x5> 0&& _0xd0d0x6> 0){_0xd0d0x15[_0x82f0[62]](_0xd0d0x3+ _0xd0d0x18,_0xd0d0x4+ _0xd0d0x18,_0xd0d0x5- 2* _0xd0d0x18,_0xd0d0x6- 2* _0xd0d0x18);_0xd0d0x15[_0x82f0[63]]()};_0xd0d0x15[_0x82f0[64]](false);if(this[_0x82f0[61]]){_0xd0d0x15[_0x82f0[62]](_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6);_0xd0d0x15[_0x82f0[29]]()}};mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[65]]= _0xd0d0x2d;function _0xd0d0x2e(){}_0xd0d0x2e[_0x82f0[0]]= new _0xd0d0x2d();_0xd0d0x2e[_0x82f0[0]][_0x82f0[1]]= _0xd0d0x2e;_0xd0d0x2e[_0x82f0[0]][_0x82f0[61]]= false;mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[66]]= _0xd0d0x2e;var _0xd0d0x2f=mxImageExport[_0x82f0[0]][_0x82f0[67]];mxImageExport[_0x82f0[0]][_0x82f0[67]]= function(){_0xd0d0x2f[_0x82f0[30]](this,arguments);function _0xd0d0x30(_0xd0d0x31){return {drawShape:function(_0xd0d0x32,_0xd0d0x33,_0xd0d0x34,_0xd0d0x35){var _0xd0d0x3=_0xd0d0x34[_0x82f0[68]];var _0xd0d0x4=_0xd0d0x34[_0x82f0[69]];var _0xd0d0x5=_0xd0d0x34[_0x82f0[70]];var _0xd0d0x6=_0xd0d0x34[_0x82f0[71]];if(_0xd0d0x35){var _0xd0d0x18=Math[_0x82f0[6]](4,Math[_0x82f0[6]](_0xd0d0x5/ 5,_0xd0d0x6/ 5));_0xd0d0x3+= _0xd0d0x18;_0xd0d0x4+= _0xd0d0x18;_0xd0d0x5-= 2* _0xd0d0x18;_0xd0d0x6-= 2* _0xd0d0x18;if(_0xd0d0x5> 0&& _0xd0d0x6> 0){_0xd0d0x32[_0x82f0[62]](_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6)};return true}else {_0xd0d0x32[_0x82f0[63]]();if(_0xd0d0x31){_0xd0d0x32[_0x82f0[62]](_0xd0d0x3,_0xd0d0x4,_0xd0d0x5,_0xd0d0x6);_0xd0d0x32[_0x82f0[29]]()}}}}}this[_0x82f0[72]][_0x82f0[65]]= _0xd0d0x30(true);this[_0x82f0[72]][_0x82f0[66]]= _0xd0d0x30(false)};function _0xd0d0x36(){mxArrow[_0x82f0[24]](this)}mxUtils[_0x82f0[25]](_0xd0d0x36,mxArrow);_0xd0d0x36[_0x82f0[0]][_0x82f0[73]]= function(_0xd0d0x15,_0xd0d0x37){var _0xd0d0x1d=10;var _0xd0d0x38=_0xd0d0x37[0];var _0xd0d0x39=_0xd0d0x37[_0xd0d0x37[_0x82f0[74]]- 1];var _0xd0d0xe=_0xd0d0x39[_0x82f0[68]]- _0xd0d0x38[_0x82f0[68]];var _0xd0d0xf=_0xd0d0x39[_0x82f0[69]]- _0xd0d0x38[_0x82f0[69]];var _0xd0d0x3a=Math[_0x82f0[75]](_0xd0d0xe* _0xd0d0xe+ _0xd0d0xf* _0xd0d0xf);var _0xd0d0x3b=_0xd0d0x3a;var _0xd0d0x3c=_0xd0d0xe/ _0xd0d0x3a;var _0xd0d0x3d=_0xd0d0xf/ _0xd0d0x3a;var _0xd0d0x3e=_0xd0d0x3b* _0xd0d0x3c;var _0xd0d0x3f=_0xd0d0x3b* _0xd0d0x3d;var _0xd0d0x40=_0xd0d0x1d* _0xd0d0x3d/ 3;var _0xd0d0x41=-_0xd0d0x1d* _0xd0d0x3c/ 3;var _0xd0d0x42=_0xd0d0x38[_0x82f0[68]]- _0xd0d0x40/ 2;var _0xd0d0x43=_0xd0d0x38[_0x82f0[69]]- _0xd0d0x41/ 2;var _0xd0d0x44=_0xd0d0x42+ _0xd0d0x40;var _0xd0d0x45=_0xd0d0x43+ _0xd0d0x41;var _0xd0d0x46=_0xd0d0x44+ _0xd0d0x3e;var _0xd0d0x47=_0xd0d0x45+ _0xd0d0x3f;var _0xd0d0x48=_0xd0d0x46+ _0xd0d0x40;var _0xd0d0x49=_0xd0d0x47+ _0xd0d0x41;var _0xd0d0x4a=_0xd0d0x48- 3* _0xd0d0x40;var _0xd0d0x4b=_0xd0d0x49- 3* _0xd0d0x41;_0xd0d0x15[_0x82f0[28]]();_0xd0d0x15[_0x82f0[7]](_0xd0d0x44,_0xd0d0x45);_0xd0d0x15[_0x82f0[8]](_0xd0d0x46,_0xd0d0x47);_0xd0d0x15[_0x82f0[7]](_0xd0d0x4a+ _0xd0d0x40,_0xd0d0x4b+ _0xd0d0x41);_0xd0d0x15[_0x82f0[8]](_0xd0d0x42,_0xd0d0x43);_0xd0d0x15[_0x82f0[29]]()};mxCellRenderer[_0x82f0[0]][_0x82f0[12]][_0x82f0[76]]= _0xd0d0x36;mxMarker[_0x82f0[78]](_0x82f0[77],function(_0xd0d0x32,_0xd0d0x1a,_0xd0d0x4c,_0xd0d0x39,_0xd0d0x4d,_0xd0d0x4e,_0xd0d0x4f,_0xd0d0x50,_0xd0d0x51,_0xd0d0x52){var _0xd0d0x3c=_0xd0d0x4d* (_0xd0d0x4f+ _0xd0d0x51+ 1);var _0xd0d0x3d=_0xd0d0x4e* (_0xd0d0x4f+ _0xd0d0x51+ 1);return function(){_0xd0d0x32[_0x82f0[28]]();_0xd0d0x32[_0x82f0[7]](_0xd0d0x39[_0x82f0[68]]- _0xd0d0x3c/ 2- _0xd0d0x3d/ 2,_0xd0d0x39[_0x82f0[69]]- _0xd0d0x3d/ 2+ _0xd0d0x3c/ 2);_0xd0d0x32[_0x82f0[8]](_0xd0d0x39[_0x82f0[68]]+ _0xd0d0x3d/ 2- 3* _0xd0d0x3c/ 2,_0xd0d0x39[_0x82f0[69]]- 3* _0xd0d0x3d/ 2- _0xd0d0x3c/ 2);_0xd0d0x32[_0x82f0[29]]()}});var _0xd0d0x53=-99;if( typeof (mxVertexHandler)!= _0x82f0[79]){function _0xd0d0x54(_0xd0d0x33){mxVertexHandler[_0x82f0[24]](this,_0xd0d0x33)}mxUtils[_0x82f0[25]](_0xd0d0x54,mxVertexHandler);_0xd0d0x54[_0x82f0[0]][_0x82f0[80]]= false;_0xd0d0x54[_0x82f0[0]][_0x82f0[81]]= function(){this[_0x82f0[82]]= mxUtils[_0x82f0[5]](this[_0x82f0[83]][_0x82f0[4]],mxConstants.STYLE_HORIZONTAL,true);var _0xd0d0x55=this[_0x82f0[83]][_0x82f0[85]][_0x82f0[84]];if(this[_0x82f0[86]]!= null){var _0xd0d0x34= new mxRectangle(0,0,this[_0x82f0[86]][_0x82f0[70]],this[_0x82f0[86]][_0x82f0[71]]);this[_0x82f0[87]]= new mxImageShape(_0xd0d0x34,this[_0x82f0[86]][_0x82f0[88]])}else {var _0xd0d0x4f=10;var _0xd0d0x34= new mxRectangle(0,0,_0xd0d0x4f,_0xd0d0x4f);this[_0x82f0[87]]= new mxRhombus(_0xd0d0x34,mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR)};this[_0x82f0[87]][_0x82f0[89]]= (_0xd0d0x55[_0x82f0[89]]!= mxConstants[_0x82f0[90]])?mxConstants[_0x82f0[91]]:mxConstants[_0x82f0[90]];this[_0x82f0[87]][_0x82f0[81]](_0xd0d0x55[_0x82f0[93]]()[_0x82f0[92]]());this[_0x82f0[87]][_0x82f0[95]][_0x82f0[4]][_0x82f0[94]]= this[_0x82f0[96]]();mxEvent[_0x82f0[97]](this[_0x82f0[87]][_0x82f0[95]],_0xd0d0x55,this[_0x82f0[83]]);mxVertexHandler[_0x82f0[0]][_0x82f0[81]][_0x82f0[30]](this,arguments)};_0xd0d0x54[_0x82f0[0]][_0x82f0[96]]= function(){return _0x82f0[98]};_0xd0d0x54[_0x82f0[0]][_0x82f0[99]]= function(){mxVertexHandler[_0x82f0[0]][_0x82f0[99]][_0x82f0[30]](this,arguments);var _0xd0d0x4f=this[_0x82f0[87]][_0x82f0[100]][_0x82f0[70]];this[_0x82f0[87]][_0x82f0[100]]= this[_0x82f0[101]](_0xd0d0x4f);this[_0x82f0[87]][_0x82f0[99]]()};_0xd0d0x54[_0x82f0[0]][_0x82f0[102]]= function(){mxVertexHandler[_0x82f0[0]][_0x82f0[102]][_0x82f0[30]](this,arguments);if(this[_0x82f0[87]]!= null){this[_0x82f0[87]][_0x82f0[102]]();this[_0x82f0[87]]= null}};_0xd0d0x54[_0x82f0[0]][_0x82f0[103]]= function(_0xd0d0x56){if(_0xd0d0x56[_0x82f0[104]](this[_0x82f0[87]])){return _0xd0d0x53};return mxVertexHandler[_0x82f0[0]][_0x82f0[103]][_0x82f0[30]](this,arguments)};_0xd0d0x54[_0x82f0[0]][_0x82f0[105]]= function(_0xd0d0x57,_0xd0d0x56){if(!_0xd0d0x56[_0x82f0[106]]()&& this[_0x82f0[107]]== _0xd0d0x53){var _0xd0d0x58= new mxPoint(_0xd0d0x56[_0x82f0[108]](),_0xd0d0x56[_0x82f0[109]]());this[_0x82f0[110]](_0xd0d0x58);var _0xd0d0x59=this[_0x82f0[84]][_0x82f0[112]](_0xd0d0x56[_0x82f0[111]]());var _0xd0d0x5a=this[_0x82f0[84]][_0x82f0[93]]()[_0x82f0[113]];if(_0xd0d0x59&& this[_0x82f0[80]]){_0xd0d0x58[_0x82f0[68]]= this[_0x82f0[84]][_0x82f0[114]](_0xd0d0x58[_0x82f0[68]]/ _0xd0d0x5a)* _0xd0d0x5a;_0xd0d0x58[_0x82f0[69]]= this[_0x82f0[84]][_0x82f0[114]](_0xd0d0x58[_0x82f0[69]]/ _0xd0d0x5a)* _0xd0d0x5a};this[_0x82f0[115]](_0xd0d0x58);this[_0x82f0[116]](this[_0x82f0[87]],_0xd0d0x58[_0x82f0[68]],_0xd0d0x58[_0x82f0[69]]);this[_0x82f0[83]][_0x82f0[85]][_0x82f0[84]][_0x82f0[117]][_0x82f0[99]](this[_0x82f0[83]],true);_0xd0d0x56[_0x82f0[118]]()}else {mxVertexHandler[_0x82f0[0]][_0x82f0[105]][_0x82f0[30]](this,arguments)}};_0xd0d0x54[_0x82f0[0]][_0x82f0[119]]= function(_0xd0d0x57,_0xd0d0x56){if(!_0xd0d0x56[_0x82f0[106]]()&& this[_0x82f0[107]]== _0xd0d0x53){this[_0x82f0[120]]();this[_0x82f0[121]]();_0xd0d0x56[_0x82f0[118]]()}else {mxVertexHandler[_0x82f0[0]][_0x82f0[119]][_0x82f0[30]](this,arguments)}};_0xd0d0x54[_0x82f0[0]][_0x82f0[101]]= function(_0xd0d0x4f){var _0xd0d0x5b=this[_0x82f0[83]][_0x82f0[123]][_0x82f0[122]]();var _0xd0d0x5c=mxUtils[_0x82f0[124]](_0xd0d0x5b);var _0xd0d0x5d=Math[_0x82f0[125]](_0xd0d0x5c);var _0xd0d0x5e=Math[_0x82f0[126]](_0xd0d0x5c);var _0xd0d0x34= new mxRectangle(this[_0x82f0[83]][_0x82f0[68]],this[_0x82f0[83]][_0x82f0[69]],this[_0x82f0[83]][_0x82f0[70]],this[_0x82f0[83]][_0x82f0[71]]);if(this[_0x82f0[83]][_0x82f0[123]][_0x82f0[127]]()){var _0xd0d0x5f=(_0xd0d0x34[_0x82f0[70]]- _0xd0d0x34[_0x82f0[71]])/ 2;_0xd0d0x34[_0x82f0[68]]+= _0xd0d0x5f;_0xd0d0x34[_0x82f0[69]]-= _0xd0d0x5f;var _0xd0d0x23=_0xd0d0x34[_0x82f0[70]];_0xd0d0x34[_0x82f0[70]]= _0xd0d0x34[_0x82f0[71]];_0xd0d0x34[_0x82f0[71]]= _0xd0d0x23};var _0xd0d0x60=this[_0x82f0[128]](_0xd0d0x34);if(this[_0x82f0[83]][_0x82f0[123]][_0x82f0[129]]){_0xd0d0x60[_0x82f0[68]]= 2* _0xd0d0x34[_0x82f0[68]]+ _0xd0d0x34[_0x82f0[70]]- _0xd0d0x60[_0x82f0[68]]};if(this[_0x82f0[83]][_0x82f0[123]][_0x82f0[130]]){_0xd0d0x60[_0x82f0[69]]= 2* _0xd0d0x34[_0x82f0[69]]+ _0xd0d0x34[_0x82f0[71]]- _0xd0d0x60[_0x82f0[69]]};_0xd0d0x60= mxUtils[_0x82f0[133]](_0xd0d0x60,_0xd0d0x5d,_0xd0d0x5e, new mxPoint(this[_0x82f0[83]][_0x82f0[131]](),this[_0x82f0[83]][_0x82f0[132]]()));return new mxRectangle(_0xd0d0x60[_0x82f0[68]]- _0xd0d0x4f/ 2,_0xd0d0x60[_0x82f0[69]]- _0xd0d0x4f/ 2,_0xd0d0x4f,_0xd0d0x4f)};_0xd0d0x54[_0x82f0[0]][_0x82f0[128]]= function(_0xd0d0x34){return null};_0xd0d0x54[_0x82f0[0]][_0x82f0[115]]= function(_0xd0d0x58){};_0xd0d0x54[_0x82f0[0]][_0x82f0[110]]= function(_0xd0d0x58){_0xd0d0x58[_0x82f0[68]]= Math[_0x82f0[34]](this[_0x82f0[83]][_0x82f0[68]],Math[_0x82f0[6]](this[_0x82f0[83]][_0x82f0[68]]+ this[_0x82f0[83]][_0x82f0[70]],_0xd0d0x58[_0x82f0[68]]));_0xd0d0x58[_0x82f0[69]]= Math[_0x82f0[34]](this[_0x82f0[83]][_0x82f0[69]],Math[_0x82f0[6]](this[_0x82f0[83]][_0x82f0[69]]+ this[_0x82f0[83]][_0x82f0[71]],_0xd0d0x58[_0x82f0[69]]))};_0xd0d0x54[_0x82f0[0]][_0x82f0[120]]= function(){};function _0xd0d0x61(_0xd0d0x33){_0xd0d0x54[_0x82f0[24]](this,_0xd0d0x33)}mxUtils[_0x82f0[25]](_0xd0d0x61,_0xd0d0x54);_0xd0d0x61[_0x82f0[0]][_0x82f0[128]]= function(_0xd0d0x34){var _0xd0d0x5a=this[_0x82f0[84]][_0x82f0[93]]()[_0x82f0[113]];var _0xd0d0xb=Math[_0x82f0[6]](_0xd0d0x34[_0x82f0[70]],mxUtils[_0x82f0[5]](this[_0x82f0[83]][_0x82f0[4]],_0x82f0[14],60)* _0xd0d0x5a);var _0xd0d0xc=Math[_0x82f0[6]](_0xd0d0x34[_0x82f0[71]],mxUtils[_0x82f0[5]](this[_0x82f0[83]][_0x82f0[4]],_0x82f0[15],20)* _0xd0d0x5a);var _0xd0d0xd=mxUtils[_0x82f0[5]](this[_0x82f0[83]][_0x82f0[4]],_0x82f0[16],_0x82f0[17]);var _0xd0d0x3=(_0xd0d0xd== _0x82f0[18])?_0xd0d0x34[_0x82f0[68]]+ _0xd0d0xb:_0xd0d0x34[_0x82f0[68]]+ _0xd0d0x34[_0x82f0[70]]- _0xd0d0xb;return new mxPoint(_0xd0d0x3,_0xd0d0x34[_0x82f0[69]]+ _0xd0d0xc)};_0xd0d0x61[_0x82f0[0]][_0x82f0[115]]= function(_0xd0d0x58){var _0xd0d0x5b=this[_0x82f0[83]][_0x82f0[123]][_0x82f0[122]]();var _0xd0d0x5c=mxUtils[_0x82f0[124]](_0xd0d0x5b);var _0xd0d0x5d=Math[_0x82f0[125]](-_0xd0d0x5c);var _0xd0d0x5e=Math[_0x82f0[126]](-_0xd0d0x5c);var _0xd0d0x34= new mxRectangle(this[_0x82f0[83]][_0x82f0[68]],this[_0x82f0[83]][_0x82f0[69]],this[_0x82f0[83]][_0x82f0[70]],this[_0x82f0[83]][_0x82f0[71]]);if(this[_0x82f0[83]][_0x82f0[123]][_0x82f0[127]]()){var _0xd0d0x5f=(_0xd0d0x34[_0x82f0[70]]- _0xd0d0x34[_0x82f0[71]])/ 2;_0xd0d0x34[_0x82f0[68]]+= _0xd0d0x5f;_0xd0d0x34[_0x82f0[69]]-= _0xd0d0x5f;var _0xd0d0x23=_0xd0d0x34[_0x82f0[70]];_0xd0d0x34[_0x82f0[70]]= _0xd0d0x34[_0x82f0[71]];_0xd0d0x34[_0x82f0[71]]= _0xd0d0x23};var _0xd0d0x60= new mxPoint(_0xd0d0x58[_0x82f0[68]],_0xd0d0x58[_0x82f0[69]]);_0xd0d0x60= mxUtils[_0x82f0[133]](_0xd0d0x60,_0xd0d0x5d,_0xd0d0x5e, new mxPoint(this[_0x82f0[83]][_0x82f0[131]](),this[_0x82f0[83]][_0x82f0[132]]()));if(this[_0x82f0[83]][_0x82f0[123]][_0x82f0[129]]){_0xd0d0x60[_0x82f0[68]]= 2* _0xd0d0x34[_0x82f0[68]]+ _0xd0d0x34[_0x82f0[70]]- _0xd0d0x60[_0x82f0[68]]};if(this[_0x82f0[83]][_0x82f0[123]][_0x82f0[130]]){_0xd0d0x60[_0x82f0[69]]= 2* _0xd0d0x34[_0x82f0[69]]+ _0xd0d0x34[_0x82f0[71]]- _0xd0d0x60[_0x82f0[69]]};var _0xd0d0x62=this[_0x82f0[134]](_0xd0d0x60,_0xd0d0x34);if(_0xd0d0x62!= null){if(this[_0x82f0[83]][_0x82f0[123]][_0x82f0[129]]){_0xd0d0x62[_0x82f0[68]]= 2* _0xd0d0x34[_0x82f0[68]]+ _0xd0d0x34[_0x82f0[70]]- _0xd0d0x62[_0x82f0[68]]};if(this[_0x82f0[83]][_0x82f0[123]][_0x82f0[130]]){_0xd0d0x62[_0x82f0[69]]= 2* _0xd0d0x34[_0x82f0[69]]+ _0xd0d0x34[_0x82f0[71]]- _0xd0d0x62[_0x82f0[69]]};_0xd0d0x5d= Math[_0x82f0[125]](_0xd0d0x5c);_0xd0d0x5e= Math[_0x82f0[126]](_0xd0d0x5c);_0xd0d0x62= mxUtils[_0x82f0[133]](_0xd0d0x62,_0xd0d0x5d,_0xd0d0x5e, new mxPoint(this[_0x82f0[83]][_0x82f0[131]](),this[_0x82f0[83]][_0x82f0[132]]()));_0xd0d0x58[_0x82f0[68]]= _0xd0d0x62[_0x82f0[68]];_0xd0d0x58[_0x82f0[69]]= _0xd0d0x62[_0x82f0[69]]}};_0xd0d0x61[_0x82f0[0]][_0x82f0[134]]= function(_0xd0d0x60,_0xd0d0x34){var _0xd0d0xd=mxUtils[_0x82f0[5]](this[_0x82f0[83]][_0x82f0[4]],_0x82f0[16],_0x82f0[17]);var _0xd0d0xb=(_0xd0d0xd== _0x82f0[18])?_0xd0d0x60[_0x82f0[68]]- _0xd0d0x34[_0x82f0[68]]:_0xd0d0x34[_0x82f0[68]]+ _0xd0d0x34[_0x82f0[70]]- _0xd0d0x60[_0x82f0[68]];var _0xd0d0xc=_0xd0d0x60[_0x82f0[69]]- _0xd0d0x34[_0x82f0[69]];var _0xd0d0x5a=this[_0x82f0[84]][_0x82f0[93]]()[_0x82f0[113]];this[_0x82f0[83]][_0x82f0[4]][_0x82f0[14]]= Math[_0x82f0[135]](Math[_0x82f0[34]](1,_0xd0d0xb)/ _0xd0d0x5a);this[_0x82f0[83]][_0x82f0[4]][_0x82f0[15]]= Math[_0x82f0[135]](Math[_0x82f0[34]](1,_0xd0d0xc)/ _0xd0d0x5a)};_0xd0d0x61[_0x82f0[0]][_0x82f0[120]]= function(){var _0xd0d0x63=this[_0x82f0[84]][_0x82f0[136]]();_0xd0d0x63[_0x82f0[137]]();try{this[_0x82f0[83]][_0x82f0[85]][_0x82f0[84]][_0x82f0[139]](_0x82f0[14],this[_0x82f0[83]][_0x82f0[4]][_0x82f0[14]],[this[_0x82f0[83]][_0x82f0[138]]]);this[_0x82f0[83]][_0x82f0[85]][_0x82f0[84]][_0x82f0[139]](_0x82f0[15],this[_0x82f0[83]][_0x82f0[4]][_0x82f0[15]],[this[_0x82f0[83]][_0x82f0[138]]])}finally{_0xd0d0x63[_0x82f0[140]]()}};function _0xd0d0x64(_0xd0d0x33){_0xd0d0x61[_0x82f0[24]](this,_0xd0d0x33)}mxUtils[_0x82f0[25]](_0xd0d0x64,_0xd0d0x61);_0xd0d0x64[_0x82f0[0]][_0x82f0[128]]= function(_0xd0d0x34){var _0xd0d0x5a=this[_0x82f0[84]][_0x82f0[93]]()[_0x82f0[113]];var _0xd0d0x65=mxUtils[_0x82f0[5]](this[_0x82f0[83]][_0x82f0[4]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE);return new mxPoint(_0xd0d0x34[_0x82f0[68]]+ _0xd0d0x34[_0x82f0[70]]/ 2,_0xd0d0x34[_0x82f0[69]]+ Math[_0x82f0[6]](_0xd0d0x34[_0x82f0[71]],_0xd0d0x65* _0xd0d0x5a))};_0xd0d0x64[_0x82f0[0]][_0x82f0[134]]= function(_0xd0d0x58,_0xd0d0x34){_0xd0d0x58[_0x82f0[68]]= _0xd0d0x34[_0x82f0[68]]+ _0xd0d0x34[_0x82f0[70]]/ 2;startSize= _0xd0d0x58[_0x82f0[69]]- _0xd0d0x34[_0x82f0[69]];var _0xd0d0x5a=this[_0x82f0[84]][_0x82f0[93]]()[_0x82f0[113]];this[_0x82f0[83]][_0x82f0[4]][_0x82f0[141]]= Math[_0x82f0[135]](Math[_0x82f0[34]](1,startSize)/ _0xd0d0x5a);return _0xd0d0x58};_0xd0d0x64[_0x82f0[0]][_0x82f0[120]]= function(){this[_0x82f0[83]][_0x82f0[85]][_0x82f0[84]][_0x82f0[139]](_0x82f0[141],this[_0x82f0[83]][_0x82f0[4]][_0x82f0[141]],[this[_0x82f0[83]][_0x82f0[138]]])};function _0xd0d0x66(_0xd0d0x33){_0xd0d0x61[_0x82f0[24]](this,_0xd0d0x33)}mxUtils[_0x82f0[25]](_0xd0d0x66,_0xd0d0x61);_0xd0d0x66[_0x82f0[0]][_0x82f0[142]]= 20;_0xd0d0x66[_0x82f0[0]][_0x82f0[143]]= 1;_0xd0d0x66[_0x82f0[0]][_0x82f0[128]]= function(_0xd0d0x34){var _0xd0d0x5a=this[_0x82f0[84]][_0x82f0[93]]()[_0x82f0[113]];var _0xd0d0x67=Math[_0x82f0[6]](_0xd0d0x34[_0x82f0[70]],Math[_0x82f0[6]](_0xd0d0x34[_0x82f0[71]],mxUtils[_0x82f0[5]](this[_0x82f0[83]][_0x82f0[4]],_0x82f0[2],this[_0x82f0[142]])* _0xd0d0x5a/ this[_0x82f0[143]]));return new mxPoint(_0xd0d0x34[_0x82f0[68]]+ _0xd0d0x67,_0xd0d0x34[_0x82f0[69]]+ _0xd0d0x67)};_0xd0d0x66[_0x82f0[0]][_0x82f0[134]]= function(_0xd0d0x60,_0xd0d0x34){var _0xd0d0x4f=Math[_0x82f0[34]](0,Math[_0x82f0[6]](Math[_0x82f0[6]](_0xd0d0x34[_0x82f0[70]]/ this[_0x82f0[143]],_0xd0d0x60[_0x82f0[68]]- _0xd0d0x34[_0x82f0[68]]),Math[_0x82f0[6]](_0xd0d0x34[_0x82f0[71]]/ this[_0x82f0[143]],_0xd0d0x60[_0x82f0[69]]- _0xd0d0x34[_0x82f0[69]])));var _0xd0d0x5a=this[_0x82f0[84]][_0x82f0[93]]()[_0x82f0[113]];this[_0x82f0[83]][_0x82f0[4]][_0x82f0[2]]= Math[_0x82f0[135]](Math[_0x82f0[34]](1,_0xd0d0x4f)/ _0xd0d0x5a)* this[_0x82f0[143]];return new mxPoint(_0xd0d0x34[_0x82f0[68]]+ _0xd0d0x4f,_0xd0d0x34[_0x82f0[69]]+ _0xd0d0x4f)};_0xd0d0x66[_0x82f0[0]][_0x82f0[120]]= function(){this[_0x82f0[83]][_0x82f0[85]][_0x82f0[84]][_0x82f0[139]](_0x82f0[2],this[_0x82f0[83]][_0x82f0[4]][_0x82f0[2]],[this[_0x82f0[83]][_0x82f0[138]]])};function _0xd0d0x68(_0xd0d0x33){_0xd0d0x66[_0x82f0[24]](this,_0xd0d0x33)}mxUtils[_0x82f0[25]](_0xd0d0x68,_0xd0d0x66);_0xd0d0x68[_0x82f0[0]][_0x82f0[142]]= 30;_0xd0d0x68[_0x82f0[0]][_0x82f0[143]]= 2;function _0xd0d0x69(_0xd0d0x33){_0xd0d0x66[_0x82f0[24]](this,_0xd0d0x33)}mxUtils[_0x82f0[25]](_0xd0d0x69,_0xd0d0x66);_0xd0d0x69[_0x82f0[0]][_0x82f0[142]]= 30;_0xd0d0x69[_0x82f0[0]][_0x82f0[143]]= 1;_0xd0d0x69[_0x82f0[0]][_0x82f0[128]]= function(_0xd0d0x34){var _0xd0d0x5a=this[_0x82f0[84]][_0x82f0[93]]()[_0x82f0[113]];var _0xd0d0x67=Math[_0x82f0[6]](_0xd0d0x34[_0x82f0[70]],Math[_0x82f0[6]](_0xd0d0x34[_0x82f0[71]],mxUtils[_0x82f0[5]](this[_0x82f0[83]][_0x82f0[4]],_0x82f0[2],this[_0x82f0[142]])* _0xd0d0x5a/ this[_0x82f0[143]]));return new mxPoint(_0xd0d0x34[_0x82f0[68]]+ _0xd0d0x34[_0x82f0[70]]- _0xd0d0x67,_0xd0d0x34[_0x82f0[69]]+ _0xd0d0x67)};_0xd0d0x69[_0x82f0[0]][_0x82f0[134]]= function(_0xd0d0x60,_0xd0d0x34){var _0xd0d0x4f=Math[_0x82f0[34]](0,Math[_0x82f0[6]](Math[_0x82f0[6]](_0xd0d0x34[_0x82f0[70]]/ this[_0x82f0[143]],_0xd0d0x60[_0x82f0[68]]- _0xd0d0x34[_0x82f0[68]]+ _0xd0d0x34[_0x82f0[70]]),Math[_0x82f0[6]](_0xd0d0x34[_0x82f0[71]]/ this[_0x82f0[143]],_0xd0d0x60[_0x82f0[69]]- _0xd0d0x34[_0x82f0[69]])));var _0xd0d0x5a=this[_0x82f0[84]][_0x82f0[93]]()[_0x82f0[113]];this[_0x82f0[83]][_0x82f0[4]][_0x82f0[2]]= Math[_0x82f0[135]](Math[_0x82f0[34]](1,_0xd0d0x4f)/ _0xd0d0x5a)* this[_0x82f0[143]];return new mxPoint(_0xd0d0x34[_0x82f0[68]]+ _0xd0d0x34[_0x82f0[70]]- _0xd0d0x4f,_0xd0d0x34[_0x82f0[69]]+ _0xd0d0x4f)};function _0xd0d0x6a(_0xd0d0x33){_0xd0d0x66[_0x82f0[24]](this,_0xd0d0x33)}mxUtils[_0x82f0[25]](_0xd0d0x6a,_0xd0d0x66);_0xd0d0x6a[_0x82f0[0]][_0x82f0[142]]= 0.2;_0xd0d0x6a[_0x82f0[0]][_0x82f0[143]]= 1;_0xd0d0x6a[_0x82f0[0]][_0x82f0[128]]= function(_0xd0d0x34){var _0xd0d0x67=mxUtils[_0x82f0[5]](this[_0x82f0[83]][_0x82f0[4]],_0x82f0[2],this[_0x82f0[142]]);return new mxPoint(_0xd0d0x34[_0x82f0[68]]+ _0xd0d0x34[_0x82f0[70]]* _0xd0d0x67,_0xd0d0x34[_0x82f0[69]]+ _0xd0d0x34[_0x82f0[71]]/ 2)};_0xd0d0x6a[_0x82f0[0]][_0x82f0[134]]= function(_0xd0d0x60,_0xd0d0x34){var _0xd0d0x4f=Math[_0x82f0[6]](1,(_0xd0d0x60[_0x82f0[68]]- _0xd0d0x34[_0x82f0[68]])/ _0xd0d0x34[_0x82f0[70]]);this[_0x82f0[83]][_0x82f0[4]][_0x82f0[2]]= _0xd0d0x4f;return new mxPoint(_0xd0d0x34[_0x82f0[68]]+ _0xd0d0x4f* _0xd0d0x34[_0x82f0[70]],_0xd0d0x34[_0x82f0[69]]+ _0xd0d0x34[_0x82f0[71]]/ 2)};function _0xd0d0x6b(_0xd0d0x33){_0xd0d0x66[_0x82f0[24]](this,_0xd0d0x33)}mxUtils[_0x82f0[25]](_0xd0d0x6b,_0xd0d0x66);_0xd0d0x6b[_0x82f0[0]][_0x82f0[142]]= 0.4;_0xd0d0x6b[_0x82f0[0]][_0x82f0[143]]= 1;_0xd0d0x6b[_0x82f0[0]][_0x82f0[128]]= function(_0xd0d0x34){var _0xd0d0x67=mxUtils[_0x82f0[5]](this[_0x82f0[83]][_0x82f0[4]],_0x82f0[2],this[_0x82f0[142]]);return new mxPoint(_0xd0d0x34[_0x82f0[68]]+ _0xd0d0x34[_0x82f0[70]]/ 2,_0xd0d0x34[_0x82f0[69]]+ _0xd0d0x67* _0xd0d0x34[_0x82f0[71]]/ 2)};_0xd0d0x6b[_0x82f0[0]][_0x82f0[134]]= function(_0xd0d0x60,_0xd0d0x34){var _0xd0d0x4f=Math[_0x82f0[34]](0,Math[_0x82f0[6]](1,((_0xd0d0x60[_0x82f0[69]]- _0xd0d0x34[_0x82f0[69]])/ _0xd0d0x34[_0x82f0[71]])* 2));this[_0x82f0[83]][_0x82f0[4]][_0x82f0[2]]= _0xd0d0x4f;return new mxPoint(_0xd0d0x34[_0x82f0[68]]+ _0xd0d0x34[_0x82f0[70]]/ 2,_0xd0d0x34[_0x82f0[69]]+ _0xd0d0x4f* _0xd0d0x34[_0x82f0[71]]/ 2)};var _0xd0d0x6c={"\x73\x77\x69\x6D\x6C\x61\x6E\x65":_0xd0d0x64,"\x66\x6F\x6C\x64\x65\x72":_0xd0d0x61,"\x63\x75\x62\x65":_0xd0d0x66,"\x63\x61\x72\x64":_0xd0d0x68,"\x6E\x6F\x74\x65":_0xd0d0x69,"\x73\x74\x65\x70":_0xd0d0x6a,"\x74\x61\x70\x65":_0xd0d0x6b};var _0xd0d0x6d=mxGraph[_0x82f0[0]][_0x82f0[144]];mxGraph[_0x82f0[0]][_0x82f0[144]]= function(_0xd0d0x33){if(_0xd0d0x33!= null){var _0xd0d0x6e=_0xd0d0x6c[_0xd0d0x33[_0x82f0[4]][_0x82f0[123]]];if(_0xd0d0x6e!= null){return new _0xd0d0x6e(_0xd0d0x33)}};return _0xd0d0x6d[_0x82f0[30]](this,arguments)}};mxGraph[_0x82f0[0]][_0x82f0[145]]= function(_0xd0d0x6f,_0xd0d0x50){if(_0xd0d0x6f!= null&& _0xd0d0x6f[_0x82f0[123]]!= null){if(_0xd0d0x6f[_0x82f0[123]][_0x82f0[146]]!= null){if(_0xd0d0x6f[_0x82f0[123]][_0x82f0[146]]!= null){return _0xd0d0x6f[_0x82f0[123]][_0x82f0[146]][_0x82f0[147]]}}else {if(_0xd0d0x6f[_0x82f0[123]][_0x82f0[147]]!= null){return _0xd0d0x6f[_0x82f0[123]][_0x82f0[147]]}}};return null};mxRectangleShape[_0x82f0[0]][_0x82f0[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0,0.25),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(1,0.25),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];mxLabel[_0x82f0[0]][_0x82f0[147]]= mxRectangleShape[_0x82f0[0]][_0x82f0[147]];mxImageShape[_0x82f0[0]][_0x82f0[147]]= mxRectangleShape[_0x82f0[0]][_0x82f0[147]];mxSwimlane[_0x82f0[0]][_0x82f0[147]]= mxRectangleShape[_0x82f0[0]][_0x82f0[147]];_0xd0d0x14[_0x82f0[0]][_0x82f0[147]]= mxRectangleShape[_0x82f0[0]][_0x82f0[147]];_0xd0d0x9[_0x82f0[0]][_0x82f0[147]]= mxRectangleShape[_0x82f0[0]][_0x82f0[147]];_0xd0d0x10[_0x82f0[0]][_0x82f0[147]]= mxRectangleShape[_0x82f0[0]][_0x82f0[147]];_0xd0d0x1[_0x82f0[0]][_0x82f0[147]]= mxRectangleShape[_0x82f0[0]][_0x82f0[147]];_0xd0d0xa[_0x82f0[0]][_0x82f0[147]]= mxRectangleShape[_0x82f0[0]][_0x82f0[147]];mxCylinder[_0x82f0[0]][_0x82f0[147]]= [ new mxConnectionConstraint( new mxPoint(0.15,0.05),false), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.85,0.05),false), new mxConnectionConstraint( new mxPoint(0,0.3),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.7),true), new mxConnectionConstraint( new mxPoint(1,0.3),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.7),true), new mxConnectionConstraint( new mxPoint(0.15,0.95),false), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.85,0.95),false)];_0xd0d0x25[_0x82f0[0]][_0x82f0[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0.1),false), new mxConnectionConstraint( new mxPoint(0.5,0),false), new mxConnectionConstraint( new mxPoint(0.75,0.1),false), new mxConnectionConstraint( new mxPoint(0,1/ 3),false), new mxConnectionConstraint( new mxPoint(0,1),false), new mxConnectionConstraint( new mxPoint(1,1/ 3),false), new mxConnectionConstraint( new mxPoint(1,1),false), new mxConnectionConstraint( new mxPoint(0.5,0.5),false)];_0xd0d0x28[_0x82f0[0]][_0x82f0[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0,0.3),true), new mxConnectionConstraint( new mxPoint(0,0.7),true), new mxConnectionConstraint( new mxPoint(1,0.25),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];mxActor[_0x82f0[0]][_0x82f0[147]]= [ new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.25,0.2),false), new mxConnectionConstraint( new mxPoint(0.1,0.5),false), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(0.75,0.25),false), new mxConnectionConstraint( new mxPoint(0.9,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];_0xd0d0x11[_0x82f0[0]][_0x82f0[147]]= [ new mxConnectionConstraint( new mxPoint(0,0.35),false), new mxConnectionConstraint( new mxPoint(0,0.5),false), new mxConnectionConstraint( new mxPoint(0,0.65),false), new mxConnectionConstraint( new mxPoint(1,0.35),false), new mxConnectionConstraint( new mxPoint(1,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.65),false), new mxConnectionConstraint( new mxPoint(0.25,1),false), new mxConnectionConstraint( new mxPoint(0.75,0),false)];_0xd0d0x13[_0x82f0[0]][_0x82f0[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true), new mxConnectionConstraint( new mxPoint(0.1,0.25),false), new mxConnectionConstraint( new mxPoint(0.2,0.5),false), new mxConnectionConstraint( new mxPoint(0.1,0.75),false), new mxConnectionConstraint( new mxPoint(0.9,0.25),false), new mxConnectionConstraint( new mxPoint(1,0.5),false), new mxConnectionConstraint( new mxPoint(0.9,0.75),false)];mxLine[_0x82f0[0]][_0x82f0[147]]= [ new mxConnectionConstraint( new mxPoint(0,0.5),false), new mxConnectionConstraint( new mxPoint(0.25,0.5),false), new mxConnectionConstraint( new mxPoint(0.75,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.5),false)];_0xd0d0x26[_0x82f0[0]][_0x82f0[147]]= [ new mxConnectionConstraint( new mxPoint(0.5,0),false), new mxConnectionConstraint( new mxPoint(0.5,1),false)];mxEllipse[_0x82f0[0]][_0x82f0[147]]= [ new mxConnectionConstraint( new mxPoint(0,0),true), new mxConnectionConstraint( new mxPoint(1,0),true), new mxConnectionConstraint( new mxPoint(0,1),true), new mxConnectionConstraint( new mxPoint(1,1),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.5))];mxDoubleEllipse[_0x82f0[0]][_0x82f0[147]]= mxEllipse[_0x82f0[0]][_0x82f0[147]];mxRhombus[_0x82f0[0]][_0x82f0[147]]= mxEllipse[_0x82f0[0]][_0x82f0[147]];mxTriangle[_0x82f0[0]][_0x82f0[147]]= [ new mxConnectionConstraint( new mxPoint(0,0.25),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(1,0.5),true)];mxHexagon[_0x82f0[0]][_0x82f0[147]]= [ new mxConnectionConstraint( new mxPoint(0.375,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.625,0),true), new mxConnectionConstraint( new mxPoint(0.125,0.25),false), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0.125,0.75),false), new mxConnectionConstraint( new mxPoint(0.875,0.25),false), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(0.875,0.75),false), new mxConnectionConstraint( new mxPoint(0.375,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.625,1),true)];mxCloud[_0x82f0[0]][_0x82f0[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0.25),false), new mxConnectionConstraint( new mxPoint(0.4,0.1),false), new mxConnectionConstraint( new mxPoint(0.16,0.55),false), new mxConnectionConstraint( new mxPoint(0.07,0.4),false), new mxConnectionConstraint( new mxPoint(0.31,0.8),false), new mxConnectionConstraint( new mxPoint(0.13,0.77),false), new mxConnectionConstraint( new mxPoint(0.8,0.8),false), new mxConnectionConstraint( new mxPoint(0.55,0.95),false), new mxConnectionConstraint( new mxPoint(0.875,0.5),false), new mxConnectionConstraint( new mxPoint(0.96,0.7),false), new mxConnectionConstraint( new mxPoint(0.625,0.2),false), new mxConnectionConstraint( new mxPoint(0.88,0.25),false)];mxArrow[_0x82f0[0]][_0x82f0[147]]= null})() \ No newline at end of file +/** + * $Id: Shapes.js,v 1.13 2013-02-02 06:44:30 gaudenz Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ + +/** + * Registers shapes. + */ +(function() +{ + // Cube Shape, supports size style + function CubeShape() { }; + CubeShape.prototype = new mxCylinder(); + CubeShape.prototype.constructor = CubeShape; + CubeShape.prototype.size = 20; + CubeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size))); + + if (isForeground) + { + path.moveTo(s, h); + path.lineTo(s, s); + path.lineTo(0, 0); + path.moveTo(s, s); + path.lineTo(w, s); + path.end(); + } + else + { + path.moveTo(0, 0); + path.lineTo(w - s, 0); + path.lineTo(w, s); + path.lineTo(w, h); + path.lineTo(s, h); + path.lineTo(0, h - s); + path.lineTo(0, 0); + path.close(); + path.end(); + } + }; + + mxCellRenderer.prototype.defaultShapes['cube'] = CubeShape; + + // Note Shape, supports size style + function NoteShape() { }; + NoteShape.prototype = new mxCylinder(); + NoteShape.prototype.constructor = NoteShape; + NoteShape.prototype.size = 30; + NoteShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size))); + + if (isForeground) + { + path.moveTo(w - s, 0); + path.lineTo(w - s, s); + path.lineTo(w, s); + path.end(); + } + else + { + path.moveTo(0, 0); + path.lineTo(w - s, 0); + path.lineTo(w, s); + path.lineTo(w, h); + path.lineTo(0, h); + path.lineTo(0, 0); + path.close(); + path.end(); + } + }; + + mxCellRenderer.prototype.defaultShapes['note'] = NoteShape; + + // Folder Shape, supports tabWidth, tabHeight styles + function FolderShape() { }; + FolderShape.prototype = new mxCylinder(); + FolderShape.prototype.constructor = FolderShape; + FolderShape.prototype.tabWidth = 60; + FolderShape.prototype.tabHeight = 20; + FolderShape.prototype.tabPosition = 'right'; + FolderShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var tw = mxUtils.getValue(this.style, 'tabWidth', this.tabWidth); + var th = mxUtils.getValue(this.style, 'tabHeight', this.tabHeight); + var tp = mxUtils.getValue(this.style, 'tabPosition', this.tabPosition); + var dx = Math.min(w, tw); + var dy = Math.min(h, th); + + if (isForeground) + { + if (tp == 'left') + { + path.moveTo(0, dy); + path.lineTo(dx, dy); + } + // Right is default + else + { + path.moveTo(w - dx, dy); + path.lineTo(w, dy); + } + + path.end(); + } + else + { + if (tp == 'left') + { + path.moveTo(0, 0); + path.lineTo(dx, 0); + path.lineTo(dx, dy); + path.lineTo(w, dy); + } + // Right is default + else + { + path.moveTo(0, dy); + path.lineTo(w - dx, dy); + path.lineTo(w - dx, 0); + path.lineTo(w, 0); + } + + path.lineTo(w, h); + path.lineTo(0, h); + path.lineTo(0, dy); + path.close(); + path.end(); + } + }; + + mxCellRenderer.prototype.defaultShapes['folder'] = FolderShape; + + // Card Shape, supports size style + function CardShape() { }; + CardShape.prototype = new mxCylinder(); + CardShape.prototype.constructor = CardShape; + CardShape.prototype.size = 30; + CardShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size))); + + if (!isForeground) + { + path.moveTo(s, 0); + path.lineTo(w, 0); + path.lineTo(w, h); + path.lineTo(0, h); + path.lineTo(0, s); + path.lineTo(s, 0); + path.close(); + path.end(); + } + }; + + mxCellRenderer.prototype.defaultShapes['card'] = CardShape; + + // Tape Shape, supports size style + function TapeShape() { }; + TapeShape.prototype = new mxCylinder(); + TapeShape.prototype.constructor = TapeShape; + TapeShape.prototype.size = 0.4; + TapeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var s = mxUtils.getValue(this.style, 'size', this.size); + var dy = h * s; + var fy = 1.4; + + if (!isForeground) + { + path.moveTo(0, dy / 2); + path.quadTo(w / 4, dy * fy, w / 2, dy / 2); + path.quadTo(w * 3 / 4, dy * (1 - fy), w, dy / 2); + path.lineTo(w, h - dy / 2); + path.quadTo(w * 3 / 4, h - dy * fy, w / 2, h - dy / 2); + path.quadTo(w / 4, h - dy * (1 - fy), 0, h - dy / 2); + path.lineTo(0, dy / 2); + path.close(); + path.end(); + } + }; + + mxCellRenderer.prototype.defaultShapes['tape'] = TapeShape; + + // Tape Shape, supports size style + function StepShape() { }; + StepShape.prototype = new mxCylinder(); + StepShape.prototype.constructor = StepShape; + StepShape.prototype.size = 0.2; + StepShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var s = w * mxUtils.getValue(this.style, 'size', this.size); + + if (!isForeground) + { + path.moveTo(0, 0); + path.lineTo(w - s, 0); + path.lineTo(w, h / 2); + path.lineTo(w - s, h); + path.lineTo(0, h); + path.lineTo(s, h / 2); + path.close(); + path.end(); + } + }; + + mxCellRenderer.prototype.defaultShapes['step'] = StepShape; + + // Plus Shape + function PlusShape() + { + mxRectangleShape.call(this); + }; + mxUtils.extend(PlusShape, mxRectangleShape); + PlusShape.prototype.isHtmlAllowed = function() + { + return false; + }; + PlusShape.prototype.paintForeground = function(c, x, y, w, h) + { + var border = Math.min(w / 5, h / 5) + 1; + + c.begin(); + c.moveTo(x + w / 2, y + border); + c.lineTo(x + w / 2, y + h - border); + c.moveTo(x + border, y + h / 2); + c.lineTo(x + w - border, y + h / 2); + c.end(); + c.stroke(); + mxRectangleShape.prototype.paintForeground.apply(this, arguments); + }; + + mxCellRenderer.prototype.defaultShapes['plus'] = PlusShape; + + // CompositeShape + function ExtendedShape() + { + mxRectangleShape.call(this); + }; + mxUtils.extend(ExtendedShape, mxRectangleShape); + ExtendedShape.prototype.isHtmlAllowed = function() + { + return false; + }; + ExtendedShape.prototype.paintForeground = function(c, x, y, w, h) + { + if (this.style != null) + { + if (this.style['double'] == 1) + { + var inset = Math.max(2, this.strokewidth + 1); + + mxRectangleShape.prototype.paintBackground.call(this, c, x + inset, y + inset, w - 2 * inset, h - 2 * inset); + mxRectangleShape.prototype.paintForeground.apply(this, arguments); + + x += inset; + y += inset; + w -= 2 * inset; + h -= 2 * inset; + } + + c.setDashed(false); + + // Draws the symbols defined in the style. The symbols are + // numbered from 1...n. Possible postfixes are align, + // verticalAlign, spacing, arcSpacing, width, height + var counter = 0; + var shape = null; + + do + { + shape = mxCellRenderer.prototype.defaultShapes[this.style['symbol' + counter]]; + + if (shape != null) + { + var align = this.style['symbol' + counter + 'Align']; + var valign = this.style['symbol' + counter + 'VerticalAlign']; + var width = this.style['symbol' + counter + 'Width']; + var height = this.style['symbol' + counter + 'Height']; + var spacing = this.style['symbol' + counter + 'Spacing'] || 0; + var arcspacing = this.style['symbol' + counter + 'ArcSpacing']; + + if (arcspacing != null) + { + spacing += this.getArcSize(w + this.strokewidth, h + this.strokewidth) * arcspacing; + } + + var x2 = x; + var y2 = y; + + if (align == mxConstants.ALIGN_CENTER) + { + x2 += (w - width) / 2; + } + else if (align == mxConstants.ALIGN_RIGHT) + { + x2 += w - width - spacing; + } + else + { + x2 += spacing; + } + + if (valign == mxConstants.ALIGN_MIDDLE) + { + y2 += (h - height) / 2; + } + else if (valign == mxConstants.ALIGN_BOTTOM) + { + y2 += h - height - spacing; + } + else + { + y2 += spacing; + } + + c.save(); + + // Small hack to pass style along into subshape + var tmp = new shape(); + // TODO: Clone style and override settings (eg. strokewidth) + tmp.style = this.style; + shape.prototype.paintVertexShape.call(tmp, c, x2, y2, width, height); + c.restore(); + } + + counter++; + } + while (shape != null); + } + }; + + mxCellRenderer.prototype.defaultShapes['ext'] = ExtendedShape; + + // Tape Shape, supports size style + function MessageShape() { }; + MessageShape.prototype = new mxCylinder(); + MessageShape.prototype.constructor = MessageShape; + MessageShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + if (isForeground) + { + path.moveTo(0, 0); + path.lineTo(w / 2, h / 2); + path.lineTo(w, 0); + path.end(); + } + else + { + path.moveTo(0, 0); + path.lineTo(w, 0); + path.lineTo(w, h); + path.lineTo(0, h); + path.close(); + } + }; + + mxCellRenderer.prototype.defaultShapes['message'] = MessageShape; + + // New Actor Shape + function UmlActorShape() { }; + UmlActorShape.prototype = new mxCylinder(); + UmlActorShape.prototype.constructor = UmlActorShape; + UmlActorShape.prototype.addPipe = true; + UmlActorShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var width = w / 3; + var height = h / 4; + + if (!isForeground) + { + path.moveTo(w / 2, height); + path.curveTo(w / 2 - width, height, w / 2 - width, 0, w / 2, 0); + path.curveTo(w / 2 + width, 0, w / 2 + width, height, w / 2, height); + path.close(); + + path.moveTo(w / 2, height); + path.lineTo(w / 2, 2 * h / 3); + + // Arms + path.moveTo(w / 2, h / 3); + path.lineTo(0, h / 3); + path.moveTo(w / 2, h / 3); + path.lineTo(w, h / 3); + + // Legs + path.moveTo(w / 2, 2 * h / 3); + path.lineTo(0, h); + path.moveTo(w / 2, 2 * h / 3); + path.lineTo(w, h); + path.end(); + } + }; + + // Replaces existing actor shape + mxCellRenderer.prototype.defaultShapes['umlActor'] = UmlActorShape; + + // New Actor Shape + function LollipopShape() { }; + LollipopShape.prototype = new mxCylinder(); + LollipopShape.prototype.constructor = LollipopShape; + LollipopShape.prototype.size = 10; + LollipopShape.prototype.addPipe = true; + LollipopShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var ss = mxUtils.getValue(this.style, 'size', this.size); + var width = ss * 2 / 3; + var height = ss; + + if (!isForeground) + { + path.moveTo(w / 2, height); + path.curveTo(w / 2 - width, height, w / 2 - width, 0, w / 2, 0); + path.curveTo(w / 2 + width, 0, w / 2 + width, height, w / 2, height); + path.close(); + + path.moveTo(w / 2, height); + path.lineTo(w / 2, h); + path.end(); + } + }; + + // Replaces existing actor shape + mxCellRenderer.prototype.defaultShapes['lollipop'] = LollipopShape; + + // Folder Shape, supports tabWidth, tabHeight styles + function ComponentShape() { }; + ComponentShape.prototype = new mxCylinder(); + ComponentShape.prototype.constructor = ComponentShape; + ComponentShape.prototype.jettyWidth = 32; + ComponentShape.prototype.jettyHeight = 12; + ComponentShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var dx = mxUtils.getValue(this.style, 'jettyWidth', this.jettyWidth); + var dy = mxUtils.getValue(this.style, 'jettyHeight', this.jettyHeight); + var x0 = dx / 2; + var x1 = x0 + dx / 2; + var y0 = 0.3 * h - dy / 2; + var y1 = 0.7 * h - dy / 2; + + if (isForeground) + { + path.moveTo(x0, y0); + path.lineTo(x1, y0); + path.lineTo(x1, y0 + dy); + path.lineTo(x0, y0 + dy); + path.moveTo(x0, y1); + path.lineTo(x1, y1); + path.lineTo(x1, y1 + dy); + path.lineTo(x0, y1 + dy); + path.end(); + } + else + { + path.moveTo(x0, 0); + path.lineTo(w, 0); + path.lineTo(w, h); + path.lineTo(x0, h); + path.lineTo(x0, y1 + dy); + path.lineTo(0, y1 + dy); + path.lineTo(0, y1); + path.lineTo(x0, y1); + path.lineTo(x0, y0 + dy); + path.lineTo(0, y0 + dy); + path.lineTo(0, y0); + path.lineTo(x0, y0); + path.close(); + path.end(); + } + }; + + mxCellRenderer.prototype.defaultShapes['component'] = ComponentShape; + + // State Shapes derives from double ellipse + function StateShape() { }; + StateShape.prototype = new mxDoubleEllipse(); + StateShape.prototype.constructor = StateShape; + StateShape.prototype.outerStroke = true; + StateShape.prototype.paintVertexShape = function(c, x, y, w, h) + { + var inset = Math.min(4, Math.min(w / 5, h / 5)); + + if (w > 0 && h > 0) + { + c.ellipse(x + inset, y + inset, w - 2 * inset, h - 2 * inset); + c.fillAndStroke(); + } + + c.setShadow(false); + + if (this.outerStroke) + { + c.ellipse(x, y, w, h); + c.stroke(); + } + }; + + mxCellRenderer.prototype.defaultShapes['endState'] = StateShape; + + function StartStateShape() { }; + StartStateShape.prototype = new StateShape(); + StartStateShape.prototype.constructor = StartStateShape; + StartStateShape.prototype.outerStroke = false; + + mxCellRenderer.prototype.defaultShapes['startState'] = StartStateShape; + + // Image export for state shapes + var imageExportInitShapes = mxImageExport.prototype.initShapes; + mxImageExport.prototype.initShapes = function() + { + imageExportInitShapes.apply(this, arguments); + + function createStateShape(outerStroke) + { + return { + drawShape: function(canvas, state, bounds, background) + { + var x = bounds.x; + var y = bounds.y; + var w = bounds.width; + var h = bounds.height; + + if (background) + { + var inset = Math.min(4, Math.min(w / 5, h / 5)); + x += inset; + y += inset; + w -= 2 * inset; + h -= 2 * inset; + + if (w > 0 && h > 0) + { + canvas.ellipse(x, y, w, h); + } + + return true; + } + else + { + canvas.fillAndStroke(); + + if (outerStroke) + { + canvas.ellipse(x, y, w, h); + canvas.stroke(); + } + } + } + }; + }; + + this.shapes['endState'] = createStateShape(true); + this.shapes['startState'] = createStateShape(false); + }; + + // Defines custom edge shape + function LinkShape() + { + mxArrow.call(this); + }; + mxUtils.extend(LinkShape, mxArrow); + LinkShape.prototype.paintEdgeShape = function(c, pts) + { + var width = 10; + + // Base vector (between end points) + var p0 = pts[0]; + var pe = pts[pts.length - 1]; + + var dx = pe.x - p0.x; + var dy = pe.y - p0.y; + var dist = Math.sqrt(dx * dx + dy * dy); + var length = dist; + + // Computes the norm and the inverse norm + var nx = dx / dist; + var ny = dy / dist; + var basex = length * nx; + var basey = length * ny; + var floorx = width * ny/3; + var floory = -width * nx/3; + + // Computes points + var p0x = p0.x - floorx / 2; + var p0y = p0.y - floory / 2; + var p1x = p0x + floorx; + var p1y = p0y + floory; + var p2x = p1x + basex; + var p2y = p1y + basey; + var p3x = p2x + floorx; + var p3y = p2y + floory; + // p4 not necessary + var p5x = p3x - 3 * floorx; + var p5y = p3y - 3 * floory; + + c.begin(); + c.moveTo(p1x, p1y); + c.lineTo(p2x, p2y); + c.moveTo(p5x + floorx, p5y + floory); + c.lineTo(p0x, p0y); + c.stroke(); + }; + + // Registers the link shape + mxCellRenderer.prototype.defaultShapes['link'] = LinkShape; + + // Registers and defines the custom marker + mxMarker.addMarker('dash', function(canvas, shape, type, pe, unitX, unitY, size, source, sw, filled) + { + var nx = unitX * (size + sw + 1); + var ny = unitY * (size + sw + 1); + + return function() + { + canvas.begin(); + canvas.moveTo(pe.x - nx / 2 - ny / 2, pe.y - ny / 2 + nx / 2); + canvas.lineTo(pe.x + ny / 2 - 3 * nx / 2, pe.y - 3 * ny / 2 - nx / 2); + canvas.stroke(); + }; + }); + + // Implements custom handlers + var SPECIAL_HANDLE_INDEX = -99; + + // Handlers are only added if mxVertexHandler is defined (ie. not in embedded graph) + if (typeof(mxVertexHandler) != 'undefined') + { + function mxExtVertexHandler(state) + { + mxVertexHandler.call(this, state); + }; + + mxUtils.extend(mxExtVertexHandler, mxVertexHandler); + + mxExtVertexHandler.prototype.useGridForSpecialHandle = false; + + mxExtVertexHandler.prototype.init = function() + { + this.horizontal = mxUtils.getValue(this.state.style, mxConstants.STYLE_HORIZONTAL, true); + var graph = this.state.view.graph; + + if (this.handleImage != null) + { + var bounds = new mxRectangle(0, 0, this.handleImage.width, this.handleImage.height); + this.specialHandle = new mxImageShape(bounds, this.handleImage.src); + } + else + { + var size = 10; + var bounds = new mxRectangle(0, 0, size, size); + this.specialHandle = new mxRhombus(bounds, mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR); + } + + this.specialHandle.dialect = (graph.dialect != mxConstants.DIALECT_SVG) ? + mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG; + this.specialHandle.init(graph.getView().getOverlayPane()); + this.specialHandle.node.style.cursor = this.getSpecialHandleCursor(); + + mxEvent.redirectMouseEvents(this.specialHandle.node, graph, this.state); + mxVertexHandler.prototype.init.apply(this, arguments); + }; + + mxExtVertexHandler.prototype.getSpecialHandleCursor = function() + { + return 'default'; + }; + + mxExtVertexHandler.prototype.redraw = function() + { + mxVertexHandler.prototype.redraw.apply(this, arguments); + + var size = this.specialHandle.bounds.width; + this.specialHandle.bounds = this.getSpecialHandleBounds(size); + this.specialHandle.redraw(); + }; + + mxExtVertexHandler.prototype.destroy = function() + { + mxVertexHandler.prototype.destroy.apply(this, arguments); + + if (this.specialHandle != null) + { + this.specialHandle.destroy(); + this.specialHandle = null; + } + }; + + mxExtVertexHandler.prototype.getHandleForEvent = function(me) + { + if (me.isSource(this.specialHandle)) + { + return SPECIAL_HANDLE_INDEX; + } + + return mxVertexHandler.prototype.getHandleForEvent.apply(this, arguments); + }; + + mxExtVertexHandler.prototype.mouseMove = function(sender, me) + { + if (!me.isConsumed() && this.index == SPECIAL_HANDLE_INDEX) + { + var point = new mxPoint(me.getGraphX(), me.getGraphY()); + this.constrainPoint(point); + var gridEnabled = this.graph.isGridEnabledEvent(me.getEvent()); + var scale = this.graph.getView().scale; + + if (gridEnabled && this.useGridForSpecialHandle) + { + point.x = this.graph.snap(point.x / scale) * scale; + point.y = this.graph.snap(point.y / scale) * scale; + } + + this.updateStyle(point); + this.moveSizerTo(this.specialHandle, point.x, point.y); + this.state.view.graph.cellRenderer.redraw(this.state, true); + me.consume(); + } + else + { + mxVertexHandler.prototype.mouseMove.apply(this, arguments); + } + }; + + mxExtVertexHandler.prototype.mouseUp = function(sender, me) + { + if (!me.isConsumed() && this.index == SPECIAL_HANDLE_INDEX) + { + this.applyStyle(); + this.reset(); + me.consume(); + } + else + { + mxVertexHandler.prototype.mouseUp.apply(this, arguments); + } + }; + + mxExtVertexHandler.prototype.getSpecialHandleBounds = function(size) + { + var rotation = this.state.shape.getShapeRotation(); + var alpha = mxUtils.toRadians(rotation); + var cos = Math.cos(alpha); + var sin = Math.sin(alpha); + + var bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height); + + if (this.state.shape.isPaintBoundsInverted()) + { + var t = (bounds.width - bounds.height) / 2; + bounds.x += t; + bounds.y -= t; + var tmp = bounds.width; + bounds.width = bounds.height; + bounds.height = tmp; + } + + var pt = this.getSpecialHandlePoint(bounds); + + if (this.state.shape.flipH) + { + pt.x = 2 * bounds.x + bounds.width - pt.x; + } + + if (this.state.shape.flipV) + { + pt.y = 2 * bounds.y + bounds.height - pt.y; + } + + pt = mxUtils.getRotatedPoint(pt, cos, sin, + new mxPoint(this.state.getCenterX(), this.state.getCenterY())); + + return new mxRectangle(pt.x - size / 2, pt.y - size / 2, size, size); + }; + + mxExtVertexHandler.prototype.getSpecialHandlePoint = function(bounds) + { + // Hook for subclassers + return null; + }; + + mxExtVertexHandler.prototype.updateStyle = function(point) + { + // Hook for subclassers + }; + + mxExtVertexHandler.prototype.constrainPoint = function(point) + { + point.x = Math.max(this.state.x, Math.min(this.state.x + this.state.width, point.x)); + point.y = Math.max(this.state.y, Math.min(this.state.y + this.state.height, point.y)); + }; + + mxExtVertexHandler.prototype.applyStyle = function() + { + // Hook for subclassers + }; + + // Folder Handler + function mxFolderHandler(state) + { + mxExtVertexHandler.call(this, state); + }; + + mxUtils.extend(mxFolderHandler, mxExtVertexHandler); + + mxFolderHandler.prototype.getSpecialHandlePoint = function(bounds) + { + var scale = this.graph.getView().scale; + var tw = Math.min(bounds.width, mxUtils.getValue(this.state.style, 'tabWidth', 60) * scale); + var th = Math.min(bounds.height, mxUtils.getValue(this.state.style, 'tabHeight', 20) * scale); + + var tp = mxUtils.getValue(this.state.style, 'tabPosition', 'right'); + var x = (tp == 'left') ? bounds.x + tw : bounds.x + bounds.width - tw; + + return new mxPoint(x, bounds.y + th); + }; + + mxFolderHandler.prototype.updateStyle = function(point) + { + var rotation = this.state.shape.getShapeRotation(); + var alpha = mxUtils.toRadians(rotation); + var cos = Math.cos(-alpha); + var sin = Math.sin(-alpha); + + var bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height); + + if (this.state.shape.isPaintBoundsInverted()) + { + var t = (bounds.width - bounds.height) / 2; + bounds.x += t; + bounds.y -= t; + var tmp = bounds.width; + bounds.width = bounds.height; + bounds.height = tmp; + } + + var pt = new mxPoint(point.x, point.y); + pt = mxUtils.getRotatedPoint(pt, cos, sin, + new mxPoint(this.state.getCenterX(), this.state.getCenterY())); + + if (this.state.shape.flipH) + { + pt.x = 2 * bounds.x + bounds.width - pt.x; + } + + if (this.state.shape.flipV) + { + pt.y = 2 * bounds.y + bounds.height - pt.y; + } + + var result = this.updateStyleUnrotated(pt, bounds); + + // Modifies point to use rotated coordinates of return value + if (result != null) + { + if (this.state.shape.flipH) + { + result.x = 2 * bounds.x + bounds.width - result.x; + } + + if (this.state.shape.flipV) + { + result.y = 2 * bounds.y + bounds.height - result.y; + } + + cos = Math.cos(alpha); + sin = Math.sin(alpha); + result = mxUtils.getRotatedPoint(result, cos, sin, + new mxPoint(this.state.getCenterX(), this.state.getCenterY())); + point.x = result.x; + point.y = result.y; + } + }; + + mxFolderHandler.prototype.updateStyleUnrotated = function(pt, bounds) + { + var tp = mxUtils.getValue(this.state.style, 'tabPosition', 'right'); + var tw = (tp == 'left') ? pt.x - bounds.x : bounds.x + bounds.width - pt.x; + var th = pt.y - bounds.y; + + var scale = this.graph.getView().scale; + this.state.style['tabWidth'] = Math.round(Math.max(1, tw) / scale); + this.state.style['tabHeight'] = Math.round(Math.max(1, th) / scale); + }; + + mxFolderHandler.prototype.applyStyle = function() + { + var model = this.graph.getModel(); + model.beginUpdate(); + try + { + this.state.view.graph.setCellStyles('tabWidth', this.state.style['tabWidth'], [this.state.cell]); + this.state.view.graph.setCellStyles('tabHeight', this.state.style['tabHeight'], [this.state.cell]); + } + finally + { + model.endUpdate(); + } + }; + + // Swimlane Handler + function mxSwimlaneHandler(state) + { + mxFolderHandler.call(this, state); + }; + + mxUtils.extend(mxSwimlaneHandler, mxFolderHandler); + + mxSwimlaneHandler.prototype.getSpecialHandlePoint = function(bounds) + { + var scale = this.graph.getView().scale; + var startSize = mxUtils.getValue(this.state.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE); + + return new mxPoint(bounds.x + bounds.width / 2, bounds.y + Math.min(bounds.height, startSize * scale)); + }; + + mxSwimlaneHandler.prototype.updateStyleUnrotated = function(point, bounds) + { + point.x = bounds.x + bounds.width / 2; + startSize = point.y - bounds.y; + var scale = this.graph.getView().scale; + this.state.style['startSize'] = Math.round(Math.max(1, startSize) / scale); + + return point; + }; + + mxSwimlaneHandler.prototype.applyStyle = function() + { + this.state.view.graph.setCellStyles('startSize', this.state.style['startSize'], [this.state.cell]); + }; + + // Cube Handler + function mxCubeHandler(state) + { + mxFolderHandler.call(this, state); + }; + + mxUtils.extend(mxCubeHandler, mxFolderHandler); + + mxCubeHandler.prototype.defaultValue = 20; + + mxCubeHandler.prototype.scaleFactor = 1; + + mxCubeHandler.prototype.getSpecialHandlePoint = function(bounds) + { + var scale = this.graph.getView().scale; + var sz = Math.min(bounds.width, Math.min(bounds.height, + mxUtils.getValue(this.state.style, 'size', this.defaultValue) * scale / this.scaleFactor)); + + return new mxPoint(bounds.x + sz, bounds.y + sz); + }; + + mxCubeHandler.prototype.updateStyleUnrotated = function(pt, bounds) + { + var size = Math.max(0, Math.min(Math.min(bounds.width / this.scaleFactor, pt.x - bounds.x), + Math.min(bounds.height / this.scaleFactor, pt.y - bounds.y))); + var scale = this.graph.getView().scale; + this.state.style['size'] = Math.round(Math.max(1, size) / scale) * this.scaleFactor; + + // Stays on the diagonal + return new mxPoint(bounds.x + size, bounds.y + size); + }; + + mxCubeHandler.prototype.applyStyle = function() + { + this.state.view.graph.setCellStyles('size', this.state.style['size'], [this.state.cell]); + }; + + // Card Handler + function mxCardHandler(state) + { + mxCubeHandler.call(this, state); + }; + + mxUtils.extend(mxCardHandler, mxCubeHandler); + + mxCardHandler.prototype.defaultValue = 30; + + mxCardHandler.prototype.scaleFactor = 2; + + // Note Handler + function mxNoteHandler(state) + { + mxCubeHandler.call(this, state); + }; + + mxUtils.extend(mxNoteHandler, mxCubeHandler); + + mxNoteHandler.prototype.defaultValue = 30; + + mxNoteHandler.prototype.scaleFactor = 1; + + mxNoteHandler.prototype.getSpecialHandlePoint = function(bounds) + { + var scale = this.graph.getView().scale; + var sz = Math.min(bounds.width, Math.min(bounds.height, + mxUtils.getValue(this.state.style, 'size', this.defaultValue) * scale / this.scaleFactor)); + + return new mxPoint(bounds.x + bounds.width - sz, bounds.y + sz); + }; + + mxNoteHandler.prototype.updateStyleUnrotated = function(pt, bounds) + { + var size = Math.max(0, Math.min(Math.min(bounds.width / this.scaleFactor, pt.x - bounds.x + bounds.width), + Math.min(bounds.height / this.scaleFactor, pt.y - bounds.y))); + var scale = this.graph.getView().scale; + this.state.style['size'] = Math.round(Math.max(1, size) / scale) * this.scaleFactor; + + // Stays on the diagonal + return new mxPoint(bounds.x + bounds.width - size, bounds.y + size); + }; + + // Step Handler + function mxStepHandler(state) + { + mxCubeHandler.call(this, state); + }; + + mxUtils.extend(mxStepHandler, mxCubeHandler); + + mxStepHandler.prototype.defaultValue = 0.2; + + mxStepHandler.prototype.scaleFactor = 1; + + mxStepHandler.prototype.getSpecialHandlePoint = function(bounds) + { + var sz = mxUtils.getValue(this.state.style, 'size', this.defaultValue); + + return new mxPoint(bounds.x + bounds.width * sz, bounds.y + bounds.height / 2); + }; + + mxStepHandler.prototype.updateStyleUnrotated = function(pt, bounds) + { + var size = Math.min(1, (pt.x - bounds.x) / bounds.width); + this.state.style['size'] = size; + + return new mxPoint(bounds.x + size * bounds.width, bounds.y + bounds.height / 2); + }; + + // Tape Handler + function mxTapeHandler(state) + { + mxCubeHandler.call(this, state); + }; + + mxUtils.extend(mxTapeHandler, mxCubeHandler); + + mxTapeHandler.prototype.defaultValue = 0.4; + + mxTapeHandler.prototype.scaleFactor = 1; + + mxTapeHandler.prototype.getSpecialHandlePoint = function(bounds) + { + var sz = mxUtils.getValue(this.state.style, 'size', this.defaultValue); + + return new mxPoint(bounds.x + bounds.width / 2, bounds.y + sz * bounds.height / 2); + }; + + mxTapeHandler.prototype.updateStyleUnrotated = function(pt, bounds) + { + var size = Math.max(0, Math.min(1, ((pt.y - bounds.y) / bounds.height) * 2)); + this.state.style['size'] = size; + + return new mxPoint(bounds.x + bounds.width / 2, bounds.y + size * bounds.height / 2); + }; + + var handlers = {'swimlane': mxSwimlaneHandler, 'folder': mxFolderHandler, 'cube': mxCubeHandler, + 'card': mxCardHandler, 'note': mxNoteHandler, 'step': mxStepHandler, 'tape': mxTapeHandler}; + + var mxGraphCreateHandler = mxGraph.prototype.createHandler; + mxGraph.prototype.createHandler = function(state) + { + if (state != null) + { + var ctor = handlers[state.style['shape']]; + + if (ctor != null) + { + return new ctor(state); + } + } + + return mxGraphCreateHandler.apply(this, arguments); + }; + } + + // Constraints + mxGraph.prototype.getAllConnectionConstraints = function(terminal, source) + { + if (terminal != null && terminal.shape != null) + { + if (terminal.shape.stencil != null) + { + if (terminal.shape.stencil != null) + { + return terminal.shape.stencil.constraints; + } + } + else if (terminal.shape.constraints != null) + { + return terminal.shape.constraints; + } + } + + return null; + }; + + mxRectangleShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true), + new mxConnectionConstraint(new mxPoint(0.5, 0), true), + new mxConnectionConstraint(new mxPoint(0.75, 0), true), + new mxConnectionConstraint(new mxPoint(0, 0.25), true), + new mxConnectionConstraint(new mxPoint(0, 0.5), true), + new mxConnectionConstraint(new mxPoint(0, 0.75), true), + new mxConnectionConstraint(new mxPoint(1, 0.25), true), + new mxConnectionConstraint(new mxPoint(1, 0.5), true), + new mxConnectionConstraint(new mxPoint(1, 0.75), true), + new mxConnectionConstraint(new mxPoint(0.25, 1), true), + new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(0.75, 1), true)]; + mxLabel.prototype.constraints = mxRectangleShape.prototype.constraints; + mxImageShape.prototype.constraints = mxRectangleShape.prototype.constraints; + mxSwimlane.prototype.constraints = mxRectangleShape.prototype.constraints; + PlusShape.prototype.constraints = mxRectangleShape.prototype.constraints; + NoteShape.prototype.constraints = mxRectangleShape.prototype.constraints; + CardShape.prototype.constraints = mxRectangleShape.prototype.constraints; + CubeShape.prototype.constraints = mxRectangleShape.prototype.constraints; + FolderShape.prototype.constraints = mxRectangleShape.prototype.constraints; + mxCylinder.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.15, 0.05), false), + new mxConnectionConstraint(new mxPoint(0.5, 0), true), + new mxConnectionConstraint(new mxPoint(0.85, 0.05), false), + new mxConnectionConstraint(new mxPoint(0, 0.3), true), + new mxConnectionConstraint(new mxPoint(0, 0.5), true), + new mxConnectionConstraint(new mxPoint(0, 0.7), true), + new mxConnectionConstraint(new mxPoint(1, 0.3), true), + new mxConnectionConstraint(new mxPoint(1, 0.5), true), + new mxConnectionConstraint(new mxPoint(1, 0.7), true), + new mxConnectionConstraint(new mxPoint(0.15, 0.95), false), + new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(0.85, 0.95), false)]; + UmlActorShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0.1), false), + new mxConnectionConstraint(new mxPoint(0.5, 0), false), + new mxConnectionConstraint(new mxPoint(0.75, 0.1), false), + new mxConnectionConstraint(new mxPoint(0, 1/3), false), + new mxConnectionConstraint(new mxPoint(0, 1), false), + new mxConnectionConstraint(new mxPoint(1, 1/3), false), + new mxConnectionConstraint(new mxPoint(1, 1), false), + new mxConnectionConstraint(new mxPoint(0.5, 0.5), false)]; + ComponentShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true), + new mxConnectionConstraint(new mxPoint(0.5, 0), true), + new mxConnectionConstraint(new mxPoint(0.75, 0), true), + new mxConnectionConstraint(new mxPoint(0, 0.3), true), + new mxConnectionConstraint(new mxPoint(0, 0.7), true), + new mxConnectionConstraint(new mxPoint(1, 0.25), true), + new mxConnectionConstraint(new mxPoint(1, 0.5), true), + new mxConnectionConstraint(new mxPoint(1, 0.75), true), + new mxConnectionConstraint(new mxPoint(0.25, 1), true), + new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(0.75, 1), true)]; + mxActor.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.5, 0), true), + new mxConnectionConstraint(new mxPoint(0.25, 0.2), false), + new mxConnectionConstraint(new mxPoint(0.1, 0.5), false), + new mxConnectionConstraint(new mxPoint(0, 0.75), true), + new mxConnectionConstraint(new mxPoint(0.75, 0.25), false), + new mxConnectionConstraint(new mxPoint(0.9, 0.5), false), + new mxConnectionConstraint(new mxPoint(1, 0.75), true), + new mxConnectionConstraint(new mxPoint(0.25, 1), true), + new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(0.75, 1), true)]; + TapeShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.35), false), + new mxConnectionConstraint(new mxPoint(0, 0.5), false), + new mxConnectionConstraint(new mxPoint(0, 0.65), false), + new mxConnectionConstraint(new mxPoint(1, 0.35), false), + new mxConnectionConstraint(new mxPoint(1, 0.5), false), + new mxConnectionConstraint(new mxPoint(1, 0.65), false), + new mxConnectionConstraint(new mxPoint(0.25, 1), false), + new mxConnectionConstraint(new mxPoint(0.75, 0), false)]; + // TODO: Relative ports + StepShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true), + new mxConnectionConstraint(new mxPoint(0.5, 0), true), + new mxConnectionConstraint(new mxPoint(0.75, 0), true), + new mxConnectionConstraint(new mxPoint(0.25, 1), true), + new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(0.75, 1), true), + new mxConnectionConstraint(new mxPoint(0.1, 0.25), false), + new mxConnectionConstraint(new mxPoint(0.2, 0.5), false), + new mxConnectionConstraint(new mxPoint(0.1, 0.75), false), + new mxConnectionConstraint(new mxPoint(0.9, 0.25), false), + new mxConnectionConstraint(new mxPoint(1, 0.5), false), + new mxConnectionConstraint(new mxPoint(0.9, 0.75), false)]; + mxLine.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.5), false), + new mxConnectionConstraint(new mxPoint(0.25, 0.5), false), + new mxConnectionConstraint(new mxPoint(0.75, 0.5), false), + new mxConnectionConstraint(new mxPoint(1, 0.5), false)]; + LollipopShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.5, 0), false), + new mxConnectionConstraint(new mxPoint(0.5, 1), false)]; + mxEllipse.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0), true), new mxConnectionConstraint(new mxPoint(1, 0), true), + new mxConnectionConstraint(new mxPoint(0, 1), true), new mxConnectionConstraint(new mxPoint(1, 1), true), + new mxConnectionConstraint(new mxPoint(0.5, 0), true), new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(0, 0.5), true), new mxConnectionConstraint(new mxPoint(1, 0.5))]; + mxDoubleEllipse.prototype.constraints = mxEllipse.prototype.constraints; + mxRhombus.prototype.constraints = mxEllipse.prototype.constraints; + mxTriangle.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.25), true), + new mxConnectionConstraint(new mxPoint(0, 0.5), true), + new mxConnectionConstraint(new mxPoint(0, 0.75), true), + new mxConnectionConstraint(new mxPoint(0.5, 0), true), + new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(1, 0.5), true)]; + mxHexagon.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.375, 0), true), + new mxConnectionConstraint(new mxPoint(0.5, 0), true), + new mxConnectionConstraint(new mxPoint(0.625, 0), true), + new mxConnectionConstraint(new mxPoint(0.125, 0.25), false), + new mxConnectionConstraint(new mxPoint(0, 0.5), true), + new mxConnectionConstraint(new mxPoint(0.125, 0.75), false), + new mxConnectionConstraint(new mxPoint(0.875, 0.25), false), + new mxConnectionConstraint(new mxPoint(0, 0.5), true), + new mxConnectionConstraint(new mxPoint(1, 0.5), true), + new mxConnectionConstraint(new mxPoint(0.875, 0.75), false), + new mxConnectionConstraint(new mxPoint(0.375, 1), true), + new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(0.625, 1), true)]; + mxCloud.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0.25), false), + new mxConnectionConstraint(new mxPoint(0.4, 0.1), false), + new mxConnectionConstraint(new mxPoint(0.16, 0.55), false), + new mxConnectionConstraint(new mxPoint(0.07, 0.4), false), + new mxConnectionConstraint(new mxPoint(0.31, 0.8), false), + new mxConnectionConstraint(new mxPoint(0.13, 0.77), false), + new mxConnectionConstraint(new mxPoint(0.8, 0.8), false), + new mxConnectionConstraint(new mxPoint(0.55, 0.95), false), + new mxConnectionConstraint(new mxPoint(0.875, 0.5), false), + new mxConnectionConstraint(new mxPoint(0.96, 0.7), false), + new mxConnectionConstraint(new mxPoint(0.625, 0.2), false), + new mxConnectionConstraint(new mxPoint(0.88, 0.25), false)]; + mxArrow.prototype.constraints = null; +})(); diff --git a/public/assets/plugins/jscripty/js/Sidebar.js b/public/assets/plugins/jscripty/js/Sidebar.js index 2fa8f36..8b618e6 100644 --- a/public/assets/plugins/jscripty/js/Sidebar.js +++ b/public/assets/plugins/jscripty/js/Sidebar.js @@ -1 +1,793 @@ -var _0x8179=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x64\x69\x74\x6F\x72\x55\x69","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x70\x61\x6C\x65\x74\x74\x65\x73","\x73\x68\x6F\x77\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x67\x72\x61\x70\x68","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x65\x64\x69\x74\x6F\x72","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x61\x75\x74\x6F\x53\x63\x72\x6F\x6C\x6C","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x73\x74\x79\x6C\x65","\x68\x69\x64\x64\x65\x6E","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x62\x6F\x64\x79","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x6D\x6F\x75\x73\x65\x75\x70","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x73\x63\x72\x6F\x6C\x6C","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x68\x69\x64\x65\x54\x6F\x6F\x6C\x74\x69\x70","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x67\x65\x74\x53\x6F\x75\x72\x63\x65","\x63\x75\x72\x72\x65\x6E\x74\x45\x6C\x74","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x6D\x6F\x75\x73\x65\x6F\x75\x74","\x74\x6F\x45\x6C\x65\x6D\x65\x6E\x74","\x72\x65\x6C\x61\x74\x65\x64\x54\x61\x72\x67\x65\x74","\x69\x6E\x69\x74","\x73\x72\x63","\x2F\x74\x6F\x6F\x6C\x74\x69\x70\x2E\x70\x6E\x67","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x6C\x6F\x67","\x65\x6E\x74\x72\x79","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x67\x65\x74","\x2F","\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67","\x73\x74\x61\x72\x74","\x71\x75\x65\x73\x74\x69\x6F\x6E","\x69\x6E\x70\x75\x74","\x65\x6E\x64","\x61\x64\x64\x49\x6D\x61\x67\x65\x50\x61\x6C\x65\x74\x74\x65","\x65\x6E\x61\x62\x6C\x65\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x42\x6F\x72\x64\x65\x72","\x74\x68\x75\x6D\x62\x42\x6F\x72\x64\x65\x72","\x74\x6F\x6F\x6C\x74\x69\x70\x44\x65\x6C\x61\x79","\x69\x6E\x73\x74\x61\x6C\x6C\x45\x64\x67\x65\x73","\x67\x65\x61\x72\x49\x6D\x61\x67\x65","\x2F\x63\x6C\x69\x70\x61\x72\x74\x2F\x47\x65\x61\x72\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67","\x74\x68\x75\x6D\x62\x57\x69\x64\x74\x68","\x74\x68\x75\x6D\x62\x48\x65\x69\x67\x68\x74","\x74\x68\x75\x6D\x62\x50\x61\x64\x64\x69\x6E\x67","\x73\x69\x64\x65\x62\x61\x72\x54\x69\x74\x6C\x65\x53\x69\x7A\x65","\x73\x69\x64\x65\x62\x61\x72\x54\x69\x74\x6C\x65\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x54\x69\x74\x6C\x65\x73","\x73\x68\x6F\x77\x54\x6F\x6F\x6C\x74\x69\x70","\x74\x68\x72\x65\x61\x64","\x63\x6C\x65\x61\x72\x54\x69\x6D\x65\x6F\x75\x74","\x74\x6F\x6F\x6C\x74\x69\x70","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x53\x69\x64\x65\x62\x61\x72\x54\x6F\x6F\x6C\x74\x69\x70","\x67\x72\x61\x70\x68\x32","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x76\x69\x65\x77","\x49\x53\x5F\x53\x56\x47","\x63\x61\x6E\x76\x61\x73","\x72\x65\x6C\x61\x74\x69\x76\x65","\x74\x6F\x6F\x6C\x74\x69\x70\x49\x6D\x61\x67\x65","\x63\x72\x65\x61\x74\x65\x49\x6D\x61\x67\x65","\x77\x69\x64\x74\x68","\x31\x34\x70\x78","\x68\x65\x69\x67\x68\x74","\x32\x37\x70\x78","\x64\x69\x73\x70\x6C\x61\x79","\x62\x6C\x6F\x63\x6B","\x6C\x61\x62\x65\x6C\x73\x56\x69\x73\x69\x62\x6C\x65","\x63\x6C\x65\x61\x72","\x6D\x6F\x64\x65\x6C","\x61\x64\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x76\x69\x73\x69\x62\x6C\x65","\x70\x78","\x6C\x65\x6E\x67\x74\x68","\x74\x6F\x6F\x6C\x74\x69\x70\x54\x69\x74\x6C\x65","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70","\x31\x70\x78\x20\x73\x6F\x6C\x69\x64\x20\x67\x72\x61\x79","\x74\x65\x78\x74\x41\x6C\x69\x67\x6E","\x63\x65\x6E\x74\x65\x72","\x31\x30\x30\x25","\x70\x61\x64\x64\x69\x6E\x67\x54\x6F\x70","\x32\x70\x78","\x36\x70\x78","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","","\x77\x72\x69\x74\x65","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x74\x6F\x70","\x6E\x6F\x6E\x65","\x78","\x6D\x69\x6E","\x79","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x73\x70\x6C\x69\x74\x53\x69\x7A\x65","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x6D\x61\x78","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28","\x2C","\x29","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6C\x65\x66\x74","\x64\x72\x61\x77\x50\x61\x6E\x65","\x73\x65\x74\x54\x69\x6D\x65\x6F\x75\x74","\x63\x72\x65\x61\x74\x65\x54\x69\x74\x6C\x65","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x67\x65\x54\x69\x74\x6C\x65","\x63\x72\x65\x61\x74\x65\x54\x68\x75\x6D\x62","\x73\x63\x61\x6C\x65\x41\x6E\x64\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x66\x6C\x6F\x6F\x72","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x4E\x4F\x5F\x46\x4F","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x6F\x77\x6E\x65\x72\x53\x56\x47\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x43\x61\x6E\x76\x61\x73","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x49\x53\x5F\x49\x45\x36","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x49\x6D\x61\x67\x65","\x63\x75\x72\x73\x6F\x72","\x70\x6F\x69\x6E\x74\x65\x72","\x6D\x69\x6E\x57\x69\x64\x74\x68","\x6D\x69\x6E\x48\x65\x69\x67\x68\x74","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x6E\x6F\x77\x72\x61\x70","\x49\x53\x5F\x49\x45","\x34\x70\x78","\x63\x72\x65\x61\x74\x65\x49\x74\x65\x6D","\x67\x65\x49\x74\x65\x6D","\x70\x61\x64\x64\x69\x6E\x67","\x63\x6C\x69\x63\x6B","\x63\x6F\x6E\x73\x75\x6D\x65","\x63\x72\x65\x61\x74\x65\x44\x72\x6F\x70\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x49\x6D\x70\x6F\x72\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x73\x56\x61\x6C\x69\x64\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x69\x73\x53\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x70\x6C\x69\x74\x54\x61\x72\x67\x65\x74","\x73\x70\x6C\x69\x74\x45\x64\x67\x65","\x69\x6D\x70\x6F\x72\x74\x43\x65\x6C\x6C\x73","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x50\x72\x65\x76\x69\x65\x77","\x62\x6F\x72\x64\x65\x72","\x31\x70\x78\x20\x64\x61\x73\x68\x65\x64\x20\x62\x6C\x61\x63\x6B","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x53\x6F\x75\x72\x63\x65","\x61\x75\x74\x6F\x73\x63\x72\x6F\x6C\x6C","\x6D\x61\x6B\x65\x44\x72\x61\x67\x67\x61\x62\x6C\x65","\x67\x65\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x61\x70\x70\x6C\x79","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x61\x64\x64\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x6D\x6F\x75\x73\x65\x55\x70","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x63\x75\x72\x72\x65\x6E\x74\x47\x72\x61\x70\x68","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x61\x62\x73","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x64\x72\x6F\x70","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6C\x61\x62\x65\x6C","\x66\x6F\x72\x45\x61\x63\x68","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78\x54\x65\x6D\x70\x6C\x61\x74\x65","\x69\x64","\x74\x65\x78\x74","\x73\x74\x61\x74\x65","\x30","\x4F\x46\x46","\x6F\x74\x68\x65\x72","\x61\x64\x64","\x76\x65\x72\x74\x65\x78","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78\x54\x65\x6D\x70\x6C\x61\x74\x65\x46\x72\x6F\x6D\x43\x65\x6C\x6C\x73","\x69\x73\x47\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x54\x65\x6D\x70\x6C\x61\x74\x65","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x65\x64\x67\x65","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x46\x72\x6F\x6D\x43\x65\x6C\x6C\x73","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x23\x66\x66\x66\x66\x66\x66","\x61\x64\x64\x50\x61\x6C\x65\x74\x74\x65","\x67\x65\x53\x69\x64\x65\x62\x61\x72","\x61\x64\x64\x46\x6F\x6C\x64\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x2F\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x2E\x67\x69\x66\x29","\x2F\x65\x78\x70\x61\x6E\x64\x65\x64\x2E\x67\x69\x66\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x31\x30\x30\x25\x20\x35\x30\x25","\x77\x61\x69\x74","\x72\x65\x6D\x6F\x76\x65\x50\x61\x6C\x65\x74\x74\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D"];_0x8179[0];function Sidebar(_0x8af7x2,_0x8af7x3){this[_0x8179[1]]= _0x8af7x2;this[_0x8179[2]]= _0x8af7x3;this[_0x8179[3]]= new Object();this[_0x8179[4]]= true;this[_0x8179[5]]= new Graph(document[_0x8179[7]](_0x8179[6]),null,null,this[_0x8179[1]][_0x8179[9]][_0x8179[5]][_0x8179[8]]());this[_0x8179[5]][_0x8179[10]]= false;this[_0x8179[5]][_0x8179[11]]= false;this[_0x8179[5]][_0x8179[12]](false);this[_0x8179[5]][_0x8179[13]]= false;this[_0x8179[5]][_0x8179[14]](false);this[_0x8179[5]][_0x8179[15]](false);this[_0x8179[5]][_0x8179[2]][_0x8179[17]][_0x8179[16]]= _0x8179[18];this[_0x8179[5]][_0x8179[2]][_0x8179[17]][_0x8179[19]]= _0x8179[20];document[_0x8179[22]][_0x8179[21]](this[_0x8179[5]][_0x8179[2]]);if(!mxClient[_0x8179[23]]){mxEvent[_0x8179[26]](document,_0x8179[24],mxUtils[_0x8179[25]](this,function(){this[_0x8179[4]]= true}));mxEvent[_0x8179[26]](_0x8af7x3,_0x8179[27],mxUtils[_0x8179[25]](this,function(){this[_0x8179[4]]= true}));mxEvent[_0x8179[26]](document,_0x8179[28],mxUtils[_0x8179[25]](this,function(){this[_0x8179[4]]= false;this[_0x8179[29]]()}));mxEvent[_0x8179[26]](document,_0x8179[30],mxUtils[_0x8179[25]](this,function(_0x8af7x4){var _0x8af7x5=mxEvent[_0x8179[31]](_0x8af7x4);while(_0x8af7x5!= null){if(_0x8af7x5== this[_0x8179[32]]){return};_0x8af7x5= _0x8af7x5[_0x8179[33]]};this[_0x8179[29]]()}));mxEvent[_0x8179[26]](document,_0x8179[34],mxUtils[_0x8179[25]](this,function(_0x8af7x4){if(_0x8af7x4[_0x8179[35]]== null&& _0x8af7x4[_0x8179[36]]== null){this[_0x8179[29]]()}}))};this[_0x8179[37]](); new Image()[_0x8179[38]]= IMAGE_PATH+ _0x8179[39]}Sidebar[_0x8179[40]][_0x8179[37]]= function(){var _0x8af7x6=STENCIL_PATH;console[_0x8179[41]](_0x8af7x6);this[_0x8179[51]](_0x8179[42],mxResources[_0x8179[44]](_0x8179[43]),_0x8af7x6+ _0x8179[45],_0x8179[46],[_0x8179[47],_0x8179[48],_0x8179[49],_0x8179[50]],[mxResources[_0x8179[44]](_0x8179[47]),mxResources[_0x8179[44]](_0x8179[48]),mxResources[_0x8179[44]](_0x8179[49]),mxResources[_0x8179[44]](_0x8179[50])])};Sidebar[_0x8179[40]][_0x8179[52]]= !mxClient[_0x8179[23]];Sidebar[_0x8179[40]][_0x8179[53]]= 16;Sidebar[_0x8179[40]][_0x8179[54]]= 3;Sidebar[_0x8179[40]][_0x8179[55]]= 300;Sidebar[_0x8179[40]][_0x8179[56]]= true;Sidebar[_0x8179[40]][_0x8179[57]]= STENCIL_PATH+ _0x8179[58];Sidebar[_0x8179[40]][_0x8179[59]]= 34;Sidebar[_0x8179[40]][_0x8179[60]]= 34;Sidebar[_0x8179[40]][_0x8179[61]]= 2;Sidebar[_0x8179[40]][_0x8179[62]]= 9;Sidebar[_0x8179[40]][_0x8179[63]]= false;Sidebar[_0x8179[40]][_0x8179[64]]= false;Sidebar[_0x8179[40]][_0x8179[65]]= function(_0x8af7x7,_0x8af7x8,_0x8af7x9,_0x8af7xa){if(this[_0x8179[52]]&& this[_0x8179[4]]){if(this[_0x8179[32]]!= _0x8af7x7){if(this[_0x8179[66]]!= null){window[_0x8179[67]](this[_0x8179[66]]);this[_0x8179[66]]= null};var _0x8af7xb=mxUtils[_0x8179[25]](this,function(){if(this[_0x8179[68]]== null){this[_0x8179[68]]= document[_0x8179[7]](_0x8179[6]);this[_0x8179[68]][_0x8179[69]]= _0x8179[70];document[_0x8179[22]][_0x8179[21]](this[_0x8179[68]]);this[_0x8179[71]]= new Graph(this[_0x8179[68]],null,null,this[_0x8179[1]][_0x8179[9]][_0x8179[5]][_0x8179[8]]());this[_0x8179[71]][_0x8179[73]][_0x8179[72]](this[_0x8179[53]],this[_0x8179[53]]);this[_0x8179[71]][_0x8179[10]]= false;this[_0x8179[71]][_0x8179[11]]= false;this[_0x8179[71]][_0x8179[13]]= false;this[_0x8179[71]][_0x8179[14]](false);this[_0x8179[71]][_0x8179[12]](false);this[_0x8179[71]][_0x8179[15]](false);if(!mxClient[_0x8179[74]]){this[_0x8179[71]][_0x8179[73]][_0x8179[75]][_0x8179[17]][_0x8179[19]]= _0x8179[76]};this[_0x8179[77]]= mxUtils[_0x8179[78]](IMAGE_PATH+ _0x8179[39]);this[_0x8179[77]][_0x8179[17]][_0x8179[19]]= _0x8179[20];this[_0x8179[77]][_0x8179[17]][_0x8179[79]]= _0x8179[80];this[_0x8179[77]][_0x8179[17]][_0x8179[81]]= _0x8179[82];document[_0x8179[22]][_0x8179[21]](this[_0x8179[77]])};this[_0x8179[68]][_0x8179[17]][_0x8179[83]]= _0x8179[84];this[_0x8179[71]][_0x8179[85]]= (_0x8af7xa== null|| _0x8af7xa);this[_0x8179[71]][_0x8179[87]][_0x8179[86]]();this[_0x8179[71]][_0x8179[88]](_0x8af7x8);var _0x8af7xc=this[_0x8179[71]][_0x8179[89]]();var _0x8af7xd=_0x8af7xc[_0x8179[79]]+ 2* this[_0x8179[53]];var _0x8af7xe=_0x8af7xc[_0x8179[81]]+ 2* this[_0x8179[53]];if(mxClient[_0x8179[90]]){_0x8af7xd+= 4;_0x8af7xe+= 4;this[_0x8179[68]][_0x8179[17]][_0x8179[91]]= _0x8179[18]}else {this[_0x8179[68]][_0x8179[17]][_0x8179[91]]= _0x8179[92]};this[_0x8179[77]][_0x8179[17]][_0x8179[16]]= _0x8179[92];this[_0x8179[68]][_0x8179[17]][_0x8179[79]]= _0x8af7xd+ _0x8179[93];if(this[_0x8179[64]]&& _0x8af7x9!= null&& _0x8af7x9[_0x8179[94]]> 0){if(this[_0x8179[95]]== null){this[_0x8179[95]]= document[_0x8179[7]](_0x8179[6]);this[_0x8179[95]][_0x8179[17]][_0x8179[96]]= _0x8179[97];this[_0x8179[95]][_0x8179[17]][_0x8179[98]]= _0x8179[99];this[_0x8179[95]][_0x8179[17]][_0x8179[79]]= _0x8179[100];this[_0x8179[95]][_0x8179[17]][_0x8179[91]]= _0x8179[18];if(mxClient[_0x8179[74]]){this[_0x8179[95]][_0x8179[17]][_0x8179[101]]= _0x8179[102]}else {this[_0x8179[95]][_0x8179[17]][_0x8179[19]]= _0x8179[20];this[_0x8179[95]][_0x8179[17]][_0x8179[101]]= _0x8179[103]};this[_0x8179[68]][_0x8179[21]](this[_0x8179[95]])}else {this[_0x8179[95]][_0x8179[104]]= _0x8179[105]};this[_0x8179[95]][_0x8179[17]][_0x8179[83]]= _0x8179[105];mxUtils[_0x8179[106]](this[_0x8179[95]],_0x8af7x9);var _0x8af7xf=this[_0x8179[95]][_0x8179[107]]+ 10;_0x8af7xe+= _0x8af7xf;if(mxClient[_0x8179[74]]){this[_0x8179[95]][_0x8179[17]][_0x8179[108]]= (-_0x8af7xf) + _0x8179[93]}else {_0x8af7xe-= 6;this[_0x8179[95]][_0x8179[17]][_0x8179[109]]= (_0x8af7xe- _0x8af7xf)+ _0x8179[93]}}else {if(this[_0x8179[95]]!= null&& this[_0x8179[95]][_0x8179[33]]!= null){this[_0x8179[95]][_0x8179[17]][_0x8179[83]]= _0x8179[110]}};this[_0x8179[68]][_0x8179[17]][_0x8179[81]]= _0x8af7xe+ _0x8179[93];var _0x8af7x10=-Math[_0x8179[112]](0,_0x8af7xc[_0x8179[111]]- this[_0x8179[53]]);var _0x8af7x11=-Math[_0x8179[112]](0,_0x8af7xc[_0x8179[113]]- this[_0x8179[53]]);var _0x8af7x12=this[_0x8179[2]][_0x8179[114]]+ this[_0x8179[1]][_0x8179[115]]+ 3;var _0x8af7x13=Math[_0x8179[118]](0,(this[_0x8179[2]][_0x8179[116]]+ _0x8af7x7[_0x8179[116]]- this[_0x8179[2]][_0x8179[117]]- _0x8af7xe/ 2+ 16));if(mxClient[_0x8179[74]]){this[_0x8179[71]][_0x8179[73]][_0x8179[75]][_0x8179[123]](_0x8179[119],_0x8179[120]+ _0x8af7x10+ _0x8179[121]+ _0x8af7x11+ _0x8179[122])}else {this[_0x8179[71]][_0x8179[73]][_0x8179[125]][_0x8179[17]][_0x8179[124]]= _0x8af7x10+ _0x8179[93];this[_0x8179[71]][_0x8179[73]][_0x8179[125]][_0x8179[17]][_0x8179[109]]= _0x8af7x11+ _0x8179[93]};_0x8af7x13+= 90;this[_0x8179[68]][_0x8179[17]][_0x8179[19]]= _0x8179[20];this[_0x8179[68]][_0x8179[17]][_0x8179[124]]= _0x8af7x12+ _0x8179[93];this[_0x8179[68]][_0x8179[17]][_0x8179[109]]= _0x8af7x13+ _0x8179[93];this[_0x8179[77]][_0x8179[17]][_0x8179[124]]= (_0x8af7x12- 13)+ _0x8179[93];this[_0x8179[77]][_0x8179[17]][_0x8179[109]]= (_0x8af7x13+ _0x8af7xe/ 2- 13)+ _0x8179[93]});if(this[_0x8179[68]]!= null&& this[_0x8179[68]][_0x8179[17]][_0x8179[83]]!= _0x8179[110]){_0x8af7xb()}else {this[_0x8179[66]]= window[_0x8179[126]](_0x8af7xb,this[_0x8179[55]])};this[_0x8179[32]]= _0x8af7x7}}};Sidebar[_0x8179[40]][_0x8179[29]]= function(){if(this[_0x8179[66]]!= null){window[_0x8179[67]](this[_0x8179[66]]);this[_0x8179[66]]= null};if(this[_0x8179[68]]!= null){this[_0x8179[68]][_0x8179[17]][_0x8179[83]]= _0x8179[110];this[_0x8179[77]][_0x8179[17]][_0x8179[16]]= _0x8179[18];this[_0x8179[32]]= null}};Sidebar[_0x8179[40]][_0x8179[127]]= function(_0x8af7x14){var _0x8af7x7=document[_0x8179[7]](_0x8179[128]);_0x8af7x7[_0x8179[123]](_0x8179[129],_0x8179[130]);_0x8af7x7[_0x8179[69]]= _0x8179[131];mxUtils[_0x8179[106]](_0x8af7x7,_0x8af7x14);return _0x8af7x7};Sidebar[_0x8179[40]][_0x8179[132]]= function(_0x8af7x8,_0x8af7xd,_0x8af7xe,_0x8af7x15,_0x8af7x9,_0x8af7xa){this[_0x8179[5]][_0x8179[85]]= (_0x8af7xa== null|| _0x8af7xa);this[_0x8179[5]][_0x8179[73]][_0x8179[133]](1,0,0);this[_0x8179[5]][_0x8179[88]](_0x8af7x8);var _0x8af7xc=this[_0x8179[5]][_0x8179[89]]();var _0x8af7x16=this[_0x8179[54]];var _0x8af7x17=Math[_0x8179[112]]((_0x8af7xd- 2)/ (_0x8af7xc[_0x8179[79]]- _0x8af7xc[_0x8179[111]]+ _0x8af7x16),(_0x8af7xe- 2)/ (_0x8af7xc[_0x8179[81]]- _0x8af7xc[_0x8179[113]]+ _0x8af7x16));var _0x8af7x10=-Math[_0x8179[112]](_0x8af7xc[_0x8179[111]],0);var _0x8af7x11=-Math[_0x8179[112]](_0x8af7xc[_0x8179[113]],0);this[_0x8179[5]][_0x8179[73]][_0x8179[133]](_0x8af7x17,_0x8af7x10,_0x8af7x11);_0x8af7xc= this[_0x8179[5]][_0x8179[89]]();var _0x8af7x18=Math[_0x8179[118]](0,Math[_0x8179[134]]((_0x8af7xd- _0x8af7xc[_0x8179[79]]- _0x8af7xc[_0x8179[111]])/ 2));var _0x8af7xf=Math[_0x8179[118]](0,Math[_0x8179[134]]((_0x8af7xe- _0x8af7xc[_0x8179[81]]- _0x8af7xc[_0x8179[113]])/ 2));var _0x8af7x19=null;if(this[_0x8179[5]][_0x8179[135]]== mxConstants[_0x8179[136]]&& !mxClient[_0x8179[137]]){_0x8af7x19= this[_0x8179[5]][_0x8179[73]][_0x8179[140]]()[_0x8179[139]][_0x8179[138]](true)}else {_0x8af7x19= this[_0x8179[5]][_0x8179[2]][_0x8179[138]](false);_0x8af7x19[_0x8179[104]]= this[_0x8179[5]][_0x8179[2]][_0x8179[104]]};this[_0x8179[5]][_0x8179[141]]()[_0x8179[86]]();if(mxClient[_0x8179[142]]){_0x8af7x15[_0x8179[17]][_0x8179[143]]= _0x8179[144]+ this[_0x8179[1]][_0x8179[9]][_0x8179[145]]+ _0x8179[122]};var _0x8af7x1a=3;_0x8af7x19[_0x8179[17]][_0x8179[19]]= _0x8179[76];_0x8af7x19[_0x8179[17]][_0x8179[91]]= _0x8179[18];_0x8af7x19[_0x8179[17]][_0x8179[146]]= _0x8179[147];_0x8af7x19[_0x8179[17]][_0x8179[124]]= (_0x8af7x18+ _0x8af7x1a)+ _0x8179[93];_0x8af7x19[_0x8179[17]][_0x8179[109]]= (_0x8af7xf+ _0x8af7x1a)+ _0x8179[93];_0x8af7x19[_0x8179[17]][_0x8179[79]]= _0x8af7xd+ _0x8179[93];_0x8af7x19[_0x8179[17]][_0x8179[81]]= _0x8af7xe+ _0x8179[93];_0x8af7x19[_0x8179[17]][_0x8179[16]]= _0x8179[105];_0x8af7x19[_0x8179[17]][_0x8179[148]]= _0x8179[105];_0x8af7x19[_0x8179[17]][_0x8179[149]]= _0x8179[105];_0x8af7x15[_0x8179[21]](_0x8af7x19);if(this[_0x8179[63]]&& _0x8af7x9!= null){var _0x8af7x1b=(mxClient[_0x8179[90]])?2* this[_0x8179[61]]+ 2:0;_0x8af7x15[_0x8179[17]][_0x8179[81]]= (this[_0x8179[60]]+ _0x8af7x1b+ this[_0x8179[62]]+ 8)+ _0x8179[93];var _0x8af7x1c=document[_0x8179[7]](_0x8179[6]);_0x8af7x1c[_0x8179[17]][_0x8179[150]]= this[_0x8179[62]]+ _0x8179[93];_0x8af7x1c[_0x8179[17]][_0x8179[98]]= _0x8179[99];_0x8af7x1c[_0x8179[17]][_0x8179[151]]= _0x8179[152];if(mxClient[_0x8179[153]]){_0x8af7x1c[_0x8179[17]][_0x8179[81]]= (this[_0x8179[62]]+ 12)+ _0x8179[93]};_0x8af7x1c[_0x8179[17]][_0x8179[101]]= _0x8179[154];mxUtils[_0x8179[106]](_0x8af7x1c,_0x8af7x9);_0x8af7x15[_0x8179[21]](_0x8af7x1c)}};Sidebar[_0x8179[40]][_0x8179[155]]= function(_0x8af7x8,_0x8af7x9,_0x8af7xa){var _0x8af7x7=document[_0x8179[7]](_0x8179[128]);_0x8af7x7[_0x8179[123]](_0x8179[129],_0x8179[130]);_0x8af7x7[_0x8179[69]]= _0x8179[156];_0x8af7x7[_0x8179[17]][_0x8179[91]]= _0x8179[18];var _0x8af7x1b=(mxClient[_0x8179[90]])?8+ 2* this[_0x8179[61]]:6;_0x8af7x7[_0x8179[17]][_0x8179[79]]= (this[_0x8179[59]]+ _0x8af7x1b)+ _0x8179[93];_0x8af7x7[_0x8179[17]][_0x8179[81]]= (this[_0x8179[60]]+ _0x8af7x1b)+ _0x8179[93];_0x8af7x7[_0x8179[17]][_0x8179[157]]= this[_0x8179[61]]+ _0x8179[93];mxEvent[_0x8179[26]](_0x8af7x7,_0x8179[158],function(_0x8af7x4){mxEvent[_0x8179[159]](_0x8af7x4)});this[_0x8179[132]](_0x8af7x8,this[_0x8179[59]],this[_0x8179[60]],_0x8af7x7,_0x8af7x9,_0x8af7xa);return _0x8af7x7};Sidebar[_0x8179[40]][_0x8179[160]]= function(_0x8af7x8,_0x8af7x1d){return function(_0x8af7x1e,_0x8af7x4,_0x8af7x1f,_0x8af7x20,_0x8af7x21){if(_0x8af7x1e[_0x8179[161]]()){_0x8af7x8= _0x8af7x1e[_0x8179[162]](_0x8af7x8);if(_0x8af7x8[_0x8179[94]]> 0){var _0x8af7x22=(_0x8af7x1f!= null)?_0x8af7x1e[_0x8179[163]](_0x8af7x1f,_0x8af7x8,_0x8af7x4):false;var _0x8af7x23=null;if(_0x8af7x1f!= null&& !_0x8af7x22){_0x8af7x1f= null};if(_0x8af7x1d&& _0x8af7x1e[_0x8179[164]]()&& _0x8af7x1e[_0x8179[165]](_0x8af7x1f,_0x8af7x8,_0x8af7x4)){_0x8af7x1e[_0x8179[166]](_0x8af7x1f,_0x8af7x8,null,_0x8af7x20,_0x8af7x21);_0x8af7x23= _0x8af7x8}else {if(_0x8af7x8[_0x8179[94]]> 0){_0x8af7x23= _0x8af7x1e[_0x8179[167]](_0x8af7x8,_0x8af7x20,_0x8af7x21,_0x8af7x1f)}};if(_0x8af7x23!= null&& _0x8af7x23[_0x8179[94]]> 0){_0x8af7x1e[_0x8179[168]](_0x8af7x23[0]);_0x8af7x1e[_0x8179[169]](_0x8af7x23)}}}}};Sidebar[_0x8179[40]][_0x8179[170]]= function(_0x8af7xd,_0x8af7xe){var _0x8af7x7=document[_0x8179[7]](_0x8179[6]);_0x8af7x7[_0x8179[17]][_0x8179[171]]= _0x8179[172];_0x8af7x7[_0x8179[17]][_0x8179[79]]= _0x8af7xd+ _0x8179[93];_0x8af7x7[_0x8179[17]][_0x8179[81]]= _0x8af7xe+ _0x8179[93];return _0x8af7x7};Sidebar[_0x8179[40]][_0x8179[173]]= function(_0x8af7x7,_0x8af7x24,_0x8af7x25){var _0x8af7x26=mxUtils[_0x8179[175]](_0x8af7x7,this[_0x8179[1]][_0x8179[9]][_0x8179[5]],_0x8af7x24,_0x8af7x25,0,0,this[_0x8179[1]][_0x8179[9]][_0x8179[5]][_0x8179[174]],true,true);_0x8af7x26[_0x8179[176]]= function(_0x8af7x1e,_0x8af7x20,_0x8af7x21){var _0x8af7x1f=mxDragSource[_0x8179[40]][_0x8179[176]][_0x8179[177]](this,arguments);if(!_0x8af7x1e[_0x8179[178]](_0x8af7x1f)){_0x8af7x1f= null};return _0x8af7x1f};return _0x8af7x26};Sidebar[_0x8179[40]][_0x8179[179]]= function(_0x8af7x7,_0x8af7x27){var _0x8af7x1e=this[_0x8179[1]][_0x8179[9]][_0x8179[5]];var _0x8af7x28=null;mxEvent[_0x8179[182]](_0x8af7x7,function(_0x8af7x4){_0x8af7x28= new mxPoint(mxEvent[_0x8179[180]](_0x8af7x4),mxEvent[_0x8179[181]](_0x8af7x4))});var _0x8af7x29=_0x8af7x27[_0x8179[183]];_0x8af7x27[_0x8179[183]]= function(_0x8af7x4){if(!mxEvent[_0x8179[184]](_0x8af7x4)&& this[_0x8179[185]]== null&& _0x8af7x28!= null){var _0x8af7x2a=_0x8af7x1e[_0x8179[186]];if(Math[_0x8179[187]](_0x8af7x28[_0x8179[111]]- mxEvent[_0x8179[180]](_0x8af7x4))<= _0x8af7x2a&& Math[_0x8179[187]](_0x8af7x28[_0x8179[113]]- mxEvent[_0x8179[181]](_0x8af7x4))<= _0x8af7x2a){var _0x8af7x2b=_0x8af7x1e[_0x8179[188]]();_0x8af7x27[_0x8179[189]](_0x8af7x1e,_0x8af7x4,null,_0x8af7x2b,_0x8af7x2b)}};_0x8af7x29[_0x8179[177]](this,arguments);_0x8af7x28= null}};Sidebar[_0x8179[40]][_0x8179[190]]= function(_0x8af7x2c,_0x8af7x14,_0x8af7x2d,_0x8af7x2e){var _0x8af7x2f=mxUtils[_0x8179[190]]();var _0x8af7x19=_0x8af7x2f[_0x8179[7]](_0x8af7x2c);_0x8af7x19[_0x8179[123]](_0x8179[191],_0x8af7x14);_0x8af7x2d[_0x8179[192]](function(_0x8af7x30,_0x8af7x31){_0x8af7x19[_0x8179[123]](_0x8af7x30,_0x8af7x2e[_0x8af7x31]?_0x8af7x2e[_0x8af7x31]:_0x8179[105])});return _0x8af7x19};Sidebar[_0x8179[40]][_0x8179[193]]= function(_0x8af7x32,_0x8af7xd,_0x8af7xe,_0x8af7x33,_0x8af7x9,_0x8af7xa){var _0x8af7x2d=[];var _0x8af7x2e=[];switch(_0x8af7x33){case _0x8179[47]:_0x8af7x2d= [_0x8179[194],_0x8179[195],_0x8179[196]];_0x8af7x2e= [_0x8179[197],_0x8179[105],_0x8179[198]];break;case _0x8179[50]:_0x8af7x2d= [_0x8179[194],_0x8179[195]];_0x8af7x2e= [_0x8179[197],_0x8179[105]];break;case _0x8179[48]:_0x8af7x2d= [_0x8179[194],_0x8179[48],_0x8179[199]];_0x8af7x2e= [_0x8179[197],_0x8179[105]];break;case _0x8179[49]:_0x8af7x2d= [_0x8179[194],_0x8179[48],_0x8179[200]];_0x8af7x2e= [_0x8179[197],_0x8179[105]];break;default:_0x8af7x2d= [];_0x8af7x2e= [];break};var _0x8af7x19=this[_0x8179[190]](_0x8af7x33,_0x8af7x9,_0x8af7x2d,_0x8af7x2e);var _0x8af7x8=[ new mxCell(_0x8af7x19, new mxGeometry(0,0,_0x8af7xd,_0x8af7xe),_0x8af7x32)];_0x8af7x8[0][_0x8179[201]]= true;return this[_0x8179[202]](_0x8af7x8,_0x8af7xd,_0x8af7xe,_0x8af7x9,_0x8af7xa)};Sidebar[_0x8179[40]][_0x8179[202]]= function(_0x8af7x8,_0x8af7xd,_0x8af7xe,_0x8af7x9,_0x8af7xa){var _0x8af7x7=this[_0x8179[155]](_0x8af7x8,_0x8af7x9,_0x8af7xa);var _0x8af7x27=this[_0x8179[173]](_0x8af7x7,this[_0x8179[160]](_0x8af7x8,true),this[_0x8179[170]](_0x8af7xd,_0x8af7xe));this[_0x8179[179]](_0x8af7x7,_0x8af7x27);_0x8af7x27[_0x8179[203]]= mxUtils[_0x8179[25]](this,function(){return this[_0x8179[1]][_0x8179[9]][_0x8179[5]][_0x8179[205]][_0x8179[204]]});if(!touchStyle){mxEvent[_0x8179[26]](_0x8af7x7,_0x8179[30],mxUtils[_0x8179[25]](this,function(_0x8af7x4){this[_0x8179[65]](_0x8af7x7,_0x8af7x8,_0x8af7x9,_0x8af7xa)}))};return _0x8af7x7};Sidebar[_0x8179[40]][_0x8179[206]]= function(_0x8af7x32,_0x8af7xd,_0x8af7xe,_0x8af7x33,_0x8af7x9,_0x8af7xa){var _0x8af7x8=[ new mxCell((_0x8af7x33!= null)?_0x8af7x33:_0x8179[105], new mxGeometry(0,0,_0x8af7xd,_0x8af7xe),_0x8af7x32)];_0x8af7x8[0][_0x8179[208]][_0x8179[207]]( new mxPoint(0,_0x8af7xe),true);_0x8af7x8[0][_0x8179[208]][_0x8179[207]]( new mxPoint(_0x8af7xd,0),false);_0x8af7x8[0][_0x8179[208]][_0x8179[76]]= true;_0x8af7x8[0][_0x8179[209]]= true;return this[_0x8179[210]](_0x8af7x8,_0x8af7xd,_0x8af7xe,_0x8af7x9,_0x8af7xa)};Sidebar[_0x8179[40]][_0x8179[210]]= function(_0x8af7x8,_0x8af7xd,_0x8af7xe,_0x8af7x9,_0x8af7xa){var _0x8af7x7=this[_0x8179[155]](_0x8af7x8,_0x8af7x9,_0x8af7xa);this[_0x8179[173]](_0x8af7x7,this[_0x8179[160]](_0x8af7x8,false),this[_0x8179[170]](_0x8af7xd,_0x8af7xe));var _0x8af7x1e=this[_0x8179[1]][_0x8179[9]][_0x8179[5]];mxEvent[_0x8179[26]](_0x8af7x7,_0x8179[158],mxUtils[_0x8179[25]](this,function(_0x8af7x4){if(this[_0x8179[56]]){_0x8af7x1e[_0x8179[211]](_0x8af7x8[0])};_0x8af7x7[_0x8179[17]][_0x8179[212]]= _0x8179[213];window[_0x8179[126]](function(){_0x8af7x7[_0x8179[17]][_0x8179[212]]= _0x8179[105]},300);mxEvent[_0x8179[159]](_0x8af7x4)}));touchStyle= false;if(!touchStyle){mxEvent[_0x8179[26]](_0x8af7x7,_0x8179[30],mxUtils[_0x8179[25]](this,function(_0x8af7x4){this[_0x8179[65]](_0x8af7x7,_0x8af7x8,_0x8af7x9,_0x8af7xa)}))};return _0x8af7x7};Sidebar[_0x8179[40]][_0x8179[214]]= function(_0x8af7x34,_0x8af7x9,_0x8af7x35,_0x8af7x36){var _0x8af7x7=this[_0x8179[127]](_0x8af7x9);this[_0x8179[2]][_0x8179[21]](_0x8af7x7);var _0x8af7x1c=document[_0x8179[7]](_0x8179[6]);_0x8af7x1c[_0x8179[69]]= _0x8179[215];if(_0x8af7x35){_0x8af7x36(_0x8af7x1c);_0x8af7x36= null}else {_0x8af7x1c[_0x8179[17]][_0x8179[83]]= _0x8179[110]};this[_0x8179[216]](_0x8af7x7,_0x8af7x1c,_0x8af7x36);var _0x8af7x37=document[_0x8179[7]](_0x8179[6]);_0x8af7x37[_0x8179[21]](_0x8af7x1c);this[_0x8179[2]][_0x8179[21]](_0x8af7x37);if(_0x8af7x34!= null){this[_0x8179[3]][_0x8af7x34]= [_0x8af7x7,_0x8af7x37]}};Sidebar[_0x8179[40]][_0x8179[216]]= function(_0x8af7x9,_0x8af7x38,_0x8af7x39){var _0x8af7x3a=false;_0x8af7x9[_0x8179[17]][_0x8179[143]]= (_0x8af7x38[_0x8179[17]][_0x8179[83]]== _0x8179[110])?_0x8179[144]+ IMAGE_PATH+ _0x8179[217]:_0x8179[144]+ IMAGE_PATH+ _0x8179[218];_0x8af7x9[_0x8179[17]][_0x8179[219]]= _0x8179[220];_0x8af7x9[_0x8179[17]][_0x8179[221]]= _0x8179[222];mxEvent[_0x8179[26]](_0x8af7x9,_0x8179[158],function(_0x8af7x4){if(_0x8af7x38[_0x8179[17]][_0x8179[83]]== _0x8179[110]){if(!_0x8af7x3a){_0x8af7x3a= true;if(_0x8af7x39!= null){_0x8af7x9[_0x8179[17]][_0x8179[146]]= _0x8179[223];window[_0x8179[126]](function(){_0x8af7x39(_0x8af7x38);_0x8af7x9[_0x8179[17]][_0x8179[146]]= _0x8179[105]},0)}};_0x8af7x9[_0x8179[17]][_0x8179[143]]= _0x8179[144]+ IMAGE_PATH+ _0x8179[218];_0x8af7x38[_0x8179[17]][_0x8179[83]]= _0x8179[84]}else {_0x8af7x9[_0x8179[17]][_0x8179[143]]= _0x8179[144]+ IMAGE_PATH+ _0x8179[217];_0x8af7x38[_0x8179[17]][_0x8179[83]]= _0x8179[110]};mxEvent[_0x8179[159]](_0x8af7x4)})};Sidebar[_0x8179[40]][_0x8179[224]]= function(_0x8af7x34){var _0x8af7x3b=this[_0x8179[3]][_0x8af7x34];if(_0x8af7x3b!= null){this[_0x8179[3]][_0x8af7x34]= null;for(var _0x8af7x3c=0;_0x8af7x3c< _0x8af7x3b[_0x8179[94]];_0x8af7x3c++){this[_0x8179[2]][_0x8179[225]](_0x8af7x3b[_0x8af7x3c])};return true};return false};Sidebar[_0x8179[40]][_0x8179[51]]= function(_0x8af7x34,_0x8af7x9,_0x8af7x3d,_0x8af7x3e,_0x8af7x3f,_0x8af7x40){this[_0x8179[214]](_0x8af7x34,_0x8af7x9,(_0x8af7x34=== _0x8179[42]),mxUtils[_0x8179[25]](this,function(_0x8af7x38){var _0x8af7x41=_0x8af7x40!= null;for(var _0x8af7x3c=0;_0x8af7x3c< _0x8af7x3f[_0x8179[94]];_0x8af7x3c++){var _0x8af7x42=_0x8af7x3d+ _0x8af7x3f[_0x8af7x3c]+ _0x8af7x3e;_0x8af7x38[_0x8179[21]](this[_0x8179[193]](_0x8179[226]+ _0x8af7x42,80,80,_0x8af7x3f[_0x8af7x3c],(_0x8af7x41)?_0x8af7x40[_0x8af7x3c]:null,_0x8af7x41))}}))} \ No newline at end of file +'use strict'; + +/** + * Construcs a new sidebar for the given editor. + */ +function Sidebar(editorUi, container) { + this.editorUi = editorUi; + this.container = container; + this.palettes = new Object(); + this.showTooltips = true; + this.graph = new Graph(document.createElement('div'), null, null, this.editorUi + .editor.graph.getStylesheet()); + this.graph.resetViewOnRootChange = false; + this.graph.foldingEnabled = false; + this.graph.setConnectable(false); + this.graph.autoScroll = false; + this.graph.setTooltips(false); + this.graph.setEnabled(false); + + // Container must be in the DOM for correct HTML rendering + this.graph.container.style.visibility = 'hidden'; + this.graph.container.style.position = 'absolute'; + document.body.appendChild(this.graph.container); + + if (!mxClient.IS_TOUCH) { + mxEvent.addListener(document, 'mouseup', mxUtils.bind(this, function() { + this.showTooltips = true; + })); + + // Enables tooltips after scroll + mxEvent.addListener(container, 'scroll', mxUtils.bind(this, function() { + this.showTooltips = true; + })); + + mxEvent.addListener(document, 'mousedown', mxUtils.bind(this, function() { + this.showTooltips = false; + this.hideTooltip(); + })); + + mxEvent.addListener(document, 'mousemove', mxUtils.bind(this, function(evt) { + var src = mxEvent.getSource(evt); + + while (src != null) { + if (src == this.currentElt) { + return; + } + + src = src.parentNode; + } + + this.hideTooltip(); + })); + + // Handles mouse leaving the window + mxEvent.addListener(document, 'mouseout', mxUtils.bind(this, function(evt) { + if (evt.toElement == null && evt.relatedTarget == null) { + this.hideTooltip(); + } + })); + } + + this.init(); + + // Pre-fetches tooltip image + new Image().src = IMAGE_PATH + '/tooltip.png'; +}; + +/** + * Adds all palettes to the sidebar. + */ +Sidebar.prototype.init = function() { + var dir = STENCIL_PATH; + console.log(dir); + + // this.addImagePalette('entry', mxResources.get('application'), dir + '/', + // '_128x128.png', ['start', 'question', 'input', 'end', 'email'], [mxResources.get('start'), + // mxResources.get('question'), mxResources.get('input'), mxResources.get('end'), mxResources.get('email') + // ]); + this.addImagePalette('entry', mxResources.get('application'), dir + '/', + '_128x128.png', ['start', 'question', 'input', 'end'], [mxResources.get('start'), + mxResources.get('question'), mxResources.get('input'), mxResources.get('end') + ]); + // this.addBpmnPalette(dir, false); + +}; + +/** + * Specifies if tooltips should be visible. Default is true. + */ +Sidebar.prototype.enableTooltips = !mxClient.IS_TOUCH; + +/** + * Specifies the delay for the tooltip. Default is 16 px. + */ +Sidebar.prototype.tooltipBorder = 16; + +/** + * Specifies the delay for the tooltip. Default is 3 px. + */ +Sidebar.prototype.thumbBorder = 3; + +/** + * Specifies the delay for the tooltip. Default is 300 ms. + */ +Sidebar.prototype.tooltipDelay = 300; + +/** + * Specifies if edges should be used as templates if clicked. Default is true. + */ +Sidebar.prototype.installEdges = true; + +/** + * Specifies the URL of the gear image. + */ +Sidebar.prototype.gearImage = STENCIL_PATH + '/clipart/Gear_128x128.png'; + +/** + * Specifies the width of the thumbnails. + */ +Sidebar.prototype.thumbWidth = 34; + +/** + * Specifies the height of the thumbnails. + */ +Sidebar.prototype.thumbHeight = 34; + +/** + * Specifies the padding for the thumbnails. Default is 3. + */ +Sidebar.prototype.thumbPadding = 2; + +/** + * Specifies the size of the sidebar titles. + */ +Sidebar.prototype.sidebarTitleSize = 9; + +/** + * Specifies if titles in the sidebar should be enabled. + */ +Sidebar.prototype.sidebarTitles = false; + +/** + * Specifies if titles in the tooltips should be enabled. + */ +Sidebar.prototype.tooltipTitles = false; + +/** + * Adds all palettes to the sidebar. + */ +Sidebar.prototype.showTooltip = function(elt, cells, title, showLabel) { + if (this.enableTooltips && this.showTooltips) { + if (this.currentElt != elt) { + if (this.thread != null) { + window.clearTimeout(this.thread); + this.thread = null; + } + + var show = mxUtils.bind(this, function() { + // Lazy creation of the DOM nodes and graph instance + if (this.tooltip == null) { + this.tooltip = document.createElement('div'); + this.tooltip.className = 'geSidebarTooltip'; + document.body.appendChild(this.tooltip); + + this.graph2 = new Graph(this.tooltip, null, null, this.editorUi.editor.graph + .getStylesheet()); + this.graph2.view.setTranslate(this.tooltipBorder, this.tooltipBorder); + this.graph2.resetViewOnRootChange = false; + this.graph2.foldingEnabled = false; + this.graph2.autoScroll = false; + this.graph2.setTooltips(false); + this.graph2.setConnectable(false); + this.graph2.setEnabled(false); + + if (!mxClient.IS_SVG) { + this.graph2.view.canvas.style.position = 'relative'; + } + + this.tooltipImage = mxUtils.createImage(IMAGE_PATH + '/tooltip.png'); + this.tooltipImage.style.position = 'absolute'; + this.tooltipImage.style.width = '14px'; + this.tooltipImage.style.height = '27px'; + + document.body.appendChild(this.tooltipImage); + } + + this.tooltip.style.display = 'block'; + this.graph2.labelsVisible = (showLabel == null || showLabel); + this.graph2.model.clear(); + this.graph2.addCells(cells); + + var bounds = this.graph2.getGraphBounds(); + var width = bounds.width + 2 * this.tooltipBorder; + var height = bounds.height + 2 * this.tooltipBorder; + + if (mxClient.IS_QUIRKS) { + width += 4; + height += 4; + this.tooltip.style.overflow = 'hidden'; + } else { + this.tooltip.style.overflow = 'visible'; + } + + this.tooltipImage.style.visibility = 'visible'; + this.tooltip.style.width = width + 'px'; + + // Adds title for entry + if (this.tooltipTitles && title != null && title.length > 0) { + if (this.tooltipTitle == null) { + this.tooltipTitle = document.createElement('div'); + this.tooltipTitle.style.borderTop = '1px solid gray'; + this.tooltipTitle.style.textAlign = 'center'; + this.tooltipTitle.style.width = '100%'; + + // Oversize titles are cut-off currently. Should make tooltip wider later. + this.tooltipTitle.style.overflow = 'hidden'; + + if (mxClient.IS_SVG) { + this.tooltipTitle.style.paddingTop = '2px'; + } else { + this.tooltipTitle.style.position = 'absolute'; + this.tooltipTitle.style.paddingTop = '6px'; + } + + this.tooltip.appendChild(this.tooltipTitle); + } else { + this.tooltipTitle.innerHTML = ''; + } + + this.tooltipTitle.style.display = ''; + mxUtils.write(this.tooltipTitle, title); + + var dy = this.tooltipTitle.offsetHeight + 10; + height += dy; + + if (mxClient.IS_SVG) { + this.tooltipTitle.style.marginTop = (-dy) + 'px'; + } else { + height -= 6; + this.tooltipTitle.style.top = (height - dy) + 'px'; + } + } else if (this.tooltipTitle != null && this.tooltipTitle.parentNode != + null) { + this.tooltipTitle.style.display = 'none'; + } + + this.tooltip.style.height = height + 'px'; + var x0 = -Math.min(0, bounds.x - this.tooltipBorder); + var y0 = -Math.min(0, bounds.y - this.tooltipBorder); + + var left = this.container.clientWidth + this.editorUi.splitSize + 3; + var top = Math.max(0, (this.container.offsetTop + elt.offsetTop - this.container + .scrollTop - height / 2 + 16)); + + if (mxClient.IS_SVG) { + this.graph2.view.canvas.setAttribute('transform', 'translate(' + x0 + + ',' + y0 + ')'); + } else { + this.graph2.view.drawPane.style.left = x0 + 'px'; + this.graph2.view.drawPane.style.top = y0 + 'px'; + } + + // Workaround for ignored position CSS style in IE9 + // (changes to relative without the following line) + // Added width of the page-sidebar + // left += document.getElementById('page-sidebar').offsetWidth; + // Added static height of the page-navbar + top += 90; + + this.tooltip.style.position = 'absolute'; + this.tooltip.style.left = left + 'px'; + this.tooltip.style.top = top + 'px'; + this.tooltipImage.style.left = (left - 13) + 'px'; + this.tooltipImage.style.top = (top + height / 2 - 13) + 'px'; + }); + + if (this.tooltip != null && this.tooltip.style.display != 'none') { + show(); + } else { + this.thread = window.setTimeout(show, this.tooltipDelay); + } + + this.currentElt = elt; + } + } +}; + +/** + * Hides the current tooltip. + */ +Sidebar.prototype.hideTooltip = function() { + if (this.thread != null) { + window.clearTimeout(this.thread); + this.thread = null; + } + + if (this.tooltip != null) { + this.tooltip.style.display = 'none'; + this.tooltipImage.style.visibility = 'hidden'; + this.currentElt = null; + } +}; + +/** + * Creates and returns the given title element. + */ +Sidebar.prototype.createTitle = function(label) { + var elt = document.createElement('a'); + elt.setAttribute('href', 'javascript:void(0);'); + elt.className = 'geTitle'; + mxUtils.write(elt, label); + + return elt; +}; + +/** + * Creates a thumbnail for the given cells. + */ +Sidebar.prototype.createThumb = function(cells, width, height, parent, title, + showLabel) { + this.graph.labelsVisible = (showLabel == null || showLabel); + this.graph.view.scaleAndTranslate(1, 0, 0); + this.graph.addCells(cells); + var bounds = this.graph.getGraphBounds(); + var corr = this.thumbBorder; + var s = Math.min((width - 2) / (bounds.width - bounds.x + corr), (height - 2) / + (bounds.height - bounds.y + corr)); + var x0 = -Math.min(bounds.x, 0); + var y0 = -Math.min(bounds.y, 0); + this.graph.view.scaleAndTranslate(s, x0, y0); + + bounds = this.graph.getGraphBounds(); + var dx = Math.max(0, Math.floor((width - bounds.width - bounds.x) / 2)); + var dy = Math.max(0, Math.floor((height - bounds.height - bounds.y) / 2)); + + var node = null; + + // For supporting HTML labels in IE9 standards mode the container is cloned instead + if (this.graph.dialect == mxConstants.DIALECT_SVG && !mxClient.NO_FO) { + node = this.graph.view.getCanvas().ownerSVGElement.cloneNode(true); + } + // LATER: Check if deep clone can be used for quirks if container in DOM + else { + node = this.graph.container.cloneNode(false); + node.innerHTML = this.graph.container.innerHTML; + } + + this.graph.getModel().clear(); + + // Catch-all event handling + if (mxClient.IS_IE6) { + parent.style.backgroundImage = 'url(' + this.editorUi.editor.transparentImage + + ')'; + } + + var dd = 3; + node.style.position = 'relative'; + node.style.overflow = 'hidden'; + node.style.cursor = 'pointer'; + node.style.left = (dx + dd) + 'px'; + node.style.top = (dy + dd) + 'px'; + node.style.width = width + 'px'; + node.style.height = height + 'px'; + node.style.visibility = ''; + node.style.minWidth = ''; + node.style.minHeight = ''; + + parent.appendChild(node); + + // Adds title for sidebar entries + if (this.sidebarTitles && title != null) { + var border = (mxClient.IS_QUIRKS) ? 2 * this.thumbPadding + 2 : 0; + parent.style.height = (this.thumbHeight + border + this.sidebarTitleSize + 8) + + 'px'; + + var div = document.createElement('div'); + div.style.fontSize = this.sidebarTitleSize + 'px'; + div.style.textAlign = 'center'; + div.style.whiteSpace = 'nowrap'; + + if (mxClient.IS_IE) { + div.style.height = (this.sidebarTitleSize + 12) + 'px'; + } + + div.style.paddingTop = '4px'; + mxUtils.write(div, title); + parent.appendChild(div); + } +}; + +/** + * Creates and returns a new palette item for the given image. + */ +Sidebar.prototype.createItem = function(cells, title, showLabel) { + var elt = document.createElement('a'); + elt.setAttribute('href', 'javascript:void(0);'); + elt.className = 'geItem'; + elt.style.overflow = 'hidden'; + var border = (mxClient.IS_QUIRKS) ? 8 + 2 * this.thumbPadding : 6; + elt.style.width = (this.thumbWidth + border) + 'px'; + elt.style.height = (this.thumbHeight + border) + 'px'; + elt.style.padding = this.thumbPadding + 'px'; + + // Blocks default click action + mxEvent.addListener(elt, 'click', function(evt) { + mxEvent.consume(evt); + }); + + this.createThumb(cells, this.thumbWidth, this.thumbHeight, elt, title, + showLabel); + + return elt; +}; + + +/** + * Creates a drop handler for inserting the given cells. + */ +Sidebar.prototype.createDropHandler = function(cells, allowSplit) { + return function(graph, evt, target, x, y) { + if (graph.isEnabled()) { + cells = graph.getImportableCells(cells); + + if (cells.length > 0) { + var validDropTarget = (target != null) ? + graph.isValidDropTarget(target, cells, evt) : false; + var select = null; + + if (target != null && !validDropTarget) { + target = null; + } + + // Splits the target edge or inserts into target group + if (allowSplit && graph.isSplitEnabled() && graph.isSplitTarget(target, + cells, evt)) { + graph.splitEdge(target, cells, null, x, y); + select = cells; + } else if (cells.length > 0) { + select = graph.importCells(cells, x, y, target); + } + + if (select != null && select.length > 0) { + graph.scrollCellToVisible(select[0]); + graph.setSelectionCells(select); + } + } + } + }; +}; + +/** + * Creates and returns a preview element for the given width and height. + */ +Sidebar.prototype.createDragPreview = function(width, height) { + var elt = document.createElement('div'); + elt.style.border = '1px dashed black'; + elt.style.width = width + 'px'; + elt.style.height = height + 'px'; + + return elt; +}; + +/** + * Creates a drag source for the given element. + */ +Sidebar.prototype.createDragSource = function(elt, dropHandler, preview) { + var dragSource = mxUtils.makeDraggable(elt, this.editorUi.editor.graph, + dropHandler, + preview, 0, 0, this.editorUi.editor.graph.autoscroll, true, true); + + + + // Allows drop into cell only if target is a valid root + dragSource.getDropTarget = function(graph, x, y) { + var target = mxDragSource.prototype.getDropTarget.apply(this, arguments); + if (!graph.isValidRoot(target)) { + target = null; + } + + return target; + }; + + return dragSource; +}; + + + +/** + * Adds a handler for inserting the cell with a single click. + */ +Sidebar.prototype.addClickHandler = function(elt, ds) { + var graph = this.editorUi.editor.graph; + var first = null; + + mxEvent.addGestureListeners(elt, function(evt) { + first = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt)); + }); + + var oldMouseUp = ds.mouseUp; + ds.mouseUp = function(evt) { + if (!mxEvent.isPopupTrigger(evt) && this.currentGraph == null && first != + null) { + var tol = graph.tolerance; + + if (Math.abs(first.x - mxEvent.getClientX(evt)) <= tol && + Math.abs(first.y - mxEvent.getClientY(evt)) <= tol) { + var gs = graph.getGridSize(); + ds.drop(graph, evt, null, gs, gs); + } + } + + oldMouseUp.apply(this, arguments); + first = null; + }; +}; + +/** + * Giuseppe Careri + * Create xml document vertex + */ +Sidebar.prototype.createXmlDocument = function(element, label, variables, + values) { + var doc = mxUtils.createXmlDocument(); + var node = doc.createElement(element) + node.setAttribute('label', label); + + variables.forEach(function(variable, index) { + node.setAttribute(variable, values[index] ? values[index] : ''); + }); + + return node; +} + +/** + * Giuseppe Careri + * Creates a drop handler for inserting the given cells. + */ +Sidebar.prototype.createVertexTemplate = function(style, width, height, value, + title, showLabel) { + var variables = []; + var values = []; + + switch (value) { + case 'start': + variables = ['id', 'text', 'state']; + values = ['0', '', "OFF"]; + break; + case 'end': + variables = ['id', 'text']; + values = ['0', '']; + break; + case 'question': + variables = ['id', 'question', 'other']; + values = ['0', '']; + break; + case 'input': + variables = ['id', 'question', 'add']; + values = ['0', '']; + break; + // case 'email': + // variables = ["Host", "Username", "Password", "To", "Subject", "Body"]; + // values = ['']; + // break; + // case 'sms': + // variables = ['account_id', 'to', 'sms_text']; + // values = ['0']; + // break; + + default: + variables = []; + values = []; + break; + } + + var node = this.createXmlDocument(value, title, variables, values); + + //var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0, width, height), style)]; + var cells = [new mxCell(node, new mxGeometry(0, 0, width, height), style)]; + cells[0].vertex = true; + return this.createVertexTemplateFromCells(cells, width, height, title, + showLabel); +}; + + + +/** + * Creates a drop handler for inserting the given cells. + */ +Sidebar.prototype.createVertexTemplateFromCells = function(cells, width, height, + title, showLabel) { + var elt = this.createItem(cells, title, showLabel); + var ds = this.createDragSource(elt, this.createDropHandler(cells, true), this + .createDragPreview(width, height)); + this.addClickHandler(elt, ds); + + // Uses guides for vertices only if enabled in graph + ds.isGuidesEnabled = mxUtils.bind(this, function() { + return this.editorUi.editor.graph.graphHandler.guidesEnabled; + }); + + // Shows a tooltip with the rendered cell + if (!touchStyle) { + mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) { + this.showTooltip(elt, cells, title, showLabel); + })); + } + + return elt; +}; + +/** + * Creates a drop handler for inserting the given cells. + */ +Sidebar.prototype.createEdgeTemplate = function(style, width, height, value, + title, showLabel) { + var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0, + width, height), style)]; + cells[0].geometry.setTerminalPoint(new mxPoint(0, height), true); + cells[0].geometry.setTerminalPoint(new mxPoint(width, 0), false); + cells[0].geometry.relative = true; + cells[0].edge = true; + + return this.createEdgeTemplateFromCells(cells, width, height, title, + showLabel); +}; + +/** + * Creates a drop handler for inserting the given cells. + */ +Sidebar.prototype.createEdgeTemplateFromCells = function(cells, width, height, + title, showLabel) { + var elt = this.createItem(cells, title, showLabel); + this.createDragSource(elt, this.createDropHandler(cells, false), this.createDragPreview( + width, height)); + + // Installs the default edge + var graph = this.editorUi.editor.graph; + mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt) { + if (this.installEdges) { + graph.setDefaultEdge(cells[0]); + } + + // Highlights the entry for 200ms + elt.style.backgroundColor = '#ffffff'; + + window.setTimeout(function() { + elt.style.backgroundColor = ''; + }, 300); + + mxEvent.consume(evt); + })); + + // Shows a tooltip with the rendered cell + touchStyle = false; + if (!touchStyle) { + mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) { + this.showTooltip(elt, cells, title, showLabel); + })); + } + + return elt; +}; + +/** + * Adds the given palette. + */ +Sidebar.prototype.addPalette = function(id, title, expanded, onInit) { + var elt = this.createTitle(title); + this.container.appendChild(elt); + + var div = document.createElement('div'); + div.className = 'geSidebar'; + + if (expanded) { + onInit(div); + onInit = null; + } else { + div.style.display = 'none'; + } + + this.addFoldingHandler(elt, div, onInit); + + var outer = document.createElement('div'); + outer.appendChild(div); + this.container.appendChild(outer); + + // Keeps references to the DOM nodes + if (id != null) { + this.palettes[id] = [elt, outer]; + } +}; + +/** + * Create the given title element. + */ +Sidebar.prototype.addFoldingHandler = function(title, content, funct) { + var initialized = false; + + title.style.backgroundImage = (content.style.display == 'none') ? + 'url(' + IMAGE_PATH + '/collapsed.gif)' : 'url(' + IMAGE_PATH + + '/expanded.gif)'; + title.style.backgroundRepeat = 'no-repeat'; + title.style.backgroundPosition = '100% 50%'; + + mxEvent.addListener(title, 'click', function(evt) { + if (content.style.display == 'none') { + if (!initialized) { + initialized = true; + + if (funct != null) { + title.style.cursor = 'wait'; + window.setTimeout(function() { + funct(content); + title.style.cursor = ''; + }, 0); + } + } + + title.style.backgroundImage = 'url(' + IMAGE_PATH + '/expanded.gif)'; + content.style.display = 'block'; + } else { + title.style.backgroundImage = 'url(' + IMAGE_PATH + '/collapsed.gif)'; + content.style.display = 'none'; + } + + mxEvent.consume(evt); + }); +}; + +/** + * Removes the palette for the given ID. + */ +Sidebar.prototype.removePalette = function(id) { + var elts = this.palettes[id]; + + if (elts != null) { + this.palettes[id] = null; + + for (var i = 0; i < elts.length; i++) { + this.container.removeChild(elts[i]); + } + + return true; + } + + return false; +}; + +/** + * Adds the given image palette. + */ +Sidebar.prototype.addImagePalette = function(id, title, prefix, postfix, items, + titles) { + // Giuseppe Careri + // Expanded Sidebar only entry + this.addPalette(id, title, (id === 'entry'), mxUtils.bind(this, function( + content) { + var showTitles = titles != null; + + for (var i = 0; i < items.length; i++) { + var icon = prefix + items[i] + postfix; + content.appendChild(this.createVertexTemplate('image;image=' + icon, 80, + 80, items[i], (showTitles) ? titles[i] : null, showTitles)); + } + })); +}; +// ***********modified*************** +// Sidebar.prototype.addBpmnPalette = function(dir, expand) { +// //Abigael Dawit +// +// var fns = [ +// this.createVertexTemplate( +// 'text;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;', +// 40, 20, 'Text', 'Text', null), +// //this.createVertexTemplate('shape=ext;rounded=1;whiteSpace=wrap;dashed=1;dashPattern=1 4;', 120, 80, 'Event\nSub-Process', 'Event Sub-Process', null), +// this.createVertexTemplate('shape=swimlane;whiteSpace=wrap;startSize=60;', +// 120, 160, 'Container', 'Container', null), +// // this.createVertexTemplate('shape=ellipse;', 120, 160, 'Ellips', 'Ellipse', null) +// this.createVertexTemplate( +// 'shape=swimlane;html=1;horizontal=0;swimlaneFillColor=white;swimlaneLine=0;fillColor=none;rounded=1;verticalAlign=middle', +// 300, 120, 'Lane', 'Lane', null) +// +// ] +// +// this.addPalette('utility', 'Utility ', false, mxUtils.bind(this, function( +// content) { +// //var showTitles = titles != null; +// for (var i = 0; i < fns.length; i++) { +// content.appendChild(fns[i]); +// } +// })); +// +// }; diff --git a/public/assets/plugins/jscripty/js/Toolbar.js b/public/assets/plugins/jscripty/js/Toolbar.js index 5b0d631..7eab562 100644 --- a/public/assets/plugins/jscripty/js/Toolbar.js +++ b/public/assets/plugins/jscripty/js/Toolbar.js @@ -1 +1,407 @@ -var _0x3ebf=["\x65\x64\x69\x74\x6F\x72\x55\x69","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x69\x6E\x69\x74","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x62\x69\x6E\x64","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x73\x61\x76\x65","\x70\x75\x62\x6C\x69\x73\x68","\x2D","\x70\x72\x69\x6E\x74","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x6F\x70\x79","\x63\x75\x74","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x61\x64\x64\x49\x74\x65\x6D\x73","\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x67\x65\x74","\x61\x64\x64\x4D\x65\x6E\x75","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x73\x74\x79\x6C\x65","\x6E\x6F\x77\x72\x61\x70","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x68\x69\x64\x64\x65\x6E","\x77\x69\x64\x74\x68","\x37\x30\x70\x78","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x31\x32","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x33\x30\x70\x78","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x67\x72\x61\x70\x68","\x65\x64\x69\x74\x6F\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x6C\x65\x6E\x67\x74\x68","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x2E\x2E\x2E","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x63\x75\x72\x72\x65\x6E\x74\x4D\x65\x6E\x75","\x64\x65\x73\x74\x72\x6F\x79","\x6D\x65\x6E\x75\x73","\x66\x75\x6E\x63\x74","\x61\x64\x64\x4D\x65\x6E\x75\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x65\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x72\x65\x61\x74\x65\x4C\x61\x62\x65\x6C","\x63\x72\x65\x61\x74\x65\x42\x75\x74\x74\x6F\x6E","\x69\x6E\x69\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x61\x64\x64\x4D\x65\x6E\x75\x48\x61\x6E\x64\x6C\x65\x72","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x67\x65\x53\x70\x72\x69\x74\x65\x2D","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x61\x64\x64\x49\x74\x65\x6D","\x61\x63\x74\x69\x6F\x6E\x73","\x6C\x61\x62\x65\x6C","\x61\x64\x64\x42\x75\x74\x74\x6F\x6E","\x61\x64\x64\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x61\x64\x64\x45\x64\x67\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x69\x73\x45\x64\x67\x65","\x74\x61\x62\x69\x6E\x64\x65\x78","\x30","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x74\x69\x74\x6C\x65","\x61\x64\x64\x45\x6E\x61\x62\x6C\x65\x64\x53\x74\x61\x74\x65","\x20\x67\x65\x44\x69\x73\x61\x62\x6C\x65\x64","\x63\x6C\x69\x63\x6B","\x63\x6F\x6E\x73\x75\x6D\x65","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x67\x65\x42\x75\x74\x74\x6F\x6E","\x67\x65\x53\x70\x72\x69\x74\x65\x20","\x67\x65\x4C\x61\x62\x65\x6C","\x77\x72\x69\x74\x65","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x20\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72\x4D\x65\x6E\x75","\x73\x68\x6F\x77\x44\x69\x73\x61\x62\x6C\x65\x64","\x6C\x61\x62\x65\x6C\x73","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x6F\x70\x75\x70"];function Toolbar(_0x8f99x2,_0x8f99x3){this[_0x3ebf[0]]= _0x8f99x2;this[_0x3ebf[1]]= _0x8f99x3;this[_0x3ebf[2]]();mxEvent[_0x3ebf[5]](document,mxUtils[_0x3ebf[4]](this,function(_0x8f99x4){this[_0x3ebf[3]]()}))}Toolbar[_0x3ebf[6]][_0x3ebf[2]]= function(){this[_0x3ebf[21]]([_0x3ebf[7],_0x3ebf[8],_0x3ebf[9],_0x3ebf[10],_0x3ebf[11],_0x3ebf[12],_0x3ebf[9],_0x3ebf[13],_0x3ebf[14],_0x3ebf[15],_0x3ebf[16],_0x3ebf[9],_0x3ebf[17],_0x3ebf[9],_0x3ebf[18],_0x3ebf[19],_0x3ebf[20],_0x3ebf[9]]);var _0x8f99x5=this[_0x3ebf[25]](_0x3ebf[22],mxResources[_0x3ebf[24]](_0x3ebf[23]),true,_0x3ebf[23]);_0x8f99x5[_0x3ebf[27]][_0x3ebf[26]]= _0x3ebf[28];_0x8f99x5[_0x3ebf[27]][_0x3ebf[29]]= _0x3ebf[30];_0x8f99x5[_0x3ebf[27]][_0x3ebf[31]]= _0x3ebf[32];this[_0x3ebf[33]]();var _0x8f99x6=this[_0x3ebf[25]](_0x3ebf[34],mxResources[_0x3ebf[24]](_0x3ebf[35]),true,_0x3ebf[35]);_0x8f99x6[_0x3ebf[27]][_0x3ebf[26]]= _0x3ebf[28];_0x8f99x6[_0x3ebf[27]][_0x3ebf[29]]= _0x3ebf[30];_0x8f99x6[_0x3ebf[27]][_0x3ebf[31]]= _0x3ebf[36];this[_0x3ebf[21]]([_0x3ebf[9],_0x3ebf[37],_0x3ebf[38],_0x3ebf[39]]);var _0x8f99x7=this[_0x3ebf[0]][_0x3ebf[41]][_0x3ebf[40]];var _0x8f99x8=mxUtils[_0x3ebf[4]](this,function(){var _0x8f99x9=_0x3ebf[22];var _0x8f99xa=_0x3ebf[34];var _0x8f99xb=_0x8f99x7[_0x3ebf[44]]()[_0x3ebf[43]](_0x8f99x7[_0x3ebf[42]]());if(_0x8f99xb!= null){_0x8f99x9= _0x8f99xb[_0x3ebf[27]][mxConstants[_0x3ebf[45]]]|| _0x8f99x9;_0x8f99xa= _0x8f99xb[_0x3ebf[27]][mxConstants[_0x3ebf[46]]]|| _0x8f99xa;if(_0x8f99x9[_0x3ebf[47]]> 10){_0x8f99x9= _0x8f99x9[_0x3ebf[48]](0,8)+ _0x3ebf[49]};_0x8f99x5[_0x3ebf[50]]= _0x8f99x9;_0x8f99x6[_0x3ebf[50]]= _0x8f99xa}});_0x8f99x7[_0x3ebf[52]]()[_0x3ebf[51]](mxEvent.CHANGE,_0x8f99x8);_0x8f99x7[_0x3ebf[53]]()[_0x3ebf[51]](mxEvent.CHANGE,_0x8f99x8)};Toolbar[_0x3ebf[6]][_0x3ebf[3]]= function(){if(this[_0x3ebf[54]]!= null){this[_0x3ebf[54]][_0x3ebf[3]]();this[_0x3ebf[54]][_0x3ebf[55]]();this[_0x3ebf[54]]= null}};Toolbar[_0x3ebf[6]][_0x3ebf[25]]= function(_0x8f99xc,_0x8f99xd,_0x8f99xe,_0x8f99xf){var _0x8f99x10=this[_0x3ebf[0]][_0x3ebf[56]][_0x3ebf[24]](_0x8f99xf);var _0x8f99x11=this[_0x3ebf[58]](_0x8f99xc,_0x8f99xd,_0x8f99xe,_0x8f99x10[_0x3ebf[57]]);_0x8f99x10[_0x3ebf[51]](_0x3ebf[59],function(){_0x8f99x11[_0x3ebf[61]](_0x8f99x10[_0x3ebf[60]])});return _0x8f99x11};Toolbar[_0x3ebf[6]][_0x3ebf[58]]= function(_0x8f99xc,_0x8f99xd,_0x8f99xe,_0x8f99x12){var _0x8f99x11=(_0x8f99xe)?this[_0x3ebf[62]](_0x8f99xc):this[_0x3ebf[63]](_0x8f99xc);this[_0x3ebf[64]](_0x8f99x11,_0x8f99xd);this[_0x3ebf[65]](_0x8f99x11,_0x8f99xe,_0x8f99x12);this[_0x3ebf[1]][_0x3ebf[66]](_0x8f99x11);return _0x8f99x11};Toolbar[_0x3ebf[6]][_0x3ebf[33]]= function(){var _0x8f99x11=document[_0x3ebf[68]](_0x3ebf[67]);_0x8f99x11[_0x3ebf[69]]= _0x3ebf[70];this[_0x3ebf[1]][_0x3ebf[66]](_0x8f99x11);return _0x8f99x11};Toolbar[_0x3ebf[6]][_0x3ebf[21]]= function(_0x8f99x13){for(var _0x8f99x14=0;_0x8f99x14< _0x8f99x13[_0x3ebf[47]];_0x8f99x14++){var _0x8f99x15=_0x8f99x13[_0x8f99x14];if(_0x8f99x15== _0x3ebf[9]){this[_0x3ebf[33]]()}else {this[_0x3ebf[73]](_0x3ebf[71]+ _0x8f99x15[_0x3ebf[72]](),_0x8f99x15)}}};Toolbar[_0x3ebf[6]][_0x3ebf[73]]= function(_0x8f99x16,_0x8f99x15){var _0x8f99x17=this[_0x3ebf[0]][_0x3ebf[74]][_0x3ebf[24]](_0x8f99x15);var _0x8f99x11=null;if(_0x8f99x17!= null){_0x8f99x11= this[_0x3ebf[76]](_0x8f99x16,_0x8f99x17[_0x3ebf[75]],_0x8f99x17[_0x3ebf[57]]);_0x8f99x11[_0x3ebf[61]](_0x8f99x17[_0x3ebf[60]]);_0x8f99x17[_0x3ebf[51]](_0x3ebf[59],function(){_0x8f99x11[_0x3ebf[61]](_0x8f99x17[_0x3ebf[60]])})};return _0x8f99x11};Toolbar[_0x3ebf[6]][_0x3ebf[76]]= function(_0x8f99x18,_0x8f99xd,_0x8f99x12){var _0x8f99x11=this[_0x3ebf[63]](_0x8f99x18);this[_0x3ebf[64]](_0x8f99x11,_0x8f99xd);this[_0x3ebf[77]](_0x8f99x11,_0x8f99x12);this[_0x3ebf[1]][_0x3ebf[66]](_0x8f99x11);return _0x8f99x11};Toolbar[_0x3ebf[6]][_0x3ebf[78]]= function(_0x8f99x19){var _0x8f99x7=this[_0x3ebf[0]][_0x3ebf[41]][_0x3ebf[40]];var _0x8f99x1a=function(){var _0x8f99x1b=!_0x8f99x7[_0x3ebf[79]]();for(var _0x8f99x14=0;_0x8f99x14< _0x8f99x19[_0x3ebf[47]];_0x8f99x14++){_0x8f99x19[_0x8f99x14][_0x3ebf[61]](_0x8f99x1b)}};_0x8f99x7[_0x3ebf[52]]()[_0x3ebf[51]](mxEvent.CHANGE,_0x8f99x1a);_0x8f99x1a()};Toolbar[_0x3ebf[6]][_0x3ebf[80]]= function(_0x8f99x19){var _0x8f99x7=this[_0x3ebf[0]][_0x3ebf[41]][_0x3ebf[40]];var _0x8f99x1a=function(){var _0x8f99x1c=false;if(!_0x8f99x7[_0x3ebf[79]]()){var _0x8f99x1d=_0x8f99x7[_0x3ebf[81]]();for(var _0x8f99x14=0;_0x8f99x14< _0x8f99x1d[_0x3ebf[47]];_0x8f99x14++){if(_0x8f99x7[_0x3ebf[53]]()[_0x3ebf[82]](_0x8f99x1d[_0x8f99x14])){_0x8f99x1c= true;break}}};for(var _0x8f99x14=0;_0x8f99x14< _0x8f99x19[_0x3ebf[47]];_0x8f99x14++){_0x8f99x19[_0x8f99x14][_0x3ebf[61]](_0x8f99x1c)}};_0x8f99x7[_0x3ebf[52]]()[_0x3ebf[51]](mxEvent.CHANGE,_0x8f99x1a);_0x8f99x1a()};Toolbar[_0x3ebf[6]][_0x3ebf[64]]= function(_0x8f99x11,_0x8f99xd){_0x8f99x11[_0x3ebf[85]](_0x3ebf[83],_0x3ebf[84]);if(_0x8f99xd!= null){_0x8f99x11[_0x3ebf[85]](_0x3ebf[86],_0x8f99xd)};this[_0x3ebf[87]](_0x8f99x11)};Toolbar[_0x3ebf[6]][_0x3ebf[87]]= function(_0x8f99x11){var _0x8f99x18=_0x8f99x11[_0x3ebf[69]];_0x8f99x11[_0x3ebf[61]]= function(_0x8f99x1e){_0x8f99x11[_0x3ebf[60]]= _0x8f99x1e;if(_0x8f99x1e){_0x8f99x11[_0x3ebf[69]]= _0x8f99x18}else {_0x8f99x11[_0x3ebf[69]]= _0x8f99x18+ _0x3ebf[88]}};_0x8f99x11[_0x3ebf[61]](true)};Toolbar[_0x3ebf[6]][_0x3ebf[77]]= function(_0x8f99x11,_0x8f99x12){if(_0x8f99x12!= null){mxEvent[_0x3ebf[51]](_0x8f99x11,_0x3ebf[89],function(_0x8f99x4){if(_0x8f99x11[_0x3ebf[60]]){_0x8f99x12(_0x8f99x4)};mxEvent[_0x3ebf[90]](_0x8f99x4)})}};Toolbar[_0x3ebf[6]][_0x3ebf[63]]= function(_0x8f99x18){var _0x8f99x11=document[_0x3ebf[68]](_0x3ebf[91]);_0x8f99x11[_0x3ebf[85]](_0x3ebf[92],_0x3ebf[93]);_0x8f99x11[_0x3ebf[69]]= _0x3ebf[94];var _0x8f99x1f=document[_0x3ebf[68]](_0x3ebf[67]);_0x8f99x1f[_0x3ebf[69]]= _0x3ebf[95]+ _0x8f99x18;_0x8f99x11[_0x3ebf[66]](_0x8f99x1f);return _0x8f99x11};Toolbar[_0x3ebf[6]][_0x3ebf[62]]= function(_0x8f99xc,_0x8f99xd){var _0x8f99x11=document[_0x3ebf[68]](_0x3ebf[91]);_0x8f99x11[_0x3ebf[85]](_0x3ebf[92],_0x3ebf[93]);_0x8f99x11[_0x3ebf[69]]= _0x3ebf[96];mxUtils[_0x3ebf[97]](_0x8f99x11,_0x8f99xc);return _0x8f99x11};Toolbar[_0x3ebf[6]][_0x3ebf[65]]= function(_0x8f99x11,_0x8f99xe,_0x8f99x12,_0x8f99x20){if(_0x8f99x12!= null){var _0x8f99x7=this[_0x3ebf[0]][_0x3ebf[41]][_0x3ebf[40]];var _0x8f99x10=null;mxEvent[_0x3ebf[51]](_0x8f99x11,_0x3ebf[89],mxUtils[_0x3ebf[4]](this,function(_0x8f99x4){if(_0x8f99x11[_0x3ebf[60]]== null|| _0x8f99x11[_0x3ebf[60]]){_0x8f99x7[_0x3ebf[98]][_0x3ebf[3]]();_0x8f99x10= new mxPopupMenu(_0x8f99x12);_0x8f99x10[_0x3ebf[67]][_0x3ebf[69]]+= _0x3ebf[99];_0x8f99x10[_0x3ebf[100]]= _0x8f99x20;_0x8f99x10[_0x3ebf[101]]= _0x8f99xe;_0x8f99x10[_0x3ebf[102]]= true;_0x8f99x10[_0x3ebf[106]](_0x8f99x11[_0x3ebf[103]],_0x8f99x11[_0x3ebf[104]]+ _0x8f99x11[_0x3ebf[105]]+ 34,null,_0x8f99x4);this[_0x3ebf[54]]= _0x8f99x10};mxEvent[_0x3ebf[90]](_0x8f99x4)}))}} \ No newline at end of file +/** + * $Id: Toolbar.js,v 1.3 2013-02-20 16:21:29 gaudenz Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ +/** + * Construcs a new toolbar for the given editor. + */ +function Toolbar(editorUi, container) +{ + this.editorUi = editorUi; + this.container = container; + this.init(); + + // Global handler to hide the current menu + mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) + { + this.hideMenu(); + })); +}; + +/** + * Adds the toolbar elements. + */ +Toolbar.prototype.init = function() +{ + this.addItems(['save', 'publish', '-', 'print', 'undo', 'redo', '-', 'copy', 'cut', 'paste', 'delete', '-', 'duplicate', '-', 'actualSize', 'zoomIn', 'zoomOut', '-']); + var fontElt = this.addMenu('Helvetica', mxResources.get('fontFamily'), true, 'fontFamily'); + fontElt.style.whiteSpace = 'nowrap'; + fontElt.style.overflow = 'hidden'; + fontElt.style.width = '70px'; + this.addSeparator(); + var sizeElt = this.addMenu('12', mxResources.get('fontSize'), true, 'fontSize'); + sizeElt.style.whiteSpace = 'nowrap'; + sizeElt.style.overflow = 'hidden'; + sizeElt.style.width = '30px'; + + this.addItems(['-', 'bold', 'italic', 'underline']); + // Giuseppe Careri + // var align = this.addMenuFunction('geSprite-left', mxResources.get('align'), false, mxUtils.bind(this, function(menu) + // { + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_LEFT], 'geIcon geSprite geSprite-left', null).setAttribute('title', mxResources.get('left')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_CENTER], 'geIcon geSprite geSprite-center', null).setAttribute('title', mxResources.get('center')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_RIGHT], 'geIcon geSprite geSprite-right', null).setAttribute('title', mxResources.get('right')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_TOP], 'geIcon geSprite geSprite-top', null).setAttribute('title', mxResources.get('top')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_MIDDLE], 'geIcon geSprite geSprite-middle', null).setAttribute('title', mxResources.get('middle')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_BOTTOM], 'geIcon geSprite geSprite-bottom', null).setAttribute('title', mxResources.get('bottom')); + // })); + // this.addItems(['fontColor', '-']); + // var line = this.addMenuFunction('geSprite-straight', mxResources.get('line'), false, mxUtils.bind(this, function(menu) + // { + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], [null], 'geIcon geSprite geSprite-straight', null).setAttribute('title', mxResources.get('straight')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['entityRelationEdgeStyle'], 'geIcon geSprite geSprite-entity', null).setAttribute('title', mxResources.get('entityRelation')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE, mxConstants.STYLE_ELBOW], ['elbowEdgeStyle', 'horizontal'], 'geIcon geSprite geSprite-helbow', null).setAttribute('title', mxResources.get('horizontal')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE, mxConstants.STYLE_ELBOW], ['elbowEdgeStyle', 'vertical'], 'geIcon geSprite geSprite-velbow', null).setAttribute('title', mxResources.get('vertical')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['segmentEdgeStyle'], 'geIcon geSprite geSprite-segment', null).setAttribute('title', mxResources.get('manual')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['orthogonalEdgeStyle'], 'geIcon geSprite geSprite-orthogonal', null).setAttribute('title', mxResources.get('automatic')); + // })); + // var linestart = this.addMenuFunction('geSprite-startclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu) + // { + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null).setAttribute('title', mxResources.get('none')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-startclassic', null).setAttribute('title', mxResources.get('classic')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OPEN, 1], 'geIcon geSprite geSprite-startopen', null).setAttribute('title', mxResources.get('openArrow')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_BLOCK, 1], 'geIcon geSprite geSprite-startblock', null).setAttribute('title', mxResources.get('block')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OVAL, 1], 'geIcon geSprite geSprite-startoval', null).setAttribute('title', mxResources.get('oval')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND, 1], 'geIcon geSprite geSprite-startdiamond', null).setAttribute('title', mxResources.get('diamond')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND_THIN, 1], 'geIcon geSprite geSprite-startthindiamond', null).setAttribute('title', mxResources.get('diamondThin')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_CLASSIC, 0], 'geIcon geSprite geSprite-startclassictrans', null).setAttribute('title', mxResources.get('classic')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_BLOCK, 0], 'geIcon geSprite geSprite-startblocktrans', null).setAttribute('title', mxResources.get('block')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OVAL, 0], 'geIcon geSprite geSprite-startovaltrans', null).setAttribute('title', mxResources.get('oval')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND, 0], 'geIcon geSprite geSprite-startdiamondtrans', null).setAttribute('title', mxResources.get('diamond')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND_THIN, 0], 'geIcon geSprite geSprite-startthindiamondtrans', null).setAttribute('title', mxResources.get('diamondThin')); + // })); + // var lineend = this.addMenuFunction('geSprite-endclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu) + // { + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null).setAttribute('title', mxResources.get('none')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-endclassic', null).setAttribute('title', mxResources.get('classic')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OPEN, 1], 'geIcon geSprite geSprite-endopen', null).setAttribute('title', mxResources.get('openArrow')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_BLOCK, 1], 'geIcon geSprite geSprite-endblock', null).setAttribute('title', mxResources.get('block')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OVAL, 1], 'geIcon geSprite geSprite-endoval', null).setAttribute('title', mxResources.get('oval')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND, 1], 'geIcon geSprite geSprite-enddiamond', null).setAttribute('title', mxResources.get('diamond')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND_THIN, 1], 'geIcon geSprite geSprite-endthindiamond', null).setAttribute('title', mxResources.get('diamondThin')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 0], 'geIcon geSprite geSprite-endclassictrans', null).setAttribute('title', mxResources.get('classic')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_BLOCK, 0], 'geIcon geSprite geSprite-endblocktrans', null).setAttribute('title', mxResources.get('block')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OVAL, 0], 'geIcon geSprite geSprite-endovaltrans', null).setAttribute('title', mxResources.get('oval')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND, 0], 'geIcon geSprite geSprite-enddiamondtrans', null).setAttribute('title', mxResources.get('diamond')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND_THIN, 0], 'geIcon geSprite geSprite-endthindiamondtrans', null).setAttribute('title', mxResources.get('diamondThin')); + // })); + // this.addItems(['-', 'strokeColor', 'image', 'fillColor']); + // this.addItem('geSprite-gradientcolor', 'gradientColor').setAttribute('title', mxResources.get('gradient')); + // this.addItems(['shadow']); + + var graph = this.editorUi.editor.graph; + + // Update font size and font family labels + var update = mxUtils.bind(this, function() + { + var ff = 'Helvetica'; + var fs = '12'; + var state = graph.getView().getState(graph.getSelectionCell()); + + if (state != null) + { + ff = state.style[mxConstants.STYLE_FONTFAMILY] || ff; + fs = state.style[mxConstants.STYLE_FONTSIZE] || fs; + + if (ff.length > 10) + { + ff = ff.substring(0, 8) + '...'; + } + + fontElt.innerHTML = ff; + sizeElt.innerHTML = fs; + } + }); + + graph.getSelectionModel().addListener(mxEvent.CHANGE, update); + graph.getModel().addListener(mxEvent.CHANGE, update); + + // Giuseppe Careri + // Updates button states + //this.addEdgeSelectionHandler([line, linestart, lineend]); + //this.addSelectionHandler([align]); +}; + +/** + * Hides the current menu. + */ +Toolbar.prototype.hideMenu = function() +{ + if (this.currentMenu != null) + { + this.currentMenu.hideMenu(); + this.currentMenu.destroy(); + this.currentMenu = null; + } +}; + +/** + * Adds a label to the toolbar. + */ +Toolbar.prototype.addMenu = function(label, tooltip, showLabels, name) +{ + var menu = this.editorUi.menus.get(name); + var elt = this.addMenuFunction(label, tooltip, showLabels, menu.funct); + + menu.addListener('stateChanged', function() + { + elt.setEnabled(menu.enabled); + }); + + return elt; +}; + +/** + * Adds a label to the toolbar. + */ +Toolbar.prototype.addMenuFunction = function(label, tooltip, showLabels, funct) +{ + var elt = (showLabels) ? this.createLabel(label) : this.createButton(label); + this.initElement(elt, tooltip); + this.addMenuHandler(elt, showLabels, funct); + this.container.appendChild(elt); + + return elt; +}; + +/** + * Adds a separator to the separator. + */ +Toolbar.prototype.addSeparator = function() +{ + var elt = document.createElement('div'); + elt.className = 'geSeparator'; + this.container.appendChild(elt); + + return elt; +}; + +/** + * Adds given action item + */ +Toolbar.prototype.addItems = function(keys) +{ + for (var i = 0; i < keys.length; i++) + { + var key = keys[i]; + + if (key == '-') + { + this.addSeparator(); + } + else + { + this.addItem('geSprite-' + key.toLowerCase(), key); + } + } +}; + +/** + * Adds given action item + */ +Toolbar.prototype.addItem = function(sprite, key) +{ + var action = this.editorUi.actions.get(key); + var elt = null; + + if (action != null) + { + elt = this.addButton(sprite, action.label, action.funct); + elt.setEnabled(action.enabled); + + action.addListener('stateChanged', function() + { + elt.setEnabled(action.enabled); + }); + } + + return elt; +}; + +/** + * Adds a button to the toolbar. + */ +Toolbar.prototype.addButton = function(classname, tooltip, funct) +{ + var elt = this.createButton(classname); + + this.initElement(elt, tooltip); + this.addClickHandler(elt, funct); + this.container.appendChild(elt); + + return elt; +}; + +/** + * Updates the states of the given toolbar items based on the selection. + */ +Toolbar.prototype.addSelectionHandler = function(items) +{ + var graph = this.editorUi.editor.graph; + + var selectionListener = function() + { + var selected = !graph.isSelectionEmpty(); + + for (var i = 0; i < items.length; i++) + { + items[i].setEnabled(selected); + } + }; + + graph.getSelectionModel().addListener(mxEvent.CHANGE, selectionListener); + selectionListener(); +}; + +/** + * Updates the states of the given toolbar items based on the selection. + */ +Toolbar.prototype.addEdgeSelectionHandler = function(items) +{ + var graph = this.editorUi.editor.graph; + + var selectionListener = function() + { + var edgeSelected = false; + + if (!graph.isSelectionEmpty()) + { + var cells = graph.getSelectionCells(); + + for (var i = 0; i < cells.length; i++) + { + if (graph.getModel().isEdge(cells[i])) + { + edgeSelected = true; + break; + } + } + } + + for (var i = 0; i < items.length; i++) + { + items[i].setEnabled(edgeSelected); + } + }; + + graph.getSelectionModel().addListener(mxEvent.CHANGE, selectionListener); + selectionListener(); +}; + +/** + * Initializes the given toolbar element. + */ +Toolbar.prototype.initElement = function(elt, tooltip) +{ + elt.setAttribute('tabindex', '0'); + + // Adds tooltip + if (tooltip != null) + { + elt.setAttribute('title', tooltip); + } + + this.addEnabledState(elt); +}; + +/** + * Adds enabled state with setter to DOM node (avoids JS wrapper). + */ +Toolbar.prototype.addEnabledState = function(elt) +{ + var classname = elt.className; + + elt.setEnabled = function(value) + { + elt.enabled = value; + + if (value) + { + elt.className = classname; + } + else + { + elt.className = classname + ' geDisabled'; + } + }; + + elt.setEnabled(true); +}; + +/** + * Adds enabled state with setter to DOM node (avoids JS wrapper). + */ +Toolbar.prototype.addClickHandler = function(elt, funct) +{ + if (funct != null) + { + mxEvent.addListener(elt, 'click', function(evt) + { + if (elt.enabled) + { + funct(evt); + } + + mxEvent.consume(evt); + }); + } +}; + +/** + * Creates and returns a new button. + */ +Toolbar.prototype.createButton = function(classname) +{ + var elt = document.createElement('a'); + elt.setAttribute('href', 'javascript:void(0);'); + elt.className = 'geButton'; + + var inner = document.createElement('div'); + inner.className = 'geSprite ' + classname; + elt.appendChild(inner); + + return elt; +}; + +/** + * Creates and returns a new button. + */ +Toolbar.prototype.createLabel = function(label, tooltip) +{ + var elt = document.createElement('a'); + elt.setAttribute('href', 'javascript:void(0);'); + elt.className = 'geLabel'; + mxUtils.write(elt, label); + + return elt; +}; + +/** + * Adds a handler for showing a menu in the given element. + */ +Toolbar.prototype.addMenuHandler = function(elt, showLabels, funct, showAll) +{ + if (funct != null) + { + var graph = this.editorUi.editor.graph; + var menu = null; + + mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt) + { + if (elt.enabled == null || elt.enabled) + { + graph.panningHandler.hideMenu(); + menu = new mxPopupMenu(funct); + menu.div.className += ' geToolbarMenu'; + menu.showDisabled = showAll; + menu.labels = showLabels; + menu.autoExpand = true; + + menu.popup(elt.offsetLeft, elt.offsetTop + elt.offsetHeight + 34, null, evt); + this.currentMenu = menu; + } + + mxEvent.consume(evt); + })); + } +}; diff --git a/public/assets/plugins/jscripty/js/custom.js b/public/assets/plugins/jscripty/js/custom.js index b15d5d2..a53e30b 100644 --- a/public/assets/plugins/jscripty/js/custom.js +++ b/public/assets/plugins/jscripty/js/custom.js @@ -1 +1,283 @@ -var _0x123f=["\x68\x72\x65\x66","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x3F","\x6C\x61\x73\x74\x49\x6E\x64\x65\x78\x4F\x66","\x26","\x73\x70\x6C\x69\x74","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x6C\x65\x6E\x67\x74\x68","\x3D","\x69\x6E\x64\x65\x78\x4F\x66","\x68\x74\x74\x70\x3A\x2F\x2F\x65\x78\x70\x2E\x64\x72\x61\x77\x2E\x69\x6F\x2F\x49\x6D\x61\x67\x65\x45\x78\x70\x6F\x72\x74\x32\x2F\x65\x78\x70\x6F\x72\x74","\x68\x74\x74\x70\x3A\x2F\x2F\x6C\x6F\x63\x61\x6C\x68\x6F\x73\x74\x3A\x33\x30\x30\x30","\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F","\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x73\x2F","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x73\x68\x61\x70\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x69\x6D\x61\x67\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x73\x74\x79\x6C\x65\x73","\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x6F\x70\x65\x6E","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x72\x65\x73\x6F\x75\x72\x63\x65\x73","\x2F\x64\x69\x61","\x63\x75\x73\x74\x6F\x6D","\x4E\x47\x5F\x54\x52\x41\x4E\x53\x4C\x41\x54\x45\x5F\x4C\x41\x4E\x47\x5F\x4B\x45\x59","\x67\x65\x74\x49\x74\x65\x6D","\x6C\x6F\x67","\x65\x6E","\x65\x6E\x5F\x45\x4E","\x69\x74","\x6D\x78\x4C\x61\x6E\x67\x75\x61\x67\x65","\x61\x72","\x62\x73","\x63\x73","\x64\x61","\x64\x65","\x65\x6C","\x65\x73","\x65\x73\x2D\x61\x72","\x66\x72","\x68\x75","\x69\x64","\x6A\x61","\x6B\x6F","\x6E\x6C","\x6E\x6F","\x70\x6C","\x70\x74\x2D\x62\x72","\x70\x74","\x72\x6F","\x72\x75","\x73\x72","\x73\x76","\x74\x68","\x74\x72","\x75\x6B","\x7A\x68","\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68","\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x6A\x73","\x55\x53\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x53\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x4D\x61\x6C\x65","\x55\x4B\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x4B\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x4D\x61\x6C\x65","\x41\x75\x73\x74\x72\x61\x6C\x69\x61\x6E\x20\x45\x6E\x67\x6C\x69\x73\x68","\x55\x53\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x53\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x4D\x61\x6C\x65","\x43\x68\x69\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x43\x68\x69\x6E\x65\x73\x65\x20\x4D\x61\x6C\x65","\x48\x6F\x6E\x67\x20\x4B\x6F\x6E\x67\x20\x43\x61\x6E\x74\x6F\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x54\x61\x69\x77\x61\x6E\x20\x43\x68\x69\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x4D\x61\x6C\x65","\x4B\x6F\x72\x65\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x4B\x6F\x72\x65\x61\x6E\x20\x4D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x48\x75\x6E\x67\x61\x72\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x42\x72\x61\x7A\x69\x6C\x69\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x43\x61\x74\x61\x6C\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x43\x7A\x65\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x44\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x69\x6E\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x44\x75\x74\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x49\x74\x61\x6C\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x54\x75\x72\x6B\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65\x09","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x54\x75\x72\x6B\x69\x73\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x47\x65\x72\x6D\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x47\x65\x72\x6D\x61\x6E\x20\x4D\x61\x6C\x65","\x52\x75\x73\x73\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x52\x75\x73\x73\x69\x61\x6E\x20\x4D\x61\x6C\x65","\x53\x77\x65\x64\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x4D\x61\x6C\x65","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x55\x53\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x43\x61\x6E\x61\x64\x61\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x55\x4B\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x41\x75\x73\x74\x72\x61\x6C\x69\x61\x29","\x53\x70\x61\x6E\x69\x73\x68\x20\x28\x53\x70\x61\x69\x6E\x29","\x53\x70\x61\x6E\x69\x73\x68\x20\x28\x4D\x65\x78\x69\x63\x6F\x29","\x49\x74\x61\x6C\x69\x61\x6E\x20\x28\x49\x74\x61\x6C\x79\x29\x20\x2F\x20\x46\x69\x6E\x6E\x69\x73\x68\x20\x28\x46\x69\x6E\x6C\x61\x6E\x64\x29","\x46\x72\x65\x6E\x63\x68\x20\x28\x46\x72\x61\x6E\x63\x65\x29","\x46\x72\x65\x6E\x63\x68\x20\x28\x43\x61\x6E\x61\x64\x61\x29","\x50\x6F\x6C\x69\x73\x68\x20\x28\x50\x6F\x6C\x61\x6E\x64\x29","\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x28\x50\x6F\x72\x74\x75\x67\x61\x6C\x29","\x43\x61\x74\x61\x6C\x61\x6E\x20\x28\x43\x61\x74\x61\x6C\x61\x6E\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x54\x61\x69\x77\x61\x6E\x29","\x44\x61\x6E\x69\x73\x68\x20\x28\x44\x65\x6E\x6D\x61\x72\x6B\x29","\x47\x65\x72\x6D\x61\x6E\x20\x28\x47\x65\x72\x6D\x61\x6E\x79\x29","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x28\x4A\x61\x70\x61\x6E\x29","\x4B\x6F\x72\x65\x61\x6E\x20\x28\x4B\x6F\x72\x65\x61\x29","\x44\x75\x74\x63\x68\x20\x28\x4E\x65\x74\x68\x65\x72\x6C\x61\x6E\x64\x73\x29","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x28\x4E\x6F\x72\x77\x61\x79\x29","\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x28\x42\x72\x61\x7A\x69\x6C\x29","\x52\x75\x73\x73\x69\x61\x6E\x20\x28\x52\x75\x73\x73\x69\x61\x29","\x53\x77\x65\x64\x69\x73\x68\x20\x28\x53\x77\x65\x64\x65\x6E\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x43\x68\x69\x6E\x61\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x48\x6F\x6E\x67\x20\x4B\x6F\x6E\x67\x29","\x44\x65\x66\x61\x75\x6C\x74","\x44\x61\x74\x65","\x55\x53\x20\x4D\x6F\x6E\x65\x79","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39\x39","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39\x39\x39","\x54\x69\x6D\x65","\x50\x68\x6F\x6E\x65\x20\x6E\x75\x6D\x62\x65\x72","\x53\x74\x72\x65\x65\x74\x73","\x55\x53\x20\x43\x69\x74\x79\x2F\x53\x74\x61\x74\x65\x73","\x41\x66\x72\x69\x6B\x61\x61\x6E\x73","\x41\x6C\x62\x61\x6E\x69\x61\x6E","\x41\x6D\x68\x61\x72\x69\x63","\x41\x72\x61\x62\x69\x63","\x41\x72\x6D\x65\x6E\x69\x61\x6E","\x41\x7A\x65\x72\x62\x61\x69\x6A\x61\x6E\x69","\x42\x61\x73\x71\x75\x65","\x42\x65\x6C\x61\x72\x75\x73\x69\x61\x6E","\x42\x65\x6E\x67\x61\x6C\x69","\x42\x69\x68\x61\x72\x69","\x42\x6F\x73\x6E\x69\x61\x6E","\x42\x72\x65\x74\x6F\x6E","\x42\x75\x6C\x67\x61\x72\x69\x61\x6E","\x43\x61\x6D\x62\x6F\x64\x69\x61\x6E","\x43\x61\x74\x61\x6C\x61\x6E","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x53\x69\x6D\x70\x6C\x69\x66\x69\x65\x64\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x54\x72\x61\x64\x69\x74\x69\x6F\x6E\x61\x6C\x29","\x43\x6F\x72\x73\x69\x63\x61\x6E","\x43\x72\x6F\x61\x74\x69\x61\x6E","\x43\x7A\x65\x63\x68","\x44\x61\x6E\x69\x73\x68","\x44\x75\x74\x63\x68","\x45\x6E\x67\x6C\x69\x73\x68","\x45\x73\x70\x65\x72\x61\x6E\x74\x6F","\x45\x73\x74\x6F\x6E\x69\x61\x6E","\x46\x61\x72\x6F\x65\x73\x65","\x46\x69\x6C\x69\x70\x69\x6E\x6F","\x46\x69\x6E\x6E\x69\x73\x68","\x46\x72\x65\x6E\x63\x68","\x46\x72\x69\x73\x69\x61\x6E","\x47\x61\x6C\x69\x63\x69\x61\x6E","\x47\x65\x6F\x72\x67\x69\x61\x6E","\x47\x65\x72\x6D\x61\x6E","\x47\x72\x65\x65\x6B","\x47\x75\x61\x72\x61\x6E\x69","\x47\x75\x6A\x61\x72\x61\x74\x69","\x48\x61\x63\x6B\x65\x72","\x48\x61\x75\x73\x61","\x48\x65\x62\x72\x65\x77","\x48\x69\x6E\x64\x69","\x48\x75\x6E\x67\x61\x72\x69\x61\x6E","\x49\x63\x65\x6C\x61\x6E\x64\x69\x63","\x49\x6E\x64\x6F\x6E\x65\x73\x69\x61\x6E","\x49\x6E\x74\x65\x72\x6C\x69\x6E\x67\x75\x61","\x49\x72\x69\x73\x68","\x49\x74\x61\x6C\x69\x61\x6E","\x4A\x61\x76\x61\x6E\x65\x73\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65","\x4B\x61\x6E\x6E\x61\x64\x61","\x4B\x61\x7A\x61\x6B\x68","\x4B\x69\x6E\x79\x61\x72\x77\x61\x6E\x64\x61","\x4B\x69\x72\x75\x6E\x64\x69","\x4B\x6C\x69\x6E\x67\x6F\x6E","\x4B\x75\x72\x64\x69\x73\x68","\x4B\x6F\x72\x65\x61\x6E","\x4B\x79\x72\x67\x79\x7A","\x4C\x61\x6F\x74\x68\x69\x61\x6E","\x4C\x61\x74\x69\x6E","\x4C\x61\x74\x76\x69\x61\x6E","\x4C\x69\x6E\x67\x61\x6C\x61","\x4C\x69\x74\x68\x75\x61\x6E\x69\x61\x6E","\x4D\x61\x63\x65\x64\x6F\x6E\x69\x61\x6E","\x4D\x61\x6C\x61\x67\x61\x73\x79","\x4D\x61\x6C\x61\x79","\x4D\x61\x6C\x61\x79\x61\x6C\x61\x6D","\x4D\x61\x6C\x74\x65\x73\x65","\x4D\x61\x6F\x72\x69","\x4D\x61\x72\x61\x74\x68\x69","\x4D\x6F\x6C\x64\x61\x76\x69\x61\x6E","\x4D\x6F\x6E\x67\x6F\x6C\x69\x61\x6E","\x4D\x6F\x6E\x74\x65\x6E\x65\x67\x72\x69\x6E","\x4E\x65\x70\x61\x6C\x69","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x28\x4E\x79\x6E\x6F\x72\x73\x6B\x29","\x4F\x63\x63\x69\x74\x61\x6E","\x4F\x72\x69\x79\x61","\x4F\x72\x6F\x6D\x6F","\x50\x61\x73\x68\x74\x6F","\x50\x65\x72\x73\x69\x61\x6E","\x50\x69\x72\x61\x74\x65","\x50\x6F\x6C\x69\x73\x68","\x50\x75\x6E\x6A\x61\x62\x69","\x51\x75\x65\x63\x68\x75\x61","\x52\x6F\x6D\x61\x6E\x69\x61\x6E","\x52\x6F\x6D\x61\x6E\x73\x68","\x52\x75\x73\x73\x69\x61\x6E","\x53\x63\x6F\x74\x73\x20\x47\x61\x65\x6C\x69\x63","\x53\x65\x72\x62\x69\x61\x6E","\x53\x65\x72\x62\x6F\x2D\x43\x72\x6F\x61\x74\x69\x61\x6E","\x53\x65\x73\x6F\x74\x68\x6F","\x53\x68\x6F\x6E\x61","\x53\x69\x6E\x64\x68\x69","\x53\x69\x6E\x68\x61\x6C\x65\x73\x65","\x53\x6C\x6F\x76\x61\x6B","\x53\x6C\x6F\x76\x65\x6E\x69\x61\x6E","\x53\x6F\x6D\x61\x6C\x69","\x53\x70\x61\x6E\x69\x73\x68","\x53\x75\x6E\x64\x61\x6E\x65\x73\x65","\x53\x77\x61\x68\x69\x6C\x69","\x53\x77\x65\x64\x69\x73\x68","\x54\x61\x6A\x69\x6B","\x54\x61\x6D\x69\x6C","\x54\x61\x74\x61\x72","\x54\x65\x6C\x75\x67\x75","\x54\x68\x61\x69","\x54\x69\x67\x72\x69\x6E\x79\x61","\x54\x6F\x6E\x67\x61","\x54\x75\x72\x6B\x69\x73\x68","\x54\x75\x72\x6B\x6D\x65\x6E","\x54\x77\x69","\x55\x69\x67\x68\x75\x72","\x55\x6B\x72\x61\x69\x6E\x69\x61\x6E","\x55\x72\x64\x75","\x55\x7A\x62\x65\x6B","\x56\x69\x65\x74\x6E\x61\x6D\x65\x73\x65","\x57\x65\x6C\x73\x68","\x58\x68\x6F\x73\x61","\x59\x69\x64\x64\x69\x73\x68","\x59\x6F\x72\x75\x62\x61","\x5A\x75\x6C\x75"];var urlParams=(function(_0xd132x2){var _0xd132x3= new Object();var _0xd132x4=_0xd132x2[_0x123f[3]](_0x123f[2]);if(_0xd132x4> 0){var _0xd132x5=_0xd132x2[_0x123f[6]](_0xd132x4+ 1)[_0x123f[5]](_0x123f[4]);for(var _0xd132x6=0;_0xd132x6< _0xd132x5[_0x123f[7]];_0xd132x6++){_0xd132x4= _0xd132x5[_0xd132x6][_0x123f[9]](_0x123f[8]);if(_0xd132x4> 0){_0xd132x3[_0xd132x5[_0xd132x6][_0x123f[6]](0,_0xd132x4)]= _0xd132x5[_0xd132x6][_0x123f[6]](_0xd132x4+ 1)}}};return _0xd132x3})(window[_0x123f[1]][_0x123f[0]]);var t0= new Date();var MAX_REQUEST_SIZE=10485760;var MAX_WIDTH=12000;var MAX_HEIGHT=12000;var EXPORT_URL=_0x123f[10];var SHARE_HOST=_0x123f[11];var SAVE_URL=_0x123f[12];var VARIABLE_URL=_0x123f[13];var STENCIL_PATH=_0x123f[14];var SHAPES_PATH=_0x123f[15];var IMAGE_PATH=_0x123f[16];var STYLE_PATH=_0x123f[17];var CSS_PATH=_0x123f[17];var OPEN_FORM=_0x123f[18];var TEMPLATE_PATH=_0x123f[19];var RESOURCES_PATH=_0x123f[20];var RESOURCE_BASE=RESOURCES_PATH+ _0x123f[21];var tapAndHoldStartsConnection=true;var showConnectorImg=true;var mxLoadResources=false;console[_0x123f[25]](_0x123f[22],localStorage[_0x123f[24]](_0x123f[23]));switch(localStorage[_0x123f[24]](_0x123f[23])){case _0x123f[27]:mxLanguage= _0x123f[26];break;case _0x123f[28]:mxLanguage= _0x123f[28];break;default:mxLanguage= _0x123f[28]};console[_0x123f[25]](_0x123f[29],mxLanguage);var mxLanguages=[_0x123f[30],_0x123f[31],_0x123f[32],_0x123f[33],_0x123f[34],_0x123f[35],_0x123f[36],_0x123f[37],_0x123f[38],_0x123f[39],_0x123f[40],_0x123f[28],_0x123f[41],_0x123f[42],_0x123f[43],_0x123f[44],_0x123f[45],_0x123f[46],_0x123f[47],_0x123f[48],_0x123f[49],_0x123f[50],_0x123f[51],_0x123f[52],_0x123f[53],_0x123f[54],_0x123f[55]];var mxBasePath=_0x123f[56];var geBasePath=_0x123f[57];var ISPEECHLANG={usenglishfemale:_0x123f[58],usenglishmale:_0x123f[59],ukenglishfemale:_0x123f[60],ukenglishmale:_0x123f[61],auenglishfemale:_0x123f[62],usspanishfemale:_0x123f[63],usspanishmale:_0x123f[64],chchinesefemale:_0x123f[65],chchinesemale:_0x123f[66],hkchinesefemale:_0x123f[67],twchinesefemale:_0x123f[68],jpjapanesefemale:_0x123f[69],jpjapanesemale:_0x123f[70],krkoreanfemale:_0x123f[71],krkoreanmale:_0x123f[72],caenglishfemale:_0x123f[73],huhungarianfemale:_0x123f[74],brportuguesefemale:_0x123f[75],eurportuguesefemale:_0x123f[76],eurportuguesemale:_0x123f[77],eurspanishfemale:_0x123f[78],eurspanishmale:_0x123f[79],eurcatalanfemale:_0x123f[80],eurczechfemale:_0x123f[81],eurdanishfemale:_0x123f[82],eurfinnishfemale:_0x123f[83],eurfrenchfemale:_0x123f[84],eurfrenchmale:_0x123f[85],eurnorwegianfemale:_0x123f[86],eurdutchfemale:_0x123f[87],eurpolishfemale:_0x123f[88],euritalianfemale:_0x123f[89],eurturkishfemale:_0x123f[90],eurturkishmale:_0x123f[91],eurgermanfemale:_0x123f[92],eurgermanmale:_0x123f[93],rurussianfemale:_0x123f[94],rurussianmale:_0x123f[95],swswedishfemale:_0x123f[96],cafrenchfemale:_0x123f[97],cafrenchmale:_0x123f[98]};var ISPEECHASRLANG={"\x65\x6E\x2D\x55\x53":_0x123f[99],"\x65\x6E\x2D\x43\x41":_0x123f[100],"\x65\x6E\x2D\x47\x42":_0x123f[101],"\x65\x6E\x2D\x41\x55":_0x123f[102],"\x65\x73\x2D\x45\x53":_0x123f[103],"\x65\x73\x2D\x4D\x58":_0x123f[104],"\x69\x74\x2D\x49\x54":_0x123f[105],"\x66\x72\x2D\x46\x52":_0x123f[106],"\x66\x72\x2D\x43\x41":_0x123f[107],"\x70\x6C\x2D\x50\x4C":_0x123f[108],"\x70\x74\x2D\x50\x54":_0x123f[109],"\x63\x61\x2D\x45\x53":_0x123f[110],"\x7A\x68\x2D\x54\x57":_0x123f[111],"\x64\x61\x2D\x44\x4B":_0x123f[112],"\x66\x72\x2D\x46\x52":_0x123f[113],"\x6A\x61\x2D\x4A\x50":_0x123f[114],"\x6B\x6F\x2D\x4B\x52":_0x123f[115],"\x6E\x6C\x2D\x4E\x4C":_0x123f[116],"\x6E\x62\x2D\x4E\x4F":_0x123f[117],"\x70\x74\x2D\x42\x52":_0x123f[118],"\x72\x75\x2D\x52\x55":_0x123f[119],"\x73\x76\x2D\x53\x45":_0x123f[120],"\x7A\x68\x2D\x43\x4E":_0x123f[121],"\x7A\x68\x2D\x48\x4B":_0x123f[122]};var ISPEECHASRMODEL={0:_0x123f[123],date:_0x123f[124],usmoney:_0x123f[125],numbersto9:_0x123f[126],numbersto99:_0x123f[127],numbersto999:_0x123f[128],time:_0x123f[129],phonenumber:_0x123f[130],streets:_0x123f[131],citystate:_0x123f[132]};var GOOGLETTSLANG={"\x61\x66":_0x123f[133],"\x73\x71":_0x123f[134],"\x61\x6D":_0x123f[135],"\x61\x72":_0x123f[136],"\x68\x79":_0x123f[137],"\x61\x7A":_0x123f[138],"\x65\x75":_0x123f[139],"\x62\x65":_0x123f[140],"\x62\x6E":_0x123f[141],"\x62\x68":_0x123f[142],"\x62\x73":_0x123f[143],"\x62\x72":_0x123f[144],"\x62\x67":_0x123f[145],"\x6B\x6D":_0x123f[146],"\x63\x61":_0x123f[147],"\x7A\x68\x2D\x43\x4E":_0x123f[148],"\x7A\x68\x2D\x54\x57":_0x123f[149],"\x63\x6F":_0x123f[150],"\x68\x72":_0x123f[151],"\x63\x73":_0x123f[152],"\x64\x61":_0x123f[153],"\x6E\x6C":_0x123f[154],"\x65\x6E":_0x123f[155],"\x65\x6F":_0x123f[156],"\x65\x74":_0x123f[157],"\x66\x6F":_0x123f[158],"\x74\x6C":_0x123f[159],"\x66\x69":_0x123f[160],"\x66\x72":_0x123f[161],"\x66\x79":_0x123f[162],"\x67\x6C":_0x123f[163],"\x6B\x61":_0x123f[164],"\x64\x65":_0x123f[165],"\x65\x6C":_0x123f[166],"\x67\x6E":_0x123f[167],"\x67\x75":_0x123f[168],"\x78\x78\x2D\x68\x61\x63\x6B\x65\x72":_0x123f[169],"\x68\x61":_0x123f[170],"\x69\x77":_0x123f[171],"\x68\x69":_0x123f[172],"\x68\x75":_0x123f[173],"\x69\x73":_0x123f[174],"\x69\x64":_0x123f[175],"\x69\x61":_0x123f[176],"\x67\x61":_0x123f[177],"\x69\x74":_0x123f[178],"\x6A\x77":_0x123f[179],"\x6A\x61":_0x123f[180],"\x6B\x6E":_0x123f[181],"\x6B\x6B":_0x123f[182],"\x72\x77":_0x123f[183],"\x72\x6E":_0x123f[184],"\x78\x78\x2D\x6B\x6C\x69\x6E\x67\x6F\x6E":_0x123f[185],"\x6B\x75":_0x123f[186],"\x6B\x6F":_0x123f[187],"\x6B\x79":_0x123f[188],"\x6C\x6F":_0x123f[189],"\x6C\x61":_0x123f[190],"\x6C\x76":_0x123f[191],"\x6C\x6E":_0x123f[192],"\x6C\x74":_0x123f[193],"\x6D\x6B":_0x123f[194],"\x6D\x67":_0x123f[195],"\x6D\x73":_0x123f[196],"\x6D\x6C":_0x123f[197],"\x6D\x74":_0x123f[198],"\x6D\x69":_0x123f[199],"\x6D\x72":_0x123f[200],"\x6D\x6F":_0x123f[201],"\x6D\x6E":_0x123f[202],"\x73\x72\x2D\x4D\x45":_0x123f[203],"\x6E\x65":_0x123f[204],"\x6E\x6F":_0x123f[205],"\x6E\x6E":_0x123f[206],"\x6F\x63":_0x123f[207],"\x6F\x72":_0x123f[208],"\x6F\x6D":_0x123f[209],"\x70\x73":_0x123f[210],"\x66\x61":_0x123f[211],"\x78\x78\x2D\x70\x69\x72\x61\x74\x65":_0x123f[212],"\x70\x6C":_0x123f[213],"\x70\x74\x2D\x42\x52":_0x123f[118],"\x70\x74\x2D\x50\x54":_0x123f[109],"\x70\x61":_0x123f[214],"\x71\x75":_0x123f[215],"\x72\x6F":_0x123f[216],"\x72\x6D":_0x123f[217],"\x72\x75":_0x123f[218],"\x67\x64":_0x123f[219],"\x73\x72":_0x123f[220],"\x73\x68":_0x123f[221],"\x73\x74":_0x123f[222],"\x73\x6E":_0x123f[223],"\x73\x64":_0x123f[224],"\x73\x69":_0x123f[225],"\x73\x6B":_0x123f[226],"\x73\x6C":_0x123f[227],"\x73\x6F":_0x123f[228],"\x65\x73":_0x123f[229],"\x73\x75":_0x123f[230],"\x73\x77":_0x123f[231],"\x73\x76":_0x123f[232],"\x74\x67":_0x123f[233],"\x74\x61":_0x123f[234],"\x74\x74":_0x123f[235],"\x74\x65":_0x123f[236],"\x74\x68":_0x123f[237],"\x74\x69":_0x123f[238],"\x74\x6F":_0x123f[239],"\x74\x72":_0x123f[240],"\x74\x6B":_0x123f[241],"\x74\x77":_0x123f[242],"\x75\x67":_0x123f[243],"\x75\x6B":_0x123f[244],"\x75\x72":_0x123f[245],"\x75\x7A":_0x123f[246],"\x76\x69":_0x123f[247],"\x63\x79":_0x123f[248],"\x78\x68":_0x123f[249],"\x79\x69":_0x123f[250],"\x79\x6F":_0x123f[251],"\x7A\x75":_0x123f[252]} \ No newline at end of file +var urlParams = (function(url) { + var result = new Object(); + var idx = url.lastIndexOf('?'); + + if (idx > 0) { + var params = url.substring(idx + 1).split('&'); + + for (var i = 0; i < params.length; i++) { + idx = params[i].indexOf('='); + + if (idx > 0) { + result[params[i].substring(0, idx)] = params[i].substring(idx + 1); + } + } + } + + return result; +})(window.location.href); + +var t0 = new Date(); + +// Public global variables +var MAX_REQUEST_SIZE = 10485760; +var MAX_WIDTH = 12000; +var MAX_HEIGHT = 12000; + +// CUSTOM_PARAMETERS - URLs for save and export +var EXPORT_URL = 'http://exp.draw.io/ImageExport2/export'; +var SHARE_HOST = 'http://localhost:3000'; + +var SAVE_URL = 'api/jscripty/projects/'; +var VARIABLE_URL = 'api/square/variables/'; + +// Paths and files +var STENCIL_PATH = '/assets/plugins/jscripty/stencils'; +var SHAPES_PATH = '/assets/plugins/mxgraph/shapes'; +var IMAGE_PATH = '/assets/plugins/mxgraph/images'; +// Path for images inside the diagram +//var GRAPH_IMAGE_PATH = 'assets/plugins/mxgraph/img'; +//var ICONFINDER_PATH = 'iconfinder'; +var STYLE_PATH = '/assets/plugins/mxgraph/styles'; +var CSS_PATH = '/assets/plugins/mxgraph/styles'; +var OPEN_FORM = 'api/jscripty/projects/open'; +var TEMPLATE_PATH = '/assets/plugins/jscripty/templates'; + +// Directory for i18 files and basename for main i18n file +var RESOURCES_PATH = '/assets/plugins/jscripty/resources'; +var RESOURCE_BASE = RESOURCES_PATH + '/dia'; + +// Specifies connection mode for touch devices (at least one should be true) +var tapAndHoldStartsConnection = true; +var showConnectorImg = true; + +var mxLoadResources = false; +// var mxLanguage = ''; +console.log('custom', localStorage.getItem("NG_TRANSLATE_LANG_KEY")); +switch (localStorage.getItem("NG_TRANSLATE_LANG_KEY")) { + case 'en_EN': + mxLanguage = 'en'; + break; + case 'it': + mxLanguage = 'it'; + break; + default: + mxLanguage = 'it'; +} +console.log('mxLanguage', mxLanguage); + +var mxLanguages = ['ar', 'bs', 'cs', 'da', 'de', 'el', 'es', 'es-ar', 'fr', + 'hu', 'id', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt-br', 'pt', 'ro', 'ru', + 'sr', 'sv', 'th', 'tr', 'uk', 'zh' +]; +var mxBasePath = 'assets/plugins/mxgraph'; +var geBasePath = 'assets/plugins/mxgraph/js'; + +var ISPEECHLANG = { + usenglishfemale: "US English Female", + usenglishmale: "US English Male", + ukenglishfemale: "UK English Female", + ukenglishmale: "UK English Male", + auenglishfemale: "Australian English", + usspanishfemale: "US Spanish Female", + usspanishmale: "US Spanish Male", + chchinesefemale: "Chinese Female", + chchinesemale: "Chinese Male", + hkchinesefemale: "Hong Kong Cantonese Female", + twchinesefemale: "Taiwan Chinese Female", + jpjapanesefemale: "Japanese Female", + jpjapanesemale: "Japanese Male", + krkoreanfemale: "Korean Female", + krkoreanmale: "Korean Male", + caenglishfemale: "Canadian English Female", + huhungarianfemale: "Hungarian Female", + brportuguesefemale: "Brazilian Portuguese Female", + eurportuguesefemale: "European Portuguese Female", + eurportuguesemale: "European Portuguese Male", + eurspanishfemale: "European Spanish Female", + eurspanishmale: "European Spanish Male", + eurcatalanfemale: "European Catalan Female", + eurczechfemale: "European Czech Female", + eurdanishfemale: "European Danish Female", + eurfinnishfemale: "European Finnish Female", + eurfrenchfemale: "European French Female", + eurfrenchmale: "European French Male", + eurnorwegianfemale: "European Norwegian Female", + eurdutchfemale: "European Dutch Female", + eurpolishfemale: "European Polish Female", + euritalianfemale: "European Italian Female", + eurturkishfemale: "European Turkish Female ", + eurturkishmale: "European Turkish Male", + eurgermanfemale: "European German Female", + eurgermanmale: "European German Male", + rurussianfemale: "Russian Female", + rurussianmale: "Russian Male", + swswedishfemale: "Swedish Female", + cafrenchfemale: "Canadian French Female", + cafrenchmale: "Canadian French Male" +}; + +var ISPEECHASRLANG = { + "en-US": "English (US)", + "en-CA": "English (Canada)", + "en-GB": "English (UK)", + "en-AU": "English (Australia)", + "es-ES": "Spanish (Spain)", + "es-MX": "Spanish (Mexico)", + "it-IT": "Italian (Italy) / Finnish (Finland)", + "fr-FR": "French (France)", + "fr-CA": "French (Canada)", + "pl-PL": "Polish (Poland)", + "pt-PT": "Portuguese (Portugal)", + "ca-ES": "Catalan (Catalan)", + "zh-TW": "Chinese (Taiwan)", + "da-DK": "Danish (Denmark)", + "fr-FR": "German (Germany)", + "ja-JP": "Japanese (Japan)", + "ko-KR": "Korean (Korea)", + "nl-NL": "Dutch (Netherlands)", + "nb-NO": "Norwegian (Norway)", + "pt-BR": "Portuguese (Brazil)", + "ru-RU": "Russian (Russia)", + "sv-SE": "Swedish (Sweden)", + "zh-CN": "Chinese (China)", + "zh-HK": "Chinese (Hong Kong)" +}; + +var ISPEECHASRMODEL = { + 0: "Default", + date: "Date", + usmoney: "US Money", + numbersto9: "Numbers to 9", + numbersto99: "Numbers to 99", + numbersto999: "Numbers to 999", + time: "Time", + phonenumber: "Phone number", + streets: "Streets", + citystate: "US City/States" +}; + +var GOOGLETTSLANG = { + "af": "Afrikaans", + "sq": "Albanian", + "am": "Amharic", + "ar": "Arabic", + "hy": "Armenian", + "az": "Azerbaijani", + "eu": "Basque", + "be": "Belarusian", + "bn": "Bengali", + "bh": "Bihari", + "bs": "Bosnian", + "br": "Breton", + "bg": "Bulgarian", + "km": "Cambodian", + "ca": "Catalan", + "zh-CN": "Chinese (Simplified)", + "zh-TW": "Chinese (Traditional)", + "co": "Corsican", + "hr": "Croatian", + "cs": "Czech", + "da": "Danish", + "nl": "Dutch", + "en": "English", + "eo": "Esperanto", + "et": "Estonian", + "fo": "Faroese", + "tl": "Filipino", + "fi": "Finnish", + "fr": "French", + "fy": "Frisian", + "gl": "Galician", + "ka": "Georgian", + "de": "German", + "el": "Greek", + "gn": "Guarani", + "gu": "Gujarati", + "xx-hacker": "Hacker", + "ha": "Hausa", + "iw": "Hebrew", + "hi": "Hindi", + "hu": "Hungarian", + "is": "Icelandic", + "id": "Indonesian", + "ia": "Interlingua", + "ga": "Irish", + "it": "Italian", + "jw": "Javanese", + "ja": "Japanese", + "kn": "Kannada", + "kk": "Kazakh", + "rw": "Kinyarwanda", + "rn": "Kirundi", + "xx-klingon": "Klingon", + "ku": "Kurdish", + "ko": "Korean", + "ky": "Kyrgyz", + "lo": "Laothian", + "la": "Latin", + "lv": "Latvian", + "ln": "Lingala", + "lt": "Lithuanian", + "mk": "Macedonian", + "mg": "Malagasy", + "ms": "Malay", + "ml": "Malayalam", + "mt": "Maltese", + "mi": "Maori", + "mr": "Marathi", + "mo": "Moldavian", + "mn": "Mongolian", + "sr-ME": "Montenegrin", + "ne": "Nepali", + "no": "Norwegian", + "nn": "Norwegian (Nynorsk)", + "oc": "Occitan", + "or": "Oriya", + "om": "Oromo", + "ps": "Pashto", + "fa": "Persian", + "xx-pirate": "Pirate", + "pl": "Polish", + "pt-BR": "Portuguese (Brazil)", + "pt-PT": "Portuguese (Portugal)", + "pa": "Punjabi", + "qu": "Quechua", + "ro": "Romanian", + "rm": "Romansh", + "ru": "Russian", + "gd": "Scots Gaelic", + "sr": "Serbian", + "sh": "Serbo-Croatian", + "st": "Sesotho", + "sn": "Shona", + "sd": "Sindhi", + "si": "Sinhalese", + "sk": "Slovak", + "sl": "Slovenian", + "so": "Somali", + "es": "Spanish", + "su": "Sundanese", + "sw": "Swahili", + "sv": "Swedish", + "tg": "Tajik", + "ta": "Tamil", + "tt": "Tatar", + "te": "Telugu", + "th": "Thai", + "ti": "Tigrinya", + "to": "Tonga", + "tr": "Turkish", + "tk": "Turkmen", + "tw": "Twi", + "ug": "Uighur", + "uk": "Ukrainian", + "ur": "Urdu", + "uz": "Uzbek", + "vi": "Vietnamese", + "cy": "Welsh", + "xh": "Xhosa", + "yi": "Yiddish", + "yo": "Yoruba", + "zu": "Zulu" +}; diff --git a/public/assets/plugins/mxgraph/js/mxClient.js b/public/assets/plugins/mxgraph/js/mxClient.js index 63bbbb5..e795889 100644 --- a/public/assets/plugins/mxgraph/js/mxClient.js +++ b/public/assets/plugins/mxgraph/js/mxClient.js @@ -1 +1,18737 @@ -var _0x763a=["\x32\x2E\x30\x2E\x30\x2E\x30","\x4D\x53\x49\x45","\x69\x6E\x64\x65\x78\x4F\x66","\x75\x73\x65\x72\x41\x67\x65\x6E\x74","\x4D\x53\x49\x45\x20\x36","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x76","\x6F","\x4D\x6F\x7A\x69\x6C\x6C\x61\x2F","\x4F\x70\x65\x72\x61\x2F","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x34\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x33\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x32\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x31\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x30\x2E","\x50\x72\x65\x73\x74\x6F\x2F\x31\x2E","\x41\x70\x70\x6C\x65\x57\x65\x62\x4B\x69\x74\x2F","\x43\x68\x72\x6F\x6D\x65\x2F","\x46\x69\x72\x65\x66\x6F\x78\x2F","\x46\x69\x72\x65\x66\x6F\x78\x2F\x31\x2E","\x46\x69\x72\x65\x66\x6F\x78\x2F\x32\x2E","\x49\x63\x65\x77\x65\x61\x73\x65\x6C\x2F","\x49\x63\x65\x77\x65\x61\x73\x65\x6C\x2F\x31\x2E","\x49\x63\x65\x77\x65\x61\x73\x65\x6C\x2F\x32\x2E","\x53\x65\x61\x4D\x6F\x6E\x6B\x65\x79\x2F","\x53\x65\x61\x4D\x6F\x6E\x6B\x65\x79\x2F\x31\x2E","\x49\x63\x65\x61\x70\x65\x2F","\x49\x63\x65\x61\x70\x65\x2F\x31\x2E","\x53\x65\x61\x6D\x6F\x6E\x6B\x65\x79\x2F","\x47\x61\x6C\x65\x6F\x6E\x2F","\x45\x70\x69\x70\x68\x61\x6E\x79\x2F","\x47\x65\x63\x6B\x6F\x2F","\x43\x61\x6D\x69\x6E\x6F\x2F\x31\x2E","\x45\x70\x69\x70\x68\x61\x6E\x79\x2F\x32\x2E","\x4D\x6F\x7A\x69\x6C\x6C\x61\x2F\x32\x2E","\x4D\x49\x43\x52\x4F\x53\x4F\x46\x54\x20\x49\x4E\x54\x45\x52\x4E\x45\x54\x20\x45\x58\x50\x4C\x4F\x52\x45\x52","\x74\x6F\x55\x70\x70\x65\x72\x43\x61\x73\x65","\x61\x70\x70\x4E\x61\x6D\x65","\x4D\x41\x43\x49\x4E\x54\x4F\x53\x48","\x49\x50\x41\x44","\x49\x50\x4F\x44","\x49\x50\x48\x4F\x4E\x45","\x41\x4E\x44\x52\x4F\x49\x44","\x68\x74\x74\x70\x3A\x2F\x2F","\x68\x72\x65\x66","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x68\x74\x74\x70\x73\x3A\x2F\x2F","\x49\x53\x5F\x56\x4D\x4C","\x49\x53\x5F\x53\x56\x47","\x49\x53\x5F\x49\x45\x36","\x3C\x6C\x69\x6E\x6B\x20\x72\x65\x6C\x3D\x22","\x22\x20\x68\x72\x65\x66\x3D\x22","\x22\x20\x63\x68\x61\x72\x73\x65\x74\x3D\x22\x49\x53\x4F\x2D\x38\x38\x35\x39\x2D\x31\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x2F\x63\x73\x73\x22\x2F\x3E","\x77\x72\x69\x74\x65","\x6C\x69\x6E\x6B","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x72\x65\x6C","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x68\x61\x72\x73\x65\x74","\x49\x53\x4F\x2D\x38\x38\x35\x39\x2D\x31","\x74\x79\x70\x65","\x74\x65\x78\x74\x2F\x63\x73\x73","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x68\x65\x61\x64","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x73\x42\x79\x54\x61\x67\x4E\x61\x6D\x65","\x3C\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3D\x22","\x22\x3E\x3C\x2F\x73\x63\x72\x69\x70\x74\x3E","\x6C\x65\x6E\x67\x74\x68","\x6F\x62\x6A\x65\x63\x74\x73","\x6D\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x4C\x69\x73\x74","\x72\x65\x6D\x6F\x76\x65\x41\x6C\x6C\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x49\x53\x5F\x4F\x50","\x49\x53\x5F\x4F\x54","\x43\x53\x53\x5F\x50\x52\x45\x46\x49\x58","\x4F","\x49\x53\x5F\x53\x46","\x49\x53\x5F\x47\x43","\x57\x65\x62\x6B\x69\x74","\x49\x53\x5F\x4D\x54","\x4D\x6F\x7A","\x49\x53\x5F\x49\x45","\x6D\x73","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x2E\x74\x78\x74","\x2F","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x62\x61\x73\x65\x50\x61\x74\x68","\x2E","\x69\x6D\x61\x67\x65\x42\x61\x73\x65\x50\x61\x74\x68","\x2F\x69\x6D\x61\x67\x65\x73","\x6C\x61\x6E\x67\x75\x61\x67\x65","\x75\x73\x65\x72\x4C\x61\x6E\x67\x75\x61\x67\x65","\x64\x65\x66\x61\x75\x6C\x74\x4C\x61\x6E\x67\x75\x61\x67\x65","\x65\x6E","\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x2F\x63\x73\x73\x2F\x63\x6F\x6D\x6D\x6F\x6E\x2E\x63\x73\x73","\x6C\x61\x6E\x67\x75\x61\x67\x65\x73","\x75\x72\x6E\x3A\x73\x63\x68\x65\x6D\x61\x73\x2D\x6D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2D\x63\x6F\x6D\x3A\x76\x6D\x6C","\x23\x64\x65\x66\x61\x75\x6C\x74\x23\x56\x4D\x4C","\x61\x64\x64","\x6E\x61\x6D\x65\x73\x70\x61\x63\x65\x73","\x75\x72\x6E\x3A\x73\x63\x68\x65\x6D\x61\x73\x2D\x6D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2D\x63\x6F\x6D\x3A\x6F\x66\x66\x69\x63\x65\x3A\x6F\x66\x66\x69\x63\x65","\x63\x72\x65\x61\x74\x65\x53\x74\x79\x6C\x65\x53\x68\x65\x65\x74","\x63\x73\x73\x54\x65\x78\x74","\x76\x5C\x3A\x2A\x7B\x62\x65\x68\x61\x76\x69\x6F\x72\x3A\x75\x72\x6C\x28\x23\x64\x65\x66\x61\x75\x6C\x74\x23\x56\x4D\x4C\x29\x7D\x6F\x5C\x3A\x2A\x7B\x62\x65\x68\x61\x76\x69\x6F\x72\x3A\x75\x72\x6C\x28\x23\x64\x65\x66\x61\x75\x6C\x74\x23\x56\x4D\x4C\x29\x7D","\x2F\x63\x73\x73\x2F\x65\x78\x70\x6C\x6F\x72\x65\x72\x2E\x63\x73\x73","\x6F\x6E\x75\x6E\x6C\x6F\x61\x64","\x64\x69\x73\x70\x6F\x73\x65","\x61\x74\x74\x61\x63\x68\x45\x76\x65\x6E\x74","\x43\x6F\x6E\x73\x6F\x6C\x65","","\x77\x69\x6E\x64\x6F\x77","\x62\x6F\x64\x79","\x63\x6F\x6E\x73\x6F\x6C\x65\x4E\x61\x6D\x65","\x20\x2D\x20\x6D\x78\x47\x72\x61\x70\x68\x20","\x56\x45\x52\x53\x49\x4F\x4E","\x74\x61\x62\x6C\x65","\x77\x69\x64\x74\x68","\x31\x30\x30\x25","\x68\x65\x69\x67\x68\x74","\x74\x62\x6F\x64\x79","\x74\x72","\x74\x64","\x76\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x73\x74\x79\x6C\x65","\x74\x6F\x70","\x74\x65\x78\x74\x61\x72\x65\x61","\x72\x65\x61\x64\x4F\x6E\x6C\x79","\x74\x72\x75\x65","\x72\x65\x73\x69\x7A\x65","\x6E\x6F\x6E\x65","\x76\x61\x6C\x75\x65","\x62\x75\x66\x66\x65\x72","\x49\x53\x5F\x4E\x53","\x42\x61\x63\x6B\x43\x6F\x6D\x70\x61\x74","\x63\x6F\x6D\x70\x61\x74\x4D\x6F\x64\x65","\x39\x39\x25","\x33\x30\x70\x78","\x49\x6E\x66\x6F","\x69\x6E\x66\x6F","\x61\x64\x64\x42\x75\x74\x74\x6F\x6E","\x44\x4F\x4D","\x67\x65\x74\x49\x6E\x6E\x65\x72\x48\x74\x6D\x6C","\x64\x65\x62\x75\x67","\x54\x72\x61\x63\x65","\x54\x52\x41\x43\x45","\x54\x72\x61\x63\x69\x6E\x67\x20\x65\x6E\x61\x62\x6C\x65\x64","\x54\x72\x61\x63\x69\x6E\x67\x20\x64\x69\x73\x61\x62\x6C\x65\x64","\x43\x6F\x70\x79","\x63\x6F\x70\x79","\x61\x6C\x65\x72\x74","\x53\x68\x6F\x77","\x70\x6F\x70\x75\x70","\x43\x6C\x65\x61\x72","\x6E\x75\x6D\x62\x65\x72","\x69\x6E\x6E\x65\x72\x57\x69\x64\x74\x68","\x69\x6E\x6E\x65\x72\x48\x65\x69\x67\x68\x74","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x6D\x61\x78","\x73\x65\x74\x4D\x61\x78\x69\x6D\x69\x7A\x61\x62\x6C\x65","\x73\x65\x74\x53\x63\x72\x6F\x6C\x6C\x61\x62\x6C\x65","\x73\x65\x74\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x73\x65\x74\x43\x6C\x6F\x73\x61\x62\x6C\x65","\x64\x65\x73\x74\x72\x6F\x79\x4F\x6E\x43\x6C\x6F\x73\x65","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x78","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x39\x32\x70\x78","\x77\x72\x69\x74\x65\x6C\x6E","\x62\x75\x74\x74\x6F\x6E","\x63\x6C\x69\x63\x6B","\x69\x73\x56\x69\x73\x69\x62\x6C\x65","\x73\x65\x74\x56\x69\x73\x69\x62\x6C\x65","\x69\x6E\x69\x74","\x45\x6E\x74\x65\x72\x69\x6E\x67\x20","\x67\x65\x74\x54\x69\x6D\x65","\x20\x28","\x20\x6D\x73\x29","\x4C\x65\x61\x76\x69\x6E\x67\x20","\x44\x45\x42\x55\x47","\x61\x70\x70\x6C\x79","\x57\x41\x52\x4E","\x20","\x50\x72\x65\x73\x74\x6F\x2F\x32\x2E\x35","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x68\x69\x64\x64\x65\x6E","\x76\x69\x73\x69\x62\x6C\x65","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x73\x63\x72\x6F\x6C\x6C\x48\x65\x69\x67\x68\x74","\x0A","\x6D\x78\x4F\x62\x6A\x65\x63\x74\x49\x64","\x6F\x62\x6A\x65\x63\x74","\x46\x49\x45\x4C\x44\x5F\x4E\x41\x4D\x45","\x63\x6F\x6E\x73\x74\x72\x75\x63\x74\x6F\x72","\x67\x65\x74\x46\x75\x6E\x63\x74\x69\x6F\x6E\x4E\x61\x6D\x65","\x23","\x63\x6F\x75\x6E\x74\x65\x72","\x63\x6C\x65\x61\x72","\x6D\x61\x70","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x67\x65\x74","\x70\x75\x74","\x72\x65\x6D\x6F\x76\x65","\x67\x65\x74\x4B\x65\x79\x73","\x70\x75\x73\x68","\x67\x65\x74\x56\x61\x6C\x75\x65\x73","\x76\x69\x73\x69\x74","\x6C\x6F\x61\x64\x44\x65\x66\x61\x75\x6C\x74\x42\x75\x6E\x64\x6C\x65","\x69\x73\x4C\x61\x6E\x67\x75\x61\x67\x65\x53\x75\x70\x70\x6F\x72\x74\x65\x64","\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x2D","\x6C\x6F\x61\x64\x53\x70\x65\x63\x69\x61\x6C\x42\x75\x6E\x64\x6C\x65","\x5F","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x4E\x4F\x4E\x45","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x42\x75\x6E\x64\x6C\x65","\x6C\x6F\x61\x64","\x69\x73\x52\x65\x61\x64\x79","\x67\x65\x74\x54\x65\x78\x74","\x70\x61\x72\x73\x65","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x42\x75\x6E\x64\x6C\x65","\x73\x70\x6C\x69\x74","\x63\x68\x61\x72\x41\x74","\x3D","\x63\x68\x61\x72\x43\x6F\x64\x65\x41\x74","\x72\x65\x73\x6F\x75\x72\x63\x65\x73\x45\x6E\x63\x6F\x64\x65\x64","\x25","\x72\x65\x70\x6C\x61\x63\x65","\x72\x65\x73\x6F\x75\x72\x63\x65\x73","\x7B","\x7D","\x6A\x6F\x69\x6E","\x78","\x79","\x65\x71\x75\x61\x6C\x73","\x63\x6C\x6F\x6E\x65","\x63\x61\x6C\x6C","\x73\x65\x74\x52\x65\x63\x74","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x58","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x59","\x6D\x69\x6E","\x67\x72\x6F\x77","\x67\x65\x74\x50\x6F\x69\x6E\x74","\x63\x65\x6C\x6C","\x63\x68\x69\x6C\x64","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x69\x73\x45\x64\x67\x65","\x6D\x6F\x64\x65\x6C","\x6E\x6F\x64\x65","\x73\x68\x61\x70\x65","\x73\x65\x74\x4F\x70\x61\x63\x69\x74\x79","\x73\x63\x61\x6C\x65","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x70\x72\x65\x76\x69\x6F\x75\x73","\x72\x65\x64\x72\x61\x77","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x63\x61\x73\x63\x61\x64\x65\x4F\x70\x61\x63\x69\x74\x79","\x73\x65\x74\x54\x69\x6D\x65\x6F\x75\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x41\x74","\x67\x65\x74\x45\x64\x67\x65\x73","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x65\x72\x72\x6F\x72","\x63\x6C\x6F\x73\x65","\x2F\x65\x72\x72\x6F\x72\x2E\x67\x69\x66","\x63\x75\x72\x73\x6F\x72","\x63\x68\x69\x6C\x64\x4E\x6F\x64\x65\x73","\x72\x65\x6D\x6F\x76\x65\x43\x75\x72\x73\x6F\x72\x73","\x63\x75\x72\x72\x65\x6E\x74\x53\x74\x79\x6C\x65","\x67\x65\x74\x43\x6F\x6D\x70\x75\x74\x65\x64\x53\x74\x79\x6C\x65","\x67\x65\x74\x43\x75\x72\x72\x65\x6E\x74\x53\x74\x79\x6C\x65","\x73\x63\x72\x6F\x6C\x6C","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x61\x75\x74\x6F","\x66\x75\x6E\x63\x74\x69\x6F\x6E","\x76\x61\x72\x20\x5F\x6D\x78\x4A\x61\x76\x61\x53\x63\x72\x69\x70\x74\x45\x78\x70\x72\x65\x73\x73\x69\x6F\x6E\x3D","\x6D\x65\x73\x73\x61\x67\x65","\x20\x77\x68\x69\x6C\x65\x20\x65\x76\x61\x6C\x75\x61\x74\x69\x6E\x67\x20","\x77\x61\x72\x6E","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x66\x69\x6E\x64\x4E\x6F\x64\x65","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x6E\x6F\x64\x65\x54\x79\x70\x65","\x4E\x4F\x44\x45\x54\x59\x50\x45\x5F\x45\x4C\x45\x4D\x45\x4E\x54","\x66\x69\x6E\x64\x4E\x6F\x64\x65\x42\x79\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x2F\x2F\x2A\x5B\x40","\x3D\x27","\x27\x5D","\x73\x65\x6C\x65\x63\x74\x53\x69\x6E\x67\x6C\x65\x4E\x6F\x64\x65","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x69\x74\x65\x72\x61\x74\x65\x4E\x65\x78\x74","\x65\x76\x61\x6C\x75\x61\x74\x65","\x6E\x61\x6D\x65","\x28","\x73\x70\x6C\x69\x63\x65","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x69\x6D\x70\x6C\x65\x6D\x65\x6E\x74\x61\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x41\x63\x74\x69\x76\x65\x58\x4F\x62\x6A\x65\x63\x74","\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x58\x4D\x4C\x44\x4F\x4D","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x61\x73\x79\x6E\x63","\x66\x61\x6C\x73\x65","\x6C\x6F\x61\x64\x58\x4D\x4C","\x74\x65\x78\x74\x2F\x78\x6D\x6C","\x70\x61\x72\x73\x65\x46\x72\x6F\x6D\x53\x74\x72\x69\x6E\x67","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x65\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x72\x65\x6D\x6F\x76\x65\x41\x6C\x6C\x52\x61\x6E\x67\x65\x73","\x20\x20","\x4E\x4F\x44\x45\x54\x59\x50\x45\x5F\x54\x45\x58\x54","\x6E\x6F\x64\x65\x56\x61\x6C\x75\x65","\x3C","\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x68\x74\x6D\x6C\x45\x6E\x74\x69\x74\x69\x65\x73","\x3D\x22","\x22","\x3E\x0A","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x3C\x2F","\x2F\x3E\x0A","\x70\x72\x65\x76\x69\x6F\x75\x73\x53\x69\x62\x6C\x69\x6E\x67","\x67\x65\x74\x54\x65\x78\x74\x43\x6F\x6E\x74\x65\x6E\x74","\x74\x72\x69\x6D","\x26\x61\x6D\x70\x3B","\x26\x71\x75\x6F\x74\x3B","\x26\x23\x33\x39\x3B","\x26\x6C\x74\x3B","\x26\x67\x74\x3B","\x26\x23\x78\x61\x3B","\x74\x61\x67\x55\x72\x6E","\x78\x6D\x6C","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x73\x65\x72\x69\x61\x6C\x69\x7A\x65\x54\x6F\x53\x74\x72\x69\x6E\x67","\x3E","\x6F\x75\x74\x65\x72\x48\x54\x4D\x4C","\x2F\x3E","\x63\x72\x65\x61\x74\x65\x54\x65\x78\x74\x4E\x6F\x64\x65","\x62\x72","\x70","\x66\x69\x6C\x74\x65\x72","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x41\x6C\x70\x68\x61\x49\x6D\x61\x67\x65\x4C\x6F\x61\x64\x65\x72\x28\x73\x72\x63\x3D\x27","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66\x27\x2C\x20\x73\x69\x7A\x69\x6E\x67\x4D\x65\x74\x68\x6F\x64\x3D\x27\x73\x63\x61\x6C\x65\x27\x29","\x65\x78\x65\x63\x75\x74\x65","\x73\x70\x61\x6E","\x63\x6F\x6C\x6F\x72","\x62\x6C\x75\x65","\x74\x65\x78\x74\x44\x65\x63\x6F\x72\x61\x74\x69\x6F\x6E","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x70\x6F\x69\x6E\x74\x65\x72","\x70\x61\x64\x64\x69\x6E\x67\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x6C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x55\x6E\x69\x76\x65\x72\x73\x61\x6C\x58\x50\x43\x6F\x6E\x6E\x65\x63\x74","\x65\x6E\x61\x62\x6C\x65\x50\x72\x69\x76\x69\x6C\x65\x67\x65","\x50\x72\x69\x76\x69\x6C\x65\x67\x65\x4D\x61\x6E\x61\x67\x65\x72","\x73\x65\x63\x75\x72\x69\x74\x79","\x50\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E\x20\x74\x6F\x20\x72\x65\x61\x64\x20\x66\x69\x6C\x65\x20\x64\x65\x6E\x69\x65\x64\x2E","\x6E\x73\x49\x4C\x6F\x63\x61\x6C\x46\x69\x6C\x65","\x69\x6E\x74\x65\x72\x66\x61\x63\x65\x73","\x63\x72\x65\x61\x74\x65\x49\x6E\x73\x74\x61\x6E\x63\x65","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x66\x69\x6C\x65\x2F\x6C\x6F\x63\x61\x6C\x3B\x31","\x63\x6C\x61\x73\x73\x65\x73","\x69\x6E\x69\x74\x57\x69\x74\x68\x50\x61\x74\x68","\x65\x78\x69\x73\x74\x73","\x46\x69\x6C\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x2E","\x6E\x73\x49\x46\x69\x6C\x65\x49\x6E\x70\x75\x74\x53\x74\x72\x65\x61\x6D","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x2F\x66\x69\x6C\x65\x2D\x69\x6E\x70\x75\x74\x2D\x73\x74\x72\x65\x61\x6D\x3B\x31","\x6E\x73\x49\x53\x63\x72\x69\x70\x74\x61\x62\x6C\x65\x49\x6E\x70\x75\x74\x53\x74\x72\x65\x61\x6D","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x73\x63\x72\x69\x70\x74\x61\x62\x6C\x65\x69\x6E\x70\x75\x74\x73\x74\x72\x65\x61\x6D\x3B\x31","\x61\x76\x61\x69\x6C\x61\x62\x6C\x65","\x72\x65\x61\x64","\x53\x63\x72\x69\x70\x74\x69\x6E\x67\x2E\x46\x69\x6C\x65\x53\x79\x73\x74\x65\x6D\x4F\x62\x6A\x65\x63\x74","\x72\x65\x61\x64\x41\x6C\x6C","\x50\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E\x20\x74\x6F\x20\x77\x72\x69\x74\x65\x20\x66\x69\x6C\x65\x20\x64\x65\x6E\x69\x65\x64\x2E","\x63\x72\x65\x61\x74\x65","\x6E\x73\x49\x46\x69\x6C\x65\x4F\x75\x74\x70\x75\x74\x53\x74\x72\x65\x61\x6D","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x2F\x66\x69\x6C\x65\x2D\x6F\x75\x74\x70\x75\x74\x2D\x73\x74\x72\x65\x61\x6D\x3B\x31","\x66\x6C\x75\x73\x68","\x69\x66\x72\x61\x6D\x65","\x73\x72\x63","\x63\x6F\x6E\x74\x65\x6E\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6F\x70\x65\x6E","\x66\x6F\x63\x75\x73","\x50\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E\x20\x74\x6F\x20\x73\x61\x76\x65\x20\x64\x6F\x63\x75\x6D\x65\x6E\x74\x20\x64\x65\x6E\x69\x65\x64\x2E","\x64\x6F\x63\x75\x6D\x65\x6E\x74","\x63\x6F\x6E\x74\x65\x6E\x74\x57\x69\x6E\x64\x6F\x77","\x53\x61\x76\x65\x41\x73","\x65\x78\x65\x63\x43\x6F\x6D\x6D\x61\x6E\x64","\x63\x6C\x69\x70\x62\x6F\x61\x72\x64\x44\x61\x74\x61","\x54\x65\x78\x74","\x73\x65\x74\x44\x61\x74\x61","\x6E\x73\x49\x43\x6C\x69\x70\x62\x6F\x61\x72\x64","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x77\x69\x64\x67\x65\x74\x2F\x63\x6C\x69\x70\x62\x6F\x61\x72\x64\x3B\x31","\x6E\x73\x49\x54\x72\x61\x6E\x73\x66\x65\x72\x61\x62\x6C\x65","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x77\x69\x64\x67\x65\x74\x2F\x74\x72\x61\x6E\x73\x66\x65\x72\x61\x62\x6C\x65\x3B\x31","\x74\x65\x78\x74\x2F\x75\x6E\x69\x63\x6F\x64\x65","\x61\x64\x64\x44\x61\x74\x61\x46\x6C\x61\x76\x6F\x72","\x6E\x73\x49\x53\x75\x70\x70\x6F\x72\x74\x73\x53\x74\x72\x69\x6E\x67","\x40\x6D\x6F\x7A\x69\x6C\x6C\x61\x2E\x6F\x72\x67\x2F\x73\x75\x70\x70\x6F\x72\x74\x73\x2D\x73\x74\x72\x69\x6E\x67\x3B\x31","\x64\x61\x74\x61","\x73\x65\x74\x54\x72\x61\x6E\x73\x66\x65\x72\x44\x61\x74\x61","\x6B\x47\x6C\x6F\x62\x61\x6C\x43\x6C\x69\x70\x62\x6F\x61\x72\x64","\x47\x45\x54","\x73\x65\x6E\x64","\x73\x69\x6D\x75\x6C\x61\x74\x65","\x6F\x6E\x72\x65\x61\x64\x79\x73\x74\x61\x74\x65\x63\x68\x61\x6E\x67\x65","\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65","\x61\x64\x64\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72","\x20\x3D\x20\x5B\x6E\x75\x6C\x6C\x5D\x0A","\x20\x3D\x3E\x20\x5B\x46\x75\x6E\x63\x74\x69\x6F\x6E\x5D\x0A","\x20\x3D\x3E\x20\x5B","\x5D\x0A","\x20\x3D\x20","\x50\x49","\x61\x62\x73","\x63\x6F\x73","\x73\x69\x6E","\x73\x71\x72\x74","\x61\x74\x61\x6E\x32","\x63\x65\x69\x6C","\x74\x6F\x52\x61\x64\x69\x61\x6E\x73","\x67\x65\x74\x52\x6F\x74\x61\x74\x65\x64\x50\x6F\x69\x6E\x74","\x67\x65\x74\x56\x61\x6C\x75\x65","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x4E\x4F\x4E\x45","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x4E\x4F\x52\x54\x48","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x57\x45\x53\x54","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x53\x4F\x55\x54\x48","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x45\x41\x53\x54","\x61\x62\x73\x6F\x6C\x75\x74\x65\x50\x6F\x69\x6E\x74\x73","\x70\x74\x53\x65\x67\x44\x69\x73\x74\x53\x71","\x76\x69\x65\x77","\x63\x6F\x6E\x74\x61\x69\x6E\x73","\x6F\x66\x66\x73\x65\x74\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x53\x63\x72\x6F\x6C\x6C\x4F\x72\x69\x67\x69\x6E","\x67\x65\x74\x4F\x66\x66\x73\x65\x74","\x5E\x5B","\x5C\x73","\x5D\x2B","\x67","\x5B","\x5D\x2B\x24","\x72\x74\x72\x69\x6D","\x6C\x74\x72\x69\x6D","\x30\x78","\x30\x58","\x61\x6E\x69\x6D\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x73","\x66\x61\x64\x65\x4F\x75\x74","\x69\x73\x56\x6D\x6C","\x61\x6C\x70\x68\x61\x28\x6F\x70\x61\x63\x69\x74\x79\x3D","\x29","\x6F\x70\x61\x63\x69\x74\x79","\x43\x53\x53\x31\x43\x6F\x6D\x70\x61\x74","\x56\x4D\x4C\x5F\x50\x52\x45\x46\x49\x58","\x3A\x69\x6D\x61\x67\x65","\x62\x6F\x72\x64\x65\x72\x53\x74\x79\x6C\x65","\x69\x6D\x67","\x62\x6F\x72\x64\x65\x72","\x30","\x63\x6F\x6D\x70\x61\x72\x65","\x73\x6F\x72\x74","\x3B","\x69\x6E\x64\x65\x78\x4F\x66\x53\x74\x79\x6C\x65\x6E\x61\x6D\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x53\x74\x79\x6C\x65","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x65\x74\x53\x74\x79\x6C\x65\x46\x6C\x61\x67","\x3D\x30","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x44\x45\x46\x41\x55\x4C\x54\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x44\x45\x46\x41\x55\x4C\x54\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x64\x69\x76","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x72\x6F\x75\x6E\x64","\x6C\x69\x6E\x65\x48\x65\x69\x67\x68\x74","\x4C\x49\x4E\x45\x5F\x48\x45\x49\x47\x48\x54","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x6E\x6F\x77\x72\x61\x70","\x64\x69\x73\x70\x6C\x61\x79","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x69\x6E\x6C\x69\x6E\x65","\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B","\x7A\x6F\x6F\x6D","\x31","\x67\x65\x74\x52\x6F\x6F\x74","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x69\x73\x45\x76\x65\x6E\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x76\x65\x6E\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x64\x72\x61\x77\x50\x61\x6E\x65","\x6F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74\x4E\x53","\x63\x61\x6E\x76\x61\x73","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x67\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x65\x6E\x63\x6F\x64\x65","\x64\x65\x73\x74\x72\x6F\x79","\x50\x41\x47\x45\x5F\x46\x4F\x52\x4D\x41\x54\x5F\x41\x34\x5F\x50\x4F\x52\x54\x52\x41\x49\x54","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x63\x61\x6C\x65","\x66\x6C\x6F\x6F\x72","\x3C\x68\x74\x6D\x6C\x3E\x3C\x68\x65\x61\x64\x3E","\x62\x61\x73\x65","\x3C\x73\x74\x79\x6C\x65\x3E","\x73\x74\x79\x6C\x65\x53\x68\x65\x65\x74\x73","\x3C\x2F\x73\x74\x79\x6C\x65\x3E\x3C\x2F\x68\x65\x61\x64\x3E","\x3C\x62\x6F\x64\x79\x3E","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x3C\x2F\x62\x6F\x64\x79\x3E","\x3C\x68\x74\x6D\x6C\x3E","\x44\x49\x56","\x3C\x68\x74\x6D\x6C","\x3C\x68\x65\x61\x64\x3E","\x67\x65\x74\x4F\x75\x74\x65\x72\x48\x74\x6D\x6C","\x3C\x2F\x68\x65\x61\x64\x3E","\x3C\x2F\x68\x74\x6D\x6C\x3E","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28","\x2C","\x6F\x77\x6E\x65\x72\x53\x56\x47\x45\x6C\x65\x6D\x65\x6E\x74","\x73\x68\x6F\x77","\x70\x72\x69\x6E\x74","\x36\x33\x36\x70\x78","\x34\x36\x30\x70\x78","\x70\x72\x65","\x26\x6E\x62\x73\x70\x3B","\x3C\x62\x72\x3E","\x50\x6F\x70\x75\x70\x20\x57\x69\x6E\x64\x6F\x77","\x3C\x70\x72\x65\x3E","\x3C\x2F\x70\x72\x65","\x70\x61\x64\x64\x69\x6E\x67","\x32\x30\x70\x78","\x65\x72\x72\x6F\x72\x49\x6D\x61\x67\x65","\x76\x61\x6C\x69\x67\x6E","\x62\x6F\x74\x74\x6F\x6D","\x6D\x69\x64\x64\x6C\x65","\xA0","\x65\x72\x72\x6F\x72\x52\x65\x73\x6F\x75\x72\x63\x65","\x66\x6C\x6F\x61\x74\x3A\x72\x69\x67\x68\x74","\x63\x6C\x6F\x73\x65\x52\x65\x73\x6F\x75\x72\x63\x65","\x64\x72\x61\x67\x4F\x66\x66\x73\x65\x74","\x54\x4F\x4F\x4C\x54\x49\x50\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x4F\x46\x46\x53\x45\x54","\x61\x75\x74\x6F\x73\x63\x72\x6F\x6C\x6C","\x73\x65\x74\x47\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x68\x69\x67\x68\x6C\x69\x67\x68\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74\x73","\x67\x65\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x67\x65\x74\x47\x72\x61\x70\x68\x46\x6F\x72\x45\x76\x65\x6E\x74","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x72\x65\x61\x74\x65\x50\x72\x65\x76\x69\x65\x77\x45\x6C\x65\x6D\x65\x6E\x74","\x65\x78\x61\x63\x74","\x66\x61\x73\x74\x65\x72","\x66\x61\x73\x74\x65\x73\x74","\x73\x76\x67","\x76\x6D\x6C","\x6D\x69\x78\x65\x64\x48\x74\x6D\x6C","\x70\x72\x65\x66\x65\x72\x48\x74\x6D\x6C","\x73\x74\x72\x69\x63\x74\x48\x74\x6D\x6C","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x32\x30\x30\x30\x2F\x73\x76\x67","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x31\x39\x39\x39\x2F\x78\x68\x74\x6D\x6C","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x31\x39\x39\x39\x2F\x78\x6C\x69\x6E\x6B","\x67\x72\x61\x79","\x23\x30\x30\x46\x46\x30\x30","\x23\x46\x46\x30\x30\x30\x30","\x6D\x6F\x76\x65","\x64\x65\x66\x61\x75\x6C\x74","\x23\x30\x30\x30\x30\x46\x46","\x23\x30\x30\x39\x39\x46\x46","\x62\x6C\x61\x63\x6B","\x79\x65\x6C\x6C\x6F\x77","\x23\x30\x30\x46\x46\x46\x46","\x23\x30\x30\x33\x33\x46\x46","\x41\x72\x69\x61\x6C\x2C\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x70\x65\x72\x69\x6D\x65\x74\x65\x72","\x73\x6F\x75\x72\x63\x65\x50\x6F\x72\x74","\x74\x61\x72\x67\x65\x74\x50\x6F\x72\x74","\x70\x6F\x72\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x74\x65\x78\x74\x4F\x70\x61\x63\x69\x74\x79","\x6F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C","\x65\x78\x69\x74\x58","\x65\x78\x69\x74\x59","\x65\x78\x69\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x65\x6E\x74\x72\x79\x58","\x65\x6E\x74\x72\x79\x59","\x65\x6E\x74\x72\x79\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x66\x69\x6C\x6C\x43\x6F\x6C\x6F\x72","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x46\x69\x6C\x6C\x43\x6F\x6C\x6F\x72","\x67\x72\x61\x64\x69\x65\x6E\x74\x43\x6F\x6C\x6F\x72","\x67\x72\x61\x64\x69\x65\x6E\x74\x44\x69\x72\x65\x63\x74\x69\x6F\x6E","\x73\x74\x72\x6F\x6B\x65\x43\x6F\x6C\x6F\x72","\x73\x65\x70\x61\x72\x61\x74\x6F\x72\x43\x6F\x6C\x6F\x72","\x73\x74\x72\x6F\x6B\x65\x57\x69\x64\x74\x68","\x61\x6C\x69\x67\x6E","\x6C\x61\x62\x65\x6C\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x76\x65\x72\x74\x69\x63\x61\x6C\x4C\x61\x62\x65\x6C\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x69\x6D\x61\x67\x65\x41\x73\x70\x65\x63\x74","\x69\x6D\x61\x67\x65\x41\x6C\x69\x67\x6E","\x69\x6D\x61\x67\x65\x56\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x67\x6C\x61\x73\x73","\x69\x6D\x61\x67\x65","\x69\x6D\x61\x67\x65\x57\x69\x64\x74\x68","\x69\x6D\x61\x67\x65\x48\x65\x69\x67\x68\x74","\x69\x6D\x61\x67\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x69\x6D\x61\x67\x65\x42\x6F\x72\x64\x65\x72","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x6E\x6F\x4C\x61\x62\x65\x6C","\x6E\x6F\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x61\x62\x65\x6C\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x6C\x61\x62\x65\x6C\x42\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x6C\x61\x62\x65\x6C\x50\x61\x64\x64\x69\x6E\x67","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x68\x61\x70\x65","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x49\x6D\x61\x67\x65","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x43\x6F\x6C\x6F\x72","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x74\x72\x6F\x6B\x65\x43\x6F\x6C\x6F\x72","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x47\x72\x61\x64\x69\x65\x6E\x74\x43\x6F\x6C\x6F\x72","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x70\x61\x63\x69\x6E\x67","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x57\x69\x64\x74\x68","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x48\x65\x69\x67\x68\x74","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x44\x69\x72\x65\x63\x74\x69\x6F\x6E","\x73\x68\x61\x64\x6F\x77","\x73\x65\x67\x6D\x65\x6E\x74","\x65\x6E\x64\x41\x72\x72\x6F\x77","\x73\x74\x61\x72\x74\x41\x72\x72\x6F\x77","\x65\x6E\x64\x53\x69\x7A\x65","\x73\x74\x61\x72\x74\x53\x69\x7A\x65","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x4C\x69\x6E\x65","\x65\x6E\x64\x46\x69\x6C\x6C","\x73\x74\x61\x72\x74\x46\x69\x6C\x6C","\x64\x61\x73\x68\x65\x64","\x64\x61\x73\x68\x50\x61\x74\x74\x65\x72\x6E","\x72\x6F\x75\x6E\x64\x65\x64","\x63\x75\x72\x76\x65\x64","\x61\x72\x63\x53\x69\x7A\x65","\x73\x6D\x6F\x6F\x74\x68","\x73\x6F\x75\x72\x63\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x53\x70\x61\x63\x69\x6E\x67","\x74\x61\x72\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x53\x70\x61\x63\x69\x6E\x67","\x70\x65\x72\x69\x6D\x65\x74\x65\x72\x53\x70\x61\x63\x69\x6E\x67","\x73\x70\x61\x63\x69\x6E\x67","\x73\x70\x61\x63\x69\x6E\x67\x54\x6F\x70","\x73\x70\x61\x63\x69\x6E\x67\x4C\x65\x66\x74","\x73\x70\x61\x63\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x73\x70\x61\x63\x69\x6E\x67\x52\x69\x67\x68\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x65\x6C\x62\x6F\x77","\x66\x6F\x6E\x74\x43\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x53\x74\x79\x6C\x65","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x66\x6F\x6C\x64\x61\x62\x6C\x65","\x65\x64\x69\x74\x61\x62\x6C\x65","\x62\x65\x6E\x64\x61\x62\x6C\x65","\x6D\x6F\x76\x61\x62\x6C\x65","\x72\x65\x73\x69\x7A\x61\x62\x6C\x65","\x63\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x64\x65\x6C\x65\x74\x61\x62\x6C\x65","\x65\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x6F\x6F\x70\x53\x74\x79\x6C\x65","\x72\x6F\x75\x74\x69\x6E\x67\x43\x65\x6E\x74\x65\x72\x58","\x72\x6F\x75\x74\x69\x6E\x67\x43\x65\x6E\x74\x65\x72\x59","\x72\x65\x63\x74\x61\x6E\x67\x6C\x65","\x65\x6C\x6C\x69\x70\x73\x65","\x64\x6F\x75\x62\x6C\x65\x45\x6C\x6C\x69\x70\x73\x65","\x72\x68\x6F\x6D\x62\x75\x73","\x6C\x69\x6E\x65","\x61\x72\x72\x6F\x77","\x6C\x61\x62\x65\x6C","\x63\x79\x6C\x69\x6E\x64\x65\x72","\x73\x77\x69\x6D\x6C\x61\x6E\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72","\x61\x63\x74\x6F\x72","\x63\x6C\x6F\x75\x64","\x74\x72\x69\x61\x6E\x67\x6C\x65","\x68\x65\x78\x61\x67\x6F\x6E","\x63\x6C\x61\x73\x73\x69\x63","\x62\x6C\x6F\x63\x6B","\x6F\x76\x61\x6C","\x64\x69\x61\x6D\x6F\x6E\x64","\x64\x69\x61\x6D\x6F\x6E\x64\x54\x68\x69\x6E","\x63\x65\x6E\x74\x65\x72","\x72\x69\x67\x68\x74","\x6E\x6F\x72\x74\x68","\x73\x6F\x75\x74\x68","\x65\x61\x73\x74","\x77\x65\x73\x74","\x76\x65\x72\x74\x69\x63\x61\x6C","\x65\x6C\x62\x6F\x77\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x6F\x6F\x70\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x73\x69\x64\x65\x54\x6F\x53\x69\x64\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x74\x6F\x70\x54\x6F\x42\x6F\x74\x74\x6F\x6D\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x73\x65\x67\x6D\x65\x6E\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x65\x6C\x6C\x69\x70\x73\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x72\x65\x63\x74\x61\x6E\x67\x6C\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x72\x68\x6F\x6D\x62\x75\x73\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x74\x72\x69\x61\x6E\x67\x6C\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x70\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x63\x6F\x6E\x73\x75\x6D\x65\x64","\x67\x65\x74\x4E\x61\x6D\x65","\x67\x65\x74\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x67\x65\x74\x50\x72\x6F\x70\x65\x72\x74\x79","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x63\x6F\x6E\x73\x75\x6D\x65","\x65\x76\x74","\x73\x74\x61\x74\x65","\x67\x72\x61\x70\x68\x58","\x67\x72\x61\x70\x68\x59","\x67\x65\x74\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x6F\x75\x72\x63\x65","\x69\x73\x53\x6F\x75\x72\x63\x65","\x67\x65\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x59","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x67\x65\x74\x43\x65\x6C\x6C","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x70\x72\x65\x76\x65\x6E\x74\x44\x65\x66\x61\x75\x6C\x74","\x72\x65\x74\x75\x72\x6E\x56\x61\x6C\x75\x65","\x73\x65\x74\x45\x76\x65\x6E\x74\x53\x6F\x75\x72\x63\x65","\x65\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x65\x76\x65\x6E\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x65\x76\x65\x6E\x74\x53\x6F\x75\x72\x63\x65","\x67\x65\x74\x45\x76\x65\x6E\x74\x53\x6F\x75\x72\x63\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x6F\x6E","\x66","\x72\x65\x6D\x6F\x76\x65\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72","\x64\x65\x74\x61\x63\x68\x45\x76\x65\x6E\x74","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x6D\x6F\x75\x73\x65\x75\x70","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x74\x6F\x75\x63\x68\x73\x74\x61\x72\x74","\x74\x6F\x75\x63\x68\x6D\x6F\x76\x65","\x74\x6F\x75\x63\x68\x65\x6E\x64","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x64\x62\x6C\x63\x6C\x69\x63\x6B","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x72\x65\x6C\x65\x61\x73\x65","\x65\x76\x65\x6E\x74","\x64\x65\x74\x61\x69\x6C","\x77\x68\x65\x65\x6C\x44\x65\x6C\x74\x61","\x6D\x6F\x75\x73\x65\x77\x68\x65\x65\x6C","\x44\x4F\x4D\x4D\x6F\x75\x73\x65\x53\x63\x72\x6F\x6C\x6C","\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x6F\x6E\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x72\x65\x74\x75\x72\x6E\x20\x66\x61\x6C\x73\x65\x3B","\x73\x72\x63\x45\x6C\x65\x6D\x65\x6E\x74","\x74\x61\x72\x67\x65\x74","\x69\x73\x52\x69\x67\x68\x74\x4D\x6F\x75\x73\x65\x42\x75\x74\x74\x6F\x6E","\x69\x73\x53\x68\x69\x66\x74\x44\x6F\x77\x6E","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x73\x68\x69\x66\x74\x4B\x65\x79","\x61\x6C\x74\x4B\x65\x79","\x63\x74\x72\x6C\x4B\x65\x79","\x6D\x65\x74\x61\x4B\x65\x79","\x74\x6F\x75\x63\x68\x65\x73","\x63\x68\x61\x6E\x67\x65\x64\x54\x6F\x75\x63\x68\x65\x73","\x63\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x4D\x61\x69\x6E\x45\x76\x65\x6E\x74","\x63\x6C\x69\x65\x6E\x74\x59","\x73\x74\x6F\x70\x50\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E","\x63\x61\x6E\x63\x65\x6C\x42\x75\x62\x62\x6C\x65","\x6D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x6D\x6F\x75\x73\x65\x4D\x6F\x76\x65","\x6D\x6F\x75\x73\x65\x55\x70","\x61\x63\x74\x69\x76\x61\x74\x65","\x72\x65\x73\x69\x7A\x65\x53\x74\x61\x72\x74","\x72\x65\x73\x69\x7A\x65\x45\x6E\x64","\x6D\x6F\x76\x65\x53\x74\x61\x72\x74","\x6D\x6F\x76\x65\x45\x6E\x64","\x70\x61\x6E\x53\x74\x61\x72\x74","\x70\x61\x6E","\x70\x61\x6E\x45\x6E\x64","\x6D\x69\x6E\x69\x6D\x69\x7A\x65","\x6E\x6F\x72\x6D\x61\x6C\x69\x7A\x65","\x6D\x61\x78\x69\x6D\x69\x7A\x65","\x68\x69\x64\x65","\x72\x65\x66\x72\x65\x73\x68","\x73\x69\x7A\x65","\x73\x65\x6C\x65\x63\x74","\x66\x69\x72\x65\x64","\x72\x65\x63\x65\x69\x76\x65","\x63\x6F\x6E\x6E\x65\x63\x74","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x73\x75\x73\x70\x65\x6E\x64","\x72\x65\x73\x75\x6D\x65","\x6D\x61\x72\x6B","\x73\x65\x73\x73\x69\x6F\x6E","\x72\x6F\x6F\x74","\x70\x6F\x73\x74","\x73\x61\x76\x65","\x62\x65\x66\x6F\x72\x65\x41\x64\x64\x56\x65\x72\x74\x65\x78","\x61\x64\x64\x56\x65\x72\x74\x65\x78","\x61\x66\x74\x65\x72\x41\x64\x64\x56\x65\x72\x74\x65\x78","\x64\x6F\x6E\x65","\x65\x78\x65\x63\x75\x74\x65\x64","\x73\x74\x61\x72\x74\x45\x64\x69\x74","\x65\x6E\x64\x45\x64\x69\x74","\x62\x65\x66\x6F\x72\x65\x55\x6E\x64\x6F","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x68\x61\x6E\x67\x65","\x6E\x6F\x74\x69\x66\x79","\x6C\x61\x79\x6F\x75\x74\x43\x65\x6C\x6C\x73","\x73\x63\x61\x6C\x65\x41\x6E\x64\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x75\x70","\x64\x6F\x77\x6E","\x61\x64\x64\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x41\x64\x64\x65\x64","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x4D\x6F\x76\x65\x64","\x72\x65\x73\x69\x7A\x65\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x52\x65\x73\x69\x7A\x65\x64","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x54\x6F\x67\x67\x6C\x65\x64","\x6F\x72\x64\x65\x72\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x4F\x72\x64\x65\x72\x65\x64","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x52\x65\x6D\x6F\x76\x65\x64","\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x75\x6E\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x63\x65\x6C\x6C\x73\x46\x6F\x6C\x64\x65\x64","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73","\x6C\x61\x62\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x63\x6F\x6E\x6E\x65\x63\x74\x43\x65\x6C\x6C","\x63\x65\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x73\x70\x6C\x69\x74\x45\x64\x67\x65","\x66\x6C\x69\x70\x45\x64\x67\x65","\x73\x74\x61\x72\x74\x45\x64\x69\x74\x69\x6E\x67","\x61\x64\x64\x4F\x76\x65\x72\x6C\x61\x79","\x72\x65\x6D\x6F\x76\x65\x4F\x76\x65\x72\x6C\x61\x79","\x75\x70\x64\x61\x74\x65\x43\x65\x6C\x6C\x53\x69\x7A\x65","\x65\x73\x63\x61\x70\x65","\x64\x6F\x75\x62\x6C\x65\x43\x6C\x69\x63\x6B","\x73\x74\x61\x72\x74","\x72\x65\x73\x65\x74","\x75\x72\x6C","\x70\x61\x72\x61\x6D\x73","\x6D\x65\x74\x68\x6F\x64","\x50\x4F\x53\x54","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x62\x69\x6E\x61\x72\x79","\x72\x65\x71\x75\x65\x73\x74","\x69\x73\x42\x69\x6E\x61\x72\x79","\x73\x65\x74\x42\x69\x6E\x61\x72\x79","\x72\x65\x73\x70\x6F\x6E\x73\x65\x54\x65\x78\x74","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x58\x6D\x6C","\x72\x65\x73\x70\x6F\x6E\x73\x65\x58\x4D\x4C","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73","\x58\x4D\x4C\x48\x74\x74\x70\x52\x65\x71\x75\x65\x73\x74","\x6F\x76\x65\x72\x72\x69\x64\x65\x4D\x69\x6D\x65\x54\x79\x70\x65","\x74\x65\x78\x74\x2F\x70\x6C\x61\x69\x6E\x3B\x20\x63\x68\x61\x72\x73\x65\x74\x3D\x78\x2D\x75\x73\x65\x72\x2D\x64\x65\x66\x69\x6E\x65\x64","\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x58\x4D\x4C\x48\x54\x54\x50","\x6F\x6E\x72\x65\x61\x64\x79\x73\x74\x61\x74\x65\x63\x68\x61\x61\x6E\x67\x65","\x62\x69\x6E\x64","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72\x73","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x6F\x6E\x62\x65\x66\x6F\x72\x65\x75\x6E\x6C\x6F\x61\x64","\x66\x6F\x72\x6D","\x61\x63\x74\x69\x6F\x6E","\x26","\x73\x75\x62\x6D\x69\x74","\x63\x65\x6C\x6C\x73","\x69\x6E\x73\x65\x72\x74\x43\x6F\x75\x6E\x74","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x67\x65\x74\x45\x78\x70\x6F\x72\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C\x73","\x67\x65\x74\x49\x6D\x70\x6F\x72\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x53\x54\x45\x50\x53\x49\x5A\x45","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x69\x6D\x70\x6F\x72\x74\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x63\x6F\x6E\x74\x65\x6E\x74","\x69\x6E\x73\x74\x61\x6C\x6C\x4D\x61\x78\x69\x6D\x69\x7A\x65\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x4D\x69\x6E\x69\x6D\x69\x7A\x65\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x43\x6C\x6F\x73\x65\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x4D\x69\x6E\x69\x6D\x69\x7A\x61\x62\x6C\x65","\x73\x65\x74\x54\x69\x74\x6C\x65","\x69\x6E\x73\x74\x61\x6C\x6C\x4D\x6F\x76\x65\x48\x61\x6E\x64\x6C\x65\x72","\x72\x65\x70\x6C\x61\x63\x65\x43\x68\x69\x6C\x64","\x63\x6C\x6F\x73\x65\x49\x6D\x61\x67\x65","\x2F\x63\x6C\x6F\x73\x65\x2E\x67\x69\x66","\x6D\x69\x6E\x69\x6D\x69\x7A\x65\x49\x6D\x61\x67\x65","\x2F\x6D\x69\x6E\x69\x6D\x69\x7A\x65\x2E\x67\x69\x66","\x6E\x6F\x72\x6D\x61\x6C\x69\x7A\x65\x49\x6D\x61\x67\x65","\x2F\x6E\x6F\x72\x6D\x61\x6C\x69\x7A\x65\x2E\x67\x69\x66","\x6D\x61\x78\x69\x6D\x69\x7A\x65\x49\x6D\x61\x67\x65","\x2F\x6D\x61\x78\x69\x6D\x69\x7A\x65\x2E\x67\x69\x66","\x72\x65\x73\x69\x7A\x65\x49\x6D\x61\x67\x65","\x2F\x72\x65\x73\x69\x7A\x65\x2E\x67\x69\x66","\x6D\x69\x6E\x69\x6D\x75\x6D\x53\x69\x7A\x65","\x74\x69\x74\x6C\x65","\x6D\x78\x57\x69\x6E\x64\x6F\x77","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x54\x69\x74\x6C\x65","\x50\x61\x6E\x65","\x63\x6F\x6E\x74\x65\x6E\x74\x57\x72\x61\x70\x70\x65\x72","\x61\x63\x74\x69\x76\x65\x57\x69\x6E\x64\x6F\x77","\x7A\x49\x6E\x64\x65\x78","\x70\x72\x65\x76\x69\x6F\x75\x73\x57\x69\x6E\x64\x6F\x77","\x66\x69\x74","\x69\x73\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x32\x70\x78","\x6E\x77\x2D\x72\x65\x73\x69\x7A\x65","\x73\x65\x74\x53\x69\x7A\x65","\x72\x65\x6D\x6F\x76\x65\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x67\x65\x74\x4D\x69\x6E\x69\x6D\x75\x6D\x53\x69\x7A\x65","\x4D\x69\x6E\x69\x6D\x69\x7A\x65","\x6D\x61\x72\x67\x69\x6E\x52\x69\x67\x68\x74","\x31\x70\x78","\x4E\x6F\x72\x6D\x61\x6C\x69\x7A\x65","\x4D\x61\x78\x69\x6D\x69\x7A\x65","\x6D\x61\x72\x67\x69\x6E\x4C\x65\x66\x74","\x30\x70\x78","\x73\x65\x74\x4C\x6F\x63\x61\x74\x69\x6F\x6E","\x63\x6C\x6F\x73\x65\x49\x6D\x67","\x43\x6C\x6F\x73\x65","\x69\x6E\x73\x65\x72\x74\x42\x65\x66\x6F\x72\x65","\x73\x65\x74\x49\x6D\x61\x67\x65","\x34\x70\x78","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x2D\x32\x70\x78","\x67\x65\x74\x54\x61\x62\x6C\x65","\x61\x64\x64\x42\x75\x74\x74\x6F\x6E\x73","\x6F\x6B","\x4F\x4B","\x63\x61\x6E\x63\x65\x6C","\x43\x61\x6E\x63\x65\x6C","\x61\x64\x64\x54\x65\x78\x74","\x69\x6E\x70\x75\x74","\x74\x65\x78\x74","\x61\x64\x64\x46\x69\x65\x6C\x64","\x61\x64\x64\x43\x68\x65\x63\x6B\x62\x6F\x78","\x63\x68\x65\x63\x6B\x62\x6F\x78","\x63\x68\x65\x63\x6B\x65\x64","\x61\x64\x64\x54\x65\x78\x74\x61\x72\x65\x61","\x72\x6F\x77\x73","\x61\x64\x64\x43\x6F\x6D\x62\x6F","\x6D\x75\x6C\x74\x69\x70\x6C\x65","\x61\x64\x64\x4F\x70\x74\x69\x6F\x6E","\x6F\x70\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x65\x64","\x72\x65\x73\x69\x7A\x65\x57\x69\x64\x74\x68","\x72\x65\x73\x69\x7A\x65\x48\x65\x69\x67\x68\x74","\x68\x61\x6E\x64\x6C\x69\x6E\x67\x52\x65\x73\x69\x7A\x65","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x57\x69\x64\x74\x68","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x65\x6C\x65\x6D\x65\x6E\x74","\x64\x72\x6F\x70\x48\x61\x6E\x64\x6C\x65\x72","\x64\x72\x61\x67\x45\x6C\x65\x6D\x65\x6E\x74","\x70\x72\x65\x76\x69\x65\x77\x45\x6C\x65\x6D\x65\x6E\x74","\x65\x6E\x61\x62\x6C\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x47\x72\x61\x70\x68","\x63\x75\x72\x72\x65\x6E\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x63\x75\x72\x72\x65\x6E\x74\x50\x6F\x69\x6E\x74","\x63\x75\x72\x72\x65\x6E\x74\x47\x75\x69\x64\x65","\x63\x75\x72\x72\x65\x6E\x74\x48\x69\x67\x68\x6C\x69\x67\x68\x74","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x64\x72\x61\x67\x45\x6C\x65\x6D\x65\x6E\x74\x5A\x49\x6E\x64\x65\x78","\x64\x72\x61\x67\x45\x6C\x65\x6D\x65\x6E\x74\x4F\x70\x61\x63\x69\x74\x79","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x47\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x43\x65\x6C\x6C\x41\x74","\x6D\x6F\x75\x73\x65\x4D\x6F\x76\x65\x48\x61\x6E\x64\x6C\x65\x72","\x73\x74\x61\x72\x74\x44\x72\x61\x67","\x6D\x6F\x75\x73\x65\x55\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x74\x6F\x70\x44\x72\x61\x67","\x67\x72\x61\x70\x68\x43\x6F\x6E\x74\x61\x69\x6E\x73\x45\x76\x65\x6E\x74","\x64\x72\x61\x67\x45\x78\x69\x74","\x64\x72\x61\x67\x45\x6E\x74\x65\x72","\x64\x72\x61\x67\x4F\x76\x65\x72","\x64\x72\x6F\x70","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x67\x65\x74\x47\x75\x69\x64\x65\x53\x74\x61\x74\x65\x73","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x61\x75\x74\x6F\x53\x63\x72\x6F\x6C\x6C","\x61\x75\x74\x6F\x45\x78\x74\x65\x6E\x64","\x73\x63\x72\x6F\x6C\x6C\x50\x6F\x69\x6E\x74\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x69\x73\x44\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x68\x69\x67\x68\x6C\x69\x67\x68\x74","\x33","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64\x45\x76\x65\x6E\x74","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x72\x69\x64\x53\x69\x7A\x65","\x73\x6E\x61\x70","\x70\x72\x65\x76\x69\x65\x77\x4F\x66\x66\x73\x65\x74","\x6E\x6F\x52\x65\x73\x65\x74","\x75\x70\x64\x61\x74\x65\x44\x65\x66\x61\x75\x6C\x74\x4D\x6F\x64\x65","\x61\x64\x64\x49\x74\x65\x6D","\x6D\x78\x54\x6F\x6F\x6C\x62\x61\x72\x4D\x6F\x64\x65","\x6D\x78\x54\x6F\x6F\x6C\x62\x61\x72\x49\x74\x65\x6D","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x6D\x65\x6E\x75","\x63\x75\x72\x72\x65\x6E\x74\x49\x6D\x67","\x69\x73\x4D\x65\x6E\x75\x53\x68\x6F\x77\x69\x6E\x67","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x53\x65\x6C\x65\x63\x74\x65\x64","\x6D\x6F\x75\x73\x65\x6F\x75\x74","\x6D\x78\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6D\x62\x6F\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6D\x78\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6D\x62\x6F","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E\x43\x6F\x6D\x62\x6F","\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x6E\x64\x65\x78","\x6F\x70\x74\x69\x6F\x6E\x73","\x66\x75\x6E\x63\x74","\x61\x64\x64\x53\x77\x69\x74\x63\x68\x4D\x6F\x64\x65","\x69\x6E\x69\x74\x69\x61\x6C\x43\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x61\x6C\x74\x49\x63\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x65\x64\x4D\x6F\x64\x65","\x64\x65\x66\x61\x75\x6C\x74\x4D\x6F\x64\x65","\x73\x65\x6C\x65\x63\x74\x4D\x6F\x64\x65","\x61\x64\x64\x4D\x6F\x64\x65","\x64\x65\x66\x61\x75\x6C\x74\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x72\x65\x73\x65\x74\x4D\x6F\x64\x65","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x61\x64\x64\x42\x72\x65\x61\x6B","\x61\x64\x64\x4C\x69\x6E\x65","\x68\x72","\x36\x70\x78","\x75\x72\x6C\x49\x6E\x69\x74","\x75\x72\x6C\x50\x6F\x6C\x6C","\x75\x72\x6C\x4E\x6F\x74\x69\x66\x79","\x63\x6F\x64\x65\x63","\x6C\x6F\x6F\x6B\x75\x70","\x65\x64\x69\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x73\x75\x73\x70\x65\x6E\x64\x65\x64","\x3C\x65\x64\x69\x74\x3E","\x63\x68\x61\x6E\x67\x65\x73","\x75\x6E\x64\x6F\x6E\x65","\x65\x6E\x63\x6F\x64\x65\x43\x68\x61\x6E\x67\x65\x73","\x3C\x2F\x65\x64\x69\x74\x3E","\x6C\x69\x6E\x65\x66\x65\x65\x64","\x65\x73\x63\x61\x70\x65\x50\x6F\x73\x74\x44\x61\x74\x61","\x73\x69\x67\x6E\x69\x66\x69\x63\x61\x6E\x74\x52\x65\x6D\x6F\x74\x65\x43\x68\x61\x6E\x67\x65\x73","\x73\x65\x6E\x74","\x72\x65\x63\x65\x69\x76\x65\x64","\x70\x6F\x6C\x6C\x69\x6E\x67","\x70\x6F\x6C\x6C","\x73\x74\x6F\x70","\x72\x65\x61\x73\x6F\x6E","\x6D\x78\x53\x65\x73\x73\x69\x6F\x6E\x2E\x6E\x6F\x74\x69\x66\x79\x3A\x20","\x20\x78\x6D\x6C\x3D","\x3C\x6D\x65\x73\x73\x61\x67\x65\x3E\x3C\x64\x65\x6C\x74\x61\x3E","\x3C\x2F\x64\x65\x6C\x74\x61\x3E\x3C\x2F\x6D\x65\x73\x73\x61\x67\x65\x3E","\x78\x6D\x6C\x3D","\x69\x73\x56\x61\x6C\x69\x64\x52\x65\x73\x70\x6F\x6E\x73\x65","\x49\x6E\x76\x61\x6C\x69\x64\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\x3A\x20","\x52\x65\x73\x70\x6F\x6E\x73\x65\x20\x6E\x6F\x74\x20\x72\x65\x61\x64\x79","\x54\x72\x61\x6E\x73\x6D\x69\x73\x73\x69\x6F\x6E\x20\x65\x72\x72\x6F\x72","\x3C\x3F\x70\x68\x70","\x6E\x61\x6D\x65\x73\x70\x61\x63\x65","\x70\x72\x65\x66\x69\x78","\x70\x72\x6F\x63\x65\x73\x73\x53\x74\x61\x74\x65","\x64\x65\x6C\x74\x61","\x70\x72\x6F\x63\x65\x73\x73\x44\x65\x6C\x74\x61","\x64\x65\x63\x6F\x64\x65","\x70\x72\x6F\x63\x65\x73\x73\x45\x64\x69\x74","\x64\x65\x63\x6F\x64\x65\x43\x68\x61\x6E\x67\x65\x73","\x63\x72\x65\x61\x74\x65\x55\x6E\x64\x6F\x61\x62\x6C\x65\x45\x64\x69\x74","\x73\x6F\x75\x72\x63\x65","\x64\x65\x63\x6F\x64\x65\x43\x68\x61\x6E\x67\x65","\x6D\x78\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x6D\x78\x43\x68\x69\x6C\x64\x43\x68\x61\x6E\x67\x65","\x70\x61\x72\x65\x6E\x74","\x63\x65\x6C\x6C\x52\x65\x6D\x6F\x76\x65\x64","\x67\x65\x74\x49\x64","\x70\x75\x74\x4F\x62\x6A\x65\x63\x74","\x73\x69\x67\x6E\x69\x66\x69\x63\x61\x6E\x74","\x72\x65\x64\x6F\x6E\x65","\x69\x73\x45\x6D\x70\x74\x79","\x69\x73\x53\x69\x67\x6E\x69\x66\x69\x63\x61\x6E\x74","\x64\x69\x65","\x68\x69\x73\x74\x6F\x72\x79","\x69\x6E\x64\x65\x78\x4F\x66\x4E\x65\x78\x74\x41\x64\x64","\x63\x61\x6E\x55\x6E\x64\x6F","\x63\x61\x6E\x52\x65\x64\x6F","\x75\x6E\x64\x6F\x61\x62\x6C\x65\x45\x64\x69\x74\x48\x61\x70\x70\x65\x6E\x65\x64","\x73\x68\x69\x66\x74","\x64\x61\x74\x61\x3A\x69\x6D\x61\x67\x65","\x69\x73\x52\x65\x6C\x61\x74\x69\x76\x65\x55\x72\x6C","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x2F\x2F","\x68\x6F\x73\x74","\x70\x61\x74\x68\x6E\x61\x6D\x65","\x6C\x61\x73\x74\x49\x6E\x64\x65\x78\x4F\x66","\x74\x68\x72\x65\x61\x64","\x61\x63\x74\x69\x76\x65","\x64\x79","\x64\x78","\x74\x30\x79","\x74\x30\x78","\x74\x64\x79","\x74\x64\x78","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x6D\x6F\x75\x73\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x64\x64\x4D\x6F\x75\x73\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x70\x61\x6E\x47\x72\x61\x70\x68","\x70\x61\x6E\x44\x78","\x70\x61\x6E\x44\x79","\x67\x65\x74\x44\x78","\x67\x65\x74\x44\x79","\x64\x65\x6C\x61\x79","\x73\x65\x74\x49\x6E\x74\x65\x72\x76\x61\x6C","\x69\x73\x41\x63\x74\x69\x76\x65","\x70\x61\x6E\x54\x6F","\x68\x61\x6E\x64\x6C\x65\x4D\x6F\x75\x73\x65\x4F\x75\x74","\x64\x61\x6D\x70\x65\x72","\x63\x6C\x65\x61\x72\x49\x6E\x74\x65\x72\x76\x61\x6C","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65\x4D\x6F\x75\x73\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x73\x75\x62\x6D\x65\x6E\x75\x49\x6D\x61\x67\x65","\x2F\x73\x75\x62\x6D\x65\x6E\x75\x2E\x67\x69\x66","\x75\x73\x65\x4C\x65\x66\x74\x42\x75\x74\x74\x6F\x6E\x46\x6F\x72\x50\x6F\x70\x75\x70","\x69\x74\x65\x6D\x43\x6F\x75\x6E\x74","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x73\x6D\x61\x72\x74\x53\x65\x70\x61\x72\x61\x74\x6F\x72\x73","\x6C\x61\x62\x65\x6C\x73","\x6D\x78\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x64\x69\x73\x61\x62\x6C\x65\x43\x6F\x6E\x74\x65\x78\x74\x4D\x65\x6E\x75","\x69\x73\x4C\x65\x66\x74\x4D\x6F\x75\x73\x65\x42\x75\x74\x74\x6F\x6E","\x77\x69\x6C\x6C\x41\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x49\x74\x65\x6D\x73","\x6D\x78\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75\x49\x74\x65\x6D","\x6D\x78\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75\x49\x63\x6F\x6E","\x20\x64\x69\x73\x61\x62\x6C\x65\x64","\x70\x61\x64\x64\x69\x6E\x67\x52\x69\x67\x68\x74","\x74\x65\x78\x74\x41\x6C\x69\x67\x6E","\x63\x72\x65\x61\x74\x65\x53\x75\x62\x6D\x65\x6E\x75","\x65\x76\x65\x6E\x74\x52\x65\x63\x65\x69\x76\x65\x72","\x61\x63\x74\x69\x76\x65\x52\x6F\x77","\x68\x69\x64\x65\x53\x75\x62\x6D\x65\x6E\x75","\x73\x68\x6F\x77\x53\x75\x62\x6D\x65\x6E\x75","\x6D\x78\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75\x49\x74\x65\x6D\x48\x6F\x76\x65\x72","\x30\x20\x30\x20\x30\x20\x30\x70\x78","\x63\x6F\x6C\x53\x70\x61\x6E","\x32","\x73\x68\x6F\x77\x4D\x65\x6E\x75","\x63\x68\x61\x6E\x67\x65\x48\x61\x6E\x64\x6C\x65\x72","\x67\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x73\x65\x74\x47\x72\x61\x70\x68","\x67\x72\x61\x70\x68","\x61\x75\x74\x6F\x53\x61\x76\x65\x44\x65\x6C\x61\x79","\x61\x75\x74\x6F\x53\x61\x76\x65\x54\x68\x72\x6F\x74\x74\x6C\x65","\x61\x75\x74\x6F\x53\x61\x76\x65\x54\x68\x72\x65\x73\x68\x6F\x6C\x64","\x69\x67\x6E\x6F\x72\x65\x64\x43\x68\x61\x6E\x67\x65\x73","\x6C\x61\x73\x74\x53\x6E\x61\x70\x73\x68\x6F\x74","\x73\x74\x61\x72\x74\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x73\x74\x6F\x70\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x73\x74\x65\x70\x73","\x65\x61\x73\x65","\x73\x74\x65\x70","\x61\x6E\x69\x6D\x61\x74\x65\x43\x65\x6C\x6C","\x67\x65\x74\x44\x65\x6C\x74\x61","\x69\x73\x56\x65\x72\x74\x65\x78","\x6D\x6F\x76\x65\x53\x74\x61\x74\x65","\x73\x74\x6F\x70\x52\x65\x63\x75\x72\x73\x69\x6F\x6E","\x67\x65\x74\x4F\x72\x69\x67\x69\x6E\x46\x6F\x72\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x69\x6D\x61\x67\x65\x73","\x61\x6C\x74","\x70\x75\x74\x49\x6D\x61\x67\x65","\x67\x65\x74\x49\x6D\x61\x67\x65","\x66\x61\x6C\x6C\x62\x61\x63\x6B","\x69\x6E\x63\x6C\x75\x64\x65\x4F\x76\x65\x72\x6C\x61\x79\x73","\x64\x72\x61\x77\x53\x74\x61\x74\x65","\x64\x72\x61\x77\x43\x65\x6C\x6C\x53\x74\x61\x74\x65","\x76\x69\x73\x69\x74\x53\x74\x61\x74\x65\x73\x52\x65\x63\x75\x72\x73\x69\x76\x65","\x64\x72\x61\x77\x4F\x76\x65\x72\x6C\x61\x79\x73","\x70\x61\x69\x6E\x74","\x72\x65\x73\x74\x6F\x72\x65","\x6F\x76\x65\x72\x6C\x61\x79\x73","\x63\x6F\x6E\x76\x65\x72\x74\x65\x72","\x63\x72\x65\x61\x74\x65\x55\x72\x6C\x43\x6F\x6E\x76\x65\x72\x74\x65\x72","\x73\x74\x61\x74\x65\x73","\x70\x61\x74\x68","\x72\x6F\x74\x61\x74\x65\x48\x74\x6D\x6C","\x6C\x61\x73\x74\x58","\x6C\x61\x73\x74\x59","\x6D\x6F\x76\x65\x4F\x70","\x4D","\x6C\x69\x6E\x65\x4F\x70","\x4C","\x71\x75\x61\x64\x4F\x70","\x51","\x63\x75\x72\x76\x65\x4F\x70","\x43","\x63\x6C\x6F\x73\x65\x4F\x70","\x5A","\x70\x6F\x69\x6E\x74\x65\x72\x45\x76\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x65","\x33\x20\x33","\x66\x6C\x61\x74","\x6D\x69\x74\x65\x72","\x23\x30\x30\x30\x30\x30\x30","\x53\x48\x41\x44\x4F\x57\x43\x4F\x4C\x4F\x52","\x53\x48\x41\x44\x4F\x57\x5F\x4F\x50\x41\x43\x49\x54\x59","\x53\x48\x41\x44\x4F\x57\x5F\x4F\x46\x46\x53\x45\x54\x5F\x58","\x53\x48\x41\x44\x4F\x57\x5F\x4F\x46\x46\x53\x45\x54\x5F\x59","\x66\x6F\x72\x6D\x61\x74","\x61\x64\x64\x4F\x70","\x72\x6F\x74\x61\x74\x65\x50\x6F\x69\x6E\x74","\x70\x6F\x70","\x73\x65\x74\x41\x6C\x70\x68\x61","\x61\x6C\x70\x68\x61","\x73\x65\x74\x46\x69\x6C\x6C\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x47\x72\x61\x64\x69\x65\x6E\x74","\x66\x69\x6C\x6C\x41\x6C\x70\x68\x61","\x67\x72\x61\x64\x69\x65\x6E\x74\x41\x6C\x70\x68\x61","\x73\x65\x74\x53\x74\x72\x6F\x6B\x65\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x53\x74\x72\x6F\x6B\x65\x57\x69\x64\x74\x68","\x73\x65\x74\x44\x61\x73\x68\x65\x64","\x73\x65\x74\x44\x61\x73\x68\x50\x61\x74\x74\x65\x72\x6E","\x73\x65\x74\x4C\x69\x6E\x65\x43\x61\x70","\x6C\x69\x6E\x65\x43\x61\x70","\x73\x65\x74\x4C\x69\x6E\x65\x4A\x6F\x69\x6E","\x6C\x69\x6E\x65\x4A\x6F\x69\x6E","\x73\x65\x74\x4D\x69\x74\x65\x72\x4C\x69\x6D\x69\x74","\x6D\x69\x74\x65\x72\x4C\x69\x6D\x69\x74","\x73\x65\x74\x46\x6F\x6E\x74\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x46\x6F\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x46\x6F\x6E\x74\x42\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x42\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x46\x6F\x6E\x74\x53\x69\x7A\x65","\x73\x65\x74\x46\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x73\x65\x74\x46\x6F\x6E\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x53\x68\x61\x64\x6F\x77","\x73\x65\x74\x53\x68\x61\x64\x6F\x77\x43\x6F\x6C\x6F\x72","\x73\x68\x61\x64\x6F\x77\x43\x6F\x6C\x6F\x72","\x73\x65\x74\x53\x68\x61\x64\x6F\x77\x41\x6C\x70\x68\x61","\x73\x68\x61\x64\x6F\x77\x41\x6C\x70\x68\x61","\x73\x65\x74\x53\x68\x61\x64\x6F\x77\x4F\x66\x66\x73\x65\x74","\x73\x68\x61\x64\x6F\x77\x44\x78","\x73\x68\x61\x64\x6F\x77\x44\x79","\x62\x65\x67\x69\x6E","\x6D\x6F\x76\x65\x54\x6F","\x6C\x69\x6E\x65\x54\x6F","\x71\x75\x61\x64\x54\x6F","\x63\x75\x72\x76\x65\x54\x6F","\x61\x72\x63\x54\x6F","\x61\x72\x63\x54\x6F\x43\x75\x72\x76\x65\x73","\x65\x6E\x64","\x77\x72\x69\x74\x65\x44\x65\x66\x61\x75\x6C\x74\x73","\x65\x78\x74\x65\x6E\x64","\x74\x65\x78\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x6F\x6D\x70\x72\x65\x73\x73\x65\x64","\x66\x6F\x6E\x74\x66\x61\x6D\x69\x6C\x79","\x66\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x73\x69\x7A\x65","\x73\x68\x61\x64\x6F\x77\x63\x6F\x6C\x6F\x72","\x73\x68\x61\x64\x6F\x77\x61\x6C\x70\x68\x61","\x73\x68\x61\x64\x6F\x77\x6F\x66\x66\x73\x65\x74","\x74\x6F\x46\x69\x78\x65\x64","\x72\x6F\x74\x61\x74\x65","\x74\x68\x65\x74\x61","\x63\x78","\x63\x79","\x66\x69\x6C\x6C\x63\x6F\x6C\x6F\x72","\x67\x72\x61\x64\x69\x65\x6E\x74","\x63\x31","\x63\x32","\x77","\x68","\x61\x6C\x70\x68\x61\x31","\x61\x6C\x70\x68\x61\x32","\x73\x74\x72\x6F\x6B\x65\x63\x6F\x6C\x6F\x72","\x73\x74\x72\x6F\x6B\x65\x77\x69\x64\x74\x68","\x64\x61\x73\x68\x70\x61\x74\x74\x65\x72\x6E","\x70\x61\x74\x74\x65\x72\x6E","\x6C\x69\x6E\x65\x63\x61\x70","\x63\x61\x70","\x6C\x69\x6E\x65\x6A\x6F\x69\x6E","\x6D\x69\x74\x65\x72\x6C\x69\x6D\x69\x74","\x6C\x69\x6D\x69\x74","\x66\x6F\x6E\x74\x63\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x63\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x62\x6F\x72\x64\x65\x72\x63\x6F\x6C\x6F\x72","\x66\x6F\x6E\x74\x73\x74\x79\x6C\x65","\x72\x65\x63\x74","\x72\x6F\x75\x6E\x64\x72\x65\x63\x74","\x63\x6F\x6E\x76\x65\x72\x74","\x61\x73\x70\x65\x63\x74","\x71\x75\x61\x64","\x78\x31","\x79\x31","\x78\x32","\x79\x32","\x63\x75\x72\x76\x65","\x78\x33","\x79\x33","\x69\x73\x4E\x6F\x64\x65","\x73\x74\x72","\x77\x72\x61\x70","\x66\x69\x6C\x6C","\x63\x6C\x69\x70","\x73\x74\x72\x6F\x6B\x65","\x66\x69\x6C\x6C\x41\x6E\x64\x53\x74\x72\x6F\x6B\x65","\x66\x69\x6C\x6C\x73\x74\x72\x6F\x6B\x65","\x67\x72\x61\x64\x69\x65\x6E\x74\x73","\x64\x65\x66\x73","\x73\x74\x79\x6C\x65\x45\x6E\x61\x62\x6C\x65\x64","\x63\x72\x65\x61\x74\x65\x53\x74\x79\x6C\x65","\x6D\x61\x74\x63\x68\x48\x74\x6D\x6C\x41\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x66\x6F\x45\x6E\x61\x62\x6C\x65\x64","\x73\x74\x72\x6F\x6B\x65\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x72\x65\x66\x43\x6F\x75\x6E\x74","\x62\x6C\x6F\x63\x6B\x49\x6D\x61\x67\x65\x50\x6F\x69\x6E\x74\x65\x72\x45\x76\x65\x6E\x74\x73","\x73\x76\x67\x7B\x66\x6F\x6E\x74\x2D\x66\x61\x6D\x69\x6C\x79\x3A","\x3B\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A","\x3B\x66\x69\x6C\x6C\x3A\x6E\x6F\x6E\x65\x3B\x73\x74\x72\x6F\x6B\x65\x2D\x6D\x69\x74\x65\x72\x6C\x69\x6D\x69\x74\x3A\x31\x30\x7D","\x4E\x53\x5F\x53\x56\x47","\x78\x6D\x6C\x6E\x73","\x63\x72\x65\x61\x74\x65\x47\x72\x61\x64\x69\x65\x6E\x74\x49\x64","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x53\x4F\x55\x54\x48","\x73","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x45\x41\x53\x54","\x65","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4E\x4F\x52\x54\x48","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x57\x45\x53\x54","\x6D\x78\x2D\x67\x72\x61\x64\x69\x65\x6E\x74\x2D","\x67\x65\x74\x53\x76\x67\x47\x72\x61\x64\x69\x65\x6E\x74","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x69\x64","\x63\x72\x65\x61\x74\x65\x53\x76\x67\x47\x72\x61\x64\x69\x65\x6E\x74","\x6C\x69\x6E\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6E\x74","\x30\x25","\x3B\x73\x74\x6F\x70\x2D\x6F\x70\x61\x63\x69\x74\x79\x3A","\x6F\x66\x66\x73\x65\x74","\x73\x74\x6F\x70\x2D\x63\x6F\x6C\x6F\x72\x3A","\x61\x64\x64\x4E\x6F\x64\x65","\x64","\x75\x70\x64\x61\x74\x65\x46\x69\x6C\x6C","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x75\x70\x64\x61\x74\x65\x53\x74\x72\x6F\x6B\x65","\x63\x72\x65\x61\x74\x65\x53\x68\x61\x64\x6F\x77","\x63\x72\x65\x61\x74\x65\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x70\x6F\x69\x6E\x74\x65\x72\x2D\x65\x76\x65\x6E\x74\x73","\x61\x6C\x6C","\x66\x69\x6C\x6C\x2D\x6F\x70\x61\x63\x69\x74\x79","\x75\x72\x6C\x28\x23","\x73\x74\x72\x6F\x6B\x65\x2D\x6F\x70\x61\x63\x69\x74\x79","\x73\x74\x72\x6F\x6B\x65\x2D\x77\x69\x64\x74\x68","\x75\x70\x64\x61\x74\x65\x53\x74\x72\x6F\x6B\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x73\x74\x72\x6F\x6B\x65\x2D\x64\x61\x73\x68\x61\x72\x72\x61\x79","\x63\x72\x65\x61\x74\x65\x44\x61\x73\x68\x50\x61\x74\x74\x65\x72\x6E","\x73\x74\x72\x6F\x6B\x65\x2D\x6C\x69\x6E\x65\x6A\x6F\x69\x6E","\x62\x75\x74\x74","\x73\x74\x72\x6F\x6B\x65\x2D\x6C\x69\x6E\x65\x63\x61\x70","\x73\x74\x72\x6F\x6B\x65\x2D\x6D\x69\x74\x65\x72\x6C\x69\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x77\x68\x69\x74\x65","\x29\x73\x63\x61\x6C\x65\x28","\x29\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28","\x72\x6F\x74\x61\x74\x65\x28","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x43\x78","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x43\x79","\x72\x78","\x72\x79","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65\x4E\x53","\x78\x6C\x69\x6E\x6B\x3A\x68\x72\x65\x66","\x70\x72\x65\x73\x65\x72\x76\x65\x41\x73\x70\x65\x63\x74\x52\x61\x74\x69\x6F","\x73\x63\x61\x6C\x65\x28","\x70\x6F\x69\x6E\x74\x65\x72\x2D\x65\x76\x65\x6E\x74\x73\x3A\x6E\x6F\x6E\x65","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x64\x69\x73\x70\x6C\x61\x79\x3A\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B\x3B\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A","\x70\x78\x3B\x66\x6F\x6E\x74\x2D\x66\x61\x6D\x69\x6C\x79\x3A","\x3B\x63\x6F\x6C\x6F\x72\x3A","\x3B\x6C\x69\x6E\x65\x2D\x68\x65\x69\x67\x68\x74\x3A","\x70\x78\x3B","\x46\x4F\x4E\x54\x5F\x42\x4F\x4C\x44","\x66\x6F\x6E\x74\x2D\x77\x65\x69\x67\x68\x74\x3A\x62\x6F\x6C\x64\x3B","\x46\x4F\x4E\x54\x5F\x49\x54\x41\x4C\x49\x43","\x66\x6F\x6E\x74\x2D\x73\x74\x79\x6C\x65\x3A\x69\x74\x61\x6C\x69\x63\x3B","\x46\x4F\x4E\x54\x5F\x55\x4E\x44\x45\x52\x4C\x49\x4E\x45","\x66\x6F\x6E\x74\x2D\x64\x65\x63\x6F\x72\x61\x74\x69\x6F\x6E\x3A\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65\x3B","\x74\x65\x78\x74\x2D\x61\x6C\x69\x67\x6E\x3A\x63\x65\x6E\x74\x65\x72\x3B","\x74\x65\x78\x74\x2D\x61\x6C\x69\x67\x6E\x3A\x72\x69\x67\x68\x74\x3B","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x2D\x63\x6F\x6C\x6F\x72\x3A","\x62\x6F\x72\x64\x65\x72\x3A\x31\x70\x78\x20\x73\x6F\x6C\x69\x64\x20","\x26\x61\x6D\x70\x3B\x67\x74\x3B","\x26\x61\x6D\x70\x3B\x6C\x74\x3B","\x3C\x64\x69\x76\x20\x78\x6D\x6C\x6E\x73\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x31\x39\x39\x39\x2F\x78\x68\x74\x6D\x6C\x22\x20\x73\x74\x79\x6C\x65\x3D\x22\x64\x69\x73\x70\x6C\x61\x79\x3A\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B\x3B","\x22\x3E","\x3C\x2F\x64\x69\x76\x3E","\x3C\x68\x72\x20\x2F\x3E","\x3C\x62\x72\x20\x2F\x3E","\x3C\x64\x69\x76\x20\x78\x6D\x6C\x6E\x73\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x77\x33\x2E\x6F\x72\x67\x2F\x31\x39\x39\x39\x2F\x78\x68\x74\x6D\x6C\x22\x20\x73\x74\x79\x6C\x65\x3D\x22","\x68\x74\x6D\x6C","\x76\x65\x72\x74\x69\x63\x61\x6C\x2D\x61\x6C\x69\x67\x6E\x3A\x74\x6F\x70\x3B","\x6F\x76\x65\x72\x66\x6C\x6F\x77\x3A\x68\x69\x64\x64\x65\x6E\x3B","\x6D\x61\x78\x2D\x68\x65\x69\x67\x68\x74\x3A","\x77\x69\x64\x74\x68\x3A","\x77\x68\x69\x74\x65\x2D\x73\x70\x61\x63\x65\x3A\x6E\x6F\x72\x6D\x61\x6C\x3B","\x77\x68\x69\x74\x65\x2D\x73\x70\x61\x63\x65\x3A\x6E\x6F\x77\x72\x61\x70\x3B","\x66\x6F\x72\x65\x69\x67\x6E\x4F\x62\x6A\x65\x63\x74","\x70\x6C\x61\x69\x6E\x54\x65\x78\x74","\x63\x72\x65\x61\x74\x65\x43\x6C\x69\x70","\x6D\x78\x2D\x63\x6C\x69\x70\x2D","\x63\x6C\x69\x70\x50\x61\x74\x68","\x63\x6C\x69\x70\x2D\x70\x61\x74\x68","\x75\x70\x64\x61\x74\x65\x46\x6F\x6E\x74","\x74\x65\x78\x74\x2D\x61\x6E\x63\x68\x6F\x72","\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65","\x61\x64\x64\x54\x65\x78\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x66\x6F\x6E\x74\x2D\x66\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x2D\x77\x65\x69\x67\x68\x74","\x62\x6F\x6C\x64","\x66\x6F\x6E\x74\x2D\x73\x74\x79\x6C\x65","\x69\x74\x61\x6C\x69\x63","\x74\x65\x78\x74\x2D\x64\x65\x63\x6F\x72\x61\x74\x69\x6F\x6E","\x67\x65\x74\x42\x42\x6F\x78","\x66\x6F\x6E\x74\x57\x65\x69\x67\x68\x74","\x3C\x62\x72\x2F\x3E","\x6D\x6F\x64","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28\x30\x2E\x35\x2C\x20\x30\x2E\x35\x29","\x6D","\x6C","\x63","\x72\x6F\x74\x61\x74\x65\x64\x48\x74\x6D\x6C\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x76\x6D\x6C\x53\x63\x61\x6C\x65","\x20\x65","\x63\x6F\x6F\x72\x64\x73\x69\x7A\x65","\x73\x74\x72\x6F\x6B\x65\x77\x65\x69\x67\x68\x74","\x73\x74\x72\x6F\x6B\x65\x64","\x63\x72\x65\x61\x74\x65\x53\x74\x72\x6F\x6B\x65","\x63\x72\x65\x61\x74\x65\x46\x69\x6C\x6C","\x63\x72\x65\x61\x74\x65\x54\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x46\x69\x6C\x6C","\x66\x69\x6C\x6C\x65\x64","\x3A\x66\x69\x6C\x6C","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66","\x74\x69\x6C\x65","\x63\x6F\x6C\x6F\x72\x32","\x66\x6C\x69\x70","\x61\x6E\x67\x6C\x65","\x4F\x46\x46\x49\x43\x45\x5F\x50\x52\x45\x46\x49\x58","\x3A\x6F\x70\x61\x63\x69\x74\x79\x32","\x3A\x73\x74\x72\x6F\x6B\x65","\x65\x6E\x64\x63\x61\x70","\x6A\x6F\x69\x6E\x73\x74\x79\x6C\x65","\x31\x30","\x64\x61\x73\x68\x73\x74\x79\x6C\x65","\x67\x65\x74\x56\x6D\x6C\x44\x61\x73\x68\x53\x74\x79\x6C\x65","\x64\x61\x73\x68","\x30\x20\x32","\x63\x72\x65\x61\x74\x65\x53\x68\x61\x64\x6F\x77\x53\x74\x72\x6F\x6B\x65","\x63\x72\x65\x61\x74\x65\x53\x68\x61\x64\x6F\x77\x46\x69\x6C\x6C","\x3A\x73\x68\x61\x70\x65","\x63\x20","\x63\x72\x65\x61\x74\x65\x52\x65\x63\x74","\x3A\x72\x65\x63\x74","\x3A\x72\x6F\x75\x6E\x64\x72\x65\x63\x74","\x61\x72\x63\x73\x69\x7A\x65","\x3A\x6F\x76\x61\x6C","\x61\x74\x6D\x6F\x73\x74","\x69\x67\x6E\x6F\x72\x65","\x66\x72\x61\x6D\x65","\x31\x38\x30","\x66\x6F\x6E\x74\x44\x65\x63\x6F\x72\x61\x74\x69\x6F\x6E","\x3A\x67\x72\x6F\x75\x70","\x72\x65\x6C\x61\x74\x69\x76\x65","\x67\x65\x74\x41\x6C\x69\x67\x6E\x6D\x65\x6E\x74\x41\x73\x50\x6F\x69\x6E\x74","\x6E\x6F\x72\x6D\x61\x6C","\x6D\x61\x78\x48\x65\x69\x67\x68\x74","\x67\x72\x6F\x75\x70","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x4D\x61\x74\x72\x69\x78\x28\x4D\x31\x31\x3D","\x2C\x20\x4D\x31\x32\x3D","\x2C\x20\x4D\x32\x31\x3D","\x2C\x20\x4D\x32\x32\x3D","\x2C\x20\x73\x69\x7A\x69\x6E\x67\x4D\x65\x74\x68\x6F\x64\x3D\x27\x61\x75\x74\x6F\x20\x65\x78\x70\x61\x6E\x64\x27\x29","\x3A\x70\x61\x74\x68","\x74\x65\x78\x74\x70\x61\x74\x68\x6F\x6B","\x6D\x20","\x20\x6C\x20","\x3A\x74\x65\x78\x74\x70\x61\x74\x68","\x76\x2D\x74\x65\x78\x74\x2D\x61\x6C\x69\x67\x6E\x3A","\x73\x74\x72\x69\x6E\x67","\x73\x65\x74\x53\x74\x61\x74\x65\x73","\x67\x75\x69\x64\x65\x58","\x67\x75\x69\x64\x65\x59","\x67\x65\x74\x47\x75\x69\x64\x65\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x63\x72\x65\x61\x74\x65\x47\x75\x69\x64\x65\x53\x68\x61\x70\x65","\x69\x73\x44\x61\x73\x68\x65\x64","\x44\x49\x41\x4C\x45\x43\x54\x5F\x56\x4D\x4C","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x70\x6F\x69\x6E\x74\x73","\x73\x63\x72\x6F\x6C\x6C\x57\x69\x64\x74\x68","\x64\x65\x73\x63","\x70\x61\x72\x73\x65\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x70\x61\x72\x73\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x64\x65\x66\x61\x75\x6C\x74\x4C\x6F\x63\x61\x6C\x69\x7A\x65\x64","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x77\x30","\x68\x30","\x62\x67\x4E\x6F\x64\x65","\x66\x67\x4E\x6F\x64\x65","\x66\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x76\x61\x72\x69\x61\x62\x6C\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73","\x67\x65\x74\x43\x68\x69\x6C\x64\x4E\x6F\x64\x65\x73","\x70\x61\x72\x73\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x65\x76\x61\x6C\x75\x61\x74\x65\x54\x65\x78\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x65\x76\x61\x6C\x75\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6C\x6F\x63\x61\x6C\x69\x7A\x65\x64","\x65\x76\x61\x6C","\x64\x72\x61\x77\x53\x68\x61\x70\x65","\x64\x72\x61\x77\x43\x68\x69\x6C\x64\x72\x65\x6E","\x63\x6F\x6D\x70\x75\x74\x65\x41\x73\x70\x65\x63\x74","\x69\x6E\x68\x65\x72\x69\x74","\x67\x65\x74\x4E\x75\x6D\x62\x65\x72","\x64\x72\x61\x77\x4E\x6F\x64\x65","\x66\x69\x78\x65\x64","\x61\x72\x63","\x78\x2D\x61\x78\x69\x73\x2D\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x6C\x61\x72\x67\x65\x2D\x61\x72\x63\x2D\x66\x6C\x61\x67","\x73\x77\x65\x65\x70\x2D\x66\x6C\x61\x67","\x52\x45\x43\x54\x41\x4E\x47\x4C\x45\x5F\x52\x4F\x55\x4E\x44\x49\x4E\x47\x5F\x46\x41\x43\x54\x4F\x52","\x61\x6C\x69\x67\x6E\x2D\x73\x68\x61\x70\x65","\x69\x6E\x63\x6C\x75\x64\x65\x2D\x73\x68\x61\x70\x65","\x67\x65\x74\x53\x74\x65\x6E\x63\x69\x6C","\x73\x74\x65\x6E\x63\x69\x6C","\x62\x6F\x75\x6E\x64\x73","\x62\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x73\x76\x67\x53\x74\x72\x6F\x6B\x65\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x73\x74\x65\x6E\x63\x69\x6C\x50\x6F\x69\x6E\x74\x65\x72\x45\x76\x65\x6E\x74\x73","\x69\x73\x50\x61\x72\x73\x65\x56\x6D\x6C","\x69\x73\x48\x74\x6D\x6C\x41\x6C\x6C\x6F\x77\x65\x64","\x67\x65\x74\x53\x76\x67\x53\x63\x72\x65\x65\x6E\x4F\x66\x66\x73\x65\x74","\x63\x72\x65\x61\x74\x65\x53\x76\x67","\x63\x72\x65\x61\x74\x65\x48\x74\x6D\x6C","\x63\x72\x65\x61\x74\x65\x56\x6D\x6C","\x72\x65\x63\x6F\x6E\x66\x69\x67\x75\x72\x65","\x75\x70\x64\x61\x74\x65\x42\x6F\x75\x6E\x64\x73\x46\x72\x6F\x6D\x50\x6F\x69\x6E\x74\x73","\x63\x68\x65\x63\x6B\x42\x6F\x75\x6E\x64\x73","\x72\x65\x64\x72\x61\x77\x48\x74\x6D\x6C\x53\x68\x61\x70\x65","\x72\x65\x64\x72\x61\x77\x53\x68\x61\x70\x65","\x75\x70\x64\x61\x74\x65\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x63\x72\x65\x61\x74\x65\x56\x6D\x6C\x47\x72\x6F\x75\x70","\x63\x72\x65\x61\x74\x65\x43\x61\x6E\x76\x61\x73","\x68\x61\x73\x43\x68\x69\x6C\x64\x4E\x6F\x64\x65\x73","\x6C\x61\x73\x74\x43\x68\x69\x6C\x64","\x62\x65\x66\x6F\x72\x65\x65\x6E\x64","\x69\x6E\x73\x65\x72\x74\x41\x64\x6A\x61\x63\x65\x6E\x74\x48\x54\x4D\x4C","\x61\x64\x64\x54\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x46\x69\x6C\x74\x65\x72","\x64\x65\x73\x74\x72\x6F\x79\x43\x61\x6E\x76\x61\x73","\x75\x70\x64\x61\x74\x65\x56\x6D\x6C\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6D\x78\x52\x65\x66\x43\x6F\x75\x6E\x74","\x6F\x6C\x64\x47\x72\x61\x64\x69\x65\x6E\x74\x73","\x72\x65\x6C\x65\x61\x73\x65\x53\x76\x67\x47\x72\x61\x64\x69\x65\x6E\x74\x73","\x69\x73\x50\x61\x69\x6E\x74\x42\x6F\x75\x6E\x64\x73\x49\x6E\x76\x65\x72\x74\x65\x64","\x75\x70\x64\x61\x74\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x63\x6F\x6E\x66\x69\x67\x75\x72\x65\x43\x61\x6E\x76\x61\x73","\x70\x61\x69\x6E\x74\x53\x74\x65\x6E\x63\x69\x6C\x53\x68\x61\x70\x65","\x70\x61\x69\x6E\x74\x45\x64\x67\x65\x53\x68\x61\x70\x65","\x70\x61\x69\x6E\x74\x56\x65\x72\x74\x65\x78\x53\x68\x61\x70\x65","\x69\x73\x53\x68\x61\x64\x6F\x77","\x67\x65\x74\x47\x72\x61\x64\x69\x65\x6E\x74\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x68\x61\x70\x65\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x61\x64\x64\x54\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x63\x74\x61\x6E\x67\x6C\x65","\x73\x65\x74\x54\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x70\x61\x69\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x70\x61\x69\x6E\x74\x46\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x67\x65\x74\x41\x72\x63\x53\x69\x7A\x65","\x70\x61\x69\x6E\x74\x47\x6C\x61\x73\x73\x45\x66\x66\x65\x63\x74","\x23\x66\x66\x66\x66\x66\x66","\x69\x73\x52\x6F\x75\x6E\x64\x65\x64","\x73\x74\x65\x6E\x63\x69\x6C\x46\x6C\x69\x70\x48","\x73\x74\x65\x6E\x63\x69\x6C\x46\x6C\x69\x70\x56","\x73\x65\x74\x43\x75\x72\x73\x6F\x72","\x67\x65\x74\x43\x75\x72\x73\x6F\x72","\x63\x72\x65\x61\x74\x65\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x61\x75\x67\x6D\x65\x6E\x74\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x67\x65\x74\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x67\x65\x74\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x67\x65\x74\x54\x65\x78\x74\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x76\x65\x72\x74\x69\x63\x61\x6C\x54\x65\x78\x74\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28\x27","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66\x27\x29","\x73\x74\x65\x6E\x63\x69\x6C\x73","\x6D\x61\x72\x6B\x65\x72\x73","\x41\x52\x52\x4F\x57\x5F\x43\x4C\x41\x53\x53\x49\x43","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44","\x61\x64\x64\x4D\x61\x72\x6B\x65\x72","\x72\x65\x64\x72\x61\x77\x50\x61\x74\x68","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x46\x69\x6C\x74\x65\x72\x73","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x43\x6F\x6C\x6F\x72\x73","\x62\x6F\x72\x64\x65\x72\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x73\x6F\x6C\x69\x64","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x64\x72\x6F\x70\x53\x68\x61\x64\x6F\x77\x20\x28\x4F\x66\x66\x58\x3D\x27","\x27\x2C\x20\x4F\x66\x66\x59\x3D\x27","\x27\x2C\x20\x43\x6F\x6C\x6F\x72\x3D\x27","\x27\x29","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x67\x72\x61\x64\x69\x65\x6E\x74\x28\x73\x74\x61\x72\x74\x43\x6F\x6C\x6F\x72\x53\x74\x72\x3D\x27","\x27\x2C\x20\x65\x6E\x64\x43\x6F\x6C\x6F\x72\x53\x74\x72\x3D\x27","\x27\x2C\x20\x67\x72\x61\x64\x69\x65\x6E\x74\x54\x79\x70\x65\x3D\x27","\x70\x61\x69\x6E\x74\x4C\x69\x6E\x65","\x61\x72\x72\x6F\x77\x57\x69\x64\x74\x68","\x41\x52\x52\x4F\x57\x5F\x57\x49\x44\x54\x48","\x41\x52\x52\x4F\x57\x5F\x53\x50\x41\x43\x49\x4E\x47","\x41\x52\x52\x4F\x57\x5F\x53\x49\x5A\x45","\x44\x45\x46\x41\x55\x4C\x54\x5F\x46\x4F\x4E\x54\x53\x54\x59\x4C\x45","\x63\x6C\x69\x70\x70\x65\x64","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x54\x6F\x70","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x4C\x65\x66\x74","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x52\x69\x67\x68\x74","\x72\x65\x70\x6C\x61\x63\x65\x4C\x69\x6E\x65\x66\x65\x65\x64\x73","\x69\x67\x6E\x6F\x72\x65\x43\x6C\x69\x70\x70\x65\x64\x53\x74\x72\x69\x6E\x67\x53\x69\x7A\x65","\x69\x67\x6E\x6F\x72\x65\x53\x74\x72\x69\x6E\x67\x53\x69\x7A\x65","\x74\x65\x78\x74\x44\x69\x76","\x75\x70\x64\x61\x74\x65\x53\x69\x7A\x65","\x6D\x61\x72\x67\x69\x6E","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x54\x52\x49\x43\x54\x48\x54\x4D\x4C","\x75\x70\x64\x61\x74\x65\x56\x61\x6C\x75\x65","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x46\x69\x6C\x74\x65\x72","\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x4F\x72\x69\x67\x69\x6E","\x25\x20","\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x25\x2C","\x25\x29\x73\x63\x61\x6C\x65\x28","\x29\x20\x72\x6F\x74\x61\x74\x65\x28","\x64\x65\x67\x29","\x30\x25\x20\x30\x25","\x25\x29","\x31\x70\x78\x20\x73\x6F\x6C\x69\x64\x20","\x3C\x64\x69\x76\x20\x73\x74\x79\x6C\x65\x3D\x22\x7A\x6F\x6F\x6D\x3A\x31\x3B","\x64\x69\x73\x70\x6C\x61\x79\x3A\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B\x3B\x5F\x64\x69\x73\x70\x6C\x61\x79\x3A\x69\x6E\x6C\x69\x6E\x65\x3B\x70\x61\x64\x64\x69\x6E\x67\x2D\x62\x6F\x74\x74\x6F\x6D\x3A\x31\x70\x78\x3B\x70\x61\x64\x64\x69\x6E\x67\x2D\x72\x69\x67\x68\x74\x3A\x31\x70\x78\x3B\x6C\x69\x6E\x65\x2D\x68\x65\x69\x67\x68\x74\x3A","\x75\x70\x64\x61\x74\x65\x4D\x61\x72\x67\x69\x6E","\x67\x65\x74\x53\x70\x61\x63\x69\x6E\x67","\x70\x72\x65\x73\x65\x72\x76\x65\x49\x6D\x61\x67\x65\x41\x73\x70\x65\x63\x74","\x69\x6D\x61\x67\x65\x46\x6C\x69\x70\x48","\x69\x6D\x61\x67\x65\x46\x6C\x69\x70\x56","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x42\x61\x73\x69\x63\x49\x6D\x61\x67\x65\x28\x72\x6F\x74\x61\x74\x69\x6F\x6E\x3D\x32\x29","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x42\x61\x73\x69\x63\x49\x6D\x61\x67\x65\x28\x6D\x69\x72\x72\x6F\x72\x3D\x31\x29","\x70\x72\x6F\x67\x69\x64\x3A\x44\x58\x49\x6D\x61\x67\x65\x54\x72\x61\x6E\x73\x66\x6F\x72\x6D\x2E\x4D\x69\x63\x72\x6F\x73\x6F\x66\x74\x2E\x42\x61\x73\x69\x63\x49\x6D\x61\x67\x65\x28\x72\x6F\x74\x61\x74\x69\x6F\x6E\x3D\x32\x2C\x20\x6D\x69\x72\x72\x6F\x72\x3D\x31\x29","\x69\x6D\x61\x67\x65\x53\x69\x7A\x65","\x44\x45\x46\x41\x55\x4C\x54\x5F\x49\x4D\x41\x47\x45\x53\x49\x5A\x45","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x69\x7A\x65","\x69\x6E\x64\x69\x63\x61\x74\x6F\x72","\x70\x61\x69\x6E\x74\x49\x6D\x61\x67\x65","\x70\x61\x69\x6E\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72","\x67\x65\x74\x49\x6D\x61\x67\x65\x42\x6F\x75\x6E\x64\x73","\x41\x4C\x49\x47\x4E\x5F\x54\x4F\x50","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x42\x6F\x75\x6E\x64\x73","\x63\x72\x65\x61\x74\x65\x4D\x61\x72\x6B\x65\x72","\x53\x54\x59\x4C\x45\x5F\x43\x55\x52\x56\x45\x44","\x70\x61\x69\x6E\x74\x43\x75\x72\x76\x65\x64\x4C\x69\x6E\x65","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x53\x49\x5A\x45","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x53\x49\x5A\x45","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x41\x52\x52\x4F\x57","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x41\x52\x52\x4F\x57","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x46\x49\x4C\x4C","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x46\x49\x4C\x4C","\x70\x61\x69\x6E\x74\x52\x6F\x75\x6E\x64\x65\x64\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x70\x61\x69\x6E\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x70\x61\x69\x6E\x74\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x75\x73\x65\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78","\x6D\x6F\x76\x65\x43\x65\x6C\x6C","\x67\x65\x74\x47\x72\x61\x70\x68","\x67\x65\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x74\x72\x61\x76\x65\x72\x73\x65","\x67\x65\x74\x45\x64\x67\x65\x43\x6F\x75\x6E\x74","\x67\x65\x74\x45\x64\x67\x65\x41\x74","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x67\x65\x74\x56\x69\x73\x69\x62\x6C\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x69\x73\x56\x65\x72\x74\x65\x78\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x56\x65\x72\x74\x65\x78\x49\x67\x6E\x6F\x72\x65\x64","\x69\x73\x43\x65\x6C\x6C\x56\x69\x73\x69\x62\x6C\x65","\x69\x73\x45\x64\x67\x65\x49\x67\x6E\x6F\x72\x65\x64","\x73\x65\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x73\x65\x74\x4F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C\x45\x64\x67\x65","\x67\x65\x74\x50\x61\x72\x65\x6E\x74\x4F\x66\x66\x73\x65\x74","\x69\x73\x41\x6E\x63\x65\x73\x74\x6F\x72","\x67\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x73\x65\x74\x45\x64\x67\x65\x50\x6F\x69\x6E\x74\x73","\x73\x65\x74\x52\x65\x6C\x61\x74\x69\x76\x65","\x73\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x73\x65\x74\x56\x65\x72\x74\x65\x78\x4C\x6F\x63\x61\x74\x69\x6F\x6E","\x67\x65\x74\x56\x65\x72\x74\x65\x78\x42\x6F\x75\x6E\x64\x73","\x61\x72\x72\x61\x6E\x67\x65\x47\x72\x6F\x75\x70\x73","\x67\x65\x74\x43\x68\x69\x6C\x64\x56\x65\x72\x74\x69\x63\x65\x73","\x67\x65\x74\x42\x6F\x75\x6E\x64\x69\x6E\x67\x42\x6F\x78\x46\x72\x6F\x6D\x47\x65\x6F\x6D\x65\x74\x72\x79","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x67\x65\x74\x53\x74\x61\x72\x74\x53\x69\x7A\x65","\x78\x30","\x79\x30","\x6B\x65\x65\x70\x46\x69\x72\x73\x74\x4C\x6F\x63\x61\x74\x69\x6F\x6E","\x72\x65\x73\x69\x7A\x65\x50\x61\x72\x65\x6E\x74","\x72\x65\x73\x69\x7A\x65\x4C\x61\x73\x74","\x69\x73\x48\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x67\x65\x74\x49\x6E\x64\x65\x78","\x67\x65\x74\x50\x61\x72\x65\x6E\x74\x53\x69\x7A\x65","\x69\x73\x4C\x61\x79\x65\x72","\x63\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x72\x65\x73\x69\x7A\x65\x56\x65\x72\x74\x69\x63\x65\x73","\x69\x6E\x76\x65\x72\x74","\x67\x72\x6F\x75\x70\x50\x61\x64\x64\x69\x6E\x67","\x70\x61\x72\x65\x6E\x74\x73\x43\x68\x61\x6E\x67\x65\x64","\x6D\x6F\x76\x65\x54\x72\x65\x65","\x6C\x65\x76\x65\x6C\x44\x69\x73\x74\x61\x6E\x63\x65","\x6E\x6F\x64\x65\x44\x69\x73\x74\x61\x6E\x63\x65","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73","\x70\x72\x65\x66\x48\x6F\x7A\x45\x64\x67\x65\x53\x65\x70","\x70\x72\x65\x66\x56\x65\x72\x74\x45\x64\x67\x65\x4F\x66\x66","\x6D\x69\x6E\x45\x64\x67\x65\x4A\x65\x74\x74\x79","\x63\x68\x61\x6E\x6E\x65\x6C\x42\x75\x66\x66\x65\x72","\x65\x64\x67\x65\x52\x6F\x75\x74\x69\x6E\x67","\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73","\x66\x69\x6E\x64\x54\x72\x65\x65\x52\x6F\x6F\x74\x73","\x64\x66\x73","\x6C\x61\x79\x6F\x75\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x4C\x61\x79\x6F\x75\x74","\x76\x65\x72\x74\x69\x63\x61\x6C\x4C\x61\x79\x6F\x75\x74","\x6D\x6F\x76\x65\x4E\x6F\x64\x65","\x61\x64\x6A\x75\x73\x74\x50\x61\x72\x65\x6E\x74\x73","\x6C\x6F\x63\x61\x6C\x45\x64\x67\x65\x50\x72\x6F\x63\x65\x73\x73\x69\x6E\x67","\x6E\x65\x78\x74","\x63\x72\x65\x61\x74\x65\x4E\x6F\x64\x65","\x61\x74\x74\x61\x63\x68\x50\x61\x72\x65\x6E\x74","\x6C\x61\x79\x6F\x75\x74\x4C\x65\x61\x66","\x6F\x66\x66\x73\x65\x74\x58","\x6F\x66\x66\x73\x65\x74\x59","\x75\x70\x70\x65\x72\x48\x65\x61\x64","\x63\x6F\x6E\x74\x6F\x75\x72","\x63\x72\x65\x61\x74\x65\x4C\x69\x6E\x65","\x6C\x6F\x77\x65\x72\x48\x65\x61\x64","\x75\x70\x70\x65\x72\x54\x61\x69\x6C","\x6C\x6F\x77\x65\x72\x54\x61\x69\x6C","\x6D\x65\x72\x67\x65","\x62\x72\x69\x64\x67\x65","\x73\x6F\x72\x74\x43\x65\x6C\x6C\x73","\x70\x72\x6F\x63\x65\x73\x73\x4E\x6F\x64\x65\x4F\x75\x74\x67\x6F\x69\x6E\x67","\x67\x65\x74\x45\x64\x67\x65\x73\x42\x65\x74\x77\x65\x65\x6E","\x77\x65\x69\x67\x68\x74\x65\x64\x56\x61\x6C\x75\x65","\x6E\x75\x64\x67\x65","\x76\x69\x73\x69\x74\x65\x64","\x72\x61\x6E\x6B\x49\x6E\x64\x65\x78","\x75\x73\x65\x49\x6E\x70\x75\x74\x4F\x72\x69\x67\x69\x6E","\x64\x69\x73\x61\x62\x6C\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x66\x6F\x72\x63\x65\x43\x6F\x6E\x73\x74\x61\x6E\x74","\x66\x6F\x72\x63\x65\x43\x6F\x6E\x73\x74\x61\x6E\x74\x53\x71\x75\x61\x72\x65\x64","\x6D\x69\x6E\x44\x69\x73\x74\x61\x6E\x63\x65\x4C\x69\x6D\x69\x74","\x6D\x61\x78\x44\x69\x73\x74\x61\x6E\x63\x65\x4C\x69\x6D\x69\x74","\x6D\x69\x6E\x44\x69\x73\x74\x61\x6E\x63\x65\x4C\x69\x6D\x69\x74\x53\x71\x75\x61\x72\x65\x64","\x69\x6E\x69\x74\x69\x61\x6C\x54\x65\x6D\x70","\x74\x65\x6D\x70\x65\x72\x61\x74\x75\x72\x65","\x6D\x61\x78\x49\x74\x65\x72\x61\x74\x69\x6F\x6E\x73","\x69\x74\x65\x72\x61\x74\x69\x6F\x6E","\x61\x6C\x6C\x6F\x77\x65\x64\x54\x6F\x52\x75\x6E","\x76\x65\x72\x74\x65\x78\x41\x72\x72\x61\x79","\x67\x65\x74\x42\x6F\x75\x6E\x64\x73","\x69\x6E\x64\x69\x63\x65\x73","\x64\x69\x73\x70\x58","\x64\x69\x73\x70\x59","\x63\x65\x6C\x6C\x4C\x6F\x63\x61\x74\x69\x6F\x6E","\x69\x73\x4D\x6F\x76\x65\x61\x62\x6C\x65","\x6E\x65\x69\x67\x68\x62\x6F\x75\x72\x73","\x72\x61\x64\x69\x75\x73","\x72\x61\x64\x69\x75\x73\x53\x71\x75\x61\x72\x65\x64","\x67\x65\x74\x4F\x70\x70\x6F\x73\x69\x74\x65\x73","\x72\x65\x73\x65\x74\x45\x64\x67\x65","\x63\x61\x6C\x63\x52\x65\x70\x75\x6C\x73\x69\x6F\x6E","\x63\x61\x6C\x63\x41\x74\x74\x72\x61\x63\x74\x69\x6F\x6E","\x63\x61\x6C\x63\x50\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x72\x65\x64\x75\x63\x65\x54\x65\x6D\x70\x65\x72\x61\x74\x75\x72\x65","\x72\x61\x6E\x64\x6F\x6D","\x6D\x6F\x76\x65\x43\x69\x72\x63\x6C\x65","\x67\x65\x74\x52\x61\x64\x69\x75\x73","\x63\x69\x72\x63\x6C\x65","\x66\x69\x6E\x64\x50\x61\x72\x61\x6C\x6C\x65\x6C\x73","\x67\x65\x74\x45\x64\x67\x65\x49\x64","\x72\x6F\x75\x74\x65","\x6C\x61\x79\x6F\x75\x74\x73","\x6D\x61\x73\x74\x65\x72","\x70\x6C\x61\x63\x65\x4C\x61\x62\x65\x6C\x73","\x61\x76\x6F\x69\x64","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x73","\x74\x65\x6D\x70","\x6D\x61\x78\x52\x61\x6E\x6B","\x6D\x69\x6E\x52\x61\x6E\x6B","\x6E\x65\x78\x74\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x65\x6C\x6C\x73","\x70\x72\x65\x76\x69\x6F\x75\x73\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x4E\x65\x78\x74\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x50\x72\x65\x76\x69\x6F\x75\x73\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x47\x65\x6E\x65\x72\x61\x6C\x50\x75\x72\x70\x6F\x73\x65\x56\x61\x72\x69\x61\x62\x6C\x65","\x73\x65\x74\x47\x65\x6E\x65\x72\x61\x6C\x50\x75\x72\x70\x6F\x73\x65\x56\x61\x72\x69\x61\x62\x6C\x65","\x73\x65\x74\x58","\x73\x65\x74\x59","\x63\x6F\x6E\x6E\x65\x63\x74\x73\x41\x73\x54\x61\x72\x67\x65\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x73\x41\x73\x53\x6F\x75\x72\x63\x65","\x68\x61\x73\x68\x43\x6F\x64\x65","\x67\x65\x74\x52\x61\x6E\x6B\x56\x61\x6C\x75\x65","\x67\x65\x74\x43\x6F\x72\x65\x43\x65\x6C\x6C","\x65\x64\x67\x65\x73","\x69\x73\x52\x65\x76\x65\x72\x73\x65\x64","\x74\x69\x67\x68\x74\x65\x6E\x54\x6F\x53\x6F\x75\x72\x63\x65","\x72\x6F\x6F\x74\x73","\x76\x65\x72\x74\x65\x78\x4D\x61\x70\x70\x65\x72","\x65\x64\x67\x65\x4D\x61\x70\x70\x65\x72","\x53\x4F\x55\x52\x43\x45\x53\x43\x41\x4E\x53\x54\x41\x52\x54\x52\x41\x4E\x4B","\x63\x72\x65\x61\x74\x65\x49\x6E\x74\x65\x72\x6E\x61\x6C\x43\x65\x6C\x6C\x73","\x72\x61\x6E\x6B\x73","\x64\x66\x73\x43\x6F\x75\x6E\x74","\x69\x6E\x69\x74\x69\x61\x6C\x52\x61\x6E\x6B","\x73\x6C\x69\x63\x65","\x66\x69\x78\x52\x61\x6E\x6B\x73","\x65\x78\x74\x65\x6E\x64\x65\x64\x44\x66\x73","\x6E\x65\x73\x74\x65\x64\x42\x65\x73\x74\x52\x61\x6E\x6B\x73","\x63\x75\x72\x72\x65\x6E\x74\x42\x65\x73\x74\x43\x72\x6F\x73\x73\x69\x6E\x67\x73","\x69\x74\x65\x72\x61\x74\x69\x6F\x6E\x73\x57\x69\x74\x68\x6F\x75\x74\x49\x6D\x70\x72\x6F\x76\x65\x6D\x65\x6E\x74","\x6D\x61\x78\x4E\x6F\x49\x6D\x70\x72\x6F\x76\x65\x6D\x65\x6E\x74\x49\x74\x65\x72\x61\x74\x69\x6F\x6E\x73","\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x43\x72\x6F\x73\x73\x69\x6E\x67\x73","\x77\x65\x69\x67\x68\x74\x65\x64\x4D\x65\x64\x69\x61\x6E","\x74\x72\x61\x6E\x73\x70\x6F\x73\x65","\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x52\x61\x6E\x6B\x43\x72\x6F\x73\x73\x69\x6E\x67","\x6D\x65\x64\x69\x61\x6E\x52\x61\x6E\x6B","\x6D\x65\x64\x69\x61\x6E\x56\x61\x6C\x75\x65","\x6C\x65\x6E\x74\x68","\x67\x65\x74\x49\x6E\x63\x6F\x6D\x69\x6E\x67\x45\x64\x67\x65\x73","\x69\x6E\x74\x72\x61\x43\x65\x6C\x6C\x53\x70\x61\x63\x69\x6E\x67","\x69\x6E\x74\x65\x72\x52\x61\x6E\x6B\x43\x65\x6C\x6C\x53\x70\x61\x63\x69\x6E\x67","\x6F\x72\x69\x65\x6E\x74\x61\x74\x69\x6F\x6E","\x69\x6E\x69\x74\x69\x61\x6C\x58","\x70\x61\x72\x61\x6C\x6C\x65\x6C\x45\x64\x67\x65\x53\x70\x61\x63\x69\x6E\x67","\x6A\x65\x74\x74\x79\x50\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x6C\x69\x6D\x69\x74\x58","\x63\x75\x72\x72\x65\x6E\x74\x58\x44\x65\x6C\x74\x61","\x77\x69\x64\x65\x73\x74\x52\x61\x6E\x6B","\x72\x61\x6E\x6B\x54\x6F\x70\x59","\x72\x61\x6E\x6B\x42\x6F\x74\x74\x6F\x6D\x59","\x77\x69\x64\x65\x73\x74\x52\x61\x6E\x6B\x56\x61\x6C\x75\x65","\x72\x61\x6E\x6B\x57\x69\x64\x74\x68\x73","\x72\x61\x6E\x6B\x59","\x66\x69\x6E\x65\x54\x75\x6E\x69\x6E\x67","\x50\x4F\x4C\x59\x4C\x49\x4E\x45","\x6E\x65\x78\x74\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x61\x63\x68\x65","\x70\x72\x65\x76\x69\x6F\x75\x73\x4C\x61\x79\x65\x72\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x43\x61\x63\x68\x65","\x70\x72\x69\x6E\x74\x53\x74\x61\x74\x75\x73","\x3D\x3D\x3D\x3D\x3D\x3D\x43\x6F\x6F\x72\x64\x20\x61\x73\x73\x69\x67\x6E\x6D\x65\x6E\x74\x20\x64\x65\x62\x75\x67\x3D\x3D\x3D\x3D\x3D\x3D\x3D","\x52\x61\x6E\x6B\x20","\x20\x3A\x20","\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D","\x69\x6E\x69\x74\x69\x61\x6C\x43\x6F\x6F\x72\x64\x73","\x6D\x69\x6E\x4E\x6F\x64\x65","\x6D\x65\x64\x69\x61\x6E\x50\x6F\x73","\x6D\x69\x6E\x50\x61\x74\x68","\x73\x65\x74\x43\x65\x6C\x6C\x4C\x6F\x63\x61\x74\x69\x6F\x6E\x73","\x6D\x65\x64\x69\x61\x6E\x58\x56\x61\x6C\x75\x65","\x72\x61\x6E\x6B\x4D\x65\x64\x69\x61\x6E\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x64\x57\x65\x69\x67\x68\x74\x65\x64\x56\x61\x6C\x75\x65","\x63\x61\x6C\x63\x75\x6C\x61\x74\x65\x57\x69\x64\x65\x73\x74\x52\x61\x6E\x6B","\x72\x61\x6E\x6B\x43\x6F\x6F\x72\x64\x69\x6E\x61\x74\x65\x73","\x65\x64\x67\x65\x2E\x65\x64\x67\x65\x73\x20\x69\x73\x20\x6E\x75\x6C\x6C","\x41\x74\x20\x6C\x65\x61\x73\x74\x20\x6F\x6E\x65\x20\x63\x65\x6C\x6C\x20\x68\x61\x73\x20\x6E\x6F\x20\x62\x6F\x75\x6E\x64\x73","\x72\x65\x70\x6F\x73\x69\x74\x69\x6F\x6E\x56\x61\x6C\x69\x64","\x4D\x41\x58\x5F\x56\x41\x4C\x55\x45","\x4F\x52\x54\x48\x4F\x47\x4F\x4E\x41\x4C","\x43\x55\x52\x56\x45","\x73\x65\x74\x45\x64\x67\x65\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x69\x73\x50\x6F\x72\x74","\x70\x72\x6F\x63\x65\x73\x73\x52\x65\x76\x65\x72\x73\x65\x64\x45\x64\x67\x65","\x64\x65\x74\x65\x72\x6D\x69\x6E\x69\x73\x74\x69\x63","\x6D\x6F\x76\x65\x50\x61\x72\x65\x6E\x74","\x70\x61\x72\x65\x6E\x74\x42\x6F\x72\x64\x65\x72","\x69\x6E\x74\x65\x72\x48\x69\x65\x72\x61\x72\x63\x68\x79\x53\x70\x61\x63\x69\x6E\x67","\x74\x72\x61\x76\x65\x72\x73\x65\x41\x6E\x63\x65\x73\x74\x6F\x72\x73","\x65\x64\x67\x65\x73\x43\x61\x63\x68\x65","\x72\x75\x6E","\x75\x70\x64\x61\x74\x65\x47\x72\x6F\x75\x70\x42\x6F\x75\x6E\x64\x73","\x66\x69\x6E\x64\x52\x6F\x6F\x74\x73","\x63\x6F\x6E\x63\x61\x74","\x69\x73\x56\x61\x6C\x69\x64\x41\x6E\x63\x65\x73\x74\x6F\x72","\x66\x69\x6C\x74\x65\x72\x44\x65\x73\x63\x65\x6E\x64\x61\x6E\x74\x73","\x63\x79\x63\x6C\x65\x53\x74\x61\x67\x65","\x6C\x61\x79\x65\x72\x69\x6E\x67\x53\x74\x61\x67\x65","\x63\x72\x6F\x73\x73\x69\x6E\x67\x53\x74\x61\x67\x65","\x70\x6C\x61\x63\x65\x6D\x65\x6E\x74\x53\x74\x61\x67\x65","\x63\x75\x72\x72\x65\x6E\x74\x45\x64\x69\x74","\x73\x65\x74\x52\x6F\x6F\x74","\x6D\x61\x69\x6E\x74\x61\x69\x6E\x45\x64\x67\x65\x50\x61\x72\x65\x6E\x74","\x63\x72\x65\x61\x74\x65\x49\x64\x73","\x70\x6F\x73\x74\x66\x69\x78","\x6E\x65\x78\x74\x49\x64","\x75\x70\x64\x61\x74\x65\x4C\x65\x76\x65\x6C","\x65\x6E\x64\x69\x6E\x67\x55\x70\x64\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x52\x6F\x6F\x74","\x69\x73\x43\x72\x65\x61\x74\x65\x49\x64\x73","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x49\x64\x73","\x69\x6E\x73\x65\x72\x74","\x66\x69\x6C\x74\x65\x72\x43\x65\x6C\x6C\x73","\x67\x65\x74\x44\x65\x73\x63\x65\x6E\x64\x61\x6E\x74\x73","\x72\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65\x64","\x63\x65\x6C\x6C\x41\x64\x64\x65\x64","\x69\x73\x52\x6F\x6F\x74","\x75\x70\x64\x61\x74\x65\x45\x64\x67\x65\x50\x61\x72\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65\x49\x64","\x73\x65\x74\x49\x64","\x69\x73\x4E\x75\x6D\x65\x72\x69\x63","\x75\x70\x64\x61\x74\x65\x45\x64\x67\x65\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x4E\x65\x61\x72\x65\x73\x74\x43\x6F\x6D\x6D\x6F\x6E\x41\x6E\x63\x65\x73\x74\x6F\x72","\x67\x65\x74\x4F\x72\x69\x67\x69\x6E","\x50\x41\x54\x48\x5F\x53\x45\x50\x41\x52\x41\x54\x4F\x52","\x67\x65\x74\x50\x61\x72\x65\x6E\x74\x50\x61\x74\x68","\x70\x61\x72\x65\x6E\x74\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x67\x65\x74\x43\x68\x69\x6C\x64\x72\x65\x6E","\x63\x68\x69\x6C\x64\x72\x65\x6E","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x43\x68\x69\x6C\x64\x45\x64\x67\x65\x73","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x73","\x74\x65\x72\x6D\x69\x6E\x61\x6C\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x69\x6E\x73\x65\x72\x74\x45\x64\x67\x65","\x72\x65\x6D\x6F\x76\x65\x45\x64\x67\x65","\x67\x65\x74\x44\x69\x72\x65\x63\x74\x65\x64\x45\x64\x67\x65\x43\x6F\x75\x6E\x74","\x67\x65\x74\x4F\x75\x74\x67\x6F\x69\x6E\x67\x45\x64\x67\x65\x73","\x67\x65\x74\x54\x6F\x70\x6D\x6F\x73\x74\x43\x65\x6C\x6C\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x56\x61\x6C\x75\x65","\x76\x61\x6C\x75\x65\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x76\x61\x6C\x75\x65\x43\x68\x61\x6E\x67\x65\x64","\x67\x65\x6F\x6D\x65\x74\x72\x79\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x73\x74\x79\x6C\x65\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x69\x73\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x73\x65\x74\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x53\x74\x61\x74\x65\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x76\x69\x73\x69\x62\x6C\x65\x53\x74\x61\x74\x65\x46\x6F\x72\x43\x65\x6C\x6C\x43\x68\x61\x6E\x67\x65\x64","\x6D\x65\x72\x67\x65\x43\x68\x69\x6C\x64\x72\x65\x6E","\x6D\x65\x72\x67\x65\x43\x68\x69\x6C\x64\x72\x65\x6E\x49\x6D\x70\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74\x73","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C\x49\x6D\x70\x6C","\x72\x65\x73\x74\x6F\x72\x65\x43\x6C\x6F\x6E\x65","\x63\x65\x6C\x6C\x43\x6C\x6F\x6E\x65\x64","\x70\x72\x65\x76\x69\x6F\x75\x73\x49\x6E\x64\x65\x78","\x69\x6E\x64\x65\x78","\x74\x65\x72\x6D\x69\x6E\x61\x6C","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x61\x74\x74\x72\x69\x62\x75\x74\x65","\x6F\x6E\x49\x6E\x69\x74","\x76\x65\x72\x74\x65\x78","\x65\x64\x67\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x6D\x78\x54\x72\x61\x6E\x73\x69\x65\x6E\x74","\x69\x64\x20\x76\x61\x6C\x75\x65\x20\x70\x61\x72\x65\x6E\x74\x20\x73\x6F\x75\x72\x63\x65\x20\x74\x61\x72\x67\x65\x74\x20\x63\x68\x69\x6C\x64\x72\x65\x6E\x20\x65\x64\x67\x65\x73","\x73\x65\x74\x56\x65\x72\x74\x65\x78","\x73\x65\x74\x45\x64\x67\x65","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x50\x61\x72\x65\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x45\x64\x67\x65\x49\x6E\x64\x65\x78","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x63\x6C\x6F\x6E\x65\x56\x61\x6C\x75\x65","\x54\x52\x41\x4E\x53\x4C\x41\x54\x45\x5F\x43\x4F\x4E\x54\x52\x4F\x4C\x5F\x50\x4F\x49\x4E\x54\x53","\x61\x6C\x74\x65\x72\x6E\x61\x74\x65\x42\x6F\x75\x6E\x64\x73","\x73\x6F\x75\x72\x63\x65\x50\x6F\x69\x6E\x74","\x74\x61\x72\x67\x65\x74\x50\x6F\x69\x6E\x74","\x73\x77\x61\x70","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x74\x61\x6E","\x70\x6F\x77","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E","\x53\x54\x59\x4C\x45\x5F\x44\x49\x52\x45\x43\x54\x49\x4F\x4E","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x50\x72\x69\x6E\x74\x65\x72\x2D\x66\x72\x69\x65\x6E\x64\x6C\x79\x20\x76\x65\x72\x73\x69\x6F\x6E","\x70\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72","\x61\x75\x74\x6F\x4F\x72\x69\x67\x69\x6E","\x70\x72\x69\x6E\x74\x4F\x76\x65\x72\x6C\x61\x79\x73","\x77\x6E\x64","\x70\x61\x67\x65\x43\x6F\x75\x6E\x74","\x67\x65\x74\x57\x69\x6E\x64\x6F\x77","\x67\x65\x74\x44\x6F\x63\x74\x79\x70\x65","\x3C\x6D\x65\x74\x61\x20\x68\x74\x74\x70\x2D\x65\x71\x75\x69\x76\x3D\x22\x58\x2D\x55\x41\x2D\x43\x6F\x6D\x70\x61\x74\x69\x62\x6C\x65\x22\x20\x63\x6F\x6E\x74\x65\x6E\x74\x3D\x22\x49\x45\x3D\x38\x22\x3E","\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\x4F\x76\x65\x72\x6C\x61\x79","\x67\x65\x74\x44\x72\x61\x77\x50\x61\x6E\x65","\x77\x72\x69\x74\x65\x48\x65\x61\x64","\x3C\x62\x6F\x64\x79\x20\x63\x6C\x61\x73\x73\x3D\x22\x6D\x78\x50\x61\x67\x65\x22\x3E","\x63\x72\x65\x61\x74\x65\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x41\x66\x74\x65\x72","\x61\x6C\x77\x61\x79\x73","\x6D\x78\x50\x61\x67\x65\x42\x72\x65\x61\x6B","\x67\x65\x74\x43\x6F\x76\x65\x72\x50\x61\x67\x65\x73","\x67\x65\x74\x41\x70\x70\x65\x6E\x64\x69\x63\x65\x73","\x61\x64\x64\x47\x72\x61\x70\x68\x46\x72\x61\x67\x6D\x65\x6E\x74","\x72\x65\x6E\x64\x65\x72\x50\x61\x67\x65","\x6D\x78\x50\x61\x67\x65\x2D","\x3C\x74\x69\x74\x6C\x65\x3E","\x3C\x2F\x74\x69\x74\x6C\x65\x3E","\x3C\x73\x74\x79\x6C\x65\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x2F\x63\x73\x73\x22\x3E","\x40\x6D\x65\x64\x69\x61\x20\x70\x72\x69\x6E\x74\x20\x7B","\x20\x20\x74\x61\x62\x6C\x65\x2E\x6D\x78\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72\x20\x7B\x20\x64\x69\x73\x70\x6C\x61\x79\x3A\x20\x6E\x6F\x6E\x65\x3B\x20\x7D","\x20\x20\x68\x72\x2E\x6D\x78\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x20\x7B\x20\x64\x69\x73\x70\x6C\x61\x79\x3A\x20\x6E\x6F\x6E\x65\x3B\x20\x7D","\x40\x6D\x65\x64\x69\x61\x20\x73\x63\x72\x65\x65\x6E\x20\x7B","\x20\x20\x74\x61\x62\x6C\x65\x2E\x6D\x78\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72\x20\x7B\x20\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3A\x20\x66\x69\x78\x65\x64\x3B\x20\x72\x69\x67\x68\x74\x3A\x20\x31\x30\x70\x78\x3B\x20\x74\x6F\x70\x3A\x20\x31\x30\x70\x78\x3B\x66\x6F\x6E\x74\x2D\x66\x61\x6D\x69\x6C\x79\x3A\x20\x41\x72\x69\x61\x6C\x3B\x20\x66\x6F\x6E\x74\x2D\x73\x69\x7A\x65\x3A\x31\x30\x70\x74\x3B\x20\x62\x6F\x72\x64\x65\x72\x3A\x20\x73\x6F\x6C\x69\x64\x20\x31\x70\x78\x20\x64\x61\x72\x6B\x67\x72\x61\x79\x3B\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x3A\x20\x77\x68\x69\x74\x65\x3B\x20\x62\x6F\x72\x64\x65\x72\x2D\x63\x6F\x6C\x6C\x61\x70\x73\x65\x3A\x63\x6F\x6C\x6C\x61\x70\x73\x65\x3B\x20\x7D","\x20\x20\x74\x61\x62\x6C\x65\x2E\x6D\x78\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72\x20\x74\x64\x20\x7B\x20\x62\x6F\x72\x64\x65\x72\x3A\x20\x73\x6F\x6C\x69\x64\x20\x31\x70\x78\x20\x67\x72\x61\x79\x3B\x20\x70\x61\x64\x64\x69\x6E\x67\x3A\x34\x70\x78\x3B\x20\x7D","\x20\x20\x62\x6F\x64\x79\x2E\x6D\x78\x50\x61\x67\x65\x20\x7B\x20\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x3A\x20\x67\x72\x61\x79\x3B\x20\x7D","\x3C\x2F\x73\x74\x79\x6C\x65\x3E","\x6D\x78\x50\x61\x67\x65\x53\x65\x6C\x65\x63\x74\x6F\x72","\x61","\x23\x6D\x78\x50\x61\x67\x65\x2D","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x49\x6E\x73\x69\x64\x65","\x67\x65\x74\x43\x61\x6E\x76\x61\x73","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x6E\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x6E\x65","\x73\x74\x79\x6C\x65\x73","\x63\x72\x65\x61\x74\x65\x44\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78\x53\x74\x79\x6C\x65","\x70\x75\x74\x44\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78\x53\x74\x79\x6C\x65","\x63\x72\x65\x61\x74\x65\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x70\x75\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x53\x48\x41\x50\x45","\x53\x48\x41\x50\x45\x5F\x52\x45\x43\x54\x41\x4E\x47\x4C\x45","\x53\x54\x59\x4C\x45\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52","\x52\x65\x63\x74\x61\x6E\x67\x6C\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x41\x4C\x49\x47\x4E","\x53\x54\x59\x4C\x45\x5F\x41\x4C\x49\x47\x4E","\x53\x54\x59\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x43\x33\x44\x39\x46\x46","\x53\x54\x59\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x23\x36\x34\x38\x32\x42\x39","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x43\x4F\x4C\x4F\x52","\x23\x37\x37\x34\x34\x30\x30","\x53\x48\x41\x50\x45\x5F\x43\x4F\x4E\x4E\x45\x43\x54\x4F\x52","\x23\x34\x34\x36\x32\x39\x39","\x64\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78","\x70\x75\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x64\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78\x53\x74\x79\x6C\x65","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6F\x72\x69\x67\x69\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65\x4F\x66\x66\x73\x65\x74","\x69\x6E\x76\x61\x6C\x69\x64","\x69\x6E\x76\x61\x6C\x69\x64\x4F\x72\x64\x65\x72","\x6F\x72\x64\x65\x72\x43\x68\x61\x6E\x67\x65\x64","\x76\x69\x73\x69\x62\x6C\x65\x53\x6F\x75\x72\x63\x65\x53\x74\x61\x74\x65","\x76\x69\x73\x69\x62\x6C\x65\x54\x61\x72\x67\x65\x74\x53\x74\x61\x74\x65","\x74\x65\x72\x6D\x69\x6E\x61\x6C\x44\x69\x73\x74\x61\x6E\x63\x65","\x73\x65\x67\x6D\x65\x6E\x74\x73","\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x42\x6F\x75\x6E\x64\x73","\x73\x65\x74\x41\x62\x73\x6F\x6C\x75\x74\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x74\x56\x69\x73\x69\x62\x6C\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C\x53\x74\x61\x74\x65","\x73\x65\x74\x56\x69\x73\x69\x62\x6C\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C\x53\x74\x61\x74\x65","\x64\x6F\x6E\x65\x52\x65\x73\x6F\x75\x72\x63\x65","\x75\x70\x64\x61\x74\x69\x6E\x67\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x52\x65\x73\x6F\x75\x72\x63\x65","\x75\x70\x64\x61\x74\x69\x6E\x67\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x69\x6E\x67\x6C\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x69\x73\x53\x69\x6E\x67\x6C\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x65\x74\x53\x69\x6E\x67\x6C\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64","\x63\x68\x61\x6E\x67\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x65\x74\x43\x65\x6C\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x73","\x67\x65\x74\x46\x69\x72\x73\x74\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65","\x61\x64\x64\x43\x65\x6C\x6C","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x61\x64\x64\x65\x64","\x72\x65\x6D\x6F\x76\x65\x64","\x6D\x78\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x68\x61\x6E\x67\x65\x2E\x65\x78\x65\x63\x75\x74\x65","\x65\x6E\x74\x65\x72","\x6C\x65\x61\x76\x65","\x65\x64\x69\x74\x69\x6E\x67\x43\x65\x6C\x6C","\x74\x72\x69\x67\x67\x65\x72","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x61\x75\x74\x6F\x53\x69\x7A\x65","\x65\x6D\x70\x74\x79\x4C\x61\x62\x65\x6C\x54\x65\x78\x74","\x74\x65\x78\x74\x4E\x6F\x64\x65","\x6D\x78\x43\x65\x6C\x6C\x45\x64\x69\x74\x6F\x72","\x63\x6F\x6C\x73","\x32\x30","\x34","\x62\x6C\x75\x72","\x66\x6F\x63\x75\x73\x4C\x6F\x73\x74","\x6B\x65\x79\x64\x6F\x77\x6E","\x6B\x65\x79\x43\x6F\x64\x65","\x69\x73\x45\x6E\x74\x65\x72\x53\x74\x6F\x70\x73\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x73\x74\x6F\x70\x45\x64\x69\x74\x69\x6E\x67","\x63\x6C\x65\x61\x72\x4F\x6E\x43\x68\x61\x6E\x67\x65","\x73\x65\x74\x4D\x6F\x64\x69\x66\x69\x65\x64","\x6B\x65\x79\x70\x72\x65\x73\x73","\x69\x73\x4C\x61\x62\x65\x6C\x43\x6C\x69\x70\x70\x65\x64","\x69\x73\x57\x72\x61\x70\x70\x69\x6E\x67","\x41\x4C\x49\x47\x4E\x5F\x4C\x45\x46\x54","\x69\x73\x4D\x6F\x64\x69\x66\x69\x65\x64","\x69\x73\x49\x6E\x76\x6F\x6B\x65\x73\x53\x74\x6F\x70\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x69\x73\x48\x69\x64\x65\x4C\x61\x62\x65\x6C","\x6F\x75\x74\x6C\x69\x6E\x65","\x67\x65\x74\x45\x64\x69\x74\x6F\x72\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x49\x6E\x69\x74\x69\x61\x6C\x56\x61\x6C\x75\x65","\x67\x65\x74\x45\x6D\x70\x74\x79\x4C\x61\x62\x65\x6C\x54\x65\x78\x74","\x63\x72\x65\x61\x74\x65\x54\x65\x78\x74\x44\x69\x76","\x67\x65\x74\x43\x75\x72\x72\x65\x6E\x74\x56\x61\x6C\x75\x65","\x67\x65\x74\x45\x64\x69\x74\x69\x6E\x67\x56\x61\x6C\x75\x65","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47\x5F\x54\x4F\x50","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47\x5F\x52\x49\x47\x48\x54","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47\x5F\x42\x4F\x54\x54\x4F\x4D","\x53\x54\x59\x4C\x45\x5F\x53\x50\x41\x43\x49\x4E\x47\x5F\x4C\x45\x46\x54","\x67\x65\x74\x45\x64\x69\x74\x69\x6E\x67\x43\x65\x6C\x6C","\x64\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x68\x61\x70\x65","\x64\x65\x66\x61\x75\x6C\x74\x56\x65\x72\x74\x65\x78\x53\x68\x61\x70\x65","\x64\x65\x66\x61\x75\x6C\x74\x54\x65\x78\x74\x53\x68\x61\x70\x65","\x6C\x65\x67\x61\x63\x79\x43\x6F\x6E\x74\x72\x6F\x6C\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x64\x65\x66\x61\x75\x6C\x74\x53\x68\x61\x70\x65\x73","\x72\x65\x67\x69\x73\x74\x65\x72\x53\x68\x61\x70\x65","\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65","\x63\x72\x65\x61\x74\x65\x53\x68\x61\x70\x65","\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\x53\x68\x61\x70\x65","\x6F\x72\x64\x65\x72\x65\x64","\x6B\x65\x65\x70\x45\x64\x67\x65\x73\x49\x6E\x46\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x66\x69\x72\x73\x74\x45\x64\x67\x65","\x69\x6E\x73\x65\x72\x74\x53\x74\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x69\x6E\x73\x74\x61\x6C\x6C\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x67\x65\x74\x50\x72\x65\x76\x69\x6F\x75\x73\x53\x74\x61\x74\x65\x49\x6E\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x66\x69\x6E\x64\x50\x72\x65\x76\x69\x6F\x75\x73\x53\x74\x61\x74\x65\x49\x6E\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x72\x64\x65\x72","\x6F\x72\x64\x65\x72\x45\x64\x67\x65","\x6B\x65\x65\x70\x45\x64\x67\x65\x73\x49\x6E\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x67\x65\x74\x53\x68\x61\x70\x65\x43\x6F\x6E\x73\x74\x72\x75\x63\x74\x6F\x72","\x63\x6F\x6E\x66\x69\x67\x75\x72\x65\x53\x68\x61\x70\x65","\x67\x65\x74\x53\x68\x61\x70\x65","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x53\x68\x61\x70\x65","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x43\x6F\x6C\x6F\x72","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x47\x72\x61\x64\x69\x65\x6E\x74\x43\x6F\x6C\x6F\x72","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x44\x49\x52\x45\x43\x54\x49\x4F\x4E","\x67\x65\x74\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x49\x6D\x61\x67\x65","\x70\x6F\x73\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x65\x53\x68\x61\x70\x65","\x72\x65\x73\x6F\x6C\x76\x65\x43\x6F\x6C\x6F\x72","\x67\x65\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x49\x6E\x64\x69\x63\x61\x74\x6F\x72\x43\x6F\x6C\x6F\x72\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x69\x6E\x64\x69\x63\x61\x74\x65\x64","\x67\x65\x74\x4C\x61\x62\x65\x6C\x56\x61\x6C\x75\x65","\x67\x65\x74\x4C\x61\x62\x65\x6C","\x63\x72\x65\x61\x74\x65\x4C\x61\x62\x65\x6C","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x69\x73\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C","\x67\x65\x74\x56\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x54\x59\x4C\x45","\x53\x54\x59\x4C\x45\x5F\x48\x4F\x52\x49\x5A\x4F\x4E\x54\x41\x4C","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x42\x41\x43\x4B\x47\x52\x4F\x55\x4E\x44\x43\x4F\x4C\x4F\x52","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x42\x4F\x52\x44\x45\x52\x43\x4F\x4C\x4F\x52","\x53\x54\x59\x4C\x45\x5F\x4F\x56\x45\x52\x46\x4C\x4F\x57","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x41\x44\x44\x49\x4E\x47","\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65\x4C\x61\x62\x65\x6C","\x63\x6F\x6E\x76\x65\x72\x74\x50\x6F\x69\x6E\x74","\x69\x73\x4C\x61\x62\x65\x6C\x45\x76\x65\x6E\x74","\x49\x4D\x47","\x4E\x4F\x5F\x46\x4F","\x67\x65\x74\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x6F\x76\x65\x72\x6C\x61\x79","\x69\x6E\x73\x74\x61\x6C\x6C\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x63\x72\x65\x61\x74\x65\x43\x6F\x6E\x74\x72\x6F\x6C","\x67\x65\x74\x46\x6F\x6C\x64\x69\x6E\x67\x49\x6D\x61\x67\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x63\x6F\x6E\x74\x72\x6F\x6C","\x69\x6E\x69\x74\x43\x6F\x6E\x74\x72\x6F\x6C","\x44\x49\x41\x4C\x45\x43\x54\x5F\x50\x52\x45\x46\x45\x52\x48\x54\x4D\x4C","\x69\x6E\x6E\x65\x72\x4E\x6F\x64\x65","\x69\x73\x53\x68\x61\x70\x65\x45\x76\x65\x6E\x74","\x67\x65\x73\x74\x75\x72\x65\x73\x74\x61\x72\x74","\x6C\x61\x73\x74\x54\x6F\x75\x63\x68\x54\x69\x6D\x65","\x67\x65\x73\x74\x75\x72\x65\x65\x6E\x64","\x67\x65\x73\x74\x75\x72\x65\x45\x6E\x61\x62\x6C\x65\x64","\x68\x61\x6E\x64\x6C\x65\x47\x65\x73\x74\x75\x72\x65","\x72\x65\x64\x72\x61\x77\x4C\x61\x62\x65\x6C","\x67\x65\x74\x4C\x61\x62\x65\x6C\x42\x6F\x75\x6E\x64\x73","\x69\x73\x43\x6C\x69\x70\x70\x69\x6E\x67","\x67\x65\x74\x54\x65\x78\x74\x53\x63\x61\x6C\x65","\x72\x6F\x74\x61\x74\x65\x4C\x61\x62\x65\x6C\x42\x6F\x75\x6E\x64\x73","\x72\x65\x64\x72\x61\x77\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x72\x65\x64\x72\x61\x77\x43\x6F\x6E\x74\x72\x6F\x6C","\x67\x65\x74\x43\x6F\x6E\x74\x72\x6F\x6C\x42\x6F\x75\x6E\x64\x73","\x65\x71\x75\x61\x6C\x45\x6E\x74\x72\x69\x65\x73","\x65\x71\x75\x61\x6C\x50\x6F\x69\x6E\x74\x73","\x67\x65\x74\x50\x6F\x72\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x67\x65\x74\x52\x6F\x75\x74\x69\x6E\x67\x43\x65\x6E\x74\x65\x72\x59","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D\x43\x6F\x6E\x74\x72\x6F\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x74\x52\x6F\x75\x74\x69\x6E\x67\x43\x65\x6E\x74\x65\x72\x58","\x53\x54\x59\x4C\x45\x5F\x45\x4C\x42\x4F\x57","\x45\x4C\x42\x4F\x57\x5F\x56\x45\x52\x54\x49\x43\x41\x4C","\x6F\x72\x74\x68\x42\x75\x66\x66\x65\x72","\x44\x49\x52\x45\x43\x54\x49\x4F\x4E\x5F\x4D\x41\x53\x4B\x5F\x41\x4C\x4C","\x6C\x69\x6D\x69\x74\x73","\x76\x65\x72\x74\x65\x78\x53\x65\x70\x65\x72\x61\x74\x69\x6F\x6E\x73","\x72\x65\x76\x65\x72\x73\x65\x50\x6F\x72\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x72\x6F\x75\x74\x65\x50\x61\x74\x74\x65\x72\x6E\x73","\x77\x61\x79\x50\x6F\x69\x6E\x74\x73\x31","\x64\x69\x72\x56\x65\x63\x74\x6F\x72\x73","\x54\x41\x52\x47\x45\x54\x5F\x4D\x41\x53\x4B","\x53\x4F\x55\x52\x43\x45\x5F\x4D\x41\x53\x4B","\x53\x49\x44\x45\x5F\x4D\x41\x53\x4B","\x43\x45\x4E\x54\x45\x52\x5F\x4D\x41\x53\x4B","\x76\x61\x6C\x75\x65\x73","\x70\x75\x74\x56\x61\x6C\x75\x65","\x67\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x45\x4D\x50\x54\x59\x5F\x50\x4F\x49\x4E\x54","\x75\x70\x64\x61\x74\x69\x6E\x67\x44\x6F\x63\x75\x6D\x65\x6E\x74\x52\x65\x73\x6F\x75\x72\x63\x65","\x75\x70\x64\x61\x74\x69\x6E\x67\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x61\x6C\x6C\x6F\x77\x45\x76\x61\x6C","\x63\x61\x70\x74\x75\x72\x65\x44\x6F\x63\x75\x6D\x65\x6E\x74\x47\x65\x73\x74\x75\x72\x65","\x6F\x70\x74\x69\x6D\x69\x7A\x65\x56\x6D\x6C\x52\x65\x66\x6C\x6F\x77\x73","\x72\x65\x6E\x64\x65\x72\x69\x6E\x67","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65","\x73\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x73\x65\x74\x43\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x72\x65\x76\x61\x6C\x69\x64\x61\x74\x65","\x70\x72\x65\x76\x69\x6F\x75\x73\x53\x63\x61\x6C\x65","\x70\x72\x65\x76\x69\x6F\x75\x73\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x73\x65\x74\x53\x63\x61\x6C\x65","\x69\x6E\x76\x61\x6C\x69\x64\x61\x74\x65","\x76\x61\x6C\x69\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65\x53\x74\x61\x74\x65","\x6D\x78\x47\x72\x61\x70\x68\x56\x69\x65\x77\x2E\x76\x61\x6C\x69\x64\x61\x74\x65","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x6F\x75\x6E\x64\x73","\x76\x61\x6C\x69\x64\x61\x74\x65\x50\x6F\x69\x6E\x74\x73","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x63\x72\x65\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x72\x65\x64\x72\x61\x77\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x42\x6F\x75\x6E\x64\x73","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x48\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x54\x41\x54\x49\x4F\x4E","\x75\x70\x64\x61\x74\x65\x56\x65\x72\x74\x65\x78\x4C\x61\x62\x65\x6C\x4F\x66\x66\x73\x65\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x4F\x66\x66\x73\x65\x74\x46\x6F\x72\x43\x65\x6C\x6C","\x75\x70\x64\x61\x74\x65\x46\x69\x78\x65\x64\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74\x73","\x75\x70\x64\x61\x74\x65\x50\x6F\x69\x6E\x74\x73","\x75\x70\x64\x61\x74\x65\x46\x6C\x6F\x61\x74\x69\x6E\x67\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74\x73","\x75\x70\x64\x61\x74\x65\x45\x64\x67\x65\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x45\x64\x67\x65\x4C\x61\x62\x65\x6C\x4F\x66\x66\x73\x65\x74","\x63\x68\x69\x6C\x64\x4D\x6F\x76\x65\x64","\x69\x73\x52\x65\x6E\x64\x65\x72\x69\x6E\x67","\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x75\x70\x64\x61\x74\x65\x46\x69\x78\x65\x64\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x50\x6F\x69\x6E\x74","\x67\x65\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x72\x74","\x64\x65\x66\x61\x75\x6C\x74\x4C\x6F\x6F\x70\x53\x74\x79\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x45\x44\x47\x45","\x69\x73\x41\x6C\x6C\x6F\x77\x45\x76\x61\x6C","\x75\x70\x64\x61\x74\x65\x46\x6C\x6F\x61\x74\x69\x6E\x67\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x74\x4E\x65\x78\x74\x50\x6F\x69\x6E\x74","\x69\x73\x4F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C","\x53\x54\x59\x4C\x45\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52\x5F\x53\x50\x41\x43\x49\x4E\x47","\x53\x54\x59\x4C\x45\x5F\x53\x4F\x55\x52\x43\x45\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52\x5F\x53\x50\x41\x43\x49\x4E\x47","\x53\x54\x59\x4C\x45\x5F\x54\x41\x52\x47\x45\x54\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52\x5F\x53\x50\x41\x43\x49\x4E\x47","\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x50\x6F\x69\x6E\x74","\x53\x54\x59\x4C\x45\x5F\x53\x4F\x55\x52\x43\x45\x5F\x50\x4F\x52\x54","\x53\x54\x59\x4C\x45\x5F\x54\x41\x52\x47\x45\x54\x5F\x50\x4F\x52\x54","\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x55\x54\x49\x4E\x47\x5F\x43\x45\x4E\x54\x45\x52\x5F\x58","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x55\x54\x49\x4E\x47\x5F\x43\x45\x4E\x54\x45\x52\x5F\x59","\x67\x65\x74\x52\x65\x6C\x61\x74\x69\x76\x65\x50\x6F\x69\x6E\x74","\x72\x65\x6C\x61\x74\x69\x76\x65\x43\x63\x77","\x73\x65\x74\x52\x65\x6E\x64\x65\x72\x69\x6E\x67","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x45\x76\x61\x6C","\x67\x65\x74\x53\x74\x61\x74\x65\x73","\x67\x65\x74\x43\x65\x6C\x6C\x53\x74\x61\x74\x65\x73","\x69\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x45\x76\x65\x6E\x74","\x69\x73\x53\x63\x72\x6F\x6C\x6C\x45\x76\x65\x6E\x74","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x6D\x6F\x76\x65\x48\x61\x6E\x64\x6C\x65\x72","\x65\x6E\x64\x48\x61\x6E\x64\x6C\x65\x72","\x63\x72\x65\x61\x74\x65\x48\x74\x6D\x6C\x50\x61\x6E\x65","\x75\x70\x64\x61\x74\x65\x48\x74\x6D\x6C\x43\x61\x6E\x76\x61\x73\x53\x69\x7A\x65","\x63\x72\x65\x61\x74\x65\x56\x6D\x6C\x50\x61\x6E\x65","\x63\x6F\x6F\x72\x64\x6F\x72\x69\x67\x69\x6E","\x30\x2C\x30","\x73\x74\x61\x74\x69\x63","\x69\x73\x55\x70","\x67\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65\x46\x6F\x72\x52\x6F\x6F\x74","\x55\x50","\x44\x4F\x57\x4E","\x6D\x6F\x75\x73\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x72\x65\x6E\x64\x65\x72\x48\x69\x6E\x74","\x52\x45\x4E\x44\x45\x52\x49\x4E\x47\x5F\x48\x49\x4E\x54\x5F\x45\x58\x41\x43\x54","\x52\x45\x4E\x44\x45\x52\x49\x4E\x47\x5F\x48\x49\x4E\x54\x5F\x46\x41\x53\x54\x45\x53\x54","\x52\x45\x4E\x44\x45\x52\x49\x4E\x47\x5F\x48\x49\x4E\x54\x5F\x46\x41\x53\x54\x45\x52","\x44\x49\x41\x4C\x45\x43\x54\x5F\x4D\x49\x58\x45\x44\x48\x54\x4D\x4C","\x6D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x69\x6D\x61\x67\x65\x42\x75\x6E\x64\x6C\x65\x73","\x63\x72\x65\x61\x74\x65\x43\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x63\x72\x65\x61\x74\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x63\x72\x65\x61\x74\x65\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x73\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x63\x72\x65\x61\x74\x65\x47\x72\x61\x70\x68\x56\x69\x65\x77","\x67\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C\x43\x68\x61\x6E\x67\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72\x73","\x2F\x72\x65\x73\x6F\x75\x72\x63\x65\x73\x2F\x67\x72\x61\x70\x68","\x45\x4D\x50\x54\x59\x5F\x41\x52\x52\x41\x59","\x63\x65\x6C\x6C\x45\x64\x69\x74\x6F\x72","\x70\x6F\x72\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x64\x6F\x75\x62\x6C\x65\x54\x61\x70\x45\x6E\x61\x62\x6C\x65\x64","\x64\x6F\x75\x62\x6C\x65\x54\x61\x70\x54\x69\x6D\x65\x6F\x75\x74","\x64\x6F\x75\x62\x6C\x65\x54\x61\x70\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x6C\x61\x73\x74\x54\x6F\x75\x63\x68\x59","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x64\x65\x66\x61\x75\x6C\x74\x4F\x76\x65\x72\x6C\x61\x70","\x64\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x61\x6C\x74\x65\x72\x6E\x61\x74\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x43\x6F\x6C\x6F\x72","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x61\x73\x68\x65\x64","\x6D\x69\x6E\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x69\x73\x74","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x65\x73\x63\x61\x70\x65\x45\x6E\x61\x62\x6C\x65\x64","\x69\x6E\x76\x6F\x6B\x65\x73\x53\x74\x6F\x70\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x65\x6E\x74\x65\x72\x53\x74\x6F\x70\x73\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x75\x73\x65\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x65\x78\x70\x6F\x72\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x6D\x70\x6F\x72\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x65\x6C\x6C\x73\x4C\x6F\x63\x6B\x65\x64","\x63\x65\x6C\x6C\x73\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x45\x64\x69\x74\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x44\x65\x6C\x65\x74\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x65\x64\x67\x65\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x76\x65\x72\x74\x65\x78\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x64\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x73\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x65\x6C\x6C\x73\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x42\x65\x6E\x64\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65","\x63\x65\x6C\x6C\x73\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x61\x75\x74\x6F\x53\x69\x7A\x65\x43\x65\x6C\x6C\x73","\x74\x69\x6D\x65\x72\x41\x75\x74\x6F\x53\x63\x72\x6F\x6C\x6C","\x61\x6C\x6C\x6F\x77\x41\x75\x74\x6F\x50\x61\x6E\x6E\x69\x6E\x67","\x69\x67\x6E\x6F\x72\x65\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x6D\x61\x78\x69\x6D\x75\x6D\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x6D\x69\x6E\x69\x6D\x75\x6D\x47\x72\x61\x70\x68\x53\x69\x7A\x65","\x6D\x69\x6E\x69\x6D\x75\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x53\x69\x7A\x65","\x6D\x61\x78\x69\x6D\x75\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x53\x69\x7A\x65","\x72\x65\x73\x69\x7A\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x61\x6C\x6C\x6F\x77\x4E\x65\x67\x61\x74\x69\x76\x65\x43\x6F\x6F\x72\x64\x69\x6E\x61\x74\x65\x73","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x65\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73","\x65\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73\x4F\x6E\x41\x64\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x54\x6F\x50\x72\x65\x66\x65\x72\x72\x65\x64\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x46\x61\x63\x74\x6F\x72","\x6B\x65\x65\x70\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x56\x69\x73\x69\x62\x6C\x65\x4F\x6E\x5A\x6F\x6F\x6D","\x63\x65\x6E\x74\x65\x72\x5A\x6F\x6F\x6D","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x52\x65\x73\x69\x7A\x65","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x4D\x6F\x76\x65","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x43\x6F\x6E\x6E\x65\x63\x74","\x61\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x4C\x6F\x6F\x70","\x6D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65\x45\x64\x67\x65\x73","\x61\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x63\x6C\x6F\x6E\x65\x49\x6E\x76\x61\x6C\x69\x64\x45\x64\x67\x65\x73","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x4F\x6E\x4D\x6F\x76\x65","\x6C\x61\x62\x65\x6C\x73\x56\x69\x73\x69\x62\x6C\x65","\x68\x74\x6D\x6C\x4C\x61\x62\x65\x6C\x73","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x4E\x65\x73\x74\x69\x6E\x67","\x6D\x69\x6E\x46\x69\x74\x53\x63\x61\x6C\x65","\x6D\x61\x78\x46\x69\x74\x53\x63\x61\x6C\x65","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x49\x6D\x61\x67\x65","\x2F\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x2E\x67\x69\x66","\x65\x78\x70\x61\x6E\x64\x65\x64\x49\x6D\x61\x67\x65","\x2F\x65\x78\x70\x61\x6E\x64\x65\x64\x2E\x67\x69\x66","\x77\x61\x72\x6E\x69\x6E\x67\x49\x6D\x61\x67\x65","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x69\x6D\x61\x67\x65\x73\x2F\x77\x61\x72\x6E\x69\x6E\x67\x2E\x67\x69\x66","\x61\x6C\x72\x65\x61\x64\x79\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64\x52\x65\x73\x6F\x75\x72\x63\x65","\x61\x6C\x72\x65\x61\x64\x79\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x73","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x45\x78\x70\x61\x6E\x64\x52\x65\x73\x6F\x75\x72\x63\x65","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x2D\x65\x78\x70\x61\x6E\x64","\x63\x72\x65\x61\x74\x65\x43\x65\x6C\x6C\x45\x64\x69\x74\x6F\x72","\x75\x6E\x6C\x6F\x61\x64","\x73\x65\x6C\x65\x63\x74\x73\x74\x61\x72\x74","\x3C\x76\x3A\x67\x72\x6F\x75\x70\x20\x73\x74\x79\x6C\x65\x3D\x22\x44\x49\x53\x50\x4C\x41\x59\x3A\x20\x6E\x6F\x6E\x65\x3B\x22\x3E\x3C\x2F\x76\x3A\x67\x72\x6F\x75\x70\x3E","\x70\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x70\x72\x6F\x63\x65\x73\x73\x43\x68\x61\x6E\x67\x65","\x67\x65\x74\x52\x65\x6D\x6F\x76\x65\x64\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x72\x65\x6D\x6F\x76\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x63\x6C\x65\x61\x72\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x72\x65\x6D\x6F\x76\x65\x53\x74\x61\x74\x65\x46\x6F\x72\x43\x65\x6C\x6C","\x68\x6F\x6D\x65","\x61\x64\x64\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x63\x6C\x65\x61\x72\x43\x65\x6C\x6C\x4F\x76\x65\x72\x6C\x61\x79\x73","\x73\x65\x74\x43\x65\x6C\x6C\x57\x61\x72\x6E\x69\x6E\x67","\x3C\x66\x6F\x6E\x74\x20\x63\x6F\x6C\x6F\x72\x3D\x72\x65\x64\x3E","\x3C\x2F\x66\x6F\x6E\x74\x3E","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x73\x74\x61\x72\x74\x45\x64\x69\x74\x69\x6E\x67\x41\x74\x43\x65\x6C\x6C","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x45\x64\x69\x74\x61\x62\x6C\x65","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x54\x6F\x53\x74\x72\x69\x6E\x67","\x69\x73\x41\x75\x74\x6F\x53\x69\x7A\x65\x43\x65\x6C\x6C","\x63\x65\x6C\x6C\x4C\x61\x62\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x63\x65\x6C\x6C\x53\x69\x7A\x65\x55\x70\x64\x61\x74\x65\x64","\x68\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65\x41\x74","\x69\x73\x54\x6F\x67\x67\x6C\x65\x45\x76\x65\x6E\x74","\x70\x61\x6E\x6E\x69\x6E\x67\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x50\x61\x6E\x6E\x69\x6E\x67\x4D\x61\x6E\x61\x67\x65\x72","\x67\x65\x74\x42\x6F\x72\x64\x65\x72\x53\x69\x7A\x65\x73","\x74\x68\x69\x6E","\x6D\x65\x64\x69\x75\x6D","\x74\x68\x69\x63\x6B","\x62\x6F\x72\x64\x65\x72\x4C\x65\x66\x74\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70\x57\x69\x64\x74\x68","\x70\x61\x64\x64\x69\x6E\x67\x54\x6F\x70","\x62\x6F\x72\x64\x65\x72\x52\x69\x67\x68\x74\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x42\x6F\x74\x74\x6F\x6D\x57\x69\x64\x74\x68","\x70\x61\x64\x64\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x67\x65\x74\x50\x72\x65\x66\x65\x72\x72\x65\x64\x50\x61\x67\x65\x53\x69\x7A\x65","\x67\x65\x74\x42\x6F\x72\x64\x65\x72","\x64\x6F\x52\x65\x73\x69\x7A\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6D\x69\x6E\x57\x69\x64\x74\x68","\x6D\x69\x6E\x48\x65\x69\x67\x68\x74","\x75\x70\x64\x61\x74\x65\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x76\x65\x72\x74\x69\x63\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x70\x6F\x73\x74\x50\x72\x6F\x63\x65\x73\x73\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45","\x67\x65\x74\x49\x6D\x61\x67\x65\x46\x72\x6F\x6D\x42\x75\x6E\x64\x6C\x65\x73","\x64\x61\x74\x61\x3A\x69\x6D\x61\x67\x65\x2F","\x3B\x62\x61\x73\x65\x36\x34\x2C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x46\x6C\x61\x67\x73","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x46\x6C\x61\x67\x73","\x61\x64\x64\x49\x6D\x61\x67\x65\x42\x75\x6E\x64\x6C\x65","\x72\x65\x6D\x6F\x76\x65\x49\x6D\x61\x67\x65\x42\x75\x6E\x64\x6C\x65","\x62\x61\x63\x6B","\x67\x65\x74\x43\x65\x6C\x6C\x73\x46\x6F\x72\x47\x72\x6F\x75\x70","\x63\x72\x65\x61\x74\x65\x47\x72\x6F\x75\x70\x43\x65\x6C\x6C","\x67\x65\x74\x42\x6F\x75\x6E\x64\x73\x46\x6F\x72\x47\x72\x6F\x75\x70","\x61\x64\x64\x41\x6C\x6C\x45\x64\x67\x65\x73","\x67\x65\x74\x45\x64\x67\x65\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x69\x6E\x73\x65\x72\x74\x56\x65\x72\x74\x65\x78","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65","\x61\x64\x64\x45\x64\x67\x65","\x69\x73\x41\x6C\x6C\x6F\x77\x4E\x65\x67\x61\x74\x69\x76\x65\x43\x6F\x6F\x72\x64\x69\x6E\x61\x74\x65\x73","\x69\x73\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73\x4F\x6E\x41\x64\x64","\x69\x73\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74","\x65\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64","\x67\x65\x74\x44\x65\x6C\x65\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x6E\x63\x6C\x75\x64\x65\x45\x64\x67\x65\x73","\x6E\x65\x77\x45\x64\x67\x65","\x67\x65\x74\x46\x6F\x6C\x64\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x72\x65\x63\x75\x72\x73\x65","\x69\x73\x43\x65\x6C\x6C\x46\x6F\x6C\x64\x61\x62\x6C\x65","\x73\x77\x61\x70\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x41\x6C\x74\x65\x72\x6E\x61\x74\x65\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x50\x72\x65\x66\x65\x72\x72\x65\x64\x53\x69\x7A\x65\x46\x6F\x72\x43\x65\x6C\x6C","\x67\x65\x74\x41\x6C\x6C\x45\x64\x67\x65\x73","\x69\x67\x6E\x6F\x72\x65\x43\x68\x69\x6C\x64\x72\x65\x6E","\x53\x48\x41\x50\x45\x5F\x4C\x41\x42\x45\x4C","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45\x5F\x57\x49\x44\x54\x48","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45\x5F\x48\x45\x49\x47\x48\x54","\x67\x65\x74\x53\x69\x7A\x65\x46\x6F\x72\x53\x74\x72\x69\x6E\x67","\x72\x65\x73\x69\x7A\x65\x43\x65\x6C\x6C","\x69\x73\x43\x6C\x6F\x6E\x65\x49\x6E\x76\x61\x6C\x69\x64\x45\x64\x67\x65\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x4E\x65\x67\x61\x74\x69\x76\x65\x43\x6F\x6F\x72\x64\x69\x6E\x61\x74\x65\x73","\x69\x73\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x4F\x6E\x4D\x6F\x76\x65","\x69\x73\x41\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x47\x72\x61\x70\x68","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x43\x65\x6C\x6C","\x67\x65\x74\x43\x65\x6C\x6C\x43\x6F\x6E\x74\x61\x69\x6E\x6D\x65\x6E\x74\x41\x72\x65\x61","\x67\x65\x74\x43\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x67\x65\x74\x4D\x61\x78\x69\x6D\x75\x6D\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x69\x73\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x70","\x67\x65\x74\x41\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x53\x54\x59\x4C\x45\x5F\x45\x58\x49\x54\x5F\x58","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x54\x52\x59\x5F\x58","\x53\x54\x59\x4C\x45\x5F\x45\x58\x49\x54\x5F\x59","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x54\x52\x59\x5F\x59","\x53\x54\x59\x4C\x45\x5F\x45\x58\x49\x54\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x54\x52\x59\x5F\x50\x45\x52\x49\x4D\x45\x54\x45\x52","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x70\x6F\x69\x6E\x74","\x53\x54\x59\x4C\x45\x5F\x46\x4C\x49\x50\x48","\x53\x54\x59\x4C\x45\x5F\x46\x4C\x49\x50\x56","\x69\x73\x50\x6F\x72\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x46\x6F\x72\x50\x6F\x72\x74","\x69\x73\x43\x65\x6C\x6C\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x67\x65\x74\x43\x65\x6C\x6C\x42\x6F\x75\x6E\x64\x73","\x73\x68\x69\x66\x74\x50\x72\x65\x76\x69\x65\x77\x31","\x73\x68\x69\x66\x74\x50\x72\x65\x76\x69\x65\x77\x32","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x7A\x6F\x6F\x6D\x41\x63\x74\x75\x61\x6C","\x7A\x6F\x6F\x6D\x54\x6F","\x73\x63\x72\x6F\x6C\x6C\x52\x65\x63\x74\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x7A\x6F\x6F\x6D\x54\x6F\x52\x65\x63\x74","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x4F\x52\x54\x48\x4F\x47\x4F\x4E\x41\x4C","\x53\x65\x67\x6D\x65\x6E\x74\x43\x6F\x6E\x6E\x65\x63\x74\x6F\x72","\x45\x6C\x62\x6F\x77\x43\x6F\x6E\x6E\x65\x63\x74\x6F\x72","\x53\x69\x64\x65\x54\x6F\x53\x69\x64\x65","\x54\x6F\x70\x54\x6F\x42\x6F\x74\x74\x6F\x6D","\x45\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E","\x4F\x72\x74\x68\x43\x6F\x6E\x6E\x65\x63\x74\x6F\x72","\x69\x73\x4C\x6F\x6F\x70","\x69\x73\x43\x6C\x6F\x6E\x65\x45\x76\x65\x6E\x74","\x49\x53\x5F\x4D\x41\x43","\x69\x73\x4D\x65\x74\x61\x44\x6F\x77\x6E","\x69\x73\x41\x6C\x74\x44\x6F\x77\x6E","\x69\x73\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x45\x76\x65\x6E\x74","\x69\x73\x46\x6F\x72\x63\x65\x4D\x61\x72\x71\x75\x65\x65\x45\x76\x65\x6E\x74","\x76\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x41\x6C\x65\x72\x74","\x69\x73\x45\x64\x67\x65\x56\x61\x6C\x69\x64","\x69\x73\x56\x61\x6C\x69\x64\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x63\x68\x65\x63\x6B","\x76\x61\x6C\x69\x64\x61\x74\x65\x45\x64\x67\x65","\x76\x61\x6C\x69\x64\x61\x74\x65\x47\x72\x61\x70\x68","\x67\x65\x74\x43\x65\x6C\x6C\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x76\x61\x6C\x69\x64\x61\x74\x65\x43\x65\x6C\x6C","\x61\x74\x74\x72","\x63\x6F\x75\x6E\x74\x45\x72\x72\x6F\x72","\x73\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x74\x6F\x53\x74\x72\x69\x6E\x67","\x69\x73\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C\x73","\x73\x65\x74\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C\x73","\x53\x54\x59\x4C\x45\x5F\x57\x48\x49\x54\x45\x5F\x53\x50\x41\x43\x45","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x46\x6F\x72\x4E\x6F\x64\x65","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x46\x6F\x72\x43\x65\x6C\x6C","\x67\x65\x74\x43\x75\x72\x73\x6F\x72\x46\x6F\x72\x43\x65\x6C\x6C","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x43\x4F\x4C\x4F\x52","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x47\x52\x41\x44\x49\x45\x4E\x54\x43\x4F\x4C\x4F\x52","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x53\x48\x41\x50\x45","\x53\x54\x59\x4C\x45\x5F\x49\x4E\x44\x49\x43\x41\x54\x4F\x52\x5F\x49\x4D\x41\x47\x45","\x73\x65\x74\x42\x6F\x72\x64\x65\x72","\x53\x48\x41\x50\x45\x5F\x53\x57\x49\x4D\x4C\x41\x4E\x45","\x69\x73\x52\x65\x73\x69\x7A\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x65\x74\x52\x65\x73\x69\x7A\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x69\x73\x45\x73\x63\x61\x70\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x73\x63\x61\x70\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x49\x6E\x76\x6F\x6B\x65\x73\x53\x74\x6F\x70\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x73\x65\x74\x45\x6E\x74\x65\x72\x53\x74\x6F\x70\x73\x43\x65\x6C\x6C\x45\x64\x69\x74\x69\x6E\x67","\x69\x73\x43\x65\x6C\x6C\x4C\x6F\x63\x6B\x65\x64","\x69\x73\x43\x65\x6C\x6C\x73\x4C\x6F\x63\x6B\x65\x64","\x73\x65\x74\x43\x65\x6C\x6C\x73\x4C\x6F\x63\x6B\x65\x64","\x67\x65\x74\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x73\x43\x65\x6C\x6C\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x43\x4C\x4F\x4E\x45\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x43\x6C\x6F\x6E\x65\x61\x62\x6C\x65","\x63\x61\x6E\x45\x78\x70\x6F\x72\x74\x43\x65\x6C\x6C","\x63\x61\x6E\x49\x6D\x70\x6F\x72\x74\x43\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x73\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x73\x53\x65\x6C\x65\x63\x74\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x44\x65\x6C\x65\x74\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x44\x65\x6C\x65\x74\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x44\x45\x4C\x45\x54\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x44\x65\x6C\x65\x74\x61\x62\x6C\x65","\x69\x73\x4C\x61\x62\x65\x6C\x4D\x6F\x76\x61\x62\x6C\x65","\x67\x65\x74\x4D\x6F\x76\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x73\x43\x65\x6C\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x4D\x4F\x56\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x73\x65\x74\x50\x6F\x72\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x73\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x73\x65\x74\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x69\x73\x56\x65\x72\x74\x65\x78\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x73\x65\x74\x56\x65\x72\x74\x65\x78\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x45\x64\x67\x65\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x73\x65\x74\x45\x64\x67\x65\x4C\x61\x62\x65\x6C\x73\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65\x4E\x65\x73\x74\x69\x6E\x67","\x73\x65\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65\x4E\x65\x73\x74\x69\x6E\x67","\x73\x65\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x4D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x73\x65\x74\x4D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x69\x73\x41\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65\x45\x64\x67\x65\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65\x45\x64\x67\x65\x73","\x73\x65\x74\x43\x6C\x6F\x6E\x65\x49\x6E\x76\x61\x6C\x69\x64\x45\x64\x67\x65\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x73\x65\x74\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x4F\x6E\x4D\x6F\x76\x65","\x73\x65\x74\x44\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x53\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x43\x65\x6C\x6C\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x52\x45\x53\x49\x5A\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x52\x65\x73\x69\x7A\x61\x62\x6C\x65","\x69\x73\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74\x4D\x6F\x76\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x42\x65\x6E\x64\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x42\x65\x6E\x64\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x42\x45\x4E\x44\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x42\x65\x6E\x64\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x45\x64\x69\x74\x61\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x45\x44\x49\x54\x41\x42\x4C\x45","\x73\x65\x74\x43\x65\x6C\x6C\x73\x45\x64\x69\x74\x61\x62\x6C\x65","\x69\x73\x43\x65\x6C\x6C\x73\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x73\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x69\x73\x56\x61\x6C\x69\x64\x53\x6F\x75\x72\x63\x65","\x69\x73\x56\x61\x6C\x69\x64\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x50\x61\x6E\x6E\x69\x6E\x67","\x69\x73\x41\x75\x74\x6F\x53\x69\x7A\x65\x43\x65\x6C\x6C\x73","\x53\x54\x59\x4C\x45\x5F\x41\x55\x54\x4F\x53\x49\x5A\x45","\x73\x65\x74\x41\x75\x74\x6F\x53\x69\x7A\x65\x43\x65\x6C\x6C\x73","\x69\x73\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73","\x73\x65\x74\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73","\x73\x65\x74\x45\x78\x74\x65\x6E\x64\x50\x61\x72\x65\x6E\x74\x73\x4F\x6E\x41\x64\x64","\x69\x73\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x73\x65\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x69\x73\x41\x6C\x6C\x6F\x77\x4F\x76\x65\x72\x6C\x61\x70\x50\x61\x72\x65\x6E\x74","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4C\x44\x41\x42\x4C\x45","\x69\x73\x56\x61\x6C\x69\x64\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x69\x73\x53\x70\x6C\x69\x74\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x68\x69\x74\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65\x43\x6F\x6E\x74\x65\x6E\x74","\x67\x65\x74\x50\x6F\x69\x6E\x74\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x73","\x67\x65\x74\x43\x65\x6C\x6C\x73\x42\x65\x79\x6F\x6E\x64","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x72\x65\x6D\x6F\x76\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x52\x65\x67\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x73\x46\x6F\x72\x45\x76\x65\x6E\x74","\x73\x65\x6C\x65\x63\x74\x4E\x65\x78\x74\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x50\x72\x65\x76\x69\x6F\x75\x73\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x50\x61\x72\x65\x6E\x74\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x43\x68\x69\x6C\x64\x43\x65\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72","\x75\x70\x64\x61\x74\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x6C\x61\x73\x74\x54\x6F\x75\x63\x68\x58","\x6C\x61\x73\x74\x4D\x6F\x75\x73\x65\x58","\x6C\x61\x73\x74\x4D\x6F\x75\x73\x65\x59","\x4D\x4F\x55\x53\x45\x5F\x55\x50","\x4D\x4F\x55\x53\x45\x5F\x4D\x4F\x56\x45","\x64\x65\x73\x74\x72\x6F\x79\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70","\x68\x65\x6C\x70","\x67\x72\x61\x70\x68\x52\x65\x6E\x64\x65\x72\x48\x69\x6E\x74","\x73\x68\x6F\x77\x56\x69\x65\x77\x70\x6F\x72\x74","\x73\x69\x7A\x65\x72\x53\x69\x7A\x65","\x75\x70\x64\x61\x74\x65\x4F\x6E\x50\x61\x6E","\x73\x69\x7A\x65\x72\x49\x6D\x61\x67\x65","\x73\x68\x61\x70\x65\x2D\x72\x65\x6E\x64\x65\x72\x69\x6E\x67","\x6F\x70\x74\x69\x6D\x69\x7A\x65\x53\x70\x65\x65\x64","\x69\x6D\x61\x67\x65\x2D\x72\x65\x6E\x64\x65\x72\x69\x6E\x67","\x75\x70\x64\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72","\x75\x70\x64\x61\x74\x65","\x70\x61\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x72\x65\x66\x72\x65\x73\x68\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x42\x6F\x72\x64\x65\x72","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x73\x69\x7A\x65\x72","\x63\x72\x65\x61\x74\x65\x53\x69\x7A\x65\x72","\x73\x65\x74\x5A\x6F\x6F\x6D\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x53\x6F\x75\x72\x63\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x53\x69\x7A\x65","\x67\x65\x74\x4F\x75\x74\x6C\x69\x6E\x65\x4F\x66\x66\x73\x65\x74","\x73\x74\x61\x72\x74\x58","\x73\x74\x61\x72\x74\x59","\x64\x78\x30","\x64\x79\x30","\x6E","\x76\x61\x6C\x69\x64\x4E\x65\x69\x67\x68\x62\x6F\x72\x73","\x74\x79\x70\x65\x45\x72\x72\x6F\x72","\x76\x61\x6C\x69\x64\x4E\x65\x69\x67\x68\x62\x6F\x72\x73\x41\x6C\x6C\x6F\x77\x65\x64","\x63\x68\x65\x63\x6B\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x63\x68\x65\x63\x6B\x4E\x65\x69\x67\x68\x62\x6F\x72\x73","\x63\x68\x65\x63\x6B\x54\x79\x70\x65","\x75\x6E\x64\x6F\x48\x61\x6E\x64\x6C\x65\x72","\x62\x75\x62\x62\x6C\x69\x6E\x67","\x69\x73\x42\x75\x62\x62\x6C\x69\x6E\x67","\x73\x65\x74\x42\x75\x62\x62\x6C\x69\x6E\x67","\x67\x65\x74\x4C\x61\x79\x6F\x75\x74","\x67\x65\x74\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x72\x65\x73\x69\x7A\x65\x48\x61\x6E\x64\x6C\x65\x72","\x66\x6F\x6C\x64\x48\x61\x6E\x64\x6C\x65\x72","\x73\x68\x69\x66\x74\x52\x69\x67\x68\x74\x77\x61\x72\x64\x73","\x73\x68\x69\x66\x74\x44\x6F\x77\x6E\x77\x61\x72\x64\x73","\x69\x73\x43\x65\x6C\x6C\x49\x67\x6E\x6F\x72\x65\x64","\x69\x73\x43\x65\x6C\x6C\x53\x68\x69\x66\x74\x61\x62\x6C\x65","\x69\x73\x53\x68\x69\x66\x74\x52\x69\x67\x68\x74\x77\x61\x72\x64\x73","\x73\x65\x74\x53\x68\x69\x66\x74\x52\x69\x67\x68\x74\x77\x61\x72\x64\x73","\x69\x73\x53\x68\x69\x66\x74\x44\x6F\x77\x6E\x77\x61\x72\x64\x73","\x73\x65\x74\x53\x68\x69\x66\x74\x44\x6F\x77\x6E\x77\x61\x72\x64\x73","\x63\x65\x6C\x6C\x52\x65\x73\x69\x7A\x65\x64","\x67\x65\x74\x43\x65\x6C\x6C\x73\x54\x6F\x53\x68\x69\x66\x74","\x73\x68\x69\x66\x74\x43\x65\x6C\x6C","\x61\x64\x64\x45\x6E\x61\x62\x6C\x65\x64","\x72\x65\x73\x69\x7A\x65\x45\x6E\x61\x62\x6C\x65\x64","\x61\x64\x64\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x41\x64\x64\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x52\x65\x73\x69\x7A\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x48\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x73\x65\x74\x41\x64\x64\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x52\x65\x73\x69\x7A\x65\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65\x49\x67\x6E\x6F\x72\x65\x64","\x69\x73\x43\x65\x6C\x6C\x48\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x41\x64\x64\x65\x64","\x72\x65\x73\x69\x7A\x65\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x6F\x6C\x64\x42\x6F\x75\x6E\x64\x73","\x6F\x6C\x64\x53\x74\x61\x74\x65\x73","\x6F\x6C\x64\x53\x63\x61\x6C\x65","\x64\x65\x6C\x74\x61\x73","\x63\x6F\x75\x6E\x74","\x58","\x59","\x61\x64\x64\x45\x64\x67\x65\x73","\x72\x65\x73\x6F\x6C\x76\x65","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x53\x74\x61\x74\x65","\x72\x65\x76\x61\x6C\x69\x64\x61\x74\x65\x53\x74\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x50\x72\x65\x76\x69\x65\x77\x53\x68\x61\x70\x65","\x6D\x61\x78\x43\x65\x6C\x6C\x73","\x68\x69\x67\x68\x6C\x69\x67\x68\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x6C\x6F\x6E\x65\x45\x6E\x61\x62\x6C\x65\x64","\x6D\x6F\x76\x65\x45\x6E\x61\x62\x6C\x65\x64","\x67\x75\x69\x64\x65","\x63\x75\x72\x72\x65\x6E\x74\x44\x78","\x63\x75\x72\x72\x65\x6E\x74\x44\x79","\x75\x70\x64\x61\x74\x65\x43\x75\x72\x73\x6F\x72","\x73\x65\x6C\x65\x63\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x6F\x6E\x6E\x65\x63\x74\x4F\x6E\x44\x72\x6F\x70","\x73\x63\x72\x6F\x6C\x6C\x4F\x6E\x4D\x6F\x76\x65","\x70\x72\x65\x76\x69\x65\x77\x43\x6F\x6C\x6F\x72","\x68\x74\x6D\x6C\x50\x72\x65\x76\x69\x65\x77","\x73\x63\x61\x6C\x65\x47\x72\x69\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x43\x6C\x6F\x6E\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x43\x6C\x6F\x6E\x65\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x4D\x6F\x76\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x4D\x6F\x76\x65\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x65\x6C\x65\x63\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x73\x65\x74\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x49\x6E\x69\x74\x69\x61\x6C\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x44\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x64\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x63\x65\x6C\x6C\x57\x61\x73\x43\x6C\x69\x63\x6B\x65\x64","\x53\x45\x4C\x45\x43\x54","\x66\x69\x72\x73\x74","\x67\x65\x74\x50\x72\x65\x76\x69\x65\x77\x42\x6F\x75\x6E\x64\x73","\x63\x72\x65\x61\x74\x65\x50\x72\x65\x76\x69\x65\x77\x53\x68\x61\x70\x65","\x70\x42\x6F\x75\x6E\x64\x73","\x75\x73\x65\x47\x75\x69\x64\x65\x73\x46\x6F\x72\x45\x76\x65\x6E\x74","\x73\x65\x74\x48\x69\x67\x68\x6C\x69\x67\x68\x74\x43\x6F\x6C\x6F\x72","\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x49\x4E\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4E\x4E\x45\x43\x54\x5F\x54\x41\x52\x47\x45\x54\x5F\x43\x4F\x4C\x4F\x52","\x43\x55\x52\x53\x4F\x52\x5F\x4D\x4F\x56\x41\x42\x4C\x45\x5F\x45\x44\x47\x45","\x43\x55\x52\x53\x4F\x52\x5F\x4D\x4F\x56\x41\x42\x4C\x45\x5F\x56\x45\x52\x54\x45\x58","\x73\x65\x6C\x65\x63\x74\x44\x65\x6C\x61\x79\x65\x64","\x64\x65\x73\x74\x72\x6F\x79\x53\x68\x61\x70\x65\x73","\x67\x75\x69\x64\x65\x73","\x73\x68\x6F\x75\x6C\x64\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x74\x72\x69\x67\x67\x65\x72\x58","\x74\x72\x69\x67\x67\x65\x72\x59","\x75\x73\x65\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x75\x73\x65\x4C\x65\x66\x74\x42\x75\x74\x74\x6F\x6E\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x73\x65\x6C\x65\x63\x74\x4F\x6E\x50\x6F\x70\x75\x70","\x63\x6C\x65\x61\x72\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4F\x6E\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x69\x67\x6E\x6F\x72\x65\x43\x65\x6C\x6C","\x70\x72\x65\x76\x69\x65\x77\x45\x6E\x61\x62\x6C\x65\x64","\x75\x73\x65\x47\x72\x69\x64","\x69\x73\x50\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x50\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x50\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x70\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65\x50\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x67\x65\x74\x43\x65\x6C\x6C\x46\x6F\x72\x50\x6F\x70\x75\x70\x45\x76\x65\x6E\x74","\x76\x61\x6C\x69\x64\x43\x6F\x6C\x6F\x72","\x44\x45\x46\x41\x55\x4C\x54\x5F\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x69\x6E\x76\x61\x6C\x69\x64\x43\x6F\x6C\x6F\x72","\x44\x45\x46\x41\x55\x4C\x54\x5F\x49\x4E\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x68\x6F\x74\x73\x70\x6F\x74","\x44\x45\x46\x41\x55\x4C\x54\x5F\x48\x4F\x54\x53\x50\x4F\x54","\x68\x6F\x74\x73\x70\x6F\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x43\x6F\x6C\x6F\x72","\x76\x61\x6C\x69\x64\x53\x74\x61\x74\x65","\x6D\x61\x72\x6B\x65\x64\x53\x74\x61\x74\x65","\x73\x65\x74\x48\x6F\x74\x73\x70\x6F\x74","\x67\x65\x74\x48\x6F\x74\x73\x70\x6F\x74","\x73\x65\x74\x48\x6F\x74\x73\x70\x6F\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x48\x6F\x74\x73\x70\x6F\x74\x45\x6E\x61\x62\x6C\x65\x64","\x68\x61\x73\x56\x61\x6C\x69\x64\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x61\x6C\x69\x64\x53\x74\x61\x74\x65","\x67\x65\x74\x4D\x61\x72\x6B\x65\x64\x53\x74\x61\x74\x65","\x75\x6E\x6D\x61\x72\x6B","\x70\x72\x6F\x63\x65\x73\x73","\x69\x73\x56\x61\x6C\x69\x64\x53\x74\x61\x74\x65","\x67\x65\x74\x4D\x61\x72\x6B\x65\x72\x43\x6F\x6C\x6F\x72","\x6D\x61\x72\x6B\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65\x54\x6F\x4D\x61\x72\x6B","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x73\x48\x6F\x74\x73\x70\x6F\x74","\x72\x65\x73\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x68\x61\x6E\x64\x6C\x65\x72\x73","\x6D\x61\x78\x48\x61\x6E\x64\x6C\x65\x72\x73","\x6D\x6F\x76\x65\x49\x63\x6F\x6E\x46\x72\x6F\x6E\x74","\x6D\x6F\x76\x65\x49\x63\x6F\x6E\x42\x61\x63\x6B","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x74\x61\x72\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x63\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x6D\x61\x72\x6B\x65\x72","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x48\x61\x6E\x64\x6C\x65\x72","\x77\x61\x79\x70\x6F\x69\x6E\x74\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x45\x6E\x61\x62\x6C\x65\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x44\x65\x6C\x61\x79","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x49\x6E\x50\x72\x6F\x67\x72\x65\x73\x73","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x56\x61\x6C\x69\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x69\x6E\x69\x74\x69\x61\x6C\x54\x6F\x75\x63\x68\x58","\x69\x6E\x69\x74\x69\x61\x6C\x54\x6F\x75\x63\x68\x59","\x69\x67\x6E\x6F\x72\x65\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x63\x6F\x6E\x4F\x66\x66\x73\x65\x74","\x65\x64\x67\x65\x53\x74\x61\x74\x65","\x64\x72\x69\x6C\x6C\x48\x61\x6E\x64\x6C\x65\x72","\x6D\x6F\x75\x73\x65\x44\x6F\x77\x6E\x43\x6F\x75\x6E\x74\x65\x72","\x6D\x6F\x76\x65\x50\x72\x65\x76\x69\x65\x77\x41\x77\x61\x79","\x69\x73\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x69\x63\x6F\x6E\x53\x74\x61\x74\x65","\x69\x63\x6F\x6E\x73","\x72\x65\x64\x72\x61\x77\x49\x63\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79\x49\x63\x6F\x6E\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6E\x67","\x76\x61\x6C\x69\x64\x61\x74\x65\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x53\x74\x61\x74\x65","\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x69\x73\x4D\x6F\x76\x65\x49\x63\x6F\x6E\x54\x6F\x46\x72\x6F\x6E\x74\x46\x6F\x72\x53\x74\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x49\x63\x6F\x6E\x73","\x43\x55\x52\x53\x4F\x52\x5F\x43\x4F\x4E\x4E\x45\x43\x54","\x63\x75\x72\x72\x65\x6E\x74\x53\x74\x61\x74\x65","\x69\x63\x6F\x6E","\x67\x65\x74\x49\x63\x6F\x6E\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x69\x73\x53\x74\x61\x72\x74\x45\x76\x65\x6E\x74","\x63\x75\x72\x72\x65\x6E\x74\x46\x6F\x63\x75\x73","\x63\x75\x72\x72\x65\x6E\x74\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x73\x6F\x75\x72\x63\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x77\x61\x79\x70\x6F\x69\x6E\x74\x73","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x54\x68\x72\x65\x61\x64","\x63\x6C\x65\x61\x72\x54\x69\x6D\x65\x6F\x75\x74","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64","\x73\x65\x6C\x65\x63\x74\x65\x64\x49\x63\x6F\x6E","\x69\x73\x49\x6D\x6D\x65\x64\x69\x61\x74\x65\x43\x6F\x6E\x6E\x65\x63\x74\x53\x6F\x75\x72\x63\x65","\x75\x70\x64\x61\x74\x65\x43\x75\x72\x72\x65\x6E\x74\x53\x74\x61\x74\x65","\x63\x6F\x6E\x76\x65\x72\x74\x57\x61\x79\x70\x6F\x69\x6E\x74","\x67\x65\x74\x54\x61\x72\x67\x65\x74\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x50\x6F\x69\x6E\x74","\x67\x65\x74\x53\x6F\x75\x72\x63\x65\x50\x65\x72\x69\x6D\x65\x74\x65\x72\x50\x6F\x69\x6E\x74","\x64\x72\x61\x77\x50\x72\x65\x76\x69\x65\x77","\x75\x70\x64\x61\x74\x65\x49\x63\x6F\x6E\x73","\x69\x73\x53\x74\x6F\x70\x45\x76\x65\x6E\x74","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x45\x64\x67\x65\x57\x69\x64\x74\x68","\x67\x65\x74\x45\x64\x67\x65\x43\x6F\x6C\x6F\x72","\x49\x4E\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x63\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x41\x6C\x69\x67\x6E\x6D\x65\x6E\x74\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x70\x6F\x69\x6E\x74\x49\x6D\x61\x67\x65","\x2F\x70\x6F\x69\x6E\x74\x2E\x67\x69\x66","\x68\x69\x67\x68\x6C\x69\x67\x68\x74\x43\x6F\x6C\x6F\x72","\x66\x6F\x63\x75\x73\x49\x63\x6F\x6E\x73","\x66\x6F\x63\x75\x73\x48\x69\x67\x68\x6C\x69\x67\x68\x74","\x66\x6F\x63\x75\x73\x50\x6F\x69\x6E\x74\x73","\x63\x75\x72\x72\x65\x6E\x74\x46\x6F\x63\x75\x73\x41\x72\x65\x61","\x67\x65\x74\x49\x6D\x61\x67\x65\x46\x6F\x72\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74","\x69\x73\x45\x76\x65\x6E\x74\x49\x67\x6E\x6F\x72\x65\x64","\x72\x65\x70\x61\x69\x6E\x74","\x64\x65\x66\x61\x75\x6C\x74\x4F\x70\x61\x63\x69\x74\x79","\x73\x68\x61\x72\x65\x64\x44\x69\x76","\x63\x75\x72\x72\x65\x6E\x74\x58","\x63\x75\x72\x72\x65\x6E\x74\x59","\x64\x72\x61\x67\x48\x61\x6E\x64\x6C\x65\x72","\x6D\x78\x52\x75\x62\x62\x65\x72\x62\x61\x6E\x64","\x73\x69\x6E\x67\x6C\x65\x53\x69\x7A\x65\x72","\x61\x6C\x6C\x6F\x77\x48\x61\x6E\x64\x6C\x65\x42\x6F\x75\x6E\x64\x73\x43\x68\x65\x63\x6B","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x52\x61\x73\x74\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x42\x6F\x75\x6E\x64\x73","\x63\x72\x65\x61\x74\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x53\x68\x61\x70\x65","\x73\x69\x7A\x65\x72\x73","\x6E\x2D\x72\x65\x73\x69\x7A\x65","\x6E\x65\x2D\x72\x65\x73\x69\x7A\x65","\x77\x2D\x72\x65\x73\x69\x7A\x65","\x65\x2D\x72\x65\x73\x69\x7A\x65","\x73\x77\x2D\x72\x65\x73\x69\x7A\x65","\x73\x2D\x72\x65\x73\x69\x7A\x65","\x73\x65\x2D\x72\x65\x73\x69\x7A\x65","\x6C\x61\x62\x65\x6C\x53\x68\x61\x70\x65","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x53\x68\x61\x70\x65","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6C\x6F\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x53\x74\x72\x6F\x6B\x65\x57\x69\x64\x74\x68","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x44\x61\x73\x68\x65\x64","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x44\x41\x53\x48\x45\x44","\x63\x72\x65\x61\x74\x65\x53\x69\x7A\x65\x72\x53\x68\x61\x70\x65","\x69\x73\x53\x69\x7A\x65\x72\x56\x69\x73\x69\x62\x6C\x65","\x52\x4F\x54\x41\x54\x49\x4F\x4E\x5F\x48\x41\x4E\x44\x4C\x45","\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x6D\x6F\x76\x65\x53\x69\x7A\x65\x72\x54\x6F","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45","\x70\x72\x65\x76\x69\x65\x77","\x63\x75\x72\x72\x65\x6E\x74\x41\x6C\x70\x68\x61","\x61\x74\x61\x6E","\x75\x6E\x69\x6F\x6E","\x72\x6F\x74\x61\x74\x65\x43\x65\x6C\x6C","\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64\x72\x65\x6E","\x62\x65\x6E\x64\x73","\x72\x65\x6D\x6F\x76\x65\x45\x6E\x61\x62\x6C\x65\x64","\x73\x6E\x61\x70\x54\x6F\x54\x65\x72\x6D\x69\x6E\x61\x6C\x73","\x61\x62\x73\x70\x6F\x69\x6E\x74\x73","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x50\x6F\x69\x6E\x74\x73","\x69\x73\x41\x64\x64\x50\x6F\x69\x6E\x74\x45\x76\x65\x6E\x74","\x61\x64\x64\x50\x6F\x69\x6E\x74","\x63\x72\x65\x61\x74\x65\x42\x65\x6E\x64\x73","\x69\x6E\x69\x74\x42\x65\x6E\x64","\x43\x55\x52\x53\x4F\x52\x5F\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45","\x69\x73\x52\x65\x6D\x6F\x76\x65\x50\x6F\x69\x6E\x74\x45\x76\x65\x6E\x74","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x44\x41\x53\x48\x45\x44","\x69\x73\x48\x61\x6E\x64\x6C\x65\x56\x69\x73\x69\x62\x6C\x65","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x53\x68\x61\x70\x65","\x69\x73\x48\x61\x6E\x64\x6C\x65\x45\x6E\x61\x62\x6C\x65\x64","\x43\x55\x52\x53\x4F\x52\x5F\x42\x45\x4E\x44\x5F\x48\x41\x4E\x44\x4C\x45","\x72\x65\x6D\x6F\x76\x65\x50\x6F\x69\x6E\x74","\x69\x73\x54\x61\x72\x67\x65\x74","\x69\x73\x4C\x61\x62\x65\x6C","\x63\x6C\x6F\x6E\x65\x50\x72\x65\x76\x69\x65\x77\x53\x74\x61\x74\x65","\x67\x65\x74\x53\x6E\x61\x70\x54\x6F\x54\x65\x72\x6D\x69\x6E\x61\x6C\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x67\x65\x74\x50\x72\x65\x76\x69\x65\x77\x54\x65\x72\x6D\x69\x6E\x61\x6C\x53\x74\x61\x74\x65","\x67\x65\x74\x50\x72\x65\x76\x69\x65\x77\x50\x6F\x69\x6E\x74\x73","\x75\x70\x64\x61\x74\x65\x50\x72\x65\x76\x69\x65\x77\x53\x74\x61\x74\x65","\x73\x65\x74\x50\x72\x65\x76\x69\x65\x77\x43\x6F\x6C\x6F\x72","\x6D\x6F\x76\x65\x4C\x61\x62\x65\x6C","\x63\x68\x61\x6E\x67\x65\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x63\x68\x61\x6E\x67\x65\x50\x6F\x69\x6E\x74\x73","\x61\x64\x64\x50\x6F\x69\x6E\x74\x41\x74","\x66\x69\x6E\x64\x4E\x65\x61\x72\x65\x73\x74\x53\x65\x67\x6D\x65\x6E\x74","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x69\x6C\x6C\x43\x6F\x6C\x6F\x72","\x4C\x4F\x43\x4B\x45\x44\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x43\x4F\x4E\x4E\x45\x43\x54\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x72\x65\x64\x72\x61\x77\x49\x6E\x6E\x65\x72\x42\x65\x6E\x64\x73","\x66\x6C\x69\x70\x45\x6E\x61\x62\x6C\x65\x64","\x64\x6F\x75\x62\x6C\x65\x43\x6C\x69\x63\x6B\x4F\x72\x69\x65\x6E\x74\x61\x74\x69\x6F\x6E\x52\x65\x73\x6F\x75\x72\x63\x65","\x64\x6F\x75\x62\x6C\x65\x43\x6C\x69\x63\x6B\x4F\x72\x69\x65\x6E\x74\x61\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x56\x69\x72\x74\x75\x61\x6C\x42\x65\x6E\x64","\x67\x65\x74\x43\x75\x72\x73\x6F\x72\x46\x6F\x72\x42\x65\x6E\x64","\x45\x44\x47\x45\x53\x54\x59\x4C\x45\x5F\x54\x4F\x50\x54\x4F\x42\x4F\x54\x54\x4F\x4D","\x45\x44\x47\x45\x53\x54\x59\x4C\x45\x5F\x45\x4C\x42\x4F\x57","\x72\x6F\x77\x2D\x72\x65\x73\x69\x7A\x65","\x63\x6F\x6C\x2D\x72\x65\x73\x69\x7A\x65","\x6E\x6F\x72\x6D\x61\x6C\x4B\x65\x79\x73","\x73\x68\x69\x66\x74\x4B\x65\x79\x73","\x63\x6F\x6E\x74\x72\x6F\x6C\x4B\x65\x79\x73","\x63\x6F\x6E\x74\x72\x6F\x6C\x53\x68\x69\x66\x74\x4B\x65\x79\x73","\x6B\x65\x79\x44\x6F\x77\x6E","\x62\x69\x6E\x64\x4B\x65\x79","\x62\x69\x6E\x64\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x4B\x65\x79","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x53\x68\x69\x66\x74\x4B\x65\x79","\x67\x65\x74\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x69\x73\x47\x72\x61\x70\x68\x45\x76\x65\x6E\x74","\x68\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x73\x65\x74\x48\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x6D\x78\x54\x6F\x6F\x6C\x74\x69\x70","\x68\x69\x64\x65\x54\x6F\x6F\x6C\x74\x69\x70","\x73\x74\x61\x74\x65\x53\x6F\x75\x72\x63\x65","\x72\x65\x73\x65\x74\x54\x69\x6D\x65\x72","\x48\x49\x47\x48\x4C\x49\x47\x48\x54\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x72\x65\x70\x61\x69\x6E\x74\x48\x61\x6E\x64\x6C\x65\x72","\x6B\x65\x65\x70\x4F\x6E\x54\x6F\x70","\x64\x72\x61\x77\x48\x69\x67\x68\x6C\x69\x67\x68\x74","\x65\x64\x69\x74\x6F\x72","\x68\x69\x64\x65\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x62\x69\x6E\x64\x41\x63\x74\x69\x6F\x6E","\x63\x6F\x6E\x66\x69\x67","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75","\x63\x72\x65\x61\x74\x65\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73","\x61\x64\x64\x49\x74\x65\x6D\x73","\x69\x66","\x61\x73","\x69\x63\x6F\x6E\x43\x6C\x73","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E","\x73\x65\x70\x61\x72\x61\x74\x6F\x72","\x6E\x6F\x63\x65\x6C\x6C","\x6E\x63\x65\x6C\x6C\x73","\x6E\x6F\x74\x52\x6F\x6F\x74","\x6E\x6F\x6E\x45\x6D\x70\x74\x79","\x65\x78\x70\x61\x6E\x64\x61\x62\x6C\x65","\x63\x6F\x6C\x6C\x61\x70\x73\x61\x62\x6C\x65","\x76\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x65\x6D\x70\x74\x79\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x74\x6F\x6F\x6C\x62\x61\x72","\x69\x6E\x73\x65\x72\x74\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x2F\x73\x65\x70\x61\x72\x61\x74\x6F\x72\x2E\x67\x69\x66","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E\x4F\x70\x74\x69\x6F\x6E","\x73\x65\x74\x4D\x6F\x64\x65","\x61\x64\x64\x50\x72\x6F\x74\x6F\x74\x79\x70\x65","\x69\x6E\x73\x74\x61\x6C\x6C\x44\x72\x6F\x70\x48\x61\x6E\x64\x6C\x65\x72","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x46\x6C\x6F\x77","\x6D\x61\x6B\x65\x44\x72\x61\x67\x67\x61\x62\x6C\x65","\x61\x63\x74\x69\x6F\x6E\x73","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E\x73","\x63\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x56\x61\x6C\x75\x65\x73","\x70\x6F\x70\x75\x70\x48\x61\x6E\x64\x6C\x65\x72","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x47\x72\x61\x70\x68","\x63\x72\x65\x61\x74\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x6B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x63\x6F\x6E\x66\x69\x67\x75\x72\x65","\x63\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x4E\x61\x6D\x65","\x49\x53\x5F\x4C\x4F\x43\x41\x4C","\x63\x72\x65\x61\x74\x65\x53\x65\x73\x73\x69\x6F\x6E","\x2F\x72\x65\x73\x6F\x75\x72\x63\x65\x73\x2F\x65\x64\x69\x74\x6F\x72","\x61\x73\x6B\x5A\x6F\x6F\x6D\x52\x65\x73\x6F\x75\x72\x63\x65","\x61\x73\x6B\x5A\x6F\x6F\x6D","\x6C\x61\x73\x74\x53\x61\x76\x65\x64\x52\x65\x73\x6F\x75\x72\x63\x65","\x6C\x61\x73\x74\x53\x61\x76\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x46\x69\x6C\x65\x52\x65\x73\x6F\x75\x72\x63\x65","\x63\x75\x72\x72\x65\x6E\x74\x46\x69\x6C\x65","\x70\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x74\x61\x73\x6B\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x74\x61\x73\x6B\x73","\x68\x65\x6C\x70\x52\x65\x73\x6F\x75\x72\x63\x65","\x6F\x75\x74\x6C\x69\x6E\x65\x52\x65\x73\x6F\x75\x72\x63\x65","\x64\x62\x6C\x43\x6C\x69\x63\x6B\x41\x63\x74\x69\x6F\x6E","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x52\x65\x71\x75\x69\x72\x65\x64","\x66\x6F\x72\x63\x65\x64\x49\x6E\x73\x65\x72\x74\x69\x6E\x67","\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x64\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x64\x65\x66\x61\x75\x6C\x74\x47\x72\x6F\x75\x70","\x67\x72\x6F\x75\x70\x42\x6F\x72\x64\x65\x72\x53\x69\x7A\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x70\x6F\x73\x74\x50\x61\x72\x61\x6D\x65\x74\x65\x72\x4E\x61\x6D\x65","\x75\x72\x6C\x50\x6F\x73\x74","\x75\x72\x6C\x49\x6D\x61\x67\x65","\x6C\x61\x79\x6F\x75\x74\x44\x69\x61\x67\x72\x61\x6D","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x53\x70\x61\x63\x69\x6E\x67","\x6D\x61\x69\x6E\x74\x61\x69\x6E\x53\x77\x69\x6D\x6C\x61\x6E\x65\x73","\x6C\x61\x79\x6F\x75\x74\x53\x77\x69\x6D\x6C\x61\x6E\x65\x73","\x63\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x49\x6E\x64\x65\x78","\x74\x61\x73\x6B\x73\x57\x69\x6E\x64\x6F\x77\x49\x6D\x61\x67\x65","\x74\x61\x73\x6B\x73\x54\x6F\x70","\x68\x65\x6C\x70\x57\x69\x6E\x64\x6F\x77\x49\x6D\x61\x67\x65","\x75\x72\x6C\x48\x65\x6C\x70","\x68\x65\x6C\x70\x57\x69\x64\x74\x68","\x68\x65\x6C\x70\x48\x65\x69\x67\x68\x74","\x70\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x57\x69\x64\x74\x68","\x70\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x48\x65\x69\x67\x68\x74","\x6D\x6F\x76\x65\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x44\x69\x61\x6C\x6F\x67","\x76\x61\x6C\x69\x64\x61\x74\x69\x6E\x67","\x65\x78\x70\x6F\x72\x74\x49\x6D\x61\x67\x65","\x67\x65\x74\x55\x72\x6C\x49\x6D\x61\x67\x65","\x67\x65\x74\x56\x69\x65\x77\x58\x6D\x6C","\x5F\x62\x6C\x61\x6E\x6B","\x63\x75\x74","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x75\x6E\x67\x72\x6F\x75\x70","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x73\x68\x6F\x77\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x73\x65\x6C\x65\x63\x74\x4E\x6F\x6E\x65","\x74\x6F\x42\x61\x63\x6B","\x74\x6F\x46\x72\x6F\x6E\x74","\x73\x65\x6C\x65\x63\x74\x50\x72\x65\x76\x69\x6F\x75\x73","\x73\x65\x6C\x65\x63\x74\x4E\x65\x78\x74","\x73\x65\x6C\x65\x63\x74\x50\x61\x72\x65\x6E\x74","\x73\x65\x6C\x65\x63\x74\x43\x68\x69\x6C\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65\x41\x6C\x6C","\x65\x78\x70\x61\x6E\x64","\x65\x78\x70\x61\x6E\x64\x41\x6C\x6C","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x4C\x65\x66\x74","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x43\x65\x6E\x74\x65\x72","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x52\x69\x67\x68\x74","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x54\x6F\x70","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x4D\x69\x64\x64\x6C\x65","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73\x42\x6F\x74\x74\x6F\x6D","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x4C\x65\x66\x74","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x43\x65\x6E\x74\x65\x72","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x52\x69\x67\x68\x74","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x54\x6F\x70","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x4D\x69\x64\x64\x6C\x65","\x61\x6C\x69\x67\x6E\x46\x6F\x6E\x74\x42\x6F\x74\x74\x6F\x6D","\x70\x72\x6F\x6D\x70\x74","\x74\x6F\x67\x67\x6C\x65\x54\x61\x73\x6B\x73","\x73\x68\x6F\x77\x54\x61\x73\x6B\x73","\x74\x6F\x67\x67\x6C\x65\x48\x65\x6C\x70","\x73\x68\x6F\x77\x48\x65\x6C\x70","\x74\x6F\x67\x67\x6C\x65\x4F\x75\x74\x6C\x69\x6E\x65","\x73\x68\x6F\x77\x4F\x75\x74\x6C\x69\x6E\x65","\x74\x6F\x67\x67\x6C\x65\x43\x6F\x6E\x73\x6F\x6C\x65","\x72\x65\x73\x65\x74\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x73\x65\x74\x46\x69\x72\x73\x74\x54\x69\x6D\x65","\x63\x6F\x6F\x6B\x69\x65","\x6D\x78\x67\x72\x61\x70\x68\x3D\x73\x65\x65\x6E\x3B\x20\x65\x78\x70\x69\x72\x65\x73\x3D\x46\x72\x69\x2C\x20\x32\x37\x20\x4A\x75\x6C\x20\x32\x30\x30\x31\x20\x30\x32\x3A\x34\x37\x3A\x31\x31\x20\x55\x54\x43\x3B\x20\x70\x61\x74\x68\x3D\x2F","\x43\x61\x6E\x6E\x6F\x74\x20\x65\x78\x65\x63\x75\x74\x65\x20","\x3A\x20","\x43\x61\x6E\x6E\x6F\x74\x20\x66\x69\x6E\x64\x20\x61\x63\x74\x69\x6F\x6E\x20","\x61\x64\x64\x54\x65\x6D\x70\x6C\x61\x74\x65","\x67\x65\x74\x54\x65\x6D\x70\x6C\x61\x74\x65","\x69\x6E\x73\x74\x61\x6C\x6C\x44\x62\x6C\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x55\x6E\x64\x6F\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x44\x72\x69\x6C\x6C\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x43\x68\x61\x6E\x67\x65\x48\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x73\x74\x61\x6C\x6C\x49\x6E\x73\x65\x72\x74\x48\x61\x6E\x64\x6C\x65\x72","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x63\x72\x65\x61\x74\x65\x53\x77\x69\x6D\x6C\x61\x6E\x65\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x4C\x61\x79\x6F\x75\x74\x4D\x61\x6E\x61\x67\x65\x72","\x73\x77\x69\x6D\x6C\x61\x6E\x65\x4C\x61\x79\x6F\x75\x74","\x63\x72\x65\x61\x74\x65\x53\x77\x69\x6D\x6C\x61\x6E\x65\x4C\x61\x79\x6F\x75\x74","\x64\x69\x61\x67\x72\x61\x6D\x4C\x61\x79\x6F\x75\x74","\x63\x72\x65\x61\x74\x65\x44\x69\x61\x67\x72\x61\x6D\x4C\x61\x79\x6F\x75\x74","\x73\x65\x74\x47\x72\x61\x70\x68\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x72\x75\x62\x62\x65\x72\x62\x61\x6E\x64","\x73\x65\x74\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x65\x74\x53\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x74\x6F\x4C\x6F\x63\x61\x6C\x65\x53\x74\x72\x69\x6E\x67","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x65\x74\x54\x69\x74\x6C\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x74\x54\x69\x74\x6C\x65","\x74\x72\x65\x65\x4C\x61\x79\x6F\x75\x74","\x20\x3E\x20","\x67\x65\x74\x52\x6F\x6F\x74\x54\x69\x74\x6C\x65","\x63\x72\x65\x61\x74\x65\x47\x72\x6F\x75\x70","\x72\x65\x61\x64\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C","\x67\x65\x74\x55\x72\x6C\x50\x6F\x73\x74","\x77\x72\x69\x74\x65\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C","\x70\x6F\x73\x74\x44\x69\x61\x67\x72\x61\x6D","\x73\x77\x61\x70\x53\x74\x79\x6C\x65\x73","\x63\x72\x65\x61\x74\x65\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73","\x69\x73\x50\x72\x6F\x70\x65\x72\x74\x69\x65\x73\x56\x69\x73\x69\x62\x6C\x65","\x72\x65\x61\x64\x6F\x6E\x6C\x79","\x49\x44","\x53\x74\x79\x6C\x65","\x63\x72\x65\x61\x74\x65\x54\x61\x73\x6B\x73","\x72\x65\x66\x72\x65\x73\x68\x54\x61\x73\x6B\x73","\x66\x72\x61\x6D\x65\x42\x6F\x72\x64\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65\x43\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x79\x63\x6C\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x69\x73\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x65\x64\x4D\x6F\x76\x69\x6E\x67","\x63\x6F\x64\x65\x63\x73","\x74\x65\x6D\x70\x6C\x61\x74\x65","\x61\x64\x64\x41\x6C\x69\x61\x73","\x61\x6C\x69\x61\x73\x65\x73","\x72\x65\x67\x69\x73\x74\x65\x72","\x65\x6E\x63\x6F\x64\x65\x44\x65\x66\x61\x75\x6C\x74\x73","\x67\x65\x74\x4F\x62\x6A\x65\x63\x74","\x72\x65\x66\x65\x72\x65\x6E\x63\x65","\x67\x65\x74\x43\x6F\x64\x65\x63","\x69\x6D\x70\x6F\x72\x74\x4E\x6F\x64\x65","\x6D\x78\x43\x6F\x64\x65\x63\x2E\x65\x6E\x63\x6F\x64\x65\x3A\x20\x4E\x6F\x20\x63\x6F\x64\x65\x63\x20\x66\x6F\x72\x20","\x43\x61\x6E\x6E\x6F\x74\x20\x64\x65\x63\x6F\x64\x65\x20","\x65\x6E\x63\x6F\x64\x65\x43\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x64\x65\x63","\x64\x65\x63\x6F\x64\x65\x43\x65\x6C\x6C","\x69\x6E\x73\x65\x72\x74\x49\x6E\x74\x6F\x47\x72\x61\x70\x68","\x65\x78\x63\x6C\x75\x64\x65","\x69\x64\x72\x65\x66\x73","\x6D\x61\x70\x70\x69\x6E\x67","\x72\x65\x76\x65\x72\x73\x65","\x63\x6C\x6F\x6E\x65\x54\x65\x6D\x70\x6C\x61\x74\x65","\x67\x65\x74\x46\x69\x65\x6C\x64\x4E\x61\x6D\x65","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65\x4E\x61\x6D\x65","\x69\x73\x45\x78\x63\x6C\x75\x64\x65\x64","\x69\x73\x52\x65\x66\x65\x72\x65\x6E\x63\x65","\x62\x65\x66\x6F\x72\x65\x45\x6E\x63\x6F\x64\x65","\x65\x6E\x63\x6F\x64\x65\x4F\x62\x6A\x65\x63\x74","\x61\x66\x74\x65\x72\x45\x6E\x63\x6F\x64\x65","\x65\x6E\x63\x6F\x64\x65\x56\x61\x6C\x75\x65","\x6D\x78\x4F\x62\x6A\x65\x63\x74\x43\x6F\x64\x65\x63\x2E\x65\x6E\x63\x6F\x64\x65\x3A\x20\x4E\x6F\x20\x49\x44\x20\x66\x6F\x72\x20","\x77\x72\x69\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x77\x72\x69\x74\x65\x50\x72\x69\x6D\x69\x74\x69\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x77\x72\x69\x74\x65\x43\x6F\x6D\x70\x6C\x65\x78\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x54\x6F\x58\x6D\x6C","\x6D\x78\x4F\x62\x6A\x65\x63\x74\x43\x6F\x64\x65\x63\x2E\x65\x6E\x63\x6F\x64\x65\x3A\x20\x4E\x6F\x20\x6E\x6F\x64\x65\x20\x66\x6F\x72\x20","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x46\x72\x6F\x6D\x58\x6D\x6C","\x62\x65\x66\x6F\x72\x65\x44\x65\x63\x6F\x64\x65","\x64\x65\x63\x6F\x64\x65\x4E\x6F\x64\x65","\x61\x66\x74\x65\x72\x44\x65\x63\x6F\x64\x65","\x64\x65\x63\x6F\x64\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x63\x6F\x64\x65\x43\x68\x69\x6C\x64\x72\x65\x6E","\x64\x65\x63\x6F\x64\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6D\x78\x4F\x62\x6A\x65\x63\x74\x43\x6F\x64\x65\x63\x2E\x64\x65\x63\x6F\x64\x65\x3A\x20\x4E\x6F\x20\x6F\x62\x6A\x65\x63\x74\x20\x66\x6F\x72\x20","\x70\x72\x6F\x63\x65\x73\x73\x49\x6E\x63\x6C\x75\x64\x65","\x64\x65\x63\x6F\x64\x65\x43\x68\x69\x6C\x64","\x67\x65\x74\x46\x69\x65\x6C\x64\x54\x65\x6D\x70\x6C\x61\x74\x65","\x61\x64\x64\x4F\x62\x6A\x65\x63\x74\x56\x61\x6C\x75\x65","\x69\x6E\x63\x6C\x75\x64\x65","\x72\x65\x6D\x6F\x76\x65\x57\x68\x69\x74\x65\x73\x70\x61\x63\x65","\x64\x65\x63\x6F\x64\x65\x52\x6F\x6F\x74","\x67\x72\x61\x70\x68\x4C\x69\x73\x74\x65\x6E\x65\x72\x73\x20\x65\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72\x73\x20\x76\x69\x65\x77\x20\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72\x20\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72\x20\x65\x64\x69\x74\x6F\x72\x20\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x6C\x61\x79\x65\x72","\x67\x65\x74\x53\x74\x72\x69\x6E\x67\x56\x61\x6C\x75\x65","\x6D\x78\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74\x43\x6F\x64\x65\x63\x2E\x64\x65\x63\x6F\x64\x65\x3A\x20\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74\x20","\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x20\x74\x6F\x20\x65\x78\x74\x65\x6E\x64","\x70\x72\x65\x73\x73\x65\x64\x49\x63\x6F\x6E","\x6D\x6F\x64\x65","\x74\x6F\x67\x67\x6C\x65","\x2D\x2D\x2D","\x63\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x54\x65\x6D\x70\x6C\x61\x74\x65\x20","\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x6D\x6F\x64\x69\x66\x69\x65\x64\x20\x6C\x61\x73\x74\x53\x6E\x61\x70\x73\x68\x6F\x74\x20\x69\x67\x6E\x6F\x72\x65\x64\x43\x68\x61\x6E\x67\x65\x73\x20\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72\x20\x67\x72\x61\x70\x68\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72\x20\x74\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x41\x72\x72\x61\x79","\x64\x65\x63\x6F\x64\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x73","\x75\x69","\x64\x65\x63\x6F\x64\x65\x55\x69","\x73\x65\x74\x4D\x61\x70\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x72\x65\x73\x6F\x75\x72\x63\x65","\x62\x61\x73\x65\x6E\x61\x6D\x65"];var mxClient={VERSION:_0x763a[0],IS_IE:0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[1]),IS_IE6:0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[4]),IS_QUIRKS:0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[1])&& (null== document[_0x763a[5]]|| 5== document[_0x763a[5]]),VML_PREFIX:_0x763a[6],OFFICE_PREFIX:_0x763a[7],IS_NS:0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[8])&& 0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[1]),IS_OP:0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[9]),IS_OT:0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[10])&& 0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[11])&& 0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[12])&& 0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[13])&& 0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[14])&& 0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[15]),IS_SF:0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[16])&& 0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[17]),IS_GC:0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[17]),IS_MT:0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[18])&& 0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[19])&& 0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[20])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[21])&& 0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[22])&& 0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[23])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[24])&& 0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[25])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[26])&& 0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[27]),IS_SVG:0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[18])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[21])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[28])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[26])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[29])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[30])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[16])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[31])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[9]),NO_FO:0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[19])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[22])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[20])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[23])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[25])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[27])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[32])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[33])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[9])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[1])|| 0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[34]),IS_VML:_0x763a[35]== navigator[_0x763a[37]][_0x763a[36]](),IS_MAC:0< navigator[_0x763a[3]][_0x763a[36]]()[_0x763a[2]](_0x763a[38]),IS_TOUCH:0< navigator[_0x763a[3]][_0x763a[36]]()[_0x763a[2]](_0x763a[39])|| 0< navigator[_0x763a[3]][_0x763a[36]]()[_0x763a[2]](_0x763a[40])|| 0< navigator[_0x763a[3]][_0x763a[36]]()[_0x763a[2]](_0x763a[41])|| 0< navigator[_0x763a[3]][_0x763a[36]]()[_0x763a[2]](_0x763a[42]),IS_LOCAL:0> document[_0x763a[45]][_0x763a[44]][_0x763a[2]](_0x763a[43])&& 0> document[_0x763a[45]][_0x763a[44]][_0x763a[2]](_0x763a[46]),isBrowserSupported:function(){return mxClient[_0x763a[47]]|| mxClient[_0x763a[48]]},link:function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= _0x3536x4|| document;if(mxClient[_0x763a[49]]){_0x3536x4[_0x763a[53]](_0x763a[50]+ _0x3536x2+ _0x763a[51]+ _0x3536x3+ _0x763a[52])}else {var _0x3536x5=_0x3536x4[_0x763a[55]](_0x763a[54]);_0x3536x5[_0x763a[57]](_0x763a[56],_0x3536x2);_0x3536x5[_0x763a[57]](_0x763a[44],_0x3536x3);_0x3536x5[_0x763a[57]](_0x763a[58],_0x763a[59]);_0x3536x5[_0x763a[57]](_0x763a[60],_0x763a[61]);_0x3536x4[_0x763a[64]](_0x763a[63])[0][_0x763a[62]](_0x3536x5)}},include:function(_0x3536x2){document[_0x763a[53]](_0x763a[65]+ _0x3536x2+ _0x763a[66])},dispose:function(){for(var _0x3536x2=0;_0x3536x2< mxEvent[_0x763a[68]][_0x763a[67]];_0x3536x2++){null!= mxEvent[_0x763a[68]][_0x3536x2][_0x763a[69]]&& mxEvent[_0x763a[70]](mxEvent[_0x763a[68]][_0x3536x2])}}};mxClient[_0x763a[71]]&& mxClient[_0x763a[72]]?mxClient[_0x763a[73]]= _0x763a[74]:mxClient[_0x763a[75]]|| mxClient[_0x763a[76]]?mxClient[_0x763a[73]]= _0x763a[77]:mxClient[_0x763a[78]]?mxClient[_0x763a[73]]= _0x763a[79]:mxClient[_0x763a[80]]&& 9<= document[_0x763a[5]]&& (mxClient[_0x763a[73]]= _0x763a[81]);_0x763a[82]== typeof mxLoadResources&& (mxLoadResources= !0);_0x763a[82]== typeof mxResourceExtension&& (mxResourceExtension= _0x763a[83]);_0x763a[82]== typeof mxLoadStylesheets&& (mxLoadStylesheets= !0);_0x763a[82]!= typeof mxBasePath&& 0< mxBasePath[_0x763a[67]]?(_0x763a[84]== mxBasePath[_0x763a[85]](mxBasePath[_0x763a[67]]- 1)&& (mxBasePath= mxBasePath[_0x763a[85]](0,mxBasePath[_0x763a[67]]- 1)),mxClient[_0x763a[86]]= mxBasePath):mxClient[_0x763a[86]]= _0x763a[87];_0x763a[82]!= typeof mxImageBasePath&& 0< mxImageBasePath[_0x763a[67]]?(_0x763a[84]== mxImageBasePath[_0x763a[85]](mxImageBasePath[_0x763a[67]]- 1)&& (mxImageBasePath= mxImageBasePath[_0x763a[85]](0,mxImageBasePath[_0x763a[67]]- 1)),mxClient[_0x763a[88]]= mxImageBasePath):mxClient[_0x763a[88]]= mxClient[_0x763a[86]]+ _0x763a[89];mxClient[_0x763a[90]]= _0x763a[82]!= typeof mxLanguage?mxLanguage:mxClient[_0x763a[80]]?navigator[_0x763a[91]]:navigator[_0x763a[90]];mxClient[_0x763a[92]]= _0x763a[82]!= typeof mxDefaultLanguage?mxDefaultLanguage:_0x763a[93];mxLoadStylesheets&& mxClient[_0x763a[54]](_0x763a[94],mxClient[_0x763a[86]]+ _0x763a[95]);_0x763a[82]!= typeof mxLanguages&& (mxClient[_0x763a[96]]= mxLanguages);if(mxClient[_0x763a[80]]){if(9<= document[_0x763a[5]]){mxClient[_0x763a[47]]= !1,mxClient[_0x763a[48]]= !0}else {8== document[_0x763a[5]]?(document[_0x763a[100]][_0x763a[99]](mxClient.VML_PREFIX,_0x763a[97],_0x763a[98]),document[_0x763a[100]][_0x763a[99]](mxClient.OFFICE_PREFIX,_0x763a[101],_0x763a[98])):(document[_0x763a[100]][_0x763a[99]](mxClient.VML_PREFIX,_0x763a[97]),document[_0x763a[100]][_0x763a[99]](mxClient.OFFICE_PREFIX,_0x763a[101]));var ss=document[_0x763a[102]]();ss[_0x763a[103]]= _0x763a[104];mxLoadStylesheets&& mxClient[_0x763a[54]](_0x763a[94],mxClient[_0x763a[86]]+ _0x763a[105])};window[_0x763a[108]](_0x763a[106],mxClient[_0x763a[107]])};var mxLog={consoleName:_0x763a[109],TRACE:!1,DEBUG:!0,WARN:!0,buffer:_0x763a[110],init:function(){if(null== mxLog[_0x763a[111]]&& null!= document[_0x763a[112]]){var _0x3536x2=mxLog[_0x763a[113]]+ _0x763a[114]+ mxClient[_0x763a[115]],_0x3536x3=document[_0x763a[55]](_0x763a[116]);_0x3536x3[_0x763a[57]](_0x763a[117],_0x763a[118]);_0x3536x3[_0x763a[57]](_0x763a[119],_0x763a[118]);var _0x3536x4=document[_0x763a[55]](_0x763a[120]),_0x3536x5=document[_0x763a[55]](_0x763a[121]),_0x3536x9=document[_0x763a[55]](_0x763a[122]);_0x3536x9[_0x763a[124]][_0x763a[123]]= _0x763a[125];mxLog[_0x763a[126]]= document[_0x763a[55]](_0x763a[126]);mxLog[_0x763a[126]][_0x763a[57]](_0x763a[127],_0x763a[128]);mxLog[_0x763a[126]][_0x763a[124]][_0x763a[119]]= _0x763a[118];mxLog[_0x763a[126]][_0x763a[124]][_0x763a[129]]= _0x763a[130];mxLog[_0x763a[126]][_0x763a[131]]= mxLog[_0x763a[132]];mxLog[_0x763a[126]][_0x763a[124]][_0x763a[117]]= mxClient[_0x763a[133]]&& _0x763a[134]!= document[_0x763a[135]]?_0x763a[136]:_0x763a[118];_0x3536x9[_0x763a[62]](mxLog[_0x763a[126]]);_0x3536x5[_0x763a[62]](_0x3536x9);_0x3536x4[_0x763a[62]](_0x3536x5);_0x3536x5= document[_0x763a[55]](_0x763a[121]);mxLog[_0x763a[122]]= document[_0x763a[55]](_0x763a[122]);mxLog[_0x763a[122]][_0x763a[124]][_0x763a[123]]= _0x763a[125];mxLog[_0x763a[122]][_0x763a[57]](_0x763a[119],_0x763a[137]);_0x3536x5[_0x763a[62]](mxLog[_0x763a[122]]);_0x3536x4[_0x763a[62]](_0x3536x5);_0x3536x3[_0x763a[62]](_0x3536x4);mxLog[_0x763a[140]](_0x763a[138],function(_0x3536x2){mxLog[_0x763a[139]]()});mxLog[_0x763a[140]](_0x763a[141],function(_0x3536x2){_0x3536x2= mxUtils[_0x763a[142]](document[_0x763a[112]]);mxLog[_0x763a[143]](_0x3536x2)});mxLog[_0x763a[140]](_0x763a[144],function(_0x3536x2){mxLog[_0x763a[145]]= !mxLog[_0x763a[145]];mxLog[_0x763a[145]]?mxLog[_0x763a[143]](_0x763a[146]):mxLog[_0x763a[143]](_0x763a[147])});mxLog[_0x763a[140]](_0x763a[148],function(_0x3536x2){try{mxUtils[_0x763a[149]](mxLog[_0x763a[126]][_0x763a[131]])}catch(_0x3536x3){mxUtils[_0x763a[150]](_0x3536x3)}});mxLog[_0x763a[140]](_0x763a[151],function(_0x3536x2){try{mxUtils[_0x763a[152]](mxLog[_0x763a[126]][_0x763a[131]])}catch(_0x3536x3){mxUtils[_0x763a[150]](_0x3536x3)}});mxLog[_0x763a[140]](_0x763a[153],function(_0x3536x2){mxLog[_0x763a[126]][_0x763a[131]]= _0x763a[110]});_0x3536x5= _0x3536x4= 0;_0x763a[154]=== typeof window[_0x763a[155]]?(_0x3536x4= window[_0x763a[156]],_0x3536x5= window[_0x763a[155]]):(_0x3536x4= document[_0x763a[158]][_0x763a[157]]|| document[_0x763a[112]][_0x763a[157]],_0x3536x5= document[_0x763a[112]][_0x763a[159]]);mxLog[_0x763a[111]]= new mxWindow(_0x3536x2,_0x3536x3,Math[_0x763a[160]](0,_0x3536x5- 320),Math[_0x763a[160]](0,_0x3536x4- 210),300,160);mxLog[_0x763a[111]][_0x763a[161]](!0);mxLog[_0x763a[111]][_0x763a[162]](!1);mxLog[_0x763a[111]][_0x763a[163]](!0);mxLog[_0x763a[111]][_0x763a[164]](!0);mxLog[_0x763a[111]][_0x763a[165]]= !1;if((mxClient[_0x763a[133]]|| mxClient[_0x763a[80]])&& !mxClient[_0x763a[76]]&& !mxClient[_0x763a[75]]&& _0x763a[134]!= document[_0x763a[135]]){var _0x3536xa=mxLog[_0x763a[111]][_0x763a[166]](),_0x3536x2=function(_0x3536x2,_0x3536x3){mxLog[_0x763a[126]][_0x763a[124]][_0x763a[119]]= Math[_0x763a[160]](0,_0x3536xa[_0x763a[167]]- 70)+ _0x763a[168]};mxLog[_0x763a[111]][_0x763a[169]](mxEvent.RESIZE_END,_0x3536x2);mxLog[_0x763a[111]][_0x763a[169]](mxEvent.MAXIMIZE,_0x3536x2);mxLog[_0x763a[111]][_0x763a[169]](mxEvent.NORMALIZE,_0x3536x2);mxLog[_0x763a[126]][_0x763a[124]][_0x763a[119]]= _0x763a[170]}}},info:function(){mxLog[_0x763a[171]](mxUtils.toString(navigator))},addButton:function(_0x3536x2,_0x3536x3){var _0x3536x4=document[_0x763a[55]](_0x763a[172]);mxUtils[_0x763a[53]](_0x3536x4,_0x3536x2);mxEvent[_0x763a[169]](_0x3536x4,_0x763a[173],_0x3536x3);mxLog[_0x763a[122]][_0x763a[62]](_0x3536x4)},isVisible:function(){return null!= mxLog[_0x763a[111]]?mxLog[_0x763a[111]][_0x763a[174]]():!1},show:function(){mxLog[_0x763a[175]](!0)},setVisible:function(_0x3536x2){null== mxLog[_0x763a[111]]&& mxLog[_0x763a[176]]();null!= mxLog[_0x763a[111]]&& mxLog[_0x763a[111]][_0x763a[175]](_0x3536x2)},enter:function(_0x3536x2){if(mxLog[_0x763a[145]]){return mxLog[_0x763a[171]](_0x763a[177]+ _0x3536x2),( new Date)[_0x763a[178]]()}},leave:function(_0x3536x2,_0x3536x3){if(mxLog[_0x763a[145]]){var _0x3536x4=0!= _0x3536x3?_0x763a[179]+ (( new Date)[_0x763a[178]]()- _0x3536x3)+ _0x763a[180]:_0x763a[110];mxLog[_0x763a[171]](_0x763a[181]+ _0x3536x2+ _0x3536x4)}},debug:function(){mxLog[_0x763a[182]]&& mxLog[_0x763a[171]][_0x763a[183]](this,arguments)},warn:function(){mxLog[_0x763a[184]]&& mxLog[_0x763a[171]][_0x763a[183]](this,arguments)},write:function(){for(var _0x3536x2=_0x763a[110],_0x3536x3=0;_0x3536x3< arguments[_0x763a[67]];_0x3536x3++){_0x3536x2+= arguments[_0x3536x3],_0x3536x3< arguments[_0x763a[67]]- 1&& (_0x3536x2+= _0x763a[185])};null!= mxLog[_0x763a[126]]?(mxLog[_0x763a[126]][_0x763a[131]]+= _0x3536x2,0<= navigator[_0x763a[3]][_0x763a[2]](_0x763a[186])&& (mxLog[_0x763a[126]][_0x763a[124]][_0x763a[187]]= _0x763a[188],mxLog[_0x763a[126]][_0x763a[124]][_0x763a[187]]= _0x763a[189]),mxLog[_0x763a[126]][_0x763a[190]]= mxLog[_0x763a[126]][_0x763a[191]]):mxLog[_0x763a[132]]+= _0x3536x2},writeln:function(){for(var _0x3536x2=_0x763a[110],_0x3536x3=0;_0x3536x3< arguments[_0x763a[67]];_0x3536x3++){_0x3536x2+= arguments[_0x3536x3],_0x3536x3< arguments[_0x763a[67]]- 1&& (_0x3536x2+= _0x763a[185])};mxLog[_0x763a[53]](_0x3536x2+ _0x763a[192])}},mxObjectIdentity={FIELD_NAME:_0x763a[193],counter:0,get:function(_0x3536x2){if(_0x763a[194]== typeof _0x3536x2&& null== _0x3536x2[mxObjectIdentity[_0x763a[195]]]){var _0x3536x3=mxUtils[_0x763a[197]](_0x3536x2[_0x763a[196]]);_0x3536x2[mxObjectIdentity[_0x763a[195]]]= _0x3536x3+ _0x763a[198]+ mxObjectIdentity[_0x763a[199]]++};return _0x3536x2[mxObjectIdentity[_0x763a[195]]]},clear:function(_0x3536x2){_0x763a[194]== typeof _0x3536x2&& delete _0x3536x2[mxObjectIdentity[_0x763a[195]]]}};function mxDictionary(){this[_0x763a[200]]()}mxDictionary[_0x763a[202]][_0x763a[201]]= null;mxDictionary[_0x763a[202]][_0x763a[200]]= function(){this[_0x763a[201]]= {}};mxDictionary[_0x763a[202]][_0x763a[203]]= function(_0x3536x2){_0x3536x2= mxObjectIdentity[_0x763a[203]](_0x3536x2);return this[_0x763a[201]][_0x3536x2]};mxDictionary[_0x763a[202]][_0x763a[204]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=mxObjectIdentity[_0x763a[203]](_0x3536x2),_0x3536x5=this[_0x763a[201]][_0x3536x4];this[_0x763a[201]][_0x3536x4]= _0x3536x3;return _0x3536x5};mxDictionary[_0x763a[202]][_0x763a[205]]= function(_0x3536x2){_0x3536x2= mxObjectIdentity[_0x763a[203]](_0x3536x2);var _0x3536x3=this[_0x763a[201]][_0x3536x2];delete this[_0x763a[201]][_0x3536x2];return _0x3536x3};mxDictionary[_0x763a[202]][_0x763a[206]]= function(){var _0x3536x2=[],_0x3536x3;for(_0x3536x3 in this[_0x763a[201]]){_0x3536x2[_0x763a[207]](_0x3536x3)};return _0x3536x2};mxDictionary[_0x763a[202]][_0x763a[208]]= function(){var _0x3536x2=[],_0x3536x3;for(_0x3536x3 in this[_0x763a[201]]){_0x3536x2[_0x763a[207]](this[_0x763a[201]][_0x3536x3])};return _0x3536x2};mxDictionary[_0x763a[202]][_0x763a[209]]= function(_0x3536x2){for(var _0x3536x3 in this[_0x763a[201]]){_0x3536x2(_0x3536x3,this[_0x763a[201]][_0x3536x3])}};var mxResources={resources:[],extension:mxResourceExtension,resourcesEncoded:!1,loadDefaultBundle:!0,loadSpecialBundle:!0,isLanguageSupported:function(_0x3536x2){return null!= mxClient[_0x763a[96]]?0<= mxUtils[_0x763a[2]](mxClient[_0x763a[96]],_0x3536x2):!0},getDefaultBundle:function(_0x3536x2,_0x3536x3){return mxResources[_0x763a[210]]|| !mxResources[_0x763a[211]](_0x3536x3)?_0x3536x2+ mxResources[_0x763a[212]]:null},getSpecialBundle:function(_0x3536x2,_0x3536x3){if(null== mxClient[_0x763a[96]]|| !this[_0x763a[211]](_0x3536x3)){var _0x3536x4=_0x3536x3[_0x763a[2]](_0x763a[213]);0< _0x3536x4&& (_0x3536x3= _0x3536x3[_0x763a[85]](0,_0x3536x4))};return mxResources[_0x763a[214]]&& mxResources[_0x763a[211]](_0x3536x3)&& _0x3536x3!= mxClient[_0x763a[92]]?_0x3536x2+ _0x763a[215]+ _0x3536x3+ mxResources[_0x763a[212]]:null},add:function(_0x3536x2,_0x3536x3){_0x3536x3= null!= _0x3536x3?_0x3536x3:mxClient[_0x763a[90]][_0x763a[216]]();if(_0x3536x3!= mxConstants[_0x763a[217]]){var _0x3536x4=mxResources[_0x763a[218]](_0x3536x2,_0x3536x3);if(null!= _0x3536x4){try{var _0x3536x5=mxUtils[_0x763a[219]](_0x3536x4);_0x3536x5[_0x763a[220]]()&& mxResources[_0x763a[222]](_0x3536x5[_0x763a[221]]())}catch(e){}};_0x3536x4= mxResources[_0x763a[223]](_0x3536x2,_0x3536x3);if(null!= _0x3536x4){try{_0x3536x5= mxUtils[_0x763a[219]](_0x3536x4),_0x3536x5[_0x763a[220]]()&& mxResources[_0x763a[222]](_0x3536x5[_0x763a[221]]())}catch(f){}}}},parse:function(_0x3536x2){if(null!= _0x3536x2){_0x3536x2= _0x3536x2[_0x763a[224]](_0x763a[192]);for(var _0x3536x3=0;_0x3536x3< _0x3536x2[_0x763a[67]];_0x3536x3++){if(_0x763a[198]!= _0x3536x2[_0x3536x3][_0x763a[225]](0)){var _0x3536x4=_0x3536x2[_0x3536x3][_0x763a[2]](_0x763a[226]);if(0< _0x3536x4){var _0x3536x5=_0x3536x2[_0x3536x3][_0x763a[85]](0,_0x3536x4),_0x3536x9=_0x3536x2[_0x3536x3][_0x763a[67]];13== _0x3536x2[_0x3536x3][_0x763a[227]](_0x3536x9- 1)&& _0x3536x9--;_0x3536x4= _0x3536x2[_0x3536x3][_0x763a[85]](_0x3536x4+ 1,_0x3536x9);this[_0x763a[228]]?(_0x3536x4= _0x3536x4[_0x763a[230]](/\\(?=u[a-fA-F\d]{4})/g,_0x763a[229]),mxResources[_0x763a[231]][_0x3536x5]= unescape(_0x3536x4)):mxResources[_0x763a[231]][_0x3536x5]= _0x3536x4}}}}},get:function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x2= mxResources[_0x763a[231]][_0x3536x2];null== _0x3536x2&& (_0x3536x2= _0x3536x4);if(null!= _0x3536x2&& null!= _0x3536x3){_0x3536x4= [];for(var _0x3536x5=null,_0x3536x9=0;_0x3536x9< _0x3536x2[_0x763a[67]];_0x3536x9++){var _0x3536xa=_0x3536x2[_0x763a[225]](_0x3536x9);_0x763a[232]== _0x3536xa?_0x3536x5= _0x763a[110]:null!= _0x3536x5&& _0x763a[233]== _0x3536xa?(_0x3536x5= parseInt(_0x3536x5)- 1,0<= _0x3536x5&& _0x3536x5< _0x3536x3[_0x763a[67]]&& _0x3536x4[_0x763a[207]](_0x3536x3[_0x3536x5]),_0x3536x5= null):null!= _0x3536x5?_0x3536x5+= _0x3536xa:_0x3536x4[_0x763a[207]](_0x3536xa)};_0x3536x2= _0x3536x4[_0x763a[234]](_0x763a[110])};return _0x3536x2}};function mxPoint(_0x3536x2,_0x3536x3){this[_0x763a[235]]= null!= _0x3536x2?_0x3536x2:0;this[_0x763a[236]]= null!= _0x3536x3?_0x3536x3:0}mxPoint[_0x763a[202]][_0x763a[235]]= null;mxPoint[_0x763a[202]][_0x763a[236]]= null;mxPoint[_0x763a[202]][_0x763a[237]]= function(_0x3536x2){return _0x3536x2[_0x763a[235]]== this[_0x763a[235]]&& _0x3536x2[_0x763a[236]]== this[_0x763a[236]]};mxPoint[_0x763a[202]][_0x763a[238]]= function(){return mxUtils[_0x763a[238]](this)};function mxRectangle(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){mxPoint[_0x763a[239]](this,_0x3536x2,_0x3536x3);this[_0x763a[117]]= null!= _0x3536x4?_0x3536x4:0;this[_0x763a[119]]= null!= _0x3536x5?_0x3536x5:0}mxRectangle[_0x763a[202]]= new mxPoint;mxRectangle[_0x763a[202]][_0x763a[196]]= mxRectangle;mxRectangle[_0x763a[202]][_0x763a[117]]= null;mxRectangle[_0x763a[202]][_0x763a[119]]= null;mxRectangle[_0x763a[202]][_0x763a[240]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){this[_0x763a[235]]= _0x3536x2;this[_0x763a[236]]= _0x3536x3;this[_0x763a[117]]= _0x3536x4;this[_0x763a[119]]= _0x3536x5};mxRectangle[_0x763a[202]][_0x763a[241]]= function(){return this[_0x763a[235]]+ this[_0x763a[117]]/ 2};mxRectangle[_0x763a[202]][_0x763a[242]]= function(){return this[_0x763a[236]]+ this[_0x763a[119]]/ 2};mxRectangle[_0x763a[202]][_0x763a[99]]= function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=Math[_0x763a[243]](this[_0x763a[235]],_0x3536x2[_0x763a[235]]),_0x3536x4=Math[_0x763a[243]](this[_0x763a[236]],_0x3536x2[_0x763a[236]]),_0x3536x5=Math[_0x763a[160]](this[_0x763a[235]]+ this[_0x763a[117]],_0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]);_0x3536x2= Math[_0x763a[160]](this[_0x763a[236]]+ this[_0x763a[119]],_0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]);this[_0x763a[235]]= _0x3536x3;this[_0x763a[236]]= _0x3536x4;this[_0x763a[117]]= _0x3536x5- _0x3536x3;this[_0x763a[119]]= _0x3536x2- _0x3536x4}};mxRectangle[_0x763a[202]][_0x763a[244]]= function(_0x3536x2){this[_0x763a[235]]-= _0x3536x2;this[_0x763a[236]]-= _0x3536x2;this[_0x763a[117]]+= 2* _0x3536x2;this[_0x763a[119]]+= 2* _0x3536x2};mxRectangle[_0x763a[202]][_0x763a[245]]= function(){return new mxPoint(this[_0x763a[235]],this[_0x763a[236]])};mxRectangle[_0x763a[202]][_0x763a[237]]= function(_0x3536x2){return _0x3536x2[_0x763a[235]]== this[_0x763a[235]]&& _0x3536x2[_0x763a[236]]== this[_0x763a[236]]&& _0x3536x2[_0x763a[117]]== this[_0x763a[117]]&& _0x3536x2[_0x763a[119]]== this[_0x763a[119]]};var mxEffects={animateChanges:function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=0,_0x3536x9=function(){for(var _0x3536x12=!1,_0x3536x13=0;_0x3536x13< _0x3536x3[_0x763a[67]];_0x3536x13++){var _0x3536x14=_0x3536x3[_0x3536x13];if(_0x3536x14 instanceof mxGeometryChange|| _0x3536x14 instanceof mxTerminalChange|| _0x3536x14 instanceof mxValueChange|| _0x3536x14 instanceof mxChildChange|| _0x3536x14 instanceof mxStyleChange){var _0x3536x15=_0x3536x2[_0x763a[249]]()[_0x763a[248]](_0x3536x14[_0x763a[246]]|| _0x3536x14[_0x763a[247]],!1);if(null!= _0x3536x15){if(_0x3536x12= !0,_0x3536x14[_0x763a[196]]!= mxGeometryChange|| _0x3536x2[_0x763a[251]][_0x763a[250]](_0x3536x14[_0x763a[246]])){mxUtils[_0x763a[254]](_0x3536x15[_0x763a[253]][_0x763a[252]],100* _0x3536x5/ 10)}else {var _0x3536x16=_0x3536x2[_0x763a[249]]()[_0x763a[255]],_0x3536x17=(_0x3536x14[_0x763a[256]][_0x763a[235]]- _0x3536x14[_0x763a[257]][_0x763a[235]])* _0x3536x16,_0x3536x18=(_0x3536x14[_0x763a[256]][_0x763a[236]]- _0x3536x14[_0x763a[257]][_0x763a[236]])* _0x3536x16,_0x3536x19=(_0x3536x14[_0x763a[256]][_0x763a[117]]- _0x3536x14[_0x763a[257]][_0x763a[117]])* _0x3536x16,_0x3536x16=(_0x3536x14[_0x763a[256]][_0x763a[119]]- _0x3536x14[_0x763a[257]][_0x763a[119]])* _0x3536x16;0== _0x3536x5?(_0x3536x15[_0x763a[235]]-= _0x3536x17,_0x3536x15[_0x763a[236]]-= _0x3536x18,_0x3536x15[_0x763a[117]]-= _0x3536x19,_0x3536x15[_0x763a[119]]-= _0x3536x16):(_0x3536x15[_0x763a[235]]+= _0x3536x17/ 10,_0x3536x15[_0x763a[236]]+= _0x3536x18/ 10,_0x3536x15[_0x763a[117]]+= _0x3536x19/ 10,_0x3536x15[_0x763a[119]]+= _0x3536x16/ 10);_0x3536x2[_0x763a[259]][_0x763a[258]](_0x3536x15);mxEffects[_0x763a[260]](_0x3536x2,_0x3536x14[_0x763a[246]],100* _0x3536x5/ 10)}}}};10> _0x3536x5&& _0x3536x12?(_0x3536x5++,window[_0x763a[261]](_0x3536x9,_0x3536xa)):null!= _0x3536x4&& _0x3536x4()},_0x3536xa=30;_0x3536x9()},cascadeOpacity:function(_0x3536x2,_0x3536x3,_0x3536x4){for(var _0x3536x5=_0x3536x2[_0x763a[251]][_0x763a[262]](_0x3536x3),_0x3536x9=0;_0x3536x9< _0x3536x5;_0x3536x9++){var _0x3536xa=_0x3536x2[_0x763a[251]][_0x763a[263]](_0x3536x3,_0x3536x9),_0x3536x12=_0x3536x2[_0x763a[249]]()[_0x763a[248]](_0x3536xa);null!= _0x3536x12&& (mxUtils[_0x763a[254]](_0x3536x12[_0x763a[253]][_0x763a[252]],_0x3536x4),mxEffects[_0x763a[260]](_0x3536x2,_0x3536xa,_0x3536x4))};_0x3536x3= _0x3536x2[_0x763a[251]][_0x763a[264]](_0x3536x3);if(null!= _0x3536x3){for(_0x3536x9= 0;_0x3536x9< _0x3536x3[_0x763a[67]];_0x3536x9++){_0x3536x5= _0x3536x2[_0x763a[249]]()[_0x763a[248]](_0x3536x3[_0x3536x9]),null!= _0x3536x5&& mxUtils[_0x763a[254]](_0x3536x5[_0x763a[253]][_0x763a[252]],_0x3536x4)}}},fadeOut:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536x5= _0x3536x5|| 40;_0x3536x9= _0x3536x9|| 30;var _0x3536x12=_0x3536x3|| 100;mxUtils[_0x763a[254]](_0x3536x2,_0x3536x12);if(_0x3536xa|| null== _0x3536xa){var _0x3536x13=function(){_0x3536x12= Math[_0x763a[160]](_0x3536x12- _0x3536x5,0);mxUtils[_0x763a[254]](_0x3536x2,_0x3536x12);0< _0x3536x12?window[_0x763a[261]](_0x3536x13,_0x3536x9):(_0x3536x2[_0x763a[124]][_0x763a[187]]= _0x763a[188],_0x3536x4&& _0x3536x2[_0x763a[265]]&& _0x3536x2[_0x763a[265]][_0x763a[266]](_0x3536x2))};window[_0x763a[261]](_0x3536x13,_0x3536x9)}else {_0x3536x2[_0x763a[124]][_0x763a[187]]= _0x763a[188],_0x3536x4&& _0x3536x2[_0x763a[265]]&& _0x3536x2[_0x763a[265]][_0x763a[266]](_0x3536x2)}}},mxUtils={errorResource:_0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[267]:_0x763a[110],closeResource:_0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[268]:_0x763a[110],errorImage:mxClient[_0x763a[88]]+ _0x763a[269],removeCursors:function(_0x3536x2){null!= _0x3536x2[_0x763a[124]]&& (_0x3536x2[_0x763a[124]][_0x763a[270]]= _0x763a[110]);_0x3536x2= _0x3536x2[_0x763a[271]];if(null!= _0x3536x2){for(var _0x3536x3=_0x3536x2[_0x763a[67]],_0x3536x4=0;_0x3536x4< _0x3536x3;_0x3536x4+= 1){mxUtils[_0x763a[272]](_0x3536x2[_0x3536x4])}}},getCurrentStyle:function(){return mxClient[_0x763a[80]]?function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[273]]:null}:function(_0x3536x2){return null!= _0x3536x2?window[_0x763a[274]](_0x3536x2,_0x763a[110]):null}}(),hasScrollbars:function(_0x3536x2){_0x3536x2= mxUtils[_0x763a[275]](_0x3536x2);return null!= _0x3536x2&& (_0x763a[276]== _0x3536x2[_0x763a[277]]|| _0x763a[278]== _0x3536x2[_0x763a[277]])},bind:function(_0x3536x2,_0x3536x3){return function(){return _0x3536x3[_0x763a[183]](_0x3536x2,arguments)}},eval:function(_0x3536x2){var _0x3536x3=null;if(0<= _0x3536x2[_0x763a[2]](_0x763a[279])){try{eval(_0x763a[280]+ _0x3536x2),_0x3536x3= _mxJavaScriptExpression,_mxJavaScriptExpression= null}catch(c){mxLog[_0x763a[283]](c[_0x763a[281]]+ _0x763a[282]+ _0x3536x2)}}else {try{_0x3536x3= eval(_0x3536x2)}catch(d){mxLog[_0x763a[283]](d[_0x763a[281]]+ _0x763a[282]+ _0x3536x2)}};return _0x3536x3},findNode:function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=_0x3536x2[_0x763a[284]](_0x3536x3);if(null!= _0x3536x5&& _0x3536x5== _0x3536x4){return _0x3536x2};for(_0x3536x2= _0x3536x2[_0x763a[285]];null!= _0x3536x2;){_0x3536x5= mxUtils[_0x763a[286]](_0x3536x2,_0x3536x3,_0x3536x4);if(null!= _0x3536x5){return _0x3536x5};_0x3536x2= _0x3536x2[_0x763a[287]]};return null},findNodeByAttribute:function(){return 9<= document[_0x763a[5]]?function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=null;if(null!= _0x3536x2){if(_0x3536x2[_0x763a[288]]== mxConstants[_0x763a[289]]&& _0x3536x2[_0x763a[284]](_0x3536x3)== _0x3536x4){_0x3536x5= _0x3536x2}else {for(_0x3536x2= _0x3536x2[_0x763a[285]];null!= _0x3536x2&& null== _0x3536x5;){_0x3536x5= mxUtils[_0x763a[290]](_0x3536x2,_0x3536x3,_0x3536x4),_0x3536x2= _0x3536x2[_0x763a[287]]}}};return _0x3536x5}:mxClient[_0x763a[80]]?function(_0x3536x2,_0x3536x3,_0x3536x4){return null== _0x3536x2?null:_0x3536x2[_0x763a[295]][_0x763a[294]](_0x763a[291]+ _0x3536x3+ _0x763a[292]+ _0x3536x4+ _0x763a[293])}:function(_0x3536x2,_0x3536x3,_0x3536x4){return null== _0x3536x2?null:_0x3536x2[_0x763a[295]][_0x763a[297]](_0x763a[291]+ _0x3536x3+ _0x763a[292]+ _0x3536x4+ _0x763a[293],_0x3536x2[_0x763a[295]],null,XPathResult.ANY_TYPE,null)[_0x763a[296]]()}}(),getFunctionName:function(_0x3536x2){var _0x3536x3=null;if(null!= _0x3536x2){if(null!= _0x3536x2[_0x763a[298]]){_0x3536x3= _0x3536x2[_0x763a[298]]}else {_0x3536x2= _0x3536x2.toString();for(_0x3536x3= 9;_0x763a[185]== _0x3536x2[_0x763a[225]](_0x3536x3);){_0x3536x3++};var _0x3536x4=_0x3536x2[_0x763a[2]](_0x763a[299],_0x3536x3),_0x3536x3=_0x3536x2[_0x763a[85]](_0x3536x3,_0x3536x4)}};return _0x3536x3},indexOf:function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2&& null!= _0x3536x3){for(var _0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){if(_0x3536x2[_0x3536x4]== _0x3536x3){return _0x3536x4}}};return -1},remove:function(_0x3536x2,_0x3536x3){var _0x3536x4=null;if(_0x763a[194]== typeof _0x3536x3){for(var _0x3536x5=mxUtils[_0x763a[2]](_0x3536x3,_0x3536x2);0<= _0x3536x5;){_0x3536x3[_0x763a[300]](_0x3536x5,1),_0x3536x4= _0x3536x2,_0x3536x5= mxUtils[_0x763a[2]](_0x3536x3,_0x3536x2)}};for(var _0x3536x9 in _0x3536x3){_0x3536x3[_0x3536x9]== _0x3536x2&& ( delete _0x3536x3[_0x3536x9],_0x3536x4= _0x3536x2)};return _0x3536x4},isNode:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){return null!= _0x3536x2&& !isNaN(_0x3536x2[_0x763a[288]])&& (null== _0x3536x3|| _0x3536x2[_0x763a[301]][_0x763a[216]]()== _0x3536x3[_0x763a[216]]())?null== _0x3536x4|| _0x3536x2[_0x763a[284]](_0x3536x4)== _0x3536x5:!1},getChildNodes:function(_0x3536x2,_0x3536x3){_0x3536x3= _0x3536x3|| mxConstants[_0x763a[289]];for(var _0x3536x4=[],_0x3536x5=_0x3536x2[_0x763a[285]];null!= _0x3536x5;){_0x3536x5[_0x763a[288]]== _0x3536x3&& _0x3536x4[_0x763a[207]](_0x3536x5),_0x3536x5= _0x3536x5[_0x763a[287]]};return _0x3536x4},createXmlDocument:function(){var _0x3536x2=null;document[_0x763a[302]]&& document[_0x763a[302]][_0x763a[303]]?_0x3536x2= document[_0x763a[302]][_0x763a[303]](_0x763a[110],_0x763a[110],null):window[_0x763a[304]]&& (_0x3536x2= new ActiveXObject(_0x763a[305]));return _0x3536x2},parseXml:function(){return mxClient[_0x763a[80]]&& (_0x763a[82]=== typeof document[_0x763a[5]]|| 9> document[_0x763a[5]])?function(_0x3536x2){var _0x3536x3=mxUtils[_0x763a[306]]();_0x3536x3[_0x763a[307]]= _0x763a[308];_0x3536x3[_0x763a[309]](_0x3536x2);return _0x3536x3}:function(_0x3536x2){return ( new DOMParser)[_0x763a[311]](_0x3536x2,_0x763a[310])}}(),clearSelection:function(){if(document[_0x763a[312]]){return function(){document[_0x763a[312]][_0x763a[313]]()}};if(window[_0x763a[314]]){return function(){window[_0x763a[314]]()[_0x763a[315]]()}}}(),getPrettyXml:function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=[];if(null!= _0x3536x2){if(_0x3536x3= _0x3536x3|| _0x763a[316],_0x3536x4= _0x3536x4|| _0x763a[110],_0x3536x2[_0x763a[288]]== mxConstants[_0x763a[317]]){_0x3536x5[_0x763a[207]](_0x3536x2[_0x763a[318]])}else {_0x3536x5[_0x763a[207]](_0x3536x4+ _0x763a[319]+ _0x3536x2[_0x763a[301]]);var _0x3536x9=_0x3536x2[_0x763a[320]];if(null!= _0x3536x9){for(var _0x3536xa=0;_0x3536xa< _0x3536x9[_0x763a[67]];_0x3536xa++){var _0x3536x12=mxUtils[_0x763a[321]](_0x3536x9[_0x3536xa][_0x763a[318]]);_0x3536x5[_0x763a[207]](_0x763a[185]+ _0x3536x9[_0x3536xa][_0x763a[301]]+ _0x763a[322]+ _0x3536x12+ _0x763a[323])}};_0x3536x9= _0x3536x2[_0x763a[285]];if(null!= _0x3536x9){for(_0x3536x5[_0x763a[207]](_0x763a[324]);null!= _0x3536x9;){_0x3536x5[_0x763a[207]](mxUtils[_0x763a[325]](_0x3536x9,_0x3536x3,_0x3536x4+ _0x3536x3)),_0x3536x9= _0x3536x9[_0x763a[287]]};_0x3536x5[_0x763a[207]](_0x3536x4+ _0x763a[326]+ _0x3536x2[_0x763a[301]]+ _0x763a[324])}else {_0x3536x5[_0x763a[207]](_0x763a[327])}}};return _0x3536x5[_0x763a[234]](_0x763a[110])},removeWhitespace:function(_0x3536x2,_0x3536x3){for(var _0x3536x4=_0x3536x3?_0x3536x2[_0x763a[328]]:_0x3536x2[_0x763a[287]];null!= _0x3536x4&& _0x3536x4[_0x763a[288]]== mxConstants[_0x763a[317]];){var _0x3536x5=_0x3536x3?_0x3536x4[_0x763a[328]]:_0x3536x4[_0x763a[287]],_0x3536x9=mxUtils[_0x763a[329]](_0x3536x4);0== mxUtils[_0x763a[330]](_0x3536x9)[_0x763a[67]]&& _0x3536x4[_0x763a[265]][_0x763a[266]](_0x3536x4);_0x3536x4= _0x3536x5}},htmlEntities:function(_0x3536x2,_0x3536x3){_0x3536x2= (_0x3536x2|| _0x763a[110])[_0x763a[230]](/&/g,_0x763a[331]);_0x3536x2= _0x3536x2[_0x763a[230]](/"/g,_0x763a[332]);_0x3536x2= _0x3536x2[_0x763a[230]](/\'/g,_0x763a[333]);_0x3536x2= _0x3536x2[_0x763a[230]](//g,_0x763a[335]);if(null== _0x3536x3|| _0x3536x3){_0x3536x2= _0x3536x2[_0x763a[230]](/\n/g,_0x763a[336])};return _0x3536x2},isVml:function(_0x3536x2){return null!= _0x3536x2&& _0x763a[97]== _0x3536x2[_0x763a[337]]},getXml:function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x763a[110];null!= _0x3536x2&& (_0x3536x4= _0x3536x2[_0x763a[338]],_0x3536x4= null== _0x3536x4?_0x3536x2[_0x763a[339]]?_0x3536x2[_0x763a[339]]:( new XMLSerializer)[_0x763a[340]](_0x3536x2):_0x3536x4[_0x763a[230]](/\r\n\t[\t]*/g,_0x763a[110])[_0x763a[230]](/>\r\n/g,_0x763a[341])[_0x763a[230]](/\r\n/g,_0x763a[192]));return _0x3536x4= _0x3536x4[_0x763a[230]](/\n/g,_0x3536x3|| _0x763a[336])},getTextContent:function(_0x3536x2){var _0x3536x3=_0x763a[110];null!= _0x3536x2&& (null!= _0x3536x2[_0x763a[285]]&& (_0x3536x2= _0x3536x2[_0x763a[285]]),_0x3536x3= _0x3536x2[_0x763a[318]]|| _0x763a[110]);return _0x3536x3},getInnerHtml:function(){return mxClient[_0x763a[80]]?function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[339]]:_0x763a[110]}:function(_0x3536x2){return null!= _0x3536x2?( new XMLSerializer)[_0x763a[340]](_0x3536x2):_0x763a[110]}}(),getOuterHtml:function(){return mxClient[_0x763a[80]]?function(_0x3536x2){if(null!= _0x3536x2){if(null!= _0x3536x2[_0x763a[342]]){return _0x3536x2[_0x763a[342]]};var _0x3536x3=[];_0x3536x3[_0x763a[207]](_0x763a[319]+ _0x3536x2[_0x763a[301]]);var _0x3536x4=_0x3536x2[_0x763a[320]];if(null!= _0x3536x4){for(var _0x3536x5=0;_0x3536x5< _0x3536x4[_0x763a[67]];_0x3536x5++){var _0x3536x9=_0x3536x4[_0x3536x5][_0x763a[318]];null!= _0x3536x9&& 0< _0x3536x9[_0x763a[67]]&& (_0x3536x3[_0x763a[207]](_0x763a[185]),_0x3536x3[_0x763a[207]](_0x3536x4[_0x3536x5][_0x763a[301]]),_0x3536x3[_0x763a[207]](_0x763a[322]),_0x3536x3[_0x763a[207]](_0x3536x9),_0x3536x3[_0x763a[207]](_0x763a[323]))}};0== _0x3536x2[_0x763a[339]][_0x763a[67]]?_0x3536x3[_0x763a[207]](_0x763a[343]):(_0x3536x3[_0x763a[207]](_0x763a[341]),_0x3536x3[_0x763a[207]](_0x3536x2[_0x763a[339]]),_0x3536x3[_0x763a[207]](_0x763a[326]+ _0x3536x2[_0x763a[301]]+ _0x763a[341]));return _0x3536x3[_0x763a[234]](_0x763a[110])};return _0x763a[110]}:function(_0x3536x2){return null!= _0x3536x2?( new XMLSerializer)[_0x763a[340]](_0x3536x2):_0x763a[110]}}(),write:function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x3536x2[_0x763a[295]][_0x763a[344]](_0x3536x3);null!= _0x3536x2&& _0x3536x2[_0x763a[62]](_0x3536x4);return _0x3536x4},writeln:function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x3536x2[_0x763a[295]][_0x763a[344]](_0x3536x3);null!= _0x3536x2&& (_0x3536x2[_0x763a[62]](_0x3536x4),_0x3536x2[_0x763a[62]](document[_0x763a[55]](_0x763a[345])));return _0x3536x4},br:function(_0x3536x2,_0x3536x3){_0x3536x3= _0x3536x3|| 1;for(var _0x3536x4=null,_0x3536x5=0;_0x3536x5< _0x3536x3;_0x3536x5++){null!= _0x3536x2&& (_0x3536x4= _0x3536x2[_0x763a[295]][_0x763a[55]](_0x763a[345]),_0x3536x2[_0x763a[62]](_0x3536x4))};return _0x3536x4},button:function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= null!= _0x3536x4?_0x3536x4:document;_0x3536x4= _0x3536x4[_0x763a[55]](_0x763a[172]);mxUtils[_0x763a[53]](_0x3536x4,_0x3536x2);mxEvent[_0x763a[169]](_0x3536x4,_0x763a[173],function(_0x3536x2){_0x3536x3(_0x3536x2)});return _0x3536x4},para:function(_0x3536x2,_0x3536x3){var _0x3536x4=document[_0x763a[55]](_0x763a[346]);mxUtils[_0x763a[53]](_0x3536x4,_0x3536x3);null!= _0x3536x2&& _0x3536x2[_0x763a[62]](_0x3536x4);return _0x3536x4},addTransparentBackgroundFilter:function(_0x3536x2){_0x3536x2[_0x763a[124]][_0x763a[347]]+= _0x763a[348]+ mxClient[_0x763a[88]]+ _0x763a[349]},linkAction:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){return mxUtils[_0x763a[54]](_0x3536x2,_0x3536x3,function(){_0x3536x4[_0x763a[350]](_0x3536x5)},_0x3536x9)},linkInvoke:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){return mxUtils[_0x763a[54]](_0x3536x2,_0x3536x3,function(){_0x3536x4[_0x3536x5](_0x3536x9)},_0x3536xa)},link:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=document[_0x763a[55]](_0x763a[351]);_0x3536x9[_0x763a[124]][_0x763a[352]]= _0x763a[353];_0x3536x9[_0x763a[124]][_0x763a[354]]= _0x763a[355];_0x3536x9[_0x763a[124]][_0x763a[270]]= _0x763a[356];null!= _0x3536x5&& (_0x3536x9[_0x763a[124]][_0x763a[357]]= _0x3536x5+ _0x763a[168]);mxEvent[_0x763a[169]](_0x3536x9,_0x763a[173],_0x3536x4);mxUtils[_0x763a[53]](_0x3536x9,_0x3536x3);null!= _0x3536x2&& _0x3536x2[_0x763a[62]](_0x3536x9);return _0x3536x9},fit:function(_0x3536x2){var _0x3536x3=parseInt(_0x3536x2[_0x763a[358]]),_0x3536x4=parseInt(_0x3536x2[_0x763a[359]]),_0x3536x5=document[_0x763a[112]],_0x3536x9=document[_0x763a[158]],_0x3536xa=(_0x3536x5[_0x763a[360]]|| _0x3536x9[_0x763a[360]])+ (_0x3536x5[_0x763a[159]]|| _0x3536x9[_0x763a[159]]);_0x3536x3+ _0x3536x4> _0x3536xa&& (_0x3536x2[_0x763a[124]][_0x763a[361]]= Math[_0x763a[160]](_0x3536x5[_0x763a[360]]|| _0x3536x9[_0x763a[360]],_0x3536xa- _0x3536x4)+ _0x763a[168]);_0x3536x3= parseInt(_0x3536x2[_0x763a[362]]);_0x3536x4= parseInt(_0x3536x2[_0x763a[167]]);_0x3536xa= (_0x3536x5[_0x763a[190]]|| _0x3536x9[_0x763a[190]])+ Math[_0x763a[160]](_0x3536x5[_0x763a[157]]|| 0,_0x3536x9[_0x763a[157]]);_0x3536x3+ _0x3536x4> _0x3536xa&& (_0x3536x2[_0x763a[124]][_0x763a[125]]= Math[_0x763a[160]](_0x3536x5[_0x763a[190]]|| _0x3536x9[_0x763a[190]],_0x3536xa- _0x3536x4)+ _0x763a[168])},open:function(_0x3536x2){if(mxClient[_0x763a[133]]){try{netscape[_0x763a[366]][_0x763a[365]][_0x763a[364]](_0x763a[363])}catch(b){return mxUtils[_0x763a[150]](_0x763a[367]),_0x763a[110]};var _0x3536x4=Components[_0x763a[372]][_0x763a[371]][_0x763a[370]](Components[_0x763a[369]][_0x763a[368]]);_0x3536x4[_0x763a[373]](_0x3536x2);if(!_0x3536x4[_0x763a[374]]()){return mxUtils[_0x763a[150]](_0x763a[375]),_0x763a[110]};_0x3536x2= Components[_0x763a[372]][_0x763a[377]][_0x763a[370]](Components[_0x763a[369]][_0x763a[376]]);_0x3536x2[_0x763a[176]](_0x3536x4,1,4,null);_0x3536x4= Components[_0x763a[372]][_0x763a[379]][_0x763a[370]](Components[_0x763a[369]][_0x763a[378]]);_0x3536x4[_0x763a[176]](_0x3536x2);return _0x3536x4[_0x763a[381]](_0x3536x4[_0x763a[380]]())};_0x3536x4= ( new ActiveXObject(_0x763a[382])).OpenTextFile(_0x3536x2,1);_0x3536x2= _0x3536x4[_0x763a[383]]();_0x3536x4[_0x763a[268]]();return _0x3536x2},save:function(_0x3536x2,_0x3536x3){if(mxClient[_0x763a[133]]){try{netscape[_0x763a[366]][_0x763a[365]][_0x763a[364]](_0x763a[363])}catch(c){mxUtils[_0x763a[150]](_0x763a[384]);return};var _0x3536x5=Components[_0x763a[372]][_0x763a[371]][_0x763a[370]](Components[_0x763a[369]][_0x763a[368]]);_0x3536x5[_0x763a[373]](_0x3536x2);_0x3536x5[_0x763a[374]]()|| _0x3536x5[_0x763a[385]](0,420);var _0x3536x9=Components[_0x763a[372]][_0x763a[387]][_0x763a[370]](Components[_0x763a[369]][_0x763a[386]]);_0x3536x9[_0x763a[176]](_0x3536x5,34,4,null);_0x3536x9[_0x763a[53]](_0x3536x3,_0x3536x3[_0x763a[67]]);_0x3536x9[_0x763a[388]]();_0x3536x9[_0x763a[268]]()}else {_0x3536x5= ( new ActiveXObject(_0x763a[382])).CreateTextFile(_0x3536x2,!0),_0x3536x5.Write(_0x3536x3),_0x3536x5.Close()}},saveAs:function(_0x3536x2){var _0x3536x3=document[_0x763a[55]](_0x763a[389]);_0x3536x3[_0x763a[57]](_0x763a[390],_0x763a[110]);_0x3536x3[_0x763a[124]][_0x763a[187]]= _0x763a[188];document[_0x763a[112]][_0x763a[62]](_0x3536x3);try{if(mxClient[_0x763a[133]]){var _0x3536x4=_0x3536x3[_0x763a[391]];_0x3536x4[_0x763a[392]]();_0x3536x4[_0x763a[53]](_0x3536x2);_0x3536x4[_0x763a[268]]();try{netscape[_0x763a[366]][_0x763a[365]][_0x763a[364]](_0x763a[363]),_0x3536x3[_0x763a[393]](),saveDocument(_0x3536x4)}catch(d){mxUtils[_0x763a[150]](_0x763a[394])}}else {_0x3536x4= _0x3536x3[_0x763a[396]][_0x763a[395]],_0x3536x4[_0x763a[53]](_0x3536x2),_0x3536x4[_0x763a[398]](_0x763a[397],!1,document[_0x763a[45]])}}finally{document[_0x763a[112]][_0x763a[266]](_0x3536x3)}},copy:function(_0x3536x2){if(window[_0x763a[399]]){window[_0x763a[399]][_0x763a[401]](_0x763a[400],_0x3536x2)}else {netscape[_0x763a[366]][_0x763a[365]][_0x763a[364]](_0x763a[363]);var _0x3536x3=Components[_0x763a[372]][_0x763a[403]][_0x763a[370]](Components[_0x763a[369]][_0x763a[402]]);if(_0x3536x3){var _0x3536x4=Components[_0x763a[372]][_0x763a[405]][_0x763a[370]](Components[_0x763a[369]][_0x763a[404]]);if(_0x3536x4){_0x3536x4[_0x763a[407]](_0x763a[406]);var _0x3536x5=Components[_0x763a[372]][_0x763a[409]][_0x763a[370]](Components[_0x763a[369]][_0x763a[408]]);_0x3536x5[_0x763a[410]]= _0x3536x2;_0x3536x4[_0x763a[411]](_0x763a[406],_0x3536x5,2* _0x3536x2[_0x763a[67]]);_0x3536x3[_0x763a[401]](_0x3536x4,null,Components[_0x763a[369]][_0x763a[402]][_0x763a[412]])}}}},load:function(_0x3536x2){_0x3536x2= new mxXmlRequest(_0x3536x2,null,_0x763a[413],!1);_0x3536x2[_0x763a[414]]();return _0x3536x2},get:function(_0x3536x2,_0x3536x3,_0x3536x4){return ( new mxXmlRequest(_0x3536x2,null,_0x763a[413]))[_0x763a[414]](_0x3536x3,_0x3536x4)},post:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){return ( new mxXmlRequest(_0x3536x2,_0x3536x3))[_0x763a[414]](_0x3536x4,_0x3536x5)},submit:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){return ( new mxXmlRequest(_0x3536x2,_0x3536x3))[_0x763a[415]](_0x3536x4,_0x3536x5)},loadInto:function(_0x3536x2,_0x3536x3,_0x3536x4){mxClient[_0x763a[80]]?_0x3536x3[_0x763a[416]]= function(){4== _0x3536x3[_0x763a[417]]&& _0x3536x4()}:_0x3536x3[_0x763a[418]](_0x763a[219],_0x3536x4,!1);_0x3536x3[_0x763a[219]](_0x3536x2)},getValue:function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x2= null!= _0x3536x2?_0x3536x2[_0x3536x3]:null;null== _0x3536x2&& (_0x3536x2= _0x3536x4);return _0x3536x2},getNumber:function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x2= null!= _0x3536x2?_0x3536x2[_0x3536x3]:null;null== _0x3536x2&& (_0x3536x2= _0x3536x4|| 0);return Number(_0x3536x2)},getColor:function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x2= null!= _0x3536x2?_0x3536x2[_0x3536x3]:null;null== _0x3536x2?_0x3536x2= _0x3536x4:_0x3536x2== mxConstants[_0x763a[217]]&& (_0x3536x2= null);return _0x3536x2},clone:function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= null!= _0x3536x4?_0x3536x4:!1;var _0x3536x5=null;if(null!= _0x3536x2&& _0x763a[279]== typeof _0x3536x2[_0x763a[196]]){var _0x3536x5= new _0x3536x2[_0x763a[196]],_0x3536x9;for(_0x3536x9 in _0x3536x2){if(_0x3536x9!= mxObjectIdentity[_0x763a[195]]&& (null== _0x3536x3|| 0> mxUtils[_0x763a[2]](_0x3536x3,_0x3536x9))){_0x3536x5[_0x3536x9]= !_0x3536x4&& _0x763a[194]== typeof _0x3536x2[_0x3536x9]?mxUtils[_0x763a[238]](_0x3536x2[_0x3536x9]):_0x3536x2[_0x3536x9]}}};return _0x3536x5},equalPoints:function(_0x3536x2,_0x3536x3){if(null== _0x3536x2&& null!= _0x3536x3|| null!= _0x3536x2&& null== _0x3536x3|| null!= _0x3536x2&& null!= _0x3536x3&& _0x3536x2[_0x763a[67]]!= _0x3536x3[_0x763a[67]]){return !1};if(null!= _0x3536x2&& null!= _0x3536x3){for(var _0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){if(_0x3536x2[_0x3536x4]== _0x3536x3[_0x3536x4]|| null!= _0x3536x2[_0x3536x4]&& !_0x3536x2[_0x3536x4][_0x763a[237]](_0x3536x3[_0x3536x4])){return !1}}};return !0},equalEntries:function(_0x3536x2,_0x3536x3){if(null== _0x3536x2&& null!= _0x3536x3|| null!= _0x3536x2&& null== _0x3536x3|| null!= _0x3536x2&& null!= _0x3536x3&& _0x3536x2[_0x763a[67]]!= _0x3536x3[_0x763a[67]]){return !1};if(null!= _0x3536x2&& null!= _0x3536x3){for(var _0x3536x4 in _0x3536x2){if(_0x3536x2[_0x3536x4]!= _0x3536x3[_0x3536x4]){return !1}}};return !0},extend:function(_0x3536x2,_0x3536x3){var _0x3536x4=function(){};_0x3536x4[_0x763a[202]]= _0x3536x3[_0x763a[202]];_0x3536x2[_0x763a[202]]= new _0x3536x4;_0x3536x2[_0x763a[202]][_0x763a[196]]= _0x3536x2},toString:function(_0x3536x2){var _0x3536x3=_0x763a[110],_0x3536x4;for(_0x3536x4 in _0x3536x2){try{if(null== _0x3536x2[_0x3536x4]){_0x3536x3+= _0x3536x4+ _0x763a[419]}else {if(_0x763a[279]== typeof _0x3536x2[_0x3536x4]){_0x3536x3+= _0x3536x4+ _0x763a[420]}else {if(_0x763a[194]== typeof _0x3536x2[_0x3536x4]){var _0x3536x5=mxUtils[_0x763a[197]](_0x3536x2[_0x3536x4][_0x763a[196]]),_0x3536x3=_0x3536x3+ (_0x3536x4+ _0x763a[421]+ _0x3536x5+ _0x763a[422])}else {_0x3536x3+= _0x3536x4+ _0x763a[423]+ _0x3536x2[_0x3536x4]+ _0x763a[192]}}}}catch(e){_0x3536x3+= _0x3536x4+ _0x763a[226]+ e[_0x763a[281]]}};return _0x3536x3},toRadians:function(_0x3536x2){return Math[_0x763a[424]]* _0x3536x2/ 180},arcToCurves:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14){_0x3536x13-= _0x3536x2;_0x3536x14-= _0x3536x3;if(0=== _0x3536x4|| 0=== _0x3536x5){return _0x3536x18};_0x3536x4= Math[_0x763a[425]](_0x3536x4);_0x3536x5= Math[_0x763a[425]](_0x3536x5);var _0x3536x15=-_0x3536x13/ 2,_0x3536x16=-_0x3536x14/ 2,_0x3536x17=Math[_0x763a[426]](_0x3536x9* Math[_0x763a[424]]/ 180),_0x3536x18=Math[_0x763a[427]](_0x3536x9* Math[_0x763a[424]]/ 180);_0x3536x9= _0x3536x17* _0x3536x15+ _0x3536x18* _0x3536x16;var _0x3536x15=-1* _0x3536x18* _0x3536x15+ _0x3536x17* _0x3536x16,_0x3536x16=_0x3536x9* _0x3536x9,_0x3536x19=_0x3536x15* _0x3536x15,_0x3536x1a=_0x3536x4* _0x3536x4,_0x3536x1b=_0x3536x5* _0x3536x5,_0x3536x1c=_0x3536x16/ _0x3536x1a+ _0x3536x19/ _0x3536x1b;1< _0x3536x1c?(_0x3536x4*= Math[_0x763a[428]](_0x3536x1c),_0x3536x5*= Math[_0x763a[428]](_0x3536x1c),_0x3536xa= 0):(_0x3536x1c= 1,_0x3536xa=== _0x3536x12&& (_0x3536x1c= -1),_0x3536xa= _0x3536x1c* Math[_0x763a[428]]((_0x3536x1a* _0x3536x1b- _0x3536x1a* _0x3536x19- _0x3536x1b* _0x3536x16)/ (_0x3536x1a* _0x3536x19+ _0x3536x1b* _0x3536x16)));_0x3536x16= _0x3536xa* _0x3536x4* _0x3536x15/ _0x3536x5;_0x3536x19= -1* _0x3536xa* _0x3536x5* _0x3536x9/ _0x3536x4;_0x3536x13= _0x3536x17* _0x3536x16- _0x3536x18* _0x3536x19+ _0x3536x13/ 2;_0x3536x14= _0x3536x18* _0x3536x16+ _0x3536x17* _0x3536x19+ _0x3536x14/ 2;_0x3536x1a= Math[_0x763a[429]]((_0x3536x15- _0x3536x19)/ _0x3536x5,(_0x3536x9- _0x3536x16)/ _0x3536x4)- Math[_0x763a[429]](0,1);_0x3536xa= 0<= _0x3536x1a?_0x3536x1a:2* Math[_0x763a[424]]+ _0x3536x1a;_0x3536x1a= Math[_0x763a[429]]((-_0x3536x15- _0x3536x19) / _0x3536x5,(-_0x3536x9- _0x3536x16) / _0x3536x4) - Math[_0x763a[429]]((_0x3536x15- _0x3536x19)/ _0x3536x5,(_0x3536x9- _0x3536x16)/ _0x3536x4);_0x3536x9= 0<= _0x3536x1a?_0x3536x1a:2* Math[_0x763a[424]]+ _0x3536x1a;0== _0x3536x12&& 0< _0x3536x9?_0x3536x9-= 2* Math[_0x763a[424]]:0!= _0x3536x12&& 0> _0x3536x9&& (_0x3536x9+= 2* Math[_0x763a[424]]);_0x3536x12= 2* _0x3536x9/ Math[_0x763a[424]];_0x3536x12= Math[_0x763a[430]](0> _0x3536x12?-1* _0x3536x12:_0x3536x12);_0x3536x9/= _0x3536x12;_0x3536x15= 8/ 3* Math[_0x763a[427]](_0x3536x9/ 4)* Math[_0x763a[427]](_0x3536x9/ 4)/ Math[_0x763a[427]](_0x3536x9/ 2);_0x3536x16= _0x3536x17* _0x3536x4;_0x3536x17*= _0x3536x5;_0x3536x4*= _0x3536x18;_0x3536x5*= _0x3536x18;for(var _0x3536x1d=Math[_0x763a[426]](_0x3536xa),_0x3536x1e=Math[_0x763a[427]](_0x3536xa),_0x3536x19=-_0x3536x15* (_0x3536x16* _0x3536x1e+ _0x3536x5* _0x3536x1d),_0x3536x1a=-_0x3536x15* (_0x3536x4* _0x3536x1e- _0x3536x17* _0x3536x1d),_0x3536x1c=_0x3536x1b= 0,_0x3536x18=[],_0x3536x1f=0;_0x3536x1f< _0x3536x12;++_0x3536x1f){_0x3536xa+= _0x3536x9;var _0x3536x1d=Math[_0x763a[426]](_0x3536xa),_0x3536x1e=Math[_0x763a[427]](_0x3536xa),_0x3536x1b=_0x3536x16* _0x3536x1d- _0x3536x5* _0x3536x1e+ _0x3536x13,_0x3536x1c=_0x3536x4* _0x3536x1d+ _0x3536x17* _0x3536x1e+ _0x3536x14,_0x3536x20=-_0x3536x15* (_0x3536x16* _0x3536x1e+ _0x3536x5* _0x3536x1d),_0x3536x1d=-_0x3536x15* (_0x3536x4* _0x3536x1e- _0x3536x17* _0x3536x1d),_0x3536x1e=6* _0x3536x1f;_0x3536x18[_0x3536x1e]= Number(_0x3536x19+ _0x3536x2);_0x3536x18[_0x3536x1e+ 1]= Number(_0x3536x1a+ _0x3536x3);_0x3536x18[_0x3536x1e+ 2]= Number(_0x3536x1b- _0x3536x20+ _0x3536x2);_0x3536x18[_0x3536x1e+ 3]= Number(_0x3536x1c- _0x3536x1d+ _0x3536x3);_0x3536x18[_0x3536x1e+ 4]= Number(_0x3536x1b+ _0x3536x2);_0x3536x18[_0x3536x1e+ 5]= Number(_0x3536x1c+ _0x3536x3);_0x3536x19= _0x3536x1b+ _0x3536x20;_0x3536x1a= _0x3536x1c+ _0x3536x1d};return _0x3536x18},getBoundingBox:function(_0x3536x2,_0x3536x3){var _0x3536x4=null;if(null!= _0x3536x2&& null!= _0x3536x3&& 0!= _0x3536x3){var _0x3536x5=mxUtils[_0x763a[431]](_0x3536x3),_0x3536x4=Math[_0x763a[426]](_0x3536x5),_0x3536x9=Math[_0x763a[427]](_0x3536x5),_0x3536xa= new mxPoint(_0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]/ 2,_0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]/ 2),_0x3536x12= new mxPoint(_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]]),_0x3536x5= new mxPoint(_0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]],_0x3536x2[_0x763a[236]]),_0x3536x13= new mxPoint(_0x3536x5[_0x763a[235]],_0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]),_0x3536x14= new mxPoint(_0x3536x2[_0x763a[235]],_0x3536x13[_0x763a[236]]),_0x3536x12=mxUtils[_0x763a[432]](_0x3536x12,_0x3536x4,_0x3536x9,_0x3536xa),_0x3536x5=mxUtils[_0x763a[432]](_0x3536x5,_0x3536x4,_0x3536x9,_0x3536xa),_0x3536x13=mxUtils[_0x763a[432]](_0x3536x13,_0x3536x4,_0x3536x9,_0x3536xa),_0x3536x14=mxUtils[_0x763a[432]](_0x3536x14,_0x3536x4,_0x3536x9,_0x3536xa),_0x3536x4= new mxRectangle(_0x3536x12[_0x763a[235]],_0x3536x12[_0x763a[236]],0,0);_0x3536x4[_0x763a[99]]( new mxRectangle(_0x3536x5[_0x763a[235]],_0x3536x5[_0x763a[236]],0,0));_0x3536x4[_0x763a[99]]( new mxRectangle(_0x3536x13[_0x763a[235]],_0x3536x13[_0x763a[236]],0,0));_0x3536x4[_0x763a[99]]( new mxRectangle(_0x3536x14[_0x763a[235]],_0x3536x14[_0x763a[236]],0,0))};return _0x3536x4},getRotatedPoint:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x5= null!= _0x3536x5?_0x3536x5: new mxPoint;var _0x3536x9=_0x3536x2[_0x763a[235]]- _0x3536x5[_0x763a[235]];_0x3536x2= _0x3536x2[_0x763a[236]]- _0x3536x5[_0x763a[236]];return new mxPoint(_0x3536x9* _0x3536x3- _0x3536x2* _0x3536x4+ _0x3536x5[_0x763a[235]],_0x3536x2* _0x3536x3+ _0x3536x9* _0x3536x4+ _0x3536x5[_0x763a[236]])},getPortConstraints:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x2= mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_PORT_CONSTRAINT,null);if(null== _0x3536x2){return _0x3536x5};_0x3536x5= _0x3536x2.toString();_0x3536x2= mxConstants[_0x763a[434]];0<= _0x3536x5[_0x763a[2]](mxConstants.DIRECTION_NORTH)&& (_0x3536x2|= mxConstants[_0x763a[435]]);0<= _0x3536x5[_0x763a[2]](mxConstants.DIRECTION_WEST)&& (_0x3536x2|= mxConstants[_0x763a[436]]);0<= _0x3536x5[_0x763a[2]](mxConstants.DIRECTION_SOUTH)&& (_0x3536x2|= mxConstants[_0x763a[437]]);0<= _0x3536x5[_0x763a[2]](mxConstants.DIRECTION_EAST)&& (_0x3536x2|= mxConstants[_0x763a[438]]);return _0x3536x2},reversePortConstraints:function(_0x3536x2){var _0x3536x3=0,_0x3536x3=(_0x3536x2& mxConstants[_0x763a[436]])<< 3,_0x3536x3=_0x3536x3| (_0x3536x2& mxConstants[_0x763a[435]])<< 1,_0x3536x3=_0x3536x3| (_0x3536x2& mxConstants[_0x763a[437]])>> 1;return _0x3536x3|= (_0x3536x2& mxConstants[_0x763a[438]])>> 3},findNearestSegment:function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=-1;if(0< _0x3536x2[_0x763a[439]][_0x763a[67]]){for(var _0x3536x9=_0x3536x2[_0x763a[439]][0],_0x3536xa=null,_0x3536x12=1;_0x3536x12< _0x3536x2[_0x763a[439]][_0x763a[67]];_0x3536x12++){var _0x3536x13=_0x3536x2[_0x763a[439]][_0x3536x12],_0x3536x9=mxUtils[_0x763a[440]](_0x3536x9[_0x763a[235]],_0x3536x9[_0x763a[236]],_0x3536x13[_0x763a[235]],_0x3536x13[_0x763a[236]],_0x3536x3,_0x3536x4);if(null== _0x3536xa|| _0x3536x9< _0x3536xa){_0x3536xa= _0x3536x9,_0x3536x5= _0x3536x12- 1};_0x3536x9= _0x3536x13}};return _0x3536x5},rectangleIntersectsSegment:function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=_0x3536x2[_0x763a[236]],_0x3536x9=_0x3536x2[_0x763a[235]],_0x3536xa=_0x3536x5+ _0x3536x2[_0x763a[119]],_0x3536x12=_0x3536x9+ _0x3536x2[_0x763a[117]];_0x3536x2= _0x3536x3[_0x763a[235]];var _0x3536x13=_0x3536x4[_0x763a[235]];_0x3536x3[_0x763a[235]]> _0x3536x4[_0x763a[235]]&& (_0x3536x2= _0x3536x4[_0x763a[235]],_0x3536x13= _0x3536x3[_0x763a[235]]);_0x3536x13> _0x3536x12&& (_0x3536x13= _0x3536x12);_0x3536x2< _0x3536x9&& (_0x3536x2= _0x3536x9);if(_0x3536x2> _0x3536x13){return !1};var _0x3536x9=_0x3536x3[_0x763a[236]],_0x3536x12=_0x3536x4[_0x763a[236]],_0x3536x14=_0x3536x4[_0x763a[235]]- _0x3536x3[_0x763a[235]];1E-7< Math[_0x763a[425]](_0x3536x14)&& (_0x3536x4= (_0x3536x4[_0x763a[236]]- _0x3536x3[_0x763a[236]])/ _0x3536x14,_0x3536x3= _0x3536x3[_0x763a[236]]- _0x3536x4* _0x3536x3[_0x763a[235]],_0x3536x9= _0x3536x4* _0x3536x2+ _0x3536x3,_0x3536x12= _0x3536x4* _0x3536x13+ _0x3536x3);_0x3536x9> _0x3536x12&& (_0x3536x3= _0x3536x12,_0x3536x12= _0x3536x9,_0x3536x9= _0x3536x3);_0x3536x12> _0x3536xa&& (_0x3536x12= _0x3536xa);_0x3536x9< _0x3536x5&& (_0x3536x9= _0x3536x5);return _0x3536x9> _0x3536x12?!1:!0},contains:function(_0x3536x2,_0x3536x3,_0x3536x4){return _0x3536x2[_0x763a[235]]<= _0x3536x3&& _0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]>= _0x3536x3&& _0x3536x2[_0x763a[236]]<= _0x3536x4&& _0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]>= _0x3536x4},intersects:function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x3536x2[_0x763a[117]],_0x3536x5=_0x3536x2[_0x763a[119]],_0x3536x9=_0x3536x3[_0x763a[117]],_0x3536xa=_0x3536x3[_0x763a[119]];if(0>= _0x3536x9|| 0>= _0x3536xa|| 0>= _0x3536x4|| 0>= _0x3536x5){return !1};var _0x3536x12=_0x3536x2[_0x763a[235]],_0x3536x13=_0x3536x2[_0x763a[236]],_0x3536x14=_0x3536x3[_0x763a[235]],_0x3536x15=_0x3536x3[_0x763a[236]],_0x3536x9=_0x3536x9+ _0x3536x14,_0x3536xa=_0x3536xa+ _0x3536x15,_0x3536x4=_0x3536x4+ _0x3536x12,_0x3536x5=_0x3536x5+ _0x3536x13;return (_0x3536x9< _0x3536x14|| _0x3536x9> _0x3536x12)&& (_0x3536xa< _0x3536x15|| _0x3536xa> _0x3536x13)&& (_0x3536x4< _0x3536x12|| _0x3536x4> _0x3536x14)&& (_0x3536x5< _0x3536x13|| _0x3536x5> _0x3536x15)},intersectsHotspot:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536x5= null!= _0x3536x5?_0x3536x5:1;_0x3536x9= null!= _0x3536x9?_0x3536x9:0;_0x3536xa= null!= _0x3536xa?_0x3536xa:0;if(0< _0x3536x5){var _0x3536x12=_0x3536x2[_0x763a[241]](),_0x3536x13=_0x3536x2[_0x763a[242]](),_0x3536x14=_0x3536x2[_0x763a[117]],_0x3536x15=_0x3536x2[_0x763a[119]],_0x3536x16=mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_STARTSIZE)* _0x3536x2[_0x763a[441]][_0x763a[255]];0< _0x3536x16&& (mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_HORIZONTAL,!0)?(_0x3536x13= _0x3536x2[_0x763a[236]]+ _0x3536x16/ 2,_0x3536x15= _0x3536x16):(_0x3536x12= _0x3536x2[_0x763a[235]]+ _0x3536x16/ 2,_0x3536x14= _0x3536x16));_0x3536x14= Math[_0x763a[160]](_0x3536x9,_0x3536x14* _0x3536x5);_0x3536x15= Math[_0x763a[160]](_0x3536x9,_0x3536x15* _0x3536x5);0< _0x3536xa&& (_0x3536x14= Math[_0x763a[243]](_0x3536x14,_0x3536xa),_0x3536x15= Math[_0x763a[243]](_0x3536x15,_0x3536xa));_0x3536x5= new mxRectangle(_0x3536x12- _0x3536x14/ 2,_0x3536x13- _0x3536x15/ 2,_0x3536x14,_0x3536x15);_0x3536x12= mxUtils[_0x763a[431]](mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_ROTATION)|| 0);0!= _0x3536x12&& (_0x3536x9= Math[_0x763a[426]](-_0x3536x12),_0x3536xa= Math[_0x763a[427]](-_0x3536x12),_0x3536x12= new mxPoint(_0x3536x2[_0x763a[241]](),_0x3536x2[_0x763a[242]]()),_0x3536x2= mxUtils[_0x763a[432]]( new mxPoint(_0x3536x3,_0x3536x4),_0x3536x9,_0x3536xa,_0x3536x12),_0x3536x3= _0x3536x2[_0x763a[235]],_0x3536x4= _0x3536x2[_0x763a[236]]);return mxUtils[_0x763a[442]](_0x3536x5,_0x3536x3,_0x3536x4)};return !0},getOffset:function(_0x3536x2,_0x3536x3){var _0x3536x4=0,_0x3536x5=0;if(null!= _0x3536x3&& _0x3536x3){var _0x3536x9=document[_0x763a[112]],_0x3536xa=document[_0x763a[158]],_0x3536x4=_0x3536x4+ (_0x3536x9[_0x763a[360]]|| _0x3536xa[_0x763a[360]]),_0x3536x5=_0x3536x5+ (_0x3536x9[_0x763a[190]]|| _0x3536xa[_0x763a[190]])};for(;_0x3536x2[_0x763a[443]];){_0x3536x4+= _0x3536x2[_0x763a[358]],_0x3536x5+= _0x3536x2[_0x763a[362]],_0x3536x2= _0x3536x2[_0x763a[443]]};return new mxPoint(_0x3536x4,_0x3536x5)},getScrollOrigin:function(_0x3536x2){for(var _0x3536x3=document[_0x763a[112]],_0x3536x4=document[_0x763a[158]],_0x3536x5= new mxPoint(_0x3536x3[_0x763a[360]]|| _0x3536x4[_0x763a[360]],_0x3536x3[_0x763a[190]]|| _0x3536x4[_0x763a[190]]);null!= _0x3536x2&& _0x3536x2!= _0x3536x3&& _0x3536x2!= _0x3536x4;){!isNaN(_0x3536x2[_0x763a[360]])&& !isNaN(_0x3536x2[_0x763a[190]])&& (_0x3536x5[_0x763a[235]]+= _0x3536x2[_0x763a[360]],_0x3536x5[_0x763a[236]]+= _0x3536x2[_0x763a[190]]),_0x3536x2= _0x3536x2[_0x763a[265]]};return _0x3536x5},convertPoint:function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=mxUtils[_0x763a[444]](_0x3536x2);_0x3536x2= mxUtils[_0x763a[445]](_0x3536x2);_0x3536x2[_0x763a[235]]-= _0x3536x5[_0x763a[235]];_0x3536x2[_0x763a[236]]-= _0x3536x5[_0x763a[236]];return new mxPoint(_0x3536x3- _0x3536x2[_0x763a[235]],_0x3536x4- _0x3536x2[_0x763a[236]])},ltrim:function(_0x3536x2,_0x3536x3){return _0x3536x2[_0x763a[230]](RegExp(_0x763a[446]+ (_0x3536x3|| _0x763a[447])+ _0x763a[448],_0x763a[449]),_0x763a[110])},rtrim:function(_0x3536x2,_0x3536x3){return _0x3536x2[_0x763a[230]](RegExp(_0x763a[450]+ (_0x3536x3|| _0x763a[447])+ _0x763a[451],_0x763a[449]),_0x763a[110])},trim:function(_0x3536x2,_0x3536x3){return mxUtils[_0x763a[453]](mxUtils[_0x763a[452]](_0x3536x2,_0x3536x3),_0x3536x3)},isNumeric:function(_0x3536x2){return null!= _0x3536x2&& (null== _0x3536x2[_0x763a[67]]|| 0< _0x3536x2[_0x763a[67]]&& 0> _0x3536x2[_0x763a[2]](_0x763a[454])&& 0> _0x3536x2[_0x763a[2]](_0x763a[455]))&& !isNaN(_0x3536x2)},mod:function(_0x3536x2,_0x3536x3){return (_0x3536x2% _0x3536x3+ _0x3536x3)% _0x3536x3},intersection:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13){var _0x3536x14=(_0x3536x13- _0x3536xa)* (_0x3536x4- _0x3536x2)- (_0x3536x12- _0x3536x9)* (_0x3536x5- _0x3536x3);_0x3536x12= ((_0x3536x12- _0x3536x9)* (_0x3536x3- _0x3536xa)- (_0x3536x13- _0x3536xa)* (_0x3536x2- _0x3536x9))/ _0x3536x14;_0x3536x9= ((_0x3536x4- _0x3536x2)* (_0x3536x3- _0x3536xa)- (_0x3536x5- _0x3536x3)* (_0x3536x2- _0x3536x9))/ _0x3536x14;return 0<= _0x3536x12&& 1>= _0x3536x12&& 0<= _0x3536x9&& 1>= _0x3536x9? new mxPoint(_0x3536x2+ _0x3536x12* (_0x3536x4- _0x3536x2),_0x3536x3+ _0x3536x12* (_0x3536x5- _0x3536x3)):null},ptSegDistSq:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536x4-= _0x3536x2;_0x3536x5-= _0x3536x3;_0x3536x9-= _0x3536x2;_0x3536xa-= _0x3536x3;0>= _0x3536x9* _0x3536x4+ _0x3536xa* _0x3536x5?_0x3536x4= 0:(_0x3536x9= _0x3536x4- _0x3536x9,_0x3536xa= _0x3536x5- _0x3536xa,_0x3536x2= _0x3536x9* _0x3536x4+ _0x3536xa* _0x3536x5,_0x3536x4= 0>= _0x3536x2?0:_0x3536x2* _0x3536x2/ (_0x3536x4* _0x3536x4+ _0x3536x5* _0x3536x5));_0x3536x9= _0x3536x9* _0x3536x9+ _0x3536xa* _0x3536xa- _0x3536x4;0> _0x3536x9&& (_0x3536x9= 0);return _0x3536x9},relativeCcw:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536x4-= _0x3536x2;_0x3536x5-= _0x3536x3;_0x3536x9-= _0x3536x2;_0x3536xa-= _0x3536x3;_0x3536x2= _0x3536x9* _0x3536x5- _0x3536xa* _0x3536x4;0== _0x3536x2&& (_0x3536x2= _0x3536x9* _0x3536x4+ _0x3536xa* _0x3536x5,0< _0x3536x2&& (_0x3536x2= (_0x3536x9- _0x3536x4)* _0x3536x4+ (_0x3536xa- _0x3536x5)* _0x3536x5,0> _0x3536x2&& (_0x3536x2= 0)));return 0> _0x3536x2?-1:0< _0x3536x2?1:0},animateChanges:function(_0x3536x2,_0x3536x3){mxEffects[_0x763a[456]][_0x763a[183]](this,arguments)},cascadeOpacity:function(_0x3536x2,_0x3536x3,_0x3536x4){mxEffects[_0x763a[260]][_0x763a[183]](this,arguments)},fadeOut:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){mxEffects[_0x763a[457]][_0x763a[183]](this,arguments)},setOpacity:function(_0x3536x2,_0x3536x3){mxUtils[_0x763a[458]](_0x3536x2)?_0x3536x2[_0x763a[124]][_0x763a[347]]= 100<= _0x3536x3?null:_0x763a[459]+ _0x3536x3/ 5+ _0x763a[460]:mxClient[_0x763a[80]]&& (_0x763a[82]=== typeof document[_0x763a[5]]|| 9> document[_0x763a[5]])?_0x3536x2[_0x763a[124]][_0x763a[347]]= 100<= _0x3536x3?null:_0x763a[459]+ _0x3536x3+ _0x763a[460]:_0x3536x2[_0x763a[124]][_0x763a[461]]= _0x3536x3/ 100},createImage:function(_0x3536x2){var _0x3536x3=null;mxClient[_0x763a[49]]&& _0x763a[462]!= document[_0x763a[135]]?(_0x3536x3= document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[464]),_0x3536x3[_0x763a[57]](_0x763a[390],_0x3536x2),_0x3536x3[_0x763a[124]][_0x763a[465]]= _0x763a[130]):(_0x3536x3= document[_0x763a[55]](_0x763a[466]),_0x3536x3[_0x763a[57]](_0x763a[390],_0x3536x2),_0x3536x3[_0x763a[57]](_0x763a[467],_0x763a[468]));return _0x3536x3},sortCells:function(_0x3536x2,_0x3536x3){_0x3536x3= null!= _0x3536x3?_0x3536x3:!0;var _0x3536x4= new mxDictionary;_0x3536x2[_0x763a[470]](function(_0x3536x2,_0x3536x9){var _0x3536xa=_0x3536x4[_0x763a[203]](_0x3536x2);null== _0x3536xa&& (_0x3536xa= mxCellPath[_0x763a[385]](_0x3536x2)[_0x763a[224]](mxCellPath.PATH_SEPARATOR),_0x3536x4[_0x763a[204]](_0x3536x2,_0x3536xa));var _0x3536x12=_0x3536x4[_0x763a[203]](_0x3536x9);null== _0x3536x12&& (_0x3536x12= mxCellPath[_0x763a[385]](_0x3536x9)[_0x763a[224]](mxCellPath.PATH_SEPARATOR),_0x3536x4[_0x763a[204]](_0x3536x9,_0x3536x12));_0x3536xa= mxCellPath[_0x763a[469]](_0x3536xa,_0x3536x12);return 0== _0x3536xa?0:0< _0x3536xa== _0x3536x3?1:-1});return _0x3536x2},getStylename:function(_0x3536x2){return null!= _0x3536x2&& (_0x3536x2= _0x3536x2[_0x763a[224]](_0x763a[471])[0],0> _0x3536x2[_0x763a[2]](_0x763a[226]))?_0x3536x2:_0x763a[110]},getStylenames:function(_0x3536x2){var _0x3536x3=[];if(null!= _0x3536x2){_0x3536x2= _0x3536x2[_0x763a[224]](_0x763a[471]);for(var _0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){0> _0x3536x2[_0x3536x4][_0x763a[2]](_0x763a[226])&& _0x3536x3[_0x763a[207]](_0x3536x2[_0x3536x4])}};return _0x3536x3},indexOfStylename:function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2&& null!= _0x3536x3){for(var _0x3536x4=_0x3536x2[_0x763a[224]](_0x763a[471]),_0x3536x5=0,_0x3536x9=0;_0x3536x9< _0x3536x4[_0x763a[67]];_0x3536x9++){if(_0x3536x4[_0x3536x9]== _0x3536x3){return _0x3536x5};_0x3536x5+= _0x3536x4[_0x3536x9][_0x763a[67]]+ 1}};return -1},addStylename:function(_0x3536x2,_0x3536x3){0> mxUtils[_0x763a[472]](_0x3536x2,_0x3536x3)&& (null== _0x3536x2?_0x3536x2= _0x763a[110]:0< _0x3536x2[_0x763a[67]]&& _0x763a[471]!= _0x3536x2[_0x763a[225]](_0x3536x2[_0x763a[67]]- 1)&& (_0x3536x2+= _0x763a[471]),_0x3536x2+= _0x3536x3);return _0x3536x2},removeStylename:function(_0x3536x2,_0x3536x3){var _0x3536x4=[];if(null!= _0x3536x2){for(var _0x3536x5=_0x3536x2[_0x763a[224]](_0x763a[471]),_0x3536x9=0;_0x3536x9< _0x3536x5[_0x763a[67]];_0x3536x9++){_0x3536x5[_0x3536x9]!= _0x3536x3&& _0x3536x4[_0x763a[207]](_0x3536x5[_0x3536x9])}};return _0x3536x4[_0x763a[234]](_0x763a[471])},removeAllStylenames:function(_0x3536x2){var _0x3536x3=[];if(null!= _0x3536x2){_0x3536x2= _0x3536x2[_0x763a[224]](_0x763a[471]);for(var _0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){0<= _0x3536x2[_0x3536x4][_0x763a[2]](_0x763a[226])&& _0x3536x3[_0x763a[207]](_0x3536x2[_0x3536x4])}};return _0x3536x3[_0x763a[234]](_0x763a[471])},setCellStyles:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){if(null!= _0x3536x3&& 0< _0x3536x3[_0x763a[67]]){_0x3536x2[_0x763a[473]]();try{for(var _0x3536x9=0;_0x3536x9< _0x3536x3[_0x763a[67]];_0x3536x9++){if(null!= _0x3536x3[_0x3536x9]){var _0x3536xa=mxUtils[_0x763a[475]](_0x3536x2[_0x763a[474]](_0x3536x3[_0x3536x9]),_0x3536x4,_0x3536x5);_0x3536x2[_0x763a[475]](_0x3536x3[_0x3536x9],_0x3536xa)}}}finally{_0x3536x2[_0x763a[476]]()}}},setStyle:function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=null!= _0x3536x4&& (_0x763a[82]== typeof _0x3536x4[_0x763a[67]]|| 0< _0x3536x4[_0x763a[67]]);if(null== _0x3536x2|| 0== _0x3536x2[_0x763a[67]]){_0x3536x5&& (_0x3536x2= _0x3536x3+ _0x763a[226]+ _0x3536x4)}else {var _0x3536x9=_0x3536x2[_0x763a[2]](_0x3536x3+ _0x763a[226]);0> _0x3536x9?_0x3536x5&& (_0x3536x5= _0x763a[471]== _0x3536x2[_0x763a[225]](_0x3536x2[_0x763a[67]]- 1)?_0x763a[110]:_0x763a[471],_0x3536x2= _0x3536x2+ _0x3536x5+ _0x3536x3+ _0x763a[226]+ _0x3536x4):(_0x3536x3= _0x3536x5?_0x3536x3+ _0x763a[226]+ _0x3536x4:_0x763a[110],_0x3536x4= _0x3536x2[_0x763a[2]](_0x763a[471],_0x3536x9),_0x3536x5|| _0x3536x4++,_0x3536x2= _0x3536x2[_0x763a[85]](0,_0x3536x9)+ _0x3536x3+ (_0x3536x4> _0x3536x9?_0x3536x2[_0x763a[85]](_0x3536x4):_0x763a[110]))};return _0x3536x2},setCellStyleFlags:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){if(null!= _0x3536x3&& 0< _0x3536x3[_0x763a[67]]){_0x3536x2[_0x763a[473]]();try{for(var _0x3536xa=0;_0x3536xa< _0x3536x3[_0x763a[67]];_0x3536xa++){if(null!= _0x3536x3[_0x3536xa]){var _0x3536x12=mxUtils[_0x763a[477]](_0x3536x2[_0x763a[474]](_0x3536x3[_0x3536xa]),_0x3536x4,_0x3536x5,_0x3536x9);_0x3536x2[_0x763a[475]](_0x3536x3[_0x3536xa],_0x3536x12)}}}finally{_0x3536x2[_0x763a[476]]()}}},setStyleFlag:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){if(null== _0x3536x2|| 0== _0x3536x2[_0x763a[67]]){_0x3536x2= _0x3536x5|| null== _0x3536x5?_0x3536x3+ _0x763a[226]+ _0x3536x4:_0x3536x3+ _0x763a[478]}else {var _0x3536x9=_0x3536x2[_0x763a[2]](_0x3536x3+ _0x763a[226]);if(0> _0x3536x9){_0x3536x9= _0x763a[471]== _0x3536x2[_0x763a[225]](_0x3536x2[_0x763a[67]]- 1)?_0x763a[110]:_0x763a[471],_0x3536x2= _0x3536x5|| null== _0x3536x5?_0x3536x2+ _0x3536x9+ _0x3536x3+ _0x763a[226]+ _0x3536x4:_0x3536x2+ _0x3536x9+ _0x3536x3+ _0x763a[478]}else {var _0x3536xa=_0x3536x2[_0x763a[2]](_0x763a[471],_0x3536x9),_0x3536x12=_0x763a[110],_0x3536x12=0> _0x3536xa?_0x3536x2[_0x763a[85]](_0x3536x9+ _0x3536x3[_0x763a[67]]+ 1):_0x3536x2[_0x763a[85]](_0x3536x9+ _0x3536x3[_0x763a[67]]+ 1,_0x3536xa),_0x3536x12=null== _0x3536x5?parseInt(_0x3536x12)^ _0x3536x4:_0x3536x5?parseInt(_0x3536x12)| _0x3536x4:parseInt(_0x3536x12)& ~_0x3536x4;_0x3536x2= _0x3536x2[_0x763a[85]](0,_0x3536x9)+ _0x3536x3+ _0x763a[226]+ _0x3536x12+ (0<= _0x3536xa?_0x3536x2[_0x763a[85]](_0x3536xa):_0x763a[110])}};return _0x3536x2},getAlignmentAsPoint:function(_0x3536x2,_0x3536x3){var _0x3536x4=0,_0x3536x5=0;_0x3536x2== mxConstants[_0x763a[479]]?_0x3536x4= -0.5:_0x3536x2== mxConstants[_0x763a[480]]&& (_0x3536x4= -1);_0x3536x3== mxConstants[_0x763a[481]]?_0x3536x5= -0.5:_0x3536x3== mxConstants[_0x763a[482]]&& (_0x3536x5= -1);return new mxPoint(_0x3536x4,_0x3536x5)},getSizeForString:function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x3= null!= _0x3536x3?_0x3536x3:mxConstants[_0x763a[483]];_0x3536x4= null!= _0x3536x4?_0x3536x4:mxConstants[_0x763a[484]];var _0x3536x5=document[_0x763a[55]](_0x763a[485]);_0x3536x5[_0x763a[124]][_0x763a[486]]= _0x3536x4;_0x3536x5[_0x763a[124]][_0x763a[487]]= Math[_0x763a[488]](_0x3536x3)+ _0x763a[168];_0x3536x5[_0x763a[124]][_0x763a[489]]= Math[_0x763a[488]](_0x3536x3* mxConstants[_0x763a[490]])+ _0x763a[168];_0x3536x5[_0x763a[124]][_0x763a[491]]= _0x763a[492];_0x3536x5[_0x763a[124]][_0x763a[493]]= _0x763a[494];_0x3536x5[_0x763a[124]][_0x763a[187]]= _0x763a[188];_0x3536x5[_0x763a[124]][_0x763a[495]]= mxClient[_0x763a[496]]?_0x763a[497]:_0x763a[498];_0x3536x5[_0x763a[124]][_0x763a[499]]= _0x763a[500];_0x3536x5[_0x763a[339]]= _0x3536x2;document[_0x763a[112]][_0x763a[62]](_0x3536x5);_0x3536x2= new mxRectangle(0,0,_0x3536x5[_0x763a[359]],_0x3536x5[_0x763a[167]]);document[_0x763a[112]][_0x763a[266]](_0x3536x5);return _0x3536x2},getViewXml:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x5= null!= _0x3536x5?_0x3536x5:0;_0x3536x9= null!= _0x3536x9?_0x3536x9:0;_0x3536x3= null!= _0x3536x3?_0x3536x3:1;null== _0x3536x4&& (_0x3536x4= [_0x3536x2[_0x763a[502]]()[_0x763a[501]]()]);var _0x3536xa=_0x3536x2[_0x763a[249]](),_0x3536x12=null,_0x3536x13=_0x3536xa[_0x763a[503]]();_0x3536xa[_0x763a[504]](!1);var _0x3536x14=_0x3536xa[_0x763a[505]],_0x3536x15=_0x3536xa[_0x763a[506]];_0x3536x2[_0x763a[507]]== mxConstants[_0x763a[508]]?(_0x3536xa[_0x763a[505]]= document[_0x763a[509]](mxConstants.NS_SVG,_0x763a[449]),_0x3536xa[_0x763a[510]][_0x763a[62]](_0x3536xa[_0x763a[505]]),_0x3536xa[_0x763a[506]]= document[_0x763a[509]](mxConstants.NS_SVG,_0x763a[449])):(_0x3536xa[_0x763a[505]]= _0x3536xa[_0x763a[505]][_0x763a[511]](!1),_0x3536xa[_0x763a[510]][_0x763a[62]](_0x3536xa[_0x763a[505]]),_0x3536xa[_0x763a[506]]= _0x3536xa[_0x763a[506]][_0x763a[511]](!1));_0x3536xa[_0x763a[510]][_0x763a[62]](_0x3536xa[_0x763a[506]]);var _0x3536x16=_0x3536xa[_0x763a[512]]();_0x3536xa[_0x763a[513]]= new mxPoint(_0x3536x5,_0x3536x9);_0x3536x3= new mxTemporaryCellStates(_0x3536x2[_0x763a[249]](),_0x3536x3,_0x3536x4);try{_0x3536x12= ( new mxCodec)[_0x763a[514]](_0x3536x2[_0x763a[249]]())}finally{_0x3536x3[_0x763a[515]](),_0x3536xa[_0x763a[513]]= _0x3536x16,_0x3536xa[_0x763a[510]][_0x763a[266]](_0x3536xa[_0x763a[505]]),_0x3536xa[_0x763a[510]][_0x763a[266]](_0x3536xa[_0x763a[506]]),_0x3536xa[_0x763a[505]]= _0x3536x14,_0x3536xa[_0x763a[506]]= _0x3536x15,_0x3536xa[_0x763a[504]](_0x3536x13)};return _0x3536x12},getScaleForPageCount:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){if(1> _0x3536x2){return 1};_0x3536x4= null!= _0x3536x4?_0x3536x4:mxConstants[_0x763a[516]];_0x3536x5= null!= _0x3536x5?_0x3536x5:0;var _0x3536x9=_0x3536x4[_0x763a[117]]- 2* _0x3536x5;_0x3536x4= _0x3536x4[_0x763a[119]]- 2* _0x3536x5;_0x3536x5= _0x3536x3[_0x763a[517]]()[_0x763a[238]]();_0x3536x3= _0x3536x3[_0x763a[249]]()[_0x763a[518]]();_0x3536x5[_0x763a[117]]/= _0x3536x3;_0x3536x5[_0x763a[119]]/= _0x3536x3;_0x3536x3= _0x3536x5[_0x763a[117]];_0x3536x4= _0x3536x3/ _0x3536x5[_0x763a[119]]/ (_0x3536x9/ _0x3536x4);_0x3536x5= Math[_0x763a[428]](_0x3536x2);var _0x3536xa=Math[_0x763a[428]](_0x3536x4);_0x3536x4= _0x3536x5* _0x3536xa;_0x3536x5/= _0x3536xa;if(1> _0x3536x4&& _0x3536x5> _0x3536x2){var _0x3536x12=_0x3536x5/ _0x3536x2;_0x3536x5= _0x3536x2;_0x3536x4/= _0x3536x12};1> _0x3536x5&& _0x3536x4> _0x3536x2&& (_0x3536x12= _0x3536x4/ _0x3536x2,_0x3536x4= _0x3536x2,_0x3536x5/= _0x3536x12);_0x3536x12= Math[_0x763a[430]](_0x3536x4)* Math[_0x763a[430]](_0x3536x5);for(_0x3536xa= 0;_0x3536x12> _0x3536x2;){var _0x3536x12=Math[_0x763a[519]](_0x3536x4)/ _0x3536x4,_0x3536x13=Math[_0x763a[519]](_0x3536x5)/ _0x3536x5;1== _0x3536x12&& (_0x3536x12= Math[_0x763a[519]](_0x3536x4- 1)/ _0x3536x4);1== _0x3536x13&& (_0x3536x13= Math[_0x763a[519]](_0x3536x5- 1)/ _0x3536x5);_0x3536x12= _0x3536x12> _0x3536x13?_0x3536x12:_0x3536x13;_0x3536x4*= _0x3536x12;_0x3536x5*= _0x3536x12;_0x3536x12= Math[_0x763a[430]](_0x3536x4)* Math[_0x763a[430]](_0x3536x5);_0x3536xa++;if(10< _0x3536xa){break}};return 0.99999* (_0x3536x9* _0x3536x4/ _0x3536x3)},show:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x4= null!= _0x3536x4?_0x3536x4:0;_0x3536x5= null!= _0x3536x5?_0x3536x5:0;null== _0x3536x3?_0x3536x3= window[_0x763a[392]]()[_0x763a[395]]:_0x3536x3[_0x763a[392]]();var _0x3536x9=_0x3536x2[_0x763a[517]]();_0x3536x4= -_0x3536x9[_0x763a[235]]+ _0x3536x4;_0x3536x5= -_0x3536x9[_0x763a[236]]+ _0x3536x5;if(mxClient[_0x763a[80]]){for(var _0x3536x9=_0x763a[520],_0x3536xa=document[_0x763a[64]](_0x763a[521]),_0x3536x12=0;_0x3536x12< _0x3536xa[_0x763a[67]];_0x3536x12++){_0x3536x9+= _0x3536xa[_0x3536x12][_0x763a[342]]};_0x3536x9+= _0x763a[522];for(_0x3536x12= 0;_0x3536x12< document[_0x763a[523]][_0x763a[67]];_0x3536x12++){try{_0x3536x9+= document[_0x763a[523]](_0x3536x12)[_0x763a[103]]}catch(h){}};_0x3536x9+= _0x763a[524];_0x3536x9+= _0x763a[525];_0x3536x9+= _0x3536x2[_0x763a[526]][_0x763a[339]];_0x3536x9+= _0x763a[527];_0x3536x9+= _0x763a[528];_0x3536x3[_0x763a[171]](_0x3536x9);_0x3536x3[_0x763a[268]]();_0x3536x2= _0x3536x3[_0x763a[112]][_0x763a[64]](_0x763a[529])[0];null!= _0x3536x2&& (_0x3536x2[_0x763a[124]][_0x763a[491]]= _0x763a[492],_0x3536x2[_0x763a[124]][_0x763a[361]]= _0x3536x4+ _0x763a[168],_0x3536x2[_0x763a[124]][_0x763a[125]]= _0x3536x5+ _0x763a[168])}else {_0x3536x3[_0x763a[171]](_0x763a[530]);_0x3536x3[_0x763a[171]](_0x763a[531]);_0x3536xa= document[_0x763a[64]](_0x763a[521]);for(_0x3536x12= 0;_0x3536x12< _0x3536xa[_0x763a[67]];_0x3536x12++){_0x3536x3[_0x763a[171]](mxUtils[_0x763a[532]](_0x3536xa[_0x3536x12]))};_0x3536xa= document[_0x763a[64]](_0x763a[54]);for(_0x3536x12= 0;_0x3536x12< _0x3536xa[_0x763a[67]];_0x3536x12++){_0x3536x3[_0x763a[171]](mxUtils[_0x763a[532]](_0x3536xa[_0x3536x12]))};_0x3536xa= document[_0x763a[64]](_0x763a[124]);for(_0x3536x12= 0;_0x3536x12< _0x3536xa[_0x763a[67]];_0x3536x12++){_0x3536x3[_0x763a[171]](mxUtils[_0x763a[532]](_0x3536xa[_0x3536x12]))};_0x3536x3[_0x763a[171]](_0x763a[533]);_0x3536x3[_0x763a[171]](_0x763a[534]);_0x3536x3[_0x763a[268]]();null== _0x3536x3[_0x763a[112]]&& _0x3536x3[_0x763a[158]][_0x763a[62]](_0x3536x3[_0x763a[55]](_0x763a[112]));_0x3536x3[_0x763a[112]][_0x763a[124]][_0x763a[277]]= _0x763a[278];for(_0x3536x2= _0x3536x2[_0x763a[526]][_0x763a[285]];null!= _0x3536x2;){_0x3536x12= _0x3536x2[_0x763a[511]](!0),_0x3536x3[_0x763a[112]][_0x763a[62]](_0x3536x12),_0x3536x2= _0x3536x2[_0x763a[287]]};_0x3536x2= _0x3536x3[_0x763a[64]](_0x763a[449])[0];null!= _0x3536x2&& (_0x3536x2[_0x763a[57]](_0x763a[535],_0x763a[536]+ _0x3536x4+ _0x763a[537]+ _0x3536x5+ _0x763a[460]),_0x3536x4= _0x3536x2[_0x763a[538]],_0x3536x4[_0x763a[57]](_0x763a[117],_0x3536x9[_0x763a[117]]+ Math[_0x763a[160]](_0x3536x9[_0x763a[235]],0)+ 3),_0x3536x4[_0x763a[57]](_0x763a[119],_0x3536x9[_0x763a[119]]+ Math[_0x763a[160]](_0x3536x9[_0x763a[236]],0)+ 3))};mxUtils[_0x763a[272]](_0x3536x3[_0x763a[112]]);return _0x3536x3},printScreen:function(_0x3536x2){var _0x3536x3=window[_0x763a[392]]();mxUtils[_0x763a[539]](_0x3536x2,_0x3536x3[_0x763a[395]]);_0x3536x2= function(){_0x3536x3[_0x763a[393]]();_0x3536x3[_0x763a[540]]();_0x3536x3[_0x763a[268]]()};mxClient[_0x763a[76]]?_0x3536x3[_0x763a[261]](_0x3536x2,500):_0x3536x2()},popup:function(_0x3536x2,_0x3536x3){if(_0x3536x3){var _0x3536x4=document[_0x763a[55]](_0x763a[485]);_0x3536x4[_0x763a[124]][_0x763a[277]]= _0x763a[276];_0x3536x4[_0x763a[124]][_0x763a[117]]= _0x763a[541];_0x3536x4[_0x763a[124]][_0x763a[119]]= _0x763a[542];var _0x3536x5=document[_0x763a[55]](_0x763a[543]);_0x3536x5[_0x763a[339]]= mxUtils[_0x763a[321]](_0x3536x2,!1)[_0x763a[230]](/\n/g,_0x763a[545])[_0x763a[230]](/ /g,_0x763a[544]);_0x3536x4[_0x763a[62]](_0x3536x5);_0x3536x4= new mxWindow(_0x763a[546],_0x3536x4,document[_0x763a[112]][_0x763a[159]]/ 2- 320,(document[_0x763a[112]][_0x763a[157]]|| document[_0x763a[158]][_0x763a[157]])/ 2- 240,640,480,!1,!0);_0x3536x4[_0x763a[164]](!0);_0x3536x4[_0x763a[175]](!0)}else {mxClient[_0x763a[133]]?(_0x3536x4= window[_0x763a[392]](),_0x3536x4[_0x763a[395]][_0x763a[171]](_0x763a[547]+ mxUtils[_0x763a[321]](_0x3536x2)+ _0x763a[548]),_0x3536x4[_0x763a[395]][_0x763a[268]]()):(_0x3536x4= window[_0x763a[392]](),_0x3536x5= _0x3536x4[_0x763a[395]][_0x763a[55]](_0x763a[543]),_0x3536x5[_0x763a[339]]= mxUtils[_0x763a[321]](_0x3536x2,!1)[_0x763a[230]](/\n/g,_0x763a[545])[_0x763a[230]](/ /g,_0x763a[544]),_0x3536x4[_0x763a[395]][_0x763a[112]][_0x763a[62]](_0x3536x5))}},alert:function(_0x3536x2){alert(_0x3536x2)},prompt:function(_0x3536x2,_0x3536x3){return prompt(_0x3536x2,_0x3536x3)},confirm:function(_0x3536x2){return confirm(_0x3536x2)},error:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=document[_0x763a[55]](_0x763a[485]);_0x3536x9[_0x763a[124]][_0x763a[549]]= _0x763a[550];var _0x3536xa=document[_0x763a[55]](_0x763a[466]);_0x3536xa[_0x763a[57]](_0x763a[390],_0x3536x5|| mxUtils[_0x763a[551]]);_0x3536xa[_0x763a[57]](_0x763a[552],_0x763a[553]);_0x3536xa[_0x763a[124]][_0x763a[123]]= _0x763a[554];_0x3536x9[_0x763a[62]](_0x3536xa);_0x3536x9[_0x763a[62]](document[_0x763a[344]](_0x763a[555]));_0x3536x9[_0x763a[62]](document[_0x763a[344]](_0x763a[555]));_0x3536x9[_0x763a[62]](document[_0x763a[344]](_0x763a[555]));mxUtils[_0x763a[53]](_0x3536x9,_0x3536x2);_0x3536x2= document[_0x763a[112]][_0x763a[159]];_0x3536x5= document[_0x763a[112]][_0x763a[157]]|| document[_0x763a[158]][_0x763a[157]];var _0x3536x12= new mxWindow(mxResources[_0x763a[203]](mxUtils[_0x763a[556]])|| mxUtils[_0x763a[556]],_0x3536x9,(_0x3536x2- _0x3536x3)/ 2,_0x3536x5/ 4,_0x3536x3,null,!1,!0);_0x3536x4&& (mxUtils[_0x763a[345]](_0x3536x9),_0x3536x3= document[_0x763a[55]](_0x763a[346]),_0x3536x4= document[_0x763a[55]](_0x763a[172]),mxClient[_0x763a[80]]?_0x3536x4[_0x763a[124]][_0x763a[103]]= _0x763a[557]:_0x3536x4[_0x763a[57]](_0x763a[124],_0x763a[557]),mxEvent[_0x763a[169]](_0x3536x4,_0x763a[173],function(_0x3536x2){_0x3536x12[_0x763a[515]]()}),mxUtils[_0x763a[53]](_0x3536x4,mxResources[_0x763a[203]](mxUtils[_0x763a[558]])|| mxUtils[_0x763a[558]]),_0x3536x3[_0x763a[62]](_0x3536x4),_0x3536x9[_0x763a[62]](_0x3536x3),mxUtils[_0x763a[345]](_0x3536x9),_0x3536x12[_0x763a[164]](!0));_0x3536x12[_0x763a[175]](!0);return _0x3536x12},makeDraggable:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15){_0x3536x2= new mxDragSource(_0x3536x2,_0x3536x4);_0x3536x2[_0x763a[559]]= new mxPoint(null!= _0x3536x9?_0x3536x9:0,null!= _0x3536xa?_0x3536xa:mxConstants[_0x763a[560]]);_0x3536x2[_0x763a[561]]= _0x3536x12;_0x3536x2[_0x763a[562]](!1);null!= _0x3536x14&& (_0x3536x2[_0x763a[563]]= _0x3536x14);null!= _0x3536x15&& (_0x3536x2[_0x763a[564]]= _0x3536x15);_0x3536x2[_0x763a[565]]= function(_0x3536x2){return _0x763a[279]== typeof _0x3536x3?_0x3536x3(_0x3536x2):_0x3536x3};null!= _0x3536x5&& (_0x3536x2[_0x763a[566]]= function(){return _0x3536x5[_0x763a[511]](!0)},_0x3536x13&& (_0x3536x2[_0x763a[567]]= function(_0x3536x2){var _0x3536x3=_0x3536x5[_0x763a[511]](!0),_0x3536x4=parseInt(_0x3536x3[_0x763a[124]][_0x763a[117]]),_0x3536x9=parseInt(_0x3536x3[_0x763a[124]][_0x763a[119]]);_0x3536x3[_0x763a[124]][_0x763a[117]]= Math[_0x763a[488]](_0x3536x4* _0x3536x2[_0x763a[441]][_0x763a[255]])+ _0x763a[168];_0x3536x3[_0x763a[124]][_0x763a[119]]= Math[_0x763a[488]](_0x3536x9* _0x3536x2[_0x763a[441]][_0x763a[255]])+ _0x763a[168];return _0x3536x3}));return _0x3536x2}},mxConstants={DEFAULT_HOTSPOT:0.3,MIN_HOTSPOT_SIZE:8,MAX_HOTSPOT_SIZE:0,RENDERING_HINT_EXACT:_0x763a[568],RENDERING_HINT_FASTER:_0x763a[569],RENDERING_HINT_FASTEST:_0x763a[570],DIALECT_SVG:_0x763a[571],DIALECT_VML:_0x763a[572],DIALECT_MIXEDHTML:_0x763a[573],DIALECT_PREFERHTML:_0x763a[574],DIALECT_STRICTHTML:_0x763a[575],NS_SVG:_0x763a[576],NS_XHTML:_0x763a[577],NS_XLINK:_0x763a[578],SHADOWCOLOR:_0x763a[579],SHADOW_OFFSET_X:2,SHADOW_OFFSET_Y:3,SHADOW_OPACITY:1,NODETYPE_ELEMENT:1,NODETYPE_ATTRIBUTE:2,NODETYPE_TEXT:3,NODETYPE_CDATA:4,NODETYPE_ENTITY_REFERENCE:5,NODETYPE_ENTITY:6,NODETYPE_PROCESSING_INSTRUCTION:7,NODETYPE_COMMENT:8,NODETYPE_DOCUMENT:9,NODETYPE_DOCUMENTTYPE:10,NODETYPE_DOCUMENT_FRAGMENT:11,NODETYPE_NOTATION:12,TOOLTIP_VERTICAL_OFFSET:16,DEFAULT_VALID_COLOR:_0x763a[580],DEFAULT_INVALID_COLOR:_0x763a[581],HIGHLIGHT_STROKEWIDTH:3,CURSOR_MOVABLE_VERTEX:_0x763a[582],CURSOR_MOVABLE_EDGE:_0x763a[582],CURSOR_LABEL_HANDLE:_0x763a[583],CURSOR_BEND_HANDLE:_0x763a[356],CURSOR_CONNECT:_0x763a[356],HIGHLIGHT_COLOR:_0x763a[580],CONNECT_TARGET_COLOR:_0x763a[584],INVALID_CONNECT_TARGET_COLOR:_0x763a[581],DROP_TARGET_COLOR:_0x763a[584],VALID_COLOR:_0x763a[580],INVALID_COLOR:_0x763a[581],EDGE_SELECTION_COLOR:_0x763a[580],VERTEX_SELECTION_COLOR:_0x763a[580],VERTEX_SELECTION_STROKEWIDTH:1,EDGE_SELECTION_STROKEWIDTH:1,VERTEX_SELECTION_DASHED:!0,EDGE_SELECTION_DASHED:!0,GUIDE_COLOR:_0x763a[581],GUIDE_STROKEWIDTH:1,OUTLINE_COLOR:_0x763a[585],OUTLINE_STROKEWIDTH:mxClient[_0x763a[80]]?2:3,HANDLE_SIZE:7,LABEL_HANDLE_SIZE:4,HANDLE_FILLCOLOR:_0x763a[580],HANDLE_STROKECOLOR:_0x763a[586],LABEL_HANDLE_FILLCOLOR:_0x763a[587],CONNECT_HANDLE_FILLCOLOR:_0x763a[584],LOCKED_HANDLE_FILLCOLOR:_0x763a[581],OUTLINE_HANDLE_FILLCOLOR:_0x763a[588],OUTLINE_HANDLE_STROKECOLOR:_0x763a[589],DEFAULT_FONTFAMILY:_0x763a[590],DEFAULT_FONTSIZE:11,LINE_HEIGHT:1.2,DEFAULT_FONTSTYLE:0,DEFAULT_STARTSIZE:40,DEFAULT_MARKERSIZE:6,DEFAULT_IMAGESIZE:24,ENTITY_SEGMENT:30,RECTANGLE_ROUNDING_FACTOR:0.15,LINE_ARCSIZE:20,ARROW_SPACING:10,ARROW_WIDTH:30,ARROW_SIZE:30,PAGE_FORMAT_A4_PORTRAIT: new mxRectangle(0,0,826,1169),PAGE_FORMAT_A4_LANDSCAPE: new mxRectangle(0,0,1169,826),PAGE_FORMAT_LETTER_PORTRAIT: new mxRectangle(0,0,850,1100),PAGE_FORMAT_LETTER_LANDSCAPE: new mxRectangle(0,0,1100,850),NONE:_0x763a[130],STYLE_PERIMETER:_0x763a[591],STYLE_SOURCE_PORT:_0x763a[592],STYLE_TARGET_PORT:_0x763a[593],STYLE_PORT_CONSTRAINT:_0x763a[594],STYLE_OPACITY:_0x763a[461],STYLE_TEXT_OPACITY:_0x763a[595],STYLE_OVERFLOW:_0x763a[277],STYLE_ORTHOGONAL:_0x763a[596],STYLE_EXIT_X:_0x763a[597],STYLE_EXIT_Y:_0x763a[598],STYLE_EXIT_PERIMETER:_0x763a[599],STYLE_ENTRY_X:_0x763a[600],STYLE_ENTRY_Y:_0x763a[601],STYLE_ENTRY_PERIMETER:_0x763a[602],STYLE_WHITE_SPACE:_0x763a[493],STYLE_ROTATION:_0x763a[603],STYLE_FILLCOLOR:_0x763a[604],STYLE_SWIMLANE_FILLCOLOR:_0x763a[605],STYLE_GRADIENTCOLOR:_0x763a[606],STYLE_GRADIENT_DIRECTION:_0x763a[607],STYLE_STROKECOLOR:_0x763a[608],STYLE_SEPARATORCOLOR:_0x763a[609],STYLE_STROKEWIDTH:_0x763a[610],STYLE_ALIGN:_0x763a[611],STYLE_VERTICAL_ALIGN:_0x763a[123],STYLE_LABEL_POSITION:_0x763a[612],STYLE_VERTICAL_LABEL_POSITION:_0x763a[613],STYLE_IMAGE_ASPECT:_0x763a[614],STYLE_IMAGE_ALIGN:_0x763a[615],STYLE_IMAGE_VERTICAL_ALIGN:_0x763a[616],STYLE_GLASS:_0x763a[617],STYLE_IMAGE:_0x763a[618],STYLE_IMAGE_WIDTH:_0x763a[619],STYLE_IMAGE_HEIGHT:_0x763a[620],STYLE_IMAGE_BACKGROUND:_0x763a[621],STYLE_IMAGE_BORDER:_0x763a[622],STYLE_FLIPH:_0x763a[623],STYLE_FLIPV:_0x763a[624],STYLE_NOLABEL:_0x763a[625],STYLE_NOEDGESTYLE:_0x763a[626],STYLE_LABEL_BACKGROUNDCOLOR:_0x763a[627],STYLE_LABEL_BORDERCOLOR:_0x763a[628],STYLE_LABEL_PADDING:_0x763a[629],STYLE_INDICATOR_SHAPE:_0x763a[630],STYLE_INDICATOR_IMAGE:_0x763a[631],STYLE_INDICATOR_COLOR:_0x763a[632],STYLE_INDICATOR_STROKECOLOR:_0x763a[633],STYLE_INDICATOR_GRADIENTCOLOR:_0x763a[634],STYLE_INDICATOR_SPACING:_0x763a[635],STYLE_INDICATOR_WIDTH:_0x763a[636],STYLE_INDICATOR_HEIGHT:_0x763a[637],STYLE_INDICATOR_DIRECTION:_0x763a[638],STYLE_SHADOW:_0x763a[639],STYLE_SEGMENT:_0x763a[640],STYLE_ENDARROW:_0x763a[641],STYLE_STARTARROW:_0x763a[642],STYLE_ENDSIZE:_0x763a[643],STYLE_STARTSIZE:_0x763a[644],STYLE_SWIMLANE_LINE:_0x763a[645],STYLE_ENDFILL:_0x763a[646],STYLE_STARTFILL:_0x763a[647],STYLE_DASHED:_0x763a[648],STYLE_DASH_PATTERN:_0x763a[649],STYLE_ROUNDED:_0x763a[650],STYLE_CURVED:_0x763a[651],STYLE_ARCSIZE:_0x763a[652],STYLE_SMOOTH:_0x763a[653],STYLE_SOURCE_PERIMETER_SPACING:_0x763a[654],STYLE_TARGET_PERIMETER_SPACING:_0x763a[655],STYLE_PERIMETER_SPACING:_0x763a[656],STYLE_SPACING:_0x763a[657],STYLE_SPACING_TOP:_0x763a[658],STYLE_SPACING_LEFT:_0x763a[659],STYLE_SPACING_BOTTOM:_0x763a[660],STYLE_SPACING_RIGHT:_0x763a[661],STYLE_HORIZONTAL:_0x763a[662],STYLE_DIRECTION:_0x763a[663],STYLE_ELBOW:_0x763a[664],STYLE_FONTCOLOR:_0x763a[665],STYLE_FONTFAMILY:_0x763a[486],STYLE_FONTSIZE:_0x763a[487],STYLE_FONTSTYLE:_0x763a[666],STYLE_AUTOSIZE:_0x763a[667],STYLE_FOLDABLE:_0x763a[668],STYLE_EDITABLE:_0x763a[669],STYLE_BENDABLE:_0x763a[670],STYLE_MOVABLE:_0x763a[671],STYLE_RESIZABLE:_0x763a[672],STYLE_CLONEABLE:_0x763a[673],STYLE_DELETABLE:_0x763a[674],STYLE_SHAPE:_0x763a[253],STYLE_EDGE:_0x763a[675],STYLE_LOOP:_0x763a[676],STYLE_ROUTING_CENTER_X:_0x763a[677],STYLE_ROUTING_CENTER_Y:_0x763a[678],FONT_BOLD:1,FONT_ITALIC:2,FONT_UNDERLINE:4,FONT_SHADOW:8,SHAPE_RECTANGLE:_0x763a[679],SHAPE_ELLIPSE:_0x763a[680],SHAPE_DOUBLE_ELLIPSE:_0x763a[681],SHAPE_RHOMBUS:_0x763a[682],SHAPE_LINE:_0x763a[683],SHAPE_IMAGE:_0x763a[618],SHAPE_ARROW:_0x763a[684],SHAPE_LABEL:_0x763a[685],SHAPE_CYLINDER:_0x763a[686],SHAPE_SWIMLANE:_0x763a[687],SHAPE_CONNECTOR:_0x763a[688],SHAPE_ACTOR:_0x763a[689],SHAPE_CLOUD:_0x763a[690],SHAPE_TRIANGLE:_0x763a[691],SHAPE_HEXAGON:_0x763a[692],ARROW_CLASSIC:_0x763a[693],ARROW_BLOCK:_0x763a[694],ARROW_OPEN:_0x763a[392],ARROW_OVAL:_0x763a[695],ARROW_DIAMOND:_0x763a[696],ARROW_DIAMOND_THIN:_0x763a[697],ALIGN_LEFT:_0x763a[361],ALIGN_CENTER:_0x763a[698],ALIGN_RIGHT:_0x763a[699],ALIGN_TOP:_0x763a[125],ALIGN_MIDDLE:_0x763a[554],ALIGN_BOTTOM:_0x763a[553],DIRECTION_NORTH:_0x763a[700],DIRECTION_SOUTH:_0x763a[701],DIRECTION_EAST:_0x763a[702],DIRECTION_WEST:_0x763a[703],DIRECTION_MASK_NONE:0,DIRECTION_MASK_WEST:1,DIRECTION_MASK_NORTH:2,DIRECTION_MASK_SOUTH:4,DIRECTION_MASK_EAST:8,DIRECTION_MASK_ALL:15,ELBOW_VERTICAL:_0x763a[704],ELBOW_HORIZONTAL:_0x763a[662],EDGESTYLE_ELBOW:_0x763a[705],EDGESTYLE_ENTITY_RELATION:_0x763a[706],EDGESTYLE_LOOP:_0x763a[707],EDGESTYLE_SIDETOSIDE:_0x763a[708],EDGESTYLE_TOPTOBOTTOM:_0x763a[709],EDGESTYLE_ORTHOGONAL:_0x763a[710],EDGESTYLE_SEGMENT:_0x763a[711],PERIMETER_ELLIPSE:_0x763a[712],PERIMETER_RECTANGLE:_0x763a[713],PERIMETER_RHOMBUS:_0x763a[714],PERIMETER_TRIANGLE:_0x763a[715]};function mxEventObject(_0x3536x2){this[_0x763a[298]]= _0x3536x2;this[_0x763a[716]]= [];for(var _0x3536x3=1;_0x3536x3< arguments[_0x763a[67]];_0x3536x3+= 2){null!= arguments[_0x3536x3+ 1]&& (this[_0x763a[716]][arguments[_0x3536x3]]= arguments[_0x3536x3+ 1])}}mxEventObject[_0x763a[202]][_0x763a[298]]= null;mxEventObject[_0x763a[202]][_0x763a[716]]= null;mxEventObject[_0x763a[202]][_0x763a[717]]= !1;mxEventObject[_0x763a[202]][_0x763a[718]]= function(){return this[_0x763a[298]]};mxEventObject[_0x763a[202]][_0x763a[719]]= function(){return this[_0x763a[716]]};mxEventObject[_0x763a[202]][_0x763a[720]]= function(_0x3536x2){return this[_0x763a[716]][_0x3536x2]};mxEventObject[_0x763a[202]][_0x763a[721]]= function(){return this[_0x763a[717]]};mxEventObject[_0x763a[202]][_0x763a[722]]= function(){this[_0x763a[717]]= !0};function mxMouseEvent(_0x3536x2,_0x3536x3){this[_0x763a[723]]= _0x3536x2;this[_0x763a[724]]= _0x3536x3}mxMouseEvent[_0x763a[202]][_0x763a[717]]= !1;mxMouseEvent[_0x763a[202]][_0x763a[723]]= null;mxMouseEvent[_0x763a[202]][_0x763a[725]]= null;mxMouseEvent[_0x763a[202]][_0x763a[726]]= null;mxMouseEvent[_0x763a[202]][_0x763a[724]]= null;mxMouseEvent[_0x763a[202]][_0x763a[727]]= function(){return this[_0x763a[723]]};mxMouseEvent[_0x763a[202]][_0x763a[728]]= function(){return mxEvent[_0x763a[728]](this[_0x763a[723]])};mxMouseEvent[_0x763a[202]][_0x763a[729]]= function(_0x3536x2){if(null!= _0x3536x2){for(var _0x3536x3=this[_0x763a[728]]();null!= _0x3536x3;){if(_0x3536x3== _0x3536x2[_0x763a[252]]){return !0};_0x3536x3= _0x3536x3[_0x763a[265]]}};return !1};mxMouseEvent[_0x763a[202]][_0x763a[730]]= function(){return mxEvent[_0x763a[731]](this[_0x763a[727]]())};mxMouseEvent[_0x763a[202]][_0x763a[732]]= function(){return mxEvent[_0x763a[733]](this[_0x763a[727]]())};mxMouseEvent[_0x763a[202]][_0x763a[734]]= function(){return this[_0x763a[725]]};mxMouseEvent[_0x763a[202]][_0x763a[735]]= function(){return this[_0x763a[726]]};mxMouseEvent[_0x763a[202]][_0x763a[248]]= function(){return this[_0x763a[724]]};mxMouseEvent[_0x763a[202]][_0x763a[736]]= function(){var _0x3536x2=this[_0x763a[248]]();return null!= _0x3536x2?_0x3536x2[_0x763a[246]]:null};mxMouseEvent[_0x763a[202]][_0x763a[737]]= function(){return mxEvent[_0x763a[737]](this[_0x763a[727]]())};mxMouseEvent[_0x763a[202]][_0x763a[721]]= function(){return this[_0x763a[717]]};mxMouseEvent[_0x763a[202]][_0x763a[722]]= function(_0x3536x2){(null!= _0x3536x2?_0x3536x2:1)&& this[_0x763a[723]][_0x763a[738]]&& this[_0x763a[723]][_0x763a[738]]();this[_0x763a[723]][_0x763a[739]]= !1;this[_0x763a[717]]= !0};function mxEventSource(_0x3536x2){this[_0x763a[740]](_0x3536x2)}mxEventSource[_0x763a[202]][_0x763a[741]]= null;mxEventSource[_0x763a[202]][_0x763a[742]]= !0;mxEventSource[_0x763a[202]][_0x763a[743]]= null;mxEventSource[_0x763a[202]][_0x763a[503]]= function(){return this[_0x763a[742]]};mxEventSource[_0x763a[202]][_0x763a[504]]= function(_0x3536x2){this[_0x763a[742]]= _0x3536x2};mxEventSource[_0x763a[202]][_0x763a[744]]= function(){return this[_0x763a[743]]};mxEventSource[_0x763a[202]][_0x763a[740]]= function(_0x3536x2){this[_0x763a[743]]= _0x3536x2};mxEventSource[_0x763a[202]][_0x763a[169]]= function(_0x3536x2,_0x3536x3){null== this[_0x763a[741]]&& (this[_0x763a[741]]= []);this[_0x763a[741]][_0x763a[207]](_0x3536x2);this[_0x763a[741]][_0x763a[207]](_0x3536x3)};mxEventSource[_0x763a[202]][_0x763a[745]]= function(_0x3536x2){if(null!= this[_0x763a[741]]){for(var _0x3536x3=0;_0x3536x3< this[_0x763a[741]][_0x763a[67]];){this[_0x763a[741]][_0x3536x3+ 1]== _0x3536x2?this[_0x763a[741]][_0x763a[300]](_0x3536x3,2):_0x3536x3+= 2}}};mxEventSource[_0x763a[202]][_0x763a[746]]= function(_0x3536x2,_0x3536x3){if(null!= this[_0x763a[741]]&& this[_0x763a[503]]()){null== _0x3536x2&& (_0x3536x2= new mxEventObject);null== _0x3536x3&& (_0x3536x3= this[_0x763a[744]]());null== _0x3536x3&& (_0x3536x3= this);for(var _0x3536x4=[_0x3536x3,_0x3536x2],_0x3536x5=0;_0x3536x5< this[_0x763a[741]][_0x763a[67]];_0x3536x5+= 2){var _0x3536x9=this[_0x763a[741]][_0x3536x5];(null== _0x3536x9|| _0x3536x9== _0x3536x2[_0x763a[718]]())&& this[_0x763a[741]][_0x3536x5+ 1][_0x763a[183]](this,_0x3536x4)}}};var mxEvent={objects:[],addListener:function(){var _0x3536x2=function(_0x3536x2,_0x3536x4,_0x3536x5){null== _0x3536x2[_0x763a[69]]&& (_0x3536x2[_0x763a[69]]= [],mxEvent[_0x763a[68]][_0x763a[207]](_0x3536x2));_0x3536x2[_0x763a[69]][_0x763a[207]]({name:_0x3536x4,f:_0x3536x5})};return window[_0x763a[418]]?function(_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x3[_0x763a[418]](_0x3536x4,_0x3536x5,!1);_0x3536x2(_0x3536x3,_0x3536x4,_0x3536x5)}:function(_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x3[_0x763a[108]](_0x763a[747]+ _0x3536x4,_0x3536x5);_0x3536x2(_0x3536x3,_0x3536x4,_0x3536x5)}}(),removeListener:function(){var _0x3536x2=function(_0x3536x2,_0x3536x4,_0x3536x5){if(null!= _0x3536x2[_0x763a[69]]){_0x3536x4= _0x3536x2[_0x763a[69]][_0x763a[67]];for(var _0x3536x9=0;_0x3536x9< _0x3536x4;_0x3536x9++){if(_0x3536x2[_0x763a[69]][_0x3536x9][_0x763a[748]]== _0x3536x5){_0x3536x2[_0x763a[69]][_0x763a[300]](_0x3536x9,1);break}};0== _0x3536x2[_0x763a[69]][_0x763a[67]]&& (_0x3536x2[_0x763a[69]]= null)}};return window[_0x763a[749]]?function(_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x3[_0x763a[749]](_0x3536x4,_0x3536x5,!1);_0x3536x2(_0x3536x3,_0x3536x4,_0x3536x5)}:function(_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x3[_0x763a[750]](_0x763a[747]+ _0x3536x4,_0x3536x5);_0x3536x2(_0x3536x3,_0x3536x4,_0x3536x5)}}(),removeAllListeners:function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[69]];if(null!= _0x3536x3){for(;0< _0x3536x3[_0x763a[67]];){var _0x3536x4=_0x3536x3[0];mxEvent[_0x763a[745]](_0x3536x2,_0x3536x4[_0x763a[298]],_0x3536x4[_0x763a[748]])}}},addGestureListeners:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){null!= _0x3536x3&& mxEvent[_0x763a[169]](_0x3536x2,_0x763a[751],_0x3536x3);null!= _0x3536x4&& mxEvent[_0x763a[169]](_0x3536x2,_0x763a[752],_0x3536x4);null!= _0x3536x5&& mxEvent[_0x763a[169]](_0x3536x2,_0x763a[753],_0x3536x5);mxClient[_0x763a[754]]&& (null!= _0x3536x3&& mxEvent[_0x763a[169]](_0x3536x2,_0x763a[755],_0x3536x3),null!= _0x3536x4&& mxEvent[_0x763a[169]](_0x3536x2,_0x763a[756],_0x3536x4),null!= _0x3536x5&& mxEvent[_0x763a[169]](_0x3536x2,_0x763a[757],_0x3536x5))},removeGestureListeners:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){null!= _0x3536x3&& mxEvent[_0x763a[745]](_0x3536x2,_0x763a[751],_0x3536x3);null!= _0x3536x4&& mxEvent[_0x763a[745]](_0x3536x2,_0x763a[752],_0x3536x4);null!= _0x3536x5&& mxEvent[_0x763a[745]](_0x3536x2,_0x763a[753],_0x3536x5);mxClient[_0x763a[754]]&& (null!= _0x3536x3&& mxEvent[_0x763a[745]](_0x3536x2,_0x763a[755],_0x3536x3),null!= _0x3536x4&& mxEvent[_0x763a[745]](_0x3536x2,_0x763a[756],_0x3536x4),null!= _0x3536x5&& mxEvent[_0x763a[745]](_0x3536x2,_0x763a[757],_0x3536x5))},redirectMouseEvents:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12){var _0x3536x13=function(_0x3536x2){return _0x763a[279]== typeof _0x3536x4?_0x3536x4(_0x3536x2):_0x3536x4};mxEvent[_0x763a[759]](_0x3536x2,function(_0x3536x2){null!= _0x3536x5?_0x3536x5(_0x3536x2):mxEvent[_0x763a[721]](_0x3536x2)|| _0x3536x3[_0x763a[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x3536x2,_0x3536x13(_0x3536x2)))},function(_0x3536x2){null!= _0x3536x9?_0x3536x9(_0x3536x2):mxEvent[_0x763a[721]](_0x3536x2)|| _0x3536x3[_0x763a[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x3536x2,_0x3536x13(_0x3536x2)))},function(_0x3536x2){null!= _0x3536xa?_0x3536xa(_0x3536x2):mxEvent[_0x763a[721]](_0x3536x2)|| _0x3536x3[_0x763a[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x3536x2,_0x3536x13(_0x3536x2)))});mxEvent[_0x763a[169]](_0x3536x2,_0x763a[760],function(_0x3536x2){if(null!= _0x3536x12){_0x3536x12(_0x3536x2)}else {if(!mxEvent[_0x763a[721]](_0x3536x2)){var _0x3536x4=_0x3536x13(_0x3536x2);_0x3536x3[_0x763a[761]](_0x3536x2,null!= _0x3536x4?_0x3536x4[_0x763a[246]]:null)}}})},release:function(_0x3536x2){if(null!= _0x3536x2&& (mxEvent[_0x763a[70]](_0x3536x2),_0x3536x2= _0x3536x2[_0x763a[271]],null!= _0x3536x2)){for(var _0x3536x3=_0x3536x2[_0x763a[67]],_0x3536x4=0;_0x3536x4< _0x3536x3;_0x3536x4+= 1){mxEvent[_0x763a[762]](_0x3536x2[_0x3536x4])}}},addMouseWheelListener:function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=function(_0x3536x3){null== _0x3536x3&& (_0x3536x3= window[_0x763a[763]]);var _0x3536x5=0,_0x3536x5=mxClient[_0x763a[133]]&& !mxClient[_0x763a[75]]&& !mxClient[_0x763a[76]]?-_0x3536x3[_0x763a[764]]/ 2:_0x3536x3[_0x763a[765]]/ 120;0!= _0x3536x5&& _0x3536x2(_0x3536x3,0< _0x3536x5)};mxClient[_0x763a[133]]?mxEvent[_0x763a[169]](window,mxClient[_0x763a[75]]|| mxClient[_0x763a[76]]?_0x763a[766]:_0x763a[767],_0x3536x3):mxEvent[_0x763a[169]](document,_0x763a[766],_0x3536x3)}},disableContextMenu:function(){return mxClient[_0x763a[80]]&& (_0x763a[82]=== typeof document[_0x763a[5]]|| 9> document[_0x763a[5]])?function(_0x3536x2){mxEvent[_0x763a[169]](_0x3536x2,_0x763a[768],function(){return !1})}:function(_0x3536x2){_0x3536x2[_0x763a[57]](_0x763a[769],_0x763a[770])}}(),getSource:function(_0x3536x2){return null!= _0x3536x2[_0x763a[771]]?_0x3536x2[_0x763a[771]]:_0x3536x2[_0x763a[772]]},isConsumed:function(_0x3536x2){return null!= _0x3536x2[_0x763a[721]]&& _0x3536x2[_0x763a[721]]},isLeftMouseButton:function(_0x3536x2){return _0x3536x2[_0x763a[172]]== (mxClient[_0x763a[80]]&& (_0x763a[82]=== typeof document[_0x763a[5]]|| 9> document[_0x763a[5]])?1:0)},isRightMouseButton:function(_0x3536x2){return 2== _0x3536x2[_0x763a[172]]},isPopupTrigger:function(_0x3536x2){return mxEvent[_0x763a[773]](_0x3536x2)|| mxEvent[_0x763a[774]](_0x3536x2)&& !mxEvent[_0x763a[775]](_0x3536x2)},isShiftDown:function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[776]]:!1},isAltDown:function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[777]]:!1},isControlDown:function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[778]]:!1},isMetaDown:function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[779]]:!1},getMainEvent:function(_0x3536x2){(_0x763a[755]== _0x3536x2[_0x763a[60]]|| _0x763a[756]== _0x3536x2[_0x763a[60]])&& null!= _0x3536x2[_0x763a[780]]&& null!= _0x3536x2[_0x763a[780]][0]?_0x3536x2= _0x3536x2[_0x763a[780]][0]:_0x763a[757]== _0x3536x2[_0x763a[60]]&& (null!= _0x3536x2[_0x763a[781]]&& null!= _0x3536x2[_0x763a[781]][0])&& (_0x3536x2= _0x3536x2[_0x763a[781]][0]);return _0x3536x2},getClientX:function(_0x3536x2){return mxEvent[_0x763a[783]](_0x3536x2)[_0x763a[782]]},getClientY:function(_0x3536x2){return mxEvent[_0x763a[783]](_0x3536x2)[_0x763a[784]]},consume:function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= null!= _0x3536x4?_0x3536x4:!0;if(null!= _0x3536x3?_0x3536x3:1){_0x3536x2[_0x763a[738]]?(_0x3536x4&& _0x3536x2[_0x763a[785]](),_0x3536x2[_0x763a[738]]()):_0x3536x4&& (_0x3536x2[_0x763a[786]]= !0)};_0x3536x2[_0x763a[721]]= !0;_0x3536x2[_0x763a[739]]= !1},LABEL_HANDLE:-1,ROTATION_HANDLE:-2,MOUSE_DOWN:_0x763a[787],MOUSE_MOVE:_0x763a[788],MOUSE_UP:_0x763a[789],ACTIVATE:_0x763a[790],RESIZE_START:_0x763a[791],RESIZE:_0x763a[129],RESIZE_END:_0x763a[792],MOVE_START:_0x763a[793],MOVE:_0x763a[582],MOVE_END:_0x763a[794],PAN_START:_0x763a[795],PAN:_0x763a[796],PAN_END:_0x763a[797],MINIMIZE:_0x763a[798],NORMALIZE:_0x763a[799],MAXIMIZE:_0x763a[800],HIDE:_0x763a[801],SHOW:_0x763a[539],CLOSE:_0x763a[268],DESTROY:_0x763a[515],REFRESH:_0x763a[802],SIZE:_0x763a[803],SELECT:_0x763a[804],FIRED:_0x763a[805],GET:_0x763a[203],RECEIVE:_0x763a[806],CONNECT:_0x763a[807],DISCONNECT:_0x763a[808],SUSPEND:_0x763a[809],RESUME:_0x763a[810],MARK:_0x763a[811],SESSION:_0x763a[812],ROOT:_0x763a[813],POST:_0x763a[814],OPEN:_0x763a[392],SAVE:_0x763a[815],BEFORE_ADD_VERTEX:_0x763a[816],ADD_VERTEX:_0x763a[817],AFTER_ADD_VERTEX:_0x763a[818],DONE:_0x763a[819],EXECUTE:_0x763a[350],EXECUTED:_0x763a[820],BEGIN_UPDATE:_0x763a[473],START_EDIT:_0x763a[821],END_UPDATE:_0x763a[476],END_EDIT:_0x763a[822],BEFORE_UNDO:_0x763a[823],UNDO:_0x763a[824],REDO:_0x763a[825],CHANGE:_0x763a[826],NOTIFY:_0x763a[827],LAYOUT_CELLS:_0x763a[828],CLICK:_0x763a[173],SCALE:_0x763a[255],TRANSLATE:_0x763a[513],SCALE_AND_TRANSLATE:_0x763a[829],UP:_0x763a[830],DOWN:_0x763a[831],ADD:_0x763a[99],REMOVE:_0x763a[205],CLEAR:_0x763a[200],ADD_CELLS:_0x763a[832],CELLS_ADDED:_0x763a[833],MOVE_CELLS:_0x763a[834],CELLS_MOVED:_0x763a[835],RESIZE_CELLS:_0x763a[836],CELLS_RESIZED:_0x763a[837],TOGGLE_CELLS:_0x763a[838],CELLS_TOGGLED:_0x763a[839],ORDER_CELLS:_0x763a[840],CELLS_ORDERED:_0x763a[841],REMOVE_CELLS:_0x763a[842],CELLS_REMOVED:_0x763a[843],GROUP_CELLS:_0x763a[844],UNGROUP_CELLS:_0x763a[845],REMOVE_CELLS_FROM_PARENT:_0x763a[846],FOLD_CELLS:_0x763a[847],CELLS_FOLDED:_0x763a[848],ALIGN_CELLS:_0x763a[849],LABEL_CHANGED:_0x763a[850],CONNECT_CELL:_0x763a[851],CELL_CONNECTED:_0x763a[852],SPLIT_EDGE:_0x763a[853],FLIP_EDGE:_0x763a[854],START_EDITING:_0x763a[855],ADD_OVERLAY:_0x763a[856],REMOVE_OVERLAY:_0x763a[857],UPDATE_CELL_SIZE:_0x763a[858],ESCAPE:_0x763a[859],CLICK:_0x763a[173],DOUBLE_CLICK:_0x763a[860],START:_0x763a[861],RESET:_0x763a[862]};function mxXmlRequest(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){this[_0x763a[863]]= _0x3536x2;this[_0x763a[864]]= _0x3536x3;this[_0x763a[865]]= _0x3536x4|| _0x763a[866];this[_0x763a[307]]= null!= _0x3536x5?_0x3536x5:!0;this[_0x763a[867]]= _0x3536x9;this[_0x763a[868]]= _0x3536xa}mxXmlRequest[_0x763a[202]][_0x763a[863]]= null;mxXmlRequest[_0x763a[202]][_0x763a[864]]= null;mxXmlRequest[_0x763a[202]][_0x763a[865]]= null;mxXmlRequest[_0x763a[202]][_0x763a[307]]= null;mxXmlRequest[_0x763a[202]][_0x763a[869]]= !1;mxXmlRequest[_0x763a[202]][_0x763a[867]]= null;mxXmlRequest[_0x763a[202]][_0x763a[868]]= null;mxXmlRequest[_0x763a[202]][_0x763a[870]]= null;mxXmlRequest[_0x763a[202]][_0x763a[871]]= function(){return this[_0x763a[869]]};mxXmlRequest[_0x763a[202]][_0x763a[872]]= function(_0x3536x2){this[_0x763a[869]]= _0x3536x2};mxXmlRequest[_0x763a[202]][_0x763a[221]]= function(){return this[_0x763a[870]][_0x763a[873]]};mxXmlRequest[_0x763a[202]][_0x763a[220]]= function(){return 4== this[_0x763a[870]][_0x763a[417]]};mxXmlRequest[_0x763a[202]][_0x763a[874]]= function(){var _0x3536x2=this[_0x763a[875]]();return null!= _0x3536x2?_0x3536x2[_0x763a[158]]:null};mxXmlRequest[_0x763a[202]][_0x763a[875]]= function(){var _0x3536x2=this[_0x763a[870]][_0x763a[876]];if(9<= document[_0x763a[5]]|| null== _0x3536x2|| null== _0x3536x2[_0x763a[158]]){_0x3536x2= mxUtils[_0x763a[877]](this[_0x763a[870]][_0x763a[873]])};return _0x3536x2};mxXmlRequest[_0x763a[202]][_0x763a[221]]= function(){return this[_0x763a[870]][_0x763a[873]]};mxXmlRequest[_0x763a[202]][_0x763a[878]]= function(){return this[_0x763a[870]][_0x763a[879]]};mxXmlRequest[_0x763a[202]][_0x763a[385]]= function(){if(window[_0x763a[880]]){return function(){var _0x3536x2= new XMLHttpRequest;this[_0x763a[871]]()&& _0x3536x2[_0x763a[881]]&& _0x3536x2[_0x763a[881]](_0x763a[882]);return _0x3536x2}};if(_0x763a[82]!= typeof ActiveXObject){return function(){return new ActiveXObject(_0x763a[883])}}}();mxXmlRequest[_0x763a[202]][_0x763a[414]]= function(_0x3536x2,_0x3536x3){this[_0x763a[870]]= this[_0x763a[385]]();null!= this[_0x763a[870]]&& (null!= _0x3536x2&& (this[_0x763a[870]][_0x763a[416]]= mxUtils[_0x763a[885]](this,function(){this[_0x763a[220]]()&& (_0x3536x2(this),this[_0x763a[884]]= null)})),this[_0x763a[870]][_0x763a[392]](this[_0x763a[865]],this[_0x763a[863]],this[_0x763a[307]],this[_0x763a[867]],this[_0x763a[868]]),this[_0x763a[886]](this[_0x763a[870]],this[_0x763a[864]]),this[_0x763a[870]][_0x763a[414]](this[_0x763a[864]]))};mxXmlRequest[_0x763a[202]][_0x763a[886]]= function(_0x3536x2,_0x3536x3){null!= _0x3536x3&& _0x3536x2[_0x763a[889]](_0x763a[887],_0x763a[888])};mxXmlRequest[_0x763a[202]][_0x763a[415]]= function(_0x3536x2,_0x3536x3){_0x3536x2= _0x3536x2|| document;var _0x3536x4=null;_0x3536x2== document&& (_0x3536x4= window[_0x763a[890]],window[_0x763a[890]]= null);var _0x3536x5=_0x3536x2[_0x763a[55]](_0x763a[891]);_0x3536x5[_0x763a[57]](_0x763a[865],this[_0x763a[865]]);_0x3536x5[_0x763a[57]](_0x763a[892],this[_0x763a[863]]);null!= _0x3536x3&& _0x3536x5[_0x763a[57]](_0x763a[772],_0x3536x3);_0x3536x5[_0x763a[124]][_0x763a[495]]= _0x763a[130];_0x3536x5[_0x763a[124]][_0x763a[187]]= _0x763a[188];for(var _0x3536x9=0< this[_0x763a[864]][_0x763a[2]](_0x763a[893])?this[_0x763a[864]][_0x763a[224]](_0x763a[893]):this[_0x763a[864]][_0x763a[224]](),_0x3536xa=0;_0x3536xa< _0x3536x9[_0x763a[67]];_0x3536xa++){var _0x3536x12=_0x3536x9[_0x3536xa][_0x763a[2]](_0x763a[226]);if(0< _0x3536x12){var _0x3536x13=_0x3536x9[_0x3536xa][_0x763a[85]](0,_0x3536x12),_0x3536x14=_0x3536x9[_0x3536xa][_0x763a[85]](_0x3536x12+ 1),_0x3536x12=_0x3536x2[_0x763a[55]](_0x763a[126]);_0x3536x12[_0x763a[57]](_0x763a[298],_0x3536x13);_0x3536x14= _0x3536x14[_0x763a[230]](/\n/g,_0x763a[336]);_0x3536x13= _0x3536x2[_0x763a[344]](_0x3536x14);_0x3536x12[_0x763a[62]](_0x3536x13);_0x3536x5[_0x763a[62]](_0x3536x12)}};_0x3536x2[_0x763a[112]][_0x763a[62]](_0x3536x5);_0x3536x5[_0x763a[894]]();_0x3536x2[_0x763a[112]][_0x763a[266]](_0x3536x5);null!= _0x3536x4&& (window[_0x763a[890]]= _0x3536x4)};var mxClipboard={STEPSIZE:10,insertCount:1,cells:null,isEmpty:function(){return null== mxClipboard[_0x763a[895]]},cut:function(_0x3536x2,_0x3536x3){_0x3536x3= mxClipboard[_0x763a[149]](_0x3536x2,_0x3536x3);mxClipboard[_0x763a[896]]= 0;mxClipboard[_0x763a[842]](_0x3536x2,_0x3536x3);return _0x3536x3},removeCells:function(_0x3536x2,_0x3536x3){_0x3536x2[_0x763a[842]](_0x3536x3)},copy:function(_0x3536x2,_0x3536x3){_0x3536x3= _0x3536x3|| _0x3536x2[_0x763a[897]]();var _0x3536x4=_0x3536x2[_0x763a[898]](_0x3536x3);mxClipboard[_0x763a[896]]= 1;mxClipboard[_0x763a[895]]= _0x3536x2[_0x763a[899]](_0x3536x4);return _0x3536x4},paste:function(_0x3536x2){if(null!= mxClipboard[_0x763a[895]]){var _0x3536x3=_0x3536x2[_0x763a[900]](mxClipboard[_0x763a[895]]),_0x3536x4=mxClipboard[_0x763a[896]]* mxClipboard[_0x763a[901]],_0x3536x5=_0x3536x2[_0x763a[902]](),_0x3536x3=_0x3536x2[_0x763a[903]](_0x3536x3,_0x3536x4,_0x3536x4,_0x3536x5);mxClipboard[_0x763a[896]]++;_0x3536x2[_0x763a[904]](_0x3536x3)}}};function mxWindow(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15){null!= _0x3536x3&& (_0x3536x12= null!= _0x3536x12?_0x3536x12:!0,this[_0x763a[905]]= _0x3536x3,this[_0x763a[176]](_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x15),this[_0x763a[906]](),this[_0x763a[907]](),this[_0x763a[908]](),this[_0x763a[909]](_0x3536x12),this[_0x763a[910]](_0x3536x2),(null== _0x3536x13|| _0x3536x13)&& this[_0x763a[911]](),null!= _0x3536x14&& null!= _0x3536x14[_0x763a[265]]?_0x3536x14[_0x763a[265]][_0x763a[912]](this[_0x763a[485]],_0x3536x14):document[_0x763a[112]][_0x763a[62]](this[_0x763a[485]]))}mxWindow[_0x763a[202]]= new mxEventSource;mxWindow[_0x763a[202]][_0x763a[196]]= mxWindow;mxWindow[_0x763a[202]][_0x763a[913]]= mxClient[_0x763a[88]]+ _0x763a[914];mxWindow[_0x763a[202]][_0x763a[915]]= mxClient[_0x763a[88]]+ _0x763a[916];mxWindow[_0x763a[202]][_0x763a[917]]= mxClient[_0x763a[88]]+ _0x763a[918];mxWindow[_0x763a[202]][_0x763a[919]]= mxClient[_0x763a[88]]+ _0x763a[920];mxWindow[_0x763a[202]][_0x763a[921]]= mxClient[_0x763a[88]]+ _0x763a[922];mxWindow[_0x763a[202]][_0x763a[189]]= !1;mxWindow[_0x763a[202]][_0x763a[905]]= !1;mxWindow[_0x763a[202]][_0x763a[923]]= new mxRectangle(0,0,50,40);mxWindow[_0x763a[202]][_0x763a[924]]= !1;mxWindow[_0x763a[202]][_0x763a[905]]= !1;mxWindow[_0x763a[202]][_0x763a[165]]= !0;mxWindow[_0x763a[202]][_0x763a[176]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x9= null!= _0x3536x9?_0x3536x9:_0x763a[925];this[_0x763a[485]]= document[_0x763a[55]](_0x763a[485]);this[_0x763a[485]][_0x763a[926]]= _0x3536x9;this[_0x763a[485]][_0x763a[124]][_0x763a[361]]= _0x3536x2+ _0x763a[168];this[_0x763a[485]][_0x763a[124]][_0x763a[125]]= _0x3536x3+ _0x763a[168];this[_0x763a[116]]= document[_0x763a[55]](_0x763a[116]);this[_0x763a[116]][_0x763a[926]]= _0x3536x9;null!= _0x3536x4&& (mxClient[_0x763a[80]]|| (this[_0x763a[485]][_0x763a[124]][_0x763a[117]]= _0x3536x4+ _0x763a[168]),this[_0x763a[116]][_0x763a[124]][_0x763a[117]]= _0x3536x4+ _0x763a[168]);null!= _0x3536x5&& (mxClient[_0x763a[80]]|| (this[_0x763a[485]][_0x763a[124]][_0x763a[119]]= _0x3536x5+ _0x763a[168]),this[_0x763a[116]][_0x763a[124]][_0x763a[119]]= _0x3536x5+ _0x763a[168]);_0x3536x2= document[_0x763a[55]](_0x763a[120]);_0x3536x3= document[_0x763a[55]](_0x763a[121]);this[_0x763a[924]]= document[_0x763a[55]](_0x763a[122]);this[_0x763a[924]][_0x763a[926]]= _0x3536x9+ _0x763a[927];_0x3536x3[_0x763a[62]](this[_0x763a[924]]);_0x3536x2[_0x763a[62]](_0x3536x3);_0x3536x3= document[_0x763a[55]](_0x763a[121]);this[_0x763a[122]]= document[_0x763a[55]](_0x763a[122]);this[_0x763a[122]][_0x763a[926]]= _0x3536x9+ _0x763a[928];this[_0x763a[929]]= document[_0x763a[55]](_0x763a[485]);this[_0x763a[929]][_0x763a[926]]= _0x3536x9+ _0x763a[928];this[_0x763a[929]][_0x763a[124]][_0x763a[117]]= _0x763a[118];this[_0x763a[929]][_0x763a[62]](this[_0x763a[905]]);if(mxClient[_0x763a[80]]|| _0x763a[529]!= this[_0x763a[905]][_0x763a[301]][_0x763a[36]]()){this[_0x763a[929]][_0x763a[124]][_0x763a[119]]= _0x763a[118]};this[_0x763a[122]][_0x763a[62]](this[_0x763a[929]]);_0x3536x3[_0x763a[62]](this[_0x763a[122]]);_0x3536x2[_0x763a[62]](_0x3536x3);this[_0x763a[116]][_0x763a[62]](_0x3536x2);this[_0x763a[485]][_0x763a[62]](this[_0x763a[116]]);_0x3536x9= mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[790]]()});mxEvent[_0x763a[169]](this[_0x763a[924]],_0x763a[751],_0x3536x9);mxEvent[_0x763a[169]](this[_0x763a[116]],_0x763a[751],_0x3536x9);mxClient[_0x763a[754]]&& (mxEvent[_0x763a[169]](this[_0x763a[924]],_0x763a[755],_0x3536x9),mxEvent[_0x763a[169]](this[_0x763a[116]],_0x763a[755],_0x3536x9));this[_0x763a[801]]()};mxWindow[_0x763a[202]][_0x763a[910]]= function(_0x3536x2){for(var _0x3536x3=this[_0x763a[924]][_0x763a[285]];null!= _0x3536x3;){var _0x3536x4=_0x3536x3[_0x763a[287]];_0x3536x3[_0x763a[288]]== mxConstants[_0x763a[317]]&& _0x3536x3[_0x763a[265]][_0x763a[266]](_0x3536x3);_0x3536x3= _0x3536x4};mxUtils[_0x763a[53]](this[_0x763a[924]],_0x3536x2|| _0x763a[110])};mxWindow[_0x763a[202]][_0x763a[162]]= function(_0x3536x2){0> navigator[_0x763a[3]][_0x763a[2]](_0x763a[186])&& (this[_0x763a[929]][_0x763a[124]][_0x763a[277]]= _0x3536x2?_0x763a[278]:_0x763a[188])};mxWindow[_0x763a[202]][_0x763a[790]]= function(){if(mxWindow[_0x763a[930]]!= this){var _0x3536x2=mxUtils[_0x763a[275]](this[_0x763a[166]]()),_0x3536x2=null!= _0x3536x2?_0x3536x2[_0x763a[931]]:3;if(mxWindow[_0x763a[930]]){var _0x3536x3=mxWindow[_0x763a[930]][_0x763a[166]]();null!= _0x3536x3&& null!= _0x3536x3[_0x763a[124]]&& (_0x3536x3[_0x763a[124]][_0x763a[931]]= _0x3536x2)};_0x3536x3= mxWindow[_0x763a[930]];this[_0x763a[166]]()[_0x763a[124]][_0x763a[931]]= parseInt(_0x3536x2)+ 1;mxWindow[_0x763a[930]]= this;this[_0x763a[746]]( new mxEventObject(mxEvent.ACTIVATE,_0x763a[932],_0x3536x3))}};mxWindow[_0x763a[202]][_0x763a[166]]= function(){return this[_0x763a[485]]};mxWindow[_0x763a[202]][_0x763a[933]]= function(){mxUtils[_0x763a[933]](this[_0x763a[485]])};mxWindow[_0x763a[202]][_0x763a[934]]= function(){return null!= this[_0x763a[129]]?_0x763a[130]!= this[_0x763a[129]][_0x763a[124]][_0x763a[495]]:!1};mxWindow[_0x763a[202]][_0x763a[163]]= function(_0x3536x2){_0x3536x2?null== this[_0x763a[129]]?(this[_0x763a[129]]= document[_0x763a[55]](_0x763a[466]),this[_0x763a[129]][_0x763a[124]][_0x763a[491]]= _0x763a[492],this[_0x763a[129]][_0x763a[124]][_0x763a[553]]= _0x763a[935],this[_0x763a[129]][_0x763a[124]][_0x763a[699]]= _0x763a[935],this[_0x763a[129]][_0x763a[57]](_0x763a[390],mxClient[_0x763a[88]]+ _0x763a[922]),this[_0x763a[129]][_0x763a[124]][_0x763a[270]]= _0x763a[936],mxEvent[_0x763a[759]](this[_0x763a[129]],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[790]]();var _0x3536x4=mxEvent[_0x763a[731]](_0x3536x2),_0x3536x5=mxEvent[_0x763a[733]](_0x3536x2),_0x3536x9=this[_0x763a[485]][_0x763a[359]],_0x3536xa=this[_0x763a[485]][_0x763a[167]],_0x3536x12=mxUtils[_0x763a[885]](this,function(_0x3536x2){var _0x3536x3=mxEvent[_0x763a[731]](_0x3536x2)- _0x3536x4,_0x3536x12=mxEvent[_0x763a[733]](_0x3536x2)- _0x3536x5;this[_0x763a[937]](_0x3536x9+ _0x3536x3,_0x3536xa+ _0x3536x12);this[_0x763a[746]]( new mxEventObject(mxEvent.RESIZE,_0x763a[763],_0x3536x2));mxEvent[_0x763a[722]](_0x3536x2)}),_0x3536x13=mxUtils[_0x763a[885]](this,function(_0x3536x2){mxEvent[_0x763a[938]](document,null,_0x3536x12,_0x3536x13);this[_0x763a[746]]( new mxEventObject(mxEvent.RESIZE_END,_0x763a[763],_0x3536x2));mxEvent[_0x763a[722]](_0x3536x2)});mxEvent[_0x763a[759]](document,null,_0x3536x12,_0x3536x13);this[_0x763a[746]]( new mxEventObject(mxEvent.RESIZE_START,_0x763a[763],_0x3536x2));mxEvent[_0x763a[722]](_0x3536x2)}),null,null),this[_0x763a[485]][_0x763a[62]](this[_0x763a[129]])):this[_0x763a[129]][_0x763a[124]][_0x763a[495]]= _0x763a[497]:null!= this[_0x763a[129]]&& (this[_0x763a[129]][_0x763a[124]][_0x763a[495]]= _0x763a[130])};mxWindow[_0x763a[202]][_0x763a[937]]= function(_0x3536x2,_0x3536x3){_0x3536x2= Math[_0x763a[160]](this[_0x763a[923]][_0x763a[117]],_0x3536x2);_0x3536x3= Math[_0x763a[160]](this[_0x763a[923]][_0x763a[119]],_0x3536x3);mxClient[_0x763a[80]]|| (this[_0x763a[485]][_0x763a[124]][_0x763a[117]]= _0x3536x2+ _0x763a[168],this[_0x763a[485]][_0x763a[124]][_0x763a[119]]= _0x3536x3+ _0x763a[168]);this[_0x763a[116]][_0x763a[124]][_0x763a[117]]= _0x3536x2+ _0x763a[168];this[_0x763a[116]][_0x763a[124]][_0x763a[119]]= _0x3536x3+ _0x763a[168];mxClient[_0x763a[80]]|| (this[_0x763a[929]][_0x763a[124]][_0x763a[119]]= this[_0x763a[485]][_0x763a[167]]- this[_0x763a[924]][_0x763a[167]]- 2+ _0x763a[168])};mxWindow[_0x763a[202]][_0x763a[909]]= function(_0x3536x2){this[_0x763a[798]][_0x763a[124]][_0x763a[495]]= _0x3536x2?_0x763a[110]:_0x763a[130]};mxWindow[_0x763a[202]][_0x763a[939]]= function(){return new mxRectangle(0,0,0,this[_0x763a[924]][_0x763a[167]])};mxWindow[_0x763a[202]][_0x763a[907]]= function(){this[_0x763a[798]]= document[_0x763a[55]](_0x763a[466]);this[_0x763a[798]][_0x763a[57]](_0x763a[390],this[_0x763a[915]]);this[_0x763a[798]][_0x763a[57]](_0x763a[611],_0x763a[699]);this[_0x763a[798]][_0x763a[57]](_0x763a[924],_0x763a[940]);this[_0x763a[798]][_0x763a[124]][_0x763a[270]]= _0x763a[356];this[_0x763a[798]][_0x763a[124]][_0x763a[941]]= _0x763a[942];this[_0x763a[798]][_0x763a[124]][_0x763a[495]]= _0x763a[130];this[_0x763a[924]][_0x763a[62]](this[_0x763a[798]]);var _0x3536x2=!1,_0x3536x3=null,_0x3536x4=null,_0x3536x5=mxUtils[_0x763a[885]](this,function(_0x3536x5){this[_0x763a[790]]();if(_0x3536x2){_0x3536x2= !1,this[_0x763a[798]][_0x763a[57]](_0x763a[390],this[_0x763a[915]]),this[_0x763a[798]][_0x763a[57]](_0x763a[924],_0x763a[940]),this[_0x763a[929]][_0x763a[124]][_0x763a[495]]= _0x763a[110],this[_0x763a[800]][_0x763a[124]][_0x763a[495]]= _0x3536x3,mxClient[_0x763a[80]]|| (this[_0x763a[485]][_0x763a[124]][_0x763a[119]]= _0x3536x4),this[_0x763a[116]][_0x763a[124]][_0x763a[119]]= _0x3536x4,null!= this[_0x763a[129]]&& (this[_0x763a[129]][_0x763a[124]][_0x763a[187]]= _0x763a[110]),this[_0x763a[746]]( new mxEventObject(mxEvent.NORMALIZE,_0x763a[763],_0x3536x5))}else {_0x3536x2= !0;this[_0x763a[798]][_0x763a[57]](_0x763a[390],this[_0x763a[917]]);this[_0x763a[798]][_0x763a[57]](_0x763a[924],_0x763a[943]);this[_0x763a[929]][_0x763a[124]][_0x763a[495]]= _0x763a[130];_0x3536x3= this[_0x763a[800]][_0x763a[124]][_0x763a[495]];this[_0x763a[800]][_0x763a[124]][_0x763a[495]]= _0x763a[130];_0x3536x4= this[_0x763a[116]][_0x763a[124]][_0x763a[119]];var _0x3536xa=this[_0x763a[939]]();0< _0x3536xa[_0x763a[119]]&& (mxClient[_0x763a[80]]|| (this[_0x763a[485]][_0x763a[124]][_0x763a[119]]= _0x3536xa[_0x763a[119]]+ _0x763a[168]),this[_0x763a[116]][_0x763a[124]][_0x763a[119]]= _0x3536xa[_0x763a[119]]+ _0x763a[168]);0< _0x3536xa[_0x763a[117]]&& (mxClient[_0x763a[80]]|| (this[_0x763a[485]][_0x763a[124]][_0x763a[117]]= _0x3536xa[_0x763a[117]]+ _0x763a[168]),this[_0x763a[116]][_0x763a[124]][_0x763a[117]]= _0x3536xa[_0x763a[117]]+ _0x763a[168]);null!= this[_0x763a[129]]&& (this[_0x763a[129]][_0x763a[124]][_0x763a[187]]= _0x763a[188]);this[_0x763a[746]]( new mxEventObject(mxEvent.MINIMIZE,_0x763a[763],_0x3536x5))};mxEvent[_0x763a[722]](_0x3536x5)});mxEvent[_0x763a[169]](this[_0x763a[798]],_0x763a[751],_0x3536x5);mxClient[_0x763a[754]]&& mxEvent[_0x763a[169]](this[_0x763a[798]],_0x763a[755],_0x3536x5)};mxWindow[_0x763a[202]][_0x763a[161]]= function(_0x3536x2){this[_0x763a[800]][_0x763a[124]][_0x763a[495]]= _0x3536x2?_0x763a[110]:_0x763a[130]};mxWindow[_0x763a[202]][_0x763a[906]]= function(){this[_0x763a[800]]= document[_0x763a[55]](_0x763a[466]);this[_0x763a[800]][_0x763a[57]](_0x763a[390],this[_0x763a[919]]);this[_0x763a[800]][_0x763a[57]](_0x763a[611],_0x763a[699]);this[_0x763a[800]][_0x763a[57]](_0x763a[924],_0x763a[944]);this[_0x763a[800]][_0x763a[124]][_0x763a[270]]= _0x763a[583];this[_0x763a[800]][_0x763a[124]][_0x763a[945]]= _0x763a[942];this[_0x763a[800]][_0x763a[124]][_0x763a[270]]= _0x763a[356];this[_0x763a[800]][_0x763a[124]][_0x763a[495]]= _0x763a[130];this[_0x763a[924]][_0x763a[62]](this[_0x763a[800]]);var _0x3536x2=!1,_0x3536x3=null,_0x3536x4=null,_0x3536x5=null,_0x3536x9=null,_0x3536xa=mxUtils[_0x763a[885]](this,function(_0x3536xa){this[_0x763a[790]]();if(_0x763a[130]!= this[_0x763a[800]][_0x763a[124]][_0x763a[495]]){if(_0x3536x2){_0x3536x2= !1;this[_0x763a[800]][_0x763a[57]](_0x763a[390],this[_0x763a[919]]);this[_0x763a[800]][_0x763a[57]](_0x763a[924],_0x763a[944]);this[_0x763a[929]][_0x763a[124]][_0x763a[495]]= _0x763a[110];this[_0x763a[798]][_0x763a[124]][_0x763a[187]]= _0x763a[110];this[_0x763a[485]][_0x763a[124]][_0x763a[361]]= _0x3536x3+ _0x763a[168];this[_0x763a[485]][_0x763a[124]][_0x763a[125]]= _0x3536x4+ _0x763a[168];if(!mxClient[_0x763a[80]]&& (this[_0x763a[485]][_0x763a[124]][_0x763a[119]]= _0x3536x5,this[_0x763a[485]][_0x763a[124]][_0x763a[117]]= _0x3536x9,_0x3536x13= mxUtils[_0x763a[275]](this[_0x763a[929]]),_0x763a[278]== _0x3536x13[_0x763a[277]]|| null!= this[_0x763a[129]])){this[_0x763a[929]][_0x763a[124]][_0x763a[119]]= this[_0x763a[485]][_0x763a[167]]- this[_0x763a[924]][_0x763a[167]]- 2+ _0x763a[168]};this[_0x763a[116]][_0x763a[124]][_0x763a[119]]= _0x3536x5;this[_0x763a[116]][_0x763a[124]][_0x763a[117]]= _0x3536x9;null!= this[_0x763a[129]]&& (this[_0x763a[129]][_0x763a[124]][_0x763a[187]]= _0x763a[110]);this[_0x763a[746]]( new mxEventObject(mxEvent.NORMALIZE,_0x763a[763],_0x3536xa))}else {_0x3536x2= !0;this[_0x763a[800]][_0x763a[57]](_0x763a[390],this[_0x763a[917]]);this[_0x763a[800]][_0x763a[57]](_0x763a[924],_0x763a[943]);this[_0x763a[929]][_0x763a[124]][_0x763a[495]]= _0x763a[110];this[_0x763a[798]][_0x763a[124]][_0x763a[187]]= _0x763a[188];_0x3536x3= parseInt(this[_0x763a[485]][_0x763a[124]][_0x763a[361]]);_0x3536x4= parseInt(this[_0x763a[485]][_0x763a[124]][_0x763a[125]]);_0x3536x5= this[_0x763a[116]][_0x763a[124]][_0x763a[119]];_0x3536x9= this[_0x763a[116]][_0x763a[124]][_0x763a[117]];this[_0x763a[485]][_0x763a[124]][_0x763a[361]]= _0x763a[946];this[_0x763a[485]][_0x763a[124]][_0x763a[125]]= _0x763a[946];mxClient[_0x763a[80]]|| (this[_0x763a[485]][_0x763a[124]][_0x763a[119]]= document[_0x763a[112]][_0x763a[157]]- 2+ _0x763a[168],this[_0x763a[485]][_0x763a[124]][_0x763a[117]]= document[_0x763a[112]][_0x763a[159]]- 2+ _0x763a[168]);this[_0x763a[116]][_0x763a[124]][_0x763a[117]]= document[_0x763a[112]][_0x763a[159]]- 2+ _0x763a[168];this[_0x763a[116]][_0x763a[124]][_0x763a[119]]= document[_0x763a[112]][_0x763a[157]]- 2+ _0x763a[168];null!= this[_0x763a[129]]&& (this[_0x763a[129]][_0x763a[124]][_0x763a[187]]= _0x763a[188]);if(!mxClient[_0x763a[80]]){var _0x3536x13=mxUtils[_0x763a[275]](this[_0x763a[929]]);if(_0x763a[278]== _0x3536x13[_0x763a[277]]|| null!= this[_0x763a[129]]){this[_0x763a[929]][_0x763a[124]][_0x763a[119]]= this[_0x763a[485]][_0x763a[167]]- this[_0x763a[924]][_0x763a[167]]- 2+ _0x763a[168]}};this[_0x763a[746]]( new mxEventObject(mxEvent.MAXIMIZE,_0x763a[763],_0x3536xa))};mxEvent[_0x763a[722]](_0x3536xa)}});mxEvent[_0x763a[759]](this[_0x763a[800]],_0x3536xa);mxEvent[_0x763a[169]](this[_0x763a[924]],_0x763a[760],_0x3536xa)};mxWindow[_0x763a[202]][_0x763a[911]]= function(){this[_0x763a[924]][_0x763a[124]][_0x763a[270]]= _0x763a[582];mxEvent[_0x763a[759]](this[_0x763a[924]],mxUtils[_0x763a[885]](this,function(_0x3536x2){var _0x3536x3=mxEvent[_0x763a[731]](_0x3536x2),_0x3536x4=mxEvent[_0x763a[733]](_0x3536x2),_0x3536x5=this[_0x763a[730]](),_0x3536x9=this[_0x763a[732]](),_0x3536xa=mxUtils[_0x763a[885]](this,function(_0x3536x2){var _0x3536xa=mxEvent[_0x763a[731]](_0x3536x2)- _0x3536x3,_0x3536x12=mxEvent[_0x763a[733]](_0x3536x2)- _0x3536x4;this[_0x763a[947]](_0x3536x5+ _0x3536xa,_0x3536x9+ _0x3536x12);this[_0x763a[746]]( new mxEventObject(mxEvent.MOVE,_0x763a[763],_0x3536x2));mxEvent[_0x763a[722]](_0x3536x2)}),_0x3536x12=mxUtils[_0x763a[885]](this,function(_0x3536x2){mxEvent[_0x763a[938]](document,null,_0x3536xa,_0x3536x12);this[_0x763a[746]]( new mxEventObject(mxEvent.MOVE_END,_0x763a[763],_0x3536x2));mxEvent[_0x763a[722]](_0x3536x2)});mxEvent[_0x763a[759]](document,null,_0x3536xa,_0x3536x12);this[_0x763a[746]]( new mxEventObject(mxEvent.MOVE_START,_0x763a[763],_0x3536x2));mxEvent[_0x763a[722]](_0x3536x2)}))};mxWindow[_0x763a[202]][_0x763a[947]]= function(_0x3536x2,_0x3536x3){this[_0x763a[485]][_0x763a[124]][_0x763a[361]]= _0x3536x2+ _0x763a[168];this[_0x763a[485]][_0x763a[124]][_0x763a[125]]= _0x3536x3+ _0x763a[168]};mxWindow[_0x763a[202]][_0x763a[730]]= function(){return parseInt(this[_0x763a[485]][_0x763a[124]][_0x763a[361]])};mxWindow[_0x763a[202]][_0x763a[732]]= function(){return parseInt(this[_0x763a[485]][_0x763a[124]][_0x763a[125]])};mxWindow[_0x763a[202]][_0x763a[908]]= function(){this[_0x763a[948]]= document[_0x763a[55]](_0x763a[466]);this[_0x763a[948]][_0x763a[57]](_0x763a[390],this[_0x763a[913]]);this[_0x763a[948]][_0x763a[57]](_0x763a[611],_0x763a[699]);this[_0x763a[948]][_0x763a[57]](_0x763a[924],_0x763a[949]);this[_0x763a[948]][_0x763a[124]][_0x763a[945]]= _0x763a[935];this[_0x763a[948]][_0x763a[124]][_0x763a[270]]= _0x763a[356];this[_0x763a[948]][_0x763a[124]][_0x763a[495]]= _0x763a[130];this[_0x763a[924]][_0x763a[950]](this[_0x763a[948]],this[_0x763a[924]][_0x763a[285]]);mxEvent[_0x763a[759]](this[_0x763a[948]],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[746]]( new mxEventObject(mxEvent.CLOSE,_0x763a[763],_0x3536x2));this[_0x763a[165]]?this[_0x763a[515]]():this[_0x763a[175]](!1);mxEvent[_0x763a[722]](_0x3536x2)}))};mxWindow[_0x763a[202]][_0x763a[951]]= function(_0x3536x2){this[_0x763a[618]]= document[_0x763a[55]](_0x763a[466]);this[_0x763a[618]][_0x763a[57]](_0x763a[390],_0x3536x2);this[_0x763a[618]][_0x763a[57]](_0x763a[611],_0x763a[361]);this[_0x763a[618]][_0x763a[124]][_0x763a[941]]= _0x763a[952];this[_0x763a[618]][_0x763a[124]][_0x763a[945]]= _0x763a[946];this[_0x763a[618]][_0x763a[124]][_0x763a[953]]= _0x763a[954];this[_0x763a[924]][_0x763a[950]](this[_0x763a[618]],this[_0x763a[924]][_0x763a[285]])};mxWindow[_0x763a[202]][_0x763a[164]]= function(_0x3536x2){this[_0x763a[948]][_0x763a[124]][_0x763a[495]]= _0x3536x2?_0x763a[110]:_0x763a[130]};mxWindow[_0x763a[202]][_0x763a[174]]= function(){return null!= this[_0x763a[485]]?_0x763a[188]!= this[_0x763a[485]][_0x763a[124]][_0x763a[187]]:!1};mxWindow[_0x763a[202]][_0x763a[175]]= function(_0x3536x2){null!= this[_0x763a[485]]&& this[_0x763a[174]]()!= _0x3536x2&& (_0x3536x2?this[_0x763a[539]]():this[_0x763a[801]]())};mxWindow[_0x763a[202]][_0x763a[539]]= function(){this[_0x763a[485]][_0x763a[124]][_0x763a[187]]= _0x763a[110];this[_0x763a[790]]();var _0x3536x2=mxUtils[_0x763a[275]](this[_0x763a[929]]);if(!mxClient[_0x763a[80]]&& (_0x763a[278]== _0x3536x2[_0x763a[277]]|| null!= this[_0x763a[129]])){this[_0x763a[929]][_0x763a[124]][_0x763a[119]]= this[_0x763a[485]][_0x763a[167]]- this[_0x763a[924]][_0x763a[167]]- 2+ _0x763a[168]};this[_0x763a[746]]( new mxEventObject(mxEvent.SHOW))};mxWindow[_0x763a[202]][_0x763a[801]]= function(){this[_0x763a[485]][_0x763a[124]][_0x763a[187]]= _0x763a[188];this[_0x763a[746]]( new mxEventObject(mxEvent.HIDE))};mxWindow[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[746]]( new mxEventObject(mxEvent.DESTROY));null!= this[_0x763a[485]]&& (mxEvent[_0x763a[762]](this[_0x763a[485]]),this[_0x763a[485]][_0x763a[265]][_0x763a[266]](this[_0x763a[485]]),this[_0x763a[485]]= null);this[_0x763a[929]]= this[_0x763a[905]]= this[_0x763a[924]]= null};function mxForm(_0x3536x2){this[_0x763a[116]]= document[_0x763a[55]](_0x763a[116]);this[_0x763a[116]][_0x763a[926]]= _0x3536x2;this[_0x763a[112]]= document[_0x763a[55]](_0x763a[120]);this[_0x763a[116]][_0x763a[62]](this[_0x763a[112]])}mxForm[_0x763a[202]][_0x763a[116]]= null;mxForm[_0x763a[202]][_0x763a[112]]= !1;mxForm[_0x763a[202]][_0x763a[955]]= function(){return this[_0x763a[116]]};mxForm[_0x763a[202]][_0x763a[956]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=document[_0x763a[55]](_0x763a[121]),_0x3536x5=document[_0x763a[55]](_0x763a[122]);_0x3536x4[_0x763a[62]](_0x3536x5);var _0x3536x5=document[_0x763a[55]](_0x763a[122]),_0x3536x9=document[_0x763a[55]](_0x763a[172]);mxUtils[_0x763a[53]](_0x3536x9,mxResources[_0x763a[203]](_0x763a[957])|| _0x763a[958]);_0x3536x5[_0x763a[62]](_0x3536x9);mxEvent[_0x763a[169]](_0x3536x9,_0x763a[173],function(){_0x3536x2()});_0x3536x9= document[_0x763a[55]](_0x763a[172]);mxUtils[_0x763a[53]](_0x3536x9,mxResources[_0x763a[203]](_0x763a[959])|| _0x763a[960]);_0x3536x5[_0x763a[62]](_0x3536x9);mxEvent[_0x763a[169]](_0x3536x9,_0x763a[173],function(){_0x3536x3()});_0x3536x4[_0x763a[62]](_0x3536x5);this[_0x763a[112]][_0x763a[62]](_0x3536x4)};mxForm[_0x763a[202]][_0x763a[961]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=document[_0x763a[55]](_0x763a[962]);_0x3536x4[_0x763a[57]](_0x763a[60],_0x763a[963]);_0x3536x4[_0x763a[131]]= _0x3536x3;return this[_0x763a[964]](_0x3536x2,_0x3536x4)};mxForm[_0x763a[202]][_0x763a[965]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=document[_0x763a[55]](_0x763a[962]);_0x3536x4[_0x763a[57]](_0x763a[60],_0x763a[966]);this[_0x763a[964]](_0x3536x2,_0x3536x4);_0x3536x3&& (_0x3536x4[_0x763a[967]]= !0);return _0x3536x4};mxForm[_0x763a[202]][_0x763a[968]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=document[_0x763a[55]](_0x763a[126]);mxClient[_0x763a[133]]&& _0x3536x4--;_0x3536x5[_0x763a[57]](_0x763a[969],_0x3536x4|| 2);_0x3536x5[_0x763a[131]]= _0x3536x3;return this[_0x763a[964]](_0x3536x2,_0x3536x5)};mxForm[_0x763a[202]][_0x763a[970]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=document[_0x763a[55]](_0x763a[804]);null!= _0x3536x4&& _0x3536x5[_0x763a[57]](_0x763a[803],_0x3536x4);_0x3536x3&& _0x3536x5[_0x763a[57]](_0x763a[971],_0x763a[128]);return this[_0x763a[964]](_0x3536x2,_0x3536x5)};mxForm[_0x763a[202]][_0x763a[972]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=document[_0x763a[55]](_0x763a[973]);mxUtils[_0x763a[171]](_0x3536x9,_0x3536x3);_0x3536x9[_0x763a[57]](_0x763a[131],_0x3536x4);_0x3536x5&& _0x3536x9[_0x763a[57]](_0x763a[974],_0x3536x5);_0x3536x2[_0x763a[62]](_0x3536x9)};mxForm[_0x763a[202]][_0x763a[964]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=document[_0x763a[55]](_0x763a[121]),_0x3536x5=document[_0x763a[55]](_0x763a[122]);mxUtils[_0x763a[53]](_0x3536x5,_0x3536x2);_0x3536x4[_0x763a[62]](_0x3536x5);_0x3536x5= document[_0x763a[55]](_0x763a[122]);_0x3536x5[_0x763a[62]](_0x3536x3);_0x3536x4[_0x763a[62]](_0x3536x5);this[_0x763a[112]][_0x763a[62]](_0x3536x4);return _0x3536x3};function mxImage(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[390]]= _0x3536x2;this[_0x763a[117]]= _0x3536x3;this[_0x763a[119]]= _0x3536x4}mxImage[_0x763a[202]][_0x763a[390]]= null;mxImage[_0x763a[202]][_0x763a[117]]= null;mxImage[_0x763a[202]][_0x763a[119]]= null;function mxDivResizer(_0x3536x2,_0x3536x3){if(_0x763a[485]== _0x3536x2[_0x763a[301]][_0x763a[216]]()){null== _0x3536x3&& (_0x3536x3= window);this[_0x763a[485]]= _0x3536x2;var _0x3536x4=mxUtils[_0x763a[275]](_0x3536x2);null!= _0x3536x4&& (this[_0x763a[975]]= _0x763a[278]== _0x3536x4[_0x763a[117]],this[_0x763a[976]]= _0x763a[278]== _0x3536x4[_0x763a[119]]);mxEvent[_0x763a[169]](_0x3536x3,_0x763a[129],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[977]]|| (this[_0x763a[977]]= !0,this[_0x763a[129]](),this[_0x763a[977]]= !1)}));this[_0x763a[129]]()}}mxDivResizer[_0x763a[202]][_0x763a[975]]= !0;mxDivResizer[_0x763a[202]][_0x763a[976]]= !0;mxDivResizer[_0x763a[202]][_0x763a[977]]= !1;mxDivResizer[_0x763a[202]][_0x763a[129]]= function(){var _0x3536x2=this[_0x763a[978]](),_0x3536x3=this[_0x763a[979]](),_0x3536x4=parseInt(this[_0x763a[485]][_0x763a[124]][_0x763a[361]]),_0x3536x5=parseInt(this[_0x763a[485]][_0x763a[124]][_0x763a[699]]),_0x3536x9=parseInt(this[_0x763a[485]][_0x763a[124]][_0x763a[125]]),_0x3536xa=parseInt(this[_0x763a[485]][_0x763a[124]][_0x763a[553]]);this[_0x763a[975]]&& (!isNaN(_0x3536x4)&& !isNaN(_0x3536x5)&& 0<= _0x3536x4&& 0<= _0x3536x5&& 0< _0x3536x2- _0x3536x5- _0x3536x4)&& (this[_0x763a[485]][_0x763a[124]][_0x763a[117]]= _0x3536x2- _0x3536x5- _0x3536x4+ _0x763a[168]);this[_0x763a[976]]&& (!isNaN(_0x3536x9)&& !isNaN(_0x3536xa)&& 0<= _0x3536x9&& 0<= _0x3536xa&& 0< _0x3536x3- _0x3536x9- _0x3536xa)&& (this[_0x763a[485]][_0x763a[124]][_0x763a[119]]= _0x3536x3- _0x3536x9- _0x3536xa+ _0x763a[168])};mxDivResizer[_0x763a[202]][_0x763a[978]]= function(){return document[_0x763a[112]][_0x763a[159]]};mxDivResizer[_0x763a[202]][_0x763a[979]]= function(){return document[_0x763a[112]][_0x763a[157]]};function mxDragSource(_0x3536x2,_0x3536x3){this[_0x763a[980]]= _0x3536x2;this[_0x763a[981]]= _0x3536x3;mxEvent[_0x763a[759]](_0x3536x2,mxUtils[_0x763a[885]](this,this[_0x763a[787]]))}mxDragSource[_0x763a[202]][_0x763a[980]]= null;mxDragSource[_0x763a[202]][_0x763a[981]]= null;mxDragSource[_0x763a[202]][_0x763a[559]]= null;mxDragSource[_0x763a[202]][_0x763a[982]]= null;mxDragSource[_0x763a[202]][_0x763a[983]]= null;mxDragSource[_0x763a[202]][_0x763a[984]]= !0;mxDragSource[_0x763a[202]][_0x763a[985]]= null;mxDragSource[_0x763a[202]][_0x763a[986]]= null;mxDragSource[_0x763a[202]][_0x763a[987]]= null;mxDragSource[_0x763a[202]][_0x763a[988]]= null;mxDragSource[_0x763a[202]][_0x763a[989]]= null;mxDragSource[_0x763a[202]][_0x763a[561]]= !0;mxDragSource[_0x763a[202]][_0x763a[990]]= !0;mxDragSource[_0x763a[202]][_0x763a[991]]= !0;mxDragSource[_0x763a[202]][_0x763a[563]]= !0;mxDragSource[_0x763a[202]][_0x763a[992]]= 100;mxDragSource[_0x763a[202]][_0x763a[993]]= 70;mxDragSource[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxDragSource[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxDragSource[_0x763a[202]][_0x763a[996]]= function(){return this[_0x763a[990]]};mxDragSource[_0x763a[202]][_0x763a[562]]= function(_0x3536x2){this[_0x763a[990]]= _0x3536x2};mxDragSource[_0x763a[202]][_0x763a[997]]= function(){return this[_0x763a[991]]};mxDragSource[_0x763a[202]][_0x763a[998]]= function(_0x3536x2){this[_0x763a[991]]= _0x3536x2};mxDragSource[_0x763a[202]][_0x763a[565]]= function(_0x3536x2){return null};mxDragSource[_0x763a[202]][_0x763a[564]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return _0x3536x2[_0x763a[999]](_0x3536x3,_0x3536x4)};mxDragSource[_0x763a[202]][_0x763a[566]]= function(_0x3536x2){return this[_0x763a[980]][_0x763a[511]](!0)};mxDragSource[_0x763a[202]][_0x763a[567]]= function(_0x3536x2){return null};mxDragSource[_0x763a[202]][_0x763a[787]]= function(_0x3536x2){this[_0x763a[984]]&& (!mxEvent[_0x763a[721]](_0x3536x2)&& null== this[_0x763a[1000]])&& (this[_0x763a[1001]](_0x3536x2),this[_0x763a[1000]]= mxUtils[_0x763a[885]](this,this[_0x763a[788]]),this[_0x763a[1002]]= mxUtils[_0x763a[885]](this,this[_0x763a[789]]),mxEvent[_0x763a[759]](document,null,this[_0x763a[1000]],this[_0x763a[1002]]),mxEvent[_0x763a[722]](_0x3536x2,!0,!1))};mxDragSource[_0x763a[202]][_0x763a[1001]]= function(_0x3536x2){this[_0x763a[982]]= this[_0x763a[566]](_0x3536x2);this[_0x763a[982]][_0x763a[124]][_0x763a[491]]= _0x763a[492];this[_0x763a[982]][_0x763a[124]][_0x763a[931]]= this[_0x763a[992]];mxUtils[_0x763a[254]](this[_0x763a[982]],this[_0x763a[993]])};mxDragSource[_0x763a[202]][_0x763a[1003]]= function(_0x3536x2){null!= this[_0x763a[982]]&& (null!= this[_0x763a[982]][_0x763a[265]]&& this[_0x763a[982]][_0x763a[265]][_0x763a[266]](this[_0x763a[982]]),this[_0x763a[982]]= null)};mxDragSource[_0x763a[202]][_0x763a[1004]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=mxEvent[_0x763a[731]](_0x3536x3),_0x3536x5=mxEvent[_0x763a[733]](_0x3536x3),_0x3536x9=mxUtils[_0x763a[445]](_0x3536x2[_0x763a[526]]),_0x3536xa=mxUtils[_0x763a[444]]();return _0x3536x4>= _0x3536x9[_0x763a[235]]- _0x3536xa[_0x763a[235]]&& _0x3536x5>= _0x3536x9[_0x763a[236]]- _0x3536xa[_0x763a[236]]&& _0x3536x4<= _0x3536x9[_0x763a[235]]- _0x3536xa[_0x763a[235]]+ _0x3536x2[_0x763a[526]][_0x763a[359]]&& _0x3536x5<= _0x3536x9[_0x763a[236]]- _0x3536xa[_0x763a[236]]+ _0x3536x2[_0x763a[526]][_0x763a[167]]};mxDragSource[_0x763a[202]][_0x763a[788]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[565]](_0x3536x2);null!= _0x3536x3&& !this[_0x763a[1004]](_0x3536x3,_0x3536x2)&& (_0x3536x3= null);_0x3536x3!= this[_0x763a[985]]&& (null!= this[_0x763a[985]]&& this[_0x763a[1005]](this[_0x763a[985]]),this[_0x763a[985]]= _0x3536x3,null!= this[_0x763a[985]]&& this[_0x763a[1006]](this[_0x763a[985]]));null!= this[_0x763a[985]]&& this[_0x763a[1007]](this[_0x763a[985]],_0x3536x2);if(null!= this[_0x763a[982]]&& (null== this[_0x763a[983]]|| _0x763a[189]!= this[_0x763a[983]][_0x763a[124]][_0x763a[187]])){var _0x3536x3=mxEvent[_0x763a[731]](_0x3536x2),_0x3536x4=mxEvent[_0x763a[733]](_0x3536x2);null== this[_0x763a[982]][_0x763a[265]]&& document[_0x763a[112]][_0x763a[62]](this[_0x763a[982]]);this[_0x763a[982]][_0x763a[124]][_0x763a[187]]= _0x763a[189];null!= this[_0x763a[559]]&& (_0x3536x3+= this[_0x763a[559]][_0x763a[235]],_0x3536x4+= this[_0x763a[559]][_0x763a[236]]);_0x3536x3+= document[_0x763a[112]][_0x763a[360]]|| document[_0x763a[158]][_0x763a[360]];_0x3536x4+= document[_0x763a[112]][_0x763a[190]]|| document[_0x763a[158]][_0x763a[190]];this[_0x763a[982]][_0x763a[124]][_0x763a[361]]= _0x3536x3+ _0x763a[168];this[_0x763a[982]][_0x763a[124]][_0x763a[125]]= _0x3536x4+ _0x763a[168]}else {null!= this[_0x763a[982]]&& (this[_0x763a[982]][_0x763a[124]][_0x763a[187]]= _0x763a[188])};mxEvent[_0x763a[722]](_0x3536x2)};mxDragSource[_0x763a[202]][_0x763a[789]]= function(_0x3536x2){if(null!= this[_0x763a[985]]){if(null!= this[_0x763a[987]]&& (null== this[_0x763a[983]]|| _0x763a[188]!= this[_0x763a[983]][_0x763a[124]][_0x763a[187]])){var _0x3536x3=this[_0x763a[985]][_0x763a[441]][_0x763a[255]],_0x3536x4=this[_0x763a[985]][_0x763a[441]][_0x763a[513]];this[_0x763a[1008]](this[_0x763a[985]],_0x3536x2,this[_0x763a[986]],this[_0x763a[987]][_0x763a[235]]/ _0x3536x3- _0x3536x4[_0x763a[235]],this[_0x763a[987]][_0x763a[236]]/ _0x3536x3- _0x3536x4[_0x763a[236]])};this[_0x763a[1005]](this[_0x763a[985]])};this[_0x763a[1003]](_0x3536x2);mxEvent[_0x763a[938]](document,null,this[_0x763a[1000]],this[_0x763a[1002]]);this[_0x763a[985]]= this[_0x763a[1002]]= this[_0x763a[1000]]= null;mxEvent[_0x763a[722]](_0x3536x2)};mxDragSource[_0x763a[202]][_0x763a[1006]]= function(_0x3536x2){_0x3536x2[_0x763a[1009]]= !0;this[_0x763a[983]]= this[_0x763a[567]](_0x3536x2);this[_0x763a[996]]()&& null!= this[_0x763a[983]]&& (this[_0x763a[988]]= new mxGuide(_0x3536x2,_0x3536x2[_0x763a[1011]][_0x763a[1010]]()));this[_0x763a[563]]&& (this[_0x763a[989]]= new mxCellHighlight(_0x3536x2,mxConstants.DROP_TARGET_COLOR))};mxDragSource[_0x763a[202]][_0x763a[1005]]= function(_0x3536x2){this[_0x763a[987]]= this[_0x763a[986]]= null;_0x3536x2[_0x763a[1009]]= !1;null!= this[_0x763a[983]]&& (null!= this[_0x763a[983]][_0x763a[265]]&& this[_0x763a[983]][_0x763a[265]][_0x763a[266]](this[_0x763a[983]]),this[_0x763a[983]]= null);null!= this[_0x763a[988]]&& (this[_0x763a[988]][_0x763a[515]](),this[_0x763a[988]]= null);null!= this[_0x763a[989]]&& (this[_0x763a[989]][_0x763a[515]](),this[_0x763a[989]]= null)};mxDragSource[_0x763a[202]][_0x763a[1007]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=mxUtils[_0x763a[445]](_0x3536x2[_0x763a[526]]),_0x3536x5=mxUtils[_0x763a[444]](_0x3536x2[_0x763a[526]]),_0x3536x9=mxEvent[_0x763a[731]](_0x3536x3)- _0x3536x4[_0x763a[235]]+ _0x3536x5[_0x763a[235]],_0x3536x4=mxEvent[_0x763a[733]](_0x3536x3)- _0x3536x4[_0x763a[236]]+ _0x3536x5[_0x763a[236]];_0x3536x2[_0x763a[1012]]&& (null== this[_0x763a[561]]|| this[_0x763a[561]])&& _0x3536x2[_0x763a[1014]](_0x3536x9,_0x3536x4,_0x3536x2[_0x763a[1013]]);null!= this[_0x763a[989]]&& _0x3536x2[_0x763a[1015]]()&& (this[_0x763a[986]]= this[_0x763a[564]](_0x3536x2,_0x3536x9,_0x3536x4),_0x3536x5= _0x3536x2[_0x763a[249]]()[_0x763a[248]](this[_0x763a[986]]),this[_0x763a[989]][_0x763a[1016]](_0x3536x5));if(null!= this[_0x763a[983]]){null== this[_0x763a[983]][_0x763a[265]]&& (_0x3536x2[_0x763a[526]][_0x763a[62]](this[_0x763a[983]]),this[_0x763a[983]][_0x763a[124]][_0x763a[931]]= _0x763a[1017],this[_0x763a[983]][_0x763a[124]][_0x763a[491]]= _0x763a[492]);var _0x3536x5=this[_0x763a[997]]()&& _0x3536x2[_0x763a[1018]](_0x3536x3),_0x3536xa=!0;if(null!= this[_0x763a[988]]&& this[_0x763a[988]][_0x763a[1019]](_0x3536x3)){var _0x3536xa=parseInt(this[_0x763a[983]][_0x763a[124]][_0x763a[117]]),_0x3536x12=parseInt(this[_0x763a[983]][_0x763a[124]][_0x763a[119]]),_0x3536xa= new mxRectangle(0,0,_0x3536xa,_0x3536x12),_0x3536x4= new mxPoint(_0x3536x9,_0x3536x4),_0x3536x4=this[_0x763a[988]][_0x763a[582]](_0x3536xa,_0x3536x4,_0x3536x5),_0x3536xa=!1,_0x3536x9=_0x3536x4[_0x763a[235]],_0x3536x4=_0x3536x4[_0x763a[236]]}else {if(_0x3536x5){var _0x3536x5=_0x3536x2[_0x763a[441]][_0x763a[255]],_0x3536x12=_0x3536x2[_0x763a[441]][_0x763a[513]],_0x3536x13=_0x3536x2[_0x763a[1020]]/ 2,_0x3536x9=(_0x3536x2[_0x763a[1021]](_0x3536x9/ _0x3536x5- _0x3536x12[_0x763a[235]]- _0x3536x13)+ _0x3536x12[_0x763a[235]])* _0x3536x5,_0x3536x4=(_0x3536x2[_0x763a[1021]](_0x3536x4/ _0x3536x5- _0x3536x12[_0x763a[236]]- _0x3536x13)+ _0x3536x12[_0x763a[236]])* _0x3536x5}};null!= this[_0x763a[988]]&& _0x3536xa&& this[_0x763a[988]][_0x763a[801]]();null!= this[_0x763a[1022]]&& (_0x3536x9+= this[_0x763a[1022]][_0x763a[235]],_0x3536x4+= this[_0x763a[1022]][_0x763a[236]]);this[_0x763a[983]][_0x763a[124]][_0x763a[361]]= Math[_0x763a[488]](_0x3536x9)+ _0x763a[168];this[_0x763a[983]][_0x763a[124]][_0x763a[125]]= Math[_0x763a[488]](_0x3536x4)+ _0x763a[168];this[_0x763a[983]][_0x763a[124]][_0x763a[187]]= _0x763a[189]};this[_0x763a[987]]= new mxPoint(_0x3536x9,_0x3536x4)};mxDragSource[_0x763a[202]][_0x763a[1008]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){this[_0x763a[981]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9);_0x3536x2[_0x763a[526]][_0x763a[393]]()};function mxToolbar(_0x3536x2){this[_0x763a[526]]= _0x3536x2}mxToolbar[_0x763a[202]]= new mxEventSource;mxToolbar[_0x763a[202]][_0x763a[196]]= mxToolbar;mxToolbar[_0x763a[202]][_0x763a[526]]= null;mxToolbar[_0x763a[202]][_0x763a[984]]= !0;mxToolbar[_0x763a[202]][_0x763a[1023]]= !1;mxToolbar[_0x763a[202]][_0x763a[1024]]= !0;mxToolbar[_0x763a[202]][_0x763a[1025]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){var _0x3536x12=document[_0x763a[55]](null!= _0x3536x3?_0x763a[466]:_0x763a[172]),_0x3536x13=_0x3536x9|| (null!= _0x3536xa?_0x763a[1026]:_0x763a[1027]);_0x3536x12[_0x763a[926]]= _0x3536x13;_0x3536x12[_0x763a[57]](_0x763a[390],_0x3536x3);null!= _0x3536x2&& (null!= _0x3536x3?_0x3536x12[_0x763a[57]](_0x763a[924],_0x3536x2):mxUtils[_0x763a[53]](_0x3536x12,_0x3536x2));this[_0x763a[526]][_0x763a[62]](_0x3536x12);null!= _0x3536x4&& (mxEvent[_0x763a[169]](_0x3536x12,_0x763a[173],_0x3536x4),mxClient[_0x763a[754]]&& mxEvent[_0x763a[169]](_0x3536x12,_0x763a[757],_0x3536x4));_0x3536x2= mxUtils[_0x763a[885]](this,function(_0x3536x2){null!= _0x3536x5?_0x3536x12[_0x763a[57]](_0x763a[390],_0x3536x3):_0x3536x12[_0x763a[124]][_0x763a[1028]]= _0x763a[110]});mxEvent[_0x763a[759]](_0x3536x12,mxUtils[_0x763a[885]](this,function(_0x3536x2){null!= _0x3536x5?_0x3536x12[_0x763a[57]](_0x763a[390],_0x3536x5):_0x3536x12[_0x763a[124]][_0x763a[1028]]= _0x763a[579];if(null!= _0x3536xa){null== this[_0x763a[1029]]&& (this[_0x763a[1029]]= new mxPopupMenu,this[_0x763a[1029]][_0x763a[176]]());var _0x3536x3=this[_0x763a[1030]];this[_0x763a[1029]][_0x763a[1031]]()&& this[_0x763a[1029]][_0x763a[1032]]();_0x3536x3!= _0x3536x12&& (this[_0x763a[1030]]= _0x3536x12,this[_0x763a[1029]][_0x763a[1033]]= _0x3536xa,_0x3536x3= new mxPoint(_0x3536x12[_0x763a[358]],_0x3536x12[_0x763a[362]]+ _0x3536x12[_0x763a[167]]),this[_0x763a[1029]][_0x763a[152]](_0x3536x3[_0x763a[235]],_0x3536x3[_0x763a[236]],null,_0x3536x2),this[_0x763a[1029]][_0x763a[1031]]()&& (_0x3536x12[_0x763a[926]]= _0x3536x13+ _0x763a[1034],this[_0x763a[1029]][_0x763a[1032]]= function(){mxPopupMenu[_0x763a[202]][_0x763a[1032]][_0x763a[183]](this);_0x3536x12[_0x763a[926]]= _0x3536x13;this[_0x763a[1030]]= null}))}}),null,_0x3536x2);mxEvent[_0x763a[169]](_0x3536x12,_0x763a[1035],_0x3536x2);return _0x3536x12};mxToolbar[_0x763a[202]][_0x763a[970]]= function(_0x3536x2){var _0x3536x3=document[_0x763a[55]](_0x763a[485]);_0x3536x3[_0x763a[124]][_0x763a[495]]= _0x763a[497];_0x3536x3[_0x763a[926]]= _0x763a[1036];var _0x3536x4=document[_0x763a[55]](_0x763a[804]);_0x3536x4[_0x763a[926]]= _0x3536x2|| _0x763a[1037];_0x3536x3[_0x763a[62]](_0x3536x4);this[_0x763a[526]][_0x763a[62]](_0x3536x3);return _0x3536x4};mxToolbar[_0x763a[202]][_0x763a[1038]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=document[_0x763a[55]](_0x763a[804]);_0x3536x4[_0x763a[926]]= _0x3536x3|| _0x763a[1037];this[_0x763a[972]](_0x3536x4,_0x3536x2,null);mxEvent[_0x763a[169]](_0x3536x4,_0x763a[826],function(_0x3536x2){var _0x3536x3=_0x3536x4[_0x763a[1040]][_0x3536x4[_0x763a[1039]]];_0x3536x4[_0x763a[1039]]= 0;null!= _0x3536x3[_0x763a[1041]]&& _0x3536x3[_0x763a[1041]](_0x3536x2)});this[_0x763a[526]][_0x763a[62]](_0x3536x4);return _0x3536x4};mxToolbar[_0x763a[202]][_0x763a[972]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=document[_0x763a[55]](_0x763a[973]);mxUtils[_0x763a[171]](_0x3536x5,_0x3536x3);_0x763a[279]== typeof _0x3536x4?_0x3536x5[_0x763a[1041]]= _0x3536x4:_0x3536x5[_0x763a[57]](_0x763a[131],_0x3536x4);_0x3536x2[_0x763a[62]](_0x3536x5);return _0x3536x5};mxToolbar[_0x763a[202]][_0x763a[1042]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=document[_0x763a[55]](_0x763a[466]);_0x3536xa[_0x763a[1043]]= _0x3536x9|| _0x763a[1026];_0x3536xa[_0x763a[926]]= _0x3536xa[_0x763a[1043]];_0x3536xa[_0x763a[57]](_0x763a[390],_0x3536x3);_0x3536xa[_0x763a[1044]]= _0x3536x5;null!= _0x3536x2&& _0x3536xa[_0x763a[57]](_0x763a[924],_0x3536x2);mxEvent[_0x763a[169]](_0x3536xa,_0x763a[173],mxUtils[_0x763a[885]](this,function(_0x3536x2){_0x3536x2= this[_0x763a[1045]][_0x763a[1044]];null!= _0x3536x2?(this[_0x763a[1045]][_0x763a[1044]]= this[_0x763a[1045]][_0x763a[284]](_0x763a[390]),this[_0x763a[1045]][_0x763a[57]](_0x763a[390],_0x3536x2)):this[_0x763a[1045]][_0x763a[926]]= this[_0x763a[1045]][_0x763a[1043]];this[_0x763a[1024]]&& (this[_0x763a[1046]]= _0x3536xa);this[_0x763a[1045]]= _0x3536xa;_0x3536x2= _0x3536xa[_0x763a[1044]];null!= _0x3536x2?(_0x3536xa[_0x763a[1044]]= _0x3536xa[_0x763a[284]](_0x763a[390]),_0x3536xa[_0x763a[57]](_0x763a[390],_0x3536x2)):_0x3536xa[_0x763a[926]]= _0x3536xa[_0x763a[1043]]+ _0x763a[1034];this[_0x763a[746]]( new mxEventObject(mxEvent.SELECT));_0x3536x4()}));this[_0x763a[526]][_0x763a[62]](_0x3536xa);null== this[_0x763a[1046]]&& (this[_0x763a[1046]]= _0x3536xa,this[_0x763a[1047]](_0x3536xa),_0x3536x4());return _0x3536xa};mxToolbar[_0x763a[202]][_0x763a[1048]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536xa= null!= _0x3536xa?_0x3536xa:!0;var _0x3536x12=document[_0x763a[55]](null!= _0x3536x3?_0x763a[466]:_0x763a[172]);_0x3536x12[_0x763a[1043]]= _0x3536x9|| _0x763a[1026];_0x3536x12[_0x763a[926]]= _0x3536x12[_0x763a[1043]];_0x3536x12[_0x763a[57]](_0x763a[390],_0x3536x3);_0x3536x12[_0x763a[1044]]= _0x3536x5;null!= _0x3536x2&& _0x3536x12[_0x763a[57]](_0x763a[924],_0x3536x2);this[_0x763a[984]]&& _0x3536xa&& (mxEvent[_0x763a[169]](_0x3536x12,_0x763a[173],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[1047]](_0x3536x12,_0x3536x4);this[_0x763a[1023]]= !1})),mxEvent[_0x763a[169]](_0x3536x12,_0x763a[760],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[1047]](_0x3536x12,_0x3536x4);this[_0x763a[1023]]= !0})),null== this[_0x763a[1046]]&& (this[_0x763a[1046]]= _0x3536x12,this[_0x763a[1049]]= _0x3536x4,this[_0x763a[1047]](_0x3536x12,_0x3536x4)));this[_0x763a[526]][_0x763a[62]](_0x3536x12);return _0x3536x12};mxToolbar[_0x763a[202]][_0x763a[1047]]= function(_0x3536x2,_0x3536x3){if(this[_0x763a[1045]]!= _0x3536x2){if(null!= this[_0x763a[1045]]){var _0x3536x4=this[_0x763a[1045]][_0x763a[1044]];null!= _0x3536x4?(this[_0x763a[1045]][_0x763a[1044]]= this[_0x763a[1045]][_0x763a[284]](_0x763a[390]),this[_0x763a[1045]][_0x763a[57]](_0x763a[390],_0x3536x4)):this[_0x763a[1045]][_0x763a[926]]= this[_0x763a[1045]][_0x763a[1043]]};this[_0x763a[1045]]= _0x3536x2;_0x3536x4= this[_0x763a[1045]][_0x763a[1044]];null!= _0x3536x4?(this[_0x763a[1045]][_0x763a[1044]]= this[_0x763a[1045]][_0x763a[284]](_0x763a[390]),this[_0x763a[1045]][_0x763a[57]](_0x763a[390],_0x3536x4)):this[_0x763a[1045]][_0x763a[926]]= this[_0x763a[1045]][_0x763a[1043]]+ _0x763a[1034];this[_0x763a[746]]( new mxEventObject(mxEvent.SELECT,_0x763a[279],_0x3536x3))}};mxToolbar[_0x763a[202]][_0x763a[1050]]= function(_0x3536x2){(_0x3536x2|| !this[_0x763a[1023]])&& this[_0x763a[1045]]!= this[_0x763a[1046]]&& this[_0x763a[1047]](this[_0x763a[1046]],this[_0x763a[1049]])};mxToolbar[_0x763a[202]][_0x763a[1051]]= function(_0x3536x2){return this[_0x763a[1025]](null,_0x3536x2,null)};mxToolbar[_0x763a[202]][_0x763a[1052]]= function(){mxUtils[_0x763a[345]](this[_0x763a[526]])};mxToolbar[_0x763a[202]][_0x763a[1053]]= function(){var _0x3536x2=document[_0x763a[55]](_0x763a[1054]);_0x3536x2[_0x763a[124]][_0x763a[941]]= _0x763a[1055];_0x3536x2[_0x763a[57]](_0x763a[803],_0x763a[500]);this[_0x763a[526]][_0x763a[62]](_0x3536x2)};mxToolbar[_0x763a[202]][_0x763a[515]]= function(){mxEvent[_0x763a[762]](this[_0x763a[526]]);this[_0x763a[1045]]= this[_0x763a[1049]]= this[_0x763a[1046]]= this[_0x763a[526]]= null;null!= this[_0x763a[1029]]&& this[_0x763a[1029]][_0x763a[515]]()};function mxSession(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){this[_0x763a[251]]= _0x3536x2;this[_0x763a[1056]]= _0x3536x3;this[_0x763a[1057]]= _0x3536x4;this[_0x763a[1058]]= _0x3536x5;null!= _0x3536x2&& (this[_0x763a[1059]]= new mxCodec,this[_0x763a[1059]][_0x763a[1060]]= function(_0x3536x3){return _0x3536x2[_0x763a[736]](_0x3536x3)});_0x3536x2[_0x763a[169]](mxEvent.NOTIFY,mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x3536x3[_0x763a[720]](_0x763a[1061]);(null!= _0x3536x4&& this[_0x763a[143]]|| this[_0x763a[1062]]&& !this[_0x763a[1063]])&& this[_0x763a[827]](_0x763a[1064]+ this[_0x763a[1067]](_0x3536x4[_0x763a[1065]],_0x3536x4[_0x763a[1066]])+ _0x763a[1068])}))}mxSession[_0x763a[202]]= new mxEventSource;mxSession[_0x763a[202]][_0x763a[196]]= mxSession;mxSession[_0x763a[202]][_0x763a[251]]= null;mxSession[_0x763a[202]][_0x763a[1056]]= null;mxSession[_0x763a[202]][_0x763a[1057]]= null;mxSession[_0x763a[202]][_0x763a[1058]]= null;mxSession[_0x763a[202]][_0x763a[1059]]= null;mxSession[_0x763a[202]][_0x763a[1069]]= _0x763a[336];mxSession[_0x763a[202]][_0x763a[1070]]= !0;mxSession[_0x763a[202]][_0x763a[1071]]= !0;mxSession[_0x763a[202]][_0x763a[1072]]= 0;mxSession[_0x763a[202]][_0x763a[1073]]= 0;mxSession[_0x763a[202]][_0x763a[143]]= !1;mxSession[_0x763a[202]][_0x763a[1062]]= !1;mxSession[_0x763a[202]][_0x763a[1063]]= !1;mxSession[_0x763a[202]][_0x763a[1074]]= !1;mxSession[_0x763a[202]][_0x763a[861]]= function(){this[_0x763a[143]]?(this[_0x763a[1062]]= !0,this[_0x763a[746]]( new mxEventObject(mxEvent.CONNECT))):this[_0x763a[1062]]|| this[_0x763a[203]](this[_0x763a[1056]],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[1062]]= !0;this[_0x763a[746]]( new mxEventObject(mxEvent.CONNECT));this[_0x763a[1075]]()}))};mxSession[_0x763a[202]][_0x763a[809]]= function(){this[_0x763a[1062]]&& !this[_0x763a[1063]]&& (this[_0x763a[1063]]= !0,this[_0x763a[746]]( new mxEventObject(mxEvent.SUSPEND)))};mxSession[_0x763a[202]][_0x763a[810]]= function(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[1062]]&& this[_0x763a[1063]]&& (this[_0x763a[1063]]= !1,this[_0x763a[746]]( new mxEventObject(mxEvent.RESUME)),this[_0x763a[1074]]|| this[_0x763a[1075]]())};mxSession[_0x763a[202]][_0x763a[1076]]= function(_0x3536x2){this[_0x763a[1062]]&& (this[_0x763a[1062]]= !1);this[_0x763a[746]]( new mxEventObject(mxEvent.DISCONNECT,_0x763a[1077],_0x3536x2))};mxSession[_0x763a[202]][_0x763a[1075]]= function(){this[_0x763a[1062]]&& !this[_0x763a[1063]]&& null!= this[_0x763a[1057]]?(this[_0x763a[1074]]= !0,this[_0x763a[203]](this[_0x763a[1057]],mxUtils[_0x763a[885]](this,function(){this[_0x763a[1075]]()}))):this[_0x763a[1074]]= !1};mxSession[_0x763a[202]][_0x763a[827]]= function(_0x3536x2,_0x3536x3,_0x3536x4){null!= _0x3536x2&& 0< _0x3536x2[_0x763a[67]]&& (null!= this[_0x763a[1058]]&& (this[_0x763a[143]]?(mxLog[_0x763a[539]](),mxLog[_0x763a[143]](_0x763a[1078]+ this[_0x763a[1058]]+ _0x763a[1079]+ _0x3536x2)):(_0x3536x2= _0x763a[1080]+ _0x3536x2+ _0x763a[1081],this[_0x763a[1070]]&& (_0x3536x2= encodeURIComponent(_0x3536x2)),mxUtils[_0x763a[814]](this[_0x763a[1058]],_0x763a[1082]+ _0x3536x2,_0x3536x3,_0x3536x4))),this[_0x763a[1072]]+= _0x3536x2[_0x763a[67]],this[_0x763a[746]]( new mxEventObject(mxEvent.NOTIFY,_0x763a[863],this[_0x763a[1058]],_0x763a[338],_0x3536x2)))};mxSession[_0x763a[202]][_0x763a[203]]= function(_0x3536x2,_0x3536x3,_0x3536x4){if(_0x763a[82]!= typeof mxUtils){var _0x3536x5=mxUtils[_0x763a[885]](this,function(_0x3536x2){null!= _0x3536x4?_0x3536x4(_0x3536x2):this[_0x763a[1076]](_0x3536x2)});mxUtils[_0x763a[203]](_0x3536x2,mxUtils[_0x763a[885]](this,function(_0x3536x4){if(_0x763a[82]!= typeof mxUtils){if(_0x3536x4[_0x763a[220]]()&& 404!= _0x3536x4[_0x763a[878]]()){if(this[_0x763a[1073]]+= _0x3536x4[_0x763a[221]]()[_0x763a[67]],this[_0x763a[746]]( new mxEventObject(mxEvent.GET,_0x763a[863],_0x3536x2,_0x763a[870],_0x3536x4)),this[_0x763a[1083]](_0x3536x4)){if(0< _0x3536x4[_0x763a[221]]()[_0x763a[67]]){var _0x3536xa=_0x3536x4[_0x763a[874]]();null== _0x3536xa?_0x3536x5(_0x763a[1084]+ _0x3536x4[_0x763a[221]]()):this[_0x763a[806]](_0x3536xa)};null!= _0x3536x3&& _0x3536x3(_0x3536x4)}}else {_0x3536x5(_0x763a[1085])}}}),function(_0x3536x2){_0x3536x5(_0x763a[1086])})}};mxSession[_0x763a[202]][_0x763a[1083]]= function(_0x3536x2){return 0> _0x3536x2[_0x763a[221]]()[_0x763a[2]](_0x763a[1087])};mxSession[_0x763a[202]][_0x763a[1067]]= function(_0x3536x2,_0x3536x3){for(var _0x3536x4=_0x763a[110],_0x3536x5=_0x3536x3?-1:1,_0x3536x9=_0x3536x3?_0x3536x2[_0x763a[67]]- 1:0;0<= _0x3536x9&& _0x3536x9< _0x3536x2[_0x763a[67]];_0x3536x9+= _0x3536x5){var _0x3536xa=this[_0x763a[1059]][_0x763a[514]](_0x3536x2[_0x3536x9]),_0x3536x4=_0x3536x4+ mxUtils[_0x763a[875]](_0x3536xa,this[_0x763a[1069]])};return _0x3536x4};mxSession[_0x763a[202]][_0x763a[806]]= function(_0x3536x2){if(null!= _0x3536x2&& _0x3536x2[_0x763a[288]]== mxConstants[_0x763a[289]]){var _0x3536x3=_0x3536x2[_0x763a[284]](_0x763a[1088]);null!= _0x3536x3&& (this[_0x763a[251]][_0x763a[1089]]= _0x3536x3+ _0x763a[213]);for(_0x3536x3= _0x3536x2[_0x763a[285]];null!= _0x3536x3;){var _0x3536x4=_0x3536x3[_0x763a[301]][_0x763a[216]]();_0x763a[724]== _0x3536x4?this[_0x763a[1090]](_0x3536x3):_0x763a[1091]== _0x3536x4&& this[_0x763a[1092]](_0x3536x3);_0x3536x3= _0x3536x3[_0x763a[287]]};this[_0x763a[746]]( new mxEventObject(mxEvent.RECEIVE,_0x763a[252],_0x3536x2))}};mxSession[_0x763a[202]][_0x763a[1090]]= function(_0x3536x2){( new mxCodec(_0x3536x2[_0x763a[295]]))[_0x763a[1093]](_0x3536x2[_0x763a[285]],this[_0x763a[251]])};mxSession[_0x763a[202]][_0x763a[1092]]= function(_0x3536x2){for(_0x3536x2= _0x3536x2[_0x763a[285]];null!= _0x3536x2;){_0x763a[1061]== _0x3536x2[_0x763a[301]]&& this[_0x763a[1094]](_0x3536x2),_0x3536x2= _0x3536x2[_0x763a[287]]}};mxSession[_0x763a[202]][_0x763a[1094]]= function(_0x3536x2){_0x3536x2= this[_0x763a[1095]](_0x3536x2);if(0< _0x3536x2[_0x763a[67]]){var _0x3536x3=this[_0x763a[1096]](_0x3536x2);this[_0x763a[251]][_0x763a[746]]( new mxEventObject(mxEvent.CHANGE,_0x763a[1061],_0x3536x3,_0x763a[1065],_0x3536x2));this[_0x763a[251]][_0x763a[746]]( new mxEventObject(mxEvent.UNDO,_0x763a[1061],_0x3536x3));this[_0x763a[746]]( new mxEventObject(mxEvent.FIRED,_0x763a[1061],_0x3536x3))}};mxSession[_0x763a[202]][_0x763a[1096]]= function(_0x3536x2){var _0x3536x3= new mxUndoableEdit(this[_0x763a[251]],this[_0x763a[1071]]);_0x3536x3[_0x763a[1065]]= _0x3536x2;_0x3536x3[_0x763a[827]]= function(){_0x3536x3[_0x763a[1097]][_0x763a[746]]( new mxEventObject(mxEvent.CHANGE,_0x763a[1061],_0x3536x3,_0x763a[1065],_0x3536x3[_0x763a[1065]]));_0x3536x3[_0x763a[1097]][_0x763a[746]]( new mxEventObject(mxEvent.NOTIFY,_0x763a[1061],_0x3536x3,_0x763a[1065],_0x3536x3[_0x763a[1065]]))};return _0x3536x3};mxSession[_0x763a[202]][_0x763a[1095]]= function(_0x3536x2){this[_0x763a[1059]][_0x763a[395]]= _0x3536x2[_0x763a[295]];var _0x3536x3=[];for(_0x3536x2= _0x3536x2[_0x763a[285]];null!= _0x3536x2;){var _0x3536x4=this[_0x763a[1098]](_0x3536x2);null!= _0x3536x4&& _0x3536x3[_0x763a[207]](_0x3536x4);_0x3536x2= _0x3536x2[_0x763a[287]]};return _0x3536x3};mxSession[_0x763a[202]][_0x763a[1098]]= function(_0x3536x2){var _0x3536x3=null;_0x3536x2[_0x763a[288]]== mxConstants[_0x763a[289]]&& (_0x3536x3= _0x763a[1099]== _0x3536x2[_0x763a[301]]?( new mxCodec(_0x3536x2[_0x763a[295]]))[_0x763a[1093]](_0x3536x2):this[_0x763a[1059]][_0x763a[1093]](_0x3536x2),null!= _0x3536x3&& (_0x3536x3[_0x763a[251]]= this[_0x763a[251]],_0x3536x3[_0x763a[350]](),_0x763a[1100]== _0x3536x2[_0x763a[301]]&& null== _0x3536x3[_0x763a[1101]]&& this[_0x763a[1102]](_0x3536x3[_0x763a[247]])));return _0x3536x3};mxSession[_0x763a[202]][_0x763a[1102]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1059]][_0x763a[1104]](_0x3536x2[_0x763a[1103]](),_0x3536x2);for(var _0x3536x4=this[_0x763a[251]][_0x763a[262]](_0x3536x2),_0x3536x5=0;_0x3536x5< _0x3536x4;_0x3536x5++){this[_0x763a[1102]](this[_0x763a[251]][_0x763a[263]](_0x3536x2,_0x3536x5))}};function mxUndoableEdit(_0x3536x2,_0x3536x3){this[_0x763a[1097]]= _0x3536x2;this[_0x763a[1065]]= [];this[_0x763a[1105]]= null!= _0x3536x3?_0x3536x3:!0}mxUndoableEdit[_0x763a[202]][_0x763a[1097]]= null;mxUndoableEdit[_0x763a[202]][_0x763a[1065]]= null;mxUndoableEdit[_0x763a[202]][_0x763a[1105]]= null;mxUndoableEdit[_0x763a[202]][_0x763a[1066]]= !1;mxUndoableEdit[_0x763a[202]][_0x763a[1106]]= !1;mxUndoableEdit[_0x763a[202]][_0x763a[1107]]= function(){return 0== this[_0x763a[1065]][_0x763a[67]]};mxUndoableEdit[_0x763a[202]][_0x763a[1108]]= function(){return this[_0x763a[1105]]};mxUndoableEdit[_0x763a[202]][_0x763a[99]]= function(_0x3536x2){this[_0x763a[1065]][_0x763a[207]](_0x3536x2)};mxUndoableEdit[_0x763a[202]][_0x763a[827]]= function(){};mxUndoableEdit[_0x763a[202]][_0x763a[1109]]= function(){};mxUndoableEdit[_0x763a[202]][_0x763a[824]]= function(){if(!this[_0x763a[1066]]){this[_0x763a[1097]][_0x763a[746]]( new mxEventObject(mxEvent.START_EDIT));for(var _0x3536x2=this[_0x763a[1065]][_0x763a[67]]- 1;0<= _0x3536x2;_0x3536x2--){var _0x3536x3=this[_0x763a[1065]][_0x3536x2];null!= _0x3536x3[_0x763a[350]]?_0x3536x3[_0x763a[350]]():null!= _0x3536x3[_0x763a[824]]&& _0x3536x3[_0x763a[824]]();this[_0x763a[1097]][_0x763a[746]]( new mxEventObject(mxEvent.EXECUTED,_0x763a[826],_0x3536x3))};this[_0x763a[1066]]= !0;this[_0x763a[1106]]= !1;this[_0x763a[1097]][_0x763a[746]]( new mxEventObject(mxEvent.END_EDIT))};this[_0x763a[827]]()};mxUndoableEdit[_0x763a[202]][_0x763a[825]]= function(){if(!this[_0x763a[1106]]){this[_0x763a[1097]][_0x763a[746]]( new mxEventObject(mxEvent.START_EDIT));for(var _0x3536x2=this[_0x763a[1065]][_0x763a[67]],_0x3536x3=0;_0x3536x3< _0x3536x2;_0x3536x3++){var _0x3536x4=this[_0x763a[1065]][_0x3536x3];null!= _0x3536x4[_0x763a[350]]?_0x3536x4[_0x763a[350]]():null!= _0x3536x4[_0x763a[825]]&& _0x3536x4[_0x763a[825]]();this[_0x763a[1097]][_0x763a[746]]( new mxEventObject(mxEvent.EXECUTED,_0x763a[826],_0x3536x4))};this[_0x763a[1066]]= !1;this[_0x763a[1106]]= !0;this[_0x763a[1097]][_0x763a[746]]( new mxEventObject(mxEvent.END_EDIT))};this[_0x763a[827]]()};function mxUndoManager(_0x3536x2){this[_0x763a[803]]= null!= _0x3536x2?_0x3536x2:100;this[_0x763a[200]]()}mxUndoManager[_0x763a[202]]= new mxEventSource;mxUndoManager[_0x763a[202]][_0x763a[196]]= mxUndoManager;mxUndoManager[_0x763a[202]][_0x763a[803]]= null;mxUndoManager[_0x763a[202]][_0x763a[1110]]= null;mxUndoManager[_0x763a[202]][_0x763a[1111]]= 0;mxUndoManager[_0x763a[202]][_0x763a[1107]]= function(){return 0== this[_0x763a[1110]][_0x763a[67]]};mxUndoManager[_0x763a[202]][_0x763a[200]]= function(){this[_0x763a[1110]]= [];this[_0x763a[1111]]= 0;this[_0x763a[746]]( new mxEventObject(mxEvent.CLEAR))};mxUndoManager[_0x763a[202]][_0x763a[1112]]= function(){return 0< this[_0x763a[1111]]};mxUndoManager[_0x763a[202]][_0x763a[824]]= function(){for(;0< this[_0x763a[1111]];){var _0x3536x2=this[_0x763a[1110]][--this[_0x763a[1111]]];_0x3536x2[_0x763a[824]]();if(_0x3536x2[_0x763a[1108]]()){this[_0x763a[746]]( new mxEventObject(mxEvent.UNDO,_0x763a[1061],_0x3536x2));break}}};mxUndoManager[_0x763a[202]][_0x763a[1113]]= function(){return this[_0x763a[1111]]< this[_0x763a[1110]][_0x763a[67]]};mxUndoManager[_0x763a[202]][_0x763a[825]]= function(){for(var _0x3536x2=this[_0x763a[1110]][_0x763a[67]];this[_0x763a[1111]]< _0x3536x2;){var _0x3536x3=this[_0x763a[1110]][this[_0x763a[1111]]++];_0x3536x3[_0x763a[825]]();if(_0x3536x3[_0x763a[1108]]()){this[_0x763a[746]]( new mxEventObject(mxEvent.REDO,_0x763a[1061],_0x3536x3));break}}};mxUndoManager[_0x763a[202]][_0x763a[1114]]= function(_0x3536x2){this[_0x763a[330]]();0< this[_0x763a[803]]&& this[_0x763a[803]]== this[_0x763a[1110]][_0x763a[67]]&& this[_0x763a[1110]][_0x763a[1115]]();this[_0x763a[1110]][_0x763a[207]](_0x3536x2);this[_0x763a[1111]]= this[_0x763a[1110]][_0x763a[67]];this[_0x763a[746]]( new mxEventObject(mxEvent.ADD,_0x763a[1061],_0x3536x2))};mxUndoManager[_0x763a[202]][_0x763a[330]]= function(){if(this[_0x763a[1110]][_0x763a[67]]> this[_0x763a[1111]]){for(var _0x3536x2=this[_0x763a[1110]][_0x763a[300]](this[_0x763a[1111]],this[_0x763a[1110]][_0x763a[67]]- this[_0x763a[1111]]),_0x3536x3=0;_0x3536x3< _0x3536x2[_0x763a[67]];_0x3536x3++){_0x3536x2[_0x3536x3][_0x763a[1109]]()}}};var mxUrlConverter=function(_0x3536x2){var _0x3536x3=!0,_0x3536x4=null,_0x3536x5=null;return {isEnabled:function(){return _0x3536x3},setEnabled:function(_0x3536x2){_0x3536x3= _0x3536x2},getBaseUrl:function(){return _0x3536x4},setBaseUrl:function(_0x3536x2){_0x3536x4= _0x3536x2},getBaseDomain:function(){return _0x3536x4},setBaseDomain:function(_0x3536x2){_0x3536x4= _0x3536x2},isRelativeUrl:function(_0x3536x2){return _0x763a[43]!= _0x3536x2[_0x763a[85]](0,7)&& _0x763a[46]!= _0x3536x2[_0x763a[85]](0,8)&& _0x763a[1116]!= _0x3536x2[_0x763a[85]](0,10)},convert:function(_0x3536x2){if(_0x3536x3&& this[_0x763a[1117]](_0x3536x2)){if(null== _0x3536x4){_0x3536x5= location[_0x763a[1118]]+ _0x763a[1119]+ location[_0x763a[1120]];_0x3536x4= _0x3536x5+ location[_0x763a[1121]];var _0x3536xa=_0x3536x4[_0x763a[1122]](_0x763a[84]);0< _0x3536xa&& (_0x3536x4= _0x3536x4[_0x763a[85]](0,_0x3536xa+ 1))};_0x3536x2= _0x763a[84]== _0x3536x2[_0x763a[225]](0)?_0x3536x5+ _0x3536x2:_0x3536x4+ _0x3536x2};return _0x3536x2}}};function mxPanningManager(_0x3536x2){this[_0x763a[1123]]= null;this[_0x763a[1124]]= !1;this[_0x763a[1125]]= this[_0x763a[1126]]= this[_0x763a[1127]]= this[_0x763a[1128]]= this[_0x763a[1129]]= this[_0x763a[1130]]= 0;this[_0x763a[1131]]= !1;this[_0x763a[190]]= this[_0x763a[360]]= 0;this[_0x763a[1132]]= {mouseDown:function(_0x3536x2,_0x3536x3){},mouseMove:function(_0x3536x2,_0x3536x3){},mouseUp:mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x3){this[_0x763a[1124]]&& this[_0x763a[1076]]()})};_0x3536x2[_0x763a[1133]](this[_0x763a[1132]]);mxEvent[_0x763a[169]](document,_0x763a[753],mxUtils[_0x763a[885]](this,function(){this[_0x763a[1124]]&& this[_0x763a[1076]]()}));var _0x3536x3=mxUtils[_0x763a[885]](this,function(){this[_0x763a[1131]]= mxUtils[_0x763a[1134]](_0x3536x2[_0x763a[526]]);this[_0x763a[360]]= _0x3536x2[_0x763a[526]][_0x763a[360]];this[_0x763a[190]]= _0x3536x2[_0x763a[526]][_0x763a[190]];return window[_0x763a[1141]](mxUtils[_0x763a[885]](this,function(){this[_0x763a[1130]]-= this[_0x763a[1126]];this[_0x763a[1129]]-= this[_0x763a[1125]];if(this[_0x763a[1131]]){var _0x3536x3=-_0x3536x2[_0x763a[526]][_0x763a[360]]- Math[_0x763a[430]](this[_0x763a[1126]]),_0x3536x5=-_0x3536x2[_0x763a[526]][_0x763a[190]]- Math[_0x763a[430]](this[_0x763a[1125]]);_0x3536x2[_0x763a[1135]](_0x3536x3,_0x3536x5);_0x3536x2[_0x763a[1136]]= this[_0x763a[360]]- _0x3536x2[_0x763a[526]][_0x763a[360]];_0x3536x2[_0x763a[1137]]= this[_0x763a[190]]- _0x3536x2[_0x763a[526]][_0x763a[190]];_0x3536x2[_0x763a[746]]( new mxEventObject(mxEvent.PAN))}else {_0x3536x2[_0x763a[1135]](this[_0x763a[1138]](),this[_0x763a[1139]]())}}),this[_0x763a[1140]])});this[_0x763a[1142]]= function(){return active};this[_0x763a[1138]]= function(){return Math[_0x763a[488]](this[_0x763a[1130]])};this[_0x763a[1139]]= function(){return Math[_0x763a[488]](this[_0x763a[1129]])};this[_0x763a[861]]= function(){this[_0x763a[1128]]= _0x3536x2[_0x763a[441]][_0x763a[513]][_0x763a[235]];this[_0x763a[1127]]= _0x3536x2[_0x763a[441]][_0x763a[513]][_0x763a[236]];this[_0x763a[1124]]= !0};this[_0x763a[1143]]= function(_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){this[_0x763a[1124]]|| this[_0x763a[861]]();this[_0x763a[360]]= _0x3536x2[_0x763a[526]][_0x763a[360]];this[_0x763a[190]]= _0x3536x2[_0x763a[526]][_0x763a[190]];_0x3536xa= null!= _0x3536xa?_0x3536xa:0;var _0x3536x12=_0x3536x2[_0x763a[526]];this[_0x763a[1126]]= _0x3536x4+ (null!= _0x3536x9?_0x3536x9:0)- _0x3536x12[_0x763a[360]]- _0x3536x12[_0x763a[159]];0> this[_0x763a[1126]]&& Math[_0x763a[425]](this[_0x763a[1126]])< this[_0x763a[467]]?this[_0x763a[1126]]= this[_0x763a[467]]+ this[_0x763a[1126]]:this[_0x763a[1126]]= this[_0x763a[1144]]?Math[_0x763a[160]](this[_0x763a[1126]],0):0;0== this[_0x763a[1126]]&& (this[_0x763a[1126]]= _0x3536x4- _0x3536x12[_0x763a[360]],this[_0x763a[1126]]= 0< this[_0x763a[1126]]&& this[_0x763a[1126]]< this[_0x763a[467]]?this[_0x763a[1126]]- this[_0x763a[467]]:this[_0x763a[1144]]?Math[_0x763a[243]](0,this[_0x763a[1126]]):0);this[_0x763a[1125]]= _0x3536x5+ _0x3536xa- _0x3536x12[_0x763a[190]]- _0x3536x12[_0x763a[157]];0> this[_0x763a[1125]]&& Math[_0x763a[425]](this[_0x763a[1125]])< this[_0x763a[467]]?this[_0x763a[1125]]= this[_0x763a[467]]+ this[_0x763a[1125]]:this[_0x763a[1125]]= this[_0x763a[1144]]?Math[_0x763a[160]](this[_0x763a[1125]],0):0;0== this[_0x763a[1125]]&& (this[_0x763a[1125]]= _0x3536x5- _0x3536x12[_0x763a[190]],this[_0x763a[1125]]= 0< this[_0x763a[1125]]&& this[_0x763a[1125]]< this[_0x763a[467]]?this[_0x763a[1125]]- this[_0x763a[467]]:this[_0x763a[1144]]?Math[_0x763a[243]](0,this[_0x763a[1125]]):0);0!= this[_0x763a[1126]]|| 0!= this[_0x763a[1125]]?(this[_0x763a[1126]]*= this[_0x763a[1145]],this[_0x763a[1125]]*= this[_0x763a[1145]],null== this[_0x763a[1123]]&& (this[_0x763a[1123]]= _0x3536x3())):null!= this[_0x763a[1123]]&& (window[_0x763a[1146]](this[_0x763a[1123]]),this[_0x763a[1123]]= null)};this[_0x763a[1076]]= function(){if(this[_0x763a[1124]]){if(this[_0x763a[1124]]= !1,null!= this[_0x763a[1123]]&& (window[_0x763a[1146]](this[_0x763a[1123]]),this[_0x763a[1123]]= null),this[_0x763a[1129]]= this[_0x763a[1130]]= 0,this[_0x763a[1131]]){_0x3536x2[_0x763a[1136]]= 0,_0x3536x2[_0x763a[1137]]= 0,_0x3536x2[_0x763a[746]]( new mxEventObject(mxEvent.PAN))}else {var _0x3536x3=_0x3536x2[_0x763a[1136]],_0x3536x5=_0x3536x2[_0x763a[1137]];if(0!= _0x3536x3|| 0!= _0x3536x5){_0x3536x2[_0x763a[1135]](0,0),_0x3536x2[_0x763a[441]][_0x763a[1147]](this[_0x763a[1128]]+ _0x3536x3/ _0x3536x2[_0x763a[441]][_0x763a[255]],this[_0x763a[1127]]+ _0x3536x5/ _0x3536x2[_0x763a[441]][_0x763a[255]])}}}};this[_0x763a[515]]= function(){_0x3536x2[_0x763a[1148]](this[_0x763a[1132]])}}mxPanningManager[_0x763a[202]][_0x763a[1145]]= 1/ 6;mxPanningManager[_0x763a[202]][_0x763a[1140]]= 10;mxPanningManager[_0x763a[202]][_0x763a[1144]]= !0;mxPanningManager[_0x763a[202]][_0x763a[467]]= 0;function mxPopupMenu(_0x3536x2){this[_0x763a[1033]]= _0x3536x2;null!= _0x3536x2&& this[_0x763a[176]]()}mxPopupMenu[_0x763a[202]]= new mxEventSource;mxPopupMenu[_0x763a[202]][_0x763a[196]]= mxPopupMenu;mxPopupMenu[_0x763a[202]][_0x763a[1149]]= mxClient[_0x763a[88]]+ _0x763a[1150];mxPopupMenu[_0x763a[202]][_0x763a[931]]= 10006;mxPopupMenu[_0x763a[202]][_0x763a[1033]]= null;mxPopupMenu[_0x763a[202]][_0x763a[1151]]= !1;mxPopupMenu[_0x763a[202]][_0x763a[984]]= !0;mxPopupMenu[_0x763a[202]][_0x763a[1152]]= 0;mxPopupMenu[_0x763a[202]][_0x763a[1153]]= !1;mxPopupMenu[_0x763a[202]][_0x763a[1154]]= !1;mxPopupMenu[_0x763a[202]][_0x763a[1155]]= !0;mxPopupMenu[_0x763a[202]][_0x763a[176]]= function(){this[_0x763a[116]]= document[_0x763a[55]](_0x763a[116]);this[_0x763a[116]][_0x763a[926]]= _0x763a[1156];this[_0x763a[120]]= document[_0x763a[55]](_0x763a[120]);this[_0x763a[116]][_0x763a[62]](this[_0x763a[120]]);this[_0x763a[485]]= document[_0x763a[55]](_0x763a[485]);this[_0x763a[485]][_0x763a[926]]= _0x763a[1156];this[_0x763a[485]][_0x763a[124]][_0x763a[495]]= _0x763a[497];this[_0x763a[485]][_0x763a[124]][_0x763a[931]]= this[_0x763a[931]];this[_0x763a[485]][_0x763a[62]](this[_0x763a[116]]);mxEvent[_0x763a[1157]](this[_0x763a[485]])};mxPopupMenu[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxPopupMenu[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxPopupMenu[_0x763a[202]][_0x763a[737]]= function(_0x3536x2){return _0x3536x2[_0x763a[737]]()|| this[_0x763a[1151]]&& mxEvent[_0x763a[1158]](_0x3536x2[_0x763a[727]]())};mxPopupMenu[_0x763a[202]][_0x763a[1025]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536x5= _0x3536x5|| this;this[_0x763a[1152]]++;_0x3536x5[_0x763a[1159]]&& (_0x3536x5[_0x763a[1160]]&& this[_0x763a[1051]](_0x3536x5,!0),_0x3536x5[_0x763a[1159]]= !1);_0x3536x5[_0x763a[1160]]= !0;var _0x3536x12=document[_0x763a[55]](_0x763a[121]);_0x3536x12[_0x763a[926]]= _0x763a[1161];var _0x3536x13=document[_0x763a[55]](_0x763a[122]);_0x3536x13[_0x763a[926]]= _0x763a[1162];null!= _0x3536x3?(_0x3536x9= document[_0x763a[55]](_0x763a[466]),_0x3536x9[_0x763a[390]]= _0x3536x3,_0x3536x13[_0x763a[62]](_0x3536x9)):null!= _0x3536x9&& (_0x3536x3= document[_0x763a[55]](_0x763a[485]),_0x3536x3[_0x763a[926]]= _0x3536x9,_0x3536x13[_0x763a[62]](_0x3536x3));_0x3536x12[_0x763a[62]](_0x3536x13);this[_0x763a[1155]]&& (_0x3536x13= document[_0x763a[55]](_0x763a[122]),_0x3536x13[_0x763a[926]]= _0x763a[1161]+ (null!= _0x3536xa&& !_0x3536xa?_0x763a[1163]:_0x763a[110]),mxUtils[_0x763a[53]](_0x3536x13,_0x3536x2),_0x3536x13[_0x763a[611]]= _0x763a[361],_0x3536x12[_0x763a[62]](_0x3536x13),_0x3536x2= document[_0x763a[55]](_0x763a[122]),_0x3536x2[_0x763a[926]]= _0x763a[1161]+ (null!= _0x3536xa&& !_0x3536xa?_0x763a[1163]:_0x763a[110]),_0x3536x2[_0x763a[124]][_0x763a[1164]]= _0x763a[1055],_0x3536x2[_0x763a[124]][_0x763a[1165]]= _0x763a[699],_0x3536x12[_0x763a[62]](_0x3536x2),null== _0x3536x5[_0x763a[485]]&& this[_0x763a[1166]](_0x3536x5));_0x3536x5[_0x763a[120]][_0x763a[62]](_0x3536x12);if(null== _0x3536xa|| _0x3536xa){mxEvent[_0x763a[759]](_0x3536x12,mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[1167]]= _0x3536x12;_0x3536x5[_0x763a[1168]]!= _0x3536x12&& _0x3536x5[_0x763a[1168]]!= _0x3536x5&& (null!= _0x3536x5[_0x763a[1168]]&& null!= _0x3536x5[_0x763a[1168]][_0x763a[485]][_0x763a[265]]&& this[_0x763a[1169]](_0x3536x5),null!= _0x3536x12[_0x763a[485]]&& (this[_0x763a[1170]](_0x3536x5,_0x3536x12),_0x3536x5[_0x763a[1168]]= _0x3536x12));mxEvent[_0x763a[722]](_0x3536x2)}),mxUtils[_0x763a[885]](this,function(_0x3536x2){_0x3536x5[_0x763a[1168]]!= _0x3536x12&& _0x3536x5[_0x763a[1168]]!= _0x3536x5&& (null!= _0x3536x5[_0x763a[1168]]&& null!= _0x3536x5[_0x763a[1168]][_0x763a[485]][_0x763a[265]]&& this[_0x763a[1169]](_0x3536x5),this[_0x763a[1153]]&& null!= _0x3536x12[_0x763a[485]]&& (this[_0x763a[1170]](_0x3536x5,_0x3536x12),_0x3536x5[_0x763a[1168]]= _0x3536x12));_0x3536x12[_0x763a[926]]= _0x763a[1171]}),mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[1167]]== _0x3536x12&& (_0x3536x5[_0x763a[1168]]!= _0x3536x12&& this[_0x763a[1032]](),null!= _0x3536x4&& _0x3536x4(_0x3536x2));this[_0x763a[1167]]= null;mxEvent[_0x763a[722]](_0x3536x2)})),mxEvent[_0x763a[169]](_0x3536x12,_0x763a[1035],mxUtils[_0x763a[885]](this,function(_0x3536x2){_0x3536x12[_0x763a[926]]= _0x763a[1161]}))};return _0x3536x12};mxPopupMenu[_0x763a[202]][_0x763a[1166]]= function(_0x3536x2){_0x3536x2[_0x763a[116]]= document[_0x763a[55]](_0x763a[116]);_0x3536x2[_0x763a[116]][_0x763a[926]]= _0x763a[1156];_0x3536x2[_0x763a[120]]= document[_0x763a[55]](_0x763a[120]);_0x3536x2[_0x763a[116]][_0x763a[62]](_0x3536x2[_0x763a[120]]);_0x3536x2[_0x763a[485]]= document[_0x763a[55]](_0x763a[485]);_0x3536x2[_0x763a[485]][_0x763a[926]]= _0x763a[1156];_0x3536x2[_0x763a[485]][_0x763a[124]][_0x763a[491]]= _0x763a[492];_0x3536x2[_0x763a[485]][_0x763a[124]][_0x763a[495]]= _0x763a[497];_0x3536x2[_0x763a[485]][_0x763a[124]][_0x763a[931]]= this[_0x763a[931]];_0x3536x2[_0x763a[485]][_0x763a[62]](_0x3536x2[_0x763a[116]]);var _0x3536x3=document[_0x763a[55]](_0x763a[466]);_0x3536x3[_0x763a[57]](_0x763a[390],this[_0x763a[1149]]);td= _0x3536x2[_0x763a[285]][_0x763a[287]][_0x763a[287]];td[_0x763a[62]](_0x3536x3)};mxPopupMenu[_0x763a[202]][_0x763a[1170]]= function(_0x3536x2,_0x3536x3){if(null!= _0x3536x3[_0x763a[485]]){_0x3536x3[_0x763a[485]][_0x763a[124]][_0x763a[361]]= _0x3536x2[_0x763a[485]][_0x763a[358]]+ _0x3536x3[_0x763a[358]]+ _0x3536x3[_0x763a[359]]- 1+ _0x763a[168];_0x3536x3[_0x763a[485]][_0x763a[124]][_0x763a[125]]= _0x3536x2[_0x763a[485]][_0x763a[362]]+ _0x3536x3[_0x763a[362]]+ _0x763a[168];document[_0x763a[112]][_0x763a[62]](_0x3536x3[_0x763a[485]]);var _0x3536x4=parseInt(_0x3536x3[_0x763a[485]][_0x763a[358]]),_0x3536x5=parseInt(_0x3536x3[_0x763a[485]][_0x763a[359]]),_0x3536x9=document[_0x763a[112]],_0x3536xa=document[_0x763a[158]];if(_0x3536x4+ _0x3536x5> (_0x3536x9[_0x763a[360]]|| _0x3536xa[_0x763a[360]])+ (_0x3536x9[_0x763a[159]]|| _0x3536xa[_0x763a[159]])){_0x3536x3[_0x763a[485]][_0x763a[124]][_0x763a[361]]= _0x3536x2[_0x763a[485]][_0x763a[358]]- _0x3536x5+ (mxClient[_0x763a[80]]?6:-6)+ _0x763a[168]};mxUtils[_0x763a[933]](_0x3536x3[_0x763a[485]])}};mxPopupMenu[_0x763a[202]][_0x763a[1051]]= function(_0x3536x2,_0x3536x3){_0x3536x2= _0x3536x2|| this;if(this[_0x763a[1154]]&& !_0x3536x3){_0x3536x2[_0x763a[1159]]= !0}else {if(null!= _0x3536x2[_0x763a[120]]){_0x3536x2[_0x763a[1159]]= !1;var _0x3536x4=document[_0x763a[55]](_0x763a[121]),_0x3536x5=document[_0x763a[55]](_0x763a[122]);_0x3536x5[_0x763a[926]]= _0x763a[1162];_0x3536x5[_0x763a[124]][_0x763a[549]]= _0x763a[1172];_0x3536x4[_0x763a[62]](_0x3536x5);_0x3536x5= document[_0x763a[55]](_0x763a[122]);_0x3536x5[_0x763a[124]][_0x763a[549]]= _0x763a[1172];_0x3536x5[_0x763a[57]](_0x763a[1173],_0x763a[1174]);var _0x3536x9=document[_0x763a[55]](_0x763a[1054]);_0x3536x9[_0x763a[57]](_0x763a[803],_0x763a[500]);_0x3536x5[_0x763a[62]](_0x3536x9);_0x3536x4[_0x763a[62]](_0x3536x5);_0x3536x2[_0x763a[120]][_0x763a[62]](_0x3536x4)}}};mxPopupMenu[_0x763a[202]][_0x763a[152]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){if(null!= this[_0x763a[485]]&& null!= this[_0x763a[120]]&& null!= this[_0x763a[1033]]){this[_0x763a[485]][_0x763a[124]][_0x763a[361]]= _0x3536x2+ _0x763a[168];for(this[_0x763a[485]][_0x763a[124]][_0x763a[125]]= _0x3536x3+ _0x763a[168];null!= this[_0x763a[120]][_0x763a[285]];){mxEvent[_0x763a[762]](this[_0x763a[120]][_0x763a[285]]),this[_0x763a[120]][_0x763a[266]](this[_0x763a[120]][_0x763a[285]])};this[_0x763a[1152]]= 0;this[_0x763a[1033]](this,_0x3536x4,_0x3536x5);0< this[_0x763a[1152]]&& (this[_0x763a[1175]](),this[_0x763a[746]]( new mxEventObject(mxEvent.SHOW)))}};mxPopupMenu[_0x763a[202]][_0x763a[1031]]= function(){return null!= this[_0x763a[485]]&& this[_0x763a[485]][_0x763a[265]]== document[_0x763a[112]]};mxPopupMenu[_0x763a[202]][_0x763a[1175]]= function(){9<= document[_0x763a[5]]&& (this[_0x763a[485]][_0x763a[124]][_0x763a[347]]= _0x763a[130]);document[_0x763a[112]][_0x763a[62]](this[_0x763a[485]]);mxUtils[_0x763a[933]](this[_0x763a[485]])};mxPopupMenu[_0x763a[202]][_0x763a[1032]]= function(){null!= this[_0x763a[485]]&& (null!= this[_0x763a[485]][_0x763a[265]]&& this[_0x763a[485]][_0x763a[265]][_0x763a[266]](this[_0x763a[485]]),this[_0x763a[1169]](this),this[_0x763a[1160]]= !1)};mxPopupMenu[_0x763a[202]][_0x763a[1169]]= function(_0x3536x2){null!= _0x3536x2[_0x763a[1168]]&& (this[_0x763a[1169]](_0x3536x2[_0x763a[1168]]),null!= _0x3536x2[_0x763a[1168]][_0x763a[485]][_0x763a[265]]&& _0x3536x2[_0x763a[1168]][_0x763a[485]][_0x763a[265]][_0x763a[266]](_0x3536x2[_0x763a[1168]][_0x763a[485]]),_0x3536x2[_0x763a[1168]]= null)};mxPopupMenu[_0x763a[202]][_0x763a[515]]= function(){null!= this[_0x763a[485]]&& (mxEvent[_0x763a[762]](this[_0x763a[485]]),null!= this[_0x763a[485]][_0x763a[265]]&& this[_0x763a[485]][_0x763a[265]][_0x763a[266]](this[_0x763a[485]]),this[_0x763a[485]]= null)};function mxAutoSaveManager(_0x3536x2){this[_0x763a[1176]]= mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x4){this[_0x763a[994]]()&& this[_0x763a[1177]](_0x3536x4[_0x763a[720]](_0x763a[1061])[_0x763a[1065]])});this[_0x763a[1178]](_0x3536x2)}mxAutoSaveManager[_0x763a[202]]= new mxEventSource;mxAutoSaveManager[_0x763a[202]][_0x763a[196]]= mxAutoSaveManager;mxAutoSaveManager[_0x763a[202]][_0x763a[1179]]= null;mxAutoSaveManager[_0x763a[202]][_0x763a[1180]]= 10;mxAutoSaveManager[_0x763a[202]][_0x763a[1181]]= 2;mxAutoSaveManager[_0x763a[202]][_0x763a[1182]]= 5;mxAutoSaveManager[_0x763a[202]][_0x763a[1183]]= 0;mxAutoSaveManager[_0x763a[202]][_0x763a[1184]]= 0;mxAutoSaveManager[_0x763a[202]][_0x763a[984]]= !0;mxAutoSaveManager[_0x763a[202]][_0x763a[1176]]= null;mxAutoSaveManager[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxAutoSaveManager[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxAutoSaveManager[_0x763a[202]][_0x763a[1178]]= function(_0x3536x2){null!= this[_0x763a[1179]]&& this[_0x763a[1179]][_0x763a[502]]()[_0x763a[745]](this[_0x763a[1176]]);this[_0x763a[1179]]= _0x3536x2;null!= this[_0x763a[1179]]&& this[_0x763a[1179]][_0x763a[502]]()[_0x763a[169]](mxEvent.CHANGE,this[_0x763a[1176]])};mxAutoSaveManager[_0x763a[202]][_0x763a[815]]= function(){};mxAutoSaveManager[_0x763a[202]][_0x763a[1177]]= function(_0x3536x2){_0x3536x2= (( new Date)[_0x763a[178]]()- this[_0x763a[1184]])/ 1E3;_0x3536x2> this[_0x763a[1180]]|| this[_0x763a[1183]]>= this[_0x763a[1182]]&& _0x3536x2> this[_0x763a[1181]]?(this[_0x763a[815]](),this[_0x763a[862]]()):this[_0x763a[1183]]++};mxAutoSaveManager[_0x763a[202]][_0x763a[862]]= function(){this[_0x763a[1184]]= ( new Date)[_0x763a[178]]();this[_0x763a[1183]]= 0};mxAutoSaveManager[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[1178]](null)};function mxAnimation(_0x3536x2){this[_0x763a[1140]]= null!= _0x3536x2?_0x3536x2:20}mxAnimation[_0x763a[202]]= new mxEventSource;mxAnimation[_0x763a[202]][_0x763a[196]]= mxAnimation;mxAnimation[_0x763a[202]][_0x763a[1140]]= null;mxAnimation[_0x763a[202]][_0x763a[1123]]= null;mxAnimation[_0x763a[202]][_0x763a[1185]]= function(){null== this[_0x763a[1123]]&& (this[_0x763a[1123]]= window[_0x763a[1141]](mxUtils[_0x763a[885]](this,this[_0x763a[1186]]),this[_0x763a[1140]]))};mxAnimation[_0x763a[202]][_0x763a[1186]]= function(){this[_0x763a[746]]( new mxEventObject(mxEvent.EXECUTE))};mxAnimation[_0x763a[202]][_0x763a[1187]]= function(){null!= this[_0x763a[1123]]&& (window[_0x763a[1146]](this[_0x763a[1123]]),this[_0x763a[1123]]= null,this[_0x763a[746]]( new mxEventObject(mxEvent.DONE)))};function mxMorphing(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){mxAnimation[_0x763a[239]](this,_0x3536x5);this[_0x763a[1179]]= _0x3536x2;this[_0x763a[1188]]= null!= _0x3536x3?_0x3536x3:6;this[_0x763a[1189]]= null!= _0x3536x4?_0x3536x4:1.5}mxMorphing[_0x763a[202]]= new mxAnimation;mxMorphing[_0x763a[202]][_0x763a[196]]= mxMorphing;mxMorphing[_0x763a[202]][_0x763a[1179]]= null;mxMorphing[_0x763a[202]][_0x763a[1188]]= null;mxMorphing[_0x763a[202]][_0x763a[1190]]= 0;mxMorphing[_0x763a[202]][_0x763a[1189]]= null;mxMorphing[_0x763a[202]][_0x763a[895]]= null;mxMorphing[_0x763a[202]][_0x763a[1186]]= function(){var _0x3536x2= new mxCellStatePreview(this[_0x763a[1179]]);if(null!= this[_0x763a[895]]){for(var _0x3536x3=0;_0x3536x3< this[_0x763a[895]][_0x763a[67]];_0x3536x3++){this[_0x763a[1191]](cells[_0x3536x3],_0x3536x2,!1)}}else {this[_0x763a[1191]](this[_0x763a[1179]][_0x763a[502]]()[_0x763a[501]](),_0x3536x2,!0)};this[_0x763a[539]](_0x3536x2);(_0x3536x2[_0x763a[1107]]()|| this[_0x763a[1190]]++ >= this[_0x763a[1188]])&& this[_0x763a[1187]]()};mxMorphing[_0x763a[202]][_0x763a[539]]= function(_0x3536x2){_0x3536x2[_0x763a[539]]()};mxMorphing[_0x763a[202]][_0x763a[1191]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[248]](_0x3536x2),_0x3536x9=null;if(null!= _0x3536x5&& (_0x3536x9= this[_0x763a[1192]](_0x3536x5),this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1193]](_0x3536x2)&& (0!= _0x3536x9[_0x763a[235]]|| 0!= _0x3536x9[_0x763a[236]]))){var _0x3536xa=this[_0x763a[1179]][_0x763a[441]][_0x763a[512]](),_0x3536x12=this[_0x763a[1179]][_0x763a[441]][_0x763a[518]]();_0x3536x9[_0x763a[235]]+= _0x3536xa[_0x763a[235]]* _0x3536x12;_0x3536x9[_0x763a[236]]+= _0x3536xa[_0x763a[236]]* _0x3536x12;_0x3536x3[_0x763a[1194]](_0x3536x5,-_0x3536x9[_0x763a[235]]/ this[_0x763a[1189]],-_0x3536x9[_0x763a[236]]/ this[_0x763a[1189]])};if(_0x3536x4&& !this[_0x763a[1195]](_0x3536x5,_0x3536x9)){_0x3536x5= this[_0x763a[1179]][_0x763a[502]]()[_0x763a[262]](_0x3536x2);for(_0x3536x9= 0;_0x3536x9< _0x3536x5;_0x3536x9++){this[_0x763a[1191]](this[_0x763a[1179]][_0x763a[502]]()[_0x763a[263]](_0x3536x2,_0x3536x9),_0x3536x3,_0x3536x4)}}};mxMorphing[_0x763a[202]][_0x763a[1195]]= function(_0x3536x2,_0x3536x3){return null!= _0x3536x3&& (0!= _0x3536x3[_0x763a[235]]|| 0!= _0x3536x3[_0x763a[236]])};mxMorphing[_0x763a[202]][_0x763a[1192]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1196]](_0x3536x2[_0x763a[246]]),_0x3536x4=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[512]](),_0x3536x5=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[518]]();_0x3536x2= new mxPoint(_0x3536x2[_0x763a[235]]/ _0x3536x5- _0x3536x4[_0x763a[235]],_0x3536x2[_0x763a[236]]/ _0x3536x5- _0x3536x4[_0x763a[236]]);return new mxPoint((_0x3536x3[_0x763a[235]]- _0x3536x2[_0x763a[235]])* _0x3536x5,(_0x3536x3[_0x763a[236]]- _0x3536x2[_0x763a[236]])* _0x3536x5)};mxMorphing[_0x763a[202]][_0x763a[1196]]= function(_0x3536x2){var _0x3536x3=null;null!= _0x3536x2&& (_0x3536x3= this[_0x763a[1196]](this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1197]](_0x3536x2)),_0x3536x2= this[_0x763a[1179]][_0x763a[1198]](_0x3536x2),null!= _0x3536x2&& (_0x3536x3[_0x763a[235]]+= _0x3536x2[_0x763a[235]],_0x3536x3[_0x763a[236]]+= _0x3536x2[_0x763a[236]]));null== _0x3536x3&& (_0x3536x3= this[_0x763a[1179]][_0x763a[441]][_0x763a[512]](),_0x3536x3= new mxPoint(-_0x3536x3[_0x763a[235]],-_0x3536x3[_0x763a[236]]));return _0x3536x3};function mxImageBundle(_0x3536x2){this[_0x763a[1199]]= [];this[_0x763a[1200]]= null!= _0x3536x2?_0x3536x2:!1}mxImageBundle[_0x763a[202]][_0x763a[1199]]= null;mxImageBundle[_0x763a[202]][_0x763a[1199]]= null;mxImageBundle[_0x763a[202]][_0x763a[1201]]= function(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[1199]][_0x3536x2]= {value:_0x3536x3,fallback:_0x3536x4}};mxImageBundle[_0x763a[202]][_0x763a[1202]]= function(_0x3536x2){var _0x3536x3=null;null!= _0x3536x2&& (_0x3536x2= this[_0x763a[1199]][_0x3536x2],null!= _0x3536x2&& (_0x3536x3= this[_0x763a[1200]]?_0x3536x2[_0x763a[1203]]:_0x3536x2[_0x763a[131]]));return _0x3536x3};function mxImageExport(){}mxImageExport[_0x763a[202]][_0x763a[1204]]= !1;mxImageExport[_0x763a[202]][_0x763a[1205]]= function(_0x3536x2,_0x3536x3){null!= _0x3536x2&& (this[_0x763a[1207]](_0x3536x2,_0x3536x3,this[_0x763a[1206]]),this[_0x763a[1204]]&& this[_0x763a[1207]](_0x3536x2,_0x3536x3,this[_0x763a[1208]]))};mxImageExport[_0x763a[202]][_0x763a[1207]]= function(_0x3536x2,_0x3536x3,_0x3536x4){if(null!= _0x3536x2){_0x3536x4(_0x3536x2,_0x3536x3);for(var _0x3536x5=_0x3536x2[_0x763a[441]][_0x763a[1179]],_0x3536x9=_0x3536x5[_0x763a[251]][_0x763a[262]](_0x3536x2[_0x763a[246]]),_0x3536xa=0;_0x3536xa< _0x3536x9;_0x3536xa++){var _0x3536x12=_0x3536x5[_0x763a[441]][_0x763a[248]](_0x3536x5[_0x763a[251]][_0x763a[263]](_0x3536x2[_0x763a[246]],_0x3536xa));this[_0x763a[1207]](_0x3536x12,_0x3536x3,_0x3536x4)}}};mxImageExport[_0x763a[202]][_0x763a[1206]]= function(_0x3536x2,_0x3536x3){_0x3536x2[_0x763a[253]] instanceof mxShape&& (_0x3536x3[_0x763a[815]](),_0x3536x2[_0x763a[253]][_0x763a[1209]](_0x3536x3),_0x3536x3[_0x763a[1210]]());null!= _0x3536x2[_0x763a[963]]&& (_0x3536x3[_0x763a[815]](),_0x3536x2[_0x763a[963]][_0x763a[1209]](_0x3536x3),_0x3536x3[_0x763a[1210]]())};mxImageExport[_0x763a[202]][_0x763a[1208]]= function(_0x3536x2,_0x3536x3){null!= _0x3536x2[_0x763a[1211]]&& _0x3536x2[_0x763a[1211]][_0x763a[209]](function(_0x3536x2,_0x3536x5){_0x3536x5 instanceof mxShape&& _0x3536x5[_0x763a[1209]](_0x3536x3)})};function mxAbstractCanvas2D(){this[_0x763a[1212]]= this[_0x763a[1213]]();this[_0x763a[862]]()}mxAbstractCanvas2D[_0x763a[202]][_0x763a[724]]= null;mxAbstractCanvas2D[_0x763a[202]][_0x763a[1214]]= null;mxAbstractCanvas2D[_0x763a[202]][_0x763a[1215]]= null;mxAbstractCanvas2D[_0x763a[202]][_0x763a[1216]]= !0;mxAbstractCanvas2D[_0x763a[202]][_0x763a[1217]]= 0;mxAbstractCanvas2D[_0x763a[202]][_0x763a[1218]]= 0;mxAbstractCanvas2D[_0x763a[202]][_0x763a[1219]]= _0x763a[1220];mxAbstractCanvas2D[_0x763a[202]][_0x763a[1221]]= _0x763a[1222];mxAbstractCanvas2D[_0x763a[202]][_0x763a[1223]]= _0x763a[1224];mxAbstractCanvas2D[_0x763a[202]][_0x763a[1225]]= _0x763a[1226];mxAbstractCanvas2D[_0x763a[202]][_0x763a[1227]]= _0x763a[1228];mxAbstractCanvas2D[_0x763a[202]][_0x763a[1229]]= !1;mxAbstractCanvas2D[_0x763a[202]][_0x763a[1213]]= function(){return new mxUrlConverter};mxAbstractCanvas2D[_0x763a[202]][_0x763a[862]]= function(){this[_0x763a[724]]= this[_0x763a[1230]]();this[_0x763a[1214]]= []};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1230]]= function(){return {dx:0,dy:0,scale:1,alpha:1,fillColor:null,fillAlpha:1,gradientColor:null,gradientAlpha:1,gradientDirection:null,strokeColor:null,strokeWidth:1,dashed:!1,dashPattern:_0x763a[1231],lineCap:_0x763a[1232],lineJoin:_0x763a[1233],miterLimit:10,fontColor:_0x763a[1234],fontBackgroundColor:null,fontBorderColor:null,fontSize:mxConstants[_0x763a[483]],fontFamily:mxConstants[_0x763a[484]],fontStyle:0,shadow:!1,shadowColor:mxConstants[_0x763a[1235]],shadowAlpha:mxConstants[_0x763a[1236]],shadowDx:mxConstants[_0x763a[1237]],shadowDy:mxConstants[_0x763a[1238]],rotation:0,rotationCx:0,rotationCy:0}};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1239]]= function(_0x3536x2){return Math[_0x763a[488]](parseFloat(_0x3536x2))};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1240]]= function(){if(null!= this[_0x763a[1215]]&& (this[_0x763a[1215]][_0x763a[207]](arguments[0]),2< arguments[_0x763a[67]])){for(var _0x3536x2=this[_0x763a[724]],_0x3536x3=2;_0x3536x3< arguments[_0x763a[67]];_0x3536x3+= 2){this[_0x763a[1217]]= arguments[_0x3536x3- 1],this[_0x763a[1218]]= arguments[_0x3536x3],this[_0x763a[1215]][_0x763a[207]](this[_0x763a[1239]]((this[_0x763a[1217]]+ _0x3536x2[_0x763a[1126]])* _0x3536x2[_0x763a[255]])),this[_0x763a[1215]][_0x763a[207]](this[_0x763a[1239]]((this[_0x763a[1218]]+ _0x3536x2[_0x763a[1125]])* _0x3536x2[_0x763a[255]]))}}};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1241]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x4*= Math[_0x763a[424]]/ 180;return mxUtils[_0x763a[432]]( new mxPoint(_0x3536x2,_0x3536x3),Math[_0x763a[426]](_0x3536x4),Math[_0x763a[427]](_0x3536x4), new mxPoint(_0x3536x5,_0x3536x9))};mxAbstractCanvas2D[_0x763a[202]][_0x763a[815]]= function(){this[_0x763a[1214]][_0x763a[207]](this[_0x763a[724]]);this[_0x763a[724]]= mxUtils[_0x763a[238]](this[_0x763a[724]])};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1210]]= function(){this[_0x763a[724]]= this[_0x763a[1214]][_0x763a[1242]]()};mxAbstractCanvas2D[_0x763a[202]][_0x763a[255]]= function(_0x3536x2){this[_0x763a[724]][_0x763a[255]]*= _0x3536x2;this[_0x763a[724]][_0x763a[610]]*= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[513]]= function(_0x3536x2,_0x3536x3){this[_0x763a[724]][_0x763a[1126]]+= _0x3536x2;this[_0x763a[724]][_0x763a[1125]]+= _0x3536x3};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1243]]= function(_0x3536x2){this[_0x763a[724]][_0x763a[1244]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1245]]= function(_0x3536x2){_0x3536x2== mxConstants[_0x763a[217]]&& (_0x3536x2= null);this[_0x763a[724]][_0x763a[604]]= _0x3536x2;this[_0x763a[724]][_0x763a[606]]= null};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1246]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14){_0x3536x4= this[_0x763a[724]];_0x3536x4[_0x763a[604]]= _0x3536x2;_0x3536x4[_0x763a[1247]]= null!= _0x3536x13?_0x3536x13:1;_0x3536x4[_0x763a[606]]= _0x3536x3;_0x3536x4[_0x763a[1248]]= null!= _0x3536x14?_0x3536x14:1;_0x3536x4[_0x763a[607]]= _0x3536x12};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1249]]= function(_0x3536x2){_0x3536x2== mxConstants[_0x763a[217]]&& (_0x3536x2= null);this[_0x763a[724]][_0x763a[608]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1250]]= function(_0x3536x2){this[_0x763a[724]][_0x763a[610]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1251]]= function(_0x3536x2){this[_0x763a[724]][_0x763a[648]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1252]]= function(_0x3536x2){this[_0x763a[724]][_0x763a[649]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1253]]= function(_0x3536x2){this[_0x763a[724]][_0x763a[1254]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1255]]= function(_0x3536x2){this[_0x763a[724]][_0x763a[1256]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1257]]= function(_0x3536x2){this[_0x763a[724]][_0x763a[1258]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1259]]= function(_0x3536x2){_0x3536x2== mxConstants[_0x763a[217]]&& (_0x3536x2= null);this[_0x763a[724]][_0x763a[665]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1260]]= function(_0x3536x2){_0x3536x2== mxConstants[_0x763a[217]]&& (_0x3536x2= null);this[_0x763a[724]][_0x763a[1261]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1262]]= function(_0x3536x2){_0x3536x2== mxConstants[_0x763a[217]]&& (_0x3536x2= null);this[_0x763a[724]][_0x763a[1263]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1264]]= function(_0x3536x2){this[_0x763a[724]][_0x763a[487]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1265]]= function(_0x3536x2){this[_0x763a[724]][_0x763a[486]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1266]]= function(_0x3536x2){null== _0x3536x2&& (_0x3536x2= 0);this[_0x763a[724]][_0x763a[666]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1267]]= function(_0x3536x2){this[_0x763a[724]][_0x763a[639]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1268]]= function(_0x3536x2){_0x3536x2== mxConstants[_0x763a[217]]&& (_0x3536x2= null);this[_0x763a[724]][_0x763a[1269]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1270]]= function(_0x3536x2){this[_0x763a[724]][_0x763a[1271]]= _0x3536x2};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1272]]= function(_0x3536x2,_0x3536x3){this[_0x763a[724]][_0x763a[1273]]= _0x3536x2;this[_0x763a[724]][_0x763a[1274]]= _0x3536x3};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1275]]= function(){this[_0x763a[1218]]= this[_0x763a[1217]]= 0;this[_0x763a[1215]]= []};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1276]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1240]](this[_0x763a[1219]],_0x3536x2,_0x3536x3)};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1277]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1240]](this[_0x763a[1221]],_0x3536x2,_0x3536x3)};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1278]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){this[_0x763a[1240]](this[_0x763a[1223]],_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5)};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1279]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){this[_0x763a[1240]](this[_0x763a[1225]],_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa)};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1280]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12){_0x3536x2= mxUtils[_0x763a[1281]](this[_0x763a[1217]],this[_0x763a[1218]],_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12);for(_0x3536x3= 0;_0x3536x3< _0x3536x2[_0x763a[67]];_0x3536x3+= 6){this[_0x763a[1279]](_0x3536x2[_0x3536x3],_0x3536x2[_0x3536x3+ 1],_0x3536x2[_0x3536x3+ 2],_0x3536x2[_0x3536x3+ 3],_0x3536x2[_0x3536x3+ 4],_0x3536x2[_0x3536x3+ 5])}};mxAbstractCanvas2D[_0x763a[202]][_0x763a[268]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){this[_0x763a[1240]](this[_0x763a[1227]])};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1282]]= function(){};function mxXmlCanvas2D(_0x3536x2){mxAbstractCanvas2D[_0x763a[239]](this);this[_0x763a[813]]= _0x3536x2;this[_0x763a[1283]]()}mxUtils[_0x763a[1284]](mxXmlCanvas2D,mxAbstractCanvas2D);mxXmlCanvas2D[_0x763a[202]][_0x763a[1285]]= !0;mxXmlCanvas2D[_0x763a[202]][_0x763a[1286]]= !0;mxXmlCanvas2D[_0x763a[202]][_0x763a[1283]]= function(){var _0x3536x2;_0x3536x2= this[_0x763a[55]](_0x763a[1287]);_0x3536x2[_0x763a[57]](_0x763a[1288],mxConstants.DEFAULT_FONTFAMILY);this[_0x763a[813]][_0x763a[62]](_0x3536x2);_0x3536x2= this[_0x763a[55]](_0x763a[1289]);_0x3536x2[_0x763a[57]](_0x763a[803],mxConstants.DEFAULT_FONTSIZE);this[_0x763a[813]][_0x763a[62]](_0x3536x2);_0x3536x2= this[_0x763a[55]](_0x763a[1290]);_0x3536x2[_0x763a[57]](_0x763a[352],mxConstants.SHADOWCOLOR);this[_0x763a[813]][_0x763a[62]](_0x3536x2);_0x3536x2= this[_0x763a[55]](_0x763a[1291]);_0x3536x2[_0x763a[57]](_0x763a[1244],mxConstants.SHADOW_OPACITY);this[_0x763a[813]][_0x763a[62]](_0x3536x2);_0x3536x2= this[_0x763a[55]](_0x763a[1292]);_0x3536x2[_0x763a[57]](_0x763a[1126],mxConstants.SHADOW_OFFSET_X);_0x3536x2[_0x763a[57]](_0x763a[1125],mxConstants.SHADOW_OFFSET_Y);this[_0x763a[813]][_0x763a[62]](_0x3536x2)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1239]]= function(_0x3536x2){return parseFloat(parseFloat(_0x3536x2)[_0x763a[1293]](2))};mxXmlCanvas2D[_0x763a[202]][_0x763a[55]]= function(_0x3536x2){return this[_0x763a[813]][_0x763a[295]][_0x763a[55]](_0x3536x2)};mxXmlCanvas2D[_0x763a[202]][_0x763a[815]]= function(){this[_0x763a[1286]]&& mxAbstractCanvas2D[_0x763a[202]][_0x763a[815]][_0x763a[183]](this,arguments);this[_0x763a[813]][_0x763a[62]](this[_0x763a[55]](_0x763a[815]))};mxXmlCanvas2D[_0x763a[202]][_0x763a[1210]]= function(){this[_0x763a[1286]]&& mxAbstractCanvas2D[_0x763a[202]][_0x763a[1210]][_0x763a[183]](this,arguments);this[_0x763a[813]][_0x763a[62]](this[_0x763a[55]](_0x763a[1210]))};mxXmlCanvas2D[_0x763a[202]][_0x763a[255]]= function(_0x3536x2){if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[255]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1243]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[255]);_0x3536x3[_0x763a[57]](_0x763a[255],_0x3536x2);this[_0x763a[813]][_0x763a[62]](_0x3536x3)};mxXmlCanvas2D[_0x763a[202]][_0x763a[513]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[55]](_0x763a[513]);_0x3536x4[_0x763a[57]](_0x763a[1126],this[_0x763a[1239]](_0x3536x2));_0x3536x4[_0x763a[57]](_0x763a[1125],this[_0x763a[1239]](_0x3536x3));this[_0x763a[813]][_0x763a[62]](_0x3536x4)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1294]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=this[_0x763a[55]](_0x763a[1294]);if(0!= _0x3536x2|| _0x3536x3|| _0x3536x4){_0x3536xa[_0x763a[57]](_0x763a[1295],this[_0x763a[1239]](_0x3536x2)),_0x3536xa[_0x763a[57]](_0x763a[623],_0x3536x3?_0x763a[500]:_0x763a[468]),_0x3536xa[_0x763a[57]](_0x763a[624],_0x3536x4?_0x763a[500]:_0x763a[468]),_0x3536xa[_0x763a[57]](_0x763a[1296],this[_0x763a[1239]](_0x3536x5)),_0x3536xa[_0x763a[57]](_0x763a[1297],this[_0x763a[1239]](_0x3536x9)),this[_0x763a[813]][_0x763a[62]](_0x3536xa)}};mxXmlCanvas2D[_0x763a[202]][_0x763a[1243]]= function(_0x3536x2){if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[1244]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1243]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1244]);_0x3536x3[_0x763a[57]](_0x763a[1244],this[_0x763a[1239]](_0x3536x2));this[_0x763a[813]][_0x763a[62]](_0x3536x3)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1245]]= function(_0x3536x2){_0x3536x2== mxConstants[_0x763a[217]]&& (_0x3536x2= null);if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[604]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1245]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1298]);_0x3536x3[_0x763a[57]](_0x763a[352],null!= _0x3536x2?_0x3536x2:mxConstants[_0x763a[217]]);this[_0x763a[813]][_0x763a[62]](_0x3536x3)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1246]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14){if(null!= _0x3536x2&& null!= _0x3536x3){mxAbstractCanvas2D[_0x763a[202]][_0x763a[1246]][_0x763a[183]](this,arguments);var _0x3536x15=this[_0x763a[55]](_0x763a[1299]);_0x3536x15[_0x763a[57]](_0x763a[1300],_0x3536x2);_0x3536x15[_0x763a[57]](_0x763a[1301],_0x3536x3);_0x3536x15[_0x763a[57]](_0x763a[235],this[_0x763a[1239]](_0x3536x4));_0x3536x15[_0x763a[57]](_0x763a[236],this[_0x763a[1239]](_0x3536x5));_0x3536x15[_0x763a[57]](_0x763a[1302],this[_0x763a[1239]](_0x3536x9));_0x3536x15[_0x763a[57]](_0x763a[1303],this[_0x763a[1239]](_0x3536xa));null!= _0x3536x12&& _0x3536x15[_0x763a[57]](_0x763a[663],_0x3536x12);null!= _0x3536x13&& _0x3536x15[_0x763a[57]](_0x763a[1304],_0x3536x13);null!= _0x3536x14&& _0x3536x15[_0x763a[57]](_0x763a[1305],_0x3536x14);this[_0x763a[813]][_0x763a[62]](_0x3536x15)}};mxXmlCanvas2D[_0x763a[202]][_0x763a[1249]]= function(_0x3536x2){_0x3536x2== mxConstants[_0x763a[217]]&& (_0x3536x2= null);if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[608]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1249]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1306]);_0x3536x3[_0x763a[57]](_0x763a[352],null!= _0x3536x2?_0x3536x2:mxConstants[_0x763a[217]]);this[_0x763a[813]][_0x763a[62]](_0x3536x3)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1250]]= function(_0x3536x2){if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[610]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1250]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1307]);_0x3536x3[_0x763a[57]](_0x763a[117],this[_0x763a[1239]](_0x3536x2));this[_0x763a[813]][_0x763a[62]](_0x3536x3)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1251]]= function(_0x3536x2){if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[648]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1251]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[648]);_0x3536x3[_0x763a[57]](_0x763a[648],_0x3536x2?_0x763a[500]:_0x763a[468]);this[_0x763a[813]][_0x763a[62]](_0x3536x3)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1252]]= function(_0x3536x2){if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[649]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1252]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1308]);_0x3536x3[_0x763a[57]](_0x763a[1309],_0x3536x2);this[_0x763a[813]][_0x763a[62]](_0x3536x3)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1253]]= function(_0x3536x2){if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[1254]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1253]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1310]);_0x3536x3[_0x763a[57]](_0x763a[1311],_0x3536x2);this[_0x763a[813]][_0x763a[62]](_0x3536x3)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1255]]= function(_0x3536x2){if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[1256]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1255]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1312]);_0x3536x3[_0x763a[57]](_0x763a[234],_0x3536x2);this[_0x763a[813]][_0x763a[62]](_0x3536x3)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1257]]= function(_0x3536x2){if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[1258]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1257]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1313]);_0x3536x3[_0x763a[57]](_0x763a[1314],_0x3536x2);this[_0x763a[813]][_0x763a[62]](_0x3536x3)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1259]]= function(_0x3536x2){if(this[_0x763a[1285]]){_0x3536x2== mxConstants[_0x763a[217]]&& (_0x3536x2= null);if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[665]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1259]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1315]);_0x3536x3[_0x763a[57]](_0x763a[352],null!= _0x3536x2?_0x3536x2:mxConstants[_0x763a[217]]);this[_0x763a[813]][_0x763a[62]](_0x3536x3)}};mxXmlCanvas2D[_0x763a[202]][_0x763a[1260]]= function(_0x3536x2){if(this[_0x763a[1285]]){_0x3536x2== mxConstants[_0x763a[217]]&& (_0x3536x2= null);if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[1261]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1260]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1316]);_0x3536x3[_0x763a[57]](_0x763a[352],null!= _0x3536x2?_0x3536x2:mxConstants[_0x763a[217]]);this[_0x763a[813]][_0x763a[62]](_0x3536x3)}};mxXmlCanvas2D[_0x763a[202]][_0x763a[1262]]= function(_0x3536x2){if(this[_0x763a[1285]]){_0x3536x2== mxConstants[_0x763a[217]]&& (_0x3536x2= null);if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[1263]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1262]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1317]);_0x3536x3[_0x763a[57]](_0x763a[352],null!= _0x3536x2?_0x3536x2:mxConstants[_0x763a[217]]);this[_0x763a[813]][_0x763a[62]](_0x3536x3)}};mxXmlCanvas2D[_0x763a[202]][_0x763a[1264]]= function(_0x3536x2){if(this[_0x763a[1285]]){if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[487]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1264]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1289]);_0x3536x3[_0x763a[57]](_0x763a[803],_0x3536x2);this[_0x763a[813]][_0x763a[62]](_0x3536x3)}};mxXmlCanvas2D[_0x763a[202]][_0x763a[1265]]= function(_0x3536x2){if(this[_0x763a[1285]]){if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[486]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1265]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1287]);_0x3536x3[_0x763a[57]](_0x763a[1288],_0x3536x2);this[_0x763a[813]][_0x763a[62]](_0x3536x3)}};mxXmlCanvas2D[_0x763a[202]][_0x763a[1266]]= function(_0x3536x2){if(this[_0x763a[1285]]){null== _0x3536x2&& (_0x3536x2= 0);if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[666]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1266]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1318]);_0x3536x3[_0x763a[57]](_0x763a[124],_0x3536x2);this[_0x763a[813]][_0x763a[62]](_0x3536x3)}};mxXmlCanvas2D[_0x763a[202]][_0x763a[1267]]= function(_0x3536x2){if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[639]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1267]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[639]);_0x3536x3[_0x763a[57]](_0x763a[984],_0x3536x2?_0x763a[500]:_0x763a[468]);this[_0x763a[813]][_0x763a[62]](_0x3536x3)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1268]]= function(_0x3536x2){if(this[_0x763a[1286]]){_0x3536x2== mxConstants[_0x763a[217]]&& (_0x3536x2= null);if(this[_0x763a[724]][_0x763a[1269]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1268]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1290]);_0x3536x3[_0x763a[57]](_0x763a[352],null!= _0x3536x2?_0x3536x2:mxConstants[_0x763a[217]]);this[_0x763a[813]][_0x763a[62]](_0x3536x3)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1270]]= function(_0x3536x2){if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[1271]]== _0x3536x2){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1270]][_0x763a[183]](this,arguments)};var _0x3536x3=this[_0x763a[55]](_0x763a[1291]);_0x3536x3[_0x763a[57]](_0x763a[1244],_0x3536x2);this[_0x763a[813]][_0x763a[62]](_0x3536x3)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1272]]= function(_0x3536x2,_0x3536x3){if(this[_0x763a[1286]]){if(this[_0x763a[724]][_0x763a[1273]]== _0x3536x2&& this[_0x763a[724]][_0x763a[1274]]== _0x3536x3){return};mxAbstractCanvas2D[_0x763a[202]][_0x763a[1272]][_0x763a[183]](this,arguments)};var _0x3536x4=this[_0x763a[55]](_0x763a[1292]);_0x3536x4[_0x763a[57]](_0x763a[1126],_0x3536x2);_0x3536x4[_0x763a[57]](_0x763a[1125],_0x3536x3);this[_0x763a[813]][_0x763a[62]](_0x3536x4)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1319]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=this[_0x763a[55]](_0x763a[1319]);_0x3536x9[_0x763a[57]](_0x763a[235],this[_0x763a[1239]](_0x3536x2));_0x3536x9[_0x763a[57]](_0x763a[236],this[_0x763a[1239]](_0x3536x3));_0x3536x9[_0x763a[57]](_0x763a[1302],this[_0x763a[1239]](_0x3536x4));_0x3536x9[_0x763a[57]](_0x763a[1303],this[_0x763a[1239]](_0x3536x5));this[_0x763a[813]][_0x763a[62]](_0x3536x9)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1320]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){var _0x3536x12=this[_0x763a[55]](_0x763a[1320]);_0x3536x12[_0x763a[57]](_0x763a[235],this[_0x763a[1239]](_0x3536x2));_0x3536x12[_0x763a[57]](_0x763a[236],this[_0x763a[1239]](_0x3536x3));_0x3536x12[_0x763a[57]](_0x763a[1302],this[_0x763a[1239]](_0x3536x4));_0x3536x12[_0x763a[57]](_0x763a[1303],this[_0x763a[1239]](_0x3536x5));_0x3536x12[_0x763a[57]](_0x763a[1126],this[_0x763a[1239]](_0x3536x9));_0x3536x12[_0x763a[57]](_0x763a[1125],this[_0x763a[1239]](_0x3536xa));this[_0x763a[813]][_0x763a[62]](_0x3536x12)};mxXmlCanvas2D[_0x763a[202]][_0x763a[680]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=this[_0x763a[55]](_0x763a[680]);_0x3536x9[_0x763a[57]](_0x763a[235],this[_0x763a[1239]](_0x3536x2));_0x3536x9[_0x763a[57]](_0x763a[236],this[_0x763a[1239]](_0x3536x3));_0x3536x9[_0x763a[57]](_0x763a[1302],this[_0x763a[1239]](_0x3536x4));_0x3536x9[_0x763a[57]](_0x763a[1303],this[_0x763a[1239]](_0x3536x5));this[_0x763a[813]][_0x763a[62]](_0x3536x9)};mxXmlCanvas2D[_0x763a[202]][_0x763a[618]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13){_0x3536x9= this[_0x763a[1212]][_0x763a[1321]](_0x3536x9);var _0x3536x14=this[_0x763a[55]](_0x763a[618]);_0x3536x14[_0x763a[57]](_0x763a[235],this[_0x763a[1239]](_0x3536x2));_0x3536x14[_0x763a[57]](_0x763a[236],this[_0x763a[1239]](_0x3536x3));_0x3536x14[_0x763a[57]](_0x763a[1302],this[_0x763a[1239]](_0x3536x4));_0x3536x14[_0x763a[57]](_0x763a[1303],this[_0x763a[1239]](_0x3536x5));_0x3536x14[_0x763a[57]](_0x763a[390],_0x3536x9);_0x3536x14[_0x763a[57]](_0x763a[1322],_0x3536xa?_0x763a[500]:_0x763a[468]);_0x3536x14[_0x763a[57]](_0x763a[623],_0x3536x12?_0x763a[500]:_0x763a[468]);_0x3536x14[_0x763a[57]](_0x763a[624],_0x3536x13?_0x763a[500]:_0x763a[468]);this[_0x763a[813]][_0x763a[62]](_0x3536x14)};mxXmlCanvas2D[_0x763a[202]][_0x763a[1275]]= function(){this[_0x763a[813]][_0x763a[62]](this[_0x763a[55]](_0x763a[1275]));this[_0x763a[1218]]= this[_0x763a[1217]]= 0};mxXmlCanvas2D[_0x763a[202]][_0x763a[1276]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[55]](_0x763a[582]);_0x3536x4[_0x763a[57]](_0x763a[235],this[_0x763a[1239]](_0x3536x2));_0x3536x4[_0x763a[57]](_0x763a[236],this[_0x763a[1239]](_0x3536x3));this[_0x763a[813]][_0x763a[62]](_0x3536x4);this[_0x763a[1217]]= _0x3536x2;this[_0x763a[1218]]= _0x3536x3};mxXmlCanvas2D[_0x763a[202]][_0x763a[1277]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[55]](_0x763a[683]);_0x3536x4[_0x763a[57]](_0x763a[235],this[_0x763a[1239]](_0x3536x2));_0x3536x4[_0x763a[57]](_0x763a[236],this[_0x763a[1239]](_0x3536x3));this[_0x763a[813]][_0x763a[62]](_0x3536x4);this[_0x763a[1217]]= _0x3536x2;this[_0x763a[1218]]= _0x3536x3};mxXmlCanvas2D[_0x763a[202]][_0x763a[1278]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=this[_0x763a[55]](_0x763a[1323]);_0x3536x9[_0x763a[57]](_0x763a[1324],this[_0x763a[1239]](_0x3536x2));_0x3536x9[_0x763a[57]](_0x763a[1325],this[_0x763a[1239]](_0x3536x3));_0x3536x9[_0x763a[57]](_0x763a[1326],this[_0x763a[1239]](_0x3536x4));_0x3536x9[_0x763a[57]](_0x763a[1327],this[_0x763a[1239]](_0x3536x5));this[_0x763a[813]][_0x763a[62]](_0x3536x9);this[_0x763a[1217]]= _0x3536x4;this[_0x763a[1218]]= _0x3536x5};mxXmlCanvas2D[_0x763a[202]][_0x763a[1279]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){var _0x3536x12=this[_0x763a[55]](_0x763a[1328]);_0x3536x12[_0x763a[57]](_0x763a[1324],this[_0x763a[1239]](_0x3536x2));_0x3536x12[_0x763a[57]](_0x763a[1325],this[_0x763a[1239]](_0x3536x3));_0x3536x12[_0x763a[57]](_0x763a[1326],this[_0x763a[1239]](_0x3536x4));_0x3536x12[_0x763a[57]](_0x763a[1327],this[_0x763a[1239]](_0x3536x5));_0x3536x12[_0x763a[57]](_0x763a[1329],this[_0x763a[1239]](_0x3536x9));_0x3536x12[_0x763a[57]](_0x763a[1330],this[_0x763a[1239]](_0x3536xa));this[_0x763a[813]][_0x763a[62]](_0x3536x12);this[_0x763a[1217]]= _0x3536x9;this[_0x763a[1218]]= _0x3536xa};mxXmlCanvas2D[_0x763a[202]][_0x763a[268]]= function(){this[_0x763a[813]][_0x763a[62]](this[_0x763a[55]](_0x763a[268]))};mxXmlCanvas2D[_0x763a[202]][_0x763a[963]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15,_0x3536x16,_0x3536x17){if(this[_0x763a[1285]]&& null!= _0x3536x9){mxUtils[_0x763a[1331]](_0x3536x9)&& (_0x3536x9= mxUtils[_0x763a[532]](_0x3536x9));var _0x3536x18=this[_0x763a[55]](_0x763a[963]);_0x3536x18[_0x763a[57]](_0x763a[235],this[_0x763a[1239]](_0x3536x2));_0x3536x18[_0x763a[57]](_0x763a[236],this[_0x763a[1239]](_0x3536x3));_0x3536x18[_0x763a[57]](_0x763a[1302],this[_0x763a[1239]](_0x3536x4));_0x3536x18[_0x763a[57]](_0x763a[1303],this[_0x763a[1239]](_0x3536x5));_0x3536x18[_0x763a[57]](_0x763a[1332],_0x3536x9);null!= _0x3536xa&& _0x3536x18[_0x763a[57]](_0x763a[611],_0x3536xa);null!= _0x3536x12&& _0x3536x18[_0x763a[57]](_0x763a[552],_0x3536x12);_0x3536x18[_0x763a[57]](_0x763a[1333],_0x3536x13?_0x763a[500]:_0x763a[468]);null== _0x3536x14&& (_0x3536x14= _0x763a[110]);_0x3536x18[_0x763a[57]](_0x763a[1239],_0x3536x14);null!= _0x3536x15&& _0x3536x18[_0x763a[57]](_0x763a[1334],_0x3536x15?_0x763a[500]:_0x763a[468]);null!= _0x3536x16&& _0x3536x18[_0x763a[57]](_0x763a[1335],_0x3536x16?_0x763a[500]:_0x763a[468]);null!= _0x3536x17&& _0x3536x18[_0x763a[57]](_0x763a[603],_0x3536x17);this[_0x763a[813]][_0x763a[62]](_0x3536x18)}};mxXmlCanvas2D[_0x763a[202]][_0x763a[1336]]= function(){this[_0x763a[813]][_0x763a[62]](this[_0x763a[55]](_0x763a[1336]))};mxXmlCanvas2D[_0x763a[202]][_0x763a[1334]]= function(){this[_0x763a[813]][_0x763a[62]](this[_0x763a[55]](_0x763a[1334]))};mxXmlCanvas2D[_0x763a[202]][_0x763a[1337]]= function(){this[_0x763a[813]][_0x763a[62]](this[_0x763a[55]](_0x763a[1338]))};function mxSvgCanvas2D(_0x3536x2,_0x3536x3){mxAbstractCanvas2D[_0x763a[239]](this);this[_0x763a[813]]= _0x3536x2;this[_0x763a[1339]]= [];this[_0x763a[1340]]= null;this[_0x763a[1341]]= null!= _0x3536x3?_0x3536x3:!1;var _0x3536x4=null;if(_0x3536x2[_0x763a[295]]!= document){for(_0x3536x4= _0x3536x2;null!= _0x3536x4&& _0x763a[571]!= _0x3536x4[_0x763a[301]];){_0x3536x4= _0x3536x4[_0x763a[265]]}};null!= _0x3536x4&& (0< _0x3536x4[_0x763a[64]](_0x763a[1340])[_0x763a[67]]&& (this[_0x763a[1340]]= _0x3536x4[_0x763a[64]](_0x763a[1340])[0]),null== this[_0x763a[1340]]&& (this[_0x763a[1340]]= this[_0x763a[55]](_0x763a[1340]),null!= _0x3536x4[_0x763a[285]]?_0x3536x4[_0x763a[950]](this[_0x763a[1340]],_0x3536x4[_0x763a[285]]):_0x3536x4[_0x763a[62]](this[_0x763a[1340]])),this[_0x763a[1341]]&& this[_0x763a[1340]][_0x763a[62]](this[_0x763a[1342]]()))}mxUtils[_0x763a[1284]](mxSvgCanvas2D,mxAbstractCanvas2D);mxSvgCanvas2D[_0x763a[202]][_0x763a[252]]= null;mxSvgCanvas2D[_0x763a[202]][_0x763a[1343]]= !0;mxSvgCanvas2D[_0x763a[202]][_0x763a[1285]]= !0;mxSvgCanvas2D[_0x763a[202]][_0x763a[1344]]= !0;mxSvgCanvas2D[_0x763a[202]][_0x763a[1345]]= 0;mxSvgCanvas2D[_0x763a[202]][_0x763a[1346]]= 0;mxSvgCanvas2D[_0x763a[202]][_0x763a[1347]]= !1;mxSvgCanvas2D[_0x763a[202]][_0x763a[862]]= function(){mxAbstractCanvas2D[_0x763a[202]][_0x763a[862]][_0x763a[183]](this,arguments);this[_0x763a[1339]]= []};mxSvgCanvas2D[_0x763a[202]][_0x763a[1342]]= function(_0x3536x2){_0x3536x2= this[_0x763a[55]](_0x763a[124]);_0x3536x2[_0x763a[57]](_0x763a[60],_0x763a[61]);mxUtils[_0x763a[53]](_0x3536x2,_0x763a[1348]+ mxConstants[_0x763a[484]]+ _0x763a[1349]+ mxConstants[_0x763a[483]]+ _0x763a[1350]);return _0x3536x2};mxSvgCanvas2D[_0x763a[202]][_0x763a[55]]= function(_0x3536x2,_0x3536x3){if(null!= this[_0x763a[813]][_0x763a[295]][_0x763a[509]]){return this[_0x763a[813]][_0x763a[295]][_0x763a[509]](_0x3536x3|| mxConstants[_0x763a[1351]],_0x3536x2)};var _0x3536x4=this[_0x763a[813]][_0x763a[295]][_0x763a[55]](_0x3536x2);null!= _0x3536x3&& _0x3536x4[_0x763a[57]](_0x763a[1352],_0x3536x3);return _0x3536x4};mxSvgCanvas2D[_0x763a[202]][_0x763a[1353]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x763a[198]== _0x3536x2[_0x763a[225]](0)&& (_0x3536x2= _0x3536x2[_0x763a[85]](1));_0x763a[198]== _0x3536x3[_0x763a[225]](0)&& (_0x3536x3= _0x3536x3[_0x763a[85]](1));_0x3536x2= _0x3536x2[_0x763a[216]]()+ _0x763a[213]+ _0x3536x4;_0x3536x3= _0x3536x3[_0x763a[216]]()+ _0x763a[213]+ _0x3536x5;_0x3536x4= null;null== _0x3536x9|| _0x3536x9== mxConstants[_0x763a[1354]]?_0x3536x4= _0x763a[1355]:_0x3536x9== mxConstants[_0x763a[1356]]?_0x3536x4= _0x763a[1357]:(_0x3536x5= _0x3536x2,_0x3536x2= _0x3536x3,_0x3536x3= _0x3536x5,_0x3536x9== mxConstants[_0x763a[1358]]?_0x3536x4= _0x763a[1355]:_0x3536x9== mxConstants[_0x763a[1359]]&& (_0x3536x4= _0x763a[1357]));return _0x763a[1360]+ _0x3536x2+ _0x763a[213]+ _0x3536x3+ _0x763a[213]+ _0x3536x4};mxSvgCanvas2D[_0x763a[202]][_0x763a[1361]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=this[_0x763a[1353]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9),_0x3536x12=this[_0x763a[1339]][_0x3536xa];if(null== _0x3536x12){var _0x3536x13=this[_0x763a[813]][_0x763a[538]],_0x3536x14=0,_0x3536x15=_0x3536xa+ _0x763a[213]+ _0x3536x14;if(null!= _0x3536x13){for(_0x3536x12= _0x3536x13[_0x763a[295]][_0x763a[1362]](_0x3536x15);null!= _0x3536x12&& _0x3536x12[_0x763a[538]]!= _0x3536x13;){_0x3536x15= _0x3536xa+ _0x763a[213]+ _0x3536x14++,_0x3536x12= _0x3536x13[_0x763a[295]][_0x763a[1362]](_0x3536x15)}}else {_0x3536x15= _0x763a[1363]+ ++this[_0x763a[1346]]};null== _0x3536x12&& (_0x3536x12= this[_0x763a[1364]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9),_0x3536x12[_0x763a[57]](_0x763a[1363],_0x3536x15),null!= this[_0x763a[1340]]?this[_0x763a[1340]][_0x763a[62]](_0x3536x12):_0x3536x13[_0x763a[62]](_0x3536x12));this[_0x763a[1339]][_0x3536xa]= _0x3536x12};return _0x3536x12[_0x763a[284]](_0x763a[1363])};mxSvgCanvas2D[_0x763a[202]][_0x763a[1364]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=this[_0x763a[55]](_0x763a[1365]);_0x3536xa[_0x763a[57]](_0x763a[1324],_0x763a[1366]);_0x3536xa[_0x763a[57]](_0x763a[1325],_0x763a[1366]);_0x3536xa[_0x763a[57]](_0x763a[1326],_0x763a[1366]);_0x3536xa[_0x763a[57]](_0x763a[1327],_0x763a[1366]);null== _0x3536x9|| _0x3536x9== mxConstants[_0x763a[1354]]?_0x3536xa[_0x763a[57]](_0x763a[1327],_0x763a[118]):_0x3536x9== mxConstants[_0x763a[1356]]?_0x3536xa[_0x763a[57]](_0x763a[1326],_0x763a[118]):_0x3536x9== mxConstants[_0x763a[1358]]?_0x3536xa[_0x763a[57]](_0x763a[1325],_0x763a[118]):_0x3536x9== mxConstants[_0x763a[1359]]&& _0x3536xa[_0x763a[57]](_0x763a[1324],_0x763a[118]);_0x3536x4= 1> _0x3536x4?_0x763a[1367]+ _0x3536x4:_0x763a[110];_0x3536x9= this[_0x763a[55]](_0x763a[1076]);_0x3536x9[_0x763a[57]](_0x763a[1368],_0x763a[1366]);_0x3536x9[_0x763a[57]](_0x763a[124],_0x763a[1369]+ _0x3536x2+ _0x3536x4);_0x3536xa[_0x763a[62]](_0x3536x9);_0x3536x4= 1> _0x3536x5?_0x763a[1367]+ _0x3536x5:_0x763a[110];_0x3536x9= this[_0x763a[55]](_0x763a[1076]);_0x3536x9[_0x763a[57]](_0x763a[1368],_0x763a[118]);_0x3536x9[_0x763a[57]](_0x763a[124],_0x763a[1369]+ _0x3536x3+ _0x3536x4);_0x3536xa[_0x763a[62]](_0x3536x9);return _0x3536xa};mxSvgCanvas2D[_0x763a[202]][_0x763a[1370]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[252]],_0x3536x5=this[_0x763a[724]];if(null!= _0x3536x4){if(_0x763a[1215]== _0x3536x4[_0x763a[301]]){if(null!= this[_0x763a[1215]]&& 0< this[_0x763a[1215]][_0x763a[67]]){_0x3536x4[_0x763a[57]](_0x763a[1371],this[_0x763a[1215]][_0x763a[234]](_0x763a[185]))}else {return}};_0x3536x2&& null!= _0x3536x5[_0x763a[604]]?this[_0x763a[1372]]():this[_0x763a[1341]]|| (_0x763a[680]== _0x3536x4[_0x763a[301]]&& mxClient[_0x763a[133]]&& !mxClient[_0x763a[76]]&& !mxClient[_0x763a[75]]?_0x3536x4[_0x763a[57]](_0x763a[1334],_0x763a[1373]):_0x3536x4[_0x763a[57]](_0x763a[1334],_0x763a[130]),_0x3536x2= !1);_0x3536x3&& null!= _0x3536x5[_0x763a[608]]?this[_0x763a[1374]]():this[_0x763a[1341]]|| _0x3536x4[_0x763a[57]](_0x763a[1336],_0x763a[130]);null!= _0x3536x5[_0x763a[535]]&& 0< _0x3536x5[_0x763a[535]][_0x763a[67]]&& _0x3536x4[_0x763a[57]](_0x763a[535],_0x3536x5[_0x763a[535]]);_0x3536x5[_0x763a[639]]&& this[_0x763a[813]][_0x763a[62]](this[_0x763a[1375]](_0x3536x4));0< this[_0x763a[1345]]&& !_0x3536x2&& this[_0x763a[813]][_0x763a[62]](this[_0x763a[1376]](_0x3536x4));this[_0x763a[1229]]&& (_0x763a[1215]!= _0x3536x4[_0x763a[301]]|| this[_0x763a[1215]][this[_0x763a[1215]][_0x763a[67]]- 1]== this[_0x763a[1227]])&& _0x3536x4[_0x763a[57]](_0x763a[1377],_0x763a[1378]);this[_0x763a[813]][_0x763a[62]](_0x3536x4)}};mxSvgCanvas2D[_0x763a[202]][_0x763a[1372]]= function(){var _0x3536x2=this[_0x763a[724]];1> _0x3536x2[_0x763a[1244]]&& this[_0x763a[252]][_0x763a[57]](_0x763a[1379],_0x3536x2[_0x763a[1244]]);null!= _0x3536x2[_0x763a[604]]&& (null!= _0x3536x2[_0x763a[606]]?(_0x3536x2= this[_0x763a[1361]](_0x3536x2[_0x763a[604]],_0x3536x2[_0x763a[606]],_0x3536x2[_0x763a[1247]],_0x3536x2[_0x763a[1248]],_0x3536x2[_0x763a[607]]),this[_0x763a[252]][_0x763a[57]](_0x763a[1334],_0x763a[1380]+ _0x3536x2+ _0x763a[460])):this[_0x763a[252]][_0x763a[57]](_0x763a[1334],_0x3536x2[_0x763a[604]][_0x763a[216]]()))};mxSvgCanvas2D[_0x763a[202]][_0x763a[1374]]= function(){var _0x3536x2=this[_0x763a[724]];this[_0x763a[252]][_0x763a[57]](_0x763a[1336],_0x3536x2[_0x763a[608]][_0x763a[216]]());1> _0x3536x2[_0x763a[1244]]&& this[_0x763a[252]][_0x763a[57]](_0x763a[1381],_0x3536x2[_0x763a[1244]]);var _0x3536x3=Math[_0x763a[160]](1,this[_0x763a[1239]](_0x3536x2[_0x763a[610]]* _0x3536x2[_0x763a[255]]));1!= _0x3536x3&& this[_0x763a[252]][_0x763a[57]](_0x763a[1382],_0x3536x3);_0x763a[1215]== this[_0x763a[252]][_0x763a[301]]&& this[_0x763a[1383]]();_0x3536x2[_0x763a[648]]&& this[_0x763a[252]][_0x763a[57]](_0x763a[1384],this[_0x763a[1385]](_0x3536x3))};mxSvgCanvas2D[_0x763a[202]][_0x763a[1383]]= function(){var _0x3536x2=this[_0x763a[724]];null!= _0x3536x2[_0x763a[1256]]&& _0x763a[1233]!= _0x3536x2[_0x763a[1256]]&& this[_0x763a[252]][_0x763a[57]](_0x763a[1386],_0x3536x2[_0x763a[1256]]);if(null!= _0x3536x2[_0x763a[1254]]){var _0x3536x3=_0x3536x2[_0x763a[1254]];_0x763a[1232]== _0x3536x3&& (_0x3536x3= _0x763a[1387]);_0x763a[1387]!= _0x3536x3&& this[_0x763a[252]][_0x763a[57]](_0x763a[1388],_0x3536x3)};null!= _0x3536x2[_0x763a[1258]]&& (!this[_0x763a[1341]]|| 10!= _0x3536x2[_0x763a[1258]])&& this[_0x763a[252]][_0x763a[57]](_0x763a[1389],_0x3536x2[_0x763a[1258]])};mxSvgCanvas2D[_0x763a[202]][_0x763a[1385]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[724]][_0x763a[649]][_0x763a[224]](_0x763a[185]),_0x3536x4=[];if(0< _0x3536x3[_0x763a[67]]){for(var _0x3536x5=0;_0x3536x5< _0x3536x3[_0x763a[67]];_0x3536x5++){_0x3536x4[_0x3536x5]= Number(_0x3536x3[_0x3536x5])* _0x3536x2}};return _0x3536x4[_0x763a[234]](_0x763a[185])};mxSvgCanvas2D[_0x763a[202]][_0x763a[1376]]= function(_0x3536x2){_0x3536x2= _0x3536x2[_0x763a[511]](!0);var _0x3536x3=parseFloat(_0x3536x2[_0x763a[284]](_0x763a[1382])|| 1)+ this[_0x763a[1345]];_0x3536x2[_0x763a[57]](_0x763a[1377],_0x763a[1336]);_0x3536x2[_0x763a[57]](_0x763a[187],_0x763a[188]);_0x3536x2[_0x763a[1390]](_0x763a[1384]);_0x3536x2[_0x763a[57]](_0x763a[1382],_0x3536x3);_0x3536x2[_0x763a[57]](_0x763a[1334],_0x763a[130]);_0x3536x2[_0x763a[57]](_0x763a[1336],mxClient[_0x763a[71]]?_0x763a[130]:_0x763a[1391]);return _0x3536x2};mxSvgCanvas2D[_0x763a[202]][_0x763a[1375]]= function(_0x3536x2){_0x3536x2= _0x3536x2[_0x763a[511]](!0);var _0x3536x3=this[_0x763a[724]];_0x763a[130]!= _0x3536x2[_0x763a[284]](_0x763a[1334])&& _0x3536x2[_0x763a[57]](_0x763a[1334],_0x3536x3[_0x763a[1269]]);_0x763a[130]!= _0x3536x2[_0x763a[284]](_0x763a[1336])&& _0x3536x2[_0x763a[57]](_0x763a[1336],_0x3536x3[_0x763a[1269]]);_0x3536x2[_0x763a[57]](_0x763a[535],_0x763a[536]+ this[_0x763a[1239]](_0x3536x3[_0x763a[1273]]* _0x3536x3[_0x763a[255]])+ _0x763a[537]+ this[_0x763a[1239]](_0x3536x3[_0x763a[1274]]* _0x3536x3[_0x763a[255]])+ _0x763a[460]+ (_0x3536x3[_0x763a[535]]|| _0x763a[110]));_0x3536x2[_0x763a[57]](_0x763a[461],_0x3536x3[_0x763a[1271]]);return _0x3536x2};mxSvgCanvas2D[_0x763a[202]][_0x763a[1294]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){if(0!= _0x3536x2|| _0x3536x3|| _0x3536x4){var _0x3536xa=this[_0x763a[724]];_0x3536x5+= _0x3536xa[_0x763a[1126]];_0x3536x9+= _0x3536xa[_0x763a[1125]];_0x3536x5*= _0x3536xa[_0x763a[255]];_0x3536x9*= _0x3536xa[_0x763a[255]];_0x3536xa[_0x763a[535]]= _0x3536xa[_0x763a[535]]|| _0x763a[110];if(_0x3536x3&& _0x3536x4){_0x3536x2+= 180}else {if(_0x3536x3^ _0x3536x4){var _0x3536x12=_0x3536x3?_0x3536x5:0,_0x3536x13=_0x3536x3?-1:1,_0x3536x14=_0x3536x4?_0x3536x9:0,_0x3536x15=_0x3536x4?-1:1;_0x3536xa[_0x763a[535]]+= _0x763a[536]+ this[_0x763a[1239]](_0x3536x12)+ _0x763a[537]+ this[_0x763a[1239]](_0x3536x14)+ _0x763a[1392]+ this[_0x763a[1239]](_0x3536x13)+ _0x763a[537]+ this[_0x763a[1239]](_0x3536x15)+ _0x763a[1393]+ this[_0x763a[1239]](-_0x3536x12) + _0x763a[537]+ this[_0x763a[1239]](-_0x3536x14) + _0x763a[460]}};if(_0x3536x3?!_0x3536x4:_0x3536x4){_0x3536x2*= -1};0!= _0x3536x2&& (_0x3536xa[_0x763a[535]]+= _0x763a[1394]+ this[_0x763a[1239]](_0x3536x2)+ _0x763a[537]+ this[_0x763a[1239]](_0x3536x5)+ _0x763a[537]+ this[_0x763a[1239]](_0x3536x9)+ _0x763a[460]);_0x3536xa[_0x763a[603]]+= _0x3536x2;_0x3536xa[_0x763a[1395]]= _0x3536x5;_0x3536xa[_0x763a[1396]]= _0x3536x9}};mxSvgCanvas2D[_0x763a[202]][_0x763a[1275]]= function(){mxAbstractCanvas2D[_0x763a[202]][_0x763a[1275]][_0x763a[183]](this,arguments);this[_0x763a[252]]= this[_0x763a[55]](_0x763a[1215])};mxSvgCanvas2D[_0x763a[202]][_0x763a[1319]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=this[_0x763a[724]],_0x3536xa=this[_0x763a[55]](_0x763a[1319]);_0x3536xa[_0x763a[57]](_0x763a[235],this[_0x763a[1239]]((_0x3536x2+ _0x3536x9[_0x763a[1126]])* _0x3536x9[_0x763a[255]]));_0x3536xa[_0x763a[57]](_0x763a[236],this[_0x763a[1239]]((_0x3536x3+ _0x3536x9[_0x763a[1125]])* _0x3536x9[_0x763a[255]]));_0x3536xa[_0x763a[57]](_0x763a[117],this[_0x763a[1239]](_0x3536x4* _0x3536x9[_0x763a[255]]));_0x3536xa[_0x763a[57]](_0x763a[119],this[_0x763a[1239]](_0x3536x5* _0x3536x9[_0x763a[255]]));this[_0x763a[252]]= _0x3536xa};mxSvgCanvas2D[_0x763a[202]][_0x763a[1320]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){this[_0x763a[1319]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5);0< _0x3536x9&& this[_0x763a[252]][_0x763a[57]](_0x763a[1397],this[_0x763a[1239]](_0x3536x9* this[_0x763a[724]][_0x763a[255]]));0< _0x3536xa&& this[_0x763a[252]][_0x763a[57]](_0x763a[1398],this[_0x763a[1239]](_0x3536xa* this[_0x763a[724]][_0x763a[255]]))};mxSvgCanvas2D[_0x763a[202]][_0x763a[680]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=this[_0x763a[724]],_0x3536xa=this[_0x763a[55]](_0x763a[680]);_0x3536xa[_0x763a[57]](_0x763a[1296],Math[_0x763a[488]]((_0x3536x2+ _0x3536x4/ 2+ _0x3536x9[_0x763a[1126]])* _0x3536x9[_0x763a[255]]));_0x3536xa[_0x763a[57]](_0x763a[1297],Math[_0x763a[488]]((_0x3536x3+ _0x3536x5/ 2+ _0x3536x9[_0x763a[1125]])* _0x3536x9[_0x763a[255]]));_0x3536xa[_0x763a[57]](_0x763a[1397],_0x3536x4/ 2* _0x3536x9[_0x763a[255]]);_0x3536xa[_0x763a[57]](_0x763a[1398],_0x3536x5/ 2* _0x3536x9[_0x763a[255]]);this[_0x763a[252]]= _0x3536xa};mxSvgCanvas2D[_0x763a[202]][_0x763a[618]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13){_0x3536x9= this[_0x763a[1212]][_0x763a[1321]](_0x3536x9);_0x3536xa= null!= _0x3536xa?_0x3536xa:!0;_0x3536x12= null!= _0x3536x12?_0x3536x12:!1;_0x3536x13= null!= _0x3536x13?_0x3536x13:!1;var _0x3536x14=this[_0x763a[724]];_0x3536x2+= _0x3536x14[_0x763a[1126]];_0x3536x3+= _0x3536x14[_0x763a[1125]];var _0x3536x15=this[_0x763a[55]](_0x763a[618]);_0x3536x15[_0x763a[57]](_0x763a[235],this[_0x763a[1239]](_0x3536x2* _0x3536x14[_0x763a[255]]));_0x3536x15[_0x763a[57]](_0x763a[236],this[_0x763a[1239]](_0x3536x3* _0x3536x14[_0x763a[255]]));_0x3536x15[_0x763a[57]](_0x763a[117],this[_0x763a[1239]](_0x3536x4* _0x3536x14[_0x763a[255]]));_0x3536x15[_0x763a[57]](_0x763a[119],this[_0x763a[1239]](_0x3536x5* _0x3536x14[_0x763a[255]]));null== _0x3536x15[_0x763a[1399]]?_0x3536x15[_0x763a[57]](_0x763a[1400],_0x3536x9):_0x3536x15[_0x763a[1399]](mxConstants.NS_XLINK,_0x763a[44],_0x3536x9);_0x3536xa|| _0x3536x15[_0x763a[57]](_0x763a[1401],_0x763a[130]);1> _0x3536x14[_0x763a[1244]]&& _0x3536x15[_0x763a[57]](_0x763a[461],_0x3536x14[_0x763a[1244]]);_0x3536x9= this[_0x763a[724]][_0x763a[535]]|| _0x763a[110];if(_0x3536x12|| _0x3536x13){var _0x3536x16=_0x3536xa= 1,_0x3536x17=0,_0x3536x18=0;_0x3536x12&& (_0x3536xa= -1,_0x3536x17= -_0x3536x4- 2* _0x3536x2);_0x3536x13&& (_0x3536x16= -1,_0x3536x18= -_0x3536x5- 2* _0x3536x3);_0x3536x9+= _0x763a[1402]+ _0x3536xa+ _0x763a[537]+ _0x3536x16+ _0x763a[1393]+ _0x3536x17+ _0x763a[537]+ _0x3536x18+ _0x763a[460]};0< _0x3536x9[_0x763a[67]]&& _0x3536x15[_0x763a[57]](_0x763a[535],_0x3536x9);this[_0x763a[813]][_0x763a[62]](_0x3536x15);this[_0x763a[1347]]&& (_0x3536x15[_0x763a[57]](_0x763a[124],_0x763a[1403]),_0x3536x15= this[_0x763a[55]](_0x763a[1319]),_0x3536x15[_0x763a[57]](_0x763a[187],_0x763a[188]),_0x3536x15[_0x763a[57]](_0x763a[1377],_0x763a[1334]),_0x3536x15[_0x763a[57]](_0x763a[235],this[_0x763a[1239]](_0x3536x2* _0x3536x14[_0x763a[255]])),_0x3536x15[_0x763a[57]](_0x763a[236],this[_0x763a[1239]](_0x3536x3* _0x3536x14[_0x763a[255]])),_0x3536x15[_0x763a[57]](_0x763a[117],this[_0x763a[1239]](_0x3536x4* _0x3536x14[_0x763a[255]])),_0x3536x15[_0x763a[57]](_0x763a[119],this[_0x763a[1239]](_0x3536x5* _0x3536x14[_0x763a[255]])),this[_0x763a[813]][_0x763a[62]](_0x3536x15))};mxSvgCanvas2D[_0x763a[202]][_0x763a[1404]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x4= this[_0x763a[724]];_0x3536x5= _0x763a[1405]+ Math[_0x763a[488]](_0x3536x4[_0x763a[487]])+ _0x763a[1406]+ _0x3536x4[_0x763a[486]]+ _0x763a[1407]+ _0x3536x4[_0x763a[665]]+ _0x763a[1408]+ Math[_0x763a[488]](_0x3536x4[_0x763a[487]]* mxConstants[_0x763a[490]])+ _0x763a[1409]+ _0x3536x5;(_0x3536x4[_0x763a[666]]& mxConstants[_0x763a[1410]])== mxConstants[_0x763a[1410]]&& (_0x3536x5+= _0x763a[1411]);(_0x3536x4[_0x763a[666]]& mxConstants[_0x763a[1412]])== mxConstants[_0x763a[1412]]&& (_0x3536x5+= _0x763a[1413]);(_0x3536x4[_0x763a[666]]& mxConstants[_0x763a[1414]])== mxConstants[_0x763a[1414]]&& (_0x3536x5+= _0x763a[1415]);_0x3536x3== mxConstants[_0x763a[479]]?_0x3536x5+= _0x763a[1416]:_0x3536x3== mxConstants[_0x763a[480]]&& (_0x3536x5+= _0x763a[1417]);_0x3536x3= _0x763a[110];null!= _0x3536x4[_0x763a[1261]]&& (_0x3536x3+= _0x763a[1418]+ _0x3536x4[_0x763a[1261]]+ _0x763a[471]);null!= _0x3536x4[_0x763a[1263]]&& (_0x3536x3+= _0x763a[1419]+ _0x3536x4[_0x763a[1263]]+ _0x763a[471]);mxUtils[_0x763a[1331]](_0x3536x2)|| (_0x3536x4= document[_0x763a[55]](_0x763a[126]),_0x3536x4[_0x763a[339]]= _0x3536x2[_0x763a[230]](/</g,_0x763a[1421])[_0x763a[230]](/>/g,_0x763a[1420])[_0x763a[230]](//g,_0x763a[335]),_0x3536x2= _0x3536x4[_0x763a[131]],_0x3536x9?_0x3536x5+= _0x3536x3:0< _0x3536x3[_0x763a[67]]&& (_0x3536x2= _0x763a[1422]+ _0x3536x3+ _0x763a[1423]+ _0x3536x2+ _0x763a[1424]));if(!mxClient[_0x763a[80]]&& document[_0x763a[509]]){return _0x3536x9= document[_0x763a[509]](_0x763a[577],_0x763a[485]),_0x3536x9[_0x763a[57]](_0x763a[124],_0x3536x5),mxUtils[_0x763a[1331]](_0x3536x2)?this[_0x763a[813]][_0x763a[295]]!= document?_0x3536x9[_0x763a[62]](_0x3536x2[_0x763a[511]](!0)):_0x3536x9[_0x763a[62]](_0x3536x2):_0x3536x9[_0x763a[339]]= _0x3536x2,_0x3536x9};mxUtils[_0x763a[1331]](_0x3536x2)&& this[_0x763a[813]][_0x763a[295]]!= document&& (_0x3536x2= _0x3536x2[_0x763a[342]]);_0x3536x2= _0x3536x2[_0x763a[230]](/
/g,_0x763a[1426])[_0x763a[230]](/
/g,_0x763a[1425]);return mxUtils[_0x763a[877]](_0x763a[1427]+ _0x3536x5+ _0x763a[1423]+ _0x3536x2+ _0x763a[1424])[_0x763a[158]]};mxSvgCanvas2D[_0x763a[202]][_0x763a[963]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15,_0x3536x16,_0x3536x17){if(this[_0x763a[1285]]&& null!= _0x3536x9){_0x3536x17= null!= _0x3536x17?_0x3536x17:0;var _0x3536x18=this[_0x763a[724]];_0x3536x2+= _0x3536x18[_0x763a[1126]];_0x3536x3+= _0x3536x18[_0x763a[1125]];if(this[_0x763a[1344]]&& _0x763a[1428]== _0x3536x14){var _0x3536x19=_0x763a[1429];_0x3536x16?(_0x3536x19+= _0x763a[1430],0< _0x3536x5&& (_0x3536x19+= _0x763a[1431]+ Math[_0x763a[488]](_0x3536x5)+ _0x763a[1409]),0< _0x3536x4&& (_0x3536x19+= _0x763a[1432]+ Math[_0x763a[488]](_0x3536x4)+ _0x763a[1409])):_0x3536x15&& (_0x3536x19+= _0x763a[1432]+ Math[_0x763a[488]](_0x3536x4)+ _0x763a[1409],0< _0x3536x5&& (_0x3536x19+= _0x763a[1431]+ Math[_0x763a[488]](_0x3536x5)+ _0x763a[1409]));_0x3536x13?(!_0x3536x16&& 0< _0x3536x4&& (_0x3536x19+= _0x763a[1432]+ Math[_0x763a[488]](_0x3536x4)+ _0x763a[1409]),_0x3536x19+= _0x763a[1433]):_0x3536x19+= _0x763a[1434];_0x3536x13= this[_0x763a[55]](_0x763a[449]);1> _0x3536x18[_0x763a[1244]]&& _0x3536x13[_0x763a[57]](_0x763a[461],_0x3536x18[_0x763a[1244]]);_0x3536x14= this[_0x763a[55]](_0x763a[1435]);_0x3536x14[_0x763a[57]](_0x763a[1377],_0x763a[1378]);_0x3536x19= this[_0x763a[1404]](_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x19,_0x3536x15);if(null!= _0x3536x19){_0x3536x13[_0x763a[62]](_0x3536x14);this[_0x763a[813]][_0x763a[62]](_0x3536x13);var _0x3536x1a=0;if(mxClient[_0x763a[80]]&& !mxClient[_0x763a[48]]){var _0x3536x1b=document[_0x763a[55]](_0x763a[485]);_0x3536x1b[_0x763a[124]][_0x763a[103]]= _0x3536x19[_0x763a[284]](_0x763a[124]);_0x3536x1b[_0x763a[124]][_0x763a[495]]= mxClient[_0x763a[496]]?_0x763a[497]:_0x763a[498];_0x3536x1b[_0x763a[124]][_0x763a[187]]= _0x763a[188];_0x3536x1b[_0x763a[339]]= mxUtils[_0x763a[1331]](_0x3536x9)?_0x3536x9[_0x763a[342]]:_0x3536x9;document[_0x763a[112]][_0x763a[62]](_0x3536x1b);_0x3536x1a= _0x3536x1b[_0x763a[359]];_0x3536x5= mxClient[_0x763a[496]]&& 0< _0x3536x5&& _0x3536x16?Math[_0x763a[243]](_0x3536x5,_0x3536x1b[_0x763a[167]]+ 2):_0x3536x1b[_0x763a[167]];_0x3536x1b[_0x763a[265]][_0x763a[266]](_0x3536x1b);_0x3536x14[_0x763a[62]](_0x3536x19)}else {this[_0x763a[813]][_0x763a[295]]!= document?(_0x3536x19[_0x763a[124]][_0x763a[187]]= _0x763a[188],document[_0x763a[112]][_0x763a[62]](_0x3536x19),_0x3536x1a= _0x3536x19[_0x763a[359]],_0x3536x5= _0x3536x19[_0x763a[167]],_0x3536x14[_0x763a[62]](_0x3536x19),_0x3536x19[_0x763a[124]][_0x763a[187]]= _0x763a[110]):(_0x3536x14[_0x763a[62]](_0x3536x19),_0x3536x1a= _0x3536x19[_0x763a[359]],_0x3536x5= _0x3536x19[_0x763a[167]])};_0x3536x4= _0x3536x15?Math[_0x763a[160]](_0x3536x4,_0x3536x1a):_0x3536x1a;1> _0x3536x18[_0x763a[1244]]&& _0x3536x13[_0x763a[57]](_0x763a[461],_0x3536x18[_0x763a[1244]]);_0x3536x15= _0x3536x9= 0;_0x3536xa== mxConstants[_0x763a[479]]?_0x3536x9-= _0x3536x4/ 2:_0x3536xa== mxConstants[_0x763a[480]]&& (_0x3536x9-= _0x3536x4);_0x3536x2+= _0x3536x9;_0x3536x12== mxConstants[_0x763a[481]]?_0x3536x15-= _0x3536x5/ 2:_0x3536x12== mxConstants[_0x763a[482]]&& (_0x3536x15-= _0x3536x5);_0x3536x3+= _0x3536x15;_0x3536xa= 1!= _0x3536x18[_0x763a[255]]?_0x763a[1402]+ _0x3536x18[_0x763a[255]]+ _0x763a[460]:_0x763a[110];0!= _0x3536x18[_0x763a[603]]&& this[_0x763a[1216]]?(_0x3536xa+= _0x763a[1394]+ _0x3536x18[_0x763a[603]]+ _0x763a[537]+ _0x3536x4/ 2+ _0x763a[537]+ _0x3536x5/ 2+ _0x763a[460],_0x3536x3= this[_0x763a[1241]]((_0x3536x2+ _0x3536x4/ 2)* _0x3536x18[_0x763a[255]],(_0x3536x3+ _0x3536x5/ 2)* _0x3536x18[_0x763a[255]],_0x3536x18[_0x763a[603]],_0x3536x18[_0x763a[1395]],_0x3536x18[_0x763a[1396]]),_0x3536x2= _0x3536x3[_0x763a[235]]- _0x3536x4* _0x3536x18[_0x763a[255]]/ 2,_0x3536x3= _0x3536x3[_0x763a[236]]- _0x3536x5* _0x3536x18[_0x763a[255]]/ 2):(_0x3536x2*= _0x3536x18[_0x763a[255]],_0x3536x3*= _0x3536x18[_0x763a[255]]);0!= _0x3536x17&& (_0x3536xa+= _0x763a[1394]+ _0x3536x17+ _0x763a[537]+ -_0x3536x9+ _0x763a[537]+ -_0x3536x15+ _0x763a[460]);_0x3536x13[_0x763a[57]](_0x763a[535],_0x763a[536]+ Math[_0x763a[488]](_0x3536x2)+ _0x763a[537]+ Math[_0x763a[488]](_0x3536x3)+ _0x763a[460]+ _0x3536xa);_0x3536x14[_0x763a[57]](_0x763a[117],Math[_0x763a[488]](Math[_0x763a[160]](1,_0x3536x4)));_0x3536x14[_0x763a[57]](_0x763a[119],Math[_0x763a[488]](Math[_0x763a[160]](1,_0x3536x5)))}}else {this[_0x763a[1436]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x15,_0x3536x16,_0x3536x17)}}};mxSvgCanvas2D[_0x763a[202]][_0x763a[1437]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x2= Math[_0x763a[488]](_0x3536x2);_0x3536x3= Math[_0x763a[488]](_0x3536x3);_0x3536x4= Math[_0x763a[488]](_0x3536x4);_0x3536x5= Math[_0x763a[488]](_0x3536x5);for(var _0x3536x9=_0x763a[1438]+ _0x3536x2+ _0x763a[213]+ _0x3536x3+ _0x763a[213]+ _0x3536x4+ _0x763a[213]+ _0x3536x5,_0x3536xa=0,_0x3536x12=_0x3536x9+ _0x763a[213]+ _0x3536xa;null!= document[_0x763a[1362]](_0x3536x12);){_0x3536x12= _0x3536x9+ _0x763a[213]+ ++_0x3536xa};clip= this[_0x763a[55]](_0x763a[1439]);clip[_0x763a[57]](_0x763a[1363],_0x3536x12);_0x3536x9= this[_0x763a[55]](_0x763a[1319]);_0x3536x9[_0x763a[57]](_0x763a[235],_0x3536x2);_0x3536x9[_0x763a[57]](_0x763a[236],_0x3536x3);_0x3536x9[_0x763a[57]](_0x763a[117],_0x3536x4);_0x3536x9[_0x763a[57]](_0x763a[119],_0x3536x5);clip[_0x763a[62]](_0x3536x9);return clip};mxSvgCanvas2D[_0x763a[202]][_0x763a[1436]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15,_0x3536x16){_0x3536x16= null!= _0x3536x16?_0x3536x16:0;_0x3536x13= this[_0x763a[724]];var _0x3536x17=Math[_0x763a[488]](_0x3536x13[_0x763a[487]]),_0x3536x18=this[_0x763a[55]](_0x763a[449]),_0x3536x19=_0x3536x13[_0x763a[535]]|| _0x763a[110];0!= _0x3536x16&& (_0x3536x19+= _0x763a[1394]+ _0x3536x16+ _0x763a[537]+ this[_0x763a[1239]](_0x3536x2* _0x3536x13[_0x763a[255]])+ _0x763a[537]+ this[_0x763a[1239]](_0x3536x3* _0x3536x13[_0x763a[255]])+ _0x763a[460]);if(_0x3536x15&& 0< _0x3536x4&& 0< _0x3536x5){var _0x3536x1a=_0x3536x2;_0x3536x16= _0x3536x3;_0x3536xa== mxConstants[_0x763a[479]]?_0x3536x1a-= _0x3536x4/ 2:_0x3536xa== mxConstants[_0x763a[480]]&& (_0x3536x1a-= _0x3536x4);_0x3536x12== mxConstants[_0x763a[481]]?_0x3536x16-= _0x3536x5/ 2:_0x3536x12== mxConstants[_0x763a[482]]&& (_0x3536x16-= _0x3536x5);_0x3536x16= this[_0x763a[1437]](_0x3536x1a* _0x3536x13[_0x763a[255]]- 2,_0x3536x16* _0x3536x13[_0x763a[255]]- 2,_0x3536x4* _0x3536x13[_0x763a[255]]+ 4,_0x3536x5* _0x3536x13[_0x763a[255]]+ 4);null!= this[_0x763a[1340]]?this[_0x763a[1340]][_0x763a[62]](_0x3536x16):this[_0x763a[813]][_0x763a[62]](_0x3536x16);_0x3536x18[_0x763a[57]](_0x763a[1440],_0x763a[1380]+ _0x3536x16[_0x763a[284]](_0x763a[1363])+ _0x763a[460])};this[_0x763a[1441]](_0x3536x18,_0x3536xa);_0x3536x16= _0x3536xa== mxConstants[_0x763a[480]]?_0x763a[1282]:_0x3536xa== mxConstants[_0x763a[479]]?_0x763a[554]:_0x763a[861];_0x763a[861]!= _0x3536x16&& _0x3536x18[_0x763a[57]](_0x763a[1442],_0x3536x16);(!this[_0x763a[1341]]|| _0x3536x17!= mxConstants[_0x763a[483]])&& _0x3536x18[_0x763a[57]](_0x763a[1443],Math[_0x763a[488]](_0x3536x17* _0x3536x13[_0x763a[255]])+ _0x763a[168]);0< _0x3536x19[_0x763a[67]]&& _0x3536x18[_0x763a[57]](_0x763a[535],_0x3536x19);1> _0x3536x13[_0x763a[1244]]&& _0x3536x18[_0x763a[57]](_0x763a[461],_0x3536x13[_0x763a[1244]]);var _0x3536x19=_0x3536x9[_0x763a[224]](_0x763a[192]),_0x3536x1a=Math[_0x763a[488]](_0x3536x17* mxConstants[_0x763a[490]]),_0x3536x1b=_0x3536x17+ (_0x3536x19[_0x763a[67]]- 1)* _0x3536x1a;_0x3536x16= _0x3536x3+ _0x3536x17- 1;_0x3536x12== mxConstants[_0x763a[481]]?(_0x3536x5= (this[_0x763a[1343]]&& _0x3536x15&& 0< _0x3536x5?Math[_0x763a[243]](_0x3536x1b,_0x3536x5):_0x3536x1b)/ 2,_0x3536x16-= _0x3536x5+ 1):_0x3536x12== mxConstants[_0x763a[482]]&& (_0x3536x5= this[_0x763a[1343]]&& _0x3536x15&& 0< _0x3536x5?Math[_0x763a[243]](_0x3536x1b,_0x3536x5):_0x3536x1b,_0x3536x16-= _0x3536x5+ 2);for(_0x3536x5= 0;_0x3536x5< _0x3536x19[_0x763a[67]];_0x3536x5++){0< _0x3536x19[_0x3536x5][_0x763a[67]]&& 0< mxUtils[_0x763a[330]](_0x3536x19[_0x3536x5])[_0x763a[67]]&& (_0x3536x15= this[_0x763a[55]](_0x763a[963]),_0x3536x15[_0x763a[57]](_0x763a[235],this[_0x763a[1239]](_0x3536x2* _0x3536x13[_0x763a[255]])),_0x3536x15[_0x763a[57]](_0x763a[236],this[_0x763a[1239]](_0x3536x16* _0x3536x13[_0x763a[255]])),mxUtils[_0x763a[53]](_0x3536x15,_0x3536x19[_0x3536x5]),_0x3536x18[_0x763a[62]](_0x3536x15)),_0x3536x16+= _0x3536x1a};this[_0x763a[813]][_0x763a[62]](_0x3536x18);this[_0x763a[1444]](_0x3536x18,_0x3536x9,_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x1b,_0x3536xa,_0x3536x12,_0x3536x14)};mxSvgCanvas2D[_0x763a[202]][_0x763a[1441]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[724]];_0x3536x2[_0x763a[57]](_0x763a[1334],_0x3536x3[_0x763a[665]]);(!this[_0x763a[1341]]|| _0x3536x3[_0x763a[486]]!= mxConstants[_0x763a[484]])&& _0x3536x2[_0x763a[57]](_0x763a[1445],_0x3536x3[_0x763a[486]]);(_0x3536x3[_0x763a[666]]& mxConstants[_0x763a[1410]])== mxConstants[_0x763a[1410]]&& _0x3536x2[_0x763a[57]](_0x763a[1446],_0x763a[1447]);(_0x3536x3[_0x763a[666]]& mxConstants[_0x763a[1412]])== mxConstants[_0x763a[1412]]&& _0x3536x2[_0x763a[57]](_0x763a[1448],_0x763a[1449]);(_0x3536x3[_0x763a[666]]& mxConstants[_0x763a[1414]])== mxConstants[_0x763a[1414]]&& _0x3536x2[_0x763a[57]](_0x763a[1450],_0x763a[355])};mxSvgCanvas2D[_0x763a[202]][_0x763a[1444]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14){var _0x3536x15=this[_0x763a[724]];if(null!= _0x3536x15[_0x763a[1261]]|| null!= _0x3536x15[_0x763a[1263]]){var _0x3536x16=null;_0x3536x14?(_0x3536x12== mxConstants[_0x763a[479]]?_0x3536x4-= _0x3536x9/ 2:_0x3536x12== mxConstants[_0x763a[480]]&& (_0x3536x4-= _0x3536x9),_0x3536x13== mxConstants[_0x763a[481]]?_0x3536x5-= _0x3536xa/ 2:_0x3536x13== mxConstants[_0x763a[482]]&& (_0x3536x5-= _0x3536xa),_0x3536x16= new mxRectangle((_0x3536x4+ 1)* _0x3536x15[_0x763a[255]],_0x3536x5* _0x3536x15[_0x763a[255]],(_0x3536x9- 2)* _0x3536x15[_0x763a[255]],(_0x3536xa+ 2)* _0x3536x15[_0x763a[255]])):null!= _0x3536x2[_0x763a[1451]]&& this[_0x763a[813]][_0x763a[295]]== document?(_0x3536x16= _0x3536x2[_0x763a[1451]](),_0x3536x3= mxClient[_0x763a[80]]&& mxClient[_0x763a[48]],_0x3536x16= new mxRectangle(_0x3536x16[_0x763a[235]],_0x3536x16[_0x763a[236]]+ (_0x3536x3?0:1),_0x3536x16[_0x763a[117]],_0x3536x16[_0x763a[119]]+ (_0x3536x3?1:0))):(_0x3536x16= document[_0x763a[55]](_0x763a[485]),_0x3536x16[_0x763a[124]][_0x763a[489]]= Math[_0x763a[488]](_0x3536x15[_0x763a[487]]* mxConstants[_0x763a[490]])+ _0x763a[168],_0x3536x16[_0x763a[124]][_0x763a[487]]= Math[_0x763a[488]](_0x3536x15[_0x763a[487]])+ _0x763a[168],_0x3536x16[_0x763a[124]][_0x763a[486]]= _0x3536x15[_0x763a[486]],_0x3536x16[_0x763a[124]][_0x763a[493]]= _0x763a[494],_0x3536x16[_0x763a[124]][_0x763a[491]]= _0x763a[492],_0x3536x16[_0x763a[124]][_0x763a[187]]= _0x763a[188],_0x3536x16[_0x763a[124]][_0x763a[495]]= mxClient[_0x763a[496]]?_0x763a[497]:_0x763a[498],_0x3536x16[_0x763a[124]][_0x763a[499]]= _0x763a[500],(_0x3536x15[_0x763a[666]]& mxConstants[_0x763a[1410]])== mxConstants[_0x763a[1410]]&& (_0x3536x16[_0x763a[124]][_0x763a[1452]]= _0x763a[1447]),(_0x3536x15[_0x763a[666]]& mxConstants[_0x763a[1412]])== mxConstants[_0x763a[1412]]&& (_0x3536x16[_0x763a[124]][_0x763a[666]]= _0x763a[1449]),_0x3536x3= mxUtils[_0x763a[321]](_0x3536x3,!1),_0x3536x16[_0x763a[339]]= _0x3536x3[_0x763a[230]](/\n/g,_0x763a[1453]),document[_0x763a[112]][_0x763a[62]](_0x3536x16),_0x3536x9= _0x3536x16[_0x763a[359]],_0x3536xa= _0x3536x16[_0x763a[167]],_0x3536x16[_0x763a[265]][_0x763a[266]](_0x3536x16),_0x3536x12== mxConstants[_0x763a[479]]?_0x3536x4-= _0x3536x9/ 2:_0x3536x12== mxConstants[_0x763a[480]]&& (_0x3536x4-= _0x3536x9),_0x3536x13== mxConstants[_0x763a[481]]?_0x3536x5-= _0x3536xa/ 2:_0x3536x13== mxConstants[_0x763a[482]]&& (_0x3536x5-= _0x3536xa),_0x3536x16= new mxRectangle((_0x3536x4+ 1)* _0x3536x15[_0x763a[255]],(_0x3536x5+ 2)* _0x3536x15[_0x763a[255]],_0x3536x9* _0x3536x15[_0x763a[255]],(_0x3536xa+ 1)* _0x3536x15[_0x763a[255]]));null!= _0x3536x16&& (_0x3536x3= this[_0x763a[55]](_0x763a[1319]),_0x3536x3[_0x763a[57]](_0x763a[1334],_0x3536x15[_0x763a[1261]]|| _0x763a[130]),_0x3536x3[_0x763a[57]](_0x763a[1336],_0x3536x15[_0x763a[1263]]|| _0x763a[130]),_0x3536x3[_0x763a[57]](_0x763a[235],Math[_0x763a[519]](_0x3536x16[_0x763a[235]]- 1)),_0x3536x3[_0x763a[57]](_0x763a[236],Math[_0x763a[519]](_0x3536x16[_0x763a[236]]- 1)),_0x3536x3[_0x763a[57]](_0x763a[117],Math[_0x763a[430]](_0x3536x16[_0x763a[117]]+ 2)),_0x3536x3[_0x763a[57]](_0x763a[119],Math[_0x763a[430]](_0x3536x16[_0x763a[119]])),_0x3536x15= null!= _0x3536x15[_0x763a[1263]]?Math[_0x763a[160]](1,this[_0x763a[1239]](_0x3536x15[_0x763a[255]])):0,_0x3536x3[_0x763a[57]](_0x763a[1382],_0x3536x15),this[_0x763a[813]][_0x763a[295]]== document&& 1== mxUtils[_0x763a[1454]](_0x3536x15,2)&& _0x3536x3[_0x763a[57]](_0x763a[535],_0x763a[1455]),_0x3536x2[_0x763a[950]](_0x3536x3,_0x3536x2[_0x763a[285]]))}};mxSvgCanvas2D[_0x763a[202]][_0x763a[1336]]= function(){this[_0x763a[1370]](!1,!0)};mxSvgCanvas2D[_0x763a[202]][_0x763a[1334]]= function(){this[_0x763a[1370]](!0,!1)};mxSvgCanvas2D[_0x763a[202]][_0x763a[1337]]= function(){this[_0x763a[1370]](!0,!0)};var mxVmlCanvas2D=function(_0x3536x2){mxAbstractCanvas2D[_0x763a[239]](this);this[_0x763a[813]]= _0x3536x2};mxUtils[_0x763a[1284]](mxVmlCanvas2D,mxAbstractCanvas2D);mxVmlCanvas2D[_0x763a[202]][_0x763a[252]]= null;mxVmlCanvas2D[_0x763a[202]][_0x763a[1285]]= !0;mxVmlCanvas2D[_0x763a[202]][_0x763a[1219]]= _0x763a[1456];mxVmlCanvas2D[_0x763a[202]][_0x763a[1221]]= _0x763a[1457];mxVmlCanvas2D[_0x763a[202]][_0x763a[1225]]= _0x763a[1458];mxVmlCanvas2D[_0x763a[202]][_0x763a[1227]]= _0x763a[235];mxVmlCanvas2D[_0x763a[202]][_0x763a[1459]]= _0x763a[110];mxVmlCanvas2D[_0x763a[202]][_0x763a[1460]]= 1;mxVmlCanvas2D[_0x763a[202]][_0x763a[1370]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[252]],_0x3536x5=this[_0x763a[724]];if(null!= _0x3536x4){if(_0x763a[253]== _0x3536x4[_0x763a[301]]){if(null!= this[_0x763a[1215]]&& 0< this[_0x763a[1215]][_0x763a[67]]){_0x3536x4[_0x763a[1215]]= this[_0x763a[1215]][_0x763a[234]](_0x763a[185])+ _0x763a[1461],_0x3536x4[_0x763a[124]][_0x763a[117]]= this[_0x763a[813]][_0x763a[124]][_0x763a[117]],_0x3536x4[_0x763a[124]][_0x763a[119]]= this[_0x763a[813]][_0x763a[124]][_0x763a[119]],_0x3536x4[_0x763a[1462]]= parseInt(_0x3536x4[_0x763a[124]][_0x763a[117]])+ _0x763a[185]+ parseInt(_0x3536x4[_0x763a[124]][_0x763a[119]])}else {return}};_0x3536x4[_0x763a[1463]]= this[_0x763a[1239]](Math[_0x763a[160]](1,_0x3536x5[_0x763a[610]]* _0x3536x5[_0x763a[255]]/ this[_0x763a[1460]]))+ _0x763a[168];_0x3536x5[_0x763a[639]]&& this[_0x763a[813]][_0x763a[62]](this[_0x763a[1375]](_0x3536x4,_0x3536x2&& null!= _0x3536x5[_0x763a[604]],_0x3536x3&& null!= _0x3536x5[_0x763a[608]]));_0x3536x3&& null!= _0x3536x5[_0x763a[608]]?(_0x3536x4[_0x763a[1464]]= _0x763a[128],_0x3536x4[_0x763a[1306]]= _0x3536x5[_0x763a[608]]):_0x3536x4[_0x763a[1464]]= _0x763a[308];_0x3536x4[_0x763a[62]](this[_0x763a[1465]]());_0x3536x2&& null!= _0x3536x5[_0x763a[604]]?_0x3536x4[_0x763a[62]](this[_0x763a[1466]]()):this[_0x763a[1229]]&& (_0x763a[253]!= _0x3536x4[_0x763a[301]]|| this[_0x763a[1215]][this[_0x763a[1215]][_0x763a[67]]- 1]== this[_0x763a[1227]])?_0x3536x4[_0x763a[62]](this[_0x763a[1467]]()):_0x3536x4[_0x763a[1468]]= _0x763a[308];this[_0x763a[813]][_0x763a[62]](_0x3536x4)}};mxVmlCanvas2D[_0x763a[202]][_0x763a[1467]]= function(){var _0x3536x2=document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1469]);_0x3536x2[_0x763a[390]]= mxClient[_0x763a[88]]+ _0x763a[1470];_0x3536x2[_0x763a[60]]= _0x763a[1471];return _0x3536x2};mxVmlCanvas2D[_0x763a[202]][_0x763a[1466]]= function(){var _0x3536x2=this[_0x763a[724]],_0x3536x3=document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1469]);_0x3536x3[_0x763a[352]]= _0x3536x2[_0x763a[604]];if(null!= _0x3536x2[_0x763a[606]]){_0x3536x3[_0x763a[60]]= _0x763a[1299];_0x3536x3[_0x763a[865]]= _0x763a[130];_0x3536x3[_0x763a[1472]]= _0x3536x2[_0x763a[606]];var _0x3536x4=180- _0x3536x2[_0x763a[603]],_0x3536x4=_0x3536x2[_0x763a[607]]== mxConstants[_0x763a[1359]]?_0x3536x4- (90+ (_0x763a[235]== this[_0x763a[813]][_0x763a[124]][_0x763a[1473]]?180:0)):_0x3536x2[_0x763a[607]]== mxConstants[_0x763a[1356]]?_0x3536x4+ (90+ (_0x763a[235]== this[_0x763a[813]][_0x763a[124]][_0x763a[1473]]?180:0)):_0x3536x2[_0x763a[607]]== mxConstants[_0x763a[1358]]?_0x3536x4- (180+ (_0x763a[236]== this[_0x763a[813]][_0x763a[124]][_0x763a[1473]]?-180:0)):_0x3536x4+ (_0x763a[236]== this[_0x763a[813]][_0x763a[124]][_0x763a[1473]]?-180:0);if(_0x763a[235]== this[_0x763a[813]][_0x763a[124]][_0x763a[1473]]|| _0x763a[236]== this[_0x763a[813]][_0x763a[124]][_0x763a[1473]]){_0x3536x4*= -1};_0x3536x3[_0x763a[1474]]= mxUtils[_0x763a[1454]](_0x3536x4,360);_0x3536x3[_0x763a[461]]= 100* _0x3536x2[_0x763a[1244]]* _0x3536x2[_0x763a[1247]]+ _0x763a[229];_0x3536x3[_0x763a[57]](mxClient[_0x763a[1475]]+ _0x763a[1476],100* _0x3536x2[_0x763a[1244]]* _0x3536x2[_0x763a[1248]]+ _0x763a[229])}else {1> _0x3536x2[_0x763a[1244]]&& (_0x3536x3[_0x763a[461]]= 100* _0x3536x2[_0x763a[1244]]+ _0x763a[229])};return _0x3536x3};mxVmlCanvas2D[_0x763a[202]][_0x763a[1465]]= function(){var _0x3536x2=this[_0x763a[724]],_0x3536x3=document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1477]);_0x3536x3[_0x763a[1478]]= _0x3536x2[_0x763a[1254]]|| _0x763a[1232];_0x3536x3[_0x763a[1479]]= _0x3536x2[_0x763a[1256]]|| _0x763a[1233];_0x3536x3[_0x763a[1313]]= _0x3536x2[_0x763a[1258]]|| _0x763a[1480];1> _0x3536x2[_0x763a[1244]]&& (_0x3536x3[_0x763a[461]]= 100* _0x3536x2[_0x763a[1244]]+ _0x763a[229]);_0x3536x2[_0x763a[648]]&& (_0x3536x3[_0x763a[1481]]= this[_0x763a[1482]]());return _0x3536x3};mxVmlCanvas2D[_0x763a[202]][_0x763a[1482]]= function(){var _0x3536x2=_0x763a[1483];if(null!= this[_0x763a[724]][_0x763a[649]]){var _0x3536x3=this[_0x763a[724]][_0x763a[649]][_0x763a[224]](_0x763a[185]);0< _0x3536x3[_0x763a[67]]&& 1== _0x3536x3[0]&& (_0x3536x2= _0x763a[1484])};return _0x3536x2};mxVmlCanvas2D[_0x763a[202]][_0x763a[1375]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[724]],_0x3536x9=-_0x3536x5[_0x763a[603]]* (Math[_0x763a[424]]/ 180),_0x3536xa=Math[_0x763a[426]](_0x3536x9),_0x3536x9=Math[_0x763a[427]](_0x3536x9),_0x3536x12=_0x3536x5[_0x763a[1273]]* _0x3536x5[_0x763a[255]],_0x3536x13=_0x3536x5[_0x763a[1274]]* _0x3536x5[_0x763a[255]];_0x763a[235]== this[_0x763a[813]][_0x763a[124]][_0x763a[1473]]?_0x3536x12*= -1:_0x763a[236]== this[_0x763a[813]][_0x763a[124]][_0x763a[1473]]&& (_0x3536x13*= -1);var _0x3536x14=_0x3536x2[_0x763a[511]](!0);_0x3536x14[_0x763a[124]][_0x763a[945]]= Math[_0x763a[488]](_0x3536x12* _0x3536xa- _0x3536x13* _0x3536x9)+ _0x763a[168];_0x3536x14[_0x763a[124]][_0x763a[953]]= Math[_0x763a[488]](_0x3536x12* _0x3536x9+ _0x3536x13* _0x3536xa)+ _0x763a[168];8== document[_0x763a[5]]&& (_0x3536x14[_0x763a[1463]]= _0x3536x2[_0x763a[1463]],_0x763a[253]== _0x3536x2[_0x763a[301]]&& (_0x3536x14[_0x763a[1215]]= this[_0x763a[1215]][_0x763a[234]](_0x763a[185])+ _0x763a[1461],_0x3536x14[_0x763a[124]][_0x763a[117]]= this[_0x763a[813]][_0x763a[124]][_0x763a[117]],_0x3536x14[_0x763a[124]][_0x763a[119]]= this[_0x763a[813]][_0x763a[124]][_0x763a[119]],_0x3536x14[_0x763a[1462]]= parseInt(_0x3536x2[_0x763a[124]][_0x763a[117]])+ _0x763a[185]+ parseInt(_0x3536x2[_0x763a[124]][_0x763a[119]])));_0x3536x4?(_0x3536x14[_0x763a[1306]]= _0x3536x5[_0x763a[1269]],_0x3536x14[_0x763a[62]](this[_0x763a[1485]]())):_0x3536x14[_0x763a[1464]]= _0x763a[308];_0x3536x3?_0x3536x14[_0x763a[62]](this[_0x763a[1486]]()):_0x3536x14[_0x763a[1468]]= _0x763a[308];return _0x3536x14};mxVmlCanvas2D[_0x763a[202]][_0x763a[1486]]= function(){var _0x3536x2=document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1469]);_0x3536x2[_0x763a[352]]= this[_0x763a[724]][_0x763a[1269]];_0x3536x2[_0x763a[461]]= 100* this[_0x763a[724]][_0x763a[1244]]* this[_0x763a[724]][_0x763a[1271]]+ _0x763a[229];return _0x3536x2};mxVmlCanvas2D[_0x763a[202]][_0x763a[1485]]= function(){var _0x3536x2=this[_0x763a[1465]]();_0x3536x2[_0x763a[461]]= 100* this[_0x763a[724]][_0x763a[1244]]* this[_0x763a[724]][_0x763a[1271]]+ _0x763a[229];return _0x3536x2};mxVmlCanvas2D[_0x763a[202]][_0x763a[1294]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x3&& _0x3536x4?_0x3536x2+= 180:_0x3536x3?this[_0x763a[813]][_0x763a[124]][_0x763a[1473]]= _0x763a[235]:_0x3536x4&& (this[_0x763a[813]][_0x763a[124]][_0x763a[1473]]= _0x763a[236]);if(_0x3536x3?!_0x3536x4:_0x3536x4){_0x3536x2*= -1};this[_0x763a[813]][_0x763a[124]][_0x763a[603]]= _0x3536x2;this[_0x763a[724]][_0x763a[603]]+= _0x3536x2;this[_0x763a[724]][_0x763a[1395]]= _0x3536x5;this[_0x763a[724]][_0x763a[1396]]= _0x3536x9};mxVmlCanvas2D[_0x763a[202]][_0x763a[1275]]= function(){mxAbstractCanvas2D[_0x763a[202]][_0x763a[1275]][_0x763a[183]](this,arguments);this[_0x763a[252]]= document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1487]);this[_0x763a[252]][_0x763a[124]][_0x763a[491]]= _0x763a[492]};mxVmlCanvas2D[_0x763a[202]][_0x763a[1278]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=this[_0x763a[724]],_0x3536xa=(this[_0x763a[1217]]+ _0x3536x9[_0x763a[1126]])* _0x3536x9[_0x763a[255]],_0x3536x12=(this[_0x763a[1218]]+ _0x3536x9[_0x763a[1125]])* _0x3536x9[_0x763a[255]];_0x3536x2= (_0x3536x2+ _0x3536x9[_0x763a[1126]])* _0x3536x9[_0x763a[255]];_0x3536x3= (_0x3536x3+ _0x3536x9[_0x763a[1125]])* _0x3536x9[_0x763a[255]];_0x3536x4= (_0x3536x4+ _0x3536x9[_0x763a[1126]])* _0x3536x9[_0x763a[255]];_0x3536x5= (_0x3536x5+ _0x3536x9[_0x763a[1125]])* _0x3536x9[_0x763a[255]];var _0x3536x12=_0x3536x12+ 2/ 3* (_0x3536x3- _0x3536x12),_0x3536x13=_0x3536x4+ 2/ 3* (_0x3536x2- _0x3536x4);_0x3536x3= _0x3536x5+ 2/ 3* (_0x3536x3- _0x3536x5);this[_0x763a[1215]][_0x763a[207]](_0x763a[1488]+ this[_0x763a[1239]](_0x3536xa+ 2/ 3* (_0x3536x2- _0x3536xa))+ _0x763a[185]+ this[_0x763a[1239]](_0x3536x12)+ _0x763a[185]+ this[_0x763a[1239]](_0x3536x13)+ _0x763a[185]+ this[_0x763a[1239]](_0x3536x3)+ _0x763a[185]+ this[_0x763a[1239]](_0x3536x4)+ _0x763a[185]+ this[_0x763a[1239]](_0x3536x5));this[_0x763a[1217]]= _0x3536x4/ _0x3536x9[_0x763a[255]]- _0x3536x9[_0x763a[1126]];this[_0x763a[1218]]= _0x3536x5/ _0x3536x9[_0x763a[255]]- _0x3536x9[_0x763a[1125]]};mxVmlCanvas2D[_0x763a[202]][_0x763a[1489]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=this[_0x763a[724]];_0x3536x2= document[_0x763a[55]](_0x3536x2);_0x3536x2[_0x763a[124]][_0x763a[491]]= _0x763a[492];_0x3536x2[_0x763a[124]][_0x763a[361]]= this[_0x763a[1239]]((_0x3536x3+ _0x3536xa[_0x763a[1126]])* _0x3536xa[_0x763a[255]])+ _0x763a[168];_0x3536x2[_0x763a[124]][_0x763a[125]]= this[_0x763a[1239]]((_0x3536x4+ _0x3536xa[_0x763a[1125]])* _0x3536xa[_0x763a[255]])+ _0x763a[168];_0x3536x2[_0x763a[124]][_0x763a[117]]= this[_0x763a[1239]](_0x3536x5* _0x3536xa[_0x763a[255]])+ _0x763a[168];_0x3536x2[_0x763a[124]][_0x763a[119]]= this[_0x763a[1239]](_0x3536x9* _0x3536xa[_0x763a[255]])+ _0x763a[168];return _0x3536x2};mxVmlCanvas2D[_0x763a[202]][_0x763a[1319]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){this[_0x763a[252]]= this[_0x763a[1489]](mxClient[_0x763a[463]]+ _0x763a[1490],_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5)};mxVmlCanvas2D[_0x763a[202]][_0x763a[1320]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){this[_0x763a[252]]= this[_0x763a[1489]](mxClient[_0x763a[463]]+ _0x763a[1491],_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5);this[_0x763a[252]][_0x763a[57]](_0x763a[1492],Math[_0x763a[160]](100* _0x3536x9/ _0x3536x4,100* _0x3536xa/ _0x3536x5)+ _0x763a[229])};mxVmlCanvas2D[_0x763a[202]][_0x763a[680]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){this[_0x763a[252]]= this[_0x763a[1489]](mxClient[_0x763a[463]]+ _0x763a[1493],_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5)};mxVmlCanvas2D[_0x763a[202]][_0x763a[618]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13){var _0x3536x14=null;_0x3536xa?(_0x3536x14= this[_0x763a[1489]](mxClient[_0x763a[463]]+ _0x763a[1490],_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5),_0x3536x14[_0x763a[1464]]= _0x763a[308],_0x3536x2= document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1469]),_0x3536x2[_0x763a[1322]]= _0x3536xa?_0x763a[1494]:_0x763a[1495],_0x3536x2[_0x763a[1294]]= _0x763a[128],_0x3536x2[_0x763a[60]]= _0x763a[1496],_0x3536x2[_0x763a[390]]= _0x3536x9,_0x3536x14[_0x763a[62]](_0x3536x2)):(_0x3536x14= this[_0x763a[1489]](mxClient[_0x763a[463]]+ _0x763a[464],_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5),_0x3536x14[_0x763a[390]]= _0x3536x9);_0x3536x12&& _0x3536x13?_0x3536x14[_0x763a[124]][_0x763a[603]]= _0x763a[1497]:_0x3536x12?_0x3536x14[_0x763a[124]][_0x763a[1473]]= _0x763a[235]:_0x3536x13&& (_0x3536x14[_0x763a[124]][_0x763a[1473]]= _0x763a[236]);1> this[_0x763a[724]][_0x763a[1244]]&& (_0x3536x14[_0x763a[124]][_0x763a[347]]+= _0x763a[459]+ 100* this[_0x763a[724]][_0x763a[1244]]+ _0x763a[460]);this[_0x763a[813]][_0x763a[62]](_0x3536x14)};mxVmlCanvas2D[_0x763a[202]][_0x763a[1404]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x4= document[_0x763a[55]](_0x763a[485]);var _0x3536x9=this[_0x763a[724]],_0x3536xa=_0x763a[110];null!= _0x3536x9[_0x763a[1261]]&& (_0x3536xa+= _0x763a[1418]+ _0x3536x9[_0x763a[1261]]+ _0x763a[471]);null!= _0x3536x9[_0x763a[1263]]&& (_0x3536xa+= _0x763a[1419]+ _0x3536x9[_0x763a[1263]]+ _0x763a[471]);mxUtils[_0x763a[1331]](_0x3536x2)?_0x3536x4[_0x763a[62]](_0x3536x2):0< _0x3536xa[_0x763a[67]]&& !_0x3536x5?(_0x3536x5= document[_0x763a[55]](_0x763a[485]),_0x3536x5[_0x763a[124]][_0x763a[103]]= _0x3536xa,_0x3536x5[_0x763a[124]][_0x763a[495]]= mxClient[_0x763a[496]]?_0x763a[497]:_0x763a[498],_0x3536x5[_0x763a[124]][_0x763a[499]]= _0x763a[500],_0x3536x5[_0x763a[339]]= _0x3536x2,_0x3536x4[_0x763a[62]](_0x3536x5)):(_0x3536x4[_0x763a[124]][_0x763a[103]]= _0x3536xa,_0x3536x4[_0x763a[339]]= _0x3536x2);_0x3536x2= _0x3536x4[_0x763a[124]];_0x3536x2[_0x763a[487]]= Math[_0x763a[488]](_0x3536x9[_0x763a[487]]/ this[_0x763a[1460]])+ _0x763a[168];_0x3536x2[_0x763a[486]]= _0x3536x9[_0x763a[486]];_0x3536x2[_0x763a[352]]= _0x3536x9[_0x763a[665]];_0x3536x2[_0x763a[123]]= _0x763a[125];_0x3536x2[_0x763a[1165]]= _0x3536x3|| _0x763a[361];_0x3536x2[_0x763a[489]]= Math[_0x763a[488]](_0x3536x9[_0x763a[487]]* mxConstants[_0x763a[490]]/ this[_0x763a[1460]])+ _0x763a[168];(_0x3536x9[_0x763a[666]]& mxConstants[_0x763a[1410]])== mxConstants[_0x763a[1410]]&& (_0x3536x2[_0x763a[1452]]= _0x763a[1447]);(_0x3536x9[_0x763a[666]]& mxConstants[_0x763a[1412]])== mxConstants[_0x763a[1412]]&& (_0x3536x2[_0x763a[666]]= _0x763a[1449]);(_0x3536x9[_0x763a[666]]& mxConstants[_0x763a[1414]])== mxConstants[_0x763a[1414]]&& (_0x3536x2[_0x763a[1498]]= _0x763a[355]);return _0x3536x4};mxVmlCanvas2D[_0x763a[202]][_0x763a[963]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15,_0x3536x16,_0x3536x17){if(this[_0x763a[1285]]&& null!= _0x3536x9){var _0x3536x18=this[_0x763a[724]];if(_0x763a[1428]== _0x3536x14){null!= _0x3536x18[_0x763a[603]]&& (_0x3536x3= this[_0x763a[1241]](_0x3536x2,_0x3536x3,_0x3536x18[_0x763a[603]],_0x3536x18[_0x763a[1395]],_0x3536x18[_0x763a[1396]]),_0x3536x2= _0x3536x3[_0x763a[235]],_0x3536x3= _0x3536x3[_0x763a[236]]);8== document[_0x763a[5]]?(_0x3536x2+= _0x3536x18[_0x763a[1126]],_0x3536x3+= _0x3536x18[_0x763a[1125]]):(_0x3536x2*= _0x3536x18[_0x763a[255]],_0x3536x3*= _0x3536x18[_0x763a[255]]);_0x3536x14= 8== document[_0x763a[5]]?document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1499]):document[_0x763a[55]](_0x763a[485]);_0x3536x14[_0x763a[124]][_0x763a[491]]= _0x763a[492];_0x3536x14[_0x763a[124]][_0x763a[495]]= _0x763a[497];_0x3536x14[_0x763a[124]][_0x763a[361]]= this[_0x763a[1239]](_0x3536x2)+ _0x763a[168];_0x3536x14[_0x763a[124]][_0x763a[125]]= this[_0x763a[1239]](_0x3536x3)+ _0x763a[168];_0x3536x14[_0x763a[124]][_0x763a[499]]= _0x3536x18[_0x763a[255]];var _0x3536x19=document[_0x763a[55]](_0x763a[485]);_0x3536x19[_0x763a[124]][_0x763a[491]]= _0x763a[1500];_0x3536x19[_0x763a[124]][_0x763a[495]]= _0x763a[497];var _0x3536x1a=mxUtils[_0x763a[1501]](_0x3536xa,_0x3536x12),_0x3536x1b=_0x3536x1a[_0x763a[235]],_0x3536x1a=_0x3536x1a[_0x763a[236]];_0x3536x9= this[_0x763a[1404]](_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x15);_0x3536xa= document[_0x763a[55]](_0x763a[485]);_0x3536x13?(!_0x3536x16&& 0< _0x3536x4&& (_0x3536x9[_0x763a[124]][_0x763a[117]]= Math[_0x763a[488]](_0x3536x4)+ _0x763a[168]),_0x3536x9[_0x763a[124]][_0x763a[493]]= _0x763a[1502]):_0x3536x9[_0x763a[124]][_0x763a[493]]= _0x763a[494];_0x3536x13= _0x3536x18[_0x763a[603]]+ (_0x3536x17|| 0);this[_0x763a[1216]]&& 0!= _0x3536x13?(_0x3536xa[_0x763a[124]][_0x763a[495]]= _0x763a[497],_0x3536xa[_0x763a[124]][_0x763a[499]]= _0x763a[500],_0x3536xa[_0x763a[62]](_0x3536x9),8== document[_0x763a[5]]&& _0x763a[529]!= this[_0x763a[813]][_0x763a[301]]?(_0x3536x19[_0x763a[62]](_0x3536xa),_0x3536x14[_0x763a[62]](_0x3536x19)):_0x3536x14[_0x763a[62]](_0x3536xa)):8== document[_0x763a[5]]?(_0x3536x19[_0x763a[62]](_0x3536x9),_0x3536x14[_0x763a[62]](_0x3536x19)):(_0x3536x9[_0x763a[124]][_0x763a[495]]= _0x763a[497],_0x3536x14[_0x763a[62]](_0x3536x9));_0x763a[529]!= this[_0x763a[813]][_0x763a[301]]?(_0x3536x17= document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1490]),_0x3536x17[_0x763a[1464]]= _0x763a[308],_0x3536x17[_0x763a[1468]]= _0x763a[308],_0x3536x17[_0x763a[62]](_0x3536x14),this[_0x763a[813]][_0x763a[62]](_0x3536x17)):this[_0x763a[813]][_0x763a[62]](_0x3536x14);_0x3536x16?(_0x3536x9[_0x763a[124]][_0x763a[277]]= _0x763a[188],0< _0x3536x4&& (_0x3536x9[_0x763a[124]][_0x763a[117]]= Math[_0x763a[488]](_0x3536x4)+ _0x763a[168]),0< _0x3536x5&& 8== document[_0x763a[5]]&& (_0x3536x9[_0x763a[124]][_0x763a[1503]]= Math[_0x763a[488]](_0x3536x5)+ _0x763a[168])):_0x3536x15&& (_0x3536x9[_0x763a[124]][_0x763a[117]]= _0x3536x4+ _0x763a[168],0< _0x3536x5&& (_0x3536x9[_0x763a[124]][_0x763a[1503]]= Math[_0x763a[488]](_0x3536x5)+ _0x763a[168]));if(this[_0x763a[1216]]&& 0!= _0x3536x13){_0x3536x4= _0x3536x13* (Math[_0x763a[424]]/ 180);_0x3536x13= parseFloat(parseFloat(Math[_0x763a[426]](_0x3536x4))[_0x763a[1293]](8));_0x3536x17= parseFloat(parseFloat(Math[_0x763a[427]](-_0x3536x4))[_0x763a[1293]](8));_0x3536x4%= 2* Math[_0x763a[424]];0> _0x3536x4&& (_0x3536x4+= 2* Math[_0x763a[424]]);_0x3536x4%= Math[_0x763a[424]];_0x3536x4> Math[_0x763a[424]]/ 2&& (_0x3536x4= Math[_0x763a[424]]- _0x3536x4);_0x3536x12= Math[_0x763a[426]](_0x3536x4);var _0x3536x1c=Math[_0x763a[427]](_0x3536x4);8== document[_0x763a[5]]&& (_0x3536x9[_0x763a[124]][_0x763a[495]]= _0x763a[498],_0x3536xa[_0x763a[124]][_0x763a[495]]= _0x763a[498],_0x3536x19[_0x763a[124]][_0x763a[495]]= _0x763a[498]);_0x3536x9[_0x763a[124]][_0x763a[187]]= _0x763a[188];document[_0x763a[112]][_0x763a[62]](_0x3536x9);_0x3536x4= _0x3536x9[_0x763a[359]];_0x3536x19= _0x3536x9[_0x763a[167]];if(mxClient[_0x763a[496]]&& (_0x3536x16|| _0x3536x15)&& _0x3536x19> _0x3536x5){_0x3536x19= _0x3536x5,_0x3536x9[_0x763a[124]][_0x763a[119]]= _0x3536x19+ _0x763a[168]};_0x3536x5= _0x3536x19;_0x3536x16= (_0x3536x5- _0x3536x5* _0x3536x12+ _0x3536x4* -_0x3536x1c)/ 2- _0x3536x17* _0x3536x4* (_0x3536x1b+ 0.5)+ _0x3536x13* _0x3536x5* (_0x3536x1a+ 0.5);_0x3536x15= (_0x3536x4- _0x3536x4* _0x3536x12+ _0x3536x5* -_0x3536x1c)/ 2+ _0x3536x13* _0x3536x4* (_0x3536x1b+ 0.5)+ _0x3536x17* _0x3536x5* (_0x3536x1a+ 0.5);_0x763a[1504]== _0x3536x14[_0x763a[301]]&& _0x763a[529]== this[_0x763a[813]][_0x763a[301]]?(_0x3536x1b= document[_0x763a[55]](_0x763a[485]),_0x3536x1b[_0x763a[124]][_0x763a[495]]= _0x763a[498],_0x3536x1b[_0x763a[124]][_0x763a[491]]= _0x763a[492],_0x3536x1b[_0x763a[124]][_0x763a[361]]= this[_0x763a[1239]](_0x3536x2+ (_0x3536x15- _0x3536x4/ 2)* _0x3536x18[_0x763a[255]])+ _0x763a[168],_0x3536x1b[_0x763a[124]][_0x763a[125]]= this[_0x763a[1239]](_0x3536x3+ (_0x3536x16- _0x3536x5/ 2)* _0x3536x18[_0x763a[255]])+ _0x763a[168],_0x3536x14[_0x763a[265]][_0x763a[62]](_0x3536x1b),_0x3536x1b[_0x763a[62]](_0x3536x14)):(_0x3536x18= 8== document[_0x763a[5]]?1:_0x3536x18[_0x763a[255]],_0x3536x14[_0x763a[124]][_0x763a[361]]= this[_0x763a[1239]](_0x3536x2+ (_0x3536x15- _0x3536x4/ 2)* _0x3536x18)+ _0x763a[168],_0x3536x14[_0x763a[124]][_0x763a[125]]= this[_0x763a[1239]](_0x3536x3+ (_0x3536x16- _0x3536x5/ 2)* _0x3536x18)+ _0x763a[168]);_0x3536xa[_0x763a[124]][_0x763a[347]]= _0x763a[1505]+ _0x3536x13+ _0x763a[1506]+ _0x3536x17+ _0x763a[1507]+ -_0x3536x17+ _0x763a[1508]+ _0x3536x13+ _0x763a[1509];_0x3536xa[_0x763a[124]][_0x763a[1028]]= this[_0x763a[1459]];1> this[_0x763a[724]][_0x763a[1244]]&& (_0x3536xa[_0x763a[124]][_0x763a[347]]+= _0x763a[459]+ 100* this[_0x763a[724]][_0x763a[1244]]+ _0x763a[460]);_0x3536x9[_0x763a[124]][_0x763a[187]]= _0x763a[110];_0x3536xa[_0x763a[62]](_0x3536x9)}else {8!= document[_0x763a[5]]?(_0x3536x9[_0x763a[124]][_0x763a[123]]= _0x763a[125],1> this[_0x763a[724]][_0x763a[1244]]&& (_0x3536x14[_0x763a[124]][_0x763a[347]]= _0x763a[459]+ 100* this[_0x763a[724]][_0x763a[1244]]+ _0x763a[460]),_0x3536x18= _0x3536x9[_0x763a[265]],_0x3536x9[_0x763a[124]][_0x763a[187]]= _0x763a[188],document[_0x763a[112]][_0x763a[62]](_0x3536x9),_0x3536x4= _0x3536x9[_0x763a[359]],_0x3536x19= _0x3536x9[_0x763a[167]],mxClient[_0x763a[496]]&& (_0x3536x16&& _0x3536x19> _0x3536x5)&& (_0x3536x19= _0x3536x5,_0x3536x9[_0x763a[124]][_0x763a[119]]= _0x3536x19+ _0x763a[168]),_0x3536x5= _0x3536x19,_0x3536x9[_0x763a[124]][_0x763a[187]]= _0x763a[110],_0x3536x18[_0x763a[62]](_0x3536x9),_0x3536x14[_0x763a[124]][_0x763a[361]]= this[_0x763a[1239]](_0x3536x2+ _0x3536x4* _0x3536x1b* this[_0x763a[724]][_0x763a[255]])+ _0x763a[168],_0x3536x14[_0x763a[124]][_0x763a[125]]= this[_0x763a[1239]](_0x3536x3+ _0x3536x5* _0x3536x1a* this[_0x763a[724]][_0x763a[255]])+ _0x763a[168]):(1> this[_0x763a[724]][_0x763a[1244]]&& (_0x3536x9[_0x763a[124]][_0x763a[347]]= _0x763a[459]+ 100* this[_0x763a[724]][_0x763a[1244]]+ _0x763a[460]),_0x3536x19[_0x763a[124]][_0x763a[361]]= 100* _0x3536x1b+ _0x763a[229],_0x3536x19[_0x763a[124]][_0x763a[125]]= 100* _0x3536x1a+ _0x763a[229])}}else {this[_0x763a[1436]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,mxUtils[_0x763a[321]](_0x3536x9,!1),_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15,_0x3536x16,_0x3536x17)}}};mxVmlCanvas2D[_0x763a[202]][_0x763a[1436]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15,_0x3536x16,_0x3536x17){_0x3536x5= this[_0x763a[724]];_0x3536x2= (_0x3536x2+ _0x3536x5[_0x763a[1126]])* _0x3536x5[_0x763a[255]];_0x3536x3= (_0x3536x3+ _0x3536x5[_0x763a[1125]])* _0x3536x5[_0x763a[255]];_0x3536x4= document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1487]);_0x3536x4[_0x763a[124]][_0x763a[117]]= _0x763a[942];_0x3536x4[_0x763a[124]][_0x763a[119]]= _0x763a[942];_0x3536x4[_0x763a[1464]]= _0x763a[308];_0x3536x15= document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1469]);_0x3536x15[_0x763a[352]]= _0x3536x5[_0x763a[665]];_0x3536x15[_0x763a[461]]= 100* _0x3536x5[_0x763a[1244]]+ _0x763a[229];_0x3536x4[_0x763a[62]](_0x3536x15);_0x3536x15= document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1510]);_0x3536x15[_0x763a[1511]]= _0x763a[128];_0x3536x15[_0x763a[6]]= _0x763a[1512]+ this[_0x763a[1239]](0)+ _0x763a[185]+ this[_0x763a[1239]](0)+ _0x763a[1513]+ this[_0x763a[1239]](1)+ _0x763a[185]+ this[_0x763a[1239]](0);_0x3536x4[_0x763a[62]](_0x3536x15);_0x3536x15= document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1514]);_0x3536x15[_0x763a[124]][_0x763a[103]]= _0x763a[1515]+ _0x3536xa;_0x3536x15[_0x763a[124]][_0x763a[611]]= _0x3536xa;_0x3536x15[_0x763a[124]][_0x763a[486]]= _0x3536x5[_0x763a[486]];_0x3536x15[_0x763a[1516]]= _0x3536x9;_0x3536x15[_0x763a[747]]= _0x763a[128];_0x3536xa= Math[_0x763a[488]](_0x3536x5[_0x763a[487]]* _0x3536x5[_0x763a[255]]/ this[_0x763a[1460]]);_0x3536x15[_0x763a[124]][_0x763a[487]]= _0x3536xa+ _0x763a[168];(_0x3536x5[_0x763a[666]]& mxConstants[_0x763a[1410]])== mxConstants[_0x763a[1410]]&& (_0x3536x15[_0x763a[124]][_0x763a[1452]]= _0x763a[1447]);(_0x3536x5[_0x763a[666]]& mxConstants[_0x763a[1412]])== mxConstants[_0x763a[1412]]&& (_0x3536x15[_0x763a[124]][_0x763a[666]]= _0x763a[1449]);(_0x3536x5[_0x763a[666]]& mxConstants[_0x763a[1414]])== mxConstants[_0x763a[1414]]&& (_0x3536x15[_0x763a[124]][_0x763a[354]]= _0x763a[355]);_0x3536x9= _0x3536x9[_0x763a[224]](_0x763a[192]);_0x3536x5= _0x3536xa+ (_0x3536x9[_0x763a[67]]- 1)* _0x3536xa* mxConstants[_0x763a[490]];_0x3536xa= _0x3536x9= 0;_0x3536x12== mxConstants[_0x763a[482]]?_0x3536xa= -_0x3536x5/ 2:_0x3536x12!= mxConstants[_0x763a[481]]&& (_0x3536xa= _0x3536x5/ 2);null!= _0x3536x17&& (_0x3536x4[_0x763a[124]][_0x763a[603]]= _0x3536x17,_0x3536x12= _0x3536x17* (Math[_0x763a[424]]/ 180),_0x3536x9= Math[_0x763a[427]](_0x3536x12)* _0x3536xa,_0x3536xa*= Math[_0x763a[426]](_0x3536x12));_0x3536x4[_0x763a[62]](_0x3536x15);_0x3536x4[_0x763a[124]][_0x763a[361]]= this[_0x763a[1239]](_0x3536x2- _0x3536x9)+ _0x763a[168];_0x3536x4[_0x763a[124]][_0x763a[125]]= this[_0x763a[1239]](_0x3536x3+ _0x3536xa)+ _0x763a[168];this[_0x763a[813]][_0x763a[62]](_0x3536x4)};mxVmlCanvas2D[_0x763a[202]][_0x763a[1336]]= function(){this[_0x763a[1370]](!1,!0)};mxVmlCanvas2D[_0x763a[202]][_0x763a[1334]]= function(){this[_0x763a[1370]](!0,!1)};mxVmlCanvas2D[_0x763a[202]][_0x763a[1337]]= function(){this[_0x763a[1370]](!0,!0)};function mxGuide(_0x3536x2,_0x3536x3){this[_0x763a[1179]]= _0x3536x2;this[_0x763a[1517]](_0x3536x3)}mxGuide[_0x763a[202]][_0x763a[1179]]= null;mxGuide[_0x763a[202]][_0x763a[1214]]= null;mxGuide[_0x763a[202]][_0x763a[662]]= !0;mxGuide[_0x763a[202]][_0x763a[704]]= !0;mxGuide[_0x763a[202]][_0x763a[1518]]= null;mxGuide[_0x763a[202]][_0x763a[1519]]= null;mxGuide[_0x763a[202]][_0x763a[1517]]= function(_0x3536x2){this[_0x763a[1214]]= _0x3536x2};mxGuide[_0x763a[202]][_0x763a[1019]]= function(_0x3536x2){return !0};mxGuide[_0x763a[202]][_0x763a[1520]]= function(){return this[_0x763a[1179]][_0x763a[1020]]* this[_0x763a[1179]][_0x763a[441]][_0x763a[255]]/ 2};mxGuide[_0x763a[202]][_0x763a[1521]]= function(_0x3536x2){_0x3536x2= new mxPolyline([],mxConstants.GUIDE_COLOR,mxConstants.GUIDE_STROKEWIDTH);_0x3536x2[_0x763a[1522]]= !0;return _0x3536x2};mxGuide[_0x763a[202]][_0x763a[582]]= function(_0x3536x2,_0x3536x3,_0x3536x4){if(null!= this[_0x763a[1214]]&& (this[_0x763a[662]]|| this[_0x763a[704]])&& null!= _0x3536x2&& null!= _0x3536x3){var _0x3536x5=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[513]],_0x3536x9=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]],_0x3536xa=_0x3536x3[_0x763a[235]],_0x3536x12=_0x3536x3[_0x763a[236]],_0x3536x13=!1,_0x3536x14=!1,_0x3536x15=this[_0x763a[1520]](),_0x3536x16=_0x3536x15,_0x3536x17=_0x3536x15,_0x3536x15=_0x3536x2[_0x763a[238]]();_0x3536x15[_0x763a[235]]+= _0x3536x3[_0x763a[235]];_0x3536x15[_0x763a[236]]+= _0x3536x3[_0x763a[236]];var _0x3536x18=_0x3536x15[_0x763a[235]],_0x3536x19=_0x3536x15[_0x763a[235]]+ _0x3536x15[_0x763a[117]],_0x3536x1a=_0x3536x15[_0x763a[241]](),_0x3536x1b=_0x3536x15[_0x763a[236]],_0x3536x1c=_0x3536x15[_0x763a[236]]+ _0x3536x15[_0x763a[119]],_0x3536x1d=_0x3536x15[_0x763a[242]]();_0x3536x3= function(_0x3536x3){_0x3536x3+= this[_0x763a[1179]][_0x763a[1136]];var _0x3536x4=!1;Math[_0x763a[425]](_0x3536x3- _0x3536x1a)< _0x3536x16?(_0x3536xa= _0x3536x3- _0x3536x2[_0x763a[241]](),_0x3536x16= Math[_0x763a[425]](_0x3536x3- _0x3536x1a),_0x3536x4= !0):Math[_0x763a[425]](_0x3536x3- _0x3536x18)< _0x3536x16?(_0x3536xa= _0x3536x3- _0x3536x2[_0x763a[235]],_0x3536x16= Math[_0x763a[425]](_0x3536x3- _0x3536x18),_0x3536x4= !0):Math[_0x763a[425]](_0x3536x3- _0x3536x19)< _0x3536x16&& (_0x3536xa= _0x3536x3- _0x3536x2[_0x763a[235]]- _0x3536x2[_0x763a[117]],_0x3536x16= Math[_0x763a[425]](_0x3536x3- _0x3536x19),_0x3536x4= !0);if(_0x3536x4){null== this[_0x763a[1518]]&& (this[_0x763a[1518]]= this[_0x763a[1521]](!0),this[_0x763a[1518]][_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]]!= mxConstants[_0x763a[508]]?mxConstants[_0x763a[1523]]:mxConstants[_0x763a[508]],this[_0x763a[1518]][_0x763a[1229]]= !1,this[_0x763a[1518]][_0x763a[176]](this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1524]]()));var _0x3536x5=this[_0x763a[1179]][_0x763a[526]];_0x3536x3-= this[_0x763a[1179]][_0x763a[1136]];this[_0x763a[1518]][_0x763a[1525]]= [ new mxPoint(_0x3536x3,-this[_0x763a[1179]][_0x763a[1137]]), new mxPoint(_0x3536x3,_0x3536x5[_0x763a[191]]- 3- this[_0x763a[1179]][_0x763a[1137]])]};_0x3536x13= _0x3536x13|| _0x3536x4};for(var _0x3536x15=function(_0x3536x3){_0x3536x3+= this[_0x763a[1179]][_0x763a[1137]];var _0x3536x4=!1;Math[_0x763a[425]](_0x3536x3- _0x3536x1d)< _0x3536x17?(_0x3536x12= _0x3536x3- _0x3536x2[_0x763a[242]](),_0x3536x17= Math[_0x763a[425]](_0x3536x3- _0x3536x1d),_0x3536x4= !0):Math[_0x763a[425]](_0x3536x3- _0x3536x1b)< _0x3536x17?(_0x3536x12= _0x3536x3- _0x3536x2[_0x763a[236]],_0x3536x17= Math[_0x763a[425]](_0x3536x3- _0x3536x1b),_0x3536x4= !0):Math[_0x763a[425]](_0x3536x3- _0x3536x1c)< _0x3536x17&& (_0x3536x12= _0x3536x3- _0x3536x2[_0x763a[236]]- _0x3536x2[_0x763a[119]],_0x3536x17= Math[_0x763a[425]](_0x3536x3- _0x3536x1c),_0x3536x4= !0);if(_0x3536x4){null== this[_0x763a[1519]]&& (this[_0x763a[1519]]= this[_0x763a[1521]](!1),this[_0x763a[1519]][_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]]!= mxConstants[_0x763a[508]]?mxConstants[_0x763a[1523]]:mxConstants[_0x763a[508]],this[_0x763a[1519]][_0x763a[1229]]= !1,this[_0x763a[1519]][_0x763a[176]](this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1524]]()));var _0x3536x5=this[_0x763a[1179]][_0x763a[526]];_0x3536x3-= this[_0x763a[1179]][_0x763a[1137]];this[_0x763a[1519]][_0x763a[1525]]= [ new mxPoint(-this[_0x763a[1179]][_0x763a[1136]],_0x3536x3), new mxPoint(_0x3536x5[_0x763a[1526]]- 3- this[_0x763a[1179]][_0x763a[1136]],_0x3536x3)]};_0x3536x14= _0x3536x14|| _0x3536x4},_0x3536x1e=0;_0x3536x1e< this[_0x763a[1214]][_0x763a[67]];_0x3536x1e++){var _0x3536x1f=this[_0x763a[1214]][_0x3536x1e];null!= _0x3536x1f&& (this[_0x763a[662]]&& (_0x3536x3[_0x763a[239]](this,_0x3536x1f[_0x763a[241]]()),_0x3536x3[_0x763a[239]](this,_0x3536x1f[_0x763a[235]]),_0x3536x3[_0x763a[239]](this,_0x3536x1f[_0x763a[235]]+ _0x3536x1f[_0x763a[117]])),this[_0x763a[704]]&& (_0x3536x15[_0x763a[239]](this,_0x3536x1f[_0x763a[242]]()),_0x3536x15[_0x763a[239]](this,_0x3536x1f[_0x763a[236]]),_0x3536x15[_0x763a[239]](this,_0x3536x1f[_0x763a[236]]+ _0x3536x1f[_0x763a[119]])))};!_0x3536x13&& null!= this[_0x763a[1518]]?this[_0x763a[1518]][_0x763a[252]][_0x763a[124]][_0x763a[187]]= _0x763a[188]:null!= this[_0x763a[1518]]&& (this[_0x763a[1518]][_0x763a[252]][_0x763a[124]][_0x763a[187]]= _0x763a[189],this[_0x763a[1518]][_0x763a[258]]());!_0x3536x14&& null!= this[_0x763a[1519]]?this[_0x763a[1519]][_0x763a[252]][_0x763a[124]][_0x763a[187]]= _0x763a[188]:null!= this[_0x763a[1519]]&& (this[_0x763a[1519]][_0x763a[252]][_0x763a[124]][_0x763a[187]]= _0x763a[189],this[_0x763a[1519]][_0x763a[258]]());_0x3536x4&& (_0x3536x13|| (_0x3536x4= _0x3536x2[_0x763a[235]]- (this[_0x763a[1179]][_0x763a[1021]](_0x3536x2[_0x763a[235]]/ _0x3536x9- _0x3536x5[_0x763a[235]])+ _0x3536x5[_0x763a[235]])* _0x3536x9,_0x3536xa= this[_0x763a[1179]][_0x763a[1021]](_0x3536xa/ _0x3536x9)* _0x3536x9- _0x3536x4),_0x3536x14|| (_0x3536x5= _0x3536x2[_0x763a[236]]- (this[_0x763a[1179]][_0x763a[1021]](_0x3536x2[_0x763a[236]]/ _0x3536x9- _0x3536x5[_0x763a[236]])+ _0x3536x5[_0x763a[236]])* _0x3536x9,_0x3536x12= this[_0x763a[1179]][_0x763a[1021]](_0x3536x12/ _0x3536x9)* _0x3536x9- _0x3536x5));_0x3536x3= new mxPoint(_0x3536xa,_0x3536x12)};return _0x3536x3};mxGuide[_0x763a[202]][_0x763a[801]]= function(){null!= this[_0x763a[1518]]&& (this[_0x763a[1518]][_0x763a[252]][_0x763a[124]][_0x763a[187]]= _0x763a[188]);null!= this[_0x763a[1519]]&& (this[_0x763a[1519]][_0x763a[252]][_0x763a[124]][_0x763a[187]]= _0x763a[188])};mxGuide[_0x763a[202]][_0x763a[515]]= function(){null!= this[_0x763a[1518]]&& (this[_0x763a[1518]][_0x763a[515]](),this[_0x763a[1518]]= null);null!= this[_0x763a[1519]]&& (this[_0x763a[1519]][_0x763a[515]](),this[_0x763a[1519]]= null)};function mxStencil(_0x3536x2){this[_0x763a[1527]]= _0x3536x2;this[_0x763a[1528]]();this[_0x763a[1529]]()}mxStencil[_0x763a[1530]]= !1;mxStencil[_0x763a[202]][_0x763a[1527]]= null;mxStencil[_0x763a[202]][_0x763a[1531]]= null;mxStencil[_0x763a[202]][_0x763a[1322]]= null;mxStencil[_0x763a[202]][_0x763a[1532]]= null;mxStencil[_0x763a[202]][_0x763a[1533]]= null;mxStencil[_0x763a[202]][_0x763a[1534]]= null;mxStencil[_0x763a[202]][_0x763a[1535]]= null;mxStencil[_0x763a[202]][_0x763a[1307]]= null;mxStencil[_0x763a[202]][_0x763a[1528]]= function(){this[_0x763a[1535]]= this[_0x763a[1527]][_0x763a[64]](_0x763a[1536])[0];this[_0x763a[1534]]= this[_0x763a[1527]][_0x763a[64]](_0x763a[1537])[0];this[_0x763a[1532]]= Number(this[_0x763a[1527]][_0x763a[284]](_0x763a[1302])|| 100);this[_0x763a[1533]]= Number(this[_0x763a[1527]][_0x763a[284]](_0x763a[1303])|| 100);var _0x3536x2=this[_0x763a[1527]][_0x763a[284]](_0x763a[1322]);this[_0x763a[1322]]= null!= _0x3536x2?_0x3536x2:_0x763a[1538];_0x3536x2= this[_0x763a[1527]][_0x763a[284]](_0x763a[1307]);this[_0x763a[1307]]= null!= _0x3536x2?_0x3536x2:_0x763a[500]};mxStencil[_0x763a[202]][_0x763a[1529]]= function(){var _0x3536x2=this[_0x763a[1527]][_0x763a[64]](_0x763a[1539])[0];if(null!= _0x3536x2&& (_0x3536x2= mxUtils[_0x763a[1540]](_0x3536x2),null!= _0x3536x2&& 0< _0x3536x2[_0x763a[67]])){this[_0x763a[1531]]= [];for(var _0x3536x3=0;_0x3536x3< _0x3536x2[_0x763a[67]];_0x3536x3++){this[_0x763a[1531]][_0x763a[207]](this[_0x763a[1541]](_0x3536x2[_0x3536x3]))}}};mxStencil[_0x763a[202]][_0x763a[1541]]= function(_0x3536x2){var _0x3536x3=Number(_0x3536x2[_0x763a[284]](_0x763a[235])),_0x3536x4=Number(_0x3536x2[_0x763a[284]](_0x763a[236]));_0x3536x2= _0x763a[500]== _0x3536x2[_0x763a[284]](_0x763a[591]);return new mxConnectionConstraint( new mxPoint(_0x3536x3,_0x3536x4),_0x3536x2)};mxStencil[_0x763a[202]][_0x763a[1542]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x3= this[_0x763a[1543]](_0x3536x2,_0x3536x3,_0x3536x4);_0x3536x2= _0x3536x2[_0x763a[284]](_0x763a[1544]);if(mxStencil[_0x763a[1530]]&& null== _0x3536x2|| _0x763a[500]== _0x3536x2){_0x3536x3= mxResources[_0x763a[203]](_0x3536x3)};return _0x3536x3};mxStencil[_0x763a[202]][_0x763a[1543]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x3= _0x3536x2[_0x763a[284]](_0x3536x3);null== _0x3536x3&& (_0x3536x2= mxUtils[_0x763a[329]](_0x3536x2),null!= _0x3536x2&& (_0x3536x2= mxUtils[_0x763a[1545]](_0x3536x2),_0x763a[279]== typeof _0x3536x2&& (_0x3536x3= _0x3536x2(_0x3536x4))));return _0x3536x3};mxStencil[_0x763a[202]][_0x763a[1546]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){this[_0x763a[1547]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,this[_0x763a[1534]],!1);this[_0x763a[1547]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,this[_0x763a[1535]],!0)};mxStencil[_0x763a[202]][_0x763a[1547]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13){if(null!= _0x3536x12){var _0x3536x14=mxUtils[_0x763a[433]](_0x3536x3[_0x763a[124]],mxConstants.STYLE_DIRECTION,null);_0x3536x4= this[_0x763a[1548]](_0x3536x3[_0x763a[124]],_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x14);_0x3536x5= Math[_0x763a[243]](_0x3536x4[_0x763a[117]],_0x3536x4[_0x763a[119]]);_0x3536x5= _0x763a[1549]== this[_0x763a[1307]]?Number(mxUtils[_0x763a[1550]](_0x3536x3[_0x763a[124]],mxConstants.STYLE_STROKEWIDTH,1)):Number(this[_0x763a[1307]])* _0x3536x5;_0x3536x2[_0x763a[1250]](_0x3536x5);for(_0x3536x12= _0x3536x12[_0x763a[285]];null!= _0x3536x12;){_0x3536x12[_0x763a[288]]== mxConstants[_0x763a[289]]&& this[_0x763a[1551]](_0x3536x2,_0x3536x3,_0x3536x12,_0x3536x4,_0x3536x13),_0x3536x12= _0x3536x12[_0x763a[287]]}}};mxStencil[_0x763a[202]][_0x763a[1548]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536x2= _0x3536x3;_0x3536x3= _0x3536x5/ this[_0x763a[1532]];var _0x3536x12=_0x3536x9/ this[_0x763a[1533]];if(_0x3536xa= _0x763a[700]== _0x3536xa|| _0x763a[701]== _0x3536xa){_0x3536x12= _0x3536x5/ this[_0x763a[1533]];_0x3536x3= _0x3536x9/ this[_0x763a[1532]];var _0x3536x13=(_0x3536x5- _0x3536x9)/ 2;_0x3536x2+= _0x3536x13;_0x3536x4-= _0x3536x13};_0x763a[1552]== this[_0x763a[1322]]&& (_0x3536x3= _0x3536x12= Math[_0x763a[243]](_0x3536x3,_0x3536x12),_0x3536xa?(_0x3536x2+= (_0x3536x9- this[_0x763a[1532]]* _0x3536x3)/ 2,_0x3536x4+= (_0x3536x5- this[_0x763a[1533]]* _0x3536x12)/ 2):(_0x3536x2+= (_0x3536x5- this[_0x763a[1532]]* _0x3536x3)/ 2,_0x3536x4+= (_0x3536x9- this[_0x763a[1533]]* _0x3536x12)/ 2));return new mxRectangle(_0x3536x2,_0x3536x4,_0x3536x3,_0x3536x12)};mxStencil[_0x763a[202]][_0x763a[1551]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=_0x3536x4[_0x763a[301]],_0x3536x12=_0x3536x5[_0x763a[235]],_0x3536x13=_0x3536x5[_0x763a[236]],_0x3536x14=_0x3536x5[_0x763a[117]],_0x3536x15=_0x3536x5[_0x763a[119]],_0x3536x16=Math[_0x763a[243]](_0x3536x14,_0x3536x15);if(_0x763a[815]== _0x3536xa){_0x3536x2[_0x763a[815]]()}else {if(_0x763a[1210]== _0x3536xa){_0x3536x2[_0x763a[1210]]()}else {if(_0x763a[1215]== _0x3536xa){_0x3536x2[_0x763a[1275]]();for(_0x3536x4= _0x3536x4[_0x763a[285]];null!= _0x3536x4;){_0x3536x4[_0x763a[288]]== mxConstants[_0x763a[289]]&& this[_0x763a[1551]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9),_0x3536x4= _0x3536x4[_0x763a[287]]}}else {if(_0x763a[268]== _0x3536xa){_0x3536x2[_0x763a[268]]()}else {if(_0x763a[582]== _0x3536xa){_0x3536x2[_0x763a[1276]](_0x3536x12+ Number(_0x3536x4[_0x763a[284]](_0x763a[235]))* _0x3536x14,_0x3536x13+ Number(_0x3536x4[_0x763a[284]](_0x763a[236]))* _0x3536x15)}else {if(_0x763a[683]== _0x3536xa){_0x3536x2[_0x763a[1277]](_0x3536x12+ Number(_0x3536x4[_0x763a[284]](_0x763a[235]))* _0x3536x14,_0x3536x13+ Number(_0x3536x4[_0x763a[284]](_0x763a[236]))* _0x3536x15)}else {if(_0x763a[1323]== _0x3536xa){_0x3536x2[_0x763a[1278]](_0x3536x12+ Number(_0x3536x4[_0x763a[284]](_0x763a[1324]))* _0x3536x14,_0x3536x13+ Number(_0x3536x4[_0x763a[284]](_0x763a[1325]))* _0x3536x15,_0x3536x12+ Number(_0x3536x4[_0x763a[284]](_0x763a[1326]))* _0x3536x14,_0x3536x13+ Number(_0x3536x4[_0x763a[284]](_0x763a[1327]))* _0x3536x15)}else {if(_0x763a[1328]== _0x3536xa){_0x3536x2[_0x763a[1279]](_0x3536x12+ Number(_0x3536x4[_0x763a[284]](_0x763a[1324]))* _0x3536x14,_0x3536x13+ Number(_0x3536x4[_0x763a[284]](_0x763a[1325]))* _0x3536x15,_0x3536x12+ Number(_0x3536x4[_0x763a[284]](_0x763a[1326]))* _0x3536x14,_0x3536x13+ Number(_0x3536x4[_0x763a[284]](_0x763a[1327]))* _0x3536x15,_0x3536x12+ Number(_0x3536x4[_0x763a[284]](_0x763a[1329]))* _0x3536x14,_0x3536x13+ Number(_0x3536x4[_0x763a[284]](_0x763a[1330]))* _0x3536x15)}else {if(_0x763a[1553]== _0x3536xa){_0x3536x2[_0x763a[1280]](Number(_0x3536x4[_0x763a[284]](_0x763a[1397]))* _0x3536x14,Number(_0x3536x4[_0x763a[284]](_0x763a[1398]))* _0x3536x15,Number(_0x3536x4[_0x763a[284]](_0x763a[1554])),Number(_0x3536x4[_0x763a[284]](_0x763a[1555])),Number(_0x3536x4[_0x763a[284]](_0x763a[1556])),_0x3536x12+ Number(_0x3536x4[_0x763a[284]](_0x763a[235]))* _0x3536x14,_0x3536x13+ Number(_0x3536x4[_0x763a[284]](_0x763a[236]))* _0x3536x15)}else {if(_0x763a[1319]== _0x3536xa){_0x3536x2[_0x763a[1319]](_0x3536x12+ Number(_0x3536x4[_0x763a[284]](_0x763a[235]))* _0x3536x14,_0x3536x13+ Number(_0x3536x4[_0x763a[284]](_0x763a[236]))* _0x3536x15,Number(_0x3536x4[_0x763a[284]](_0x763a[1302]))* _0x3536x14,Number(_0x3536x4[_0x763a[284]](_0x763a[1303]))* _0x3536x15)}else {if(_0x763a[1320]== _0x3536xa){_0x3536x3= _0x3536x4[_0x763a[284]](_0x763a[1492]),0== _0x3536x3&& (_0x3536x3= 100* mxConstants[_0x763a[1557]]),_0x3536x16= Number(_0x3536x4[_0x763a[284]](_0x763a[1302]))* _0x3536x14,_0x3536x5= Number(_0x3536x4[_0x763a[284]](_0x763a[1303]))* _0x3536x15,_0x3536x3= Number(_0x3536x3)/ 100,_0x3536x3= Math[_0x763a[243]](_0x3536x16* _0x3536x3,_0x3536x5* _0x3536x3),_0x3536x2[_0x763a[1320]](_0x3536x12+ Number(_0x3536x4[_0x763a[284]](_0x763a[235]))* _0x3536x14,_0x3536x13+ Number(_0x3536x4[_0x763a[284]](_0x763a[236]))* _0x3536x15,_0x3536x16,_0x3536x5,_0x3536x3,_0x3536x3)}else {if(_0x763a[680]== _0x3536xa){_0x3536x2[_0x763a[680]](_0x3536x12+ Number(_0x3536x4[_0x763a[284]](_0x763a[235]))* _0x3536x14,_0x3536x13+ Number(_0x3536x4[_0x763a[284]](_0x763a[236]))* _0x3536x15,Number(_0x3536x4[_0x763a[284]](_0x763a[1302]))* _0x3536x14,Number(_0x3536x4[_0x763a[284]](_0x763a[1303]))* _0x3536x15)}else {if(_0x763a[618]== _0x3536xa){_0x3536x3= this[_0x763a[1543]](_0x3536x4,_0x763a[390],_0x3536x3),_0x3536x2[_0x763a[618]](_0x3536x12+ Number(_0x3536x4[_0x763a[284]](_0x763a[235]))* _0x3536x14,_0x3536x13+ Number(_0x3536x4[_0x763a[284]](_0x763a[236]))* _0x3536x15,Number(_0x3536x4[_0x763a[284]](_0x763a[1302]))* _0x3536x14,Number(_0x3536x4[_0x763a[284]](_0x763a[1303]))* _0x3536x15,_0x3536x3,!1,_0x763a[500]== _0x3536x4[_0x763a[284]](_0x763a[623]),_0x763a[500]== _0x3536x4[_0x763a[284]](_0x763a[624]))}else {if(_0x763a[963]== _0x3536xa){_0x3536x16= this[_0x763a[1542]](_0x3536x4,_0x763a[1332],_0x3536x3);_0x3536x5= _0x763a[500]== _0x3536x4[_0x763a[284]](_0x763a[704])?-90:0;if(_0x763a[468]== _0x3536x4[_0x763a[284]](_0x763a[1558])){var _0x3536x17=_0x3536x3[_0x763a[603]],_0x3536x18=1== mxUtils[_0x763a[433]](_0x3536x3[_0x763a[124]],mxConstants.STYLE_FLIPH,0);_0x3536x3= 1== mxUtils[_0x763a[433]](_0x3536x3[_0x763a[124]],mxConstants.STYLE_FLIPV,0);_0x3536x5= _0x3536x18&& _0x3536x3?_0x3536x5- _0x3536x17:_0x3536x18|| _0x3536x3?_0x3536x5+ _0x3536x17:_0x3536x5- _0x3536x17};_0x3536x5-= _0x3536x4[_0x763a[284]](_0x763a[603]);_0x3536x2[_0x763a[963]](_0x3536x12+ Number(_0x3536x4[_0x763a[284]](_0x763a[235]))* _0x3536x14,_0x3536x13+ Number(_0x3536x4[_0x763a[284]](_0x763a[236]))* _0x3536x15,0,0,_0x3536x16,_0x3536x4[_0x763a[284]](_0x763a[611])|| _0x763a[361],_0x3536x4[_0x763a[284]](_0x763a[552])|| _0x763a[125],!1,_0x763a[110],!1,!1,_0x3536x5)}else {if(_0x763a[1559]== _0x3536xa){_0x3536x17= mxStencilRegistry[_0x763a[1560]](_0x3536x4[_0x763a[284]](_0x763a[298])),null!= _0x3536x17&& (_0x3536x12+= Number(_0x3536x4[_0x763a[284]](_0x763a[235]))* _0x3536x14,_0x3536x13+= Number(_0x3536x4[_0x763a[284]](_0x763a[236]))* _0x3536x15,_0x3536x16= Number(_0x3536x4[_0x763a[284]](_0x763a[1302]))* _0x3536x14,_0x3536x5= Number(_0x3536x4[_0x763a[284]](_0x763a[1303]))* _0x3536x15,_0x3536x17[_0x763a[1546]](_0x3536x2,_0x3536x3,_0x3536x12,_0x3536x13,_0x3536x16,_0x3536x5))}else {if(_0x763a[1338]== _0x3536xa){_0x3536x2[_0x763a[1337]]()}else {if(_0x763a[1334]== _0x3536xa){_0x3536x2[_0x763a[1334]]()}else {if(_0x763a[1336]== _0x3536xa){_0x3536x2[_0x763a[1336]]()}else {if(_0x763a[1307]== _0x3536xa){_0x3536x2[_0x763a[1250]](Number(_0x3536x4[_0x763a[284]](_0x763a[117]))* _0x3536x16)}else {if(_0x763a[648]== _0x3536xa){_0x3536x2[_0x763a[1251]](_0x763a[500]== _0x3536x4[_0x763a[284]](_0x763a[648]))}else {if(_0x763a[1308]== _0x3536xa){if(_0x3536x4= _0x3536x4[_0x763a[284]](_0x763a[1309]),null!= _0x3536x4){_0x3536x4= _0x3536x4[_0x763a[224]](_0x763a[185]);_0x3536x14= [];for(_0x3536x15= 0;_0x3536x15< _0x3536x4[_0x763a[67]];_0x3536x15++){0< _0x3536x4[_0x3536x15][_0x763a[67]]&& _0x3536x14[_0x763a[207]](Number(_0x3536x4[_0x3536x15])* _0x3536x16)};_0x3536x4= _0x3536x14[_0x763a[234]](_0x763a[185]);_0x3536x2[_0x763a[1252]](_0x3536x4)}}else {_0x763a[1306]== _0x3536xa?_0x3536x2[_0x763a[1249]](_0x3536x4[_0x763a[284]](_0x763a[352])):_0x763a[1310]== _0x3536xa?_0x3536x2[_0x763a[1253]](_0x3536x4[_0x763a[284]](_0x763a[1311])):_0x763a[1312]== _0x3536xa?_0x3536x2[_0x763a[1255]](_0x3536x4[_0x763a[284]](_0x763a[234])):_0x763a[1313]== _0x3536xa?_0x3536x2[_0x763a[1257]](Number(_0x3536x4[_0x763a[284]](_0x763a[1314]))):_0x763a[1298]== _0x3536xa?_0x3536x2[_0x763a[1245]](_0x3536x4[_0x763a[284]](_0x763a[352])):_0x763a[1244]== _0x3536xa?_0x3536x2[_0x763a[1243]](_0x3536x4[_0x763a[284]](_0x763a[1244])):_0x763a[1315]== _0x3536xa?_0x3536x2[_0x763a[1259]](_0x3536x4[_0x763a[284]](_0x763a[352])):_0x763a[1318]== _0x3536xa?_0x3536x2[_0x763a[1266]](_0x3536x4[_0x763a[284]](_0x763a[124])):_0x763a[1287]== _0x3536xa?_0x3536x2[_0x763a[1265]](_0x3536x4[_0x763a[284]](_0x763a[1288])):_0x763a[1289]== _0x3536xa&& _0x3536x2[_0x763a[1264]](Number(_0x3536x4[_0x763a[284]](_0x763a[803]))* _0x3536x16)}}}}}}}}}}}}}}}}}}}}};_0x3536x9&& (_0x763a[1338]== _0x3536xa|| _0x763a[1334]== _0x3536xa|| _0x763a[1336]== _0x3536xa)&& _0x3536x2[_0x763a[1267]](!1)};function mxShape(_0x3536x2){this[_0x763a[1561]]= _0x3536x2;this[_0x763a[1307]]= 1;this[_0x763a[603]]= 0;this[_0x763a[461]]= 100;this[_0x763a[624]]= this[_0x763a[623]]= !1}mxShape[_0x763a[202]][_0x763a[507]]= null;mxShape[_0x763a[202]][_0x763a[255]]= 1;mxShape[_0x763a[202]][_0x763a[1562]]= null;mxShape[_0x763a[202]][_0x763a[1525]]= null;mxShape[_0x763a[202]][_0x763a[252]]= null;mxShape[_0x763a[202]][_0x763a[124]]= null;mxShape[_0x763a[202]][_0x763a[124]]= null;mxShape[_0x763a[202]][_0x763a[1563]]= null;mxShape[_0x763a[202]][_0x763a[1561]]= null;mxShape[_0x763a[202]][_0x763a[1564]]= 6;mxShape[_0x763a[202]][_0x763a[1229]]= !0;mxShape[_0x763a[202]][_0x763a[1565]]= !1;mxShape[_0x763a[202]][_0x763a[1460]]= 1;mxShape[_0x763a[202]][_0x763a[176]]= function(_0x3536x2){null== this[_0x763a[252]]&& (this[_0x763a[252]]= this[_0x763a[385]](_0x3536x2),null!= _0x3536x2&& _0x3536x2[_0x763a[62]](this[_0x763a[252]]))};mxShape[_0x763a[202]][_0x763a[1566]]= function(){return !0};mxShape[_0x763a[202]][_0x763a[1567]]= function(){return !1};mxShape[_0x763a[202]][_0x763a[1568]]= function(){return 1== mxUtils[_0x763a[1454]](Math[_0x763a[160]](1,Math[_0x763a[488]](this[_0x763a[1307]]* this[_0x763a[255]])),2)?0.5:0};mxShape[_0x763a[202]][_0x763a[385]]= function(_0x3536x2){var _0x3536x3=null;return _0x3536x3= null!= _0x3536x2[_0x763a[538]]?this[_0x763a[1569]](_0x3536x2):8== document[_0x763a[5]]|| this[_0x763a[507]]== mxConstants[_0x763a[508]]|| this[_0x763a[507]]!= mxConstants[_0x763a[1523]]&& this[_0x763a[1567]]()?this[_0x763a[1570]](_0x3536x2):this[_0x763a[1571]](_0x3536x2)};mxShape[_0x763a[202]][_0x763a[1569]]= function(){return document[_0x763a[509]](mxConstants.NS_SVG,_0x763a[449])};mxShape[_0x763a[202]][_0x763a[1571]]= function(){var _0x3536x2=document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1499]);_0x3536x2[_0x763a[124]][_0x763a[491]]= _0x763a[492];return _0x3536x2};mxShape[_0x763a[202]][_0x763a[1570]]= function(){var _0x3536x2=document[_0x763a[55]](_0x763a[485]);_0x3536x2[_0x763a[124]][_0x763a[491]]= _0x763a[492];return _0x3536x2};mxShape[_0x763a[202]][_0x763a[1572]]= function(){this[_0x763a[258]]()};mxShape[_0x763a[202]][_0x763a[258]]= function(){this[_0x763a[1573]]();this[_0x763a[1574]]()?(this[_0x763a[252]][_0x763a[124]][_0x763a[187]]= _0x763a[110],_0x763a[529]== this[_0x763a[252]][_0x763a[301]]&& this[_0x763a[1567]]()?this[_0x763a[1575]]():this[_0x763a[1576]](),this[_0x763a[1577]]()):(this[_0x763a[252]][_0x763a[124]][_0x763a[187]]= _0x763a[188],this[_0x763a[1563]]= null)};mxShape[_0x763a[202]][_0x763a[1573]]= function(){var _0x3536x2=this[_0x763a[1525]];if(null!= _0x3536x2&& 0< _0x3536x2[_0x763a[67]]&& null!= _0x3536x2[0]){this[_0x763a[1562]]= new mxRectangle(Number(_0x3536x2[0][_0x763a[235]]),Number(_0x3536x2[0][_0x763a[236]]),1,1);for(var _0x3536x3=1;_0x3536x3< this[_0x763a[1525]][_0x763a[67]];_0x3536x3++){null!= _0x3536x2[_0x3536x3]&& this[_0x763a[1562]][_0x763a[99]]( new mxRectangle(Number(_0x3536x2[_0x3536x3][_0x763a[235]]),Number(_0x3536x2[_0x3536x3][_0x763a[236]]),1,1))}}};mxShape[_0x763a[202]][_0x763a[1574]]= function(){return null!= this[_0x763a[1562]]&& !isNaN(this[_0x763a[1562]][_0x763a[235]])&& !isNaN(this[_0x763a[1562]][_0x763a[236]])&& !isNaN(this[_0x763a[1562]][_0x763a[117]])&& !isNaN(this[_0x763a[1562]][_0x763a[119]])&& 0< this[_0x763a[1562]][_0x763a[117]]&& 0< this[_0x763a[1562]][_0x763a[119]]};mxShape[_0x763a[202]][_0x763a[1578]]= function(){var _0x3536x2=document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1499]);_0x3536x2[_0x763a[124]][_0x763a[491]]= _0x763a[492];_0x3536x2[_0x763a[124]][_0x763a[117]]= this[_0x763a[252]][_0x763a[124]][_0x763a[117]];_0x3536x2[_0x763a[124]][_0x763a[119]]= this[_0x763a[252]][_0x763a[124]][_0x763a[119]];return _0x3536x2};mxShape[_0x763a[202]][_0x763a[1576]]= function(){var _0x3536x2=this[_0x763a[1579]]();for(_0x3536x2[_0x763a[1229]]= this[_0x763a[1229]];this[_0x763a[252]][_0x763a[1580]]();){this[_0x763a[252]][_0x763a[266]](this[_0x763a[252]][_0x763a[1581]])};this[_0x763a[1209]](_0x3536x2);this[_0x763a[252]]!= _0x3536x2[_0x763a[813]]&& this[_0x763a[252]][_0x763a[1583]](_0x763a[1582],_0x3536x2[_0x763a[813]][_0x763a[342]]);_0x763a[529]== this[_0x763a[252]][_0x763a[301]]&& 8== document[_0x763a[5]]&& (this[_0x763a[252]][_0x763a[124]][_0x763a[347]]= _0x763a[110],(null== this[_0x763a[1561]]|| !this[_0x763a[1565]])&& mxUtils[_0x763a[1584]](this[_0x763a[252]]));this[_0x763a[1585]](_0x3536x2)};mxShape[_0x763a[202]][_0x763a[1579]]= function(){var _0x3536x2=null,_0x3536x3=null;if(null!= this[_0x763a[252]][_0x763a[538]]){_0x3536x2= new mxSvgCanvas2D(this[_0x763a[252]],!1),_0x3536x2[_0x763a[1345]]= this[_0x763a[1564]],_0x3536x2[_0x763a[1347]]= mxClient[_0x763a[133]]&& !mxClient[_0x763a[75]]&& !mxClient[_0x763a[76]],_0x3536x3= this[_0x763a[1568]](),0!= _0x3536x3?this[_0x763a[252]][_0x763a[57]](_0x763a[535],_0x763a[536]+ _0x3536x3+ _0x763a[537]+ _0x3536x3+ _0x763a[460]):this[_0x763a[252]][_0x763a[1390]](_0x763a[535])}else {this[_0x763a[1586]]();var _0x3536x4=Math[_0x763a[160]](1,Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[117]])),_0x3536x5=Math[_0x763a[160]](1,Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[119]])),_0x3536x3=8== document[_0x763a[5]]&& this[_0x763a[1566]]()?this[_0x763a[1578]]():this[_0x763a[252]],_0x3536x2= new mxVmlCanvas2D(_0x3536x3,!1);_0x763a[110]!= _0x3536x3[_0x763a[337]]&& (_0x3536x3[_0x763a[1462]]= _0x3536x4* this[_0x763a[1460]]+ _0x763a[537]+ _0x3536x5* this[_0x763a[1460]],_0x3536x2[_0x763a[255]](this[_0x763a[1460]]),_0x3536x2[_0x763a[1460]]= this[_0x763a[1460]]);_0x3536x3= this[_0x763a[255]];_0x3536x2[_0x763a[513]](-Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[235]]/ _0x3536x3),-Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[236]]/ _0x3536x3))};return _0x3536x2};mxShape[_0x763a[202]][_0x763a[1586]]= function(){this[_0x763a[252]][_0x763a[124]][_0x763a[361]]= Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[235]])+ _0x763a[168];this[_0x763a[252]][_0x763a[124]][_0x763a[125]]= Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[236]])+ _0x763a[168];var _0x3536x2=Math[_0x763a[160]](1,Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[117]])),_0x3536x3=Math[_0x763a[160]](1,Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[119]]));this[_0x763a[252]][_0x763a[124]][_0x763a[117]]= _0x3536x2+ _0x763a[168];this[_0x763a[252]][_0x763a[124]][_0x763a[119]]= _0x3536x3+ _0x763a[168];this[_0x763a[252]][_0x763a[124]][_0x763a[277]]= _0x763a[189]};mxShape[_0x763a[202]][_0x763a[1585]]= function(_0x3536x2){if(_0x3536x2 instanceof mxSvgCanvas2D){for(var _0x3536x3 in _0x3536x2[_0x763a[1339]]){var _0x3536x4=_0x3536x2[_0x763a[1339]][_0x3536x3];_0x3536x4[_0x763a[1587]]= (_0x3536x4[_0x763a[1587]]|| 0)+ 1};this[_0x763a[1589]](this[_0x763a[1588]]);this[_0x763a[1588]]= _0x3536x2[_0x763a[1339]]}};mxShape[_0x763a[202]][_0x763a[1209]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[255]],_0x3536x4=this[_0x763a[1562]][_0x763a[235]]/ _0x3536x3,_0x3536x5=this[_0x763a[1562]][_0x763a[236]]/ _0x3536x3,_0x3536x9=this[_0x763a[1562]][_0x763a[117]]/ _0x3536x3,_0x3536xa=this[_0x763a[1562]][_0x763a[119]]/ _0x3536x3;if(this[_0x763a[1590]]()){var _0x3536x12=(_0x3536x9- _0x3536xa)/ 2,_0x3536x4=_0x3536x4+ _0x3536x12,_0x3536x5=_0x3536x5- _0x3536x12,_0x3536x12=_0x3536x9,_0x3536x9=_0x3536xa,_0x3536xa=_0x3536x12};this[_0x763a[1591]](_0x3536x2,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa);this[_0x763a[1592]](_0x3536x2,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa);if(null!= this[_0x763a[1561]]){this[_0x763a[1593]](_0x3536x2,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa)}else {if(_0x3536x2[_0x763a[1250]](this[_0x763a[1307]]),null!= this[_0x763a[1525]]){_0x3536x4= [];for(_0x3536x5= 0;_0x3536x5< this[_0x763a[1525]][_0x763a[67]];_0x3536x5++){_0x3536x4[_0x763a[207]]( new mxPoint(this[_0x763a[1525]][_0x3536x5][_0x763a[235]]/ _0x3536x3,this[_0x763a[1525]][_0x3536x5][_0x763a[236]]/ _0x3536x3))};this[_0x763a[1594]](_0x3536x2,_0x3536x4)}else {this[_0x763a[1595]](_0x3536x2,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa)}}};mxShape[_0x763a[202]][_0x763a[1592]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=null;null!= this[_0x763a[124]]&& (_0x3536xa= this[_0x763a[124]][_0x763a[649]]);_0x3536x2[_0x763a[1243]](this[_0x763a[461]]/ 100);null!= this[_0x763a[1596]]&& _0x3536x2[_0x763a[1267]](this[_0x763a[1596]]);null!= this[_0x763a[1522]]&& _0x3536x2[_0x763a[1251]](this[_0x763a[1522]]);null!= _0x3536xa&& _0x3536x2[_0x763a[1252]](_0x3536xa);null!= this[_0x763a[1299]]?(_0x3536x3= this[_0x763a[1597]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9),_0x3536x2[_0x763a[1246]](this[_0x763a[1334]],this[_0x763a[1299]],_0x3536x3[_0x763a[235]],_0x3536x3[_0x763a[236]],_0x3536x3[_0x763a[117]],_0x3536x3[_0x763a[119]],this[_0x763a[607]])):_0x3536x2[_0x763a[1245]](this[_0x763a[1334]]);_0x3536x2[_0x763a[1249]](this[_0x763a[1336]])};mxShape[_0x763a[202]][_0x763a[1597]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){return new mxRectangle(_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9)};mxShape[_0x763a[202]][_0x763a[1591]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x2[_0x763a[255]](this[_0x763a[255]]);_0x3536x2[_0x763a[1294]](this[_0x763a[1598]](),this[_0x763a[623]],this[_0x763a[624]],_0x3536x3+ _0x3536x5/ 2,_0x3536x4+ _0x3536x9/ 2)};mxShape[_0x763a[202]][_0x763a[1593]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){this[_0x763a[1565]]&& (this[_0x763a[507]]== mxConstants[_0x763a[508]]?this[_0x763a[1599]](this[_0x763a[252]],_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9):8!= document[_0x763a[5]]&& this[_0x763a[1600]](this[_0x763a[252]]));this[_0x763a[1561]][_0x763a[1546]](_0x3536x2,this,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9)};mxShape[_0x763a[202]][_0x763a[1595]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){this[_0x763a[1601]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9);_0x3536x2[_0x763a[1267]](!1);this[_0x763a[1602]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9)};mxShape[_0x763a[202]][_0x763a[1601]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){};mxShape[_0x763a[202]][_0x763a[1602]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){};mxShape[_0x763a[202]][_0x763a[1594]]= function(_0x3536x2,_0x3536x3){};mxShape[_0x763a[202]][_0x763a[1603]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_ARCSIZE,100* mxConstants[_0x763a[1557]])/ 100;return Math[_0x763a[243]](_0x3536x2* _0x3536x4,_0x3536x3* _0x3536x4)};mxShape[_0x763a[202]][_0x763a[1604]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){var _0x3536x12=Math[_0x763a[430]](this[_0x763a[1307]]/ 2);_0x3536x2[_0x763a[1246]](_0x763a[1605],_0x763a[1605],_0x3536x3,_0x3536x4,_0x3536x5,0.6* _0x3536x9,_0x763a[701],0.9,0.1);_0x3536x2[_0x763a[1275]]();_0x3536xa+= 2* _0x3536x12;this[_0x763a[1606]]?(_0x3536x2[_0x763a[1276]](_0x3536x3- _0x3536x12+ _0x3536xa,_0x3536x4- _0x3536x12),_0x3536x2[_0x763a[1278]](_0x3536x3- _0x3536x12,_0x3536x4- _0x3536x12,_0x3536x3- _0x3536x12,_0x3536x4- _0x3536x12+ _0x3536xa),_0x3536x2[_0x763a[1277]](_0x3536x3- _0x3536x12,_0x3536x4+ 0.4* _0x3536x9),_0x3536x2[_0x763a[1278]](_0x3536x3+ 0.5* _0x3536x5,_0x3536x4+ 0.7* _0x3536x9,_0x3536x3+ _0x3536x5+ _0x3536x12,_0x3536x4+ 0.4* _0x3536x9),_0x3536x2[_0x763a[1277]](_0x3536x3+ _0x3536x5+ _0x3536x12,_0x3536x4- _0x3536x12+ _0x3536xa),_0x3536x2[_0x763a[1278]](_0x3536x3+ _0x3536x5+ _0x3536x12,_0x3536x4- _0x3536x12,_0x3536x3+ _0x3536x5+ _0x3536x12- _0x3536xa,_0x3536x4- _0x3536x12)):(_0x3536x2[_0x763a[1276]](_0x3536x3- _0x3536x12,_0x3536x4- _0x3536x12),_0x3536x2[_0x763a[1277]](_0x3536x3- _0x3536x12,_0x3536x4+ 0.4* _0x3536x9),_0x3536x2[_0x763a[1278]](_0x3536x3+ 0.5* _0x3536x5,_0x3536x4+ 0.7* _0x3536x9,_0x3536x3+ _0x3536x5+ _0x3536x12,_0x3536x4+ 0.4* _0x3536x9),_0x3536x2[_0x763a[1277]](_0x3536x3+ _0x3536x5+ _0x3536x12,_0x3536x4- _0x3536x12));_0x3536x2[_0x763a[268]]();_0x3536x2[_0x763a[1334]]()};mxShape[_0x763a[202]][_0x763a[183]]= function(_0x3536x2){this[_0x763a[724]]= _0x3536x2;this[_0x763a[124]]= _0x3536x2[_0x763a[124]];if(null!= this[_0x763a[124]]){this[_0x763a[1334]]= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_FILLCOLOR,this[_0x763a[1334]]);this[_0x763a[1299]]= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_GRADIENTCOLOR,this[_0x763a[1299]]);this[_0x763a[607]]= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_GRADIENT_DIRECTION,this[_0x763a[607]]);this[_0x763a[461]]= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_OPACITY,this[_0x763a[461]]);this[_0x763a[1336]]= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_STROKECOLOR,this[_0x763a[1336]]);this[_0x763a[1307]]= mxUtils[_0x763a[1550]](this[_0x763a[124]],mxConstants.STYLE_STROKEWIDTH,this[_0x763a[1307]]);this[_0x763a[657]]= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_SPACING,this[_0x763a[657]]);this[_0x763a[644]]= mxUtils[_0x763a[1550]](this[_0x763a[124]],mxConstants.STYLE_STARTSIZE,this[_0x763a[644]]);this[_0x763a[643]]= mxUtils[_0x763a[1550]](this[_0x763a[124]],mxConstants.STYLE_ENDSIZE,this[_0x763a[643]]);this[_0x763a[642]]= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_STARTARROW,this[_0x763a[642]]);this[_0x763a[641]]= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_ENDARROW,this[_0x763a[641]]);this[_0x763a[603]]= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_ROTATION,this[_0x763a[603]]);this[_0x763a[663]]= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_DIRECTION,this[_0x763a[663]]);this[_0x763a[623]]= 1== mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_FLIPH,0);this[_0x763a[624]]= 1== mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_FLIPV,0);null!= this[_0x763a[1561]]&& (this[_0x763a[623]]= 1== mxUtils[_0x763a[433]](this[_0x763a[124]],_0x763a[1607],0)|| this[_0x763a[623]],this[_0x763a[624]]= 1== mxUtils[_0x763a[433]](this[_0x763a[124]],_0x763a[1608],0)|| this[_0x763a[624]]);if(_0x763a[700]== this[_0x763a[663]]|| _0x763a[701]== this[_0x763a[663]]){_0x3536x2= this[_0x763a[623]],this[_0x763a[623]]= this[_0x763a[624]],this[_0x763a[624]]= _0x3536x2};this[_0x763a[1596]]= 1== mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_SHADOW,this[_0x763a[1596]]);this[_0x763a[1522]]= 1== mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_DASHED,this[_0x763a[1522]]);this[_0x763a[1606]]= 1== mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_ROUNDED,this[_0x763a[1606]]);this[_0x763a[617]]= 1== mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_GLASS,this[_0x763a[617]]);_0x763a[130]== this[_0x763a[1334]]&& (this[_0x763a[1334]]= null);_0x763a[130]== this[_0x763a[1299]]&& (this[_0x763a[1299]]= null);_0x763a[130]== this[_0x763a[1336]]&& (this[_0x763a[1336]]= null)}};mxShape[_0x763a[202]][_0x763a[1609]]= function(_0x3536x2){null== _0x3536x2&& (_0x3536x2= _0x763a[110]);this[_0x763a[270]]= _0x3536x2;null!= this[_0x763a[252]]&& (this[_0x763a[252]][_0x763a[124]][_0x763a[270]]= _0x3536x2)};mxShape[_0x763a[202]][_0x763a[1610]]= function(){return this[_0x763a[270]]};mxShape[_0x763a[202]][_0x763a[1577]]= function(){if(null!= this[_0x763a[1562]]){var _0x3536x2=this[_0x763a[1611]]();if(null!= _0x3536x2){this[_0x763a[1612]](_0x3536x2);var _0x3536x3=this[_0x763a[1598]]();0!= _0x3536x3&& (_0x3536x2= mxUtils[_0x763a[1613]](_0x3536x2,_0x3536x3));_0x3536x2[_0x763a[235]]= Math[_0x763a[519]](_0x3536x2[_0x763a[235]]);_0x3536x2[_0x763a[236]]= Math[_0x763a[519]](_0x3536x2[_0x763a[236]]);_0x3536x2[_0x763a[117]]= Math[_0x763a[430]](_0x3536x2[_0x763a[117]]);_0x3536x2[_0x763a[119]]= Math[_0x763a[430]](_0x3536x2[_0x763a[119]])};this[_0x763a[1563]]= _0x3536x2}};mxShape[_0x763a[202]][_0x763a[1611]]= function(){var _0x3536x2=this[_0x763a[1562]][_0x763a[238]]();if(this[_0x763a[1590]]()){var _0x3536x3=(_0x3536x2[_0x763a[117]]- _0x3536x2[_0x763a[119]])/ 2;_0x3536x2[_0x763a[235]]+= _0x3536x3;_0x3536x2[_0x763a[236]]-= _0x3536x3;_0x3536x3= _0x3536x2[_0x763a[117]];_0x3536x2[_0x763a[117]]= _0x3536x2[_0x763a[119]];_0x3536x2[_0x763a[119]]= _0x3536x3};return _0x3536x2};mxShape[_0x763a[202]][_0x763a[1612]]= function(_0x3536x2){this[_0x763a[1596]]&& (_0x3536x2[_0x763a[117]]+= Math[_0x763a[430]](mxConstants[_0x763a[1237]]* this[_0x763a[255]]),_0x3536x2[_0x763a[119]]+= Math[_0x763a[430]](mxConstants[_0x763a[1238]]* this[_0x763a[255]]));var _0x3536x3=Math[_0x763a[430]](this[_0x763a[1307]]* this[_0x763a[255]]);_0x3536x2[_0x763a[244]](Math[_0x763a[430]](_0x3536x3/ 2))};mxShape[_0x763a[202]][_0x763a[1590]]= function(){return null== this[_0x763a[1561]]&& (_0x763a[700]== this[_0x763a[663]]|| _0x763a[701]== this[_0x763a[663]])};mxShape[_0x763a[202]][_0x763a[1614]]= function(){return null!= this[_0x763a[603]]?this[_0x763a[603]]:0};mxShape[_0x763a[202]][_0x763a[1615]]= function(){var _0x3536x2=this[_0x763a[1614]]();1!= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_HORIZONTAL,1)&& (_0x3536x2+= mxText[_0x763a[202]][_0x763a[1616]]);return _0x3536x2};mxShape[_0x763a[202]][_0x763a[1598]]= function(){var _0x3536x2=this[_0x763a[1614]]();null!= this[_0x763a[663]]&& (_0x763a[700]== this[_0x763a[663]]?_0x3536x2+= 270:_0x763a[703]== this[_0x763a[663]]?_0x3536x2+= 180:_0x763a[701]== this[_0x763a[663]]&& (_0x3536x2+= 90));return _0x3536x2};mxShape[_0x763a[202]][_0x763a[1599]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x2= document[_0x763a[509]](mxConstants.NS_SVG,_0x763a[1319]);_0x3536x2[_0x763a[57]](_0x763a[235],_0x3536x3);_0x3536x2[_0x763a[57]](_0x763a[236],_0x3536x4);_0x3536x2[_0x763a[57]](_0x763a[117],_0x3536x5);_0x3536x2[_0x763a[57]](_0x763a[119],_0x3536x9);_0x3536x2[_0x763a[57]](_0x763a[1334],_0x763a[130]);_0x3536x2[_0x763a[57]](_0x763a[1336],_0x763a[130]);_0x3536x2[_0x763a[57]](_0x763a[1377],_0x763a[1378]);this[_0x763a[252]][_0x763a[62]](_0x3536x2)};mxShape[_0x763a[202]][_0x763a[1600]]= function(_0x3536x2){_0x3536x2[_0x763a[124]][_0x763a[1617]]= _0x763a[1618]+ mxClient[_0x763a[88]]+ _0x763a[1619]};mxShape[_0x763a[202]][_0x763a[1589]]= function(_0x3536x2){if(null!= _0x3536x2){for(var _0x3536x3 in _0x3536x2){var _0x3536x4=_0x3536x2[_0x3536x3];_0x3536x4[_0x763a[1587]]= (_0x3536x4[_0x763a[1587]]|| 0)- 1;0== _0x3536x4[_0x763a[1587]]&& null!= _0x3536x4[_0x763a[265]]&& _0x3536x4[_0x763a[265]][_0x763a[266]](_0x3536x4)}}};mxShape[_0x763a[202]][_0x763a[515]]= function(){null!= this[_0x763a[252]]&& (mxEvent[_0x763a[762]](this[_0x763a[252]]),null!= this[_0x763a[252]][_0x763a[265]]&& this[_0x763a[252]][_0x763a[265]][_0x763a[266]](this[_0x763a[252]]),this[_0x763a[252]]= null);this[_0x763a[1589]](this[_0x763a[1588]]);this[_0x763a[1588]]= null};var mxStencilRegistry={stencils:[],addStencil:function(_0x3536x2,_0x3536x3){mxStencilRegistry[_0x763a[1620]][_0x3536x2]= _0x3536x3},getStencil:function(_0x3536x2){return mxStencilRegistry[_0x763a[1620]][_0x3536x2]}},mxMarker={markers:[],addMarker:function(_0x3536x2,_0x3536x3){mxMarker[_0x763a[1621]][_0x3536x2]= _0x3536x3},createMarker:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15){var _0x3536x16=mxMarker[_0x763a[1621]][_0x3536x4];return null!= _0x3536x16?_0x3536x16(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15):null}};(function(){function _0x3536x2(_0x3536x2,_0x3536x3,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15,_0x3536x16,_0x3536x17){_0x3536x3= 1.118* _0x3536x12* _0x3536x16;_0x3536x15= 1.118* _0x3536x13* _0x3536x16;_0x3536x12*= _0x3536x14+ _0x3536x16;_0x3536x13*= _0x3536x14+ _0x3536x16;var _0x3536x18=_0x3536xa[_0x763a[238]]();_0x3536x18[_0x763a[235]]-= _0x3536x3;_0x3536x18[_0x763a[236]]-= _0x3536x15;_0x3536x14= _0x3536x9!= mxConstants[_0x763a[1622]]?1:0.75;_0x3536xa[_0x763a[235]]+= -_0x3536x12* _0x3536x14- _0x3536x3;_0x3536xa[_0x763a[236]]+= -_0x3536x13* _0x3536x14- _0x3536x15;return function(){_0x3536x2[_0x763a[1275]]();_0x3536x2[_0x763a[1276]](_0x3536x18[_0x763a[235]],_0x3536x18[_0x763a[236]]);_0x3536x2[_0x763a[1277]](_0x3536x18[_0x763a[235]]- _0x3536x12- _0x3536x13/ 2,_0x3536x18[_0x763a[236]]- _0x3536x13+ _0x3536x12/ 2);_0x3536x9== mxConstants[_0x763a[1622]]&& _0x3536x2[_0x763a[1277]](_0x3536x18[_0x763a[235]]- 3* _0x3536x12/ 4,_0x3536x18[_0x763a[236]]- 3* _0x3536x13/ 4);_0x3536x2[_0x763a[1277]](_0x3536x18[_0x763a[235]]+ _0x3536x13/ 2- _0x3536x12,_0x3536x18[_0x763a[236]]- _0x3536x13- _0x3536x12/ 2);_0x3536x2[_0x763a[268]]();_0x3536x17?_0x3536x2[_0x763a[1337]]():_0x3536x2[_0x763a[1336]]()}}function _0x3536x3(_0x3536x2,_0x3536x3,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15,_0x3536x16,_0x3536x17){_0x3536x15= _0x3536x9== mxConstants[_0x763a[1623]]?0.7071:0.9862;_0x3536x3= _0x3536x12* _0x3536x16* _0x3536x15;_0x3536x15*= _0x3536x13* _0x3536x16;_0x3536x12*= _0x3536x14+ _0x3536x16;_0x3536x13*= _0x3536x14+ _0x3536x16;var _0x3536x18=_0x3536xa[_0x763a[238]]();_0x3536x18[_0x763a[235]]-= _0x3536x3;_0x3536x18[_0x763a[236]]-= _0x3536x15;_0x3536xa[_0x763a[235]]+= -_0x3536x12- _0x3536x3;_0x3536xa[_0x763a[236]]+= -_0x3536x13- _0x3536x15;var _0x3536x19=_0x3536x9== mxConstants[_0x763a[1623]]?2:3.4;return function(){_0x3536x2[_0x763a[1275]]();_0x3536x2[_0x763a[1276]](_0x3536x18[_0x763a[235]],_0x3536x18[_0x763a[236]]);_0x3536x2[_0x763a[1277]](_0x3536x18[_0x763a[235]]- _0x3536x12/ 2- _0x3536x13/ _0x3536x19,_0x3536x18[_0x763a[236]]+ _0x3536x12/ _0x3536x19- _0x3536x13/ 2);_0x3536x2[_0x763a[1277]](_0x3536x18[_0x763a[235]]- _0x3536x12,_0x3536x18[_0x763a[236]]- _0x3536x13);_0x3536x2[_0x763a[1277]](_0x3536x18[_0x763a[235]]- _0x3536x12/ 2+ _0x3536x13/ _0x3536x19,_0x3536x18[_0x763a[236]]- _0x3536x13/ 2- _0x3536x12/ _0x3536x19);_0x3536x2[_0x763a[268]]();_0x3536x17?_0x3536x2[_0x763a[1337]]():_0x3536x2[_0x763a[1336]]()}}mxMarker[_0x763a[1624]](_0x763a[693],_0x3536x2);mxMarker[_0x763a[1624]](_0x763a[694],_0x3536x2);mxMarker[_0x763a[1624]](_0x763a[392],function(_0x3536x2,_0x3536x3,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15,_0x3536x16,_0x3536x17){_0x3536x3= 1.118* _0x3536x12* _0x3536x16;_0x3536x9= 1.118* _0x3536x13* _0x3536x16;_0x3536x12*= _0x3536x14+ _0x3536x16;_0x3536x13*= _0x3536x14+ _0x3536x16;var _0x3536x18=_0x3536xa[_0x763a[238]]();_0x3536x18[_0x763a[235]]-= _0x3536x3;_0x3536x18[_0x763a[236]]-= _0x3536x9;_0x3536xa[_0x763a[235]]+= 2* -_0x3536x3;_0x3536xa[_0x763a[236]]+= 2* -_0x3536x9;return function(){_0x3536x2[_0x763a[1275]]();_0x3536x2[_0x763a[1276]](_0x3536x18[_0x763a[235]]- _0x3536x12- _0x3536x13/ 2,_0x3536x18[_0x763a[236]]- _0x3536x13+ _0x3536x12/ 2);_0x3536x2[_0x763a[1277]](_0x3536x18[_0x763a[235]],_0x3536x18[_0x763a[236]]);_0x3536x2[_0x763a[1277]](_0x3536x18[_0x763a[235]]+ _0x3536x13/ 2- _0x3536x12,_0x3536x18[_0x763a[236]]- _0x3536x13- _0x3536x12/ 2);_0x3536x2[_0x763a[1336]]()}});mxMarker[_0x763a[1624]](_0x763a[695],function(_0x3536x2,_0x3536x3,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15,_0x3536x16,_0x3536x17){var _0x3536x18=_0x3536x14/ 2,_0x3536x19=_0x3536xa[_0x763a[238]]();_0x3536xa[_0x763a[235]]-= _0x3536x12* _0x3536x18;_0x3536xa[_0x763a[236]]-= _0x3536x13* _0x3536x18;return function(){_0x3536x2[_0x763a[680]](_0x3536x19[_0x763a[235]]- _0x3536x18,_0x3536x19[_0x763a[236]]- _0x3536x18,_0x3536x14,_0x3536x14);_0x3536x17?_0x3536x2[_0x763a[1337]]():_0x3536x2[_0x763a[1336]]()}});mxMarker[_0x763a[1624]](_0x763a[696],_0x3536x3);mxMarker[_0x763a[1624]](_0x763a[697],_0x3536x3)})();function mxActor(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){mxShape[_0x763a[239]](this);this[_0x763a[1562]]= _0x3536x2;this[_0x763a[1334]]= _0x3536x3;this[_0x763a[1336]]= _0x3536x4;this[_0x763a[1307]]= null!= _0x3536x5?_0x3536x5:1}mxUtils[_0x763a[1284]](mxActor,mxShape);mxActor[_0x763a[202]][_0x763a[1595]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x2[_0x763a[513]](_0x3536x3,_0x3536x4);_0x3536x2[_0x763a[1275]]();this[_0x763a[1625]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9);_0x3536x2[_0x763a[1337]]()};mxActor[_0x763a[202]][_0x763a[1625]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x3= _0x3536x5/ 3;_0x3536x2[_0x763a[1276]](0,_0x3536x9);_0x3536x2[_0x763a[1279]](0,3* _0x3536x9/ 5,0,2* _0x3536x9/ 5,_0x3536x5/ 2,2* _0x3536x9/ 5);_0x3536x2[_0x763a[1279]](_0x3536x5/ 2- _0x3536x3,2* _0x3536x9/ 5,_0x3536x5/ 2- _0x3536x3,0,_0x3536x5/ 2,0);_0x3536x2[_0x763a[1279]](_0x3536x5/ 2+ _0x3536x3,0,_0x3536x5/ 2+ _0x3536x3,2* _0x3536x9/ 5,_0x3536x5/ 2,2* _0x3536x9/ 5);_0x3536x2[_0x763a[1279]](_0x3536x5,2* _0x3536x9/ 5,_0x3536x5,3* _0x3536x9/ 5,_0x3536x5,_0x3536x9);_0x3536x2[_0x763a[268]]()};function mxCloud(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){mxActor[_0x763a[239]](this);this[_0x763a[1562]]= _0x3536x2;this[_0x763a[1334]]= _0x3536x3;this[_0x763a[1336]]= _0x3536x4;this[_0x763a[1307]]= null!= _0x3536x5?_0x3536x5:1}mxUtils[_0x763a[1284]](mxCloud,mxActor);mxCloud[_0x763a[202]][_0x763a[1625]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x2[_0x763a[1276]](0.25* _0x3536x5,0.25* _0x3536x9);_0x3536x2[_0x763a[1279]](0.05* _0x3536x5,0.25* _0x3536x9,0,0.5* _0x3536x9,0.16* _0x3536x5,0.55* _0x3536x9);_0x3536x2[_0x763a[1279]](0,0.66* _0x3536x9,0.18* _0x3536x5,0.9* _0x3536x9,0.31* _0x3536x5,0.8* _0x3536x9);_0x3536x2[_0x763a[1279]](0.4* _0x3536x5,_0x3536x9,0.7* _0x3536x5,_0x3536x9,0.8* _0x3536x5,0.8* _0x3536x9);_0x3536x2[_0x763a[1279]](_0x3536x5,0.8* _0x3536x9,_0x3536x5,0.6* _0x3536x9,0.875* _0x3536x5,0.5* _0x3536x9);_0x3536x2[_0x763a[1279]](_0x3536x5,0.3* _0x3536x9,0.8* _0x3536x5,0.1* _0x3536x9,0.625* _0x3536x5,0.2* _0x3536x9);_0x3536x2[_0x763a[1279]](0.5* _0x3536x5,0.05* _0x3536x9,0.3* _0x3536x5,0.05* _0x3536x9,0.25* _0x3536x5,0.25* _0x3536x9);_0x3536x2[_0x763a[268]]()};function mxRectangleShape(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){mxShape[_0x763a[239]](this);this[_0x763a[1562]]= _0x3536x2;this[_0x763a[1334]]= _0x3536x3;this[_0x763a[1336]]= _0x3536x4;this[_0x763a[1307]]= null!= _0x3536x5?_0x3536x5:1}mxUtils[_0x763a[1284]](mxRectangleShape,mxShape);mxRectangleShape[_0x763a[202]][_0x763a[1567]]= function(){return !this[_0x763a[1606]]&& !this[_0x763a[617]]&& 0== this[_0x763a[603]]};mxRectangleShape[_0x763a[202]][_0x763a[1601]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){if(this[_0x763a[1606]]){var _0x3536xa=mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_ARCSIZE,100* mxConstants[_0x763a[1557]])/ 100,_0x3536xa=Math[_0x763a[243]](_0x3536x5* _0x3536xa,_0x3536x9* _0x3536xa);_0x3536x2[_0x763a[1320]](_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536xa)}else {_0x3536x2[_0x763a[1319]](_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9)};_0x3536x2[_0x763a[1337]]()};mxRectangleShape[_0x763a[202]][_0x763a[1602]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){this[_0x763a[617]]&& this[_0x763a[1604]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,this[_0x763a[1603]](_0x3536x5+ this[_0x763a[1307]],_0x3536x9+ this[_0x763a[1307]]))};mxRectangleShape[_0x763a[202]][_0x763a[1575]]= function(){this[_0x763a[1626]](this[_0x763a[252]]);this[_0x763a[1627]](this[_0x763a[252]]);this[_0x763a[1628]](this[_0x763a[252]])};mxRectangleShape[_0x763a[202]][_0x763a[1626]]= function(_0x3536x2){var _0x3536x3=9<= document[_0x763a[5]]?0:Math[_0x763a[430]](this[_0x763a[1307]]* this[_0x763a[255]]);_0x3536x2[_0x763a[124]][_0x763a[1629]]= Math[_0x763a[160]](1,_0x3536x3)+ _0x763a[168];_0x3536x2[_0x763a[124]][_0x763a[277]]= _0x763a[188];_0x3536x2[_0x763a[124]][_0x763a[361]]= Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[235]]- _0x3536x3/ 2)+ _0x763a[168];_0x3536x2[_0x763a[124]][_0x763a[125]]= Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[236]]- _0x3536x3/ 2)+ _0x763a[168];_0x763a[462]== document[_0x763a[135]]&& (_0x3536x3= -_0x3536x3);_0x3536x2[_0x763a[124]][_0x763a[117]]= Math[_0x763a[488]](Math[_0x763a[160]](0,this[_0x763a[1562]][_0x763a[117]]+ _0x3536x3))+ _0x763a[168];_0x3536x2[_0x763a[124]][_0x763a[119]]= Math[_0x763a[488]](Math[_0x763a[160]](0,this[_0x763a[1562]][_0x763a[119]]+ _0x3536x3))+ _0x763a[168]};mxRectangleShape[_0x763a[202]][_0x763a[1628]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1336]];null!= _0x3536x3&& _0x3536x3!= mxConstants[_0x763a[217]]?(_0x3536x2[_0x763a[124]][_0x763a[1630]]= _0x3536x3,this[_0x763a[1522]]?_0x3536x2[_0x763a[124]][_0x763a[465]]= _0x763a[648]:0< this[_0x763a[1307]]&& (_0x3536x2[_0x763a[124]][_0x763a[465]]= _0x763a[1631]),_0x3536x2[_0x763a[124]][_0x763a[1629]]= Math[_0x763a[160]](1,Math[_0x763a[430]](this[_0x763a[1307]]* this[_0x763a[255]]))+ _0x763a[168]):_0x3536x2[_0x763a[124]][_0x763a[1629]]= _0x763a[946];_0x3536x3= this[_0x763a[1334]];null!= _0x3536x3&& _0x3536x3!= mxConstants[_0x763a[217]]?(_0x3536x2[_0x763a[124]][_0x763a[1028]]= _0x3536x3,_0x3536x2[_0x763a[124]][_0x763a[1617]]= _0x763a[130]):this[_0x763a[1229]]?_0x3536x2[_0x763a[124]][_0x763a[1028]]= _0x763a[1373]:8== document[_0x763a[5]]?mxUtils[_0x763a[1584]](_0x3536x2):this[_0x763a[1600]](_0x3536x2)};mxRectangleShape[_0x763a[202]][_0x763a[1627]]= function(_0x3536x2){var _0x3536x3=_0x763a[110];100> this[_0x763a[461]]&& (_0x3536x3+= _0x763a[459]+ this[_0x763a[461]]+ _0x763a[460]);this[_0x763a[1596]]&& (_0x3536x3+= _0x763a[1632]+ Math[_0x763a[488]](mxConstants[_0x763a[1237]]* this[_0x763a[255]])+ _0x763a[1633]+ Math[_0x763a[488]](mxConstants[_0x763a[1238]]* this[_0x763a[255]])+ _0x763a[1634]+ mxConstants[_0x763a[1235]]+ _0x763a[1635]);if(this[_0x763a[1299]]){var _0x3536x4=this[_0x763a[1334]],_0x3536x5=this[_0x763a[1299]],_0x3536x9=_0x763a[468],_0x3536xa={east:0,south:1,west:2,north:3},_0x3536x12=null!= this[_0x763a[663]]?_0x3536xa[this[_0x763a[663]]]:0;null!= this[_0x763a[607]]&& (_0x3536x12= mxUtils[_0x763a[1454]](_0x3536x12+ _0x3536xa[this[_0x763a[607]]]- 1,4));1== _0x3536x12?(_0x3536x9= _0x763a[500],_0x3536xa= _0x3536x4,_0x3536x4= _0x3536x5,_0x3536x5= _0x3536xa):2== _0x3536x12?(_0x3536xa= _0x3536x4,_0x3536x4= _0x3536x5,_0x3536x5= _0x3536xa):3== _0x3536x12&& (_0x3536x9= _0x763a[500]);_0x3536x3+= _0x763a[1636]+ _0x3536x4+ _0x763a[1637]+ _0x3536x5+ _0x763a[1638]+ _0x3536x9+ _0x763a[1635]};_0x3536x2[_0x763a[124]][_0x763a[347]]= _0x3536x3};function mxEllipse(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){mxShape[_0x763a[239]](this);this[_0x763a[1562]]= _0x3536x2;this[_0x763a[1334]]= _0x3536x3;this[_0x763a[1336]]= _0x3536x4;this[_0x763a[1307]]= null!= _0x3536x5?_0x3536x5:1}mxUtils[_0x763a[1284]](mxEllipse,mxShape);mxEllipse[_0x763a[202]][_0x763a[1595]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x2[_0x763a[680]](_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9);_0x3536x2[_0x763a[1337]]()};function mxDoubleEllipse(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){mxShape[_0x763a[239]](this);this[_0x763a[1562]]= _0x3536x2;this[_0x763a[1334]]= _0x3536x3;this[_0x763a[1336]]= _0x3536x4;this[_0x763a[1307]]= null!= _0x3536x5?_0x3536x5:1}mxUtils[_0x763a[1284]](mxDoubleEllipse,mxShape);mxDoubleEllipse[_0x763a[202]][_0x763a[1460]]= 10;mxDoubleEllipse[_0x763a[202]][_0x763a[1601]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x2[_0x763a[680]](_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9);_0x3536x2[_0x763a[1337]]()};mxDoubleEllipse[_0x763a[202]][_0x763a[1602]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=Math[_0x763a[243]](4,Math[_0x763a[243]](_0x3536x5/ 5,_0x3536x9/ 5));_0x3536x5-= 2* _0x3536xa;_0x3536x9-= 2* _0x3536xa;0< _0x3536x5&& 0< _0x3536x9&& _0x3536x2[_0x763a[680]](_0x3536x3+ _0x3536xa,_0x3536x4+ _0x3536xa,_0x3536x5,_0x3536x9);_0x3536x2[_0x763a[1336]]()};function mxRhombus(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){mxShape[_0x763a[239]](this);this[_0x763a[1562]]= _0x3536x2;this[_0x763a[1334]]= _0x3536x3;this[_0x763a[1336]]= _0x3536x4;this[_0x763a[1307]]= null!= _0x3536x5?_0x3536x5:1}mxUtils[_0x763a[1284]](mxRhombus,mxShape);mxRhombus[_0x763a[202]][_0x763a[1595]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=_0x3536x5/ 2,_0x3536x12=_0x3536x9/ 2;_0x3536x2[_0x763a[1275]]();_0x3536x2[_0x763a[1276]](_0x3536x3+ _0x3536xa,_0x3536x4);_0x3536x2[_0x763a[1277]](_0x3536x3+ _0x3536x5,_0x3536x4+ _0x3536x12);_0x3536x2[_0x763a[1277]](_0x3536x3+ _0x3536xa,_0x3536x4+ _0x3536x9);_0x3536x2[_0x763a[1277]](_0x3536x3,_0x3536x4+ _0x3536x12);_0x3536x2[_0x763a[268]]();_0x3536x2[_0x763a[1337]]()};function mxPolyline(_0x3536x2,_0x3536x3,_0x3536x4){mxShape[_0x763a[239]](this);this[_0x763a[1525]]= _0x3536x2;this[_0x763a[1336]]= _0x3536x3;this[_0x763a[1307]]= null!= _0x3536x4?_0x3536x4:1}mxUtils[_0x763a[1284]](mxPolyline,mxShape);mxPolyline[_0x763a[202]][_0x763a[1614]]= function(){return 0};mxPolyline[_0x763a[202]][_0x763a[1594]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1639]](_0x3536x2,_0x3536x3,this[_0x763a[1606]])};mxPolyline[_0x763a[202]][_0x763a[1639]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_ARCSIZE,mxConstants.LINE_ARCSIZE)/ 2,_0x3536x9=_0x3536x3[0],_0x3536xa=_0x3536x3[_0x3536x3[_0x763a[67]]- 1];_0x3536x2[_0x763a[1275]]();_0x3536x2[_0x763a[1276]](_0x3536x9[_0x763a[235]],_0x3536x9[_0x763a[236]]);for(var _0x3536x12=1;_0x3536x12< _0x3536x3[_0x763a[67]]- 1;_0x3536x12++){var _0x3536x13=_0x3536x3[_0x3536x12],_0x3536x14=_0x3536x9[_0x763a[235]]- _0x3536x13[_0x763a[235]],_0x3536x9=_0x3536x9[_0x763a[236]]- _0x3536x13[_0x763a[236]];if(_0x3536x4&& _0x3536x12< _0x3536x3[_0x763a[67]]- 1&& (0!= _0x3536x14|| 0!= _0x3536x9)){var _0x3536x15=Math[_0x763a[428]](_0x3536x14* _0x3536x14+ _0x3536x9* _0x3536x9),_0x3536x14=_0x3536x14* Math[_0x763a[243]](_0x3536x5,_0x3536x15/ 2)/ _0x3536x15,_0x3536x9=_0x3536x9* Math[_0x763a[243]](_0x3536x5,_0x3536x15/ 2)/ _0x3536x15;_0x3536x2[_0x763a[1277]](_0x3536x13[_0x763a[235]]+ _0x3536x14,_0x3536x13[_0x763a[236]]+ _0x3536x9);_0x3536x9= _0x3536x3[_0x3536x12+ 1];_0x3536x14= _0x3536x9[_0x763a[235]]- _0x3536x13[_0x763a[235]];_0x3536x9= _0x3536x9[_0x763a[236]]- _0x3536x13[_0x763a[236]];_0x3536x15= Math[_0x763a[160]](1,Math[_0x763a[428]](_0x3536x14* _0x3536x14+ _0x3536x9* _0x3536x9));_0x3536x14= _0x3536x14* Math[_0x763a[243]](_0x3536x5,_0x3536x15/ 2)/ _0x3536x15;_0x3536x9= _0x3536x9* Math[_0x763a[243]](_0x3536x5,_0x3536x15/ 2)/ _0x3536x15;_0x3536x14= _0x3536x13[_0x763a[235]]+ _0x3536x14;_0x3536x9= _0x3536x13[_0x763a[236]]+ _0x3536x9;_0x3536x2[_0x763a[1278]](_0x3536x13[_0x763a[235]],_0x3536x13[_0x763a[236]],_0x3536x14,_0x3536x9);_0x3536x13= new mxPoint(_0x3536x14,_0x3536x9)}else {_0x3536x2[_0x763a[1277]](_0x3536x13[_0x763a[235]],_0x3536x13[_0x763a[236]])};_0x3536x9= _0x3536x13};_0x3536x2[_0x763a[1277]](_0x3536xa[_0x763a[235]],_0x3536xa[_0x763a[236]]);_0x3536x2[_0x763a[1336]]()};function mxArrow(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12){mxShape[_0x763a[239]](this);this[_0x763a[1525]]= _0x3536x2;this[_0x763a[1334]]= _0x3536x3;this[_0x763a[1336]]= _0x3536x4;this[_0x763a[1307]]= null!= _0x3536x5?_0x3536x5:1;this[_0x763a[1640]]= null!= _0x3536x9?_0x3536x9:mxConstants[_0x763a[1641]];this[_0x763a[657]]= null!= _0x3536xa?_0x3536xa:mxConstants[_0x763a[1642]];this[_0x763a[643]]= null!= _0x3536x12?_0x3536x12:mxConstants[_0x763a[1643]]}mxUtils[_0x763a[1284]](mxArrow,mxShape);mxArrow[_0x763a[202]][_0x763a[1594]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=mxConstants[_0x763a[1642]],_0x3536x5=mxConstants[_0x763a[1641]],_0x3536x9=mxConstants[_0x763a[1643]],_0x3536xa=_0x3536x3[0],_0x3536x12=_0x3536x3[_0x3536x3[_0x763a[67]]- 1],_0x3536x13=_0x3536x12[_0x763a[235]]- _0x3536xa[_0x763a[235]],_0x3536x14=_0x3536x12[_0x763a[236]]- _0x3536xa[_0x763a[236]],_0x3536x15=Math[_0x763a[428]](_0x3536x13* _0x3536x13+ _0x3536x14* _0x3536x14),_0x3536x16=_0x3536x15- 2* _0x3536x4- _0x3536x9,_0x3536x13=_0x3536x13/ _0x3536x15,_0x3536x14=_0x3536x14/ _0x3536x15,_0x3536x15=_0x3536x5* _0x3536x14/ 3,_0x3536x5=-_0x3536x5* _0x3536x13/ 3,_0x3536x9=_0x3536xa[_0x763a[235]]- _0x3536x15/ 2+ _0x3536x4* _0x3536x13,_0x3536xa=_0x3536xa[_0x763a[236]]- _0x3536x5/ 2+ _0x3536x4* _0x3536x14,_0x3536x17=_0x3536x9+ _0x3536x15,_0x3536x18=_0x3536xa+ _0x3536x5,_0x3536x19=_0x3536x17+ _0x3536x16* _0x3536x13,_0x3536x16=_0x3536x18+ _0x3536x16* _0x3536x14,_0x3536x1a=_0x3536x19+ _0x3536x15,_0x3536x1b=_0x3536x16+ _0x3536x5,_0x3536x1c=_0x3536x1a- 3* _0x3536x15,_0x3536x1d=_0x3536x1b- 3* _0x3536x5;_0x3536x2[_0x763a[1275]]();_0x3536x2[_0x763a[1276]](_0x3536x9,_0x3536xa);_0x3536x2[_0x763a[1277]](_0x3536x17,_0x3536x18);_0x3536x2[_0x763a[1277]](_0x3536x19,_0x3536x16);_0x3536x2[_0x763a[1277]](_0x3536x1a,_0x3536x1b);_0x3536x2[_0x763a[1277]](_0x3536x12[_0x763a[235]]- _0x3536x4* _0x3536x13,_0x3536x12[_0x763a[236]]- _0x3536x4* _0x3536x14);_0x3536x2[_0x763a[1277]](_0x3536x1c,_0x3536x1d);_0x3536x2[_0x763a[1277]](_0x3536x1c+ _0x3536x15,_0x3536x1d+ _0x3536x5);_0x3536x2[_0x763a[268]]();_0x3536x2[_0x763a[1337]]()};function mxText(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15,_0x3536x16,_0x3536x17,_0x3536x18,_0x3536x19,_0x3536x1a,_0x3536x1b,_0x3536x1c,_0x3536x1d,_0x3536x1e,_0x3536x1f){mxShape[_0x763a[239]](this);this[_0x763a[131]]= _0x3536x2;this[_0x763a[1562]]= _0x3536x3;this[_0x763a[352]]= null!= _0x3536x9?_0x3536x9:_0x763a[586];this[_0x763a[611]]= null!= _0x3536x4?_0x3536x4:_0x763a[110];this[_0x763a[552]]= null!= _0x3536x5?_0x3536x5:_0x763a[110];this[_0x763a[1288]]= null!= _0x3536xa?_0x3536xa:mxConstants[_0x763a[484]];this[_0x763a[803]]= null!= _0x3536x12?_0x3536x12:mxConstants[_0x763a[483]];this[_0x763a[666]]= null!= _0x3536x13?_0x3536x13:mxConstants[_0x763a[1644]];this[_0x763a[657]]= parseInt(_0x3536x14|| 2);this[_0x763a[658]]= this[_0x763a[657]]+ parseInt(_0x3536x15|| 0);this[_0x763a[661]]= this[_0x763a[657]]+ parseInt(_0x3536x16|| 0);this[_0x763a[660]]= this[_0x763a[657]]+ parseInt(_0x3536x17|| 0);this[_0x763a[659]]= this[_0x763a[657]]+ parseInt(_0x3536x18|| 0);this[_0x763a[662]]= null!= _0x3536x19?_0x3536x19:!0;this[_0x763a[1537]]= _0x3536x1a;this[_0x763a[467]]= _0x3536x1b;this[_0x763a[1333]]= null!= _0x3536x1c?_0x3536x1c:!1;this[_0x763a[1645]]= null!= _0x3536x1d?_0x3536x1d:!1;this[_0x763a[277]]= null!= _0x3536x1e?_0x3536x1e:_0x763a[189];this[_0x763a[629]]= null!= _0x3536x1f?_0x3536x1f:0;this[_0x763a[603]]= 0}mxUtils[_0x763a[1284]](mxText,mxShape);mxText[_0x763a[202]][_0x763a[1646]]= 0;mxText[_0x763a[202]][_0x763a[1647]]= 0;mxText[_0x763a[202]][_0x763a[1648]]= 0;mxText[_0x763a[202]][_0x763a[1649]]= 0;mxText[_0x763a[202]][_0x763a[1650]]= !0;mxText[_0x763a[202]][_0x763a[1616]]= -90;mxText[_0x763a[202]][_0x763a[1651]]= !0;mxText[_0x763a[202]][_0x763a[1652]]= !1;mxText[_0x763a[202]][_0x763a[1566]]= function(){return !1};mxText[_0x763a[202]][_0x763a[1567]]= function(){return 8!= document[_0x763a[5]]};mxText[_0x763a[202]][_0x763a[1568]]= function(){return 0};mxText[_0x763a[202]][_0x763a[1574]]= function(){return null!= this[_0x763a[1562]]&& !isNaN(this[_0x763a[1562]][_0x763a[235]])&& !isNaN(this[_0x763a[1562]][_0x763a[236]])&& !isNaN(this[_0x763a[1562]][_0x763a[117]])&& !isNaN(this[_0x763a[1562]][_0x763a[119]])};mxText[_0x763a[202]][_0x763a[1577]]= function(){var _0x3536x2=this[_0x763a[252]];8== document[_0x763a[5]]&& null!= _0x3536x2[_0x763a[285]]&& (_0x3536x2= _0x3536x2[_0x763a[285]],null!= _0x3536x2[_0x763a[285]]&& (_0x3536x2= _0x3536x2[_0x763a[285]]));this[_0x763a[1563]]= this[_0x763a[1562]][_0x763a[238]]();var _0x3536x3=this[_0x763a[1615]]();if(!this[_0x763a[1652]]&& null!= _0x3536x2&& _0x763a[1334]!= this[_0x763a[277]]&& (!this[_0x763a[1645]]|| !this[_0x763a[1651]])){var _0x3536x4=null,_0x3536x5=null;if(null!= _0x3536x2[_0x763a[538]]){if(null!= _0x3536x2[_0x763a[285]]&& null!= _0x3536x2[_0x763a[285]][_0x763a[285]]&& _0x763a[1435]== _0x3536x2[_0x763a[285]][_0x763a[285]][_0x763a[301]]){_0x3536x2= _0x3536x2[_0x763a[285]][_0x763a[285]],_0x3536x4= this[_0x763a[1333]]?this[_0x763a[1562]][_0x763a[117]]:parseInt(_0x3536x2[_0x763a[284]](_0x763a[117]))* this[_0x763a[255]],_0x3536x5= parseInt(_0x3536x2[_0x763a[284]](_0x763a[119]))* this[_0x763a[255]]}else {_0x3536x3= _0x3536x2[_0x763a[1451]]();if(0== _0x3536x3[_0x763a[117]]&& 0== _0x3536x3[_0x763a[119]]){return};this[_0x763a[1563]]= new mxRectangle(_0x3536x3[_0x763a[235]],_0x3536x3[_0x763a[236]],_0x3536x3[_0x763a[117]],_0x3536x3[_0x763a[119]]);_0x3536x3= 0}}else {_0x3536x5= this[_0x763a[724]][_0x763a[441]][_0x763a[1653]],null!= this[_0x763a[359]]&& null!= this[_0x763a[167]]?(_0x3536x4= this[_0x763a[1333]]?this[_0x763a[1562]][_0x763a[117]]:this[_0x763a[359]]* this[_0x763a[255]],_0x3536x5= this[_0x763a[167]]* this[_0x763a[255]]):null!= _0x3536x5?(this[_0x763a[1441]](_0x3536x5),this[_0x763a[1654]](_0x3536x5),mxUtils[_0x763a[1331]](this[_0x763a[131]])?_0x3536x5[_0x763a[339]]= this[_0x763a[131]][_0x763a[342]]:(_0x3536x4= this[_0x763a[1650]]?this[_0x763a[131]][_0x763a[230]](/\n/g,_0x763a[1453]):this[_0x763a[131]],_0x3536x5[_0x763a[339]]= _0x3536x4),_0x3536x4= this[_0x763a[1333]]?this[_0x763a[1562]][_0x763a[117]]:_0x3536x5[_0x763a[359]]* this[_0x763a[255]],_0x3536x5= _0x3536x5[_0x763a[167]]* this[_0x763a[255]]):(_0x3536x4= this[_0x763a[1333]]?this[_0x763a[1562]][_0x763a[117]]:_0x3536x2[_0x763a[359]]* this[_0x763a[255]],_0x3536x5= _0x3536x2[_0x763a[167]]* this[_0x763a[255]])};null!= _0x3536x4&& null!= _0x3536x5&& (this[_0x763a[1563]]= new mxRectangle(this[_0x763a[1562]][_0x763a[235]]+ this[_0x763a[1655]][_0x763a[235]]* _0x3536x4,this[_0x763a[1562]][_0x763a[236]]+ this[_0x763a[1655]][_0x763a[236]]* _0x3536x5,_0x3536x4,_0x3536x5))}else {this[_0x763a[1563]][_0x763a[235]]+= this[_0x763a[1655]][_0x763a[235]]* this[_0x763a[1563]][_0x763a[117]],this[_0x763a[1563]][_0x763a[236]]+= this[_0x763a[1655]][_0x763a[236]]* this[_0x763a[1563]][_0x763a[119]]};null!= this[_0x763a[1563]]&& (0!= _0x3536x3&& (_0x3536x3= mxUtils[_0x763a[1613]](this[_0x763a[1563]],_0x3536x3),this[_0x763a[1563]][_0x763a[235]]= _0x3536x3[_0x763a[235]],this[_0x763a[1563]][_0x763a[236]]= _0x3536x3[_0x763a[236]],mxClient[_0x763a[496]]|| (this[_0x763a[1563]][_0x763a[117]]= _0x3536x3[_0x763a[117]],this[_0x763a[1563]][_0x763a[119]]= _0x3536x3[_0x763a[119]])),this[_0x763a[1563]][_0x763a[235]]= Math[_0x763a[519]](this[_0x763a[1563]][_0x763a[235]]),this[_0x763a[1563]][_0x763a[236]]= Math[_0x763a[519]](this[_0x763a[1563]][_0x763a[236]]),this[_0x763a[1563]][_0x763a[117]]= Math[_0x763a[430]](this[_0x763a[1563]][_0x763a[117]]),this[_0x763a[1563]][_0x763a[119]]= Math[_0x763a[430]](this[_0x763a[1563]][_0x763a[119]]))};mxText[_0x763a[202]][_0x763a[1598]]= function(){return 0};mxText[_0x763a[202]][_0x763a[1615]]= function(){return null!= this[_0x763a[724]]&& null!= this[_0x763a[724]][_0x763a[253]]?this[_0x763a[724]][_0x763a[253]][_0x763a[1615]]():0};mxText[_0x763a[202]][_0x763a[1590]]= function(){return !this[_0x763a[662]]&& null!= this[_0x763a[724]]&& this[_0x763a[724]][_0x763a[441]][_0x763a[1179]][_0x763a[251]][_0x763a[1193]](this[_0x763a[724]][_0x763a[246]])};mxText[_0x763a[202]][_0x763a[1592]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){mxShape[_0x763a[202]][_0x763a[1592]][_0x763a[183]](this,arguments);_0x3536x2[_0x763a[1259]](this[_0x763a[352]]);_0x3536x2[_0x763a[1260]](this[_0x763a[1537]]);_0x3536x2[_0x763a[1262]](this[_0x763a[467]]);_0x3536x2[_0x763a[1265]](this[_0x763a[1288]]);_0x3536x2[_0x763a[1264]](this[_0x763a[803]]);_0x3536x2[_0x763a[1266]](this[_0x763a[666]])};mxText[_0x763a[202]][_0x763a[1586]]= function(){this[_0x763a[252]][_0x763a[124]][_0x763a[361]]= Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[235]])+ _0x763a[168];this[_0x763a[252]][_0x763a[124]][_0x763a[125]]= Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[236]])+ _0x763a[168];this[_0x763a[252]][_0x763a[124]][_0x763a[117]]= _0x763a[942];this[_0x763a[252]][_0x763a[124]][_0x763a[119]]= _0x763a[942];this[_0x763a[252]][_0x763a[124]][_0x763a[277]]= _0x763a[189]};mxText[_0x763a[202]][_0x763a[1209]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[255]],_0x3536x4=this[_0x763a[1562]][_0x763a[235]]/ _0x3536x3,_0x3536x5=this[_0x763a[1562]][_0x763a[236]]/ _0x3536x3,_0x3536x9=this[_0x763a[1562]][_0x763a[117]]/ _0x3536x3,_0x3536x3=this[_0x763a[1562]][_0x763a[119]]/ _0x3536x3;this[_0x763a[1591]](_0x3536x2,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536x3);this[_0x763a[1592]](_0x3536x2,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536x3);var _0x3536xa=mxUtils[_0x763a[1331]](this[_0x763a[131]])|| this[_0x763a[507]]== mxConstants[_0x763a[1656]],_0x3536x12=_0x3536xa|| _0x3536x2 instanceof mxVmlCanvas2D?_0x763a[1428]:_0x763a[110],_0x3536x13=this[_0x763a[131]];!_0x3536xa&& _0x763a[1428]== _0x3536x12&& (_0x3536x13= mxUtils[_0x763a[321]](_0x3536x13,!1));_0x3536x13= !mxUtils[_0x763a[1331]](this[_0x763a[131]])&& this[_0x763a[1650]]&& _0x763a[1428]== _0x3536x12?_0x3536x13[_0x763a[230]](/\n/g,_0x763a[1453]):_0x3536x13;_0x3536x2[_0x763a[963]](_0x3536x4,_0x3536x5,_0x3536x9,_0x3536x3,_0x3536x13,this[_0x763a[611]],this[_0x763a[552]],this[_0x763a[1333]],_0x3536x12,_0x763a[1334]== this[_0x763a[277]],this[_0x763a[1645]],this[_0x763a[1615]]())};mxText[_0x763a[202]][_0x763a[1575]]= function(){var _0x3536x2=this[_0x763a[252]][_0x763a[124]];_0x3536x2[_0x763a[461]]= 1> this[_0x763a[461]]?this[_0x763a[461]]:_0x763a[110];_0x3536x2[_0x763a[277]]= _0x763a[110];_0x3536x2[_0x763a[117]]= _0x763a[110];_0x3536x2[_0x763a[119]]= _0x763a[110];this[_0x763a[1441]](this[_0x763a[252]]);this[_0x763a[1654]](this[_0x763a[252]]);this[_0x763a[1657]]();this[_0x763a[167]]= this[_0x763a[359]]= null;null!= mxClient[_0x763a[73]]?this[_0x763a[1658]]():this[_0x763a[1659]]()};mxText[_0x763a[202]][_0x763a[1658]]= function(){var _0x3536x2=this[_0x763a[1615]](),_0x3536x3=this[_0x763a[252]][_0x763a[124]],_0x3536x4=this[_0x763a[1655]][_0x763a[235]],_0x3536x5=this[_0x763a[1655]][_0x763a[236]];0!= _0x3536x2?(_0x3536x3[mxClient[_0x763a[73]]+ _0x763a[1660]]= 100* -_0x3536x4+ _0x763a[1661]+ 100* -_0x3536x5+ _0x763a[229],_0x3536x3[mxClient[_0x763a[73]]+ _0x763a[1662]]= _0x763a[536]+ 100* _0x3536x4+ _0x763a[1663]+ 100* _0x3536x5+ _0x763a[1664]+ this[_0x763a[255]]+ _0x763a[1665]+ _0x3536x2+ _0x763a[1666]):(_0x3536x3[mxClient[_0x763a[73]]+ _0x763a[1660]]= _0x763a[1667],_0x3536x3[mxClient[_0x763a[73]]+ _0x763a[1662]]= _0x763a[1402]+ this[_0x763a[255]]+ _0x763a[1393]+ 100* _0x3536x4+ _0x763a[1663]+ 100* _0x3536x5+ _0x763a[1668]);_0x3536x3[_0x763a[361]]= Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[235]])+ _0x763a[168];_0x3536x3[_0x763a[125]]= Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[236]])+ _0x763a[168]};mxText[_0x763a[202]][_0x763a[1659]]= function(){var _0x3536x2=this[_0x763a[252]][_0x763a[124]],_0x3536x3=this[_0x763a[1655]][_0x763a[235]],_0x3536x4=this[_0x763a[1655]][_0x763a[236]],_0x3536x5=this[_0x763a[255]];_0x3536x2[_0x763a[347]]= _0x763a[110];var _0x3536x9=0,_0x3536xa=0,_0x3536x12=null!= this[_0x763a[724]]?this[_0x763a[724]][_0x763a[441]][_0x763a[1653]]:null;if(null!= _0x3536x12){_0x3536x12[_0x763a[124]][_0x763a[277]]= _0x763a[110];_0x3536x12[_0x763a[124]][_0x763a[119]]= _0x763a[110];_0x3536x12[_0x763a[124]][_0x763a[117]]= _0x763a[110];this[_0x763a[1441]](_0x3536x12);this[_0x763a[1654]](_0x3536x12);if(mxUtils[_0x763a[1331]](this[_0x763a[131]])){_0x3536x12[_0x763a[339]]= this[_0x763a[131]][_0x763a[342]]}else {var _0x3536x13=this[_0x763a[131]];this[_0x763a[507]]!= mxConstants[_0x763a[1656]]&& (_0x3536x13= mxUtils[_0x763a[321]](_0x3536x13,!1));_0x3536x13= this[_0x763a[1650]]?_0x3536x13[_0x763a[230]](/\n/g,_0x763a[1453]):_0x3536x13;_0x3536x12[_0x763a[339]]= _0x3536x13};_0x3536x9= _0x3536x12[_0x763a[359]]+ 2;_0x3536xa= _0x3536x12[_0x763a[167]]+ 2}else {_0x3536x9= this[_0x763a[252]][_0x763a[359]],_0x3536xa= this[_0x763a[252]][_0x763a[167]]+ 1};this[_0x763a[359]]= _0x3536x9;this[_0x763a[167]]= _0x3536xa;_0x3536x12= this[_0x763a[1562]][_0x763a[117]]/ _0x3536x5;_0x3536x13= this[_0x763a[1562]][_0x763a[119]]/ _0x3536x5;mxClient[_0x763a[496]]&& (this[_0x763a[1645]]|| _0x763a[1334]== this[_0x763a[277]])&& 0< _0x3536x13?(_0x3536x13= Math[_0x763a[243]](_0x3536x13,_0x3536xa),_0x3536x2[_0x763a[119]]= Math[_0x763a[488]](_0x3536x13+ 1)+ _0x763a[168]):_0x3536x13= _0x3536xa;_0x763a[1334]!= this[_0x763a[277]]&& (mxClient[_0x763a[496]]&& (this[_0x763a[1645]]|| this[_0x763a[1333]])&& 0< _0x3536x12?(_0x3536x12= Math[_0x763a[243]](_0x3536x12,_0x3536x9),_0x3536x2[_0x763a[117]]= Math[_0x763a[488]](_0x3536x12)+ _0x763a[168]):_0x3536x12= _0x3536x9);var _0x3536x13=_0x3536x13* _0x3536x5,_0x3536x12=_0x3536x12* _0x3536x5,_0x3536x9=this[_0x763a[1615]]()* (Math[_0x763a[424]]/ 180),_0x3536xa=parseFloat(parseFloat(Math[_0x763a[426]](_0x3536x9))[_0x763a[1293]](8)),_0x3536x14=parseFloat(parseFloat(Math[_0x763a[427]](-_0x3536x9))[_0x763a[1293]](8)),_0x3536x9=_0x3536x9% (2* Math[_0x763a[424]]);0> _0x3536x9&& (_0x3536x9+= 2* Math[_0x763a[424]]);_0x3536x9%= Math[_0x763a[424]];_0x3536x9> Math[_0x763a[424]]/ 2&& (_0x3536x9= Math[_0x763a[424]]- _0x3536x9);var _0x3536x15=Math[_0x763a[426]](_0x3536x9),_0x3536x16=Math[_0x763a[427]](-_0x3536x9),_0x3536x3=_0x3536x12* -(_0x3536x3+ 0.5),_0x3536x4=_0x3536x13* -(_0x3536x4+ 0.5),_0x3536x17=(_0x3536x13- _0x3536x13* _0x3536x15+ _0x3536x12* _0x3536x16)/ 2+ _0x3536x14* _0x3536x3- _0x3536xa* _0x3536x4;0!= _0x3536x9&& (_0x3536x2[_0x763a[347]]= _0x763a[1505]+ _0x3536xa+ _0x763a[1506]+ _0x3536x14+ _0x763a[1507]+ -_0x3536x14+ _0x763a[1508]+ _0x3536xa+ _0x763a[1509]);_0x3536x2[_0x763a[499]]= _0x3536x5;_0x3536x2[_0x763a[361]]= Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[235]]+ ((_0x3536x12- _0x3536x12* _0x3536x15+ _0x3536x13* _0x3536x16)/ 2- _0x3536xa* _0x3536x3- _0x3536x14* _0x3536x4)- _0x3536x12/ 2)+ _0x763a[168];_0x3536x2[_0x763a[125]]= Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[236]]+ _0x3536x17- _0x3536x13/ 2)+ _0x763a[168]};mxText[_0x763a[202]][_0x763a[1657]]= function(){if(mxUtils[_0x763a[1331]](this[_0x763a[131]])){this[_0x763a[252]][_0x763a[339]]= _0x763a[110],this[_0x763a[252]][_0x763a[62]](this[_0x763a[131]])}else {var _0x3536x2=this[_0x763a[131]];this[_0x763a[507]]!= mxConstants[_0x763a[1656]]&& (_0x3536x2= mxUtils[_0x763a[321]](_0x3536x2,!1));var _0x3536x2=this[_0x763a[1650]]?_0x3536x2[_0x763a[230]](/\n/g,_0x763a[1453]):_0x3536x2,_0x3536x3=null!= this[_0x763a[1537]]&& this[_0x763a[1537]]!= mxConstants[_0x763a[217]]?this[_0x763a[1537]]:null,_0x3536x4=null!= this[_0x763a[467]]&& this[_0x763a[467]]!= mxConstants[_0x763a[217]]?this[_0x763a[467]]:null;if(null!= _0x3536x3|| null!= _0x3536x4){if(_0x763a[1334]== this[_0x763a[277]]){null!= _0x3536x3&& (this[_0x763a[252]][_0x763a[124]][_0x763a[1028]]= _0x3536x3),null!= _0x3536x4&& (this[_0x763a[252]][_0x763a[124]][_0x763a[467]]= _0x763a[1669]+ _0x3536x4)}else {var _0x3536x5=_0x763a[110];null!= _0x3536x3&& (_0x3536x5+= _0x763a[1418]+ _0x3536x3+ _0x763a[471]);null!= _0x3536x4&& (_0x3536x5+= _0x763a[1419]+ _0x3536x4+ _0x763a[471]);_0x3536x2= _0x763a[1670]+ _0x3536x5+ _0x763a[1671]+ this[_0x763a[252]][_0x763a[124]][_0x763a[489]]+ _0x763a[1423]+ _0x3536x2+ _0x763a[1424];this[_0x763a[252]][_0x763a[124]][_0x763a[489]]= _0x763a[110]}};this[_0x763a[252]][_0x763a[339]]= _0x3536x2}};mxText[_0x763a[202]][_0x763a[1441]]= function(_0x3536x2){_0x3536x2= _0x3536x2[_0x763a[124]];_0x3536x2[_0x763a[489]]= Math[_0x763a[488]](this[_0x763a[803]]* mxConstants[_0x763a[490]])+ _0x763a[168];_0x3536x2[_0x763a[487]]= Math[_0x763a[488]](this[_0x763a[803]])+ _0x763a[168];_0x3536x2[_0x763a[486]]= this[_0x763a[1288]];_0x3536x2[_0x763a[123]]= _0x763a[125];_0x3536x2[_0x763a[352]]= this[_0x763a[352]];_0x3536x2[_0x763a[1452]]= (this[_0x763a[666]]& mxConstants[_0x763a[1410]])== mxConstants[_0x763a[1410]]?_0x763a[1447]:_0x763a[110];_0x3536x2[_0x763a[666]]= (this[_0x763a[666]]& mxConstants[_0x763a[1412]])== mxConstants[_0x763a[1412]]?_0x763a[1449]:_0x763a[110];_0x3536x2[_0x763a[1498]]= (this[_0x763a[666]]& mxConstants[_0x763a[1414]])== mxConstants[_0x763a[1414]]?_0x763a[355]:_0x763a[110];_0x3536x2[_0x763a[1165]]= this[_0x763a[611]]== mxConstants[_0x763a[479]]?_0x763a[698]:this[_0x763a[611]]== mxConstants[_0x763a[480]]?_0x763a[699]:_0x763a[361]};mxText[_0x763a[202]][_0x763a[1654]]= function(_0x3536x2){var _0x3536x3=Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[117]]/ this[_0x763a[255]]),_0x3536x4=Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[119]]/ this[_0x763a[255]]);_0x3536x2= _0x3536x2[_0x763a[124]];this[_0x763a[1645]]?(_0x3536x2[_0x763a[277]]= _0x763a[188],0< _0x3536x4&& (_0x3536x2[_0x763a[1503]]= _0x3536x4+ _0x763a[168]),0< _0x3536x3&& (_0x3536x2[_0x763a[117]]= _0x3536x3+ _0x763a[168])):_0x763a[1334]== this[_0x763a[277]]&& (_0x3536x2[_0x763a[117]]= _0x3536x3+ _0x763a[168],0< _0x3536x4&& (_0x3536x2[_0x763a[1503]]= _0x3536x4+ _0x763a[168]));this[_0x763a[1333]]?(!this[_0x763a[1645]]&& 0< _0x3536x3&& (_0x3536x2[_0x763a[117]]= _0x3536x3+ _0x763a[168]),_0x3536x2[_0x763a[493]]= _0x763a[1502]):_0x3536x2[_0x763a[493]]= _0x763a[494]};mxText[_0x763a[202]][_0x763a[1672]]= function(){this[_0x763a[1655]]= mxUtils[_0x763a[1501]](this[_0x763a[611]],this[_0x763a[552]])};mxText[_0x763a[202]][_0x763a[1673]]= function(){var _0x3536x2=0,_0x3536x3=0,_0x3536x2=this[_0x763a[611]]== mxConstants[_0x763a[479]]?(this[_0x763a[659]]- this[_0x763a[661]])/ 2:this[_0x763a[611]]== mxConstants[_0x763a[480]]?-this[_0x763a[661]]- this[_0x763a[1649]]:this[_0x763a[659]]+ this[_0x763a[1648]],_0x3536x3=this[_0x763a[552]]== mxConstants[_0x763a[481]]?(this[_0x763a[658]]- this[_0x763a[660]])/ 2:this[_0x763a[552]]== mxConstants[_0x763a[482]]?-this[_0x763a[660]]- this[_0x763a[1647]]:this[_0x763a[658]]+ this[_0x763a[1646]];return new mxPoint(_0x3536x2,_0x3536x3)};function mxTriangle(){mxActor[_0x763a[239]](this)}mxUtils[_0x763a[1284]](mxTriangle,mxActor);mxTriangle[_0x763a[202]][_0x763a[1625]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x2[_0x763a[1276]](0,0);_0x3536x2[_0x763a[1277]](_0x3536x5,0.5* _0x3536x9);_0x3536x2[_0x763a[1277]](0,_0x3536x9);_0x3536x2[_0x763a[268]]()};function mxHexagon(){mxActor[_0x763a[239]](this)}mxUtils[_0x763a[1284]](mxHexagon,mxActor);mxHexagon[_0x763a[202]][_0x763a[1625]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x2[_0x763a[1276]](0.25* _0x3536x5,0);_0x3536x2[_0x763a[1277]](0.75* _0x3536x5,0);_0x3536x2[_0x763a[1277]](_0x3536x5,0.5* _0x3536x9);_0x3536x2[_0x763a[1277]](0.75* _0x3536x5,_0x3536x9);_0x3536x2[_0x763a[1277]](0.25* _0x3536x5,_0x3536x9);_0x3536x2[_0x763a[1277]](0,0.5* _0x3536x9);_0x3536x2[_0x763a[268]]()};function mxLine(_0x3536x2,_0x3536x3,_0x3536x4){mxShape[_0x763a[239]](this);this[_0x763a[1562]]= _0x3536x2;this[_0x763a[1336]]= _0x3536x3;this[_0x763a[1307]]= null!= _0x3536x4?_0x3536x4:1}mxUtils[_0x763a[1284]](mxLine,mxShape);mxLine[_0x763a[202]][_0x763a[1595]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x4+= _0x3536x9/ 2;_0x3536x2[_0x763a[1275]]();_0x3536x2[_0x763a[1276]](_0x3536x3,_0x3536x4);_0x3536x2[_0x763a[1277]](_0x3536x3+ _0x3536x5,_0x3536x4);_0x3536x2[_0x763a[1336]]()};function mxImageShape(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){mxShape[_0x763a[239]](this);this[_0x763a[1562]]= _0x3536x2;this[_0x763a[618]]= _0x3536x3;this[_0x763a[1334]]= _0x3536x4;this[_0x763a[1336]]= _0x3536x5;this[_0x763a[1307]]= null!= _0x3536x9?_0x3536x9:1;this[_0x763a[639]]= !1}mxUtils[_0x763a[1284]](mxImageShape,mxRectangleShape);mxImageShape[_0x763a[202]][_0x763a[1674]]= !0;mxImageShape[_0x763a[202]][_0x763a[1568]]= function(){return !mxClient[_0x763a[80]]?0.5:0};mxImageShape[_0x763a[202]][_0x763a[183]]= function(_0x3536x2){mxShape[_0x763a[202]][_0x763a[183]][_0x763a[183]](this,arguments);this[_0x763a[1299]]= this[_0x763a[1336]]= this[_0x763a[1334]]= null;null!= this[_0x763a[124]]&& (this[_0x763a[1334]]= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_IMAGE_BACKGROUND),this[_0x763a[1336]]= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_IMAGE_BORDER),this[_0x763a[1674]]= 1== mxUtils[_0x763a[1550]](this[_0x763a[124]],mxConstants.STYLE_IMAGE_ASPECT,1),this[_0x763a[623]]= this[_0x763a[623]]|| 1== mxUtils[_0x763a[433]](this[_0x763a[124]],_0x763a[1675],0),this[_0x763a[624]]= this[_0x763a[624]]|| 1== mxUtils[_0x763a[433]](this[_0x763a[124]],_0x763a[1676],0))};mxImageShape[_0x763a[202]][_0x763a[1567]]= function(){return !this[_0x763a[1674]]};mxImageShape[_0x763a[202]][_0x763a[1570]]= function(){var _0x3536x2=document[_0x763a[55]](_0x763a[485]);_0x3536x2[_0x763a[124]][_0x763a[491]]= _0x763a[492];return _0x3536x2};mxImageShape[_0x763a[202]][_0x763a[1595]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){if(null!= this[_0x763a[618]]){var _0x3536xa=mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_IMAGE_BACKGROUND,null),_0x3536x12=mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_IMAGE_BORDER,null);if(null!= _0x3536xa|| null!= _0x3536x12){_0x3536x2[_0x763a[1245]](_0x3536xa),_0x3536x2[_0x763a[1249]](_0x3536x12),_0x3536x2[_0x763a[1319]](_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9),_0x3536x2[_0x763a[1337]]()};_0x3536x2[_0x763a[618]](_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,this[_0x763a[618]],this[_0x763a[1674]],!1,!1)}else {mxRectangleShape[_0x763a[202]][_0x763a[1601]][_0x763a[183]](this,arguments)}};mxImageShape[_0x763a[202]][_0x763a[1575]]= function(){this[_0x763a[252]][_0x763a[124]][_0x763a[361]]= Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[235]])+ _0x763a[168];this[_0x763a[252]][_0x763a[124]][_0x763a[125]]= Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[236]])+ _0x763a[168];this[_0x763a[252]][_0x763a[124]][_0x763a[117]]= Math[_0x763a[160]](0,Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[117]]))+ _0x763a[168];this[_0x763a[252]][_0x763a[124]][_0x763a[119]]= Math[_0x763a[160]](0,Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[119]]))+ _0x763a[168];this[_0x763a[252]][_0x763a[124]][_0x763a[1028]]= this[_0x763a[1334]]|| _0x763a[110];this[_0x763a[252]][_0x763a[124]][_0x763a[1630]]= this[_0x763a[1336]]|| _0x763a[110];this[_0x763a[252]][_0x763a[339]]= _0x763a[110];if(null!= this[_0x763a[618]]){var _0x3536x2=document[_0x763a[55]](mxClient[_0x763a[49]]|| null== mxClient[_0x763a[73]]&& 0!= this[_0x763a[603]]?mxClient[_0x763a[463]]+ _0x763a[464]:_0x763a[466]);_0x3536x2[_0x763a[124]][_0x763a[491]]= _0x763a[492];_0x3536x2[_0x763a[390]]= this[_0x763a[618]];var _0x3536x3=100> this[_0x763a[461]]?_0x763a[459]+ this[_0x763a[461]]+ _0x763a[460]:_0x763a[110];this[_0x763a[252]][_0x763a[124]][_0x763a[347]]= _0x3536x3;this[_0x763a[623]]&& this[_0x763a[624]]?_0x3536x3+= _0x763a[1677]:this[_0x763a[623]]?_0x3536x3+= _0x763a[1678]:this[_0x763a[624]]&& (_0x3536x3+= _0x763a[1679]);_0x3536x2[_0x763a[124]][_0x763a[347]]!= _0x3536x3&& (_0x3536x2[_0x763a[124]][_0x763a[347]]= _0x3536x3);_0x763a[618]== _0x3536x2[_0x763a[301]]?_0x3536x2[_0x763a[124]][_0x763a[603]]= this[_0x763a[603]]:_0x3536x2[_0x763a[124]][mxClient[_0x763a[73]]+ _0x763a[1662]]= _0x763a[1394]+ this[_0x763a[603]]+ _0x763a[1666];_0x3536x2[_0x763a[124]][_0x763a[117]]= this[_0x763a[252]][_0x763a[124]][_0x763a[117]];_0x3536x2[_0x763a[124]][_0x763a[119]]= this[_0x763a[252]][_0x763a[124]][_0x763a[119]];this[_0x763a[252]][_0x763a[124]][_0x763a[1617]]= _0x763a[110];this[_0x763a[252]][_0x763a[62]](_0x3536x2)}else {this[_0x763a[1600]](this[_0x763a[252]])}};function mxLabel(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){mxRectangleShape[_0x763a[239]](this,_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5)}mxUtils[_0x763a[1284]](mxLabel,mxRectangleShape);mxLabel[_0x763a[202]][_0x763a[1680]]= mxConstants[_0x763a[1681]];mxLabel[_0x763a[202]][_0x763a[657]]= 2;mxLabel[_0x763a[202]][_0x763a[1682]]= 10;mxLabel[_0x763a[202]][_0x763a[635]]= 2;mxLabel[_0x763a[202]][_0x763a[176]]= function(_0x3536x2){mxShape[_0x763a[202]][_0x763a[176]][_0x763a[183]](this,arguments);null!= this[_0x763a[632]]&& null!= this[_0x763a[630]]&& (this[_0x763a[1683]]= new this[_0x763a[630]],this[_0x763a[1683]][_0x763a[507]]= this[_0x763a[507]],this[_0x763a[1683]][_0x763a[1562]]= this[_0x763a[1562]],this[_0x763a[1683]][_0x763a[1334]]= this[_0x763a[632]],this[_0x763a[1683]][_0x763a[1336]]= this[_0x763a[632]],this[_0x763a[1683]][_0x763a[1299]]= this[_0x763a[634]],this[_0x763a[1683]][_0x763a[663]]= this[_0x763a[638]],this[_0x763a[1683]][_0x763a[176]](this[_0x763a[252]]))};mxLabel[_0x763a[202]][_0x763a[258]]= function(){null!= this[_0x763a[1683]]&& (this[_0x763a[1683]][_0x763a[1334]]= this[_0x763a[632]],this[_0x763a[1683]][_0x763a[1336]]= this[_0x763a[632]],this[_0x763a[1683]][_0x763a[1299]]= this[_0x763a[634]],this[_0x763a[1683]][_0x763a[663]]= this[_0x763a[638]]);mxShape[_0x763a[202]][_0x763a[258]][_0x763a[183]](this,arguments)};mxLabel[_0x763a[202]][_0x763a[1567]]= function(){return mxRectangleShape[_0x763a[202]][_0x763a[1567]][_0x763a[183]](this,arguments)&& null== this[_0x763a[632]]&& null== this[_0x763a[630]]};mxLabel[_0x763a[202]][_0x763a[1602]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){this[_0x763a[1684]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9);this[_0x763a[1685]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9);mxRectangleShape[_0x763a[202]][_0x763a[1602]][_0x763a[183]](this,arguments)};mxLabel[_0x763a[202]][_0x763a[1684]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){null!= this[_0x763a[618]]&& (_0x3536x3= this[_0x763a[1686]](_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9),_0x3536x2[_0x763a[618]](_0x3536x3[_0x763a[235]],_0x3536x3[_0x763a[236]],_0x3536x3[_0x763a[117]],_0x3536x3[_0x763a[119]],this[_0x763a[618]],!1,!1,!1))};mxLabel[_0x763a[202]][_0x763a[1686]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_IMAGE_ALIGN,mxConstants.ALIGN_LEFT),_0x3536xa=mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),_0x3536x12=mxUtils[_0x763a[1550]](this[_0x763a[124]],mxConstants.STYLE_IMAGE_WIDTH,mxConstants.DEFAULT_IMAGESIZE),_0x3536x13=mxUtils[_0x763a[1550]](this[_0x763a[124]],mxConstants.STYLE_IMAGE_HEIGHT,mxConstants.DEFAULT_IMAGESIZE),_0x3536x14=mxUtils[_0x763a[1550]](this[_0x763a[124]],mxConstants.STYLE_SPACING,this[_0x763a[657]])+ 5;_0x3536x2= _0x3536x9== mxConstants[_0x763a[479]]?_0x3536x2+ (_0x3536x4- _0x3536x12)/ 2:_0x3536x9== mxConstants[_0x763a[480]]?_0x3536x2+ (_0x3536x4- _0x3536x12- _0x3536x14):_0x3536x2+ _0x3536x14;_0x3536x3= _0x3536xa== mxConstants[_0x763a[1687]]?_0x3536x3+ _0x3536x14:_0x3536xa== mxConstants[_0x763a[482]]?_0x3536x3+ (_0x3536x5- _0x3536x13- _0x3536x14):_0x3536x3+ (_0x3536x5- _0x3536x13)/ 2;return new mxRectangle(_0x3536x2,_0x3536x3,_0x3536x12,_0x3536x13)};mxLabel[_0x763a[202]][_0x763a[1685]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){null!= this[_0x763a[1683]]?(this[_0x763a[1683]][_0x763a[1562]]= this[_0x763a[1688]](_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9),this[_0x763a[1683]][_0x763a[1209]](_0x3536x2)):null!= this[_0x763a[631]]&& (_0x3536x3= this[_0x763a[1688]](_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9),_0x3536x2[_0x763a[618]](_0x3536x3[_0x763a[235]],_0x3536x3[_0x763a[236]],_0x3536x3[_0x763a[117]],_0x3536x3[_0x763a[119]],this[_0x763a[631]],!1,!1,!1))};mxLabel[_0x763a[202]][_0x763a[1688]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_IMAGE_ALIGN,mxConstants.ALIGN_LEFT),_0x3536xa=mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_IMAGE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),_0x3536x12=mxUtils[_0x763a[1550]](this[_0x763a[124]],mxConstants.STYLE_INDICATOR_WIDTH,this[_0x763a[1682]]),_0x3536x13=mxUtils[_0x763a[1550]](this[_0x763a[124]],mxConstants.STYLE_INDICATOR_HEIGHT,this[_0x763a[1682]]),_0x3536x14=this[_0x763a[657]]+ 5;_0x3536x2= _0x3536x9== mxConstants[_0x763a[480]]?_0x3536x2+ (_0x3536x4- _0x3536x12- _0x3536x14):_0x3536x9== mxConstants[_0x763a[479]]?_0x3536x2+ (_0x3536x4- _0x3536x12)/ 2:_0x3536x2+ _0x3536x14;_0x3536x3= _0x3536xa== mxConstants[_0x763a[482]]?_0x3536x3+ (_0x3536x5- _0x3536x13- _0x3536x14):_0x3536xa== mxConstants[_0x763a[1687]]?_0x3536x3+ _0x3536x14:_0x3536x3+ (_0x3536x5- _0x3536x13)/ 2;return new mxRectangle(_0x3536x2,_0x3536x3,_0x3536x12,_0x3536x13)};mxLabel[_0x763a[202]][_0x763a[1575]]= function(){for(mxRectangleShape[_0x763a[202]][_0x763a[1575]][_0x763a[183]](this,arguments);this[_0x763a[252]][_0x763a[1580]]();){this[_0x763a[252]][_0x763a[266]](this[_0x763a[252]][_0x763a[1581]])};if(null!= this[_0x763a[618]]){var _0x3536x2=document[_0x763a[55]](_0x763a[466]);_0x3536x2[_0x763a[124]][_0x763a[491]]= _0x763a[1500];_0x3536x2[_0x763a[57]](_0x763a[467],_0x763a[468]);var _0x3536x3=this[_0x763a[1686]](this[_0x763a[1562]][_0x763a[235]],this[_0x763a[1562]][_0x763a[236]],this[_0x763a[1562]][_0x763a[117]],this[_0x763a[1562]][_0x763a[119]]);_0x3536x3[_0x763a[235]]-= this[_0x763a[1562]][_0x763a[235]];_0x3536x3[_0x763a[236]]-= this[_0x763a[1562]][_0x763a[236]];_0x3536x2[_0x763a[124]][_0x763a[361]]= Math[_0x763a[488]](_0x3536x3[_0x763a[235]])+ _0x763a[168];_0x3536x2[_0x763a[124]][_0x763a[125]]= Math[_0x763a[488]](_0x3536x3[_0x763a[236]])+ _0x763a[168];_0x3536x2[_0x763a[124]][_0x763a[117]]= Math[_0x763a[488]](_0x3536x3[_0x763a[117]])+ _0x763a[168];_0x3536x2[_0x763a[124]][_0x763a[119]]= Math[_0x763a[488]](_0x3536x3[_0x763a[119]])+ _0x763a[168];_0x3536x2[_0x763a[390]]= this[_0x763a[618]];this[_0x763a[252]][_0x763a[62]](_0x3536x2)}};function mxCylinder(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){mxShape[_0x763a[239]](this);this[_0x763a[1562]]= _0x3536x2;this[_0x763a[1334]]= _0x3536x3;this[_0x763a[1336]]= _0x3536x4;this[_0x763a[1307]]= null!= _0x3536x5?_0x3536x5:1}mxUtils[_0x763a[1284]](mxCylinder,mxShape);mxCylinder[_0x763a[202]][_0x763a[1503]]= 40;mxCylinder[_0x763a[202]][_0x763a[1564]]= 0;mxCylinder[_0x763a[202]][_0x763a[1595]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x2[_0x763a[513]](_0x3536x3,_0x3536x4);_0x3536x2[_0x763a[1275]]();this[_0x763a[1625]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,!1);_0x3536x2[_0x763a[1337]]();_0x3536x2[_0x763a[1267]](!1);_0x3536x2[_0x763a[1275]]();this[_0x763a[1625]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,!0);_0x3536x2[_0x763a[1336]]()};mxCylinder[_0x763a[202]][_0x763a[1625]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536x3= Math[_0x763a[243]](this[_0x763a[1503]],Math[_0x763a[488]](_0x3536x9/ 5));if(_0x3536xa&& null!= this[_0x763a[1334]]|| !_0x3536xa&& null== this[_0x763a[1334]]){_0x3536x2[_0x763a[1276]](0,_0x3536x3),_0x3536x2[_0x763a[1279]](0,2* _0x3536x3,_0x3536x5,2* _0x3536x3,_0x3536x5,_0x3536x3),_0x3536xa|| (_0x3536x2[_0x763a[1336]](),_0x3536x2[_0x763a[1275]]())};_0x3536xa|| (_0x3536x2[_0x763a[1276]](0,_0x3536x3),_0x3536x2[_0x763a[1279]](0,-_0x3536x3/ 3,_0x3536x5,-_0x3536x3/ 3,_0x3536x5,_0x3536x3),_0x3536x2[_0x763a[1277]](_0x3536x5,_0x3536x9- _0x3536x3),_0x3536x2[_0x763a[1279]](_0x3536x5,_0x3536x9+ _0x3536x3/ 3,0,_0x3536x9+ _0x3536x3/ 3,0,_0x3536x9- _0x3536x3),_0x3536x2[_0x763a[268]]())};function mxConnector(_0x3536x2,_0x3536x3,_0x3536x4){mxPolyline[_0x763a[239]](this,_0x3536x2,_0x3536x3,_0x3536x4)}mxUtils[_0x763a[1284]](mxConnector,mxPolyline);mxConnector[_0x763a[202]][_0x763a[1594]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1689]](_0x3536x2,_0x3536x3,!0),_0x3536x5=this[_0x763a[1689]](_0x3536x2,_0x3536x3,!1);null== this[_0x763a[124]]|| 1!= this[_0x763a[124]][mxConstants[_0x763a[1690]]]?this[_0x763a[1639]](_0x3536x2,_0x3536x3,this[_0x763a[1606]]):this[_0x763a[1691]](_0x3536x2,_0x3536x3);_0x3536x2[_0x763a[1245]](this[_0x763a[1336]]);_0x3536x2[_0x763a[1267]](!1);_0x3536x2[_0x763a[1251]](!1);null!= _0x3536x4&& _0x3536x4();null!= _0x3536x5&& _0x3536x5()};mxConnector[_0x763a[202]][_0x763a[1691]]= function(_0x3536x2,_0x3536x3){_0x3536x2[_0x763a[1275]]();var _0x3536x4=_0x3536x3[0],_0x3536x5=_0x3536x3[_0x763a[67]];_0x3536x2[_0x763a[1276]](_0x3536x4[_0x763a[235]],_0x3536x4[_0x763a[236]]);for(_0x3536x4= 1;_0x3536x4< _0x3536x5- 2;_0x3536x4++){var _0x3536x9=_0x3536x3[_0x3536x4],_0x3536xa=_0x3536x3[_0x3536x4+ 1];_0x3536x2[_0x763a[1278]](_0x3536x9[_0x763a[235]],_0x3536x9[_0x763a[236]],(_0x3536x9[_0x763a[235]]+ _0x3536xa[_0x763a[235]])/ 2,(_0x3536x9[_0x763a[236]]+ _0x3536xa[_0x763a[236]])/ 2)};_0x3536x9= _0x3536x3[_0x3536x5- 2];_0x3536xa= _0x3536x3[_0x3536x5- 1];_0x3536x2[_0x763a[1278]](_0x3536x9[_0x763a[235]],_0x3536x9[_0x763a[236]],_0x3536xa[_0x763a[235]],_0x3536xa[_0x763a[236]]);_0x3536x2[_0x763a[1336]]()};mxConnector[_0x763a[202]][_0x763a[1689]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=_0x3536x3[_0x763a[67]],_0x3536x9=_0x3536x4?_0x3536x3[1]:_0x3536x3[_0x3536x5- 2];_0x3536x3= _0x3536x4?_0x3536x3[0]:_0x3536x3[_0x3536x5- 1];var _0x3536x5=_0x3536x3[_0x763a[235]]- _0x3536x9[_0x763a[235]],_0x3536xa=_0x3536x3[_0x763a[236]]- _0x3536x9[_0x763a[236]],_0x3536x12=Math[_0x763a[160]](1,Math[_0x763a[428]](_0x3536x5* _0x3536x5+ _0x3536xa* _0x3536xa)),_0x3536x9=_0x3536x5/ _0x3536x12,_0x3536x5=_0x3536xa/ _0x3536x12,_0x3536xa=mxUtils[_0x763a[1550]](this[_0x763a[124]],_0x3536x4?mxConstants[_0x763a[1692]]:mxConstants[_0x763a[1693]],mxConstants.DEFAULT_MARKERSIZE),_0x3536x12=mxUtils[_0x763a[433]](this[_0x763a[124]],_0x3536x4?mxConstants[_0x763a[1694]]:mxConstants[_0x763a[1695]]);return mxMarker[_0x763a[1689]](_0x3536x2,this,_0x3536x12,_0x3536x3,_0x3536x9,_0x3536x5,_0x3536xa,_0x3536x4,this[_0x763a[1307]],0!= this[_0x763a[124]][_0x3536x4?mxConstants[_0x763a[1696]]:mxConstants[_0x763a[1697]]])};mxConnector[_0x763a[202]][_0x763a[1612]]= function(_0x3536x2){mxShape[_0x763a[202]][_0x763a[1612]][_0x763a[183]](this,arguments);var _0x3536x3=0;mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_STARTARROW,mxConstants.NONE)!= mxConstants[_0x763a[217]]&& (_0x3536x3= mxUtils[_0x763a[1550]](this[_0x763a[124]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_MARKERSIZE)+ 1);mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_ENDARROW,mxConstants.NONE)!= mxConstants[_0x763a[217]]&& (_0x3536x3= Math[_0x763a[160]](_0x3536x3,mxUtils[_0x763a[1550]](this[_0x763a[124]],mxConstants.STYLE_ENDSIZE,mxConstants.DEFAULT_MARKERSIZE))+ 1);_0x3536x2[_0x763a[244]](Math[_0x763a[430]](_0x3536x3* this[_0x763a[255]]))};function mxSwimlane(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){mxShape[_0x763a[239]](this);this[_0x763a[1562]]= _0x3536x2;this[_0x763a[1334]]= _0x3536x3;this[_0x763a[1336]]= _0x3536x4;this[_0x763a[1307]]= null!= _0x3536x5?_0x3536x5:1}mxUtils[_0x763a[1284]](mxSwimlane,mxShape);mxSwimlane[_0x763a[202]][_0x763a[1680]]= 16;mxSwimlane[_0x763a[202]][_0x763a[1597]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x2= Math[_0x763a[243]](_0x3536x9,mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE));return new mxRectangle(_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x2)};mxSwimlane[_0x763a[202]][_0x763a[1614]]= function(){var _0x3536x2=mxShape[_0x763a[202]][_0x763a[1614]][_0x763a[183]](this,arguments);1!= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_HORIZONTAL,1)&& (_0x3536x2+= mxText[_0x763a[202]][_0x763a[1616]]);return _0x3536x2};mxSwimlane[_0x763a[202]][_0x763a[1615]]= function(){return this[_0x763a[1614]]()};mxSwimlane[_0x763a[202]][_0x763a[1590]]= function(){return mxShape[_0x763a[202]][_0x763a[1590]][_0x763a[183]](this,arguments)|| 1!= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_HORIZONTAL,1)};mxSwimlane[_0x763a[202]][_0x763a[1603]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x2= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_ARCSIZE,100* mxConstants[_0x763a[1557]])/ 100;return 3* _0x3536x4* _0x3536x2};mxSwimlane[_0x763a[202]][_0x763a[1595]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=Math[_0x763a[243]](_0x3536x9,mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE)),_0x3536x12=mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_SWIMLANE_FILLCOLOR,mxConstants.NONE),_0x3536x13=1== mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_SWIMLANE_LINE,1),_0x3536x14=0;_0x3536x2[_0x763a[513]](_0x3536x3,_0x3536x4);this[_0x763a[1606]]?(_0x3536x14= this[_0x763a[1603]](_0x3536x5,_0x3536x9,_0x3536xa),this[_0x763a[1698]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x14,_0x3536x12,_0x3536x13)):this[_0x763a[1699]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13);_0x3536x12= mxUtils[_0x763a[433]](this[_0x763a[124]],mxConstants.STYLE_SEPARATORCOLOR,mxConstants.NONE);this[_0x763a[1700]](_0x3536x2,_0x3536x5,_0x3536xa,_0x3536x9,_0x3536x12);null!= this[_0x763a[618]]&& (_0x3536x9= this[_0x763a[1686]](_0x3536x3,_0x3536xa,_0x3536x5,_0x3536x9),_0x3536x2[_0x763a[618]](_0x3536x9[_0x763a[235]]- _0x3536x3,_0x3536x9[_0x763a[236]]- _0x3536x4,_0x3536x9[_0x763a[117]],_0x3536x9[_0x763a[119]],this[_0x763a[618]],!1,!1,!1));this[_0x763a[617]]&& (_0x3536x2[_0x763a[1267]](!1),this[_0x763a[1604]](_0x3536x2,0,0,_0x3536x5,_0x3536xa,_0x3536x14))};mxSwimlane[_0x763a[202]][_0x763a[1699]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13){_0x3536x12!= mxConstants[_0x763a[217]]&& (_0x3536x2[_0x763a[815]](),_0x3536x2[_0x763a[1245]](_0x3536x12),_0x3536x2[_0x763a[1319]](0,0,_0x3536x5,_0x3536x9),_0x3536x2[_0x763a[1337]](),_0x3536x2[_0x763a[1210]](),_0x3536x2[_0x763a[1267]](!1));_0x3536x2[_0x763a[1275]]();_0x3536x2[_0x763a[1276]](0,_0x3536xa);_0x3536x2[_0x763a[1277]](0,0);_0x3536x2[_0x763a[1277]](_0x3536x5,0);_0x3536x2[_0x763a[1277]](_0x3536x5,_0x3536xa);_0x3536x13&& _0x3536x2[_0x763a[268]]();_0x3536x2[_0x763a[1337]]();_0x3536xa< _0x3536x9&& _0x3536x12== mxConstants[_0x763a[217]]&& (_0x3536x2[_0x763a[1229]]= !1,_0x3536x2[_0x763a[1275]](),_0x3536x2[_0x763a[1276]](0,_0x3536xa),_0x3536x2[_0x763a[1277]](0,_0x3536x9),_0x3536x2[_0x763a[1277]](_0x3536x5,_0x3536x9),_0x3536x2[_0x763a[1277]](_0x3536x5,_0x3536xa),_0x3536x2[_0x763a[1336]]())};mxSwimlane[_0x763a[202]][_0x763a[1698]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14){_0x3536x13!= mxConstants[_0x763a[217]]&& (_0x3536x2[_0x763a[815]](),_0x3536x2[_0x763a[1245]](_0x3536x13),_0x3536x2[_0x763a[1320]](0,0,_0x3536x5,_0x3536x9,_0x3536x12,_0x3536x12),_0x3536x2[_0x763a[1337]](),_0x3536x2[_0x763a[1210]](),_0x3536x2[_0x763a[1267]](!1));_0x3536x2[_0x763a[1275]]();_0x3536x2[_0x763a[1276]](_0x3536x5,_0x3536xa);_0x3536x2[_0x763a[1277]](_0x3536x5,_0x3536x12);_0x3536x2[_0x763a[1278]](_0x3536x5,0,_0x3536x5- Math[_0x763a[243]](_0x3536x5/ 2,_0x3536x12),0);_0x3536x2[_0x763a[1277]](Math[_0x763a[243]](_0x3536x5/ 2,_0x3536x12),0);_0x3536x2[_0x763a[1278]](0,0,0,_0x3536x12);_0x3536x2[_0x763a[1277]](0,_0x3536xa);_0x3536x14&& _0x3536x2[_0x763a[268]]();_0x3536x2[_0x763a[1337]]();_0x3536xa< _0x3536x9&& _0x3536x13== mxConstants[_0x763a[217]]&& (_0x3536x2[_0x763a[1229]]= !1,_0x3536x2[_0x763a[1275]](),_0x3536x2[_0x763a[1276]](0,_0x3536xa),_0x3536x2[_0x763a[1277]](0,_0x3536x9- _0x3536x12),_0x3536x2[_0x763a[1278]](0,_0x3536x9,Math[_0x763a[243]](_0x3536x5/ 2,_0x3536x12),_0x3536x9),_0x3536x2[_0x763a[1277]](_0x3536x5- Math[_0x763a[243]](_0x3536x5/ 2,_0x3536x12),_0x3536x9),_0x3536x2[_0x763a[1278]](_0x3536x5,_0x3536x9,_0x3536x5,_0x3536x9- _0x3536x12),_0x3536x2[_0x763a[1277]](_0x3536x5,_0x3536xa),_0x3536x2[_0x763a[1336]]())};mxSwimlane[_0x763a[202]][_0x763a[1700]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x9!= mxConstants[_0x763a[217]]&& (_0x3536x2[_0x763a[1249]](_0x3536x9),_0x3536x2[_0x763a[1251]](!0),_0x3536x2[_0x763a[1275]](),_0x3536x2[_0x763a[1276]](_0x3536x3,_0x3536x4),_0x3536x2[_0x763a[1277]](_0x3536x3,_0x3536x5),_0x3536x2[_0x763a[1336]](),_0x3536x2[_0x763a[1251]](!1))};mxSwimlane[_0x763a[202]][_0x763a[1686]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){return new mxRectangle(_0x3536x2+ _0x3536x4- this[_0x763a[1680]],_0x3536x3,this[_0x763a[1680]],this[_0x763a[1680]])};function mxGraphLayout(_0x3536x2){this[_0x763a[1179]]= _0x3536x2}mxGraphLayout[_0x763a[202]][_0x763a[1179]]= null;mxGraphLayout[_0x763a[202]][_0x763a[1701]]= !0;mxGraphLayout[_0x763a[202]][_0x763a[1101]]= null;mxGraphLayout[_0x763a[202]][_0x763a[1702]]= function(_0x3536x2,_0x3536x3,_0x3536x4){};mxGraphLayout[_0x763a[202]][_0x763a[350]]= function(_0x3536x2){};mxGraphLayout[_0x763a[202]][_0x763a[1703]]= function(){return this[_0x763a[1179]]};mxGraphLayout[_0x763a[202]][_0x763a[1704]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x4= this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x3);_0x3536x3= null!= _0x3536x4?_0x3536x4[_0x763a[124]]:this[_0x763a[1179]][_0x763a[1705]](_0x3536x3);return null!= _0x3536x3?_0x3536x3[_0x3536x2]:null};mxGraphLayout[_0x763a[1706]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){if(null!= _0x3536x4&& null!= _0x3536x2){_0x3536x3= null!= _0x3536x3?_0x3536x3:!0;_0x3536x9= _0x3536x9|| [];var _0x3536xa=mxCellPath[_0x763a[385]](_0x3536x2);if(null== _0x3536x9[_0x3536xa]&& (_0x3536x9[_0x3536xa]= _0x3536x2,_0x3536x5= _0x3536x4(_0x3536x2,_0x3536x5),null== _0x3536x5|| _0x3536x5)){if(_0x3536x5= this[_0x763a[1179]][_0x763a[251]][_0x763a[1707]](_0x3536x2),0< _0x3536x5){for(_0x3536xa= 0;_0x3536xa< _0x3536x5;_0x3536xa++){var _0x3536x12=this[_0x763a[1179]][_0x763a[251]][_0x763a[1708]](_0x3536x2,_0x3536xa),_0x3536x13=this[_0x763a[1179]][_0x763a[251]][_0x763a[1709]](_0x3536x12,!0)== _0x3536x2;if(!_0x3536x3|| _0x3536x13){_0x3536x13= this[_0x763a[1179]][_0x763a[441]][_0x763a[1710]](_0x3536x12,!_0x3536x13),this[_0x763a[1706]](_0x3536x13,_0x3536x3,_0x3536x4,_0x3536x12,_0x3536x9)}}}}}};mxGraphLayout[_0x763a[202]][_0x763a[1711]]= function(_0x3536x2){return this[_0x763a[1179]][_0x763a[1712]](_0x3536x2)};mxGraphLayout[_0x763a[202]][_0x763a[1713]]= function(_0x3536x2){return !this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1193]](_0x3536x2)|| !this[_0x763a[1179]][_0x763a[1714]](_0x3536x2)};mxGraphLayout[_0x763a[202]][_0x763a[1715]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[502]]();return !_0x3536x3[_0x763a[250]](_0x3536x2)|| !this[_0x763a[1179]][_0x763a[1714]](_0x3536x2)|| null== _0x3536x3[_0x763a[1709]](_0x3536x2,!0)|| null== _0x3536x3[_0x763a[1709]](_0x3536x2,!1)};mxGraphLayout[_0x763a[202]][_0x763a[1716]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1179]][_0x763a[1717]](mxConstants.STYLE_NOEDGESTYLE,_0x3536x3?_0x763a[468]:_0x763a[500],[_0x3536x2])};mxGraphLayout[_0x763a[202]][_0x763a[1718]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1179]][_0x763a[1717]](mxConstants.STYLE_ORTHOGONAL,_0x3536x3?_0x763a[500]:_0x763a[468],[_0x3536x2])};mxGraphLayout[_0x763a[202]][_0x763a[1719]]= function(_0x3536x2){var _0x3536x3= new mxPoint;if(null!= _0x3536x2&& _0x3536x2!= this[_0x763a[1101]]){var _0x3536x4=this[_0x763a[1179]][_0x763a[502]]();if(_0x3536x4[_0x763a[1720]](this[_0x763a[1101]],_0x3536x2)){for(var _0x3536x5=_0x3536x4[_0x763a[1721]](_0x3536x2);_0x3536x2!= this[_0x763a[1101]];){_0x3536x3[_0x763a[235]]+= _0x3536x5[_0x763a[235]],_0x3536x3[_0x763a[236]]+= _0x3536x5[_0x763a[236]],_0x3536x2= _0x3536x4[_0x763a[1197]](_0x3536x2),_0x3536x5= _0x3536x4[_0x763a[1721]](_0x3536x2)}}};return _0x3536x3};mxGraphLayout[_0x763a[202]][_0x763a[1722]]= function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2){var _0x3536x4=this[_0x763a[1179]][_0x763a[251]],_0x3536x5=_0x3536x4[_0x763a[1721]](_0x3536x2);null== _0x3536x5?(_0x3536x5= new mxGeometry,_0x3536x5[_0x763a[1723]](!0)):_0x3536x5= _0x3536x5[_0x763a[238]]();if(null!= this[_0x763a[1101]]&& null!= _0x3536x3){for(var _0x3536x9=_0x3536x4[_0x763a[1197]](_0x3536x2),_0x3536x9=this[_0x763a[1719]](_0x3536x9),_0x3536xa=0;_0x3536xa< _0x3536x3[_0x763a[67]];_0x3536xa++){_0x3536x3[_0x3536xa][_0x763a[235]]-= _0x3536x9[_0x763a[235]],_0x3536x3[_0x3536xa][_0x763a[236]]-= _0x3536x9[_0x763a[236]]}};_0x3536x5[_0x763a[1525]]= _0x3536x3;_0x3536x4[_0x763a[1724]](_0x3536x2,_0x3536x5)}};mxGraphLayout[_0x763a[202]][_0x763a[1725]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[1179]][_0x763a[502]](),_0x3536x9=_0x3536x5[_0x763a[1721]](_0x3536x2),_0x3536xa=null;if(null!= _0x3536x9){_0x3536xa= new mxRectangle(_0x3536x3,_0x3536x4,_0x3536x9[_0x763a[117]],_0x3536x9[_0x763a[119]]);if(this[_0x763a[1701]]){var _0x3536x12=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[248]](_0x3536x2);if(null!= _0x3536x12&& null!= _0x3536x12[_0x763a[963]]&& null!= _0x3536x12[_0x763a[963]][_0x763a[1563]]){var _0x3536x13=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]],_0x3536x14=_0x3536x12[_0x763a[963]][_0x763a[1563]];_0x3536x12[_0x763a[963]][_0x763a[1563]][_0x763a[235]]< _0x3536x12[_0x763a[235]]&& (_0x3536x3+= (_0x3536x12[_0x763a[235]]- _0x3536x14[_0x763a[235]])/ _0x3536x13,_0x3536xa[_0x763a[117]]= _0x3536x14[_0x763a[117]]);_0x3536x12[_0x763a[963]][_0x763a[1563]][_0x763a[236]]< _0x3536x12[_0x763a[236]]&& (_0x3536x4+= (_0x3536x12[_0x763a[236]]- _0x3536x14[_0x763a[236]])/ _0x3536x13,_0x3536xa[_0x763a[119]]= _0x3536x14[_0x763a[119]])}};null!= this[_0x763a[1101]]&& (_0x3536x12= _0x3536x5[_0x763a[1197]](_0x3536x2),null!= _0x3536x12&& _0x3536x12!= this[_0x763a[1101]]&& (_0x3536x12= this[_0x763a[1719]](_0x3536x12),_0x3536x3-= _0x3536x12[_0x763a[235]],_0x3536x4-= _0x3536x12[_0x763a[236]]));if(_0x3536x9[_0x763a[235]]!= _0x3536x3|| _0x3536x9[_0x763a[236]]!= _0x3536x4){_0x3536x9= _0x3536x9[_0x763a[238]](),_0x3536x9[_0x763a[235]]= _0x3536x3,_0x3536x9[_0x763a[236]]= _0x3536x4,_0x3536x5[_0x763a[1724]](_0x3536x2,_0x3536x9)}};return _0x3536xa};mxGraphLayout[_0x763a[202]][_0x763a[1726]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1721]](_0x3536x2);if(this[_0x763a[1701]]){var _0x3536x4=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[248]](_0x3536x2);if(null!= _0x3536x4&& null!= _0x3536x4[_0x763a[963]]&& null!= _0x3536x4[_0x763a[963]][_0x763a[1563]]){var _0x3536x5=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]],_0x3536x9=_0x3536x4[_0x763a[963]][_0x763a[1563]],_0x3536xa=Math[_0x763a[160]](_0x3536x4[_0x763a[235]]- _0x3536x9[_0x763a[235]],0)/ _0x3536x5,_0x3536x12=Math[_0x763a[160]](_0x3536x4[_0x763a[236]]- _0x3536x9[_0x763a[236]],0)/ _0x3536x5,_0x3536x13=Math[_0x763a[160]](_0x3536x9[_0x763a[235]]+ _0x3536x9[_0x763a[117]]- (_0x3536x4[_0x763a[235]]+ _0x3536x4[_0x763a[117]]),0)/ _0x3536x5,_0x3536x4=Math[_0x763a[160]](_0x3536x9[_0x763a[236]]+ _0x3536x9[_0x763a[119]]- (_0x3536x4[_0x763a[236]]+ _0x3536x4[_0x763a[119]]),0)/ _0x3536x5,_0x3536x3= new mxRectangle(_0x3536x3[_0x763a[235]]- _0x3536xa,_0x3536x3[_0x763a[236]]- _0x3536x12,_0x3536x3[_0x763a[117]]+ _0x3536xa+ _0x3536x13,_0x3536x3[_0x763a[119]]+ _0x3536x12+ _0x3536x4)}};null!= this[_0x763a[1101]]&& (_0x3536x2= this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1197]](_0x3536x2),_0x3536x3= _0x3536x3[_0x763a[238]](),null!= _0x3536x2&& _0x3536x2!= this[_0x763a[1101]]&& (_0x3536x2= this[_0x763a[1719]](_0x3536x2),_0x3536x3[_0x763a[235]]+= _0x3536x2[_0x763a[235]],_0x3536x3[_0x763a[236]]+= _0x3536x2[_0x763a[236]]));return new mxRectangle(_0x3536x3[_0x763a[235]],_0x3536x3[_0x763a[236]],_0x3536x3[_0x763a[117]],_0x3536x3[_0x763a[119]])};mxGraphLayout[_0x763a[202]][_0x763a[1727]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1179]][_0x763a[502]]()[_0x763a[473]]();try{for(var _0x3536x4=_0x3536x2[_0x763a[67]]- 1;0<= _0x3536x4;_0x3536x4--){var _0x3536x5=_0x3536x2[_0x3536x4],_0x3536x9=this[_0x763a[1179]][_0x763a[1728]](_0x3536x5),_0x3536xa=this[_0x763a[1179]][_0x763a[1729]](_0x3536x9),_0x3536x12=this[_0x763a[1179]][_0x763a[1198]](_0x3536x5),_0x3536x13=0,_0x3536x14=0;if(this[_0x763a[1179]][_0x763a[1730]](_0x3536x5)){var _0x3536x15=this[_0x763a[1179]][_0x763a[1731]](_0x3536x5),_0x3536x13=_0x3536x15[_0x763a[117]],_0x3536x14=_0x3536x15[_0x763a[119]]};null!= _0x3536xa&& null!= _0x3536x12&& (_0x3536x12= _0x3536x12[_0x763a[238]](),_0x3536x12[_0x763a[235]]= _0x3536x12[_0x763a[235]]+ _0x3536xa[_0x763a[235]]- _0x3536x3- _0x3536x13,_0x3536x12[_0x763a[236]]= _0x3536x12[_0x763a[236]]+ _0x3536xa[_0x763a[236]]- _0x3536x3- _0x3536x14,_0x3536x12[_0x763a[117]]= _0x3536xa[_0x763a[117]]+ 2* _0x3536x3+ _0x3536x13,_0x3536x12[_0x763a[119]]= _0x3536xa[_0x763a[119]]+ 2* _0x3536x3+ _0x3536x14,this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1724]](_0x3536x5,_0x3536x12),this[_0x763a[1179]][_0x763a[834]](_0x3536x9,_0x3536x3+ _0x3536x13- _0x3536xa[_0x763a[235]],_0x3536x3+ _0x3536x14- _0x3536xa[_0x763a[236]]))}}finally{this[_0x763a[1179]][_0x763a[502]]()[_0x763a[476]]()}};function mxStackLayout(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){mxGraphLayout[_0x763a[239]](this,_0x3536x2);this[_0x763a[662]]= null!= _0x3536x3?_0x3536x3:!0;this[_0x763a[657]]= null!= _0x3536x4?_0x3536x4:0;this[_0x763a[1732]]= null!= _0x3536x5?_0x3536x5:0;this[_0x763a[1733]]= null!= _0x3536x9?_0x3536x9:0;this[_0x763a[467]]= null!= _0x3536xa?_0x3536xa:0}mxStackLayout[_0x763a[202]]= new mxGraphLayout;mxStackLayout[_0x763a[202]][_0x763a[196]]= mxStackLayout;mxStackLayout[_0x763a[202]][_0x763a[662]]= null;mxStackLayout[_0x763a[202]][_0x763a[657]]= null;mxStackLayout[_0x763a[202]][_0x763a[1732]]= null;mxStackLayout[_0x763a[202]][_0x763a[1733]]= null;mxStackLayout[_0x763a[202]][_0x763a[467]]= 0;mxStackLayout[_0x763a[202]][_0x763a[1734]]= !1;mxStackLayout[_0x763a[202]][_0x763a[1334]]= !1;mxStackLayout[_0x763a[202]][_0x763a[1735]]= !1;mxStackLayout[_0x763a[202]][_0x763a[1736]]= !1;mxStackLayout[_0x763a[202]][_0x763a[1333]]= null;mxStackLayout[_0x763a[202]][_0x763a[1737]]= function(){return this[_0x763a[662]]};mxStackLayout[_0x763a[202]][_0x763a[1702]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[1179]][_0x763a[502]](),_0x3536x9=_0x3536x5[_0x763a[1197]](_0x3536x2),_0x3536xa=this[_0x763a[1737]]();if(null!= _0x3536x2&& null!= _0x3536x9){var _0x3536x12=0,_0x3536x13=0,_0x3536x14=_0x3536x5[_0x763a[262]](_0x3536x9);_0x3536x3= _0x3536xa?_0x3536x3:_0x3536x4;_0x3536x12= this[_0x763a[1179]][_0x763a[249]]()[_0x763a[248]](_0x3536x9);null!= _0x3536x12&& (_0x3536x3-= _0x3536xa?_0x3536x12[_0x763a[235]]:_0x3536x12[_0x763a[236]]);for(_0x3536x12= 0;_0x3536x12< _0x3536x14;_0x3536x12++){if(_0x3536x4= _0x3536x5[_0x763a[263]](_0x3536x9,_0x3536x12),_0x3536x4!= _0x3536x2&& (_0x3536x4= _0x3536x5[_0x763a[1721]](_0x3536x4),null!= _0x3536x4)){_0x3536x4= _0x3536xa?_0x3536x4[_0x763a[235]]+ _0x3536x4[_0x763a[117]]/ 2:_0x3536x4[_0x763a[236]]+ _0x3536x4[_0x763a[119]]/ 2;if(_0x3536x13< _0x3536x3&& _0x3536x4> _0x3536x3){break};_0x3536x13= _0x3536x4}};_0x3536xa= _0x3536x9[_0x763a[1738]](_0x3536x2);_0x3536xa= Math[_0x763a[160]](0,_0x3536x12- (_0x3536x12> _0x3536xa?1:0));_0x3536x5[_0x763a[99]](_0x3536x9,_0x3536x2,_0x3536xa)}};mxStackLayout[_0x763a[202]][_0x763a[1739]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[502]](),_0x3536x4=_0x3536x3[_0x763a[1721]](_0x3536x2);if(null!= this[_0x763a[1179]][_0x763a[526]]&& (null== _0x3536x4&& _0x3536x3[_0x763a[1740]](_0x3536x2)|| _0x3536x2== this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1741]])){_0x3536x4= new mxRectangle(0,0,this[_0x763a[1179]][_0x763a[526]][_0x763a[359]]- 1,this[_0x763a[1179]][_0x763a[526]][_0x763a[167]]- 1)};return _0x3536x4};mxStackLayout[_0x763a[202]][_0x763a[350]]= function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=this[_0x763a[1737]](),_0x3536x4=this[_0x763a[1179]][_0x763a[502]](),_0x3536x5=this[_0x763a[1739]](_0x3536x2),_0x3536x9=0;null!= _0x3536x5&& (_0x3536x9= _0x3536x3?_0x3536x5[_0x763a[119]]:_0x3536x5[_0x763a[117]]);var _0x3536x9=_0x3536x9- (2* this[_0x763a[657]]+ 2* this[_0x763a[467]]),_0x3536xa=this[_0x763a[1732]]+ this[_0x763a[467]],_0x3536x12=this[_0x763a[1733]]+ this[_0x763a[467]];if(this[_0x763a[1179]][_0x763a[1730]](_0x3536x2)){var _0x3536x13=this[_0x763a[1179]][_0x763a[1705]](_0x3536x2),_0x3536x14=mxUtils[_0x763a[433]](_0x3536x13,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE),_0x3536x13=mxUtils[_0x763a[433]](_0x3536x13,mxConstants.STYLE_HORIZONTAL,!0);_0x3536x3== _0x3536x13&& (_0x3536x9-= _0x3536x14);_0x3536x3?_0x3536x12+= _0x3536x14:_0x3536xa+= _0x3536x14};_0x3536x4[_0x763a[473]]();try{for(var _0x3536x14=0,_0x3536x13=null,_0x3536x15=_0x3536x4[_0x763a[262]](_0x3536x2),_0x3536x16=0;_0x3536x16< _0x3536x15;_0x3536x16++){var _0x3536x17=_0x3536x4[_0x763a[263]](_0x3536x2,_0x3536x16);if(!this[_0x763a[1713]](_0x3536x17)&& this[_0x763a[1711]](_0x3536x17)){var _0x3536x18=_0x3536x4[_0x763a[1721]](_0x3536x17);if(null!= _0x3536x18){_0x3536x18= _0x3536x18[_0x763a[238]]();if(null!= this[_0x763a[1333]]&& null!= _0x3536x13&& (_0x3536x3&& _0x3536x13[_0x763a[235]]+ _0x3536x13[_0x763a[117]]+ _0x3536x18[_0x763a[117]]+ 2* this[_0x763a[657]]> this[_0x763a[1333]]|| !_0x3536x3&& _0x3536x13[_0x763a[236]]+ _0x3536x13[_0x763a[119]]+ _0x3536x18[_0x763a[119]]+ 2* this[_0x763a[657]]> this[_0x763a[1333]])){_0x3536x13= null,_0x3536x3?_0x3536x12+= _0x3536x14+ this[_0x763a[657]]:_0x3536xa+= _0x3536x14+ this[_0x763a[657]],_0x3536x14= 0};_0x3536x14= Math[_0x763a[160]](_0x3536x14,_0x3536x3?_0x3536x18[_0x763a[119]]:_0x3536x18[_0x763a[117]]);null!= _0x3536x13?_0x3536x3?_0x3536x18[_0x763a[235]]= _0x3536x13[_0x763a[235]]+ _0x3536x13[_0x763a[117]]+ this[_0x763a[657]]:_0x3536x18[_0x763a[236]]= _0x3536x13[_0x763a[236]]+ _0x3536x13[_0x763a[119]]+ this[_0x763a[657]]:this[_0x763a[1734]]|| (_0x3536x3?_0x3536x18[_0x763a[235]]= _0x3536xa:_0x3536x18[_0x763a[236]]= _0x3536x12);_0x3536x3?_0x3536x18[_0x763a[236]]= _0x3536x12:_0x3536x18[_0x763a[235]]= _0x3536xa;this[_0x763a[1334]]&& 0< _0x3536x9&& (_0x3536x3?_0x3536x18[_0x763a[119]]= _0x3536x9:_0x3536x18[_0x763a[117]]= _0x3536x9);_0x3536x4[_0x763a[1724]](_0x3536x17,_0x3536x18);_0x3536x13= _0x3536x18}}};this[_0x763a[1735]]&& null!= _0x3536x5&& null!= _0x3536x13&& !this[_0x763a[1179]][_0x763a[1742]](_0x3536x2)?(_0x3536x5= _0x3536x5[_0x763a[238]](),_0x3536x3?_0x3536x5[_0x763a[117]]= _0x3536x13[_0x763a[235]]+ _0x3536x13[_0x763a[117]]+ this[_0x763a[657]]:_0x3536x5[_0x763a[119]]= _0x3536x13[_0x763a[236]]+ _0x3536x13[_0x763a[119]]+ this[_0x763a[657]],_0x3536x4[_0x763a[1724]](_0x3536x2,_0x3536x5)):this[_0x763a[1736]]&& (null!= _0x3536x5&& null!= _0x3536x13)&& (_0x3536x3?_0x3536x13[_0x763a[117]]= _0x3536x5[_0x763a[117]]- _0x3536x13[_0x763a[235]]- this[_0x763a[657]]:_0x3536x13[_0x763a[119]]= _0x3536x5[_0x763a[119]]- _0x3536x13[_0x763a[236]]- this[_0x763a[657]])}finally{_0x3536x4[_0x763a[476]]()}}};function mxPartitionLayout(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){mxGraphLayout[_0x763a[239]](this,_0x3536x2);this[_0x763a[662]]= null!= _0x3536x3?_0x3536x3:!0;this[_0x763a[657]]= _0x3536x4|| 0;this[_0x763a[467]]= _0x3536x5|| 0}mxPartitionLayout[_0x763a[202]]= new mxGraphLayout;mxPartitionLayout[_0x763a[202]][_0x763a[196]]= mxPartitionLayout;mxPartitionLayout[_0x763a[202]][_0x763a[662]]= null;mxPartitionLayout[_0x763a[202]][_0x763a[657]]= null;mxPartitionLayout[_0x763a[202]][_0x763a[467]]= null;mxPartitionLayout[_0x763a[202]][_0x763a[1743]]= !0;mxPartitionLayout[_0x763a[202]][_0x763a[1737]]= function(){return this[_0x763a[662]]};mxPartitionLayout[_0x763a[202]][_0x763a[1702]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= this[_0x763a[1179]][_0x763a[502]]();var _0x3536x5=_0x3536x4[_0x763a[1197]](_0x3536x2);if(null!= _0x3536x2&& null!= _0x3536x5){for(var _0x3536x9=0,_0x3536xa=0,_0x3536x12=_0x3536x4[_0x763a[262]](_0x3536x5),_0x3536x9=0;_0x3536x9< _0x3536x12;_0x3536x9++){var _0x3536x13=_0x3536x4[_0x763a[263]](_0x3536x5,_0x3536x9),_0x3536x13=this[_0x763a[1726]](_0x3536x13);if(null!= _0x3536x13){_0x3536x13= _0x3536x13[_0x763a[235]]+ _0x3536x13[_0x763a[117]]/ 2;if(_0x3536xa< _0x3536x3&& _0x3536x13> _0x3536x3){break};_0x3536xa= _0x3536x13}};_0x3536x3= _0x3536x5[_0x763a[1738]](_0x3536x2);_0x3536x3= Math[_0x763a[160]](0,_0x3536x9- (_0x3536x9> _0x3536x3?1:0));_0x3536x4[_0x763a[99]](_0x3536x5,_0x3536x2,_0x3536x3)}};mxPartitionLayout[_0x763a[202]][_0x763a[350]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1737]](),_0x3536x4=this[_0x763a[1179]][_0x763a[502]](),_0x3536x5=_0x3536x4[_0x763a[1721]](_0x3536x2);if(null!= this[_0x763a[1179]][_0x763a[526]]&& (null== _0x3536x5&& _0x3536x4[_0x763a[1740]](_0x3536x2)|| _0x3536x2== this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1741]])){_0x3536x5= new mxRectangle(0,0,this[_0x763a[1179]][_0x763a[526]][_0x763a[359]]- 1,this[_0x763a[1179]][_0x763a[526]][_0x763a[167]]- 1)};if(null!= _0x3536x5){for(var _0x3536x9=[],_0x3536xa=_0x3536x4[_0x763a[262]](_0x3536x2),_0x3536x12=0;_0x3536x12< _0x3536xa;_0x3536x12++){var _0x3536x13=_0x3536x4[_0x763a[263]](_0x3536x2,_0x3536x12);!this[_0x763a[1713]](_0x3536x13)&& this[_0x763a[1711]](_0x3536x13)&& _0x3536x9[_0x763a[207]](_0x3536x13)};_0x3536xa= _0x3536x9[_0x763a[67]];if(0< _0x3536xa){var _0x3536x14=this[_0x763a[467]],_0x3536x15=this[_0x763a[467]],_0x3536x16=_0x3536x3?_0x3536x5[_0x763a[119]]:_0x3536x5[_0x763a[117]],_0x3536x16=_0x3536x16- 2* this[_0x763a[467]];_0x3536x2= this[_0x763a[1179]][_0x763a[1730]](_0x3536x2)?this[_0x763a[1179]][_0x763a[1731]](_0x3536x2): new mxRectangle;_0x3536x16-= _0x3536x3?_0x3536x2[_0x763a[119]]:_0x3536x2[_0x763a[117]];_0x3536x14+= _0x3536x2[_0x763a[117]];_0x3536x15+= _0x3536x2[_0x763a[119]];_0x3536x2= this[_0x763a[467]]+ (_0x3536xa- 1)* this[_0x763a[657]];_0x3536x5= _0x3536x3?(_0x3536x5[_0x763a[117]]- _0x3536x14- _0x3536x2)/ _0x3536xa:(_0x3536x5[_0x763a[119]]- _0x3536x15- _0x3536x2)/ _0x3536xa;if(0< _0x3536x5){_0x3536x4[_0x763a[473]]();try{for(_0x3536x12= 0;_0x3536x12< _0x3536xa;_0x3536x12++){var _0x3536x13=_0x3536x9[_0x3536x12],_0x3536x17=_0x3536x4[_0x763a[1721]](_0x3536x13);null!= _0x3536x17&& (_0x3536x17= _0x3536x17[_0x763a[238]](),_0x3536x17[_0x763a[235]]= _0x3536x14,_0x3536x17[_0x763a[236]]= _0x3536x15,_0x3536x3?(this[_0x763a[1743]]&& (_0x3536x17[_0x763a[117]]= _0x3536x5,_0x3536x17[_0x763a[119]]= _0x3536x16),_0x3536x14+= _0x3536x5+ this[_0x763a[657]]):(this[_0x763a[1743]]&& (_0x3536x17[_0x763a[119]]= _0x3536x5,_0x3536x17[_0x763a[117]]= _0x3536x16),_0x3536x15+= _0x3536x5+ this[_0x763a[657]]),_0x3536x4[_0x763a[1724]](_0x3536x13,_0x3536x17))}}finally{_0x3536x4[_0x763a[476]]()}}}}};function mxCompactTreeLayout(_0x3536x2,_0x3536x3,_0x3536x4){mxGraphLayout[_0x763a[239]](this,_0x3536x2);this[_0x763a[662]]= null!= _0x3536x3?_0x3536x3:!0;this[_0x763a[1744]]= null!= _0x3536x4?_0x3536x4:!1}mxCompactTreeLayout[_0x763a[202]]= new mxGraphLayout;mxCompactTreeLayout[_0x763a[202]][_0x763a[196]]= mxCompactTreeLayout;mxCompactTreeLayout[_0x763a[202]][_0x763a[662]]= null;mxCompactTreeLayout[_0x763a[202]][_0x763a[1744]]= null;mxCompactTreeLayout[_0x763a[202]][_0x763a[1735]]= !0;mxCompactTreeLayout[_0x763a[202]][_0x763a[1745]]= 10;mxCompactTreeLayout[_0x763a[202]][_0x763a[1746]]= null;mxCompactTreeLayout[_0x763a[202]][_0x763a[1747]]= !1;mxCompactTreeLayout[_0x763a[202]][_0x763a[1748]]= 10;mxCompactTreeLayout[_0x763a[202]][_0x763a[1749]]= 20;mxCompactTreeLayout[_0x763a[202]][_0x763a[1750]]= !0;mxCompactTreeLayout[_0x763a[202]][_0x763a[1751]]= 5;mxCompactTreeLayout[_0x763a[202]][_0x763a[1752]]= 4;mxCompactTreeLayout[_0x763a[202]][_0x763a[1753]]= 8;mxCompactTreeLayout[_0x763a[202]][_0x763a[1754]]= 4;mxCompactTreeLayout[_0x763a[202]][_0x763a[1755]]= !0;mxCompactTreeLayout[_0x763a[202]][_0x763a[1713]]= function(_0x3536x2){return mxGraphLayout[_0x763a[202]][_0x763a[1713]][_0x763a[183]](this,arguments)|| 0== this[_0x763a[1179]][_0x763a[1756]](_0x3536x2)[_0x763a[67]]};mxCompactTreeLayout[_0x763a[202]][_0x763a[1737]]= function(){return this[_0x763a[662]]};mxCompactTreeLayout[_0x763a[202]][_0x763a[350]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1101]]= _0x3536x2;var _0x3536x4=this[_0x763a[1179]][_0x763a[502]]();if(null== _0x3536x3){if(0< this[_0x763a[1179]][_0x763a[264]](_0x3536x2,_0x3536x4[_0x763a[1197]](_0x3536x2),this[_0x763a[1744]],!this[_0x763a[1744]],!1)[_0x763a[67]]){_0x3536x3= _0x3536x2}else {var _0x3536x5=this[_0x763a[1179]][_0x763a[1757]](_0x3536x2,!0,this[_0x763a[1744]]);if(0< _0x3536x5[_0x763a[67]]){for(var _0x3536x9=0;_0x3536x9< _0x3536x5[_0x763a[67]];_0x3536x9++){if(!this[_0x763a[1713]](_0x3536x5[_0x3536x9])&& 0< this[_0x763a[1179]][_0x763a[264]](_0x3536x5[_0x3536x9],null,this[_0x763a[1744]],!this[_0x763a[1744]],!1)[_0x763a[67]]){_0x3536x3= _0x3536x5[_0x3536x9];break}}}}};if(null!= _0x3536x3){this[_0x763a[1746]]= this[_0x763a[1735]]?{}:null;_0x3536x4[_0x763a[473]]();try{var _0x3536xa=this[_0x763a[1758]](_0x3536x3,_0x3536x2);if(null!= _0x3536xa){this[_0x763a[1759]](_0x3536xa);var _0x3536x12=this[_0x763a[1179]][_0x763a[1020]],_0x3536x5=_0x3536x12;if(!this[_0x763a[1747]]){var _0x3536x13=this[_0x763a[1726]](_0x3536x3);null!= _0x3536x13&& (_0x3536x12= _0x3536x13[_0x763a[235]],_0x3536x5= _0x3536x13[_0x763a[236]])};_0x3536x13= null;_0x3536x13= this[_0x763a[1737]]()?this[_0x763a[1760]](_0x3536xa,_0x3536x12,_0x3536x5):this[_0x763a[1761]](_0x3536xa,null,_0x3536x12,_0x3536x5);if(null!= _0x3536x13){var _0x3536x14=_0x3536x9= 0;0> _0x3536x13[_0x763a[235]]&& (_0x3536x9= Math[_0x763a[425]](_0x3536x12- _0x3536x13[_0x763a[235]]));0> _0x3536x13[_0x763a[236]]&& (_0x3536x14= Math[_0x763a[425]](_0x3536x5- _0x3536x13[_0x763a[236]]));(0!= _0x3536x9|| 0!= _0x3536x14)&& this[_0x763a[1762]](_0x3536xa,_0x3536x9,_0x3536x14);this[_0x763a[1735]]&& this[_0x763a[1763]]();this[_0x763a[1755]]&& this[_0x763a[1764]](_0x3536xa)}}}finally{_0x3536x4[_0x763a[476]]()}}};mxCompactTreeLayout[_0x763a[202]][_0x763a[1762]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x2[_0x763a[235]]+= _0x3536x3;_0x3536x2[_0x763a[236]]+= _0x3536x4;this[_0x763a[183]](_0x3536x2);for(_0x3536x2= _0x3536x2[_0x763a[247]];null!= _0x3536x2;){this[_0x763a[1762]](_0x3536x2,_0x3536x3,_0x3536x4),_0x3536x2= _0x3536x2[_0x763a[1765]]}};mxCompactTreeLayout[_0x763a[202]][_0x763a[1758]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= null!= _0x3536x4?_0x3536x4:[];var _0x3536x5=mxCellPath[_0x763a[385]](_0x3536x2),_0x3536x9=null;if(null!= _0x3536x2&& null== _0x3536x4[_0x3536x5]&& !this[_0x763a[1713]](_0x3536x2)){_0x3536x4[_0x3536x5]= _0x3536x2;var _0x3536x9=this[_0x763a[1766]](_0x3536x2),_0x3536x5=this[_0x763a[1179]][_0x763a[502]](),_0x3536xa=null;_0x3536x2= this[_0x763a[1179]][_0x763a[264]](_0x3536x2,_0x3536x3,this[_0x763a[1744]],!this[_0x763a[1744]],!1,!0);for(var _0x3536x12=this[_0x763a[1179]][_0x763a[249]](),_0x3536x13=0;_0x3536x13< _0x3536x2[_0x763a[67]];_0x3536x13++){var _0x3536x14=_0x3536x2[_0x3536x13];if(!this[_0x763a[1715]](_0x3536x14)){this[_0x763a[1750]]&& this[_0x763a[1722]](_0x3536x14,null);this[_0x763a[1755]]&& (this[_0x763a[1716]](_0x3536x14,!1),this[_0x763a[1722]](_0x3536x14,null));var _0x3536x15=_0x3536x12[_0x763a[248]](_0x3536x14),_0x3536x14=null!= _0x3536x15?_0x3536x15[_0x763a[1710]](this[_0x763a[1744]]):_0x3536x12[_0x763a[1710]](_0x3536x14,this[_0x763a[1744]]),_0x3536x15=this[_0x763a[1758]](_0x3536x14,_0x3536x3,_0x3536x4);null!= _0x3536x15&& null!= _0x3536x5[_0x763a[1721]](_0x3536x14)&& (null== _0x3536xa?_0x3536x9[_0x763a[247]]= _0x3536x15:_0x3536xa[_0x763a[1765]]= _0x3536x15,_0x3536xa= _0x3536x15)}}};return _0x3536x9};mxCompactTreeLayout[_0x763a[202]][_0x763a[1759]]= function(_0x3536x2){if(null!= _0x3536x2){for(var _0x3536x3=_0x3536x2[_0x763a[247]];null!= _0x3536x3;){this[_0x763a[1759]](_0x3536x3),_0x3536x3= _0x3536x3[_0x763a[1765]]};null!= _0x3536x2[_0x763a[247]]?this[_0x763a[1767]](_0x3536x2,this[_0x763a[234]](_0x3536x2)):this[_0x763a[1768]](_0x3536x2)}};mxCompactTreeLayout[_0x763a[202]][_0x763a[1760]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x2[_0x763a[235]]+= _0x3536x3+ _0x3536x2[_0x763a[1769]];_0x3536x2[_0x763a[236]]+= _0x3536x4+ _0x3536x2[_0x763a[1770]];_0x3536x5= this[_0x763a[183]](_0x3536x2,_0x3536x5);_0x3536x3= _0x3536x2[_0x763a[247]];if(null!= _0x3536x3){_0x3536x5= this[_0x763a[1760]](_0x3536x3,_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]],_0x3536x5);_0x3536x4= _0x3536x2[_0x763a[236]]+ _0x3536x3[_0x763a[1770]];for(var _0x3536x9=_0x3536x3[_0x763a[1765]];null!= _0x3536x9;){_0x3536x5= this[_0x763a[1760]](_0x3536x9,_0x3536x2[_0x763a[235]]+ _0x3536x3[_0x763a[1769]],_0x3536x4,_0x3536x5),_0x3536x4+= _0x3536x9[_0x763a[1770]],_0x3536x9= _0x3536x9[_0x763a[1765]]}};return _0x3536x5};mxCompactTreeLayout[_0x763a[202]][_0x763a[1761]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x2[_0x763a[235]]+= _0x3536x4+ _0x3536x2[_0x763a[1770]];_0x3536x2[_0x763a[236]]+= _0x3536x5+ _0x3536x2[_0x763a[1769]];_0x3536x9= this[_0x763a[183]](_0x3536x2,_0x3536x9);_0x3536x3= _0x3536x2[_0x763a[247]];if(null!= _0x3536x3){_0x3536x9= this[_0x763a[1761]](_0x3536x3,_0x3536x2,_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]],_0x3536x9);_0x3536x4= _0x3536x2[_0x763a[235]]+ _0x3536x3[_0x763a[1770]];for(_0x3536x5= _0x3536x3[_0x763a[1765]];null!= _0x3536x5;){_0x3536x9= this[_0x763a[1761]](_0x3536x5,_0x3536x2,_0x3536x4,_0x3536x2[_0x763a[236]]+ _0x3536x3[_0x763a[1769]],_0x3536x9),_0x3536x4+= _0x3536x5[_0x763a[1770]],_0x3536x5= _0x3536x5[_0x763a[1765]]}};return _0x3536x9};mxCompactTreeLayout[_0x763a[202]][_0x763a[1767]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1749]]+ this[_0x763a[1748]],_0x3536x5=(_0x3536x3- _0x3536x2[_0x763a[117]])/ 2- this[_0x763a[1749]],_0x3536x9=_0x3536x5+ _0x3536x2[_0x763a[117]]+ 2* this[_0x763a[1749]]- _0x3536x3;_0x3536x2[_0x763a[247]][_0x763a[1769]]= _0x3536x4+ _0x3536x2[_0x763a[119]];_0x3536x2[_0x763a[247]][_0x763a[1770]]= _0x3536x9;_0x3536x2[_0x763a[1772]][_0x763a[1771]]= this[_0x763a[1773]](_0x3536x2[_0x763a[119]],0,this[_0x763a[1773]](_0x3536x4,_0x3536x9,_0x3536x2[_0x763a[1772]][_0x763a[1771]]));_0x3536x2[_0x763a[1772]][_0x763a[1774]]= this[_0x763a[1773]](_0x3536x2[_0x763a[119]],0,this[_0x763a[1773]](_0x3536x4,_0x3536x5,_0x3536x2[_0x763a[1772]][_0x763a[1774]]))};mxCompactTreeLayout[_0x763a[202]][_0x763a[1768]]= function(_0x3536x2){var _0x3536x3=2* this[_0x763a[1749]];_0x3536x2[_0x763a[1772]][_0x763a[1775]]= this[_0x763a[1773]](_0x3536x2[_0x763a[119]]+ _0x3536x3,0);_0x3536x2[_0x763a[1772]][_0x763a[1771]]= _0x3536x2[_0x763a[1772]][_0x763a[1775]];_0x3536x2[_0x763a[1772]][_0x763a[1776]]= this[_0x763a[1773]](0,-_0x3536x2[_0x763a[117]]- _0x3536x3);_0x3536x2[_0x763a[1772]][_0x763a[1774]]= this[_0x763a[1773]](_0x3536x2[_0x763a[119]]+ _0x3536x3,0,_0x3536x2[_0x763a[1772]][_0x763a[1776]])};mxCompactTreeLayout[_0x763a[202]][_0x763a[234]]= function(_0x3536x2){var _0x3536x3=2* this[_0x763a[1749]],_0x3536x4=_0x3536x2[_0x763a[247]];_0x3536x2[_0x763a[1772]]= _0x3536x4[_0x763a[1772]];for(var _0x3536x5=_0x3536x4[_0x763a[117]]+ _0x3536x3,_0x3536x9=_0x3536x5,_0x3536x4=_0x3536x4[_0x763a[1765]];null!= _0x3536x4;){var _0x3536xa=this[_0x763a[1777]](_0x3536x2[_0x763a[1772]],_0x3536x4[_0x763a[1772]]);_0x3536x4[_0x763a[1770]]= _0x3536xa+ _0x3536x5;_0x3536x4[_0x763a[1769]]= 0;_0x3536x5= _0x3536x4[_0x763a[117]]+ _0x3536x3;_0x3536x9+= _0x3536xa+ _0x3536x5;_0x3536x4= _0x3536x4[_0x763a[1765]]};return _0x3536x9};mxCompactTreeLayout[_0x763a[202]][_0x763a[1777]]= function(_0x3536x2,_0x3536x3){for(var _0x3536x4=0,_0x3536x5=0,_0x3536x9=0,_0x3536xa=_0x3536x2[_0x763a[1774]],_0x3536x12=_0x3536x3[_0x763a[1771]];null!= _0x3536x12&& null!= _0x3536xa;){var _0x3536x13=this[_0x763a[1368]](_0x3536x4,_0x3536x5,_0x3536x12[_0x763a[1126]],_0x3536x12[_0x763a[1125]],_0x3536xa[_0x763a[1126]],_0x3536xa[_0x763a[1125]]),_0x3536x5=_0x3536x5+ _0x3536x13,_0x3536x9=_0x3536x9+ _0x3536x13;_0x3536x4+ _0x3536x12[_0x763a[1126]]<= _0x3536xa[_0x763a[1126]]?(_0x3536x4+= _0x3536x12[_0x763a[1126]],_0x3536x5+= _0x3536x12[_0x763a[1125]],_0x3536x12= _0x3536x12[_0x763a[1765]]):(_0x3536x4-= _0x3536xa[_0x763a[1126]],_0x3536x5-= _0x3536xa[_0x763a[1125]],_0x3536xa= _0x3536xa[_0x763a[1765]])};null!= _0x3536x12?(_0x3536x4= this[_0x763a[1778]](_0x3536x2[_0x763a[1775]],0,0,_0x3536x12,_0x3536x4,_0x3536x5),_0x3536x2[_0x763a[1775]]= null!= _0x3536x4[_0x763a[1765]]?_0x3536x3[_0x763a[1775]]:_0x3536x4,_0x3536x2[_0x763a[1776]]= _0x3536x3[_0x763a[1776]]):(_0x3536x4= this[_0x763a[1778]](_0x3536x3[_0x763a[1776]],_0x3536x4,_0x3536x5,_0x3536xa,0,0),null== _0x3536x4[_0x763a[1765]]&& (_0x3536x2[_0x763a[1776]]= _0x3536x4));_0x3536x2[_0x763a[1774]]= _0x3536x3[_0x763a[1774]];return _0x3536x9};mxCompactTreeLayout[_0x763a[202]][_0x763a[1368]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){var _0x3536x12=0;if(_0x3536x9<= _0x3536x2|| 0>= _0x3536x2+ _0x3536x4){return 0};_0x3536x12= 0< _0x3536x9* _0x3536x5- _0x3536x4* _0x3536xa?0> _0x3536x2?_0x3536x2* _0x3536x5/ _0x3536x4- _0x3536x3:0< _0x3536x2?_0x3536x2* _0x3536xa/ _0x3536x9- _0x3536x3:-_0x3536x3:_0x3536x9< _0x3536x2+ _0x3536x4?_0x3536xa- (_0x3536x3+ (_0x3536x9- _0x3536x2)* _0x3536x5/ _0x3536x4):_0x3536x9> _0x3536x2+ _0x3536x4?(_0x3536x4+ _0x3536x2)* _0x3536xa/ _0x3536x9- (_0x3536x3+ _0x3536x5):_0x3536xa- (_0x3536x3+ _0x3536x5);return 0< _0x3536x12?_0x3536x12:0};mxCompactTreeLayout[_0x763a[202]][_0x763a[1778]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536x3= _0x3536x9+ _0x3536x5[_0x763a[1126]]- _0x3536x3;_0x3536x9= _0x3536x9= 0;0== _0x3536x5[_0x763a[1126]]?_0x3536x9= _0x3536x5[_0x763a[1125]]:(_0x3536x9= _0x3536x3* _0x3536x5[_0x763a[1125]],_0x3536x9/= _0x3536x5[_0x763a[1126]]);_0x3536x3= this[_0x763a[1773]](_0x3536x3,_0x3536x9,_0x3536x5[_0x763a[1765]]);_0x3536x2[_0x763a[1765]]= this[_0x763a[1773]](0,_0x3536xa+ _0x3536x5[_0x763a[1125]]- _0x3536x9- _0x3536x4,_0x3536x3);return _0x3536x3};mxCompactTreeLayout[_0x763a[202]][_0x763a[1766]]= function(_0x3536x2){var _0x3536x3={};_0x3536x3[_0x763a[246]]= _0x3536x2;_0x3536x3[_0x763a[235]]= 0;_0x3536x3[_0x763a[236]]= 0;_0x3536x3[_0x763a[117]]= 0;_0x3536x3[_0x763a[119]]= 0;_0x3536x2= this[_0x763a[1726]](_0x3536x2);null!= _0x3536x2&& (this[_0x763a[1737]]()?(_0x3536x3[_0x763a[117]]= _0x3536x2[_0x763a[119]],_0x3536x3[_0x763a[119]]= _0x3536x2[_0x763a[117]]):(_0x3536x3[_0x763a[117]]= _0x3536x2[_0x763a[117]],_0x3536x3[_0x763a[119]]= _0x3536x2[_0x763a[119]]));_0x3536x3[_0x763a[1769]]= 0;_0x3536x3[_0x763a[1770]]= 0;_0x3536x3[_0x763a[1772]]= {};return _0x3536x3};mxCompactTreeLayout[_0x763a[202]][_0x763a[183]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[502]](),_0x3536x5=_0x3536x2[_0x763a[246]],_0x3536x9=_0x3536x4[_0x763a[1721]](_0x3536x5);null!= _0x3536x5&& null!= _0x3536x9&& (this[_0x763a[1711]](_0x3536x5)&& (_0x3536x9= this[_0x763a[1725]](_0x3536x5,_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]]),this[_0x763a[1735]]&& (_0x3536x4= _0x3536x4[_0x763a[1197]](_0x3536x5),_0x3536x5= mxCellPath[_0x763a[385]](_0x3536x4),null== this[_0x763a[1746]][_0x3536x5]&& (this[_0x763a[1746]][_0x3536x5]= _0x3536x4))),_0x3536x3= null== _0x3536x3? new mxRectangle(_0x3536x9[_0x763a[235]],_0x3536x9[_0x763a[236]],_0x3536x9[_0x763a[117]],_0x3536x9[_0x763a[119]]): new mxRectangle(Math[_0x763a[243]](_0x3536x3[_0x763a[235]],_0x3536x9[_0x763a[235]]),Math[_0x763a[243]](_0x3536x3[_0x763a[236]],_0x3536x9[_0x763a[236]]),Math[_0x763a[160]](_0x3536x3[_0x763a[235]]+ _0x3536x3[_0x763a[117]],_0x3536x9[_0x763a[235]]+ _0x3536x9[_0x763a[117]]),Math[_0x763a[160]](_0x3536x3[_0x763a[236]]+ _0x3536x3[_0x763a[119]],_0x3536x9[_0x763a[236]]+ _0x3536x9[_0x763a[119]])));return _0x3536x3};mxCompactTreeLayout[_0x763a[202]][_0x763a[1773]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5={};_0x3536x5[_0x763a[1126]]= _0x3536x2;_0x3536x5[_0x763a[1125]]= _0x3536x3;_0x3536x5[_0x763a[1765]]= _0x3536x4;return _0x3536x5};mxCompactTreeLayout[_0x763a[202]][_0x763a[1763]]= function(){var _0x3536x2=[],_0x3536x3;for(_0x3536x3 in this[_0x763a[1746]]){_0x3536x2[_0x763a[207]](this[_0x763a[1746]][_0x3536x3])};this[_0x763a[1727]](mxUtils[_0x763a[1779]](_0x3536x2,!0),this[_0x763a[1745]])};mxCompactTreeLayout[_0x763a[202]][_0x763a[1764]]= function(_0x3536x2){this[_0x763a[1780]](_0x3536x2);for(_0x3536x2= _0x3536x2[_0x763a[247]];null!= _0x3536x2;){this[_0x763a[1764]](_0x3536x2),_0x3536x2= _0x3536x2[_0x763a[1765]]}};mxCompactTreeLayout[_0x763a[202]][_0x763a[1780]]= function(_0x3536x2){for(var _0x3536x3=_0x3536x2[_0x763a[247]],_0x3536x4=_0x3536x2[_0x763a[246]],_0x3536x5=0,_0x3536x9=[];null!= _0x3536x3;){_0x3536x5++;var _0x3536xa=_0x3536x3[_0x763a[235]];this[_0x763a[662]]&& (_0x3536xa= _0x3536x3[_0x763a[236]]);_0x3536x9[_0x763a[207]]( new WeightedCellSorter(_0x3536x3,_0x3536xa));_0x3536x3= _0x3536x3[_0x763a[1765]]};_0x3536x9[_0x763a[470]](WeightedCellSorter[_0x763a[202]][_0x763a[469]]);var _0x3536xa=_0x3536x2[_0x763a[117]],_0x3536x12=(_0x3536x5+ 1)* this[_0x763a[1751]];_0x3536xa> _0x3536x12+ 2* this[_0x763a[1751]]&& (_0x3536xa-= 2* this[_0x763a[1751]]);_0x3536x2= _0x3536xa/ _0x3536x5;_0x3536x3= _0x3536x2/ 2;_0x3536xa> _0x3536x12+ 2* this[_0x763a[1751]]&& (_0x3536x3+= this[_0x763a[1751]]);for(var _0x3536xa=this[_0x763a[1753]]- this[_0x763a[1752]],_0x3536x12=0,_0x3536x13=this[_0x763a[1726]](_0x3536x4),_0x3536x14=0;_0x3536x14< _0x3536x9[_0x763a[67]];_0x3536x14++){for(var _0x3536x15=_0x3536x9[_0x3536x14][_0x763a[246]][_0x763a[246]],_0x3536x16=this[_0x763a[1726]](_0x3536x15),_0x3536x15=this[_0x763a[1179]][_0x763a[1781]](_0x3536x4,_0x3536x15,!1),_0x3536x17=[],_0x3536x18=0,_0x3536x19=0,_0x3536x1a=0;_0x3536x1a< _0x3536x15[_0x763a[67]];_0x3536x1a++){this[_0x763a[662]]?(_0x3536x18= _0x3536x13[_0x763a[235]]+ _0x3536x13[_0x763a[117]],_0x3536x19= _0x3536x13[_0x763a[236]]+ _0x3536x3,_0x3536x17[_0x763a[207]]( new mxPoint(_0x3536x18,_0x3536x19)),_0x3536x18= _0x3536x13[_0x763a[235]]+ _0x3536x13[_0x763a[117]]+ _0x3536xa,_0x3536x17[_0x763a[207]]( new mxPoint(_0x3536x18,_0x3536x19)),_0x3536x19= _0x3536x16[_0x763a[236]]+ _0x3536x16[_0x763a[119]]/ 2):(_0x3536x18= _0x3536x13[_0x763a[235]]+ _0x3536x3,_0x3536x19= _0x3536x13[_0x763a[236]]+ _0x3536x13[_0x763a[119]],_0x3536x17[_0x763a[207]]( new mxPoint(_0x3536x18,_0x3536x19)),_0x3536x19= _0x3536x13[_0x763a[236]]+ _0x3536x13[_0x763a[119]]+ _0x3536xa,_0x3536x17[_0x763a[207]]( new mxPoint(_0x3536x18,_0x3536x19)),_0x3536x18= _0x3536x16[_0x763a[235]]+ _0x3536x16[_0x763a[117]]/ 2),_0x3536x17[_0x763a[207]]( new mxPoint(_0x3536x18,_0x3536x19)),this[_0x763a[1722]](_0x3536x15[_0x3536x1a],_0x3536x17)};_0x3536x14< _0x3536x5/ 2?_0x3536xa+= this[_0x763a[1752]]:_0x3536x14> _0x3536x5/ 2&& (_0x3536xa-= this[_0x763a[1752]]);_0x3536x3+= _0x3536x2;_0x3536x12= Math[_0x763a[160]](_0x3536x12,_0x3536xa)}};function WeightedCellSorter(_0x3536x2,_0x3536x3){this[_0x763a[246]]= _0x3536x2;this[_0x763a[1782]]= _0x3536x3}WeightedCellSorter[_0x763a[202]][_0x763a[1782]]= 0;WeightedCellSorter[_0x763a[202]][_0x763a[1783]]= !1;WeightedCellSorter[_0x763a[202]][_0x763a[1784]]= !1;WeightedCellSorter[_0x763a[202]][_0x763a[1785]]= null;WeightedCellSorter[_0x763a[202]][_0x763a[246]]= null;WeightedCellSorter[_0x763a[202]][_0x763a[469]]= function(_0x3536x2,_0x3536x3){return null!= _0x3536x2&& null!= _0x3536x3?_0x3536x3[_0x763a[1782]]> _0x3536x2[_0x763a[1782]]?1:_0x3536x3[_0x763a[1782]]< _0x3536x2[_0x763a[1782]]?-1:_0x3536x3[_0x763a[1783]]?1:-1:0};function mxFastOrganicLayout(_0x3536x2){mxGraphLayout[_0x763a[239]](this,_0x3536x2)}mxFastOrganicLayout[_0x763a[202]]= new mxGraphLayout;mxFastOrganicLayout[_0x763a[202]][_0x763a[196]]= mxFastOrganicLayout;mxFastOrganicLayout[_0x763a[202]][_0x763a[1786]]= !0;mxFastOrganicLayout[_0x763a[202]][_0x763a[1750]]= !0;mxFastOrganicLayout[_0x763a[202]][_0x763a[1787]]= !0;mxFastOrganicLayout[_0x763a[202]][_0x763a[1788]]= 50;mxFastOrganicLayout[_0x763a[202]][_0x763a[1789]]= 0;mxFastOrganicLayout[_0x763a[202]][_0x763a[1790]]= 2;mxFastOrganicLayout[_0x763a[202]][_0x763a[1791]]= 500;mxFastOrganicLayout[_0x763a[202]][_0x763a[1792]]= 4;mxFastOrganicLayout[_0x763a[202]][_0x763a[1793]]= 200;mxFastOrganicLayout[_0x763a[202]][_0x763a[1794]]= 0;mxFastOrganicLayout[_0x763a[202]][_0x763a[1795]]= 0;mxFastOrganicLayout[_0x763a[202]][_0x763a[1796]]= 0;mxFastOrganicLayout[_0x763a[202]][_0x763a[1797]]= !0;mxFastOrganicLayout[_0x763a[202]][_0x763a[1713]]= function(_0x3536x2){return mxGraphLayout[_0x763a[202]][_0x763a[1713]][_0x763a[183]](this,arguments)|| 0== this[_0x763a[1179]][_0x763a[1756]](_0x3536x2)[_0x763a[67]]};mxFastOrganicLayout[_0x763a[202]][_0x763a[350]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[502]]();this[_0x763a[1798]]= [];for(var _0x3536x4=this[_0x763a[1179]][_0x763a[1728]](_0x3536x2),_0x3536x5=0;_0x3536x5< _0x3536x4[_0x763a[67]];_0x3536x5++){this[_0x763a[1713]](_0x3536x4[_0x3536x5])|| this[_0x763a[1798]][_0x763a[207]](_0x3536x4[_0x3536x5])};var _0x3536x9=this[_0x763a[1786]]?this[_0x763a[1179]][_0x763a[441]][_0x763a[1799]](this[_0x763a[1798]]):null,_0x3536xa=this[_0x763a[1798]][_0x763a[67]];this[_0x763a[1800]]= [];this[_0x763a[1801]]= [];this[_0x763a[1802]]= [];this[_0x763a[1803]]= [];this[_0x763a[1804]]= [];this[_0x763a[1805]]= [];this[_0x763a[1806]]= [];this[_0x763a[1807]]= [];0.0010> this[_0x763a[1788]]&& (this[_0x763a[1788]]= 0.0010);this[_0x763a[1789]]= this[_0x763a[1788]]* this[_0x763a[1788]];for(_0x3536x5= 0;_0x3536x5< this[_0x763a[1798]][_0x763a[67]];_0x3536x5++){var _0x3536x12=this[_0x763a[1798]][_0x3536x5];this[_0x763a[1803]][_0x3536x5]= [];var _0x3536x13=mxCellPath[_0x763a[385]](_0x3536x12);this[_0x763a[1800]][_0x3536x13]= _0x3536x5;var _0x3536x14=this[_0x763a[1726]](_0x3536x12),_0x3536x15=_0x3536x14[_0x763a[117]],_0x3536x16=_0x3536x14[_0x763a[119]],_0x3536x17=_0x3536x14[_0x763a[235]],_0x3536x18=_0x3536x14[_0x763a[236]];this[_0x763a[1803]][_0x3536x5][0]= _0x3536x17+ _0x3536x15/ 2;this[_0x763a[1803]][_0x3536x5][1]= _0x3536x18+ _0x3536x16/ 2;this[_0x763a[1806]][_0x3536x5]= Math[_0x763a[243]](_0x3536x15,_0x3536x16);this[_0x763a[1807]][_0x3536x5]= this[_0x763a[1806]][_0x3536x5]* this[_0x763a[1806]][_0x3536x5]};_0x3536x3[_0x763a[473]]();try{for(_0x3536x5= 0;_0x3536x5< _0x3536xa;_0x3536x5++){this[_0x763a[1801]][_0x3536x5]= 0;this[_0x763a[1802]][_0x3536x5]= 0;this[_0x763a[1804]][_0x3536x5]= this[_0x763a[1711]](this[_0x763a[1798]][_0x3536x5]);var _0x3536x19=this[_0x763a[1179]][_0x763a[1756]](this[_0x763a[1798]][_0x3536x5],_0x3536x2),_0x3536x4=this[_0x763a[1179]][_0x763a[1808]](_0x3536x19,this[_0x763a[1798]][_0x3536x5]);this[_0x763a[1805]][_0x3536x5]= [];for(_0x3536x15= 0;_0x3536x15< _0x3536x4[_0x763a[67]];_0x3536x15++){this[_0x763a[1750]]&& this[_0x763a[1179]][_0x763a[1809]](_0x3536x19[_0x3536x15]);this[_0x763a[1787]]&& this[_0x763a[1716]](_0x3536x19[_0x3536x15],!1);var _0x3536x13=mxCellPath[_0x763a[385]](_0x3536x4[_0x3536x15]),_0x3536x1a=this[_0x763a[1800]][_0x3536x13];this[_0x763a[1805]][_0x3536x5][_0x3536x15]= null!= _0x3536x1a?_0x3536x1a:_0x3536x5}};this[_0x763a[1794]]= this[_0x763a[1793]];0== this[_0x763a[1795]]&& (this[_0x763a[1795]]= 20* Math[_0x763a[428]](_0x3536xa));for(this[_0x763a[1796]]= 0;this[_0x763a[1796]]< this[_0x763a[1795]];this[_0x763a[1796]]++){if(!this[_0x763a[1797]]){return};this[_0x763a[1810]]();this[_0x763a[1811]]();this[_0x763a[1812]]();this[_0x763a[1813]]()};_0x3536x2= _0x3536x4= null;for(_0x3536x5= 0;_0x3536x5< this[_0x763a[1798]][_0x763a[67]];_0x3536x5++){_0x3536x12= this[_0x763a[1798]][_0x3536x5],this[_0x763a[1711]](_0x3536x12)&& (_0x3536x14= this[_0x763a[1726]](_0x3536x12),null!= _0x3536x14&& (this[_0x763a[1803]][_0x3536x5][0]-= _0x3536x14[_0x763a[117]]/ 2,this[_0x763a[1803]][_0x3536x5][1]-= _0x3536x14[_0x763a[119]]/ 2,_0x3536x17= this[_0x763a[1179]][_0x763a[1021]](this[_0x763a[1803]][_0x3536x5][0]),_0x3536x18= this[_0x763a[1179]][_0x763a[1021]](this[_0x763a[1803]][_0x3536x5][1]),this[_0x763a[1725]](_0x3536x12,_0x3536x17,_0x3536x18),_0x3536x4= null== _0x3536x4?_0x3536x17:Math[_0x763a[243]](_0x3536x4,_0x3536x17),_0x3536x2= null== _0x3536x2?_0x3536x18:Math[_0x763a[243]](_0x3536x2,_0x3536x18)))};_0x3536x5= -(_0x3536x4|| 0)+ 1;_0x3536x12= -(_0x3536x2|| 0)+ 1;null!= _0x3536x9&& (_0x3536x5+= _0x3536x9[_0x763a[235]],_0x3536x12+= _0x3536x9[_0x763a[236]]);this[_0x763a[1179]][_0x763a[834]](this[_0x763a[1798]],_0x3536x5,_0x3536x12)}finally{_0x3536x3[_0x763a[476]]()}};mxFastOrganicLayout[_0x763a[202]][_0x763a[1812]]= function(){for(var _0x3536x2=0;_0x3536x2< this[_0x763a[1798]][_0x763a[67]];_0x3536x2++){if(this[_0x763a[1804]][_0x3536x2]){var _0x3536x3=Math[_0x763a[428]](this[_0x763a[1801]][_0x3536x2]* this[_0x763a[1801]][_0x3536x2]+ this[_0x763a[1802]][_0x3536x2]* this[_0x763a[1802]][_0x3536x2]);0.0010> _0x3536x3&& (_0x3536x3= 0.0010);var _0x3536x4=this[_0x763a[1801]][_0x3536x2]/ _0x3536x3* Math[_0x763a[243]](_0x3536x3,this[_0x763a[1794]]),_0x3536x3=this[_0x763a[1802]][_0x3536x2]/ _0x3536x3* Math[_0x763a[243]](_0x3536x3,this[_0x763a[1794]]);this[_0x763a[1801]][_0x3536x2]= 0;this[_0x763a[1802]][_0x3536x2]= 0;this[_0x763a[1803]][_0x3536x2][0]+= _0x3536x4;this[_0x763a[1803]][_0x3536x2][1]+= _0x3536x3}}};mxFastOrganicLayout[_0x763a[202]][_0x763a[1811]]= function(){for(var _0x3536x2=0;_0x3536x2< this[_0x763a[1798]][_0x763a[67]];_0x3536x2++){for(var _0x3536x3=0;_0x3536x3< this[_0x763a[1805]][_0x3536x2][_0x763a[67]];_0x3536x3++){var _0x3536x4=this[_0x763a[1805]][_0x3536x2][_0x3536x3];if(_0x3536x2!= _0x3536x4&& this[_0x763a[1804]][_0x3536x2]&& this[_0x763a[1804]][_0x3536x4]){var _0x3536x5=this[_0x763a[1803]][_0x3536x2][0]- this[_0x763a[1803]][_0x3536x4][0],_0x3536x9=this[_0x763a[1803]][_0x3536x2][1]- this[_0x763a[1803]][_0x3536x4][1],_0x3536xa=_0x3536x5* _0x3536x5+ _0x3536x9* _0x3536x9- this[_0x763a[1807]][_0x3536x2]- this[_0x763a[1807]][_0x3536x4];_0x3536xa< this[_0x763a[1792]]&& (_0x3536xa= this[_0x763a[1792]]);var _0x3536x12=Math[_0x763a[428]](_0x3536xa),_0x3536xa=_0x3536xa/ this[_0x763a[1788]],_0x3536x5=_0x3536x5/ _0x3536x12* _0x3536xa,_0x3536x9=_0x3536x9/ _0x3536x12* _0x3536xa;this[_0x763a[1801]][_0x3536x2]-= _0x3536x5;this[_0x763a[1802]][_0x3536x2]-= _0x3536x9;this[_0x763a[1801]][_0x3536x4]+= _0x3536x5;this[_0x763a[1802]][_0x3536x4]+= _0x3536x9}}}};mxFastOrganicLayout[_0x763a[202]][_0x763a[1810]]= function(){for(var _0x3536x2=this[_0x763a[1798]][_0x763a[67]],_0x3536x3=0;_0x3536x3< _0x3536x2;_0x3536x3++){for(var _0x3536x4=_0x3536x3;_0x3536x4< _0x3536x2;_0x3536x4++){if(!this[_0x763a[1797]]){return};if(_0x3536x4!= _0x3536x3&& this[_0x763a[1804]][_0x3536x3]&& this[_0x763a[1804]][_0x3536x4]){var _0x3536x5=this[_0x763a[1803]][_0x3536x3][0]- this[_0x763a[1803]][_0x3536x4][0],_0x3536x9=this[_0x763a[1803]][_0x3536x3][1]- this[_0x763a[1803]][_0x3536x4][1];0== _0x3536x5&& (_0x3536x5= 0.01+ Math[_0x763a[1814]]());0== _0x3536x9&& (_0x3536x9= 0.01+ Math[_0x763a[1814]]());var _0x3536xa=Math[_0x763a[428]](_0x3536x5* _0x3536x5+ _0x3536x9* _0x3536x9),_0x3536x12=_0x3536xa- this[_0x763a[1806]][_0x3536x3]- this[_0x763a[1806]][_0x3536x4];_0x3536x12> this[_0x763a[1791]]|| (_0x3536x12< this[_0x763a[1790]]&& (_0x3536x12= this[_0x763a[1790]]),_0x3536x12= this[_0x763a[1789]]/ _0x3536x12,_0x3536x5= _0x3536x5/ _0x3536xa* _0x3536x12,_0x3536x9= _0x3536x9/ _0x3536xa* _0x3536x12,this[_0x763a[1801]][_0x3536x3]+= _0x3536x5,this[_0x763a[1802]][_0x3536x3]+= _0x3536x9,this[_0x763a[1801]][_0x3536x4]-= _0x3536x5,this[_0x763a[1802]][_0x3536x4]-= _0x3536x9)}}}};mxFastOrganicLayout[_0x763a[202]][_0x763a[1813]]= function(){this[_0x763a[1794]]= this[_0x763a[1793]]* (1- this[_0x763a[1796]]/ this[_0x763a[1795]])};function mxCircleLayout(_0x3536x2,_0x3536x3){mxGraphLayout[_0x763a[239]](this,_0x3536x2);this[_0x763a[1806]]= null!= _0x3536x3?_0x3536x3:100}mxCircleLayout[_0x763a[202]]= new mxGraphLayout;mxCircleLayout[_0x763a[202]][_0x763a[196]]= mxCircleLayout;mxCircleLayout[_0x763a[202]][_0x763a[1806]]= null;mxCircleLayout[_0x763a[202]][_0x763a[1815]]= !1;mxCircleLayout[_0x763a[202]][_0x763a[1732]]= 0;mxCircleLayout[_0x763a[202]][_0x763a[1733]]= 0;mxCircleLayout[_0x763a[202]][_0x763a[1750]]= !0;mxCircleLayout[_0x763a[202]][_0x763a[1787]]= !0;mxCircleLayout[_0x763a[202]][_0x763a[350]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[502]]();_0x3536x3[_0x763a[473]]();try{for(var _0x3536x4=0,_0x3536x5=null,_0x3536x9=null,_0x3536xa=[],_0x3536x12=_0x3536x3[_0x763a[262]](_0x3536x2),_0x3536x13=0;_0x3536x13< _0x3536x12;_0x3536x13++){var _0x3536x14=_0x3536x3[_0x763a[263]](_0x3536x2,_0x3536x13);if(this[_0x763a[1713]](_0x3536x14)){this[_0x763a[1715]](_0x3536x14)|| (this[_0x763a[1750]]&& this[_0x763a[1179]][_0x763a[1809]](_0x3536x14),this[_0x763a[1787]]&& this[_0x763a[1716]](_0x3536x14,!1))}else {_0x3536xa[_0x763a[207]](_0x3536x14);var _0x3536x15=this[_0x763a[1726]](_0x3536x14),_0x3536x5=null== _0x3536x5?_0x3536x15[_0x763a[236]]:Math[_0x763a[243]](_0x3536x5,_0x3536x15[_0x763a[236]]),_0x3536x9=null== _0x3536x9?_0x3536x15[_0x763a[235]]:Math[_0x763a[243]](_0x3536x9,_0x3536x15[_0x763a[235]]),_0x3536x4=Math[_0x763a[160]](_0x3536x4,Math[_0x763a[160]](_0x3536x15[_0x763a[117]],_0x3536x15[_0x763a[119]]))}};var _0x3536x16=this[_0x763a[1816]](_0x3536xa[_0x763a[67]],_0x3536x4);this[_0x763a[1815]]&& (_0x3536x9= this[_0x763a[1732]],_0x3536x5= this[_0x763a[1733]]);this[_0x763a[1817]](_0x3536xa,_0x3536x16,_0x3536x9,_0x3536x5)}finally{_0x3536x3[_0x763a[476]]()}};mxCircleLayout[_0x763a[202]][_0x763a[1816]]= function(_0x3536x2,_0x3536x3){return Math[_0x763a[160]](_0x3536x2* _0x3536x3/ Math[_0x763a[424]],this[_0x763a[1806]])};mxCircleLayout[_0x763a[202]][_0x763a[1817]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){for(var _0x3536x9=_0x3536x2[_0x763a[67]],_0x3536xa=2* Math[_0x763a[424]]/ _0x3536x9,_0x3536x12=0;_0x3536x12< _0x3536x9;_0x3536x12++){this[_0x763a[1711]](_0x3536x2[_0x3536x12])&& this[_0x763a[1725]](_0x3536x2[_0x3536x12],_0x3536x4+ _0x3536x3+ _0x3536x3* Math[_0x763a[427]](_0x3536x12* _0x3536xa),_0x3536x5+ _0x3536x3+ _0x3536x3* Math[_0x763a[426]](_0x3536x12* _0x3536xa))}};function mxParallelEdgeLayout(_0x3536x2){mxGraphLayout[_0x763a[239]](this,_0x3536x2)}mxParallelEdgeLayout[_0x763a[202]]= new mxGraphLayout;mxParallelEdgeLayout[_0x763a[202]][_0x763a[196]]= mxParallelEdgeLayout;mxParallelEdgeLayout[_0x763a[202]][_0x763a[657]]= 20;mxParallelEdgeLayout[_0x763a[202]][_0x763a[350]]= function(_0x3536x2){_0x3536x2= this[_0x763a[1818]](_0x3536x2);this[_0x763a[1179]][_0x763a[251]][_0x763a[473]]();try{for(var _0x3536x3 in _0x3536x2){var _0x3536x4=_0x3536x2[_0x3536x3];1< _0x3536x4[_0x763a[67]]&& this[_0x763a[1759]](_0x3536x4)}}finally{this[_0x763a[1179]][_0x763a[251]][_0x763a[476]]()}};mxParallelEdgeLayout[_0x763a[202]][_0x763a[1818]]= function(_0x3536x2){for(var _0x3536x3=this[_0x763a[1179]][_0x763a[502]](),_0x3536x4=[],_0x3536x5=_0x3536x3[_0x763a[262]](_0x3536x2),_0x3536x9=0;_0x3536x9< _0x3536x5;_0x3536x9++){var _0x3536xa=_0x3536x3[_0x763a[263]](_0x3536x2,_0x3536x9);if(!this[_0x763a[1715]](_0x3536xa)){var _0x3536x12=this[_0x763a[1819]](_0x3536xa);null!= _0x3536x12&& (null== _0x3536x4[_0x3536x12]&& (_0x3536x4[_0x3536x12]= []),_0x3536x4[_0x3536x12][_0x763a[207]](_0x3536xa))}};return _0x3536x4};mxParallelEdgeLayout[_0x763a[202]][_0x763a[1819]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[249]](),_0x3536x4=_0x3536x3[_0x763a[248]](_0x3536x2),_0x3536x5=null!= _0x3536x4?_0x3536x4[_0x763a[1710]](!0):_0x3536x3[_0x763a[1710]](_0x3536x2,!0);_0x3536x2= null!= _0x3536x4?_0x3536x4[_0x763a[1710]](!1):_0x3536x3[_0x763a[1710]](_0x3536x2,!1);return null!= _0x3536x5&& null!= _0x3536x2?(_0x3536x5= mxCellPath[_0x763a[385]](_0x3536x5),_0x3536x2= mxCellPath[_0x763a[385]](_0x3536x2),_0x3536x5> _0x3536x2?_0x3536x2+ _0x763a[213]+ _0x3536x5:_0x3536x5+ _0x763a[213]+ _0x3536x2):null};mxParallelEdgeLayout[_0x763a[202]][_0x763a[1759]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[0],_0x3536x4=this[_0x763a[1179]][_0x763a[502]](),_0x3536x5=_0x3536x4[_0x763a[1721]](_0x3536x4[_0x763a[1709]](_0x3536x3,!0)),_0x3536x9=_0x3536x4[_0x763a[1721]](_0x3536x4[_0x763a[1709]](_0x3536x3,!1));if(_0x3536x5== _0x3536x9){for(var _0x3536x3=_0x3536x5[_0x763a[235]]+ _0x3536x5[_0x763a[117]]+ this[_0x763a[657]],_0x3536x4=_0x3536x5[_0x763a[236]]+ _0x3536x5[_0x763a[119]]/ 2,_0x3536xa=0;_0x3536xa< _0x3536x2[_0x763a[67]];_0x3536xa++){this[_0x763a[1820]](_0x3536x2[_0x3536xa],_0x3536x3,_0x3536x4),_0x3536x3+= this[_0x763a[657]]}}else {if(null!= _0x3536x5&& null!= _0x3536x9){for(var _0x3536x3=_0x3536x5[_0x763a[235]]+ _0x3536x5[_0x763a[117]]/ 2,_0x3536x4=_0x3536x5[_0x763a[236]]+ _0x3536x5[_0x763a[119]]/ 2,_0x3536xa=_0x3536x9[_0x763a[235]]+ _0x3536x9[_0x763a[117]]/ 2- _0x3536x3,_0x3536x12=_0x3536x9[_0x763a[236]]+ _0x3536x9[_0x763a[119]]/ 2- _0x3536x4,_0x3536x9=Math[_0x763a[428]](_0x3536xa* _0x3536xa+ _0x3536x12* _0x3536x12),_0x3536x5=_0x3536x12* this[_0x763a[657]]/ _0x3536x9,_0x3536x9=_0x3536xa* this[_0x763a[657]]/ _0x3536x9,_0x3536x3=_0x3536x3+ _0x3536xa/ 2+ _0x3536x5* (_0x3536x2[_0x763a[67]]- 1)/ 2,_0x3536x4=_0x3536x4+ _0x3536x12/ 2- _0x3536x9* (_0x3536x2[_0x763a[67]]- 1)/ 2,_0x3536xa=0;_0x3536xa< _0x3536x2[_0x763a[67]];_0x3536xa++){this[_0x763a[1820]](_0x3536x2[_0x3536xa],_0x3536x3,_0x3536x4),_0x3536x3-= _0x3536x5,_0x3536x4+= _0x3536x9}}}};mxParallelEdgeLayout[_0x763a[202]][_0x763a[1820]]= function(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[1179]][_0x763a[1712]](_0x3536x2)&& this[_0x763a[1722]](_0x3536x2,[ new mxPoint(_0x3536x3,_0x3536x4)])};function mxCompositeLayout(_0x3536x2,_0x3536x3,_0x3536x4){mxGraphLayout[_0x763a[239]](this,_0x3536x2);this[_0x763a[1821]]= _0x3536x3;this[_0x763a[1822]]= _0x3536x4}mxCompositeLayout[_0x763a[202]]= new mxGraphLayout;mxCompositeLayout[_0x763a[202]][_0x763a[196]]= mxCompositeLayout;mxCompositeLayout[_0x763a[202]][_0x763a[1821]]= null;mxCompositeLayout[_0x763a[202]][_0x763a[1822]]= null;mxCompositeLayout[_0x763a[202]][_0x763a[1702]]= function(_0x3536x2,_0x3536x3,_0x3536x4){null!= this[_0x763a[1822]]?this[_0x763a[1822]][_0x763a[582]][_0x763a[183]](this[_0x763a[1822]],arguments):this[_0x763a[1821]][0][_0x763a[582]][_0x763a[183]](this[_0x763a[1821]][0],arguments)};mxCompositeLayout[_0x763a[202]][_0x763a[350]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[502]]();_0x3536x3[_0x763a[473]]();try{for(var _0x3536x4=0;_0x3536x4< this[_0x763a[1821]][_0x763a[67]];_0x3536x4++){this[_0x763a[1821]][_0x3536x4][_0x763a[350]][_0x763a[183]](this[_0x763a[1821]][_0x3536x4],arguments)}}finally{_0x3536x3[_0x763a[476]]()}};function mxEdgeLabelLayout(_0x3536x2,_0x3536x3){mxGraphLayout[_0x763a[239]](this,_0x3536x2)}mxEdgeLabelLayout[_0x763a[202]]= new mxGraphLayout;mxEdgeLabelLayout[_0x763a[202]][_0x763a[196]]= mxEdgeLabelLayout;mxEdgeLabelLayout[_0x763a[202]][_0x763a[350]]= function(_0x3536x2){for(var _0x3536x3=this[_0x763a[1179]][_0x763a[441]],_0x3536x4=this[_0x763a[1179]][_0x763a[502]](),_0x3536x5=[],_0x3536x9=[],_0x3536xa=_0x3536x4[_0x763a[262]](_0x3536x2),_0x3536x12=0;_0x3536x12< _0x3536xa;_0x3536x12++){var _0x3536x13=_0x3536x4[_0x763a[263]](_0x3536x2,_0x3536x12),_0x3536x14=_0x3536x3[_0x763a[248]](_0x3536x13);null!= _0x3536x14&& (this[_0x763a[1713]](_0x3536x13)?this[_0x763a[1715]](_0x3536x13)|| _0x3536x5[_0x763a[207]](_0x3536x14):_0x3536x9[_0x763a[207]](_0x3536x14))};this[_0x763a[1823]](_0x3536x9,_0x3536x5)};mxEdgeLabelLayout[_0x763a[202]][_0x763a[1823]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[502]]();_0x3536x4[_0x763a[473]]();try{for(var _0x3536x5=0;_0x3536x5< _0x3536x3[_0x763a[67]];_0x3536x5++){var _0x3536x9=_0x3536x3[_0x3536x5];if(null!= _0x3536x9&& null!= _0x3536x9[_0x763a[963]]&& null!= _0x3536x9[_0x763a[963]][_0x763a[1563]]){for(var _0x3536xa=0;_0x3536xa< _0x3536x2[_0x763a[67]];_0x3536xa++){var _0x3536x12=_0x3536x2[_0x3536xa];null!= _0x3536x12&& this[_0x763a[1824]](_0x3536x9,_0x3536x12)}}}}finally{_0x3536x4[_0x763a[476]]()}};mxEdgeLabelLayout[_0x763a[202]][_0x763a[1824]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[502]](),_0x3536x5=_0x3536x2[_0x763a[963]][_0x763a[1563]];if(mxUtils[_0x763a[1825]](_0x3536x5,_0x3536x3)){var _0x3536x9=-_0x3536x5[_0x763a[236]]- _0x3536x5[_0x763a[119]]+ _0x3536x3[_0x763a[236]],_0x3536xa=-_0x3536x5[_0x763a[236]]+ _0x3536x3[_0x763a[236]]+ _0x3536x3[_0x763a[119]],_0x3536x9=Math[_0x763a[425]](_0x3536x9)< Math[_0x763a[425]](_0x3536xa)?_0x3536x9:_0x3536xa,_0x3536xa=-_0x3536x5[_0x763a[235]]- _0x3536x5[_0x763a[117]]+ _0x3536x3[_0x763a[235]],_0x3536x5=-_0x3536x5[_0x763a[235]]+ _0x3536x3[_0x763a[235]]+ _0x3536x3[_0x763a[117]],_0x3536x5=Math[_0x763a[425]](_0x3536xa)< Math[_0x763a[425]](_0x3536x5)?_0x3536xa:_0x3536x5;Math[_0x763a[425]](_0x3536x5)< Math[_0x763a[425]](_0x3536x9)?_0x3536x9= 0:_0x3536x5= 0;_0x3536xa= _0x3536x4[_0x763a[1721]](_0x3536x2[_0x763a[246]]);null!= _0x3536xa&& (_0x3536xa= _0x3536xa[_0x763a[238]](),null!= _0x3536xa[_0x763a[1368]]?(_0x3536xa[_0x763a[1368]][_0x763a[235]]+= _0x3536x5,_0x3536xa[_0x763a[1368]][_0x763a[236]]+= _0x3536x9):_0x3536xa[_0x763a[1368]]= new mxPoint(_0x3536x5,_0x3536x9),_0x3536x4[_0x763a[1724]](_0x3536x2[_0x763a[246]],_0x3536xa))}};function mxGraphAbstractHierarchyCell(){this[_0x763a[235]]= [];this[_0x763a[236]]= [];this[_0x763a[1826]]= []}mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[1827]]= -1;mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[1828]]= -1;mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[235]]= null;mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[236]]= null;mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[117]]= 0;mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[119]]= 0;mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[1829]]= null;mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[1830]]= null;mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[1826]]= null;mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[1831]]= function(_0x3536x2){return null};mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[1832]]= function(_0x3536x2){return null};mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[250]]= function(){return !1};mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[1193]]= function(){return !1};mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[1833]]= function(_0x3536x2){return null};mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[1834]]= function(_0x3536x2,_0x3536x3){return null};mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[1835]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1193]]()?this[_0x763a[235]][0]= _0x3536x3:this[_0x763a[250]]()&& (this[_0x763a[235]][_0x3536x2- this[_0x763a[1828]]- 1]= _0x3536x3)};mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[730]]= function(_0x3536x2){return this[_0x763a[1193]]()?this[_0x763a[235]][0]:this[_0x763a[250]]()?this[_0x763a[235]][_0x3536x2- this[_0x763a[1828]]- 1]:0};mxGraphAbstractHierarchyCell[_0x763a[202]][_0x763a[1836]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1193]]()?this[_0x763a[236]][0]= _0x3536x3:this[_0x763a[250]]()&& (this[_0x763a[236]][_0x3536x2- this[_0x763a[1828]]- 1]= _0x3536x3)};function mxGraphHierarchyNode(_0x3536x2){mxGraphAbstractHierarchyCell[_0x763a[183]](this,arguments);this[_0x763a[246]]= _0x3536x2}mxGraphHierarchyNode[_0x763a[202]]= new mxGraphAbstractHierarchyCell;mxGraphHierarchyNode[_0x763a[202]][_0x763a[196]]= mxGraphHierarchyNode;mxGraphHierarchyNode[_0x763a[202]][_0x763a[246]]= null;mxGraphHierarchyNode[_0x763a[202]][_0x763a[1837]]= [];mxGraphHierarchyNode[_0x763a[202]][_0x763a[1838]]= [];mxGraphHierarchyNode[_0x763a[202]][_0x763a[1839]]= !1;mxGraphHierarchyNode[_0x763a[202]][_0x763a[1840]]= function(_0x3536x2){return this[_0x763a[1827]]};mxGraphHierarchyNode[_0x763a[202]][_0x763a[1831]]= function(_0x3536x2){if(null== this[_0x763a[1829]]){this[_0x763a[1829]]= [];this[_0x763a[1829]][0]= [];for(var _0x3536x3=0;_0x3536x3< this[_0x763a[1837]][_0x763a[67]];_0x3536x3++){var _0x3536x4=this[_0x763a[1837]][_0x3536x3];-1== _0x3536x4[_0x763a[1827]]|| _0x3536x4[_0x763a[1827]]== _0x3536x2+ 1?this[_0x763a[1829]][0][_0x763a[207]](_0x3536x4[_0x763a[1097]]):this[_0x763a[1829]][0][_0x763a[207]](_0x3536x4)}};return this[_0x763a[1829]][0]};mxGraphHierarchyNode[_0x763a[202]][_0x763a[1832]]= function(_0x3536x2){if(null== this[_0x763a[1830]]){this[_0x763a[1830]]= [];this[_0x763a[1830]][0]= [];for(var _0x3536x3=0;_0x3536x3< this[_0x763a[1838]][_0x763a[67]];_0x3536x3++){var _0x3536x4=this[_0x763a[1838]][_0x3536x3];-1== _0x3536x4[_0x763a[1828]]|| _0x3536x4[_0x763a[1828]]== _0x3536x2- 1?this[_0x763a[1830]][0][_0x763a[207]](_0x3536x4[_0x763a[772]]):this[_0x763a[1830]][0][_0x763a[207]](_0x3536x4)}};return this[_0x763a[1830]][0]};mxGraphHierarchyNode[_0x763a[202]][_0x763a[1193]]= function(){return !0};mxGraphHierarchyNode[_0x763a[202]][_0x763a[1833]]= function(_0x3536x2){return this[_0x763a[1826]][0]};mxGraphHierarchyNode[_0x763a[202]][_0x763a[1834]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1826]][0]= _0x3536x3};mxGraphHierarchyNode[_0x763a[202]][_0x763a[1720]]= function(_0x3536x2){if(null!= _0x3536x2&& null!= this[_0x763a[1839]]&& null!= _0x3536x2[_0x763a[1839]]&& this[_0x763a[1839]][_0x763a[67]]< _0x3536x2[_0x763a[1839]][_0x763a[67]]){if(this[_0x763a[1839]]== _0x3536x2[_0x763a[1839]]){return !0};if(null== this[_0x763a[1839]]|| null== this[_0x763a[1839]]){return !1};for(var _0x3536x3=0;_0x3536x3< this[_0x763a[1839]][_0x763a[67]];_0x3536x3++){if(this[_0x763a[1839]][_0x3536x3]!= _0x3536x2[_0x763a[1839]][_0x3536x3]){return !1}};return !0};return !1};mxGraphHierarchyNode[_0x763a[202]][_0x763a[1841]]= function(){return this[_0x763a[246]]};function mxGraphHierarchyEdge(_0x3536x2){mxGraphAbstractHierarchyCell[_0x763a[183]](this,arguments);this[_0x763a[1842]]= _0x3536x2}mxGraphHierarchyEdge[_0x763a[202]]= new mxGraphAbstractHierarchyCell;mxGraphHierarchyEdge[_0x763a[202]][_0x763a[196]]= mxGraphHierarchyEdge;mxGraphHierarchyEdge[_0x763a[202]][_0x763a[1842]]= null;mxGraphHierarchyEdge[_0x763a[202]][_0x763a[1097]]= null;mxGraphHierarchyEdge[_0x763a[202]][_0x763a[772]]= null;mxGraphHierarchyEdge[_0x763a[202]][_0x763a[1843]]= !1;mxGraphHierarchyEdge[_0x763a[202]][_0x763a[1744]]= function(_0x3536x2){_0x3536x2= this[_0x763a[1097]];this[_0x763a[1097]]= this[_0x763a[772]];this[_0x763a[772]]= _0x3536x2;this[_0x763a[1843]]= !this[_0x763a[1843]]};mxGraphHierarchyEdge[_0x763a[202]][_0x763a[1831]]= function(_0x3536x2){if(null== this[_0x763a[1829]]){this[_0x763a[1829]]= [];for(var _0x3536x3=0;_0x3536x3< this[_0x763a[1826]][_0x763a[67]];_0x3536x3++){this[_0x763a[1829]][_0x3536x3]= [],_0x3536x3== this[_0x763a[1826]][_0x763a[67]]- 1?this[_0x763a[1829]][_0x3536x3][_0x763a[207]](this[_0x763a[1097]]):this[_0x763a[1829]][_0x3536x3][_0x763a[207]](this)}};return this[_0x763a[1829]][_0x3536x2- this[_0x763a[1828]]- 1]};mxGraphHierarchyEdge[_0x763a[202]][_0x763a[1832]]= function(_0x3536x2){if(null== this[_0x763a[1830]]){this[_0x763a[1830]]= [];for(var _0x3536x3=0;_0x3536x3< this[_0x763a[1826]][_0x763a[67]];_0x3536x3++){this[_0x763a[1830]][_0x3536x3]= [],0== _0x3536x3?this[_0x763a[1830]][_0x3536x3][_0x763a[207]](this[_0x763a[772]]):this[_0x763a[1830]][_0x3536x3][_0x763a[207]](this)}};return this[_0x763a[1830]][_0x3536x2- this[_0x763a[1828]]- 1]};mxGraphHierarchyEdge[_0x763a[202]][_0x763a[250]]= function(){return !0};mxGraphHierarchyEdge[_0x763a[202]][_0x763a[1833]]= function(_0x3536x2){return this[_0x763a[1826]][_0x3536x2- this[_0x763a[1828]]- 1]};mxGraphHierarchyEdge[_0x763a[202]][_0x763a[1834]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1826]][_0x3536x2- this[_0x763a[1828]]- 1]= _0x3536x3};mxGraphHierarchyEdge[_0x763a[202]][_0x763a[1841]]= function(){return null!= this[_0x763a[1842]]&& 0< this[_0x763a[1842]][_0x763a[67]]?this[_0x763a[1842]][0]:null};function mxGraphHierarchyModel(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x2[_0x763a[1703]]();this[_0x763a[1844]]= _0x3536x9;this[_0x763a[1845]]= _0x3536x4;this[_0x763a[1101]]= _0x3536x5;this[_0x763a[1846]]= {};this[_0x763a[1847]]= {};this[_0x763a[1827]]= 0;_0x3536x4= [];null== _0x3536x3&& (_0x3536x3= this[_0x763a[1179]][_0x763a[1728]](_0x3536x5));this[_0x763a[1827]]= this[_0x763a[1848]];this[_0x763a[1849]](_0x3536x2,_0x3536x3,_0x3536x4);for(_0x3536x5= 0;_0x3536x5< _0x3536x3[_0x763a[67]];_0x3536x5++){_0x3536x9= _0x3536x4[_0x3536x5][_0x763a[1838]];for(var _0x3536xa=0;_0x3536xa< _0x3536x9[_0x763a[67]];_0x3536xa++){var _0x3536x12=_0x3536x9[_0x3536xa],_0x3536x13=_0x3536x12[_0x763a[1842]];if(null!= _0x3536x13&& 0< _0x3536x13[_0x763a[67]]){var _0x3536x13=_0x3536x13[0],_0x3536x14=_0x3536x2[_0x763a[1710]](_0x3536x13,!1),_0x3536x14=mxCellPath[_0x763a[385]](_0x3536x14),_0x3536x14=this[_0x763a[1846]][_0x3536x14];_0x3536x4[_0x3536x5]== _0x3536x14&& (_0x3536x14= _0x3536x2[_0x763a[1710]](_0x3536x13,!0),_0x3536x14= mxCellPath[_0x763a[385]](_0x3536x14),_0x3536x14= this[_0x763a[1846]][_0x3536x14]);null!= _0x3536x14&& _0x3536x4[_0x3536x5]!= _0x3536x14&& (_0x3536x12[_0x763a[772]]= _0x3536x14,0== _0x3536x14[_0x763a[1837]][_0x763a[67]]&& (_0x3536x14[_0x763a[1837]]= []),0> mxUtils[_0x763a[2]](_0x3536x14[_0x763a[1837]],_0x3536x12)&& _0x3536x14[_0x763a[1837]][_0x763a[207]](_0x3536x12))}};_0x3536x4[_0x3536x5][_0x763a[1826]][0]= 1}}mxGraphHierarchyModel[_0x763a[202]][_0x763a[1827]]= null;mxGraphHierarchyModel[_0x763a[202]][_0x763a[1846]]= null;mxGraphHierarchyModel[_0x763a[202]][_0x763a[1847]]= null;mxGraphHierarchyModel[_0x763a[202]][_0x763a[1850]]= null;mxGraphHierarchyModel[_0x763a[202]][_0x763a[1845]]= null;mxGraphHierarchyModel[_0x763a[202]][_0x763a[1101]]= null;mxGraphHierarchyModel[_0x763a[202]][_0x763a[1851]]= 0;mxGraphHierarchyModel[_0x763a[202]][_0x763a[1848]]= 1E8;mxGraphHierarchyModel[_0x763a[202]][_0x763a[1844]]= !1;mxGraphHierarchyModel[_0x763a[202]][_0x763a[1849]]= function(_0x3536x2,_0x3536x3,_0x3536x4){for(var _0x3536x5=_0x3536x2[_0x763a[1703]](),_0x3536x9=0;_0x3536x9< _0x3536x3[_0x763a[67]];_0x3536x9++){_0x3536x4[_0x3536x9]= new mxGraphHierarchyNode(_0x3536x3[_0x3536x9]);var _0x3536xa=mxCellPath[_0x763a[385]](_0x3536x3[_0x3536x9]);this[_0x763a[1846]][_0x3536xa]= _0x3536x4[_0x3536x9];_0x3536xa= _0x3536x2[_0x763a[264]](_0x3536x3[_0x3536x9]);_0x3536x4[_0x3536x9][_0x763a[1838]]= [];for(var _0x3536x12=0;_0x3536x12< _0x3536xa[_0x763a[67]];_0x3536x12++){var _0x3536x13=_0x3536x2[_0x763a[1710]](_0x3536xa[_0x3536x12],!1);if(_0x3536x13!= _0x3536x3[_0x3536x9]&& _0x3536x13!= _0x3536x3[_0x3536x9]&& _0x3536x2[_0x763a[1179]][_0x763a[251]][_0x763a[1193]](_0x3536x13)&& !_0x3536x2[_0x763a[1713]](_0x3536x13)){var _0x3536x14=_0x3536x2[_0x763a[1781]](_0x3536x3[_0x3536x9],_0x3536x13,!1),_0x3536x15=_0x3536x2[_0x763a[1781]](_0x3536x3[_0x3536x9],_0x3536x13,!0),_0x3536x13=mxCellPath[_0x763a[385]](_0x3536x14[0]);if(null!= _0x3536x14&& 0< _0x3536x14[_0x763a[67]]&& null== this[_0x763a[1847]][_0x3536x13]&& 2* _0x3536x15[_0x763a[67]]>= _0x3536x14[_0x763a[67]]){for(var _0x3536x15= new mxGraphHierarchyEdge(_0x3536x14),_0x3536x16=0;_0x3536x16< _0x3536x14[_0x763a[67]];_0x3536x16++){var _0x3536x17=_0x3536x14[_0x3536x16],_0x3536x13=mxCellPath[_0x763a[385]](_0x3536x17);this[_0x763a[1847]][_0x3536x13]= _0x3536x15;_0x3536x5[_0x763a[1809]](_0x3536x17);_0x3536x2[_0x763a[1787]]&& (_0x3536x2[_0x763a[1716]](_0x3536x17,!1),_0x3536x2[_0x763a[1718]](_0x3536x17,!0))};_0x3536x15[_0x763a[1097]]= _0x3536x4[_0x3536x9];0> mxUtils[_0x763a[2]](_0x3536x4[_0x3536x9][_0x763a[1838]],_0x3536x15)&& _0x3536x4[_0x3536x9][_0x763a[1838]][_0x763a[207]](_0x3536x15)}}};_0x3536x4[_0x3536x9][_0x763a[1826]][0]= 0}};mxGraphHierarchyModel[_0x763a[202]][_0x763a[1852]]= function(){var _0x3536x2=[];if(null!= this[_0x763a[1845]]){for(var _0x3536x3=0;_0x3536x3< this[_0x763a[1845]][_0x763a[67]];_0x3536x3++){var _0x3536x4=mxCellPath[_0x763a[385]](this[_0x763a[1845]][_0x3536x3]),_0x3536x4=this[_0x763a[1846]][_0x3536x4];null!= _0x3536x4&& _0x3536x2[_0x763a[207]](_0x3536x4)}};for(var _0x3536x5 in this[_0x763a[1846]]){_0x3536x4= this[_0x763a[1846]][_0x3536x5],_0x3536x4[_0x763a[1826]][0]= -1};for(var _0x3536x9=_0x3536x2[_0x763a[1853]]();0< _0x3536x2[_0x763a[67]];){var _0x3536x4=_0x3536x2[0],_0x3536xa,_0x3536x12;_0x3536xa= _0x3536x4[_0x763a[1837]];_0x3536x12= _0x3536x4[_0x763a[1838]];for(var _0x3536x13=!0,_0x3536x14=this[_0x763a[1848]],_0x3536x3=0;_0x3536x3< _0x3536xa[_0x763a[67]];_0x3536x3++){var _0x3536x15=_0x3536xa[_0x3536x3];if(5270620== _0x3536x15[_0x763a[1826]][0]){_0x3536x15= _0x3536x15[_0x763a[1097]],_0x3536x14= Math[_0x763a[243]](_0x3536x14,_0x3536x15[_0x763a[1826]][0]- 1)}else {_0x3536x13= !1;break}};if(_0x3536x13){_0x3536x4[_0x763a[1826]][0]= _0x3536x14;this[_0x763a[1827]]= Math[_0x763a[243]](this[_0x763a[1827]],_0x3536x14);if(null!= _0x3536x12){for(_0x3536x3= 0;_0x3536x3< _0x3536x12[_0x763a[67]];_0x3536x3++){_0x3536x15= _0x3536x12[_0x3536x3],_0x3536x15[_0x763a[1826]][0]= 5270620,_0x3536x15= _0x3536x15[_0x763a[772]],-1== _0x3536x15[_0x763a[1826]][0]&& (_0x3536x2[_0x763a[207]](_0x3536x15),_0x3536x15[_0x763a[1826]][0]= -2)}};_0x3536x2[_0x763a[1115]]()}else {if(_0x3536x3= _0x3536x2[_0x763a[1115]](),_0x3536x2[_0x763a[207]](_0x3536x4),_0x3536x3== _0x3536x4&& 1== _0x3536x2[_0x763a[67]]){break}}};for(_0x3536x5 in this[_0x763a[1846]]){_0x3536x4= this[_0x763a[1846]][_0x3536x5],_0x3536x4[_0x763a[1826]][0]-= this[_0x763a[1827]]};for(_0x3536x3= 0;_0x3536x3< _0x3536x9[_0x763a[67]];_0x3536x3++){_0x3536x4= _0x3536x9[_0x3536x3];_0x3536x2= 0;_0x3536xa= _0x3536x4[_0x763a[1838]];for(_0x3536x5= 0;_0x3536x5< _0x3536xa[_0x763a[67]];_0x3536x5++){_0x3536x15= _0x3536xa[_0x3536x5],_0x3536x15= _0x3536x15[_0x763a[772]],_0x3536x4[_0x763a[1826]][0]= Math[_0x763a[160]](_0x3536x2,_0x3536x15[_0x763a[1826]][0]+ 1),_0x3536x2= _0x3536x4[_0x763a[1826]][0]}};this[_0x763a[1827]]= this[_0x763a[1848]]- this[_0x763a[1827]]};mxGraphHierarchyModel[_0x763a[202]][_0x763a[1854]]= function(){var _0x3536x2=[];this[_0x763a[1850]]= [];for(var _0x3536x3=0;_0x3536x3< this[_0x763a[1827]]+ 1;_0x3536x3++){_0x3536x2[_0x3536x3]= [],this[_0x763a[1850]][_0x3536x3]= _0x3536x2[_0x3536x3]};var _0x3536x4=null;if(null!= this[_0x763a[1845]]){for(var _0x3536x5=this[_0x763a[1845]],_0x3536x4=[],_0x3536x3=0;_0x3536x3< _0x3536x5[_0x763a[67]];_0x3536x3++){var _0x3536x9=mxCellPath[_0x763a[385]](_0x3536x5[_0x3536x3]);_0x3536x4[_0x3536x3]= this[_0x763a[1846]][_0x3536x9]}};this[_0x763a[209]](function(_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536x15){0== _0x3536x15&& (0> _0x3536x4[_0x763a[1827]]&& 0> _0x3536x4[_0x763a[1828]])&& (_0x3536x2[_0x3536x4[_0x763a[1826]][0]][_0x763a[207]](_0x3536x4),_0x3536x4[_0x763a[1827]]= _0x3536x4[_0x763a[1826]][0],_0x3536x4[_0x763a[1828]]= _0x3536x4[_0x763a[1826]][0],_0x3536x4[_0x763a[1826]][0]= _0x3536x2[_0x3536x4[_0x763a[1827]]][_0x763a[67]]- 1);if(null!= _0x3536x3&& null!= _0x3536x5&& 1< _0x3536x3[_0x763a[1827]]- _0x3536x4[_0x763a[1827]]){_0x3536x5[_0x763a[1827]]= _0x3536x3[_0x763a[1827]];_0x3536x5[_0x763a[1828]]= _0x3536x4[_0x763a[1827]];_0x3536x5[_0x763a[1826]]= [];_0x3536x5[_0x763a[235]]= [];_0x3536x5[_0x763a[236]]= [];for(_0x3536x3= _0x3536x5[_0x763a[1828]]+ 1;_0x3536x3< _0x3536x5[_0x763a[1827]];_0x3536x3++){_0x3536x2[_0x3536x3][_0x763a[207]](_0x3536x5),_0x3536x5[_0x763a[1834]](_0x3536x3,_0x3536x2[_0x3536x3][_0x763a[67]]- 1)}}},_0x3536x4,!1,null)};mxGraphHierarchyModel[_0x763a[202]][_0x763a[209]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){if(null!= _0x3536x3){for(var _0x3536x9=0;_0x3536x9< _0x3536x3[_0x763a[67]];_0x3536x9++){var _0x3536xa=_0x3536x3[_0x3536x9];null!= _0x3536xa&& (null== _0x3536x5&& (_0x3536x5= {}),_0x3536x4?(_0x3536xa[_0x763a[1839]]= [],_0x3536xa[_0x763a[1839]][0]= this[_0x763a[1851]],_0x3536xa[_0x763a[1839]][1]= _0x3536x9,this[_0x763a[1855]](null,_0x3536xa,null,_0x3536x2,_0x3536x5,_0x3536xa[_0x763a[1839]],_0x3536x9,0)):this[_0x763a[1758]](null,_0x3536xa,null,_0x3536x2,_0x3536x5,0))};this[_0x763a[1851]]++}};mxGraphHierarchyModel[_0x763a[202]][_0x763a[1758]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){if(null!= _0x3536x3){var _0x3536x12=mxCellPath[_0x763a[385]](_0x3536x3[_0x763a[246]]);if(null== _0x3536x9[_0x3536x12]){_0x3536x9[_0x3536x12]= _0x3536x3;_0x3536x5(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536xa,0);_0x3536x2= _0x3536x3[_0x763a[1838]][_0x763a[1853]]();for(_0x3536x4= 0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){_0x3536x12= _0x3536x2[_0x3536x4],this[_0x763a[1758]](_0x3536x3,_0x3536x12[_0x763a[772]],_0x3536x12,_0x3536x5,_0x3536x9,_0x3536xa+ 1)}}else {_0x3536x5(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536xa,1)}}};mxGraphHierarchyModel[_0x763a[202]][_0x763a[1855]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13){if(null!= _0x3536x3){if(null!= _0x3536x2&& (null== _0x3536x3[_0x763a[1839]]|| _0x3536x3[_0x763a[1839]][0]!= _0x3536x2[_0x763a[1839]][0])){_0x3536xa= _0x3536x2[_0x763a[1839]][_0x763a[67]]+ 1,_0x3536x3[_0x763a[1839]]= _0x3536x2[_0x763a[1839]][_0x763a[1853]](),_0x3536x3[_0x763a[1839]][_0x3536xa- 1]= _0x3536x12};_0x3536x12= mxCellPath[_0x763a[385]](_0x3536x3[_0x763a[246]]);if(null== _0x3536x9[_0x3536x12]){_0x3536x9[_0x3536x12]= _0x3536x3;_0x3536x5(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x13,0);_0x3536x2= _0x3536x3[_0x763a[1838]][_0x763a[1853]]();for(_0x3536x4= 0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){_0x3536x12= _0x3536x2[_0x3536x4],this[_0x763a[1855]](_0x3536x3,_0x3536x12[_0x763a[772]],_0x3536x12,_0x3536x5,_0x3536x9,_0x3536x3[_0x763a[1839]],_0x3536x4,_0x3536x13+ 1)}}else {_0x3536x5(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x13,1)}}};function mxHierarchicalLayoutStage(){}mxHierarchicalLayoutStage[_0x763a[202]][_0x763a[350]]= function(_0x3536x2){};function mxMedianHybridCrossingReduction(_0x3536x2){this[_0x763a[1759]]= _0x3536x2}mxMedianHybridCrossingReduction[_0x763a[202]]= new mxHierarchicalLayoutStage;mxMedianHybridCrossingReduction[_0x763a[202]][_0x763a[196]]= mxMedianHybridCrossingReduction;mxMedianHybridCrossingReduction[_0x763a[202]][_0x763a[1759]]= null;mxMedianHybridCrossingReduction[_0x763a[202]][_0x763a[1795]]= 24;mxMedianHybridCrossingReduction[_0x763a[202]][_0x763a[1856]]= null;mxMedianHybridCrossingReduction[_0x763a[202]][_0x763a[1857]]= 0;mxMedianHybridCrossingReduction[_0x763a[202]][_0x763a[1858]]= 0;mxMedianHybridCrossingReduction[_0x763a[202]][_0x763a[1859]]= 2;mxMedianHybridCrossingReduction[_0x763a[202]][_0x763a[350]]= function(_0x3536x2){_0x3536x2= this[_0x763a[1759]][_0x763a[502]]();this[_0x763a[1856]]= [];for(var _0x3536x3=0;_0x3536x3< _0x3536x2[_0x763a[1850]][_0x763a[67]];_0x3536x3++){this[_0x763a[1856]][_0x3536x3]= _0x3536x2[_0x763a[1850]][_0x3536x3][_0x763a[1853]]()};for(var _0x3536x4=0,_0x3536x5=this[_0x763a[1860]](_0x3536x2),_0x3536x3=0;_0x3536x3< this[_0x763a[1795]]&& _0x3536x4< this[_0x763a[1859]];_0x3536x3++){this[_0x763a[1861]](_0x3536x3,_0x3536x2);this[_0x763a[1862]](_0x3536x3,_0x3536x2);var _0x3536x9=this[_0x763a[1860]](_0x3536x2);if(_0x3536x9< _0x3536x5){_0x3536x5= _0x3536x9;for(_0x3536x9= _0x3536x4= 0;_0x3536x9< this[_0x763a[1856]][_0x763a[67]];_0x3536x9++){for(var _0x3536xa=_0x3536x2[_0x763a[1850]][_0x3536x9],_0x3536x12=0;_0x3536x12< _0x3536xa[_0x763a[67]];_0x3536x12++){var _0x3536x13=_0x3536xa[_0x3536x12];this[_0x763a[1856]][_0x3536x9][_0x3536x13[_0x763a[1833]](_0x3536x9)]= _0x3536x13}}}else {_0x3536x4++;for(_0x3536x9= 0;_0x3536x9< this[_0x763a[1856]][_0x763a[67]];_0x3536x9++){_0x3536xa= _0x3536x2[_0x763a[1850]][_0x3536x9];for(_0x3536x12= 0;_0x3536x12< _0x3536xa[_0x763a[67]];_0x3536x12++){_0x3536x13= _0x3536xa[_0x3536x12],_0x3536x13[_0x763a[1834]](_0x3536x9,_0x3536x12)}}};if(0== _0x3536x5){break}};_0x3536x4= [];_0x3536x5= [];for(_0x3536x3= 0;_0x3536x3< _0x3536x2[_0x763a[1827]]+ 1;_0x3536x3++){_0x3536x5[_0x3536x3]= [],_0x3536x4[_0x3536x3]= _0x3536x5[_0x3536x3]};for(_0x3536x3= 0;_0x3536x3< this[_0x763a[1856]][_0x763a[67]];_0x3536x3++){for(_0x3536x9= 0;_0x3536x9< this[_0x763a[1856]][_0x3536x3][_0x763a[67]];_0x3536x9++){_0x3536x5[_0x3536x3][_0x763a[207]](this[_0x763a[1856]][_0x3536x3][_0x3536x9])}};_0x3536x2[_0x763a[1850]]= _0x3536x4};mxMedianHybridCrossingReduction[_0x763a[202]][_0x763a[1860]]= function(_0x3536x2){for(var _0x3536x3=_0x3536x2[_0x763a[1850]][_0x763a[67]],_0x3536x4=0,_0x3536x5=1;_0x3536x5< _0x3536x3;_0x3536x5++){_0x3536x4+= this[_0x763a[1863]](_0x3536x5,_0x3536x2)};return _0x3536x4};mxMedianHybridCrossingReduction[_0x763a[202]][_0x763a[1863]]= function(_0x3536x2,_0x3536x3){for(var _0x3536x4=0,_0x3536x5=_0x3536x3[_0x763a[1850]][_0x3536x2],_0x3536x9=_0x3536x5[_0x763a[67]],_0x3536xa=_0x3536x3[_0x763a[1850]][_0x3536x2- 1][_0x763a[67]],_0x3536x12=[],_0x3536x13=0;_0x3536x13< _0x3536x9;_0x3536x13++){_0x3536x12[_0x3536x13]= []};for(_0x3536x13= 0;_0x3536x13< _0x3536x5[_0x763a[67]];_0x3536x13++){for(var _0x3536x14=_0x3536x5[_0x3536x13],_0x3536x15=_0x3536x14[_0x763a[1833]](_0x3536x2),_0x3536x16=_0x3536x14[_0x763a[1832]](_0x3536x2),_0x3536x14=0;_0x3536x14< _0x3536x16[_0x763a[67]];_0x3536x14++){var _0x3536x17=_0x3536x16[_0x3536x14][_0x763a[1833]](_0x3536x2- 1);_0x3536x12[_0x3536x15][_0x3536x17]= 201207}};for(_0x3536x13= 0;_0x3536x13< _0x3536x9;_0x3536x13++){for(_0x3536x14= 0;_0x3536x14< _0x3536xa;_0x3536x14++){if(201207== _0x3536x12[_0x3536x13][_0x3536x14]){for(_0x3536x5= _0x3536x13+ 1;_0x3536x5< _0x3536x9;_0x3536x5++){for(_0x3536x15= 0;_0x3536x15< _0x3536x14;_0x3536x15++){201207== _0x3536x12[_0x3536x5][_0x3536x15]&& _0x3536x4++}};for(_0x3536x5= 0;_0x3536x5< _0x3536x13;_0x3536x5++){for(_0x3536x15= _0x3536x14+ 1;_0x3536x15< _0x3536xa;_0x3536x15++){201207== _0x3536x12[_0x3536x5][_0x3536x15]&& _0x3536x4++}}}}};return _0x3536x4/ 2};mxMedianHybridCrossingReduction[_0x763a[202]][_0x763a[1862]]= function(_0x3536x2,_0x3536x3){for(var _0x3536x4=!0,_0x3536x5=0;_0x3536x4&& 10> _0x3536x5++;){for(var _0x3536x9=1== _0x3536x2% 2&& 1== _0x3536x5% 2,_0x3536x4=!1,_0x3536xa=0;_0x3536xa< _0x3536x3[_0x763a[1850]][_0x763a[67]];_0x3536xa++){for(var _0x3536x12=_0x3536x3[_0x763a[1850]][_0x3536xa],_0x3536x13=[],_0x3536x14=0;_0x3536x14< _0x3536x12[_0x763a[67]];_0x3536x14++){var _0x3536x15=_0x3536x12[_0x3536x14],_0x3536x16=_0x3536x15[_0x763a[1833]](_0x3536xa);0> _0x3536x16&& (_0x3536x16= _0x3536x14);_0x3536x13[_0x3536x16]= _0x3536x15};for(var _0x3536x17=_0x3536x16= _0x3536x15= null,_0x3536x18=null,_0x3536x19=null,_0x3536x1a=null,_0x3536x1b=null,_0x3536x1c=null,_0x3536x1d=null,_0x3536x1e=null,_0x3536x14=0;_0x3536x14< _0x3536x12[_0x763a[67]]- 1;_0x3536x14++){if(0== _0x3536x14){for(var _0x3536x1d=_0x3536x13[_0x3536x14],_0x3536x15=_0x3536x1d[_0x763a[1831]](_0x3536xa),_0x3536x16=_0x3536x1d[_0x763a[1832]](_0x3536xa),_0x3536x19=[],_0x3536x1a=[],_0x3536x1f=0;_0x3536x1f< _0x3536x15[_0x763a[67]];_0x3536x1f++){_0x3536x19[_0x3536x1f]= _0x3536x15[_0x3536x1f][_0x763a[1833]](_0x3536xa+ 1)};for(_0x3536x1f= 0;_0x3536x1f< _0x3536x16[_0x763a[67]];_0x3536x1f++){_0x3536x1a[_0x3536x1f]= _0x3536x16[_0x3536x1f][_0x763a[1833]](_0x3536xa- 1)}}else {_0x3536x15= _0x3536x17,_0x3536x16= _0x3536x18,_0x3536x19= _0x3536x1b,_0x3536x1a= _0x3536x1c,_0x3536x1d= _0x3536x1e};_0x3536x1e= _0x3536x13[_0x3536x14+ 1];_0x3536x17= _0x3536x1e[_0x763a[1831]](_0x3536xa);_0x3536x18= _0x3536x1e[_0x763a[1832]](_0x3536xa);_0x3536x1b= [];_0x3536x1c= [];for(_0x3536x1f= 0;_0x3536x1f< _0x3536x17[_0x763a[67]];_0x3536x1f++){_0x3536x1b[_0x3536x1f]= _0x3536x17[_0x3536x1f][_0x763a[1833]](_0x3536xa+ 1)};for(_0x3536x1f= 0;_0x3536x1f< _0x3536x18[_0x763a[67]];_0x3536x1f++){_0x3536x1c[_0x3536x1f]= _0x3536x18[_0x3536x1f][_0x763a[1833]](_0x3536xa- 1)};for(var _0x3536x20=0,_0x3536x62=0,_0x3536x1f=0;_0x3536x1f< _0x3536x19[_0x763a[67]];_0x3536x1f++){for(var _0x3536x63=0;_0x3536x63< _0x3536x1b[_0x763a[67]];_0x3536x63++){_0x3536x19[_0x3536x1f]> _0x3536x1b[_0x3536x63]&& _0x3536x20++,_0x3536x19[_0x3536x1f]< _0x3536x1b[_0x3536x63]&& _0x3536x62++}};for(_0x3536x1f= 0;_0x3536x1f< _0x3536x1a[_0x763a[67]];_0x3536x1f++){for(_0x3536x63= 0;_0x3536x63< _0x3536x1c[_0x763a[67]];_0x3536x63++){_0x3536x1a[_0x3536x1f]> _0x3536x1c[_0x3536x63]&& _0x3536x20++,_0x3536x1a[_0x3536x1f]< _0x3536x1c[_0x3536x63]&& _0x3536x62++}};if(_0x3536x62< _0x3536x20|| _0x3536x62== _0x3536x20&& _0x3536x9){_0x3536x17= _0x3536x1d[_0x763a[1833]](_0x3536xa),_0x3536x1d[_0x763a[1834]](_0x3536xa,_0x3536x1e[_0x763a[1833]](_0x3536xa)),_0x3536x1e[_0x763a[1834]](_0x3536xa,_0x3536x17),_0x3536x17= _0x3536x15,_0x3536x18= _0x3536x16,_0x3536x1b= _0x3536x19,_0x3536x1c= _0x3536x1a,_0x3536x1e= _0x3536x1d,_0x3536x9|| (_0x3536x4= !0)}}}}};mxMedianHybridCrossingReduction[_0x763a[202]][_0x763a[1861]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=0== _0x3536x2% 2;if(_0x3536x4){for(var _0x3536x5=_0x3536x3[_0x763a[1827]]- 1;0<= _0x3536x5;_0x3536x5--){this[_0x763a[1864]](_0x3536x5,_0x3536x4)}}else {for(_0x3536x5= 1;_0x3536x5< _0x3536x3[_0x763a[1827]];_0x3536x5++){this[_0x763a[1864]](_0x3536x5,_0x3536x4)}}};mxMedianHybridCrossingReduction[_0x763a[202]][_0x763a[1864]]= function(_0x3536x2,_0x3536x3){for(var _0x3536x4=this[_0x763a[1856]][_0x3536x2][_0x763a[67]],_0x3536x5=[],_0x3536x9=[],_0x3536xa=0;_0x3536xa< _0x3536x4;_0x3536xa++){var _0x3536x12=this[_0x763a[1856]][_0x3536x2][_0x3536xa],_0x3536x13= new MedianCellSorter;_0x3536x13[_0x763a[246]]= _0x3536x12;var _0x3536x14;_0x3536x14= _0x3536x3?_0x3536x12[_0x763a[1831]](_0x3536x2):_0x3536x12[_0x763a[1832]](_0x3536x2);var _0x3536x15;_0x3536x15= _0x3536x3?_0x3536x2+ 1:_0x3536x2- 1;null!= _0x3536x14&& 0!= _0x3536x14[_0x763a[67]]?(_0x3536x13[_0x763a[1865]]= this[_0x763a[1865]](_0x3536x14,_0x3536x15),_0x3536x5[_0x763a[207]](_0x3536x13)):_0x3536x9[_0x3536x12[_0x763a[1833]](_0x3536x2)]= !0};_0x3536x5[_0x763a[470]](MedianCellSorter[_0x763a[202]][_0x763a[469]]);for(_0x3536xa= 0;_0x3536xa< _0x3536x4;_0x3536xa++){null== _0x3536x9[_0x3536xa]&& (_0x3536x12= _0x3536x5[_0x763a[1115]]()[_0x763a[246]],_0x3536x12[_0x763a[1834]](_0x3536x2,_0x3536xa))}};mxMedianHybridCrossingReduction[_0x763a[202]][_0x763a[1865]]= function(_0x3536x2,_0x3536x3){for(var _0x3536x4=[],_0x3536x5=0,_0x3536x9=0;_0x3536x9< _0x3536x2[_0x763a[67]];_0x3536x9++){var _0x3536xa=_0x3536x2[_0x3536x9];_0x3536x4[_0x3536x5++]= _0x3536xa[_0x763a[1833]](_0x3536x3)};_0x3536x4[_0x763a[470]](function(_0x3536x2,_0x3536x3){return _0x3536x2- _0x3536x3});if(1== _0x3536x5% 2){return _0x3536x4[Math[_0x763a[519]](_0x3536x5/ 2)]};if(2== _0x3536x5){return (_0x3536x4[0]+ _0x3536x4[1])/ 2};_0x3536x9= _0x3536x5/ 2;_0x3536xa= _0x3536x4[_0x3536x9- 1]- _0x3536x4[0];_0x3536x5= _0x3536x4[_0x3536x5- 1]- _0x3536x4[_0x3536x9];return (_0x3536x4[_0x3536x9- 1]* _0x3536x5+ _0x3536x4[_0x3536x9]* _0x3536xa)/ (_0x3536xa+ _0x3536x5)};function MedianCellSorter(){}MedianCellSorter[_0x763a[202]][_0x763a[1865]]= 0;MedianCellSorter[_0x763a[202]][_0x763a[246]]= !1;MedianCellSorter[_0x763a[202]][_0x763a[469]]= function(_0x3536x2,_0x3536x3){return null!= _0x3536x2&& null!= _0x3536x3?_0x3536x3[_0x763a[1865]]> _0x3536x2[_0x763a[1865]]?-1:_0x3536x3[_0x763a[1865]]< _0x3536x2[_0x763a[1865]]?1:0:0};function mxMinimumCycleRemover(_0x3536x2){this[_0x763a[1759]]= _0x3536x2}mxMinimumCycleRemover[_0x763a[202]]= new mxHierarchicalLayoutStage;mxMinimumCycleRemover[_0x763a[202]][_0x763a[196]]= mxMinimumCycleRemover;mxMinimumCycleRemover[_0x763a[202]][_0x763a[1759]]= null;mxMinimumCycleRemover[_0x763a[202]][_0x763a[350]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1759]][_0x763a[502]](),_0x3536x4={},_0x3536x5=mxUtils[_0x763a[238]](_0x3536x3[_0x763a[1846]],null,!0),_0x3536x9=null;if(null!= _0x3536x3[_0x763a[1845]]){var _0x3536xa=_0x3536x3[_0x763a[1845]],_0x3536x9=[];for(_0x3536x2= 0;_0x3536x2< _0x3536xa[_0x763a[67]];_0x3536x2++){var _0x3536x12=mxCellPath[_0x763a[385]](_0x3536xa[_0x3536x2]);_0x3536x9[_0x3536x2]= _0x3536x3[_0x763a[1846]][_0x3536x12]}};_0x3536x3[_0x763a[209]](function(_0x3536x2,_0x3536x3,_0x3536x9,_0x3536xa,_0x3536x12){_0x3536x3[_0x763a[1720]](_0x3536x2)&& (_0x3536x9[_0x763a[1744]](),mxUtils[_0x763a[205]](_0x3536x9,_0x3536x2[_0x763a[1838]]),_0x3536x2[_0x763a[1837]][_0x763a[207]](_0x3536x9),mxUtils[_0x763a[205]](_0x3536x9,_0x3536x3[_0x763a[1837]]),_0x3536x3[_0x763a[1838]][_0x763a[207]](_0x3536x9));_0x3536x2= mxCellPath[_0x763a[385]](_0x3536x3[_0x763a[246]]);_0x3536x4[_0x3536x2]= _0x3536x3;delete _0x3536x5[_0x3536x2]},_0x3536x9,!0,null);_0x3536x9= null;0< _0x3536x5[_0x763a[1866]]&& (_0x3536x9= mxUtils[_0x763a[238]](_0x3536x5,null,!0));_0x3536x2= mxUtils[_0x763a[238]](_0x3536x4,null,!0);_0x3536x3[_0x763a[209]](function(_0x3536x2,_0x3536x3,_0x3536x9,_0x3536xa,_0x3536x12){_0x3536x3[_0x763a[1720]](_0x3536x2)&& (_0x3536x9[_0x763a[1744]](),mxUtils[_0x763a[205]](_0x3536x9,_0x3536x2[_0x763a[1838]]),_0x3536x3[_0x763a[1838]][_0x763a[207]](_0x3536x9),_0x3536x2[_0x763a[1837]][_0x763a[207]](_0x3536x9),mxUtils[_0x763a[205]](_0x3536x9,_0x3536x3[_0x763a[1837]]));_0x3536x2= mxCellPath[_0x763a[385]](_0x3536x3[_0x763a[246]]);_0x3536x4[_0x3536x2]= _0x3536x3;delete _0x3536x5[_0x3536x2]},_0x3536x5,!0,_0x3536x2);_0x3536xa= this[_0x763a[1759]][_0x763a[1703]]();if(null!= _0x3536x9&& 0< _0x3536x9[_0x763a[67]]){_0x3536x3= _0x3536x3[_0x763a[1845]];for(_0x3536x2= 0;_0x3536x2< _0x3536x9[_0x763a[67]];_0x3536x2++){_0x3536x12= _0x3536x9[_0x3536x2][_0x763a[246]],0== _0x3536xa[_0x763a[1867]](_0x3536x12)[_0x763a[67]]&& _0x3536x3[_0x763a[207]](_0x3536x12)}}};function mxCoordinateAssignment(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){this[_0x763a[1759]]= _0x3536x2;this[_0x763a[1868]]= _0x3536x3;this[_0x763a[1869]]= _0x3536x4;this[_0x763a[1870]]= _0x3536x5;this[_0x763a[1871]]= _0x3536x9;this[_0x763a[1872]]= _0x3536xa}var mxHierarchicalEdgeStyle={ORTHOGONAL:1,POLYLINE:2,STRAIGHT:3,CURVE:4};mxCoordinateAssignment[_0x763a[202]]= new mxHierarchicalLayoutStage;mxCoordinateAssignment[_0x763a[202]][_0x763a[196]]= mxCoordinateAssignment;mxCoordinateAssignment[_0x763a[202]][_0x763a[1759]]= null;mxCoordinateAssignment[_0x763a[202]][_0x763a[1868]]= 30;mxCoordinateAssignment[_0x763a[202]][_0x763a[1869]]= 100;mxCoordinateAssignment[_0x763a[202]][_0x763a[1872]]= 10;mxCoordinateAssignment[_0x763a[202]][_0x763a[1795]]= 8;mxCoordinateAssignment[_0x763a[202]][_0x763a[1751]]= 5;mxCoordinateAssignment[_0x763a[202]][_0x763a[1752]]= 2;mxCoordinateAssignment[_0x763a[202]][_0x763a[1753]]= 12;mxCoordinateAssignment[_0x763a[202]][_0x763a[1754]]= 4;mxCoordinateAssignment[_0x763a[202]][_0x763a[1873]]= null;mxCoordinateAssignment[_0x763a[202]][_0x763a[1870]]= mxConstants[_0x763a[1358]];mxCoordinateAssignment[_0x763a[202]][_0x763a[1871]]= null;mxCoordinateAssignment[_0x763a[202]][_0x763a[1874]]= null;mxCoordinateAssignment[_0x763a[202]][_0x763a[1875]]= null;mxCoordinateAssignment[_0x763a[202]][_0x763a[1876]]= null;mxCoordinateAssignment[_0x763a[202]][_0x763a[1877]]= null;mxCoordinateAssignment[_0x763a[202]][_0x763a[1878]]= null;mxCoordinateAssignment[_0x763a[202]][_0x763a[1879]]= null;mxCoordinateAssignment[_0x763a[202]][_0x763a[1880]]= null;mxCoordinateAssignment[_0x763a[202]][_0x763a[1881]]= null;mxCoordinateAssignment[_0x763a[202]][_0x763a[1882]]= !0;mxCoordinateAssignment[_0x763a[202]][_0x763a[675]]= mxHierarchicalEdgeStyle[_0x763a[1883]];mxCoordinateAssignment[_0x763a[202]][_0x763a[1884]]= null;mxCoordinateAssignment[_0x763a[202]][_0x763a[1885]]= null;mxCoordinateAssignment[_0x763a[202]][_0x763a[1745]]= 10;mxCoordinateAssignment[_0x763a[202]][_0x763a[1886]]= function(){var _0x3536x2=this[_0x763a[1759]][_0x763a[502]]();mxLog[_0x763a[539]]();mxLog[_0x763a[171]](_0x763a[1887]);for(var _0x3536x3=0;_0x3536x3< _0x3536x2[_0x763a[1850]][_0x763a[67]];_0x3536x3++){mxLog[_0x763a[53]](_0x763a[1888],_0x3536x3,_0x763a[1889]);for(var _0x3536x4=_0x3536x2[_0x763a[1850]][_0x3536x3],_0x3536x5=0;_0x3536x5< _0x3536x4[_0x763a[67]];_0x3536x5++){mxLog[_0x763a[53]](_0x3536x4[_0x3536x5][_0x763a[1833]](_0x3536x3),_0x763a[316])};mxLog[_0x763a[171]]()};mxLog[_0x763a[171]](_0x763a[1890])};mxCoordinateAssignment[_0x763a[202]][_0x763a[350]]= function(_0x3536x2){this[_0x763a[1873]]= [];_0x3536x2= this[_0x763a[1759]][_0x763a[502]]();this[_0x763a[1875]]= 0;this[_0x763a[1891]](this[_0x763a[1759]][_0x763a[1703]](),_0x3536x2);this[_0x763a[1882]]&& this[_0x763a[1892]](_0x3536x2);var _0x3536x3=1E8;if(this[_0x763a[1882]]){for(var _0x3536x4=0;_0x3536x4< this[_0x763a[1795]];_0x3536x4++){0!= _0x3536x4&& (this[_0x763a[1893]](_0x3536x4,_0x3536x2),this[_0x763a[1892]](_0x3536x2));if(this[_0x763a[1875]]< _0x3536x3){for(var _0x3536x5=0;_0x3536x5< _0x3536x2[_0x763a[1850]][_0x763a[67]];_0x3536x5++){for(var _0x3536x9=_0x3536x2[_0x763a[1850]][_0x3536x5],_0x3536xa=0;_0x3536xa< _0x3536x9[_0x763a[67]];_0x3536xa++){var _0x3536x12=_0x3536x9[_0x3536xa];_0x3536x12[_0x763a[1835]](_0x3536x5,_0x3536x12[_0x763a[1833]](_0x3536x5))}};_0x3536x3= this[_0x763a[1875]]}else {for(_0x3536x5= 0;_0x3536x5< _0x3536x2[_0x763a[1850]][_0x763a[67]];_0x3536x5++){_0x3536x9= _0x3536x2[_0x763a[1850]][_0x3536x5];for(_0x3536xa= 0;_0x3536xa< _0x3536x9[_0x763a[67]];_0x3536xa++){_0x3536x12= _0x3536x9[_0x3536xa],_0x3536x12[_0x763a[1834]](_0x3536x5,_0x3536x12[_0x763a[730]](_0x3536x5))}}};this[_0x763a[1894]](this[_0x763a[1759]][_0x763a[1703]](),_0x3536x2);this[_0x763a[1875]]= 0}};this[_0x763a[1895]](this[_0x763a[1759]][_0x763a[1703]](),_0x3536x2)};mxCoordinateAssignment[_0x763a[202]][_0x763a[1892]]= function(_0x3536x2){for(var _0x3536x3=[],_0x3536x4=[],_0x3536x5=[],_0x3536x9=0;_0x3536x9<= _0x3536x2[_0x763a[1827]];_0x3536x9++){_0x3536x5[_0x3536x9]= _0x3536x2[_0x763a[1850]][_0x3536x9];for(var _0x3536xa=0;_0x3536xa< _0x3536x5[_0x3536x9][_0x763a[67]];_0x3536xa++){var _0x3536x12=_0x3536x5[_0x3536x9][_0x3536xa],_0x3536x13= new WeightedCellSorter(_0x3536x12,_0x3536x9);_0x3536x13[_0x763a[1785]]= _0x3536xa;_0x3536x13[_0x763a[1784]]= !0;_0x3536x3[_0x763a[207]](_0x3536x13);_0x3536x12= mxCellPath[_0x763a[385]](_0x3536x12[_0x763a[1841]]());_0x3536x4[_0x3536x12]= _0x3536x13}};_0x3536x2= 10* _0x3536x3[_0x763a[67]];for(_0x3536xa= 0;0< _0x3536x3[_0x763a[67]]&& _0x3536xa<= _0x3536x2;){var _0x3536x13=_0x3536x3[_0x763a[1115]](),_0x3536x9=_0x3536x13[_0x763a[246]],_0x3536x14=_0x3536x13[_0x763a[1782]],_0x3536x15=parseInt(_0x3536x13[_0x763a[1785]]),_0x3536x12=_0x3536x9[_0x763a[1831]](_0x3536x14),_0x3536x16=_0x3536x9[_0x763a[1832]](_0x3536x14),_0x3536x17=_0x3536x12[_0x763a[67]],_0x3536x18=_0x3536x16[_0x763a[67]],_0x3536x19=this[_0x763a[1896]](_0x3536x12,_0x3536x14+ 1),_0x3536x1a=this[_0x763a[1896]](_0x3536x16,_0x3536x14- 1),_0x3536x1b=_0x3536x17+ _0x3536x18,_0x3536x1c=_0x3536x9[_0x763a[1833]](_0x3536x14),_0x3536x1d=_0x3536x1c;0< _0x3536x1b&& (_0x3536x1d= (_0x3536x19* _0x3536x17+ _0x3536x1a* _0x3536x18)/ _0x3536x1b);_0x3536x17= !1;_0x3536x1d< _0x3536x1c- 1?0== _0x3536x15?(_0x3536x9[_0x763a[1834]](_0x3536x14,_0x3536x1d),_0x3536x17= !0):(_0x3536x15= _0x3536x5[_0x3536x14][_0x3536x15- 1],_0x3536x1c= _0x3536x15[_0x763a[1833]](_0x3536x14),_0x3536x1c= _0x3536x1c+ _0x3536x15[_0x763a[117]]/ 2+ this[_0x763a[1868]]+ _0x3536x9[_0x763a[117]]/ 2,_0x3536x1c< _0x3536x1d?(_0x3536x9[_0x763a[1834]](_0x3536x14,_0x3536x1d),_0x3536x17= !0):_0x3536x1c< _0x3536x9[_0x763a[1833]](_0x3536x14)- 1&& (_0x3536x9[_0x763a[1834]](_0x3536x14,_0x3536x1c),_0x3536x17= !0)):_0x3536x1d> _0x3536x1c+ 1&& (_0x3536x15== _0x3536x5[_0x3536x14][_0x763a[67]]- 1?(_0x3536x9[_0x763a[1834]](_0x3536x14,_0x3536x1d),_0x3536x17= !0):(_0x3536x15= _0x3536x5[_0x3536x14][_0x3536x15+ 1],_0x3536x1c= _0x3536x15[_0x763a[1833]](_0x3536x14),_0x3536x1c= _0x3536x1c- _0x3536x15[_0x763a[117]]/ 2- this[_0x763a[1868]]- _0x3536x9[_0x763a[117]]/ 2,_0x3536x1c> _0x3536x1d?(_0x3536x9[_0x763a[1834]](_0x3536x14,_0x3536x1d),_0x3536x17= !0):_0x3536x1c> _0x3536x9[_0x763a[1833]](_0x3536x14)+ 1&& (_0x3536x9[_0x763a[1834]](_0x3536x14,_0x3536x1c),_0x3536x17= !0)));if(_0x3536x17){for(_0x3536x9= 0;_0x3536x9< _0x3536x12[_0x763a[67]];_0x3536x9++){_0x3536x14= _0x3536x12[_0x3536x9],_0x3536x14= mxCellPath[_0x763a[385]](_0x3536x14[_0x763a[1841]]()),_0x3536x14= _0x3536x4[_0x3536x14],null!= _0x3536x14&& !1== _0x3536x14[_0x763a[1784]]&& (_0x3536x14[_0x763a[1784]]= !0,_0x3536x3[_0x763a[207]](_0x3536x14))};for(_0x3536x9= 0;_0x3536x9< _0x3536x16[_0x763a[67]];_0x3536x9++){_0x3536x14= _0x3536x16[_0x3536x9],_0x3536x14= mxCellPath[_0x763a[385]](_0x3536x14[_0x763a[1841]]()),_0x3536x14= _0x3536x4[_0x3536x14],null!= _0x3536x14&& !1== _0x3536x14[_0x763a[1784]]&& (_0x3536x14[_0x763a[1784]]= !0,_0x3536x3[_0x763a[207]](_0x3536x14))}};_0x3536x13[_0x763a[1784]]= !1;_0x3536xa++}};mxCoordinateAssignment[_0x763a[202]][_0x763a[1893]]= function(_0x3536x2,_0x3536x3){if(0== _0x3536x2% 2){for(var _0x3536x4=_0x3536x3[_0x763a[1827]];0< _0x3536x4;_0x3536x4--){this[_0x763a[1897]](_0x3536x4- 1,_0x3536x3,_0x3536x4)}}else {for(_0x3536x4= 0;_0x3536x4< _0x3536x3[_0x763a[1827]]- 1;_0x3536x4++){this[_0x763a[1897]](_0x3536x4+ 1,_0x3536x3,_0x3536x4)}}};mxCoordinateAssignment[_0x763a[202]][_0x763a[1897]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x3= _0x3536x3[_0x763a[1850]][_0x3536x2];for(var _0x3536x5=[],_0x3536x9=[],_0x3536xa=0;_0x3536xa< _0x3536x3[_0x763a[67]];_0x3536xa++){var _0x3536x12=_0x3536x3[_0x3536xa];_0x3536x5[_0x3536xa]= new WeightedCellSorter;_0x3536x5[_0x3536xa][_0x763a[246]]= _0x3536x12;_0x3536x5[_0x3536xa][_0x763a[1785]]= _0x3536xa;var _0x3536x13=mxCellPath[_0x763a[385]](_0x3536x12[_0x763a[1841]]());_0x3536x9[_0x3536x13]= _0x3536x5[_0x3536xa];var _0x3536x14=null,_0x3536x14=_0x3536x4< _0x3536x2?_0x3536x12[_0x763a[1832]](_0x3536x2):_0x3536x12[_0x763a[1831]](_0x3536x2);_0x3536x5[_0x3536xa][_0x763a[1782]]= this[_0x763a[1898]](_0x3536x12,_0x3536x14)};_0x3536x5[_0x763a[470]](WeightedCellSorter[_0x763a[202]][_0x763a[469]]);for(_0x3536xa= 0;_0x3536xa< _0x3536x5[_0x763a[67]];_0x3536xa++){_0x3536x13= 0;_0x3536x12= _0x3536x5[_0x3536xa][_0x763a[246]];_0x3536x13= 0;_0x3536x14= _0x3536x4< _0x3536x2?_0x3536x12[_0x763a[1832]](_0x3536x2)[_0x763a[1853]]():_0x3536x12[_0x763a[1831]](_0x3536x2)[_0x763a[1853]]();null!= _0x3536x14&& (_0x3536x13= _0x3536x14[_0x763a[67]],_0x3536x13= 0< _0x3536x13?this[_0x763a[1896]](_0x3536x14,_0x3536x4):_0x3536x12[_0x763a[1833]](_0x3536x2));for(var _0x3536x15=0,_0x3536x14=-1E8,_0x3536x16=_0x3536x5[_0x3536xa][_0x763a[1785]]- 1;0<= _0x3536x16;){var _0x3536x17=mxCellPath[_0x763a[385]](_0x3536x3[_0x3536x16][_0x763a[1841]]()),_0x3536x17=_0x3536x9[_0x3536x17];if(null!= _0x3536x17){var _0x3536x18=_0x3536x17[_0x763a[246]];_0x3536x17[_0x763a[1784]]?(_0x3536x14= _0x3536x18[_0x763a[1833]](_0x3536x2)+ _0x3536x18[_0x763a[117]]/ 2+ this[_0x763a[1868]]+ _0x3536x15+ _0x3536x12[_0x763a[117]]/ 2,_0x3536x16= -1):(_0x3536x15+= _0x3536x18[_0x763a[117]]+ this[_0x763a[1868]],_0x3536x16--)}};_0x3536x15= 0;_0x3536x18= 1E8;for(_0x3536x16= _0x3536x5[_0x3536xa][_0x763a[1785]]+ 1;_0x3536x16< _0x3536x5[_0x763a[67]];){if(_0x3536x17= mxCellPath[_0x763a[385]](_0x3536x3[_0x3536x16][_0x763a[1841]]()),_0x3536x17= _0x3536x9[_0x3536x17],null!= _0x3536x17){var _0x3536x19=_0x3536x17[_0x763a[246]];_0x3536x17[_0x763a[1784]]?(_0x3536x18= _0x3536x19[_0x763a[1833]](_0x3536x2)- _0x3536x19[_0x763a[117]]/ 2- this[_0x763a[1868]]- _0x3536x15- _0x3536x12[_0x763a[117]]/ 2,_0x3536x16= _0x3536x5[_0x763a[67]]):(_0x3536x15+= _0x3536x19[_0x763a[117]]+ this[_0x763a[1868]],_0x3536x16++)}};_0x3536x13>= _0x3536x14&& _0x3536x13<= _0x3536x18?_0x3536x12[_0x763a[1834]](_0x3536x2,_0x3536x13):_0x3536x13< _0x3536x14?(_0x3536x12[_0x763a[1834]](_0x3536x2,_0x3536x14),this[_0x763a[1875]]+= _0x3536x14- _0x3536x13):_0x3536x13> _0x3536x18&& (_0x3536x12[_0x763a[1834]](_0x3536x2,_0x3536x18),this[_0x763a[1875]]+= _0x3536x13- _0x3536x18);_0x3536x5[_0x3536xa][_0x763a[1784]]= !0}};mxCoordinateAssignment[_0x763a[202]][_0x763a[1898]]= function(_0x3536x2,_0x3536x3){for(var _0x3536x4=0,_0x3536x5=0;_0x3536x5< _0x3536x3[_0x763a[67]];_0x3536x5++){var _0x3536x9=_0x3536x3[_0x3536x5];_0x3536x2[_0x763a[1193]]()&& _0x3536x9[_0x763a[1193]]()?_0x3536x4++:_0x3536x4= _0x3536x2[_0x763a[250]]()&& _0x3536x9[_0x763a[250]]()?_0x3536x4+ 8:_0x3536x4+ 2};return _0x3536x4};mxCoordinateAssignment[_0x763a[202]][_0x763a[1896]]= function(_0x3536x2,_0x3536x3){if(0== _0x3536x2[_0x763a[67]]){return 0};for(var _0x3536x4=[],_0x3536x5=0;_0x3536x5< _0x3536x2[_0x763a[67]];_0x3536x5++){_0x3536x4[_0x3536x5]= _0x3536x2[_0x3536x5][_0x763a[1833]](_0x3536x3)};_0x3536x4[_0x763a[470]](function(_0x3536x2,_0x3536x3){return _0x3536x2- _0x3536x3});if(1== _0x3536x2[_0x763a[67]]% 2){return _0x3536x4[Math[_0x763a[519]](_0x3536x2[_0x763a[67]]/ 2)]};_0x3536x5= _0x3536x2[_0x763a[67]]/ 2;return (_0x3536x4[_0x3536x5- 1]+ _0x3536x4[_0x3536x5])/ 2};mxCoordinateAssignment[_0x763a[202]][_0x763a[1891]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1899]](_0x3536x2,_0x3536x3);for(var _0x3536x4=this[_0x763a[1876]];0<= _0x3536x4;_0x3536x4--){_0x3536x4< _0x3536x3[_0x763a[1827]]&& this[_0x763a[1900]](_0x3536x4,_0x3536x2,_0x3536x3)};for(_0x3536x4= this[_0x763a[1876]]+ 1;_0x3536x4<= _0x3536x3[_0x763a[1827]];_0x3536x4++){0< _0x3536x4&& this[_0x763a[1900]](_0x3536x4,_0x3536x2,_0x3536x3)}};mxCoordinateAssignment[_0x763a[202]][_0x763a[1900]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x3= _0x3536x4[_0x763a[1850]][_0x3536x2];_0x3536x4= 0;for(var _0x3536x5=this[_0x763a[1871]]+ (this[_0x763a[1879]]- this[_0x763a[1880]][_0x3536x2])/ 2,_0x3536x9=!1,_0x3536xa=0;_0x3536xa< _0x3536x3[_0x763a[67]];_0x3536xa++){var _0x3536x12=_0x3536x3[_0x3536xa];if(_0x3536x12[_0x763a[1193]]()){var _0x3536x13=this[_0x763a[1759]][_0x763a[1726]](_0x3536x12[_0x763a[246]]);null!= _0x3536x13?this[_0x763a[1870]]== mxConstants[_0x763a[1358]]|| this[_0x763a[1870]]== mxConstants[_0x763a[1354]]?(_0x3536x12[_0x763a[117]]= _0x3536x13[_0x763a[117]],_0x3536x12[_0x763a[119]]= _0x3536x13[_0x763a[119]]):(_0x3536x12[_0x763a[117]]= _0x3536x13[_0x763a[119]],_0x3536x12[_0x763a[119]]= _0x3536x13[_0x763a[117]]):_0x3536x9= !0;_0x3536x4= Math[_0x763a[160]](_0x3536x4,_0x3536x12[_0x763a[119]])}else {_0x3536x12[_0x763a[250]]()&& (_0x3536x13= 1,null!= _0x3536x12[_0x763a[1842]]?_0x3536x13= _0x3536x12[_0x763a[1842]][_0x763a[67]]:mxLog[_0x763a[283]](_0x763a[1901]),_0x3536x12[_0x763a[117]]= (_0x3536x13- 1)* this[_0x763a[1872]])};_0x3536x5+= _0x3536x12[_0x763a[117]]/ 2;_0x3536x12[_0x763a[1835]](_0x3536x2,_0x3536x5);_0x3536x12[_0x763a[1834]](_0x3536x2,_0x3536x5);_0x3536x5+= _0x3536x12[_0x763a[117]]/ 2;_0x3536x5+= this[_0x763a[1868]]};!0== _0x3536x9&& mxLog[_0x763a[283]](_0x763a[1902])};mxCoordinateAssignment[_0x763a[202]][_0x763a[1899]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=-this[_0x763a[1869]],_0x3536x5=0;this[_0x763a[1880]]= [];this[_0x763a[1881]]= [];for(var _0x3536x9=_0x3536x3[_0x763a[1827]];0<= _0x3536x9;_0x3536x9--){for(var _0x3536xa=0,_0x3536x12=_0x3536x3[_0x763a[1850]][_0x3536x9],_0x3536x13=this[_0x763a[1871]],_0x3536x14=!1,_0x3536x15=0;_0x3536x15< _0x3536x12[_0x763a[67]];_0x3536x15++){var _0x3536x16=_0x3536x12[_0x3536x15];if(_0x3536x16[_0x763a[1193]]()){var _0x3536x17=this[_0x763a[1759]][_0x763a[1726]](_0x3536x16[_0x763a[246]]);null!= _0x3536x17?this[_0x763a[1870]]== mxConstants[_0x763a[1358]]|| this[_0x763a[1870]]== mxConstants[_0x763a[1354]]?(_0x3536x16[_0x763a[117]]= _0x3536x17[_0x763a[117]],_0x3536x16[_0x763a[119]]= _0x3536x17[_0x763a[119]]):(_0x3536x16[_0x763a[117]]= _0x3536x17[_0x763a[119]],_0x3536x16[_0x763a[119]]= _0x3536x17[_0x763a[117]]):_0x3536x14= !0;_0x3536xa= Math[_0x763a[160]](_0x3536xa,_0x3536x16[_0x763a[119]])}else {_0x3536x16[_0x763a[250]]()&& (_0x3536x17= 1,null!= _0x3536x16[_0x763a[1842]]?_0x3536x17= _0x3536x16[_0x763a[1842]][_0x763a[67]]:mxLog[_0x763a[283]](_0x763a[1901]),_0x3536x16[_0x763a[117]]= (_0x3536x17- 1)* this[_0x763a[1872]])};_0x3536x13+= _0x3536x16[_0x763a[117]]/ 2;_0x3536x16[_0x763a[1835]](_0x3536x9,_0x3536x13);_0x3536x16[_0x763a[1834]](_0x3536x9,_0x3536x13);_0x3536x13+= _0x3536x16[_0x763a[117]]/ 2;_0x3536x13+= this[_0x763a[1868]];_0x3536x13> this[_0x763a[1879]]&& (this[_0x763a[1879]]= _0x3536x13,this[_0x763a[1876]]= _0x3536x9);this[_0x763a[1880]][_0x3536x9]= _0x3536x13};!0== _0x3536x14&& mxLog[_0x763a[283]](_0x763a[1902]);this[_0x763a[1881]][_0x3536x9]= _0x3536x4;_0x3536x13= _0x3536xa/ 2+ _0x3536x5/ 2+ this[_0x763a[1869]];_0x3536x5= _0x3536xa;_0x3536x4= this[_0x763a[1870]]== mxConstants[_0x763a[1358]]|| this[_0x763a[1870]]== mxConstants[_0x763a[1359]]?_0x3536x4+ _0x3536x13:_0x3536x4- _0x3536x13;for(_0x3536x15= 0;_0x3536x15< _0x3536x12[_0x763a[67]];_0x3536x15++){_0x3536x12[_0x3536x15][_0x763a[1836]](_0x3536x9,_0x3536x4)}}};mxCoordinateAssignment[_0x763a[202]][_0x763a[1894]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x3536x3[_0x763a[1847]],_0x3536x5;for(_0x3536x5 in _0x3536x4){var _0x3536x9=_0x3536x4[_0x3536x5];if(!(1> _0x3536x9[_0x763a[1827]]- _0x3536x9[_0x763a[1828]]- 1)){for(var _0x3536xa=_0x3536x9[_0x763a[1833]](_0x3536x9[_0x763a[1828]]+ 1),_0x3536x12=!0,_0x3536x13=0,_0x3536x14=_0x3536x9[_0x763a[1828]]+ 2;_0x3536x14< _0x3536x9[_0x763a[1827]];_0x3536x14++){var _0x3536x15=_0x3536x9[_0x763a[1833]](_0x3536x14);_0x3536xa!= _0x3536x15?(_0x3536x12= !1,_0x3536xa= _0x3536x15):_0x3536x13++};if(!_0x3536x12){for(var _0x3536x12=_0x3536xa= 0,_0x3536x15=[],_0x3536x16=[],_0x3536x17=_0x3536x9[_0x763a[1833]](_0x3536x9[_0x763a[1828]]+ 1),_0x3536x14=_0x3536x9[_0x763a[1828]]+ 1;_0x3536x14< _0x3536x9[_0x763a[1827]]- 1;_0x3536x14++){var _0x3536x18=_0x3536x9[_0x763a[730]](_0x3536x14+ 1);_0x3536x17== _0x3536x18?(_0x3536x15[_0x3536x14- _0x3536x9[_0x763a[1828]]- 1]= _0x3536x17,_0x3536xa++):this[_0x763a[1903]](_0x3536x3,_0x3536x9,_0x3536x14+ 1,_0x3536x17)?(_0x3536x15[_0x3536x14- _0x3536x9[_0x763a[1828]]- 1]= _0x3536x17,_0x3536xa++):_0x3536x17= _0x3536x15[_0x3536x14- _0x3536x9[_0x763a[1828]]- 1]= _0x3536x18};_0x3536x17= _0x3536x9[_0x763a[730]](_0x3536x14);for(_0x3536x14= _0x3536x9[_0x763a[1827]]- 1;_0x3536x14> _0x3536x9[_0x763a[1828]]+ 1;_0x3536x14--){_0x3536x18= _0x3536x9[_0x763a[730]](_0x3536x14- 1),_0x3536x17== _0x3536x18?(_0x3536x16[_0x3536x14- _0x3536x9[_0x763a[1828]]- 2]= _0x3536x17,_0x3536x12++):this[_0x763a[1903]](_0x3536x3,_0x3536x9,_0x3536x14- 1,_0x3536x17)?(_0x3536x16[_0x3536x14- _0x3536x9[_0x763a[1828]]- 2]= _0x3536x17,_0x3536x12++):(_0x3536x16[_0x3536x14- _0x3536x9[_0x763a[1828]]- 2]= _0x3536x9[_0x763a[730]](_0x3536x14- 1),_0x3536x17= _0x3536x18)};if(_0x3536x12> _0x3536x13|| _0x3536xa> _0x3536x13){if(_0x3536x12>= _0x3536xa){for(_0x3536x14= _0x3536x9[_0x763a[1827]]- 2;_0x3536x14> _0x3536x9[_0x763a[1828]];_0x3536x14--){_0x3536x9[_0x763a[1835]](_0x3536x14,_0x3536x16[_0x3536x14- _0x3536x9[_0x763a[1828]]- 1])}}else {if(_0x3536xa> _0x3536x12){for(_0x3536x14= _0x3536x9[_0x763a[1828]]+ 2;_0x3536x14< _0x3536x9[_0x763a[1827]];_0x3536x14++){_0x3536x9[_0x763a[1835]](_0x3536x14,_0x3536x15[_0x3536x14- _0x3536x9[_0x763a[1828]]- 2])}}}}}}}};mxCoordinateAssignment[_0x763a[202]][_0x763a[1903]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x2= _0x3536x2[_0x763a[1850]][_0x3536x4];for(var _0x3536x9=-1,_0x3536xa=0;_0x3536xa< _0x3536x2[_0x763a[67]];_0x3536xa++){if(_0x3536x3== _0x3536x2[_0x3536xa]){_0x3536x9= _0x3536xa;break}};if(0> _0x3536x9){return !1};_0x3536xa= _0x3536x3[_0x763a[1833]](_0x3536x4);if(_0x3536x5< _0x3536xa){if(0== _0x3536x9){return !0};_0x3536x2= _0x3536x2[_0x3536x9- 1];_0x3536x4= _0x3536x2[_0x763a[1833]](_0x3536x4);_0x3536x4= _0x3536x4+ _0x3536x2[_0x763a[117]]/ 2+ this[_0x763a[1868]]+ _0x3536x3[_0x763a[117]]/ 2;if(!(_0x3536x4<= _0x3536x5)){return !1}}else {if(_0x3536x5> _0x3536xa){if(_0x3536x9== _0x3536x2[_0x763a[67]]- 1){return !0};_0x3536x2= _0x3536x2[_0x3536x9+ 1];_0x3536x4= _0x3536x2[_0x763a[1833]](_0x3536x4);_0x3536x4= _0x3536x4- _0x3536x2[_0x763a[117]]/ 2- this[_0x763a[1868]]- _0x3536x3[_0x763a[117]]/ 2;if(!(_0x3536x4>= _0x3536x5)){return !1}}};return !0};mxCoordinateAssignment[_0x763a[202]][_0x763a[1895]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1877]]= [];this[_0x763a[1878]]= [];for(var _0x3536x4=0;_0x3536x4< _0x3536x3[_0x763a[1850]][_0x763a[67]];_0x3536x4++){this[_0x763a[1877]][_0x3536x4]= Number[_0x763a[1904]],this[_0x763a[1878]][_0x3536x4]= 0};_0x3536x4= null;this[_0x763a[1759]][_0x763a[1735]]&& (_0x3536x4= {});var _0x3536x5=_0x3536x3[_0x763a[1847]],_0x3536x9=_0x3536x3[_0x763a[1846]],_0x3536xa;for(_0x3536xa in _0x3536x9){var _0x3536x12=_0x3536x9[_0x3536xa];this[_0x763a[1725]](_0x3536x12);if(this[_0x763a[1759]][_0x763a[1735]]){var _0x3536x12=_0x3536x2[_0x763a[251]][_0x763a[1197]](_0x3536x12[_0x763a[246]]),_0x3536x13=mxCellPath[_0x763a[385]](_0x3536x12);null== _0x3536x4[_0x3536x13]&& (_0x3536x4[_0x3536x13]= _0x3536x12)}};this[_0x763a[1759]][_0x763a[1735]]&& null!= _0x3536x4&& this[_0x763a[1763]](_0x3536x4);(this[_0x763a[675]]== mxHierarchicalEdgeStyle[_0x763a[1905]]|| this[_0x763a[675]]== mxHierarchicalEdgeStyle[_0x763a[1883]]|| this[_0x763a[675]]== mxHierarchicalEdgeStyle[_0x763a[1906]])&& this[_0x763a[1764]](_0x3536x3);for(_0x3536xa in _0x3536x5){this[_0x763a[1907]](_0x3536x5[_0x3536xa])}};mxCoordinateAssignment[_0x763a[202]][_0x763a[1763]]= function(_0x3536x2){var _0x3536x3=[],_0x3536x4;for(_0x3536x4 in _0x3536x2){_0x3536x3[_0x763a[207]](_0x3536x2[_0x3536x4])};this[_0x763a[1759]][_0x763a[1727]](mxUtils[_0x763a[1779]](_0x3536x3,!0),this[_0x763a[1745]])};mxCoordinateAssignment[_0x763a[202]][_0x763a[1764]]= function(_0x3536x2){for(var _0x3536x3=0;_0x3536x3< _0x3536x2[_0x763a[1850]][_0x763a[67]];_0x3536x3++){for(var _0x3536x4=_0x3536x2[_0x763a[1850]][_0x3536x3],_0x3536x5=0;_0x3536x5< _0x3536x4[_0x763a[67]];_0x3536x5++){var _0x3536x9=_0x3536x4[_0x3536x5];if(_0x3536x9[_0x763a[1193]]()){for(var _0x3536xa=_0x3536x9[_0x763a[1832]](_0x3536x3),_0x3536x12=_0x3536x3- 1,_0x3536x13=0;2> _0x3536x13;_0x3536x13++){if(-1< _0x3536x12&& _0x3536x12< _0x3536x2[_0x763a[1850]][_0x763a[67]]&& null!= _0x3536xa&& 0< _0x3536xa[_0x763a[67]]){for(var _0x3536x14=[],_0x3536x15=0;_0x3536x15< _0x3536xa[_0x763a[67]];_0x3536x15++){var _0x3536x16= new WeightedCellSorter(_0x3536xa[_0x3536x15],_0x3536xa[_0x3536x15][_0x763a[730]](_0x3536x12));_0x3536x14[_0x763a[207]](_0x3536x16)};_0x3536x14[_0x763a[470]](WeightedCellSorter[_0x763a[202]][_0x763a[469]]);for(var _0x3536x16=_0x3536x9[_0x763a[235]][0]- _0x3536x9[_0x763a[117]]/ 2,_0x3536x17=_0x3536x16+ _0x3536x9[_0x763a[117]],_0x3536x18=_0x3536xa= 0,_0x3536x12=[],_0x3536x15=0;_0x3536x15< _0x3536x14[_0x763a[67]];_0x3536x15++){var _0x3536x19=_0x3536x14[_0x3536x15][_0x763a[246]],_0x3536x1a;if(_0x3536x19[_0x763a[1193]]()){_0x3536x1a= 0== _0x3536x13?_0x3536x9[_0x763a[1838]]:_0x3536x9[_0x763a[1837]];for(var _0x3536x1b=0;_0x3536x1b< _0x3536x1a[_0x763a[67]];_0x3536x1b++){if(_0x3536x1a[_0x3536x1b][_0x763a[1097]]== _0x3536x19|| _0x3536x1a[_0x3536x1b][_0x763a[772]]== _0x3536x19){_0x3536xa+= _0x3536x1a[_0x3536x1b][_0x763a[1842]][_0x763a[67]],_0x3536x18++,_0x3536x12[_0x763a[207]](_0x3536x1a[_0x3536x1b])}}}else {_0x3536xa+= _0x3536x19[_0x763a[1842]][_0x763a[67]],_0x3536x18++,_0x3536x12[_0x763a[207]](_0x3536x19)}};_0x3536x9[_0x763a[117]]> (_0x3536xa+ 1)* this[_0x763a[1751]]+ 2* this[_0x763a[1751]]&& (_0x3536x16+= this[_0x763a[1751]],_0x3536x17-= this[_0x763a[1751]]);_0x3536x14= (_0x3536x17- _0x3536x16)/ _0x3536xa;_0x3536x16+= _0x3536x14/ 2;_0x3536x17= this[_0x763a[1753]]- this[_0x763a[1752]];for(_0x3536x15= _0x3536x18= 0;_0x3536x15< _0x3536x12[_0x763a[67]];_0x3536x15++){_0x3536x19= _0x3536x12[_0x3536x15][_0x763a[1842]][_0x763a[67]];_0x3536x1b= mxCellPath[_0x763a[385]](_0x3536x12[_0x3536x15][_0x763a[1842]][0]);_0x3536x1a= this[_0x763a[1873]][_0x3536x1b];null== _0x3536x1a&& (_0x3536x1a= [],this[_0x763a[1873]][_0x3536x1b]= _0x3536x1a);_0x3536x15< _0x3536xa/ 2?_0x3536x17+= this[_0x763a[1752]]:_0x3536x15> _0x3536xa/ 2&& (_0x3536x17-= this[_0x763a[1752]]);for(_0x3536x1b= 0;_0x3536x1b< _0x3536x19;_0x3536x1b++){_0x3536x1a[4* _0x3536x1b+ 2* _0x3536x13]= _0x3536x16,_0x3536x16+= _0x3536x14,_0x3536x1a[4* _0x3536x1b+ 2* _0x3536x13+ 1]= _0x3536x17};_0x3536x18= Math[_0x763a[160]](_0x3536x18,_0x3536x17)}};_0x3536xa= _0x3536x9[_0x763a[1831]](_0x3536x3);_0x3536x12= _0x3536x3+ 1}}}}};mxCoordinateAssignment[_0x763a[202]][_0x763a[1907]]= function(_0x3536x2){var _0x3536x3=0;if(101207!= _0x3536x2[_0x763a[1826]][0]){var _0x3536x4=_0x3536x2[_0x763a[1827]],_0x3536x5=_0x3536x2[_0x763a[1828]];_0x3536x4== _0x3536x5&& (_0x3536x4= _0x3536x2[_0x763a[1097]][_0x763a[1827]],_0x3536x5= _0x3536x2[_0x763a[772]][_0x763a[1828]]);for(var _0x3536x9=0,_0x3536xa=mxCellPath[_0x763a[385]](_0x3536x2[_0x763a[1842]][0]),_0x3536xa=this[_0x763a[1873]][_0x3536xa],_0x3536x12=_0x3536x2[_0x763a[1843]]?_0x3536x2[_0x763a[772]][_0x763a[246]]:_0x3536x2[_0x763a[1097]][_0x763a[246]],_0x3536x13=this[_0x763a[1759]][_0x763a[1179]],_0x3536x14=0;_0x3536x14< _0x3536x2[_0x763a[1842]][_0x763a[67]];_0x3536x14++){var _0x3536x15=_0x3536x2[_0x763a[1842]][_0x3536x14],_0x3536x16=this[_0x763a[1759]][_0x763a[1710]](_0x3536x15,!0),_0x3536x17=_0x3536x13[_0x763a[251]][_0x763a[1709]](_0x3536x15,!0),_0x3536x18=[],_0x3536x19=_0x3536x2[_0x763a[1843]];_0x3536x16!= _0x3536x12&& (_0x3536x19= !_0x3536x19);if(null!= _0x3536xa){var _0x3536x1a=_0x3536x19?2:0,_0x3536x1b=_0x3536x19?this[_0x763a[1877]][_0x3536x5]:this[_0x763a[1878]][_0x3536x4],_0x3536x1c=_0x3536xa[4* _0x3536x9+ 1+ _0x3536x1a];_0x3536x19&& (_0x3536x1c= -_0x3536x1c);_0x3536x1b+= _0x3536x1c;_0x3536x1a= _0x3536xa[4* _0x3536x9+ _0x3536x1a];_0x3536x17= _0x3536x13[_0x763a[251]][_0x763a[1709]](_0x3536x15,!0);this[_0x763a[1759]][_0x763a[1908]](_0x3536x17)&& _0x3536x13[_0x763a[251]][_0x763a[1197]](_0x3536x17)== _0x3536x16&& (_0x3536x1a= _0x3536x13[_0x763a[441]][_0x763a[248]](_0x3536x17),_0x3536x1a= null!= _0x3536x1a?_0x3536x1a[_0x763a[235]]:_0x3536x16[_0x763a[256]][_0x763a[235]]+ _0x3536x2[_0x763a[1097]][_0x763a[117]]* _0x3536x17[_0x763a[256]][_0x763a[235]]);this[_0x763a[1870]]== mxConstants[_0x763a[1358]]|| this[_0x763a[1870]]== mxConstants[_0x763a[1354]]?(_0x3536x18[_0x763a[207]]( new mxPoint(_0x3536x1a,_0x3536x1b)),this[_0x763a[675]]== mxHierarchicalEdgeStyle[_0x763a[1906]]&& _0x3536x18[_0x763a[207]]( new mxPoint(_0x3536x1a,_0x3536x1b+ _0x3536x1c))):(_0x3536x18[_0x763a[207]]( new mxPoint(_0x3536x1b,_0x3536x1a)),this[_0x763a[675]]== mxHierarchicalEdgeStyle[_0x763a[1906]]&& _0x3536x18[_0x763a[207]]( new mxPoint(_0x3536x1b+ _0x3536x1c,_0x3536x1a)))};_0x3536x1a= _0x3536x2[_0x763a[235]][_0x763a[67]]- 1;_0x3536x1b= _0x3536x1c= -1;_0x3536x16= _0x3536x2[_0x763a[1827]]- 1;_0x3536x19&& (_0x3536x1a= 0,_0x3536x1c= _0x3536x2[_0x763a[235]][_0x763a[67]],_0x3536x1b= 1,_0x3536x16= _0x3536x2[_0x763a[1828]]+ 1);for(;_0x3536x2[_0x763a[1827]]!= _0x3536x2[_0x763a[1828]]&& _0x3536x1a!= _0x3536x1c;_0x3536x1a+= _0x3536x1b){var _0x3536x17=_0x3536x2[_0x763a[235]][_0x3536x1a]+ _0x3536x3,_0x3536x1d=(this[_0x763a[1877]][_0x3536x16]+ this[_0x763a[1878]][_0x3536x16+ 1])/ 2,_0x3536x1e=(this[_0x763a[1877]][_0x3536x16- 1]+ this[_0x763a[1878]][_0x3536x16])/ 2;if(_0x3536x19){var _0x3536x1f=_0x3536x1d,_0x3536x1d=_0x3536x1e,_0x3536x1e=_0x3536x1f};this[_0x763a[1870]]== mxConstants[_0x763a[1358]]|| this[_0x763a[1870]]== mxConstants[_0x763a[1354]]?(_0x3536x18[_0x763a[207]]( new mxPoint(_0x3536x17,_0x3536x1d)),_0x3536x18[_0x763a[207]]( new mxPoint(_0x3536x17,_0x3536x1e))):(_0x3536x18[_0x763a[207]]( new mxPoint(_0x3536x1d,_0x3536x17)),_0x3536x18[_0x763a[207]]( new mxPoint(_0x3536x1e,_0x3536x17)));this[_0x763a[1874]]= Math[_0x763a[160]](this[_0x763a[1874]],_0x3536x17);_0x3536x16+= _0x3536x1b};null!= _0x3536xa&& (_0x3536x1a= _0x3536x19?2:0,_0x3536x1b= _0x3536x19?this[_0x763a[1878]][_0x3536x4]:this[_0x763a[1877]][_0x3536x5],_0x3536x1c= _0x3536xa[4* _0x3536x9+ 3- _0x3536x1a],_0x3536x19&& (_0x3536x1c= -_0x3536x1c),_0x3536x1b-= _0x3536x1c,_0x3536x1a= _0x3536xa[4* _0x3536x9+ 2- _0x3536x1a],_0x3536x19= _0x3536x13[_0x763a[251]][_0x763a[1709]](_0x3536x15,!1),_0x3536x16= this[_0x763a[1759]][_0x763a[1710]](_0x3536x15,!1),this[_0x763a[1759]][_0x763a[1908]](_0x3536x19)&& _0x3536x13[_0x763a[251]][_0x763a[1197]](_0x3536x19)== _0x3536x16&& (_0x3536x1a= _0x3536x13[_0x763a[441]][_0x763a[248]](_0x3536x19),_0x3536x1a= null!= _0x3536x1a?_0x3536x1a[_0x763a[235]]:_0x3536x16[_0x763a[256]][_0x763a[235]]+ _0x3536x2[_0x763a[772]][_0x763a[117]]* _0x3536x19[_0x763a[256]][_0x763a[235]]),this[_0x763a[1870]]== mxConstants[_0x763a[1358]]|| this[_0x763a[1870]]== mxConstants[_0x763a[1354]]?(this[_0x763a[675]]== mxHierarchicalEdgeStyle[_0x763a[1906]]&& _0x3536x18[_0x763a[207]]( new mxPoint(_0x3536x1a,_0x3536x1b- _0x3536x1c)),_0x3536x18[_0x763a[207]]( new mxPoint(_0x3536x1a,_0x3536x1b))):(this[_0x763a[675]]== mxHierarchicalEdgeStyle[_0x763a[1906]]&& _0x3536x18[_0x763a[207]]( new mxPoint(_0x3536x1b- _0x3536x1c,_0x3536x1a)),_0x3536x18[_0x763a[207]]( new mxPoint(_0x3536x1b,_0x3536x1a))));_0x3536x2[_0x763a[1843]]&& this[_0x763a[1909]](_0x3536x2,_0x3536x15);this[_0x763a[1759]][_0x763a[1722]](_0x3536x15,_0x3536x18);_0x3536x3= 0== _0x3536x3?this[_0x763a[1872]]:0< _0x3536x3?-_0x3536x3:-_0x3536x3+ this[_0x763a[1872]];_0x3536x9++};_0x3536x2[_0x763a[1826]][0]= 101207}};mxCoordinateAssignment[_0x763a[202]][_0x763a[1725]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[246]],_0x3536x4=_0x3536x2[_0x763a[235]][0]- _0x3536x2[_0x763a[117]]/ 2,_0x3536x5=_0x3536x2[_0x763a[236]][0]- _0x3536x2[_0x763a[119]]/ 2;this[_0x763a[1877]][_0x3536x2[_0x763a[1828]]]= Math[_0x763a[243]](this[_0x763a[1877]][_0x3536x2[_0x763a[1828]]],_0x3536x5);this[_0x763a[1878]][_0x3536x2[_0x763a[1828]]]= Math[_0x763a[160]](this[_0x763a[1878]][_0x3536x2[_0x763a[1828]]],_0x3536x5+ _0x3536x2[_0x763a[119]]);this[_0x763a[1870]]== mxConstants[_0x763a[1358]]|| this[_0x763a[1870]]== mxConstants[_0x763a[1354]]?this[_0x763a[1759]][_0x763a[1725]](_0x3536x3,_0x3536x4,_0x3536x5):this[_0x763a[1759]][_0x763a[1725]](_0x3536x3,_0x3536x5,_0x3536x4);this[_0x763a[1874]]= Math[_0x763a[160]](this[_0x763a[1874]],_0x3536x4+ _0x3536x2[_0x763a[117]])};mxCoordinateAssignment[_0x763a[202]][_0x763a[1909]]= function(_0x3536x2,_0x3536x3){};function WeightedCellSorter(_0x3536x2,_0x3536x3){this[_0x763a[246]]= _0x3536x2;this[_0x763a[1782]]= _0x3536x3}WeightedCellSorter[_0x763a[202]][_0x763a[1782]]= 0;WeightedCellSorter[_0x763a[202]][_0x763a[1783]]= !1;WeightedCellSorter[_0x763a[202]][_0x763a[1784]]= !1;WeightedCellSorter[_0x763a[202]][_0x763a[1785]]= null;WeightedCellSorter[_0x763a[202]][_0x763a[246]]= null;WeightedCellSorter[_0x763a[202]][_0x763a[469]]= function(_0x3536x2,_0x3536x3){return null!= _0x3536x2&& null!= _0x3536x3?_0x3536x3[_0x763a[1782]]> _0x3536x2[_0x763a[1782]]?-1:_0x3536x3[_0x763a[1782]]< _0x3536x2[_0x763a[1782]]?1:_0x3536x3[_0x763a[1783]]?-1:1:0};function mxHierarchicalLayout(_0x3536x2,_0x3536x3,_0x3536x4){mxGraphLayout[_0x763a[239]](this,_0x3536x2);this[_0x763a[1870]]= null!= _0x3536x3?_0x3536x3:mxConstants[_0x763a[1358]];this[_0x763a[1910]]= null!= _0x3536x4?_0x3536x4:!0}mxHierarchicalLayout[_0x763a[202]]= new mxGraphLayout;mxHierarchicalLayout[_0x763a[202]][_0x763a[196]]= mxHierarchicalLayout;mxHierarchicalLayout[_0x763a[202]][_0x763a[1845]]= null;mxHierarchicalLayout[_0x763a[202]][_0x763a[1735]]= !1;mxHierarchicalLayout[_0x763a[202]][_0x763a[1911]]= !1;mxHierarchicalLayout[_0x763a[202]][_0x763a[1912]]= 0;mxHierarchicalLayout[_0x763a[202]][_0x763a[1868]]= 30;mxHierarchicalLayout[_0x763a[202]][_0x763a[1869]]= 100;mxHierarchicalLayout[_0x763a[202]][_0x763a[1913]]= 60;mxHierarchicalLayout[_0x763a[202]][_0x763a[1872]]= 10;mxHierarchicalLayout[_0x763a[202]][_0x763a[1870]]= mxConstants[_0x763a[1358]];mxHierarchicalLayout[_0x763a[202]][_0x763a[1882]]= !0;mxHierarchicalLayout[_0x763a[202]][_0x763a[1844]]= !0;mxHierarchicalLayout[_0x763a[202]][_0x763a[1787]]= !0;mxHierarchicalLayout[_0x763a[202]][_0x763a[1914]]= !0;mxHierarchicalLayout[_0x763a[202]][_0x763a[251]]= null;mxHierarchicalLayout[_0x763a[202]][_0x763a[1915]]= null;mxHierarchicalLayout[_0x763a[202]][_0x763a[502]]= function(){return this[_0x763a[251]]};mxHierarchicalLayout[_0x763a[202]][_0x763a[350]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1101]]= _0x3536x2;var _0x3536x4=this[_0x763a[1179]][_0x763a[251]];this[_0x763a[1915]]= {};if(!(null== _0x3536x3&& null== _0x3536x2)){if(null!= _0x3536x3&& null!= _0x3536x2){for(var _0x3536x5=[],_0x3536x9=0;_0x3536x9< _0x3536x3[_0x763a[67]];_0x3536x9++){_0x3536x4[_0x763a[1720]](_0x3536x2,_0x3536x3[_0x3536x9])&& _0x3536x5[_0x763a[207]](_0x3536x3[_0x3536x9])};this[_0x763a[1845]]= _0x3536x5}else {this[_0x763a[1845]]= _0x3536x3};_0x3536x4[_0x763a[473]]();try{this[_0x763a[1916]](_0x3536x2),this[_0x763a[1735]]&& !this[_0x763a[1179]][_0x763a[1742]](_0x3536x2)&& this[_0x763a[1179]][_0x763a[1917]]([_0x3536x2],this[_0x763a[1912]],this[_0x763a[1911]])}finally{_0x3536x4[_0x763a[476]]()}}};mxHierarchicalLayout[_0x763a[202]][_0x763a[1918]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=[];if(null!= _0x3536x2&& null!= _0x3536x3){var _0x3536x5=this[_0x763a[1179]][_0x763a[251]],_0x3536x9=null,_0x3536xa=-1E5,_0x3536x12;for(_0x3536x12 in _0x3536x3){var _0x3536x13=_0x3536x3[_0x3536x12];if(_0x3536x5[_0x763a[1193]](_0x3536x13)&& this[_0x763a[1179]][_0x763a[1714]](_0x3536x13)){for(var _0x3536x14=this[_0x763a[264]](_0x3536x13),_0x3536x15=0,_0x3536x16=0,_0x3536x17=0;_0x3536x17< _0x3536x14[_0x763a[67]];_0x3536x17++){this[_0x763a[1710]](_0x3536x14[_0x3536x17],!0)== _0x3536x13?_0x3536x15++:_0x3536x16++};0== _0x3536x16&& 0< _0x3536x15&& _0x3536x4[_0x763a[207]](_0x3536x13);_0x3536x14= _0x3536x15- _0x3536x16;_0x3536x14> _0x3536xa&& (_0x3536xa= _0x3536x14,_0x3536x9= _0x3536x13)}};0== _0x3536x4[_0x763a[67]]&& null!= _0x3536x9&& _0x3536x4[_0x763a[207]](_0x3536x9)};return _0x3536x4};mxHierarchicalLayout[_0x763a[202]][_0x763a[264]]= function(_0x3536x2){var _0x3536x3=mxCellPath[_0x763a[385]](_0x3536x2);if(null!= this[_0x763a[1915]][_0x3536x3]){return this[_0x763a[1915]][_0x3536x3]};for(var _0x3536x4=this[_0x763a[1179]][_0x763a[251]],_0x3536x5=[],_0x3536x9=this[_0x763a[1179]][_0x763a[1742]](_0x3536x2),_0x3536xa=_0x3536x4[_0x763a[262]](_0x3536x2),_0x3536x12=0;_0x3536x12< _0x3536xa;_0x3536x12++){var _0x3536x13=_0x3536x4[_0x763a[263]](_0x3536x2,_0x3536x12);if(this[_0x763a[1908]](_0x3536x13)){_0x3536x5= _0x3536x5[_0x763a[1919]](_0x3536x4[_0x763a[264]](_0x3536x13,!0,!0))}else {if(_0x3536x9|| !this[_0x763a[1179]][_0x763a[1714]](_0x3536x13)){_0x3536x5= _0x3536x5[_0x763a[1919]](_0x3536x4[_0x763a[264]](_0x3536x13,!0,!0))}}};_0x3536x5= _0x3536x5[_0x763a[1919]](_0x3536x4[_0x763a[264]](_0x3536x2,!0,!0));_0x3536x4= [];for(_0x3536x12= 0;_0x3536x12< _0x3536x5[_0x763a[67]];_0x3536x12++){_0x3536x9= this[_0x763a[1710]](_0x3536x5[_0x3536x12],!0),_0x3536xa= this[_0x763a[1710]](_0x3536x5[_0x3536x12],!1),(_0x3536x9== _0x3536xa|| _0x3536x9!= _0x3536xa&& (_0x3536xa== _0x3536x2&& (null== this[_0x763a[1101]]|| this[_0x763a[1179]][_0x763a[1920]](_0x3536x9,this[_0x763a[1101]],this[_0x763a[1914]]))|| _0x3536x9== _0x3536x2&& (null== this[_0x763a[1101]]|| this[_0x763a[1179]][_0x763a[1920]](_0x3536xa,this[_0x763a[1101]],this[_0x763a[1914]]))))&& _0x3536x4[_0x763a[207]](_0x3536x5[_0x3536x12])};return this[_0x763a[1915]][_0x3536x3]= _0x3536x4};mxHierarchicalLayout[_0x763a[202]][_0x763a[1710]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x2),_0x3536x4=null!= _0x3536x4?_0x3536x4[_0x763a[1710]](_0x3536x3):this[_0x763a[1179]][_0x763a[441]][_0x763a[1710]](_0x3536x2,_0x3536x3);this[_0x763a[1908]](_0x3536x4)&& (_0x3536x4= this[_0x763a[1179]][_0x763a[251]][_0x763a[1197]](_0x3536x4));return _0x3536x4};mxHierarchicalLayout[_0x763a[202]][_0x763a[1916]]= function(_0x3536x2){var _0x3536x3=[],_0x3536x4=[];if(null== this[_0x763a[1845]]&& null!= _0x3536x2){var _0x3536x5={};this[_0x763a[1921]](_0x3536x2,_0x3536x5);this[_0x763a[1845]]= [];var _0x3536x9=!0,_0x3536xa;for(_0x3536xa in _0x3536x5){if(null!= _0x3536x5[_0x3536xa]){_0x3536x9= !1;break}};for(;!_0x3536x9;){for(var _0x3536x12=this[_0x763a[1918]](_0x3536x2,_0x3536x5),_0x3536x9=0;_0x3536x9< _0x3536x12[_0x763a[67]];_0x3536x9++){var _0x3536x13=[];_0x3536x3[_0x763a[207]](_0x3536x13);this[_0x763a[1706]](_0x3536x12[_0x3536x9],!0,null,_0x3536x4,_0x3536x13,_0x3536x3,_0x3536x5)};for(_0x3536x9= 0;_0x3536x9< _0x3536x12[_0x763a[67]];_0x3536x9++){this[_0x763a[1845]][_0x763a[207]](_0x3536x12[_0x3536x9])};_0x3536x9= !0;for(_0x3536xa in _0x3536x5){if(null!= _0x3536x5[_0x3536xa]){_0x3536x9= !1;break}}}}else {for(_0x3536x9= 0;_0x3536x9< roots[_0x763a[67]];_0x3536x9++){_0x3536x13= [],_0x3536x3[_0x763a[207]](_0x3536x13),traverse(roots[_0x763a[203]](_0x3536x9),!0,null,_0x3536x4,_0x3536x13,_0x3536x3,null)}};for(_0x3536x9= _0x3536x4= 0;_0x3536x9< _0x3536x3[_0x763a[67]];_0x3536x9++){_0x3536x13= _0x3536x3[_0x3536x9];_0x3536x5= [];for(_0x3536xa in _0x3536x13){_0x3536x5[_0x763a[207]](_0x3536x13[_0x3536xa])};this[_0x763a[251]]= new mxGraphHierarchyModel(this,_0x3536x5,this[_0x763a[1845]],_0x3536x2,this[_0x763a[1844]]);this[_0x763a[1922]](_0x3536x2);this[_0x763a[1923]]();this[_0x763a[1924]](_0x3536x2);_0x3536x4= this[_0x763a[1925]](_0x3536x4,_0x3536x2)}};mxHierarchicalLayout[_0x763a[202]][_0x763a[1921]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[251]];_0x3536x4[_0x763a[1193]](_0x3536x2)&& (_0x3536x2!= this[_0x763a[1101]]&& this[_0x763a[1179]][_0x763a[1714]](_0x3536x2))&& (_0x3536x3[mxCellPath[_0x763a[385]](_0x3536x2)]= _0x3536x2);if(this[_0x763a[1914]]|| _0x3536x2== this[_0x763a[1101]]&& this[_0x763a[1179]][_0x763a[1714]](_0x3536x2)){for(var _0x3536x5=_0x3536x4[_0x763a[262]](_0x3536x2),_0x3536x9=0;_0x3536x9< _0x3536x5;_0x3536x9++){var _0x3536xa=_0x3536x4[_0x763a[263]](_0x3536x2,_0x3536x9);this[_0x763a[1908]](_0x3536xa)|| this[_0x763a[1921]](_0x3536xa,_0x3536x3)}}};mxHierarchicalLayout[_0x763a[202]][_0x763a[1908]]= function(_0x3536x2){return _0x3536x2[_0x763a[256]][_0x763a[1500]]?!0:!1};mxHierarchicalLayout[_0x763a[202]][_0x763a[1781]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= null!= _0x3536x4?_0x3536x4:!1;for(var _0x3536x5=this[_0x763a[264]](_0x3536x2),_0x3536x9=[],_0x3536xa=0;_0x3536xa< _0x3536x5[_0x763a[67]];_0x3536xa++){var _0x3536x12=this[_0x763a[1710]](_0x3536x5[_0x3536xa],!0),_0x3536x13=this[_0x763a[1710]](_0x3536x5[_0x3536xa],!1);(_0x3536x12== _0x3536x2&& _0x3536x13== _0x3536x3|| !_0x3536x4&& _0x3536x12== _0x3536x3&& _0x3536x13== _0x3536x2)&& _0x3536x9[_0x763a[207]](_0x3536x5[_0x3536xa])};return _0x3536x9};mxHierarchicalLayout[_0x763a[202]][_0x763a[1706]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12){if(null!= _0x3536x2&& null!= _0x3536x5){var _0x3536x13=mxCellPath[_0x763a[385]](_0x3536x2);if(null== _0x3536x5[_0x3536x13]&& (null== _0x3536x12|| null!= _0x3536x12[_0x3536x13])){null== _0x3536x9[_0x3536x13]&& (_0x3536x9[_0x3536x13]= _0x3536x2);null== _0x3536x5[_0x3536x13]&& (_0x3536x5[_0x3536x13]= _0x3536x2);delete _0x3536x12[_0x3536x13];var _0x3536x14=this[_0x763a[264]](_0x3536x2);for(_0x3536x4= 0;_0x3536x4< _0x3536x14[_0x763a[67]];_0x3536x4++){if(_0x3536x13= this[_0x763a[1710]](_0x3536x14[_0x3536x4],!0)== _0x3536x2,!_0x3536x3|| _0x3536x13){_0x3536x13= this[_0x763a[1710]](_0x3536x14[_0x3536x4],!_0x3536x13),_0x3536x9= this[_0x763a[1706]](_0x3536x13,_0x3536x3,_0x3536x14[_0x3536x4],_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12)}}}else {if(null== _0x3536x9[_0x3536x13]){for(_0x3536x4= 0;_0x3536x4< _0x3536xa[_0x763a[67]];_0x3536x4++){if(_0x3536x2= _0x3536xa[_0x3536x4],null!= _0x3536x2[_0x3536x13]){for(_0x3536x14 in _0x3536x9){_0x3536x2[_0x3536x14]= _0x3536x9[_0x3536x14]};_0x3536xa[_0x763a[1242]]();return _0x3536x2}}}}};return _0x3536x9};mxHierarchicalLayout[_0x763a[202]][_0x763a[1922]]= function(_0x3536x2){( new mxMinimumCycleRemover(this))[_0x763a[350]](_0x3536x2)};mxHierarchicalLayout[_0x763a[202]][_0x763a[1923]]= function(){this[_0x763a[251]][_0x763a[1852]]();this[_0x763a[251]][_0x763a[1854]]()};mxHierarchicalLayout[_0x763a[202]][_0x763a[1924]]= function(_0x3536x2){( new mxMedianHybridCrossingReduction(this))[_0x763a[350]](_0x3536x2)};mxHierarchicalLayout[_0x763a[202]][_0x763a[1925]]= function(_0x3536x2,_0x3536x3){var _0x3536x4= new mxCoordinateAssignment(this,this[_0x763a[1868]],this[_0x763a[1869]],this[_0x763a[1870]],_0x3536x2,this[_0x763a[1872]]);_0x3536x4[_0x763a[1882]]= this[_0x763a[1882]];_0x3536x4[_0x763a[350]](_0x3536x3);return _0x3536x4[_0x763a[1874]]+ this[_0x763a[1913]]};function mxGraphModel(_0x3536x2){this[_0x763a[1926]]= this[_0x763a[1096]]();null!= _0x3536x2?this[_0x763a[1927]](_0x3536x2):this[_0x763a[200]]()}mxGraphModel[_0x763a[202]]= new mxEventSource;mxGraphModel[_0x763a[202]][_0x763a[196]]= mxGraphModel;mxGraphModel[_0x763a[202]][_0x763a[813]]= null;mxGraphModel[_0x763a[202]][_0x763a[895]]= null;mxGraphModel[_0x763a[202]][_0x763a[1928]]= !0;mxGraphModel[_0x763a[202]][_0x763a[1929]]= !0;mxGraphModel[_0x763a[202]][_0x763a[1089]]= _0x763a[110];mxGraphModel[_0x763a[202]][_0x763a[1930]]= _0x763a[110];mxGraphModel[_0x763a[202]][_0x763a[1931]]= 0;mxGraphModel[_0x763a[202]][_0x763a[1926]]= null;mxGraphModel[_0x763a[202]][_0x763a[1932]]= 0;mxGraphModel[_0x763a[202]][_0x763a[1933]]= !1;mxGraphModel[_0x763a[202]][_0x763a[200]]= function(){this[_0x763a[1927]](this[_0x763a[1934]]())};mxGraphModel[_0x763a[202]][_0x763a[1935]]= function(){return this[_0x763a[1929]]};mxGraphModel[_0x763a[202]][_0x763a[1936]]= function(_0x3536x2){this[_0x763a[1929]]= _0x3536x2};mxGraphModel[_0x763a[202]][_0x763a[1934]]= function(){var _0x3536x2= new mxCell;_0x3536x2[_0x763a[1937]]( new mxCell);return _0x3536x2};mxGraphModel[_0x763a[202]][_0x763a[736]]= function(_0x3536x2){return null!= this[_0x763a[895]]?this[_0x763a[895]][_0x3536x2]:null};mxGraphModel[_0x763a[202]][_0x763a[1938]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=null;if(null!= _0x3536x2){for(var _0x3536x4=[],_0x3536x5=0;_0x3536x5< _0x3536x2[_0x763a[67]];_0x3536x5++){_0x3536x3(_0x3536x2[_0x3536x5])&& _0x3536x4[_0x763a[207]](_0x3536x2[_0x3536x5])}};return _0x3536x4};mxGraphModel[_0x763a[202]][_0x763a[1939]]= function(_0x3536x2){return this[_0x763a[1921]](null,_0x3536x2)};mxGraphModel[_0x763a[202]][_0x763a[1921]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=[];_0x3536x3= _0x3536x3|| this[_0x763a[501]]();(null== _0x3536x2|| _0x3536x2(_0x3536x3))&& _0x3536x4[_0x763a[207]](_0x3536x3);for(var _0x3536x5=this[_0x763a[262]](_0x3536x3),_0x3536x9=0;_0x3536x9< _0x3536x5;_0x3536x9++){var _0x3536xa=this[_0x763a[263]](_0x3536x3,_0x3536x9),_0x3536x4=_0x3536x4[_0x763a[1919]](this[_0x763a[1921]](_0x3536x2,_0x3536xa))};return _0x3536x4};mxGraphModel[_0x763a[202]][_0x763a[501]]= function(_0x3536x2){var _0x3536x3=_0x3536x2|| this[_0x763a[813]];if(null!= _0x3536x2){for(;null!= _0x3536x2;){_0x3536x3= _0x3536x2,_0x3536x2= this[_0x763a[1197]](_0x3536x2)}};return _0x3536x3};mxGraphModel[_0x763a[202]][_0x763a[1927]]= function(_0x3536x2){this[_0x763a[350]]( new mxRootChange(this,_0x3536x2));return _0x3536x2};mxGraphModel[_0x763a[202]][_0x763a[1940]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[813]];this[_0x763a[813]]= _0x3536x2;this[_0x763a[1931]]= 0;this[_0x763a[895]]= null;this[_0x763a[1941]](_0x3536x2);return _0x3536x3};mxGraphModel[_0x763a[202]][_0x763a[1942]]= function(_0x3536x2){return null!= _0x3536x2&& this[_0x763a[813]]== _0x3536x2};mxGraphModel[_0x763a[202]][_0x763a[1740]]= function(_0x3536x2){return this[_0x763a[1942]](this[_0x763a[1197]](_0x3536x2))};mxGraphModel[_0x763a[202]][_0x763a[1720]]= function(_0x3536x2,_0x3536x3){for(;null!= _0x3536x3&& _0x3536x3!= _0x3536x2;){_0x3536x3= this[_0x763a[1197]](_0x3536x3)};return _0x3536x3== _0x3536x2};mxGraphModel[_0x763a[202]][_0x763a[442]]= function(_0x3536x2){return this[_0x763a[1720]](this[_0x763a[813]],_0x3536x2)};mxGraphModel[_0x763a[202]][_0x763a[1197]]= function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[1197]]():null};mxGraphModel[_0x763a[202]][_0x763a[99]]= function(_0x3536x2,_0x3536x3,_0x3536x4){if(_0x3536x3!= _0x3536x2&& null!= _0x3536x2&& null!= _0x3536x3){null== _0x3536x4&& (_0x3536x4= this[_0x763a[262]](_0x3536x2));var _0x3536x5=_0x3536x2!= this[_0x763a[1197]](_0x3536x3);this[_0x763a[350]]( new mxChildChange(this,_0x3536x2,_0x3536x3,_0x3536x4));this[_0x763a[1928]]&& _0x3536x5&& this[_0x763a[1943]](_0x3536x3)};return _0x3536x3};mxGraphModel[_0x763a[202]][_0x763a[1941]]= function(_0x3536x2){if(null!= _0x3536x2){null== _0x3536x2[_0x763a[1103]]()&& this[_0x763a[1929]]&& _0x3536x2[_0x763a[1945]](this[_0x763a[1944]](_0x3536x2));if(null!= _0x3536x2[_0x763a[1103]]()){var _0x3536x3=this[_0x763a[736]](_0x3536x2[_0x763a[1103]]());if(_0x3536x3!= _0x3536x2){for(;null!= _0x3536x3;){_0x3536x2[_0x763a[1945]](this[_0x763a[1944]](_0x3536x2)),_0x3536x3= this[_0x763a[736]](_0x3536x2[_0x763a[1103]]())};null== this[_0x763a[895]]&& (this[_0x763a[895]]= {});this[_0x763a[895]][_0x3536x2[_0x763a[1103]]()]= _0x3536x2}};mxUtils[_0x763a[1946]](_0x3536x2[_0x763a[1103]]())&& (this[_0x763a[1931]]= Math[_0x763a[160]](this[_0x763a[1931]],_0x3536x2[_0x763a[1103]]()));for(var _0x3536x3=this[_0x763a[262]](_0x3536x2),_0x3536x4=0;_0x3536x4< _0x3536x3;_0x3536x4++){this[_0x763a[1941]](this[_0x763a[263]](_0x3536x2,_0x3536x4))}}};mxGraphModel[_0x763a[202]][_0x763a[1944]]= function(_0x3536x2){_0x3536x2= this[_0x763a[1931]];this[_0x763a[1931]]++;return this[_0x763a[1089]]+ _0x3536x2+ this[_0x763a[1930]]};mxGraphModel[_0x763a[202]][_0x763a[1943]]= function(_0x3536x2,_0x3536x3){_0x3536x3= _0x3536x3|| this[_0x763a[501]](_0x3536x2);for(var _0x3536x4=this[_0x763a[262]](_0x3536x2),_0x3536x5=0;_0x3536x5< _0x3536x4;_0x3536x5++){var _0x3536x9=this[_0x763a[263]](_0x3536x2,_0x3536x5);this[_0x763a[1943]](_0x3536x9,_0x3536x3)};_0x3536x9= this[_0x763a[1707]](_0x3536x2);_0x3536x4= [];for(_0x3536x5= 0;_0x3536x5< _0x3536x9;_0x3536x5++){_0x3536x4[_0x763a[207]](this[_0x763a[1708]](_0x3536x2,_0x3536x5))};for(_0x3536x5= 0;_0x3536x5< _0x3536x4[_0x763a[67]];_0x3536x5++){_0x3536x9= _0x3536x4[_0x3536x5],this[_0x763a[1720]](_0x3536x3,_0x3536x9)&& this[_0x763a[1947]](_0x3536x9,_0x3536x3)}};mxGraphModel[_0x763a[202]][_0x763a[1947]]= function(_0x3536x2,_0x3536x3){for(var _0x3536x4=this[_0x763a[1709]](_0x3536x2,!0),_0x3536x5=this[_0x763a[1709]](_0x3536x2,!1),_0x3536x9=null;null!= _0x3536x4&& !this[_0x763a[250]](_0x3536x4)&& null!= _0x3536x4[_0x763a[256]]&& _0x3536x4[_0x763a[256]][_0x763a[1500]];){_0x3536x4= this[_0x763a[1197]](_0x3536x4)};for(;null!= _0x3536x5&& !this[_0x763a[250]](_0x3536x5)&& null!= _0x3536x5[_0x763a[256]]&& _0x3536x5[_0x763a[256]][_0x763a[1500]];){_0x3536x5= this[_0x763a[1197]](_0x3536x5)};if(this[_0x763a[1720]](_0x3536x3,_0x3536x4)&& this[_0x763a[1720]](_0x3536x3,_0x3536x5)&& (_0x3536x9= _0x3536x4== _0x3536x5?this[_0x763a[1197]](_0x3536x4):this[_0x763a[1948]](_0x3536x4,_0x3536x5),null!= _0x3536x9&& (this[_0x763a[1197]](_0x3536x9)!= this[_0x763a[813]]|| this[_0x763a[1720]](_0x3536x9,_0x3536x2))&& this[_0x763a[1197]](_0x3536x2)!= _0x3536x9)){_0x3536x4= this[_0x763a[1721]](_0x3536x2);if(null!= _0x3536x4){var _0x3536xa=this[_0x763a[1949]](this[_0x763a[1197]](_0x3536x2)),_0x3536x12=this[_0x763a[1949]](_0x3536x9),_0x3536x5=_0x3536x12[_0x763a[235]]- _0x3536xa[_0x763a[235]],_0x3536xa=_0x3536x12[_0x763a[236]]- _0x3536xa[_0x763a[236]],_0x3536x4=_0x3536x4[_0x763a[238]]();_0x3536x4[_0x763a[513]](-_0x3536x5,-_0x3536xa);this[_0x763a[1724]](_0x3536x2,_0x3536x4)};this[_0x763a[99]](_0x3536x9,_0x3536x2,this[_0x763a[262]](_0x3536x9))}};mxGraphModel[_0x763a[202]][_0x763a[1949]]= function(_0x3536x2){var _0x3536x3=null;null!= _0x3536x2?(_0x3536x3= this[_0x763a[1949]](this[_0x763a[1197]](_0x3536x2)),this[_0x763a[250]](_0x3536x2)|| (_0x3536x2= this[_0x763a[1721]](_0x3536x2),null!= _0x3536x2&& (_0x3536x3[_0x763a[235]]+= _0x3536x2[_0x763a[235]],_0x3536x3[_0x763a[236]]+= _0x3536x2[_0x763a[236]]))):_0x3536x3= new mxPoint;return _0x3536x3};mxGraphModel[_0x763a[202]][_0x763a[1948]]= function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2&& null!= _0x3536x3){var _0x3536x4=mxCellPath[_0x763a[385]](_0x3536x3);if(null!= _0x3536x4&& 0< _0x3536x4[_0x763a[67]]){var _0x3536x5=_0x3536x2,_0x3536x9=mxCellPath[_0x763a[385]](_0x3536x5);if(_0x3536x4[_0x763a[67]]< _0x3536x9[_0x763a[67]]){var _0x3536x5=_0x3536x3,_0x3536xa=_0x3536x9,_0x3536x9=_0x3536x4,_0x3536x4=_0x3536xa};for(;null!= _0x3536x5;){_0x3536xa= this[_0x763a[1197]](_0x3536x5);if(0== _0x3536x4[_0x763a[2]](_0x3536x9+ mxCellPath[_0x763a[1950]])&& null!= _0x3536xa){return _0x3536x5};_0x3536x9= mxCellPath[_0x763a[1951]](_0x3536x9);_0x3536x5= _0x3536xa}}};return null};mxGraphModel[_0x763a[202]][_0x763a[205]]= function(_0x3536x2){_0x3536x2== this[_0x763a[813]]?this[_0x763a[1927]](null):null!= this[_0x763a[1197]](_0x3536x2)&& this[_0x763a[350]]( new mxChildChange(this,null,_0x3536x2));return _0x3536x2};mxGraphModel[_0x763a[202]][_0x763a[1102]]= function(_0x3536x2){if(null!= _0x3536x2&& null!= this[_0x763a[895]]){for(var _0x3536x3=this[_0x763a[262]](_0x3536x2)- 1;0<= _0x3536x3;_0x3536x3--){this[_0x763a[1102]](this[_0x763a[263]](_0x3536x2,_0x3536x3))};null!= this[_0x763a[895]]&& null!= _0x3536x2[_0x763a[1103]]()&& delete this[_0x763a[895]][_0x3536x2[_0x763a[1103]]()]}};mxGraphModel[_0x763a[202]][_0x763a[1952]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[1197]](_0x3536x2);null!= _0x3536x3?(_0x3536x3!= _0x3536x5|| _0x3536x5[_0x763a[1738]](_0x3536x2)!= _0x3536x4)&& _0x3536x3[_0x763a[1937]](_0x3536x2,_0x3536x4):null!= _0x3536x5&& (_0x3536x4= _0x3536x5[_0x763a[1738]](_0x3536x2),_0x3536x5[_0x763a[205]](_0x3536x4));!this[_0x763a[442]](_0x3536x5)&& null!= _0x3536x3?this[_0x763a[1941]](_0x3536x2):null== _0x3536x3&& this[_0x763a[1102]](_0x3536x2);return _0x3536x5};mxGraphModel[_0x763a[202]][_0x763a[262]]= function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[262]]():0};mxGraphModel[_0x763a[202]][_0x763a[263]]= function(_0x3536x2,_0x3536x3){return null!= _0x3536x2?_0x3536x2[_0x763a[263]](_0x3536x3):null};mxGraphModel[_0x763a[202]][_0x763a[1953]]= function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[1954]]:null};mxGraphModel[_0x763a[202]][_0x763a[1728]]= function(_0x3536x2){return this[_0x763a[1955]](_0x3536x2,!0,!1)};mxGraphModel[_0x763a[202]][_0x763a[1956]]= function(_0x3536x2){return this[_0x763a[1955]](_0x3536x2,!1,!0)};mxGraphModel[_0x763a[202]][_0x763a[1955]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x3= null!= _0x3536x3?_0x3536x3:!1;_0x3536x4= null!= _0x3536x4?_0x3536x4:!1;for(var _0x3536x5=this[_0x763a[262]](_0x3536x2),_0x3536x9=[],_0x3536xa=0;_0x3536xa< _0x3536x5;_0x3536xa++){var _0x3536x12=this[_0x763a[263]](_0x3536x2,_0x3536xa);(!_0x3536x4&& !_0x3536x3|| _0x3536x4&& this[_0x763a[250]](_0x3536x12)|| _0x3536x3&& this[_0x763a[1193]](_0x3536x12)) && _0x3536x9[_0x763a[207]](_0x3536x12)};return _0x3536x9};mxGraphModel[_0x763a[202]][_0x763a[1709]]= function(_0x3536x2,_0x3536x3){return null!= _0x3536x2?_0x3536x2[_0x763a[1709]](_0x3536x3):null};mxGraphModel[_0x763a[202]][_0x763a[1957]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=_0x3536x3!= this[_0x763a[1709]](_0x3536x2,_0x3536x4);this[_0x763a[350]]( new mxTerminalChange(this,_0x3536x2,_0x3536x3,_0x3536x4));this[_0x763a[1928]]&& _0x3536x5&& this[_0x763a[1947]](_0x3536x2,this[_0x763a[501]]());return _0x3536x3};mxGraphModel[_0x763a[202]][_0x763a[1958]]= function(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[473]]();try{this[_0x763a[1957]](_0x3536x2,_0x3536x3,!0),this[_0x763a[1957]](_0x3536x2,_0x3536x4,!1)}finally{this[_0x763a[476]]()}};mxGraphModel[_0x763a[202]][_0x763a[1959]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[1709]](_0x3536x2,_0x3536x4);null!= _0x3536x3?_0x3536x3[_0x763a[1960]](_0x3536x2,_0x3536x4):null!= _0x3536x5&& _0x3536x5[_0x763a[1961]](_0x3536x2,_0x3536x4);return _0x3536x5};mxGraphModel[_0x763a[202]][_0x763a[1707]]= function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[1707]]():0};mxGraphModel[_0x763a[202]][_0x763a[1708]]= function(_0x3536x2,_0x3536x3){return null!= _0x3536x2?_0x3536x2[_0x763a[1708]](_0x3536x3):null};mxGraphModel[_0x763a[202]][_0x763a[1962]]= function(_0x3536x2,_0x3536x3,_0x3536x4){for(var _0x3536x5=0,_0x3536x9=this[_0x763a[1707]](_0x3536x2),_0x3536xa=0;_0x3536xa< _0x3536x9;_0x3536xa++){var _0x3536x12=this[_0x763a[1708]](_0x3536x2,_0x3536xa);_0x3536x12!= _0x3536x4&& this[_0x763a[1709]](_0x3536x12,_0x3536x3)== _0x3536x2&& _0x3536x5++};return _0x3536x5};mxGraphModel[_0x763a[202]][_0x763a[1756]]= function(_0x3536x2){return this[_0x763a[264]](_0x3536x2,!0,!0,!1)};mxGraphModel[_0x763a[202]][_0x763a[1867]]= function(_0x3536x2){return this[_0x763a[264]](_0x3536x2,!0,!1,!1)};mxGraphModel[_0x763a[202]][_0x763a[1963]]= function(_0x3536x2){return this[_0x763a[264]](_0x3536x2,!1,!0,!1)};mxGraphModel[_0x763a[202]][_0x763a[264]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x3= null!= _0x3536x3?_0x3536x3:!0;_0x3536x4= null!= _0x3536x4?_0x3536x4:!0;_0x3536x5= null!= _0x3536x5?_0x3536x5:!0;for(var _0x3536x9=this[_0x763a[1707]](_0x3536x2),_0x3536xa=[],_0x3536x12=0;_0x3536x12< _0x3536x9;_0x3536x12++){var _0x3536x13=this[_0x763a[1708]](_0x3536x2,_0x3536x12),_0x3536x14=this[_0x763a[1709]](_0x3536x13,!0),_0x3536x15=this[_0x763a[1709]](_0x3536x13,!1);(_0x3536x5&& _0x3536x14== _0x3536x15|| _0x3536x14!= _0x3536x15&& (_0x3536x3&& _0x3536x15== _0x3536x2|| _0x3536x4&& _0x3536x14== _0x3536x2))&& _0x3536xa[_0x763a[207]](_0x3536x13)};return _0x3536xa};mxGraphModel[_0x763a[202]][_0x763a[1781]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= null!= _0x3536x4?_0x3536x4:!1;var _0x3536x5=this[_0x763a[1707]](_0x3536x2),_0x3536x9=this[_0x763a[1707]](_0x3536x3),_0x3536xa=_0x3536x2,_0x3536x12=_0x3536x5;_0x3536x9< _0x3536x5&& (_0x3536x12= _0x3536x9,_0x3536xa= _0x3536x3);_0x3536x5= [];for(_0x3536x9= 0;_0x3536x9< _0x3536x12;_0x3536x9++){var _0x3536x13=this[_0x763a[1708]](_0x3536xa,_0x3536x9),_0x3536x14=this[_0x763a[1709]](_0x3536x13,!0),_0x3536x15=this[_0x763a[1709]](_0x3536x13,!1),_0x3536x16=_0x3536x15== _0x3536x2&& _0x3536x14== _0x3536x3;(_0x3536x14== _0x3536x2&& _0x3536x15== _0x3536x3|| !_0x3536x4&& _0x3536x16)&& _0x3536x5[_0x763a[207]](_0x3536x13)};return _0x3536x5};mxGraphModel[_0x763a[202]][_0x763a[1808]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x4= null!= _0x3536x4?_0x3536x4:!0;_0x3536x5= null!= _0x3536x5?_0x3536x5:!0;var _0x3536x9=[];if(null!= _0x3536x2){for(var _0x3536xa=0;_0x3536xa< _0x3536x2[_0x763a[67]];_0x3536xa++){var _0x3536x12=this[_0x763a[1709]](_0x3536x2[_0x3536xa],!0),_0x3536x13=this[_0x763a[1709]](_0x3536x2[_0x3536xa],!1);_0x3536x12== _0x3536x3&& null!= _0x3536x13&& _0x3536x13!= _0x3536x3&& _0x3536x5?_0x3536x9[_0x763a[207]](_0x3536x13):_0x3536x13== _0x3536x3&& (null!= _0x3536x12&& _0x3536x12!= _0x3536x3&& _0x3536x4)&& _0x3536x9[_0x763a[207]](_0x3536x12)}};return _0x3536x9};mxGraphModel[_0x763a[202]][_0x763a[1964]]= function(_0x3536x2){for(var _0x3536x3=[],_0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){for(var _0x3536x5=_0x3536x2[_0x3536x4],_0x3536x9=!0,_0x3536xa=this[_0x763a[1197]](_0x3536x5);null!= _0x3536xa;){if(0<= mxUtils[_0x763a[2]](_0x3536x2,_0x3536xa)){_0x3536x9= !1;break};_0x3536xa= this[_0x763a[1197]](_0x3536xa)};_0x3536x9&& _0x3536x3[_0x763a[207]](_0x3536x5)};return _0x3536x3};mxGraphModel[_0x763a[202]][_0x763a[1193]]= function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[1193]]():!1};mxGraphModel[_0x763a[202]][_0x763a[250]]= function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[250]]():!1};mxGraphModel[_0x763a[202]][_0x763a[1965]]= function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[1965]]():!1};mxGraphModel[_0x763a[202]][_0x763a[433]]= function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[433]]():null};mxGraphModel[_0x763a[202]][_0x763a[1966]]= function(_0x3536x2,_0x3536x3){this[_0x763a[350]]( new mxValueChange(this,_0x3536x2,_0x3536x3));return _0x3536x3};mxGraphModel[_0x763a[202]][_0x763a[1967]]= function(_0x3536x2,_0x3536x3){return _0x3536x2[_0x763a[1968]](_0x3536x3)};mxGraphModel[_0x763a[202]][_0x763a[1721]]= function(_0x3536x2,_0x3536x3){return null!= _0x3536x2?_0x3536x2[_0x763a[1721]]():null};mxGraphModel[_0x763a[202]][_0x763a[1724]]= function(_0x3536x2,_0x3536x3){_0x3536x3!= this[_0x763a[1721]](_0x3536x2)&& this[_0x763a[350]]( new mxGeometryChange(this,_0x3536x2,_0x3536x3));return _0x3536x3};mxGraphModel[_0x763a[202]][_0x763a[1969]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1721]](_0x3536x2);_0x3536x2[_0x763a[1724]](_0x3536x3);return _0x3536x4};mxGraphModel[_0x763a[202]][_0x763a[474]]= function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[474]]():null};mxGraphModel[_0x763a[202]][_0x763a[475]]= function(_0x3536x2,_0x3536x3){_0x3536x3!= this[_0x763a[474]](_0x3536x2)&& this[_0x763a[350]]( new mxStyleChange(this,_0x3536x2,_0x3536x3));return _0x3536x3};mxGraphModel[_0x763a[202]][_0x763a[1970]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[474]](_0x3536x2);_0x3536x2[_0x763a[475]](_0x3536x3);return _0x3536x4};mxGraphModel[_0x763a[202]][_0x763a[1971]]= function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[1971]]():!1};mxGraphModel[_0x763a[202]][_0x763a[1972]]= function(_0x3536x2,_0x3536x3){_0x3536x3!= this[_0x763a[1971]](_0x3536x2)&& this[_0x763a[350]]( new mxCollapseChange(this,_0x3536x2,_0x3536x3));return _0x3536x3};mxGraphModel[_0x763a[202]][_0x763a[1973]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1971]](_0x3536x2);_0x3536x2[_0x763a[1972]](_0x3536x3);return _0x3536x4};mxGraphModel[_0x763a[202]][_0x763a[174]]= function(_0x3536x2){return null!= _0x3536x2?_0x3536x2[_0x763a[174]]():!1};mxGraphModel[_0x763a[202]][_0x763a[175]]= function(_0x3536x2,_0x3536x3){_0x3536x3!= this[_0x763a[174]](_0x3536x2)&& this[_0x763a[350]]( new mxVisibleChange(this,_0x3536x2,_0x3536x3));return _0x3536x3};mxGraphModel[_0x763a[202]][_0x763a[1974]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[174]](_0x3536x2);_0x3536x2[_0x763a[175]](_0x3536x3);return _0x3536x4};mxGraphModel[_0x763a[202]][_0x763a[350]]= function(_0x3536x2){_0x3536x2[_0x763a[350]]();this[_0x763a[473]]();this[_0x763a[1926]][_0x763a[99]](_0x3536x2);this[_0x763a[746]]( new mxEventObject(mxEvent.EXECUTE,_0x763a[826],_0x3536x2));this[_0x763a[746]]( new mxEventObject(mxEvent.EXECUTED,_0x763a[826],_0x3536x2));this[_0x763a[476]]()};mxGraphModel[_0x763a[202]][_0x763a[473]]= function(){this[_0x763a[1932]]++;this[_0x763a[746]]( new mxEventObject(mxEvent.BEGIN_UPDATE));1== this[_0x763a[1932]]&& this[_0x763a[746]]( new mxEventObject(mxEvent.START_EDIT))};mxGraphModel[_0x763a[202]][_0x763a[476]]= function(){this[_0x763a[1932]]--;0== this[_0x763a[1932]]&& this[_0x763a[746]]( new mxEventObject(mxEvent.END_EDIT));if(!this[_0x763a[1933]]){this[_0x763a[1933]]= 0== this[_0x763a[1932]];this[_0x763a[746]]( new mxEventObject(mxEvent.END_UPDATE,_0x763a[1061],this[_0x763a[1926]]));try{if(this[_0x763a[1933]]&& !this[_0x763a[1926]][_0x763a[1107]]()){this[_0x763a[746]]( new mxEventObject(mxEvent.BEFORE_UNDO,_0x763a[1061],this[_0x763a[1926]]));var _0x3536x2=this[_0x763a[1926]];this[_0x763a[1926]]= this[_0x763a[1096]]();_0x3536x2[_0x763a[827]]();this[_0x763a[746]]( new mxEventObject(mxEvent.UNDO,_0x763a[1061],_0x3536x2))}}finally{this[_0x763a[1933]]= !1}}};mxGraphModel[_0x763a[202]][_0x763a[1096]]= function(){var _0x3536x2= new mxUndoableEdit(this,!0);_0x3536x2[_0x763a[827]]= function(){_0x3536x2[_0x763a[1097]][_0x763a[746]]( new mxEventObject(mxEvent.CHANGE,_0x763a[1061],_0x3536x2,_0x763a[1065],_0x3536x2[_0x763a[1065]]));_0x3536x2[_0x763a[1097]][_0x763a[746]]( new mxEventObject(mxEvent.NOTIFY,_0x763a[1061],_0x3536x2,_0x763a[1065],_0x3536x2[_0x763a[1065]]))};return _0x3536x2};mxGraphModel[_0x763a[202]][_0x763a[1975]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= null!= _0x3536x4?_0x3536x4:!0;this[_0x763a[473]]();try{var _0x3536x5={};this[_0x763a[1976]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5);for(var _0x3536x9 in _0x3536x5){var _0x3536xa=_0x3536x5[_0x3536x9],_0x3536x12=this[_0x763a[1709]](_0x3536xa,!0);null!= _0x3536x12&& (_0x3536x12= _0x3536x5[mxCellPath[_0x763a[385]](_0x3536x12)],this[_0x763a[1957]](_0x3536xa,_0x3536x12,!0));_0x3536x12= this[_0x763a[1709]](_0x3536xa,!1);null!= _0x3536x12&& (_0x3536x12= _0x3536x5[mxCellPath[_0x763a[385]](_0x3536x12)],this[_0x763a[1957]](_0x3536xa,_0x3536x12,!1))}}finally{this[_0x763a[476]]()}};mxGraphModel[_0x763a[202]][_0x763a[1976]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){this[_0x763a[473]]();try{for(var _0x3536x9=_0x3536x2[_0x763a[262]](),_0x3536xa=0;_0x3536xa< _0x3536x9;_0x3536xa++){var _0x3536x12=_0x3536x2[_0x763a[263]](_0x3536xa);if(_0x763a[279]== typeof _0x3536x12[_0x763a[1103]]){var _0x3536x13=_0x3536x12[_0x763a[1103]](),_0x3536x14=null!= _0x3536x13&& (!this[_0x763a[250]](_0x3536x12)|| !_0x3536x4)?this[_0x763a[736]](_0x3536x13):null;if(null== _0x3536x14){var _0x3536x15=_0x3536x12[_0x763a[238]]();_0x3536x15[_0x763a[1945]](_0x3536x13);_0x3536x15[_0x763a[1957]](_0x3536x12[_0x763a[1709]](!0),!0);_0x3536x15[_0x763a[1957]](_0x3536x12[_0x763a[1709]](!1),!1);_0x3536x14= _0x3536x3[_0x763a[1937]](_0x3536x15);this[_0x763a[1941]](_0x3536x14)};_0x3536x5[mxCellPath[_0x763a[385]](_0x3536x12)]= _0x3536x14;this[_0x763a[1976]](_0x3536x12,_0x3536x14,_0x3536x4,_0x3536x5)}}}finally{this[_0x763a[476]]()}};mxGraphModel[_0x763a[202]][_0x763a[1977]]= function(_0x3536x2){var _0x3536x3=[];if(null!= _0x3536x2){for(var _0x3536x4={},_0x3536x5=0;_0x3536x5< _0x3536x2[_0x763a[67]];_0x3536x5++){var _0x3536x9=this[_0x763a[1197]](_0x3536x2[_0x3536x5]);if(null!= _0x3536x9){var _0x3536xa=mxCellPath[_0x763a[385]](_0x3536x9);null== _0x3536x4[_0x3536xa]&& (_0x3536x4[_0x3536xa]= _0x3536x9,_0x3536x3[_0x763a[207]](_0x3536x9))}}};return _0x3536x3};mxGraphModel[_0x763a[202]][_0x763a[1978]]= function(_0x3536x2){return null!= _0x3536x2?this[_0x763a[899]]([_0x3536x2],!0)[0]:null};mxGraphModel[_0x763a[202]][_0x763a[899]]= function(_0x3536x2,_0x3536x3){for(var _0x3536x4={},_0x3536x5=[],_0x3536x9=0;_0x3536x9< _0x3536x2[_0x763a[67]];_0x3536x9++){null!= _0x3536x2[_0x3536x9]?_0x3536x5[_0x763a[207]](this[_0x763a[1979]](_0x3536x2[_0x3536x9],_0x3536x4,_0x3536x3)):_0x3536x5[_0x763a[207]](null)};for(_0x3536x9= 0;_0x3536x9< _0x3536x5[_0x763a[67]];_0x3536x9++){null!= _0x3536x5[_0x3536x9]&& this[_0x763a[1980]](_0x3536x5[_0x3536x9],_0x3536x2[_0x3536x9],_0x3536x4)};return _0x3536x5};mxGraphModel[_0x763a[202]][_0x763a[1979]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[1981]](_0x3536x2);_0x3536x3[mxObjectIdentity[_0x763a[203]](_0x3536x2)]= _0x3536x5;if(_0x3536x4){_0x3536x4= this[_0x763a[262]](_0x3536x2);for(var _0x3536x9=0;_0x3536x9< _0x3536x4;_0x3536x9++){var _0x3536xa=this[_0x763a[1979]](this[_0x763a[263]](_0x3536x2,_0x3536x9),_0x3536x3,!0);_0x3536x5[_0x763a[1937]](_0x3536xa)}};return _0x3536x5};mxGraphModel[_0x763a[202]][_0x763a[1981]]= function(_0x3536x2){return _0x3536x2[_0x763a[238]]()};mxGraphModel[_0x763a[202]][_0x763a[1980]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[1709]](_0x3536x3,!0);null!= _0x3536x5&& (_0x3536x5= _0x3536x4[mxObjectIdentity[_0x763a[203]](_0x3536x5)],null!= _0x3536x5&& _0x3536x5[_0x763a[1960]](_0x3536x2,!0));_0x3536x5= this[_0x763a[1709]](_0x3536x3,!1);null!= _0x3536x5&& (_0x3536x5= _0x3536x4[mxObjectIdentity[_0x763a[203]](_0x3536x5)],null!= _0x3536x5&& _0x3536x5[_0x763a[1960]](_0x3536x2,!1));for(var _0x3536x5=this[_0x763a[262]](_0x3536x2),_0x3536x9=0;_0x3536x9< _0x3536x5;_0x3536x9++){this[_0x763a[1980]](this[_0x763a[263]](_0x3536x2,_0x3536x9),this[_0x763a[263]](_0x3536x3,_0x3536x9),_0x3536x4)}};function mxRootChange(_0x3536x2,_0x3536x3){this[_0x763a[251]]= _0x3536x2;this[_0x763a[257]]= this[_0x763a[813]]= _0x3536x3}mxRootChange[_0x763a[202]][_0x763a[350]]= function(){this[_0x763a[813]]= this[_0x763a[257]];this[_0x763a[257]]= this[_0x763a[251]][_0x763a[1940]](this[_0x763a[257]])};function mxChildChange(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){this[_0x763a[251]]= _0x3536x2;this[_0x763a[257]]= this[_0x763a[1101]]= _0x3536x3;this[_0x763a[247]]= _0x3536x4;this[_0x763a[1982]]= this[_0x763a[1983]]= _0x3536x5}mxChildChange[_0x763a[202]][_0x763a[350]]= function(){var _0x3536x2=this[_0x763a[251]][_0x763a[1197]](this[_0x763a[247]]),_0x3536x3=null!= _0x3536x2?_0x3536x2[_0x763a[1738]](this[_0x763a[247]]):0;null== this[_0x763a[257]]&& this[_0x763a[807]](this[_0x763a[247]],!1);_0x3536x2= this[_0x763a[251]][_0x763a[1952]](this[_0x763a[247]],this[_0x763a[257]],this[_0x763a[1982]]);null!= this[_0x763a[257]]&& this[_0x763a[807]](this[_0x763a[247]],!0);this[_0x763a[1101]]= this[_0x763a[257]];this[_0x763a[257]]= _0x3536x2;this[_0x763a[1983]]= this[_0x763a[1982]];this[_0x763a[1982]]= _0x3536x3};mxChildChange[_0x763a[202]][_0x763a[807]]= function(_0x3536x2,_0x3536x3){_0x3536x3= null!= _0x3536x3?_0x3536x3:!0;var _0x3536x4=_0x3536x2[_0x763a[1709]](!0),_0x3536x5=_0x3536x2[_0x763a[1709]](!1);null!= _0x3536x4&& (_0x3536x3?this[_0x763a[251]][_0x763a[1959]](_0x3536x2,_0x3536x4,!0):this[_0x763a[251]][_0x763a[1959]](_0x3536x2,null,!0));null!= _0x3536x5&& (_0x3536x3?this[_0x763a[251]][_0x763a[1959]](_0x3536x2,_0x3536x5,!1):this[_0x763a[251]][_0x763a[1959]](_0x3536x2,null,!1));_0x3536x2[_0x763a[1957]](_0x3536x4,!0);_0x3536x2[_0x763a[1957]](_0x3536x5,!1);_0x3536x4= this[_0x763a[251]][_0x763a[262]](_0x3536x2);for(_0x3536x5= 0;_0x3536x5< _0x3536x4;_0x3536x5++){this[_0x763a[807]](this[_0x763a[251]][_0x763a[263]](_0x3536x2,_0x3536x5),_0x3536x3)}};function mxTerminalChange(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){this[_0x763a[251]]= _0x3536x2;this[_0x763a[246]]= _0x3536x3;this[_0x763a[257]]= this[_0x763a[1984]]= _0x3536x4;this[_0x763a[1097]]= _0x3536x5}mxTerminalChange[_0x763a[202]][_0x763a[350]]= function(){this[_0x763a[1984]]= this[_0x763a[257]];this[_0x763a[257]]= this[_0x763a[251]][_0x763a[1959]](this[_0x763a[246]],this[_0x763a[257]],this[_0x763a[1097]])};function mxValueChange(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[251]]= _0x3536x2;this[_0x763a[246]]= _0x3536x3;this[_0x763a[257]]= this[_0x763a[131]]= _0x3536x4}mxValueChange[_0x763a[202]][_0x763a[350]]= function(){this[_0x763a[131]]= this[_0x763a[257]];this[_0x763a[257]]= this[_0x763a[251]][_0x763a[1967]](this[_0x763a[246]],this[_0x763a[257]])};function mxStyleChange(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[251]]= _0x3536x2;this[_0x763a[246]]= _0x3536x3;this[_0x763a[257]]= this[_0x763a[124]]= _0x3536x4}mxStyleChange[_0x763a[202]][_0x763a[350]]= function(){this[_0x763a[124]]= this[_0x763a[257]];this[_0x763a[257]]= this[_0x763a[251]][_0x763a[1970]](this[_0x763a[246]],this[_0x763a[257]])};function mxGeometryChange(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[251]]= _0x3536x2;this[_0x763a[246]]= _0x3536x3;this[_0x763a[257]]= this[_0x763a[256]]= _0x3536x4}mxGeometryChange[_0x763a[202]][_0x763a[350]]= function(){this[_0x763a[256]]= this[_0x763a[257]];this[_0x763a[257]]= this[_0x763a[251]][_0x763a[1969]](this[_0x763a[246]],this[_0x763a[257]])};function mxCollapseChange(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[251]]= _0x3536x2;this[_0x763a[246]]= _0x3536x3;this[_0x763a[257]]= this[_0x763a[1985]]= _0x3536x4}mxCollapseChange[_0x763a[202]][_0x763a[350]]= function(){this[_0x763a[1985]]= this[_0x763a[257]];this[_0x763a[257]]= this[_0x763a[251]][_0x763a[1973]](this[_0x763a[246]],this[_0x763a[257]])};function mxVisibleChange(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[251]]= _0x3536x2;this[_0x763a[246]]= _0x3536x3;this[_0x763a[257]]= this[_0x763a[189]]= _0x3536x4}mxVisibleChange[_0x763a[202]][_0x763a[350]]= function(){this[_0x763a[189]]= this[_0x763a[257]];this[_0x763a[257]]= this[_0x763a[251]][_0x763a[1974]](this[_0x763a[246]],this[_0x763a[257]])};function mxCellAttributeChange(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[246]]= _0x3536x2;this[_0x763a[1986]]= _0x3536x3;this[_0x763a[257]]= this[_0x763a[131]]= _0x3536x4}mxCellAttributeChange[_0x763a[202]][_0x763a[350]]= function(){var _0x3536x2=this[_0x763a[246]][_0x763a[284]](this[_0x763a[1986]]);null== this[_0x763a[257]]?this[_0x763a[246]][_0x763a[131]][_0x763a[1390]](this[_0x763a[1986]]):this[_0x763a[246]][_0x763a[57]](this[_0x763a[1986]],this[_0x763a[257]]);this[_0x763a[257]]= _0x3536x2};function mxCell(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[131]]= _0x3536x2;this[_0x763a[1724]](_0x3536x3);this[_0x763a[475]](_0x3536x4);if(null!= this[_0x763a[1987]]){this[_0x763a[1987]]()}}mxCell[_0x763a[202]][_0x763a[1363]]= null;mxCell[_0x763a[202]][_0x763a[131]]= null;mxCell[_0x763a[202]][_0x763a[256]]= null;mxCell[_0x763a[202]][_0x763a[124]]= null;mxCell[_0x763a[202]][_0x763a[1988]]= !1;mxCell[_0x763a[202]][_0x763a[1989]]= !1;mxCell[_0x763a[202]][_0x763a[1990]]= !0;mxCell[_0x763a[202]][_0x763a[189]]= !0;mxCell[_0x763a[202]][_0x763a[1985]]= !1;mxCell[_0x763a[202]][_0x763a[1101]]= null;mxCell[_0x763a[202]][_0x763a[1097]]= null;mxCell[_0x763a[202]][_0x763a[772]]= null;mxCell[_0x763a[202]][_0x763a[1954]]= null;mxCell[_0x763a[202]][_0x763a[1842]]= null;mxCell[_0x763a[202]][_0x763a[1991]]= _0x763a[1992][_0x763a[224]](_0x763a[185]);mxCell[_0x763a[202]][_0x763a[1103]]= function(){return this[_0x763a[1363]]};mxCell[_0x763a[202]][_0x763a[1945]]= function(_0x3536x2){this[_0x763a[1363]]= _0x3536x2};mxCell[_0x763a[202]][_0x763a[433]]= function(){return this[_0x763a[131]]};mxCell[_0x763a[202]][_0x763a[1966]]= function(_0x3536x2){this[_0x763a[131]]= _0x3536x2};mxCell[_0x763a[202]][_0x763a[1968]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[433]]();this[_0x763a[1966]](_0x3536x2);return _0x3536x3};mxCell[_0x763a[202]][_0x763a[1721]]= function(){return this[_0x763a[256]]};mxCell[_0x763a[202]][_0x763a[1724]]= function(_0x3536x2){this[_0x763a[256]]= _0x3536x2};mxCell[_0x763a[202]][_0x763a[474]]= function(){return this[_0x763a[124]]};mxCell[_0x763a[202]][_0x763a[475]]= function(_0x3536x2){this[_0x763a[124]]= _0x3536x2};mxCell[_0x763a[202]][_0x763a[1193]]= function(){return this[_0x763a[1988]]};mxCell[_0x763a[202]][_0x763a[1993]]= function(_0x3536x2){this[_0x763a[1988]]= _0x3536x2};mxCell[_0x763a[202]][_0x763a[250]]= function(){return this[_0x763a[1989]]};mxCell[_0x763a[202]][_0x763a[1994]]= function(_0x3536x2){this[_0x763a[1989]]= _0x3536x2};mxCell[_0x763a[202]][_0x763a[1965]]= function(){return this[_0x763a[1990]]};mxCell[_0x763a[202]][_0x763a[1995]]= function(_0x3536x2){this[_0x763a[1990]]= _0x3536x2};mxCell[_0x763a[202]][_0x763a[174]]= function(){return this[_0x763a[189]]};mxCell[_0x763a[202]][_0x763a[175]]= function(_0x3536x2){this[_0x763a[189]]= _0x3536x2};mxCell[_0x763a[202]][_0x763a[1971]]= function(){return this[_0x763a[1985]]};mxCell[_0x763a[202]][_0x763a[1972]]= function(_0x3536x2){this[_0x763a[1985]]= _0x3536x2};mxCell[_0x763a[202]][_0x763a[1197]]= function(){return this[_0x763a[1101]]};mxCell[_0x763a[202]][_0x763a[1996]]= function(_0x3536x2){this[_0x763a[1101]]= _0x3536x2};mxCell[_0x763a[202]][_0x763a[1709]]= function(_0x3536x2){return _0x3536x2?this[_0x763a[1097]]:this[_0x763a[772]]};mxCell[_0x763a[202]][_0x763a[1957]]= function(_0x3536x2,_0x3536x3){_0x3536x3?this[_0x763a[1097]]= _0x3536x2:this[_0x763a[772]]= _0x3536x2;return _0x3536x2};mxCell[_0x763a[202]][_0x763a[262]]= function(){return null== this[_0x763a[1954]]?0:this[_0x763a[1954]][_0x763a[67]]};mxCell[_0x763a[202]][_0x763a[1738]]= function(_0x3536x2){return mxUtils[_0x763a[2]](this[_0x763a[1954]],_0x3536x2)};mxCell[_0x763a[202]][_0x763a[263]]= function(_0x3536x2){return null== this[_0x763a[1954]]?null:this[_0x763a[1954]][_0x3536x2]};mxCell[_0x763a[202]][_0x763a[1937]]= function(_0x3536x2,_0x3536x3){null!= _0x3536x2&& (null== _0x3536x3&& (_0x3536x3= this[_0x763a[262]](),_0x3536x2[_0x763a[1197]]()== this&& _0x3536x3--),_0x3536x2[_0x763a[1997]](),_0x3536x2[_0x763a[1996]](this),null== this[_0x763a[1954]]?(this[_0x763a[1954]]= [],this[_0x763a[1954]][_0x763a[207]](_0x3536x2)):this[_0x763a[1954]][_0x763a[300]](_0x3536x3,0,_0x3536x2));return _0x3536x2};mxCell[_0x763a[202]][_0x763a[205]]= function(_0x3536x2){var _0x3536x3=null;null!= this[_0x763a[1954]]&& 0<= _0x3536x2&& (_0x3536x3= this[_0x763a[263]](_0x3536x2),null!= _0x3536x3&& (this[_0x763a[1954]][_0x763a[300]](_0x3536x2,1),_0x3536x3[_0x763a[1996]](null)));return _0x3536x3};mxCell[_0x763a[202]][_0x763a[1997]]= function(){if(null!= this[_0x763a[1101]]){var _0x3536x2=this[_0x763a[1101]][_0x763a[1738]](this);this[_0x763a[1101]][_0x763a[205]](_0x3536x2)}};mxCell[_0x763a[202]][_0x763a[1707]]= function(){return null== this[_0x763a[1842]]?0:this[_0x763a[1842]][_0x763a[67]]};mxCell[_0x763a[202]][_0x763a[1998]]= function(_0x3536x2){return mxUtils[_0x763a[2]](this[_0x763a[1842]],_0x3536x2)};mxCell[_0x763a[202]][_0x763a[1708]]= function(_0x3536x2){return null== this[_0x763a[1842]]?null:this[_0x763a[1842]][_0x3536x2]};mxCell[_0x763a[202]][_0x763a[1960]]= function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2&& (_0x3536x2[_0x763a[1999]](_0x3536x3),_0x3536x2[_0x763a[1957]](this,_0x3536x3),null== this[_0x763a[1842]]|| _0x3536x2[_0x763a[1709]](!_0x3536x3) != this|| 0> mxUtils[_0x763a[2]](this[_0x763a[1842]],_0x3536x2))){null== this[_0x763a[1842]]&& (this[_0x763a[1842]]= []),this[_0x763a[1842]][_0x763a[207]](_0x3536x2)};return _0x3536x2};mxCell[_0x763a[202]][_0x763a[1961]]= function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2){if(_0x3536x2[_0x763a[1709]](!_0x3536x3) != this&& null!= this[_0x763a[1842]]){var _0x3536x4=this[_0x763a[1998]](_0x3536x2);0<= _0x3536x4&& this[_0x763a[1842]][_0x763a[300]](_0x3536x4,1)};_0x3536x2[_0x763a[1957]](null,_0x3536x3)};return _0x3536x2};mxCell[_0x763a[202]][_0x763a[1999]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1709]](_0x3536x2);null!= _0x3536x3&& _0x3536x3[_0x763a[1961]](this,_0x3536x2)};mxCell[_0x763a[202]][_0x763a[284]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[433]]();return (null!= _0x3536x4&& _0x3536x4[_0x763a[288]]== mxConstants[_0x763a[289]]?_0x3536x4[_0x763a[284]](_0x3536x2):null)|| _0x3536x3};mxCell[_0x763a[202]][_0x763a[57]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[433]]();null!= _0x3536x4&& _0x3536x4[_0x763a[288]]== mxConstants[_0x763a[289]]&& _0x3536x4[_0x763a[57]](_0x3536x2,_0x3536x3)};mxCell[_0x763a[202]][_0x763a[238]]= function(){var _0x3536x2=mxUtils[_0x763a[238]](this,this[_0x763a[1991]]);_0x3536x2[_0x763a[1966]](this[_0x763a[2000]]());return _0x3536x2};mxCell[_0x763a[202]][_0x763a[2000]]= function(){var _0x3536x2=this[_0x763a[433]]();null!= _0x3536x2&& (_0x763a[279]== typeof _0x3536x2[_0x763a[238]]?_0x3536x2= _0x3536x2[_0x763a[238]]():isNaN(_0x3536x2[_0x763a[288]])|| (_0x3536x2= _0x3536x2[_0x763a[511]](!0)));return _0x3536x2};function mxGeometry(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){mxRectangle[_0x763a[239]](this,_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5)}mxGeometry[_0x763a[202]]= new mxRectangle;mxGeometry[_0x763a[202]][_0x763a[196]]= mxGeometry;mxGeometry[_0x763a[202]][_0x763a[2001]]= !0;mxGeometry[_0x763a[202]][_0x763a[2002]]= null;mxGeometry[_0x763a[202]][_0x763a[2003]]= null;mxGeometry[_0x763a[202]][_0x763a[2004]]= null;mxGeometry[_0x763a[202]][_0x763a[1525]]= null;mxGeometry[_0x763a[202]][_0x763a[1368]]= null;mxGeometry[_0x763a[202]][_0x763a[1500]]= !1;mxGeometry[_0x763a[202]][_0x763a[2005]]= function(){if(null!= this[_0x763a[2002]]){var _0x3536x2= new mxRectangle(this[_0x763a[235]],this[_0x763a[236]],this[_0x763a[117]],this[_0x763a[119]]);this[_0x763a[235]]= this[_0x763a[2002]][_0x763a[235]];this[_0x763a[236]]= this[_0x763a[2002]][_0x763a[236]];this[_0x763a[117]]= this[_0x763a[2002]][_0x763a[117]];this[_0x763a[119]]= this[_0x763a[2002]][_0x763a[119]];this[_0x763a[2002]]= _0x3536x2}};mxGeometry[_0x763a[202]][_0x763a[2006]]= function(_0x3536x2){return _0x3536x2?this[_0x763a[2003]]:this[_0x763a[2004]]};mxGeometry[_0x763a[202]][_0x763a[2007]]= function(_0x3536x2,_0x3536x3){_0x3536x3?this[_0x763a[2003]]= _0x3536x2:this[_0x763a[2004]]= _0x3536x2;return _0x3536x2};mxGeometry[_0x763a[202]][_0x763a[513]]= function(_0x3536x2,_0x3536x3){this[_0x763a[238]]();this[_0x763a[1500]]|| (this[_0x763a[235]]+= _0x3536x2,this[_0x763a[236]]+= _0x3536x3);null!= this[_0x763a[2003]]&& (this[_0x763a[2003]][_0x763a[235]]+= _0x3536x2,this[_0x763a[2003]][_0x763a[236]]+= _0x3536x3);null!= this[_0x763a[2004]]&& (this[_0x763a[2004]][_0x763a[235]]+= _0x3536x2,this[_0x763a[2004]][_0x763a[236]]+= _0x3536x3);if(this[_0x763a[2001]]&& null!= this[_0x763a[1525]]){for(var _0x3536x4=this[_0x763a[1525]][_0x763a[67]],_0x3536x5=0;_0x3536x5< _0x3536x4;_0x3536x5++){var _0x3536x9=this[_0x763a[1525]][_0x3536x5];null!= _0x3536x9&& (_0x3536x9[_0x763a[235]]+= _0x3536x2,_0x3536x9[_0x763a[236]]+= _0x3536x3)}}};var mxCellPath={PATH_SEPARATOR:_0x763a[87],create:function(_0x3536x2){var _0x3536x3=_0x763a[110];if(null!= _0x3536x2){for(var _0x3536x4=_0x3536x2[_0x763a[1197]]();null!= _0x3536x4;){_0x3536x3= _0x3536x4[_0x763a[1738]](_0x3536x2)+ mxCellPath[_0x763a[1950]]+ _0x3536x3,_0x3536x2= _0x3536x4,_0x3536x4= _0x3536x2[_0x763a[1197]]()}};_0x3536x2= _0x3536x3[_0x763a[67]];1< _0x3536x2&& (_0x3536x3= _0x3536x3[_0x763a[85]](0,_0x3536x2- 1));return _0x3536x3},getParentPath:function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[1122]](mxCellPath.PATH_SEPARATOR);if(0<= _0x3536x3){return _0x3536x2[_0x763a[85]](0,_0x3536x3)};if(0< _0x3536x2[_0x763a[67]]){return _0x763a[110]}};return null},resolve:function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x3536x2;if(null!= _0x3536x3){for(var _0x3536x5=_0x3536x3[_0x763a[224]](mxCellPath.PATH_SEPARATOR),_0x3536x9=0;_0x3536x9< _0x3536x5[_0x763a[67]];_0x3536x9++){_0x3536x4= _0x3536x4[_0x763a[263]](parseInt(_0x3536x5[_0x3536x9]))}};return _0x3536x4},compare:function(_0x3536x2,_0x3536x3){for(var _0x3536x4=Math[_0x763a[243]](_0x3536x2[_0x763a[67]],_0x3536x3[_0x763a[67]]),_0x3536x5=0,_0x3536x9=0;_0x3536x9< _0x3536x4;_0x3536x9++){if(_0x3536x2[_0x3536x9]!= _0x3536x3[_0x3536x9]){0== _0x3536x2[_0x3536x9][_0x763a[67]]|| 0== _0x3536x3[_0x3536x9][_0x763a[67]]?_0x3536x5= _0x3536x2[_0x3536x9]== _0x3536x3[_0x3536x9]?0:_0x3536x2[_0x3536x9]> _0x3536x3[_0x3536x9]?1:-1:(_0x3536x4= parseInt(_0x3536x2[_0x3536x9]),_0x3536x9= parseInt(_0x3536x3[_0x3536x9]),_0x3536x5= _0x3536x4== _0x3536x9?0:_0x3536x4> _0x3536x9?1:-1);break}};0== _0x3536x5&& (_0x3536x4= _0x3536x2[_0x763a[67]],_0x3536x9= _0x3536x3[_0x763a[67]],_0x3536x4!= _0x3536x9&& (_0x3536x5= _0x3536x4> _0x3536x9?1:-1));return _0x3536x5}},mxPerimeter={RectanglePerimeter:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x3= _0x3536x2[_0x763a[241]]();var _0x3536x9=_0x3536x2[_0x763a[242]](),_0x3536xa=Math[_0x763a[429]](_0x3536x4[_0x763a[236]]- _0x3536x9,_0x3536x4[_0x763a[235]]- _0x3536x3),_0x3536x12= new mxPoint(0,0),_0x3536x13=Math[_0x763a[424]],_0x3536x14=Math[_0x763a[424]]/ 2- _0x3536xa,_0x3536x15=Math[_0x763a[429]](_0x3536x2[_0x763a[119]],_0x3536x2[_0x763a[117]]);_0x3536xa< -_0x3536x13+ _0x3536x15|| _0x3536xa> _0x3536x13- _0x3536x15?(_0x3536x12[_0x763a[235]]= _0x3536x2[_0x763a[235]],_0x3536x12[_0x763a[236]]= _0x3536x9- _0x3536x2[_0x763a[117]]* Math[_0x763a[2008]](_0x3536xa)/ 2):_0x3536xa< -_0x3536x15?(_0x3536x12[_0x763a[236]]= _0x3536x2[_0x763a[236]],_0x3536x12[_0x763a[235]]= _0x3536x3- _0x3536x2[_0x763a[119]]* Math[_0x763a[2008]](_0x3536x14)/ 2):_0x3536xa< _0x3536x15?(_0x3536x12[_0x763a[235]]= _0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]],_0x3536x12[_0x763a[236]]= _0x3536x9+ _0x3536x2[_0x763a[117]]* Math[_0x763a[2008]](_0x3536xa)/ 2):(_0x3536x12[_0x763a[236]]= _0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]],_0x3536x12[_0x763a[235]]= _0x3536x3+ _0x3536x2[_0x763a[119]]* Math[_0x763a[2008]](_0x3536x14)/ 2);_0x3536x5&& (_0x3536x4[_0x763a[235]]>= _0x3536x2[_0x763a[235]]&& _0x3536x4[_0x763a[235]]<= _0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]?_0x3536x12[_0x763a[235]]= _0x3536x4[_0x763a[235]]:_0x3536x4[_0x763a[236]]>= _0x3536x2[_0x763a[236]]&& _0x3536x4[_0x763a[236]]<= _0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]&& (_0x3536x12[_0x763a[236]]= _0x3536x4[_0x763a[236]]),_0x3536x4[_0x763a[235]]< _0x3536x2[_0x763a[235]]?_0x3536x12[_0x763a[235]]= _0x3536x2[_0x763a[235]]:_0x3536x4[_0x763a[235]]> _0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]&& (_0x3536x12[_0x763a[235]]= _0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]),_0x3536x4[_0x763a[236]]< _0x3536x2[_0x763a[236]]?_0x3536x12[_0x763a[236]]= _0x3536x2[_0x763a[236]]:_0x3536x4[_0x763a[236]]> _0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]&& (_0x3536x12[_0x763a[236]]= _0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]));return _0x3536x12},EllipsePerimeter:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=_0x3536x2[_0x763a[235]],_0x3536xa=_0x3536x2[_0x763a[236]],_0x3536x12=_0x3536x2[_0x763a[117]]/ 2,_0x3536x13=_0x3536x2[_0x763a[119]]/ 2,_0x3536x14=_0x3536x9+ _0x3536x12,_0x3536x15=_0x3536xa+ _0x3536x13;_0x3536x3= _0x3536x4[_0x763a[235]];_0x3536x4= _0x3536x4[_0x763a[236]];var _0x3536x16=parseInt(_0x3536x3- _0x3536x14),_0x3536x17=parseInt(_0x3536x4- _0x3536x15);if(0== _0x3536x16&& 0!= _0x3536x17){return new mxPoint(_0x3536x14,_0x3536x15+ _0x3536x13* _0x3536x17/ Math[_0x763a[425]](_0x3536x17))};if(0== _0x3536x16&& 0== _0x3536x17){return new mxPoint(_0x3536x3,_0x3536x4)};if(_0x3536x5){if(_0x3536x4>= _0x3536xa&& _0x3536x4<= _0x3536xa+ _0x3536x2[_0x763a[119]]){return _0x3536x2= _0x3536x4- _0x3536x15,_0x3536x2= Math[_0x763a[428]](_0x3536x12* _0x3536x12* (1- _0x3536x2* _0x3536x2/ (_0x3536x13* _0x3536x13)))|| 0,_0x3536x3<= _0x3536x9&& (_0x3536x2= -_0x3536x2), new mxPoint(_0x3536x14+ _0x3536x2,_0x3536x4)};if(_0x3536x3>= _0x3536x9&& _0x3536x3<= _0x3536x9+ _0x3536x2[_0x763a[117]]){return _0x3536x2= _0x3536x3- _0x3536x14,_0x3536x2= Math[_0x763a[428]](_0x3536x13* _0x3536x13* (1- _0x3536x2* _0x3536x2/ (_0x3536x12* _0x3536x12)))|| 0,_0x3536x4<= _0x3536xa&& (_0x3536x2= -_0x3536x2), new mxPoint(_0x3536x3,_0x3536x15+ _0x3536x2)}};_0x3536x9= _0x3536x17/ _0x3536x16;_0x3536x15-= _0x3536x9* _0x3536x14;_0x3536xa= _0x3536x12* _0x3536x12* _0x3536x9* _0x3536x9+ _0x3536x13* _0x3536x13;_0x3536x2= -2* _0x3536x14* _0x3536xa;_0x3536x13= Math[_0x763a[428]](_0x3536x2* _0x3536x2- 4* _0x3536xa* (_0x3536x12* _0x3536x12* _0x3536x9* _0x3536x9* _0x3536x14* _0x3536x14+ _0x3536x13* _0x3536x13* _0x3536x14* _0x3536x14- _0x3536x12* _0x3536x12* _0x3536x13* _0x3536x13));_0x3536x12= (-_0x3536x2+ _0x3536x13) / (2* _0x3536xa);_0x3536x13= (-_0x3536x2- _0x3536x13) / (2* _0x3536xa);_0x3536x14= _0x3536x9* _0x3536x12+ _0x3536x15;_0x3536x15= _0x3536x9* _0x3536x13+ _0x3536x15;_0x3536x9= Math[_0x763a[428]](Math[_0x763a[2009]](_0x3536x12- _0x3536x3,2)+ Math[_0x763a[2009]](_0x3536x14- _0x3536x4,2));_0x3536x3= Math[_0x763a[428]](Math[_0x763a[2009]](_0x3536x13- _0x3536x3,2)+ Math[_0x763a[2009]](_0x3536x15- _0x3536x4,2));_0x3536xa= _0x3536x4= 0;_0x3536x9< _0x3536x3?(_0x3536x4= _0x3536x12,_0x3536xa= _0x3536x14):(_0x3536x4= _0x3536x13,_0x3536xa= _0x3536x15);return new mxPoint(_0x3536x4,_0x3536xa)},RhombusPerimeter:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x3= _0x3536x2[_0x763a[235]];var _0x3536x9=_0x3536x2[_0x763a[236]],_0x3536xa=_0x3536x2[_0x763a[117]];_0x3536x2= _0x3536x2[_0x763a[119]];var _0x3536x12=_0x3536x3+ _0x3536xa/ 2,_0x3536x13=_0x3536x9+ _0x3536x2/ 2,_0x3536x14=_0x3536x4[_0x763a[235]];_0x3536x4= _0x3536x4[_0x763a[236]];if(_0x3536x12== _0x3536x14){return _0x3536x13> _0x3536x4? new mxPoint(_0x3536x12,_0x3536x9): new mxPoint(_0x3536x12,_0x3536x9+ _0x3536x2)};if(_0x3536x13== _0x3536x4){return _0x3536x12> _0x3536x14? new mxPoint(_0x3536x3,_0x3536x13): new mxPoint(_0x3536x3+ _0x3536xa,_0x3536x13)};var _0x3536x15=_0x3536x12,_0x3536x16=_0x3536x13;_0x3536x5&& (_0x3536x14>= _0x3536x3&& _0x3536x14<= _0x3536x3+ _0x3536xa?_0x3536x15= _0x3536x14:_0x3536x4>= _0x3536x9&& _0x3536x4<= _0x3536x9+ _0x3536x2&& (_0x3536x16= _0x3536x4));return _0x3536x14< _0x3536x12?_0x3536x4< _0x3536x13?mxUtils[_0x763a[2010]](_0x3536x14,_0x3536x4,_0x3536x15,_0x3536x16,_0x3536x12,_0x3536x9,_0x3536x3,_0x3536x13):mxUtils[_0x763a[2010]](_0x3536x14,_0x3536x4,_0x3536x15,_0x3536x16,_0x3536x12,_0x3536x9+ _0x3536x2,_0x3536x3,_0x3536x13):_0x3536x4< _0x3536x13?mxUtils[_0x763a[2010]](_0x3536x14,_0x3536x4,_0x3536x15,_0x3536x16,_0x3536x12,_0x3536x9,_0x3536x3+ _0x3536xa,_0x3536x13):mxUtils[_0x763a[2010]](_0x3536x14,_0x3536x4,_0x3536x15,_0x3536x16,_0x3536x12,_0x3536x9+ _0x3536x2,_0x3536x3+ _0x3536xa,_0x3536x13)},TrianglePerimeter:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x3= null!= _0x3536x3?_0x3536x3[_0x763a[124]][mxConstants[_0x763a[2011]]]:null;var _0x3536x9=_0x3536x3== mxConstants[_0x763a[1358]]|| _0x3536x3== mxConstants[_0x763a[1354]],_0x3536xa=_0x3536x2[_0x763a[235]],_0x3536x12=_0x3536x2[_0x763a[236]],_0x3536x13=_0x3536x2[_0x763a[117]];_0x3536x2= _0x3536x2[_0x763a[119]];var _0x3536x14=_0x3536xa+ _0x3536x13/ 2,_0x3536x15=_0x3536x12+ _0x3536x2/ 2,_0x3536x16= new mxPoint(_0x3536xa,_0x3536x12),_0x3536x17= new mxPoint(_0x3536xa+ _0x3536x13,_0x3536x15),_0x3536x18= new mxPoint(_0x3536xa,_0x3536x12+ _0x3536x2);_0x3536x3== mxConstants[_0x763a[1358]]?(_0x3536x16= _0x3536x18,_0x3536x17= new mxPoint(_0x3536x14,_0x3536x12),_0x3536x18= new mxPoint(_0x3536xa+ _0x3536x13,_0x3536x12+ _0x3536x2)):_0x3536x3== mxConstants[_0x763a[1354]]?(_0x3536x17= new mxPoint(_0x3536x14,_0x3536x12+ _0x3536x2),_0x3536x18= new mxPoint(_0x3536xa+ _0x3536x13,_0x3536x12)):_0x3536x3== mxConstants[_0x763a[1359]]&& (_0x3536x16= new mxPoint(_0x3536xa+ _0x3536x13,_0x3536x12),_0x3536x17= new mxPoint(_0x3536xa,_0x3536x15),_0x3536x18= new mxPoint(_0x3536xa+ _0x3536x13,_0x3536x12+ _0x3536x2));var _0x3536x19=_0x3536x4[_0x763a[235]]- _0x3536x14,_0x3536x1a=_0x3536x4[_0x763a[236]]- _0x3536x15,_0x3536x19=_0x3536x9?Math[_0x763a[429]](_0x3536x19,_0x3536x1a):Math[_0x763a[429]](_0x3536x1a,_0x3536x19),_0x3536x1b=_0x3536x9?Math[_0x763a[429]](_0x3536x13,_0x3536x2):Math[_0x763a[429]](_0x3536x2,_0x3536x13),_0x3536x1a=!1,_0x3536x1a=_0x3536x3== mxConstants[_0x763a[1358]]|| _0x3536x3== mxConstants[_0x763a[1359]]?_0x3536x19> -_0x3536x1b&& _0x3536x19< _0x3536x1b:_0x3536x19< -Math[_0x763a[424]]+ _0x3536x1b|| _0x3536x19> Math[_0x763a[424]]- _0x3536x1b,_0x3536x1b=null;_0x3536x1a?_0x3536x1b= _0x3536x5&& (_0x3536x9&& _0x3536x4[_0x763a[235]]>= _0x3536x16[_0x763a[235]]&& _0x3536x4[_0x763a[235]]<= _0x3536x18[_0x763a[235]]|| !_0x3536x9&& _0x3536x4[_0x763a[236]]>= _0x3536x16[_0x763a[236]]&& _0x3536x4[_0x763a[236]]<= _0x3536x18[_0x763a[236]])?_0x3536x9? new mxPoint(_0x3536x4[_0x763a[235]],_0x3536x16[_0x763a[236]]): new mxPoint(_0x3536x16[_0x763a[235]],_0x3536x4[_0x763a[236]]):_0x3536x3== mxConstants[_0x763a[1358]]? new mxPoint(_0x3536xa+ _0x3536x13/ 2+ _0x3536x2* Math[_0x763a[2008]](_0x3536x19)/ 2,_0x3536x12+ _0x3536x2):_0x3536x3== mxConstants[_0x763a[1354]]? new mxPoint(_0x3536xa+ _0x3536x13/ 2- _0x3536x2* Math[_0x763a[2008]](_0x3536x19)/ 2,_0x3536x12):_0x3536x3== mxConstants[_0x763a[1359]]? new mxPoint(_0x3536xa+ _0x3536x13,_0x3536x12+ _0x3536x2/ 2+ _0x3536x13* Math[_0x763a[2008]](_0x3536x19)/ 2): new mxPoint(_0x3536xa,_0x3536x12+ _0x3536x2/ 2- _0x3536x13* Math[_0x763a[2008]](_0x3536x19)/ 2):(_0x3536x5&& (_0x3536x5= new mxPoint(_0x3536x14,_0x3536x15),_0x3536x4[_0x763a[236]]>= _0x3536x12&& _0x3536x4[_0x763a[236]]<= _0x3536x12+ _0x3536x2?(_0x3536x5[_0x763a[235]]= _0x3536x9?_0x3536x14:_0x3536x3== mxConstants[_0x763a[1359]]?_0x3536xa+ _0x3536x13:_0x3536xa,_0x3536x5[_0x763a[236]]= _0x3536x4[_0x763a[236]]):_0x3536x4[_0x763a[235]]>= _0x3536xa&& _0x3536x4[_0x763a[235]]<= _0x3536xa+ _0x3536x13&& (_0x3536x5[_0x763a[235]]= _0x3536x4[_0x763a[235]],_0x3536x5[_0x763a[236]]= !_0x3536x9?_0x3536x15:_0x3536x3== mxConstants[_0x763a[1358]]?_0x3536x12+ _0x3536x2:_0x3536x12),_0x3536x14= _0x3536x5[_0x763a[235]],_0x3536x15= _0x3536x5[_0x763a[236]]),_0x3536x1b= _0x3536x9&& _0x3536x4[_0x763a[235]]<= _0x3536xa+ _0x3536x13/ 2|| !_0x3536x9&& _0x3536x4[_0x763a[236]]<= _0x3536x12+ _0x3536x2/ 2?mxUtils[_0x763a[2010]](_0x3536x4[_0x763a[235]],_0x3536x4[_0x763a[236]],_0x3536x14,_0x3536x15,_0x3536x16[_0x763a[235]],_0x3536x16[_0x763a[236]],_0x3536x17[_0x763a[235]],_0x3536x17[_0x763a[236]]):mxUtils[_0x763a[2010]](_0x3536x4[_0x763a[235]],_0x3536x4[_0x763a[236]],_0x3536x14,_0x3536x15,_0x3536x17[_0x763a[235]],_0x3536x17[_0x763a[236]],_0x3536x18[_0x763a[235]],_0x3536x18[_0x763a[236]]));null== _0x3536x1b&& (_0x3536x1b= new mxPoint(_0x3536x14,_0x3536x15));return _0x3536x1b}};function mxPrintPreview(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14){this[_0x763a[1179]]= _0x3536x2;this[_0x763a[255]]= null!= _0x3536x3?_0x3536x3:1/ _0x3536x2[_0x763a[2012]];this[_0x763a[467]]= null!= _0x3536x5?_0x3536x5:0;this[_0x763a[2013]]= null!= _0x3536x4?_0x3536x4:_0x3536x2[_0x763a[2013]];this[_0x763a[924]]= null!= _0x3536x13?_0x3536x13:_0x763a[2014];this[_0x763a[1732]]= null!= _0x3536x9?_0x3536x9:0;this[_0x763a[1733]]= null!= _0x3536xa?_0x3536xa:0;this[_0x763a[1630]]= _0x3536x12;this[_0x763a[2015]]= null!= _0x3536x14?_0x3536x14:!0}mxPrintPreview[_0x763a[202]][_0x763a[1179]]= null;mxPrintPreview[_0x763a[202]][_0x763a[2013]]= null;mxPrintPreview[_0x763a[202]][_0x763a[255]]= null;mxPrintPreview[_0x763a[202]][_0x763a[467]]= 0;mxPrintPreview[_0x763a[202]][_0x763a[1732]]= 0;mxPrintPreview[_0x763a[202]][_0x763a[1733]]= 0;mxPrintPreview[_0x763a[202]][_0x763a[2016]]= !0;mxPrintPreview[_0x763a[202]][_0x763a[2017]]= !1;mxPrintPreview[_0x763a[202]][_0x763a[1630]]= null;mxPrintPreview[_0x763a[202]][_0x763a[924]]= null;mxPrintPreview[_0x763a[202]][_0x763a[2015]]= null;mxPrintPreview[_0x763a[202]][_0x763a[2018]]= null;mxPrintPreview[_0x763a[202]][_0x763a[2019]]= 0;mxPrintPreview[_0x763a[202]][_0x763a[2020]]= function(){return this[_0x763a[2018]]};mxPrintPreview[_0x763a[202]][_0x763a[2021]]= function(){var _0x3536x2=_0x763a[110];8== document[_0x763a[5]]&& (_0x3536x2= _0x763a[2022]);return _0x3536x2};mxPrintPreview[_0x763a[202]][_0x763a[392]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[259]][_0x763a[2023]],_0x3536x4=null;try{this[_0x763a[2017]]&& (this[_0x763a[1179]][_0x763a[259]][_0x763a[2023]]= function(_0x3536x2,_0x3536x3){_0x3536x3[_0x763a[176]](_0x3536x2[_0x763a[441]][_0x763a[2024]]())});if(null== this[_0x763a[2018]]){this[_0x763a[2018]]= window[_0x763a[392]]();var _0x3536x5=this[_0x763a[2018]][_0x763a[395]],_0x3536x9=this[_0x763a[2021]]();null!= _0x3536x9&& 0< _0x3536x9[_0x763a[67]]&& _0x3536x5[_0x763a[171]](_0x3536x9);_0x3536x5[_0x763a[171]](_0x763a[528]);_0x3536x5[_0x763a[171]](_0x763a[531]);this[_0x763a[2025]](_0x3536x5,_0x3536x2);_0x3536x5[_0x763a[171]](_0x763a[533]);_0x3536x5[_0x763a[171]](_0x763a[2026]);mxClient[_0x763a[54]](_0x763a[94],mxClient[_0x763a[86]]+ _0x763a[95],_0x3536x5);mxClient[_0x763a[47]]&& (_0x3536x5[_0x763a[100]][_0x763a[99]](_0x763a[6],_0x763a[97]),_0x3536x5[_0x763a[100]][_0x763a[99]](_0x763a[7],_0x763a[101]),_0x3536x5[_0x763a[102]]()[_0x763a[103]]= _0x763a[104],mxClient[_0x763a[54]](_0x763a[94],mxClient[_0x763a[86]]+ _0x763a[105],_0x3536x5));var _0x3536xa=this[_0x763a[1179]][_0x763a[517]]()[_0x763a[238]](),_0x3536x12=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[518]](),_0x3536x13=_0x3536x12/ this[_0x763a[255]],_0x3536x14=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[512]]();this[_0x763a[2016]]|| (this[_0x763a[1732]]= -_0x3536x14[_0x763a[235]]* this[_0x763a[255]],this[_0x763a[1733]]= -_0x3536x14[_0x763a[236]]* this[_0x763a[255]],_0x3536xa[_0x763a[117]]+= _0x3536xa[_0x763a[235]],_0x3536xa[_0x763a[119]]+= _0x3536xa[_0x763a[236]],_0x3536xa[_0x763a[235]]= 0,this[_0x763a[467]]= _0x3536xa[_0x763a[236]]= 0);_0x3536xa[_0x763a[117]]/= _0x3536x13;_0x3536xa[_0x763a[119]]/= _0x3536x13;var _0x3536x15=this[_0x763a[2013]][_0x763a[117]]- 2* this[_0x763a[467]],_0x3536x16=this[_0x763a[2013]][_0x763a[119]]- 2* this[_0x763a[467]],_0x3536x17=Math[_0x763a[160]](1,Math[_0x763a[430]]((_0x3536xa[_0x763a[117]]+ this[_0x763a[1732]])/ _0x3536x15)),_0x3536x18=Math[_0x763a[160]](1,Math[_0x763a[430]]((_0x3536xa[_0x763a[119]]+ this[_0x763a[1733]])/ _0x3536x16));this[_0x763a[2019]]= _0x3536x17* _0x3536x18;var _0x3536x19=mxUtils[_0x763a[885]](this,function(){if(this[_0x763a[2015]]&& (1< _0x3536x18|| 1< _0x3536x17)){var _0x3536x2=this[_0x763a[2027]](_0x3536x18,_0x3536x17);_0x3536x5[_0x763a[112]][_0x763a[62]](_0x3536x2);if(mxClient[_0x763a[80]]){_0x3536x2[_0x763a[124]][_0x763a[491]]= _0x763a[492];var _0x3536x3=function(){_0x3536x2[_0x763a[124]][_0x763a[125]]= _0x3536x5[_0x763a[112]][_0x763a[190]]+ 10+ _0x763a[168]};mxEvent[_0x763a[169]](this[_0x763a[2018]],_0x763a[276],function(_0x3536x2){_0x3536x3()});mxEvent[_0x763a[169]](this[_0x763a[2018]],_0x763a[129],function(_0x3536x2){_0x3536x3()})}}});_0x3536x2= function(_0x3536x2,_0x3536x3){null!= this[_0x763a[1630]]&& (_0x3536x2[_0x763a[124]][_0x763a[1630]]= this[_0x763a[1630]],_0x3536x2[_0x763a[124]][_0x763a[465]]= _0x763a[1631],_0x3536x2[_0x763a[124]][_0x763a[1629]]= _0x763a[942]);_0x3536x2[_0x763a[124]][_0x763a[1537]]= _0x763a[1391];_0x3536x3&& (_0x3536x2[_0x763a[124]][_0x763a[2028]]= _0x763a[2029]);mxClient[_0x763a[80]]?(_0x3536x5[_0x763a[171]](_0x3536x2[_0x763a[342]]),_0x3536x2[_0x763a[265]][_0x763a[266]](_0x3536x2)):(_0x3536x2[_0x763a[265]][_0x763a[266]](_0x3536x2),_0x3536x5[_0x763a[112]][_0x763a[62]](_0x3536x2));if(_0x3536x3){var _0x3536x4=_0x3536x5[_0x763a[55]](_0x763a[1054]);_0x3536x4[_0x763a[926]]= _0x763a[2030];_0x3536x5[_0x763a[112]][_0x763a[62]](_0x3536x4)}};var _0x3536x1a=this[_0x763a[2031]](this[_0x763a[2013]][_0x763a[117]],this[_0x763a[2013]][_0x763a[119]]);if(null!= _0x3536x1a){for(var _0x3536x1b=0;_0x3536x1b< _0x3536x1a[_0x763a[67]];_0x3536x1b++){_0x3536x2(_0x3536x1a[_0x3536x1b],!0)}};for(var _0x3536x1c=this[_0x763a[2032]](this[_0x763a[2013]][_0x763a[117]],this[_0x763a[2013]][_0x763a[119]]),_0x3536x1b=0;_0x3536x1b< _0x3536x18;_0x3536x1b++){for(var _0x3536x1d=_0x3536x1b* _0x3536x16/ this[_0x763a[255]]- this[_0x763a[1733]]/ this[_0x763a[255]]+ (_0x3536xa[_0x763a[236]]- _0x3536x14[_0x763a[236]]* _0x3536x12)/ _0x3536x12,_0x3536x1a=0;_0x3536x1a< _0x3536x17;_0x3536x1a++){if(null== this[_0x763a[2018]]){return null};var _0x3536x1e=_0x3536x1a* _0x3536x15/ this[_0x763a[255]]- this[_0x763a[1732]]/ this[_0x763a[255]]+ (_0x3536xa[_0x763a[235]]- _0x3536x14[_0x763a[235]]* _0x3536x12)/ _0x3536x12,_0x3536x1f=_0x3536x1b* _0x3536x17+ _0x3536x1a+ 1,_0x3536x4=this[_0x763a[2034]](this[_0x763a[2013]][_0x763a[117]],this[_0x763a[2013]][_0x763a[119]],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[2033]](-_0x3536x1e,-_0x3536x1d,this[_0x763a[255]],_0x3536x1f,_0x3536x2)}));_0x3536x4[_0x763a[57]](_0x763a[1363],_0x763a[2035]+ _0x3536x1f);_0x3536x2(_0x3536x4,null!= _0x3536x1c|| _0x3536x1b< _0x3536x18- 1|| _0x3536x1a< _0x3536x17- 1)}};if(null!= _0x3536x1c){for(_0x3536x1b= 0;_0x3536x1b< _0x3536x1c[_0x763a[67]];_0x3536x1b++){_0x3536x2(_0x3536x1c[_0x3536x1b],_0x3536x1b< _0x3536x1c[_0x763a[67]])}};_0x3536x5[_0x763a[171]](_0x763a[527]);_0x3536x5[_0x763a[171]](_0x763a[534]);_0x3536x5[_0x763a[268]]();_0x3536x19();mxEvent[_0x763a[762]](_0x3536x5[_0x763a[112]])};this[_0x763a[2018]][_0x763a[393]]()}catch(y){null!= _0x3536x4&& null!= _0x3536x4[_0x763a[265]]&& _0x3536x4[_0x763a[265]][_0x763a[266]](_0x3536x4)}finally{this[_0x763a[1179]][_0x763a[259]][_0x763a[2023]]= _0x3536x3};return this[_0x763a[2018]]};mxPrintPreview[_0x763a[202]][_0x763a[2025]]= function(_0x3536x2,_0x3536x3){null!= this[_0x763a[924]]&& _0x3536x2[_0x763a[171]](_0x763a[2036]+ this[_0x763a[924]]+ _0x763a[2037]);_0x3536x2[_0x763a[171]](_0x763a[2038]);_0x3536x2[_0x763a[171]](_0x763a[2039]);_0x3536x2[_0x763a[171]](_0x763a[2040]);_0x3536x2[_0x763a[171]](_0x763a[2041]);_0x3536x2[_0x763a[171]](_0x763a[233]);_0x3536x2[_0x763a[171]](_0x763a[2042]);_0x3536x2[_0x763a[171]](_0x763a[2043]);_0x3536x2[_0x763a[171]](_0x763a[2044]);_0x3536x2[_0x763a[171]](_0x763a[2045]);_0x3536x2[_0x763a[171]](_0x763a[233]);null!= _0x3536x3&& _0x3536x2[_0x763a[171]](_0x3536x3);_0x3536x2[_0x763a[171]](_0x763a[2046])};mxPrintPreview[_0x763a[202]][_0x763a[2027]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[2018]][_0x763a[395]],_0x3536x5=_0x3536x4[_0x763a[55]](_0x763a[116]);_0x3536x5[_0x763a[926]]= _0x763a[2047];_0x3536x5[_0x763a[57]](_0x763a[467],_0x763a[468]);for(var _0x3536x9=_0x3536x4[_0x763a[55]](_0x763a[120]),_0x3536xa=0;_0x3536xa< _0x3536x2;_0x3536xa++){for(var _0x3536x12=_0x3536x4[_0x763a[55]](_0x763a[121]),_0x3536x13=0;_0x3536x13< _0x3536x3;_0x3536x13++){var _0x3536x14=_0x3536xa* _0x3536x3+ _0x3536x13+ 1,_0x3536x15=_0x3536x4[_0x763a[55]](_0x763a[122]);if(!mxClient[_0x763a[133]]|| mxClient[_0x763a[75]]|| mxClient[_0x763a[76]]){var _0x3536x16=_0x3536x4[_0x763a[55]](_0x763a[2048]);_0x3536x16[_0x763a[57]](_0x763a[44],_0x763a[2049]+ _0x3536x14);mxUtils[_0x763a[53]](_0x3536x16,_0x3536x14,_0x3536x4);_0x3536x15[_0x763a[62]](_0x3536x16)}else {mxUtils[_0x763a[53]](_0x3536x15,_0x3536x14,_0x3536x4)};_0x3536x12[_0x763a[62]](_0x3536x15)};_0x3536x9[_0x763a[62]](_0x3536x12)};_0x3536x5[_0x763a[62]](_0x3536x9);return _0x3536x5};mxPrintPreview[_0x763a[202]][_0x763a[2034]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=document[_0x763a[55]](_0x763a[485]);try{_0x3536x5[_0x763a[124]][_0x763a[117]]= _0x3536x2+ _0x763a[168];_0x3536x5[_0x763a[124]][_0x763a[119]]= _0x3536x3+ _0x763a[168];_0x3536x5[_0x763a[124]][_0x763a[277]]= _0x763a[188];_0x3536x5[_0x763a[124]][_0x763a[2050]]= _0x763a[1824];_0x3536x5[_0x763a[124]][_0x763a[491]]= _0x763a[1500];var _0x3536x9=document[_0x763a[55]](_0x763a[485]);_0x3536x9[_0x763a[124]][_0x763a[125]]= this[_0x763a[467]]+ _0x763a[168];_0x3536x9[_0x763a[124]][_0x763a[361]]= this[_0x763a[467]]+ _0x763a[168];_0x3536x9[_0x763a[124]][_0x763a[117]]= _0x3536x2- 2* this[_0x763a[467]]+ _0x763a[168];_0x3536x9[_0x763a[124]][_0x763a[119]]= _0x3536x3- 2* this[_0x763a[467]]+ _0x763a[168];_0x3536x9[_0x763a[124]][_0x763a[277]]= _0x763a[188];this[_0x763a[1179]][_0x763a[507]]== mxConstants[_0x763a[1523]]&& (_0x3536x9[_0x763a[124]][_0x763a[491]]= _0x763a[492]);_0x3536x5[_0x763a[62]](_0x3536x9);document[_0x763a[112]][_0x763a[62]](_0x3536x5);_0x3536x4(_0x3536x9)}catch(f){throw _0x3536x5[_0x763a[265]][_0x763a[266]](_0x3536x5),f};return _0x3536x5};mxPrintPreview[_0x763a[202]][_0x763a[2033]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x5= this[_0x763a[1179]][_0x763a[249]]();var _0x3536xa=this[_0x763a[1179]][_0x763a[526]];this[_0x763a[1179]][_0x763a[526]]= _0x3536x9;var _0x3536x12=_0x3536x5[_0x763a[2051]](),_0x3536x13=_0x3536x5[_0x763a[2052]](),_0x3536x14=_0x3536x5[_0x763a[2024]](),_0x3536x15=_0x3536x5[_0x763a[1524]]();this[_0x763a[1179]][_0x763a[507]]== mxConstants[_0x763a[508]]?_0x3536x5[_0x763a[1569]]():this[_0x763a[1179]][_0x763a[507]]== mxConstants[_0x763a[1523]]?_0x3536x5[_0x763a[1571]]():_0x3536x5[_0x763a[1570]]();var _0x3536x16=_0x3536x5[_0x763a[503]]();_0x3536x5[_0x763a[504]](!1);var _0x3536x17=this[_0x763a[1179]][_0x763a[994]]();this[_0x763a[1179]][_0x763a[995]](!1);var _0x3536x18=_0x3536x5[_0x763a[512]]();_0x3536x5[_0x763a[513]]= new mxPoint(_0x3536x2,_0x3536x3);_0x3536x2= null;try{var _0x3536x19=[this[_0x763a[1179]][_0x763a[502]]()[_0x763a[501]]()];_0x3536x2= new mxTemporaryCellStates(_0x3536x5,_0x3536x4,_0x3536x19)}finally{if(mxClient[_0x763a[80]]){_0x3536x5[_0x763a[506]][_0x763a[339]]= _0x763a[110]}else {for(_0x3536x4= _0x3536x9[_0x763a[285]];null!= _0x3536x4;){_0x3536x19= _0x3536x4[_0x763a[287]],_0x3536x3= _0x3536x4[_0x763a[301]][_0x763a[216]](),_0x763a[571]== _0x3536x3?(_0x3536x4[_0x763a[57]](_0x763a[117],parseInt(_0x3536x9[_0x763a[124]][_0x763a[117]])),_0x3536x4[_0x763a[57]](_0x763a[119],parseInt(_0x3536x9[_0x763a[124]][_0x763a[119]]))):_0x763a[583]!= _0x3536x4[_0x763a[124]][_0x763a[270]]&& _0x763a[116]!= _0x3536x3&& _0x3536x4[_0x763a[265]][_0x763a[266]](_0x3536x4),_0x3536x4= _0x3536x19}};_0x3536x5[_0x763a[506]][_0x763a[265]][_0x763a[266]](_0x3536x5[_0x763a[506]]);this[_0x763a[1179]][_0x763a[995]](_0x3536x17);this[_0x763a[1179]][_0x763a[526]]= _0x3536xa;_0x3536x5[_0x763a[510]]= _0x3536x12;_0x3536x5[_0x763a[2053]]= _0x3536x13;_0x3536x5[_0x763a[505]]= _0x3536x14;_0x3536x5[_0x763a[506]]= _0x3536x15;_0x3536x5[_0x763a[513]]= _0x3536x18;_0x3536x2[_0x763a[515]]();_0x3536x5[_0x763a[504]](_0x3536x16)}};mxPrintPreview[_0x763a[202]][_0x763a[2031]]= function(){return null};mxPrintPreview[_0x763a[202]][_0x763a[2032]]= function(){return null};mxPrintPreview[_0x763a[202]][_0x763a[540]]= function(){var _0x3536x2=this[_0x763a[392]]();null!= _0x3536x2&& _0x3536x2[_0x763a[540]]()};mxPrintPreview[_0x763a[202]][_0x763a[268]]= function(){null!= this[_0x763a[2018]]&& (this[_0x763a[2018]][_0x763a[268]](),this[_0x763a[2018]]= null)};function mxStylesheet(){this[_0x763a[2054]]= {};this[_0x763a[2056]](this[_0x763a[2055]]());this[_0x763a[2058]](this[_0x763a[2057]]())}mxStylesheet[_0x763a[202]][_0x763a[2055]]= function(){var _0x3536x2={};_0x3536x2[mxConstants[_0x763a[2059]]]= mxConstants[_0x763a[2060]];_0x3536x2[mxConstants[_0x763a[2061]]]= mxPerimeter[_0x763a[2062]];_0x3536x2[mxConstants[_0x763a[2063]]]= mxConstants[_0x763a[481]];_0x3536x2[mxConstants[_0x763a[2064]]]= mxConstants[_0x763a[479]];_0x3536x2[mxConstants[_0x763a[2065]]]= _0x763a[2066];_0x3536x2[mxConstants[_0x763a[2067]]]= _0x763a[2068];_0x3536x2[mxConstants[_0x763a[2069]]]= _0x763a[2070];return _0x3536x2};mxStylesheet[_0x763a[202]][_0x763a[2057]]= function(){var _0x3536x2={};_0x3536x2[mxConstants[_0x763a[2059]]]= mxConstants[_0x763a[2071]];_0x3536x2[mxConstants[_0x763a[1695]]]= mxConstants[_0x763a[1622]];_0x3536x2[mxConstants[_0x763a[2063]]]= mxConstants[_0x763a[481]];_0x3536x2[mxConstants[_0x763a[2064]]]= mxConstants[_0x763a[479]];_0x3536x2[mxConstants[_0x763a[2067]]]= _0x763a[2068];_0x3536x2[mxConstants[_0x763a[2069]]]= _0x763a[2072];return _0x3536x2};mxStylesheet[_0x763a[202]][_0x763a[2056]]= function(_0x3536x2){this[_0x763a[2074]](_0x763a[2073],_0x3536x2)};mxStylesheet[_0x763a[202]][_0x763a[2058]]= function(_0x3536x2){this[_0x763a[2074]](_0x763a[2075],_0x3536x2)};mxStylesheet[_0x763a[202]][_0x763a[2076]]= function(){return this[_0x763a[2054]][_0x763a[2073]]};mxStylesheet[_0x763a[202]][_0x763a[2077]]= function(){return this[_0x763a[2054]][_0x763a[2075]]};mxStylesheet[_0x763a[202]][_0x763a[2074]]= function(_0x3536x2,_0x3536x3){this[_0x763a[2054]][_0x3536x2]= _0x3536x3};mxStylesheet[_0x763a[202]][_0x763a[1705]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x3536x3;if(null!= _0x3536x2&& 0< _0x3536x2[_0x763a[67]]){for(var _0x3536x5=_0x3536x2[_0x763a[224]](_0x763a[471]),_0x3536x4=null!= _0x3536x4&& _0x763a[471]!= _0x3536x2[_0x763a[225]](0)?mxUtils[_0x763a[238]](_0x3536x4):{},_0x3536x9=0;_0x3536x9< _0x3536x5[_0x763a[67]];_0x3536x9++){var _0x3536xa=_0x3536x5[_0x3536x9],_0x3536x12=_0x3536xa[_0x763a[2]](_0x763a[226]);if(0<= _0x3536x12){var _0x3536x13=_0x3536xa[_0x763a[85]](0,_0x3536x12),_0x3536xa=_0x3536xa[_0x763a[85]](_0x3536x12+ 1);_0x3536xa== mxConstants[_0x763a[217]]? delete _0x3536x4[_0x3536x13]:mxUtils[_0x763a[1946]](_0x3536xa)?_0x3536x4[_0x3536x13]= parseFloat(_0x3536xa):_0x3536x4[_0x3536x13]= _0x3536xa}else {if(_0x3536xa= this[_0x763a[2054]][_0x3536xa],null!= _0x3536xa){for(_0x3536x13 in _0x3536xa){_0x3536x4[_0x3536x13]= _0x3536xa[_0x3536x13]}}}}};return _0x3536x4};function mxCellState(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[441]]= _0x3536x2;this[_0x763a[246]]= _0x3536x3;this[_0x763a[124]]= _0x3536x4;this[_0x763a[2078]]= new mxPoint;this[_0x763a[2079]]= new mxPoint}mxCellState[_0x763a[202]]= new mxRectangle;mxCellState[_0x763a[202]][_0x763a[196]]= mxCellState;mxCellState[_0x763a[202]][_0x763a[441]]= null;mxCellState[_0x763a[202]][_0x763a[246]]= null;mxCellState[_0x763a[202]][_0x763a[124]]= null;mxCellState[_0x763a[202]][_0x763a[2080]]= !0;mxCellState[_0x763a[202]][_0x763a[2081]]= !1;mxCellState[_0x763a[202]][_0x763a[2082]]= !1;mxCellState[_0x763a[202]][_0x763a[2078]]= null;mxCellState[_0x763a[202]][_0x763a[439]]= null;mxCellState[_0x763a[202]][_0x763a[2079]]= null;mxCellState[_0x763a[202]][_0x763a[2083]]= null;mxCellState[_0x763a[202]][_0x763a[2084]]= null;mxCellState[_0x763a[202]][_0x763a[2085]]= 0;mxCellState[_0x763a[202]][_0x763a[67]]= 0;mxCellState[_0x763a[202]][_0x763a[2086]]= null;mxCellState[_0x763a[202]][_0x763a[253]]= null;mxCellState[_0x763a[202]][_0x763a[963]]= null;mxCellState[_0x763a[202]][_0x763a[2087]]= function(_0x3536x2,_0x3536x3){_0x3536x2= _0x3536x2|| 0;_0x3536x3= null!= _0x3536x3?_0x3536x3: new mxRectangle(this[_0x763a[235]],this[_0x763a[236]],this[_0x763a[117]],this[_0x763a[119]]);if(null!= this[_0x763a[253]]&& null!= this[_0x763a[253]][_0x763a[1561]]){var _0x3536x4=this[_0x763a[253]][_0x763a[1561]][_0x763a[1548]](this[_0x763a[124]],_0x3536x3[_0x763a[235]],_0x3536x3[_0x763a[236]],_0x3536x3[_0x763a[117]],_0x3536x3[_0x763a[119]]);_0x3536x3[_0x763a[235]]= _0x3536x4[_0x763a[235]];_0x3536x3[_0x763a[236]]= _0x3536x4[_0x763a[236]];_0x3536x3[_0x763a[117]]= this[_0x763a[253]][_0x763a[1561]][_0x763a[1532]]* _0x3536x4[_0x763a[117]];_0x3536x3[_0x763a[119]]= this[_0x763a[253]][_0x763a[1561]][_0x763a[1533]]* _0x3536x4[_0x763a[119]]};0!= _0x3536x2&& _0x3536x3[_0x763a[244]](_0x3536x2);return _0x3536x3};mxCellState[_0x763a[202]][_0x763a[2088]]= function(_0x3536x2,_0x3536x3){_0x3536x3?(null== this[_0x763a[439]]&& (this[_0x763a[439]]= []),0== this[_0x763a[439]][_0x763a[67]]?this[_0x763a[439]][_0x763a[207]](_0x3536x2):this[_0x763a[439]][0]= _0x3536x2):null== this[_0x763a[439]]?(this[_0x763a[439]]= [],this[_0x763a[439]][_0x763a[207]](null),this[_0x763a[439]][_0x763a[207]](_0x3536x2)):1== this[_0x763a[439]][_0x763a[67]]?this[_0x763a[439]][_0x763a[207]](_0x3536x2):this[_0x763a[439]][this[_0x763a[439]][_0x763a[67]]- 1]= _0x3536x2};mxCellState[_0x763a[202]][_0x763a[1609]]= function(_0x3536x2){null!= this[_0x763a[253]]&& this[_0x763a[253]][_0x763a[1609]](_0x3536x2);null!= this[_0x763a[963]]&& this[_0x763a[963]][_0x763a[1609]](_0x3536x2)};mxCellState[_0x763a[202]][_0x763a[1710]]= function(_0x3536x2){_0x3536x2= this[_0x763a[2089]](_0x3536x2);return null!= _0x3536x2?_0x3536x2[_0x763a[246]]:null};mxCellState[_0x763a[202]][_0x763a[2089]]= function(_0x3536x2){return _0x3536x2?this[_0x763a[2083]]:this[_0x763a[2084]]};mxCellState[_0x763a[202]][_0x763a[2090]]= function(_0x3536x2,_0x3536x3){_0x3536x3?this[_0x763a[2083]]= _0x3536x2:this[_0x763a[2084]]= _0x3536x2};mxCellState[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[441]][_0x763a[1179]][_0x763a[259]][_0x763a[515]](this)};mxCellState[_0x763a[202]][_0x763a[238]]= function(){var _0x3536x2= new mxCellState(this[_0x763a[441]],this[_0x763a[246]],this[_0x763a[124]]);if(null!= this[_0x763a[439]]){_0x3536x2[_0x763a[439]]= [];for(var _0x3536x3=0;_0x3536x3< this[_0x763a[439]][_0x763a[67]];_0x3536x3++){_0x3536x2[_0x763a[439]][_0x3536x3]= this[_0x763a[439]][_0x3536x3][_0x763a[238]]()}};null!= this[_0x763a[2078]]&& (_0x3536x2[_0x763a[2078]]= this[_0x763a[2078]][_0x763a[238]]());null!= this[_0x763a[2079]]&& (_0x3536x2[_0x763a[2079]]= this[_0x763a[2079]][_0x763a[238]]());null!= this[_0x763a[1563]]&& (_0x3536x2[_0x763a[1563]]= this[_0x763a[1563]][_0x763a[238]]());_0x3536x2[_0x763a[2085]]= this[_0x763a[2085]];_0x3536x2[_0x763a[2086]]= this[_0x763a[2086]];_0x3536x2[_0x763a[67]]= this[_0x763a[67]];_0x3536x2[_0x763a[235]]= this[_0x763a[235]];_0x3536x2[_0x763a[236]]= this[_0x763a[236]];_0x3536x2[_0x763a[117]]= this[_0x763a[117]];_0x3536x2[_0x763a[119]]= this[_0x763a[119]];return _0x3536x2};function mxGraphSelectionModel(_0x3536x2){this[_0x763a[1179]]= _0x3536x2;this[_0x763a[895]]= []}mxGraphSelectionModel[_0x763a[202]]= new mxEventSource;mxGraphSelectionModel[_0x763a[202]][_0x763a[196]]= mxGraphSelectionModel;mxGraphSelectionModel[_0x763a[202]][_0x763a[2091]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[819]:_0x763a[110];mxGraphSelectionModel[_0x763a[202]][_0x763a[2092]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[2093]:_0x763a[110];mxGraphSelectionModel[_0x763a[202]][_0x763a[1179]]= null;mxGraphSelectionModel[_0x763a[202]][_0x763a[2094]]= !1;mxGraphSelectionModel[_0x763a[202]][_0x763a[2095]]= function(){return this[_0x763a[2094]]};mxGraphSelectionModel[_0x763a[202]][_0x763a[2096]]= function(_0x3536x2){this[_0x763a[2094]]= _0x3536x2};mxGraphSelectionModel[_0x763a[202]][_0x763a[2097]]= function(_0x3536x2){return null!= _0x3536x2?0<= mxUtils[_0x763a[2]](this[_0x763a[895]],_0x3536x2):!1};mxGraphSelectionModel[_0x763a[202]][_0x763a[1107]]= function(){return 0== this[_0x763a[895]][_0x763a[67]]};mxGraphSelectionModel[_0x763a[202]][_0x763a[200]]= function(){this[_0x763a[2098]](null,this[_0x763a[895]])};mxGraphSelectionModel[_0x763a[202]][_0x763a[2099]]= function(_0x3536x2){null!= _0x3536x2&& this[_0x763a[2100]]([_0x3536x2])};mxGraphSelectionModel[_0x763a[202]][_0x763a[2100]]= function(_0x3536x2){if(null!= _0x3536x2){this[_0x763a[2094]]&& (_0x3536x2= [this[_0x763a[2101]](_0x3536x2)]);for(var _0x3536x3=[],_0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){this[_0x763a[1179]][_0x763a[2102]](_0x3536x2[_0x3536x4])&& _0x3536x3[_0x763a[207]](_0x3536x2[_0x3536x4])};this[_0x763a[2098]](_0x3536x3,this[_0x763a[895]])}};mxGraphSelectionModel[_0x763a[202]][_0x763a[2101]]= function(_0x3536x2){if(null!= _0x3536x2){for(var _0x3536x3=0;_0x3536x3< _0x3536x2[_0x763a[67]];_0x3536x3++){if(this[_0x763a[1179]][_0x763a[2102]](_0x3536x2[_0x3536x3])){return _0x3536x2[_0x3536x3]}}};return null};mxGraphSelectionModel[_0x763a[202]][_0x763a[2103]]= function(_0x3536x2){null!= _0x3536x2&& this[_0x763a[832]]([_0x3536x2])};mxGraphSelectionModel[_0x763a[202]][_0x763a[832]]= function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=null;this[_0x763a[2094]]&& (_0x3536x3= this[_0x763a[895]],_0x3536x2= [this[_0x763a[2101]](_0x3536x2)]);for(var _0x3536x4=[],_0x3536x5=0;_0x3536x5< _0x3536x2[_0x763a[67]];_0x3536x5++){!this[_0x763a[2097]](_0x3536x2[_0x3536x5])&& this[_0x763a[1179]][_0x763a[2102]](_0x3536x2[_0x3536x5])&& _0x3536x4[_0x763a[207]](_0x3536x2[_0x3536x5])};this[_0x763a[2098]](_0x3536x4,_0x3536x3)}};mxGraphSelectionModel[_0x763a[202]][_0x763a[2104]]= function(_0x3536x2){null!= _0x3536x2&& this[_0x763a[842]]([_0x3536x2])};mxGraphSelectionModel[_0x763a[202]][_0x763a[842]]= function(_0x3536x2){if(null!= _0x3536x2){for(var _0x3536x3=[],_0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){this[_0x763a[2097]](_0x3536x2[_0x3536x4])&& _0x3536x3[_0x763a[207]](_0x3536x2[_0x3536x4])};this[_0x763a[2098]](null,_0x3536x3)}};mxGraphSelectionModel[_0x763a[202]][_0x763a[2098]]= function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2&& 0< _0x3536x2[_0x763a[67]]&& null!= _0x3536x2[0]|| null!= _0x3536x3&& 0< _0x3536x3[_0x763a[67]]&& null!= _0x3536x3[0]){var _0x3536x4= new mxSelectionChange(this,_0x3536x2,_0x3536x3);_0x3536x4[_0x763a[350]]();var _0x3536x5= new mxUndoableEdit(this,!1);_0x3536x5[_0x763a[99]](_0x3536x4);this[_0x763a[746]]( new mxEventObject(mxEvent.UNDO,_0x763a[1061],_0x3536x5))}};mxGraphSelectionModel[_0x763a[202]][_0x763a[1941]]= function(_0x3536x2){null!= _0x3536x2&& !this[_0x763a[2097]](_0x3536x2)&& this[_0x763a[895]][_0x763a[207]](_0x3536x2)};mxGraphSelectionModel[_0x763a[202]][_0x763a[1102]]= function(_0x3536x2){null!= _0x3536x2&& (_0x3536x2= mxUtils[_0x763a[2]](this[_0x763a[895]],_0x3536x2),0<= _0x3536x2&& this[_0x763a[895]][_0x763a[300]](_0x3536x2,1))};function mxSelectionChange(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[2105]]= _0x3536x2;this[_0x763a[2106]]= null!= _0x3536x3?_0x3536x3[_0x763a[1853]]():null;this[_0x763a[2107]]= null!= _0x3536x4?_0x3536x4[_0x763a[1853]]():null}mxSelectionChange[_0x763a[202]][_0x763a[350]]= function(){var _0x3536x2=mxLog[_0x763a[2109]](_0x763a[2108]);window[_0x763a[879]]= mxResources[_0x763a[203]](this[_0x763a[2105]][_0x763a[2092]])|| this[_0x763a[2105]][_0x763a[2092]];if(null!= this[_0x763a[2107]]){for(var _0x3536x3=0;_0x3536x3< this[_0x763a[2107]][_0x763a[67]];_0x3536x3++){this[_0x763a[2105]][_0x763a[1102]](this[_0x763a[2107]][_0x3536x3])}};if(null!= this[_0x763a[2106]]){for(_0x3536x3= 0;_0x3536x3< this[_0x763a[2106]][_0x763a[67]];_0x3536x3++){this[_0x763a[2105]][_0x763a[1941]](this[_0x763a[2106]][_0x3536x3])}};_0x3536x3= this[_0x763a[2106]];this[_0x763a[2106]]= this[_0x763a[2107]];this[_0x763a[2107]]= _0x3536x3;window[_0x763a[879]]= mxResources[_0x763a[203]](this[_0x763a[2105]][_0x763a[2091]])|| this[_0x763a[2105]][_0x763a[2091]];mxLog[_0x763a[2110]](_0x763a[2108],_0x3536x2);this[_0x763a[2105]][_0x763a[746]]( new mxEventObject(mxEvent.CHANGE,_0x763a[2106],this[_0x763a[2106]],_0x763a[2107],this[_0x763a[2107]]))};function mxCellEditor(_0x3536x2){this[_0x763a[1179]]= _0x3536x2}mxCellEditor[_0x763a[202]][_0x763a[1179]]= null;mxCellEditor[_0x763a[202]][_0x763a[126]]= null;mxCellEditor[_0x763a[202]][_0x763a[2111]]= null;mxCellEditor[_0x763a[202]][_0x763a[2112]]= null;mxCellEditor[_0x763a[202]][_0x763a[2113]]= !1;mxCellEditor[_0x763a[202]][_0x763a[2114]]= !0;mxCellEditor[_0x763a[202]][_0x763a[2115]]= _0x763a[110];mxCellEditor[_0x763a[202]][_0x763a[2116]]= _0x763a[110];mxCellEditor[_0x763a[202]][_0x763a[176]]= function(){this[_0x763a[126]]= document[_0x763a[55]](_0x763a[126]);this[_0x763a[126]][_0x763a[926]]= _0x763a[2117];this[_0x763a[126]][_0x763a[124]][_0x763a[491]]= _0x763a[492];this[_0x763a[126]][_0x763a[124]][_0x763a[277]]= _0x763a[189];this[_0x763a[126]][_0x763a[57]](_0x763a[2118],_0x763a[2119]);this[_0x763a[126]][_0x763a[57]](_0x763a[969],_0x763a[2120]);mxClient[_0x763a[133]]&& (this[_0x763a[126]][_0x763a[124]][_0x763a[129]]= _0x763a[130]);mxEvent[_0x763a[169]](this[_0x763a[126]],_0x763a[2121],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[2122]]()}));mxEvent[_0x763a[169]](this[_0x763a[126]],_0x763a[2123],mxUtils[_0x763a[885]](this,function(_0x3536x2){mxEvent[_0x763a[721]](_0x3536x2)|| (113== _0x3536x2[_0x763a[2124]]|| this[_0x763a[1179]][_0x763a[2125]]()&& 13== _0x3536x2[_0x763a[2124]]&& !mxEvent[_0x763a[775]](_0x3536x2)&& !mxEvent[_0x763a[774]](_0x3536x2)?(this[_0x763a[1179]][_0x763a[2126]](!1),mxEvent[_0x763a[722]](_0x3536x2)):27== _0x3536x2[_0x763a[2124]]?(this[_0x763a[1179]][_0x763a[2126]](!0),mxEvent[_0x763a[722]](_0x3536x2)):(this[_0x763a[2127]]&& (this[_0x763a[2127]]= !1,this[_0x763a[126]][_0x763a[131]]= _0x763a[110]),this[_0x763a[2128]](!0)))}));mxEvent[_0x763a[169]](this[_0x763a[126]],_0x763a[2129],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[2114]]&& !mxEvent[_0x763a[721]](_0x3536x2)&& setTimeout(mxUtils[_0x763a[885]](this,function(){this[_0x763a[129]]()}),0)}))};mxCellEditor[_0x763a[202]][_0x763a[129]]= function(){if(null!= this[_0x763a[1653]]){var _0x3536x2=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[248]](this[_0x763a[2111]]),_0x3536x3=this[_0x763a[1179]][_0x763a[2130]](_0x3536x2[_0x763a[246]]),_0x3536x4=this[_0x763a[1179]][_0x763a[2131]](_0x3536x2[_0x763a[246]]);if(this[_0x763a[1179]][_0x763a[502]]()[_0x763a[250]](_0x3536x2[_0x763a[246]])){this[_0x763a[1562]][_0x763a[235]]= _0x3536x2[_0x763a[2079]][_0x763a[235]],this[_0x763a[1562]][_0x763a[236]]= _0x3536x2[_0x763a[2079]][_0x763a[236]],this[_0x763a[1562]][_0x763a[117]]= 0,this[_0x763a[1562]][_0x763a[119]]= 0}else {if(null!= this[_0x763a[1562]]){this[_0x763a[1562]][_0x763a[235]]= _0x3536x2[_0x763a[235]];this[_0x763a[1562]][_0x763a[236]]= _0x3536x2[_0x763a[236]];this[_0x763a[1562]][_0x763a[117]]= _0x3536x2[_0x763a[117]];this[_0x763a[1562]][_0x763a[119]]= _0x3536x2[_0x763a[119]];var _0x3536x5=mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER);_0x3536x5== mxConstants[_0x763a[2132]]?this[_0x763a[1562]][_0x763a[235]]-= _0x3536x2[_0x763a[117]]:_0x3536x5== mxConstants[_0x763a[480]]&& (this[_0x763a[1562]][_0x763a[235]]+= _0x3536x2[_0x763a[117]]);_0x3536x5= mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE);_0x3536x5== mxConstants[_0x763a[1687]]?this[_0x763a[1562]][_0x763a[236]]-= _0x3536x2[_0x763a[119]]:_0x3536x5== mxConstants[_0x763a[482]]&& (this[_0x763a[1562]][_0x763a[236]]+= _0x3536x2[_0x763a[119]])}};_0x3536x5= this[_0x763a[126]][_0x763a[131]];if(_0x763a[192]== _0x3536x5[_0x763a[225]](_0x3536x5[_0x763a[67]]- 1)|| _0x763a[110]== _0x3536x5){_0x3536x5+= _0x763a[544]};_0x3536x5= mxUtils[_0x763a[321]](_0x3536x5,!1);_0x3536x4?(this[_0x763a[1653]][_0x763a[124]][_0x763a[493]]= _0x763a[1502],this[_0x763a[1653]][_0x763a[124]][_0x763a[117]]= this[_0x763a[1562]][_0x763a[117]]+ _0x763a[168]):_0x3536x5= _0x3536x5[_0x763a[230]](/ /g,_0x763a[544]);_0x3536x5= _0x3536x5[_0x763a[230]](/\n/g,_0x763a[1453]);this[_0x763a[1653]][_0x763a[339]]= _0x3536x5;var _0x3536x5=this[_0x763a[1653]][_0x763a[359]]+ 30,_0x3536x9=this[_0x763a[1653]][_0x763a[167]]+ 16,_0x3536x5=Math[_0x763a[160]](_0x3536x5,40),_0x3536x9=Math[_0x763a[160]](_0x3536x9,20);_0x3536x3&& (_0x3536x5= Math[_0x763a[243]](this[_0x763a[1562]][_0x763a[117]]- 4,_0x3536x5),_0x3536x9= Math[_0x763a[243]](this[_0x763a[1562]][_0x763a[119]],_0x3536x9));var _0x3536xa=null!= _0x3536x2[_0x763a[963]]?_0x3536x2[_0x763a[963]][_0x763a[1655]]:null;null== _0x3536xa&& (_0x3536xa= mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_ALIGN,mxConstants.ALIGN_CENTER),_0x3536x2= mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE),_0x3536xa= mxUtils[_0x763a[1501]](_0x3536xa,_0x3536x2));if(null!= _0x3536xa){if(_0x3536x3|| !_0x3536x4){this[_0x763a[126]][_0x763a[124]][_0x763a[361]]= Math[_0x763a[160]](0,Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[235]]- _0x3536xa[_0x763a[235]]* this[_0x763a[1562]][_0x763a[117]]+ _0x3536xa[_0x763a[235]]* _0x3536x5)- 3)+ _0x763a[168]};this[_0x763a[126]][_0x763a[124]][_0x763a[125]]= Math[_0x763a[160]](0,Math[_0x763a[488]](this[_0x763a[1562]][_0x763a[236]]- _0x3536xa[_0x763a[236]]* this[_0x763a[1562]][_0x763a[119]]+ _0x3536xa[_0x763a[236]]* _0x3536x9)+ 4)+ _0x763a[168]};if(_0x3536x3|| !_0x3536x4){this[_0x763a[126]][_0x763a[124]][_0x763a[117]]= _0x3536x5+ _0x763a[168]};this[_0x763a[126]][_0x763a[124]][_0x763a[119]]= _0x3536x9+ _0x763a[168]}};mxCellEditor[_0x763a[202]][_0x763a[2133]]= function(){return this[_0x763a[2113]]};mxCellEditor[_0x763a[202]][_0x763a[2128]]= function(_0x3536x2){this[_0x763a[2113]]= _0x3536x2};mxCellEditor[_0x763a[202]][_0x763a[2122]]= function(){this[_0x763a[2126]](!this[_0x763a[1179]][_0x763a[2134]]())};mxCellEditor[_0x763a[202]][_0x763a[855]]= function(_0x3536x2,_0x3536x3){null== this[_0x763a[126]]&& this[_0x763a[176]]();this[_0x763a[2126]](!0);var _0x3536x4=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[248]](_0x3536x2);if(null!= _0x3536x4){this[_0x763a[2111]]= _0x3536x2;this[_0x763a[2112]]= _0x3536x3;this[_0x763a[2116]]= null;null!= _0x3536x4[_0x763a[963]]&& this[_0x763a[2135]](_0x3536x4)&& (this[_0x763a[2116]]= _0x3536x4[_0x763a[963]][_0x763a[252]],this[_0x763a[2116]][_0x763a[124]][_0x763a[187]]= _0x763a[188]);var _0x3536x5=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]],_0x3536x5=mxUtils[_0x763a[433]](_0x3536x4[_0x763a[124]],mxConstants.STYLE_FONTSIZE,mxConstants.DEFAULT_FONTSIZE)* _0x3536x5,_0x3536x9=mxUtils[_0x763a[433]](_0x3536x4[_0x763a[124]],mxConstants.STYLE_FONTFAMILY,mxConstants.DEFAULT_FONTFAMILY),_0x3536xa=mxUtils[_0x763a[433]](_0x3536x4[_0x763a[124]],mxConstants.STYLE_FONTCOLOR,_0x763a[586]),_0x3536x12=mxUtils[_0x763a[433]](_0x3536x4[_0x763a[124]],mxConstants.STYLE_ALIGN,mxConstants.ALIGN_LEFT),_0x3536x13=(mxUtils[_0x763a[433]](_0x3536x4[_0x763a[124]],mxConstants.STYLE_FONTSTYLE,0)& mxConstants[_0x763a[1410]])== mxConstants[_0x763a[1410]],_0x3536x14=(mxUtils[_0x763a[433]](_0x3536x4[_0x763a[124]],mxConstants.STYLE_FONTSTYLE,0)& mxConstants[_0x763a[1412]])== mxConstants[_0x763a[1412]],_0x3536x15=(mxUtils[_0x763a[433]](_0x3536x4[_0x763a[124]],mxConstants.STYLE_FONTSTYLE,0)& mxConstants[_0x763a[1414]])== mxConstants[_0x763a[1414]];this[_0x763a[126]][_0x763a[124]][_0x763a[487]]= Math[_0x763a[488]](_0x3536x5)+ _0x763a[168];this[_0x763a[126]][_0x763a[124]][_0x763a[489]]= Math[_0x763a[488]](_0x3536x5* mxConstants[_0x763a[490]])+ _0x763a[168];this[_0x763a[126]][_0x763a[124]][_0x763a[486]]= _0x3536x9;this[_0x763a[126]][_0x763a[124]][_0x763a[1165]]= _0x3536x12;this[_0x763a[126]][_0x763a[124]][_0x763a[352]]= _0x3536xa;this[_0x763a[126]][_0x763a[124]][_0x763a[1452]]= _0x3536x13?_0x763a[1447]:_0x763a[1502];this[_0x763a[126]][_0x763a[124]][_0x763a[666]]= _0x3536x14?_0x763a[1449]:_0x763a[110];this[_0x763a[126]][_0x763a[124]][_0x763a[354]]= _0x3536x15?_0x763a[355]:_0x763a[110];this[_0x763a[126]][_0x763a[124]][_0x763a[277]]= _0x763a[278];this[_0x763a[126]][_0x763a[124]][_0x763a[2136]]= _0x763a[130];this[_0x763a[1562]]= _0x3536x5= this[_0x763a[2137]](_0x3536x4);this[_0x763a[126]][_0x763a[124]][_0x763a[361]]= _0x3536x5[_0x763a[235]]+ _0x763a[168];this[_0x763a[126]][_0x763a[124]][_0x763a[125]]= _0x3536x5[_0x763a[236]]+ _0x763a[168];this[_0x763a[126]][_0x763a[124]][_0x763a[117]]= _0x3536x5[_0x763a[117]]+ _0x763a[168];this[_0x763a[126]][_0x763a[124]][_0x763a[119]]= _0x3536x5[_0x763a[119]]+ _0x763a[168];this[_0x763a[126]][_0x763a[124]][_0x763a[931]]= 5;_0x3536x4= this[_0x763a[2138]](_0x3536x4,_0x3536x3);null== _0x3536x4|| 0== _0x3536x4[_0x763a[67]]?(_0x3536x4= this[_0x763a[2139]](),this[_0x763a[2127]]= !0):this[_0x763a[2127]]= !1;this[_0x763a[2128]](!1);this[_0x763a[126]][_0x763a[131]]= _0x3536x4;this[_0x763a[1179]][_0x763a[526]][_0x763a[62]](this[_0x763a[126]]);_0x763a[130]!= this[_0x763a[126]][_0x763a[124]][_0x763a[495]]&& (this[_0x763a[2114]]&& (this[_0x763a[1653]]= this[_0x763a[2140]](),document[_0x763a[112]][_0x763a[62]](this[_0x763a[1653]]),this[_0x763a[129]]()),this[_0x763a[126]][_0x763a[393]](),this[_0x763a[126]][_0x763a[804]]())}};mxCellEditor[_0x763a[202]][_0x763a[2140]]= function(){var _0x3536x2=document[_0x763a[55]](_0x763a[485]),_0x3536x3=_0x3536x2[_0x763a[124]];_0x3536x3[_0x763a[491]]= _0x763a[492];_0x3536x3[_0x763a[493]]= _0x763a[494];_0x3536x3[_0x763a[187]]= _0x763a[188];_0x3536x3[_0x763a[495]]= mxClient[_0x763a[496]]?_0x763a[497]:_0x763a[498];_0x3536x3[_0x763a[499]]= _0x763a[500];_0x3536x3[_0x763a[123]]= _0x763a[125];_0x3536x3[_0x763a[489]]= this[_0x763a[126]][_0x763a[124]][_0x763a[489]];_0x3536x3[_0x763a[487]]= this[_0x763a[126]][_0x763a[124]][_0x763a[487]];_0x3536x3[_0x763a[486]]= this[_0x763a[126]][_0x763a[124]][_0x763a[486]];_0x3536x3[_0x763a[1452]]= this[_0x763a[126]][_0x763a[124]][_0x763a[1452]];_0x3536x3[_0x763a[1165]]= this[_0x763a[126]][_0x763a[124]][_0x763a[1165]];_0x3536x3[_0x763a[666]]= this[_0x763a[126]][_0x763a[124]][_0x763a[666]];_0x3536x3[_0x763a[354]]= this[_0x763a[126]][_0x763a[124]][_0x763a[354]];return _0x3536x2};mxCellEditor[_0x763a[202]][_0x763a[2126]]= function(_0x3536x2){null!= this[_0x763a[2111]]&& (null!= this[_0x763a[2116]]&& (this[_0x763a[2116]][_0x763a[124]][_0x763a[187]]= _0x763a[189],this[_0x763a[2116]]= null),!_0x3536x2&& this[_0x763a[2133]]()&& this[_0x763a[1179]][_0x763a[850]](this[_0x763a[2111]],this[_0x763a[2141]](),this[_0x763a[2112]]),null!= this[_0x763a[1653]]&& (document[_0x763a[112]][_0x763a[266]](this[_0x763a[1653]]),this[_0x763a[1653]]= null),this[_0x763a[1562]]= this[_0x763a[2112]]= this[_0x763a[2111]]= null,this[_0x763a[126]][_0x763a[2121]](),this[_0x763a[126]][_0x763a[265]][_0x763a[266]](this[_0x763a[126]]))};mxCellEditor[_0x763a[202]][_0x763a[2138]]= function(_0x3536x2,_0x3536x3){return this[_0x763a[1179]][_0x763a[2142]](_0x3536x2[_0x763a[246]],_0x3536x3)};mxCellEditor[_0x763a[202]][_0x763a[2141]]= function(){return this[_0x763a[126]][_0x763a[131]][_0x763a[230]](/\r/g,_0x763a[110])};mxCellEditor[_0x763a[202]][_0x763a[2135]]= function(_0x3536x2){return !0};mxCellEditor[_0x763a[202]][_0x763a[939]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]];return new mxRectangle(0,0,null== _0x3536x2[_0x763a[963]]?30:_0x3536x2[_0x763a[963]][_0x763a[803]]* _0x3536x3+ 20,_0x763a[361]== this[_0x763a[126]][_0x763a[124]][_0x763a[1165]]?120:40)};mxCellEditor[_0x763a[202]][_0x763a[2137]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[502]]()[_0x763a[250]](_0x3536x2[_0x763a[246]]),_0x3536x4=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]],_0x3536x5=this[_0x763a[939]](_0x3536x2),_0x3536x9=_0x3536x5[_0x763a[117]],_0x3536x5=_0x3536x5[_0x763a[119]],_0x3536xa=parseInt(_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2143]]]|| 2)* _0x3536x4,_0x3536x12=parseInt(_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2144]]]|| 0)* _0x3536x4+ _0x3536xa,_0x3536x13=parseInt(_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2145]]]|| 0)* _0x3536x4+ _0x3536xa,_0x3536x14=parseInt(_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2146]]]|| 0)* _0x3536x4+ _0x3536xa,_0x3536x4=parseInt(_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2147]]]|| 0)* _0x3536x4+ _0x3536xa,_0x3536x13= new mxRectangle(_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]],Math[_0x763a[160]](_0x3536x9,_0x3536x2[_0x763a[117]]- _0x3536x4- _0x3536x13),Math[_0x763a[160]](_0x3536x5,_0x3536x2[_0x763a[119]]- _0x3536x12- _0x3536x14));_0x3536x3?(_0x3536x13[_0x763a[235]]= _0x3536x2[_0x763a[2079]][_0x763a[235]],_0x3536x13[_0x763a[236]]= _0x3536x2[_0x763a[2079]][_0x763a[236]],null!= _0x3536x2[_0x763a[963]]&& null!= _0x3536x2[_0x763a[963]][_0x763a[1563]]&& (0< _0x3536x2[_0x763a[963]][_0x763a[1563]][_0x763a[235]]&& (_0x3536x13[_0x763a[235]]= _0x3536x2[_0x763a[963]][_0x763a[1563]][_0x763a[235]]),0< _0x3536x2[_0x763a[963]][_0x763a[1563]][_0x763a[236]]&& (_0x3536x13[_0x763a[236]]= _0x3536x2[_0x763a[963]][_0x763a[1563]][_0x763a[236]]))):null!= _0x3536x2[_0x763a[963]]&& null!= _0x3536x2[_0x763a[963]][_0x763a[1563]]&& (_0x3536x13[_0x763a[235]]= Math[_0x763a[243]](_0x3536x13[_0x763a[235]],_0x3536x2[_0x763a[963]][_0x763a[1563]][_0x763a[235]]),_0x3536x13[_0x763a[236]]= Math[_0x763a[243]](_0x3536x13[_0x763a[236]],_0x3536x2[_0x763a[963]][_0x763a[1563]][_0x763a[236]]));_0x3536x13[_0x763a[235]]+= _0x3536x4;_0x3536x13[_0x763a[236]]+= _0x3536x12;null!= _0x3536x2[_0x763a[963]]&& null!= _0x3536x2[_0x763a[963]][_0x763a[1563]]&& (_0x3536x3?(_0x3536x13[_0x763a[117]]= Math[_0x763a[160]](_0x3536x9,_0x3536x2[_0x763a[963]][_0x763a[1563]][_0x763a[117]]),_0x3536x13[_0x763a[119]]= Math[_0x763a[160]](_0x3536x5,_0x3536x2[_0x763a[963]][_0x763a[1563]][_0x763a[119]])):(_0x3536x13[_0x763a[117]]= Math[_0x763a[160]](_0x3536x13[_0x763a[117]],_0x3536x2[_0x763a[963]][_0x763a[1563]][_0x763a[117]]),_0x3536x13[_0x763a[119]]= Math[_0x763a[160]](_0x3536x13[_0x763a[119]],_0x3536x2[_0x763a[963]][_0x763a[1563]][_0x763a[119]])));this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1193]](_0x3536x2[_0x763a[246]])&& (_0x3536x3= mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER),_0x3536x3== mxConstants[_0x763a[2132]]?_0x3536x13[_0x763a[235]]-= _0x3536x2[_0x763a[117]]:_0x3536x3== mxConstants[_0x763a[480]]&& (_0x3536x13[_0x763a[235]]+= _0x3536x2[_0x763a[117]]),_0x3536x3= mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE),_0x3536x3== mxConstants[_0x763a[1687]]?_0x3536x13[_0x763a[236]]-= _0x3536x2[_0x763a[119]]:_0x3536x3== mxConstants[_0x763a[482]]&& (_0x3536x13[_0x763a[236]]+= _0x3536x2[_0x763a[119]]));return _0x3536x13};mxCellEditor[_0x763a[202]][_0x763a[2139]]= function(_0x3536x2){return this[_0x763a[2115]]};mxCellEditor[_0x763a[202]][_0x763a[2148]]= function(){return this[_0x763a[2111]]};mxCellEditor[_0x763a[202]][_0x763a[515]]= function(){null!= this[_0x763a[126]]&& (mxEvent[_0x763a[762]](this[_0x763a[126]]),null!= this[_0x763a[126]][_0x763a[265]]&& this[_0x763a[126]][_0x763a[265]][_0x763a[266]](this[_0x763a[126]]),this[_0x763a[126]]= null)};function mxCellRenderer(){}mxCellRenderer[_0x763a[202]][_0x763a[2149]]= mxConnector;mxCellRenderer[_0x763a[202]][_0x763a[2150]]= mxRectangleShape;mxCellRenderer[_0x763a[202]][_0x763a[2151]]= mxText;mxCellRenderer[_0x763a[202]][_0x763a[2152]]= !0;mxCellRenderer[_0x763a[202]][_0x763a[2153]]= {};mxCellRenderer[_0x763a[2154]]= function(_0x3536x2,_0x3536x3){mxCellRenderer[_0x763a[202]][_0x763a[2153]][_0x3536x2]= _0x3536x3};mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_RECTANGLE,mxRectangleShape);mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_ELLIPSE,mxEllipse);mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_RHOMBUS,mxRhombus);mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_CYLINDER,mxCylinder);mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_CONNECTOR,mxConnector);mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_ACTOR,mxActor);mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_TRIANGLE,mxTriangle);mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_HEXAGON,mxHexagon);mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_CLOUD,mxCloud);mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_LINE,mxLine);mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_ARROW,mxArrow);mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_DOUBLE_ELLIPSE,mxDoubleEllipse);mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_SWIMLANE,mxSwimlane);mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_IMAGE,mxImageShape);mxCellRenderer[_0x763a[2154]](mxConstants.SHAPE_LABEL,mxLabel);mxCellRenderer[_0x763a[202]][_0x763a[2155]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[502]]();if(null!= _0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[526]]&& null== _0x3536x2[_0x763a[253]]&& _0x3536x2[_0x763a[246]]!= _0x3536x2[_0x763a[441]][_0x763a[1741]]&& (_0x3536x4[_0x763a[1193]](_0x3536x2[_0x763a[246]])|| _0x3536x4[_0x763a[250]](_0x3536x2[_0x763a[246]]))){if(this[_0x763a[2156]](_0x3536x2),null!= _0x3536x2[_0x763a[253]]&& (null== _0x3536x3|| _0x3536x3)){this[_0x763a[2157]](_0x3536x2),_0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[2158]]|| _0x3536x4[_0x763a[250]](_0x3536x2[_0x763a[246]])?_0x3536x2[_0x763a[2081]]= !0:_0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[2159]]&& null!= this[_0x763a[2160]]&& (this[_0x763a[2160]][_0x763a[265]]== _0x3536x2[_0x763a[253]][_0x763a[252]][_0x763a[265]]?this[_0x763a[2161]](_0x3536x2,this[_0x763a[2160]]):this[_0x763a[2160]]= null),_0x3536x2[_0x763a[253]][_0x763a[255]]= _0x3536x2[_0x763a[441]][_0x763a[255]],this[_0x763a[2162]](_0x3536x2),this[_0x763a[2163]](_0x3536x2)}}};mxCellRenderer[_0x763a[202]][_0x763a[2157]]= function(_0x3536x2){_0x3536x2[_0x763a[253]][_0x763a[176]](_0x3536x2[_0x763a[441]][_0x763a[2024]]())};mxCellRenderer[_0x763a[202]][_0x763a[2164]]= function(_0x3536x2,_0x3536x3){for(var _0x3536x4=null,_0x3536x5=_0x3536x2[_0x763a[441]][_0x763a[1179]],_0x3536x9=_0x3536x5[_0x763a[502]](),_0x3536xa=_0x3536x2[_0x763a[246]],_0x3536x12=_0x3536x9[_0x763a[1197]](_0x3536xa);null!= _0x3536x12&& null== _0x3536x4;){_0x3536x4= this[_0x763a[2165]](_0x3536x5,_0x3536x12,_0x3536xa,_0x3536x3),_0x3536xa= _0x3536x12,_0x3536x12= _0x3536x9[_0x763a[1197]](_0x3536xa)};return _0x3536x4};mxCellRenderer[_0x763a[202]][_0x763a[2165]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=null,_0x3536xa=_0x3536x2[_0x763a[502]]();for(_0x3536x4= null!= _0x3536x4?_0x3536x3[_0x763a[1738]](_0x3536x4)- 1:_0x3536xa[_0x763a[262]](_0x3536x3)- 1;0<= _0x3536x4&& null== _0x3536x9;_0x3536x4--){_0x3536x9= this[_0x763a[2165]](_0x3536x2,_0x3536xa[_0x763a[263]](_0x3536x3,_0x3536x4),null,_0x3536x5)};if(null== _0x3536x9&& (_0x3536x9= _0x3536x2[_0x763a[441]][_0x763a[248]](_0x3536x3),null!= _0x3536x9&& (null== _0x3536x9[_0x763a[253]]|| null== _0x3536x9[_0x763a[253]][_0x763a[252]]|| _0x3536x9[_0x763a[253]][_0x763a[252]][_0x763a[265]]!= _0x3536x5))){_0x3536x9= null};return _0x3536x9};mxCellRenderer[_0x763a[202]][_0x763a[2166]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[253]][_0x763a[252]][_0x763a[265]],_0x3536x4=this[_0x763a[2164]](_0x3536x2,_0x3536x3),_0x3536x5=_0x3536x3[_0x763a[285]];null!= _0x3536x4&& (_0x3536x5= _0x3536x4[_0x763a[253]][_0x763a[252]],null!= _0x3536x4[_0x763a[963]]&& (null!= _0x3536x4[_0x763a[963]][_0x763a[252]]&& _0x3536x4[_0x763a[963]][_0x763a[252]][_0x763a[265]]== _0x3536x3)&& (_0x3536x5= _0x3536x4[_0x763a[963]][_0x763a[252]]),_0x3536x5= _0x3536x5[_0x763a[287]]);this[_0x763a[2161]](_0x3536x2,_0x3536x5)};mxCellRenderer[_0x763a[202]][_0x763a[2167]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[441]],_0x3536x4=_0x3536x3[_0x763a[1179]][_0x763a[502]]();if(_0x3536x3[_0x763a[1179]][_0x763a[2159]]){if(null== this[_0x763a[2160]]|| null== this[_0x763a[2160]][_0x763a[265]]|| this[_0x763a[2160]][_0x763a[265]]!= _0x3536x2[_0x763a[253]][_0x763a[252]][_0x763a[265]]){this[_0x763a[2160]]= _0x3536x2[_0x763a[253]][_0x763a[252]]}}else {if(_0x3536x3[_0x763a[1179]][_0x763a[2168]]){var _0x3536x5=_0x3536x2[_0x763a[253]][_0x763a[252]],_0x3536x9=_0x3536x5[_0x763a[265]],_0x3536x4=_0x3536x4[_0x763a[1197]](_0x3536x2[_0x763a[246]]),_0x3536x3=_0x3536x3[_0x763a[248]](_0x3536x4),_0x3536x9=null!= _0x3536x3&& null!= _0x3536x3[_0x763a[253]]&& null!= _0x3536x3[_0x763a[253]][_0x763a[252]]?_0x3536x3[_0x763a[253]][_0x763a[252]][_0x763a[287]]:_0x3536x9[_0x763a[285]];null!= _0x3536x9&& _0x3536x9!= _0x3536x5&& this[_0x763a[2161]](_0x3536x2,_0x3536x9)}}};mxCellRenderer[_0x763a[202]][_0x763a[2161]]= function(_0x3536x2,_0x3536x3){_0x3536x2[_0x763a[253]][_0x763a[252]][_0x763a[265]][_0x763a[950]](_0x3536x2[_0x763a[253]][_0x763a[252]],_0x3536x3);null!= _0x3536x2[_0x763a[963]]&& (null!= _0x3536x2[_0x763a[963]][_0x763a[252]]&& _0x3536x2[_0x763a[963]][_0x763a[252]][_0x763a[265]]== _0x3536x2[_0x763a[253]][_0x763a[252]][_0x763a[265]])&& _0x3536x2[_0x763a[253]][_0x763a[252]][_0x763a[265]][_0x763a[950]](_0x3536x2[_0x763a[963]][_0x763a[252]],_0x3536x2[_0x763a[253]][_0x763a[252]][_0x763a[287]])};mxCellRenderer[_0x763a[202]][_0x763a[2156]]= function(_0x3536x2){if(null!= _0x3536x2[_0x763a[124]]){var _0x3536x3=mxStencilRegistry[_0x763a[1560]](_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2059]]]);null!= _0x3536x3?_0x3536x2[_0x763a[253]]= new mxShape(_0x3536x3):(_0x3536x3= this[_0x763a[2169]](_0x3536x2),_0x3536x2[_0x763a[253]]= new _0x3536x3);_0x3536x2[_0x763a[253]][_0x763a[1525]]= _0x3536x2[_0x763a[439]];_0x3536x2[_0x763a[253]][_0x763a[1562]]= new mxRectangle(_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]],_0x3536x2[_0x763a[117]],_0x3536x2[_0x763a[119]]);_0x3536x2[_0x763a[253]][_0x763a[507]]= _0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[507]];this[_0x763a[2170]](_0x3536x2)}};mxCellRenderer[_0x763a[202]][_0x763a[2171]]= function(_0x3536x2){return null!= _0x3536x2?mxCellRenderer[_0x763a[202]][_0x763a[2153]][_0x3536x2]:null};mxCellRenderer[_0x763a[202]][_0x763a[2169]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[2171]](_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2059]]]);null== _0x3536x3&& (_0x3536x3= _0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[502]]()[_0x763a[250]](_0x3536x2[_0x763a[246]])?this[_0x763a[2149]]:this[_0x763a[2150]]);return _0x3536x3};mxCellRenderer[_0x763a[202]][_0x763a[2170]]= function(_0x3536x2){_0x3536x2[_0x763a[253]][_0x763a[183]](_0x3536x2);_0x3536x2[_0x763a[253]][_0x763a[618]]= _0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[1202]](_0x3536x2);_0x3536x2[_0x763a[253]][_0x763a[630]]= this[_0x763a[2171]](_0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[2172]](_0x3536x2));_0x3536x2[_0x763a[253]][_0x763a[632]]= _0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[2173]](_0x3536x2);_0x3536x2[_0x763a[253]][_0x763a[634]]= _0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[2174]](_0x3536x2);_0x3536x2[_0x763a[253]][_0x763a[638]]= _0x3536x2[_0x763a[124]][mxConstants[_0x763a[2175]]];_0x3536x2[_0x763a[253]][_0x763a[631]]= _0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[2176]](_0x3536x2);this[_0x763a[2177]](_0x3536x2)};mxCellRenderer[_0x763a[202]][_0x763a[2177]]= function(_0x3536x2){null!= _0x3536x2[_0x763a[253]]&& (this[_0x763a[2178]](_0x3536x2,_0x763a[632],mxConstants.STYLE_FILLCOLOR),this[_0x763a[2178]](_0x3536x2,_0x763a[634],mxConstants.STYLE_GRADIENTCOLOR),this[_0x763a[2178]](_0x3536x2,_0x763a[1334],mxConstants.STYLE_FILLCOLOR),this[_0x763a[2178]](_0x3536x2,_0x763a[1336],mxConstants.STYLE_STROKECOLOR),this[_0x763a[2178]](_0x3536x2,_0x763a[1299],mxConstants.STYLE_GRADIENTCOLOR))};mxCellRenderer[_0x763a[202]][_0x763a[2178]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=_0x3536x2[_0x763a[253]][_0x3536x3],_0x3536x9=_0x3536x2[_0x763a[441]][_0x763a[1179]],_0x3536xa=null;_0x763a[1549]== _0x3536x5?_0x3536xa= _0x3536x9[_0x763a[251]][_0x763a[1197]](_0x3536x2[_0x763a[246]]):_0x763a[687]== _0x3536x5?(_0x3536xa= null!= _0x3536x9[_0x763a[251]][_0x763a[1709]](_0x3536x2[_0x763a[246]],!1)?_0x3536x9[_0x763a[251]][_0x763a[1709]](_0x3536x2[_0x763a[246]],!1):_0x3536x2[_0x763a[246]],_0x3536xa= _0x3536x9[_0x763a[2179]](_0x3536xa),_0x3536x4= _0x3536x9[_0x763a[2180]]):_0x763a[2181]== _0x3536x5&& (_0x3536x2[_0x763a[253]][_0x3536x3]= _0x3536x2[_0x763a[253]][_0x763a[632]]);null!= _0x3536xa&& (_0x3536x5= _0x3536x9[_0x763a[249]]()[_0x763a[248]](_0x3536xa),_0x3536x2[_0x763a[253]][_0x3536x3]= null,null!= _0x3536x5&& (_0x3536x2[_0x763a[253]][_0x3536x3]= null!= _0x3536x5[_0x763a[253]]&& _0x763a[632]!= _0x3536x3?_0x3536x5[_0x763a[253]][_0x3536x3]:_0x3536x5[_0x763a[124]][_0x3536x4]))};mxCellRenderer[_0x763a[202]][_0x763a[2182]]= function(_0x3536x2){return _0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[2183]](_0x3536x2[_0x763a[246]])};mxCellRenderer[_0x763a[202]][_0x763a[2184]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x3536x2[_0x763a[441]][_0x763a[1179]];_0x3536x4[_0x763a[502]]()[_0x763a[250]](_0x3536x2[_0x763a[246]]);if(0< _0x3536x2[_0x763a[124]][mxConstants[_0x763a[2185]]]|| null== _0x3536x2[_0x763a[124]][mxConstants[_0x763a[2185]]]){var _0x3536x5=_0x3536x4[_0x763a[2186]](_0x3536x2[_0x763a[246]])|| null!= _0x3536x3&& mxUtils[_0x763a[1331]](_0x3536x3);_0x3536x2[_0x763a[963]]= new this[_0x763a[2151]](_0x3536x3, new mxRectangle,_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2064]]]|| mxConstants[_0x763a[479]],_0x3536x4[_0x763a[2187]](_0x3536x2),_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2069]]],_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2188]]],_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2185]]],_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2189]]],_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2143]]],_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2144]]],_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2145]]],_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2146]]],_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2147]]],_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2190]]],_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2191]]],_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2192]]],_0x3536x4[_0x763a[2131]](_0x3536x2[_0x763a[246]])&& _0x3536x4[_0x763a[2186]](_0x3536x2[_0x763a[246]]),_0x3536x4[_0x763a[2130]](_0x3536x2[_0x763a[246]]),_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2193]]],_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2194]]]);_0x3536x2[_0x763a[963]][_0x763a[461]]= mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_TEXT_OPACITY,100);_0x3536x2[_0x763a[963]][_0x763a[507]]= _0x3536x5?mxConstants[_0x763a[1656]]:_0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[507]];_0x3536x2[_0x763a[963]][_0x763a[724]]= _0x3536x2;this[_0x763a[2195]](_0x3536x2);var _0x3536x9=!1,_0x3536xa=function(_0x3536x3){var _0x3536x5=_0x3536x2;if(mxClient[_0x763a[754]]|| _0x3536x9){_0x3536x5= mxEvent[_0x763a[731]](_0x3536x3),_0x3536x3= mxEvent[_0x763a[733]](_0x3536x3),_0x3536x3= mxUtils[_0x763a[2196]](_0x3536x4[_0x763a[526]],_0x3536x5,_0x3536x3),_0x3536x5= _0x3536x4[_0x763a[441]][_0x763a[248]](_0x3536x4[_0x763a[999]](_0x3536x3[_0x763a[235]],_0x3536x3[_0x763a[236]]))};return _0x3536x5};mxEvent[_0x763a[759]](_0x3536x2[_0x763a[963]][_0x763a[252]],mxUtils[_0x763a[885]](this,function(_0x3536x3){this[_0x763a[2197]](_0x3536x2,_0x3536x3)&& (_0x3536x4[_0x763a[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x3536x3,_0x3536x2)),_0x3536x9= _0x3536x4[_0x763a[507]]!= mxConstants[_0x763a[508]]&& _0x763a[2198]== mxEvent[_0x763a[728]](_0x3536x3)[_0x763a[301]])}),mxUtils[_0x763a[885]](this,function(_0x3536x3){this[_0x763a[2197]](_0x3536x2,_0x3536x3)&& _0x3536x4[_0x763a[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x3536x3,_0x3536xa(_0x3536x3)))}),mxUtils[_0x763a[885]](this,function(_0x3536x3){this[_0x763a[2197]](_0x3536x2,_0x3536x3)&& (_0x3536x4[_0x763a[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x3536x3,_0x3536xa(_0x3536x3))),_0x3536x9= !1)}));mxEvent[_0x763a[169]](_0x3536x2[_0x763a[963]][_0x763a[252]],_0x763a[760],mxUtils[_0x763a[885]](this,function(_0x3536x3){this[_0x763a[2197]](_0x3536x2,_0x3536x3)&& (_0x3536x4[_0x763a[761]](_0x3536x3,_0x3536x2[_0x763a[246]]),mxEvent[_0x763a[722]](_0x3536x3))}))}};mxCellRenderer[_0x763a[202]][_0x763a[2195]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[441]][_0x763a[1179]];_0x3536x2[_0x763a[963]][_0x763a[507]]!= mxConstants[_0x763a[508]]&& (mxClient[_0x763a[48]]&& mxClient[_0x763a[2199]]?_0x3536x2[_0x763a[963]][_0x763a[176]](_0x3536x3[_0x763a[526]]):mxUtils[_0x763a[458]](_0x3536x2[_0x763a[441]][_0x763a[2024]]())&& (null!= _0x3536x2[_0x763a[253]][_0x763a[685]]?_0x3536x2[_0x763a[963]][_0x763a[176]](_0x3536x2[_0x763a[253]][_0x763a[685]]):_0x3536x2[_0x763a[963]][_0x763a[176]](_0x3536x2[_0x763a[253]][_0x763a[252]])));null== _0x3536x2[_0x763a[963]][_0x763a[252]]&& (_0x3536x2[_0x763a[963]][_0x763a[176]](_0x3536x2[_0x763a[441]][_0x763a[2024]]()),null!= _0x3536x2[_0x763a[253]]&& null!= _0x3536x2[_0x763a[963]]&& _0x3536x2[_0x763a[253]][_0x763a[252]][_0x763a[265]][_0x763a[950]](_0x3536x2[_0x763a[963]][_0x763a[252]],_0x3536x2[_0x763a[253]][_0x763a[252]][_0x763a[287]]))};mxCellRenderer[_0x763a[202]][_0x763a[2162]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[2200]](_0x3536x2[_0x763a[246]]),_0x3536x4=null;if(null!= _0x3536x3){for(var _0x3536x4= new mxDictionary,_0x3536x5=0;_0x3536x5< _0x3536x3[_0x763a[67]];_0x3536x5++){var _0x3536x9=null!= _0x3536x2[_0x763a[1211]]?_0x3536x2[_0x763a[1211]][_0x763a[205]](_0x3536x3[_0x3536x5]):null;null== _0x3536x9&& (_0x3536x9= new mxImageShape( new mxRectangle,_0x3536x3[_0x3536x5][_0x763a[618]][_0x763a[390]]),_0x3536x9[_0x763a[507]]= _0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[507]],_0x3536x9[_0x763a[1674]]= !1,_0x3536x9[_0x763a[2201]]= _0x3536x3[_0x3536x5],this[_0x763a[2023]](_0x3536x2,_0x3536x9),this[_0x763a[2202]](_0x3536x2,_0x3536x3[_0x3536x5],_0x3536x9),null!= _0x3536x3[_0x3536x5][_0x763a[270]]&& (_0x3536x9[_0x763a[252]][_0x763a[124]][_0x763a[270]]= _0x3536x3[_0x3536x5][_0x763a[270]]));_0x3536x4[_0x763a[204]](_0x3536x3[_0x3536x5],_0x3536x9)}};null!= _0x3536x2[_0x763a[1211]]&& _0x3536x2[_0x763a[1211]][_0x763a[209]](function(_0x3536x2,_0x3536x3){_0x3536x3[_0x763a[515]]()});_0x3536x2[_0x763a[1211]]= _0x3536x4};mxCellRenderer[_0x763a[202]][_0x763a[2023]]= function(_0x3536x2,_0x3536x3){_0x3536x3[_0x763a[176]](_0x3536x2[_0x763a[441]][_0x763a[1524]]())};mxCellRenderer[_0x763a[202]][_0x763a[2202]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=_0x3536x2[_0x763a[441]][_0x763a[1179]];mxEvent[_0x763a[169]](_0x3536x4[_0x763a[252]],_0x763a[173],function(_0x3536x4){_0x3536x5[_0x763a[2203]]()&& _0x3536x5[_0x763a[2126]](!_0x3536x5[_0x763a[2134]]());_0x3536x3[_0x763a[746]]( new mxEventObject(mxEvent.CLICK,_0x763a[763],_0x3536x4,_0x763a[246],_0x3536x2[_0x763a[246]]))});mxEvent[_0x763a[759]](_0x3536x4[_0x763a[252]],function(_0x3536x2){mxEvent[_0x763a[722]](_0x3536x2)},function(_0x3536x3){_0x3536x5[_0x763a[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x3536x3,_0x3536x2))});mxClient[_0x763a[754]]&& mxEvent[_0x763a[169]](_0x3536x4[_0x763a[252]],_0x763a[757],function(_0x3536x4){_0x3536x3[_0x763a[746]]( new mxEventObject(mxEvent.CLICK,_0x763a[763],_0x3536x4,_0x763a[246],_0x3536x2[_0x763a[246]]))})};mxCellRenderer[_0x763a[202]][_0x763a[2204]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[441]][_0x763a[1179]],_0x3536x4=_0x3536x3[_0x763a[2205]](_0x3536x2);if(_0x3536x3[_0x763a[2206]]&& null!= _0x3536x4){if(null== _0x3536x2[_0x763a[2207]]){var _0x3536x5= new mxRectangle(0,0,_0x3536x4[_0x763a[117]],_0x3536x4[_0x763a[119]]);_0x3536x2[_0x763a[2207]]= new mxImageShape(_0x3536x5,_0x3536x4[_0x763a[390]]);_0x3536x2[_0x763a[2207]][_0x763a[1674]]= !1;_0x3536x2[_0x763a[2207]][_0x763a[507]]= _0x3536x3[_0x763a[507]];this[_0x763a[2208]](_0x3536x2,_0x3536x2[_0x763a[2207]],!0,function(_0x3536x4){if(_0x3536x3[_0x763a[994]]()){var _0x3536x5=!_0x3536x3[_0x763a[1742]](_0x3536x2[_0x763a[246]]);_0x3536x3[_0x763a[847]](_0x3536x5,!1,[_0x3536x2[_0x763a[246]]]);mxEvent[_0x763a[722]](_0x3536x4)}})}}else {null!= _0x3536x2[_0x763a[2207]]&& (_0x3536x2[_0x763a[2207]][_0x763a[515]](),_0x3536x2[_0x763a[2207]]= null)}};mxCellRenderer[_0x763a[202]][_0x763a[2208]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=_0x3536x2[_0x763a[441]][_0x763a[1179]];_0x3536x9[_0x763a[2186]](_0x3536x2[_0x763a[246]])&& mxClient[_0x763a[2199]]&& _0x3536x9[_0x763a[507]]== mxConstants[_0x763a[508]]?(_0x3536x3[_0x763a[507]]= mxConstants[_0x763a[2209]],_0x3536x3[_0x763a[176]](_0x3536x9[_0x763a[526]]),_0x3536x3[_0x763a[252]][_0x763a[124]][_0x763a[931]]= 1):_0x3536x3[_0x763a[176]](_0x3536x2[_0x763a[441]][_0x763a[1524]]());_0x3536x3= _0x3536x3[_0x763a[2210]]|| _0x3536x3[_0x763a[252]];_0x3536x5&& (_0x3536x9[_0x763a[994]]()&& (_0x3536x3[_0x763a[124]][_0x763a[270]]= _0x763a[356]),mxEvent[_0x763a[169]](_0x3536x3,_0x763a[173],_0x3536x5));_0x3536x4&& mxEvent[_0x763a[759]](_0x3536x3,function(_0x3536x3){_0x3536x9[_0x763a[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x3536x3,_0x3536x2));mxEvent[_0x763a[722]](_0x3536x3)},function(_0x3536x3){_0x3536x9[_0x763a[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x3536x3,_0x3536x2))});return _0x3536x3};mxCellRenderer[_0x763a[202]][_0x763a[2211]]= function(_0x3536x2,_0x3536x3){return !0};mxCellRenderer[_0x763a[202]][_0x763a[2197]]= function(_0x3536x2,_0x3536x3){return !0};mxCellRenderer[_0x763a[202]][_0x763a[2163]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[441]][_0x763a[1179]],_0x3536x4=function(_0x3536x4){var _0x3536x5=_0x3536x2;if(_0x3536x3[_0x763a[507]]!= mxConstants[_0x763a[508]]&& _0x763a[2198]== mxEvent[_0x763a[728]](_0x3536x4)[_0x763a[301]]|| mxClient[_0x763a[754]]){_0x3536x5= mxEvent[_0x763a[731]](_0x3536x4),_0x3536x4= mxEvent[_0x763a[733]](_0x3536x4),_0x3536x4= mxUtils[_0x763a[2196]](_0x3536x3[_0x763a[526]],_0x3536x5,_0x3536x4),_0x3536x5= _0x3536x3[_0x763a[441]][_0x763a[248]](_0x3536x3[_0x763a[999]](_0x3536x4[_0x763a[235]],_0x3536x4[_0x763a[236]]))};return _0x3536x5},_0x3536x5=!1;mxEvent[_0x763a[169]](_0x3536x2[_0x763a[253]][_0x763a[252]],_0x763a[2212],mxUtils[_0x763a[885]](this,function(_0x3536x2){_0x3536x3[_0x763a[2213]]= 0;_0x3536x5= !0;mxEvent[_0x763a[722]](_0x3536x2)}));mxEvent[_0x763a[759]](_0x3536x2[_0x763a[253]][_0x763a[252]],mxUtils[_0x763a[885]](this,function(_0x3536x4){this[_0x763a[2211]](_0x3536x2,_0x3536x4)&& !_0x3536x5?_0x3536x3[_0x763a[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x3536x4,null!= _0x3536x2[_0x763a[253]]&& mxEvent[_0x763a[728]](_0x3536x4)== _0x3536x2[_0x763a[253]][_0x763a[905]]?null:_0x3536x2)):_0x3536x5&& mxEvent[_0x763a[722]](_0x3536x4)}),mxUtils[_0x763a[885]](this,function(_0x3536x9){this[_0x763a[2211]](_0x3536x2,_0x3536x9)&& !_0x3536x5?_0x3536x3[_0x763a[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x3536x9,null!= _0x3536x2[_0x763a[253]]&& mxEvent[_0x763a[728]](_0x3536x9)== _0x3536x2[_0x763a[253]][_0x763a[905]]?null:_0x3536x4(_0x3536x9))):_0x3536x5&& mxEvent[_0x763a[722]](_0x3536x9)}),mxUtils[_0x763a[885]](this,function(_0x3536x9){this[_0x763a[2211]](_0x3536x2,_0x3536x9)&& !_0x3536x5?_0x3536x3[_0x763a[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x3536x9,null!= _0x3536x2[_0x763a[253]]&& mxEvent[_0x763a[728]](_0x3536x9)== _0x3536x2[_0x763a[253]][_0x763a[905]]?null:_0x3536x4(_0x3536x9))):_0x3536x5&& mxEvent[_0x763a[722]](_0x3536x9)}));var _0x3536x9=mxClient[_0x763a[754]]?_0x763a[2214]:_0x763a[760];mxEvent[_0x763a[169]](_0x3536x2[_0x763a[253]][_0x763a[252]],_0x3536x9,mxUtils[_0x763a[885]](this,function(_0x3536x4){_0x3536x5= !1;_0x763a[2214]== _0x3536x9?(_0x3536x3[_0x763a[2213]]= 0,_0x3536x3[_0x763a[2215]]&& (_0x3536x3[_0x763a[2216]](_0x3536x2,_0x3536x4),mxEvent[_0x763a[722]](_0x3536x4))):this[_0x763a[2211]](_0x3536x2,_0x3536x4)&& (_0x3536x3[_0x763a[761]](_0x3536x4,null!= _0x3536x2[_0x763a[253]]&& mxEvent[_0x763a[728]](_0x3536x4)== _0x3536x2[_0x763a[253]][_0x763a[905]]?null:_0x3536x2[_0x763a[246]]),mxEvent[_0x763a[722]](_0x3536x4))}))};mxCellRenderer[_0x763a[202]][_0x763a[2217]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[2182]](_0x3536x2);if(null== _0x3536x2[_0x763a[963]]&& null!= _0x3536x4&& (mxUtils[_0x763a[1331]](_0x3536x4)|| 0< _0x3536x4[_0x763a[67]])){this[_0x763a[2184]](_0x3536x2,_0x3536x4)}else {if(null!= _0x3536x2[_0x763a[963]]&& (null== _0x3536x4|| 0== _0x3536x4[_0x763a[67]])){_0x3536x2[_0x763a[963]][_0x763a[515]](),_0x3536x2[_0x763a[963]]= null}};if(null!= _0x3536x2[_0x763a[963]]){var _0x3536x5=_0x3536x2[_0x763a[441]][_0x763a[1179]],_0x3536x9=_0x3536x5[_0x763a[2131]](_0x3536x2[_0x763a[246]]),_0x3536x5=_0x3536x5[_0x763a[2130]](_0x3536x2[_0x763a[246]]),_0x3536xa=this[_0x763a[2218]](_0x3536x2);if(_0x3536x3|| _0x3536x2[_0x763a[963]][_0x763a[131]]!= _0x3536x4|| _0x3536x2[_0x763a[963]][_0x763a[2131]]!= _0x3536x9|| _0x3536x2[_0x763a[963]][_0x763a[2219]]!= _0x3536x5|| _0x3536x2[_0x763a[963]][_0x763a[255]]!= _0x3536x2[_0x763a[441]][_0x763a[255]]|| !_0x3536x2[_0x763a[963]][_0x763a[1562]][_0x763a[237]](_0x3536xa)){_0x3536x2[_0x763a[963]][_0x763a[131]]= _0x3536x4,_0x3536x2[_0x763a[963]][_0x763a[1562]]= _0x3536xa,_0x3536x2[_0x763a[963]][_0x763a[255]]= this[_0x763a[2220]](_0x3536x2),_0x3536x2[_0x763a[963]][_0x763a[2131]]= _0x3536x9,_0x3536x2[_0x763a[963]][_0x763a[2219]]= _0x3536x5,_0x3536x2[_0x763a[963]][_0x763a[258]]()}}};mxCellRenderer[_0x763a[202]][_0x763a[2220]]= function(_0x3536x2){return _0x3536x2[_0x763a[441]][_0x763a[255]]};mxCellRenderer[_0x763a[202]][_0x763a[2218]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[441]][_0x763a[1179]],_0x3536x4=_0x3536x2[_0x763a[441]][_0x763a[255]],_0x3536x5=_0x3536x3[_0x763a[502]]()[_0x763a[250]](_0x3536x2[_0x763a[246]]),_0x3536x9= new mxRectangle(_0x3536x2[_0x763a[2079]][_0x763a[235]],_0x3536x2[_0x763a[2079]][_0x763a[236]]);_0x3536x2[_0x763a[963]][_0x763a[1672]]();_0x3536x5?(_0x3536x5= _0x3536x2[_0x763a[963]][_0x763a[1673]](),_0x3536x9[_0x763a[235]]+= _0x3536x5[_0x763a[235]]* _0x3536x4,_0x3536x9[_0x763a[236]]+= _0x3536x5[_0x763a[236]]* _0x3536x4,_0x3536x3= _0x3536x3[_0x763a[1198]](_0x3536x2[_0x763a[246]]),null!= _0x3536x3&& (_0x3536x9[_0x763a[117]]= Math[_0x763a[160]](0,_0x3536x2[_0x763a[963]][_0x763a[1655]][_0x763a[235]]* _0x3536x3[_0x763a[117]]* _0x3536x4- _0x3536x2[_0x763a[963]][_0x763a[659]]* _0x3536x4- _0x3536x2[_0x763a[963]][_0x763a[661]]* _0x3536x4),_0x3536x9[_0x763a[119]]= Math[_0x763a[160]](0,_0x3536x2[_0x763a[963]][_0x763a[1655]][_0x763a[236]]* _0x3536x3[_0x763a[119]]* _0x3536x4- _0x3536x2[_0x763a[963]][_0x763a[658]]* _0x3536x4- _0x3536x2[_0x763a[963]][_0x763a[660]]* _0x3536x4))):(_0x3536x2[_0x763a[963]][_0x763a[1590]]()&& (_0x3536x5= _0x3536x9[_0x763a[235]],_0x3536x9[_0x763a[235]]= _0x3536x9[_0x763a[236]],_0x3536x9[_0x763a[236]]= _0x3536x5),_0x3536x9[_0x763a[235]]+= _0x3536x2[_0x763a[235]],_0x3536x9[_0x763a[236]]+= _0x3536x2[_0x763a[236]],_0x3536x9[_0x763a[117]]= Math[_0x763a[160]](1,_0x3536x2[_0x763a[117]]),_0x3536x9[_0x763a[119]]= Math[_0x763a[160]](1,_0x3536x2[_0x763a[119]]),_0x3536x3[_0x763a[1730]](_0x3536x2[_0x763a[246]])&& (_0x3536x3= _0x3536x3[_0x763a[1731]](_0x3536x2[_0x763a[246]]),0< _0x3536x3[_0x763a[117]]?(_0x3536x5= Math[_0x763a[243]](_0x3536x9[_0x763a[117]],_0x3536x3[_0x763a[117]]* _0x3536x4),_0x3536x2[_0x763a[253]][_0x763a[623]]&& (_0x3536x9[_0x763a[235]]+= _0x3536x9[_0x763a[117]]- _0x3536x5),_0x3536x9[_0x763a[117]]= _0x3536x5):0< _0x3536x3[_0x763a[119]]&& (_0x3536x5= Math[_0x763a[243]](_0x3536x9[_0x763a[119]],_0x3536x3[_0x763a[119]]* _0x3536x4),_0x3536x2[_0x763a[253]][_0x763a[624]]&& (_0x3536x9[_0x763a[236]]+= _0x3536x9[_0x763a[119]]- _0x3536x5),_0x3536x9[_0x763a[119]]= _0x3536x5)),this[_0x763a[2221]](_0x3536x2,_0x3536x9));return _0x3536x9};mxCellRenderer[_0x763a[202]][_0x763a[2221]]= function(_0x3536x2,_0x3536x3){if(_0x3536x2[_0x763a[963]][_0x763a[1590]]()){var _0x3536x4=(_0x3536x2[_0x763a[117]]- _0x3536x2[_0x763a[119]])/ 2;_0x3536x3[_0x763a[235]]+= _0x3536x4;_0x3536x3[_0x763a[236]]-= _0x3536x4;_0x3536x4= _0x3536x3[_0x763a[117]];_0x3536x3[_0x763a[117]]= _0x3536x3[_0x763a[119]];_0x3536x3[_0x763a[119]]= _0x3536x4};_0x3536x3[_0x763a[235]]-= _0x3536x2[_0x763a[963]][_0x763a[1655]][_0x763a[235]]* _0x3536x3[_0x763a[117]];_0x3536x3[_0x763a[236]]-= _0x3536x2[_0x763a[963]][_0x763a[1655]][_0x763a[236]]* _0x3536x3[_0x763a[119]];if(_0x763a[1334]!= _0x3536x2[_0x763a[124]][mxConstants[_0x763a[2193]]]){var _0x3536x4=_0x3536x2[_0x763a[441]][_0x763a[255]],_0x3536x5=_0x3536x2[_0x763a[963]][_0x763a[1673]]();_0x3536x3[_0x763a[235]]+= _0x3536x5[_0x763a[235]]* _0x3536x4;_0x3536x3[_0x763a[236]]+= _0x3536x5[_0x763a[236]]* _0x3536x4;_0x3536x3[_0x763a[117]]= Math[_0x763a[160]](0,_0x3536x3[_0x763a[117]]- _0x3536x2[_0x763a[963]][_0x763a[659]]* _0x3536x4- _0x3536x2[_0x763a[963]][_0x763a[661]]* _0x3536x4);_0x3536x3[_0x763a[119]]= Math[_0x763a[160]](0,_0x3536x3[_0x763a[119]]- _0x3536x2[_0x763a[963]][_0x763a[658]]* _0x3536x4- _0x3536x2[_0x763a[963]][_0x763a[660]]* _0x3536x4)};var _0x3536x9=_0x3536x2[_0x763a[963]][_0x763a[1615]]();if(0!= _0x3536x9&& (null!= _0x3536x2&& _0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[251]][_0x763a[1193]](_0x3536x2[_0x763a[246]]))&& (_0x3536x4= _0x3536x2[_0x763a[241]](),_0x3536x5= _0x3536x2[_0x763a[242]](),_0x3536x3[_0x763a[235]]!= _0x3536x4|| _0x3536x3[_0x763a[236]]!= _0x3536x5)){_0x3536x9*= Math[_0x763a[424]]/ 180,pt= mxUtils[_0x763a[432]]( new mxPoint(_0x3536x3[_0x763a[235]],_0x3536x3[_0x763a[236]]),Math[_0x763a[426]](_0x3536x9),Math[_0x763a[427]](_0x3536x9), new mxPoint(_0x3536x4,_0x3536x5)),_0x3536x3[_0x763a[235]]= pt[_0x763a[235]],_0x3536x3[_0x763a[236]]= pt[_0x763a[236]]}};mxCellRenderer[_0x763a[202]][_0x763a[2222]]= function(_0x3536x2,_0x3536x3){this[_0x763a[2162]](_0x3536x2);if(null!= _0x3536x2[_0x763a[1211]]){var _0x3536x4=mxUtils[_0x763a[1454]](mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_ROTATION,0),90),_0x3536x5=mxUtils[_0x763a[431]](_0x3536x4),_0x3536x9=Math[_0x763a[426]](_0x3536x5),_0x3536xa=Math[_0x763a[427]](_0x3536x5);_0x3536x2[_0x763a[1211]][_0x763a[209]](function(_0x3536x5,_0x3536x13){var _0x3536x14=_0x3536x13[_0x763a[2201]][_0x763a[1799]](_0x3536x2);if(!_0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[502]]()[_0x763a[250]](_0x3536x2[_0x763a[246]])&& null!= _0x3536x2[_0x763a[253]]&& 0!= _0x3536x4){var _0x3536x15=_0x3536x14[_0x763a[241]](),_0x3536x16=_0x3536x14[_0x763a[242]](),_0x3536x16=mxUtils[_0x763a[432]]( new mxPoint(_0x3536x15,_0x3536x16),_0x3536x9,_0x3536xa, new mxPoint(_0x3536x2[_0x763a[241]](),_0x3536x2[_0x763a[242]]())),_0x3536x15=_0x3536x16[_0x763a[235]],_0x3536x16=_0x3536x16[_0x763a[236]];_0x3536x14[_0x763a[235]]= Math[_0x763a[488]](_0x3536x15- _0x3536x14[_0x763a[117]]/ 2);_0x3536x14[_0x763a[236]]= Math[_0x763a[488]](_0x3536x16- _0x3536x14[_0x763a[119]]/ 2)};if(_0x3536x3|| null== _0x3536x13[_0x763a[1562]]|| _0x3536x13[_0x763a[255]]!= _0x3536x2[_0x763a[441]][_0x763a[255]]|| !_0x3536x13[_0x763a[1562]][_0x763a[237]](_0x3536x14)){_0x3536x13[_0x763a[1562]]= _0x3536x14,_0x3536x13[_0x763a[255]]= _0x3536x2[_0x763a[441]][_0x763a[255]],_0x3536x13[_0x763a[258]]()}})}};mxCellRenderer[_0x763a[202]][_0x763a[2223]]= function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2[_0x763a[2207]]){var _0x3536x4=this[_0x763a[2224]](_0x3536x2),_0x3536x5=this[_0x763a[2152]]?mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_ROTATION,0):_0x3536x2[_0x763a[253]][_0x763a[1615]](),_0x3536x9=_0x3536x2[_0x763a[441]][_0x763a[255]];if(_0x3536x3|| _0x3536x2[_0x763a[2207]][_0x763a[255]]!= _0x3536x9|| !_0x3536x2[_0x763a[2207]][_0x763a[1562]][_0x763a[237]](_0x3536x4)|| _0x3536x2[_0x763a[2207]][_0x763a[603]]!= _0x3536x5){_0x3536x2[_0x763a[2207]][_0x763a[603]]= _0x3536x5,_0x3536x2[_0x763a[2207]][_0x763a[1562]]= _0x3536x4,_0x3536x2[_0x763a[2207]][_0x763a[255]]= _0x3536x9,_0x3536x2[_0x763a[2207]][_0x763a[258]]()}}};mxCellRenderer[_0x763a[202]][_0x763a[2224]]= function(_0x3536x2){if(null!= _0x3536x2[_0x763a[2207]]){var _0x3536x3=_0x3536x2[_0x763a[2207]][_0x763a[255]],_0x3536x4=_0x3536x2[_0x763a[2207]][_0x763a[1562]][_0x763a[117]]/ _0x3536x3,_0x3536x3=_0x3536x2[_0x763a[2207]][_0x763a[1562]][_0x763a[119]]/ _0x3536x3,_0x3536x5=_0x3536x2[_0x763a[441]][_0x763a[255]],_0x3536x9=_0x3536x2[_0x763a[241]](),_0x3536xa=_0x3536x2[_0x763a[242]]();if(!_0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[502]]()[_0x763a[250]](_0x3536x2[_0x763a[246]])&& (_0x3536x9= _0x3536x2[_0x763a[235]]+ _0x3536x4* _0x3536x5,_0x3536xa= _0x3536x2[_0x763a[236]]+ _0x3536x3* _0x3536x5,null!= _0x3536x2[_0x763a[253]])){var _0x3536x12=_0x3536x2[_0x763a[253]][_0x763a[1598]]();if(this[_0x763a[2152]]){_0x3536x12= mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_ROTATION,0)}else {if(_0x3536x2[_0x763a[253]][_0x763a[1590]]()){var _0x3536x13=(_0x3536x2[_0x763a[117]]- _0x3536x2[_0x763a[119]])/ 2,_0x3536x9=_0x3536x9+ _0x3536x13,_0x3536xa=_0x3536xa- _0x3536x13}};0!= _0x3536x12&& (_0x3536x13= mxUtils[_0x763a[431]](_0x3536x12),_0x3536x12= Math[_0x763a[426]](_0x3536x13),_0x3536x13= Math[_0x763a[427]](_0x3536x13),_0x3536xa= mxUtils[_0x763a[432]]( new mxPoint(_0x3536x9,_0x3536xa),_0x3536x12,_0x3536x13, new mxPoint(_0x3536x2[_0x763a[241]](),_0x3536x2[_0x763a[242]]())),_0x3536x9= _0x3536xa[_0x763a[235]],_0x3536xa= _0x3536xa[_0x763a[236]])};return _0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[502]]()[_0x763a[250]](_0x3536x2[_0x763a[246]]), new mxRectangle(Math[_0x763a[488]](_0x3536x9- _0x3536x4/ 2* _0x3536x5),Math[_0x763a[488]](_0x3536xa- _0x3536x3/ 2* _0x3536x5),Math[_0x763a[488]](_0x3536x4* _0x3536x5),Math[_0x763a[488]](_0x3536x3* _0x3536x5))};return null};mxCellRenderer[_0x763a[202]][_0x763a[258]]= function(_0x3536x2,_0x3536x3,_0x3536x4){if(null!= _0x3536x2[_0x763a[253]]){var _0x3536x5=!1;_0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[502]]()[_0x763a[250]](_0x3536x2[_0x763a[246]]);reconfigure= null!= _0x3536x3?_0x3536x3:!1;this[_0x763a[2204]](_0x3536x2);if(_0x3536x2[_0x763a[2082]]|| _0x3536x2[_0x763a[2081]]){_0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[2158]]?this[_0x763a[2166]](_0x3536x2):this[_0x763a[2167]](_0x3536x2)};if(_0x3536x2[_0x763a[2082]]|| !mxUtils[_0x763a[2225]](_0x3536x2[_0x763a[253]][_0x763a[124]],_0x3536x2[_0x763a[124]])){this[_0x763a[2170]](_0x3536x2),_0x3536x3= !0};delete _0x3536x2[_0x763a[2081]];delete _0x3536x2[_0x763a[2082]];if(_0x3536x3|| null== _0x3536x2[_0x763a[253]][_0x763a[1562]]|| _0x3536x2[_0x763a[253]][_0x763a[255]]!= _0x3536x2[_0x763a[441]][_0x763a[255]]|| !_0x3536x2[_0x763a[253]][_0x763a[1562]][_0x763a[237]](_0x3536x2)|| !mxUtils[_0x763a[2226]](_0x3536x2[_0x763a[253]][_0x763a[1525]],_0x3536x2[_0x763a[439]])){_0x3536x5= !0,_0x3536x2[_0x763a[253]][_0x763a[1525]]= null!= _0x3536x2[_0x763a[439]]?_0x3536x2[_0x763a[439]][_0x763a[1853]]():null,_0x3536x2[_0x763a[253]][_0x763a[1562]]= new mxRectangle(_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]],_0x3536x2[_0x763a[117]],_0x3536x2[_0x763a[119]]),_0x3536x2[_0x763a[253]][_0x763a[255]]= _0x3536x2[_0x763a[441]][_0x763a[255]],null== _0x3536x4|| _0x3536x4?_0x3536x2[_0x763a[253]][_0x763a[258]]():_0x3536x2[_0x763a[253]][_0x763a[1577]]()};if(null== _0x3536x4|| _0x3536x4){this[_0x763a[2217]](_0x3536x2,_0x3536x5),this[_0x763a[2222]](_0x3536x2,_0x3536x5),this[_0x763a[2223]](_0x3536x2,_0x3536x5)}}};mxCellRenderer[_0x763a[202]][_0x763a[515]]= function(_0x3536x2){null!= _0x3536x2[_0x763a[253]]&& (null!= _0x3536x2[_0x763a[963]]&& (_0x3536x2[_0x763a[963]][_0x763a[515]](),_0x3536x2[_0x763a[963]]= null),null!= _0x3536x2[_0x763a[1211]]&& (_0x3536x2[_0x763a[1211]][_0x763a[209]](function(_0x3536x2,_0x3536x4){_0x3536x4[_0x763a[515]]()}),_0x3536x2[_0x763a[1211]]= null),null!= _0x3536x2[_0x763a[2207]]&& (_0x3536x2[_0x763a[2207]][_0x763a[515]](),_0x3536x2[_0x763a[2207]]= null),_0x3536x2[_0x763a[253]][_0x763a[515]](),_0x3536x2[_0x763a[253]]= null)};var mxEdgeStyle={EntityRelation:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=_0x3536x2[_0x763a[441]],_0x3536x12=_0x3536xa[_0x763a[1179]];_0x3536x5= mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_SEGMENT,mxConstants.ENTITY_SEGMENT)* _0x3536xa[_0x763a[255]];var _0x3536x13=_0x3536x2[_0x763a[439]],_0x3536x14=_0x3536x13[0],_0x3536x15=_0x3536x13[_0x3536x13[_0x763a[67]]- 1],_0x3536x13=!1;if(null!= _0x3536x14){_0x3536x3= new mxCellState,_0x3536x3[_0x763a[235]]= _0x3536x14[_0x763a[235]],_0x3536x3[_0x763a[236]]= _0x3536x14[_0x763a[236]]}else {if(null!= _0x3536x3){var _0x3536x16=mxUtils[_0x763a[2227]](_0x3536x3,_0x3536x2,!0,mxConstants.DIRECTION_MASK_NONE);_0x3536x16!= mxConstants[_0x763a[434]]?_0x3536x13= _0x3536x16== mxConstants[_0x763a[436]]:(_0x3536x14= _0x3536x12[_0x763a[1198]](_0x3536x3[_0x763a[246]]),_0x3536x14[_0x763a[1500]]?_0x3536x13= 0.5>= _0x3536x14[_0x763a[235]]:null!= _0x3536x4&& (_0x3536x13= _0x3536x4[_0x763a[235]]+ _0x3536x4[_0x763a[117]]< _0x3536x3[_0x763a[235]]))}else {return}};_0x3536x14= !0;null!= _0x3536x15?(_0x3536x4= new mxCellState,_0x3536x4[_0x763a[235]]= _0x3536x15[_0x763a[235]],_0x3536x4[_0x763a[236]]= _0x3536x15[_0x763a[236]]):null!= _0x3536x4&& (_0x3536x16= mxUtils[_0x763a[2227]](_0x3536x4,_0x3536x2,!1,mxConstants.DIRECTION_MASK_NONE),_0x3536x16!= mxConstants[_0x763a[434]]?_0x3536x14= _0x3536x16== mxConstants[_0x763a[436]]:(_0x3536x2= _0x3536x12[_0x763a[1198]](_0x3536x4[_0x763a[246]]),_0x3536x2[_0x763a[1500]]?_0x3536x14= 0.5>= _0x3536x2[_0x763a[235]]:null!= _0x3536x3&& (_0x3536x14= _0x3536x3[_0x763a[235]]+ _0x3536x3[_0x763a[117]]< _0x3536x4[_0x763a[235]])));null!= _0x3536x3&& null!= _0x3536x4&& (_0x3536x2= _0x3536x13?_0x3536x3[_0x763a[235]]:_0x3536x3[_0x763a[235]]+ _0x3536x3[_0x763a[117]],_0x3536x3= _0x3536xa[_0x763a[2228]](_0x3536x3),_0x3536x12= _0x3536x14?_0x3536x4[_0x763a[235]]:_0x3536x4[_0x763a[235]]+ _0x3536x4[_0x763a[117]],_0x3536x4= _0x3536xa[_0x763a[2228]](_0x3536x4),_0x3536xa= new mxPoint(_0x3536x2+ (_0x3536x13?-_0x3536x5:_0x3536x5),_0x3536x3),_0x3536x15= new mxPoint(_0x3536x12+ (_0x3536x14?-_0x3536x5:_0x3536x5),_0x3536x4),_0x3536x13== _0x3536x14?(_0x3536x5= _0x3536x13?Math[_0x763a[243]](_0x3536x2,_0x3536x12)- _0x3536x5:Math[_0x763a[160]](_0x3536x2,_0x3536x12)+ _0x3536x5,_0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x5,_0x3536x3)),_0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x5,_0x3536x4))):(_0x3536xa[_0x763a[235]]< _0x3536x15[_0x763a[235]]== _0x3536x13?(_0x3536x5= _0x3536x3+ (_0x3536x4- _0x3536x3)/ 2,_0x3536x9[_0x763a[207]](_0x3536xa),_0x3536x9[_0x763a[207]]( new mxPoint(_0x3536xa[_0x763a[235]],_0x3536x5)),_0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x15[_0x763a[235]],_0x3536x5))):_0x3536x9[_0x763a[207]](_0x3536xa),_0x3536x9[_0x763a[207]](_0x3536x15)))},Loop:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){if(null!= _0x3536x3){_0x3536x4= _0x3536x2[_0x763a[441]];var _0x3536xa=_0x3536x4[_0x763a[1179]];_0x3536x5= null!= _0x3536x5&& 0< _0x3536x5[_0x763a[67]]?_0x3536x5[0]:null;null!= _0x3536x5&& (_0x3536x5= _0x3536x4[_0x763a[2229]](_0x3536x2,_0x3536x5),mxUtils[_0x763a[442]](_0x3536x3,_0x3536x5[_0x763a[235]],_0x3536x5[_0x763a[236]])&& (_0x3536x5= null));var _0x3536x12=0,_0x3536x13=0,_0x3536x14=0,_0x3536x15=0,_0x3536xa=mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_SEGMENT,_0x3536xa[_0x763a[1020]])* _0x3536x4[_0x763a[255]];_0x3536x2= mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_DIRECTION,mxConstants.DIRECTION_WEST);_0x3536x2== mxConstants[_0x763a[1358]]|| _0x3536x2== mxConstants[_0x763a[1354]]?(_0x3536x12= _0x3536x4[_0x763a[2230]](_0x3536x3),_0x3536x13= _0x3536xa):(_0x3536x14= _0x3536x4[_0x763a[2228]](_0x3536x3),_0x3536x15= _0x3536xa);null== _0x3536x5|| _0x3536x5[_0x763a[235]]< _0x3536x3[_0x763a[235]]|| _0x3536x5[_0x763a[235]]> _0x3536x3[_0x763a[235]]+ _0x3536x3[_0x763a[117]]?null!= _0x3536x5?(_0x3536x12= _0x3536x5[_0x763a[235]],_0x3536x15= Math[_0x763a[160]](Math[_0x763a[425]](_0x3536x14- _0x3536x5[_0x763a[236]]),_0x3536x15)):_0x3536x2== mxConstants[_0x763a[1358]]?_0x3536x14= _0x3536x3[_0x763a[236]]- 2* _0x3536x13:_0x3536x2== mxConstants[_0x763a[1354]]?_0x3536x14= _0x3536x3[_0x763a[236]]+ _0x3536x3[_0x763a[119]]+ 2* _0x3536x13:_0x3536x12= _0x3536x2== mxConstants[_0x763a[1356]]?_0x3536x3[_0x763a[235]]- 2* _0x3536x15:_0x3536x3[_0x763a[235]]+ _0x3536x3[_0x763a[117]]+ 2* _0x3536x15:null!= _0x3536x5&& (_0x3536x12= _0x3536x4[_0x763a[2230]](_0x3536x3),_0x3536x13= Math[_0x763a[160]](Math[_0x763a[425]](_0x3536x12- _0x3536x5[_0x763a[235]]),_0x3536x15),_0x3536x14= _0x3536x5[_0x763a[236]],_0x3536x15= 0);_0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x12- _0x3536x13,_0x3536x14- _0x3536x15));_0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x12+ _0x3536x13,_0x3536x14+ _0x3536x15))}},ElbowConnector:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=null!= _0x3536x5&& 0< _0x3536x5[_0x763a[67]]?_0x3536x5[0]:null,_0x3536x12=!1,_0x3536x13=!1;if(null!= _0x3536x3&& null!= _0x3536x4){if(null!= _0x3536xa){var _0x3536x14=Math[_0x763a[243]](_0x3536x3[_0x763a[235]],_0x3536x4[_0x763a[235]]),_0x3536x15=Math[_0x763a[160]](_0x3536x3[_0x763a[235]]+ _0x3536x3[_0x763a[117]],_0x3536x4[_0x763a[235]]+ _0x3536x4[_0x763a[117]]),_0x3536x13=Math[_0x763a[243]](_0x3536x3[_0x763a[236]],_0x3536x4[_0x763a[236]]),_0x3536x16=Math[_0x763a[160]](_0x3536x3[_0x763a[236]]+ _0x3536x3[_0x763a[119]],_0x3536x4[_0x763a[236]]+ _0x3536x4[_0x763a[119]]),_0x3536xa=_0x3536x2[_0x763a[441]][_0x763a[2229]](_0x3536x2,_0x3536xa),_0x3536x12=_0x3536xa[_0x763a[236]]< _0x3536x13|| _0x3536xa[_0x763a[236]]> _0x3536x16,_0x3536x13=_0x3536xa[_0x763a[235]]< _0x3536x14|| _0x3536xa[_0x763a[235]]> _0x3536x15}else {_0x3536x14= Math[_0x763a[160]](_0x3536x3[_0x763a[235]],_0x3536x4[_0x763a[235]]),_0x3536x15= Math[_0x763a[243]](_0x3536x3[_0x763a[235]]+ _0x3536x3[_0x763a[117]],_0x3536x4[_0x763a[235]]+ _0x3536x4[_0x763a[117]]),_0x3536x12= _0x3536x14== _0x3536x15,_0x3536x12|| (_0x3536x13= Math[_0x763a[160]](_0x3536x3[_0x763a[236]],_0x3536x4[_0x763a[236]]),_0x3536x16= Math[_0x763a[243]](_0x3536x3[_0x763a[236]]+ _0x3536x3[_0x763a[119]],_0x3536x4[_0x763a[236]]+ _0x3536x4[_0x763a[119]]),_0x3536x13= _0x3536x13== _0x3536x16)}};!_0x3536x13&& (_0x3536x12|| _0x3536x2[_0x763a[124]][mxConstants[_0x763a[2231]]]== mxConstants[_0x763a[2232]])?mxEdgeStyle.TopToBottom(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9):mxEdgeStyle.SideToSide(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9)},SideToSide:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=_0x3536x2[_0x763a[441]];_0x3536x5= null!= _0x3536x5&& 0< _0x3536x5[_0x763a[67]]?_0x3536x5[0]:null;var _0x3536x12=_0x3536x2[_0x763a[439]],_0x3536x13=_0x3536x12[0],_0x3536x12=_0x3536x12[_0x3536x12[_0x763a[67]]- 1];null!= _0x3536x5&& (_0x3536x5= _0x3536xa[_0x763a[2229]](_0x3536x2,_0x3536x5));null!= _0x3536x13&& (_0x3536x3= new mxCellState,_0x3536x3[_0x763a[235]]= _0x3536x13[_0x763a[235]],_0x3536x3[_0x763a[236]]= _0x3536x13[_0x763a[236]]);null!= _0x3536x12&& (_0x3536x4= new mxCellState,_0x3536x4[_0x763a[235]]= _0x3536x12[_0x763a[235]],_0x3536x4[_0x763a[236]]= _0x3536x12[_0x763a[236]]);null!= _0x3536x3&& null!= _0x3536x4&& (_0x3536x2= Math[_0x763a[160]](_0x3536x3[_0x763a[235]],_0x3536x4[_0x763a[235]]),_0x3536x13= Math[_0x763a[243]](_0x3536x3[_0x763a[235]]+ _0x3536x3[_0x763a[117]],_0x3536x4[_0x763a[235]]+ _0x3536x4[_0x763a[117]]),_0x3536x2= null!= _0x3536x5?_0x3536x5[_0x763a[235]]:_0x3536x13+ (_0x3536x2- _0x3536x13)/ 2,_0x3536x13= _0x3536xa[_0x763a[2228]](_0x3536x3),_0x3536xa= _0x3536xa[_0x763a[2228]](_0x3536x4),null!= _0x3536x5&& (_0x3536x5[_0x763a[236]]>= _0x3536x3[_0x763a[236]]&& _0x3536x5[_0x763a[236]]<= _0x3536x3[_0x763a[236]]+ _0x3536x3[_0x763a[119]]&& (_0x3536x13= _0x3536x5[_0x763a[236]]),_0x3536x5[_0x763a[236]]>= _0x3536x4[_0x763a[236]]&& _0x3536x5[_0x763a[236]]<= _0x3536x4[_0x763a[236]]+ _0x3536x4[_0x763a[119]]&& (_0x3536xa= _0x3536x5[_0x763a[236]])),!mxUtils[_0x763a[442]](_0x3536x4,_0x3536x2,_0x3536x13)&& !mxUtils[_0x763a[442]](_0x3536x3,_0x3536x2,_0x3536x13)&& _0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x2,_0x3536x13)),!mxUtils[_0x763a[442]](_0x3536x4,_0x3536x2,_0x3536xa)&& !mxUtils[_0x763a[442]](_0x3536x3,_0x3536x2,_0x3536xa)&& _0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x2,_0x3536xa)),1== _0x3536x9[_0x763a[67]]&& (null!= _0x3536x5?!mxUtils[_0x763a[442]](_0x3536x4,_0x3536x2,_0x3536x5[_0x763a[236]])&& !mxUtils[_0x763a[442]](_0x3536x3,_0x3536x2,_0x3536x5[_0x763a[236]])&& _0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x2,_0x3536x5[_0x763a[236]])):(_0x3536xa= Math[_0x763a[160]](_0x3536x3[_0x763a[236]],_0x3536x4[_0x763a[236]]),_0x3536x3= Math[_0x763a[243]](_0x3536x3[_0x763a[236]]+ _0x3536x3[_0x763a[119]],_0x3536x4[_0x763a[236]]+ _0x3536x4[_0x763a[119]]),_0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x2,_0x3536xa+ (_0x3536x3- _0x3536xa)/ 2)))))},TopToBottom:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=_0x3536x2[_0x763a[441]];_0x3536x5= null!= _0x3536x5&& 0< _0x3536x5[_0x763a[67]]?_0x3536x5[0]:null;var _0x3536x12=_0x3536x2[_0x763a[439]],_0x3536x13=_0x3536x12[0],_0x3536x12=_0x3536x12[_0x3536x12[_0x763a[67]]- 1];null!= _0x3536x5&& (_0x3536x5= _0x3536xa[_0x763a[2229]](_0x3536x2,_0x3536x5));null!= _0x3536x13&& (_0x3536x3= new mxCellState,_0x3536x3[_0x763a[235]]= _0x3536x13[_0x763a[235]],_0x3536x3[_0x763a[236]]= _0x3536x13[_0x763a[236]]);null!= _0x3536x12&& (_0x3536x4= new mxCellState,_0x3536x4[_0x763a[235]]= _0x3536x12[_0x763a[235]],_0x3536x4[_0x763a[236]]= _0x3536x12[_0x763a[236]]);null!= _0x3536x3&& null!= _0x3536x4&& (_0x3536x13= Math[_0x763a[160]](_0x3536x3[_0x763a[236]],_0x3536x4[_0x763a[236]]),_0x3536x12= Math[_0x763a[243]](_0x3536x3[_0x763a[236]]+ _0x3536x3[_0x763a[119]],_0x3536x4[_0x763a[236]]+ _0x3536x4[_0x763a[119]]),_0x3536x2= _0x3536xa[_0x763a[2230]](_0x3536x3),null!= _0x3536x5&& (_0x3536x5[_0x763a[235]]>= _0x3536x3[_0x763a[235]]&& _0x3536x5[_0x763a[235]]<= _0x3536x3[_0x763a[235]]+ _0x3536x3[_0x763a[117]])&& (_0x3536x2= _0x3536x5[_0x763a[235]]),_0x3536x13= null!= _0x3536x5?_0x3536x5[_0x763a[236]]:_0x3536x12+ (_0x3536x13- _0x3536x12)/ 2,!mxUtils[_0x763a[442]](_0x3536x4,_0x3536x2,_0x3536x13)&& !mxUtils[_0x763a[442]](_0x3536x3,_0x3536x2,_0x3536x13)&& _0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x2,_0x3536x13)),_0x3536x2= null!= _0x3536x5&& _0x3536x5[_0x763a[235]]>= _0x3536x4[_0x763a[235]]&& _0x3536x5[_0x763a[235]]<= _0x3536x4[_0x763a[235]]+ _0x3536x4[_0x763a[117]]?_0x3536x5[_0x763a[235]]:_0x3536xa[_0x763a[2230]](_0x3536x4),!mxUtils[_0x763a[442]](_0x3536x4,_0x3536x2,_0x3536x13)&& !mxUtils[_0x763a[442]](_0x3536x3,_0x3536x2,_0x3536x13)&& _0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x2,_0x3536x13)),1== _0x3536x9[_0x763a[67]]&& (null!= _0x3536x5&& 1== _0x3536x9[_0x763a[67]]?!mxUtils[_0x763a[442]](_0x3536x4,_0x3536x5[_0x763a[235]],_0x3536x13)&& !mxUtils[_0x763a[442]](_0x3536x3,_0x3536x5[_0x763a[235]],_0x3536x13)&& _0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x5[_0x763a[235]],_0x3536x13)):(_0x3536xa= Math[_0x763a[160]](_0x3536x3[_0x763a[235]],_0x3536x4[_0x763a[235]]),_0x3536x3= Math[_0x763a[243]](_0x3536x3[_0x763a[235]]+ _0x3536x3[_0x763a[117]],_0x3536x4[_0x763a[235]]+ _0x3536x4[_0x763a[117]]),_0x3536x9[_0x763a[207]]( new mxPoint(_0x3536xa+ (_0x3536x3- _0x3536xa)/ 2,_0x3536x13)))))},SegmentConnector:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=_0x3536x2[_0x763a[439]],_0x3536x12=!0,_0x3536x13=null,_0x3536x14=_0x3536xa[0];null== _0x3536x14&& null!= _0x3536x3?_0x3536x14= new mxPoint(_0x3536x2[_0x763a[441]][_0x763a[2230]](_0x3536x3),_0x3536x2[_0x763a[441]][_0x763a[2228]](_0x3536x3)):null!= _0x3536x14&& (_0x3536x14= _0x3536x14[_0x763a[238]]());var _0x3536x15=_0x3536xa[_0x763a[67]]- 1;if(null!= _0x3536x5&& 0< _0x3536x5[_0x763a[67]]){for(var _0x3536x13=_0x3536x2[_0x763a[441]][_0x763a[2229]](_0x3536x2,_0x3536x5[0]),_0x3536x16=_0x3536x3,_0x3536x17=_0x3536xa[0],_0x3536x18=!1,_0x3536x19=!1,_0x3536x18=_0x3536x13,_0x3536x1a=_0x3536x5[_0x763a[67]],_0x3536x1b=0;2> _0x3536x1b;_0x3536x1b++){var _0x3536x1c=null!= _0x3536x17&& _0x3536x17[_0x763a[235]]== _0x3536x18[_0x763a[235]],_0x3536x1d=null!= _0x3536x17&& _0x3536x17[_0x763a[236]]== _0x3536x18[_0x763a[236]],_0x3536x1e=null!= _0x3536x16&& _0x3536x18[_0x763a[236]]>= _0x3536x16[_0x763a[236]]&& _0x3536x18[_0x763a[236]]<= _0x3536x16[_0x763a[236]]+ _0x3536x16[_0x763a[119]],_0x3536x16=null!= _0x3536x16&& _0x3536x18[_0x763a[235]]>= _0x3536x16[_0x763a[235]]&& _0x3536x18[_0x763a[235]]<= _0x3536x16[_0x763a[235]]+ _0x3536x16[_0x763a[117]],_0x3536x18=_0x3536x1d|| null== _0x3536x17&& _0x3536x1e,_0x3536x19=_0x3536x1c|| null== _0x3536x17&& _0x3536x16;if(null!= _0x3536x17&& !_0x3536x1d&& !_0x3536x1c&& (_0x3536x1e|| _0x3536x16)){_0x3536x12= _0x3536x1e?!1:!0;break};if(_0x3536x19|| _0x3536x18){_0x3536x12= _0x3536x18;1== _0x3536x1b&& (_0x3536x12= 0== _0x3536x5[_0x763a[67]]% 2?_0x3536x18:_0x3536x19);break};_0x3536x16= _0x3536x4;_0x3536x17= _0x3536xa[_0x3536x15];_0x3536x18= _0x3536x2[_0x763a[441]][_0x763a[2229]](_0x3536x2,_0x3536x5[_0x3536x1a- 1])};_0x3536x12&& (null!= _0x3536xa[0]&& _0x3536xa[0][_0x763a[236]]!= _0x3536x13[_0x763a[236]]|| null== _0x3536xa[0]&& null!= _0x3536x3&& (_0x3536x13[_0x763a[236]]< _0x3536x3[_0x763a[236]]|| _0x3536x13[_0x763a[236]]> _0x3536x3[_0x763a[236]]+ _0x3536x3[_0x763a[119]]))?_0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x14[_0x763a[235]],_0x3536x13[_0x763a[236]])):!_0x3536x12&& (null!= _0x3536xa[0]&& _0x3536xa[0][_0x763a[235]]!= _0x3536x13[_0x763a[235]]|| null== _0x3536xa[0]&& null!= _0x3536x3&& (_0x3536x13[_0x763a[235]]< _0x3536x3[_0x763a[235]]|| _0x3536x13[_0x763a[235]]> _0x3536x3[_0x763a[235]]+ _0x3536x3[_0x763a[117]]))&& _0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x13[_0x763a[235]],_0x3536x14[_0x763a[236]]));_0x3536x12?_0x3536x14[_0x763a[236]]= _0x3536x13[_0x763a[236]]:_0x3536x14[_0x763a[235]]= _0x3536x13[_0x763a[235]];for(_0x3536x1b= 0;_0x3536x1b< _0x3536x5[_0x763a[67]];_0x3536x1b++){_0x3536x12= !_0x3536x12,_0x3536x13= _0x3536x2[_0x763a[441]][_0x763a[2229]](_0x3536x2,_0x3536x5[_0x3536x1b]),_0x3536x12?_0x3536x14[_0x763a[236]]= _0x3536x13[_0x763a[236]]:_0x3536x14[_0x763a[235]]= _0x3536x13[_0x763a[235]],_0x3536x9[_0x763a[207]](_0x3536x14[_0x763a[238]]())}}else {_0x3536x13= _0x3536x14,_0x3536x12= !0};_0x3536x14= _0x3536xa[_0x3536x15];null== _0x3536x14&& null!= _0x3536x4&& (_0x3536x14= new mxPoint(_0x3536x2[_0x763a[441]][_0x763a[2230]](_0x3536x4),_0x3536x2[_0x763a[441]][_0x763a[2228]](_0x3536x4)));_0x3536x12&& (null!= _0x3536xa[_0x3536x15]&& _0x3536xa[_0x3536x15][_0x763a[236]]!= _0x3536x13[_0x763a[236]]|| null== _0x3536xa[_0x3536x15]&& null!= _0x3536x4&& (_0x3536x13[_0x763a[236]]< _0x3536x4[_0x763a[236]]|| _0x3536x13[_0x763a[236]]> _0x3536x4[_0x763a[236]]+ _0x3536x4[_0x763a[119]]))?_0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x14[_0x763a[235]],_0x3536x13[_0x763a[236]])):!_0x3536x12&& (null!= _0x3536xa[_0x3536x15]&& _0x3536xa[_0x3536x15][_0x763a[235]]!= _0x3536x13[_0x763a[235]]|| null== _0x3536xa[_0x3536x15]&& null!= _0x3536x4&& (_0x3536x13[_0x763a[235]]< _0x3536x4[_0x763a[235]]|| _0x3536x13[_0x763a[235]]> _0x3536x4[_0x763a[235]]+ _0x3536x4[_0x763a[117]]))&& _0x3536x9[_0x763a[207]]( new mxPoint(_0x3536x13[_0x763a[235]],_0x3536x14[_0x763a[236]]));if(null== _0x3536xa[0]&& null!= _0x3536x3){for(;1< _0x3536x9[_0x763a[67]]&& mxUtils[_0x763a[442]](_0x3536x3,_0x3536x9[1][_0x763a[235]],_0x3536x9[1][_0x763a[236]]);){_0x3536x9= _0x3536x9[_0x763a[300]](1,1)}};if(null== _0x3536xa[_0x3536x15]&& null!= _0x3536x4){for(;1< _0x3536x9[_0x763a[67]]&& mxUtils[_0x763a[442]](_0x3536x4,_0x3536x9[_0x3536x9[_0x763a[67]]- 1][_0x763a[235]],_0x3536x9[_0x3536x9[_0x763a[67]]- 1][_0x763a[236]]);){_0x3536x9= _0x3536x9[_0x763a[300]](_0x3536x9[_0x763a[67]]- 1,1)}}},orthBuffer:10,dirVectors:[[-1,0],[0,-1],[1,0],[0,1],[-1,0],[0,-1],[1,0]],wayPoints1:[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],routePatterns:[[[513,2308,2081,2562],[513,1090,514,2184,2114,2561],[513,1090,514,2564,2184,2562],[513,2308,2561,1090,514,2568,2308]],[[514,1057,513,2308,2081,2562],[514,2184,2114,2561],[514,2184,2562,1057,513,2564,2184],[514,1057,513,2568,2308,2561]],[[1090,514,1057,513,2308,2081,2562],[2114,2561],[1090,2562,1057,513,2564,2184],[1090,514,1057,513,2308,2561,2568]],[[2081,2562],[1057,513,1090,514,2184,2114,2561],[1057,513,1090,514,2184,2562,2564],[1057,2561,1090,514,2568,2308]]],inlineRoutePatterns:[[null,[2114,2568],null,null],[null,[514,2081,2114,2568],null,null],[null,[2114,2561],null,null],[[2081,2562],[1057,2114,2568],[2184,2562],null]],vertexSeperations:[],limits:[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]],LEFT_MASK:32,TOP_MASK:64,RIGHT_MASK:128,BOTTOM_MASK:256,LEFT:1,TOP:2,RIGHT:4,BOTTOM:8,SIDE_MASK:480,CENTER_MASK:512,SOURCE_MASK:1024,TARGET_MASK:2048,VERTEX_MASK:3072,OrthConnector:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=_0x3536x2[_0x763a[441]][_0x763a[1179]],_0x3536x12=null== _0x3536x3?!1:_0x3536xa[_0x763a[502]]()[_0x763a[250]](_0x3536x3[_0x763a[246]]),_0x3536xa=null== _0x3536x4?!1:_0x3536xa[_0x763a[502]]()[_0x763a[250]](_0x3536x4[_0x763a[246]]);if(null!= _0x3536x5&& 0< _0x3536x5[_0x763a[67]]|| _0x3536x12|| _0x3536xa){mxEdgeStyle.SegmentConnector(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9)}else {_0x3536x5= _0x3536x2[_0x763a[439]];var _0x3536x13=_0x3536x5[0],_0x3536x14=_0x3536x5[_0x3536x5[_0x763a[67]]- 1];_0x3536x5= null!= _0x3536x3?_0x3536x3[_0x763a[235]]:_0x3536x13[_0x763a[235]];var _0x3536x12=null!= _0x3536x3?_0x3536x3[_0x763a[236]]:_0x3536x13[_0x763a[236]],_0x3536x15=null!= _0x3536x3?_0x3536x3[_0x763a[117]]:1,_0x3536x16=null!= _0x3536x3?_0x3536x3[_0x763a[119]]:1,_0x3536x17=null!= _0x3536x4?_0x3536x4[_0x763a[235]]:_0x3536x14[_0x763a[235]],_0x3536x18=null!= _0x3536x4?_0x3536x4[_0x763a[236]]:_0x3536x14[_0x763a[236]],_0x3536x19=null!= _0x3536x4?_0x3536x4[_0x763a[117]]:1,_0x3536x1a=null!= _0x3536x4?_0x3536x4[_0x763a[119]]:1,_0x3536xa=_0x3536x2[_0x763a[441]][_0x763a[255]]* mxEdgeStyle[_0x763a[2233]],_0x3536x1b=[mxConstants[_0x763a[2234]],mxConstants[_0x763a[2234]]];null!= _0x3536x3&& (_0x3536x1b[0]= mxUtils[_0x763a[2227]](_0x3536x3,_0x3536x2,!0,mxConstants.DIRECTION_MASK_ALL));null!= _0x3536x4&& (_0x3536x1b[1]= mxUtils[_0x763a[2227]](_0x3536x4,_0x3536x2,!1,mxConstants.DIRECTION_MASK_ALL));_0x3536x2= [0,0];_0x3536x5= [[_0x3536x5,_0x3536x12,_0x3536x15,_0x3536x16],[_0x3536x17,_0x3536x18,_0x3536x19,_0x3536x1a]];for(_0x3536x15= 0;2> _0x3536x15;_0x3536x15++){mxEdgeStyle[_0x763a[2235]][_0x3536x15][1]= _0x3536x5[_0x3536x15][0]- _0x3536xa,mxEdgeStyle[_0x763a[2235]][_0x3536x15][2]= _0x3536x5[_0x3536x15][1]- _0x3536xa,mxEdgeStyle[_0x763a[2235]][_0x3536x15][4]= _0x3536x5[_0x3536x15][0]+ _0x3536x5[_0x3536x15][2]+ _0x3536xa,mxEdgeStyle[_0x763a[2235]][_0x3536x15][8]= _0x3536x5[_0x3536x15][1]+ _0x3536x5[_0x3536x15][3]+ _0x3536xa};_0x3536x15= _0x3536x5[0][0]+ _0x3536x5[0][2]/ 2- (_0x3536x5[1][0]+ _0x3536x5[1][2]/ 2);_0x3536x16= _0x3536x5[0][1]+ _0x3536x5[0][3]/ 2- (_0x3536x5[1][1]+ _0x3536x5[1][3]/ 2);_0x3536x12= 0;0> _0x3536x15?_0x3536x12= 0> _0x3536x16?2:1:0>= _0x3536x16&& (_0x3536x12= 3,0== _0x3536x15&& (_0x3536x12= 2));_0x3536x16= null;null!= _0x3536x3&& (_0x3536x16= _0x3536x13);_0x3536x3= [[0.5,0.5],[0.5,0.5]];for(_0x3536x15= 0;2> _0x3536x15;_0x3536x15++){null!= _0x3536x16&& (_0x3536x3[_0x3536x15][0]= (_0x3536x16[_0x763a[235]]- _0x3536x5[_0x3536x15][0])/ _0x3536x5[_0x3536x15][2],0.01> _0x3536x3[_0x3536x15][0]?_0x3536x2[_0x3536x15]= mxConstants[_0x763a[436]]:0.99< _0x3536x3[_0x3536x15][0]&& (_0x3536x2[_0x3536x15]= mxConstants[_0x763a[438]]),_0x3536x3[_0x3536x15][1]= (_0x3536x16[_0x763a[236]]- _0x3536x5[_0x3536x15][1])/ _0x3536x5[_0x3536x15][3],0.01> _0x3536x3[_0x3536x15][1]?_0x3536x2[_0x3536x15]= mxConstants[_0x763a[435]]:0.99< _0x3536x3[_0x3536x15][1]&& (_0x3536x2[_0x3536x15]= mxConstants[_0x763a[437]])),_0x3536x16= null,null!= _0x3536x4&& (_0x3536x16= _0x3536x14)};_0x3536x15= _0x3536x5[0][1]- (_0x3536x5[1][1]+ _0x3536x5[1][3]);_0x3536x16= _0x3536x5[0][0]- (_0x3536x5[1][0]+ _0x3536x5[1][2]);_0x3536x17= _0x3536x5[1][1]- (_0x3536x5[0][1]+ _0x3536x5[0][3]);_0x3536x18= _0x3536x5[1][0]- (_0x3536x5[0][0]+ _0x3536x5[0][2]);mxEdgeStyle[_0x763a[2236]][1]= Math[_0x763a[160]](_0x3536x16- 2* _0x3536xa,0);mxEdgeStyle[_0x763a[2236]][2]= Math[_0x763a[160]](_0x3536x15- 2* _0x3536xa,0);mxEdgeStyle[_0x763a[2236]][4]= Math[_0x763a[160]](_0x3536x17- 2* _0x3536xa,0);mxEdgeStyle[_0x763a[2236]][3]= Math[_0x763a[160]](_0x3536x18- 2* _0x3536xa,0);_0x3536x4= [];_0x3536x13= [];_0x3536x14= [];_0x3536x13[0]= _0x3536x16>= _0x3536x18?mxConstants[_0x763a[436]]:mxConstants[_0x763a[438]];_0x3536x14[0]= _0x3536x15>= _0x3536x17?mxConstants[_0x763a[435]]:mxConstants[_0x763a[437]];_0x3536x13[1]= mxUtils[_0x763a[2237]](_0x3536x13[0]);_0x3536x14[1]= mxUtils[_0x763a[2237]](_0x3536x14[0]);_0x3536x16= _0x3536x16>= _0x3536x18?_0x3536x16:_0x3536x18;_0x3536x17= _0x3536x15>= _0x3536x17?_0x3536x15:_0x3536x17;_0x3536x18= [[0,0],[0,0]];_0x3536x19= !1;for(_0x3536x15= 0;2> _0x3536x15;_0x3536x15++){0== _0x3536x2[_0x3536x15]&& (0== (_0x3536x13[_0x3536x15]& _0x3536x1b[_0x3536x15])&& (_0x3536x13[_0x3536x15]= mxUtils[_0x763a[2237]](_0x3536x13[_0x3536x15])),0== (_0x3536x14[_0x3536x15]& _0x3536x1b[_0x3536x15])&& (_0x3536x14[_0x3536x15]= mxUtils[_0x763a[2237]](_0x3536x14[_0x3536x15])),_0x3536x18[_0x3536x15][0]= _0x3536x14[_0x3536x15],_0x3536x18[_0x3536x15][1]= _0x3536x13[_0x3536x15])};_0x3536x17> 2* _0x3536xa&& _0x3536x16> 2* _0x3536xa&& (0< (_0x3536x13[0]& _0x3536x1b[0])&& 0< (_0x3536x14[1]& _0x3536x1b[1])?(_0x3536x18[0][0]= _0x3536x13[0],_0x3536x18[0][1]= _0x3536x14[0],_0x3536x18[1][0]= _0x3536x14[1],_0x3536x18[1][1]= _0x3536x13[1],_0x3536x19= !0):0< (_0x3536x14[0]& _0x3536x1b[0])&& 0< (_0x3536x13[1]& _0x3536x1b[1])&& (_0x3536x18[0][0]= _0x3536x14[0],_0x3536x18[0][1]= _0x3536x13[0],_0x3536x18[1][0]= _0x3536x13[1],_0x3536x18[1][1]= _0x3536x14[1],_0x3536x19= !0));_0x3536x17> 2* _0x3536xa&& !_0x3536x19&& (_0x3536x18[0][0]= _0x3536x14[0],_0x3536x18[0][1]= _0x3536x13[0],_0x3536x18[1][0]= _0x3536x14[1],_0x3536x18[1][1]= _0x3536x13[1],_0x3536x19= !0);_0x3536x16> 2* _0x3536xa&& !_0x3536x19&& (_0x3536x18[0][0]= _0x3536x13[0],_0x3536x18[0][1]= _0x3536x14[0],_0x3536x18[1][0]= _0x3536x13[1],_0x3536x18[1][1]= _0x3536x14[1]);for(_0x3536x15= 0;2> _0x3536x15;_0x3536x15++){if(0== _0x3536x2[_0x3536x15]&& (0== (_0x3536x18[_0x3536x15][0]& _0x3536x1b[_0x3536x15])&& (_0x3536x18[_0x3536x15][0]= _0x3536x18[_0x3536x15][1]),_0x3536x4[_0x3536x15]= _0x3536x18[_0x3536x15][0]& _0x3536x1b[_0x3536x15],_0x3536x4[_0x3536x15]|= (_0x3536x18[_0x3536x15][1]& _0x3536x1b[_0x3536x15])<< 8,_0x3536x4[_0x3536x15]|= (_0x3536x18[1- _0x3536x15][_0x3536x15]& _0x3536x1b[_0x3536x15])<< 16,_0x3536x4[_0x3536x15]|= (_0x3536x18[1- _0x3536x15][1- _0x3536x15]& _0x3536x1b[_0x3536x15])<< 24,0== (_0x3536x4[_0x3536x15]& 15)&& (_0x3536x4[_0x3536x15]<<= 8),0== (_0x3536x4[_0x3536x15]& 3840)&& (_0x3536x4[_0x3536x15]= _0x3536x4[_0x3536x15]& 15| _0x3536x4[_0x3536x15]>> 8),0== (_0x3536x4[_0x3536x15]& 983040)&& (_0x3536x4[_0x3536x15]= _0x3536x4[_0x3536x15]& 65535| (_0x3536x4[_0x3536x15]& 251658240)>> 8),_0x3536x2[_0x3536x15]= _0x3536x4[_0x3536x15]& 15,_0x3536x1b[_0x3536x15]== mxConstants[_0x763a[436]]|| _0x3536x1b[_0x3536x15]== mxConstants[_0x763a[435]]|| _0x3536x1b[_0x3536x15]== mxConstants[_0x763a[438]]|| _0x3536x1b[_0x3536x15]== mxConstants[_0x763a[437]])){_0x3536x2[_0x3536x15]= _0x3536x1b[_0x3536x15]}};_0x3536x15= _0x3536x2[0]== mxConstants[_0x763a[438]]?3:_0x3536x2[0];_0x3536x1b= _0x3536x2[1]== mxConstants[_0x763a[438]]?3:_0x3536x2[1];_0x3536x15-= _0x3536x12;_0x3536x1b-= _0x3536x12;1> _0x3536x15&& (_0x3536x15+= 4);1> _0x3536x1b&& (_0x3536x1b+= 4);_0x3536x1b= mxEdgeStyle[_0x763a[2238]][_0x3536x15- 1][_0x3536x1b- 1];mxEdgeStyle[_0x763a[2239]][0][0]= _0x3536x5[0][0];mxEdgeStyle[_0x763a[2239]][0][1]= _0x3536x5[0][1];switch(_0x3536x2[0]){case mxConstants[_0x763a[436]]:mxEdgeStyle[_0x763a[2239]][0][0]-= _0x3536xa;mxEdgeStyle[_0x763a[2239]][0][1]+= _0x3536x3[0][1]* _0x3536x5[0][3];break;case mxConstants[_0x763a[437]]:mxEdgeStyle[_0x763a[2239]][0][0]+= _0x3536x3[0][0]* _0x3536x5[0][2];mxEdgeStyle[_0x763a[2239]][0][1]+= _0x3536x5[0][3]+ _0x3536xa;break;case mxConstants[_0x763a[438]]:mxEdgeStyle[_0x763a[2239]][0][0]+= _0x3536x5[0][2]+ _0x3536xa;mxEdgeStyle[_0x763a[2239]][0][1]+= _0x3536x3[0][1]* _0x3536x5[0][3];break;case mxConstants[_0x763a[435]]:mxEdgeStyle[_0x763a[2239]][0][0]+= _0x3536x3[0][0]* _0x3536x5[0][2],mxEdgeStyle[_0x763a[2239]][0][1]-= _0x3536xa};_0x3536xa= 0;_0x3536x13= _0x3536x4= 0< (_0x3536x2[0]& (mxConstants[_0x763a[438]]| mxConstants[_0x763a[436]]))?0:1;for(_0x3536x15= _0x3536x14= 0;_0x3536x15< _0x3536x1b[_0x763a[67]];_0x3536x15++){_0x3536x14= _0x3536x1b[_0x3536x15]& 15;_0x3536x1a= _0x3536x14== mxConstants[_0x763a[438]]?3:_0x3536x14;_0x3536x1a+= _0x3536x12;4< _0x3536x1a&& (_0x3536x1a-= 4);_0x3536x16= mxEdgeStyle[_0x763a[2240]][_0x3536x1a- 1];_0x3536x14= 0< _0x3536x1a% 2?0:1;_0x3536x14!= _0x3536x4&& (_0x3536xa++,mxEdgeStyle[_0x763a[2239]][_0x3536xa][0]= mxEdgeStyle[_0x763a[2239]][_0x3536xa- 1][0],mxEdgeStyle[_0x763a[2239]][_0x3536xa][1]= mxEdgeStyle[_0x763a[2239]][_0x3536xa- 1][1]);var _0x3536x1c=0< (_0x3536x1b[_0x3536x15]& mxEdgeStyle[_0x763a[2241]]),_0x3536x19=0< (_0x3536x1b[_0x3536x15]& mxEdgeStyle[_0x763a[2242]]),_0x3536x17=(_0x3536x1b[_0x3536x15]& mxEdgeStyle[_0x763a[2243]])>> 5,_0x3536x17=_0x3536x17<< _0x3536x12;15< _0x3536x17&& (_0x3536x17>>= 4);_0x3536x18= 0< (_0x3536x1b[_0x3536x15]& mxEdgeStyle[_0x763a[2244]]);(_0x3536x19|| _0x3536x1c)&& 9> _0x3536x17?(_0x3536x1a= 0,_0x3536x19= _0x3536x19?0:1,_0x3536x1a= _0x3536x18&& 0== _0x3536x14?_0x3536x5[_0x3536x19][0]+ _0x3536x3[_0x3536x19][0]* _0x3536x5[_0x3536x19][2]:_0x3536x18?_0x3536x5[_0x3536x19][1]+ _0x3536x3[_0x3536x19][1]* _0x3536x5[_0x3536x19][3]:mxEdgeStyle[_0x763a[2235]][_0x3536x19][_0x3536x17],0== _0x3536x14?(_0x3536x17= (_0x3536x1a- mxEdgeStyle[_0x763a[2239]][_0x3536xa][0])* _0x3536x16[0],0< _0x3536x17&& (mxEdgeStyle[_0x763a[2239]][_0x3536xa][0]+= _0x3536x16[0]* _0x3536x17)):(_0x3536x17= (_0x3536x1a- mxEdgeStyle[_0x763a[2239]][_0x3536xa][1])* _0x3536x16[1],0< _0x3536x17&& (mxEdgeStyle[_0x763a[2239]][_0x3536xa][1]+= _0x3536x16[1]* _0x3536x17))):_0x3536x18&& (mxEdgeStyle[_0x763a[2239]][_0x3536xa][0]+= _0x3536x16[0]* Math[_0x763a[425]](mxEdgeStyle[_0x763a[2236]][_0x3536x1a]/ 2),mxEdgeStyle[_0x763a[2239]][_0x3536xa][1]+= _0x3536x16[1]* Math[_0x763a[425]](mxEdgeStyle[_0x763a[2236]][_0x3536x1a]/ 2));0< _0x3536xa&& mxEdgeStyle[_0x763a[2239]][_0x3536xa][_0x3536x14]== mxEdgeStyle[_0x763a[2239]][_0x3536xa- 1][_0x3536x14]?_0x3536xa--:_0x3536x4= _0x3536x14};for(_0x3536x15= 0;_0x3536x15<= _0x3536xa&& !(_0x3536x15== _0x3536xa&& ((0< (_0x3536x2[1]& (mxConstants[_0x763a[438]]| mxConstants[_0x763a[436]]))?0:1)== _0x3536x13?0:1)!= (_0x3536xa+ 1)% 2);_0x3536x15++){_0x3536x9[_0x763a[207]]( new mxPoint(mxEdgeStyle[_0x763a[2239]][_0x3536x15][0],mxEdgeStyle[_0x763a[2239]][_0x3536x15][1]))}}},getRoutePattern:function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=_0x3536x2[0]== mxConstants[_0x763a[438]]?3:_0x3536x2[0];_0x3536x2= _0x3536x2[1]== mxConstants[_0x763a[438]]?3:_0x3536x2[1];_0x3536x9-= _0x3536x3;_0x3536x2-= _0x3536x3;1> _0x3536x9&& (_0x3536x9+= 4);1> _0x3536x2&& (_0x3536x2+= 4);_0x3536x3= routePatterns[_0x3536x9- 1][_0x3536x2- 1];if(0== _0x3536x4|| 0== _0x3536x5){null!= inlineRoutePatterns[_0x3536x9- 1][_0x3536x2- 1]&& (_0x3536x3= inlineRoutePatterns[_0x3536x9- 1][_0x3536x2- 1])};return _0x3536x3}},mxStyleRegistry={values:[],putValue:function(_0x3536x2,_0x3536x3){mxStyleRegistry[_0x763a[2245]][_0x3536x2]= _0x3536x3},getValue:function(_0x3536x2){return mxStyleRegistry[_0x763a[2245]][_0x3536x2]},getName:function(_0x3536x2){for(var _0x3536x3 in mxStyleRegistry[_0x763a[2245]]){if(mxStyleRegistry[_0x763a[2245]][_0x3536x3]== _0x3536x2){return _0x3536x3}};return null}};mxStyleRegistry[_0x763a[2246]](mxConstants.EDGESTYLE_ELBOW,mxEdgeStyle.ElbowConnector);mxStyleRegistry[_0x763a[2246]](mxConstants.EDGESTYLE_ENTITY_RELATION,mxEdgeStyle.EntityRelation);mxStyleRegistry[_0x763a[2246]](mxConstants.EDGESTYLE_LOOP,mxEdgeStyle.Loop);mxStyleRegistry[_0x763a[2246]](mxConstants.EDGESTYLE_SIDETOSIDE,mxEdgeStyle.SideToSide);mxStyleRegistry[_0x763a[2246]](mxConstants.EDGESTYLE_TOPTOBOTTOM,mxEdgeStyle.TopToBottom);mxStyleRegistry[_0x763a[2246]](mxConstants.EDGESTYLE_ORTHOGONAL,mxEdgeStyle.OrthConnector);mxStyleRegistry[_0x763a[2246]](mxConstants.EDGESTYLE_SEGMENT,mxEdgeStyle.SegmentConnector);mxStyleRegistry[_0x763a[2246]](mxConstants.PERIMETER_ELLIPSE,mxPerimeter.EllipsePerimeter);mxStyleRegistry[_0x763a[2246]](mxConstants.PERIMETER_RECTANGLE,mxPerimeter.RectanglePerimeter);mxStyleRegistry[_0x763a[2246]](mxConstants.PERIMETER_RHOMBUS,mxPerimeter.RhombusPerimeter);mxStyleRegistry[_0x763a[2246]](mxConstants.PERIMETER_TRIANGLE,mxPerimeter.TrianglePerimeter);function mxGraphView(_0x3536x2){this[_0x763a[1179]]= _0x3536x2;this[_0x763a[513]]= new mxPoint;this[_0x763a[2247]]= new mxRectangle;this[_0x763a[1214]]= new mxDictionary}mxGraphView[_0x763a[202]]= new mxEventSource;mxGraphView[_0x763a[202]][_0x763a[196]]= mxGraphView;mxGraphView[_0x763a[202]][_0x763a[2248]]= new mxPoint;mxGraphView[_0x763a[202]][_0x763a[2091]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[819]:_0x763a[110];mxGraphView[_0x763a[202]][_0x763a[2249]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[2250]:_0x763a[110];mxGraphView[_0x763a[202]][_0x763a[2251]]= !1;mxGraphView[_0x763a[202]][_0x763a[2252]]= !0;mxGraphView[_0x763a[202]][_0x763a[2253]]= !0;mxGraphView[_0x763a[202]][_0x763a[2254]]= !0;mxGraphView[_0x763a[202]][_0x763a[1179]]= null;mxGraphView[_0x763a[202]][_0x763a[1741]]= null;mxGraphView[_0x763a[202]][_0x763a[2247]]= null;mxGraphView[_0x763a[202]][_0x763a[255]]= 1;mxGraphView[_0x763a[202]][_0x763a[513]]= null;mxGraphView[_0x763a[202]][_0x763a[2255]]= !1;mxGraphView[_0x763a[202]][_0x763a[517]]= function(){return this[_0x763a[2247]]};mxGraphView[_0x763a[202]][_0x763a[2256]]= function(_0x3536x2){this[_0x763a[2247]]= _0x3536x2};mxGraphView[_0x763a[202]][_0x763a[1799]]= function(_0x3536x2){var _0x3536x3=null;if(null!= _0x3536x2&& 0< _0x3536x2[_0x763a[67]]){for(var _0x3536x4=this[_0x763a[1179]][_0x763a[502]](),_0x3536x5=0;_0x3536x5< _0x3536x2[_0x763a[67]];_0x3536x5++){if(_0x3536x4[_0x763a[1193]](_0x3536x2[_0x3536x5])|| _0x3536x4[_0x763a[250]](_0x3536x2[_0x3536x5])){var _0x3536x9=this[_0x763a[248]](_0x3536x2[_0x3536x5]);null!= _0x3536x9&& (null== _0x3536x3?_0x3536x3= new mxRectangle(_0x3536x9[_0x763a[235]],_0x3536x9[_0x763a[236]],_0x3536x9[_0x763a[117]],_0x3536x9[_0x763a[119]]):_0x3536x3[_0x763a[99]](_0x3536x9))}}};return _0x3536x3};mxGraphView[_0x763a[202]][_0x763a[2257]]= function(_0x3536x2){if(this[_0x763a[1741]]!= _0x3536x2){var _0x3536x3= new mxCurrentRootChange(this,_0x3536x2);_0x3536x3[_0x763a[350]]();var _0x3536x4= new mxUndoableEdit(this,!1);_0x3536x4[_0x763a[99]](_0x3536x3);this[_0x763a[746]]( new mxEventObject(mxEvent.UNDO,_0x763a[1061],_0x3536x4));this[_0x763a[1179]][_0x763a[2258]]()};return _0x3536x2};mxGraphView[_0x763a[202]][_0x763a[829]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[255]],_0x3536x9= new mxPoint(this[_0x763a[513]][_0x763a[235]],this[_0x763a[513]][_0x763a[236]]);if(this[_0x763a[255]]!= _0x3536x2|| this[_0x763a[513]][_0x763a[235]]!= _0x3536x3|| this[_0x763a[513]][_0x763a[236]]!= _0x3536x4){this[_0x763a[255]]= _0x3536x2,this[_0x763a[513]][_0x763a[235]]= _0x3536x3,this[_0x763a[513]][_0x763a[236]]= _0x3536x4,this[_0x763a[503]]()&& (this[_0x763a[2259]](),this[_0x763a[1179]][_0x763a[2258]]())};this[_0x763a[746]]( new mxEventObject(mxEvent.SCALE_AND_TRANSLATE,_0x763a[255],_0x3536x2,_0x763a[2260],_0x3536x5,_0x763a[513],this[_0x763a[513]],_0x763a[2261],_0x3536x9))};mxGraphView[_0x763a[202]][_0x763a[518]]= function(){return this[_0x763a[255]]};mxGraphView[_0x763a[202]][_0x763a[2262]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[255]];this[_0x763a[255]]!= _0x3536x2&& (this[_0x763a[255]]= _0x3536x2,this[_0x763a[503]]()&& (this[_0x763a[2259]](),this[_0x763a[1179]][_0x763a[2258]]()));this[_0x763a[746]]( new mxEventObject(mxEvent.SCALE,_0x763a[255],_0x3536x2,_0x763a[2260],_0x3536x3))};mxGraphView[_0x763a[202]][_0x763a[512]]= function(){return this[_0x763a[513]]};mxGraphView[_0x763a[202]][_0x763a[1147]]= function(_0x3536x2,_0x3536x3){var _0x3536x4= new mxPoint(this[_0x763a[513]][_0x763a[235]],this[_0x763a[513]][_0x763a[236]]);if(this[_0x763a[513]][_0x763a[235]]!= _0x3536x2|| this[_0x763a[513]][_0x763a[236]]!= _0x3536x3){this[_0x763a[513]][_0x763a[235]]= _0x3536x2,this[_0x763a[513]][_0x763a[236]]= _0x3536x3,this[_0x763a[503]]()&& (this[_0x763a[2259]](),this[_0x763a[1179]][_0x763a[2258]]())};this[_0x763a[746]]( new mxEventObject(mxEvent.TRANSLATE,_0x763a[513],this[_0x763a[513]],_0x763a[2261],_0x3536x4))};mxGraphView[_0x763a[202]][_0x763a[802]]= function(){null!= this[_0x763a[1741]]&& this[_0x763a[200]]();this[_0x763a[2259]]()};mxGraphView[_0x763a[202]][_0x763a[2259]]= function(){this[_0x763a[2263]]();this[_0x763a[2264]]()};mxGraphView[_0x763a[202]][_0x763a[200]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[1179]][_0x763a[502]]();_0x3536x2= _0x3536x2|| _0x3536x5[_0x763a[501]]();_0x3536x3= null!= _0x3536x3?_0x3536x3:!1;_0x3536x4= null!= _0x3536x4?_0x3536x4:!0;this[_0x763a[2265]](_0x3536x2);if(_0x3536x4&& (_0x3536x3|| _0x3536x2!= this[_0x763a[1741]])){_0x3536x4= _0x3536x5[_0x763a[262]](_0x3536x2);for(var _0x3536x9=0;_0x3536x9< _0x3536x4;_0x3536x9++){this[_0x763a[200]](_0x3536x5[_0x763a[263]](_0x3536x2,_0x3536x9),_0x3536x3)}}else {this[_0x763a[2263]](_0x3536x2)}};mxGraphView[_0x763a[202]][_0x763a[2263]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=this[_0x763a[1179]][_0x763a[502]]();_0x3536x2= _0x3536x2|| _0x3536x9[_0x763a[501]]();_0x3536x3= null!= _0x3536x3?_0x3536x3:!0;_0x3536x4= null!= _0x3536x4?_0x3536x4:!0;_0x3536x5= null!= _0x3536x5?_0x3536x5:!1;var _0x3536xa=this[_0x763a[248]](_0x3536x2);null!= _0x3536xa&& (_0x3536xa[_0x763a[2080]]= !0,_0x3536x5&& (_0x3536xa[_0x763a[2082]]= !0));if(_0x3536x3){for(var _0x3536x12=_0x3536x9[_0x763a[262]](_0x3536x2),_0x3536xa=0;_0x3536xa< _0x3536x12;_0x3536xa++){var _0x3536x13=_0x3536x9[_0x763a[263]](_0x3536x2,_0x3536xa);this[_0x763a[2263]](_0x3536x13,_0x3536x3,_0x3536x4,_0x3536x5)}};if(_0x3536x4){_0x3536x5= _0x3536x9[_0x763a[1707]](_0x3536x2);for(_0x3536xa= 0;_0x3536xa< _0x3536x5;_0x3536xa++){this[_0x763a[2263]](_0x3536x9[_0x763a[1708]](_0x3536x2,_0x3536xa),_0x3536x3,_0x3536x4)}}};mxGraphView[_0x763a[202]][_0x763a[2264]]= function(_0x3536x2){var _0x3536x3=mxLog[_0x763a[2109]](_0x763a[2266]);window[_0x763a[879]]= mxResources[_0x763a[203]](this[_0x763a[2249]])|| this[_0x763a[2249]];var _0x3536x4=null;if(this[_0x763a[2253]]&& null!= this[_0x763a[510]]&& null== this[_0x763a[1653]]&& (8== document[_0x763a[5]]|| mxClient[_0x763a[496]])){_0x3536x4= this[_0x763a[510]][_0x763a[124]][_0x763a[495]];this[_0x763a[510]][_0x763a[124]][_0x763a[495]]= _0x763a[130];var _0x3536x5=document[_0x763a[55]](_0x763a[485]);_0x3536x5[_0x763a[124]][_0x763a[491]]= _0x763a[492];_0x3536x5[_0x763a[124]][_0x763a[493]]= _0x763a[494];_0x3536x5[_0x763a[124]][_0x763a[187]]= _0x763a[188];_0x3536x5[_0x763a[124]][_0x763a[495]]= mxClient[_0x763a[496]]?_0x763a[497]:_0x763a[498];_0x3536x5[_0x763a[124]][_0x763a[499]]= _0x763a[500];document[_0x763a[112]][_0x763a[62]](_0x3536x5);this[_0x763a[1653]]= _0x3536x5};_0x3536x2= _0x3536x2|| (null!= this[_0x763a[1741]]?this[_0x763a[1741]]:this[_0x763a[1179]][_0x763a[502]]()[_0x763a[501]]());this[_0x763a[2267]](null,_0x3536x2);_0x3536x2= this[_0x763a[2268]](null,_0x3536x2);null== _0x3536x2&& (_0x3536x2= new mxRectangle);this[_0x763a[2256]](_0x3536x2);this[_0x763a[2269]]();null!= _0x3536x4&& (this[_0x763a[510]][_0x763a[124]][_0x763a[495]]= _0x3536x4,document[_0x763a[112]][_0x763a[266]](this[_0x763a[1653]]),this[_0x763a[1653]]= null);window[_0x763a[879]]= mxResources[_0x763a[203]](this[_0x763a[2091]])|| this[_0x763a[2091]];mxLog[_0x763a[2110]](_0x763a[2266],_0x3536x3)};mxGraphView[_0x763a[202]][_0x763a[2270]]= function(_0x3536x2){return new mxRectangleShape(_0x3536x2,_0x763a[1391],_0x763a[586])};mxGraphView[_0x763a[202]][_0x763a[2269]]= function(){var _0x3536x2=this[_0x763a[1179]][_0x763a[2271]]();if(null!= _0x3536x2){if(null== this[_0x763a[1617]]|| this[_0x763a[1617]][_0x763a[618]]!= _0x3536x2[_0x763a[390]]){null!= this[_0x763a[1617]]&& this[_0x763a[1617]][_0x763a[515]]();var _0x3536x3= new mxRectangle(0,0,1,1);this[_0x763a[1617]]= new mxImageShape(_0x3536x3,_0x3536x2[_0x763a[390]]);this[_0x763a[1617]][_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]];this[_0x763a[1617]][_0x763a[176]](this[_0x763a[2053]]);this[_0x763a[1617]][_0x763a[258]]()};this[_0x763a[2272]](this[_0x763a[1617]],_0x3536x2)}else {null!= this[_0x763a[1617]]&& (this[_0x763a[1617]][_0x763a[515]](),this[_0x763a[1617]]= null)};this[_0x763a[1179]][_0x763a[2273]]?(_0x3536x3= this[_0x763a[2274]](),null== this[_0x763a[2275]]?(this[_0x763a[2275]]= this[_0x763a[2270]](_0x3536x3),this[_0x763a[2275]][_0x763a[255]]= this[_0x763a[255]],this[_0x763a[2275]][_0x763a[1596]]= !0,this[_0x763a[2275]][_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]],this[_0x763a[2275]][_0x763a[176]](this[_0x763a[2053]]),this[_0x763a[2275]][_0x763a[258]](),mxEvent[_0x763a[169]](this[_0x763a[2275]][_0x763a[252]],_0x763a[760],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[1179]][_0x763a[761]](_0x3536x2)})),mxEvent[_0x763a[759]](this[_0x763a[2275]][_0x763a[252]],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[1179]][_0x763a[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x3536x2))}),mxUtils[_0x763a[885]](this,function(_0x3536x2){null!= this[_0x763a[1179]][_0x763a[2276]]&& this[_0x763a[1179]][_0x763a[2276]][_0x763a[2277]]()&& this[_0x763a[1179]][_0x763a[2276]][_0x763a[801]]();this[_0x763a[1179]][_0x763a[1009]]&& !mxEvent[_0x763a[721]](_0x3536x2)&& this[_0x763a[1179]][_0x763a[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x3536x2))}),mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[1179]][_0x763a[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x3536x2))}))):(this[_0x763a[2275]][_0x763a[255]]= this[_0x763a[255]],this[_0x763a[2275]][_0x763a[1562]]= _0x3536x3,this[_0x763a[2275]][_0x763a[258]]())):null!= this[_0x763a[2275]]&& (this[_0x763a[2275]][_0x763a[515]](),this[_0x763a[2275]]= null)};mxGraphView[_0x763a[202]][_0x763a[2274]]= function(){var _0x3536x2=this[_0x763a[1179]][_0x763a[2013]],_0x3536x3=this[_0x763a[255]]* this[_0x763a[1179]][_0x763a[2012]];return new mxRectangle(this[_0x763a[255]]* this[_0x763a[513]][_0x763a[235]],this[_0x763a[255]]* this[_0x763a[513]][_0x763a[236]],_0x3536x2[_0x763a[117]]* _0x3536x3,_0x3536x2[_0x763a[119]]* _0x3536x3)};mxGraphView[_0x763a[202]][_0x763a[2272]]= function(_0x3536x2,_0x3536x3){_0x3536x2[_0x763a[255]]= this[_0x763a[255]];_0x3536x2[_0x763a[1562]][_0x763a[235]]= this[_0x763a[255]]* this[_0x763a[513]][_0x763a[235]];_0x3536x2[_0x763a[1562]][_0x763a[236]]= this[_0x763a[255]]* this[_0x763a[513]][_0x763a[236]];_0x3536x2[_0x763a[1562]][_0x763a[117]]= this[_0x763a[255]]* _0x3536x3[_0x763a[117]];_0x3536x2[_0x763a[1562]][_0x763a[119]]= this[_0x763a[255]]* _0x3536x3[_0x763a[119]];_0x3536x2[_0x763a[258]]()};mxGraphView[_0x763a[202]][_0x763a[2267]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[502]](),_0x3536x5=this[_0x763a[248]](_0x3536x3,!0);if(null!= _0x3536x5&& _0x3536x5[_0x763a[2080]]){if(this[_0x763a[1179]][_0x763a[1714]](_0x3536x3)){if(_0x3536x3!= this[_0x763a[1741]]&& null!= _0x3536x2){_0x3536x5[_0x763a[2079]][_0x763a[235]]= 0;_0x3536x5[_0x763a[2079]][_0x763a[236]]= 0;_0x3536x5[_0x763a[2078]][_0x763a[235]]= _0x3536x2[_0x763a[2078]][_0x763a[235]];_0x3536x5[_0x763a[2078]][_0x763a[236]]= _0x3536x2[_0x763a[2078]][_0x763a[236]];var _0x3536x9=this[_0x763a[1179]][_0x763a[1198]](_0x3536x3);if(null!= _0x3536x9){if(!_0x3536x4[_0x763a[250]](_0x3536x3)){var _0x3536xa=_0x3536x9[_0x763a[1368]]|| this[_0x763a[2248]];_0x3536x9[_0x763a[1500]]?(_0x3536x5[_0x763a[2078]][_0x763a[235]]+= _0x3536x9[_0x763a[235]]* _0x3536x2[_0x763a[117]]/ this[_0x763a[255]]+ _0x3536xa[_0x763a[235]],_0x3536x5[_0x763a[2078]][_0x763a[236]]+= _0x3536x9[_0x763a[236]]* _0x3536x2[_0x763a[119]]/ this[_0x763a[255]]+ _0x3536xa[_0x763a[236]]):(_0x3536x5[_0x763a[2079]][_0x763a[235]]= this[_0x763a[255]]* _0x3536xa[_0x763a[235]],_0x3536x5[_0x763a[2079]][_0x763a[236]]= this[_0x763a[255]]* _0x3536xa[_0x763a[236]],_0x3536x5[_0x763a[2078]][_0x763a[235]]+= _0x3536x9[_0x763a[235]],_0x3536x5[_0x763a[2078]][_0x763a[236]]+= _0x3536x9[_0x763a[236]])};_0x3536x5[_0x763a[235]]= this[_0x763a[255]]* (this[_0x763a[513]][_0x763a[235]]+ _0x3536x5[_0x763a[2078]][_0x763a[235]]);_0x3536x5[_0x763a[236]]= this[_0x763a[255]]* (this[_0x763a[513]][_0x763a[236]]+ _0x3536x5[_0x763a[2078]][_0x763a[236]]);_0x3536x5[_0x763a[117]]= this[_0x763a[255]]* _0x3536x9[_0x763a[117]];_0x3536x5[_0x763a[119]]= this[_0x763a[255]]* _0x3536x9[_0x763a[119]];if(_0x3536x4[_0x763a[1193]](_0x3536x3)){if(_0x3536x9[_0x763a[1500]]&& (_0x3536xa= mxUtils[_0x763a[431]](_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2278]]]|| _0x763a[468]),0!= _0x3536xa)){var _0x3536x9=Math[_0x763a[426]](_0x3536xa),_0x3536xa=Math[_0x763a[427]](_0x3536xa),_0x3536x12= new mxPoint(_0x3536x5[_0x763a[241]](),_0x3536x5[_0x763a[242]]()),_0x3536x13= new mxPoint(_0x3536x2[_0x763a[241]](),_0x3536x2[_0x763a[242]]()),_0x3536x9=mxUtils[_0x763a[432]](_0x3536x12,_0x3536x9,_0x3536xa,_0x3536x13);_0x3536x5[_0x763a[235]]= _0x3536x9[_0x763a[235]]- _0x3536x5[_0x763a[117]]/ 2;_0x3536x5[_0x763a[236]]= _0x3536x9[_0x763a[236]]- _0x3536x5[_0x763a[119]]/ 2};this[_0x763a[2279]](_0x3536x5)}}}}else {this[_0x763a[2265]](_0x3536x3)};_0x3536xa= this[_0x763a[1179]][_0x763a[2280]](_0x3536x3);null!= _0x3536xa&& (_0x3536x5[_0x763a[2078]][_0x763a[235]]+= _0x3536xa[_0x763a[235]],_0x3536x5[_0x763a[2078]][_0x763a[236]]+= _0x3536xa[_0x763a[236]])};if(null!= _0x3536x5&& (!this[_0x763a[1179]][_0x763a[1742]](_0x3536x3)|| _0x3536x3== this[_0x763a[1741]])){_0x3536x9= _0x3536x4[_0x763a[262]](_0x3536x3);for(_0x3536xa= 0;_0x3536xa< _0x3536x9;_0x3536xa++){_0x3536x12= _0x3536x4[_0x763a[263]](_0x3536x3,_0x3536xa),this[_0x763a[2267]](_0x3536x5,_0x3536x12)}}};mxGraphView[_0x763a[202]][_0x763a[2279]]= function(_0x3536x2){var _0x3536x3=mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_LABEL_POSITION,mxConstants.ALIGN_CENTER);_0x3536x3== mxConstants[_0x763a[2132]]?_0x3536x2[_0x763a[2079]][_0x763a[235]]-= _0x3536x2[_0x763a[117]]:_0x3536x3== mxConstants[_0x763a[480]]&& (_0x3536x2[_0x763a[2079]][_0x763a[235]]+= _0x3536x2[_0x763a[117]]);_0x3536x3= mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_VERTICAL_LABEL_POSITION,mxConstants.ALIGN_MIDDLE);_0x3536x3== mxConstants[_0x763a[1687]]?_0x3536x2[_0x763a[2079]][_0x763a[236]]-= _0x3536x2[_0x763a[119]]:_0x3536x3== mxConstants[_0x763a[482]]&& (_0x3536x2[_0x763a[2079]][_0x763a[236]]+= _0x3536x2[_0x763a[119]])};mxGraphView[_0x763a[202]][_0x763a[2268]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[502]](),_0x3536x5=this[_0x763a[248]](_0x3536x3),_0x3536x9=null;if(null!= _0x3536x5){if(_0x3536x5[_0x763a[2080]]){var _0x3536xa=this[_0x763a[1179]][_0x763a[1198]](_0x3536x3);if(null!= _0x3536xa&& _0x3536x4[_0x763a[250]](_0x3536x3)){var _0x3536x12=this[_0x763a[248]](this[_0x763a[1710]](_0x3536x3,!0));_0x3536x5[_0x763a[2090]](_0x3536x12,!0);if(null!= _0x3536x12&& _0x3536x4[_0x763a[250]](_0x3536x12[_0x763a[246]])&& !_0x3536x4[_0x763a[1720]](_0x3536x12[_0x763a[246]],_0x3536x3)){var _0x3536x13=this[_0x763a[248]](_0x3536x4[_0x763a[1197]](_0x3536x12[_0x763a[246]]));this[_0x763a[2268]](_0x3536x13,_0x3536x12[_0x763a[246]])};var _0x3536x14=this[_0x763a[248]](this[_0x763a[1710]](_0x3536x3,!1));_0x3536x5[_0x763a[2090]](_0x3536x14,!1);null!= _0x3536x14&& (_0x3536x4[_0x763a[250]](_0x3536x14[_0x763a[246]])&& !_0x3536x4[_0x763a[1720]](_0x3536x14[_0x763a[246]],_0x3536x3))&& (_0x3536x13= this[_0x763a[248]](_0x3536x4[_0x763a[1197]](_0x3536x14[_0x763a[246]])),this[_0x763a[2268]](_0x3536x13,_0x3536x14[_0x763a[246]]));this[_0x763a[2281]](_0x3536x5,_0x3536x12,_0x3536x14);this[_0x763a[2282]](_0x3536x5,_0x3536xa[_0x763a[1525]],_0x3536x12,_0x3536x14);this[_0x763a[2283]](_0x3536x5,_0x3536x12,_0x3536x14);this[_0x763a[2284]](_0x3536x5);this[_0x763a[2285]](_0x3536x5)}else {null!= _0x3536xa&& (_0x3536xa[_0x763a[1500]]&& null!= _0x3536x2&& _0x3536x4[_0x763a[250]](_0x3536x2[_0x763a[246]]))&& (_0x3536xa= this[_0x763a[245]](_0x3536x2,_0x3536xa),null!= _0x3536xa&& (_0x3536x5[_0x763a[235]]= _0x3536xa[_0x763a[235]],_0x3536x5[_0x763a[236]]= _0x3536xa[_0x763a[236]],_0x3536xa[_0x763a[235]]= _0x3536xa[_0x763a[235]]/ this[_0x763a[255]]- this[_0x763a[513]][_0x763a[235]],_0x3536xa[_0x763a[236]]= _0x3536xa[_0x763a[236]]/ this[_0x763a[255]]- this[_0x763a[513]][_0x763a[236]],_0x3536x5[_0x763a[2078]]= _0x3536xa,this[_0x763a[2286]](_0x3536x2,_0x3536x5)))};_0x3536x5[_0x763a[2080]]= !1;_0x3536x3!= this[_0x763a[1741]]&& this[_0x763a[1179]][_0x763a[259]][_0x763a[258]](_0x3536x5,!1,this[_0x763a[2287]]())};if(_0x3536x4[_0x763a[250]](_0x3536x3)|| _0x3536x4[_0x763a[1193]](_0x3536x3)){null!= _0x3536x5[_0x763a[253]]&& null!= _0x3536x5[_0x763a[253]][_0x763a[1563]]&& (_0x3536x9= _0x3536x5[_0x763a[253]][_0x763a[1563]][_0x763a[238]]()),null!= _0x3536x5[_0x763a[963]]&& !this[_0x763a[1179]][_0x763a[2130]](_0x3536x5[_0x763a[246]])&& null!= _0x3536x5[_0x763a[963]][_0x763a[1563]]&& (null!= _0x3536x9?_0x3536x9[_0x763a[99]](_0x3536x5[_0x763a[963]][_0x763a[1563]]):_0x3536x9= _0x3536x5[_0x763a[963]][_0x763a[1563]][_0x763a[238]]())}};if(null!= _0x3536x5&& (!this[_0x763a[1179]][_0x763a[1742]](_0x3536x3)|| _0x3536x3== this[_0x763a[1741]])){_0x3536xa= _0x3536x4[_0x763a[262]](_0x3536x3);for(_0x3536x12= 0;_0x3536x12< _0x3536xa;_0x3536x12++){_0x3536x13= _0x3536x4[_0x763a[263]](_0x3536x3,_0x3536x12),_0x3536x13= this[_0x763a[2268]](_0x3536x5,_0x3536x13),null!= _0x3536x13&& (null== _0x3536x9?_0x3536x9= _0x3536x13:_0x3536x9[_0x763a[99]](_0x3536x13))}};return _0x3536x9};mxGraphView[_0x763a[202]][_0x763a[2286]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x3536x3[_0x763a[246]];if(!this[_0x763a[1179]][_0x763a[1742]](_0x3536x4)|| _0x3536x4== this[_0x763a[1741]]){for(var _0x3536x5=this[_0x763a[1179]][_0x763a[502]](),_0x3536x9=_0x3536x5[_0x763a[262]](_0x3536x4),_0x3536xa=0;_0x3536xa< _0x3536x9;_0x3536xa++){this[_0x763a[2267]](_0x3536x3,_0x3536x5[_0x763a[263]](_0x3536x4,_0x3536xa))}}};mxGraphView[_0x763a[202]][_0x763a[2281]]= function(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[2289]](_0x3536x2,_0x3536x3,!0,this[_0x763a[1179]][_0x763a[2288]](_0x3536x2,_0x3536x3,!0));this[_0x763a[2289]](_0x3536x2,_0x3536x4,!1,this[_0x763a[1179]][_0x763a[2288]](_0x3536x2,_0x3536x4,!1))};mxGraphView[_0x763a[202]][_0x763a[2289]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=null;null!= _0x3536x5&& (_0x3536x9= this[_0x763a[1179]][_0x763a[2290]](_0x3536x3,_0x3536x5));if(null== _0x3536x9&& null== _0x3536x3){_0x3536x3= this[_0x763a[255]];_0x3536x5= this[_0x763a[513]];var _0x3536xa=_0x3536x2[_0x763a[2078]],_0x3536x9=this[_0x763a[1179]][_0x763a[1198]](_0x3536x2[_0x763a[246]])[_0x763a[2006]](_0x3536x4);null!= _0x3536x9&& (_0x3536x9= new mxPoint(_0x3536x3* (_0x3536x5[_0x763a[235]]+ _0x3536x9[_0x763a[235]]+ _0x3536xa[_0x763a[235]]),_0x3536x3* (_0x3536x5[_0x763a[236]]+ _0x3536x9[_0x763a[236]]+ _0x3536xa[_0x763a[236]])))};_0x3536x2[_0x763a[2088]](_0x3536x9,_0x3536x4)};mxGraphView[_0x763a[202]][_0x763a[2282]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){if(null!= _0x3536x2){var _0x3536x9=[];_0x3536x9[_0x763a[207]](_0x3536x2[_0x763a[439]][0]);var _0x3536xa=this[_0x763a[2291]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5);if(null!= _0x3536xa){_0x3536x4= this[_0x763a[2292]](_0x3536x2,_0x3536x4,!0),_0x3536x5= this[_0x763a[2292]](_0x3536x2,_0x3536x5,!1),_0x3536xa(_0x3536x2,_0x3536x4,_0x3536x5,_0x3536x3,_0x3536x9)}else {if(null!= _0x3536x3){for(_0x3536xa= 0;_0x3536xa< _0x3536x3[_0x763a[67]];_0x3536xa++){null!= _0x3536x3[_0x3536xa]&& (_0x3536x5= mxUtils[_0x763a[238]](_0x3536x3[_0x3536xa]),_0x3536x9[_0x763a[207]](this[_0x763a[2229]](_0x3536x2,_0x3536x5)))}}};_0x3536x3= _0x3536x2[_0x763a[439]];_0x3536x9[_0x763a[207]](_0x3536x3[_0x3536x3[_0x763a[67]]- 1]);_0x3536x2[_0x763a[439]]= _0x3536x9}};mxGraphView[_0x763a[202]][_0x763a[2229]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x3536x2[_0x763a[2078]];return new mxPoint(this[_0x763a[255]]* (_0x3536x3[_0x763a[235]]+ this[_0x763a[513]][_0x763a[235]]+ _0x3536x4[_0x763a[235]]),this[_0x763a[255]]* (_0x3536x3[_0x763a[236]]+ this[_0x763a[513]][_0x763a[236]]+ _0x3536x4[_0x763a[236]]))};mxGraphView[_0x763a[202]][_0x763a[2291]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x2= null!= _0x3536x4&& _0x3536x4== _0x3536x5?mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_LOOP,this[_0x763a[1179]][_0x763a[2293]]):!mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_NOEDGESTYLE,!1)?_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2294]]]:null;_0x763a[1516]== typeof _0x3536x2&& (_0x3536x3= mxStyleRegistry[_0x763a[433]](_0x3536x2),null== _0x3536x3&& this[_0x763a[2295]]()&& (_0x3536x3= mxUtils[_0x763a[1545]](_0x3536x2)),_0x3536x2= _0x3536x3);return _0x763a[279]== typeof _0x3536x2?_0x3536x2:null};mxGraphView[_0x763a[202]][_0x763a[2283]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=_0x3536x2[_0x763a[439]],_0x3536x9=_0x3536x5[0];null== _0x3536x5[_0x3536x5[_0x763a[67]]- 1]&& null!= _0x3536x4&& this[_0x763a[2296]](_0x3536x2,_0x3536x4,_0x3536x3,!1);null== _0x3536x9&& null!= _0x3536x3&& this[_0x763a[2296]](_0x3536x2,_0x3536x3,_0x3536x4,!0)};mxGraphView[_0x763a[202]][_0x763a[2296]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x3= this[_0x763a[2292]](_0x3536x2,_0x3536x3,_0x3536x5);var _0x3536x9=this[_0x763a[2297]](_0x3536x2,_0x3536x4,_0x3536x5),_0x3536xa=this[_0x763a[1179]][_0x763a[2298]](_0x3536x2);_0x3536x4= mxUtils[_0x763a[431]](Number(_0x3536x3[_0x763a[124]][mxConstants[_0x763a[2278]]]|| _0x763a[468]));var _0x3536x12= new mxPoint(_0x3536x3[_0x763a[241]](),_0x3536x3[_0x763a[242]]());if(0!= _0x3536x4){var _0x3536x13=Math[_0x763a[426]](-_0x3536x4),_0x3536x14=Math[_0x763a[427]](-_0x3536x4),_0x3536x9=mxUtils[_0x763a[432]](_0x3536x9,_0x3536x13,_0x3536x14,_0x3536x12)};_0x3536x13= parseFloat(_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2299]]]|| 0);_0x3536x13+= parseFloat(_0x3536x2[_0x763a[124]][_0x3536x5?mxConstants[_0x763a[2300]]:mxConstants[_0x763a[2301]]]|| 0);_0x3536x3= this[_0x763a[2302]](_0x3536x3,_0x3536x9,0== _0x3536x4&& _0x3536xa,_0x3536x13);0!= _0x3536x4&& (_0x3536x13= Math[_0x763a[426]](_0x3536x4),_0x3536x14= Math[_0x763a[427]](_0x3536x4),_0x3536x3= mxUtils[_0x763a[432]](_0x3536x3,_0x3536x13,_0x3536x14,_0x3536x12));_0x3536x2[_0x763a[2088]](_0x3536x3,_0x3536x5)};mxGraphView[_0x763a[202]][_0x763a[2292]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x2= mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],_0x3536x4?mxConstants[_0x763a[2303]]:mxConstants[_0x763a[2304]]);null!= _0x3536x2&& (_0x3536x2= this[_0x763a[248]](this[_0x763a[1179]][_0x763a[502]]()[_0x763a[736]](_0x3536x2)),null!= _0x3536x2&& (_0x3536x3= _0x3536x2));return _0x3536x3};mxGraphView[_0x763a[202]][_0x763a[2302]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=null;if(null!= _0x3536x2){var _0x3536xa=this[_0x763a[2305]](_0x3536x2);if(null!= _0x3536xa&& null!= _0x3536x3&& (_0x3536x5= this[_0x763a[2087]](_0x3536x2,_0x3536x5),0< _0x3536x5[_0x763a[117]]|| 0< _0x3536x5[_0x763a[119]])){_0x3536x9= _0x3536xa(_0x3536x5,_0x3536x2,_0x3536x3,_0x3536x4)};null== _0x3536x9&& (_0x3536x9= this[_0x763a[245]](_0x3536x2))};return _0x3536x9};mxGraphView[_0x763a[202]][_0x763a[2230]]= function(_0x3536x2){var _0x3536x3=null!= _0x3536x2[_0x763a[124]]?parseFloat(_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2306]]])|| 0:0;return _0x3536x2[_0x763a[241]]()+ _0x3536x3* _0x3536x2[_0x763a[117]]};mxGraphView[_0x763a[202]][_0x763a[2228]]= function(_0x3536x2){var _0x3536x3=null!= _0x3536x2[_0x763a[124]]?parseFloat(_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2307]]])|| 0:0;return _0x3536x2[_0x763a[242]]()+ _0x3536x3* _0x3536x2[_0x763a[119]]};mxGraphView[_0x763a[202]][_0x763a[2087]]= function(_0x3536x2,_0x3536x3){_0x3536x3= null!= _0x3536x3?_0x3536x3:0;null!= _0x3536x2&& (_0x3536x3+= parseFloat(_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2299]]]|| 0));return _0x3536x2[_0x763a[2087]](_0x3536x3* this[_0x763a[255]])};mxGraphView[_0x763a[202]][_0x763a[2305]]= function(_0x3536x2){_0x3536x2= _0x3536x2[_0x763a[124]][mxConstants[_0x763a[2061]]];if(_0x763a[1516]== typeof _0x3536x2){var _0x3536x3=mxStyleRegistry[_0x763a[433]](_0x3536x2);null== _0x3536x3&& this[_0x763a[2295]]()&& (_0x3536x3= mxUtils[_0x763a[1545]](_0x3536x2));_0x3536x2= _0x3536x3};return _0x763a[279]== typeof _0x3536x2?_0x3536x2:null};mxGraphView[_0x763a[202]][_0x763a[2297]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x2= _0x3536x2[_0x763a[439]];var _0x3536x5=null;if(null!= _0x3536x2&& (_0x3536x4|| 2< _0x3536x2[_0x763a[67]]|| null== _0x3536x3)){_0x3536x5= _0x3536x2[_0x763a[67]],_0x3536x5= _0x3536x2[_0x3536x4?Math[_0x763a[243]](1,_0x3536x5- 1):Math[_0x763a[160]](0,_0x3536x5- 2)]};null== _0x3536x5&& null!= _0x3536x3&& (_0x3536x5= new mxPoint(_0x3536x3[_0x763a[241]](),_0x3536x3[_0x763a[242]]()));return _0x3536x5};mxGraphView[_0x763a[202]][_0x763a[1710]]= function(_0x3536x2,_0x3536x3){for(var _0x3536x4=this[_0x763a[1179]][_0x763a[502]](),_0x3536x5=_0x3536x4[_0x763a[1709]](_0x3536x2,_0x3536x3),_0x3536x9=_0x3536x5;null!= _0x3536x5&& _0x3536x5!= this[_0x763a[1741]];){if(!this[_0x763a[1179]][_0x763a[1714]](_0x3536x9)|| this[_0x763a[1179]][_0x763a[1742]](_0x3536x5)){_0x3536x9= _0x3536x5};_0x3536x5= _0x3536x4[_0x763a[1197]](_0x3536x5)};_0x3536x4[_0x763a[1197]](_0x3536x9)== _0x3536x4[_0x763a[501]]()&& (_0x3536x9= null);return _0x3536x9};mxGraphView[_0x763a[202]][_0x763a[2284]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[439]];_0x3536x2[_0x763a[67]]= 0;if(null!= _0x3536x3&& 0< _0x3536x3[_0x763a[67]]){var _0x3536x4=_0x3536x3[0],_0x3536x5=_0x3536x3[_0x3536x3[_0x763a[67]]- 1];if(null== _0x3536x4|| null== _0x3536x5){_0x3536x2[_0x763a[246]]!= this[_0x763a[1741]]&& this[_0x763a[200]](_0x3536x2[_0x763a[246]],!0)}else {if(_0x3536x4[_0x763a[235]]!= _0x3536x5[_0x763a[235]]|| _0x3536x4[_0x763a[236]]!= _0x3536x5[_0x763a[236]]){var _0x3536x9=_0x3536x5[_0x763a[235]]- _0x3536x4[_0x763a[235]],_0x3536xa=_0x3536x5[_0x763a[236]]- _0x3536x4[_0x763a[236]];_0x3536x2[_0x763a[2085]]= Math[_0x763a[428]](_0x3536x9* _0x3536x9+ _0x3536xa* _0x3536xa)}else {_0x3536x2[_0x763a[2085]]= 0};var _0x3536x5=0,_0x3536x12=[],_0x3536xa=_0x3536x4;if(null!= _0x3536xa){for(var _0x3536x4=_0x3536xa[_0x763a[235]],_0x3536x13=_0x3536xa[_0x763a[236]],_0x3536x14=_0x3536x4,_0x3536x15=_0x3536x13,_0x3536x16=1;_0x3536x16< _0x3536x3[_0x763a[67]];_0x3536x16++){var _0x3536x17=_0x3536x3[_0x3536x16];null!= _0x3536x17&& (_0x3536x9= _0x3536xa[_0x763a[235]]- _0x3536x17[_0x763a[235]],_0x3536xa= _0x3536xa[_0x763a[236]]- _0x3536x17[_0x763a[236]],_0x3536x9= Math[_0x763a[428]](_0x3536x9* _0x3536x9+ _0x3536xa* _0x3536xa),_0x3536x12[_0x763a[207]](_0x3536x9),_0x3536x5+= _0x3536x9,_0x3536xa= _0x3536x17,_0x3536x4= Math[_0x763a[243]](_0x3536xa[_0x763a[235]],_0x3536x4),_0x3536x13= Math[_0x763a[243]](_0x3536xa[_0x763a[236]],_0x3536x13),_0x3536x14= Math[_0x763a[160]](_0x3536xa[_0x763a[235]],_0x3536x14),_0x3536x15= Math[_0x763a[160]](_0x3536xa[_0x763a[236]],_0x3536x15))};_0x3536x2[_0x763a[67]]= _0x3536x5;_0x3536x2[_0x763a[2086]]= _0x3536x12;_0x3536x2[_0x763a[235]]= _0x3536x4;_0x3536x2[_0x763a[236]]= _0x3536x13;_0x3536x2[_0x763a[117]]= Math[_0x763a[160]](1,_0x3536x14- _0x3536x4);_0x3536x2[_0x763a[119]]= Math[_0x763a[160]](1,_0x3536x15- _0x3536x13)}}}};mxGraphView[_0x763a[202]][_0x763a[245]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x3536x2[_0x763a[241]](),_0x3536x5=_0x3536x2[_0x763a[242]]();if(null!= _0x3536x2[_0x763a[2086]]&& (null== _0x3536x3|| _0x3536x3[_0x763a[1500]])){for(var _0x3536x9=_0x3536x2[_0x763a[439]][_0x763a[67]],_0x3536xa=((null!= _0x3536x3?_0x3536x3[_0x763a[235]]/ 2:0)+ 0.5)* _0x3536x2[_0x763a[67]],_0x3536x12=_0x3536x2[_0x763a[2086]][0],_0x3536x13=0,_0x3536x14=1;_0x3536xa> _0x3536x13+ _0x3536x12&& _0x3536x14< _0x3536x9- 1;){_0x3536x13+= _0x3536x12,_0x3536x12= _0x3536x2[_0x763a[2086]][_0x3536x14++]};_0x3536x9= 0== _0x3536x12?0:(_0x3536xa- _0x3536x13)/ _0x3536x12;_0x3536xa= _0x3536x2[_0x763a[439]][_0x3536x14- 1];_0x3536x14= _0x3536x2[_0x763a[439]][_0x3536x14];if(null!= _0x3536xa&& null!= _0x3536x14){_0x3536x13= _0x3536x4= _0x3536x5= 0;if(null!= _0x3536x3){var _0x3536x5=_0x3536x3[_0x763a[236]],_0x3536x15=_0x3536x3[_0x763a[1368]];null!= _0x3536x15&& (_0x3536x4= _0x3536x15[_0x763a[235]],_0x3536x13= _0x3536x15[_0x763a[236]])};_0x3536x15= _0x3536x14[_0x763a[235]]- _0x3536xa[_0x763a[235]];_0x3536x14= _0x3536x14[_0x763a[236]]- _0x3536xa[_0x763a[236]];_0x3536x4= _0x3536xa[_0x763a[235]]+ _0x3536x15* _0x3536x9+ ((0== _0x3536x12?0:_0x3536x14/ _0x3536x12)* _0x3536x5+ _0x3536x4)* this[_0x763a[255]];_0x3536x5= _0x3536xa[_0x763a[236]]+ _0x3536x14* _0x3536x9- ((0== _0x3536x12?0:_0x3536x15/ _0x3536x12)* _0x3536x5- _0x3536x13)* this[_0x763a[255]]}}else {null!= _0x3536x3&& (_0x3536x15= _0x3536x3[_0x763a[1368]],null!= _0x3536x15&& (_0x3536x4+= _0x3536x15[_0x763a[235]],_0x3536x5+= _0x3536x15[_0x763a[236]]))};return new mxPoint(_0x3536x4,_0x3536x5)};mxGraphView[_0x763a[202]][_0x763a[2308]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1721]](_0x3536x2[_0x763a[246]]);if(null!= _0x3536x5){var _0x3536x9=_0x3536x2[_0x763a[439]][_0x763a[67]];if(_0x3536x5[_0x763a[1500]]&& 1< _0x3536x9){for(var _0x3536x5=_0x3536x2[_0x763a[67]],_0x3536xa=_0x3536x2[_0x763a[2086]],_0x3536x12=_0x3536x2[_0x763a[439]][0],_0x3536x13=_0x3536x2[_0x763a[439]][1],_0x3536x14=mxUtils[_0x763a[440]](_0x3536x12[_0x763a[235]],_0x3536x12[_0x763a[236]],_0x3536x13[_0x763a[235]],_0x3536x13[_0x763a[236]],_0x3536x3,_0x3536x4),_0x3536x15=0,_0x3536x16=0,_0x3536x17=0,_0x3536x18=2;_0x3536x18< _0x3536x9;_0x3536x18++){_0x3536x16+= _0x3536xa[_0x3536x18- 2],_0x3536x13= _0x3536x2[_0x763a[439]][_0x3536x18],_0x3536x12= mxUtils[_0x763a[440]](_0x3536x12[_0x763a[235]],_0x3536x12[_0x763a[236]],_0x3536x13[_0x763a[235]],_0x3536x13[_0x763a[236]],_0x3536x3,_0x3536x4),_0x3536x12<= _0x3536x14&& (_0x3536x14= _0x3536x12,_0x3536x15= _0x3536x18- 1,_0x3536x17= _0x3536x16),_0x3536x12= _0x3536x13};_0x3536x9= _0x3536xa[_0x3536x15];_0x3536x12= _0x3536x2[_0x763a[439]][_0x3536x15];_0x3536x13= _0x3536x2[_0x763a[439]][_0x3536x15+ 1];_0x3536x14= _0x3536x13[_0x763a[235]];_0x3536xa= _0x3536x13[_0x763a[236]];_0x3536x2= _0x3536x12[_0x763a[235]]- _0x3536x14;_0x3536x15= _0x3536x12[_0x763a[236]]- _0x3536xa;_0x3536x14= _0x3536x3- _0x3536x14;_0x3536xa= _0x3536x4- _0x3536xa;_0x3536x14= _0x3536x2- _0x3536x14;_0x3536xa= _0x3536x15- _0x3536xa;_0x3536xa= _0x3536x14* _0x3536x2+ _0x3536xa* _0x3536x15;_0x3536x2= Math[_0x763a[428]](0>= _0x3536xa?0:_0x3536xa* _0x3536xa/ (_0x3536x2* _0x3536x2+ _0x3536x15* _0x3536x15));_0x3536x2> _0x3536x9&& (_0x3536x2= _0x3536x9);_0x3536x9= Math[_0x763a[428]](mxUtils[_0x763a[440]](_0x3536x12[_0x763a[235]],_0x3536x12[_0x763a[236]],_0x3536x13[_0x763a[235]],_0x3536x13[_0x763a[236]],_0x3536x3,_0x3536x4));-1== mxUtils[_0x763a[2309]](_0x3536x12[_0x763a[235]],_0x3536x12[_0x763a[236]],_0x3536x13[_0x763a[235]],_0x3536x13[_0x763a[236]],_0x3536x3,_0x3536x4)&& (_0x3536x9= -_0x3536x9);return new mxPoint(-2* ((_0x3536x5/ 2- _0x3536x17- _0x3536x2)/ _0x3536x5),_0x3536x9/ this[_0x763a[255]])}};return new mxPoint};mxGraphView[_0x763a[202]][_0x763a[2285]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[439]];_0x3536x2[_0x763a[2079]][_0x763a[235]]= _0x3536x2[_0x763a[241]]();_0x3536x2[_0x763a[2079]][_0x763a[236]]= _0x3536x2[_0x763a[242]]();if(null!= _0x3536x3&& 0< _0x3536x3[_0x763a[67]]&& null!= _0x3536x2[_0x763a[2086]]){var _0x3536x4=this[_0x763a[1179]][_0x763a[1198]](_0x3536x2[_0x763a[246]]);if(_0x3536x4[_0x763a[1500]]){var _0x3536x5=this[_0x763a[245]](_0x3536x2,_0x3536x4);null!= _0x3536x5&& (_0x3536x2[_0x763a[2079]]= _0x3536x5)}else {var _0x3536x5=_0x3536x3[0],_0x3536x9=_0x3536x3[_0x3536x3[_0x763a[67]]- 1];if(null!= _0x3536x5&& null!= _0x3536x9){var _0x3536x3=_0x3536x9[_0x763a[235]]- _0x3536x5[_0x763a[235]],_0x3536xa=_0x3536x9[_0x763a[236]]- _0x3536x5[_0x763a[236]],_0x3536x12=_0x3536x9= 0,_0x3536x4=_0x3536x4[_0x763a[1368]];null!= _0x3536x4&& (_0x3536x9= _0x3536x4[_0x763a[235]],_0x3536x12= _0x3536x4[_0x763a[236]]);_0x3536x4= _0x3536x5[_0x763a[236]]+ _0x3536xa/ 2+ _0x3536x12* this[_0x763a[255]];_0x3536x2[_0x763a[2079]][_0x763a[235]]= _0x3536x5[_0x763a[235]]+ _0x3536x3/ 2+ _0x3536x9* this[_0x763a[255]];_0x3536x2[_0x763a[2079]][_0x763a[236]]= _0x3536x4}}}};mxGraphView[_0x763a[202]][_0x763a[248]]= function(_0x3536x2,_0x3536x3){_0x3536x3= _0x3536x3|| !1;var _0x3536x4=null;null!= _0x3536x2&& (_0x3536x4= this[_0x763a[1214]][_0x763a[203]](_0x3536x2),this[_0x763a[1179]][_0x763a[1714]](_0x3536x2)&& (null== _0x3536x4&& _0x3536x3&& this[_0x763a[1179]][_0x763a[1714]](_0x3536x2)?(_0x3536x4= this[_0x763a[1230]](_0x3536x2),this[_0x763a[1214]][_0x763a[204]](_0x3536x2,_0x3536x4)):_0x3536x3&& (null!= _0x3536x4&& this[_0x763a[2255]])&& (_0x3536x4[_0x763a[124]]= this[_0x763a[1179]][_0x763a[1705]](_0x3536x2))));return _0x3536x4};mxGraphView[_0x763a[202]][_0x763a[2287]]= function(){return this[_0x763a[2254]]};mxGraphView[_0x763a[202]][_0x763a[2310]]= function(_0x3536x2){this[_0x763a[2254]]= _0x3536x2};mxGraphView[_0x763a[202]][_0x763a[2295]]= function(){return this[_0x763a[2251]]};mxGraphView[_0x763a[202]][_0x763a[2311]]= function(_0x3536x2){this[_0x763a[2251]]= _0x3536x2};mxGraphView[_0x763a[202]][_0x763a[2312]]= function(){return this[_0x763a[1214]]};mxGraphView[_0x763a[202]][_0x763a[1517]]= function(_0x3536x2){this[_0x763a[1214]]= _0x3536x2};mxGraphView[_0x763a[202]][_0x763a[2313]]= function(_0x3536x2){if(null== _0x3536x2){return this[_0x763a[1214]]};for(var _0x3536x3=[],_0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){var _0x3536x5=this[_0x763a[248]](_0x3536x2[_0x3536x4]);null!= _0x3536x5&& _0x3536x3[_0x763a[207]](_0x3536x5)};return _0x3536x3};mxGraphView[_0x763a[202]][_0x763a[2265]]= function(_0x3536x2){var _0x3536x3=null;null!= _0x3536x2&& (_0x3536x3= this[_0x763a[1214]][_0x763a[205]](_0x3536x2),null!= _0x3536x3&& (this[_0x763a[1179]][_0x763a[259]][_0x763a[515]](_0x3536x3),_0x3536x3[_0x763a[515]]()));return _0x3536x3};mxGraphView[_0x763a[202]][_0x763a[1230]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[1705]](_0x3536x2);_0x3536x2= new mxCellState(this,_0x3536x2,_0x3536x3);this[_0x763a[1179]][_0x763a[259]][_0x763a[2155]](_0x3536x2,this[_0x763a[2287]]());return _0x3536x2};mxGraphView[_0x763a[202]][_0x763a[2051]]= function(){return this[_0x763a[510]]};mxGraphView[_0x763a[202]][_0x763a[2052]]= function(){return this[_0x763a[2053]]};mxGraphView[_0x763a[202]][_0x763a[2024]]= function(){return this[_0x763a[505]]};mxGraphView[_0x763a[202]][_0x763a[1524]]= function(){return this[_0x763a[506]]};mxGraphView[_0x763a[202]][_0x763a[2314]]= function(_0x3536x2){_0x3536x2= mxEvent[_0x763a[728]](_0x3536x2);return _0x3536x2== this[_0x763a[1179]][_0x763a[526]]|| _0x3536x2[_0x763a[265]]== this[_0x763a[2053]]|| null!= _0x3536x2[_0x763a[265]]&& _0x3536x2[_0x763a[265]][_0x763a[265]]== this[_0x763a[2053]]|| _0x3536x2== this[_0x763a[510]][_0x763a[265]]|| _0x3536x2== this[_0x763a[510]]|| _0x3536x2== this[_0x763a[2053]]|| _0x3536x2== this[_0x763a[505]]|| _0x3536x2== this[_0x763a[506]]};mxGraphView[_0x763a[202]][_0x763a[2315]]= function(_0x3536x2){var _0x3536x3=mxUtils[_0x763a[445]](this[_0x763a[1179]][_0x763a[526]]);_0x3536x2= new mxPoint(_0x3536x2[_0x763a[782]]- _0x3536x3[_0x763a[235]],_0x3536x2[_0x763a[784]]- _0x3536x3[_0x763a[236]]);var _0x3536x3=this[_0x763a[1179]][_0x763a[526]][_0x763a[359]],_0x3536x4=this[_0x763a[1179]][_0x763a[526]][_0x763a[159]];if(_0x3536x3> _0x3536x4&& _0x3536x2[_0x763a[235]]> _0x3536x4+ 2&& _0x3536x2[_0x763a[235]]<= _0x3536x3){return !0};_0x3536x3= this[_0x763a[1179]][_0x763a[526]][_0x763a[167]];_0x3536x4= this[_0x763a[1179]][_0x763a[526]][_0x763a[157]];return _0x3536x3> _0x3536x4&& _0x3536x2[_0x763a[236]]> _0x3536x4+ 2&& _0x3536x2[_0x763a[236]]<= _0x3536x3?!0:!1};mxGraphView[_0x763a[202]][_0x763a[176]]= function(){this[_0x763a[2163]]();var _0x3536x2=this[_0x763a[1179]];_0x3536x2[_0x763a[507]]== mxConstants[_0x763a[508]]?this[_0x763a[1569]]():_0x3536x2[_0x763a[507]]== mxConstants[_0x763a[1523]]?this[_0x763a[1571]]():this[_0x763a[1570]]()};mxGraphView[_0x763a[202]][_0x763a[2163]]= function(){var _0x3536x2=this[_0x763a[1179]],_0x3536x3=_0x3536x2[_0x763a[526]];if(null!= _0x3536x3){mxEvent[_0x763a[759]](_0x3536x3,mxUtils[_0x763a[885]](this,function(_0x3536x3){mxClient[_0x763a[754]]&& _0x3536x2[_0x763a[2203]]()&& _0x3536x2[_0x763a[2126]](!_0x3536x2[_0x763a[2134]]());this[_0x763a[2314]](_0x3536x3)&& (!mxClient[_0x763a[80]]&& !mxClient[_0x763a[76]]&& !mxClient[_0x763a[71]]&& !mxClient[_0x763a[75]]|| !this[_0x763a[2315]](_0x3536x3))&& _0x3536x2[_0x763a[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x3536x3))}),mxUtils[_0x763a[885]](this,function(_0x3536x3){this[_0x763a[2314]](_0x3536x3)&& _0x3536x2[_0x763a[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x3536x3))}),mxUtils[_0x763a[885]](this,function(_0x3536x3){this[_0x763a[2314]](_0x3536x3)&& _0x3536x2[_0x763a[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x3536x3))}));mxEvent[_0x763a[169]](_0x3536x3,_0x763a[760],mxUtils[_0x763a[885]](this,function(_0x3536x3){_0x3536x2[_0x763a[761]](_0x3536x3)}));var _0x3536x4=function(_0x3536x4){var _0x3536x9=null;mxClient[_0x763a[754]]&& (_0x3536x9= mxEvent[_0x763a[731]](_0x3536x4),_0x3536x4= mxEvent[_0x763a[733]](_0x3536x4),_0x3536x4= mxUtils[_0x763a[2196]](_0x3536x3,_0x3536x9,_0x3536x4),_0x3536x9= _0x3536x2[_0x763a[441]][_0x763a[248]](_0x3536x2[_0x763a[999]](_0x3536x4[_0x763a[235]],_0x3536x4[_0x763a[236]])));return _0x3536x9};_0x3536x2[_0x763a[1133]]({mouseDown:function(_0x3536x3,_0x3536x4){_0x3536x2[_0x763a[2316]][_0x763a[1032]]()},mouseMove:function(){},mouseUp:function(){}});this[_0x763a[2317]]= mxUtils[_0x763a[885]](this,function(_0x3536x3){null!= _0x3536x2[_0x763a[2276]]&& _0x3536x2[_0x763a[2276]][_0x763a[2277]]()&& _0x3536x2[_0x763a[2276]][_0x763a[801]]();this[_0x763a[2252]]&& (_0x3536x2[_0x763a[1009]]&& !mxEvent[_0x763a[721]](_0x3536x3))&& _0x3536x2[_0x763a[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x3536x3,_0x3536x4(_0x3536x3)))});this[_0x763a[2318]]= mxUtils[_0x763a[885]](this,function(_0x3536x3){this[_0x763a[2252]]&& _0x3536x2[_0x763a[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x3536x3))});mxEvent[_0x763a[759]](document,null,this[_0x763a[2317]],this[_0x763a[2318]])}};mxGraphView[_0x763a[202]][_0x763a[1570]]= function(){var _0x3536x2=this[_0x763a[1179]][_0x763a[526]];null!= _0x3536x2&& (this[_0x763a[510]]= this[_0x763a[2319]](_0x763a[118],_0x763a[118]),this[_0x763a[2053]]= this[_0x763a[2319]](_0x763a[942],_0x763a[942]),this[_0x763a[505]]= this[_0x763a[2319]](_0x763a[942],_0x763a[942]),this[_0x763a[506]]= this[_0x763a[2319]](_0x763a[942],_0x763a[942]),this[_0x763a[510]][_0x763a[62]](this[_0x763a[2053]]),this[_0x763a[510]][_0x763a[62]](this[_0x763a[505]]),this[_0x763a[510]][_0x763a[62]](this[_0x763a[506]]),_0x3536x2[_0x763a[62]](this[_0x763a[510]]),mxClient[_0x763a[496]]&& (_0x3536x2= mxUtils[_0x763a[885]](this,function(_0x3536x2){_0x3536x2= this[_0x763a[517]]();this[_0x763a[2320]](_0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]+ this[_0x763a[1179]][_0x763a[467]],_0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]+ this[_0x763a[1179]][_0x763a[467]])}),mxEvent[_0x763a[169]](window,_0x763a[129],_0x3536x2)))};mxGraphView[_0x763a[202]][_0x763a[2320]]= function(_0x3536x2,_0x3536x3){if(null!= this[_0x763a[1179]][_0x763a[526]]){var _0x3536x4=this[_0x763a[1179]][_0x763a[526]][_0x763a[167]];this[_0x763a[510]][_0x763a[124]][_0x763a[117]]= this[_0x763a[1179]][_0x763a[526]][_0x763a[359]]< _0x3536x2?_0x3536x2+ _0x763a[168]:_0x763a[118];this[_0x763a[510]][_0x763a[124]][_0x763a[119]]= _0x3536x4< _0x3536x3?_0x3536x3+ _0x763a[168]:_0x763a[118]}};mxGraphView[_0x763a[202]][_0x763a[2319]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=document[_0x763a[55]](_0x763a[529]);null!= _0x3536x2&& null!= _0x3536x3?(_0x3536x4[_0x763a[124]][_0x763a[491]]= _0x763a[492],_0x3536x4[_0x763a[124]][_0x763a[361]]= _0x763a[946],_0x3536x4[_0x763a[124]][_0x763a[125]]= _0x763a[946],_0x3536x4[_0x763a[124]][_0x763a[117]]= _0x3536x2,_0x3536x4[_0x763a[124]][_0x763a[119]]= _0x3536x3):_0x3536x4[_0x763a[124]][_0x763a[491]]= _0x763a[1500];return _0x3536x4};mxGraphView[_0x763a[202]][_0x763a[1571]]= function(){var _0x3536x2=this[_0x763a[1179]][_0x763a[526]];if(null!= _0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[359]],_0x3536x4=_0x3536x2[_0x763a[167]];this[_0x763a[510]]= this[_0x763a[2321]](_0x3536x3,_0x3536x4);this[_0x763a[2053]]= this[_0x763a[2321]](_0x3536x3,_0x3536x4);this[_0x763a[505]]= this[_0x763a[2321]](_0x3536x3,_0x3536x4);this[_0x763a[506]]= this[_0x763a[2321]](_0x3536x3,_0x3536x4);this[_0x763a[510]][_0x763a[62]](this[_0x763a[2053]]);this[_0x763a[510]][_0x763a[62]](this[_0x763a[505]]);this[_0x763a[510]][_0x763a[62]](this[_0x763a[506]]);_0x3536x2[_0x763a[62]](this[_0x763a[510]])}};mxGraphView[_0x763a[202]][_0x763a[2321]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=document[_0x763a[55]](mxClient[_0x763a[463]]+ _0x763a[1499]);_0x3536x4[_0x763a[124]][_0x763a[491]]= _0x763a[492];_0x3536x4[_0x763a[124]][_0x763a[361]]= _0x763a[946];_0x3536x4[_0x763a[124]][_0x763a[125]]= _0x763a[946];_0x3536x4[_0x763a[124]][_0x763a[117]]= _0x3536x2+ _0x763a[168];_0x3536x4[_0x763a[124]][_0x763a[119]]= _0x3536x3+ _0x763a[168];_0x3536x4[_0x763a[57]](_0x763a[1462],_0x3536x2+ _0x763a[537]+ _0x3536x3);_0x3536x4[_0x763a[57]](_0x763a[2322],_0x763a[2323]);return _0x3536x4};mxGraphView[_0x763a[202]][_0x763a[1569]]= function(){var _0x3536x2=this[_0x763a[1179]][_0x763a[526]];this[_0x763a[510]]= document[_0x763a[509]](mxConstants.NS_SVG,_0x763a[449]);this[_0x763a[2053]]= document[_0x763a[509]](mxConstants.NS_SVG,_0x763a[449]);this[_0x763a[510]][_0x763a[62]](this[_0x763a[2053]]);this[_0x763a[505]]= document[_0x763a[509]](mxConstants.NS_SVG,_0x763a[449]);this[_0x763a[510]][_0x763a[62]](this[_0x763a[505]]);this[_0x763a[506]]= document[_0x763a[509]](mxConstants.NS_SVG,_0x763a[449]);this[_0x763a[510]][_0x763a[62]](this[_0x763a[506]]);var _0x3536x3=document[_0x763a[509]](mxConstants.NS_SVG,_0x763a[571]);_0x3536x3[_0x763a[124]][_0x763a[117]]= _0x763a[118];_0x3536x3[_0x763a[124]][_0x763a[119]]= _0x763a[118];_0x3536x3[_0x763a[124]][_0x763a[495]]= _0x763a[694];_0x3536x3[_0x763a[62]](this[_0x763a[510]]);null!= _0x3536x2&& (_0x3536x2[_0x763a[62]](_0x3536x3),_0x763a[2324]== mxUtils[_0x763a[275]](_0x3536x2)[_0x763a[491]]&& (_0x3536x2[_0x763a[124]][_0x763a[491]]= _0x763a[1500]))};mxGraphView[_0x763a[202]][_0x763a[515]]= function(){var _0x3536x2=null!= this[_0x763a[510]]?this[_0x763a[510]][_0x763a[538]]:null;null== _0x3536x2&& (_0x3536x2= this[_0x763a[510]]);null!= _0x3536x2&& null!= _0x3536x2[_0x763a[265]]&& (this[_0x763a[200]](this[_0x763a[1741]],!0),mxEvent[_0x763a[938]](document,null,this[_0x763a[2317]],this[_0x763a[2318]]),mxEvent[_0x763a[762]](this[_0x763a[1179]][_0x763a[526]]),_0x3536x2[_0x763a[265]][_0x763a[266]](_0x3536x2),this[_0x763a[506]]= this[_0x763a[505]]= this[_0x763a[2053]]= this[_0x763a[510]]= this[_0x763a[2318]]= this[_0x763a[2317]]= null)};function mxCurrentRootChange(_0x3536x2,_0x3536x3){this[_0x763a[441]]= _0x3536x2;this[_0x763a[257]]= this[_0x763a[813]]= _0x3536x3;this[_0x763a[2325]]= null== _0x3536x3;if(!this[_0x763a[2325]]){for(var _0x3536x4=this[_0x763a[441]][_0x763a[1741]],_0x3536x5=this[_0x763a[441]][_0x763a[1179]][_0x763a[502]]();null!= _0x3536x4;){if(_0x3536x4== _0x3536x3){this[_0x763a[2325]]= !0;break};_0x3536x4= _0x3536x5[_0x763a[1197]](_0x3536x4)}}}mxCurrentRootChange[_0x763a[202]][_0x763a[350]]= function(){var _0x3536x2=this[_0x763a[441]][_0x763a[1741]];this[_0x763a[441]][_0x763a[1741]]= this[_0x763a[257]];this[_0x763a[257]]= _0x3536x2;_0x3536x2= this[_0x763a[441]][_0x763a[1179]][_0x763a[2326]](this[_0x763a[441]][_0x763a[1741]]);null!= _0x3536x2&& (this[_0x763a[441]][_0x763a[513]]= new mxPoint(-_0x3536x2[_0x763a[235]],-_0x3536x2[_0x763a[236]]));this[_0x763a[441]][_0x763a[746]]( new mxEventObject(this[_0x763a[2325]]?mxEvent[_0x763a[2327]]:mxEvent[_0x763a[2328]],_0x763a[813],this[_0x763a[441]][_0x763a[1741]],_0x763a[257],this[_0x763a[257]]));this[_0x763a[2325]]?(this[_0x763a[441]][_0x763a[200]](this[_0x763a[441]][_0x763a[1741]],!0),this[_0x763a[441]][_0x763a[2264]]()):this[_0x763a[441]][_0x763a[802]]();this[_0x763a[2325]]= !this[_0x763a[2325]]};function mxGraph(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){this[_0x763a[2329]]= null;this[_0x763a[2330]]= _0x3536x4;this[_0x763a[507]]= mxClient[_0x763a[48]]?mxConstants[_0x763a[508]]:_0x3536x4== mxConstants[_0x763a[2331]]&& mxClient[_0x763a[47]]?mxConstants[_0x763a[1523]]:_0x3536x4== mxConstants[_0x763a[2332]]?mxConstants[_0x763a[1656]]:_0x3536x4== mxConstants[_0x763a[2333]]?mxConstants[_0x763a[2209]]:mxConstants[_0x763a[2334]];this[_0x763a[251]]= null!= _0x3536x3?_0x3536x3: new mxGraphModel;this[_0x763a[2335]]= [];this[_0x763a[2336]]= [];this[_0x763a[259]]= this[_0x763a[2337]]();this[_0x763a[2339]](this[_0x763a[2338]]());this[_0x763a[2341]](null!= _0x3536x5?_0x3536x5:this[_0x763a[2340]]());this[_0x763a[441]]= this[_0x763a[2342]]();this[_0x763a[2343]]= mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x3){this[_0x763a[1177]](_0x3536x3[_0x763a[720]](_0x763a[1061])[_0x763a[1065]])});this[_0x763a[251]][_0x763a[169]](mxEvent.CHANGE,this[_0x763a[2343]]);this[_0x763a[2344]]();null!= _0x3536x2&& this[_0x763a[176]](_0x3536x2);this[_0x763a[441]][_0x763a[2259]]()}mxLoadResources&& mxResources[_0x763a[99]](mxClient[_0x763a[86]]+ _0x763a[2345]);mxGraph[_0x763a[202]]= new mxEventSource;mxGraph[_0x763a[202]][_0x763a[196]]= mxGraph;mxGraph[_0x763a[202]][_0x763a[2346]]= [];mxGraph[_0x763a[202]][_0x763a[2329]]= null;mxGraph[_0x763a[202]][_0x763a[1009]]= !1;mxGraph[_0x763a[202]][_0x763a[251]]= null;mxGraph[_0x763a[202]][_0x763a[441]]= null;mxGraph[_0x763a[202]][_0x763a[94]]= null;mxGraph[_0x763a[202]][_0x763a[2105]]= null;mxGraph[_0x763a[202]][_0x763a[2347]]= null;mxGraph[_0x763a[202]][_0x763a[259]]= null;mxGraph[_0x763a[202]][_0x763a[2335]]= null;mxGraph[_0x763a[202]][_0x763a[2330]]= null;mxGraph[_0x763a[202]][_0x763a[507]]= null;mxGraph[_0x763a[202]][_0x763a[1020]]= 10;mxGraph[_0x763a[202]][_0x763a[991]]= !0;mxGraph[_0x763a[202]][_0x763a[2348]]= !0;mxGraph[_0x763a[202]][_0x763a[2349]]= !0;mxGraph[_0x763a[202]][_0x763a[2350]]= 700;mxGraph[_0x763a[202]][_0x763a[2351]]= 25;mxGraph[_0x763a[202]][_0x763a[2352]]= 0;mxGraph[_0x763a[202]][_0x763a[2352]]= 0;mxGraph[_0x763a[202]][_0x763a[2213]]= 0;mxGraph[_0x763a[202]][_0x763a[2215]]= !0;mxGraph[_0x763a[202]][_0x763a[2353]]= 4;mxGraph[_0x763a[202]][_0x763a[2354]]= 0.5;mxGraph[_0x763a[202]][_0x763a[2355]]= null;mxGraph[_0x763a[202]][_0x763a[2356]]= null;mxGraph[_0x763a[202]][_0x763a[1617]]= null;mxGraph[_0x763a[202]][_0x763a[2273]]= !1;mxGraph[_0x763a[202]][_0x763a[2357]]= !1;mxGraph[_0x763a[202]][_0x763a[2358]]= _0x763a[579];mxGraph[_0x763a[202]][_0x763a[2359]]= !0;mxGraph[_0x763a[202]][_0x763a[2360]]= 20;mxGraph[_0x763a[202]][_0x763a[2361]]= !1;mxGraph[_0x763a[202]][_0x763a[2013]]= mxConstants[_0x763a[516]];mxGraph[_0x763a[202]][_0x763a[2012]]= 1.5;mxGraph[_0x763a[202]][_0x763a[984]]= !0;mxGraph[_0x763a[202]][_0x763a[2362]]= !0;mxGraph[_0x763a[202]][_0x763a[2363]]= !0;mxGraph[_0x763a[202]][_0x763a[2364]]= !1;mxGraph[_0x763a[202]][_0x763a[2365]]= !0;mxGraph[_0x763a[202]][_0x763a[2366]]= !0;mxGraph[_0x763a[202]][_0x763a[2367]]= !0;mxGraph[_0x763a[202]][_0x763a[2368]]= !1;mxGraph[_0x763a[202]][_0x763a[2369]]= !0;mxGraph[_0x763a[202]][_0x763a[2206]]= !0;mxGraph[_0x763a[202]][_0x763a[2370]]= !0;mxGraph[_0x763a[202]][_0x763a[2371]]= !0;mxGraph[_0x763a[202]][_0x763a[2372]]= !0;mxGraph[_0x763a[202]][_0x763a[2373]]= !0;mxGraph[_0x763a[202]][_0x763a[2374]]= !1;mxGraph[_0x763a[202]][_0x763a[2375]]= !1;mxGraph[_0x763a[202]][_0x763a[2376]]= !0;mxGraph[_0x763a[202]][_0x763a[2377]]= !0;mxGraph[_0x763a[202]][_0x763a[2378]]= !0;mxGraph[_0x763a[202]][_0x763a[2379]]= !0;mxGraph[_0x763a[202]][_0x763a[2380]]= !0;mxGraph[_0x763a[202]][_0x763a[2381]]= !1;mxGraph[_0x763a[202]][_0x763a[1012]]= !0;mxGraph[_0x763a[202]][_0x763a[2382]]= !1;mxGraph[_0x763a[202]][_0x763a[2383]]= !1;mxGraph[_0x763a[202]][_0x763a[2384]]= !1;mxGraph[_0x763a[202]][_0x763a[1013]]= !0;mxGraph[_0x763a[202]][_0x763a[2385]]= null;mxGraph[_0x763a[202]][_0x763a[2386]]= null;mxGraph[_0x763a[202]][_0x763a[2387]]= null;mxGraph[_0x763a[202]][_0x763a[2388]]= null;mxGraph[_0x763a[202]][_0x763a[2389]]= !1;mxGraph[_0x763a[202]][_0x763a[467]]= 0;mxGraph[_0x763a[202]][_0x763a[2158]]= !0;mxGraph[_0x763a[202]][_0x763a[2159]]= !1;mxGraph[_0x763a[202]][_0x763a[2168]]= !0;mxGraph[_0x763a[202]][_0x763a[2390]]= !0;mxGraph[_0x763a[202]][_0x763a[2391]]= !0;mxGraph[_0x763a[202]][_0x763a[2392]]= !0;mxGraph[_0x763a[202]][_0x763a[2393]]= !0;mxGraph[_0x763a[202]][_0x763a[2394]]= !0;mxGraph[_0x763a[202]][_0x763a[2395]]= 1.2;mxGraph[_0x763a[202]][_0x763a[2396]]= !1;mxGraph[_0x763a[202]][_0x763a[2397]]= !0;mxGraph[_0x763a[202]][_0x763a[2398]]= !0;mxGraph[_0x763a[202]][_0x763a[2399]]= !1;mxGraph[_0x763a[202]][_0x763a[2400]]= !1;mxGraph[_0x763a[202]][_0x763a[2401]]= !0;mxGraph[_0x763a[202]][_0x763a[2402]]= !1;mxGraph[_0x763a[202]][_0x763a[2293]]= mxEdgeStyle[_0x763a[2403]];mxGraph[_0x763a[202]][_0x763a[2404]]= !0;mxGraph[_0x763a[202]][_0x763a[2405]]= !1;mxGraph[_0x763a[202]][_0x763a[2406]]= !0;mxGraph[_0x763a[202]][_0x763a[2407]]= !1;mxGraph[_0x763a[202]][_0x763a[2408]]= !0;mxGraph[_0x763a[202]][_0x763a[2409]]= !0;mxGraph[_0x763a[202]][_0x763a[2410]]= !1;mxGraph[_0x763a[202]][_0x763a[2411]]= !0;mxGraph[_0x763a[202]][_0x763a[2412]]= !0;mxGraph[_0x763a[202]][_0x763a[2180]]= mxConstants[_0x763a[2065]];mxGraph[_0x763a[202]][_0x763a[2336]]= null;mxGraph[_0x763a[202]][_0x763a[2413]]= 0.1;mxGraph[_0x763a[202]][_0x763a[2414]]= 8;mxGraph[_0x763a[202]][_0x763a[1136]]= 0;mxGraph[_0x763a[202]][_0x763a[1137]]= 0;mxGraph[_0x763a[202]][_0x763a[2415]]= new mxImage(mxClient[_0x763a[88]]+ _0x763a[2416],9,9);mxGraph[_0x763a[202]][_0x763a[2417]]= new mxImage(mxClient[_0x763a[88]]+ _0x763a[2418],9,9);mxGraph[_0x763a[202]][_0x763a[2419]]= new mxImage(_0x763a[2420],16,16);mxGraph[_0x763a[202]][_0x763a[2421]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[2422]:_0x763a[110];mxGraph[_0x763a[202]][_0x763a[2423]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[2424]:_0x763a[110];mxGraph[_0x763a[202]][_0x763a[2425]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[2426]:_0x763a[110];mxGraph[_0x763a[202]][_0x763a[176]]= function(_0x3536x2){this[_0x763a[526]]= _0x3536x2;this[_0x763a[2347]]= this[_0x763a[2427]]();this[_0x763a[441]][_0x763a[176]]();this[_0x763a[2258]]();mxClient[_0x763a[80]]&& (mxEvent[_0x763a[169]](window,_0x763a[2428],mxUtils[_0x763a[885]](this,function(){this[_0x763a[515]]()})),mxEvent[_0x763a[169]](_0x3536x2,_0x763a[2429],mxUtils[_0x763a[885]](this,function(){return this[_0x763a[2203]]()})));8== document[_0x763a[5]]&& _0x3536x2[_0x763a[1583]](_0x763a[1582],_0x763a[2430])};mxGraph[_0x763a[202]][_0x763a[2344]]= function(_0x3536x2){this[_0x763a[2276]]= new mxTooltipHandler(this);this[_0x763a[2276]][_0x763a[995]](!1);this[_0x763a[2316]]= new mxPanningHandler(this);this[_0x763a[2316]][_0x763a[2431]]= !1;this[_0x763a[2432]]= new mxSelectionCellsHandler(this);this[_0x763a[2433]]= new mxConnectionHandler(this);this[_0x763a[2433]][_0x763a[995]](!1);this[_0x763a[1011]]= new mxGraphHandler(this)};mxGraph[_0x763a[202]][_0x763a[2338]]= function(){return new mxGraphSelectionModel(this)};mxGraph[_0x763a[202]][_0x763a[2340]]= function(){return new mxStylesheet};mxGraph[_0x763a[202]][_0x763a[2342]]= function(){return new mxGraphView(this)};mxGraph[_0x763a[202]][_0x763a[2337]]= function(){return new mxCellRenderer};mxGraph[_0x763a[202]][_0x763a[2427]]= function(){return new mxCellEditor(this)};mxGraph[_0x763a[202]][_0x763a[502]]= function(){return this[_0x763a[251]]};mxGraph[_0x763a[202]][_0x763a[249]]= function(){return this[_0x763a[441]]};mxGraph[_0x763a[202]][_0x763a[2434]]= function(){return this[_0x763a[94]]};mxGraph[_0x763a[202]][_0x763a[2341]]= function(_0x3536x2){this[_0x763a[94]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2435]]= function(){return this[_0x763a[2105]]};mxGraph[_0x763a[202]][_0x763a[2339]]= function(_0x3536x2){this[_0x763a[2105]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2436]]= function(_0x3536x2){for(var _0x3536x3=[],_0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){var _0x3536x5=_0x3536x2[_0x3536x4];if(_0x3536x5[_0x763a[196]]!= mxRootChange){var _0x3536x9=null;_0x3536x5 instanceof mxChildChange&& null== _0x3536x5[_0x763a[257]]?_0x3536x9= _0x3536x5[_0x763a[247]]:null!= _0x3536x5[_0x763a[246]]&& _0x3536x5[_0x763a[246]] instanceof mxCell&& (_0x3536x9= _0x3536x5[_0x763a[246]]);null!= _0x3536x9&& 0> mxUtils[_0x763a[2]](_0x3536x3,_0x3536x9)&& _0x3536x3[_0x763a[207]](_0x3536x9)}};return this[_0x763a[502]]()[_0x763a[1964]](_0x3536x3)};mxGraph[_0x763a[202]][_0x763a[1177]]= function(_0x3536x2){for(var _0x3536x3=0;_0x3536x3< _0x3536x2[_0x763a[67]];_0x3536x3++){this[_0x763a[2437]](_0x3536x2[_0x3536x3])};this[_0x763a[2439]](this[_0x763a[2438]](_0x3536x2));this[_0x763a[441]][_0x763a[2264]]();this[_0x763a[2258]]()};mxGraph[_0x763a[202]][_0x763a[2438]]= function(_0x3536x2){for(var _0x3536x3=[],_0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){var _0x3536x5=_0x3536x2[_0x3536x4];if(_0x3536x5 instanceof mxRootChange){break}else {_0x3536x5 instanceof mxChildChange?null!= _0x3536x5[_0x763a[257]]&& null== _0x3536x5[_0x763a[1101]]&& (_0x3536x3= _0x3536x3[_0x763a[1919]](this[_0x763a[251]][_0x763a[1939]](_0x3536x5[_0x763a[247]]))):_0x3536x5 instanceof mxVisibleChange&& (_0x3536x3= _0x3536x3[_0x763a[1919]](this[_0x763a[251]][_0x763a[1939]](_0x3536x5[_0x763a[246]])))}};return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[2437]]= function(_0x3536x2){if(_0x3536x2 instanceof mxRootChange){this[_0x763a[2440]](),this[_0x763a[2441]](_0x3536x2[_0x763a[257]]),this[_0x763a[2398]]&& (this[_0x763a[441]][_0x763a[255]]= 1,this[_0x763a[441]][_0x763a[513]][_0x763a[235]]= 0,this[_0x763a[441]][_0x763a[513]][_0x763a[236]]= 0),this[_0x763a[746]]( new mxEventObject(mxEvent.ROOT))}else {if(_0x3536x2 instanceof mxChildChange){var _0x3536x3=this[_0x763a[251]][_0x763a[1197]](_0x3536x2[_0x763a[247]]);null!= _0x3536x3?this[_0x763a[441]][_0x763a[2263]](_0x3536x2[_0x763a[247]],!0,!1,null!= _0x3536x2[_0x763a[257]]):(this[_0x763a[2441]](_0x3536x2[_0x763a[247]]),this[_0x763a[441]][_0x763a[1741]]== _0x3536x2[_0x763a[247]]&& this[_0x763a[2442]]());_0x3536x3!= _0x3536x2[_0x763a[257]]&& (null!= _0x3536x3&& this[_0x763a[441]][_0x763a[2263]](_0x3536x3,!1,!1),null!= _0x3536x2[_0x763a[257]]&& this[_0x763a[441]][_0x763a[2263]](_0x3536x2[_0x763a[257]],!1,!1))}else {_0x3536x2 instanceof mxTerminalChange|| _0x3536x2 instanceof mxGeometryChange?this[_0x763a[441]][_0x763a[2263]](_0x3536x2[_0x763a[246]]):_0x3536x2 instanceof mxValueChange?this[_0x763a[441]][_0x763a[2263]](_0x3536x2[_0x763a[246]],!1,!1):_0x3536x2 instanceof mxStyleChange?(this[_0x763a[441]][_0x763a[2263]](_0x3536x2[_0x763a[246]],!0,!0,!1),this[_0x763a[441]][_0x763a[2265]](_0x3536x2[_0x763a[246]])):null!= _0x3536x2[_0x763a[246]]&& _0x3536x2[_0x763a[246]] instanceof mxCell&& this[_0x763a[2441]](_0x3536x2[_0x763a[246]])}}};mxGraph[_0x763a[202]][_0x763a[2441]]= function(_0x3536x2){for(var _0x3536x3=this[_0x763a[251]][_0x763a[262]](_0x3536x2),_0x3536x4=0;_0x3536x4< _0x3536x3;_0x3536x4++){this[_0x763a[2441]](this[_0x763a[251]][_0x763a[263]](_0x3536x2,_0x3536x4))};this[_0x763a[441]][_0x763a[2265]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2443]]= function(_0x3536x2,_0x3536x3){null== _0x3536x2[_0x763a[1211]]&& (_0x3536x2[_0x763a[1211]]= []);_0x3536x2[_0x763a[1211]][_0x763a[207]](_0x3536x3);var _0x3536x4=this[_0x763a[441]][_0x763a[248]](_0x3536x2);null!= _0x3536x4&& this[_0x763a[259]][_0x763a[258]](_0x3536x4);this[_0x763a[746]]( new mxEventObject(mxEvent.ADD_OVERLAY,_0x763a[246],_0x3536x2,_0x763a[2201],_0x3536x3));return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[2200]]= function(_0x3536x2){return _0x3536x2[_0x763a[1211]]};mxGraph[_0x763a[202]][_0x763a[2444]]= function(_0x3536x2,_0x3536x3){if(null== _0x3536x3){this[_0x763a[2445]](_0x3536x2)}else {var _0x3536x4=mxUtils[_0x763a[2]](_0x3536x2[_0x763a[1211]],_0x3536x3);0<= _0x3536x4?(_0x3536x2[_0x763a[1211]][_0x763a[300]](_0x3536x4,1),0== _0x3536x2[_0x763a[1211]][_0x763a[67]]&& (_0x3536x2[_0x763a[1211]]= null),_0x3536x4= this[_0x763a[441]][_0x763a[248]](_0x3536x2),null!= _0x3536x4&& this[_0x763a[259]][_0x763a[258]](_0x3536x4),this[_0x763a[746]]( new mxEventObject(mxEvent.REMOVE_OVERLAY,_0x763a[246],_0x3536x2,_0x763a[2201],_0x3536x3))):_0x3536x3= null};return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[2445]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[1211]];if(null!= _0x3536x3){_0x3536x2[_0x763a[1211]]= null;var _0x3536x4=this[_0x763a[441]][_0x763a[248]](_0x3536x2);null!= _0x3536x4&& this[_0x763a[259]][_0x763a[258]](_0x3536x4);for(_0x3536x4= 0;_0x3536x4< _0x3536x3[_0x763a[67]];_0x3536x4++){this[_0x763a[746]]( new mxEventObject(mxEvent.REMOVE_OVERLAY,_0x763a[246],_0x3536x2,_0x763a[2201],_0x3536x3[_0x3536x4]))}};return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[2446]]= function(_0x3536x2){_0x3536x2= null!= _0x3536x2?_0x3536x2:this[_0x763a[251]][_0x763a[501]]();this[_0x763a[2445]](_0x3536x2);for(var _0x3536x3=this[_0x763a[251]][_0x763a[262]](_0x3536x2),_0x3536x4=0;_0x3536x4< _0x3536x3;_0x3536x4++){var _0x3536x5=this[_0x763a[251]][_0x763a[263]](_0x3536x2,_0x3536x4);this[_0x763a[2446]](_0x3536x5)}};mxGraph[_0x763a[202]][_0x763a[2447]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){if(null!= _0x3536x3&& 0< _0x3536x3[_0x763a[67]]){return _0x3536x4= null!= _0x3536x4?_0x3536x4:this[_0x763a[2419]],_0x3536x3= new mxCellOverlay(_0x3536x4,_0x763a[2448]+ _0x3536x3+ _0x763a[2449]),_0x3536x5&& _0x3536x3[_0x763a[169]](mxEvent.CLICK,mxUtils[_0x763a[885]](this,function(_0x3536x3,_0x3536x4){this[_0x763a[994]]()&& this[_0x763a[2450]](_0x3536x2)})),this[_0x763a[2443]](_0x3536x2,_0x3536x3)};this[_0x763a[2445]](_0x3536x2);return null};mxGraph[_0x763a[202]][_0x763a[855]]= function(_0x3536x2){this[_0x763a[2451]](null,_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2451]]= function(_0x3536x2,_0x3536x3){null== _0x3536x2&& (_0x3536x2= this[_0x763a[2452]](),null!= _0x3536x2&& !this[_0x763a[2453]](_0x3536x2)&& (_0x3536x2= null));null!= _0x3536x2&& (this[_0x763a[746]]( new mxEventObject(mxEvent.START_EDITING,_0x763a[246],_0x3536x2,_0x763a[763],_0x3536x3)),this[_0x763a[2347]][_0x763a[855]](_0x3536x2,_0x3536x3))};mxGraph[_0x763a[202]][_0x763a[2142]]= function(_0x3536x2,_0x3536x3){return this[_0x763a[2454]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2126]]= function(_0x3536x2){this[_0x763a[2347]][_0x763a[2126]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[850]]= function(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[251]][_0x763a[473]]();try{this[_0x763a[2456]](_0x3536x2,_0x3536x3,this[_0x763a[2455]](_0x3536x2)),this[_0x763a[746]]( new mxEventObject(mxEvent.LABEL_CHANGED,_0x763a[246],_0x3536x2,_0x763a[131],_0x3536x3,_0x763a[763],_0x3536x4))}finally{this[_0x763a[251]][_0x763a[476]]()};return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2456]]= function(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[251]][_0x763a[473]]();try{this[_0x763a[251]][_0x763a[1966]](_0x3536x2,_0x3536x3),_0x3536x4&& this[_0x763a[2457]](_0x3536x2,!1)}finally{this[_0x763a[251]][_0x763a[476]]()}};mxGraph[_0x763a[202]][_0x763a[859]]= function(_0x3536x2){this[_0x763a[2126]](!0);this[_0x763a[2433]][_0x763a[862]]();this[_0x763a[1011]][_0x763a[862]]();_0x3536x2= this[_0x763a[897]]();for(var _0x3536x3=0;_0x3536x3< _0x3536x2[_0x763a[67]];_0x3536x3++){var _0x3536x4=this[_0x763a[441]][_0x763a[248]](_0x3536x2[_0x3536x3]);null!= _0x3536x4&& null!= _0x3536x4[_0x763a[2458]]&& _0x3536x4[_0x763a[2458]][_0x763a[862]]()}};mxGraph[_0x763a[202]][_0x763a[173]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[727]](),_0x3536x4=_0x3536x2[_0x763a[736]](),_0x3536x5= new mxEventObject(mxEvent.CLICK,_0x763a[763],_0x3536x3,_0x763a[246],_0x3536x4);_0x3536x2[_0x763a[721]]()&& _0x3536x5[_0x763a[722]]();this[_0x763a[746]](_0x3536x5);this[_0x763a[994]]()&& (!mxEvent[_0x763a[721]](_0x3536x3)&& !_0x3536x5[_0x763a[721]]())&& (null!= _0x3536x4?this[_0x763a[2459]](_0x3536x4,_0x3536x3):(_0x3536x4= null,this[_0x763a[2460]]()&& (_0x3536x4= this[_0x763a[2461]](_0x3536x2[_0x763a[734]](),_0x3536x2[_0x763a[735]]())),null!= _0x3536x4?this[_0x763a[2459]](_0x3536x4,_0x3536x3):this[_0x763a[2462]](_0x3536x3)|| this[_0x763a[2440]]()))};mxGraph[_0x763a[202]][_0x763a[761]]= function(_0x3536x2,_0x3536x3){var _0x3536x4= new mxEventObject(mxEvent.DOUBLE_CLICK,_0x763a[763],_0x3536x2,_0x763a[246],_0x3536x3);this[_0x763a[746]](_0x3536x4);this[_0x763a[994]]()&& (!mxEvent[_0x763a[721]](_0x3536x2)&& !_0x3536x4[_0x763a[721]]()&& null!= _0x3536x3&& this[_0x763a[2453]](_0x3536x3))&& this[_0x763a[2451]](_0x3536x3,_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[1014]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){if(!this[_0x763a[2382]]&& (this[_0x763a[2384]]|| mxUtils[_0x763a[1134]](this[_0x763a[526]]))){var _0x3536x9=this[_0x763a[526]];_0x3536x5= null!= _0x3536x5?_0x3536x5:20;if(_0x3536x2>= _0x3536x9[_0x763a[360]]&& _0x3536x3>= _0x3536x9[_0x763a[190]]&& _0x3536x2<= _0x3536x9[_0x763a[360]]+ _0x3536x9[_0x763a[159]]&& _0x3536x3<= _0x3536x9[_0x763a[190]]+ _0x3536x9[_0x763a[157]]){var _0x3536xa=_0x3536x9[_0x763a[360]]+ _0x3536x9[_0x763a[159]]- _0x3536x2;if(_0x3536xa< _0x3536x5){if(_0x3536x2= _0x3536x9[_0x763a[360]],_0x3536x9[_0x763a[360]]+= _0x3536x5- _0x3536xa,_0x3536x4&& _0x3536x2== _0x3536x9[_0x763a[360]]){if(this[_0x763a[507]]== mxConstants[_0x763a[508]]){_0x3536x2= this[_0x763a[441]][_0x763a[2024]]()[_0x763a[538]];var _0x3536x12=this[_0x763a[526]][_0x763a[1526]]+ _0x3536x5- _0x3536xa}else {_0x3536x12= Math[_0x763a[160]](_0x3536x9[_0x763a[159]],_0x3536x9[_0x763a[1526]])+ _0x3536x5- _0x3536xa,_0x3536x2= this[_0x763a[441]][_0x763a[2051]]()};_0x3536x2[_0x763a[124]][_0x763a[117]]= _0x3536x12+ _0x763a[168];_0x3536x9[_0x763a[360]]+= _0x3536x5- _0x3536xa}}else {_0x3536xa= _0x3536x2- _0x3536x9[_0x763a[360]],_0x3536xa< _0x3536x5&& (_0x3536x9[_0x763a[360]]-= _0x3536x5- _0x3536xa)};_0x3536xa= _0x3536x9[_0x763a[190]]+ _0x3536x9[_0x763a[157]]- _0x3536x3;_0x3536xa< _0x3536x5?(_0x3536x2= _0x3536x9[_0x763a[190]],_0x3536x9[_0x763a[190]]+= _0x3536x5- _0x3536xa,_0x3536x2== _0x3536x9[_0x763a[190]]&& _0x3536x4&& (this[_0x763a[507]]== mxConstants[_0x763a[508]]?(_0x3536x2= this[_0x763a[441]][_0x763a[2024]]()[_0x763a[538]],_0x3536x3= this[_0x763a[526]][_0x763a[191]]+ _0x3536x5- _0x3536xa):(_0x3536x3= Math[_0x763a[160]](_0x3536x9[_0x763a[157]],_0x3536x9[_0x763a[191]])+ _0x3536x5- _0x3536xa,_0x3536x2= this[_0x763a[441]][_0x763a[2051]]()),_0x3536x2[_0x763a[124]][_0x763a[119]]= _0x3536x3+ _0x763a[168],_0x3536x9[_0x763a[190]]+= _0x3536x5- _0x3536xa)):(_0x3536xa= _0x3536x3- _0x3536x9[_0x763a[190]],_0x3536xa< _0x3536x5&& (_0x3536x9[_0x763a[190]]-= _0x3536x5- _0x3536xa))}}else {this[_0x763a[2383]]&& !this[_0x763a[2316]][_0x763a[1124]]&& (null== this[_0x763a[2463]]&& (this[_0x763a[2463]]= this[_0x763a[2464]]()),this[_0x763a[2463]][_0x763a[1143]](_0x3536x2+ this[_0x763a[1136]],_0x3536x3+ this[_0x763a[1137]]))}};mxGraph[_0x763a[202]][_0x763a[2464]]= function(){return new mxPanningManager(this)};mxGraph[_0x763a[202]][_0x763a[2465]]= function(){function _0x3536x2(_0x3536x2){var _0x3536x3=0,_0x3536x3=_0x763a[2466]== _0x3536x2?2:_0x763a[2467]== _0x3536x2?4:_0x763a[2468]== _0x3536x2?6:parseInt(_0x3536x2);isNaN(_0x3536x3)&& (_0x3536x3= 0);return _0x3536x3}var _0x3536x3=mxUtils[_0x763a[275]](this[_0x763a[526]]),_0x3536x4= new mxRectangle;_0x3536x4[_0x763a[235]]= _0x3536x2(_0x3536x3[_0x763a[2469]])+ parseInt(_0x3536x3[_0x763a[357]]|| 0);_0x3536x4[_0x763a[236]]= _0x3536x2(_0x3536x3[_0x763a[2470]])+ parseInt(_0x3536x3[_0x763a[2471]]|| 0);_0x3536x4[_0x763a[117]]= _0x3536x2(_0x3536x3[_0x763a[2472]])+ parseInt(_0x3536x3[_0x763a[1164]]|| 0);_0x3536x4[_0x763a[119]]= _0x3536x2(_0x3536x3[_0x763a[2473]])+ parseInt(_0x3536x3[_0x763a[2474]]|| 0);return _0x3536x4};mxGraph[_0x763a[202]][_0x763a[2475]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x2= this[_0x763a[441]][_0x763a[255]];var _0x3536x5=this[_0x763a[441]][_0x763a[513]],_0x3536x9=this[_0x763a[2013]],_0x3536xa=_0x3536x2* this[_0x763a[2012]],_0x3536x9= new mxRectangle(0,0,_0x3536x9[_0x763a[117]]* _0x3536xa,_0x3536x9[_0x763a[119]]* _0x3536xa);_0x3536x3= this[_0x763a[2357]]?Math[_0x763a[430]](_0x3536x3/ _0x3536x9[_0x763a[117]]):1;_0x3536x4= this[_0x763a[2357]]?Math[_0x763a[430]](_0x3536x4/ _0x3536x9[_0x763a[119]]):1;return new mxRectangle(0,0,_0x3536x3* _0x3536x9[_0x763a[117]]+ 2+ _0x3536x5[_0x763a[235]]/ _0x3536x2,_0x3536x4* _0x3536x9[_0x763a[119]]+ 2+ _0x3536x5[_0x763a[236]]/ _0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2258]]= function(){var _0x3536x2=this[_0x763a[517]]();if(null!= this[_0x763a[526]]){var _0x3536x3=this[_0x763a[2476]](),_0x3536x4=Math[_0x763a[160]](0,_0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]+ 1+ _0x3536x3),_0x3536x3=Math[_0x763a[160]](0,_0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]+ 1+ _0x3536x3);null!= this[_0x763a[2387]]&& (_0x3536x4= Math[_0x763a[160]](_0x3536x4,this[_0x763a[2387]][_0x763a[117]]),_0x3536x3= Math[_0x763a[160]](_0x3536x3,this[_0x763a[2387]][_0x763a[119]]));this[_0x763a[2389]]&& this[_0x763a[2477]](_0x3536x4,_0x3536x3);if(this[_0x763a[2361]]|| !mxClient[_0x763a[80]]&& this[_0x763a[2273]]){var _0x3536x5=this[_0x763a[2475]](_0x3536x2,_0x3536x4,_0x3536x3);null!= _0x3536x5&& (_0x3536x4= _0x3536x5[_0x763a[117]],_0x3536x3= _0x3536x5[_0x763a[119]])};null!= this[_0x763a[2386]]&& (_0x3536x4= Math[_0x763a[160]](_0x3536x4,this[_0x763a[2386]][_0x763a[117]]* this[_0x763a[441]][_0x763a[255]]),_0x3536x3= Math[_0x763a[160]](_0x3536x3,this[_0x763a[2386]][_0x763a[119]]* this[_0x763a[441]][_0x763a[255]]));_0x3536x4= Math[_0x763a[430]](_0x3536x4- 1);_0x3536x3= Math[_0x763a[430]](_0x3536x3- 1);this[_0x763a[507]]== mxConstants[_0x763a[508]]?(_0x3536x5= this[_0x763a[441]][_0x763a[2024]]()[_0x763a[538]],_0x3536x5[_0x763a[124]][_0x763a[2478]]= Math[_0x763a[160]](1,_0x3536x4)+ _0x763a[168],_0x3536x5[_0x763a[124]][_0x763a[2479]]= Math[_0x763a[160]](1,_0x3536x3)+ _0x763a[168],_0x3536x5[_0x763a[124]][_0x763a[117]]= _0x763a[118],_0x3536x5[_0x763a[124]][_0x763a[119]]= _0x763a[118]):mxClient[_0x763a[496]]?this[_0x763a[441]][_0x763a[2320]](Math[_0x763a[160]](1,_0x3536x4),Math[_0x763a[160]](1,_0x3536x3)):(this[_0x763a[441]][_0x763a[510]][_0x763a[124]][_0x763a[2478]]= Math[_0x763a[160]](1,_0x3536x4)+ _0x763a[168],this[_0x763a[441]][_0x763a[510]][_0x763a[124]][_0x763a[2479]]= Math[_0x763a[160]](1,_0x3536x3)+ _0x763a[168]);this[_0x763a[2480]](this[_0x763a[2357]],_0x3536x4- 1,_0x3536x3- 1)};this[_0x763a[746]]( new mxEventObject(mxEvent.SIZE,_0x763a[1562],_0x3536x2))};mxGraph[_0x763a[202]][_0x763a[2477]]= function(_0x3536x2,_0x3536x3){if(mxClient[_0x763a[80]]){if(mxClient[_0x763a[496]]){var _0x3536x4=this[_0x763a[2465]]();_0x3536x2+= Math[_0x763a[160]](2,_0x3536x4[_0x763a[235]]+ _0x3536x4[_0x763a[117]]+ 1);_0x3536x3+= Math[_0x763a[160]](2,_0x3536x4[_0x763a[236]]+ _0x3536x4[_0x763a[119]]+ 1)}else {9<= document[_0x763a[5]]?(_0x3536x2+= 3,_0x3536x3+= 5):(_0x3536x2+= 1,_0x3536x3+= 1)}}else {_0x3536x3+= 1};null!= this[_0x763a[2388]]&& (_0x3536x2= Math[_0x763a[243]](this[_0x763a[2388]][_0x763a[117]],_0x3536x2),_0x3536x3= Math[_0x763a[243]](this[_0x763a[2388]][_0x763a[119]],_0x3536x3));this[_0x763a[526]][_0x763a[124]][_0x763a[117]]= Math[_0x763a[430]](_0x3536x2)+ _0x763a[168];this[_0x763a[526]][_0x763a[124]][_0x763a[119]]= Math[_0x763a[430]](_0x3536x3)+ _0x763a[168]};mxGraph[_0x763a[202]][_0x763a[2480]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[441]][_0x763a[255]],_0x3536x9=this[_0x763a[441]][_0x763a[513]],_0x3536xa=this[_0x763a[2013]],_0x3536x12=_0x3536x5* this[_0x763a[2012]],_0x3536x9= new mxRectangle(_0x3536x5* _0x3536x9[_0x763a[235]],_0x3536x5* _0x3536x9[_0x763a[236]],_0x3536xa[_0x763a[117]]* _0x3536x12,_0x3536xa[_0x763a[119]]* _0x3536x12);_0x3536x2= _0x3536x2&& Math[_0x763a[243]](_0x3536x9[_0x763a[117]],_0x3536x9[_0x763a[119]])> this[_0x763a[2360]];_0x3536x9[_0x763a[235]]= mxUtils[_0x763a[1454]](_0x3536x9[_0x763a[235]],_0x3536x9[_0x763a[117]]);_0x3536x9[_0x763a[236]]= mxUtils[_0x763a[1454]](_0x3536x9[_0x763a[236]],_0x3536x9[_0x763a[119]]);_0x3536xa= _0x3536x2?Math[_0x763a[430]]((_0x3536x3- _0x3536x9[_0x763a[235]])/ _0x3536x9[_0x763a[117]]):0;_0x3536x2= _0x3536x2?Math[_0x763a[430]]((_0x3536x4- _0x3536x9[_0x763a[236]])/ _0x3536x9[_0x763a[119]]):0;null== this[_0x763a[2481]]&& 0< _0x3536xa&& (this[_0x763a[2481]]= []);if(null!= this[_0x763a[2481]]){for(_0x3536x12= 0;_0x3536x12<= _0x3536xa;_0x3536x12++){var _0x3536x13=[ new mxPoint(_0x3536x9[_0x763a[235]]+ _0x3536x12* _0x3536x9[_0x763a[117]],1), new mxPoint(_0x3536x9[_0x763a[235]]+ _0x3536x12* _0x3536x9[_0x763a[117]],_0x3536x4)];null!= this[_0x763a[2481]][_0x3536x12]?(this[_0x763a[2481]][_0x3536x12][_0x763a[255]]= 1,this[_0x763a[2481]][_0x3536x12][_0x763a[1525]]= _0x3536x13,this[_0x763a[2481]][_0x3536x12][_0x763a[258]]()):(_0x3536x13= new mxPolyline(_0x3536x13,this[_0x763a[2358]],this[_0x763a[255]]),_0x3536x13[_0x763a[507]]= this[_0x763a[507]],_0x3536x13[_0x763a[1522]]= this[_0x763a[2359]],_0x3536x13[_0x763a[255]]= _0x3536x5,_0x3536x13[_0x763a[176]](this[_0x763a[441]][_0x763a[2053]]),_0x3536x13[_0x763a[258]](),this[_0x763a[2481]][_0x3536x12]= _0x3536x13)};for(_0x3536x12= _0x3536xa;_0x3536x12< this[_0x763a[2481]][_0x763a[67]];_0x3536x12++){this[_0x763a[2481]][_0x3536x12][_0x763a[515]]()};this[_0x763a[2481]][_0x763a[300]](_0x3536xa,this[_0x763a[2481]][_0x763a[67]]- _0x3536xa)};null== this[_0x763a[2482]]&& 0< _0x3536x2&& (this[_0x763a[2482]]= []);if(null!= this[_0x763a[2482]]){for(_0x3536x12= 0;_0x3536x12<= _0x3536x2;_0x3536x12++){_0x3536x13= [ new mxPoint(1,_0x3536x9[_0x763a[236]]+ _0x3536x12* _0x3536x9[_0x763a[119]]), new mxPoint(_0x3536x3,_0x3536x9[_0x763a[236]]+ _0x3536x12* _0x3536x9[_0x763a[119]])],null!= this[_0x763a[2482]][_0x3536x12]?(this[_0x763a[2482]][_0x3536x12][_0x763a[255]]= 1,this[_0x763a[2482]][_0x3536x12][_0x763a[1525]]= _0x3536x13,this[_0x763a[2482]][_0x3536x12][_0x763a[258]]()):(_0x3536x13= new mxPolyline(_0x3536x13,this[_0x763a[2358]],_0x3536x5),_0x3536x13[_0x763a[507]]= this[_0x763a[507]],_0x3536x13[_0x763a[1522]]= this[_0x763a[2359]],_0x3536x13[_0x763a[255]]= _0x3536x5,_0x3536x13[_0x763a[176]](this[_0x763a[441]][_0x763a[2053]]),_0x3536x13[_0x763a[258]](),this[_0x763a[2482]][_0x3536x12]= _0x3536x13)};for(_0x3536x12= _0x3536x2;_0x3536x12< this[_0x763a[2482]][_0x763a[67]];_0x3536x12++){this[_0x763a[2482]][_0x3536x12][_0x763a[515]]()};this[_0x763a[2482]][_0x763a[300]](_0x3536x2,this[_0x763a[2482]][_0x763a[67]]- _0x3536x2)}};mxGraph[_0x763a[202]][_0x763a[1705]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[251]][_0x763a[474]](_0x3536x2),_0x3536x4=null,_0x3536x4=this[_0x763a[251]][_0x763a[250]](_0x3536x2)?this[_0x763a[94]][_0x763a[2077]]():this[_0x763a[94]][_0x763a[2076]]();null!= _0x3536x3&& (_0x3536x4= this[_0x763a[2483]](this[_0x763a[94]][_0x763a[1705]](_0x3536x3,_0x3536x4)));null== _0x3536x4&& (_0x3536x4= mxGraph[_0x763a[202]][_0x763a[2346]]);return _0x3536x4};mxGraph[_0x763a[202]][_0x763a[2483]]= function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=_0x3536x2[mxConstants[_0x763a[2484]]],_0x3536x4=this[_0x763a[2485]](_0x3536x3);null!= _0x3536x4?_0x3536x2[mxConstants[_0x763a[2484]]]= _0x3536x4:_0x3536x4= _0x3536x3;null!= _0x3536x4&& _0x763a[2486]== _0x3536x4[_0x763a[85]](0,11)&& (_0x3536x3= _0x3536x4[_0x763a[2]](_0x763a[537]),0< _0x3536x3&& (_0x3536x4= _0x3536x4[_0x763a[85]](0,_0x3536x3)+ _0x763a[2487]+ _0x3536x4[_0x763a[85]](_0x3536x3+ 1)),_0x3536x2[mxConstants[_0x763a[2484]]]= _0x3536x4)};return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2488]]= function(_0x3536x2,_0x3536x3){_0x3536x3= _0x3536x3|| this[_0x763a[897]]();if(null!= _0x3536x3){this[_0x763a[251]][_0x763a[473]]();try{for(var _0x3536x4=0;_0x3536x4< _0x3536x3[_0x763a[67]];_0x3536x4++){this[_0x763a[251]][_0x763a[475]](_0x3536x3[_0x3536x4],_0x3536x2)}}finally{this[_0x763a[251]][_0x763a[476]]()}}};mxGraph[_0x763a[202]][_0x763a[2489]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= _0x3536x4|| this[_0x763a[2452]]();this[_0x763a[2490]](_0x3536x2,_0x3536x3,[_0x3536x4])};mxGraph[_0x763a[202]][_0x763a[2490]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x3= null!= _0x3536x3?_0x3536x3:!1;_0x3536x4= _0x3536x4|| this[_0x763a[897]]();if(null!= _0x3536x4&& 0< _0x3536x4[_0x763a[67]]){var _0x3536x5=this[_0x763a[441]][_0x763a[248]](_0x3536x4[0]),_0x3536x5=null!= _0x3536x5?_0x3536x5[_0x763a[124]]:this[_0x763a[1705]](_0x3536x4[0]);null!= _0x3536x5&& (_0x3536x3= mxUtils[_0x763a[433]](_0x3536x5,_0x3536x2,_0x3536x3)?0:1,this[_0x763a[1717]](_0x3536x2,_0x3536x3,_0x3536x4))}};mxGraph[_0x763a[202]][_0x763a[1717]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= _0x3536x4|| this[_0x763a[897]]();mxUtils[_0x763a[1717]](this[_0x763a[251]],_0x3536x4,_0x3536x2,_0x3536x3)};mxGraph[_0x763a[202]][_0x763a[2491]]= function(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[2492]](_0x3536x2,_0x3536x3,null,_0x3536x4)};mxGraph[_0x763a[202]][_0x763a[2492]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x5= _0x3536x5|| this[_0x763a[897]]();if(null!= _0x3536x5&& 0< _0x3536x5[_0x763a[67]]){if(null== _0x3536x4){var _0x3536x9=this[_0x763a[441]][_0x763a[248]](_0x3536x5[0]),_0x3536x9=null!= _0x3536x9?_0x3536x9[_0x763a[124]]:this[_0x763a[1705]](_0x3536x5[0]);null!= _0x3536x9&& (_0x3536x4= (parseInt(_0x3536x9[_0x3536x2]|| 0)& _0x3536x3)!= _0x3536x3)};mxUtils[_0x763a[2492]](this[_0x763a[251]],_0x3536x5,_0x3536x2,_0x3536x3,_0x3536x4)}};mxGraph[_0x763a[202]][_0x763a[849]]= function(_0x3536x2,_0x3536x3,_0x3536x4){null== _0x3536x3&& (_0x3536x3= this[_0x763a[897]]());if(null!= _0x3536x3&& 1< _0x3536x3[_0x763a[67]]){if(null== _0x3536x4){for(var _0x3536x5=0;_0x3536x5< _0x3536x3[_0x763a[67]];_0x3536x5++){var _0x3536x9=this[_0x763a[1198]](_0x3536x3[_0x3536x5]);if(null!= _0x3536x9&& !this[_0x763a[251]][_0x763a[250]](_0x3536x3[_0x3536x5])){if(null== _0x3536x4){if(_0x3536x2== mxConstants[_0x763a[479]]){_0x3536x4= _0x3536x9[_0x763a[235]]+ _0x3536x9[_0x763a[117]]/ 2;break}else {if(_0x3536x2== mxConstants[_0x763a[480]]){_0x3536x4= _0x3536x9[_0x763a[235]]+ _0x3536x9[_0x763a[117]]}else {if(_0x3536x2== mxConstants[_0x763a[1687]]){_0x3536x4= _0x3536x9[_0x763a[236]]}else {if(_0x3536x2== mxConstants[_0x763a[481]]){_0x3536x4= _0x3536x9[_0x763a[236]]+ _0x3536x9[_0x763a[119]]/ 2;break}else {_0x3536x4= _0x3536x2== mxConstants[_0x763a[482]]?_0x3536x9[_0x763a[236]]+ _0x3536x9[_0x763a[119]]:_0x3536x9[_0x763a[235]]}}}}}else {_0x3536x4= _0x3536x2== mxConstants[_0x763a[480]]?Math[_0x763a[160]](_0x3536x4,_0x3536x9[_0x763a[235]]+ _0x3536x9[_0x763a[117]]):_0x3536x2== mxConstants[_0x763a[1687]]?Math[_0x763a[243]](_0x3536x4,_0x3536x9[_0x763a[236]]):_0x3536x2== mxConstants[_0x763a[482]]?Math[_0x763a[160]](_0x3536x4,_0x3536x9[_0x763a[236]]+ _0x3536x9[_0x763a[119]]):Math[_0x763a[243]](_0x3536x4,_0x3536x9[_0x763a[235]])}}}};if(null!= _0x3536x4){this[_0x763a[251]][_0x763a[473]]();try{for(_0x3536x5= 0;_0x3536x5< _0x3536x3[_0x763a[67]];_0x3536x5++){_0x3536x9= this[_0x763a[1198]](_0x3536x3[_0x3536x5]),null!= _0x3536x9&& !this[_0x763a[251]][_0x763a[250]](_0x3536x3[_0x3536x5])&& (_0x3536x9= _0x3536x9[_0x763a[238]](),_0x3536x2== mxConstants[_0x763a[479]]?_0x3536x9[_0x763a[235]]= _0x3536x4- _0x3536x9[_0x763a[117]]/ 2:_0x3536x2== mxConstants[_0x763a[480]]?_0x3536x9[_0x763a[235]]= _0x3536x4- _0x3536x9[_0x763a[117]]:_0x3536x2== mxConstants[_0x763a[1687]]?_0x3536x9[_0x763a[236]]= _0x3536x4:_0x3536x2== mxConstants[_0x763a[481]]?_0x3536x9[_0x763a[236]]= _0x3536x4- _0x3536x9[_0x763a[119]]/ 2:_0x3536x2== mxConstants[_0x763a[482]]?_0x3536x9[_0x763a[236]]= _0x3536x4- _0x3536x9[_0x763a[119]]:_0x3536x9[_0x763a[235]]= _0x3536x4,this[_0x763a[251]][_0x763a[1724]](_0x3536x3[_0x3536x5],_0x3536x9))};this[_0x763a[746]]( new mxEventObject(mxEvent.ALIGN_CELLS,_0x763a[611],_0x3536x2,_0x763a[895],_0x3536x3))}finally{this[_0x763a[251]][_0x763a[476]]()}}};return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[854]]= function(_0x3536x2){if(null!= _0x3536x2&& null!= this[_0x763a[2356]]){this[_0x763a[251]][_0x763a[473]]();try{var _0x3536x3=this[_0x763a[251]][_0x763a[474]](_0x3536x2);null== _0x3536x3|| 0== _0x3536x3[_0x763a[67]]?this[_0x763a[251]][_0x763a[475]](_0x3536x2,this[_0x763a[2356]]):this[_0x763a[251]][_0x763a[475]](_0x3536x2,null);this[_0x763a[1809]](_0x3536x2);this[_0x763a[746]]( new mxEventObject(mxEvent.FLIP_EDGE,_0x763a[1989],_0x3536x2))}finally{this[_0x763a[251]][_0x763a[476]]()}};return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2493]]= function(_0x3536x2){this[_0x763a[2336]][_0x763a[207]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2494]]= function(_0x3536x2){for(var _0x3536x3=[],_0x3536x4=0;_0x3536x4< this[_0x763a[2336]][_0x763a[67]];_0x3536x4++){this[_0x763a[2336]][_0x3536x4]!= _0x3536x2&& _0x3536x3[_0x763a[207]](this[_0x763a[2336]][_0x3536x4])};this[_0x763a[2336]]= _0x3536x3};mxGraph[_0x763a[202]][_0x763a[2485]]= function(_0x3536x2){if(null!= _0x3536x2){for(var _0x3536x3=0;_0x3536x3< this[_0x763a[2336]][_0x763a[67]];_0x3536x3++){var _0x3536x4=this[_0x763a[2336]][_0x3536x3][_0x763a[1202]](_0x3536x2);if(null!= _0x3536x4){return _0x3536x4}}};return null};mxGraph[_0x763a[202]][_0x763a[840]]= function(_0x3536x2,_0x3536x3){null== _0x3536x3&& (_0x3536x3= mxUtils[_0x763a[1779]](this[_0x763a[897]](),!0));this[_0x763a[251]][_0x763a[473]]();try{this[_0x763a[841]](_0x3536x3,_0x3536x2),this[_0x763a[746]]( new mxEventObject(mxEvent.ORDER_CELLS,_0x763a[2495],_0x3536x2,_0x763a[895],_0x3536x3))}finally{this[_0x763a[251]][_0x763a[476]]()};return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[841]]= function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2){this[_0x763a[251]][_0x763a[473]]();try{for(var _0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){var _0x3536x5=this[_0x763a[251]][_0x763a[1197]](_0x3536x2[_0x3536x4]);_0x3536x3?this[_0x763a[251]][_0x763a[99]](_0x3536x5,_0x3536x2[_0x3536x4],_0x3536x4):this[_0x763a[251]][_0x763a[99]](_0x3536x5,_0x3536x2[_0x3536x4],this[_0x763a[251]][_0x763a[262]](_0x3536x5)- 1)};this[_0x763a[746]]( new mxEventObject(mxEvent.CELLS_ORDERED,_0x763a[2495],_0x3536x3,_0x763a[895],_0x3536x2))}finally{this[_0x763a[251]][_0x763a[476]]()}}};mxGraph[_0x763a[202]][_0x763a[844]]= function(_0x3536x2,_0x3536x3,_0x3536x4){null== _0x3536x4&& (_0x3536x4= mxUtils[_0x763a[1779]](this[_0x763a[897]](),!0));_0x3536x4= this[_0x763a[2496]](_0x3536x4);null== _0x3536x2&& (_0x3536x2= this[_0x763a[2497]](_0x3536x4));var _0x3536x5=this[_0x763a[2498]](_0x3536x2,_0x3536x4,_0x3536x3);if(0< _0x3536x4[_0x763a[67]]&& null!= _0x3536x5){var _0x3536x9=this[_0x763a[251]][_0x763a[1197]](_0x3536x2);null== _0x3536x9&& (_0x3536x9= this[_0x763a[251]][_0x763a[1197]](_0x3536x4[0]));this[_0x763a[251]][_0x763a[473]]();try{null== this[_0x763a[1198]](_0x3536x2)&& this[_0x763a[251]][_0x763a[1724]](_0x3536x2, new mxGeometry);var _0x3536xa=this[_0x763a[251]][_0x763a[262]](_0x3536x9);this[_0x763a[833]]([_0x3536x2],_0x3536x9,_0x3536xa,null,null,!1);_0x3536xa= this[_0x763a[251]][_0x763a[262]](_0x3536x2);this[_0x763a[833]](_0x3536x4,_0x3536x2,_0x3536xa,null,null,!1,!1);this[_0x763a[835]](_0x3536x4,-_0x3536x5[_0x763a[235]],-_0x3536x5[_0x763a[236]],!1,!0);this[_0x763a[837]]([_0x3536x2],[_0x3536x5]);this[_0x763a[746]]( new mxEventObject(mxEvent.GROUP_CELLS,_0x763a[1504],_0x3536x2,_0x763a[467],_0x3536x3,_0x763a[895],_0x3536x4))}finally{this[_0x763a[251]][_0x763a[476]]()}};return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2496]]= function(_0x3536x2){var _0x3536x3=[];if(null!= _0x3536x2&& 0< _0x3536x2[_0x763a[67]]){var _0x3536x4=this[_0x763a[251]][_0x763a[1197]](_0x3536x2[0]);_0x3536x3[_0x763a[207]](_0x3536x2[0]);for(var _0x3536x5=1;_0x3536x5< _0x3536x2[_0x763a[67]];_0x3536x5++){this[_0x763a[251]][_0x763a[1197]](_0x3536x2[_0x3536x5])== _0x3536x4&& _0x3536x3[_0x763a[207]](_0x3536x2[_0x3536x5])}};return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[2498]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x3= this[_0x763a[1729]](_0x3536x3);null!= _0x3536x3&& (this[_0x763a[1730]](_0x3536x2)&& (_0x3536x2= this[_0x763a[1731]](_0x3536x2),_0x3536x3[_0x763a[235]]-= _0x3536x2[_0x763a[117]],_0x3536x3[_0x763a[236]]-= _0x3536x2[_0x763a[119]],_0x3536x3[_0x763a[117]]+= _0x3536x2[_0x763a[117]],_0x3536x3[_0x763a[119]]+= _0x3536x2[_0x763a[119]]),_0x3536x3[_0x763a[235]]-= _0x3536x4,_0x3536x3[_0x763a[236]]-= _0x3536x4,_0x3536x3[_0x763a[117]]+= 2* _0x3536x4,_0x3536x3[_0x763a[119]]+= 2* _0x3536x4);return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[2497]]= function(_0x3536x2){_0x3536x2= new mxCell(_0x763a[110]);_0x3536x2[_0x763a[1993]](!0);_0x3536x2[_0x763a[1995]](!1);return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[845]]= function(_0x3536x2){var _0x3536x3=[];if(null== _0x3536x2){_0x3536x2= this[_0x763a[897]]();for(var _0x3536x4=[],_0x3536x5=0;_0x3536x5< _0x3536x2[_0x763a[67]];_0x3536x5++){0< this[_0x763a[251]][_0x763a[262]](_0x3536x2[_0x3536x5])&& _0x3536x4[_0x763a[207]](_0x3536x2[_0x3536x5])};_0x3536x2= _0x3536x4};if(null!= _0x3536x2&& 0< _0x3536x2[_0x763a[67]]){this[_0x763a[251]][_0x763a[473]]();try{for(_0x3536x5= 0;_0x3536x5< _0x3536x2[_0x763a[67]];_0x3536x5++){var _0x3536x9=this[_0x763a[251]][_0x763a[1953]](_0x3536x2[_0x3536x5]);if(null!= _0x3536x9&& 0< _0x3536x9[_0x763a[67]]){var _0x3536x9=_0x3536x9[_0x763a[1853]](),_0x3536xa=this[_0x763a[251]][_0x763a[1197]](_0x3536x2[_0x3536x5]),_0x3536x12=this[_0x763a[251]][_0x763a[262]](_0x3536xa);this[_0x763a[833]](_0x3536x9,_0x3536xa,_0x3536x12,null,null,!0);_0x3536x3= _0x3536x3[_0x763a[1919]](_0x3536x9)}};this[_0x763a[843]](this[_0x763a[2499]](_0x3536x2));this[_0x763a[746]]( new mxEventObject(mxEvent.UNGROUP_CELLS,_0x763a[895],_0x3536x2))}finally{this[_0x763a[251]][_0x763a[476]]()}};return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[846]]= function(_0x3536x2){null== _0x3536x2&& (_0x3536x2= this[_0x763a[897]]());this[_0x763a[251]][_0x763a[473]]();try{var _0x3536x3=this[_0x763a[902]](),_0x3536x4=this[_0x763a[251]][_0x763a[262]](_0x3536x3);this[_0x763a[833]](_0x3536x2,_0x3536x3,_0x3536x4,null,null,!0);this[_0x763a[746]]( new mxEventObject(mxEvent.REMOVE_CELLS_FROM_PARENT,_0x763a[895],_0x3536x2))}finally{this[_0x763a[251]][_0x763a[476]]()};return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[1917]]= function(_0x3536x2,_0x3536x3,_0x3536x4){null== _0x3536x2&& (_0x3536x2= this[_0x763a[897]]());_0x3536x3= null!= _0x3536x3?_0x3536x3:0;_0x3536x4= null!= _0x3536x4?_0x3536x4:!1;this[_0x763a[251]][_0x763a[473]]();try{for(var _0x3536x5=0;_0x3536x5< _0x3536x2[_0x763a[67]];_0x3536x5++){var _0x3536x9=this[_0x763a[1198]](_0x3536x2[_0x3536x5]);if(null!= _0x3536x9){var _0x3536xa=this[_0x763a[1955]](_0x3536x2[_0x3536x5]);if(null!= _0x3536xa&& 0< _0x3536xa[_0x763a[67]]){var _0x3536x12=this[_0x763a[1729]](_0x3536xa);if(0< _0x3536x12[_0x763a[117]]&& 0< _0x3536x12[_0x763a[119]]){var _0x3536x13=this[_0x763a[1730]](_0x3536x2[_0x3536x5])?this[_0x763a[1731]](_0x3536x2[_0x3536x5]): new mxRectangle,_0x3536x9=_0x3536x9[_0x763a[238]]();_0x3536x4&& (_0x3536x9[_0x763a[235]]+= _0x3536x12[_0x763a[235]]- _0x3536x13[_0x763a[117]]- _0x3536x3,_0x3536x9[_0x763a[236]]+= _0x3536x12[_0x763a[236]]- _0x3536x13[_0x763a[119]]- _0x3536x3);_0x3536x9[_0x763a[117]]= _0x3536x12[_0x763a[117]]+ _0x3536x13[_0x763a[117]]+ 2* _0x3536x3;_0x3536x9[_0x763a[119]]= _0x3536x12[_0x763a[119]]+ _0x3536x13[_0x763a[119]]+ 2* _0x3536x3;this[_0x763a[251]][_0x763a[1724]](_0x3536x2[_0x3536x5],_0x3536x9);this[_0x763a[834]](_0x3536xa,-_0x3536x12[_0x763a[235]]+ _0x3536x13[_0x763a[117]]+ _0x3536x3,-_0x3536x12[_0x763a[236]]+ _0x3536x13[_0x763a[119]]+ _0x3536x3)}}}}}finally{this[_0x763a[251]][_0x763a[476]]()};return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[899]]= function(_0x3536x2,_0x3536x3){_0x3536x3= null!= _0x3536x3?_0x3536x3:!0;var _0x3536x4=null;if(null!= _0x3536x2){for(var _0x3536x5={},_0x3536x4=[],_0x3536x9=0;_0x3536x9< _0x3536x2[_0x763a[67]];_0x3536x9++){var _0x3536xa=mxCellPath[_0x763a[385]](_0x3536x2[_0x3536x9]);_0x3536x5[_0x3536xa]= _0x3536x2[_0x3536x9];_0x3536x4[_0x763a[207]](_0x3536x2[_0x3536x9])};if(0< _0x3536x4[_0x763a[67]]){for(var _0x3536xa=this[_0x763a[441]][_0x763a[255]],_0x3536x12=this[_0x763a[441]][_0x763a[513]],_0x3536x4=this[_0x763a[251]][_0x763a[899]](_0x3536x2,!0),_0x3536x9=0;_0x3536x9< _0x3536x2[_0x763a[67]];_0x3536x9++){if(!_0x3536x3&& this[_0x763a[251]][_0x763a[250]](_0x3536x4[_0x3536x9])&& null!= this[_0x763a[2500]](_0x3536x4[_0x3536x9],this[_0x763a[251]][_0x763a[1709]](_0x3536x4[_0x3536x9],!0),this[_0x763a[251]][_0x763a[1709]](_0x3536x4[_0x3536x9],!1))){_0x3536x4[_0x3536x9]= null}else {var _0x3536x13=this[_0x763a[251]][_0x763a[1721]](_0x3536x4[_0x3536x9]);if(null!= _0x3536x13){var _0x3536x14=this[_0x763a[441]][_0x763a[248]](_0x3536x2[_0x3536x9]),_0x3536x15=this[_0x763a[441]][_0x763a[248]](this[_0x763a[251]][_0x763a[1197]](_0x3536x2[_0x3536x9]));if(null!= _0x3536x14&& null!= _0x3536x15){var _0x3536x16=_0x3536x15[_0x763a[2078]][_0x763a[235]],_0x3536x15=_0x3536x15[_0x763a[2078]][_0x763a[236]];if(this[_0x763a[251]][_0x763a[250]](_0x3536x4[_0x3536x9])){for(var _0x3536x14=_0x3536x14[_0x763a[439]],_0x3536x17=this[_0x763a[251]][_0x763a[1709]](_0x3536x2[_0x3536x9],!0),_0x3536x18=mxCellPath[_0x763a[385]](_0x3536x17);null!= _0x3536x17&& null== _0x3536x5[_0x3536x18];){_0x3536x17= this[_0x763a[251]][_0x763a[1197]](_0x3536x17),_0x3536x18= mxCellPath[_0x763a[385]](_0x3536x17)};null== _0x3536x17&& _0x3536x13[_0x763a[2007]]( new mxPoint(_0x3536x14[0][_0x763a[235]]/ _0x3536xa- _0x3536x12[_0x763a[235]],_0x3536x14[0][_0x763a[236]]/ _0x3536xa- _0x3536x12[_0x763a[236]]),!0);_0x3536x17= this[_0x763a[251]][_0x763a[1709]](_0x3536x2[_0x3536x9],!1);for(_0x3536x18= mxCellPath[_0x763a[385]](_0x3536x17);null!= _0x3536x17&& null== _0x3536x5[_0x3536x18];){_0x3536x17= this[_0x763a[251]][_0x763a[1197]](_0x3536x17),_0x3536x18= mxCellPath[_0x763a[385]](_0x3536x17)};null== _0x3536x17&& (_0x3536x17= _0x3536x14[_0x763a[67]]- 1,_0x3536x13[_0x763a[2007]]( new mxPoint(_0x3536x14[_0x3536x17][_0x763a[235]]/ _0x3536xa- _0x3536x12[_0x763a[235]],_0x3536x14[_0x3536x17][_0x763a[236]]/ _0x3536xa- _0x3536x12[_0x763a[236]]),!1));_0x3536x13= _0x3536x13[_0x763a[1525]];if(null!= _0x3536x13){for(_0x3536x14= 0;_0x3536x14< _0x3536x13[_0x763a[67]];_0x3536x14++){_0x3536x13[_0x3536x14][_0x763a[235]]+= _0x3536x16,_0x3536x13[_0x3536x14][_0x763a[236]]+= _0x3536x15}}}else {_0x3536x13[_0x763a[235]]+= _0x3536x16,_0x3536x13[_0x763a[236]]+= _0x3536x15}}}}}}else {_0x3536x4= []}};return _0x3536x4};mxGraph[_0x763a[202]][_0x763a[2501]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14){_0x3536x3= this[_0x763a[2502]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14);return this[_0x763a[2103]](_0x3536x3,_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2502]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14){_0x3536x2= new mxGeometry(_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12);_0x3536x2[_0x763a[1500]]= null!= _0x3536x14?_0x3536x14:!1;_0x3536x4= new mxCell(_0x3536x4,_0x3536x2,_0x3536x13);_0x3536x4[_0x763a[1945]](_0x3536x3);_0x3536x4[_0x763a[1993]](!0);_0x3536x4[_0x763a[1995]](!0);return _0x3536x4};mxGraph[_0x763a[202]][_0x763a[1960]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536x3= this[_0x763a[2503]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa);return this[_0x763a[2504]](_0x3536x3,_0x3536x2,_0x3536x5,_0x3536x9)};mxGraph[_0x763a[202]][_0x763a[2503]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536x2= new mxCell(_0x3536x4, new mxGeometry,_0x3536xa);_0x3536x2[_0x763a[1945]](_0x3536x3);_0x3536x2[_0x763a[1994]](!0);_0x3536x2[_0x763a[256]][_0x763a[1500]]= !0;return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2504]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){return this[_0x763a[2103]](_0x3536x2,_0x3536x3,_0x3536x9,_0x3536x4,_0x3536x5)};mxGraph[_0x763a[202]][_0x763a[2103]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){return this[_0x763a[832]]([_0x3536x2],_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9)[0]};mxGraph[_0x763a[202]][_0x763a[832]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){null== _0x3536x3&& (_0x3536x3= this[_0x763a[902]]());null== _0x3536x4&& (_0x3536x4= this[_0x763a[251]][_0x763a[262]](_0x3536x3));this[_0x763a[251]][_0x763a[473]]();try{this[_0x763a[833]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,!1,!0),this[_0x763a[746]]( new mxEventObject(mxEvent.ADD_CELLS,_0x763a[895],_0x3536x2,_0x763a[1101],_0x3536x3,_0x763a[1983],_0x3536x4,_0x763a[1097],_0x3536x5,_0x763a[772],_0x3536x9))}finally{this[_0x763a[251]][_0x763a[476]]()};return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[833]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12){if(null!= _0x3536x2&& null!= _0x3536x3&& null!= _0x3536x4){this[_0x763a[251]][_0x763a[473]]();try{for(var _0x3536x13=_0x3536xa?this[_0x763a[441]][_0x763a[248]](_0x3536x3):null,_0x3536x14=null!= _0x3536x13?_0x3536x13[_0x763a[2078]]:null,_0x3536x15= new mxPoint(0,0),_0x3536x13=0;_0x3536x13< _0x3536x2[_0x763a[67]];_0x3536x13++){if(null== _0x3536x2[_0x3536x13]){_0x3536x4--}else {var _0x3536x16=this[_0x763a[251]][_0x763a[1197]](_0x3536x2[_0x3536x13]);if(null!= _0x3536x14&& _0x3536x2[_0x3536x13]!= _0x3536x3&& _0x3536x3!= _0x3536x16){var _0x3536x17=this[_0x763a[441]][_0x763a[248]](_0x3536x16),_0x3536x18=null!= _0x3536x17?_0x3536x17[_0x763a[2078]]:_0x3536x15,_0x3536x19=this[_0x763a[251]][_0x763a[1721]](_0x3536x2[_0x3536x13]);if(null!= _0x3536x19){var _0x3536x1a=_0x3536x18[_0x763a[235]]- _0x3536x14[_0x763a[235]],_0x3536x1b=_0x3536x18[_0x763a[236]]- _0x3536x14[_0x763a[236]],_0x3536x19=_0x3536x19[_0x763a[238]]();_0x3536x19[_0x763a[513]](_0x3536x1a,_0x3536x1b);!_0x3536x19[_0x763a[1500]]&& (this[_0x763a[251]][_0x763a[1193]](_0x3536x2[_0x3536x13])&& !this[_0x763a[2505]]())&& (_0x3536x19[_0x763a[235]]= Math[_0x763a[160]](0,_0x3536x19[_0x763a[235]]),_0x3536x19[_0x763a[236]]= Math[_0x763a[160]](0,_0x3536x19[_0x763a[236]]));this[_0x763a[251]][_0x763a[1724]](_0x3536x2[_0x3536x13],_0x3536x19)}};_0x3536x3== _0x3536x16&& _0x3536x4+ _0x3536x13> this[_0x763a[251]][_0x763a[262]](_0x3536x3)&& _0x3536x4--;this[_0x763a[251]][_0x763a[99]](_0x3536x3,_0x3536x2[_0x3536x13],_0x3536x4+ _0x3536x13);this[_0x763a[2506]]()&& this[_0x763a[2507]](_0x3536x2[_0x3536x13])&& this[_0x763a[2508]](_0x3536x2[_0x3536x13]);(null== _0x3536x12|| _0x3536x12)&& this[_0x763a[2509]](_0x3536x2[_0x3536x13]);null!= _0x3536x5&& this[_0x763a[852]](_0x3536x2[_0x3536x13],_0x3536x5,!0);null!= _0x3536x9&& this[_0x763a[852]](_0x3536x2[_0x3536x13],_0x3536x9,!1)}};this[_0x763a[746]]( new mxEventObject(mxEvent.CELLS_ADDED,_0x763a[895],_0x3536x2,_0x763a[1101],_0x3536x3,_0x763a[1983],_0x3536x4,_0x763a[1097],_0x3536x5,_0x763a[772],_0x3536x9,_0x763a[492],_0x3536xa))}finally{this[_0x763a[251]][_0x763a[476]]()}}};mxGraph[_0x763a[202]][_0x763a[842]]= function(_0x3536x2,_0x3536x3){_0x3536x3= null!= _0x3536x3?_0x3536x3:!0;null== _0x3536x2&& (_0x3536x2= this[_0x763a[2510]](this[_0x763a[897]]()));_0x3536x3&& (_0x3536x2= this[_0x763a[2510]](this[_0x763a[2499]](_0x3536x2)));this[_0x763a[251]][_0x763a[473]]();try{this[_0x763a[843]](_0x3536x2),this[_0x763a[746]]( new mxEventObject(mxEvent.REMOVE_CELLS,_0x763a[895],_0x3536x2,_0x763a[2511],_0x3536x3))}finally{this[_0x763a[251]][_0x763a[476]]()};return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[843]]= function(_0x3536x2){if(null!= _0x3536x2&& 0< _0x3536x2[_0x763a[67]]){var _0x3536x3=this[_0x763a[441]][_0x763a[255]],_0x3536x4=this[_0x763a[441]][_0x763a[513]];this[_0x763a[251]][_0x763a[473]]();try{for(var _0x3536x5={},_0x3536x9=0;_0x3536x9< _0x3536x2[_0x763a[67]];_0x3536x9++){var _0x3536xa=mxCellPath[_0x763a[385]](_0x3536x2[_0x3536x9]);_0x3536x5[_0x3536xa]= _0x3536x2[_0x3536x9]};for(_0x3536x9= 0;_0x3536x9< _0x3536x2[_0x763a[67]];_0x3536x9++){for(var _0x3536x12=this[_0x763a[1756]](_0x3536x2[_0x3536x9]),_0x3536x13=0;_0x3536x13< _0x3536x12[_0x763a[67]];_0x3536x13++){if(_0x3536xa= mxCellPath[_0x763a[385]](_0x3536x12[_0x3536x13]),null== _0x3536x5[_0x3536xa]){var _0x3536x14=this[_0x763a[251]][_0x763a[1721]](_0x3536x12[_0x3536x13]);if(null!= _0x3536x14){var _0x3536x15=this[_0x763a[441]][_0x763a[248]](_0x3536x12[_0x3536x13]);if(null!= _0x3536x15){var _0x3536x14=_0x3536x14[_0x763a[238]](),_0x3536x16=_0x3536x15[_0x763a[1710]](!0) == _0x3536x2[_0x3536x9],_0x3536x17=_0x3536x15[_0x763a[439]],_0x3536x18=_0x3536x16?0:_0x3536x17[_0x763a[67]]- 1;_0x3536x14[_0x763a[2007]]( new mxPoint(_0x3536x17[_0x3536x18][_0x763a[235]]/ _0x3536x3- _0x3536x4[_0x763a[235]],_0x3536x17[_0x3536x18][_0x763a[236]]/ _0x3536x3- _0x3536x4[_0x763a[236]]),_0x3536x16);this[_0x763a[251]][_0x763a[1957]](_0x3536x12[_0x3536x13],null,_0x3536x16);this[_0x763a[251]][_0x763a[1724]](_0x3536x12[_0x3536x13],_0x3536x14)}}}};this[_0x763a[251]][_0x763a[205]](_0x3536x2[_0x3536x9])};this[_0x763a[746]]( new mxEventObject(mxEvent.CELLS_REMOVED,_0x763a[895],_0x3536x2))}finally{this[_0x763a[251]][_0x763a[476]]()}}};mxGraph[_0x763a[202]][_0x763a[853]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x5= _0x3536x5|| 0;_0x3536x9= _0x3536x9|| 0;null== _0x3536x4&& (_0x3536x4= this[_0x763a[899]]([_0x3536x2])[0]);var _0x3536xa=this[_0x763a[251]][_0x763a[1197]](_0x3536x2),_0x3536x12=this[_0x763a[251]][_0x763a[1709]](_0x3536x2,!0);this[_0x763a[251]][_0x763a[473]]();try{this[_0x763a[835]](_0x3536x3,_0x3536x5,_0x3536x9,!1,!1),this[_0x763a[833]](_0x3536x3,_0x3536xa,this[_0x763a[251]][_0x763a[262]](_0x3536xa),null,null,!0),this[_0x763a[833]]([_0x3536x4],_0x3536xa,this[_0x763a[251]][_0x763a[262]](_0x3536xa),_0x3536x12,_0x3536x3[0],!1),this[_0x763a[852]](_0x3536x2,_0x3536x3[0],!0),this[_0x763a[746]]( new mxEventObject(mxEvent.SPLIT_EDGE,_0x763a[1989],_0x3536x2,_0x763a[895],_0x3536x3,_0x763a[2512],_0x3536x4,_0x763a[1126],_0x3536x5,_0x763a[1125],_0x3536x9))}finally{this[_0x763a[251]][_0x763a[476]]()};return _0x3536x4};mxGraph[_0x763a[202]][_0x763a[838]]= function(_0x3536x2,_0x3536x3,_0x3536x4){null== _0x3536x3&& (_0x3536x3= this[_0x763a[897]]());_0x3536x4&& (_0x3536x3= this[_0x763a[2499]](_0x3536x3));this[_0x763a[251]][_0x763a[473]]();try{this[_0x763a[839]](_0x3536x3,_0x3536x2),this[_0x763a[746]]( new mxEventObject(mxEvent.TOGGLE_CELLS,_0x763a[539],_0x3536x2,_0x763a[895],_0x3536x3,_0x763a[2511],_0x3536x4))}finally{this[_0x763a[251]][_0x763a[476]]()};return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[839]]= function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2&& 0< _0x3536x2[_0x763a[67]]){this[_0x763a[251]][_0x763a[473]]();try{for(var _0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){this[_0x763a[251]][_0x763a[175]](_0x3536x2[_0x3536x4],_0x3536x3)}}finally{this[_0x763a[251]][_0x763a[476]]()}}};mxGraph[_0x763a[202]][_0x763a[847]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x3= null!= _0x3536x3?_0x3536x3:!1;null== _0x3536x4&& (_0x3536x4= this[_0x763a[2513]](this[_0x763a[897]](),_0x3536x2));this[_0x763a[2126]](!1);this[_0x763a[251]][_0x763a[473]]();try{this[_0x763a[848]](_0x3536x4,_0x3536x2,_0x3536x3,_0x3536x5),this[_0x763a[746]]( new mxEventObject(mxEvent.FOLD_CELLS,_0x763a[2514],_0x3536x2,_0x763a[2515],_0x3536x3,_0x763a[895],_0x3536x4))}finally{this[_0x763a[251]][_0x763a[476]]()};return _0x3536x4};mxGraph[_0x763a[202]][_0x763a[848]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){if(null!= _0x3536x2&& 0< _0x3536x2[_0x763a[67]]){this[_0x763a[251]][_0x763a[473]]();try{for(var _0x3536x9=0;_0x3536x9< _0x3536x2[_0x763a[67]];_0x3536x9++){if((!_0x3536x5|| this[_0x763a[2516]](_0x3536x2[_0x3536x9],_0x3536x3)) && _0x3536x3!= this[_0x763a[1742]](_0x3536x2[_0x3536x9])){if(this[_0x763a[251]][_0x763a[1972]](_0x3536x2[_0x3536x9],_0x3536x3),this[_0x763a[2517]](_0x3536x2[_0x3536x9],_0x3536x3),this[_0x763a[2507]](_0x3536x2[_0x3536x9])&& this[_0x763a[2508]](_0x3536x2[_0x3536x9]),_0x3536x4){var _0x3536xa=this[_0x763a[251]][_0x763a[1953]](_0x3536x2[_0x3536x9]);this[_0x763a[847]](_0x3536xa,_0x3536x3,_0x3536x4)}}};this[_0x763a[746]]( new mxEventObject(mxEvent.CELLS_FOLDED,_0x763a[895],_0x3536x2,_0x763a[2514],_0x3536x3,_0x763a[2515],_0x3536x4))}finally{this[_0x763a[251]][_0x763a[476]]()}}};mxGraph[_0x763a[202]][_0x763a[2517]]= function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2){var _0x3536x4=this[_0x763a[251]][_0x763a[1721]](_0x3536x2);null!= _0x3536x4&& (_0x3536x4= _0x3536x4[_0x763a[238]](),this[_0x763a[2518]](_0x3536x2,_0x3536x4,_0x3536x3),_0x3536x4[_0x763a[2005]](),this[_0x763a[251]][_0x763a[1724]](_0x3536x2,_0x3536x4))}};mxGraph[_0x763a[202]][_0x763a[2518]]= function(_0x3536x2,_0x3536x3,_0x3536x4){if(null!= _0x3536x2&& null!= _0x3536x3){_0x3536x4= this[_0x763a[441]][_0x763a[248]](_0x3536x2);_0x3536x4= null!= _0x3536x4?_0x3536x4[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);if(null== _0x3536x3[_0x763a[2002]]){var _0x3536x5=_0x3536x3;this[_0x763a[2394]]&& (_0x3536x2= this[_0x763a[2519]](_0x3536x2),null!= _0x3536x2&& (_0x3536x5= _0x3536x2,_0x3536x2= mxUtils[_0x763a[433]](_0x3536x4,mxConstants.STYLE_STARTSIZE),0< _0x3536x2&& (_0x3536x5[_0x763a[119]]= Math[_0x763a[160]](_0x3536x5[_0x763a[119]],_0x3536x2))));_0x3536x3[_0x763a[2002]]= new mxRectangle(0,0,_0x3536x5[_0x763a[117]],_0x3536x5[_0x763a[119]])};if(null!= _0x3536x3[_0x763a[2002]]){_0x3536x3[_0x763a[2002]][_0x763a[235]]= _0x3536x3[_0x763a[235]];_0x3536x3[_0x763a[2002]][_0x763a[236]]= _0x3536x3[_0x763a[236]];var _0x3536x9=mxUtils[_0x763a[431]](_0x3536x4[mxConstants[_0x763a[2278]]]|| _0x763a[468]);0!= _0x3536x9&& (_0x3536x2= _0x3536x3[_0x763a[2002]][_0x763a[241]]()- _0x3536x3[_0x763a[241]](),_0x3536x4= _0x3536x3[_0x763a[2002]][_0x763a[242]]()- _0x3536x3[_0x763a[242]](),_0x3536x5= Math[_0x763a[426]](_0x3536x9),_0x3536x9= Math[_0x763a[427]](_0x3536x9),_0x3536x3[_0x763a[2002]][_0x763a[235]]+= _0x3536x5* _0x3536x2- _0x3536x9* _0x3536x4- _0x3536x2,_0x3536x3[_0x763a[2002]][_0x763a[236]]+= _0x3536x9* _0x3536x2+ _0x3536x5* _0x3536x4- _0x3536x4)}}};mxGraph[_0x763a[202]][_0x763a[2499]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[1853]]();return _0x3536x3= _0x3536x3[_0x763a[1919]](this[_0x763a[2520]](_0x3536x2))};mxGraph[_0x763a[202]][_0x763a[2520]]= function(_0x3536x2){var _0x3536x3=[];if(null!= _0x3536x2){for(var _0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){for(var _0x3536x5=this[_0x763a[251]][_0x763a[1707]](_0x3536x2[_0x3536x4]),_0x3536x9=0;_0x3536x9< _0x3536x5;_0x3536x9++){_0x3536x3[_0x763a[207]](this[_0x763a[251]][_0x763a[1708]](_0x3536x2[_0x3536x4],_0x3536x9))};_0x3536x5= this[_0x763a[251]][_0x763a[1953]](_0x3536x2[_0x3536x4]);_0x3536x3= _0x3536x3[_0x763a[1919]](this[_0x763a[2520]](_0x3536x5))}};return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[858]]= function(_0x3536x2,_0x3536x3){_0x3536x3= null!= _0x3536x3?_0x3536x3:!1;this[_0x763a[251]][_0x763a[473]]();try{this[_0x763a[2457]](_0x3536x2,_0x3536x3),this[_0x763a[746]]( new mxEventObject(mxEvent.UPDATE_CELL_SIZE,_0x763a[246],_0x3536x2,_0x763a[2521],_0x3536x3))}finally{this[_0x763a[251]][_0x763a[476]]()};return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2457]]= function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2){this[_0x763a[251]][_0x763a[473]]();try{var _0x3536x4=this[_0x763a[2519]](_0x3536x2),_0x3536x5=this[_0x763a[251]][_0x763a[1721]](_0x3536x2);if(null!= _0x3536x4&& null!= _0x3536x5){var _0x3536x9=this[_0x763a[1742]](_0x3536x2),_0x3536x5=_0x3536x5[_0x763a[238]]();if(this[_0x763a[1730]](_0x3536x2)){var _0x3536xa=this[_0x763a[441]][_0x763a[248]](_0x3536x2),_0x3536x12=null!= _0x3536xa?_0x3536xa[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2),_0x3536x13=this[_0x763a[251]][_0x763a[474]](_0x3536x2);null== _0x3536x13&& (_0x3536x13= _0x763a[110]);mxUtils[_0x763a[433]](_0x3536x12,mxConstants.STYLE_HORIZONTAL,!0)?(_0x3536x13= mxUtils[_0x763a[475]](_0x3536x13,mxConstants.STYLE_STARTSIZE,_0x3536x4[_0x763a[119]]+ 8),_0x3536x9&& (_0x3536x5[_0x763a[119]]= _0x3536x4[_0x763a[119]]+ 8),_0x3536x5[_0x763a[117]]= _0x3536x4[_0x763a[117]]):(_0x3536x13= mxUtils[_0x763a[475]](_0x3536x13,mxConstants.STYLE_STARTSIZE,_0x3536x4[_0x763a[117]]+ 8),_0x3536x9&& (_0x3536x5[_0x763a[117]]= _0x3536x4[_0x763a[117]]+ 8),_0x3536x5[_0x763a[119]]= _0x3536x4[_0x763a[119]]);this[_0x763a[251]][_0x763a[475]](_0x3536x2,_0x3536x13)}else {_0x3536x5[_0x763a[117]]= _0x3536x4[_0x763a[117]],_0x3536x5[_0x763a[119]]= _0x3536x4[_0x763a[119]]};if(!_0x3536x3&& !_0x3536x9){var _0x3536x14=this[_0x763a[441]][_0x763a[1799]](this[_0x763a[251]][_0x763a[1953]](_0x3536x2));if(null!= _0x3536x14){var _0x3536x15=this[_0x763a[441]][_0x763a[513]],_0x3536x16=this[_0x763a[441]][_0x763a[255]],_0x3536x17=(_0x3536x14[_0x763a[236]]+ _0x3536x14[_0x763a[119]])/ _0x3536x16- _0x3536x5[_0x763a[236]]- _0x3536x15[_0x763a[236]];_0x3536x5[_0x763a[117]]= Math[_0x763a[160]](_0x3536x5[_0x763a[117]],(_0x3536x14[_0x763a[235]]+ _0x3536x14[_0x763a[117]])/ _0x3536x16- _0x3536x5[_0x763a[235]]- _0x3536x15[_0x763a[235]]);_0x3536x5[_0x763a[119]]= Math[_0x763a[160]](_0x3536x5[_0x763a[119]],_0x3536x17)}};this[_0x763a[837]]([_0x3536x2],[_0x3536x5])}}finally{this[_0x763a[251]][_0x763a[476]]()}}};mxGraph[_0x763a[202]][_0x763a[2519]]= function(_0x3536x2){var _0x3536x3=null;if(null!= _0x3536x2){var _0x3536x4=this[_0x763a[441]][_0x763a[248]](_0x3536x2),_0x3536x5=null!= _0x3536x4?_0x3536x4[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);if(null!= _0x3536x5&& !this[_0x763a[251]][_0x763a[250]](_0x3536x2)){var _0x3536x9=_0x3536x5[mxConstants[_0x763a[2185]]]|| mxConstants[_0x763a[483]],_0x3536xa=0,_0x3536x3=0;if((null!= this[_0x763a[1202]](_0x3536x4)|| null!= _0x3536x5[mxConstants[_0x763a[2484]]])&& _0x3536x5[mxConstants[_0x763a[2059]]]== mxConstants[_0x763a[2522]]){_0x3536x5[mxConstants[_0x763a[2063]]]== mxConstants[_0x763a[481]]&& (_0x3536xa+= parseFloat(_0x3536x5[mxConstants[_0x763a[2523]]])|| mxLabel[_0x763a[202]][_0x763a[1680]]),_0x3536x5[mxConstants[_0x763a[2064]]]!= mxConstants[_0x763a[479]]&& (_0x3536x3+= parseFloat(_0x3536x5[mxConstants[_0x763a[2524]]])|| mxLabel[_0x763a[202]][_0x763a[1680]])};_0x3536xa+= 2* (_0x3536x5[mxConstants[_0x763a[2143]]]|| 0);_0x3536xa+= _0x3536x5[mxConstants[_0x763a[2147]]]|| 0;_0x3536xa+= _0x3536x5[mxConstants[_0x763a[2145]]]|| 0;_0x3536x3+= 2* (_0x3536x5[mxConstants[_0x763a[2143]]]|| 0);_0x3536x3+= _0x3536x5[mxConstants[_0x763a[2144]]]|| 0;_0x3536x3+= _0x3536x5[mxConstants[_0x763a[2146]]]|| 0;_0x3536x4= this[_0x763a[2205]](_0x3536x4);null!= _0x3536x4&& (_0x3536xa+= _0x3536x4[_0x763a[117]]+ 8);_0x3536x4= this[_0x763a[2183]](_0x3536x2);null!= _0x3536x4&& 0< _0x3536x4[_0x763a[67]]?(this[_0x763a[2186]](_0x3536x2)|| (_0x3536x4= _0x3536x4[_0x763a[230]](/\n/g,_0x763a[545])),_0x3536x9= mxUtils[_0x763a[2525]](_0x3536x4,_0x3536x9,_0x3536x5[mxConstants[_0x763a[2188]]]),_0x3536x2= _0x3536x9[_0x763a[117]]+ _0x3536xa,_0x3536x3= _0x3536x9[_0x763a[119]]+ _0x3536x3,mxUtils[_0x763a[433]](_0x3536x5,mxConstants.STYLE_HORIZONTAL,!0)|| (_0x3536x5= _0x3536x3,_0x3536x3= _0x3536x2,_0x3536x2= _0x3536x5),this[_0x763a[991]]&& (_0x3536x2= this[_0x763a[1021]](_0x3536x2+ this[_0x763a[1020]]/ 2),_0x3536x3= this[_0x763a[1021]](_0x3536x3+ this[_0x763a[1020]]/ 2)),_0x3536x3= new mxRectangle(0,0,_0x3536x2,_0x3536x3)):(_0x3536x5= 4* this[_0x763a[1020]],_0x3536x3= new mxRectangle(0,0,_0x3536x5,_0x3536x5))}};return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[2216]]= function(_0x3536x2,_0x3536x3){if(0.2< Math[_0x763a[425]](1- _0x3536x3[_0x763a[255]])){var _0x3536x4=this[_0x763a[441]][_0x763a[255]],_0x3536x5=this[_0x763a[441]][_0x763a[513]],_0x3536x9=_0x3536x2[_0x763a[117]]* _0x3536x3[_0x763a[255]],_0x3536xa=_0x3536x2[_0x763a[119]]* _0x3536x3[_0x763a[255]],_0x3536x12=_0x3536x2[_0x763a[236]]- (_0x3536xa- _0x3536x2[_0x763a[119]])/ 2,_0x3536x4= new mxRectangle(this[_0x763a[1021]]((_0x3536x2[_0x763a[235]]- (_0x3536x9- _0x3536x2[_0x763a[117]])/ 2)/ _0x3536x4)- _0x3536x5[_0x763a[235]],this[_0x763a[1021]](_0x3536x12/ _0x3536x4)- _0x3536x5[_0x763a[236]],this[_0x763a[1021]](_0x3536x9/ _0x3536x4),this[_0x763a[1021]](_0x3536xa/ _0x3536x4));this[_0x763a[2526]](_0x3536x2[_0x763a[246]],_0x3536x4)}};mxGraph[_0x763a[202]][_0x763a[2526]]= function(_0x3536x2,_0x3536x3){return this[_0x763a[836]]([_0x3536x2],[_0x3536x3])[0]};mxGraph[_0x763a[202]][_0x763a[836]]= function(_0x3536x2,_0x3536x3){this[_0x763a[251]][_0x763a[473]]();try{this[_0x763a[837]](_0x3536x2,_0x3536x3),this[_0x763a[746]]( new mxEventObject(mxEvent.RESIZE_CELLS,_0x763a[895],_0x3536x2,_0x763a[1562],_0x3536x3))}finally{this[_0x763a[251]][_0x763a[476]]()};return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[837]]= function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2&& null!= _0x3536x3&& _0x3536x2[_0x763a[67]]== _0x3536x3[_0x763a[67]]){this[_0x763a[251]][_0x763a[473]]();try{for(var _0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){var _0x3536x5=_0x3536x3[_0x3536x4],_0x3536x9=this[_0x763a[251]][_0x763a[1721]](_0x3536x2[_0x3536x4]);if(null!= _0x3536x9&& (_0x3536x9[_0x763a[235]]!= _0x3536x5[_0x763a[235]]|| _0x3536x9[_0x763a[236]]!= _0x3536x5[_0x763a[236]]|| _0x3536x9[_0x763a[117]]!= _0x3536x5[_0x763a[117]]|| _0x3536x9[_0x763a[119]]!= _0x3536x5[_0x763a[119]])){_0x3536x9= _0x3536x9[_0x763a[238]]();if(_0x3536x9[_0x763a[1500]]){var _0x3536xa=_0x3536x9[_0x763a[1368]];null!= _0x3536xa&& (_0x3536xa[_0x763a[235]]+= _0x3536x5[_0x763a[235]]- _0x3536x9[_0x763a[235]],_0x3536xa[_0x763a[236]]+= _0x3536x5[_0x763a[236]]- _0x3536x9[_0x763a[236]])}else {_0x3536x9[_0x763a[235]]= _0x3536x5[_0x763a[235]],_0x3536x9[_0x763a[236]]= _0x3536x5[_0x763a[236]]};_0x3536x9[_0x763a[117]]= _0x3536x5[_0x763a[117]];_0x3536x9[_0x763a[119]]= _0x3536x5[_0x763a[119]];!_0x3536x9[_0x763a[1500]]&& (this[_0x763a[251]][_0x763a[1193]](_0x3536x2[_0x3536x4])&& !this[_0x763a[2505]]())&& (_0x3536x9[_0x763a[235]]= Math[_0x763a[160]](0,_0x3536x9[_0x763a[235]]),_0x3536x9[_0x763a[236]]= Math[_0x763a[160]](0,_0x3536x9[_0x763a[236]]));this[_0x763a[251]][_0x763a[1724]](_0x3536x2[_0x3536x4],_0x3536x9);this[_0x763a[2507]](_0x3536x2[_0x3536x4])&& this[_0x763a[2508]](_0x3536x2[_0x3536x4])}};this[_0x763a[2399]]&& this[_0x763a[1750]](_0x3536x2);this[_0x763a[746]]( new mxEventObject(mxEvent.CELLS_RESIZED,_0x763a[895],_0x3536x2,_0x763a[1562],_0x3536x3))}finally{this[_0x763a[251]][_0x763a[476]]()}}};mxGraph[_0x763a[202]][_0x763a[2508]]= function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=this[_0x763a[251]][_0x763a[1197]](_0x3536x2),_0x3536x4=this[_0x763a[251]][_0x763a[1721]](_0x3536x3);if(null!= _0x3536x3&& (null!= _0x3536x4&& !this[_0x763a[1742]](_0x3536x3))&& (_0x3536x2= this[_0x763a[251]][_0x763a[1721]](_0x3536x2),null!= _0x3536x2&& (_0x3536x4[_0x763a[117]]< _0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]|| _0x3536x4[_0x763a[119]]< _0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]))){_0x3536x4= _0x3536x4[_0x763a[238]](),_0x3536x4[_0x763a[117]]= Math[_0x763a[160]](_0x3536x4[_0x763a[117]],_0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]),_0x3536x4[_0x763a[119]]= Math[_0x763a[160]](_0x3536x4[_0x763a[119]],_0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]),this[_0x763a[837]]([_0x3536x3],[_0x3536x4])}}};mxGraph[_0x763a[202]][_0x763a[903]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){return this[_0x763a[834]](_0x3536x2,_0x3536x3,_0x3536x4,!0,_0x3536x5,_0x3536x9)};mxGraph[_0x763a[202]][_0x763a[834]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536x3= null!= _0x3536x3?_0x3536x3:0;_0x3536x4= null!= _0x3536x4?_0x3536x4:0;_0x3536x5= null!= _0x3536x5?_0x3536x5:!1;if(null!= _0x3536x2&& (0!= _0x3536x3|| 0!= _0x3536x4|| _0x3536x5|| null!= _0x3536x9)){this[_0x763a[251]][_0x763a[473]]();try{_0x3536x5&& (_0x3536x2= this[_0x763a[899]](_0x3536x2,this[_0x763a[2527]]()),null== _0x3536x9&& (_0x3536x9= this[_0x763a[902]]()));var _0x3536x12=this[_0x763a[2505]]();null!= _0x3536x9&& this[_0x763a[2528]](!0);this[_0x763a[835]](_0x3536x2,_0x3536x3,_0x3536x4,!_0x3536x5&& this[_0x763a[2529]]()&& this[_0x763a[2530]](),null== _0x3536x9);this[_0x763a[2528]](_0x3536x12);if(null!= _0x3536x9){var _0x3536x13=this[_0x763a[251]][_0x763a[262]](_0x3536x9);this[_0x763a[833]](_0x3536x2,_0x3536x9,_0x3536x13,null,null,!0)};this[_0x763a[746]]( new mxEventObject(mxEvent.MOVE_CELLS,_0x763a[895],_0x3536x2,_0x763a[1126],_0x3536x3,_0x763a[1125],_0x3536x4,_0x763a[238],_0x3536x5,_0x763a[772],_0x3536x9,_0x763a[763],_0x3536xa))}finally{this[_0x763a[251]][_0x763a[476]]()}};return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[835]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){if(null!= _0x3536x2&& (0!= _0x3536x3|| 0!= _0x3536x4)){this[_0x763a[251]][_0x763a[473]]();try{_0x3536x5&& this[_0x763a[2531]](_0x3536x2);for(var _0x3536xa=0;_0x3536xa< _0x3536x2[_0x763a[67]];_0x3536xa++){this[_0x763a[2532]](_0x3536x2[_0x3536xa],_0x3536x3,_0x3536x4),_0x3536x9&& this[_0x763a[2509]](_0x3536x2[_0x3536xa])};this[_0x763a[2400]]&& this[_0x763a[1750]](_0x3536x2);this[_0x763a[746]]( new mxEventObject(mxEvent.CELLS_MOVED,_0x763a[895],_0x3536x2,_0x763a[1126],_0x3536x4,_0x763a[1125],_0x3536x4,_0x763a[808],_0x3536x5))}finally{this[_0x763a[251]][_0x763a[476]]()}}};mxGraph[_0x763a[202]][_0x763a[2532]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[251]][_0x763a[1721]](_0x3536x2);null!= _0x3536x5&& (_0x3536x5= _0x3536x5[_0x763a[238]](),_0x3536x5[_0x763a[513]](_0x3536x3,_0x3536x4),!_0x3536x5[_0x763a[1500]]&& (this[_0x763a[251]][_0x763a[1193]](_0x3536x2)&& !this[_0x763a[2505]]())&& (_0x3536x5[_0x763a[235]]= Math[_0x763a[160]](0,_0x3536x5[_0x763a[235]]),_0x3536x5[_0x763a[236]]= Math[_0x763a[160]](0,_0x3536x5[_0x763a[236]])),_0x3536x5[_0x763a[1500]]&& !this[_0x763a[251]][_0x763a[250]](_0x3536x2)&& (null== _0x3536x5[_0x763a[1368]]?_0x3536x5[_0x763a[1368]]= new mxPoint(_0x3536x3,_0x3536x4):(_0x3536x5[_0x763a[1368]][_0x763a[235]]+= _0x3536x3,_0x3536x5[_0x763a[1368]][_0x763a[236]]+= _0x3536x4)),this[_0x763a[251]][_0x763a[1724]](_0x3536x2,_0x3536x5))};mxGraph[_0x763a[202]][_0x763a[2533]]= function(_0x3536x2){if(null!= _0x3536x2&& !this[_0x763a[251]][_0x763a[250]](_0x3536x2)){var _0x3536x3=this[_0x763a[251]][_0x763a[1197]](_0x3536x2);if(_0x3536x3== this[_0x763a[902]]()|| _0x3536x3== this[_0x763a[2534]]()){return this[_0x763a[2535]]()};if(null!= _0x3536x3&& _0x3536x3!= this[_0x763a[902]]()){var _0x3536x4=this[_0x763a[251]][_0x763a[1721]](_0x3536x3);if(null!= _0x3536x4){var _0x3536x5=_0x3536x2= 0,_0x3536x9=_0x3536x4[_0x763a[117]],_0x3536x4=_0x3536x4[_0x763a[119]];this[_0x763a[1730]](_0x3536x3)&& (_0x3536x3= this[_0x763a[1731]](_0x3536x3),_0x3536x2= _0x3536x3[_0x763a[117]],_0x3536x9-= _0x3536x3[_0x763a[117]],_0x3536x5= _0x3536x3[_0x763a[119]],_0x3536x4-= _0x3536x3[_0x763a[119]]);return new mxRectangle(_0x3536x2,_0x3536x5,_0x3536x9,_0x3536x4)}}};return null};mxGraph[_0x763a[202]][_0x763a[2535]]= function(){return this[_0x763a[2385]]};mxGraph[_0x763a[202]][_0x763a[2509]]= function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=this[_0x763a[251]][_0x763a[1721]](_0x3536x2),_0x3536x4=this[_0x763a[2536]](_0x3536x2)?this[_0x763a[2533]](_0x3536x2):this[_0x763a[2535]]();if(null!= _0x3536x3&& null!= _0x3536x4&& !_0x3536x3[_0x763a[1500]]&& (_0x3536x3[_0x763a[235]]< _0x3536x4[_0x763a[235]]|| _0x3536x3[_0x763a[236]]< _0x3536x4[_0x763a[236]]|| _0x3536x4[_0x763a[117]]< _0x3536x3[_0x763a[235]]+ _0x3536x3[_0x763a[117]]|| _0x3536x4[_0x763a[119]]< _0x3536x3[_0x763a[236]]+ _0x3536x3[_0x763a[119]])){_0x3536x2= this[_0x763a[2537]](_0x3536x2),0< _0x3536x4[_0x763a[117]]&& (_0x3536x3[_0x763a[235]]= Math[_0x763a[243]](_0x3536x3[_0x763a[235]],_0x3536x4[_0x763a[235]]+ _0x3536x4[_0x763a[117]]- (1- _0x3536x2)* _0x3536x3[_0x763a[117]])),0< _0x3536x4[_0x763a[119]]&& (_0x3536x3[_0x763a[236]]= Math[_0x763a[243]](_0x3536x3[_0x763a[236]],_0x3536x4[_0x763a[236]]+ _0x3536x4[_0x763a[119]]- (1- _0x3536x2)* _0x3536x3[_0x763a[119]])),_0x3536x3[_0x763a[235]]= Math[_0x763a[160]](_0x3536x3[_0x763a[235]],_0x3536x4[_0x763a[235]]- _0x3536x3[_0x763a[117]]* _0x3536x2),_0x3536x3[_0x763a[236]]= Math[_0x763a[160]](_0x3536x3[_0x763a[236]],_0x3536x4[_0x763a[236]]- _0x3536x3[_0x763a[119]]* _0x3536x2)}}};mxGraph[_0x763a[202]][_0x763a[1750]]= function(_0x3536x2){if(null!= _0x3536x2){for(var _0x3536x3={},_0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){var _0x3536x5=mxCellPath[_0x763a[385]](_0x3536x2[_0x3536x4]);_0x3536x3[_0x3536x5]= _0x3536x2[_0x3536x4]};this[_0x763a[251]][_0x763a[473]]();try{for(_0x3536x4= 0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){var _0x3536x9=this[_0x763a[251]][_0x763a[264]](_0x3536x2[_0x3536x4]);if(null!= _0x3536x9){for(_0x3536x5= 0;_0x3536x5< _0x3536x9[_0x763a[67]];_0x3536x5++){var _0x3536xa=this[_0x763a[441]][_0x763a[248]](_0x3536x9[_0x3536x5]),_0x3536x12=null!= _0x3536xa?_0x3536xa[_0x763a[1710]](!0):this[_0x763a[441]][_0x763a[1710]](_0x3536x9[_0x3536x5],!0),_0x3536x13=null!= _0x3536xa?_0x3536xa[_0x763a[1710]](!1):this[_0x763a[441]][_0x763a[1710]](_0x3536x9[_0x3536x5],!1),_0x3536x14=mxCellPath[_0x763a[385]](_0x3536x12),_0x3536x15=mxCellPath[_0x763a[385]](_0x3536x13);(null== _0x3536x3[_0x3536x14]|| null== _0x3536x3[_0x3536x15])&& this[_0x763a[1809]](_0x3536x9[_0x3536x5])}};this[_0x763a[1750]](this[_0x763a[251]][_0x763a[1953]](_0x3536x2[_0x3536x4]))}}finally{this[_0x763a[251]][_0x763a[476]]()}}};mxGraph[_0x763a[202]][_0x763a[1809]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[251]][_0x763a[1721]](_0x3536x2);null!= _0x3536x3&& (null!= _0x3536x3[_0x763a[1525]]&& 0< _0x3536x3[_0x763a[1525]][_0x763a[67]])&& (_0x3536x3= _0x3536x3[_0x763a[238]](),_0x3536x3[_0x763a[1525]]= [],this[_0x763a[251]][_0x763a[1724]](_0x3536x2,_0x3536x3));return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2538]]= function(_0x3536x2,_0x3536x3){return null!= _0x3536x2&& null!= _0x3536x2[_0x763a[253]]&& null!= _0x3536x2[_0x763a[253]][_0x763a[1561]]?_0x3536x2[_0x763a[253]][_0x763a[1561]][_0x763a[1531]]:null};mxGraph[_0x763a[202]][_0x763a[2288]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x3= null;var _0x3536x5=_0x3536x2[_0x763a[124]][_0x3536x4?mxConstants[_0x763a[2539]]:mxConstants[_0x763a[2540]]];if(null!= _0x3536x5){var _0x3536x9=_0x3536x2[_0x763a[124]][_0x3536x4?mxConstants[_0x763a[2541]]:mxConstants[_0x763a[2542]]];null!= _0x3536x9&& (_0x3536x3= new mxPoint(parseFloat(_0x3536x5),parseFloat(_0x3536x9)))};_0x3536x5= !1;null!= _0x3536x3&& (_0x3536x5= mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],_0x3536x4?mxConstants[_0x763a[2543]]:mxConstants[_0x763a[2544]],!0));return new mxConnectionConstraint(_0x3536x3,_0x3536x5)};mxGraph[_0x763a[202]][_0x763a[2545]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){if(null!= _0x3536x5){this[_0x763a[251]][_0x763a[473]]();try{null== _0x3536x5|| null== _0x3536x5[_0x763a[2546]]?(this[_0x763a[1717]](_0x3536x4?mxConstants[_0x763a[2539]]:mxConstants[_0x763a[2540]],null,[_0x3536x2]),this[_0x763a[1717]](_0x3536x4?mxConstants[_0x763a[2541]]:mxConstants[_0x763a[2542]],null,[_0x3536x2]),this[_0x763a[1717]](_0x3536x4?mxConstants[_0x763a[2543]]:mxConstants[_0x763a[2544]],null,[_0x3536x2])):null!= _0x3536x5[_0x763a[2546]]&& (this[_0x763a[1717]](_0x3536x4?mxConstants[_0x763a[2539]]:mxConstants[_0x763a[2540]],_0x3536x5[_0x763a[2546]][_0x763a[235]],[_0x3536x2]),this[_0x763a[1717]](_0x3536x4?mxConstants[_0x763a[2541]]:mxConstants[_0x763a[2542]],_0x3536x5[_0x763a[2546]][_0x763a[236]],[_0x3536x2]),_0x3536x5[_0x763a[591]]?this[_0x763a[1717]](_0x3536x4?mxConstants[_0x763a[2543]]:mxConstants[_0x763a[2544]],null,[_0x3536x2]):this[_0x763a[1717]](_0x3536x4?mxConstants[_0x763a[2543]]:mxConstants[_0x763a[2544]],_0x763a[468],[_0x3536x2]))}finally{this[_0x763a[251]][_0x763a[476]]()}}};mxGraph[_0x763a[202]][_0x763a[2290]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=null;if(null!= _0x3536x2){var _0x3536x5=this[_0x763a[441]][_0x763a[2087]](_0x3536x2),_0x3536x9= new mxPoint(_0x3536x5[_0x763a[241]](),_0x3536x5[_0x763a[242]]()),_0x3536xa=_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2011]]],_0x3536x12=0;if(null!= _0x3536xa&& (_0x763a[700]== _0x3536xa?_0x3536x12+= 270:_0x763a[703]== _0x3536xa?_0x3536x12+= 180:_0x763a[701]== _0x3536xa&& (_0x3536x12+= 90),_0x763a[700]== _0x3536xa|| _0x763a[701]== _0x3536xa)){_0x3536x5[_0x763a[235]]+= _0x3536x5[_0x763a[117]]/ 2- _0x3536x5[_0x763a[119]]/ 2;_0x3536x5[_0x763a[236]]+= _0x3536x5[_0x763a[119]]/ 2- _0x3536x5[_0x763a[117]]/ 2;var _0x3536x13=_0x3536x5[_0x763a[117]];_0x3536x5[_0x763a[117]]= _0x3536x5[_0x763a[119]];_0x3536x5[_0x763a[119]]= _0x3536x13};if(null!= _0x3536x3[_0x763a[2546]]){var _0x3536x14=_0x3536x4= 1,_0x3536x15=0,_0x3536x16=0;if(this[_0x763a[502]]()[_0x763a[1193]](_0x3536x2[_0x763a[246]])){var _0x3536x17=_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2547]]],_0x3536x18=_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2548]]];null!= _0x3536x2[_0x763a[253]][_0x763a[1561]]&& (_0x3536x17= 1== mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],_0x763a[1607],0)|| _0x3536x17,_0x3536x18= 1== mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],_0x763a[1608],0)|| _0x3536x18);if(_0x763a[700]== _0x3536xa|| _0x763a[701]== _0x3536xa){_0x3536x13= _0x3536x17,_0x3536x17= _0x3536x18,_0x3536x18= _0x3536x13};_0x3536x17&& (_0x3536x4= -1,_0x3536x15= -_0x3536x5[_0x763a[117]]);_0x3536x18&& (_0x3536x14= -1,_0x3536x16= -_0x3536x5[_0x763a[119]])};_0x3536x4= new mxPoint(_0x3536x5[_0x763a[235]]+ _0x3536x3[_0x763a[2546]][_0x763a[235]]* _0x3536x5[_0x763a[117]]* _0x3536x4- _0x3536x15,_0x3536x5[_0x763a[236]]+ _0x3536x3[_0x763a[2546]][_0x763a[236]]* _0x3536x5[_0x763a[119]]* _0x3536x14- _0x3536x16)};_0x3536xa= _0x3536x2[_0x763a[124]][mxConstants[_0x763a[2278]]]|| 0;_0x3536x3[_0x763a[591]]?(0!= _0x3536x12&& null!= _0x3536x4&& (_0x3536x13= _0x3536x5= 0,90== _0x3536x12?_0x3536x13= 1:180== _0x3536x12?_0x3536x5= -1:270== _0x3536xa&& (_0x3536x13= -1),_0x3536x4= mxUtils[_0x763a[432]](_0x3536x4,_0x3536x5,_0x3536x13,_0x3536x9)),null!= _0x3536x4&& _0x3536x3[_0x763a[591]]&& (_0x3536x4= this[_0x763a[441]][_0x763a[2302]](_0x3536x2,_0x3536x4,!1))):_0x3536xa+= _0x3536x12;0!= _0x3536xa&& null!= _0x3536x4&& (_0x3536x12= mxUtils[_0x763a[431]](_0x3536xa),_0x3536x5= Math[_0x763a[426]](_0x3536x12),_0x3536x13= Math[_0x763a[427]](_0x3536x12),_0x3536x4= mxUtils[_0x763a[432]](_0x3536x4,_0x3536x5,_0x3536x13,_0x3536x9))};return _0x3536x4};mxGraph[_0x763a[202]][_0x763a[851]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){this[_0x763a[251]][_0x763a[473]]();try{var _0x3536x9=this[_0x763a[251]][_0x763a[1709]](_0x3536x2,_0x3536x4);this[_0x763a[852]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5);this[_0x763a[746]]( new mxEventObject(mxEvent.CONNECT_CELL,_0x763a[1989],_0x3536x2,_0x763a[1984],_0x3536x3,_0x763a[1097],_0x3536x4,_0x763a[257],_0x3536x9))}finally{this[_0x763a[251]][_0x763a[476]]()};return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[852]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){if(null!= _0x3536x2){this[_0x763a[251]][_0x763a[473]]();try{var _0x3536x9=this[_0x763a[251]][_0x763a[1709]](_0x3536x2,_0x3536x4);this[_0x763a[2545]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5);this[_0x763a[2549]]()&& (_0x3536x5= null,this[_0x763a[1908]](_0x3536x3)&& (_0x3536x5= _0x3536x3[_0x763a[1103]](),_0x3536x3= this[_0x763a[2550]](_0x3536x3,_0x3536x4)),this[_0x763a[1717]](_0x3536x4?mxConstants[_0x763a[2303]]:mxConstants[_0x763a[2304]],_0x3536x5,[_0x3536x2]));this[_0x763a[251]][_0x763a[1957]](_0x3536x2,_0x3536x3,_0x3536x4);this[_0x763a[2401]]&& this[_0x763a[1809]](_0x3536x2);this[_0x763a[746]]( new mxEventObject(mxEvent.CELL_CONNECTED,_0x763a[1989],_0x3536x2,_0x763a[1984],_0x3536x3,_0x763a[1097],_0x3536x4,_0x763a[257],_0x3536x9))}finally{this[_0x763a[251]][_0x763a[476]]()}}};mxGraph[_0x763a[202]][_0x763a[2531]]= function(_0x3536x2){if(null!= _0x3536x2){this[_0x763a[251]][_0x763a[473]]();try{for(var _0x3536x3=this[_0x763a[441]][_0x763a[255]],_0x3536x4=this[_0x763a[441]][_0x763a[513]],_0x3536x5={},_0x3536x9=0;_0x3536x9< _0x3536x2[_0x763a[67]];_0x3536x9++){var _0x3536xa=mxCellPath[_0x763a[385]](_0x3536x2[_0x3536x9]);_0x3536x5[_0x3536xa]= _0x3536x2[_0x3536x9]};for(_0x3536x9= 0;_0x3536x9< _0x3536x2[_0x763a[67]];_0x3536x9++){if(this[_0x763a[251]][_0x763a[250]](_0x3536x2[_0x3536x9])){var _0x3536x12=this[_0x763a[251]][_0x763a[1721]](_0x3536x2[_0x3536x9]);if(null!= _0x3536x12){var _0x3536x13=this[_0x763a[441]][_0x763a[248]](_0x3536x2[_0x3536x9]),_0x3536x14=this[_0x763a[441]][_0x763a[248]](this[_0x763a[251]][_0x763a[1197]](_0x3536x2[_0x3536x9]));if(null!= _0x3536x13&& null!= _0x3536x14){var _0x3536x12=_0x3536x12[_0x763a[238]](),_0x3536x15=-_0x3536x14[_0x763a[2078]][_0x763a[235]],_0x3536x16=-_0x3536x14[_0x763a[2078]][_0x763a[236]],_0x3536x17=_0x3536x13[_0x763a[439]],_0x3536x18=this[_0x763a[251]][_0x763a[1709]](_0x3536x2[_0x3536x9],!0);if(null!= _0x3536x18&& this[_0x763a[2551]](_0x3536x2[_0x3536x9],_0x3536x18,!0)){for(var _0x3536x19=mxCellPath[_0x763a[385]](_0x3536x18);null!= _0x3536x18&& null== _0x3536x5[_0x3536x19];){_0x3536x18= this[_0x763a[251]][_0x763a[1197]](_0x3536x18),_0x3536x19= mxCellPath[_0x763a[385]](_0x3536x18)};null== _0x3536x18&& (_0x3536x12[_0x763a[2007]]( new mxPoint(_0x3536x17[0][_0x763a[235]]/ _0x3536x3- _0x3536x4[_0x763a[235]]+ _0x3536x15,_0x3536x17[0][_0x763a[236]]/ _0x3536x3- _0x3536x4[_0x763a[236]]+ _0x3536x16),!0),this[_0x763a[251]][_0x763a[1957]](_0x3536x2[_0x3536x9],null,!0))};var _0x3536x1a=this[_0x763a[251]][_0x763a[1709]](_0x3536x2[_0x3536x9],!1);if(null!= _0x3536x1a&& this[_0x763a[2551]](_0x3536x2[_0x3536x9],_0x3536x1a,!1)){for(var _0x3536x1b=mxCellPath[_0x763a[385]](_0x3536x1a);null!= _0x3536x1a&& null== _0x3536x5[_0x3536x1b];){_0x3536x1a= this[_0x763a[251]][_0x763a[1197]](_0x3536x1a),_0x3536x1b= mxCellPath[_0x763a[385]](_0x3536x1a)};if(null== _0x3536x1a){var _0x3536x1c=_0x3536x17[_0x763a[67]]- 1;_0x3536x12[_0x763a[2007]]( new mxPoint(_0x3536x17[_0x3536x1c][_0x763a[235]]/ _0x3536x3- _0x3536x4[_0x763a[235]]+ _0x3536x15,_0x3536x17[_0x3536x1c][_0x763a[236]]/ _0x3536x3- _0x3536x4[_0x763a[236]]+ _0x3536x16),!1);this[_0x763a[251]][_0x763a[1957]](_0x3536x2[_0x3536x9],null,!1)}};this[_0x763a[251]][_0x763a[1724]](_0x3536x2[_0x3536x9],_0x3536x12)}}}}}finally{this[_0x763a[251]][_0x763a[476]]()}}};mxGraph[_0x763a[202]][_0x763a[2534]]= function(){return this[_0x763a[441]][_0x763a[1741]]};mxGraph[_0x763a[202]][_0x763a[2326]]= function(_0x3536x2){return null};mxGraph[_0x763a[202]][_0x763a[1908]]= function(_0x3536x2){return !1};mxGraph[_0x763a[202]][_0x763a[2550]]= function(_0x3536x2,_0x3536x3){return this[_0x763a[251]][_0x763a[1197]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2280]]= function(_0x3536x2){return null};mxGraph[_0x763a[202]][_0x763a[2552]]= function(_0x3536x2){_0x3536x2= _0x3536x2|| this[_0x763a[2452]]();null!= _0x3536x2&& this[_0x763a[2553]](_0x3536x2)&& (this[_0x763a[441]][_0x763a[2257]](_0x3536x2),this[_0x763a[2440]]())};mxGraph[_0x763a[202]][_0x763a[2554]]= function(){var _0x3536x2=this[_0x763a[251]][_0x763a[501]](),_0x3536x3=this[_0x763a[2534]]();if(null!= _0x3536x3){for(var _0x3536x4=this[_0x763a[251]][_0x763a[1197]](_0x3536x3);_0x3536x4!= _0x3536x2&& !this[_0x763a[2553]](_0x3536x4)&& this[_0x763a[251]][_0x763a[1197]](_0x3536x4)!= _0x3536x2;){_0x3536x4= this[_0x763a[251]][_0x763a[1197]](_0x3536x4)};_0x3536x4== _0x3536x2|| this[_0x763a[251]][_0x763a[1197]](_0x3536x4)== _0x3536x2?this[_0x763a[441]][_0x763a[2257]](null):this[_0x763a[441]][_0x763a[2257]](_0x3536x4);null!= this[_0x763a[441]][_0x763a[248]](_0x3536x3)&& this[_0x763a[2450]](_0x3536x3)}};mxGraph[_0x763a[202]][_0x763a[2442]]= function(){var _0x3536x2=this[_0x763a[2534]]();null!= _0x3536x2&& (this[_0x763a[441]][_0x763a[2257]](null),null!= this[_0x763a[441]][_0x763a[248]](_0x3536x2)&& this[_0x763a[2450]](_0x3536x2))};mxGraph[_0x763a[202]][_0x763a[2553]]= function(_0x3536x2){return null!= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[517]]= function(){return this[_0x763a[441]][_0x763a[517]]()};mxGraph[_0x763a[202]][_0x763a[2555]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=[_0x3536x2];_0x3536x3&& (_0x3536x5= _0x3536x5[_0x763a[1919]](this[_0x763a[251]][_0x763a[264]](_0x3536x2)));_0x3536x5= this[_0x763a[441]][_0x763a[1799]](_0x3536x5);if(_0x3536x4){_0x3536x4= this[_0x763a[251]][_0x763a[262]](_0x3536x2);for(var _0x3536x9=0;_0x3536x9< _0x3536x4;_0x3536x9++){var _0x3536xa=this[_0x763a[2555]](this[_0x763a[251]][_0x763a[263]](_0x3536x2,_0x3536x9),_0x3536x3,!0);null!= _0x3536x5?_0x3536x5[_0x763a[99]](_0x3536xa):_0x3536x5= _0x3536xa}};return _0x3536x5};mxGraph[_0x763a[202]][_0x763a[1729]]= function(_0x3536x2,_0x3536x3){_0x3536x3= null!= _0x3536x3?_0x3536x3:!1;var _0x3536x4=null;if(null!= _0x3536x2){for(var _0x3536x5=0;_0x3536x5< _0x3536x2[_0x763a[67]];_0x3536x5++){if(_0x3536x3|| this[_0x763a[251]][_0x763a[1193]](_0x3536x2[_0x3536x5])){var _0x3536x9=this[_0x763a[1198]](_0x3536x2[_0x3536x5]);if(null!= _0x3536x9){var _0x3536xa=_0x3536x9[_0x763a[1525]];if(null!= _0x3536xa&& 0< _0x3536xa[_0x763a[67]]){for(var _0x3536x12= new mxRectangle(_0x3536xa[0][_0x763a[235]],_0x3536xa[0][_0x763a[236]],0,0),_0x3536x13=function(_0x3536x2){null!= _0x3536x2&& _0x3536x12[_0x763a[99]]( new mxRectangle(_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]],0,0))},_0x3536x14=1;_0x3536x14< _0x3536xa[_0x763a[67]];_0x3536x14++){_0x3536x13(_0x3536xa[_0x3536x14])};_0x3536x13(_0x3536x9[_0x763a[2006]](!0));_0x3536x13(_0x3536x9[_0x763a[2006]](!1))};null== _0x3536x4?_0x3536x4= new mxRectangle(_0x3536x9[_0x763a[235]],_0x3536x9[_0x763a[236]],_0x3536x9[_0x763a[117]],_0x3536x9[_0x763a[119]]):_0x3536x4[_0x763a[99]](_0x3536x9)}}}};return _0x3536x4};mxGraph[_0x763a[202]][_0x763a[802]]= function(_0x3536x2){this[_0x763a[441]][_0x763a[200]](_0x3536x2,null== _0x3536x2);this[_0x763a[441]][_0x763a[2264]]();this[_0x763a[2258]]();this[_0x763a[746]]( new mxEventObject(mxEvent.REFRESH))};mxGraph[_0x763a[202]][_0x763a[1021]]= function(_0x3536x2){this[_0x763a[991]]&& (_0x3536x2= Math[_0x763a[488]](_0x3536x2/ this[_0x763a[1020]])* this[_0x763a[1020]]);return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[1135]]= function(_0x3536x2,_0x3536x3){if(this[_0x763a[2365]]&& mxUtils[_0x763a[1134]](this[_0x763a[526]])){this[_0x763a[526]][_0x763a[360]]= -_0x3536x2,this[_0x763a[526]][_0x763a[190]]= -_0x3536x3}else {var _0x3536x4=this[_0x763a[441]][_0x763a[2051]]();if(this[_0x763a[507]]== mxConstants[_0x763a[508]]){if(0== _0x3536x2&& 0== _0x3536x3){if(mxClient[_0x763a[80]]?_0x3536x4[_0x763a[57]](_0x763a[535],_0x763a[536]+ _0x3536x2+ _0x763a[537]+ _0x3536x3+ _0x763a[460]):_0x3536x4[_0x763a[1390]](_0x763a[535]),null!= this[_0x763a[2556]]){for(var _0x3536x5=this[_0x763a[2556]][_0x763a[285]];null!= _0x3536x5;){var _0x3536x9=_0x3536x5[_0x763a[287]];this[_0x763a[526]][_0x763a[62]](_0x3536x5);_0x3536x5= _0x3536x9};this[_0x763a[2556]][_0x763a[265]][_0x763a[266]](this[_0x763a[2556]]);this[_0x763a[2556]]= null;this[_0x763a[526]][_0x763a[62]](_0x3536x4[_0x763a[265]]);for(_0x3536x5= this[_0x763a[2557]][_0x763a[285]];null!= _0x3536x5;){_0x3536x9= _0x3536x5[_0x763a[287]],this[_0x763a[526]][_0x763a[62]](_0x3536x5),_0x3536x5= _0x3536x9};this[_0x763a[2557]][_0x763a[265]][_0x763a[266]](this[_0x763a[2557]]);this[_0x763a[2557]]= null}}else {_0x3536x4[_0x763a[57]](_0x763a[535],_0x763a[536]+ _0x3536x2+ _0x763a[537]+ _0x3536x3+ _0x763a[460]);if(null== this[_0x763a[2556]]){this[_0x763a[2556]]= document[_0x763a[55]](_0x763a[485]);this[_0x763a[2556]][_0x763a[124]][_0x763a[491]]= _0x763a[492];this[_0x763a[2556]][_0x763a[124]][_0x763a[277]]= _0x763a[189];this[_0x763a[2557]]= document[_0x763a[55]](_0x763a[485]);this[_0x763a[2557]][_0x763a[124]][_0x763a[491]]= _0x763a[492];this[_0x763a[2557]][_0x763a[124]][_0x763a[277]]= _0x763a[189];for(var _0x3536xa=this[_0x763a[2556]],_0x3536x5=this[_0x763a[526]][_0x763a[285]];null!= _0x3536x5;){_0x3536x9= _0x3536x5[_0x763a[287]],_0x3536x5!= _0x3536x4[_0x763a[265]]?_0x3536xa[_0x763a[62]](_0x3536x5):_0x3536xa= this[_0x763a[2557]],_0x3536x5= _0x3536x9};this[_0x763a[526]][_0x763a[950]](this[_0x763a[2556]],_0x3536x4[_0x763a[265]]);this[_0x763a[526]][_0x763a[62]](this[_0x763a[2557]])};this[_0x763a[2556]][_0x763a[124]][_0x763a[361]]= _0x3536x2+ _0x763a[168];this[_0x763a[2556]][_0x763a[124]][_0x763a[125]]= _0x3536x3+ _0x763a[168];this[_0x763a[2557]][_0x763a[124]][_0x763a[361]]= _0x3536x2+ _0x763a[168];this[_0x763a[2557]][_0x763a[124]][_0x763a[125]]= _0x3536x3+ _0x763a[168]}}else {_0x3536x4[_0x763a[124]][_0x763a[361]]= _0x3536x2+ _0x763a[168],_0x3536x4[_0x763a[124]][_0x763a[125]]= _0x3536x3+ _0x763a[168]};this[_0x763a[1136]]= _0x3536x2;this[_0x763a[1137]]= _0x3536x3;this[_0x763a[746]]( new mxEventObject(mxEvent.PAN))}};mxGraph[_0x763a[202]][_0x763a[2558]]= function(){this[_0x763a[499]](this[_0x763a[2395]])};mxGraph[_0x763a[202]][_0x763a[2559]]= function(){this[_0x763a[499]](1/ this[_0x763a[2395]])};mxGraph[_0x763a[202]][_0x763a[2560]]= function(){1== this[_0x763a[441]][_0x763a[255]]?this[_0x763a[441]][_0x763a[1147]](0,0):(this[_0x763a[441]][_0x763a[513]][_0x763a[235]]= 0,this[_0x763a[441]][_0x763a[513]][_0x763a[236]]= 0,this[_0x763a[441]][_0x763a[2262]](1))};mxGraph[_0x763a[202]][_0x763a[2561]]= function(_0x3536x2,_0x3536x3){this[_0x763a[499]](_0x3536x2/ this[_0x763a[441]][_0x763a[255]],_0x3536x3)};mxGraph[_0x763a[202]][_0x763a[499]]= function(_0x3536x2,_0x3536x3){_0x3536x3= null!= _0x3536x3?_0x3536x3:this[_0x763a[2397]];var _0x3536x4=this[_0x763a[441]][_0x763a[255]]* _0x3536x2,_0x3536x5=this[_0x763a[441]][_0x763a[248]](this[_0x763a[2452]]());if(this[_0x763a[2396]]&& null!= _0x3536x5){_0x3536x5= new mxRectangle(_0x3536x5[_0x763a[235]]* _0x3536x2,_0x3536x5[_0x763a[236]]* _0x3536x2,_0x3536x5[_0x763a[117]]* _0x3536x2,_0x3536x5[_0x763a[119]]* _0x3536x2),this[_0x763a[441]][_0x763a[255]]= _0x3536x4,this[_0x763a[2562]](_0x3536x5)|| (this[_0x763a[441]][_0x763a[2259]](),this[_0x763a[441]][_0x763a[2262]](_0x3536x4))}else {if(_0x3536x3&& !mxUtils[_0x763a[1134]](this[_0x763a[526]])){var _0x3536x5=this[_0x763a[526]][_0x763a[359]],_0x3536x9=this[_0x763a[526]][_0x763a[167]];if(1< _0x3536x2){var _0x3536xa=(_0x3536x2- 1)/ (2* _0x3536x4),_0x3536x5=_0x3536x5* -_0x3536xa,_0x3536x9=_0x3536x9* -_0x3536xa}else {_0x3536xa= (1/ _0x3536x2- 1)/ (2* this[_0x763a[441]][_0x763a[255]]),_0x3536x5*= _0x3536xa,_0x3536x9*= _0x3536xa};this[_0x763a[441]][_0x763a[829]](_0x3536x4,this[_0x763a[441]][_0x763a[513]][_0x763a[235]]+ _0x3536x5,this[_0x763a[441]][_0x763a[513]][_0x763a[236]]+ _0x3536x9)}else {this[_0x763a[441]][_0x763a[2262]](_0x3536x4),mxUtils[_0x763a[1134]](this[_0x763a[526]])&& (_0x3536x9= _0x3536x5= 0,_0x3536x3&& (_0x3536x5= this[_0x763a[526]][_0x763a[359]]* (_0x3536x2- 1)/ 2,_0x3536x9= this[_0x763a[526]][_0x763a[167]]* (_0x3536x2- 1)/ 2),this[_0x763a[526]][_0x763a[360]]= Math[_0x763a[488]](this[_0x763a[526]][_0x763a[360]]* _0x3536x2+ _0x3536x5),this[_0x763a[526]][_0x763a[190]]= Math[_0x763a[488]](this[_0x763a[526]][_0x763a[190]]* _0x3536x2+ _0x3536x9))}}};mxGraph[_0x763a[202]][_0x763a[2563]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[526]][_0x763a[159]]/ _0x3536x2[_0x763a[117]]/ (this[_0x763a[526]][_0x763a[157]]/ _0x3536x2[_0x763a[119]]);_0x3536x2[_0x763a[235]]= Math[_0x763a[160]](0,_0x3536x2[_0x763a[235]]);_0x3536x2[_0x763a[236]]= Math[_0x763a[160]](0,_0x3536x2[_0x763a[236]]);var _0x3536x4=Math[_0x763a[243]](this[_0x763a[526]][_0x763a[1526]],_0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]),_0x3536x5=Math[_0x763a[243]](this[_0x763a[526]][_0x763a[191]],_0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]);_0x3536x2[_0x763a[117]]= _0x3536x4- _0x3536x2[_0x763a[235]];_0x3536x2[_0x763a[119]]= _0x3536x5- _0x3536x2[_0x763a[236]];1> _0x3536x3?(_0x3536x3= _0x3536x2[_0x763a[119]]/ _0x3536x3,_0x3536x4= (_0x3536x3- _0x3536x2[_0x763a[119]])/ 2,_0x3536x2[_0x763a[119]]= _0x3536x3,_0x3536x3= Math[_0x763a[243]](_0x3536x2[_0x763a[236]],_0x3536x4),_0x3536x2[_0x763a[236]]-= _0x3536x3,_0x3536x5= Math[_0x763a[243]](this[_0x763a[526]][_0x763a[191]],_0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]),_0x3536x2[_0x763a[119]]= _0x3536x5- _0x3536x2[_0x763a[236]]):(_0x3536x3*= _0x3536x2[_0x763a[117]],_0x3536x4= (_0x3536x3- _0x3536x2[_0x763a[117]])/ 2,_0x3536x2[_0x763a[117]]= _0x3536x3,_0x3536x3= Math[_0x763a[243]](_0x3536x2[_0x763a[235]],_0x3536x4),_0x3536x2[_0x763a[235]]-= _0x3536x3,_0x3536x4= Math[_0x763a[243]](this[_0x763a[526]][_0x763a[1526]],_0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]),_0x3536x2[_0x763a[117]]= _0x3536x4- _0x3536x2[_0x763a[235]]);_0x3536x3= this[_0x763a[526]][_0x763a[159]]/ _0x3536x2[_0x763a[117]];_0x3536x4= this[_0x763a[441]][_0x763a[255]]* _0x3536x3;mxUtils[_0x763a[1134]](this[_0x763a[526]])?(this[_0x763a[441]][_0x763a[2262]](_0x3536x4),this[_0x763a[526]][_0x763a[360]]= Math[_0x763a[488]](_0x3536x2[_0x763a[235]]* _0x3536x3),this[_0x763a[526]][_0x763a[190]]= Math[_0x763a[488]](_0x3536x2[_0x763a[236]]* _0x3536x3)):this[_0x763a[441]][_0x763a[829]](_0x3536x4,this[_0x763a[441]][_0x763a[513]][_0x763a[235]]- _0x3536x2[_0x763a[235]]/ this[_0x763a[441]][_0x763a[255]],this[_0x763a[441]][_0x763a[513]][_0x763a[236]]- _0x3536x2[_0x763a[236]]/ this[_0x763a[441]][_0x763a[255]])};mxGraph[_0x763a[202]][_0x763a[933]]= function(_0x3536x2,_0x3536x3){if(null!= this[_0x763a[526]]){_0x3536x2= null!= _0x3536x2?_0x3536x2:0;_0x3536x3= null!= _0x3536x3?_0x3536x3:!1;var _0x3536x4=this[_0x763a[526]][_0x763a[159]],_0x3536x5=this[_0x763a[526]][_0x763a[157]],_0x3536x9=this[_0x763a[441]][_0x763a[517]]();_0x3536x3&& (null!= _0x3536x9[_0x763a[235]]&& null!= _0x3536x9[_0x763a[236]])&& (_0x3536x9[_0x763a[117]]+= _0x3536x9[_0x763a[235]],_0x3536x9[_0x763a[119]]+= _0x3536x9[_0x763a[236]],_0x3536x9[_0x763a[235]]= 0,_0x3536x9[_0x763a[236]]= 0);var _0x3536xa=this[_0x763a[441]][_0x763a[255]],_0x3536x12=_0x3536x9[_0x763a[117]]/ _0x3536xa,_0x3536x13=_0x3536x9[_0x763a[119]]/ _0x3536xa;null!= this[_0x763a[1617]]&& (_0x3536x12= Math[_0x763a[160]](_0x3536x12,this[_0x763a[1617]][_0x763a[117]]- _0x3536x9[_0x763a[235]]/ _0x3536xa),_0x3536x13= Math[_0x763a[160]](_0x3536x13,this[_0x763a[1617]][_0x763a[119]]- _0x3536x9[_0x763a[236]]/ _0x3536xa));var _0x3536x14=_0x3536x3?_0x3536x2:2* _0x3536x2,_0x3536x4=Math[_0x763a[519]](100* Math[_0x763a[243]](_0x3536x4/ (_0x3536x12+ _0x3536x14),_0x3536x5/ (_0x3536x13+ _0x3536x14)))/ 100;null!= this[_0x763a[2413]]&& (_0x3536x4= Math[_0x763a[160]](_0x3536x4,this[_0x763a[2413]]));null!= this[_0x763a[2414]]&& (_0x3536x4= Math[_0x763a[243]](_0x3536x4,this[_0x763a[2414]]));_0x3536x3?this[_0x763a[441]][_0x763a[255]]!= _0x3536x4&& this[_0x763a[441]][_0x763a[2262]](_0x3536x4):mxUtils[_0x763a[1134]](this[_0x763a[526]])?(this[_0x763a[441]][_0x763a[2262]](_0x3536x4),null!= _0x3536x9[_0x763a[235]]&& (this[_0x763a[526]][_0x763a[360]]= Math[_0x763a[488]](_0x3536x9[_0x763a[235]]/ _0x3536xa)* _0x3536x4- _0x3536x2- Math[_0x763a[160]](0,(this[_0x763a[526]][_0x763a[159]]- _0x3536x12* _0x3536x4)/ 2)),null!= _0x3536x9[_0x763a[236]]&& (this[_0x763a[526]][_0x763a[190]]= Math[_0x763a[488]](_0x3536x9[_0x763a[236]]/ _0x3536xa)* _0x3536x4- _0x3536x2- Math[_0x763a[160]](0,(this[_0x763a[526]][_0x763a[157]]- _0x3536x13* _0x3536x4)/ 2))):this[_0x763a[441]][_0x763a[829]](_0x3536x4,null!= _0x3536x9[_0x763a[235]]?Math[_0x763a[519]](this[_0x763a[441]][_0x763a[513]][_0x763a[235]]- _0x3536x9[_0x763a[235]]/ _0x3536xa+ _0x3536x2+ 1):_0x3536x2,null!= _0x3536x9[_0x763a[236]]?Math[_0x763a[519]](this[_0x763a[441]][_0x763a[513]][_0x763a[236]]- _0x3536x9[_0x763a[236]]/ _0x3536xa+ _0x3536x2+ 1):_0x3536x2)};return this[_0x763a[441]][_0x763a[255]]};mxGraph[_0x763a[202]][_0x763a[2564]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=-this[_0x763a[441]][_0x763a[513]][_0x763a[235]],_0x3536x5=-this[_0x763a[441]][_0x763a[513]][_0x763a[236]],_0x3536x9=this[_0x763a[441]][_0x763a[248]](_0x3536x2);null!= _0x3536x9&& (_0x3536x4= new mxRectangle(_0x3536x4+ _0x3536x9[_0x763a[235]],_0x3536x5+ _0x3536x9[_0x763a[236]],_0x3536x9[_0x763a[117]],_0x3536x9[_0x763a[119]]),_0x3536x3&& null!= this[_0x763a[526]]&& (_0x3536x5= this[_0x763a[526]][_0x763a[159]],_0x3536x9= this[_0x763a[526]][_0x763a[157]],_0x3536x4[_0x763a[235]]= _0x3536x4[_0x763a[241]]()- _0x3536x5/ 2,_0x3536x4[_0x763a[117]]= _0x3536x5,_0x3536x4[_0x763a[236]]= _0x3536x4[_0x763a[242]]()- _0x3536x9/ 2,_0x3536x4[_0x763a[119]]= _0x3536x9),this[_0x763a[2562]](_0x3536x4)&& this[_0x763a[441]][_0x763a[1147]](this[_0x763a[441]][_0x763a[513]][_0x763a[235]],this[_0x763a[441]][_0x763a[513]][_0x763a[236]]))};mxGraph[_0x763a[202]][_0x763a[2562]]= function(_0x3536x2){var _0x3536x3=!1;if(null!= _0x3536x2){var _0x3536x4=this[_0x763a[526]][_0x763a[359]],_0x3536x5=this[_0x763a[526]][_0x763a[167]],_0x3536x9=Math[_0x763a[243]](_0x3536x4,_0x3536x2[_0x763a[117]]),_0x3536xa=Math[_0x763a[243]](_0x3536x5,_0x3536x2[_0x763a[119]]);if(mxUtils[_0x763a[1134]](this[_0x763a[526]])){_0x3536x4= this[_0x763a[526]];_0x3536x2[_0x763a[235]]+= this[_0x763a[441]][_0x763a[513]][_0x763a[235]];_0x3536x2[_0x763a[236]]+= this[_0x763a[441]][_0x763a[513]][_0x763a[236]];var _0x3536x12=_0x3536x4[_0x763a[360]]- _0x3536x2[_0x763a[235]],_0x3536x5=Math[_0x763a[160]](_0x3536x12- _0x3536x4[_0x763a[360]],0);0< _0x3536x12?_0x3536x4[_0x763a[360]]-= _0x3536x12+ 2:(_0x3536x12= _0x3536x2[_0x763a[235]]+ _0x3536x9- _0x3536x4[_0x763a[360]]- _0x3536x4[_0x763a[159]],0< _0x3536x12&& (_0x3536x4[_0x763a[360]]+= _0x3536x12+ 2));_0x3536x9= _0x3536x4[_0x763a[190]]- _0x3536x2[_0x763a[236]];_0x3536x12= Math[_0x763a[160]](0,_0x3536x9- _0x3536x4[_0x763a[190]]);0< _0x3536x9?_0x3536x4[_0x763a[190]]-= _0x3536x9+ 2:(_0x3536x9= _0x3536x2[_0x763a[236]]+ _0x3536xa- _0x3536x4[_0x763a[190]]- _0x3536x4[_0x763a[157]],0< _0x3536x9&& (_0x3536x4[_0x763a[190]]+= _0x3536x9+ 2));!this[_0x763a[2365]]&& (0!= _0x3536x5|| 0!= _0x3536x12)&& this[_0x763a[441]][_0x763a[1147]](_0x3536x5,_0x3536x12)}else {var _0x3536x12=-this[_0x763a[441]][_0x763a[513]][_0x763a[235]],_0x3536x13=-this[_0x763a[441]][_0x763a[513]][_0x763a[236]],_0x3536x14=this[_0x763a[441]][_0x763a[255]];_0x3536x2[_0x763a[235]]+ _0x3536x9> _0x3536x12+ _0x3536x4&& (this[_0x763a[441]][_0x763a[513]][_0x763a[235]]-= (_0x3536x2[_0x763a[235]]+ _0x3536x9- _0x3536x4- _0x3536x12)/ _0x3536x14,_0x3536x3= !0);_0x3536x2[_0x763a[236]]+ _0x3536xa> _0x3536x13+ _0x3536x5&& (this[_0x763a[441]][_0x763a[513]][_0x763a[236]]-= (_0x3536x2[_0x763a[236]]+ _0x3536xa- _0x3536x5- _0x3536x13)/ _0x3536x14,_0x3536x3= !0);_0x3536x2[_0x763a[235]]< _0x3536x12&& (this[_0x763a[441]][_0x763a[513]][_0x763a[235]]+= (_0x3536x12- _0x3536x2[_0x763a[235]])/ _0x3536x14,_0x3536x3= !0);_0x3536x2[_0x763a[236]]< _0x3536x13&& (this[_0x763a[441]][_0x763a[513]][_0x763a[236]]+= (_0x3536x13- _0x3536x2[_0x763a[236]])/ _0x3536x14,_0x3536x3= !0);_0x3536x3&& (this[_0x763a[441]][_0x763a[802]](),null!= this[_0x763a[2432]]&& this[_0x763a[2432]][_0x763a[802]]())}};return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[1198]]= function(_0x3536x2){return this[_0x763a[251]][_0x763a[1721]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[1714]]= function(_0x3536x2){return this[_0x763a[251]][_0x763a[174]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[1742]]= function(_0x3536x2){return this[_0x763a[251]][_0x763a[1971]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2565]]= function(_0x3536x2){return this[_0x763a[251]][_0x763a[1965]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2298]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2566]]];if(null!= _0x3536x3){return _0x3536x3};_0x3536x2= this[_0x763a[441]][_0x763a[2291]](_0x3536x2);return _0x3536x2== mxEdgeStyle[_0x763a[2567]]|| _0x3536x2== mxEdgeStyle[_0x763a[2568]]|| _0x3536x2== mxEdgeStyle[_0x763a[2569]]|| _0x3536x2== mxEdgeStyle[_0x763a[2570]]|| _0x3536x2== mxEdgeStyle[_0x763a[2571]]|| _0x3536x2== mxEdgeStyle[_0x763a[2572]]};mxGraph[_0x763a[202]][_0x763a[2573]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[2089]](!0);_0x3536x2= _0x3536x2[_0x763a[2089]](!1);return null!= _0x3536x3&& _0x3536x3== _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2574]]= function(_0x3536x2){return mxEvent[_0x763a[775]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2462]]= function(_0x3536x2){return mxClient[_0x763a[2575]]?mxEvent[_0x763a[2576]](_0x3536x2):mxEvent[_0x763a[775]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[1018]]= function(_0x3536x2){return null!= _0x3536x2&& !mxEvent[_0x763a[2577]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2578]]= function(_0x3536x2){return mxEvent[_0x763a[774]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2579]]= function(_0x3536x2){return mxEvent[_0x763a[2577]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2580]]= function(_0x3536x2){mxUtils[_0x763a[150]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2581]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return null== this[_0x763a[2500]](_0x3536x2,_0x3536x3,_0x3536x4)};mxGraph[_0x763a[202]][_0x763a[2500]]= function(_0x3536x2,_0x3536x3,_0x3536x4){if(null!= _0x3536x2&& !this[_0x763a[2530]]()&& (null== _0x3536x3|| null== _0x3536x4)){return _0x763a[110]};if(null!= _0x3536x2&& null== this[_0x763a[251]][_0x763a[1709]](_0x3536x2,!0)&& null== this[_0x763a[251]][_0x763a[1709]](_0x3536x2,!1)){return null};if(!this[_0x763a[2402]]&& _0x3536x3== _0x3536x4&& null!= _0x3536x3|| !this[_0x763a[2582]](_0x3536x3,_0x3536x4)){return _0x763a[110]};if(null!= _0x3536x3&& null!= _0x3536x4){var _0x3536x5=_0x763a[110];if(!this[_0x763a[2404]]){var _0x3536x9=this[_0x763a[251]][_0x763a[1781]](_0x3536x3,_0x3536x4,!0);if(1< _0x3536x9[_0x763a[67]]|| 1== _0x3536x9[_0x763a[67]]&& _0x3536x9[0]!= _0x3536x2){_0x3536x5+= (mxResources[_0x763a[203]](this[_0x763a[2421]])|| this[_0x763a[2421]])+ _0x763a[192]}};var _0x3536x9=this[_0x763a[251]][_0x763a[1962]](_0x3536x3,!0,_0x3536x2),_0x3536xa=this[_0x763a[251]][_0x763a[1962]](_0x3536x4,!1,_0x3536x2);if(null!= this[_0x763a[2335]]){for(var _0x3536x12=0;_0x3536x12< this[_0x763a[2335]][_0x763a[67]];_0x3536x12++){var _0x3536x13=this[_0x763a[2335]][_0x3536x12][_0x763a[2583]](this,_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x9,_0x3536xa);null!= _0x3536x13&& (_0x3536x5+= _0x3536x13)}};_0x3536x13= this[_0x763a[2584]](_0x3536x2,_0x3536x3,_0x3536x4);null!= _0x3536x13&& (_0x3536x5+= _0x3536x13);return 0< _0x3536x5[_0x763a[67]]?_0x3536x5:null};return this[_0x763a[2406]]?null:_0x763a[110]};mxGraph[_0x763a[202]][_0x763a[2584]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return null};mxGraph[_0x763a[202]][_0x763a[2585]]= function(_0x3536x2,_0x3536x3){_0x3536x2= null!= _0x3536x2?_0x3536x2:this[_0x763a[251]][_0x763a[501]]();_0x3536x3= null!= _0x3536x3?_0x3536x3:{};for(var _0x3536x4=!0,_0x3536x5=this[_0x763a[251]][_0x763a[262]](_0x3536x2),_0x3536x9=0;_0x3536x9< _0x3536x5;_0x3536x9++){var _0x3536xa=this[_0x763a[251]][_0x763a[263]](_0x3536x2,_0x3536x9),_0x3536x12=_0x3536x3;this[_0x763a[2553]](_0x3536xa)&& (_0x3536x12= {});_0x3536x12= this[_0x763a[2585]](_0x3536xa,_0x3536x12);null!= _0x3536x12?this[_0x763a[2447]](_0x3536xa,_0x3536x12[_0x763a[230]](/\n/g,_0x763a[545])):this[_0x763a[2447]](_0x3536xa,null);_0x3536x4= _0x3536x4&& null== _0x3536x12};_0x3536x5= _0x763a[110];this[_0x763a[1742]](_0x3536x2)&& !_0x3536x4&& (_0x3536x5+= (mxResources[_0x763a[203]](this[_0x763a[2423]])|| this[_0x763a[2423]])+ _0x763a[192]);_0x3536x5= this[_0x763a[251]][_0x763a[250]](_0x3536x2)?_0x3536x5+ (this[_0x763a[2500]](_0x3536x2,this[_0x763a[251]][_0x763a[1709]](_0x3536x2,!0),this[_0x763a[251]][_0x763a[1709]](_0x3536x2,!1))|| _0x763a[110]):_0x3536x5+ (this[_0x763a[2586]](_0x3536x2)|| _0x763a[110]);_0x3536x9= this[_0x763a[2587]](_0x3536x2,_0x3536x3);null!= _0x3536x9&& (_0x3536x5+= _0x3536x9);null== this[_0x763a[251]][_0x763a[1197]](_0x3536x2)&& this[_0x763a[441]][_0x763a[2264]]();return 0< _0x3536x5[_0x763a[67]]|| !_0x3536x4?_0x3536x5:null};mxGraph[_0x763a[202]][_0x763a[2586]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[251]][_0x763a[1962]](_0x3536x2,!0),_0x3536x4=this[_0x763a[251]][_0x763a[1962]](_0x3536x2,!1);_0x3536x2= this[_0x763a[251]][_0x763a[433]](_0x3536x2);var _0x3536x5=_0x763a[110];if(null!= this[_0x763a[2335]]){for(var _0x3536x9=0;_0x3536x9< this[_0x763a[2335]][_0x763a[67]];_0x3536x9++){var _0x3536xa=this[_0x763a[2335]][_0x3536x9];if(_0x3536xa[_0x763a[1097]]&& mxUtils[_0x763a[1331]](_0x3536x2,_0x3536xa[_0x763a[60]],_0x3536xa[_0x763a[2588]],_0x3536xa[_0x763a[131]])&& (0== _0x3536xa[_0x763a[160]]&& 0< _0x3536x3|| 1== _0x3536xa[_0x763a[243]]&& 0== _0x3536x3|| 1== _0x3536xa[_0x763a[160]]&& 1< _0x3536x3)){_0x3536x5+= _0x3536xa[_0x763a[2589]]+ _0x763a[192]}else {if(!_0x3536xa[_0x763a[1097]]&& mxUtils[_0x763a[1331]](_0x3536x2,_0x3536xa[_0x763a[60]],_0x3536xa[_0x763a[2588]],_0x3536xa[_0x763a[131]])&& (0== _0x3536xa[_0x763a[160]]&& 0< _0x3536x4|| 1== _0x3536xa[_0x763a[243]]&& 0== _0x3536x4|| 1== _0x3536xa[_0x763a[160]]&& 1< _0x3536x4)){_0x3536x5+= _0x3536xa[_0x763a[2589]]+ _0x763a[192]}}}};return 0< _0x3536x5[_0x763a[67]]?_0x3536x5:null};mxGraph[_0x763a[202]][_0x763a[2587]]= function(_0x3536x2,_0x3536x3){return null};mxGraph[_0x763a[202]][_0x763a[2271]]= function(){return this[_0x763a[1617]]};mxGraph[_0x763a[202]][_0x763a[2590]]= function(_0x3536x2){this[_0x763a[1617]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2205]]= function(_0x3536x2){if(null!= _0x3536x2&& this[_0x763a[2206]]&& !this[_0x763a[502]]()[_0x763a[250]](_0x3536x2[_0x763a[246]])){var _0x3536x3=this[_0x763a[1742]](_0x3536x2[_0x763a[246]]);if(this[_0x763a[2516]](_0x3536x2[_0x763a[246]],!_0x3536x3)){return _0x3536x3?this[_0x763a[2415]]:this[_0x763a[2417]]}};return null};mxGraph[_0x763a[202]][_0x763a[2454]]= function(_0x3536x2){_0x3536x2= this[_0x763a[251]][_0x763a[433]](_0x3536x2);if(null!= _0x3536x2){if(mxUtils[_0x763a[1331]](_0x3536x2)){return _0x3536x2[_0x763a[301]]};if(_0x763a[279]== typeof _0x3536x2[_0x763a[2591]]){return _0x3536x2.toString()}};return _0x763a[110]};mxGraph[_0x763a[202]][_0x763a[2183]]= function(_0x3536x2){var _0x3536x3=_0x763a[110];if(this[_0x763a[2409]]&& null!= _0x3536x2){var _0x3536x4=this[_0x763a[441]][_0x763a[248]](_0x3536x2),_0x3536x4=null!= _0x3536x4?_0x3536x4[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);mxUtils[_0x763a[433]](_0x3536x4,mxConstants.STYLE_NOLABEL,!1)|| (_0x3536x3= this[_0x763a[2454]](_0x3536x2))};return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[2186]]= function(_0x3536x2){return this[_0x763a[2592]]()};mxGraph[_0x763a[202]][_0x763a[2592]]= function(){return this[_0x763a[2410]]};mxGraph[_0x763a[202]][_0x763a[2593]]= function(_0x3536x2){this[_0x763a[2410]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2131]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[441]][_0x763a[248]](_0x3536x2);_0x3536x2= null!= _0x3536x3?_0x3536x3[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);return null!= _0x3536x2?_0x763a[1333]== _0x3536x2[mxConstants[_0x763a[2594]]]:!1};mxGraph[_0x763a[202]][_0x763a[2130]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[441]][_0x763a[248]](_0x3536x2);_0x3536x2= null!= _0x3536x3?_0x3536x3[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);return null!= _0x3536x2?_0x763a[188]== _0x3536x2[mxConstants[_0x763a[2193]]]:!1};mxGraph[_0x763a[202]][_0x763a[2595]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=null;if(null!= _0x3536x2){if(null!= _0x3536x2[_0x763a[2207]]&& (_0x3536x3== _0x3536x2[_0x763a[2207]][_0x763a[252]]|| _0x3536x3[_0x763a[265]]== _0x3536x2[_0x763a[2207]][_0x763a[252]])){_0x3536x9= this[_0x763a[2425]],_0x3536x9= mxResources[_0x763a[203]](_0x3536x9)|| _0x3536x9};null== _0x3536x9&& null!= _0x3536x2[_0x763a[1211]]&& _0x3536x2[_0x763a[1211]][_0x763a[209]](function(_0x3536x2,_0x3536x4){if(null== _0x3536x9&& (_0x3536x3== _0x3536x4[_0x763a[252]]|| _0x3536x3[_0x763a[265]]== _0x3536x4[_0x763a[252]])){_0x3536x9= _0x3536x4[_0x763a[2201]].toString()}});null== _0x3536x9&& (_0x3536x4= this[_0x763a[2432]][_0x763a[2596]](_0x3536x2[_0x763a[246]]),null!= _0x3536x4&& _0x763a[279]== typeof _0x3536x4[_0x763a[2597]]&& (_0x3536x9= _0x3536x4[_0x763a[2597]](_0x3536x3)));null== _0x3536x9&& (_0x3536x9= this[_0x763a[2598]](_0x3536x2[_0x763a[246]]))};return _0x3536x9};mxGraph[_0x763a[202]][_0x763a[2598]]= function(_0x3536x2){var _0x3536x3=null;return _0x3536x3= null!= _0x3536x2&& null!= _0x3536x2[_0x763a[2595]]?_0x3536x2[_0x763a[2595]]():this[_0x763a[2454]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2599]]= function(_0x3536x2){return null};mxGraph[_0x763a[202]][_0x763a[1731]]= function(_0x3536x2){var _0x3536x3= new mxRectangle,_0x3536x4=this[_0x763a[441]][_0x763a[248]](_0x3536x2);_0x3536x2= null!= _0x3536x4?_0x3536x4[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);null!= _0x3536x2&& (_0x3536x4= parseInt(mxUtils[_0x763a[433]](_0x3536x2,mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE)),mxUtils[_0x763a[433]](_0x3536x2,mxConstants.STYLE_HORIZONTAL,!0)?_0x3536x3[_0x763a[119]]= _0x3536x4:_0x3536x3[_0x763a[117]]= _0x3536x4);return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[1202]]= function(_0x3536x2){return null!= _0x3536x2&& null!= _0x3536x2[_0x763a[124]]?_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2484]]]:null};mxGraph[_0x763a[202]][_0x763a[2187]]= function(_0x3536x2){return null!= _0x3536x2&& null!= _0x3536x2[_0x763a[124]]?_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2063]]]|| mxConstants[_0x763a[481]]:null};mxGraph[_0x763a[202]][_0x763a[2173]]= function(_0x3536x2){return null!= _0x3536x2&& null!= _0x3536x2[_0x763a[124]]?_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2600]]]:null};mxGraph[_0x763a[202]][_0x763a[2174]]= function(_0x3536x2){return null!= _0x3536x2&& null!= _0x3536x2[_0x763a[124]]?_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2601]]]:null};mxGraph[_0x763a[202]][_0x763a[2172]]= function(_0x3536x2){return null!= _0x3536x2&& null!= _0x3536x2[_0x763a[124]]?_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2602]]]:null};mxGraph[_0x763a[202]][_0x763a[2176]]= function(_0x3536x2){return null!= _0x3536x2&& null!= _0x3536x2[_0x763a[124]]?_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2603]]]:null};mxGraph[_0x763a[202]][_0x763a[2476]]= function(){return this[_0x763a[467]]};mxGraph[_0x763a[202]][_0x763a[2604]]= function(_0x3536x2){this[_0x763a[467]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[1730]]= function(_0x3536x2){if(null!= _0x3536x2&& this[_0x763a[251]][_0x763a[1197]](_0x3536x2)!= this[_0x763a[251]][_0x763a[501]]()){var _0x3536x3=this[_0x763a[441]][_0x763a[248]](_0x3536x2),_0x3536x3=null!= _0x3536x3?_0x3536x3[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);if(null!= _0x3536x3&& !this[_0x763a[251]][_0x763a[250]](_0x3536x2)){return _0x3536x3[mxConstants[_0x763a[2059]]]== mxConstants[_0x763a[2605]]}};return !1};mxGraph[_0x763a[202]][_0x763a[2606]]= function(){return this[_0x763a[2389]]};mxGraph[_0x763a[202]][_0x763a[2607]]= function(_0x3536x2){this[_0x763a[2389]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxGraph[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2608]]= function(){return this[_0x763a[2362]]};mxGraph[_0x763a[202]][_0x763a[2609]]= function(_0x3536x2){this[_0x763a[2362]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2134]]= function(){return this[_0x763a[2363]]};mxGraph[_0x763a[202]][_0x763a[2610]]= function(_0x3536x2){this[_0x763a[2363]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2125]]= function(){return this[_0x763a[2364]]};mxGraph[_0x763a[202]][_0x763a[2611]]= function(_0x3536x2){this[_0x763a[2364]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2612]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[251]][_0x763a[1721]](_0x3536x2);return this[_0x763a[2613]]()|| null!= _0x3536x3&& this[_0x763a[251]][_0x763a[1193]](_0x3536x2)&& _0x3536x3[_0x763a[1500]]};mxGraph[_0x763a[202]][_0x763a[2613]]= function(){return this[_0x763a[2368]]};mxGraph[_0x763a[202]][_0x763a[2614]]= function(_0x3536x2){this[_0x763a[2368]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2615]]= function(_0x3536x2){return this[_0x763a[251]][_0x763a[1938]](_0x3536x2,mxUtils[_0x763a[885]](this,function(_0x3536x2){return this[_0x763a[2616]](_0x3536x2)}))};mxGraph[_0x763a[202]][_0x763a[2616]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[441]][_0x763a[248]](_0x3536x2);_0x3536x2= null!= _0x3536x3?_0x3536x3[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);return this[_0x763a[2617]]()&& 0!= _0x3536x2[mxConstants[_0x763a[2618]]]};mxGraph[_0x763a[202]][_0x763a[2617]]= function(){return this[_0x763a[2369]]};mxGraph[_0x763a[202]][_0x763a[2619]]= function(_0x3536x2){this[_0x763a[2369]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[898]]= function(_0x3536x2){return this[_0x763a[251]][_0x763a[1938]](_0x3536x2,mxUtils[_0x763a[885]](this,function(_0x3536x2){return this[_0x763a[2620]](_0x3536x2)}))};mxGraph[_0x763a[202]][_0x763a[2620]]= function(_0x3536x2){return this[_0x763a[2366]]};mxGraph[_0x763a[202]][_0x763a[900]]= function(_0x3536x2){return this[_0x763a[251]][_0x763a[1938]](_0x3536x2,mxUtils[_0x763a[885]](this,function(_0x3536x2){return this[_0x763a[2621]](_0x3536x2)}))};mxGraph[_0x763a[202]][_0x763a[2621]]= function(_0x3536x2){return this[_0x763a[2367]]};mxGraph[_0x763a[202]][_0x763a[2102]]= function(_0x3536x2){return this[_0x763a[2622]]()};mxGraph[_0x763a[202]][_0x763a[2622]]= function(){return this[_0x763a[2379]]};mxGraph[_0x763a[202]][_0x763a[2623]]= function(_0x3536x2){this[_0x763a[2379]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2510]]= function(_0x3536x2){return this[_0x763a[251]][_0x763a[1938]](_0x3536x2,mxUtils[_0x763a[885]](this,function(_0x3536x2){return this[_0x763a[2624]](_0x3536x2)}))};mxGraph[_0x763a[202]][_0x763a[2624]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[441]][_0x763a[248]](_0x3536x2);_0x3536x2= null!= _0x3536x3?_0x3536x3[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);return this[_0x763a[2625]]()&& 0!= _0x3536x2[mxConstants[_0x763a[2626]]]};mxGraph[_0x763a[202]][_0x763a[2625]]= function(){return this[_0x763a[2371]]};mxGraph[_0x763a[202]][_0x763a[2627]]= function(_0x3536x2){this[_0x763a[2371]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2628]]= function(_0x3536x2){return !this[_0x763a[2612]](_0x3536x2)&& (this[_0x763a[251]][_0x763a[250]](_0x3536x2)&& this[_0x763a[2373]]|| this[_0x763a[251]][_0x763a[1193]](_0x3536x2)&& this[_0x763a[2374]])};mxGraph[_0x763a[202]][_0x763a[2629]]= function(_0x3536x2){return this[_0x763a[251]][_0x763a[1938]](_0x3536x2,mxUtils[_0x763a[885]](this,function(_0x3536x2){return this[_0x763a[1712]](_0x3536x2)}))};mxGraph[_0x763a[202]][_0x763a[1712]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[441]][_0x763a[248]](_0x3536x2),_0x3536x3=null!= _0x3536x3?_0x3536x3[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);return this[_0x763a[2630]]()&& !this[_0x763a[2612]](_0x3536x2)&& 0!= _0x3536x3[mxConstants[_0x763a[2631]]]};mxGraph[_0x763a[202]][_0x763a[2630]]= function(){return this[_0x763a[2372]]};mxGraph[_0x763a[202]][_0x763a[2632]]= function(_0x3536x2){this[_0x763a[2372]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[997]]= function(){return this[_0x763a[991]]};mxGraph[_0x763a[202]][_0x763a[998]]= function(_0x3536x2){this[_0x763a[991]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2549]]= function(){return this[_0x763a[2348]]};mxGraph[_0x763a[202]][_0x763a[2633]]= function(_0x3536x2){this[_0x763a[2348]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2634]]= function(){return this[_0x763a[1020]]};mxGraph[_0x763a[202]][_0x763a[2635]]= function(_0x3536x2){this[_0x763a[1020]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2636]]= function(){return this[_0x763a[2353]]};mxGraph[_0x763a[202]][_0x763a[2637]]= function(_0x3536x2){this[_0x763a[2353]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2638]]= function(){return this[_0x763a[2374]]};mxGraph[_0x763a[202]][_0x763a[2639]]= function(_0x3536x2){this[_0x763a[2374]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2640]]= function(){return this[_0x763a[2373]]};mxGraph[_0x763a[202]][_0x763a[2641]]= function(_0x3536x2){this[_0x763a[2373]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2642]]= function(){return this[_0x763a[2412]]};mxGraph[_0x763a[202]][_0x763a[2643]]= function(_0x3536x2){this[_0x763a[2412]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2460]]= function(){return this[_0x763a[2411]]};mxGraph[_0x763a[202]][_0x763a[2644]]= function(_0x3536x2){this[_0x763a[2411]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2645]]= function(){return this[_0x763a[2404]]};mxGraph[_0x763a[202]][_0x763a[2646]]= function(_0x3536x2){this[_0x763a[2404]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2647]]= function(){return this[_0x763a[2402]]};mxGraph[_0x763a[202]][_0x763a[2648]]= function(_0x3536x2){this[_0x763a[2406]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2530]]= function(){return this[_0x763a[2406]]};mxGraph[_0x763a[202]][_0x763a[2649]]= function(_0x3536x2){this[_0x763a[2405]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2650]]= function(){return this[_0x763a[2405]]};mxGraph[_0x763a[202]][_0x763a[2651]]= function(_0x3536x2){this[_0x763a[2407]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2527]]= function(){return this[_0x763a[2407]]};mxGraph[_0x763a[202]][_0x763a[2652]]= function(_0x3536x2){this[_0x763a[2402]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2529]]= function(){return this[_0x763a[2408]]};mxGraph[_0x763a[202]][_0x763a[2653]]= function(_0x3536x2){this[_0x763a[2408]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[1015]]= function(){return this[_0x763a[2375]]};mxGraph[_0x763a[202]][_0x763a[2654]]= function(_0x3536x2){this[_0x763a[2375]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2655]]= function(){return this[_0x763a[2376]]};mxGraph[_0x763a[202]][_0x763a[2656]]= function(_0x3536x2){this[_0x763a[2376]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2657]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[441]][_0x763a[248]](_0x3536x2),_0x3536x3=null!= _0x3536x3?_0x3536x3[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);return this[_0x763a[2658]]()&& !this[_0x763a[2612]](_0x3536x2)&& 0!= _0x3536x3[mxConstants[_0x763a[2659]]]};mxGraph[_0x763a[202]][_0x763a[2658]]= function(){return this[_0x763a[2377]]};mxGraph[_0x763a[202]][_0x763a[2660]]= function(_0x3536x2){this[_0x763a[2377]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2661]]= function(_0x3536x2,_0x3536x3){return !0};mxGraph[_0x763a[202]][_0x763a[2662]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[441]][_0x763a[248]](_0x3536x2),_0x3536x3=null!= _0x3536x3?_0x3536x3[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);return this[_0x763a[2663]]()&& !this[_0x763a[2612]](_0x3536x2)&& 0!= _0x3536x3[mxConstants[_0x763a[2664]]]};mxGraph[_0x763a[202]][_0x763a[2663]]= function(){return this[_0x763a[2378]]};mxGraph[_0x763a[202]][_0x763a[2665]]= function(_0x3536x2){this[_0x763a[2378]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2453]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[441]][_0x763a[248]](_0x3536x2),_0x3536x3=null!= _0x3536x3?_0x3536x3[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);return this[_0x763a[2666]]()&& !this[_0x763a[2612]](_0x3536x2)&& 0!= _0x3536x3[mxConstants[_0x763a[2667]]]};mxGraph[_0x763a[202]][_0x763a[2666]]= function(){return this[_0x763a[2370]]};mxGraph[_0x763a[202]][_0x763a[2668]]= function(_0x3536x2){this[_0x763a[2370]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2551]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return this[_0x763a[2669]]()&& !this[_0x763a[2612]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2669]]= function(){return this[_0x763a[2380]]};mxGraph[_0x763a[202]][_0x763a[2670]]= function(_0x3536x2){this[_0x763a[2380]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2671]]= function(_0x3536x2){return null== _0x3536x2&& this[_0x763a[2406]]|| null!= _0x3536x2&& (!this[_0x763a[251]][_0x763a[250]](_0x3536x2)|| this[_0x763a[2405]])&& this[_0x763a[2565]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2672]]= function(_0x3536x2){return this[_0x763a[2671]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2582]]= function(_0x3536x2,_0x3536x3){return this[_0x763a[2671]](_0x3536x2)&& this[_0x763a[2672]](_0x3536x3)};mxGraph[_0x763a[202]][_0x763a[1995]]= function(_0x3536x2){this[_0x763a[2433]][_0x763a[995]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[1965]]= function(_0x3536x2){return this[_0x763a[2433]][_0x763a[994]]()};mxGraph[_0x763a[202]][_0x763a[2673]]= function(_0x3536x2){this[_0x763a[2276]][_0x763a[995]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2674]]= function(_0x3536x2){this[_0x763a[2316]][_0x763a[2431]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2203]]= function(_0x3536x2){if(null!= this[_0x763a[2347]]){var _0x3536x3=this[_0x763a[2347]][_0x763a[2148]]();return null== _0x3536x2?null!= _0x3536x3:_0x3536x2== _0x3536x3};return !1};mxGraph[_0x763a[202]][_0x763a[2455]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[441]][_0x763a[248]](_0x3536x2);_0x3536x2= null!= _0x3536x3?_0x3536x3[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);return this[_0x763a[2675]]()|| 1== _0x3536x2[mxConstants[_0x763a[2676]]]};mxGraph[_0x763a[202]][_0x763a[2675]]= function(){return this[_0x763a[2381]]};mxGraph[_0x763a[202]][_0x763a[2677]]= function(_0x3536x2){this[_0x763a[2381]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2507]]= function(_0x3536x2){return !this[_0x763a[502]]()[_0x763a[250]](_0x3536x2)&& this[_0x763a[2678]]()};mxGraph[_0x763a[202]][_0x763a[2678]]= function(){return this[_0x763a[2392]]};mxGraph[_0x763a[202]][_0x763a[2679]]= function(_0x3536x2){this[_0x763a[2392]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2506]]= function(){return this[_0x763a[2393]]};mxGraph[_0x763a[202]][_0x763a[2680]]= function(_0x3536x2){this[_0x763a[2393]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2536]]= function(_0x3536x2){return this[_0x763a[2681]]()&& !this[_0x763a[502]]()[_0x763a[250]](this[_0x763a[502]]()[_0x763a[1197]](_0x3536x2))};mxGraph[_0x763a[202]][_0x763a[2681]]= function(){return this[_0x763a[2391]]};mxGraph[_0x763a[202]][_0x763a[2682]]= function(_0x3536x2){this[_0x763a[2391]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2505]]= function(){return this[_0x763a[2390]]};mxGraph[_0x763a[202]][_0x763a[2528]]= function(_0x3536x2){this[_0x763a[2390]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2537]]= function(_0x3536x2){return this[_0x763a[2683]](_0x3536x2)?this[_0x763a[2354]]:0};mxGraph[_0x763a[202]][_0x763a[2683]]= function(_0x3536x2){return !1};mxGraph[_0x763a[202]][_0x763a[2513]]= function(_0x3536x2,_0x3536x3){return this[_0x763a[251]][_0x763a[1938]](_0x3536x2,mxUtils[_0x763a[885]](this,function(_0x3536x2){return this[_0x763a[2516]](_0x3536x2,_0x3536x3)}))};mxGraph[_0x763a[202]][_0x763a[2516]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[441]][_0x763a[248]](_0x3536x2),_0x3536x4=null!= _0x3536x4?_0x3536x4[_0x763a[124]]:this[_0x763a[1705]](_0x3536x2);return 0< this[_0x763a[251]][_0x763a[262]](_0x3536x2)&& 0!= _0x3536x4[mxConstants[_0x763a[2684]]]};mxGraph[_0x763a[202]][_0x763a[2685]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return null!= _0x3536x2&& (this[_0x763a[2655]]()&& this[_0x763a[2686]](_0x3536x2,_0x3536x3,_0x3536x4)|| !this[_0x763a[251]][_0x763a[250]](_0x3536x2)&& (this[_0x763a[1730]](_0x3536x2)|| 0< this[_0x763a[251]][_0x763a[262]](_0x3536x2)&& !this[_0x763a[1742]](_0x3536x2)))};mxGraph[_0x763a[202]][_0x763a[2686]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return this[_0x763a[251]][_0x763a[250]](_0x3536x2)&& null!= _0x3536x3&& 1== _0x3536x3[_0x763a[67]]&& this[_0x763a[2565]](_0x3536x3[0])&& null== this[_0x763a[2500]](_0x3536x2,this[_0x763a[251]][_0x763a[1709]](_0x3536x2,!0),_0x3536x3[0])?(_0x3536x4= this[_0x763a[251]][_0x763a[1709]](_0x3536x2,!0),_0x3536x2= this[_0x763a[251]][_0x763a[1709]](_0x3536x2,!1),!this[_0x763a[251]][_0x763a[1720]](_0x3536x3[0],_0x3536x4)&& !this[_0x763a[251]][_0x763a[1720]](_0x3536x3[0],_0x3536x2)):!1};mxGraph[_0x763a[202]][_0x763a[564]]= function(_0x3536x2,_0x3536x3,_0x3536x4){if(!this[_0x763a[2642]]()){for(var _0x3536x5=0;_0x3536x5< _0x3536x2[_0x763a[67]];_0x3536x5++){if(this[_0x763a[1730]](_0x3536x2[_0x3536x5])){return null}}};_0x3536x5= mxUtils[_0x763a[2196]](this[_0x763a[526]],mxEvent[_0x763a[731]](_0x3536x3),mxEvent[_0x763a[733]](_0x3536x3));_0x3536x5[_0x763a[235]]-= this[_0x763a[1136]];_0x3536x5[_0x763a[236]]-= this[_0x763a[1137]];_0x3536x5= this[_0x763a[2461]](_0x3536x5[_0x763a[235]],_0x3536x5[_0x763a[236]]);if(null== _0x3536x4){_0x3536x4= _0x3536x5}else {if(null!= _0x3536x5){for(var _0x3536x9=this[_0x763a[251]][_0x763a[1197]](_0x3536x5);null!= _0x3536x9&& this[_0x763a[1730]](_0x3536x9)&& _0x3536x9!= _0x3536x4;){_0x3536x9= this[_0x763a[251]][_0x763a[1197]](_0x3536x9)};_0x3536x9== _0x3536x4&& (_0x3536x4= _0x3536x5)}};for(;null!= _0x3536x4&& !this[_0x763a[2685]](_0x3536x4,_0x3536x2,_0x3536x3)&& !this[_0x763a[251]][_0x763a[1740]](_0x3536x4);){_0x3536x4= this[_0x763a[251]][_0x763a[1197]](_0x3536x4)};return !this[_0x763a[251]][_0x763a[1740]](_0x3536x4)&& 0> mxUtils[_0x763a[2]](_0x3536x2,_0x3536x4)?_0x3536x4:null};mxGraph[_0x763a[202]][_0x763a[902]]= function(){var _0x3536x2=this[_0x763a[2355]];null== _0x3536x2&& (_0x3536x2= this[_0x763a[2534]](),null== _0x3536x2&& (_0x3536x2= this[_0x763a[251]][_0x763a[501]](),_0x3536x2= this[_0x763a[251]][_0x763a[263]](_0x3536x2,0)));return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2687]]= function(_0x3536x2){this[_0x763a[2355]]= _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2179]]= function(_0x3536x2){for(;null!= _0x3536x2&& !this[_0x763a[1730]](_0x3536x2);){_0x3536x2= this[_0x763a[251]][_0x763a[1197]](_0x3536x2)};return _0x3536x2};mxGraph[_0x763a[202]][_0x763a[2461]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= _0x3536x4|| this[_0x763a[902]]();if(null!= _0x3536x4){for(var _0x3536x5=this[_0x763a[251]][_0x763a[262]](_0x3536x4),_0x3536x9=0;_0x3536x9< _0x3536x5;_0x3536x9++){var _0x3536xa=this[_0x763a[251]][_0x763a[263]](_0x3536x4,_0x3536x9),_0x3536x12=this[_0x763a[2461]](_0x3536x2,_0x3536x3,_0x3536xa);if(null!= _0x3536x12){return _0x3536x12};if(this[_0x763a[1730]](_0x3536xa)&& (_0x3536x12= this[_0x763a[441]][_0x763a[248]](_0x3536xa),this[_0x763a[1825]](_0x3536x12,_0x3536x2,_0x3536x3))){return _0x3536xa}}};return null};mxGraph[_0x763a[202]][_0x763a[999]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x5= null!= _0x3536x5?_0x3536x5:!0;_0x3536x9= null!= _0x3536x9?_0x3536x9:!0;_0x3536x4= null!= _0x3536x4?_0x3536x4:this[_0x763a[902]]();if(null!= _0x3536x4){for(var _0x3536xa=this[_0x763a[251]][_0x763a[262]](_0x3536x4)- 1;0<= _0x3536xa;_0x3536xa--){var _0x3536x12=this[_0x763a[251]][_0x763a[263]](_0x3536x4,_0x3536xa),_0x3536x13=this[_0x763a[999]](_0x3536x2,_0x3536x3,_0x3536x12,_0x3536x5,_0x3536x9);if(null!= _0x3536x13){return _0x3536x13};if(this[_0x763a[1714]](_0x3536x12)&& (_0x3536x9&& this[_0x763a[251]][_0x763a[250]](_0x3536x12)|| _0x3536x5&& this[_0x763a[251]][_0x763a[1193]](_0x3536x12))){if(_0x3536x13= this[_0x763a[441]][_0x763a[248]](_0x3536x12),this[_0x763a[1825]](_0x3536x13,_0x3536x2,_0x3536x3)){return _0x3536x12}}}};return null};mxGraph[_0x763a[202]][_0x763a[1825]]= function(_0x3536x2,_0x3536x3,_0x3536x4){if(null!= _0x3536x2){var _0x3536x5=_0x3536x2[_0x763a[439]];if(null!= _0x3536x5){_0x3536x2= this[_0x763a[2353]]* this[_0x763a[2353]];for(var _0x3536x9=_0x3536x5[0],_0x3536xa=1;_0x3536xa< _0x3536x5[_0x763a[67]];_0x3536xa++){var _0x3536x12=_0x3536x5[_0x3536xa];if(mxUtils[_0x763a[440]](_0x3536x9[_0x763a[235]],_0x3536x9[_0x763a[236]],_0x3536x12[_0x763a[235]],_0x3536x12[_0x763a[236]],_0x3536x3,_0x3536x4)<= _0x3536x2){return !0};_0x3536x9= _0x3536x12}}else {if(_0x3536x9= mxUtils[_0x763a[431]](mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_ROTATION)|| 0),0!= _0x3536x9&& (_0x3536x5= Math[_0x763a[426]](-_0x3536x9),_0x3536x9= Math[_0x763a[427]](-_0x3536x9),_0x3536xa= new mxPoint(_0x3536x2[_0x763a[241]](),_0x3536x2[_0x763a[242]]()),_0x3536x9= mxUtils[_0x763a[432]]( new mxPoint(_0x3536x3,_0x3536x4),_0x3536x5,_0x3536x9,_0x3536xa),_0x3536x3= _0x3536x9[_0x763a[235]],_0x3536x4= _0x3536x9[_0x763a[236]]),mxUtils[_0x763a[442]](_0x3536x2,_0x3536x3,_0x3536x4)){return !0}}};return !1};mxGraph[_0x763a[202]][_0x763a[2688]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[249]]()[_0x763a[248]](_0x3536x2);_0x3536x2= this[_0x763a[1731]](_0x3536x2);if(null!= _0x3536x5){var _0x3536x9=this[_0x763a[249]]()[_0x763a[518]]();_0x3536x3-= _0x3536x5[_0x763a[235]];_0x3536x4-= _0x3536x5[_0x763a[236]];if(0< _0x3536x2[_0x763a[117]]&& 0< _0x3536x3&& _0x3536x3> _0x3536x2[_0x763a[117]]* _0x3536x9|| 0< _0x3536x2[_0x763a[119]]&& 0< _0x3536x4&& _0x3536x4> _0x3536x2[_0x763a[119]]* _0x3536x9){return !0}};return !1};mxGraph[_0x763a[202]][_0x763a[1728]]= function(_0x3536x2){return this[_0x763a[1955]](_0x3536x2,!0,!1)};mxGraph[_0x763a[202]][_0x763a[1956]]= function(_0x3536x2){return this[_0x763a[1955]](_0x3536x2,!1,!0)};mxGraph[_0x763a[202]][_0x763a[1955]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x2= null!= _0x3536x2?_0x3536x2:this[_0x763a[902]]();_0x3536x2= this[_0x763a[251]][_0x763a[1955]](_0x3536x2,null!= _0x3536x3?_0x3536x3:!1,null!= _0x3536x4?_0x3536x4:!1);_0x3536x3= [];for(_0x3536x4= 0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){this[_0x763a[1714]](_0x3536x2[_0x3536x4])&& _0x3536x3[_0x763a[207]](_0x3536x2[_0x3536x4])};return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[1756]]= function(_0x3536x2,_0x3536x3){return this[_0x763a[264]](_0x3536x2,_0x3536x3,!0,!0,!1)};mxGraph[_0x763a[202]][_0x763a[1867]]= function(_0x3536x2,_0x3536x3){return this[_0x763a[264]](_0x3536x2,_0x3536x3,!0,!1,!1)};mxGraph[_0x763a[202]][_0x763a[1963]]= function(_0x3536x2,_0x3536x3){return this[_0x763a[264]](_0x3536x2,_0x3536x3,!1,!0,!1)};mxGraph[_0x763a[202]][_0x763a[264]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536x4= null!= _0x3536x4?_0x3536x4:!0;_0x3536x5= null!= _0x3536x5?_0x3536x5:!0;_0x3536x9= null!= _0x3536x9?_0x3536x9:!0;_0x3536xa= null!= _0x3536xa?_0x3536xa:!1;for(var _0x3536x12=[],_0x3536x13=this[_0x763a[1742]](_0x3536x2),_0x3536x14=this[_0x763a[251]][_0x763a[262]](_0x3536x2),_0x3536x15=0;_0x3536x15< _0x3536x14;_0x3536x15++){var _0x3536x16=this[_0x763a[251]][_0x763a[263]](_0x3536x2,_0x3536x15);if(_0x3536x13|| !this[_0x763a[1714]](_0x3536x16)){_0x3536x12= _0x3536x12[_0x763a[1919]](this[_0x763a[251]][_0x763a[264]](_0x3536x16,_0x3536x4,_0x3536x5))}};_0x3536x12= _0x3536x12[_0x763a[1919]](this[_0x763a[251]][_0x763a[264]](_0x3536x2,_0x3536x4,_0x3536x5));_0x3536x13= [];for(_0x3536x15= 0;_0x3536x15< _0x3536x12[_0x763a[67]];_0x3536x15++){_0x3536x16= this[_0x763a[441]][_0x763a[248]](_0x3536x12[_0x3536x15]),_0x3536x14= null!= _0x3536x16?_0x3536x16[_0x763a[1710]](!0):this[_0x763a[441]][_0x763a[1710]](_0x3536x12[_0x3536x15],!0),_0x3536x16= null!= _0x3536x16?_0x3536x16[_0x763a[1710]](!1):this[_0x763a[441]][_0x763a[1710]](_0x3536x12[_0x3536x15],!1),(_0x3536x9&& _0x3536x14== _0x3536x16|| _0x3536x14!= _0x3536x16&& (_0x3536x4&& _0x3536x16== _0x3536x2&& (null== _0x3536x3|| this[_0x763a[1920]](_0x3536x14,_0x3536x3,_0x3536xa))|| _0x3536x5&& _0x3536x14== _0x3536x2&& (null== _0x3536x3|| this[_0x763a[1920]](_0x3536x16,_0x3536x3,_0x3536xa))))&& _0x3536x13[_0x763a[207]](_0x3536x12[_0x3536x15])};return _0x3536x13};mxGraph[_0x763a[202]][_0x763a[1920]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return _0x3536x4?this[_0x763a[251]][_0x763a[1720]](_0x3536x3,_0x3536x2):this[_0x763a[251]][_0x763a[1197]](_0x3536x2)== _0x3536x3};mxGraph[_0x763a[202]][_0x763a[1808]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x4= null!= _0x3536x4?_0x3536x4:!0;_0x3536x5= null!= _0x3536x5?_0x3536x5:!0;var _0x3536x9=[],_0x3536xa={};if(null!= _0x3536x2){for(var _0x3536x12=0;_0x3536x12< _0x3536x2[_0x763a[67]];_0x3536x12++){var _0x3536x13=this[_0x763a[441]][_0x763a[248]](_0x3536x2[_0x3536x12]),_0x3536x14=null!= _0x3536x13?_0x3536x13[_0x763a[1710]](!0):this[_0x763a[441]][_0x763a[1710]](_0x3536x2[_0x3536x12],!0),_0x3536x13=null!= _0x3536x13?_0x3536x13[_0x763a[1710]](!1):this[_0x763a[441]][_0x763a[1710]](_0x3536x2[_0x3536x12],!1);if(_0x3536x14== _0x3536x3&& null!= _0x3536x13&& _0x3536x13!= _0x3536x3&& _0x3536x5){var _0x3536x15=mxCellPath[_0x763a[385]](_0x3536x13);null== _0x3536xa[_0x3536x15]&& (_0x3536xa[_0x3536x15]= _0x3536x13,_0x3536x9[_0x763a[207]](_0x3536x13))}else {_0x3536x13== _0x3536x3&& (null!= _0x3536x14&& _0x3536x14!= _0x3536x3&& _0x3536x4)&& (_0x3536x15= mxCellPath[_0x763a[385]](_0x3536x14),null== _0x3536xa[_0x3536x15]&& (_0x3536xa[_0x3536x15]= _0x3536x14,_0x3536x9[_0x763a[207]](_0x3536x14)))}}};return _0x3536x9};mxGraph[_0x763a[202]][_0x763a[1781]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= null!= _0x3536x4?_0x3536x4:!1;for(var _0x3536x5=this[_0x763a[264]](_0x3536x2),_0x3536x9=[],_0x3536xa=0;_0x3536xa< _0x3536x5[_0x763a[67]];_0x3536xa++){var _0x3536x12=this[_0x763a[441]][_0x763a[248]](_0x3536x5[_0x3536xa]),_0x3536x13=null!= _0x3536x12?_0x3536x12[_0x763a[1710]](!0):this[_0x763a[441]][_0x763a[1710]](_0x3536x5[_0x3536xa],!0),_0x3536x12=null!= _0x3536x12?_0x3536x12[_0x763a[1710]](!1):this[_0x763a[441]][_0x763a[1710]](_0x3536x5[_0x3536xa],!1);(_0x3536x13== _0x3536x2&& _0x3536x12== _0x3536x3|| !_0x3536x4&& _0x3536x13== _0x3536x3&& _0x3536x12== _0x3536x2)&& _0x3536x9[_0x763a[207]](_0x3536x5[_0x3536xa])};return _0x3536x9};mxGraph[_0x763a[202]][_0x763a[2689]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=mxUtils[_0x763a[2196]](this[_0x763a[526]],mxEvent[_0x763a[731]](_0x3536x2),mxEvent[_0x763a[733]](_0x3536x2)),_0x3536x5=this[_0x763a[441]][_0x763a[255]],_0x3536x9=this[_0x763a[441]][_0x763a[513]],_0x3536xa=!1!= _0x3536x3?this[_0x763a[1020]]/ 2:0;_0x3536x4[_0x763a[235]]= this[_0x763a[1021]](_0x3536x4[_0x763a[235]]/ _0x3536x5- _0x3536x9[_0x763a[235]]- _0x3536xa);_0x3536x4[_0x763a[236]]= this[_0x763a[1021]](_0x3536x4[_0x763a[236]]/ _0x3536x5- _0x3536x9[_0x763a[236]]- _0x3536xa);return _0x3536x4};mxGraph[_0x763a[202]][_0x763a[2690]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536xa= null!= _0x3536xa?_0x3536xa:[];if(0< _0x3536x4|| 0< _0x3536x5){var _0x3536x12=_0x3536x2+ _0x3536x4,_0x3536x13=_0x3536x3+ _0x3536x5;_0x3536x9= _0x3536x9|| this[_0x763a[902]]();if(null!= _0x3536x9){for(var _0x3536x14=this[_0x763a[251]][_0x763a[262]](_0x3536x9),_0x3536x15=0;_0x3536x15< _0x3536x14;_0x3536x15++){var _0x3536x16=this[_0x763a[251]][_0x763a[263]](_0x3536x9,_0x3536x15),_0x3536x17=this[_0x763a[441]][_0x763a[248]](_0x3536x16);if(this[_0x763a[1714]](_0x3536x16)&& null!= _0x3536x17){var _0x3536x18=_0x3536x17,_0x3536x17=mxUtils[_0x763a[433]](_0x3536x17[_0x763a[124]],mxConstants.STYLE_ROTATION)|| 0;0!= _0x3536x17&& (_0x3536x18= mxUtils[_0x763a[1613]](_0x3536x18,_0x3536x17));_0x3536x18[_0x763a[235]]>= _0x3536x2&& _0x3536x18[_0x763a[236]]+ _0x3536x18[_0x763a[119]]<= _0x3536x13&& _0x3536x18[_0x763a[236]]>= _0x3536x3&& _0x3536x18[_0x763a[235]]+ _0x3536x18[_0x763a[117]]<= _0x3536x12?_0x3536xa[_0x763a[207]](_0x3536x16):this[_0x763a[2690]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x16,_0x3536xa)}}}};return _0x3536xa};mxGraph[_0x763a[202]][_0x763a[2691]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=[];if(_0x3536x5|| _0x3536x9){if(null== _0x3536x4&& (_0x3536x4= this[_0x763a[902]]()),null!= _0x3536x4){for(var _0x3536x12=this[_0x763a[251]][_0x763a[262]](_0x3536x4),_0x3536x13=0;_0x3536x13< _0x3536x12;_0x3536x13++){var _0x3536x14=this[_0x763a[251]][_0x763a[263]](_0x3536x4,_0x3536x13),_0x3536x15=this[_0x763a[441]][_0x763a[248]](_0x3536x14);this[_0x763a[1714]](_0x3536x14)&& null!= _0x3536x15&& (!_0x3536x5|| _0x3536x15[_0x763a[235]]>= _0x3536x2) && (!_0x3536x9|| _0x3536x15[_0x763a[236]]>= _0x3536x3) && _0x3536xa[_0x763a[207]](_0x3536x14)}}};return _0x3536xa};mxGraph[_0x763a[202]][_0x763a[1757]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x3= null!= _0x3536x3?_0x3536x3:!1;_0x3536x4= null!= _0x3536x4?_0x3536x4:!1;var _0x3536x5=[];if(null!= _0x3536x2){for(var _0x3536x9=this[_0x763a[502]](),_0x3536xa=_0x3536x9[_0x763a[262]](_0x3536x2),_0x3536x12=null,_0x3536x13=0,_0x3536x14=0;_0x3536x14< _0x3536xa;_0x3536x14++){var _0x3536x15=_0x3536x9[_0x763a[263]](_0x3536x2,_0x3536x14);if(this[_0x763a[251]][_0x763a[1193]](_0x3536x15)&& this[_0x763a[1714]](_0x3536x15)){for(var _0x3536x16=this[_0x763a[1756]](_0x3536x15,_0x3536x3?_0x3536x2:null),_0x3536x17=0,_0x3536x18=0,_0x3536x19=0;_0x3536x19< _0x3536x16[_0x763a[67]];_0x3536x19++){this[_0x763a[441]][_0x763a[1710]](_0x3536x16[_0x3536x19],!0)== _0x3536x15?_0x3536x17++:_0x3536x18++};(_0x3536x4&& 0== _0x3536x17&& 0< _0x3536x18|| !_0x3536x4&& 0== _0x3536x18&& 0< _0x3536x17)&& _0x3536x5[_0x763a[207]](_0x3536x15);_0x3536x16= _0x3536x4?_0x3536x18- _0x3536x17:_0x3536x17- _0x3536x18;_0x3536x16> _0x3536x13&& (_0x3536x13= _0x3536x16,_0x3536x12= _0x3536x15)}};0== _0x3536x5[_0x763a[67]]&& null!= _0x3536x12&& _0x3536x5[_0x763a[207]](_0x3536x12)};return _0x3536x5};mxGraph[_0x763a[202]][_0x763a[1706]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){if(null!= _0x3536x4&& null!= _0x3536x2){_0x3536x3= null!= _0x3536x3?_0x3536x3:!0;_0x3536x9= _0x3536x9|| [];var _0x3536xa=mxCellPath[_0x763a[385]](_0x3536x2);if(null== _0x3536x9[_0x3536xa]&& (_0x3536x9[_0x3536xa]= _0x3536x2,_0x3536x5= _0x3536x4(_0x3536x2,_0x3536x5),null== _0x3536x5|| _0x3536x5)){if(_0x3536x5= this[_0x763a[251]][_0x763a[1707]](_0x3536x2),0< _0x3536x5){for(_0x3536xa= 0;_0x3536xa< _0x3536x5;_0x3536xa++){var _0x3536x12=this[_0x763a[251]][_0x763a[1708]](_0x3536x2,_0x3536xa),_0x3536x13=this[_0x763a[251]][_0x763a[1709]](_0x3536x12,!0)== _0x3536x2;if(!_0x3536x3|| _0x3536x13){_0x3536x13= this[_0x763a[251]][_0x763a[1709]](_0x3536x12,!_0x3536x13),this[_0x763a[1706]](_0x3536x13,_0x3536x3,_0x3536x4,_0x3536x12,_0x3536x9)}}}}}};mxGraph[_0x763a[202]][_0x763a[2692]]= function(_0x3536x2){return this[_0x763a[2435]]()[_0x763a[2097]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2693]]= function(){return this[_0x763a[2435]]()[_0x763a[1107]]()};mxGraph[_0x763a[202]][_0x763a[2440]]= function(){return this[_0x763a[2435]]()[_0x763a[200]]()};mxGraph[_0x763a[202]][_0x763a[2694]]= function(){return this[_0x763a[2435]]()[_0x763a[895]][_0x763a[67]]};mxGraph[_0x763a[202]][_0x763a[2452]]= function(){return this[_0x763a[2435]]()[_0x763a[895]][0]};mxGraph[_0x763a[202]][_0x763a[897]]= function(){return this[_0x763a[2435]]()[_0x763a[895]][_0x763a[1853]]()};mxGraph[_0x763a[202]][_0x763a[2450]]= function(_0x3536x2){this[_0x763a[2435]]()[_0x763a[2099]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[904]]= function(_0x3536x2){this[_0x763a[2435]]()[_0x763a[2100]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2695]]= function(_0x3536x2){this[_0x763a[2435]]()[_0x763a[2103]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2696]]= function(_0x3536x2){this[_0x763a[2435]]()[_0x763a[832]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2697]]= function(_0x3536x2){this[_0x763a[2435]]()[_0x763a[2104]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2439]]= function(_0x3536x2){this[_0x763a[2435]]()[_0x763a[842]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2698]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[2690]](_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]],_0x3536x2[_0x763a[117]],_0x3536x2[_0x763a[119]]);this[_0x763a[2699]](_0x3536x4,_0x3536x3);return _0x3536x4};mxGraph[_0x763a[202]][_0x763a[2700]]= function(){this[_0x763a[2701]](!0)};mxGraph[_0x763a[202]][_0x763a[2702]]= function(){this[_0x763a[2701]]()};mxGraph[_0x763a[202]][_0x763a[2703]]= function(){this[_0x763a[2701]](!1,!0)};mxGraph[_0x763a[202]][_0x763a[2704]]= function(){this[_0x763a[2701]](!1,!1,!0)};mxGraph[_0x763a[202]][_0x763a[2701]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[2105]],_0x3536x9=0< _0x3536x5[_0x763a[895]][_0x763a[67]]?_0x3536x5[_0x763a[895]][0]:null;1< _0x3536x5[_0x763a[895]][_0x763a[67]]&& _0x3536x5[_0x763a[200]]();var _0x3536x5=null!= _0x3536x9?this[_0x763a[251]][_0x763a[1197]](_0x3536x9):this[_0x763a[902]](),_0x3536xa=this[_0x763a[251]][_0x763a[262]](_0x3536x5);null== _0x3536x9&& 0< _0x3536xa?(_0x3536x2= this[_0x763a[251]][_0x763a[263]](_0x3536x5,0),this[_0x763a[2450]](_0x3536x2)):(null== _0x3536x9|| _0x3536x3)&& null!= this[_0x763a[441]][_0x763a[248]](_0x3536x5)&& null!= this[_0x763a[251]][_0x763a[1721]](_0x3536x5)?this[_0x763a[2534]]()!= _0x3536x5&& this[_0x763a[2450]](_0x3536x5):null!= _0x3536x9&& _0x3536x4?0< this[_0x763a[251]][_0x763a[262]](_0x3536x9)&& (_0x3536x2= this[_0x763a[251]][_0x763a[263]](_0x3536x9,0),this[_0x763a[2450]](_0x3536x2)):0< _0x3536xa&& (_0x3536x3= _0x3536x5[_0x763a[1738]](_0x3536x9),_0x3536x2?(_0x3536x3++,_0x3536x2= this[_0x763a[251]][_0x763a[263]](_0x3536x5,_0x3536x3% _0x3536xa)):(_0x3536x3--,_0x3536x2= this[_0x763a[251]][_0x763a[263]](_0x3536x5,0> _0x3536x3?_0x3536xa- 1:_0x3536x3)),this[_0x763a[2450]](_0x3536x2))};mxGraph[_0x763a[202]][_0x763a[2705]]= function(_0x3536x2){_0x3536x2= _0x3536x2|| this[_0x763a[902]]();_0x3536x2= this[_0x763a[251]][_0x763a[1953]](_0x3536x2);null!= _0x3536x2&& this[_0x763a[904]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2706]]= function(_0x3536x2){this[_0x763a[2707]](!0,!1,_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2708]]= function(_0x3536x2){this[_0x763a[2707]](!1,!0,_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2707]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= _0x3536x4|| this[_0x763a[902]]();var _0x3536x5=mxUtils[_0x763a[885]](this,function(_0x3536x4){return null!= this[_0x763a[441]][_0x763a[248]](_0x3536x4)&& 0== this[_0x763a[251]][_0x763a[262]](_0x3536x4)&& (this[_0x763a[251]][_0x763a[1193]](_0x3536x4)&& _0x3536x2|| this[_0x763a[251]][_0x763a[250]](_0x3536x4)&& _0x3536x3)});_0x3536x4= this[_0x763a[251]][_0x763a[1921]](_0x3536x5,_0x3536x4);this[_0x763a[904]](_0x3536x4)};mxGraph[_0x763a[202]][_0x763a[2459]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[2692]](_0x3536x2);this[_0x763a[2462]](_0x3536x3)?_0x3536x4?this[_0x763a[2697]](_0x3536x2):this[_0x763a[2695]](_0x3536x2):(!_0x3536x4|| 1!= this[_0x763a[2694]]()) && this[_0x763a[2450]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2699]]= function(_0x3536x2,_0x3536x3){this[_0x763a[2462]](_0x3536x3)?this[_0x763a[2696]](_0x3536x2):this[_0x763a[904]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[2709]]= function(_0x3536x2){var _0x3536x3=null;null!= _0x3536x2&& (this[_0x763a[251]][_0x763a[250]](_0x3536x2[_0x763a[246]])?(_0x3536x3= this[_0x763a[441]][_0x763a[2291]](_0x3536x2),_0x3536x3= this[_0x763a[2573]](_0x3536x2)|| _0x3536x3== mxEdgeStyle[_0x763a[2568]]|| _0x3536x3== mxEdgeStyle[_0x763a[2569]]|| _0x3536x3== mxEdgeStyle[_0x763a[2570]]? new mxElbowEdgeHandler(_0x3536x2):_0x3536x3== mxEdgeStyle[_0x763a[2567]]|| _0x3536x3== mxEdgeStyle[_0x763a[2572]]? new mxEdgeSegmentHandler(_0x3536x2): new mxEdgeHandler(_0x3536x2)):_0x3536x3= new mxVertexHandler(_0x3536x2));return _0x3536x3};mxGraph[_0x763a[202]][_0x763a[1133]]= function(_0x3536x2){null== this[_0x763a[2329]]&& (this[_0x763a[2329]]= []);this[_0x763a[2329]][_0x763a[207]](_0x3536x2)};mxGraph[_0x763a[202]][_0x763a[1148]]= function(_0x3536x2){if(null!= this[_0x763a[2329]]){for(var _0x3536x3=0;_0x3536x3< this[_0x763a[2329]][_0x763a[67]];_0x3536x3++){if(this[_0x763a[2329]][_0x3536x3]== _0x3536x2){this[_0x763a[2329]][_0x763a[300]](_0x3536x3,1);break}}}};mxGraph[_0x763a[202]][_0x763a[2710]]= function(_0x3536x2){if(null== _0x3536x2[_0x763a[725]]|| null== _0x3536x2[_0x763a[726]]){var _0x3536x3=mxUtils[_0x763a[2196]](this[_0x763a[526]],_0x3536x2[_0x763a[730]](),_0x3536x2[_0x763a[732]]());_0x3536x2[_0x763a[725]]= _0x3536x3[_0x763a[235]]- this[_0x763a[1136]];_0x3536x2[_0x763a[726]]= _0x3536x3[_0x763a[236]]- this[_0x763a[1137]]}};mxGraph[_0x763a[202]][_0x763a[758]]= function(_0x3536x2,_0x3536x3,_0x3536x4){null== _0x3536x4&& (_0x3536x4= this);this[_0x763a[2710]](_0x3536x3);_0x3536x2== mxEvent[_0x763a[2711]]&& (this[_0x763a[1009]]= !0);if(mxClient[_0x763a[754]]&& this[_0x763a[2349]]&& _0x3536x2== mxEvent[_0x763a[2711]]){var _0x3536x5=( new Date)[_0x763a[178]]();_0x3536x5- this[_0x763a[2213]]< this[_0x763a[2350]]&& Math[_0x763a[425]](this[_0x763a[2712]]- _0x3536x3[_0x763a[730]]())< this[_0x763a[2351]]&& Math[_0x763a[425]](this[_0x763a[2352]]- _0x3536x3[_0x763a[732]]())< this[_0x763a[2351]]?(this[_0x763a[2213]]= 0,this[_0x763a[761]](_0x3536x3[_0x763a[727]](),_0x3536x3[_0x763a[736]]()),_0x3536x3[_0x763a[727]]()[_0x763a[786]]= !0):(this[_0x763a[2712]]= _0x3536x3[_0x763a[730]](),this[_0x763a[2352]]= _0x3536x3[_0x763a[732]](),this[_0x763a[2213]]= _0x3536x5)};_0x3536x5= 2!= _0x3536x3[_0x763a[727]]()[_0x763a[764]];if(mxClient[_0x763a[80]]&& _0x763a[462]== document[_0x763a[135]]){if(null!= this[_0x763a[2713]]&& Math[_0x763a[425]](this[_0x763a[2713]]- _0x3536x3[_0x763a[730]]())> this[_0x763a[2351]]|| null!= this[_0x763a[2714]]&& Math[_0x763a[425]](this[_0x763a[2714]]- _0x3536x3[_0x763a[732]]())> this[_0x763a[2351]]){_0x3536x5= !0};_0x3536x2== mxEvent[_0x763a[2715]]&& (this[_0x763a[2713]]= _0x3536x3[_0x763a[730]](),this[_0x763a[2714]]= _0x3536x3[_0x763a[732]]())};if((_0x3536x2!= mxEvent[_0x763a[2715]]|| this[_0x763a[1009]])&& _0x3536x5){if(_0x3536x2== mxEvent[_0x763a[2715]]&& (this[_0x763a[1009]]= !1),!this[_0x763a[2203]]()&& (mxClient[_0x763a[71]]|| mxClient[_0x763a[75]]|| mxClient[_0x763a[76]]|| mxClient[_0x763a[80]]&& mxClient[_0x763a[48]]|| _0x3536x3[_0x763a[727]]()[_0x763a[772]]!= this[_0x763a[526]])){_0x3536x2== mxEvent[_0x763a[2716]]&& (this[_0x763a[1009]]&& this[_0x763a[1012]])&& this[_0x763a[1014]](_0x3536x3[_0x763a[734]](),_0x3536x3[_0x763a[735]](),this[_0x763a[1013]]);if(null!= this[_0x763a[2329]]){_0x3536x4= [_0x3536x4,_0x3536x3];_0x3536x3[_0x763a[727]]()[_0x763a[739]]= !0;for(_0x3536x5= 0;_0x3536x5< this[_0x763a[2329]][_0x763a[67]];_0x3536x5++){var _0x3536x9=this[_0x763a[2329]][_0x3536x5];_0x3536x2== mxEvent[_0x763a[2711]]?_0x3536x9[_0x763a[787]][_0x763a[183]](_0x3536x9,_0x3536x4):_0x3536x2== mxEvent[_0x763a[2716]]?_0x3536x9[_0x763a[788]][_0x763a[183]](_0x3536x9,_0x3536x4):_0x3536x2== mxEvent[_0x763a[2715]]&& _0x3536x9[_0x763a[789]][_0x763a[183]](_0x3536x9,_0x3536x4)}};_0x3536x2== mxEvent[_0x763a[2715]]&& this[_0x763a[173]](_0x3536x3)}}else {_0x3536x2== mxEvent[_0x763a[2715]]&& (this[_0x763a[1009]]= !1)}};mxGraph[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[2717]]|| (this[_0x763a[2717]]= !0,null!= this[_0x763a[2276]]&& this[_0x763a[2276]][_0x763a[515]](),null!= this[_0x763a[2432]]&& this[_0x763a[2432]][_0x763a[515]](),null!= this[_0x763a[2316]]&& this[_0x763a[2316]][_0x763a[515]](),null!= this[_0x763a[2433]]&& this[_0x763a[2433]][_0x763a[515]](),null!= this[_0x763a[1011]]&& this[_0x763a[1011]][_0x763a[515]](),null!= this[_0x763a[2347]]&& this[_0x763a[2347]][_0x763a[515]](),null!= this[_0x763a[441]]&& this[_0x763a[441]][_0x763a[515]](),null!= this[_0x763a[251]]&& null!= this[_0x763a[2343]]&& (this[_0x763a[251]][_0x763a[745]](this[_0x763a[2343]]),this[_0x763a[2343]]= null),this[_0x763a[526]]= null)};function mxCellOverlay(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){this[_0x763a[618]]= _0x3536x2;this[_0x763a[2718]]= _0x3536x3;this[_0x763a[611]]= null!= _0x3536x4?_0x3536x4:this[_0x763a[611]];this[_0x763a[123]]= null!= _0x3536x5?_0x3536x5:this[_0x763a[123]];this[_0x763a[1368]]= null!= _0x3536x9?_0x3536x9: new mxPoint;this[_0x763a[270]]= null!= _0x3536xa?_0x3536xa:_0x763a[2719]}mxCellOverlay[_0x763a[202]]= new mxEventSource;mxCellOverlay[_0x763a[202]][_0x763a[196]]= mxCellOverlay;mxCellOverlay[_0x763a[202]][_0x763a[618]]= null;mxCellOverlay[_0x763a[202]][_0x763a[2718]]= null;mxCellOverlay[_0x763a[202]][_0x763a[611]]= mxConstants[_0x763a[480]];mxCellOverlay[_0x763a[202]][_0x763a[123]]= mxConstants[_0x763a[482]];mxCellOverlay[_0x763a[202]][_0x763a[1368]]= null;mxCellOverlay[_0x763a[202]][_0x763a[270]]= null;mxCellOverlay[_0x763a[202]][_0x763a[2354]]= 0.5;mxCellOverlay[_0x763a[202]][_0x763a[1799]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[441]][_0x763a[1179]][_0x763a[502]]()[_0x763a[250]](_0x3536x2[_0x763a[246]]),_0x3536x4=_0x3536x2[_0x763a[441]][_0x763a[255]],_0x3536x5=null,_0x3536x9=this[_0x763a[618]][_0x763a[117]],_0x3536xa=this[_0x763a[618]][_0x763a[119]];_0x3536x3?(_0x3536x3= _0x3536x2[_0x763a[439]],1== _0x3536x3[_0x763a[67]]% 2?_0x3536x5= _0x3536x3[Math[_0x763a[519]](_0x3536x3[_0x763a[67]]/ 2)]:(_0x3536x5= _0x3536x3[_0x763a[67]]/ 2,_0x3536x2= _0x3536x3[_0x3536x5- 1],_0x3536x3= _0x3536x3[_0x3536x5],_0x3536x5= new mxPoint(_0x3536x2[_0x763a[235]]+ (_0x3536x3[_0x763a[235]]- _0x3536x2[_0x763a[235]])/ 2,_0x3536x2[_0x763a[236]]+ (_0x3536x3[_0x763a[236]]- _0x3536x2[_0x763a[236]])/ 2))):(_0x3536x5= new mxPoint,_0x3536x5[_0x763a[235]]= this[_0x763a[611]]== mxConstants[_0x763a[2132]]?_0x3536x2[_0x763a[235]]:this[_0x763a[611]]== mxConstants[_0x763a[479]]?_0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]/ 2:_0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]],_0x3536x5[_0x763a[236]]= this[_0x763a[123]]== mxConstants[_0x763a[1687]]?_0x3536x2[_0x763a[236]]:this[_0x763a[123]]== mxConstants[_0x763a[481]]?_0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]/ 2:_0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]);return new mxRectangle(Math[_0x763a[488]](_0x3536x5[_0x763a[235]]- (_0x3536x9* this[_0x763a[2354]]- this[_0x763a[1368]][_0x763a[235]])* _0x3536x4),Math[_0x763a[488]](_0x3536x5[_0x763a[236]]- (_0x3536xa* this[_0x763a[2354]]- this[_0x763a[1368]][_0x763a[236]])* _0x3536x4),_0x3536x9* _0x3536x4,_0x3536xa* _0x3536x4)};mxCellOverlay[_0x763a[202]][_0x763a[2591]]= function(){return this[_0x763a[2718]]};function mxOutline(_0x3536x2,_0x3536x3){this[_0x763a[1097]]= _0x3536x2;null!= _0x3536x3&& this[_0x763a[176]](_0x3536x3)}mxOutline[_0x763a[202]][_0x763a[1097]]= null;mxOutline[_0x763a[202]][_0x763a[2136]]= null;mxOutline[_0x763a[202]][_0x763a[2720]]= mxConstants[_0x763a[2333]];mxOutline[_0x763a[202]][_0x763a[984]]= !0;mxOutline[_0x763a[202]][_0x763a[2721]]= !0;mxOutline[_0x763a[202]][_0x763a[467]]= 10;mxOutline[_0x763a[202]][_0x763a[2722]]= 8;mxOutline[_0x763a[202]][_0x763a[2723]]= !1;mxOutline[_0x763a[202]][_0x763a[2724]]= null;mxOutline[_0x763a[202]][_0x763a[1063]]= !1;mxOutline[_0x763a[202]][_0x763a[176]]= function(_0x3536x2){this[_0x763a[2136]]= new mxGraph(_0x3536x2,this[_0x763a[1097]][_0x763a[502]](),this[_0x763a[2720]],this[_0x763a[1097]][_0x763a[2434]]());this[_0x763a[2136]][_0x763a[2206]]= !1;this[_0x763a[2136]][_0x763a[1012]]= !1;var _0x3536x3=this[_0x763a[2136]][_0x763a[1177]];this[_0x763a[2136]][_0x763a[1177]]= mxUtils[_0x763a[885]](this,function(_0x3536x2){!this[_0x763a[1063]]&& null!= this[_0x763a[2136]]&& _0x3536x3[_0x763a[183]](this[_0x763a[2136]],arguments)});mxClient[_0x763a[48]]&& (_0x3536x2= this[_0x763a[2136]][_0x763a[249]]()[_0x763a[2051]]()[_0x763a[265]],_0x3536x2[_0x763a[57]](_0x763a[2725],_0x763a[2726]),_0x3536x2[_0x763a[57]](_0x763a[2727],_0x763a[2726]));this[_0x763a[2136]][_0x763a[2409]]= !1;this[_0x763a[2136]][_0x763a[995]](!1);this[_0x763a[2728]]= mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x3){!this[_0x763a[1063]]&& !this[_0x763a[1124]]&& this[_0x763a[2729]]()});this[_0x763a[1097]][_0x763a[502]]()[_0x763a[169]](mxEvent.CHANGE,this[_0x763a[2728]]);this[_0x763a[2136]][_0x763a[1133]](this);_0x3536x2= this[_0x763a[1097]][_0x763a[249]]();_0x3536x2[_0x763a[169]](mxEvent.SCALE,this[_0x763a[2728]]);_0x3536x2[_0x763a[169]](mxEvent.TRANSLATE,this[_0x763a[2728]]);_0x3536x2[_0x763a[169]](mxEvent.SCALE_AND_TRANSLATE,this[_0x763a[2728]]);_0x3536x2[_0x763a[169]](mxEvent.DOWN,this[_0x763a[2728]]);_0x3536x2[_0x763a[169]](mxEvent.UP,this[_0x763a[2728]]);mxEvent[_0x763a[169]](this[_0x763a[1097]][_0x763a[526]],_0x763a[276],this[_0x763a[2728]]);this[_0x763a[2730]]= mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[2723]]&& this[_0x763a[2728]][_0x763a[183]](this,arguments)});this[_0x763a[1097]][_0x763a[169]](mxEvent.PAN,this[_0x763a[2730]]);this[_0x763a[2731]]= mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[2136]][_0x763a[2341]](this[_0x763a[1097]][_0x763a[2434]]());this[_0x763a[2136]][_0x763a[802]]()});this[_0x763a[1097]][_0x763a[169]](mxEvent.REFRESH,this[_0x763a[2731]]);this[_0x763a[1562]]= new mxRectangle(0,0,0,0);this[_0x763a[2732]]= new mxRectangleShape(this[_0x763a[1562]],null,mxConstants.OUTLINE_COLOR,mxConstants.OUTLINE_STROKEWIDTH);this[_0x763a[2732]][_0x763a[507]]= this[_0x763a[2136]][_0x763a[507]]!= mxConstants[_0x763a[508]]?mxConstants[_0x763a[1523]]:mxConstants[_0x763a[508]];this[_0x763a[2732]][_0x763a[176]](this[_0x763a[2136]][_0x763a[249]]()[_0x763a[1524]]());mxEvent[_0x763a[2733]](this[_0x763a[2732]][_0x763a[252]],this[_0x763a[2136]]);this[_0x763a[2732]][_0x763a[252]][_0x763a[124]][_0x763a[1537]]= _0x763a[110];this[_0x763a[2734]]= this[_0x763a[2735]]();this[_0x763a[2734]][_0x763a[176]](this[_0x763a[2136]][_0x763a[249]]()[_0x763a[1524]]());this[_0x763a[984]]&& (this[_0x763a[2734]][_0x763a[252]][_0x763a[124]][_0x763a[270]]= _0x763a[356]);mxEvent[_0x763a[169]](this[_0x763a[2734]][_0x763a[252]],mxClient[_0x763a[754]]?_0x763a[755]:_0x763a[751],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[2136]][_0x763a[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x3536x2))}));this[_0x763a[2732]][_0x763a[252]][_0x763a[124]][_0x763a[495]]= this[_0x763a[2721]]?_0x763a[110]:_0x763a[130];this[_0x763a[2734]][_0x763a[252]][_0x763a[124]][_0x763a[495]]= this[_0x763a[2732]][_0x763a[252]][_0x763a[124]][_0x763a[495]];this[_0x763a[2732]][_0x763a[252]][_0x763a[124]][_0x763a[270]]= _0x763a[582];this[_0x763a[2729]](!1)};mxOutline[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxOutline[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxOutline[_0x763a[202]][_0x763a[2736]]= function(_0x3536x2){this[_0x763a[2734]][_0x763a[252]][_0x763a[124]][_0x763a[187]]= _0x3536x2?_0x763a[189]:_0x763a[188]};mxOutline[_0x763a[202]][_0x763a[802]]= function(){this[_0x763a[2729]](!0)};mxOutline[_0x763a[202]][_0x763a[2735]]= function(){var _0x3536x2=null!= this[_0x763a[2724]]? new mxImageShape( new mxRectangle(0,0,this[_0x763a[2724]][_0x763a[117]],this[_0x763a[2724]][_0x763a[119]]),this[_0x763a[2724]][_0x763a[390]]): new mxRectangleShape( new mxRectangle(0,0,this[_0x763a[2722]],this[_0x763a[2722]]),mxConstants.OUTLINE_HANDLE_FILLCOLOR,mxConstants.OUTLINE_HANDLE_STROKECOLOR);_0x3536x2[_0x763a[507]]= this[_0x763a[2136]][_0x763a[507]];return _0x3536x2};mxOutline[_0x763a[202]][_0x763a[2737]]= function(){return new mxRectangle(0,0,this[_0x763a[1097]][_0x763a[526]][_0x763a[1526]],this[_0x763a[1097]][_0x763a[526]][_0x763a[191]])};mxOutline[_0x763a[202]][_0x763a[2738]]= function(_0x3536x2){return null};mxOutline[_0x763a[202]][_0x763a[2729]]= function(_0x3536x2){if(null!= this[_0x763a[1097]]){var _0x3536x3=this[_0x763a[1097]][_0x763a[441]][_0x763a[255]],_0x3536x4=this[_0x763a[1097]][_0x763a[517]](),_0x3536x4= new mxRectangle(_0x3536x4[_0x763a[235]]/ _0x3536x3+ this[_0x763a[1097]][_0x763a[1136]],_0x3536x4[_0x763a[236]]/ _0x3536x3+ this[_0x763a[1097]][_0x763a[1137]],_0x3536x4[_0x763a[117]]/ _0x3536x3,_0x3536x4[_0x763a[119]]/ _0x3536x3),_0x3536x5= new mxRectangle(0,0,this[_0x763a[1097]][_0x763a[526]][_0x763a[159]]/ _0x3536x3,this[_0x763a[1097]][_0x763a[526]][_0x763a[157]]/ _0x3536x3),_0x3536x9=_0x3536x4[_0x763a[238]]();_0x3536x9[_0x763a[99]](_0x3536x5);var _0x3536xa=this[_0x763a[2737]](),_0x3536x5=Math[_0x763a[160]](_0x3536xa[_0x763a[117]]/ _0x3536x3,_0x3536x9[_0x763a[117]]),_0x3536x3=Math[_0x763a[160]](_0x3536xa[_0x763a[119]]/ _0x3536x3,_0x3536x9[_0x763a[119]]),_0x3536x9=Math[_0x763a[160]](0,this[_0x763a[2136]][_0x763a[526]][_0x763a[159]]- this[_0x763a[467]]),_0x3536xa=Math[_0x763a[160]](0,this[_0x763a[2136]][_0x763a[526]][_0x763a[157]]- this[_0x763a[467]]),_0x3536x9=Math[_0x763a[243]](_0x3536x9/ _0x3536x5,_0x3536xa/ _0x3536x3);if(0< _0x3536x9){this[_0x763a[2136]][_0x763a[249]]()[_0x763a[255]]!= _0x3536x9&& (this[_0x763a[2136]][_0x763a[249]]()[_0x763a[255]]= _0x3536x9,_0x3536x2= !0);_0x3536x5= this[_0x763a[2136]][_0x763a[249]]();_0x3536x5[_0x763a[1741]]!= this[_0x763a[1097]][_0x763a[249]]()[_0x763a[1741]]&& _0x3536x5[_0x763a[2257]](this[_0x763a[1097]][_0x763a[249]]()[_0x763a[1741]]);var _0x3536x3=this[_0x763a[1097]][_0x763a[441]][_0x763a[513]],_0x3536xa=_0x3536x3[_0x763a[235]]+ this[_0x763a[1097]][_0x763a[1136]],_0x3536x12=_0x3536x3[_0x763a[236]]+ this[_0x763a[1097]][_0x763a[1137]],_0x3536x9=this[_0x763a[2738]](_0x3536x9);null!= _0x3536x9&& (_0x3536xa+= _0x3536x9[_0x763a[235]],_0x3536x12+= _0x3536x9[_0x763a[236]]);0> _0x3536x4[_0x763a[235]]&& (_0x3536xa-= _0x3536x4[_0x763a[235]]);0> _0x3536x4[_0x763a[236]]&& (_0x3536x12-= _0x3536x4[_0x763a[236]]);if(_0x3536x5[_0x763a[513]][_0x763a[235]]!= _0x3536xa|| _0x3536x5[_0x763a[513]][_0x763a[236]]!= _0x3536x12){_0x3536x5[_0x763a[513]][_0x763a[235]]= _0x3536xa,_0x3536x5[_0x763a[513]][_0x763a[236]]= _0x3536x12,_0x3536x2= !0};var _0x3536x4=_0x3536x5[_0x763a[513]],_0x3536x9=this[_0x763a[1097]][_0x763a[249]]()[_0x763a[255]],_0x3536xa=_0x3536x9/ _0x3536x5[_0x763a[255]],_0x3536x12=1/ _0x3536x5[_0x763a[255]],_0x3536x13=this[_0x763a[1097]][_0x763a[526]];this[_0x763a[1562]]= new mxRectangle((_0x3536x4[_0x763a[235]]- _0x3536x3[_0x763a[235]]- this[_0x763a[1097]][_0x763a[1136]])/ _0x3536x12,(_0x3536x4[_0x763a[236]]- _0x3536x3[_0x763a[236]]- this[_0x763a[1097]][_0x763a[1137]])/ _0x3536x12,_0x3536x13[_0x763a[159]]/ _0x3536xa,_0x3536x13[_0x763a[157]]/ _0x3536xa);this[_0x763a[1562]][_0x763a[235]]+= this[_0x763a[1097]][_0x763a[526]][_0x763a[360]]* _0x3536x5[_0x763a[255]]/ _0x3536x9;this[_0x763a[1562]][_0x763a[236]]+= this[_0x763a[1097]][_0x763a[526]][_0x763a[190]]* _0x3536x5[_0x763a[255]]/ _0x3536x9;_0x3536x4= this[_0x763a[2732]][_0x763a[1562]];if(_0x3536x4[_0x763a[235]]!= this[_0x763a[1562]][_0x763a[235]]|| _0x3536x4[_0x763a[236]]!= this[_0x763a[1562]][_0x763a[236]]|| _0x3536x4[_0x763a[117]]!= this[_0x763a[1562]][_0x763a[117]]|| _0x3536x4[_0x763a[119]]!= this[_0x763a[1562]][_0x763a[119]]){this[_0x763a[2732]][_0x763a[1562]]= this[_0x763a[1562]],this[_0x763a[2732]][_0x763a[258]]()};_0x3536x4= this[_0x763a[2734]][_0x763a[1562]];_0x3536x5= new mxRectangle(this[_0x763a[1562]][_0x763a[235]]+ this[_0x763a[1562]][_0x763a[117]]- _0x3536x4[_0x763a[117]]/ 2,this[_0x763a[1562]][_0x763a[236]]+ this[_0x763a[1562]][_0x763a[119]]- _0x3536x4[_0x763a[119]]/ 2,_0x3536x4[_0x763a[117]],_0x3536x4[_0x763a[119]]);if(_0x3536x4[_0x763a[235]]!= _0x3536x5[_0x763a[235]]|| _0x3536x4[_0x763a[236]]!= _0x3536x5[_0x763a[236]]|| _0x3536x4[_0x763a[117]]!= _0x3536x5[_0x763a[117]]|| _0x3536x4[_0x763a[119]]!= _0x3536x5[_0x763a[119]]){this[_0x763a[2734]][_0x763a[1562]]= _0x3536x5,_0x763a[188]!= this[_0x763a[2734]][_0x763a[252]][_0x763a[124]][_0x763a[187]]&& this[_0x763a[2734]][_0x763a[258]]()};_0x3536x2&& this[_0x763a[2136]][_0x763a[441]][_0x763a[2259]]()}}};mxOutline[_0x763a[202]][_0x763a[787]]= function(_0x3536x2,_0x3536x3){this[_0x763a[984]]&& this[_0x763a[2721]]&& (this[_0x763a[499]]= _0x3536x3[_0x763a[729]](this[_0x763a[2734]]),this[_0x763a[2739]]= _0x3536x3[_0x763a[730]](),this[_0x763a[2740]]= _0x3536x3[_0x763a[732]](),this[_0x763a[1124]]= !0,this[_0x763a[1097]][_0x763a[2365]]&& mxUtils[_0x763a[1134]](this[_0x763a[1097]][_0x763a[526]])?(this[_0x763a[2741]]= this[_0x763a[1097]][_0x763a[526]][_0x763a[360]],this[_0x763a[2742]]= this[_0x763a[1097]][_0x763a[526]][_0x763a[190]]):this[_0x763a[2742]]= this[_0x763a[2741]]= 0);_0x3536x3[_0x763a[722]]()};mxOutline[_0x763a[202]][_0x763a[788]]= function(_0x3536x2,_0x3536x3){if(this[_0x763a[1124]]){this[_0x763a[2732]][_0x763a[252]][_0x763a[124]][_0x763a[495]]= this[_0x763a[2721]]?_0x763a[110]:_0x763a[130];this[_0x763a[2734]][_0x763a[252]][_0x763a[124]][_0x763a[495]]= this[_0x763a[2732]][_0x763a[252]][_0x763a[124]][_0x763a[495]];var _0x3536x4=_0x3536x3[_0x763a[730]]()- this[_0x763a[2739]],_0x3536x5=_0x3536x3[_0x763a[732]]()- this[_0x763a[2740]],_0x3536x9=null;if(this[_0x763a[499]]){_0x3536x9= this[_0x763a[1097]][_0x763a[526]],_0x3536x5= _0x3536x4/ (_0x3536x9[_0x763a[159]]/ _0x3536x9[_0x763a[157]]),_0x3536x9= new mxRectangle(this[_0x763a[1562]][_0x763a[235]],this[_0x763a[1562]][_0x763a[236]],Math[_0x763a[160]](1,this[_0x763a[1562]][_0x763a[117]]+ _0x3536x4),Math[_0x763a[160]](1,this[_0x763a[1562]][_0x763a[119]]+ _0x3536x5)),this[_0x763a[2732]][_0x763a[1562]]= _0x3536x9,this[_0x763a[2732]][_0x763a[258]]()}else {var _0x3536xa=this[_0x763a[2136]][_0x763a[249]]()[_0x763a[255]],_0x3536x9= new mxRectangle(this[_0x763a[1562]][_0x763a[235]]+ _0x3536x4,this[_0x763a[1562]][_0x763a[236]]+ _0x3536x5,this[_0x763a[1562]][_0x763a[117]],this[_0x763a[1562]][_0x763a[119]]);this[_0x763a[2732]][_0x763a[1562]]= _0x3536x9;this[_0x763a[2732]][_0x763a[258]]();_0x3536x4= _0x3536x4/ _0x3536xa* this[_0x763a[1097]][_0x763a[249]]()[_0x763a[255]];_0x3536x5= _0x3536x5/ _0x3536xa* this[_0x763a[1097]][_0x763a[249]]()[_0x763a[255]];this[_0x763a[1097]][_0x763a[1135]](-_0x3536x4- this[_0x763a[2741]],-_0x3536x5- this[_0x763a[2742]])};_0x3536x4= this[_0x763a[2734]][_0x763a[1562]];this[_0x763a[2734]][_0x763a[1562]]= new mxRectangle(_0x3536x9[_0x763a[235]]+ _0x3536x9[_0x763a[117]]- _0x3536x4[_0x763a[117]]/ 2,_0x3536x9[_0x763a[236]]+ _0x3536x9[_0x763a[119]]- _0x3536x4[_0x763a[119]]/ 2,_0x3536x4[_0x763a[117]],_0x3536x4[_0x763a[119]]);_0x763a[188]!= this[_0x763a[2734]][_0x763a[252]][_0x763a[124]][_0x763a[187]]&& this[_0x763a[2734]][_0x763a[258]]();_0x3536x3[_0x763a[722]]()}};mxOutline[_0x763a[202]][_0x763a[789]]= function(_0x3536x2,_0x3536x3){if(this[_0x763a[1124]]){var _0x3536x4=_0x3536x3[_0x763a[730]]()- this[_0x763a[2739]],_0x3536x5=_0x3536x3[_0x763a[732]]()- this[_0x763a[2740]];if(0< Math[_0x763a[425]](_0x3536x4)|| 0< Math[_0x763a[425]](_0x3536x5)){if(this[_0x763a[499]]){var _0x3536x5=this[_0x763a[2732]][_0x763a[1562]][_0x763a[117]],_0x3536x9=this[_0x763a[1097]][_0x763a[249]]()[_0x763a[255]];this[_0x763a[1097]][_0x763a[2561]](_0x3536x9- _0x3536x4* _0x3536x9/ _0x3536x5,!1)}else {if(!this[_0x763a[1097]][_0x763a[2365]]|| !mxUtils[_0x763a[1134]](this[_0x763a[1097]][_0x763a[526]])){this[_0x763a[1097]][_0x763a[1135]](0,0),_0x3536x4/= this[_0x763a[2136]][_0x763a[249]]()[_0x763a[255]],_0x3536x5/= this[_0x763a[2136]][_0x763a[249]]()[_0x763a[255]],_0x3536x9= this[_0x763a[1097]][_0x763a[249]]()[_0x763a[513]],this[_0x763a[1097]][_0x763a[249]]()[_0x763a[1147]](_0x3536x9[_0x763a[235]]- _0x3536x4,_0x3536x9[_0x763a[236]]- _0x3536x5)}};this[_0x763a[2729]]();_0x3536x3[_0x763a[722]]()};this[_0x763a[1983]]= null;this[_0x763a[1124]]= !1}};mxOutline[_0x763a[202]][_0x763a[515]]= function(){null!= this[_0x763a[1097]]&& (this[_0x763a[1097]][_0x763a[745]](this[_0x763a[2730]]),this[_0x763a[1097]][_0x763a[745]](this[_0x763a[2731]]),this[_0x763a[1097]][_0x763a[502]]()[_0x763a[745]](this[_0x763a[2728]]),this[_0x763a[1097]][_0x763a[249]]()[_0x763a[745]](this[_0x763a[2728]]),mxEvent[_0x763a[169]](this[_0x763a[1097]][_0x763a[526]],_0x763a[276],this[_0x763a[2728]]),this[_0x763a[1097]]= null);null!= this[_0x763a[2136]]&& (this[_0x763a[2136]][_0x763a[1148]](this),this[_0x763a[2136]][_0x763a[515]](),this[_0x763a[2136]]= null);null!= this[_0x763a[2732]]&& (this[_0x763a[2732]][_0x763a[515]](),this[_0x763a[2732]]= null);null!= this[_0x763a[2734]]&& (this[_0x763a[2734]][_0x763a[515]](),this[_0x763a[2734]]= null)};function mxMultiplicity(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15){this[_0x763a[1097]]= _0x3536x2;this[_0x763a[60]]= _0x3536x3;this[_0x763a[2588]]= _0x3536x4;this[_0x763a[131]]= _0x3536x5;this[_0x763a[243]]= null!= _0x3536x9?_0x3536x9:0;this[_0x763a[160]]= null!= _0x3536xa?_0x3536xa:_0x763a[2743];this[_0x763a[2744]]= _0x3536x12;this[_0x763a[2589]]= mxResources[_0x763a[203]](_0x3536x13)|| _0x3536x13;this[_0x763a[2745]]= mxResources[_0x763a[203]](_0x3536x14)|| _0x3536x14;this[_0x763a[2746]]= null!= _0x3536x15?_0x3536x15:!0}mxMultiplicity[_0x763a[202]][_0x763a[60]]= null;mxMultiplicity[_0x763a[202]][_0x763a[2588]]= null;mxMultiplicity[_0x763a[202]][_0x763a[131]]= null;mxMultiplicity[_0x763a[202]][_0x763a[1097]]= null;mxMultiplicity[_0x763a[202]][_0x763a[243]]= null;mxMultiplicity[_0x763a[202]][_0x763a[160]]= null;mxMultiplicity[_0x763a[202]][_0x763a[2744]]= null;mxMultiplicity[_0x763a[202]][_0x763a[2746]]= !0;mxMultiplicity[_0x763a[202]][_0x763a[2589]]= null;mxMultiplicity[_0x763a[202]][_0x763a[2745]]= null;mxMultiplicity[_0x763a[202]][_0x763a[2583]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){var _0x3536x12=_0x763a[110];if(this[_0x763a[1097]]&& this[_0x763a[2747]](_0x3536x2,_0x3536x4,_0x3536x3)|| !this[_0x763a[1097]]&& this[_0x763a[2747]](_0x3536x2,_0x3536x5,_0x3536x3)){if(null!= this[_0x763a[2589]]&& (this[_0x763a[1097]]&& (0== this[_0x763a[160]]|| _0x3536x9>= this[_0x763a[160]])|| !this[_0x763a[1097]]&& (0== this[_0x763a[160]]|| _0x3536xa>= this[_0x763a[160]]))){_0x3536x12+= this[_0x763a[2589]]+ _0x763a[192]};null!= this[_0x763a[2744]]&& (null!= this[_0x763a[2745]]&& 0< this[_0x763a[2744]][_0x763a[67]])&& (this[_0x763a[2748]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5)|| (_0x3536x12+= this[_0x763a[2745]]+ _0x763a[192]))};return 0< _0x3536x12[_0x763a[67]]?_0x3536x12:null};mxMultiplicity[_0x763a[202]][_0x763a[2748]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x3= _0x3536x2[_0x763a[251]][_0x763a[433]](_0x3536x4);_0x3536x5= _0x3536x2[_0x763a[251]][_0x763a[433]](_0x3536x5);_0x3536x4= !this[_0x763a[2746]];for(var _0x3536x9=this[_0x763a[2744]],_0x3536xa=0;_0x3536xa< _0x3536x9[_0x763a[67]];_0x3536xa++){if(this[_0x763a[1097]]&& this[_0x763a[2749]](_0x3536x2,_0x3536x5,_0x3536x9[_0x3536xa])){_0x3536x4= this[_0x763a[2746]];break}else {if(!this[_0x763a[1097]]&& this[_0x763a[2749]](_0x3536x2,_0x3536x3,_0x3536x9[_0x3536xa])){_0x3536x4= this[_0x763a[2746]];break}}};return _0x3536x4};mxMultiplicity[_0x763a[202]][_0x763a[2747]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x3= _0x3536x2[_0x763a[251]][_0x763a[433]](_0x3536x3);return this[_0x763a[2749]](_0x3536x2,_0x3536x3,this[_0x763a[60]],this[_0x763a[2588]],this[_0x763a[131]])};mxMultiplicity[_0x763a[202]][_0x763a[2749]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){return null!= _0x3536x3?isNaN(_0x3536x3[_0x763a[288]])?_0x3536x3== _0x3536x4:mxUtils[_0x763a[1331]](_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9):!1};function mxLayoutManager(_0x3536x2){this[_0x763a[2750]]= mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x4){this[_0x763a[994]]()&& this[_0x763a[823]](_0x3536x4[_0x763a[720]](_0x763a[1061]))});this[_0x763a[2317]]= mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x4){this[_0x763a[994]]()&& this[_0x763a[835]](_0x3536x4[_0x763a[720]](_0x763a[895]),_0x3536x4[_0x763a[720]](_0x763a[763]))});this[_0x763a[1178]](_0x3536x2)}mxLayoutManager[_0x763a[202]]= new mxEventSource;mxLayoutManager[_0x763a[202]][_0x763a[196]]= mxLayoutManager;mxLayoutManager[_0x763a[202]][_0x763a[1179]]= null;mxLayoutManager[_0x763a[202]][_0x763a[2751]]= !0;mxLayoutManager[_0x763a[202]][_0x763a[984]]= !0;mxLayoutManager[_0x763a[202]][_0x763a[2728]]= null;mxLayoutManager[_0x763a[202]][_0x763a[2317]]= null;mxLayoutManager[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxLayoutManager[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxLayoutManager[_0x763a[202]][_0x763a[2752]]= function(){return this[_0x763a[2751]]};mxLayoutManager[_0x763a[202]][_0x763a[2753]]= function(_0x3536x2){this[_0x763a[2751]]= _0x3536x2};mxLayoutManager[_0x763a[202]][_0x763a[1703]]= function(){return this[_0x763a[1179]]};mxLayoutManager[_0x763a[202]][_0x763a[1178]]= function(_0x3536x2){if(null!= this[_0x763a[1179]]){var _0x3536x3=this[_0x763a[1179]][_0x763a[502]]();_0x3536x3[_0x763a[745]](this[_0x763a[2750]]);this[_0x763a[1179]][_0x763a[745]](this[_0x763a[2317]])};this[_0x763a[1179]]= _0x3536x2;null!= this[_0x763a[1179]]&& (_0x3536x3= this[_0x763a[1179]][_0x763a[502]](),_0x3536x3[_0x763a[169]](mxEvent.BEFORE_UNDO,this[_0x763a[2750]]),this[_0x763a[1179]][_0x763a[169]](mxEvent.MOVE_CELLS,this[_0x763a[2317]]))};mxLayoutManager[_0x763a[202]][_0x763a[2754]]= function(_0x3536x2){return null};mxLayoutManager[_0x763a[202]][_0x763a[823]]= function(_0x3536x2){_0x3536x2= this[_0x763a[2755]](_0x3536x2[_0x763a[1065]]);var _0x3536x3=this[_0x763a[1703]]()[_0x763a[502]]();if(this[_0x763a[2752]]()){for(var _0x3536x4=_0x3536x3[_0x763a[1977]](_0x3536x2);0< _0x3536x4[_0x763a[67]];){_0x3536x2= _0x3536x2[_0x763a[1919]](_0x3536x4),_0x3536x4= _0x3536x3[_0x763a[1977]](_0x3536x4)}};this[_0x763a[828]](mxUtils[_0x763a[1779]](_0x3536x2,!1))};mxLayoutManager[_0x763a[202]][_0x763a[835]]= function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2&& null!= _0x3536x3){for(var _0x3536x4=mxUtils[_0x763a[2196]](this[_0x763a[1703]]()[_0x763a[526]],mxEvent[_0x763a[731]](_0x3536x3),mxEvent[_0x763a[733]](_0x3536x3)),_0x3536x5=this[_0x763a[1703]]()[_0x763a[502]](),_0x3536x9=0;_0x3536x9< _0x3536x2[_0x763a[67]];_0x3536x9++){var _0x3536xa=this[_0x763a[2754]](_0x3536x5[_0x763a[1197]](_0x3536x2[_0x3536x9]));null!= _0x3536xa&& _0x3536xa[_0x763a[1702]](_0x3536x2[_0x3536x9],_0x3536x4[_0x763a[235]],_0x3536x4[_0x763a[236]])}}};mxLayoutManager[_0x763a[202]][_0x763a[2755]]= function(_0x3536x2){for(var _0x3536x3=[],_0x3536x4={},_0x3536x5=0;_0x3536x5< _0x3536x2[_0x763a[67]];_0x3536x5++){var _0x3536x9=_0x3536x2[_0x3536x5];if(_0x3536x9 instanceof mxRootChange){return []};for(var _0x3536x9=this[_0x763a[2756]](_0x3536x9),_0x3536xa=0;_0x3536xa< _0x3536x9[_0x763a[67]];_0x3536xa++){if(null!= _0x3536x9[_0x3536xa]){var _0x3536x12=mxCellPath[_0x763a[385]](_0x3536x9[_0x3536xa]);null== _0x3536x4[_0x3536x12]&& (_0x3536x4[_0x3536x12]= _0x3536x9[_0x3536xa],_0x3536x3[_0x763a[207]](_0x3536x9[_0x3536xa]))}}};return _0x3536x3};mxLayoutManager[_0x763a[202]][_0x763a[2756]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1703]]()[_0x763a[502]]();return _0x3536x2 instanceof mxChildChange?[_0x3536x2[_0x763a[247]],_0x3536x2[_0x763a[257]],_0x3536x3[_0x763a[1197]](_0x3536x2[_0x763a[247]])]:_0x3536x2 instanceof mxTerminalChange|| _0x3536x2 instanceof mxGeometryChange?[_0x3536x2[_0x763a[246]],_0x3536x3[_0x763a[1197]](_0x3536x2[_0x763a[246]])]:[]};mxLayoutManager[_0x763a[202]][_0x763a[828]]= function(_0x3536x2){if(0< _0x3536x2[_0x763a[67]]){var _0x3536x3=this[_0x763a[1703]]()[_0x763a[502]]();_0x3536x3[_0x763a[473]]();try{for(var _0x3536x4=null,_0x3536x5=0;_0x3536x5< _0x3536x2[_0x763a[67]];_0x3536x5++){_0x3536x2[_0x3536x5]!= _0x3536x3[_0x763a[501]]()&& _0x3536x2[_0x3536x5]!= _0x3536x4&& (_0x3536x4= _0x3536x2[_0x3536x5],this[_0x763a[2757]](this[_0x763a[2754]](_0x3536x4),_0x3536x4))};this[_0x763a[746]]( new mxEventObject(mxEvent.LAYOUT_CELLS,_0x763a[895],_0x3536x2))}finally{_0x3536x3[_0x763a[476]]()}}};mxLayoutManager[_0x763a[202]][_0x763a[2757]]= function(_0x3536x2,_0x3536x3){null!= _0x3536x2&& null!= _0x3536x3&& _0x3536x2[_0x763a[350]](_0x3536x3)};mxLayoutManager[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[1178]](null)};function mxSpaceManager(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){this[_0x763a[2758]]= mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x3){this[_0x763a[994]]()&& this[_0x763a[837]](_0x3536x3[_0x763a[720]](_0x763a[895]))});this[_0x763a[2759]]= mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x3){this[_0x763a[994]]()&& this[_0x763a[837]](_0x3536x3[_0x763a[720]](_0x763a[895]))});this[_0x763a[2760]]= null!= _0x3536x3?_0x3536x3:!0;this[_0x763a[2761]]= null!= _0x3536x4?_0x3536x4:!0;this[_0x763a[2392]]= null!= _0x3536x5?_0x3536x5:!0;this[_0x763a[1178]](_0x3536x2)}mxSpaceManager[_0x763a[202]]= new mxEventSource;mxSpaceManager[_0x763a[202]][_0x763a[196]]= mxSpaceManager;mxSpaceManager[_0x763a[202]][_0x763a[1179]]= null;mxSpaceManager[_0x763a[202]][_0x763a[984]]= !0;mxSpaceManager[_0x763a[202]][_0x763a[2760]]= !0;mxSpaceManager[_0x763a[202]][_0x763a[2761]]= !0;mxSpaceManager[_0x763a[202]][_0x763a[2392]]= !0;mxSpaceManager[_0x763a[202]][_0x763a[2758]]= null;mxSpaceManager[_0x763a[202]][_0x763a[2759]]= null;mxSpaceManager[_0x763a[202]][_0x763a[2762]]= function(_0x3536x2){return !this[_0x763a[1703]]()[_0x763a[502]]()[_0x763a[1193]](_0x3536x2)};mxSpaceManager[_0x763a[202]][_0x763a[2763]]= function(_0x3536x2){return this[_0x763a[1703]]()[_0x763a[502]]()[_0x763a[1193]](_0x3536x2)&& this[_0x763a[1703]]()[_0x763a[1712]](_0x3536x2)};mxSpaceManager[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxSpaceManager[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxSpaceManager[_0x763a[202]][_0x763a[2764]]= function(){return this[_0x763a[2760]]};mxSpaceManager[_0x763a[202]][_0x763a[2765]]= function(_0x3536x2){this[_0x763a[2760]]= _0x3536x2};mxSpaceManager[_0x763a[202]][_0x763a[2766]]= function(){return this[_0x763a[2761]]};mxSpaceManager[_0x763a[202]][_0x763a[2767]]= function(_0x3536x2){this[_0x763a[2761]]= _0x3536x2};mxSpaceManager[_0x763a[202]][_0x763a[2678]]= function(){return this[_0x763a[2392]]};mxSpaceManager[_0x763a[202]][_0x763a[2679]]= function(_0x3536x2){this[_0x763a[2392]]= _0x3536x2};mxSpaceManager[_0x763a[202]][_0x763a[1703]]= function(){return this[_0x763a[1179]]};mxSpaceManager[_0x763a[202]][_0x763a[1178]]= function(_0x3536x2){null!= this[_0x763a[1179]]&& (this[_0x763a[1179]][_0x763a[745]](this[_0x763a[2758]]),this[_0x763a[1179]][_0x763a[745]](this[_0x763a[2759]]));this[_0x763a[1179]]= _0x3536x2;null!= this[_0x763a[1179]]&& (this[_0x763a[1179]][_0x763a[169]](mxEvent.RESIZE_CELLS,this[_0x763a[2758]]),this[_0x763a[1179]][_0x763a[169]](mxEvent.FOLD_CELLS,this[_0x763a[2759]]))};mxSpaceManager[_0x763a[202]][_0x763a[837]]= function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[502]]();_0x3536x3[_0x763a[473]]();try{for(var _0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){if(!this[_0x763a[2762]](_0x3536x2[_0x3536x4])){this[_0x763a[2768]](_0x3536x2[_0x3536x4]);break}}}finally{_0x3536x3[_0x763a[476]]()}}};mxSpaceManager[_0x763a[202]][_0x763a[2768]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1703]](),_0x3536x4=_0x3536x3[_0x763a[249]](),_0x3536x5=_0x3536x3[_0x763a[502]](),_0x3536x9=_0x3536x4[_0x763a[248]](_0x3536x2),_0x3536xa=_0x3536x4[_0x763a[248]](_0x3536x5[_0x763a[1197]](_0x3536x2));if(null!= _0x3536x9&& null!= _0x3536xa){var _0x3536x12=this[_0x763a[2769]](_0x3536x9),_0x3536x13=_0x3536x5[_0x763a[1721]](_0x3536x2);if(null!= _0x3536x12&& null!= _0x3536x13){var _0x3536x14=_0x3536x4[_0x763a[513]],_0x3536x15=_0x3536x4[_0x763a[255]],_0x3536x4=_0x3536x9[_0x763a[235]]- _0x3536xa[_0x763a[2078]][_0x763a[235]]- _0x3536x14[_0x763a[235]]* _0x3536x15,_0x3536xa=_0x3536x9[_0x763a[236]]- _0x3536xa[_0x763a[2078]][_0x763a[236]]- _0x3536x14[_0x763a[236]]* _0x3536x15,_0x3536x14=_0x3536x9[_0x763a[235]]+ _0x3536x9[_0x763a[117]],_0x3536x16=_0x3536x9[_0x763a[236]]+ _0x3536x9[_0x763a[119]],_0x3536x17=_0x3536x9[_0x763a[117]]- _0x3536x13[_0x763a[117]]* _0x3536x15+ _0x3536x4- _0x3536x13[_0x763a[235]]* _0x3536x15,_0x3536x18=_0x3536x9[_0x763a[119]]- _0x3536x13[_0x763a[119]]* _0x3536x15+ _0x3536xa- _0x3536x13[_0x763a[236]]* _0x3536x15,_0x3536x19=1- _0x3536x13[_0x763a[117]]* _0x3536x15/ _0x3536x9[_0x763a[117]],_0x3536x9=1- _0x3536x13[_0x763a[119]]* _0x3536x15/ _0x3536x9[_0x763a[119]];_0x3536x5[_0x763a[473]]();try{for(_0x3536x13= 0;_0x3536x13< _0x3536x12[_0x763a[67]];_0x3536x13++){_0x3536x12[_0x3536x13]!= _0x3536x2&& this[_0x763a[2763]](_0x3536x12[_0x3536x13])&& this[_0x763a[2770]](_0x3536x12[_0x3536x13],_0x3536x17,_0x3536x18,_0x3536x4,_0x3536xa,_0x3536x14,_0x3536x16,_0x3536x19,_0x3536x9,this[_0x763a[2678]]()&& _0x3536x3[_0x763a[2507]](_0x3536x12[_0x3536x13]))}}finally{_0x3536x5[_0x763a[476]]()}}}};mxSpaceManager[_0x763a[202]][_0x763a[2770]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14,_0x3536x15){_0x3536x5= this[_0x763a[1703]]();var _0x3536x16=_0x3536x5[_0x763a[249]]()[_0x763a[248]](_0x3536x2);if(null!= _0x3536x16){var _0x3536x17=_0x3536x5[_0x763a[502]](),_0x3536x18=_0x3536x17[_0x763a[1721]](_0x3536x2);if(null!= _0x3536x18){_0x3536x17[_0x763a[473]]();try{if(this[_0x763a[2764]]()){if(_0x3536x16[_0x763a[235]]>= _0x3536xa){_0x3536x18= _0x3536x18[_0x763a[238]](),_0x3536x18[_0x763a[513]](-_0x3536x3,0)}else {var _0x3536x19=Math[_0x763a[160]](0,_0x3536x16[_0x763a[235]]- x0),_0x3536x18=_0x3536x18[_0x763a[238]]();_0x3536x18[_0x763a[513]](-_0x3536x13* _0x3536x19,0)}};if(this[_0x763a[2766]]()){if(_0x3536x16[_0x763a[236]]>= _0x3536x12){_0x3536x18= _0x3536x18[_0x763a[238]](),_0x3536x18[_0x763a[513]](0,-_0x3536x4)}else {var _0x3536x1a=Math[_0x763a[160]](0,_0x3536x16[_0x763a[236]]- _0x3536x9),_0x3536x18=_0x3536x18[_0x763a[238]]();_0x3536x18[_0x763a[513]](0,-_0x3536x14* _0x3536x1a)}};_0x3536x18!= _0x3536x17[_0x763a[1721]](_0x3536x2)&& (_0x3536x17[_0x763a[1724]](_0x3536x2,_0x3536x18),_0x3536x15&& _0x3536x5[_0x763a[2508]](_0x3536x2))}finally{_0x3536x17[_0x763a[476]]()}}}};mxSpaceManager[_0x763a[202]][_0x763a[2769]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1703]](),_0x3536x4=_0x3536x3[_0x763a[502]]()[_0x763a[1197]](_0x3536x2[_0x763a[246]]),_0x3536x5=this[_0x763a[2766]](),_0x3536x9=this[_0x763a[2764]]();return _0x3536x3[_0x763a[2691]](_0x3536x2[_0x763a[235]]+ (_0x3536x5?0:_0x3536x2[_0x763a[117]]),_0x3536x2[_0x763a[236]]+ (_0x3536x5&& _0x3536x9?0:_0x3536x2[_0x763a[119]]),_0x3536x4,_0x3536x9,_0x3536x5)};mxSpaceManager[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[1178]](null)};function mxSwimlaneManager(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){this[_0x763a[662]]= null!= _0x3536x3?_0x3536x3:!0;this[_0x763a[2771]]= null!= _0x3536x4?_0x3536x4:!0;this[_0x763a[2772]]= null!= _0x3536x5?_0x3536x5:!0;this[_0x763a[2773]]= mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x3){this[_0x763a[994]]()&& this[_0x763a[2774]]()&& this[_0x763a[833]](_0x3536x3[_0x763a[720]](_0x763a[895]))});this[_0x763a[2758]]= mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x3){this[_0x763a[994]]()&& this[_0x763a[2775]]()&& this[_0x763a[837]](_0x3536x3[_0x763a[720]](_0x763a[895]))});this[_0x763a[1178]](_0x3536x2)}mxSwimlaneManager[_0x763a[202]]= new mxEventSource;mxSwimlaneManager[_0x763a[202]][_0x763a[196]]= mxSwimlaneManager;mxSwimlaneManager[_0x763a[202]][_0x763a[1179]]= null;mxSwimlaneManager[_0x763a[202]][_0x763a[984]]= !0;mxSwimlaneManager[_0x763a[202]][_0x763a[662]]= !0;mxSwimlaneManager[_0x763a[202]][_0x763a[2771]]= !0;mxSwimlaneManager[_0x763a[202]][_0x763a[2772]]= !0;mxSwimlaneManager[_0x763a[202]][_0x763a[2773]]= null;mxSwimlaneManager[_0x763a[202]][_0x763a[2758]]= null;mxSwimlaneManager[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxSwimlaneManager[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxSwimlaneManager[_0x763a[202]][_0x763a[1737]]= function(){return this[_0x763a[662]]};mxSwimlaneManager[_0x763a[202]][_0x763a[2776]]= function(_0x3536x2){this[_0x763a[662]]= _0x3536x2};mxSwimlaneManager[_0x763a[202]][_0x763a[2774]]= function(){return this[_0x763a[2771]]};mxSwimlaneManager[_0x763a[202]][_0x763a[2777]]= function(_0x3536x2){this[_0x763a[2771]]= _0x3536x2};mxSwimlaneManager[_0x763a[202]][_0x763a[2775]]= function(){return this[_0x763a[2772]]};mxSwimlaneManager[_0x763a[202]][_0x763a[2778]]= function(_0x3536x2){this[_0x763a[2772]]= _0x3536x2};mxSwimlaneManager[_0x763a[202]][_0x763a[1703]]= function(){return this[_0x763a[1179]]};mxSwimlaneManager[_0x763a[202]][_0x763a[1178]]= function(_0x3536x2){null!= this[_0x763a[1179]]&& (this[_0x763a[1179]][_0x763a[745]](this[_0x763a[2773]]),this[_0x763a[1179]][_0x763a[745]](this[_0x763a[2758]]));this[_0x763a[1179]]= _0x3536x2;null!= this[_0x763a[1179]]&& (this[_0x763a[1179]][_0x763a[169]](mxEvent.ADD_CELLS,this[_0x763a[2773]]),this[_0x763a[1179]][_0x763a[169]](mxEvent.CELLS_RESIZED,this[_0x763a[2758]]))};mxSwimlaneManager[_0x763a[202]][_0x763a[2779]]= function(_0x3536x2){return !this[_0x763a[1703]]()[_0x763a[1730]](_0x3536x2)};mxSwimlaneManager[_0x763a[202]][_0x763a[2780]]= function(_0x3536x2){if(this[_0x763a[1179]][_0x763a[1730]](_0x3536x2)){var _0x3536x3=this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x2);_0x3536x2= null!= _0x3536x3?_0x3536x3[_0x763a[124]]:this[_0x763a[1179]][_0x763a[1705]](_0x3536x2);return 1== mxUtils[_0x763a[433]](_0x3536x2,mxConstants.STYLE_HORIZONTAL,1)};return !this[_0x763a[1737]]()};mxSwimlaneManager[_0x763a[202]][_0x763a[833]]= function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=this[_0x763a[1703]]()[_0x763a[502]]();_0x3536x3[_0x763a[473]]();try{for(var _0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){this[_0x763a[2779]](_0x3536x2[_0x3536x4])|| this[_0x763a[2781]](_0x3536x2[_0x3536x4])}}finally{_0x3536x3[_0x763a[476]]()}}};mxSwimlaneManager[_0x763a[202]][_0x763a[2781]]= function(_0x3536x2){for(var _0x3536x3=this[_0x763a[1703]]()[_0x763a[502]](),_0x3536x4=_0x3536x3[_0x763a[1197]](_0x3536x2),_0x3536x5=_0x3536x3[_0x763a[262]](_0x3536x4),_0x3536x9=null,_0x3536xa=0;_0x3536xa< _0x3536x5;_0x3536xa++){var _0x3536x12=_0x3536x3[_0x763a[263]](_0x3536x4,_0x3536xa);if(_0x3536x12!= _0x3536x2&& !this[_0x763a[2779]](_0x3536x12)&& (_0x3536x9= _0x3536x3[_0x763a[1721]](_0x3536x12),null!= _0x3536x9)){break}};null!= _0x3536x9&& this[_0x763a[2782]](_0x3536x2,_0x3536x9[_0x763a[117]],_0x3536x9[_0x763a[119]])};mxSwimlaneManager[_0x763a[202]][_0x763a[837]]= function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=this[_0x763a[1703]]()[_0x763a[502]]();_0x3536x3[_0x763a[473]]();try{for(var _0x3536x4=0;_0x3536x4< _0x3536x2[_0x763a[67]];_0x3536x4++){if(!this[_0x763a[2779]](_0x3536x2[_0x3536x4])){var _0x3536x5=_0x3536x3[_0x763a[1721]](_0x3536x2[_0x3536x4]);if(null!= _0x3536x5){for(var _0x3536x9= new mxRectangle(0,0,_0x3536x5[_0x763a[117]],_0x3536x5[_0x763a[119]]),_0x3536xa=_0x3536x2[_0x3536x4],_0x3536x12=_0x3536xa;null!= _0x3536x12;){var _0x3536xa=_0x3536x12,_0x3536x12=_0x3536x3[_0x763a[1197]](_0x3536x12),_0x3536x13=this[_0x763a[1179]][_0x763a[1730]](_0x3536x12)?this[_0x763a[1179]][_0x763a[1731]](_0x3536x12): new mxRectangle;_0x3536x9[_0x763a[117]]+= _0x3536x13[_0x763a[117]];_0x3536x9[_0x763a[119]]+= _0x3536x13[_0x763a[119]]};this[_0x763a[2782]](_0x3536xa,_0x3536x9[_0x763a[117]],_0x3536x9[_0x763a[119]])}}}}finally{_0x3536x3[_0x763a[476]]()}}};mxSwimlaneManager[_0x763a[202]][_0x763a[2782]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[1703]]()[_0x763a[502]]();_0x3536x5[_0x763a[473]]();try{if(!this[_0x763a[2779]](_0x3536x2)){var _0x3536x9=_0x3536x5[_0x763a[1721]](_0x3536x2);if(null!= _0x3536x9){var _0x3536xa=this[_0x763a[2780]](_0x3536x2);if(_0x3536xa&& _0x3536x9[_0x763a[119]]!= _0x3536x4|| !_0x3536xa&& _0x3536x9[_0x763a[117]]!= _0x3536x3){_0x3536x9= _0x3536x9[_0x763a[238]](),_0x3536xa?_0x3536x9[_0x763a[119]]= _0x3536x4:_0x3536x9[_0x763a[117]]= _0x3536x3,_0x3536x5[_0x763a[1724]](_0x3536x2,_0x3536x9)}}};var _0x3536x12=this[_0x763a[1179]][_0x763a[1730]](_0x3536x2)?this[_0x763a[1179]][_0x763a[1731]](_0x3536x2): new mxRectangle;_0x3536x3-= _0x3536x12[_0x763a[117]];_0x3536x4-= _0x3536x12[_0x763a[119]];for(var _0x3536x13=_0x3536x5[_0x763a[262]](_0x3536x2),_0x3536x9=0;_0x3536x9< _0x3536x13;_0x3536x9++){var _0x3536x14=_0x3536x5[_0x763a[263]](_0x3536x2,_0x3536x9);this[_0x763a[2782]](_0x3536x14,_0x3536x3,_0x3536x4)}}finally{_0x3536x5[_0x763a[476]]()}};mxSwimlaneManager[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[1178]](null)};function mxTemporaryCellStates(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[441]]= _0x3536x2;_0x3536x3= null!= _0x3536x3?_0x3536x3:1;this[_0x763a[2783]]= _0x3536x2[_0x763a[517]]();this[_0x763a[2784]]= _0x3536x2[_0x763a[2312]]();this[_0x763a[2785]]= _0x3536x2[_0x763a[518]]();_0x3536x2[_0x763a[1517]]( new mxDictionary);_0x3536x2[_0x763a[2262]](_0x3536x3);if(null!= _0x3536x4){_0x3536x3= _0x3536x2[_0x763a[1230]]( new mxCell);for(var _0x3536x5=0;_0x3536x5< _0x3536x4[_0x763a[67]];_0x3536x5++){_0x3536x2[_0x763a[2267]](_0x3536x3,_0x3536x4[_0x3536x5])};for(var _0x3536x9=null,_0x3536x5=0;_0x3536x5< _0x3536x4[_0x763a[67]];_0x3536x5++){var _0x3536xa=_0x3536x2[_0x763a[2268]](_0x3536x3,_0x3536x4[_0x3536x5]);null== _0x3536x9?_0x3536x9= _0x3536xa:_0x3536x9[_0x763a[99]](_0x3536xa)};null== _0x3536x9&& (_0x3536x9= new mxRectangle);_0x3536x2[_0x763a[2256]](_0x3536x9)}}mxTemporaryCellStates[_0x763a[202]][_0x763a[441]]= null;mxTemporaryCellStates[_0x763a[202]][_0x763a[2784]]= null;mxTemporaryCellStates[_0x763a[202]][_0x763a[2783]]= null;mxTemporaryCellStates[_0x763a[202]][_0x763a[2785]]= null;mxTemporaryCellStates[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[441]][_0x763a[2262]](this[_0x763a[2785]]);this[_0x763a[441]][_0x763a[1517]](this[_0x763a[2784]]);this[_0x763a[441]][_0x763a[2256]](this[_0x763a[2783]])};function mxCellStatePreview(_0x3536x2){this[_0x763a[1179]]= _0x3536x2;this[_0x763a[2786]]= {}}mxCellStatePreview[_0x763a[202]][_0x763a[1179]]= null;mxCellStatePreview[_0x763a[202]][_0x763a[2786]]= null;mxCellStatePreview[_0x763a[202]][_0x763a[2787]]= 0;mxCellStatePreview[_0x763a[202]][_0x763a[1107]]= function(){return 0== this[_0x763a[2787]]};mxCellStatePreview[_0x763a[202]][_0x763a[1194]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x5= null!= _0x3536x5?_0x3536x5:!0;_0x3536x9= null!= _0x3536x9?_0x3536x9:!0;var _0x3536xa=mxCellPath[_0x763a[385]](_0x3536x2[_0x763a[246]]),_0x3536x12=this[_0x763a[2786]][_0x3536xa];null== _0x3536x12?(_0x3536x12= new mxPoint(_0x3536x3,_0x3536x4),this[_0x763a[2786]][_0x3536xa]= _0x3536x12,this[_0x763a[2787]]++):_0x3536x5?(_0x3536x12[_0x763a[2788]]+= _0x3536x3,_0x3536x12[_0x763a[2789]]+= _0x3536x4):(_0x3536x12[_0x763a[2788]]= _0x3536x3,_0x3536x12[_0x763a[2789]]= _0x3536x4);_0x3536x9&& this[_0x763a[2790]](_0x3536x2);return _0x3536x12};mxCellStatePreview[_0x763a[202]][_0x763a[539]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[502]](),_0x3536x4=_0x3536x3[_0x763a[501]](),_0x3536x5;for(_0x3536x5 in this[_0x763a[2786]]){var _0x3536x9=mxCellPath[_0x763a[2791]](_0x3536x4,_0x3536x5),_0x3536xa=this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x9),_0x3536x12=this[_0x763a[2786]][_0x3536x5],_0x3536x9=this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x3[_0x763a[1197]](_0x3536x9));this[_0x763a[2792]](_0x3536x9,_0x3536xa,_0x3536x12[_0x763a[235]],_0x3536x12[_0x763a[236]])};for(_0x3536x5 in this[_0x763a[2786]]){_0x3536x9= mxCellPath[_0x763a[2791]](_0x3536x4,_0x3536x5),_0x3536xa= this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x9),_0x3536x12= this[_0x763a[2786]][_0x3536x5],_0x3536x9= this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x3[_0x763a[1197]](_0x3536x9)),this[_0x763a[2793]](_0x3536x9,_0x3536xa,_0x3536x12[_0x763a[235]],_0x3536x12[_0x763a[236]],_0x3536x2)}};mxCellStatePreview[_0x763a[202]][_0x763a[2792]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){if(null!= _0x3536x3){var _0x3536x9=this[_0x763a[1179]][_0x763a[502]]();if(_0x3536x9[_0x763a[1193]](_0x3536x3[_0x763a[246]])){_0x3536x3[_0x763a[2080]]= !0;this[_0x763a[1179]][_0x763a[441]][_0x763a[2267]](_0x3536x2,_0x3536x3[_0x763a[246]]);_0x3536x2= _0x3536x9[_0x763a[1721]](_0x3536x3[_0x763a[246]]);var _0x3536xa=mxCellPath[_0x763a[385]](_0x3536x3[_0x763a[246]]);if((0!= _0x3536x4|| 0!= _0x3536x5)&& null!= _0x3536x2&& (!_0x3536x2[_0x763a[1500]]|| null!= this[_0x763a[2786]][_0x3536xa])){_0x3536x3[_0x763a[235]]+= _0x3536x4,_0x3536x3[_0x763a[236]]+= _0x3536x5}};_0x3536x2= _0x3536x9[_0x763a[262]](_0x3536x3[_0x763a[246]]);for(_0x3536xa= 0;_0x3536xa< _0x3536x2;_0x3536xa++){this[_0x763a[2792]](_0x3536x3,this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x9[_0x763a[263]](_0x3536x3[_0x763a[246]],_0x3536xa)),_0x3536x4,_0x3536x5)}}};mxCellStatePreview[_0x763a[202]][_0x763a[2793]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){if(null!= _0x3536x3){_0x3536x3[_0x763a[2080]]= !0;this[_0x763a[1179]][_0x763a[441]][_0x763a[2268]](_0x3536x2,_0x3536x3[_0x763a[246]]);var _0x3536xa=mxCellPath[_0x763a[385]](_0x3536x3[_0x763a[246]]),_0x3536x12=this[_0x763a[1179]][_0x763a[502]](),_0x3536x13=this[_0x763a[1179]][_0x763a[1198]](_0x3536x3[_0x763a[246]]);if((0!= _0x3536x4|| 0!= _0x3536x5)&& null!= _0x3536x13&& _0x3536x13[_0x763a[1500]]&& _0x3536x12[_0x763a[1193]](_0x3536x3[_0x763a[246]])&& (null== _0x3536x2|| _0x3536x12[_0x763a[1193]](_0x3536x2[_0x763a[246]])|| null!= this[_0x763a[2786]][_0x3536xa])){_0x3536x3[_0x763a[235]]+= _0x3536x4,_0x3536x3[_0x763a[236]]+= _0x3536x5,this[_0x763a[1179]][_0x763a[259]][_0x763a[258]](_0x3536x3)};null!= _0x3536x9&& _0x3536x9(_0x3536x3);_0x3536x2= _0x3536x12[_0x763a[262]](_0x3536x3[_0x763a[246]]);for(_0x3536xa= 0;_0x3536xa< _0x3536x2;_0x3536xa++){this[_0x763a[2793]](_0x3536x3,this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x12[_0x763a[263]](_0x3536x3[_0x763a[246]],_0x3536xa)),_0x3536x4,_0x3536x5,_0x3536x9)}}};mxCellStatePreview[_0x763a[202]][_0x763a[2790]]= function(_0x3536x2){for(var _0x3536x3=this[_0x763a[1179]][_0x763a[502]](),_0x3536x4=_0x3536x3[_0x763a[1707]](_0x3536x2[_0x763a[246]]),_0x3536x5=0;_0x3536x5< _0x3536x4;_0x3536x5++){var _0x3536x9=this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x3[_0x763a[1708]](_0x3536x2[_0x763a[246]],_0x3536x5));null!= _0x3536x9&& this[_0x763a[1194]](_0x3536x9,0,0)}};function mxConnectionConstraint(_0x3536x2,_0x3536x3){this[_0x763a[2546]]= _0x3536x2;this[_0x763a[591]]= null!= _0x3536x3?_0x3536x3:!0}mxConnectionConstraint[_0x763a[202]][_0x763a[2546]]= null;mxConnectionConstraint[_0x763a[202]][_0x763a[591]]= null;function mxGraphHandler(_0x3536x2){this[_0x763a[1179]]= _0x3536x2;this[_0x763a[1179]][_0x763a[1133]](this);this[_0x763a[2730]]= mxUtils[_0x763a[885]](this,function(){this[_0x763a[2794]]()});this[_0x763a[1179]][_0x763a[169]](mxEvent.PAN,this[_0x763a[2730]])}mxGraphHandler[_0x763a[202]][_0x763a[1179]]= null;mxGraphHandler[_0x763a[202]][_0x763a[2795]]= mxClient[_0x763a[80]]?20:50;mxGraphHandler[_0x763a[202]][_0x763a[984]]= !0;mxGraphHandler[_0x763a[202]][_0x763a[2796]]= !0;mxGraphHandler[_0x763a[202]][_0x763a[2797]]= !0;mxGraphHandler[_0x763a[202]][_0x763a[2798]]= !0;mxGraphHandler[_0x763a[202]][_0x763a[990]]= !1;mxGraphHandler[_0x763a[202]][_0x763a[2799]]= null;mxGraphHandler[_0x763a[202]][_0x763a[2800]]= null;mxGraphHandler[_0x763a[202]][_0x763a[2801]]= null;mxGraphHandler[_0x763a[202]][_0x763a[2802]]= !0;mxGraphHandler[_0x763a[202]][_0x763a[2803]]= !0;mxGraphHandler[_0x763a[202]][_0x763a[846]]= !0;mxGraphHandler[_0x763a[202]][_0x763a[2804]]= !1;mxGraphHandler[_0x763a[202]][_0x763a[2805]]= !0;mxGraphHandler[_0x763a[202]][_0x763a[923]]= 6;mxGraphHandler[_0x763a[202]][_0x763a[2806]]= _0x763a[586];mxGraphHandler[_0x763a[202]][_0x763a[2807]]= !1;mxGraphHandler[_0x763a[202]][_0x763a[253]]= null;mxGraphHandler[_0x763a[202]][_0x763a[2808]]= !1;mxGraphHandler[_0x763a[202]][_0x763a[2809]]= !0;mxGraphHandler[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxGraphHandler[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxGraphHandler[_0x763a[202]][_0x763a[2810]]= function(){return this[_0x763a[2797]]};mxGraphHandler[_0x763a[202]][_0x763a[2811]]= function(_0x3536x2){this[_0x763a[2797]]= _0x3536x2};mxGraphHandler[_0x763a[202]][_0x763a[2812]]= function(){return this[_0x763a[2798]]};mxGraphHandler[_0x763a[202]][_0x763a[2813]]= function(_0x3536x2){this[_0x763a[2798]]= _0x3536x2};mxGraphHandler[_0x763a[202]][_0x763a[2814]]= function(){return this[_0x763a[2803]]};mxGraphHandler[_0x763a[202]][_0x763a[2815]]= function(_0x3536x2){this[_0x763a[2803]]= _0x3536x2};mxGraphHandler[_0x763a[202]][_0x763a[2816]]= function(){return this[_0x763a[846]]};mxGraphHandler[_0x763a[202]][_0x763a[2817]]= function(_0x3536x2){this[_0x763a[846]]= _0x3536x2};mxGraphHandler[_0x763a[202]][_0x763a[2818]]= function(_0x3536x2){return _0x3536x2[_0x763a[736]]()};mxGraphHandler[_0x763a[202]][_0x763a[2819]]= function(_0x3536x2){return this[_0x763a[1179]][_0x763a[2692]](_0x3536x2)};mxGraphHandler[_0x763a[202]][_0x763a[787]]= function(_0x3536x2,_0x3536x3){if(!_0x3536x3[_0x763a[721]]()&& this[_0x763a[994]]()&& this[_0x763a[1179]][_0x763a[994]]()&& !this[_0x763a[1179]][_0x763a[2579]](_0x3536x3[_0x763a[727]]())&& null!= _0x3536x3[_0x763a[248]]()){var _0x3536x4=this[_0x763a[2818]](_0x3536x3);this[_0x763a[246]]= null;this[_0x763a[2820]]= this[_0x763a[2819]](_0x3536x4);this[_0x763a[2814]]()&& !this[_0x763a[2820]]&& this[_0x763a[1179]][_0x763a[2459]](_0x3536x4,_0x3536x3[_0x763a[727]]());if(this[_0x763a[2812]]()){var _0x3536x5=this[_0x763a[1179]][_0x763a[251]],_0x3536x9=_0x3536x5[_0x763a[1721]](_0x3536x4);this[_0x763a[1179]][_0x763a[1712]](_0x3536x4)&& (!_0x3536x5[_0x763a[250]](_0x3536x4)|| 1< this[_0x763a[1179]][_0x763a[2694]]()|| null!= _0x3536x9[_0x763a[1525]]&& 0< _0x3536x9[_0x763a[1525]][_0x763a[67]]|| null== _0x3536x5[_0x763a[1709]](_0x3536x4,!0)|| null== _0x3536x5[_0x763a[1709]](_0x3536x4,!1)|| this[_0x763a[1179]][_0x763a[2406]]|| this[_0x763a[1179]][_0x763a[2574]](_0x3536x3[_0x763a[727]]())&& this[_0x763a[1179]][_0x763a[2617]]())&& this[_0x763a[861]](_0x3536x4,_0x3536x3[_0x763a[730]](),_0x3536x3[_0x763a[732]]());this[_0x763a[2821]]= !0;!mxClient[_0x763a[75]]&& !mxClient[_0x763a[76]]|| _0x763a[2822]!= _0x3536x3[_0x763a[728]]()[_0x763a[301]]?_0x3536x3[_0x763a[722]]():mxClient[_0x763a[75]]&& _0x763a[2822]== _0x3536x3[_0x763a[728]]()[_0x763a[301]]&& (this[_0x763a[2821]]= !1,this[_0x763a[2823]]= null)}}};mxGraphHandler[_0x763a[202]][_0x763a[1010]]= function(){var _0x3536x2=this[_0x763a[1179]][_0x763a[902]](),_0x3536x3=this[_0x763a[1179]][_0x763a[502]](),_0x3536x4=mxUtils[_0x763a[885]](this,function(_0x3536x2){return null!= this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x2)&& _0x3536x3[_0x763a[1193]](_0x3536x2)&& null!= _0x3536x3[_0x763a[1721]](_0x3536x2)&& !_0x3536x3[_0x763a[1721]](_0x3536x2)[_0x763a[1500]]});return this[_0x763a[1179]][_0x763a[441]][_0x763a[2313]](_0x3536x3[_0x763a[1921]](_0x3536x4,_0x3536x2))};mxGraphHandler[_0x763a[202]][_0x763a[2690]]= function(_0x3536x2){return !this[_0x763a[2820]]&& this[_0x763a[1179]][_0x763a[1712]](_0x3536x2)?[_0x3536x2]:this[_0x763a[1179]][_0x763a[2629]](this[_0x763a[1179]][_0x763a[897]]())};mxGraphHandler[_0x763a[202]][_0x763a[2824]]= function(_0x3536x2){_0x3536x2= this[_0x763a[1613]](_0x3536x2);null!= _0x3536x2&& (_0x3536x2[_0x763a[244]](-1,-1),_0x3536x2[_0x763a[117]]< this[_0x763a[923]]&& (_0x3536x2[_0x763a[235]]-= (this[_0x763a[923]]- _0x3536x2[_0x763a[117]])/ 2,_0x3536x2[_0x763a[117]]= this[_0x763a[923]]),_0x3536x2[_0x763a[119]]< this[_0x763a[923]]&& (_0x3536x2[_0x763a[236]]-= (this[_0x763a[923]]- _0x3536x2[_0x763a[119]])/ 2,_0x3536x2[_0x763a[119]]= this[_0x763a[923]]));return _0x3536x2};mxGraphHandler[_0x763a[202]][_0x763a[1613]]= function(_0x3536x2){var _0x3536x3=null;if(null!= _0x3536x2&& 0< _0x3536x2[_0x763a[67]]){for(var _0x3536x4=this[_0x763a[1179]][_0x763a[502]](),_0x3536x5=0;_0x3536x5< _0x3536x2[_0x763a[67]];_0x3536x5++){if(_0x3536x4[_0x763a[1193]](_0x3536x2[_0x3536x5])|| _0x3536x4[_0x763a[250]](_0x3536x2[_0x3536x5])){var _0x3536x9=this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x2[_0x3536x5]);if(null!= _0x3536x9){var _0x3536xa=_0x3536x9;_0x3536x4[_0x763a[1193]](_0x3536x2[_0x3536x5])&& (null!= _0x3536x9[_0x763a[253]]&& null!= _0x3536x9[_0x763a[253]][_0x763a[1563]])&& (_0x3536xa= _0x3536x9[_0x763a[253]][_0x763a[1563]]);null== _0x3536x3?_0x3536x3= new mxRectangle(_0x3536xa[_0x763a[235]],_0x3536xa[_0x763a[236]],_0x3536xa[_0x763a[117]],_0x3536xa[_0x763a[119]]):_0x3536x3[_0x763a[99]](_0x3536xa)}}}};return _0x3536x3};mxGraphHandler[_0x763a[202]][_0x763a[2825]]= function(_0x3536x2){_0x3536x2= new mxRectangleShape(_0x3536x2,null,this[_0x763a[2806]]);_0x3536x2[_0x763a[1522]]= !0;this[_0x763a[2807]]?(_0x3536x2[_0x763a[507]]= mxConstants[_0x763a[1656]],_0x3536x2[_0x763a[176]](this[_0x763a[1179]][_0x763a[526]])):(_0x3536x2[_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]]!= mxConstants[_0x763a[508]]?mxConstants[_0x763a[1523]]:mxConstants[_0x763a[508]],_0x3536x2[_0x763a[176]](this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1524]]()),_0x3536x2[_0x763a[1229]]= !1);return _0x3536x2};mxGraphHandler[_0x763a[202]][_0x763a[861]]= function(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[246]]= _0x3536x2;this[_0x763a[2823]]= mxUtils[_0x763a[2196]](this[_0x763a[1179]][_0x763a[526]],_0x3536x3,_0x3536x4);this[_0x763a[895]]= this[_0x763a[2690]](this[_0x763a[246]]);this[_0x763a[1562]]= this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1799]](this[_0x763a[895]]);this[_0x763a[2826]]= this[_0x763a[2824]](this[_0x763a[895]]);this[_0x763a[990]]&& (this[_0x763a[2799]]= new mxGuide(this[_0x763a[1179]],this[_0x763a[1010]]()))};mxGraphHandler[_0x763a[202]][_0x763a[2827]]= function(_0x3536x2){return null!= this[_0x763a[2799]]?this[_0x763a[2799]][_0x763a[1019]](_0x3536x2[_0x763a[727]]()):!0};mxGraphHandler[_0x763a[202]][_0x763a[1021]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[2808]]?this[_0x763a[1179]][_0x763a[441]][_0x763a[255]]:1;_0x3536x2[_0x763a[235]]= this[_0x763a[1179]][_0x763a[1021]](_0x3536x2[_0x763a[235]]/ _0x3536x3)* _0x3536x3;_0x3536x2[_0x763a[236]]= this[_0x763a[1179]][_0x763a[1021]](_0x3536x2[_0x763a[236]]/ _0x3536x3)* _0x3536x3;return _0x3536x2};mxGraphHandler[_0x763a[202]][_0x763a[788]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]];if(!_0x3536x3[_0x763a[721]]()&& _0x3536x4[_0x763a[1009]]&& null!= this[_0x763a[246]]&& null!= this[_0x763a[2823]]&& null!= this[_0x763a[1562]]){var _0x3536x5=mxUtils[_0x763a[2196]](_0x3536x4[_0x763a[526]],_0x3536x3[_0x763a[730]](),_0x3536x3[_0x763a[732]]()),_0x3536x9=_0x3536x5[_0x763a[235]]- this[_0x763a[2823]][_0x763a[235]],_0x3536xa=_0x3536x5[_0x763a[236]]- this[_0x763a[2823]][_0x763a[236]],_0x3536x5=_0x3536x4[_0x763a[2353]];if(null!= this[_0x763a[253]]|| Math[_0x763a[425]](_0x3536x9)> _0x3536x5|| Math[_0x763a[425]](_0x3536xa)> _0x3536x5){null== this[_0x763a[1016]]&& (this[_0x763a[1016]]= new mxCellHighlight(this[_0x763a[1179]],mxConstants.DROP_TARGET_COLOR,3));null== this[_0x763a[253]]&& (this[_0x763a[253]]= this[_0x763a[2825]](this[_0x763a[1562]]));var _0x3536x12=_0x3536x4[_0x763a[1018]](_0x3536x3[_0x763a[727]]()),_0x3536x5=!0;if(null!= this[_0x763a[2799]]&& this[_0x763a[2827]](_0x3536x3)){_0x3536xa= this[_0x763a[2799]][_0x763a[582]](this[_0x763a[1562]], new mxPoint(_0x3536x9,_0x3536xa),_0x3536x12),_0x3536x5= !1,_0x3536x9= _0x3536xa[_0x763a[235]],_0x3536xa= _0x3536xa[_0x763a[236]]}else {if(_0x3536x12){var _0x3536x13=_0x3536x4[_0x763a[249]]()[_0x763a[513]],_0x3536x14=_0x3536x4[_0x763a[249]]()[_0x763a[255]],_0x3536x12=this[_0x763a[1562]][_0x763a[235]]- (_0x3536x4[_0x763a[1021]](this[_0x763a[1562]][_0x763a[235]]/ _0x3536x14- _0x3536x13[_0x763a[235]])+ _0x3536x13[_0x763a[235]])* _0x3536x14,_0x3536x13=this[_0x763a[1562]][_0x763a[236]]- (_0x3536x4[_0x763a[1021]](this[_0x763a[1562]][_0x763a[236]]/ _0x3536x14- _0x3536x13[_0x763a[236]])+ _0x3536x13[_0x763a[236]])* _0x3536x14,_0x3536xa=this[_0x763a[1021]]( new mxPoint(_0x3536x9,_0x3536xa)),_0x3536x9=_0x3536xa[_0x763a[235]]- _0x3536x12,_0x3536xa=_0x3536xa[_0x763a[236]]- _0x3536x13}};null!= this[_0x763a[2799]]&& _0x3536x5&& this[_0x763a[2799]][_0x763a[801]]();_0x3536x4[_0x763a[2578]](_0x3536x3[_0x763a[727]]())&& (Math[_0x763a[425]](_0x3536x9)> Math[_0x763a[425]](_0x3536xa)?_0x3536xa= 0:_0x3536x9= 0);this[_0x763a[2800]]= _0x3536x9;this[_0x763a[2801]]= _0x3536xa;this[_0x763a[2794]]();_0x3536x5= null;_0x3536xa= _0x3536x3[_0x763a[736]]();_0x3536x4[_0x763a[1015]]()&& this[_0x763a[2796]]&& (_0x3536x5= _0x3536x4[_0x763a[564]](this[_0x763a[895]],_0x3536x3[_0x763a[727]](),_0x3536xa));_0x3536x12= _0x3536x5;for(_0x3536x13= _0x3536x4[_0x763a[502]]();null!= _0x3536x12&& _0x3536x12!= this[_0x763a[895]][0];){_0x3536x12= _0x3536x13[_0x763a[1197]](_0x3536x12)};var _0x3536x14=_0x3536x4[_0x763a[2574]](_0x3536x3[_0x763a[727]]())&& _0x3536x4[_0x763a[2617]]()&& this[_0x763a[2810]](),_0x3536x9=_0x3536x4[_0x763a[249]]()[_0x763a[248]](_0x3536x5),_0x3536x15=!1;null!= _0x3536x9&& null== _0x3536x12&& (_0x3536x13[_0x763a[1197]](this[_0x763a[246]])!= _0x3536x5|| _0x3536x14)?(this[_0x763a[772]]!= _0x3536x5&& (this[_0x763a[772]]= _0x3536x5,this[_0x763a[2828]](mxConstants.DROP_TARGET_COLOR)),_0x3536x15= !0):(this[_0x763a[772]]= null,this[_0x763a[2804]]&& (null!= _0x3536xa&& 1== this[_0x763a[895]][_0x763a[67]]&& _0x3536x4[_0x763a[502]]()[_0x763a[1193]](_0x3536xa)&& _0x3536x4[_0x763a[2565]](_0x3536xa))&& (_0x3536x9= _0x3536x4[_0x763a[249]]()[_0x763a[248]](_0x3536xa),null!= _0x3536x9&& (_0x3536x4= null== _0x3536x4[_0x763a[2500]](null,this[_0x763a[246]],_0x3536xa)?mxConstants[_0x763a[2829]]:mxConstants[_0x763a[2830]],this[_0x763a[2828]](_0x3536x4),_0x3536x15= !0)));null!= _0x3536x9&& _0x3536x15?this[_0x763a[1016]][_0x763a[1016]](_0x3536x9):this[_0x763a[1016]][_0x763a[801]]()};_0x3536x3[_0x763a[722]]();mxEvent[_0x763a[722]](_0x3536x3[_0x763a[727]]())}else {if((this[_0x763a[2812]]()|| this[_0x763a[2810]]())&& this[_0x763a[2802]]&& !_0x3536x3[_0x763a[721]]()&& null!= _0x3536x3[_0x763a[248]]()&& !_0x3536x4[_0x763a[1009]]){_0x3536x9= _0x3536x4[_0x763a[2599]](_0x3536x3[_0x763a[736]]()),null== _0x3536x9&& (_0x3536x4[_0x763a[994]]()&& _0x3536x4[_0x763a[1712]](_0x3536x3[_0x763a[736]]()))&& (_0x3536x9= _0x3536x4[_0x763a[502]]()[_0x763a[250]](_0x3536x3[_0x763a[736]]())?mxConstants[_0x763a[2831]]:mxConstants[_0x763a[2832]]),_0x3536x3[_0x763a[248]]()[_0x763a[1609]](_0x3536x9),_0x3536x3[_0x763a[722]]()}}};mxGraphHandler[_0x763a[202]][_0x763a[2794]]= function(){null!= this[_0x763a[253]]&& (this[_0x763a[253]][_0x763a[1562]]= new mxRectangle(Math[_0x763a[488]](this[_0x763a[2826]][_0x763a[235]]+ this[_0x763a[2800]]- this[_0x763a[1179]][_0x763a[1136]]),Math[_0x763a[488]](this[_0x763a[2826]][_0x763a[236]]+ this[_0x763a[2801]]- this[_0x763a[1179]][_0x763a[1137]]),this[_0x763a[2826]][_0x763a[117]],this[_0x763a[2826]][_0x763a[119]]),this[_0x763a[253]][_0x763a[258]]())};mxGraphHandler[_0x763a[202]][_0x763a[2828]]= function(_0x3536x2){null!= this[_0x763a[1016]]&& this[_0x763a[1016]][_0x763a[2828]](_0x3536x2)};mxGraphHandler[_0x763a[202]][_0x763a[789]]= function(_0x3536x2,_0x3536x3){if(!_0x3536x3[_0x763a[721]]()){var _0x3536x4=this[_0x763a[1179]];if(null!= this[_0x763a[246]]&& null!= this[_0x763a[2823]]&& null!= this[_0x763a[253]]&& null!= this[_0x763a[2800]]&& null!= this[_0x763a[2801]]){var _0x3536x5=_0x3536x4[_0x763a[249]]()[_0x763a[255]],_0x3536x9=_0x3536x4[_0x763a[2574]](_0x3536x3[_0x763a[727]]())&& _0x3536x4[_0x763a[2617]]()&& this[_0x763a[2810]](),_0x3536xa=this[_0x763a[2800]]/ _0x3536x5,_0x3536x5=this[_0x763a[2801]]/ _0x3536x5,_0x3536x12=_0x3536x3[_0x763a[736]]();this[_0x763a[2804]]&& null== this[_0x763a[772]]&& null!= _0x3536x12&& _0x3536x4[_0x763a[502]]()[_0x763a[1193]](_0x3536x12)&& _0x3536x4[_0x763a[2565]](_0x3536x12)&& _0x3536x4[_0x763a[2581]](null,this[_0x763a[246]],_0x3536x12)?_0x3536x4[_0x763a[2433]][_0x763a[807]](this[_0x763a[246]],_0x3536x12,_0x3536x3[_0x763a[727]]()):(_0x3536x12= this[_0x763a[772]],_0x3536x4[_0x763a[2655]]()&& _0x3536x4[_0x763a[2686]](_0x3536x12,this[_0x763a[895]],_0x3536x3[_0x763a[727]]())?_0x3536x4[_0x763a[853]](_0x3536x12,this[_0x763a[895]],null,_0x3536xa,_0x3536x5):this[_0x763a[834]](this[_0x763a[895]],_0x3536xa,_0x3536x5,_0x3536x9,this[_0x763a[772]],_0x3536x3[_0x763a[727]]()))}else {this[_0x763a[2814]]()&& (this[_0x763a[2820]]&& null!= this[_0x763a[246]])&& this[_0x763a[2833]](_0x3536x3)}};this[_0x763a[2821]]&& _0x3536x3[_0x763a[722]]();this[_0x763a[862]]()};mxGraphHandler[_0x763a[202]][_0x763a[2833]]= function(_0x3536x2){this[_0x763a[1179]][_0x763a[2459]](this[_0x763a[246]],_0x3536x2[_0x763a[727]]())};mxGraphHandler[_0x763a[202]][_0x763a[862]]= function(){this[_0x763a[2834]]();this[_0x763a[2820]]= this[_0x763a[2821]]= !1;this[_0x763a[772]]= this[_0x763a[246]]= this[_0x763a[2823]]= this[_0x763a[2835]]= this[_0x763a[2801]]= this[_0x763a[2800]]= null};mxGraphHandler[_0x763a[202]][_0x763a[2836]]= function(_0x3536x2,_0x3536x3,_0x3536x4){if(this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1193]](_0x3536x2)){_0x3536x2= this[_0x763a[1179]][_0x763a[249]]()[_0x763a[248]](_0x3536x2);_0x3536x4= mxUtils[_0x763a[2196]](this[_0x763a[1179]][_0x763a[526]],mxEvent[_0x763a[731]](_0x3536x4),mxEvent[_0x763a[733]](_0x3536x4));var _0x3536x5=mxUtils[_0x763a[431]](mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_ROTATION)|| 0);if(0!= _0x3536x5){_0x3536x3= Math[_0x763a[426]](-_0x3536x5);var _0x3536x5=Math[_0x763a[427]](-_0x3536x5),_0x3536x9= new mxPoint(_0x3536x2[_0x763a[241]](),_0x3536x2[_0x763a[242]]());_0x3536x4= mxUtils[_0x763a[432]](_0x3536x4,_0x3536x3,_0x3536x5,_0x3536x9)};return null!= _0x3536x2&& !mxUtils[_0x763a[442]](_0x3536x2,_0x3536x4[_0x763a[235]],_0x3536x4[_0x763a[236]])};return !1};mxGraphHandler[_0x763a[202]][_0x763a[834]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){_0x3536x5&& (_0x3536x2= this[_0x763a[1179]][_0x763a[2615]](_0x3536x2));null== _0x3536x9&& (this[_0x763a[2816]]()&& this[_0x763a[2836]](this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1197]](this[_0x763a[246]]),_0x3536x2,_0x3536xa))&& (_0x3536x9= this[_0x763a[1179]][_0x763a[902]]());_0x3536x2= this[_0x763a[1179]][_0x763a[834]](_0x3536x2,_0x3536x3- this[_0x763a[1179]][_0x763a[1136]]/ this[_0x763a[1179]][_0x763a[441]][_0x763a[255]],_0x3536x4- this[_0x763a[1179]][_0x763a[1137]]/ this[_0x763a[1179]][_0x763a[441]][_0x763a[255]],_0x3536x5,_0x3536x9,_0x3536xa);this[_0x763a[2814]]()&& this[_0x763a[2805]]&& this[_0x763a[1179]][_0x763a[2564]](_0x3536x2[0]);_0x3536x5&& this[_0x763a[1179]][_0x763a[904]](_0x3536x2)};mxGraphHandler[_0x763a[202]][_0x763a[2834]]= function(){null!= this[_0x763a[253]]&& (this[_0x763a[253]][_0x763a[515]](),this[_0x763a[253]]= null);null!= this[_0x763a[2799]]&& (this[_0x763a[2799]][_0x763a[515]](),this[_0x763a[2799]]= null);null!= this[_0x763a[1016]]&& (this[_0x763a[1016]][_0x763a[515]](),this[_0x763a[1016]]= null)};mxGraphHandler[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[1179]][_0x763a[1148]](this);this[_0x763a[1179]][_0x763a[745]](this[_0x763a[2730]]);this[_0x763a[2834]]()};function mxPanningHandler(_0x3536x2,_0x3536x3){null!= _0x3536x2&& (this[_0x763a[1179]]= _0x3536x2,this[_0x763a[1033]]= _0x3536x3,this[_0x763a[1179]][_0x763a[1133]](this),this[_0x763a[176]]())}mxPanningHandler[_0x763a[202]]= new mxPopupMenu;mxPanningHandler[_0x763a[202]][_0x763a[196]]= mxPanningHandler;mxPanningHandler[_0x763a[202]][_0x763a[1179]]= null;mxPanningHandler[_0x763a[202]][_0x763a[2837]]= null;mxPanningHandler[_0x763a[202]][_0x763a[2838]]= null;mxPanningHandler[_0x763a[202]][_0x763a[2839]]= !0;mxPanningHandler[_0x763a[202]][_0x763a[2840]]= !1;mxPanningHandler[_0x763a[202]][_0x763a[2841]]= !0;mxPanningHandler[_0x763a[202]][_0x763a[2842]]= !0;mxPanningHandler[_0x763a[202]][_0x763a[2843]]= !1;mxPanningHandler[_0x763a[202]][_0x763a[2844]]= !0;mxPanningHandler[_0x763a[202]][_0x763a[2845]]= !1;mxPanningHandler[_0x763a[202]][_0x763a[2431]]= !0;mxPanningHandler[_0x763a[202]][_0x763a[2846]]= function(){return this[_0x763a[2431]]};mxPanningHandler[_0x763a[202]][_0x763a[2847]]= function(_0x3536x2){this[_0x763a[2431]]= _0x3536x2};mxPanningHandler[_0x763a[202]][_0x763a[176]]= function(){mxPopupMenu[_0x763a[202]][_0x763a[176]][_0x763a[183]](this);mxEvent[_0x763a[169]](this[_0x763a[485]],mxClient[_0x763a[754]]?_0x763a[756]:_0x763a[752],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[1179]][_0x763a[2276]][_0x763a[801]]()}))};mxPanningHandler[_0x763a[202]][_0x763a[2848]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[727]]();return this[_0x763a[2840]]&& (this[_0x763a[2843]]|| null== _0x3536x2[_0x763a[248]]())&& mxEvent[_0x763a[1158]](_0x3536x3)|| mxEvent[_0x763a[775]](_0x3536x3)&& mxEvent[_0x763a[774]](_0x3536x3)|| this[_0x763a[2839]]&& mxEvent[_0x763a[737]](_0x3536x3)};mxPanningHandler[_0x763a[202]][_0x763a[787]]= function(_0x3536x2,_0x3536x3){if(!_0x3536x3[_0x763a[721]]()&& this[_0x763a[994]]()){this[_0x763a[1032]]();this[_0x763a[2741]]= -this[_0x763a[1179]][_0x763a[526]][_0x763a[360]];this[_0x763a[2742]]= -this[_0x763a[1179]][_0x763a[526]][_0x763a[190]];var _0x3536x4=mxUtils[_0x763a[2196]](this[_0x763a[1179]][_0x763a[526]],_0x3536x3[_0x763a[730]](),_0x3536x3[_0x763a[732]]());this[_0x763a[2837]]= _0x3536x4[_0x763a[235]];this[_0x763a[2838]]= _0x3536x4[_0x763a[236]];this[_0x763a[2849]]= this[_0x763a[737]](_0x3536x3);this[_0x763a[2850]]= this[_0x763a[2846]]()&& this[_0x763a[2848]](_0x3536x3);this[_0x763a[2739]]= _0x3536x3[_0x763a[730]]();this[_0x763a[2740]]= _0x3536x3[_0x763a[732]]();this[_0x763a[2850]]&& this[_0x763a[2851]](_0x3536x3)}};mxPanningHandler[_0x763a[202]][_0x763a[2851]]= function(_0x3536x2){_0x3536x2[_0x763a[722]]()};mxPanningHandler[_0x763a[202]][_0x763a[788]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x3536x3[_0x763a[730]]()- this[_0x763a[2739]],_0x3536x5=_0x3536x3[_0x763a[732]]()- this[_0x763a[2740]];if(this[_0x763a[1124]]){this[_0x763a[2844]]&& (this[_0x763a[2845]]&& (_0x3536x4= this[_0x763a[1179]][_0x763a[1021]](_0x3536x4),_0x3536x5= this[_0x763a[1179]][_0x763a[1021]](_0x3536x5)),this[_0x763a[1179]][_0x763a[1135]](_0x3536x4+ this[_0x763a[2741]],_0x3536x5+ this[_0x763a[2742]])),this[_0x763a[746]]( new mxEventObject(mxEvent.PAN,_0x763a[763],_0x3536x3)),_0x3536x3[_0x763a[722]]()}else {if(this[_0x763a[2850]]){var _0x3536x9=this[_0x763a[1124]];this[_0x763a[1124]]= Math[_0x763a[425]](_0x3536x4)> this[_0x763a[1179]][_0x763a[2353]]|| Math[_0x763a[425]](_0x3536x5)> this[_0x763a[1179]][_0x763a[2353]];!_0x3536x9&& this[_0x763a[1124]]&& this[_0x763a[746]]( new mxEventObject(mxEvent.PAN_START,_0x763a[763],_0x3536x3))}}};mxPanningHandler[_0x763a[202]][_0x763a[789]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=Math[_0x763a[425]](_0x3536x3[_0x763a[730]]()- this[_0x763a[2739]]),_0x3536x5=Math[_0x763a[425]](_0x3536x3[_0x763a[732]]()- this[_0x763a[2740]]);if(this[_0x763a[1124]]){if(!this[_0x763a[1179]][_0x763a[2365]]|| !mxUtils[_0x763a[1134]](this[_0x763a[1179]][_0x763a[526]])){_0x3536x4= _0x3536x3[_0x763a[730]]()- this[_0x763a[2739]];_0x3536x5= _0x3536x3[_0x763a[732]]()- this[_0x763a[2740]];this[_0x763a[2845]]&& (_0x3536x4= this[_0x763a[1179]][_0x763a[1021]](_0x3536x4),_0x3536x5= this[_0x763a[1179]][_0x763a[1021]](_0x3536x5));var _0x3536x9=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]],_0x3536xa=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[513]];this[_0x763a[1179]][_0x763a[1135]](0,0);this[_0x763a[1135]](_0x3536xa[_0x763a[235]]+ _0x3536x4/ _0x3536x9,_0x3536xa[_0x763a[236]]+ _0x3536x5/ _0x3536x9)};this[_0x763a[1124]]= !1;this[_0x763a[746]]( new mxEventObject(mxEvent.PAN_END,_0x763a[763],_0x3536x3));_0x3536x3[_0x763a[722]]()}else {this[_0x763a[2849]]&& (_0x3536x4< this[_0x763a[1179]][_0x763a[2353]]&& _0x3536x5< this[_0x763a[1179]][_0x763a[2353]])&& (_0x3536x4= this[_0x763a[2852]](_0x3536x3),this[_0x763a[1179]][_0x763a[994]]()&& this[_0x763a[2841]]&& null!= _0x3536x4&& !this[_0x763a[1179]][_0x763a[2692]](_0x3536x4)?this[_0x763a[1179]][_0x763a[2450]](_0x3536x4):this[_0x763a[2842]]&& null== _0x3536x4&& this[_0x763a[1179]][_0x763a[2440]](),this[_0x763a[1179]][_0x763a[2276]][_0x763a[801]](),_0x3536x5= mxUtils[_0x763a[444]](),_0x3536x5= new mxPoint(_0x3536x3[_0x763a[730]]()+ _0x3536x5[_0x763a[235]],_0x3536x3[_0x763a[732]]()+ _0x3536x5[_0x763a[236]]),this[_0x763a[152]](_0x3536x5[_0x763a[235]]+ 1,_0x3536x5[_0x763a[236]]+ 1,_0x3536x4,_0x3536x3[_0x763a[727]]()),_0x3536x3[_0x763a[722]]())};this[_0x763a[2849]]= this[_0x763a[2850]]= !1};mxPanningHandler[_0x763a[202]][_0x763a[2852]]= function(_0x3536x2){return _0x3536x2[_0x763a[736]]()};mxPanningHandler[_0x763a[202]][_0x763a[1135]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1147]](_0x3536x2,_0x3536x3)};mxPanningHandler[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[1179]][_0x763a[1148]](this);mxPopupMenu[_0x763a[202]][_0x763a[515]][_0x763a[183]](this)};function mxCellMarker(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){mxEventSource[_0x763a[239]](this);null!= _0x3536x2&& (this[_0x763a[1179]]= _0x3536x2,this[_0x763a[2853]]= null!= _0x3536x3?_0x3536x3:mxConstants[_0x763a[2854]],this[_0x763a[2855]]= null!= _0x3536x3?_0x3536x4:mxConstants[_0x763a[2856]],this[_0x763a[2857]]= null!= _0x3536x5?_0x3536x5:mxConstants[_0x763a[2858]],this[_0x763a[1016]]= new mxCellHighlight(_0x3536x2))}mxUtils[_0x763a[1284]](mxCellMarker,mxEventSource);mxCellMarker[_0x763a[202]][_0x763a[1179]]= null;mxCellMarker[_0x763a[202]][_0x763a[984]]= !0;mxCellMarker[_0x763a[202]][_0x763a[2857]]= mxConstants[_0x763a[2858]];mxCellMarker[_0x763a[202]][_0x763a[2859]]= !1;mxCellMarker[_0x763a[202]][_0x763a[2853]]= null;mxCellMarker[_0x763a[202]][_0x763a[2855]]= null;mxCellMarker[_0x763a[202]][_0x763a[2860]]= null;mxCellMarker[_0x763a[202]][_0x763a[2861]]= null;mxCellMarker[_0x763a[202]][_0x763a[2862]]= null;mxCellMarker[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxCellMarker[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxCellMarker[_0x763a[202]][_0x763a[2863]]= function(_0x3536x2){this[_0x763a[2857]]= _0x3536x2};mxCellMarker[_0x763a[202]][_0x763a[2864]]= function(){return this[_0x763a[2857]]};mxCellMarker[_0x763a[202]][_0x763a[2865]]= function(_0x3536x2){this[_0x763a[2859]]= _0x3536x2};mxCellMarker[_0x763a[202]][_0x763a[2866]]= function(){return this[_0x763a[2859]]};mxCellMarker[_0x763a[202]][_0x763a[2867]]= function(){return null!= this[_0x763a[2861]]};mxCellMarker[_0x763a[202]][_0x763a[2868]]= function(){return this[_0x763a[2861]]};mxCellMarker[_0x763a[202]][_0x763a[2869]]= function(){return this[_0x763a[2862]]};mxCellMarker[_0x763a[202]][_0x763a[862]]= function(){this[_0x763a[2861]]= null;null!= this[_0x763a[2862]]&& (this[_0x763a[2862]]= null,this[_0x763a[2870]]())};mxCellMarker[_0x763a[202]][_0x763a[2871]]= function(_0x3536x2){var _0x3536x3=null;if(this[_0x763a[994]]()){var _0x3536x3=this[_0x763a[248]](_0x3536x2),_0x3536x4=null!= _0x3536x3?this[_0x763a[2872]](_0x3536x3):!1;_0x3536x2= this[_0x763a[2873]](_0x3536x2[_0x763a[727]](),_0x3536x3,_0x3536x4);this[_0x763a[2861]]= _0x3536x4?_0x3536x3:null;if(_0x3536x3!= this[_0x763a[2862]]|| _0x3536x2!= this[_0x763a[2860]]){this[_0x763a[2860]]= _0x3536x2,null!= _0x3536x3&& null!= this[_0x763a[2860]]?(this[_0x763a[2862]]= _0x3536x3,this[_0x763a[811]]()):null!= this[_0x763a[2862]]&& (this[_0x763a[2862]]= null,this[_0x763a[2870]]())}};return _0x3536x3};mxCellMarker[_0x763a[202]][_0x763a[2874]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[248]](_0x3536x2);null!= _0x3536x4&& (this[_0x763a[2860]]= null!= _0x3536x3?_0x3536x3:this[_0x763a[2853]],this[_0x763a[2862]]= _0x3536x4,this[_0x763a[811]]())};mxCellMarker[_0x763a[202]][_0x763a[811]]= function(){this[_0x763a[1016]][_0x763a[2828]](this[_0x763a[2860]]);this[_0x763a[1016]][_0x763a[1016]](this[_0x763a[2862]]);this[_0x763a[746]]( new mxEventObject(mxEvent.MARK,_0x763a[724],this[_0x763a[2862]]))};mxCellMarker[_0x763a[202]][_0x763a[2870]]= function(){this[_0x763a[811]]()};mxCellMarker[_0x763a[202]][_0x763a[2872]]= function(_0x3536x2){return !0};mxCellMarker[_0x763a[202]][_0x763a[2873]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return _0x3536x4?this[_0x763a[2853]]:this[_0x763a[2855]]};mxCellMarker[_0x763a[202]][_0x763a[248]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[249]]();cell= this[_0x763a[736]](_0x3536x2);_0x3536x3= this[_0x763a[2875]](_0x3536x3[_0x763a[248]](cell));return null!= _0x3536x3&& this[_0x763a[1825]](_0x3536x3,_0x3536x2)?_0x3536x3:null};mxCellMarker[_0x763a[202]][_0x763a[736]]= function(_0x3536x2){return _0x3536x2[_0x763a[736]]()};mxCellMarker[_0x763a[202]][_0x763a[2875]]= function(_0x3536x2){return _0x3536x2};mxCellMarker[_0x763a[202]][_0x763a[1825]]= function(_0x3536x2,_0x3536x3){return this[_0x763a[2859]]?mxUtils[_0x763a[2876]](_0x3536x2,_0x3536x3[_0x763a[734]](),_0x3536x3[_0x763a[735]](),this[_0x763a[2857]],mxConstants.MIN_HOTSPOT_SIZE,mxConstants.MAX_HOTSPOT_SIZE):!0};mxCellMarker[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[1179]][_0x763a[249]]()[_0x763a[745]](this[_0x763a[2877]]);this[_0x763a[1179]][_0x763a[502]]()[_0x763a[745]](this[_0x763a[2877]]);this[_0x763a[1016]][_0x763a[515]]()};function mxSelectionCellsHandler(_0x3536x2){mxEventSource[_0x763a[239]](this);this[_0x763a[1179]]= _0x3536x2;this[_0x763a[2878]]= new mxDictionary;this[_0x763a[1179]][_0x763a[1133]](this);this[_0x763a[2731]]= mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x4){this[_0x763a[994]]()&& this[_0x763a[802]]()});this[_0x763a[1179]][_0x763a[2435]]()[_0x763a[169]](mxEvent.CHANGE,this[_0x763a[2731]]);this[_0x763a[1179]][_0x763a[502]]()[_0x763a[169]](mxEvent.CHANGE,this[_0x763a[2731]]);this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.SCALE,this[_0x763a[2731]]);this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.TRANSLATE,this[_0x763a[2731]]);this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.SCALE_AND_TRANSLATE,this[_0x763a[2731]]);this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.DOWN,this[_0x763a[2731]]);this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.UP,this[_0x763a[2731]])}mxUtils[_0x763a[1284]](mxSelectionCellsHandler,mxEventSource);mxSelectionCellsHandler[_0x763a[202]][_0x763a[1179]]= null;mxSelectionCellsHandler[_0x763a[202]][_0x763a[984]]= !0;mxSelectionCellsHandler[_0x763a[202]][_0x763a[2731]]= null;mxSelectionCellsHandler[_0x763a[202]][_0x763a[2879]]= 100;mxSelectionCellsHandler[_0x763a[202]][_0x763a[2878]]= null;mxSelectionCellsHandler[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxSelectionCellsHandler[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxSelectionCellsHandler[_0x763a[202]][_0x763a[2596]]= function(_0x3536x2){return this[_0x763a[2878]][_0x763a[203]](_0x3536x2)};mxSelectionCellsHandler[_0x763a[202]][_0x763a[862]]= function(){this[_0x763a[2878]][_0x763a[209]](function(_0x3536x2,_0x3536x3){_0x3536x3[_0x763a[862]][_0x763a[183]](_0x3536x3)})};mxSelectionCellsHandler[_0x763a[202]][_0x763a[802]]= function(){var _0x3536x2=this[_0x763a[2878]];this[_0x763a[2878]]= new mxDictionary;for(var _0x3536x3=this[_0x763a[1179]][_0x763a[897]](),_0x3536x4=0;_0x3536x4< _0x3536x3[_0x763a[67]];_0x3536x4++){var _0x3536x5=this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x3[_0x3536x4]);if(null!= _0x3536x5){var _0x3536x9=_0x3536x2[_0x763a[205]](_0x3536x3[_0x3536x4]);null!= _0x3536x9&& (_0x3536x9[_0x763a[724]]!= _0x3536x5?(_0x3536x9[_0x763a[515]](),_0x3536x9= null):_0x3536x9[_0x763a[258]]());null== _0x3536x9&& (_0x3536x9= this[_0x763a[1179]][_0x763a[2709]](_0x3536x5),this[_0x763a[746]]( new mxEventObject(mxEvent.ADD,_0x763a[724],_0x3536x5)));null!= _0x3536x9&& this[_0x763a[2878]][_0x763a[204]](_0x3536x3[_0x3536x4],_0x3536x9)}};_0x3536x2[_0x763a[209]](mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x3){this[_0x763a[746]]( new mxEventObject(mxEvent.REMOVE,_0x763a[724],_0x3536x3[_0x763a[724]]));_0x3536x3[_0x763a[515]]()}))};mxSelectionCellsHandler[_0x763a[202]][_0x763a[787]]= function(_0x3536x2,_0x3536x3){if(this[_0x763a[1179]][_0x763a[994]]()&& this[_0x763a[994]]()){var _0x3536x4=[_0x3536x2,_0x3536x3];this[_0x763a[2878]][_0x763a[209]](function(_0x3536x2,_0x3536x3){_0x3536x3[_0x763a[787]][_0x763a[183]](_0x3536x3,_0x3536x4)})}};mxSelectionCellsHandler[_0x763a[202]][_0x763a[788]]= function(_0x3536x2,_0x3536x3){if(this[_0x763a[1179]][_0x763a[994]]()&& this[_0x763a[994]]()){var _0x3536x4=[_0x3536x2,_0x3536x3];this[_0x763a[2878]][_0x763a[209]](function(_0x3536x2,_0x3536x3){_0x3536x3[_0x763a[788]][_0x763a[183]](_0x3536x3,_0x3536x4)})}};mxSelectionCellsHandler[_0x763a[202]][_0x763a[789]]= function(_0x3536x2,_0x3536x3){if(this[_0x763a[1179]][_0x763a[994]]()&& this[_0x763a[994]]()){var _0x3536x4=[_0x3536x2,_0x3536x3];this[_0x763a[2878]][_0x763a[209]](function(_0x3536x2,_0x3536x3){_0x3536x3[_0x763a[789]][_0x763a[183]](_0x3536x3,_0x3536x4)})}};mxSelectionCellsHandler[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[1179]][_0x763a[1148]](this);null!= this[_0x763a[2731]]&& (this[_0x763a[1179]][_0x763a[2435]]()[_0x763a[745]](this[_0x763a[2731]]),this[_0x763a[1179]][_0x763a[502]]()[_0x763a[745]](this[_0x763a[2731]]),this[_0x763a[1179]][_0x763a[249]]()[_0x763a[745]](this[_0x763a[2731]]),this[_0x763a[2731]]= null)};function mxConnectionHandler(_0x3536x2,_0x3536x3){mxEventSource[_0x763a[239]](this);null!= _0x3536x2&& (this[_0x763a[1179]]= _0x3536x2,this[_0x763a[1033]]= _0x3536x3,this[_0x763a[176]]())}mxUtils[_0x763a[1284]](mxConnectionHandler,mxEventSource);mxConnectionHandler[_0x763a[202]][_0x763a[1179]]= null;mxConnectionHandler[_0x763a[202]][_0x763a[1033]]= !0;mxConnectionHandler[_0x763a[202]][_0x763a[2880]]= !1;mxConnectionHandler[_0x763a[202]][_0x763a[2881]]= !1;mxConnectionHandler[_0x763a[202]][_0x763a[2882]]= null;mxConnectionHandler[_0x763a[202]][_0x763a[2883]]= !1;mxConnectionHandler[_0x763a[202]][_0x763a[984]]= !0;mxConnectionHandler[_0x763a[202]][_0x763a[804]]= !0;mxConnectionHandler[_0x763a[202]][_0x763a[2884]]= !1;mxConnectionHandler[_0x763a[202]][_0x763a[2885]]= null;mxConnectionHandler[_0x763a[202]][_0x763a[2886]]= null;mxConnectionHandler[_0x763a[202]][_0x763a[267]]= null;mxConnectionHandler[_0x763a[202]][_0x763a[2887]]= !1;mxConnectionHandler[_0x763a[202]][_0x763a[2888]]= !0;mxConnectionHandler[_0x763a[202]][_0x763a[2889]]= 500;mxConnectionHandler[_0x763a[202]][_0x763a[2890]]= !1;mxConnectionHandler[_0x763a[202]][_0x763a[2891]]= !1;mxConnectionHandler[_0x763a[202]][_0x763a[2892]]= 4;mxConnectionHandler[_0x763a[202]][_0x763a[2893]]= 0;mxConnectionHandler[_0x763a[202]][_0x763a[2894]]= 0;mxConnectionHandler[_0x763a[202]][_0x763a[2895]]= !1;mxConnectionHandler[_0x763a[202]][_0x763a[2823]]= null;mxConnectionHandler[_0x763a[202]][_0x763a[2896]]= new mxPoint(0,mxConstants.TOOLTIP_VERTICAL_OFFSET);mxConnectionHandler[_0x763a[202]][_0x763a[2897]]= null;mxConnectionHandler[_0x763a[202]][_0x763a[1176]]= null;mxConnectionHandler[_0x763a[202]][_0x763a[2898]]= null;mxConnectionHandler[_0x763a[202]][_0x763a[2899]]= 0;mxConnectionHandler[_0x763a[202]][_0x763a[2900]]= mxClient[_0x763a[47]];mxConnectionHandler[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxConnectionHandler[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxConnectionHandler[_0x763a[202]][_0x763a[2901]]= function(){return this[_0x763a[2884]]};mxConnectionHandler[_0x763a[202]][_0x763a[2902]]= function(_0x3536x2){this[_0x763a[2884]]= _0x3536x2};mxConnectionHandler[_0x763a[202]][_0x763a[2156]]= function(){var _0x3536x2= new mxPolyline([],mxConstants.INVALID_COLOR);_0x3536x2[_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]]!= mxConstants[_0x763a[508]]?mxConstants[_0x763a[1523]]:mxConstants[_0x763a[508]];_0x3536x2[_0x763a[176]](this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1524]]());_0x3536x2[_0x763a[1564]]= 0;_0x3536x2[_0x763a[1229]]= !1;_0x3536x2[_0x763a[1522]]= !0;if(this[_0x763a[1179]][_0x763a[507]]== mxConstants[_0x763a[508]]){_0x3536x2[_0x763a[252]][_0x763a[57]](_0x763a[1377],_0x763a[130])}else {var _0x3536x3=mxUtils[_0x763a[885]](this,function(_0x3536x2){_0x3536x2= mxUtils[_0x763a[2196]](this[_0x763a[1179]][_0x763a[526]],mxEvent[_0x763a[731]](_0x3536x2),mxEvent[_0x763a[733]](_0x3536x2));return this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](this[_0x763a[1179]][_0x763a[999]](_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]]))});mxEvent[_0x763a[2733]](_0x3536x2[_0x763a[252]],this[_0x763a[1179]],_0x3536x3)};return _0x3536x2};mxConnectionHandler[_0x763a[202]][_0x763a[176]]= function(){this[_0x763a[1179]][_0x763a[1133]](this);this[_0x763a[2885]]= this[_0x763a[1689]]();this[_0x763a[2886]]= new mxConstraintHandler(this[_0x763a[1179]]);this[_0x763a[1176]]= mxUtils[_0x763a[885]](this,function(_0x3536x2){null!= this[_0x763a[2903]]&& (this[_0x763a[2903]]= this[_0x763a[1179]][_0x763a[249]]()[_0x763a[248]](this[_0x763a[2903]][_0x763a[246]]));null!= this[_0x763a[2903]]?this[_0x763a[2905]](this[_0x763a[2904]],this[_0x763a[2903]]):(this[_0x763a[2906]](this[_0x763a[2904]]),this[_0x763a[257]]= null);this[_0x763a[2886]][_0x763a[862]]()});this[_0x763a[1179]][_0x763a[502]]()[_0x763a[169]](mxEvent.CHANGE,this[_0x763a[1176]]);this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.SCALE,this[_0x763a[1176]]);this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.TRANSLATE,this[_0x763a[1176]]);this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.SCALE_AND_TRANSLATE,this[_0x763a[1176]]);this[_0x763a[2898]]= mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[2906]](this[_0x763a[2904]])});this[_0x763a[1179]][_0x763a[169]](mxEvent.START_EDITING,this[_0x763a[2898]]);this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.DOWN,this[_0x763a[2898]]);this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.UP,this[_0x763a[2898]])};mxConnectionHandler[_0x763a[202]][_0x763a[2907]]= function(_0x3536x2){return !0};mxConnectionHandler[_0x763a[202]][_0x763a[1689]]= function(){var _0x3536x2= new mxCellMarker(this[_0x763a[1179]]);_0x3536x2[_0x763a[2859]]= !0;_0x3536x2[_0x763a[736]]= mxUtils[_0x763a[885]](this,function(_0x3536x3,_0x3536x4){_0x3536x4= mxCellMarker[_0x763a[202]][_0x763a[736]][_0x763a[183]](_0x3536x2,arguments);this[_0x763a[267]]= null;if(!this[_0x763a[2907]](_0x3536x4)){return null};null!= _0x3536x4?this[_0x763a[2908]]()?null!= this[_0x763a[257]]&& (this[_0x763a[267]]= this[_0x763a[2909]](this[_0x763a[257]][_0x763a[246]],_0x3536x4),null!= this[_0x763a[267]]&& 0== this[_0x763a[267]][_0x763a[67]]&& (_0x3536x4= null,this[_0x763a[2901]]()&& (this[_0x763a[267]]= null))):this[_0x763a[2671]](_0x3536x4)|| (_0x3536x4= null):this[_0x763a[2908]]()&& (!this[_0x763a[2901]]()&& !this[_0x763a[1179]][_0x763a[2406]])&& (this[_0x763a[267]]= _0x763a[110]);return _0x3536x4});_0x3536x2[_0x763a[2872]]= mxUtils[_0x763a[885]](this,function(_0x3536x3){return this[_0x763a[2908]]()?null== this[_0x763a[267]]:mxCellMarker[_0x763a[202]][_0x763a[2872]][_0x763a[183]](_0x3536x2,arguments)});_0x3536x2[_0x763a[2873]]= mxUtils[_0x763a[885]](this,function(_0x3536x3,_0x3536x4,_0x3536x5){return null== this[_0x763a[2882]]|| this[_0x763a[2908]]()?mxCellMarker[_0x763a[202]][_0x763a[2873]][_0x763a[183]](_0x3536x2,arguments):null});_0x3536x2[_0x763a[1825]]= mxUtils[_0x763a[885]](this,function(_0x3536x3,_0x3536x4){return null!= this[_0x763a[2882]]|| this[_0x763a[2908]]()?!0:mxCellMarker[_0x763a[202]][_0x763a[1825]][_0x763a[183]](_0x3536x2,arguments)});return _0x3536x2};mxConnectionHandler[_0x763a[202]][_0x763a[861]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){this[_0x763a[257]]= _0x3536x2;this[_0x763a[2823]]= new mxPoint(_0x3536x3,_0x3536x4);this[_0x763a[2897]]= null!= _0x3536x5?_0x3536x5:this[_0x763a[2910]](null);this[_0x763a[2885]][_0x763a[2860]]= this[_0x763a[2885]][_0x763a[2853]];this[_0x763a[2885]][_0x763a[2862]]= _0x3536x2;this[_0x763a[2885]][_0x763a[811]]();this[_0x763a[746]]( new mxEventObject(mxEvent.START,_0x763a[724],this[_0x763a[257]]))};mxConnectionHandler[_0x763a[202]][_0x763a[2908]]= function(){return null!= this[_0x763a[2823]]&& null!= this[_0x763a[253]]};mxConnectionHandler[_0x763a[202]][_0x763a[2671]]= function(_0x3536x2){return this[_0x763a[1179]][_0x763a[2671]](_0x3536x2)};mxConnectionHandler[_0x763a[202]][_0x763a[2672]]= function(_0x3536x2){return !0};mxConnectionHandler[_0x763a[202]][_0x763a[2909]]= function(_0x3536x2,_0x3536x3){return !this[_0x763a[2672]](_0x3536x3)?_0x763a[110]:this[_0x763a[1179]][_0x763a[2500]](null,_0x3536x2,_0x3536x3)};mxConnectionHandler[_0x763a[202]][_0x763a[2911]]= function(_0x3536x2){return this[_0x763a[2882]]};mxConnectionHandler[_0x763a[202]][_0x763a[2912]]= function(_0x3536x2){return null!= _0x3536x2[_0x763a[963]]&& _0x3536x2[_0x763a[963]][_0x763a[252]][_0x763a[265]]== this[_0x763a[1179]][_0x763a[526]]?!0:this[_0x763a[2880]]};mxConnectionHandler[_0x763a[202]][_0x763a[2913]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[2911]](_0x3536x2);if(null!= _0x3536x3&& null!= _0x3536x2){this[_0x763a[2903]]= _0x3536x2;var _0x3536x4=[],_0x3536x5= new mxRectangle(0,0,_0x3536x3[_0x763a[117]],_0x3536x3[_0x763a[119]]),_0x3536x9= new mxImageShape(_0x3536x5,_0x3536x3[_0x763a[390]],null,null,0);_0x3536x9[_0x763a[1674]]= !1;this[_0x763a[2912]](_0x3536x2)?(_0x3536x9[_0x763a[507]]= mxConstants[_0x763a[1656]],_0x3536x9[_0x763a[176]](this[_0x763a[1179]][_0x763a[526]])):(_0x3536x9[_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]]== mxConstants[_0x763a[508]]?mxConstants[_0x763a[508]]:mxConstants[_0x763a[1523]],_0x3536x9[_0x763a[176]](this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1524]]()),this[_0x763a[2881]]&& null!= _0x3536x9[_0x763a[252]][_0x763a[328]]&& _0x3536x9[_0x763a[252]][_0x763a[265]][_0x763a[950]](_0x3536x9[_0x763a[252]],_0x3536x9[_0x763a[252]][_0x763a[265]][_0x763a[285]]));_0x3536x9[_0x763a[252]][_0x763a[124]][_0x763a[270]]= mxConstants[_0x763a[2914]];var _0x3536xa=mxUtils[_0x763a[885]](this,function(){return null!= this[_0x763a[2915]]?this[_0x763a[2915]]:_0x3536x2}),_0x3536x3=mxUtils[_0x763a[885]](this,function(_0x3536x2){mxEvent[_0x763a[721]](_0x3536x2)|| (this[_0x763a[2916]]= _0x3536x9,this[_0x763a[1179]][_0x763a[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x3536x2,_0x3536xa())))});mxEvent[_0x763a[2733]](_0x3536x9[_0x763a[252]],this[_0x763a[1179]],_0x3536xa,_0x3536x3);_0x3536x4[_0x763a[207]](_0x3536x9);this[_0x763a[2905]](_0x3536x4,this[_0x763a[2903]]);return _0x3536x4};return null};mxConnectionHandler[_0x763a[202]][_0x763a[2905]]= function(_0x3536x2,_0x3536x3){if(null!= _0x3536x2&& null!= _0x3536x2[0]&& null!= _0x3536x3){var _0x3536x4=this[_0x763a[2917]](_0x3536x2[0],_0x3536x3);_0x3536x2[0][_0x763a[1562]][_0x763a[235]]= _0x3536x4[_0x763a[235]];_0x3536x2[0][_0x763a[1562]][_0x763a[236]]= _0x3536x4[_0x763a[236]];_0x3536x2[0][_0x763a[258]]()}};mxConnectionHandler[_0x763a[202]][_0x763a[2917]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]],_0x3536x5=_0x3536x3[_0x763a[241]](),_0x3536x9=_0x3536x3[_0x763a[242]]();if(this[_0x763a[1179]][_0x763a[1730]](_0x3536x3[_0x763a[246]])){var _0x3536xa=this[_0x763a[1179]][_0x763a[1731]](_0x3536x3[_0x763a[246]]),_0x3536x5=0!= _0x3536xa[_0x763a[117]]?_0x3536x3[_0x763a[235]]+ _0x3536xa[_0x763a[117]]* _0x3536x4/ 2:_0x3536x5,_0x3536x9=0!= _0x3536xa[_0x763a[119]]?_0x3536x3[_0x763a[236]]+ _0x3536xa[_0x763a[119]]* _0x3536x4/ 2:_0x3536x9,_0x3536xa=mxUtils[_0x763a[431]](mxUtils[_0x763a[433]](_0x3536x3[_0x763a[124]],mxConstants.STYLE_ROTATION)|| 0);if(0!= _0x3536xa){var _0x3536x4=Math[_0x763a[426]](_0x3536xa),_0x3536xa=Math[_0x763a[427]](_0x3536xa),_0x3536x12= new mxPoint(_0x3536x3[_0x763a[241]](),_0x3536x3[_0x763a[242]]()),_0x3536x9=mxUtils[_0x763a[432]]( new mxPoint(_0x3536x5,_0x3536x9),_0x3536x4,_0x3536xa,_0x3536x12),_0x3536x5=_0x3536x9[_0x763a[235]],_0x3536x9=_0x3536x9[_0x763a[236]]}};return new mxPoint(_0x3536x5- _0x3536x2[_0x763a[1562]][_0x763a[117]]/ 2,_0x3536x9- _0x3536x2[_0x763a[1562]][_0x763a[119]]/ 2)};mxConnectionHandler[_0x763a[202]][_0x763a[2906]]= function(_0x3536x2){if(null!= _0x3536x2){this[_0x763a[2903]]= null;for(var _0x3536x3=0;_0x3536x3< _0x3536x2[_0x763a[67]];_0x3536x3++){_0x3536x2[_0x3536x3][_0x763a[515]]()}}};mxConnectionHandler[_0x763a[202]][_0x763a[2918]]= function(_0x3536x2){return !this[_0x763a[1179]][_0x763a[2579]](_0x3536x2[_0x763a[727]]())&& (null!= this[_0x763a[2886]][_0x763a[2919]]&& null!= this[_0x763a[2886]][_0x763a[2920]]|| null!= this[_0x763a[257]]&& null== this[_0x763a[267]]&& (null== this[_0x763a[2904]]|| null!= this[_0x763a[2904]]&& null!= this[_0x763a[2916]]))};mxConnectionHandler[_0x763a[202]][_0x763a[787]]= function(_0x3536x2,_0x3536x3){this[_0x763a[2899]]++;if(this[_0x763a[994]]()&& this[_0x763a[1179]][_0x763a[994]]()&& !_0x3536x3[_0x763a[721]]()&& !this[_0x763a[2908]]()&& this[_0x763a[2918]](_0x3536x3)){null!= this[_0x763a[2886]][_0x763a[2920]]&& null!= this[_0x763a[2886]][_0x763a[2919]]&& null!= this[_0x763a[2886]][_0x763a[987]]?(this[_0x763a[2921]]= this[_0x763a[2886]][_0x763a[2920]],this[_0x763a[257]]= this[_0x763a[2886]][_0x763a[2919]],this[_0x763a[2823]]= this[_0x763a[2886]][_0x763a[987]][_0x763a[238]]()):this[_0x763a[2823]]= new mxPoint(_0x3536x3[_0x763a[734]](),_0x3536x3[_0x763a[735]]());this[_0x763a[2897]]= this[_0x763a[2910]](_0x3536x3);this[_0x763a[2899]]= 1;this[_0x763a[2887]]&& null== this[_0x763a[253]]&& (this[_0x763a[2922]]= null,this[_0x763a[253]]= this[_0x763a[2156]]());if(null== this[_0x763a[257]]&& null!= this[_0x763a[2897]]){var _0x3536x4=this[_0x763a[1179]][_0x763a[2689]](_0x3536x3[_0x763a[727]]());this[_0x763a[2897]][_0x763a[246]][_0x763a[256]][_0x763a[2007]](_0x3536x4,!0)};this[_0x763a[746]]( new mxEventObject(mxEvent.START,_0x763a[724],this[_0x763a[257]]));_0x3536x3[_0x763a[722]]()}else {if(mxClient[_0x763a[754]]&& this[_0x763a[2888]]&& !this[_0x763a[2890]]&& this[_0x763a[994]]()&& this[_0x763a[1179]][_0x763a[994]]()&& !this[_0x763a[2908]]()){this[_0x763a[2890]]= !0;this[_0x763a[2893]]= _0x3536x3[_0x763a[730]]();this[_0x763a[2894]]= _0x3536x3[_0x763a[732]]();var _0x3536x5=this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](this[_0x763a[2885]][_0x763a[736]](_0x3536x3));this[_0x763a[2923]]&& window[_0x763a[2924]](this[_0x763a[2923]]);this[_0x763a[2923]]= window[_0x763a[261]](mxUtils[_0x763a[885]](this,function(){this[_0x763a[2891]]&& this[_0x763a[2925]](_0x3536x3,_0x3536x5);this[_0x763a[2891]]= this[_0x763a[2890]]= !1}),this[_0x763a[2889]]);this[_0x763a[2891]]= !0}};this[_0x763a[2926]]= this[_0x763a[2916]];this[_0x763a[2916]]= null};mxConnectionHandler[_0x763a[202]][_0x763a[2925]]= function(_0x3536x2,_0x3536x3){null!= _0x3536x3&& (this[_0x763a[2885]][_0x763a[2860]]= this[_0x763a[2885]][_0x763a[2853]],this[_0x763a[2885]][_0x763a[2862]]= _0x3536x3,this[_0x763a[2885]][_0x763a[811]](),this[_0x763a[2823]]= new mxPoint(_0x3536x2[_0x763a[734]](),_0x3536x2[_0x763a[735]]()),this[_0x763a[2897]]= this[_0x763a[2910]](_0x3536x2),this[_0x763a[257]]= _0x3536x3,this[_0x763a[746]]( new mxEventObject(mxEvent.START,_0x763a[724],this[_0x763a[257]])))};mxConnectionHandler[_0x763a[202]][_0x763a[2927]]= function(_0x3536x2){return !this[_0x763a[1179]][_0x763a[1712]](_0x3536x2[_0x763a[246]])};mxConnectionHandler[_0x763a[202]][_0x763a[2910]]= function(_0x3536x2){return null};mxConnectionHandler[_0x763a[202]][_0x763a[2928]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[2885]][_0x763a[2871]](_0x3536x2);this[_0x763a[2886]][_0x763a[2729]](_0x3536x2,null== this[_0x763a[2823]]);this[_0x763a[2915]]= _0x3536x3};mxConnectionHandler[_0x763a[202]][_0x763a[2929]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[518]](),_0x3536x4=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[512]]();_0x3536x2[_0x763a[235]]= _0x3536x2[_0x763a[235]]/ _0x3536x3- _0x3536x4[_0x763a[235]];_0x3536x2[_0x763a[236]]= _0x3536x2[_0x763a[236]]/ _0x3536x3- _0x3536x4[_0x763a[236]]};mxConnectionHandler[_0x763a[202]][_0x763a[788]]= function(_0x3536x2,_0x3536x3){this[_0x763a[2891]]&& (this[_0x763a[2891]]= Math[_0x763a[425]](this[_0x763a[2893]]- _0x3536x3[_0x763a[730]]())< this[_0x763a[2892]]&& Math[_0x763a[425]](this[_0x763a[2894]]- _0x3536x3[_0x763a[732]]())< this[_0x763a[2892]]);if(!_0x3536x3[_0x763a[721]]()&& (this[_0x763a[2895]]|| null!= this[_0x763a[2823]]|| !this[_0x763a[1179]][_0x763a[1009]])){!this[_0x763a[994]]()&& null!= this[_0x763a[2915]]&& (this[_0x763a[2906]](this[_0x763a[2904]]),this[_0x763a[2915]]= null);(null!= this[_0x763a[2823]]|| this[_0x763a[994]]()&& this[_0x763a[1179]][_0x763a[994]]())&& this[_0x763a[2928]](_0x3536x3);if(null!= this[_0x763a[2823]]){var _0x3536x4=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]],_0x3536x4= new mxPoint(this[_0x763a[1179]][_0x763a[1021]](_0x3536x3[_0x763a[734]]()/ _0x3536x4)* _0x3536x4,this[_0x763a[1179]][_0x763a[1021]](_0x3536x3[_0x763a[735]]()/ _0x3536x4)* _0x3536x4),_0x3536x5=null,_0x3536x9=_0x3536x4;null!= this[_0x763a[2886]][_0x763a[2920]]&& (null!= this[_0x763a[2886]][_0x763a[2919]]&& null!= this[_0x763a[2886]][_0x763a[987]])&& (_0x3536x5= this[_0x763a[2886]][_0x763a[2920]],_0x3536x9= this[_0x763a[2886]][_0x763a[987]][_0x763a[238]]());var _0x3536xa=this[_0x763a[2823]];if(null!= this[_0x763a[2926]]){var _0x3536x12=this[_0x763a[2926]][_0x763a[1562]][_0x763a[117]],_0x3536x13=this[_0x763a[2926]][_0x763a[1562]][_0x763a[119]];null!= this[_0x763a[2915]]&& this[_0x763a[2883]]?(_0x3536x12= this[_0x763a[2917]](this[_0x763a[2926]],this[_0x763a[2915]]),this[_0x763a[2926]][_0x763a[1562]][_0x763a[235]]= _0x3536x12[_0x763a[235]],this[_0x763a[2926]][_0x763a[1562]][_0x763a[236]]= _0x3536x12[_0x763a[236]]):(_0x3536x12= new mxRectangle(_0x3536x3[_0x763a[734]]()+ this[_0x763a[2896]][_0x763a[235]],_0x3536x3[_0x763a[735]]()+ this[_0x763a[2896]][_0x763a[236]],_0x3536x12,_0x3536x13),this[_0x763a[2926]][_0x763a[1562]]= _0x3536x12);this[_0x763a[2926]][_0x763a[258]]()};if(null!= this[_0x763a[2897]]){this[_0x763a[2897]][_0x763a[439]]= [null,null!= this[_0x763a[2915]]?null:_0x3536x9];this[_0x763a[1179]][_0x763a[441]][_0x763a[2289]](this[_0x763a[2897]],this[_0x763a[257]],!0,this[_0x763a[2921]]);null!= this[_0x763a[2915]]&& (null== _0x3536x5&& (_0x3536x5= this[_0x763a[1179]][_0x763a[2288]](this[_0x763a[2897]],this[_0x763a[257]],!1)),this[_0x763a[2897]][_0x763a[2088]](null,!1),this[_0x763a[1179]][_0x763a[441]][_0x763a[2289]](this[_0x763a[2897]],this[_0x763a[2915]],!1,_0x3536x5));_0x3536xa= null;if(null!= this[_0x763a[2922]]){_0x3536xa= [];for(_0x3536x9= 0;_0x3536x9< this[_0x763a[2922]][_0x763a[67]];_0x3536x9++){_0x3536x5= this[_0x763a[2922]][_0x3536x9][_0x763a[238]](),this[_0x763a[2929]](_0x3536x5),_0x3536xa[_0x3536x9]= _0x3536x5}};this[_0x763a[1179]][_0x763a[441]][_0x763a[2282]](this[_0x763a[2897]],_0x3536xa,this[_0x763a[257]],this[_0x763a[2915]]);this[_0x763a[1179]][_0x763a[441]][_0x763a[2283]](this[_0x763a[2897]],this[_0x763a[257]],this[_0x763a[2915]]);_0x3536x9= this[_0x763a[2897]][_0x763a[439]][this[_0x763a[2897]][_0x763a[439]][_0x763a[67]]- 1];_0x3536xa= this[_0x763a[2897]][_0x763a[439]][0]}else {null!= this[_0x763a[2915]]&& null== this[_0x763a[2886]][_0x763a[2920]]&& (_0x3536x12= this[_0x763a[2930]](this[_0x763a[2915]],_0x3536x3),null!= _0x3536x12&& (_0x3536x9= _0x3536x12)),null== this[_0x763a[2921]]&& null!= this[_0x763a[257]]&& (_0x3536x12= this[_0x763a[2931]](this[_0x763a[257]],null!= this[_0x763a[2922]]&& 0< this[_0x763a[2922]][_0x763a[67]]?this[_0x763a[2922]][0]:_0x3536x9,_0x3536x3),null!= _0x3536x12&& (_0x3536xa= _0x3536x12))};if(null== this[_0x763a[2915]]&& this[_0x763a[2900]]){_0x3536x12= _0x3536xa;null!= this[_0x763a[2897]]&& 2< this[_0x763a[2897]][_0x763a[439]][_0x763a[67]]&& (_0x3536x5= this[_0x763a[2897]][_0x763a[439]][this[_0x763a[2897]][_0x763a[439]][_0x763a[67]]- 2],null!= _0x3536x5&& (_0x3536x12= _0x3536x5));_0x3536x5= _0x3536x9[_0x763a[235]]- _0x3536x12[_0x763a[235]];_0x3536x12= _0x3536x9[_0x763a[236]]- _0x3536x12[_0x763a[236]];_0x3536x13= Math[_0x763a[428]](_0x3536x5* _0x3536x5+ _0x3536x12* _0x3536x12);if(0== _0x3536x13){return};_0x3536x9[_0x763a[235]]-= 4* _0x3536x5/ _0x3536x13;_0x3536x9[_0x763a[236]]-= 4* _0x3536x12/ _0x3536x13};if(null== this[_0x763a[253]]&& (_0x3536x5= Math[_0x763a[425]](_0x3536x4[_0x763a[235]]- this[_0x763a[2823]][_0x763a[235]]),_0x3536x12= Math[_0x763a[425]](_0x3536x4[_0x763a[236]]- this[_0x763a[2823]][_0x763a[236]]),_0x3536x5> this[_0x763a[1179]][_0x763a[2353]]|| _0x3536x12> this[_0x763a[1179]][_0x763a[2353]])){this[_0x763a[253]]= this[_0x763a[2156]](),this[_0x763a[2928]](_0x3536x3)};null!= this[_0x763a[253]]&& (null!= this[_0x763a[2897]]?this[_0x763a[253]][_0x763a[1525]]= this[_0x763a[2897]][_0x763a[439]]:(_0x3536x4= [_0x3536xa],null!= this[_0x763a[2922]]&& (_0x3536x4= _0x3536x4[_0x763a[1919]](this[_0x763a[2922]])),_0x3536x4[_0x763a[207]](_0x3536x9),this[_0x763a[253]][_0x763a[1525]]= _0x3536x4),this[_0x763a[2932]]());mxEvent[_0x763a[722]](_0x3536x3[_0x763a[727]]());_0x3536x3[_0x763a[722]]()}else {!this[_0x763a[994]]()|| !this[_0x763a[1179]][_0x763a[994]]()?this[_0x763a[2886]][_0x763a[862]]():this[_0x763a[257]]!= this[_0x763a[2915]]&& null== this[_0x763a[2897]]?(this[_0x763a[2906]](this[_0x763a[2904]]),this[_0x763a[2904]]= null,null!= this[_0x763a[2915]]&& null== this[_0x763a[267]]&& (this[_0x763a[2904]]= this[_0x763a[2913]](this[_0x763a[2915]]),null== this[_0x763a[2904]]&& (this[_0x763a[2915]][_0x763a[1609]](mxConstants.CURSOR_CONNECT),_0x3536x3[_0x763a[722]]())),this[_0x763a[257]]= this[_0x763a[2915]]):this[_0x763a[257]]== this[_0x763a[2915]]&& (null!= this[_0x763a[2915]]&& null== this[_0x763a[2904]]&& !this[_0x763a[1179]][_0x763a[1009]])&& _0x3536x3[_0x763a[722]]()};null!= this[_0x763a[2886]][_0x763a[2920]]&& this[_0x763a[2885]][_0x763a[862]]();if(!this[_0x763a[1179]][_0x763a[1009]]&& null!= this[_0x763a[2915]]&& null!= this[_0x763a[2904]]){_0x3536x4= !1;_0x3536xa= _0x3536x3[_0x763a[728]]();for(_0x3536x9= 0;_0x3536x9< this[_0x763a[2904]][_0x763a[67]]&& !_0x3536x4;_0x3536x9++){_0x3536x4= _0x3536xa== this[_0x763a[2904]][_0x3536x9][_0x763a[252]]|| _0x3536xa[_0x763a[265]]== this[_0x763a[2904]][_0x3536x9][_0x763a[252]]};_0x3536x4|| this[_0x763a[2933]](this[_0x763a[2915]],this[_0x763a[2904]],_0x3536x3)}}else {this[_0x763a[2886]][_0x763a[862]]()}};mxConnectionHandler[_0x763a[202]][_0x763a[2930]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=null,_0x3536x5=_0x3536x2[_0x763a[441]],_0x3536x9=_0x3536x5[_0x763a[2305]](_0x3536x2);if(null!= _0x3536x9){var _0x3536xa=null!= this[_0x763a[2922]]&& 0< this[_0x763a[2922]][_0x763a[67]]?this[_0x763a[2922]][this[_0x763a[2922]][_0x763a[67]]- 1]: new mxPoint(this[_0x763a[257]][_0x763a[241]](),this[_0x763a[257]][_0x763a[242]]()),_0x3536x5=_0x3536x9(_0x3536x5[_0x763a[2087]](_0x3536x2),this[_0x763a[2897]],_0x3536xa,!1);null!= _0x3536x5&& (_0x3536x4= _0x3536x5)}else {_0x3536x4= new mxPoint(_0x3536x2[_0x763a[241]](),_0x3536x2[_0x763a[242]]())};return _0x3536x4};mxConnectionHandler[_0x763a[202]][_0x763a[2931]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x4= null;var _0x3536x5=_0x3536x2[_0x763a[441]],_0x3536x9=_0x3536x5[_0x763a[2305]](_0x3536x2),_0x3536xa= new mxPoint(_0x3536x2[_0x763a[241]](),_0x3536x2[_0x763a[242]]());if(null!= _0x3536x9){var _0x3536x12=mxUtils[_0x763a[433]](_0x3536x2[_0x763a[124]],mxConstants.STYLE_ROTATION,0),_0x3536x13=-_0x3536x12* (Math[_0x763a[424]]/ 180);0!= _0x3536x12&& (_0x3536x3= mxUtils[_0x763a[432]]( new mxPoint(_0x3536x3[_0x763a[235]],_0x3536x3[_0x763a[236]]),Math[_0x763a[426]](_0x3536x13),Math[_0x763a[427]](_0x3536x13),_0x3536xa));_0x3536x2= _0x3536x9(_0x3536x5[_0x763a[2087]](_0x3536x2),_0x3536x2,_0x3536x3,!1);null!= _0x3536x2&& (0!= _0x3536x12&& (_0x3536x2= mxUtils[_0x763a[432]]( new mxPoint(_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]]),Math[_0x763a[426]](-_0x3536x13),Math[_0x763a[427]](-_0x3536x13),_0x3536xa)),_0x3536x4= _0x3536x2)}else {_0x3536x4= _0x3536xa};return _0x3536x4};mxConnectionHandler[_0x763a[202]][_0x763a[2933]]= function(_0x3536x2,_0x3536x3,_0x3536x4){};mxConnectionHandler[_0x763a[202]][_0x763a[2934]]= function(_0x3536x2){return null!= _0x3536x2[_0x763a[248]]()};mxConnectionHandler[_0x763a[202]][_0x763a[2935]]= function(_0x3536x2){var _0x3536x3=mxUtils[_0x763a[2196]](this[_0x763a[1179]][_0x763a[526]],_0x3536x2[_0x763a[730]](),_0x3536x2[_0x763a[732]]()),_0x3536x4=Math[_0x763a[425]](_0x3536x3[_0x763a[235]]- this[_0x763a[2823]][_0x763a[235]]),_0x3536x3=Math[_0x763a[425]](_0x3536x3[_0x763a[236]]- this[_0x763a[2823]][_0x763a[236]]);if(null!= this[_0x763a[2922]]|| 1< this[_0x763a[2899]]&& (_0x3536x4> this[_0x763a[1179]][_0x763a[2353]]|| _0x3536x3> this[_0x763a[1179]][_0x763a[2353]])){null== this[_0x763a[2922]]&& (this[_0x763a[2922]]= []),_0x3536x4= this[_0x763a[1179]][_0x763a[441]][_0x763a[255]],_0x3536x3= new mxPoint(this[_0x763a[1179]][_0x763a[1021]](_0x3536x2[_0x763a[734]]()/ _0x3536x4)* _0x3536x4,this[_0x763a[1179]][_0x763a[1021]](_0x3536x2[_0x763a[735]]()/ _0x3536x4)* _0x3536x4),this[_0x763a[2922]][_0x763a[207]](_0x3536x3)}};mxConnectionHandler[_0x763a[202]][_0x763a[789]]= function(_0x3536x2,_0x3536x3){if(!_0x3536x3[_0x763a[721]]()&& this[_0x763a[2908]]()){if(this[_0x763a[2887]]&& !this[_0x763a[2934]](_0x3536x3)){this[_0x763a[2935]](_0x3536x3);_0x3536x3[_0x763a[722]]();return};if(null== this[_0x763a[267]]){var _0x3536x4=null!= this[_0x763a[257]]?this[_0x763a[257]][_0x763a[246]]:null,_0x3536x5=null;null!= this[_0x763a[2886]][_0x763a[2920]]&& null!= this[_0x763a[2886]][_0x763a[2919]]&& (_0x3536x5= this[_0x763a[2886]][_0x763a[2919]][_0x763a[246]]);null== _0x3536x5&& this[_0x763a[2885]][_0x763a[2867]]()&& (_0x3536x5= this[_0x763a[2885]][_0x763a[2861]][_0x763a[246]]);this[_0x763a[807]](_0x3536x4,_0x3536x5,_0x3536x3[_0x763a[727]](),_0x3536x3[_0x763a[736]]())}else {null!= this[_0x763a[257]]&& (null!= this[_0x763a[2885]][_0x763a[2861]]&& this[_0x763a[257]][_0x763a[246]]== this[_0x763a[2885]][_0x763a[2861]][_0x763a[246]])&& this[_0x763a[1179]][_0x763a[2459]](this[_0x763a[2885]][_0x763a[1097]],evt),0< this[_0x763a[267]][_0x763a[67]]&& this[_0x763a[1179]][_0x763a[2580]](this[_0x763a[267]])};this[_0x763a[2906]](this[_0x763a[2904]]);_0x3536x3[_0x763a[722]]()};null!= this[_0x763a[2823]]&& this[_0x763a[862]]();this[_0x763a[2891]]= this[_0x763a[2890]]= !1};mxConnectionHandler[_0x763a[202]][_0x763a[862]]= function(){null!= this[_0x763a[253]]&& (this[_0x763a[253]][_0x763a[515]](),this[_0x763a[253]]= null);this[_0x763a[2906]](this[_0x763a[2904]]);this[_0x763a[2904]]= null;this[_0x763a[2885]][_0x763a[862]]();this[_0x763a[2886]][_0x763a[862]]();this[_0x763a[2921]]= this[_0x763a[267]]= this[_0x763a[257]]= this[_0x763a[2897]]= this[_0x763a[2926]]= null;this[_0x763a[2899]]= 0;this[_0x763a[2916]]= this[_0x763a[2823]]= null;this[_0x763a[746]]( new mxEventObject(mxEvent.RESET))};mxConnectionHandler[_0x763a[202]][_0x763a[2932]]= function(){var _0x3536x2=null== this[_0x763a[267]];this[_0x763a[253]][_0x763a[1307]]= this[_0x763a[2936]](_0x3536x2);_0x3536x2= this[_0x763a[2937]](_0x3536x2);this[_0x763a[253]][_0x763a[1336]]= _0x3536x2;this[_0x763a[253]][_0x763a[258]]()};mxConnectionHandler[_0x763a[202]][_0x763a[2937]]= function(_0x3536x2){return _0x3536x2?mxConstants[_0x763a[2829]]:mxConstants[_0x763a[2938]]};mxConnectionHandler[_0x763a[202]][_0x763a[2936]]= function(_0x3536x2){return _0x3536x2?3:1};mxConnectionHandler[_0x763a[202]][_0x763a[807]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){if(null!= _0x3536x3|| this[_0x763a[2901]]()|| this[_0x763a[1179]][_0x763a[2406]]){var _0x3536x9=this[_0x763a[1179]][_0x763a[502]](),_0x3536xa=null;_0x3536x9[_0x763a[473]]();try{if(null!= _0x3536x2&& (null== _0x3536x3&& this[_0x763a[2901]]())&& (_0x3536x3= this[_0x763a[2939]](_0x3536x4,_0x3536x2),null!= _0x3536x3)){_0x3536x5= this[_0x763a[1179]][_0x763a[564]]([_0x3536x3],_0x3536x4,_0x3536x5);if(null== _0x3536x5|| !this[_0x763a[1179]][_0x763a[502]]()[_0x763a[250]](_0x3536x5)){var _0x3536x12=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[248]](_0x3536x5);if(null!= _0x3536x12){var _0x3536x13=_0x3536x9[_0x763a[1721]](_0x3536x3);_0x3536x13[_0x763a[235]]-= _0x3536x12[_0x763a[2078]][_0x763a[235]];_0x3536x13[_0x763a[236]]-= _0x3536x12[_0x763a[2078]][_0x763a[236]]}}else {_0x3536x5= this[_0x763a[1179]][_0x763a[902]]()};this[_0x763a[1179]][_0x763a[2103]](_0x3536x3,_0x3536x5)};var _0x3536x14=this[_0x763a[1179]][_0x763a[902]]();null!= _0x3536x2&& (null!= _0x3536x3&& _0x3536x9[_0x763a[1197]](_0x3536x2)== _0x3536x9[_0x763a[1197]](_0x3536x3)&& _0x3536x9[_0x763a[1197]](_0x3536x9[_0x763a[1197]](_0x3536x2))!= _0x3536x9[_0x763a[501]]())&& (_0x3536x14= _0x3536x9[_0x763a[1197]](_0x3536x2),null!= _0x3536x2[_0x763a[256]]&& _0x3536x2[_0x763a[256]][_0x763a[1500]]&& (null!= _0x3536x3[_0x763a[256]]&& _0x3536x3[_0x763a[256]][_0x763a[1500]])&& (_0x3536x14= _0x3536x9[_0x763a[1197]](_0x3536x14)));_0x3536x13= _0x3536x12= null;null!= this[_0x763a[2897]]&& (_0x3536x12= this[_0x763a[2897]][_0x763a[246]][_0x763a[131]],_0x3536x13= this[_0x763a[2897]][_0x763a[246]][_0x763a[124]]);_0x3536xa= this[_0x763a[1960]](_0x3536x14,null,_0x3536x12,_0x3536x2,_0x3536x3,_0x3536x13);if(null!= _0x3536xa){this[_0x763a[1179]][_0x763a[2545]](_0x3536xa,_0x3536x2,!0,this[_0x763a[2921]]);this[_0x763a[1179]][_0x763a[2545]](_0x3536xa,_0x3536x3,!1,this[_0x763a[2886]][_0x763a[2920]]);null!= this[_0x763a[2897]]&& _0x3536x9[_0x763a[1724]](_0x3536xa,this[_0x763a[2897]][_0x763a[246]][_0x763a[256]]);var _0x3536x15=_0x3536x9[_0x763a[1721]](_0x3536xa);null== _0x3536x15&& (_0x3536x15= new mxGeometry,_0x3536x15[_0x763a[1500]]= !0,_0x3536x9[_0x763a[1724]](_0x3536xa,_0x3536x15));if(null!= this[_0x763a[2922]]&& 0< this[_0x763a[2922]][_0x763a[67]]){var _0x3536x16=this[_0x763a[1179]][_0x763a[441]][_0x763a[255]],_0x3536x17=this[_0x763a[1179]][_0x763a[441]][_0x763a[513]];_0x3536x15[_0x763a[1525]]= [];for(_0x3536x2= 0;_0x3536x2< this[_0x763a[2922]][_0x763a[67]];_0x3536x2++){var _0x3536x18=this[_0x763a[2922]][_0x3536x2];_0x3536x15[_0x763a[1525]][_0x763a[207]]( new mxPoint(_0x3536x18[_0x763a[235]]/ _0x3536x16- _0x3536x17[_0x763a[235]],_0x3536x18[_0x763a[236]]/ _0x3536x16- _0x3536x17[_0x763a[236]]))}};null== _0x3536x3&& (_0x3536x18= this[_0x763a[1179]][_0x763a[2689]](_0x3536x4,!1),_0x3536x18[_0x763a[235]]-= this[_0x763a[1179]][_0x763a[1136]]/ this[_0x763a[1179]][_0x763a[441]][_0x763a[255]],_0x3536x18[_0x763a[236]]-= this[_0x763a[1179]][_0x763a[1137]]/ this[_0x763a[1179]][_0x763a[441]][_0x763a[255]],_0x3536x15[_0x763a[2007]](_0x3536x18,!1));this[_0x763a[746]]( new mxEventObject(mxEvent.CONNECT,_0x763a[246],_0x3536xa,_0x763a[763],_0x3536x4,_0x763a[772],_0x3536x5))}}catch(q){mxLog[_0x763a[539]](),mxLog[_0x763a[143]](q[_0x763a[281]])}finally{_0x3536x9[_0x763a[476]]()};this[_0x763a[804]]&& this[_0x763a[2707]](_0x3536xa,_0x3536x3)}};mxConnectionHandler[_0x763a[202]][_0x763a[2707]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1179]][_0x763a[2450]](_0x3536x2)};mxConnectionHandler[_0x763a[202]][_0x763a[1960]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){if(null== this[_0x763a[1033]]){return this[_0x763a[1179]][_0x763a[1960]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa)};_0x3536x3= this[_0x763a[2503]](_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa);return _0x3536x3= this[_0x763a[1179]][_0x763a[2504]](_0x3536x3,_0x3536x2,_0x3536x5,_0x3536x9)};mxConnectionHandler[_0x763a[202]][_0x763a[2939]]= function(_0x3536x2,_0x3536x3){for(var _0x3536x4=this[_0x763a[1179]][_0x763a[1198]](_0x3536x3);null!= _0x3536x4&& _0x3536x4[_0x763a[1500]];){_0x3536x3= this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1197]](_0x3536x3),_0x3536x4= this[_0x763a[1179]][_0x763a[1198]](_0x3536x3)};var _0x3536x5=this[_0x763a[1179]][_0x763a[899]]([_0x3536x3])[0],_0x3536x4=this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1721]](_0x3536x5);if(null!= _0x3536x4){var _0x3536x9=this[_0x763a[1179]][_0x763a[2689]](_0x3536x2);_0x3536x4[_0x763a[235]]= this[_0x763a[1179]][_0x763a[1021]](_0x3536x9[_0x763a[235]]- _0x3536x4[_0x763a[117]]/ 2)- this[_0x763a[1179]][_0x763a[1136]]/ this[_0x763a[1179]][_0x763a[441]][_0x763a[255]];_0x3536x4[_0x763a[236]]= this[_0x763a[1179]][_0x763a[1021]](_0x3536x9[_0x763a[236]]- _0x3536x4[_0x763a[119]]/ 2)- this[_0x763a[1179]][_0x763a[1137]]/ this[_0x763a[1179]][_0x763a[441]][_0x763a[255]];if(null!= this[_0x763a[2823]]){var _0x3536xa=this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x3);if(null!= _0x3536xa){var _0x3536x12=this[_0x763a[2940]]();Math[_0x763a[425]](this[_0x763a[1179]][_0x763a[1021]](this[_0x763a[2823]][_0x763a[235]])- this[_0x763a[1179]][_0x763a[1021]](_0x3536x9[_0x763a[235]]))<= _0x3536x12?_0x3536x4[_0x763a[235]]= _0x3536xa[_0x763a[235]]:Math[_0x763a[425]](this[_0x763a[1179]][_0x763a[1021]](this[_0x763a[2823]][_0x763a[236]])- this[_0x763a[1179]][_0x763a[1021]](_0x3536x9[_0x763a[236]]))<= _0x3536x12&& (_0x3536x4[_0x763a[236]]= _0x3536xa[_0x763a[236]])}}};return _0x3536x5};mxConnectionHandler[_0x763a[202]][_0x763a[2940]]= function(){return this[_0x763a[1179]][_0x763a[997]]()?this[_0x763a[1179]][_0x763a[1020]]:this[_0x763a[1179]][_0x763a[2353]]};mxConnectionHandler[_0x763a[202]][_0x763a[2503]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=null;null!= this[_0x763a[1033]]&& (_0x3536x9= this[_0x763a[1033]](_0x3536x3,_0x3536x4,_0x3536x5));null== _0x3536x9&& (_0x3536x9= new mxCell(_0x3536x2|| _0x763a[110]),_0x3536x9[_0x763a[1994]](!0),_0x3536x9[_0x763a[475]](_0x3536x5),_0x3536x2= new mxGeometry,_0x3536x2[_0x763a[1500]]= !0,_0x3536x9[_0x763a[1724]](_0x3536x2));return _0x3536x9};mxConnectionHandler[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[1179]][_0x763a[1148]](this);null!= this[_0x763a[253]]&& (this[_0x763a[253]][_0x763a[515]](),this[_0x763a[253]]= null);null!= this[_0x763a[2885]]&& (this[_0x763a[2885]][_0x763a[515]](),this[_0x763a[2885]]= null);null!= this[_0x763a[2886]]&& (this[_0x763a[2886]][_0x763a[515]](),this[_0x763a[2886]]= null);null!= this[_0x763a[1176]]&& (this[_0x763a[1179]][_0x763a[502]]()[_0x763a[745]](this[_0x763a[1176]]),this[_0x763a[1179]][_0x763a[249]]()[_0x763a[745]](this[_0x763a[1176]]),this[_0x763a[1176]]= null);null!= this[_0x763a[2898]]&& (this[_0x763a[1179]][_0x763a[745]](this[_0x763a[2898]]),this[_0x763a[1179]][_0x763a[249]]()[_0x763a[745]](this[_0x763a[2898]]),this[_0x763a[2898]]= null)};function mxConstraintHandler(_0x3536x2){this[_0x763a[1179]]= _0x3536x2}mxConstraintHandler[_0x763a[202]][_0x763a[2941]]= new mxImage(mxClient[_0x763a[88]]+ _0x763a[2942],5,5);mxConstraintHandler[_0x763a[202]][_0x763a[1179]]= null;mxConstraintHandler[_0x763a[202]][_0x763a[984]]= !0;mxConstraintHandler[_0x763a[202]][_0x763a[2943]]= mxConstants[_0x763a[2854]];mxConstraintHandler[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxConstraintHandler[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxConstraintHandler[_0x763a[202]][_0x763a[862]]= function(){if(null!= this[_0x763a[2944]]){for(var _0x3536x2=0;_0x3536x2< this[_0x763a[2944]][_0x763a[67]];_0x3536x2++){this[_0x763a[2944]][_0x3536x2][_0x763a[515]]()};this[_0x763a[2944]]= null};null!= this[_0x763a[2945]]&& (this[_0x763a[2945]][_0x763a[515]](),this[_0x763a[2945]]= null);this[_0x763a[2946]]= this[_0x763a[2919]]= this[_0x763a[987]]= this[_0x763a[2947]]= this[_0x763a[2920]]= null};mxConstraintHandler[_0x763a[202]][_0x763a[2636]]= function(){return this[_0x763a[1179]][_0x763a[2636]]()};mxConstraintHandler[_0x763a[202]][_0x763a[2948]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return this[_0x763a[2941]]};mxConstraintHandler[_0x763a[202]][_0x763a[2949]]= function(_0x3536x2,_0x3536x3){return !1};mxConstraintHandler[_0x763a[202]][_0x763a[2729]]= function(_0x3536x2,_0x3536x3){if(this[_0x763a[994]]()&& !this[_0x763a[2949]](_0x3536x2)){var _0x3536x4=this[_0x763a[2636]](),_0x3536x5= new mxRectangle(_0x3536x2[_0x763a[734]]()- _0x3536x4,_0x3536x2[_0x763a[735]]()- _0x3536x4,2* _0x3536x4,2* _0x3536x4),_0x3536x9=null!= _0x3536x2[_0x763a[736]]()?this[_0x763a[1179]][_0x763a[2565]](_0x3536x2[_0x763a[736]]()):!1;if(null== this[_0x763a[2947]]|| !mxUtils[_0x763a[1825]](this[_0x763a[2947]],_0x3536x5)|| null!= _0x3536x2[_0x763a[248]]()&& null!= this[_0x763a[2919]]&& _0x3536x9){if(this[_0x763a[2947]]= null,_0x3536x2[_0x763a[248]]()!= this[_0x763a[2919]]){if(this[_0x763a[2919]]= null,this[_0x763a[1531]]= null!= _0x3536x2[_0x763a[248]]()&& _0x3536x9?this[_0x763a[1179]][_0x763a[2538]](_0x3536x2[_0x763a[248]](),_0x3536x3):null,null!= this[_0x763a[1531]]){this[_0x763a[2919]]= _0x3536x2[_0x763a[248]]();this[_0x763a[2947]]= new mxRectangle(_0x3536x2[_0x763a[248]]()[_0x763a[235]],_0x3536x2[_0x763a[248]]()[_0x763a[236]],_0x3536x2[_0x763a[248]]()[_0x763a[117]],_0x3536x2[_0x763a[248]]()[_0x763a[119]]);if(null!= this[_0x763a[2944]]){for(_0x3536x9= 0;_0x3536x9< this[_0x763a[2944]][_0x763a[67]];_0x3536x9++){this[_0x763a[2944]][_0x3536x9][_0x763a[515]]()};this[_0x763a[2946]]= this[_0x763a[2944]]= null};this[_0x763a[2944]]= [];this[_0x763a[2946]]= [];for(_0x3536x9= 0;_0x3536x9< this[_0x763a[1531]][_0x763a[67]];_0x3536x9++){var _0x3536xa=this[_0x763a[1179]][_0x763a[2290]](_0x3536x2[_0x763a[248]](),this[_0x763a[1531]][_0x3536x9]),_0x3536x12=this[_0x763a[2948]](_0x3536x2[_0x763a[248]](),this[_0x763a[1531]][_0x3536x9],_0x3536xa),_0x3536x13=_0x3536x12[_0x763a[390]],_0x3536x12= new mxRectangle(_0x3536xa[_0x763a[235]]- _0x3536x12[_0x763a[117]]/ 2,_0x3536xa[_0x763a[236]]- _0x3536x12[_0x763a[119]]/ 2,_0x3536x12[_0x763a[117]],_0x3536x12[_0x763a[119]]),_0x3536x12= new mxImageShape(_0x3536x12,_0x3536x13);_0x3536x12[_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]]!= mxConstants[_0x763a[508]]?mxConstants[_0x763a[2334]]:mxConstants[_0x763a[508]];_0x3536x12[_0x763a[1674]]= !1;_0x3536x12[_0x763a[176]](this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1524]]());null!= _0x3536x12[_0x763a[252]][_0x763a[328]]&& _0x3536x12[_0x763a[252]][_0x763a[265]][_0x763a[950]](_0x3536x12[_0x763a[252]],_0x3536x12[_0x763a[252]][_0x763a[265]][_0x763a[285]]);_0x3536x13= mxUtils[_0x763a[885]](this,function(){return null!= this[_0x763a[2919]]?this[_0x763a[2919]]:_0x3536x2[_0x763a[248]]()});_0x3536x12[_0x763a[258]]();mxEvent[_0x763a[2733]](_0x3536x12[_0x763a[252]],this[_0x763a[1179]],_0x3536x13);this[_0x763a[2947]][_0x763a[99]](_0x3536x12[_0x763a[1562]]);this[_0x763a[2944]][_0x763a[207]](_0x3536x12);this[_0x763a[2946]][_0x763a[207]](_0x3536xa)};this[_0x763a[2947]][_0x763a[244]](_0x3536x4)}else {if(null!= this[_0x763a[2944]]){null!= this[_0x763a[2945]]&& (this[_0x763a[2945]][_0x763a[515]](),this[_0x763a[2945]]= null);for(_0x3536x9= 0;_0x3536x9< this[_0x763a[2944]][_0x763a[67]];_0x3536x9++){this[_0x763a[2944]][_0x3536x9][_0x763a[515]]()};this[_0x763a[2946]]= this[_0x763a[2944]]= null}}}};this[_0x763a[987]]= this[_0x763a[2920]]= null;if(null!= this[_0x763a[2944]]&& null!= this[_0x763a[1531]]&& (null== _0x3536x2[_0x763a[248]]()|| this[_0x763a[2919]]== _0x3536x2[_0x763a[248]]())){for(_0x3536x9= 0;_0x3536x9< this[_0x763a[2944]][_0x763a[67]];_0x3536x9++){if(mxUtils[_0x763a[1825]](this[_0x763a[2944]][_0x3536x9][_0x763a[1562]],_0x3536x5)){this[_0x763a[2920]]= this[_0x763a[1531]][_0x3536x9];this[_0x763a[987]]= this[_0x763a[2946]][_0x3536x9];_0x3536x4= this[_0x763a[2944]][_0x3536x9][_0x763a[1562]][_0x763a[238]]();_0x3536x4[_0x763a[244]](mxClient[_0x763a[80]]?3:2);mxClient[_0x763a[80]]&& (_0x3536x4[_0x763a[117]]-= 1,_0x3536x4[_0x763a[119]]-= 1);null== this[_0x763a[2945]]?(_0x3536x4= new mxRectangleShape(_0x3536x4,null,this[_0x763a[2943]],3),_0x3536x4[_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]]== mxConstants[_0x763a[508]]?mxConstants[_0x763a[508]]:mxConstants[_0x763a[1523]],_0x3536x4[_0x763a[176]](this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1524]]()),this[_0x763a[2945]]= _0x3536x4,_0x3536x13= mxUtils[_0x763a[885]](this,function(){return null!= this[_0x763a[2919]]?this[_0x763a[2919]]:_0x3536x2[_0x763a[248]]()}),mxEvent[_0x763a[2733]](_0x3536x4[_0x763a[252]],this[_0x763a[1179]],_0x3536x13)):(this[_0x763a[2945]][_0x763a[1562]]= _0x3536x4,this[_0x763a[2945]][_0x763a[258]]());break}}};null== this[_0x763a[2920]]&& null!= this[_0x763a[2945]]&& (this[_0x763a[2945]][_0x763a[515]](),this[_0x763a[2945]]= null)}};mxConstraintHandler[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[862]]()};function mxRubberband(_0x3536x2){null!= _0x3536x2&& (this[_0x763a[1179]]= _0x3536x2,this[_0x763a[1179]][_0x763a[1133]](this),this[_0x763a[2730]]= mxUtils[_0x763a[885]](this,function(){this[_0x763a[2950]]()}),this[_0x763a[1179]][_0x763a[169]](mxEvent.PAN,this[_0x763a[2730]]),mxClient[_0x763a[80]]&& mxEvent[_0x763a[169]](window,_0x763a[2428],mxUtils[_0x763a[885]](this,function(){this[_0x763a[515]]()})))}mxRubberband[_0x763a[202]][_0x763a[2951]]= 20;mxRubberband[_0x763a[202]][_0x763a[984]]= !0;mxRubberband[_0x763a[202]][_0x763a[485]]= null;mxRubberband[_0x763a[202]][_0x763a[2952]]= null;mxRubberband[_0x763a[202]][_0x763a[2953]]= 0;mxRubberband[_0x763a[202]][_0x763a[2954]]= 0;mxRubberband[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxRubberband[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxRubberband[_0x763a[202]][_0x763a[787]]= function(_0x3536x2,_0x3536x3){if(!_0x3536x3[_0x763a[721]]()&& this[_0x763a[994]]()&& this[_0x763a[1179]][_0x763a[994]]()&& (this[_0x763a[1179]][_0x763a[2579]](_0x3536x3[_0x763a[727]]())|| null== _0x3536x3[_0x763a[248]]())){var _0x3536x4=mxUtils[_0x763a[445]](this[_0x763a[1179]][_0x763a[526]]),_0x3536x5=mxUtils[_0x763a[444]](this[_0x763a[1179]][_0x763a[526]]);_0x3536x5[_0x763a[235]]-= _0x3536x4[_0x763a[235]];_0x3536x5[_0x763a[236]]-= _0x3536x4[_0x763a[236]];this[_0x763a[861]](_0x3536x3[_0x763a[730]]()+ _0x3536x5[_0x763a[235]],_0x3536x3[_0x763a[732]]()+ _0x3536x5[_0x763a[236]]);if(mxClient[_0x763a[133]]&& !mxClient[_0x763a[75]]&& !mxClient[_0x763a[76]]){var _0x3536x9=this[_0x763a[1179]][_0x763a[526]],_0x3536xa=function(_0x3536x2){_0x3536x2= new mxMouseEvent(_0x3536x2);var _0x3536x3=mxUtils[_0x763a[2196]](_0x3536x9,_0x3536x2[_0x763a[730]](),_0x3536x2[_0x763a[732]]());_0x3536x2[_0x763a[725]]= _0x3536x3[_0x763a[235]];_0x3536x2[_0x763a[726]]= _0x3536x3[_0x763a[236]];return _0x3536x2};this[_0x763a[2955]]= mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[788]](this[_0x763a[1179]],_0x3536xa(_0x3536x2))});this[_0x763a[981]]= mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[789]](this[_0x763a[1179]],_0x3536xa(_0x3536x2))});mxEvent[_0x763a[169]](document,_0x763a[752],this[_0x763a[2955]]);mxEvent[_0x763a[169]](document,_0x763a[753],this[_0x763a[981]])};_0x3536x3[_0x763a[722]](!1)}};mxRubberband[_0x763a[202]][_0x763a[861]]= function(_0x3536x2,_0x3536x3){this[_0x763a[2823]]= new mxPoint(_0x3536x2,_0x3536x3)};mxRubberband[_0x763a[202]][_0x763a[788]]= function(_0x3536x2,_0x3536x3){if(!_0x3536x3[_0x763a[721]]()&& null!= this[_0x763a[2823]]){var _0x3536x4=mxUtils[_0x763a[444]](this[_0x763a[1179]][_0x763a[526]]),_0x3536x5=mxUtils[_0x763a[445]](this[_0x763a[1179]][_0x763a[526]]);_0x3536x4[_0x763a[235]]-= _0x3536x5[_0x763a[235]];_0x3536x4[_0x763a[236]]-= _0x3536x5[_0x763a[236]];var _0x3536x5=_0x3536x3[_0x763a[730]]()+ _0x3536x4[_0x763a[235]],_0x3536x4=_0x3536x3[_0x763a[732]]()+ _0x3536x4[_0x763a[236]],_0x3536x9=this[_0x763a[2823]][_0x763a[235]]- _0x3536x5,_0x3536xa=this[_0x763a[2823]][_0x763a[236]]- _0x3536x4,_0x3536x12=this[_0x763a[1179]][_0x763a[2353]];if(null!= this[_0x763a[485]]|| Math[_0x763a[425]](_0x3536x9)> _0x3536x12|| Math[_0x763a[425]](_0x3536xa)> _0x3536x12){null== this[_0x763a[485]]&& (this[_0x763a[485]]= this[_0x763a[2156]]()),mxUtils[_0x763a[2440]](),this[_0x763a[2729]](_0x3536x5,_0x3536x4),_0x3536x3[_0x763a[722]]()}}};mxRubberband[_0x763a[202]][_0x763a[2156]]= function(){null== this[_0x763a[2952]]&& (this[_0x763a[2952]]= document[_0x763a[55]](_0x763a[485]),this[_0x763a[2952]][_0x763a[926]]= _0x763a[2956],mxUtils[_0x763a[254]](this[_0x763a[2952]],this[_0x763a[2951]]));this[_0x763a[1179]][_0x763a[526]][_0x763a[62]](this[_0x763a[2952]]);return this[_0x763a[2952]]};mxRubberband[_0x763a[202]][_0x763a[789]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=null!= this[_0x763a[485]];this[_0x763a[862]]();_0x3536x4&& (_0x3536x4= new mxRectangle(this[_0x763a[235]],this[_0x763a[236]],this[_0x763a[117]],this[_0x763a[119]]),this[_0x763a[1179]][_0x763a[2698]](_0x3536x4,_0x3536x3[_0x763a[727]]()),_0x3536x3[_0x763a[722]]())};mxRubberband[_0x763a[202]][_0x763a[862]]= function(){null!= this[_0x763a[485]]&& this[_0x763a[485]][_0x763a[265]][_0x763a[266]](this[_0x763a[485]]);null!= this[_0x763a[2955]]&& (mxEvent[_0x763a[745]](document,_0x763a[752],this[_0x763a[2955]]),this[_0x763a[2955]]= null);null!= this[_0x763a[981]]&& (mxEvent[_0x763a[745]](document,_0x763a[753],this[_0x763a[981]]),this[_0x763a[981]]= null);this[_0x763a[2954]]= this[_0x763a[2953]]= 0;this[_0x763a[485]]= this[_0x763a[2823]]= null};mxRubberband[_0x763a[202]][_0x763a[2729]]= function(_0x3536x2,_0x3536x3){this[_0x763a[2953]]= _0x3536x2;this[_0x763a[2954]]= _0x3536x3;this[_0x763a[2950]]()};mxRubberband[_0x763a[202]][_0x763a[2950]]= function(){if(null!= this[_0x763a[485]]){var _0x3536x2=this[_0x763a[2953]]- this[_0x763a[1179]][_0x763a[1136]],_0x3536x3=this[_0x763a[2954]]- this[_0x763a[1179]][_0x763a[1137]];this[_0x763a[235]]= Math[_0x763a[243]](this[_0x763a[2823]][_0x763a[235]],_0x3536x2);this[_0x763a[236]]= Math[_0x763a[243]](this[_0x763a[2823]][_0x763a[236]],_0x3536x3);this[_0x763a[117]]= Math[_0x763a[160]](this[_0x763a[2823]][_0x763a[235]],_0x3536x2)- this[_0x763a[235]];this[_0x763a[119]]= Math[_0x763a[160]](this[_0x763a[2823]][_0x763a[236]],_0x3536x3)- this[_0x763a[236]];_0x3536x2= mxClient[_0x763a[47]]?this[_0x763a[1179]][_0x763a[1137]]:0;this[_0x763a[485]][_0x763a[124]][_0x763a[361]]= this[_0x763a[235]]+ (mxClient[_0x763a[47]]?this[_0x763a[1179]][_0x763a[1136]]:0)+ _0x763a[168];this[_0x763a[485]][_0x763a[124]][_0x763a[125]]= this[_0x763a[236]]+ _0x3536x2+ _0x763a[168];this[_0x763a[485]][_0x763a[124]][_0x763a[117]]= Math[_0x763a[160]](1,this[_0x763a[117]])+ _0x763a[168];this[_0x763a[485]][_0x763a[124]][_0x763a[119]]= Math[_0x763a[160]](1,this[_0x763a[119]])+ _0x763a[168]}};mxRubberband[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[2717]]|| (this[_0x763a[2717]]= !0,this[_0x763a[1179]][_0x763a[1148]](this),this[_0x763a[1179]][_0x763a[745]](this[_0x763a[2730]]),this[_0x763a[862]](),null!= this[_0x763a[2952]]&& (this[_0x763a[2952]]= null))};function mxVertexHandler(_0x3536x2){null!= _0x3536x2&& (this[_0x763a[724]]= _0x3536x2,this[_0x763a[176]]())}mxVertexHandler[_0x763a[202]][_0x763a[1179]]= null;mxVertexHandler[_0x763a[202]][_0x763a[724]]= null;mxVertexHandler[_0x763a[202]][_0x763a[2957]]= !1;mxVertexHandler[_0x763a[202]][_0x763a[1983]]= null;mxVertexHandler[_0x763a[202]][_0x763a[2958]]= !0;mxVertexHandler[_0x763a[202]][_0x763a[2959]]= null;mxVertexHandler[_0x763a[202]][_0x763a[2353]]= 0;mxVertexHandler[_0x763a[202]][_0x763a[2809]]= !1;mxVertexHandler[_0x763a[202]][_0x763a[2960]]= !0;mxVertexHandler[_0x763a[202]][_0x763a[176]]= function(){this[_0x763a[1179]]= this[_0x763a[724]][_0x763a[441]][_0x763a[1179]];this[_0x763a[2961]]= this[_0x763a[2962]](this[_0x763a[724]]);this[_0x763a[1562]]= new mxRectangle(this[_0x763a[2961]][_0x763a[235]],this[_0x763a[2961]][_0x763a[236]],this[_0x763a[2961]][_0x763a[117]],this[_0x763a[2961]][_0x763a[119]]);this[_0x763a[2732]]= this[_0x763a[2963]](this[_0x763a[1562]]);this[_0x763a[2732]][_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]]!= mxConstants[_0x763a[508]]?mxConstants[_0x763a[1523]]:mxConstants[_0x763a[508]];this[_0x763a[2732]][_0x763a[1229]]= !1;this[_0x763a[2732]][_0x763a[176]](this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1524]]());this[_0x763a[1179]][_0x763a[1712]](this[_0x763a[724]][_0x763a[246]])&& (this[_0x763a[2732]][_0x763a[252]][_0x763a[124]][_0x763a[270]]= mxConstants[_0x763a[2832]]);mxEvent[_0x763a[2733]](this[_0x763a[2732]][_0x763a[252]],this[_0x763a[1179]],this[_0x763a[724]]);if(0>= mxGraphHandler[_0x763a[202]][_0x763a[2795]]|| this[_0x763a[1179]][_0x763a[2694]]()< mxGraphHandler[_0x763a[202]][_0x763a[2795]]){var _0x3536x2=this[_0x763a[1179]][_0x763a[2657]](this[_0x763a[724]][_0x763a[246]]);this[_0x763a[2964]]= [];if(_0x3536x2|| this[_0x763a[1179]][_0x763a[2628]](this[_0x763a[724]][_0x763a[246]])&& 2<= this[_0x763a[724]][_0x763a[117]]&& 2<= this[_0x763a[724]][_0x763a[119]]){var _0x3536x3=0;_0x3536x2&& (this[_0x763a[2957]]|| (this[_0x763a[2964]][_0x763a[207]](this[_0x763a[2735]](_0x763a[936],_0x3536x3++)),this[_0x763a[2964]][_0x763a[207]](this[_0x763a[2735]](_0x763a[2965],_0x3536x3++)),this[_0x763a[2964]][_0x763a[207]](this[_0x763a[2735]](_0x763a[2966],_0x3536x3++)),this[_0x763a[2964]][_0x763a[207]](this[_0x763a[2735]](_0x763a[2967],_0x3536x3++)),this[_0x763a[2964]][_0x763a[207]](this[_0x763a[2735]](_0x763a[2968],_0x3536x3++)),this[_0x763a[2964]][_0x763a[207]](this[_0x763a[2735]](_0x763a[2969],_0x3536x3++)),this[_0x763a[2964]][_0x763a[207]](this[_0x763a[2735]](_0x763a[2970],_0x3536x3++))),this[_0x763a[2964]][_0x763a[207]](this[_0x763a[2735]](_0x763a[2971],_0x3536x3++)));_0x3536x2= this[_0x763a[1179]][_0x763a[251]][_0x763a[1721]](this[_0x763a[724]][_0x763a[246]]);null!= _0x3536x2&& (!_0x3536x2[_0x763a[1500]]&& !this[_0x763a[1179]][_0x763a[1730]](this[_0x763a[724]][_0x763a[246]])&& this[_0x763a[1179]][_0x763a[2628]](this[_0x763a[724]][_0x763a[246]]))&& (this[_0x763a[2972]]= this[_0x763a[2735]](mxConstants.CURSOR_LABEL_HANDLE,mxEvent.LABEL_HANDLE,mxConstants.LABEL_HANDLE_SIZE,mxConstants.LABEL_HANDLE_FILLCOLOR),this[_0x763a[2964]][_0x763a[207]](this[_0x763a[2972]]))}else {this[_0x763a[1179]][_0x763a[1712]](this[_0x763a[724]][_0x763a[246]])&& (!this[_0x763a[1179]][_0x763a[2657]](this[_0x763a[724]][_0x763a[246]])&& 2> this[_0x763a[724]][_0x763a[117]]&& 2> this[_0x763a[724]][_0x763a[119]])&& (this[_0x763a[2972]]= this[_0x763a[2735]](mxConstants.CURSOR_MOVABLE_VERTEX,null,null,mxConstants.LABEL_HANDLE_FILLCOLOR),this[_0x763a[2964]][_0x763a[207]](this[_0x763a[2972]]))}};if(this[_0x763a[2809]]&& (0>= mxGraphHandler[_0x763a[202]][_0x763a[2795]]|| this[_0x763a[1179]][_0x763a[2694]]()< mxGraphHandler[_0x763a[202]][_0x763a[2795]])){this[_0x763a[2973]]= this[_0x763a[2735]](_0x763a[356],mxEvent.ROTATION_HANDLE,mxConstants[_0x763a[2974]]+ 3,mxConstants.HANDLE_FILLCOLOR),this[_0x763a[2964]][_0x763a[207]](this[_0x763a[2973]])};this[_0x763a[258]]()};mxVertexHandler[_0x763a[202]][_0x763a[2962]]= function(_0x3536x2){return new mxRectangle(Math[_0x763a[488]](_0x3536x2[_0x763a[235]]),Math[_0x763a[488]](_0x3536x2[_0x763a[236]]),Math[_0x763a[488]](_0x3536x2[_0x763a[117]]),Math[_0x763a[488]](_0x3536x2[_0x763a[119]]))};mxVertexHandler[_0x763a[202]][_0x763a[2963]]= function(_0x3536x2){_0x3536x2= new mxRectangleShape(_0x3536x2,null,this[_0x763a[2975]]());_0x3536x2[_0x763a[1307]]= this[_0x763a[2976]]();_0x3536x2[_0x763a[1522]]= this[_0x763a[2977]]();return _0x3536x2};mxVertexHandler[_0x763a[202]][_0x763a[2975]]= function(){return mxConstants[_0x763a[2978]]};mxVertexHandler[_0x763a[202]][_0x763a[2976]]= function(){return mxConstants[_0x763a[2979]]};mxVertexHandler[_0x763a[202]][_0x763a[2977]]= function(){return mxConstants[_0x763a[2980]]};mxVertexHandler[_0x763a[202]][_0x763a[2735]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){_0x3536x4= _0x3536x4|| mxConstants[_0x763a[2974]];_0x3536x4= new mxRectangle(0,0,_0x3536x4,_0x3536x4);_0x3536x5= this[_0x763a[2981]](_0x3536x4,_0x3536x3,_0x3536x5);_0x3536x5[_0x763a[1567]]()&& null!= this[_0x763a[724]][_0x763a[963]]&& this[_0x763a[724]][_0x763a[963]][_0x763a[252]][_0x763a[265]]== this[_0x763a[1179]][_0x763a[526]]?(_0x3536x5[_0x763a[1562]][_0x763a[119]]-= 1,_0x3536x5[_0x763a[1562]][_0x763a[117]]-= 1,_0x3536x5[_0x763a[507]]= mxConstants[_0x763a[1656]],_0x3536x5[_0x763a[176]](this[_0x763a[1179]][_0x763a[526]])):(_0x3536x5[_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]]!= mxConstants[_0x763a[508]]?mxConstants[_0x763a[2334]]:mxConstants[_0x763a[508]],_0x3536x5[_0x763a[176]](this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1524]]()));mxEvent[_0x763a[2733]](_0x3536x5[_0x763a[252]],this[_0x763a[1179]],this[_0x763a[724]]);this[_0x763a[1179]][_0x763a[994]]()&& (_0x3536x5[_0x763a[252]][_0x763a[124]][_0x763a[270]]= _0x3536x2);this[_0x763a[2982]](_0x3536x3)|| (_0x3536x5[_0x763a[252]][_0x763a[124]][_0x763a[187]]= _0x763a[188]);return _0x3536x5};mxVertexHandler[_0x763a[202]][_0x763a[2982]]= function(_0x3536x2){return !0};mxVertexHandler[_0x763a[202]][_0x763a[2981]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return null!= this[_0x763a[2959]]?(_0x3536x2[_0x763a[117]]= this[_0x763a[2959]][_0x763a[117]],_0x3536x2[_0x763a[119]]= this[_0x763a[2959]][_0x763a[119]], new mxImageShape(_0x3536x2,this[_0x763a[2959]][_0x763a[390]])):_0x3536x3== mxEvent[_0x763a[2983]]? new mxEllipse(_0x3536x2,_0x3536x4|| mxConstants[_0x763a[2984]],mxConstants.HANDLE_STROKECOLOR): new mxRectangleShape(_0x3536x2,_0x3536x4|| mxConstants[_0x763a[2984]],mxConstants.HANDLE_STROKECOLOR)};mxVertexHandler[_0x763a[202]][_0x763a[2985]]= function(_0x3536x2,_0x3536x3,_0x3536x4){null!= _0x3536x2&& (_0x3536x2[_0x763a[1562]][_0x763a[235]]= Math[_0x763a[488]](_0x3536x3- _0x3536x2[_0x763a[1562]][_0x763a[117]]/ 2),_0x3536x2[_0x763a[1562]][_0x763a[236]]= Math[_0x763a[488]](_0x3536x4- _0x3536x2[_0x763a[1562]][_0x763a[119]]/ 2),_0x3536x2[_0x763a[258]]())};mxVertexHandler[_0x763a[202]][_0x763a[2986]]= function(_0x3536x2){if(_0x3536x2[_0x763a[729]](this[_0x763a[2973]])){return mxEvent[_0x763a[2983]]};if(_0x3536x2[_0x763a[729]](this[_0x763a[2972]])){return mxEvent[_0x763a[2987]]};if(null!= this[_0x763a[2964]]){for(var _0x3536x3=this[_0x763a[2353]],_0x3536x3=this[_0x763a[2958]]&& (mxClient[_0x763a[80]]|| 0< _0x3536x3)? new mxRectangle(_0x3536x2[_0x763a[734]]()- _0x3536x3,_0x3536x2[_0x763a[735]]()- _0x3536x3,2* _0x3536x3,2* _0x3536x3):null,_0x3536x4=0;_0x3536x4< this[_0x763a[2964]][_0x763a[67]];_0x3536x4++){if(_0x3536x2[_0x763a[729]](this[_0x763a[2964]][_0x3536x4])|| null!= _0x3536x3&& mxUtils[_0x763a[1825]](this[_0x763a[2964]][_0x3536x4][_0x763a[1562]],_0x3536x3)){return _0x3536x4}}};return null};mxVertexHandler[_0x763a[202]][_0x763a[787]]= function(_0x3536x2,_0x3536x3){if(!_0x3536x3[_0x763a[721]]()&& this[_0x763a[1179]][_0x763a[994]]()&& !this[_0x763a[1179]][_0x763a[2579]](_0x3536x3[_0x763a[727]]())&& (0< this[_0x763a[2353]]|| _0x3536x3[_0x763a[248]]()== this[_0x763a[724]])){var _0x3536x4=this[_0x763a[2986]](_0x3536x3);null!= _0x3536x4&& (this[_0x763a[861]](_0x3536x3[_0x763a[730]](),_0x3536x3[_0x763a[732]](),_0x3536x4),_0x3536x3[_0x763a[722]]())}};mxVertexHandler[_0x763a[202]][_0x763a[861]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x2= mxUtils[_0x763a[2196]](this[_0x763a[1179]][_0x763a[526]],_0x3536x2,_0x3536x3);this[_0x763a[2739]]= _0x3536x2[_0x763a[235]];this[_0x763a[2740]]= _0x3536x2[_0x763a[236]];this[_0x763a[1983]]= _0x3536x4;this[_0x763a[2732]][_0x763a[252]][_0x763a[124]][_0x763a[495]]= _0x3536x4== mxEvent[_0x763a[2983]]?_0x763a[497]:_0x763a[130];this[_0x763a[2988]]= this[_0x763a[2963]](this[_0x763a[1562]]);!(mxClient[_0x763a[48]]&& 0!= Number(this[_0x763a[724]][_0x763a[124]][mxConstants[_0x763a[2278]]]|| _0x763a[468]))&& null!= this[_0x763a[724]][_0x763a[963]]&& this[_0x763a[724]][_0x763a[963]][_0x763a[252]][_0x763a[265]]== this[_0x763a[1179]][_0x763a[526]]?(this[_0x763a[2988]][_0x763a[507]]= mxConstants[_0x763a[1656]],this[_0x763a[2988]][_0x763a[176]](this[_0x763a[1179]][_0x763a[526]])):(this[_0x763a[2988]][_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]]!= mxConstants[_0x763a[508]]?mxConstants[_0x763a[1523]]:mxConstants[_0x763a[508]],this[_0x763a[2988]][_0x763a[176]](this[_0x763a[1179]][_0x763a[441]][_0x763a[1524]]()))};mxVertexHandler[_0x763a[202]][_0x763a[788]]= function(_0x3536x2,_0x3536x3){if(!_0x3536x3[_0x763a[721]]()&& null!= this[_0x763a[1983]]){var _0x3536x4= new mxPoint(_0x3536x3[_0x763a[734]](),_0x3536x3[_0x763a[735]]()),_0x3536x5=this[_0x763a[1179]][_0x763a[1018]](_0x3536x3[_0x763a[727]]()),_0x3536x9=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]];if(this[_0x763a[1983]]== mxEvent[_0x763a[2987]]){_0x3536x5&& (_0x3536x4[_0x763a[235]]= this[_0x763a[1179]][_0x763a[1021]](_0x3536x4[_0x763a[235]]/ _0x3536x9)* _0x3536x9,_0x3536x4[_0x763a[236]]= this[_0x763a[1179]][_0x763a[1021]](_0x3536x4[_0x763a[236]]/ _0x3536x9)* _0x3536x9),this[_0x763a[2985]](this[_0x763a[2964]][this[_0x763a[2964]][_0x763a[67]]- 1],_0x3536x4[_0x763a[235]],_0x3536x4[_0x763a[236]])}else {if(this[_0x763a[1983]]== mxEvent[_0x763a[2983]]){var _0x3536xa=this[_0x763a[724]][_0x763a[235]]+ this[_0x763a[724]][_0x763a[117]]/ 2- _0x3536x4[_0x763a[235]],_0x3536x12=this[_0x763a[724]][_0x763a[236]]+ this[_0x763a[724]][_0x763a[119]]/ 2- _0x3536x4[_0x763a[236]];this[_0x763a[2989]]= 0!= _0x3536xa?180* Math[_0x763a[2990]](_0x3536x12/ _0x3536xa)/ Math[_0x763a[424]]+ 90:0> _0x3536x12?180:0;0< _0x3536xa&& (this[_0x763a[2989]]-= 180);this[_0x763a[2960]]&& (_0x3536xa= _0x3536x4[_0x763a[235]]- this[_0x763a[724]][_0x763a[241]](),_0x3536x12= _0x3536x4[_0x763a[236]]- this[_0x763a[724]][_0x763a[242]](),_0x3536xa= Math[_0x763a[425]](Math[_0x763a[428]](_0x3536xa* _0x3536xa+ _0x3536x12* _0x3536x12)- this[_0x763a[724]][_0x763a[119]]/ 2- 20),_0x3536xa= Math[_0x763a[160]](1,5* Math[_0x763a[243]](3,Math[_0x763a[160]](0,Math[_0x763a[488]](80/ Math[_0x763a[425]](_0x3536xa))))),this[_0x763a[2989]]= Math[_0x763a[488]](this[_0x763a[2989]]/ _0x3536xa)* _0x3536xa);this[_0x763a[2732]][_0x763a[603]]= this[_0x763a[2989]];this[_0x763a[2732]][_0x763a[258]]()}else {var _0x3536x13=mxUtils[_0x763a[431]](this[_0x763a[724]][_0x763a[124]][mxConstants[_0x763a[2278]]]|| _0x763a[468]),_0x3536x14=Math[_0x763a[426]](-_0x3536x13),_0x3536x15=Math[_0x763a[427]](-_0x3536x13),_0x3536x16= new mxPoint(this[_0x763a[724]][_0x763a[241]](),this[_0x763a[724]][_0x763a[242]]()),_0x3536xa=_0x3536x4[_0x763a[235]]- this[_0x763a[2739]],_0x3536x12=_0x3536x4[_0x763a[236]]- this[_0x763a[2740]],_0x3536x4=this[_0x763a[1179]][_0x763a[441]][_0x763a[513]],_0x3536x17=_0x3536x15* _0x3536xa+ _0x3536x14* _0x3536x12,_0x3536xa=_0x3536x14* _0x3536xa- _0x3536x15* _0x3536x12;this[_0x763a[1562]]= this[_0x763a[2991]](this[_0x763a[2961]],_0x3536xa,_0x3536x17,this[_0x763a[1983]],_0x3536x5,_0x3536x9,_0x3536x4);_0x3536x14= Math[_0x763a[426]](_0x3536x13);_0x3536x15= Math[_0x763a[427]](_0x3536x13);_0x3536x12= new mxPoint(this[_0x763a[1562]][_0x763a[241]](),this[_0x763a[1562]][_0x763a[242]]());_0x3536xa= _0x3536x12[_0x763a[235]]- _0x3536x16[_0x763a[235]];_0x3536x12= _0x3536x12[_0x763a[236]]- _0x3536x16[_0x763a[236]];_0x3536x16= _0x3536x15* _0x3536xa+ _0x3536x14* _0x3536x12- _0x3536x12;this[_0x763a[1562]][_0x763a[235]]+= _0x3536x14* _0x3536xa- _0x3536x15* _0x3536x12- _0x3536xa;this[_0x763a[1562]][_0x763a[236]]+= _0x3536x16;this[_0x763a[2932]]()}};_0x3536x3[_0x763a[722]]()}else {null!= this[_0x763a[2986]](_0x3536x3)&& _0x3536x3[_0x763a[722]](!1)}};mxVertexHandler[_0x763a[202]][_0x763a[789]]= function(_0x3536x2,_0x3536x3){if(!_0x3536x3[_0x763a[721]]()&& null!= this[_0x763a[1983]]&& null!= this[_0x763a[724]]){var _0x3536x4= new mxPoint(_0x3536x3[_0x763a[734]](),_0x3536x3[_0x763a[735]]());this[_0x763a[1179]][_0x763a[502]]()[_0x763a[473]]();try{if(this[_0x763a[1983]]== mxEvent[_0x763a[2983]]){null!= this[_0x763a[2989]]&& this[_0x763a[2992]](this[_0x763a[724]][_0x763a[246]],this[_0x763a[2989]]- (this[_0x763a[724]][_0x763a[124]][mxConstants[_0x763a[2278]]]|| 0))}else {var _0x3536x5=this[_0x763a[1179]][_0x763a[1018]](_0x3536x3[_0x763a[727]]()),_0x3536x9=mxUtils[_0x763a[431]](this[_0x763a[724]][_0x763a[124]][mxConstants[_0x763a[2278]]]|| _0x763a[468]),_0x3536xa=Math[_0x763a[426]](-_0x3536x9),_0x3536x12=Math[_0x763a[427]](-_0x3536x9),_0x3536x13=_0x3536x4[_0x763a[235]]- this[_0x763a[2739]],_0x3536x14=_0x3536x4[_0x763a[236]]- this[_0x763a[2740]],_0x3536x4=_0x3536x12* _0x3536x13+ _0x3536xa* _0x3536x14,_0x3536x13=_0x3536xa* _0x3536x13- _0x3536x12* _0x3536x14,_0x3536x14=_0x3536x4,_0x3536x15=this[_0x763a[1179]][_0x763a[441]][_0x763a[255]];this[_0x763a[2526]](this[_0x763a[724]][_0x763a[246]],_0x3536x13/ _0x3536x15,_0x3536x14/ _0x3536x15,this[_0x763a[1983]],_0x3536x5)}}finally{this[_0x763a[1179]][_0x763a[502]]()[_0x763a[476]]()};this[_0x763a[862]]();_0x3536x3[_0x763a[722]]()}};mxVertexHandler[_0x763a[202]][_0x763a[2992]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[502]]();if(_0x3536x4[_0x763a[1193]](_0x3536x2)){var _0x3536x5=_0x3536x2== this[_0x763a[724]]?this[_0x763a[724]]:this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x2);null!= _0x3536x5&& this[_0x763a[1179]][_0x763a[1717]](mxConstants.STYLE_ROTATION,(_0x3536x5[_0x763a[124]][mxConstants[_0x763a[2278]]]|| 0)+ _0x3536x3,[_0x3536x2]);if(this[_0x763a[724]][_0x763a[246]]!= _0x3536x2&& (_0x3536x5= this[_0x763a[1179]][_0x763a[1198]](_0x3536x2),null!= _0x3536x5&& !_0x3536x5[_0x763a[1500]])){if(0!= _0x3536x3){var _0x3536x9=this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1197]](_0x3536x2),_0x3536xa=this[_0x763a[1179]][_0x763a[1198]](_0x3536x9);if(!_0x3536x5[_0x763a[1500]]&& null!= _0x3536xa){var _0x3536x12=mxUtils[_0x763a[431]](_0x3536x3),_0x3536x9=Math[_0x763a[426]](_0x3536x12),_0x3536x12=Math[_0x763a[427]](_0x3536x12),_0x3536x13= new mxPoint(_0x3536x5[_0x763a[241]](),_0x3536x5[_0x763a[242]]()),_0x3536xa= new mxPoint(_0x3536xa[_0x763a[117]]/ 2,_0x3536xa[_0x763a[119]]/ 2),_0x3536x9=mxUtils[_0x763a[432]](_0x3536x13,_0x3536x9,_0x3536x12,_0x3536xa),_0x3536x5=_0x3536x5[_0x763a[238]]();_0x3536x5[_0x763a[235]]= _0x3536x9[_0x763a[235]]- _0x3536x5[_0x763a[117]]/ 2;_0x3536x5[_0x763a[236]]= _0x3536x9[_0x763a[236]]- _0x3536x5[_0x763a[119]]/ 2;_0x3536x4[_0x763a[1724]](_0x3536x2,_0x3536x5)}}else {_0x3536x5= _0x3536x5[_0x763a[238]](),_0x3536x5[_0x763a[235]]+= dx,_0x3536x5[_0x763a[236]]+= dy,_0x3536x4[_0x763a[1724]](_0x3536x2,_0x3536x5)}};_0x3536x5= _0x3536x4[_0x763a[262]](_0x3536x2);for(_0x3536x9= 0;_0x3536x9< _0x3536x5;_0x3536x9++){this[_0x763a[2992]](_0x3536x4[_0x763a[263]](_0x3536x2,_0x3536x9),_0x3536x3)}}};mxVertexHandler[_0x763a[202]][_0x763a[862]]= function(){this[_0x763a[1983]]= this[_0x763a[2989]]= null;null!= this[_0x763a[2988]]&& (this[_0x763a[2988]][_0x763a[515]](),this[_0x763a[2988]]= null);null!= this[_0x763a[2732]]&& (this[_0x763a[2732]][_0x763a[252]][_0x763a[124]][_0x763a[495]]= _0x763a[497],this[_0x763a[2961]]= this[_0x763a[2962]](this[_0x763a[724]]),this[_0x763a[1562]]= new mxRectangle(this[_0x763a[2961]][_0x763a[235]],this[_0x763a[2961]][_0x763a[236]],this[_0x763a[2961]][_0x763a[117]],this[_0x763a[2961]][_0x763a[119]]),this[_0x763a[2932]]())};mxVertexHandler[_0x763a[202]][_0x763a[2526]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=this[_0x763a[1179]][_0x763a[251]][_0x763a[1721]](_0x3536x2);if(null!= _0x3536xa){if(_0x3536x5== mxEvent[_0x763a[2987]]){_0x3536x5= this[_0x763a[1179]][_0x763a[441]][_0x763a[255]],_0x3536x3= (this[_0x763a[2972]][_0x763a[1562]][_0x763a[241]]()- this[_0x763a[2739]])/ _0x3536x5,_0x3536x4= (this[_0x763a[2972]][_0x763a[1562]][_0x763a[242]]()- this[_0x763a[2740]])/ _0x3536x5,_0x3536xa= _0x3536xa[_0x763a[238]](),null== _0x3536xa[_0x763a[1368]]?_0x3536xa[_0x763a[1368]]= new mxPoint(_0x3536x3,_0x3536x4):(_0x3536xa[_0x763a[1368]][_0x763a[235]]+= _0x3536x3,_0x3536xa[_0x763a[1368]][_0x763a[236]]+= _0x3536x4),this[_0x763a[1179]][_0x763a[251]][_0x763a[1724]](_0x3536x2,_0x3536xa)}else {_0x3536x5= this[_0x763a[2991]](_0x3536xa,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,1, new mxPoint(0,0));var _0x3536x12=mxUtils[_0x763a[431]](this[_0x763a[724]][_0x763a[124]][mxConstants[_0x763a[2278]]]|| _0x763a[468]);if(0!= _0x3536x12){_0x3536x3= _0x3536x5[_0x763a[241]]()- _0x3536xa[_0x763a[241]]();_0x3536x4= _0x3536x5[_0x763a[242]]()- _0x3536xa[_0x763a[242]]();_0x3536x9= Math[_0x763a[426]](_0x3536x12);var _0x3536x13=Math[_0x763a[427]](_0x3536x12),_0x3536x12=_0x3536x9* _0x3536x3- _0x3536x13* _0x3536x4- _0x3536x3;_0x3536x3= _0x3536x13* _0x3536x3+ _0x3536x9* _0x3536x4- _0x3536x4;_0x3536x4= _0x3536x5[_0x763a[235]]- _0x3536xa[_0x763a[235]];var _0x3536x14=_0x3536x5[_0x763a[236]]- _0x3536xa[_0x763a[236]],_0x3536x15=_0x3536x9* _0x3536x4- _0x3536x13* _0x3536x14;_0x3536x9= _0x3536x13* _0x3536x4+ _0x3536x9* _0x3536x14;_0x3536x5[_0x763a[235]]+= _0x3536x12;_0x3536x5[_0x763a[236]]+= _0x3536x3;if(!this[_0x763a[1179]][_0x763a[1742]](_0x3536x2)&& (0!= _0x3536x12|| 0!= _0x3536x3)){_0x3536x4= _0x3536xa[_0x763a[235]]- _0x3536x5[_0x763a[235]]+ _0x3536x15,_0x3536x14= _0x3536xa[_0x763a[236]]- _0x3536x5[_0x763a[236]]+ _0x3536x9,this[_0x763a[2993]](_0x3536x2,_0x3536x4,_0x3536x14)}};this[_0x763a[1179]][_0x763a[2526]](_0x3536x2,_0x3536x5)}}};mxVertexHandler[_0x763a[202]][_0x763a[2993]]= function(_0x3536x2,_0x3536x3,_0x3536x4){for(var _0x3536x5=this[_0x763a[1179]][_0x763a[502]](),_0x3536x9=_0x3536x5[_0x763a[262]](_0x3536x2),_0x3536xa=0;_0x3536xa< _0x3536x9;_0x3536xa++){var _0x3536x12=_0x3536x5[_0x763a[263]](_0x3536x2,_0x3536xa);if(_0x3536x5[_0x763a[1193]](_0x3536x12)){var _0x3536x13=this[_0x763a[1179]][_0x763a[1198]](_0x3536x12);null!= _0x3536x13&& !_0x3536x13[_0x763a[1500]]&& (_0x3536x13= _0x3536x13[_0x763a[238]](),_0x3536x13[_0x763a[235]]+= _0x3536x3,_0x3536x13[_0x763a[236]]+= _0x3536x4,_0x3536x5[_0x763a[1724]](_0x3536x12,_0x3536x13))}}};mxVertexHandler[_0x763a[202]][_0x763a[2991]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12){if(this[_0x763a[2957]]){_0x3536x12= _0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]+ _0x3536x3;var _0x3536x13=_0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]+ _0x3536x4;_0x3536x9&& (_0x3536x12= this[_0x763a[1179]][_0x763a[1021]](_0x3536x12/ _0x3536xa)* _0x3536xa,_0x3536x13= this[_0x763a[1179]][_0x763a[1021]](_0x3536x13/ _0x3536xa)* _0x3536xa);_0x3536xa= new mxRectangle(_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]],0,0);_0x3536xa[_0x763a[99]]( new mxRectangle(_0x3536x12,_0x3536x13,0,0));return _0x3536xa};var _0x3536x13=_0x3536x2[_0x763a[235]]- _0x3536x12[_0x763a[235]]* _0x3536xa,_0x3536x14=_0x3536x13+ _0x3536x2[_0x763a[117]],_0x3536x15=_0x3536x2[_0x763a[236]]- _0x3536x12[_0x763a[236]]* _0x3536xa;_0x3536x2= _0x3536x15+ _0x3536x2[_0x763a[119]];4< _0x3536x5?(_0x3536x2+= _0x3536x4,_0x3536x9&& (_0x3536x2= this[_0x763a[1179]][_0x763a[1021]](_0x3536x2/ _0x3536xa)* _0x3536xa)):3> _0x3536x5&& (_0x3536x15+= _0x3536x4,_0x3536x9&& (_0x3536x15= this[_0x763a[1179]][_0x763a[1021]](_0x3536x15/ _0x3536xa)* _0x3536xa));if(0== _0x3536x5|| 3== _0x3536x5|| 5== _0x3536x5){_0x3536x13+= _0x3536x3,_0x3536x9&& (_0x3536x13= this[_0x763a[1179]][_0x763a[1021]](_0x3536x13/ _0x3536xa)* _0x3536xa)}else {if(2== _0x3536x5|| 4== _0x3536x5|| 7== _0x3536x5){_0x3536x14+= _0x3536x3,_0x3536x9&& (_0x3536x14= this[_0x763a[1179]][_0x763a[1021]](_0x3536x14/ _0x3536xa)* _0x3536xa)}};_0x3536x9= _0x3536x14- _0x3536x13;_0x3536x2-= _0x3536x15;0> _0x3536x9&& (_0x3536x13+= _0x3536x9,_0x3536x9= Math[_0x763a[425]](_0x3536x9));0> _0x3536x2&& (_0x3536x15+= _0x3536x2,_0x3536x2= Math[_0x763a[425]](_0x3536x2));return new mxRectangle(_0x3536x13+ _0x3536x12[_0x763a[235]]* _0x3536xa,_0x3536x15+ _0x3536x12[_0x763a[236]]* _0x3536xa,_0x3536x9,_0x3536x2)};mxVertexHandler[_0x763a[202]][_0x763a[258]]= function(){this[_0x763a[2961]]= this[_0x763a[2962]](this[_0x763a[724]]);this[_0x763a[1562]]= new mxRectangle(this[_0x763a[724]][_0x763a[235]],this[_0x763a[724]][_0x763a[236]],this[_0x763a[724]][_0x763a[117]],this[_0x763a[724]][_0x763a[119]]);var _0x3536x2=this[_0x763a[724]];if(null!= this[_0x763a[2964]]){var _0x3536x3=_0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]],_0x3536x4=_0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]];if(this[_0x763a[2957]]){this[_0x763a[2985]](this[_0x763a[2964]][0],_0x3536x3,_0x3536x4)}else {var _0x3536x5=_0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]/ 2,_0x3536x9=_0x3536x2[_0x763a[236]]+ _0x3536x2[_0x763a[119]]/ 2;if(1< this[_0x763a[2964]][_0x763a[67]]){var _0x3536xa=mxUtils[_0x763a[431]](_0x3536x2[_0x763a[124]][mxConstants[_0x763a[2278]]]|| _0x763a[468]),_0x3536x12=Math[_0x763a[426]](_0x3536xa),_0x3536xa=Math[_0x763a[427]](_0x3536xa),_0x3536x13= new mxPoint(_0x3536x2[_0x763a[241]](),_0x3536x2[_0x763a[242]]()),_0x3536x14=mxUtils[_0x763a[432]]( new mxPoint(_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]]),_0x3536x12,_0x3536xa,_0x3536x13);this[_0x763a[2985]](this[_0x763a[2964]][0],_0x3536x14[_0x763a[235]],_0x3536x14[_0x763a[236]]);_0x3536x14[_0x763a[235]]= _0x3536x5;_0x3536x14[_0x763a[236]]= _0x3536x2[_0x763a[236]];_0x3536x14= mxUtils[_0x763a[432]](_0x3536x14,_0x3536x12,_0x3536xa,_0x3536x13);this[_0x763a[2985]](this[_0x763a[2964]][1],_0x3536x14[_0x763a[235]],_0x3536x14[_0x763a[236]]);_0x3536x14[_0x763a[235]]= _0x3536x3;_0x3536x14[_0x763a[236]]= _0x3536x2[_0x763a[236]];_0x3536x14= mxUtils[_0x763a[432]](_0x3536x14,_0x3536x12,_0x3536xa,_0x3536x13);this[_0x763a[2985]](this[_0x763a[2964]][2],_0x3536x14[_0x763a[235]],_0x3536x14[_0x763a[236]]);_0x3536x14[_0x763a[235]]= _0x3536x2[_0x763a[235]];_0x3536x14[_0x763a[236]]= _0x3536x9;_0x3536x14= mxUtils[_0x763a[432]](_0x3536x14,_0x3536x12,_0x3536xa,_0x3536x13);this[_0x763a[2985]](this[_0x763a[2964]][3],_0x3536x14[_0x763a[235]],_0x3536x14[_0x763a[236]]);_0x3536x14[_0x763a[235]]= _0x3536x3;_0x3536x14[_0x763a[236]]= _0x3536x9;_0x3536x14= mxUtils[_0x763a[432]](_0x3536x14,_0x3536x12,_0x3536xa,_0x3536x13);this[_0x763a[2985]](this[_0x763a[2964]][4],_0x3536x14[_0x763a[235]],_0x3536x14[_0x763a[236]]);_0x3536x14[_0x763a[235]]= _0x3536x2[_0x763a[235]];_0x3536x14[_0x763a[236]]= _0x3536x4;_0x3536x14= mxUtils[_0x763a[432]](_0x3536x14,_0x3536x12,_0x3536xa,_0x3536x13);this[_0x763a[2985]](this[_0x763a[2964]][5],_0x3536x14[_0x763a[235]],_0x3536x14[_0x763a[236]]);_0x3536x14[_0x763a[235]]= _0x3536x5;_0x3536x14[_0x763a[236]]= _0x3536x4;_0x3536x14= mxUtils[_0x763a[432]](_0x3536x14,_0x3536x12,_0x3536xa,_0x3536x13);this[_0x763a[2985]](this[_0x763a[2964]][6],_0x3536x14[_0x763a[235]],_0x3536x14[_0x763a[236]]);_0x3536x14[_0x763a[235]]= _0x3536x3;_0x3536x14[_0x763a[236]]= _0x3536x4;_0x3536x14= mxUtils[_0x763a[432]](_0x3536x14,_0x3536x12,_0x3536xa,_0x3536x13);this[_0x763a[2985]](this[_0x763a[2964]][7],_0x3536x14[_0x763a[235]],_0x3536x14[_0x763a[236]]);this[_0x763a[2985]](this[_0x763a[2964]][8],_0x3536x5+ _0x3536x2[_0x763a[2079]][_0x763a[235]],_0x3536x9+ _0x3536x2[_0x763a[2079]][_0x763a[236]])}else {2<= this[_0x763a[724]][_0x763a[117]]&& 2<= this[_0x763a[724]][_0x763a[119]]?this[_0x763a[2985]](this[_0x763a[2964]][0],_0x3536x5+ _0x3536x2[_0x763a[2079]][_0x763a[235]],_0x3536x9+ _0x3536x2[_0x763a[2079]][_0x763a[236]]):this[_0x763a[2985]](this[_0x763a[2964]][0],_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]])}}};null!= this[_0x763a[2973]]&& (_0x3536xa= mxUtils[_0x763a[431]](this[_0x763a[724]][_0x763a[124]][mxConstants[_0x763a[2278]]]|| _0x763a[468]),_0x3536x12= Math[_0x763a[426]](_0x3536xa),_0x3536xa= Math[_0x763a[427]](_0x3536xa),_0x3536x13= new mxPoint(this[_0x763a[724]][_0x763a[241]](),this[_0x763a[724]][_0x763a[242]]()),_0x3536x14= mxUtils[_0x763a[432]]( new mxPoint(_0x3536x2[_0x763a[235]]+ _0x3536x2[_0x763a[117]]/ 2,_0x3536x2[_0x763a[236]]- 16),_0x3536x12,_0x3536xa,_0x3536x13),this[_0x763a[2985]](this[_0x763a[2973]],_0x3536x14[_0x763a[235]],_0x3536x14[_0x763a[236]]));this[_0x763a[2732]][_0x763a[603]]= Number(this[_0x763a[724]][_0x763a[124]][mxConstants[_0x763a[2278]]]|| _0x763a[468]);this[_0x763a[2932]]()};mxVertexHandler[_0x763a[202]][_0x763a[2932]]= function(){null!= this[_0x763a[2988]]&& (this[_0x763a[2988]][_0x763a[1562]]= this[_0x763a[1562]],this[_0x763a[2988]][_0x763a[252]][_0x763a[265]]== this[_0x763a[1179]][_0x763a[526]]&& (this[_0x763a[2988]][_0x763a[1562]][_0x763a[117]]= Math[_0x763a[160]](0,this[_0x763a[2988]][_0x763a[1562]][_0x763a[117]]- 1),this[_0x763a[2988]][_0x763a[1562]][_0x763a[119]]= Math[_0x763a[160]](0,this[_0x763a[2988]][_0x763a[1562]][_0x763a[119]]- 1)),this[_0x763a[2988]][_0x763a[603]]= Number(this[_0x763a[724]][_0x763a[124]][mxConstants[_0x763a[2278]]]|| _0x763a[468]),this[_0x763a[2988]][_0x763a[258]]());this[_0x763a[2732]][_0x763a[1562]]= this[_0x763a[1562]];this[_0x763a[2732]][_0x763a[258]]()};mxVertexHandler[_0x763a[202]][_0x763a[515]]= function(){null!= this[_0x763a[2988]]&& (this[_0x763a[2988]][_0x763a[515]](),this[_0x763a[2988]]= null);this[_0x763a[2732]][_0x763a[515]]();this[_0x763a[2972]]= this[_0x763a[2732]]= null;if(null!= this[_0x763a[2964]]){for(var _0x3536x2=0;_0x3536x2< this[_0x763a[2964]][_0x763a[67]];_0x3536x2++){this[_0x763a[2964]][_0x3536x2][_0x763a[515]](),this[_0x763a[2964]][_0x3536x2]= null}}};function mxEdgeHandler(_0x3536x2){null!= _0x3536x2&& (this[_0x763a[724]]= _0x3536x2,this[_0x763a[176]]())}mxEdgeHandler[_0x763a[202]][_0x763a[1179]]= null;mxEdgeHandler[_0x763a[202]][_0x763a[724]]= null;mxEdgeHandler[_0x763a[202]][_0x763a[2885]]= null;mxEdgeHandler[_0x763a[202]][_0x763a[2886]]= null;mxEdgeHandler[_0x763a[202]][_0x763a[267]]= null;mxEdgeHandler[_0x763a[202]][_0x763a[253]]= null;mxEdgeHandler[_0x763a[202]][_0x763a[2994]]= null;mxEdgeHandler[_0x763a[202]][_0x763a[2972]]= null;mxEdgeHandler[_0x763a[202]][_0x763a[2797]]= !0;mxEdgeHandler[_0x763a[202]][_0x763a[2771]]= !1;mxEdgeHandler[_0x763a[202]][_0x763a[2995]]= !1;mxEdgeHandler[_0x763a[202]][_0x763a[574]]= !1;mxEdgeHandler[_0x763a[202]][_0x763a[2958]]= !0;mxEdgeHandler[_0x763a[202]][_0x763a[2996]]= !1;mxEdgeHandler[_0x763a[202]][_0x763a[2959]]= null;mxEdgeHandler[_0x763a[202]][_0x763a[2353]]= 0;mxEdgeHandler[_0x763a[202]][_0x763a[176]]= function(){this[_0x763a[1179]]= this[_0x763a[724]][_0x763a[441]][_0x763a[1179]];this[_0x763a[2885]]= this[_0x763a[1689]]();this[_0x763a[2886]]= new mxConstraintHandler(this[_0x763a[1179]]);this[_0x763a[1525]]= [];this[_0x763a[2997]]= this[_0x763a[2998]](this[_0x763a[724]]);this[_0x763a[253]]= this[_0x763a[2963]](this[_0x763a[2997]]);this[_0x763a[253]][_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]]!= mxConstants[_0x763a[508]]?mxConstants[_0x763a[2334]]:mxConstants[_0x763a[508]];this[_0x763a[253]][_0x763a[176]](this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1524]]());this[_0x763a[253]][_0x763a[1564]]= 0;this[_0x763a[253]][_0x763a[252]][_0x763a[124]][_0x763a[270]]= mxConstants[_0x763a[2831]];mxEvent[_0x763a[169]](this[_0x763a[253]][_0x763a[252]],_0x763a[760],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[1179]][_0x763a[761]](_0x3536x2,this[_0x763a[724]][_0x763a[246]])}));mxEvent[_0x763a[759]](this[_0x763a[253]][_0x763a[252]],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[2771]]&& this[_0x763a[2999]](_0x3536x2)?this[_0x763a[3000]](this[_0x763a[724]],_0x3536x2):this[_0x763a[1179]][_0x763a[758]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x3536x2,this[_0x763a[724]]))}),mxUtils[_0x763a[885]](this,function(_0x3536x2){var _0x3536x4=this[_0x763a[724]][_0x763a[246]];if(null!= this[_0x763a[1983]]){var _0x3536x5=mxUtils[_0x763a[2196]](this[_0x763a[1179]][_0x763a[526]],mxEvent[_0x763a[731]](_0x3536x2),mxEvent[_0x763a[733]](_0x3536x2)),_0x3536x4=this[_0x763a[1179]][_0x763a[999]](_0x3536x5[_0x763a[235]],_0x3536x5[_0x763a[236]]);this[_0x763a[1179]][_0x763a[1730]](_0x3536x4)&& this[_0x763a[1179]][_0x763a[2688]](_0x3536x4,_0x3536x5[_0x763a[235]],_0x3536x5[_0x763a[236]])&& (_0x3536x4= null)};this[_0x763a[1179]][_0x763a[758]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x3536x2,this[_0x763a[1179]][_0x763a[249]]()[_0x763a[248]](_0x3536x4)))}),mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[1179]][_0x763a[758]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x3536x2,this[_0x763a[724]]))}));this[_0x763a[574]]= null!= this[_0x763a[724]][_0x763a[963]]&& this[_0x763a[724]][_0x763a[963]][_0x763a[252]][_0x763a[265]]== this[_0x763a[1179]][_0x763a[526]];if(!this[_0x763a[574]]){var _0x3536x2=this[_0x763a[724]][_0x763a[2089]](!0);null!= _0x3536x2&& (this[_0x763a[574]]= null!= _0x3536x2[_0x763a[963]]&& _0x3536x2[_0x763a[963]][_0x763a[252]][_0x763a[265]]== this[_0x763a[1179]][_0x763a[526]]);this[_0x763a[574]]|| (_0x3536x2= this[_0x763a[724]][_0x763a[2089]](!1),null!= _0x3536x2&& (this[_0x763a[574]]= null!= _0x3536x2[_0x763a[963]]&& _0x3536x2[_0x763a[963]][_0x763a[252]][_0x763a[265]]== this[_0x763a[1179]][_0x763a[526]]))};if(this[_0x763a[1179]][_0x763a[2694]]()< mxGraphHandler[_0x763a[202]][_0x763a[2795]]|| 0>= mxGraphHandler[_0x763a[202]][_0x763a[2795]]){this[_0x763a[2994]]= this[_0x763a[3001]]()};this[_0x763a[685]]= new mxPoint(this[_0x763a[724]][_0x763a[2079]][_0x763a[235]],this[_0x763a[724]][_0x763a[2079]][_0x763a[236]]);this[_0x763a[2972]]= new mxRectangleShape( new mxRectangle,mxConstants.LABEL_HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR);this[_0x763a[2972]][_0x763a[1229]]= !1;this[_0x763a[3002]](this[_0x763a[2972]]);this[_0x763a[2972]][_0x763a[252]][_0x763a[124]][_0x763a[270]]= mxConstants[_0x763a[3003]];mxEvent[_0x763a[2733]](this[_0x763a[2972]][_0x763a[252]],this[_0x763a[1179]],this[_0x763a[724]]);this[_0x763a[258]]()};mxEdgeHandler[_0x763a[202]][_0x763a[2999]]= function(_0x3536x2){return mxEvent[_0x763a[774]](_0x3536x2)};mxEdgeHandler[_0x763a[202]][_0x763a[3004]]= function(_0x3536x2){return mxEvent[_0x763a[774]](_0x3536x2)};mxEdgeHandler[_0x763a[202]][_0x763a[2998]]= function(_0x3536x2){return _0x3536x2[_0x763a[439]]};mxEdgeHandler[_0x763a[202]][_0x763a[2963]]= function(_0x3536x2){_0x3536x2= new mxPolyline(_0x3536x2,this[_0x763a[2975]]());_0x3536x2[_0x763a[1307]]= this[_0x763a[2976]]();_0x3536x2[_0x763a[1522]]= this[_0x763a[2977]]();return _0x3536x2};mxEdgeHandler[_0x763a[202]][_0x763a[2975]]= function(){return mxConstants[_0x763a[3005]]};mxEdgeHandler[_0x763a[202]][_0x763a[2976]]= function(){return mxConstants[_0x763a[3006]]};mxEdgeHandler[_0x763a[202]][_0x763a[2977]]= function(){return mxConstants[_0x763a[3007]]};mxEdgeHandler[_0x763a[202]][_0x763a[2907]]= function(_0x3536x2){return !0};mxEdgeHandler[_0x763a[202]][_0x763a[1689]]= function(){var _0x3536x2= new mxCellMarker(this[_0x763a[1179]]),_0x3536x3=this;_0x3536x2[_0x763a[736]]= function(_0x3536x2){var _0x3536x5=mxCellMarker[_0x763a[202]][_0x763a[736]][_0x763a[183]](this,arguments);if(!_0x3536x3[_0x763a[2907]](_0x3536x5)){return null};var _0x3536x9=_0x3536x3[_0x763a[1179]][_0x763a[502]]();if(_0x3536x5== _0x3536x3[_0x763a[724]][_0x763a[246]]|| null!= _0x3536x5&& !_0x3536x3[_0x763a[1179]][_0x763a[2405]]&& _0x3536x9[_0x763a[250]](_0x3536x5)){_0x3536x5= null};return _0x3536x5};_0x3536x2[_0x763a[2872]]= function(_0x3536x2){var _0x3536x5=_0x3536x3[_0x763a[1179]][_0x763a[502]](),_0x3536x5=_0x3536x3[_0x763a[1179]][_0x763a[441]][_0x763a[2292]](_0x3536x2,_0x3536x3[_0x763a[1179]][_0x763a[441]][_0x763a[248]](_0x3536x5[_0x763a[1709]](_0x3536x3[_0x763a[724]][_0x763a[246]],!_0x3536x3[_0x763a[729]])),!_0x3536x3[_0x763a[729]]),_0x3536x5=null!= _0x3536x5?_0x3536x5[_0x763a[246]]:null;_0x3536x3[_0x763a[267]]= _0x3536x3[_0x763a[2909]](_0x3536x3[_0x763a[729]]?_0x3536x2[_0x763a[246]]:_0x3536x5,_0x3536x3[_0x763a[729]]?_0x3536x5:_0x3536x2[_0x763a[246]]);return null== _0x3536x3[_0x763a[267]]};return _0x3536x2};mxEdgeHandler[_0x763a[202]][_0x763a[2909]]= function(_0x3536x2,_0x3536x3){return this[_0x763a[1179]][_0x763a[2500]](this[_0x763a[724]][_0x763a[246]],_0x3536x2,_0x3536x3)};mxEdgeHandler[_0x763a[202]][_0x763a[3001]]= function(){for(var _0x3536x2=this[_0x763a[724]][_0x763a[246]],_0x3536x3=[],_0x3536x4=0;_0x3536x4< this[_0x763a[2997]][_0x763a[67]];_0x3536x4++){if(this[_0x763a[3008]](_0x3536x4)){var _0x3536x5=_0x3536x4== this[_0x763a[2997]][_0x763a[67]]- 1;if((_0x3536x5= 0== _0x3536x4|| _0x3536x5)|| this[_0x763a[1179]][_0x763a[2662]](_0x3536x2)){var _0x3536x9=this[_0x763a[3009]](_0x3536x4);this[_0x763a[3002]](_0x3536x9);mxClient[_0x763a[754]]&& _0x3536x9[_0x763a[252]][_0x763a[57]](_0x763a[1377],_0x763a[130]);if(this[_0x763a[3010]](_0x3536x4)){if(mxClient[_0x763a[754]]){var _0x3536xa=mxUtils[_0x763a[885]](this,function(_0x3536x2){_0x3536x2= mxUtils[_0x763a[2196]](this[_0x763a[1179]][_0x763a[526]],mxEvent[_0x763a[731]](_0x3536x2),mxEvent[_0x763a[733]](_0x3536x2));return this[_0x763a[1179]][_0x763a[441]][_0x763a[248]](this[_0x763a[1179]][_0x763a[999]](_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]]))});mxEvent[_0x763a[2733]](_0x3536x9[_0x763a[252]],this[_0x763a[1179]],_0x3536xa)}else {_0x3536x9[_0x763a[252]][_0x763a[124]][_0x763a[270]]= mxConstants[_0x763a[3011]],mxEvent[_0x763a[2733]](_0x3536x9[_0x763a[252]],this[_0x763a[1179]],this[_0x763a[724]])}};_0x3536x3[_0x763a[207]](_0x3536x9);_0x3536x5|| (this[_0x763a[1525]][_0x763a[207]]( new mxPoint(0,0)),_0x3536x9[_0x763a[252]][_0x763a[124]][_0x763a[187]]= _0x763a[188])}}};return _0x3536x3};mxEdgeHandler[_0x763a[202]][_0x763a[3010]]= function(_0x3536x2){return !0};mxEdgeHandler[_0x763a[202]][_0x763a[3008]]= function(_0x3536x2){return !0};mxEdgeHandler[_0x763a[202]][_0x763a[3009]]= function(_0x3536x2){if(null!= this[_0x763a[2959]]){return new mxImageShape( new mxRectangle(0,0,this[_0x763a[2959]][_0x763a[117]],this[_0x763a[2959]][_0x763a[119]]),this[_0x763a[2959]][_0x763a[390]])};_0x3536x2= mxConstants[_0x763a[2974]];this[_0x763a[574]]&& (_0x3536x2-= 1);return new mxRectangleShape( new mxRectangle(0,0,_0x3536x2,_0x3536x2),mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR)};mxEdgeHandler[_0x763a[202]][_0x763a[3002]]= function(_0x3536x2){this[_0x763a[574]]?(_0x3536x2[_0x763a[507]]= mxConstants[_0x763a[1656]],_0x3536x2[_0x763a[176]](this[_0x763a[1179]][_0x763a[526]])):(_0x3536x2[_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]]!= mxConstants[_0x763a[508]]?mxConstants[_0x763a[2334]]:mxConstants[_0x763a[508]],_0x3536x2[_0x763a[176]](this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1524]]()))};mxEdgeHandler[_0x763a[202]][_0x763a[2986]]= function(_0x3536x2){if(null!= this[_0x763a[2994]]){for(var _0x3536x3=this[_0x763a[2353]],_0x3536x3=this[_0x763a[2958]]&& (mxClient[_0x763a[80]]|| 0< _0x3536x3)? new mxRectangle(_0x3536x2[_0x763a[734]]()- _0x3536x3,_0x3536x2[_0x763a[735]]()- _0x3536x3,2* _0x3536x3,2* _0x3536x3):null,_0x3536x4=0;_0x3536x4< this[_0x763a[2994]][_0x763a[67]];_0x3536x4++){if((_0x3536x2[_0x763a[729]](this[_0x763a[2994]][_0x3536x4])|| null!= _0x3536x3&& mxUtils[_0x763a[1825]](this[_0x763a[2994]][_0x3536x4][_0x763a[1562]],_0x3536x3))&& _0x763a[188]!= this[_0x763a[2994]][_0x3536x4][_0x763a[252]][_0x763a[124]][_0x763a[187]]){return _0x3536x4}}};if(_0x3536x2[_0x763a[729]](this[_0x763a[2972]])&& _0x763a[188]!= this[_0x763a[2972]][_0x763a[252]][_0x763a[124]][_0x763a[187]]|| _0x3536x2[_0x763a[729]](this[_0x763a[724]][_0x763a[963]])){if(!mxClient[_0x763a[75]]&& !mxClient[_0x763a[76]]|| _0x763a[2822]!= _0x3536x2[_0x763a[728]]()[_0x763a[301]]){return mxEvent[_0x763a[2987]]}};return null};mxEdgeHandler[_0x763a[202]][_0x763a[787]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=null,_0x3536x4=this[_0x763a[2986]](_0x3536x3);null!= _0x3536x4&& (!_0x3536x3[_0x763a[721]]()&& this[_0x763a[1179]][_0x763a[994]]()&& !this[_0x763a[1179]][_0x763a[2579]](_0x3536x3[_0x763a[727]]()))&& (this[_0x763a[2995]]&& this[_0x763a[3004]](_0x3536x3[_0x763a[727]]())?this[_0x763a[3012]](this[_0x763a[724]],_0x3536x4):(_0x3536x4!= mxEvent[_0x763a[2987]]|| this[_0x763a[1179]][_0x763a[2628]](_0x3536x3[_0x763a[736]]()))&& this[_0x763a[861]](_0x3536x3[_0x763a[730]](),_0x3536x3[_0x763a[732]](),_0x3536x4),_0x3536x3[_0x763a[722]]())};mxEdgeHandler[_0x763a[202]][_0x763a[861]]= function(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[2739]]= _0x3536x2;this[_0x763a[2740]]= _0x3536x3;this[_0x763a[729]]= null== this[_0x763a[2994]]?!1:0== _0x3536x4;this[_0x763a[3013]]= null== this[_0x763a[2994]]?!1:_0x3536x4== this[_0x763a[2994]][_0x763a[67]]- 1;this[_0x763a[3014]]= _0x3536x4== mxEvent[_0x763a[2987]];if(this[_0x763a[729]]|| this[_0x763a[3013]]){if(_0x3536x2= this[_0x763a[724]][_0x763a[246]],_0x3536x3= this[_0x763a[1179]][_0x763a[251]][_0x763a[1709]](_0x3536x2,this[_0x763a[729]]),null== _0x3536x3&& this[_0x763a[1179]][_0x763a[2661]](_0x3536x2,this[_0x763a[729]])|| null!= _0x3536x3&& this[_0x763a[1179]][_0x763a[2551]](_0x3536x2,_0x3536x3,this[_0x763a[729]])){this[_0x763a[1983]]= _0x3536x4}}else {this[_0x763a[1983]]= _0x3536x4}};mxEdgeHandler[_0x763a[202]][_0x763a[3015]]= function(_0x3536x2,_0x3536x3){return this[_0x763a[724]][_0x763a[238]]()};mxEdgeHandler[_0x763a[202]][_0x763a[3016]]= function(){return this[_0x763a[1179]][_0x763a[1020]]* this[_0x763a[1179]][_0x763a[441]][_0x763a[255]]/ 2};mxEdgeHandler[_0x763a[202]][_0x763a[2689]]= function(_0x3536x2){var _0x3536x3= new mxPoint(_0x3536x2[_0x763a[734]](),_0x3536x2[_0x763a[735]]()),_0x3536x4=this[_0x763a[3016]](),_0x3536x5=this[_0x763a[1179]][_0x763a[249]](),_0x3536x9=!1,_0x3536xa=!1;if(this[_0x763a[2996]]&& 0< _0x3536x4){var _0x3536x12=function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x5=_0x3536x2[_0x763a[235]];Math[_0x763a[425]](_0x3536x3[_0x763a[235]]- _0x3536x5)< _0x3536x4&& (_0x3536x3[_0x763a[235]]= _0x3536x5,_0x3536x9= !0);_0x3536x2= _0x3536x2[_0x763a[236]];Math[_0x763a[425]](_0x3536x3[_0x763a[236]]- _0x3536x2)< _0x3536x4&& (_0x3536x3[_0x763a[236]]= _0x3536x2,_0x3536xa= !0)}},_0x3536x13=function(_0x3536x2){null!= _0x3536x2&& _0x3536x12[_0x763a[239]](this, new mxPoint(_0x3536x5[_0x763a[2230]](_0x3536x2),_0x3536x5[_0x763a[2228]](_0x3536x2)))};_0x3536x13[_0x763a[239]](this,this[_0x763a[724]][_0x763a[2089]](!0));_0x3536x13[_0x763a[239]](this,this[_0x763a[724]][_0x763a[2089]](!1));if(null!= this[_0x763a[2997]]){for(_0x3536x13= 0;_0x3536x13< this[_0x763a[2997]];_0x3536x13++){_0x3536x13!= this[_0x763a[1983]]&& _0x3536x12[_0x763a[239]](this,this[_0x763a[2997]][_0x3536x13])}}};this[_0x763a[1179]][_0x763a[1018]](_0x3536x2[_0x763a[727]]())&& (_0x3536x2= _0x3536x5[_0x763a[255]],_0x3536x13= _0x3536x5[_0x763a[513]],_0x3536x9|| (_0x3536x3[_0x763a[235]]= (this[_0x763a[1179]][_0x763a[1021]](_0x3536x3[_0x763a[235]]/ _0x3536x2- _0x3536x13[_0x763a[235]])+ _0x3536x13[_0x763a[235]])* _0x3536x2),_0x3536xa|| (_0x3536x3[_0x763a[236]]= (this[_0x763a[1179]][_0x763a[1021]](_0x3536x3[_0x763a[236]]/ _0x3536x2- _0x3536x13[_0x763a[236]])+ _0x3536x13[_0x763a[236]])* _0x3536x2));return _0x3536x3};mxEdgeHandler[_0x763a[202]][_0x763a[3017]]= function(_0x3536x2){this[_0x763a[2886]][_0x763a[2729]](_0x3536x2,this[_0x763a[729]]);this[_0x763a[2885]][_0x763a[2871]](_0x3536x2);_0x3536x2= this[_0x763a[2885]][_0x763a[2868]]();var _0x3536x3=null;null!= this[_0x763a[2886]][_0x763a[2919]]&& null!= this[_0x763a[2886]][_0x763a[2920]]&& this[_0x763a[2885]][_0x763a[862]]();null!= _0x3536x2?_0x3536x3= _0x3536x2:null!= this[_0x763a[2886]][_0x763a[2920]]&& null!= this[_0x763a[2886]][_0x763a[2919]]&& (_0x3536x3= this[_0x763a[2886]][_0x763a[2919]]);return _0x3536x3};mxEdgeHandler[_0x763a[202]][_0x763a[3018]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[1198]](this[_0x763a[724]][_0x763a[246]]),_0x3536x3=null!= _0x3536x3[_0x763a[1525]]?_0x3536x3[_0x763a[1525]][_0x763a[1853]]():null;!this[_0x763a[729]]&& !this[_0x763a[3013]]?(this[_0x763a[2196]](_0x3536x2,!1),null== _0x3536x3?_0x3536x3= [_0x3536x2]:_0x3536x3[this[_0x763a[1983]]- 1]= _0x3536x2):this[_0x763a[1179]][_0x763a[2401]]&& (_0x3536x3= null);return _0x3536x3};mxEdgeHandler[_0x763a[202]][_0x763a[3019]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[729]]?_0x3536x4:this[_0x763a[724]][_0x763a[2089]](!0),_0x3536x9=this[_0x763a[3013]]?_0x3536x4:this[_0x763a[724]][_0x763a[2089]](!1),_0x3536xa=this[_0x763a[1179]][_0x763a[2288]](_0x3536x2,_0x3536x5,!0),_0x3536x12=this[_0x763a[1179]][_0x763a[2288]](_0x3536x2,_0x3536x9,!1),_0x3536x13=this[_0x763a[2886]][_0x763a[2920]];null== _0x3536x13&& (_0x3536x13= new mxConnectionConstraint);this[_0x763a[729]]?_0x3536xa= _0x3536x13:this[_0x763a[3013]]&& (_0x3536x12= _0x3536x13);(!this[_0x763a[729]]|| null!= _0x3536x5)&& _0x3536x2[_0x763a[441]][_0x763a[2289]](_0x3536x2,_0x3536x5,!0,_0x3536xa);(!this[_0x763a[3013]]|| null!= _0x3536x9)&& _0x3536x2[_0x763a[441]][_0x763a[2289]](_0x3536x2,_0x3536x9,!1,_0x3536x12);if((this[_0x763a[729]]|| this[_0x763a[3013]])&& null== _0x3536x4){_0x3536x2[_0x763a[2088]](_0x3536x3,this[_0x763a[729]]),null== this[_0x763a[2885]][_0x763a[2869]]()&& (this[_0x763a[267]]= this[_0x763a[1179]][_0x763a[2406]]?null:_0x763a[110])};_0x3536x2[_0x763a[441]][_0x763a[2282]](_0x3536x2,this[_0x763a[1525]],_0x3536x5,_0x3536x9);_0x3536x2[_0x763a[441]][_0x763a[2283]](_0x3536x2,_0x3536x5,_0x3536x9)};mxEdgeHandler[_0x763a[202]][_0x763a[788]]= function(_0x3536x2,_0x3536x3){if(null!= this[_0x763a[1983]]&& null!= this[_0x763a[2885]]){var _0x3536x4=this[_0x763a[2689]](_0x3536x3);if(this[_0x763a[3014]]){this[_0x763a[685]][_0x763a[235]]= _0x3536x4[_0x763a[235]],this[_0x763a[685]][_0x763a[236]]= _0x3536x4[_0x763a[236]]}else {this[_0x763a[1525]]= this[_0x763a[3018]](_0x3536x4);var _0x3536x5=this[_0x763a[729]]|| this[_0x763a[3013]]?this[_0x763a[3017]](_0x3536x3):null,_0x3536x9=this[_0x763a[3015]](_0x3536x4,null!= _0x3536x5?_0x3536x5[_0x763a[246]]:null);this[_0x763a[3019]](_0x3536x9,_0x3536x4,_0x3536x5);this[_0x763a[3020]](null== this[_0x763a[267]]?this[_0x763a[2885]][_0x763a[2853]]:this[_0x763a[2885]][_0x763a[2855]]);this[_0x763a[2997]]= _0x3536x9[_0x763a[439]];this[_0x763a[1124]]= !0};this[_0x763a[2932]]();mxEvent[_0x763a[722]](_0x3536x3[_0x763a[727]]());_0x3536x3[_0x763a[722]]()}else {mxClient[_0x763a[80]]&& null!= this[_0x763a[2986]](_0x3536x3)&& _0x3536x3[_0x763a[722]](!1)}};mxEdgeHandler[_0x763a[202]][_0x763a[789]]= function(_0x3536x2,_0x3536x3){if(null!= this[_0x763a[1983]]&& null!= this[_0x763a[2885]]){var _0x3536x4=this[_0x763a[724]][_0x763a[246]];if(_0x3536x3[_0x763a[730]]()!= this[_0x763a[2739]]|| _0x3536x3[_0x763a[732]]()!= this[_0x763a[2740]]){if(null!= this[_0x763a[267]]){0< this[_0x763a[267]][_0x763a[67]]&& this[_0x763a[1179]][_0x763a[2580]](this[_0x763a[267]])}else {if(this[_0x763a[3014]]){this[_0x763a[3021]](this[_0x763a[724]],this[_0x763a[685]][_0x763a[235]],this[_0x763a[685]][_0x763a[236]])}else {if(this[_0x763a[729]]|| this[_0x763a[3013]]){var _0x3536x5=null;null!= this[_0x763a[2886]][_0x763a[2920]]&& null!= this[_0x763a[2886]][_0x763a[2919]]&& (_0x3536x5= this[_0x763a[2886]][_0x763a[2919]][_0x763a[246]]);null== _0x3536x5&& this[_0x763a[2885]][_0x763a[2867]]()&& (_0x3536x5= this[_0x763a[2885]][_0x763a[2861]][_0x763a[246]]);if(null!= _0x3536x5){_0x3536x4= this[_0x763a[807]](_0x3536x4,_0x3536x5,this[_0x763a[729]],this[_0x763a[1179]][_0x763a[2574]](_0x3536x3[_0x763a[727]]())&& this[_0x763a[2797]]&& this[_0x763a[1179]][_0x763a[2617]](),_0x3536x3)}else {if(this[_0x763a[1179]][_0x763a[2530]]()){_0x3536x5= this[_0x763a[2997]][this[_0x763a[729]]?0:this[_0x763a[2997]][_0x763a[67]]- 1];_0x3536x5[_0x763a[235]]= _0x3536x5[_0x763a[235]]/ this[_0x763a[1179]][_0x763a[441]][_0x763a[255]]- this[_0x763a[1179]][_0x763a[441]][_0x763a[513]][_0x763a[235]];_0x3536x5[_0x763a[236]]= _0x3536x5[_0x763a[236]]/ this[_0x763a[1179]][_0x763a[441]][_0x763a[255]]- this[_0x763a[1179]][_0x763a[441]][_0x763a[513]][_0x763a[236]];var _0x3536x9=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[248]](this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1197]](_0x3536x4));null!= _0x3536x9&& (_0x3536x5[_0x763a[235]]-= _0x3536x9[_0x763a[2078]][_0x763a[235]],_0x3536x5[_0x763a[236]]-= _0x3536x9[_0x763a[2078]][_0x763a[236]]);_0x3536x5[_0x763a[235]]-= this[_0x763a[1179]][_0x763a[1136]]/ this[_0x763a[1179]][_0x763a[441]][_0x763a[255]];_0x3536x5[_0x763a[236]]-= this[_0x763a[1179]][_0x763a[1137]]/ this[_0x763a[1179]][_0x763a[441]][_0x763a[255]];this[_0x763a[3022]](_0x3536x4,_0x3536x5,this[_0x763a[729]])}}}else {this[_0x763a[1124]]?this[_0x763a[3023]](_0x3536x4,this[_0x763a[1525]]):(this[_0x763a[1179]][_0x763a[249]]()[_0x763a[2263]](this[_0x763a[724]][_0x763a[246]]),this[_0x763a[1179]][_0x763a[249]]()[_0x763a[2259]](this[_0x763a[724]][_0x763a[246]]))}}}};null!= this[_0x763a[2885]]&& (this[_0x763a[862]](),_0x3536x4!= this[_0x763a[724]][_0x763a[246]]&& this[_0x763a[1179]][_0x763a[2450]](_0x3536x4));_0x3536x3[_0x763a[722]]()}};mxEdgeHandler[_0x763a[202]][_0x763a[862]]= function(){this[_0x763a[1525]]= this[_0x763a[685]]= this[_0x763a[1983]]= this[_0x763a[267]]= null;this[_0x763a[3013]]= this[_0x763a[729]]= this[_0x763a[3014]]= this[_0x763a[1124]]= !1;this[_0x763a[2885]][_0x763a[862]]();this[_0x763a[2886]][_0x763a[862]]();this[_0x763a[3020]](mxConstants.EDGE_SELECTION_COLOR);this[_0x763a[258]]()};mxEdgeHandler[_0x763a[202]][_0x763a[3020]]= function(_0x3536x2){null!= this[_0x763a[253]]&& (this[_0x763a[253]][_0x763a[1336]]= _0x3536x2)};mxEdgeHandler[_0x763a[202]][_0x763a[2196]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[518]](),_0x3536x5=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[512]]();_0x3536x3&& (_0x3536x2[_0x763a[235]]= this[_0x763a[1179]][_0x763a[1021]](_0x3536x2[_0x763a[235]]),_0x3536x2[_0x763a[236]]= this[_0x763a[1179]][_0x763a[1021]](_0x3536x2[_0x763a[236]]));_0x3536x2[_0x763a[235]]= Math[_0x763a[488]](_0x3536x2[_0x763a[235]]/ _0x3536x4- _0x3536x5[_0x763a[235]]);_0x3536x2[_0x763a[236]]= Math[_0x763a[488]](_0x3536x2[_0x763a[236]]/ _0x3536x4- _0x3536x5[_0x763a[236]]);_0x3536x4= this[_0x763a[1179]][_0x763a[249]]()[_0x763a[248]](this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1197]](this[_0x763a[724]][_0x763a[246]]));null!= _0x3536x4&& (_0x3536x2[_0x763a[235]]-= _0x3536x4[_0x763a[2078]][_0x763a[235]],_0x3536x2[_0x763a[236]]-= _0x3536x4[_0x763a[2078]][_0x763a[236]]);return _0x3536x2};mxEdgeHandler[_0x763a[202]][_0x763a[3021]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[1179]][_0x763a[502]](),_0x3536x9=_0x3536x5[_0x763a[1721]](_0x3536x2[_0x763a[246]]);if(null!= _0x3536x9){var _0x3536x9=_0x3536x9[_0x763a[238]](),_0x3536xa=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[2308]](_0x3536x2,_0x3536x3,_0x3536x4);_0x3536x9[_0x763a[235]]= _0x3536xa[_0x763a[235]];_0x3536x9[_0x763a[236]]= _0x3536xa[_0x763a[236]];var _0x3536x12=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]];_0x3536x9[_0x763a[1368]]= new mxPoint(0,0);_0x3536xa= this[_0x763a[1179]][_0x763a[441]][_0x763a[245]](_0x3536x2,_0x3536x9);_0x3536x9[_0x763a[1368]]= new mxPoint((_0x3536x3- _0x3536xa[_0x763a[235]])/ _0x3536x12,(_0x3536x4- _0x3536xa[_0x763a[236]])/ _0x3536x12);_0x3536x5[_0x763a[1724]](_0x3536x2[_0x763a[246]],_0x3536x9)}};mxEdgeHandler[_0x763a[202]][_0x763a[807]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x9= this[_0x763a[1179]][_0x763a[502]]();var _0x3536xa=_0x3536x9[_0x763a[1197]](_0x3536x2);_0x3536x9[_0x763a[473]]();try{if(_0x3536x5){var _0x3536x12=_0x3536x2[_0x763a[238]]();_0x3536x9[_0x763a[99]](_0x3536xa,_0x3536x12,_0x3536x9[_0x763a[262]](_0x3536xa));var _0x3536x13=_0x3536x9[_0x763a[1709]](_0x3536x2,!_0x3536x4);this[_0x763a[1179]][_0x763a[851]](_0x3536x12,_0x3536x13,!_0x3536x4);_0x3536x2= _0x3536x12};var _0x3536x14=this[_0x763a[2886]][_0x763a[2920]];null== _0x3536x14&& (_0x3536x14= new mxConnectionConstraint);this[_0x763a[1179]][_0x763a[851]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x14)}finally{_0x3536x9[_0x763a[476]]()};return _0x3536x2};mxEdgeHandler[_0x763a[202]][_0x763a[3022]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[1179]][_0x763a[502]](),_0x3536x9=_0x3536x5[_0x763a[1721]](_0x3536x2);if(null!= _0x3536x9){_0x3536x5[_0x763a[473]]();try{_0x3536x9= _0x3536x9[_0x763a[238]](),_0x3536x9[_0x763a[2007]](_0x3536x3,_0x3536x4),_0x3536x5[_0x763a[1724]](_0x3536x2,_0x3536x9),this[_0x763a[1179]][_0x763a[851]](_0x3536x2,null,_0x3536x4, new mxConnectionConstraint)}finally{_0x3536x5[_0x763a[476]]()}}};mxEdgeHandler[_0x763a[202]][_0x763a[3023]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[502]](),_0x3536x5=_0x3536x4[_0x763a[1721]](_0x3536x2);null!= _0x3536x5&& (_0x3536x5= _0x3536x5[_0x763a[238]](),_0x3536x5[_0x763a[1525]]= _0x3536x3,_0x3536x4[_0x763a[1724]](_0x3536x2,_0x3536x5))};mxEdgeHandler[_0x763a[202]][_0x763a[3000]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=mxUtils[_0x763a[2196]](this[_0x763a[1179]][_0x763a[526]],mxEvent[_0x763a[731]](_0x3536x3),mxEvent[_0x763a[733]](_0x3536x3)),_0x3536x5=this[_0x763a[1179]][_0x763a[1018]](_0x3536x3);this[_0x763a[2196]](_0x3536x4,_0x3536x5);this[_0x763a[3024]](_0x3536x2,_0x3536x4[_0x763a[235]],_0x3536x4[_0x763a[236]]);mxEvent[_0x763a[722]](_0x3536x3)};mxEdgeHandler[_0x763a[202]][_0x763a[3024]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[1179]][_0x763a[1198]](_0x3536x2[_0x763a[246]]);_0x3536x3= new mxPoint(_0x3536x3,_0x3536x4);if(null!= _0x3536x5){_0x3536x5= _0x3536x5[_0x763a[238]]();_0x3536x4= this[_0x763a[1179]][_0x763a[441]][_0x763a[513]];var _0x3536x9=this[_0x763a[1179]][_0x763a[441]][_0x763a[255]];_0x3536x4= mxUtils[_0x763a[3025]](_0x3536x2,(_0x3536x3[_0x763a[235]]+ _0x3536x4[_0x763a[235]])* _0x3536x9,(_0x3536x3[_0x763a[236]]+ _0x3536x4[_0x763a[236]])* _0x3536x9);null== _0x3536x5[_0x763a[1525]]?_0x3536x5[_0x763a[1525]]= [_0x3536x3]:_0x3536x5[_0x763a[1525]][_0x763a[300]](_0x3536x4,0,_0x3536x3);this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1724]](_0x3536x2[_0x763a[246]],_0x3536x5);this[_0x763a[515]]();this[_0x763a[176]]()}};mxEdgeHandler[_0x763a[202]][_0x763a[3012]]= function(_0x3536x2,_0x3536x3){if(0< _0x3536x3&& _0x3536x3< this[_0x763a[2997]][_0x763a[67]]- 1){var _0x3536x4=this[_0x763a[1179]][_0x763a[1198]](this[_0x763a[724]][_0x763a[246]]);null!= _0x3536x4&& null!= _0x3536x4[_0x763a[1525]]&& (_0x3536x4= _0x3536x4[_0x763a[238]](),_0x3536x4[_0x763a[1525]][_0x763a[300]](_0x3536x3- 1,1),this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1724]](_0x3536x2[_0x763a[246]],_0x3536x4),this[_0x763a[515]](),this[_0x763a[176]]())}};mxEdgeHandler[_0x763a[202]][_0x763a[3026]]= function(_0x3536x2){_0x3536x2= 0== _0x3536x2;var _0x3536x3=this[_0x763a[724]][_0x763a[246]],_0x3536x4=this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1709]](_0x3536x3,_0x3536x2),_0x3536x5=mxConstants[_0x763a[2984]];null!= _0x3536x4&& !this[_0x763a[1179]][_0x763a[2551]](_0x3536x3,_0x3536x4,_0x3536x2)|| null== _0x3536x4&& !this[_0x763a[1179]][_0x763a[2661]](_0x3536x3,_0x3536x2)?_0x3536x5= mxConstants[_0x763a[3027]]:null!= _0x3536x4&& this[_0x763a[1179]][_0x763a[2551]](_0x3536x3,_0x3536x4,_0x3536x2)&& (_0x3536x5= mxConstants[_0x763a[3028]]);return _0x3536x5};mxEdgeHandler[_0x763a[202]][_0x763a[258]]= function(){this[_0x763a[2997]]= this[_0x763a[724]][_0x763a[439]][_0x763a[1853]]();var _0x3536x2=this[_0x763a[724]][_0x763a[246]],_0x3536x3=mxConstants[_0x763a[3029]];this[_0x763a[685]]= new mxPoint(this[_0x763a[724]][_0x763a[2079]][_0x763a[235]],this[_0x763a[724]][_0x763a[2079]][_0x763a[236]]);this[_0x763a[2972]][_0x763a[1562]]= new mxRectangle(Math[_0x763a[488]](this[_0x763a[685]][_0x763a[235]]- _0x3536x3/ 2),Math[_0x763a[488]](this[_0x763a[685]][_0x763a[236]]- _0x3536x3/ 2),_0x3536x3,_0x3536x3);this[_0x763a[2972]][_0x763a[258]]();_0x3536x3= this[_0x763a[1179]][_0x763a[2183]](_0x3536x2);null!= _0x3536x3&& 0< _0x3536x3[_0x763a[67]]&& this[_0x763a[1179]][_0x763a[2628]](_0x3536x2)?this[_0x763a[2972]][_0x763a[252]][_0x763a[124]][_0x763a[187]]= _0x763a[189]:this[_0x763a[2972]][_0x763a[252]][_0x763a[124]][_0x763a[187]]= _0x763a[188];if(null!= this[_0x763a[2994]]&& 0< this[_0x763a[2994]][_0x763a[67]]){var _0x3536x4=this[_0x763a[2997]][_0x763a[67]]- 1,_0x3536x2=this[_0x763a[2997]][0],_0x3536x5=this[_0x763a[2997]][0][_0x763a[236]],_0x3536x3=this[_0x763a[2994]][0][_0x763a[1562]];this[_0x763a[2994]][0][_0x763a[1562]]= new mxRectangle(Math[_0x763a[488]](this[_0x763a[2997]][0][_0x763a[235]]- _0x3536x3[_0x763a[117]]/ 2),Math[_0x763a[488]](_0x3536x5- _0x3536x3[_0x763a[119]]/ 2),_0x3536x3[_0x763a[117]],_0x3536x3[_0x763a[119]]);this[_0x763a[2994]][0][_0x763a[1334]]= this[_0x763a[3026]](0);this[_0x763a[2994]][0][_0x763a[258]]();var _0x3536x5=this[_0x763a[2997]][_0x3536x4],_0x3536x9=this[_0x763a[2997]][_0x3536x4][_0x763a[235]],_0x3536x4=this[_0x763a[2997]][_0x3536x4][_0x763a[236]],_0x3536xa=this[_0x763a[2994]][_0x763a[67]]- 1,_0x3536x3=this[_0x763a[2994]][_0x3536xa][_0x763a[1562]];this[_0x763a[2994]][_0x3536xa][_0x763a[1562]]= new mxRectangle(Math[_0x763a[488]](_0x3536x9- _0x3536x3[_0x763a[117]]/ 2),Math[_0x763a[488]](_0x3536x4- _0x3536x3[_0x763a[119]]/ 2),_0x3536x3[_0x763a[117]],_0x3536x3[_0x763a[119]]);this[_0x763a[2994]][_0x3536xa][_0x763a[1334]]= this[_0x763a[3026]](_0x3536xa);this[_0x763a[2994]][_0x3536xa][_0x763a[258]]();this[_0x763a[3030]](_0x3536x2,_0x3536x5)};this[_0x763a[2932]]()};mxEdgeHandler[_0x763a[202]][_0x763a[3030]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1721]](this[_0x763a[724]][_0x763a[246]])[_0x763a[1525]];if(null!= _0x3536x4){null== this[_0x763a[1525]]&& (this[_0x763a[1525]]= []);for(var _0x3536x5=1;_0x3536x5< this[_0x763a[2994]][_0x763a[67]]- 1;_0x3536x5++){if(null!= this[_0x763a[2994]][_0x3536x5]){if(null!= this[_0x763a[2997]][_0x3536x5]){var _0x3536x9=this[_0x763a[2997]][_0x3536x5][_0x763a[235]],_0x3536xa=this[_0x763a[2997]][_0x3536x5][_0x763a[236]],_0x3536x12=this[_0x763a[2994]][_0x3536x5][_0x763a[1562]];this[_0x763a[2994]][_0x3536x5][_0x763a[252]][_0x763a[124]][_0x763a[187]]= _0x763a[189];this[_0x763a[2994]][_0x3536x5][_0x763a[1562]]= new mxRectangle(Math[_0x763a[488]](_0x3536x9- _0x3536x12[_0x763a[117]]/ 2),Math[_0x763a[488]](_0x3536xa- _0x3536x12[_0x763a[119]]/ 2),_0x3536x12[_0x763a[117]],_0x3536x12[_0x763a[119]]);this[_0x763a[2994]][_0x3536x5][_0x763a[258]]();this[_0x763a[1525]][_0x3536x5- 1]= _0x3536x4[_0x3536x5- 1]}else {this[_0x763a[2994]][_0x3536x5][_0x763a[515]](),this[_0x763a[2994]][_0x3536x5]= null}}}}};mxEdgeHandler[_0x763a[202]][_0x763a[2932]]= function(){if(this[_0x763a[3014]]){var _0x3536x2=mxConstants[_0x763a[3029]],_0x3536x2= new mxRectangle(Math[_0x763a[488]](this[_0x763a[685]][_0x763a[235]]- _0x3536x2/ 2),Math[_0x763a[488]](this[_0x763a[685]][_0x763a[236]]- _0x3536x2/ 2),_0x3536x2,_0x3536x2);this[_0x763a[2972]][_0x763a[1562]]= _0x3536x2;this[_0x763a[2972]][_0x763a[258]]()}else {this[_0x763a[253]][_0x763a[1525]]= this[_0x763a[2997]],this[_0x763a[253]][_0x763a[258]]()}};mxEdgeHandler[_0x763a[202]][_0x763a[515]]= function(){null!= this[_0x763a[2885]]&& (this[_0x763a[2885]][_0x763a[515]](),this[_0x763a[2885]]= null);null!= this[_0x763a[253]]&& (this[_0x763a[253]][_0x763a[515]](),this[_0x763a[253]]= null);null!= this[_0x763a[2972]]&& (this[_0x763a[2972]][_0x763a[515]](),this[_0x763a[2972]]= null);null!= this[_0x763a[2886]]&& (this[_0x763a[2886]][_0x763a[515]](),this[_0x763a[2886]]= null);if(null!= this[_0x763a[2994]]){for(var _0x3536x2=0;_0x3536x2< this[_0x763a[2994]][_0x763a[67]];_0x3536x2++){null!= this[_0x763a[2994]][_0x3536x2]&& (this[_0x763a[2994]][_0x3536x2][_0x763a[515]](),this[_0x763a[2994]][_0x3536x2]= null)}}};function mxElbowEdgeHandler(_0x3536x2){mxEdgeHandler[_0x763a[239]](this,_0x3536x2)}mxUtils[_0x763a[1284]](mxElbowEdgeHandler,mxEdgeHandler);mxElbowEdgeHandler[_0x763a[202]]= new mxEdgeHandler;mxElbowEdgeHandler[_0x763a[202]][_0x763a[196]]= mxElbowEdgeHandler;mxElbowEdgeHandler[_0x763a[202]][_0x763a[3031]]= !0;mxElbowEdgeHandler[_0x763a[202]][_0x763a[3032]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[3033]:_0x763a[110];mxElbowEdgeHandler[_0x763a[202]][_0x763a[3001]]= function(){var _0x3536x2=[],_0x3536x3=this[_0x763a[3009]](0);this[_0x763a[3002]](_0x3536x3);_0x3536x3[_0x763a[252]][_0x763a[124]][_0x763a[270]]= mxConstants[_0x763a[3011]];mxEvent[_0x763a[2733]](_0x3536x3[_0x763a[252]],this[_0x763a[1179]],this[_0x763a[724]]);_0x3536x2[_0x763a[207]](_0x3536x3);mxClient[_0x763a[754]]&& _0x3536x3[_0x763a[252]][_0x763a[57]](_0x763a[1377],_0x763a[130]);_0x3536x2[_0x763a[207]](this[_0x763a[3034]]());this[_0x763a[1525]][_0x763a[207]]( new mxPoint(0,0));_0x3536x3= this[_0x763a[3009]](2);this[_0x763a[3002]](_0x3536x3);_0x3536x3[_0x763a[252]][_0x763a[124]][_0x763a[270]]= mxConstants[_0x763a[3011]];mxEvent[_0x763a[2733]](_0x3536x3[_0x763a[252]],this[_0x763a[1179]],this[_0x763a[724]]);_0x3536x2[_0x763a[207]](_0x3536x3);mxClient[_0x763a[754]]&& _0x3536x3[_0x763a[252]][_0x763a[57]](_0x763a[1377],_0x763a[130]);return _0x3536x2};mxElbowEdgeHandler[_0x763a[202]][_0x763a[3034]]= function(){var _0x3536x2=this[_0x763a[3009]]();this[_0x763a[3002]](_0x3536x2);var _0x3536x3=this[_0x763a[3035]]();_0x3536x2[_0x763a[252]][_0x763a[124]][_0x763a[270]]= _0x3536x3;_0x3536x3= mxUtils[_0x763a[885]](this,function(_0x3536x2){!mxEvent[_0x763a[721]](_0x3536x2)&& this[_0x763a[3031]]&& (this[_0x763a[1179]][_0x763a[854]](this[_0x763a[724]][_0x763a[246]],_0x3536x2),mxEvent[_0x763a[722]](_0x3536x2))});mxEvent[_0x763a[2733]](_0x3536x2[_0x763a[252]],this[_0x763a[1179]],this[_0x763a[724]],null,null,null,_0x3536x3);this[_0x763a[1179]][_0x763a[2662]](this[_0x763a[724]][_0x763a[246]])|| (_0x3536x2[_0x763a[252]][_0x763a[124]][_0x763a[495]]= _0x763a[130]);return _0x3536x2};mxElbowEdgeHandler[_0x763a[202]][_0x763a[3035]]= function(){return this[_0x763a[724]][_0x763a[124]][mxConstants[_0x763a[2294]]]== mxEdgeStyle[_0x763a[2570]]|| this[_0x763a[724]][_0x763a[124]][mxConstants[_0x763a[2294]]]== mxConstants[_0x763a[3036]]|| (this[_0x763a[724]][_0x763a[124]][mxConstants[_0x763a[2294]]]== mxEdgeStyle[_0x763a[2568]]|| this[_0x763a[724]][_0x763a[124]][mxConstants[_0x763a[2294]]]== mxConstants[_0x763a[3037]])&& this[_0x763a[724]][_0x763a[124]][mxConstants[_0x763a[2231]]]== mxConstants[_0x763a[2232]]?_0x763a[3038]:_0x763a[3039]};mxElbowEdgeHandler[_0x763a[202]][_0x763a[2597]]= function(_0x3536x2){var _0x3536x3=null;if(null!= this[_0x763a[2994]]&& null!= this[_0x763a[2994]][1]&& (_0x3536x2== this[_0x763a[2994]][1][_0x763a[252]]|| _0x3536x2[_0x763a[265]]== this[_0x763a[2994]][1][_0x763a[252]])){_0x3536x3= this[_0x763a[3032]],_0x3536x3= mxResources[_0x763a[203]](_0x3536x3)|| _0x3536x3};return _0x3536x3};mxElbowEdgeHandler[_0x763a[202]][_0x763a[2196]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[518]](),_0x3536x5=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[512]](),_0x3536x9=this[_0x763a[724]][_0x763a[2078]];_0x3536x3&& (_0x3536x2[_0x763a[235]]= this[_0x763a[1179]][_0x763a[1021]](_0x3536x2[_0x763a[235]]),_0x3536x2[_0x763a[236]]= this[_0x763a[1179]][_0x763a[1021]](_0x3536x2[_0x763a[236]]));_0x3536x2[_0x763a[235]]= Math[_0x763a[488]](_0x3536x2[_0x763a[235]]/ _0x3536x4- _0x3536x5[_0x763a[235]]- _0x3536x9[_0x763a[235]]);_0x3536x2[_0x763a[236]]= Math[_0x763a[488]](_0x3536x2[_0x763a[236]]/ _0x3536x4- _0x3536x5[_0x763a[236]]- _0x3536x9[_0x763a[236]])};mxElbowEdgeHandler[_0x763a[202]][_0x763a[3030]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1721]](this[_0x763a[724]][_0x763a[246]])[_0x763a[1525]],_0x3536x4=null!= _0x3536x4?_0x3536x4[0]:null,_0x3536x4=null== _0x3536x4? new mxPoint(_0x3536x2[_0x763a[235]]+ (_0x3536x3[_0x763a[235]]- _0x3536x2[_0x763a[235]])/ 2,_0x3536x2[_0x763a[236]]+ (_0x3536x3[_0x763a[236]]- _0x3536x2[_0x763a[236]])/ 2): new mxPoint(this[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]]* (_0x3536x4[_0x763a[235]]+ this[_0x763a[1179]][_0x763a[249]]()[_0x763a[513]][_0x763a[235]]+ this[_0x763a[724]][_0x763a[2078]][_0x763a[235]]),this[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]]* (_0x3536x4[_0x763a[236]]+ this[_0x763a[1179]][_0x763a[249]]()[_0x763a[513]][_0x763a[236]]+ this[_0x763a[724]][_0x763a[2078]][_0x763a[236]])),_0x3536x5=this[_0x763a[2994]][1][_0x763a[1562]],_0x3536x9=_0x3536x5[_0x763a[117]],_0x3536x5=_0x3536x5[_0x763a[119]];null== this[_0x763a[2959]]&& (_0x3536x5= _0x3536x9= mxConstants[_0x763a[2974]]);var _0x3536xa= new mxRectangle(Math[_0x763a[488]](_0x3536x4[_0x763a[235]]- _0x3536x9/ 2),Math[_0x763a[488]](_0x3536x4[_0x763a[236]]- _0x3536x5/ 2),_0x3536x9,_0x3536x5);null== this[_0x763a[2959]]&& (_0x763a[188]!= this[_0x763a[2972]][_0x763a[252]][_0x763a[124]][_0x763a[187]]&& mxUtils[_0x763a[1825]](_0x3536xa,this[_0x763a[2972]][_0x763a[1562]]))&& (_0x3536x9+= 3,_0x3536x5+= 3,_0x3536xa= new mxRectangle(Math[_0x763a[488]](_0x3536x4[_0x763a[235]]- _0x3536x9/ 2),Math[_0x763a[488]](_0x3536x4[_0x763a[236]]- _0x3536x5/ 2),_0x3536x9,_0x3536x5));this[_0x763a[2994]][1][_0x763a[1562]]= _0x3536xa;this[_0x763a[2994]][1][_0x763a[258]]()};function mxEdgeSegmentHandler(_0x3536x2){mxEdgeHandler[_0x763a[239]](this,_0x3536x2)}mxUtils[_0x763a[1284]](mxEdgeSegmentHandler,mxEdgeHandler);mxEdgeSegmentHandler[_0x763a[202]]= new mxElbowEdgeHandler;mxEdgeSegmentHandler[_0x763a[202]][_0x763a[196]]= mxEdgeSegmentHandler;mxEdgeSegmentHandler[_0x763a[202]][_0x763a[3018]]= function(_0x3536x2){if(this[_0x763a[729]]|| this[_0x763a[3013]]){return mxElbowEdgeHandler[_0x763a[202]][_0x763a[3018]][_0x763a[183]](this,arguments)};this[_0x763a[2196]](_0x3536x2,!1);var _0x3536x3=this[_0x763a[724]][_0x763a[439]],_0x3536x4=_0x3536x3[0][_0x763a[238]]();this[_0x763a[2196]](_0x3536x4,!1);for(var _0x3536x5=[],_0x3536x9=1;_0x3536x9< _0x3536x3[_0x763a[67]];_0x3536x9++){var _0x3536xa=_0x3536x3[_0x3536x9][_0x763a[238]]();this[_0x763a[2196]](_0x3536xa,!1);_0x3536x9== this[_0x763a[1983]]&& (_0x3536x4[_0x763a[235]]== _0x3536xa[_0x763a[235]]?(_0x3536x4[_0x763a[235]]= _0x3536x2[_0x763a[235]],_0x3536xa[_0x763a[235]]= _0x3536x2[_0x763a[235]]):(_0x3536x4[_0x763a[236]]= _0x3536x2[_0x763a[236]],_0x3536xa[_0x763a[236]]= _0x3536x2[_0x763a[236]]));_0x3536x9< _0x3536x3[_0x763a[67]]- 1&& _0x3536x5[_0x763a[207]](_0x3536xa);_0x3536x4= _0x3536xa};if(1== _0x3536x5[_0x763a[67]]){if(_0x3536x4= this[_0x763a[724]][_0x763a[441]],_0x3536x9= this[_0x763a[724]][_0x763a[2089]](!0),_0x3536xa= this[_0x763a[724]][_0x763a[2089]](!1),null!= _0x3536xa& null!= _0x3536x9){var _0x3536x12=this[_0x763a[724]][_0x763a[2078]][_0x763a[235]],_0x3536x13=this[_0x763a[724]][_0x763a[2078]][_0x763a[236]];mxUtils[_0x763a[442]](_0x3536xa,_0x3536x5[0][_0x763a[235]]+ _0x3536x12,_0x3536x5[0][_0x763a[236]]+ _0x3536x13)?_0x3536x3[1][_0x763a[236]]== _0x3536x3[2][_0x763a[236]]?_0x3536x5[0][_0x763a[236]]= _0x3536x4[_0x763a[2228]](_0x3536x9)- _0x3536x13:_0x3536x5[0][_0x763a[235]]= _0x3536x4[_0x763a[2230]](_0x3536x9)- _0x3536x12:mxUtils[_0x763a[442]](_0x3536x9,_0x3536x5[0][_0x763a[235]]+ _0x3536x12,_0x3536x5[0][_0x763a[236]]+ _0x3536x13)&& (_0x3536x3[1][_0x763a[236]]== _0x3536x3[0][_0x763a[236]]?_0x3536x5[0][_0x763a[236]]= _0x3536x4[_0x763a[2228]](_0x3536xa)- _0x3536x13:_0x3536x5[0][_0x763a[235]]= _0x3536x4[_0x763a[2230]](_0x3536xa)- _0x3536x12)}}else {0== _0x3536x5[_0x763a[67]]&& (_0x3536x5= [_0x3536x2])};return _0x3536x5};mxEdgeSegmentHandler[_0x763a[202]][_0x763a[3001]]= function(){var _0x3536x2=[],_0x3536x3=this[_0x763a[3009]](0);this[_0x763a[3002]](_0x3536x3);_0x3536x3[_0x763a[252]][_0x763a[124]][_0x763a[270]]= mxConstants[_0x763a[3011]];mxEvent[_0x763a[2733]](_0x3536x3[_0x763a[252]],this[_0x763a[1179]],this[_0x763a[724]]);_0x3536x2[_0x763a[207]](_0x3536x3);mxClient[_0x763a[754]]&& _0x3536x3[_0x763a[252]][_0x763a[57]](_0x763a[1377],_0x763a[130]);var _0x3536x4=this[_0x763a[724]][_0x763a[439]];if(this[_0x763a[1179]][_0x763a[2662]](this[_0x763a[724]][_0x763a[246]])){null== this[_0x763a[1525]]&& (this[_0x763a[1525]]= []);for(var _0x3536x5=0;_0x3536x5< _0x3536x4[_0x763a[67]]- 1;_0x3536x5++){_0x3536x3= this[_0x763a[3034]](),_0x3536x2[_0x763a[207]](_0x3536x3),_0x3536x3[_0x763a[252]][_0x763a[124]][_0x763a[270]]= 0== _0x3536x4[_0x3536x5][_0x763a[235]]- _0x3536x4[_0x3536x5+ 1][_0x763a[235]]?_0x763a[3039]:_0x763a[3038],this[_0x763a[1525]][_0x763a[207]]( new mxPoint(0,0)),mxClient[_0x763a[754]]&& _0x3536x3[_0x763a[252]][_0x763a[57]](_0x763a[1377],_0x763a[130])}};_0x3536x3= this[_0x763a[3009]](_0x3536x4[_0x763a[67]]);this[_0x763a[3002]](_0x3536x3);_0x3536x3[_0x763a[252]][_0x763a[124]][_0x763a[270]]= mxConstants[_0x763a[3011]];mxEvent[_0x763a[2733]](_0x3536x3[_0x763a[252]],this[_0x763a[1179]],this[_0x763a[724]]);_0x3536x2[_0x763a[207]](_0x3536x3);mxClient[_0x763a[754]]&& _0x3536x3[_0x763a[252]][_0x763a[57]](_0x763a[1377],_0x763a[130]);return _0x3536x2};mxEdgeSegmentHandler[_0x763a[202]][_0x763a[258]]= function(){this[_0x763a[802]]();mxEdgeHandler[_0x763a[202]][_0x763a[258]][_0x763a[183]](this,arguments)};mxEdgeSegmentHandler[_0x763a[202]][_0x763a[802]]= function(){if(null!= this[_0x763a[2994]]){for(var _0x3536x2=0;_0x3536x2< this[_0x763a[2994]][_0x763a[67]];_0x3536x2++){null!= this[_0x763a[2994]][_0x3536x2]&& (this[_0x763a[2994]][_0x3536x2][_0x763a[515]](),this[_0x763a[2994]][_0x3536x2]= null)};this[_0x763a[2994]]= this[_0x763a[3001]]()}};mxEdgeSegmentHandler[_0x763a[202]][_0x763a[3030]]= function(_0x3536x2,_0x3536x3){if(this[_0x763a[1179]][_0x763a[2662]](this[_0x763a[724]][_0x763a[246]])){var _0x3536x4=mxConstants[_0x763a[2974]],_0x3536x5=this[_0x763a[724]][_0x763a[439]];if(null!= _0x3536x5&& 1< _0x3536x5[_0x763a[67]]){for(var _0x3536x9=0;_0x3536x9< this[_0x763a[724]][_0x763a[439]][_0x763a[67]]- 1;_0x3536x9++){if(null!= this[_0x763a[2994]][_0x3536x9+ 1]){_0x3536x2= _0x3536x5[_0x3536x9];_0x3536x3= _0x3536x5[_0x3536x9+ 1];var _0x3536xa= new mxPoint(_0x3536x2[_0x763a[235]]+ (_0x3536x3[_0x763a[235]]- _0x3536x2[_0x763a[235]])/ 2,_0x3536x2[_0x763a[236]]+ (_0x3536x3[_0x763a[236]]- _0x3536x2[_0x763a[236]])/ 2);this[_0x763a[2994]][_0x3536x9+ 1][_0x763a[1562]]= new mxRectangle(Math[_0x763a[488]](_0x3536xa[_0x763a[235]]- _0x3536x4/ 2),Math[_0x763a[488]](_0x3536xa[_0x763a[236]]- _0x3536x4/ 2),_0x3536x4,_0x3536x4);this[_0x763a[2994]][_0x3536x9+ 1][_0x763a[258]]()}}}}};mxEdgeSegmentHandler[_0x763a[202]][_0x763a[3023]]= function(_0x3536x2,_0x3536x3){_0x3536x3= [];var _0x3536x4=this[_0x763a[2997]];if(1< _0x3536x4[_0x763a[67]]){for(var _0x3536x5=_0x3536x4[0],_0x3536x9=_0x3536x4[1],_0x3536xa=2;_0x3536xa< _0x3536x4[_0x763a[67]];_0x3536xa++){var _0x3536x12=_0x3536x4[_0x3536xa];if((Math[_0x763a[488]](_0x3536x5[_0x763a[235]])!= Math[_0x763a[488]](_0x3536x9[_0x763a[235]])|| Math[_0x763a[488]](_0x3536x9[_0x763a[235]])!= Math[_0x763a[488]](_0x3536x12[_0x763a[235]]))&& (Math[_0x763a[488]](_0x3536x5[_0x763a[236]])!= Math[_0x763a[488]](_0x3536x9[_0x763a[236]])|| Math[_0x763a[488]](_0x3536x9[_0x763a[236]])!= Math[_0x763a[488]](_0x3536x12[_0x763a[236]]))){_0x3536x5= _0x3536x9,_0x3536x9= _0x3536x9[_0x763a[238]](),this[_0x763a[2196]](_0x3536x9,!1),_0x3536x3[_0x763a[207]](_0x3536x9)};_0x3536x9= _0x3536x12}};mxElbowEdgeHandler[_0x763a[202]][_0x763a[3023]][_0x763a[183]](this,arguments)};function mxKeyHandler(_0x3536x2,_0x3536x3){null!= _0x3536x2&& (this[_0x763a[1179]]= _0x3536x2,this[_0x763a[772]]= _0x3536x3|| document[_0x763a[158]],this[_0x763a[3040]]= [],this[_0x763a[3041]]= [],this[_0x763a[3042]]= [],this[_0x763a[3043]]= [],mxEvent[_0x763a[169]](this[_0x763a[772]],_0x763a[2123],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[3044]](_0x3536x2)})),mxClient[_0x763a[80]]&& mxEvent[_0x763a[169]](window,_0x763a[2428],mxUtils[_0x763a[885]](this,function(){this[_0x763a[515]]()})))}mxKeyHandler[_0x763a[202]][_0x763a[1179]]= null;mxKeyHandler[_0x763a[202]][_0x763a[772]]= null;mxKeyHandler[_0x763a[202]][_0x763a[3040]]= null;mxKeyHandler[_0x763a[202]][_0x763a[3041]]= null;mxKeyHandler[_0x763a[202]][_0x763a[3042]]= null;mxKeyHandler[_0x763a[202]][_0x763a[3043]]= null;mxKeyHandler[_0x763a[202]][_0x763a[984]]= !0;mxKeyHandler[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxKeyHandler[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxKeyHandler[_0x763a[202]][_0x763a[3045]]= function(_0x3536x2,_0x3536x3){this[_0x763a[3040]][_0x3536x2]= _0x3536x3};mxKeyHandler[_0x763a[202]][_0x763a[3046]]= function(_0x3536x2,_0x3536x3){this[_0x763a[3041]][_0x3536x2]= _0x3536x3};mxKeyHandler[_0x763a[202]][_0x763a[3047]]= function(_0x3536x2,_0x3536x3){this[_0x763a[3042]][_0x3536x2]= _0x3536x3};mxKeyHandler[_0x763a[202]][_0x763a[3048]]= function(_0x3536x2,_0x3536x3){this[_0x763a[3043]][_0x3536x2]= _0x3536x3};mxKeyHandler[_0x763a[202]][_0x763a[775]]= function(_0x3536x2){return mxEvent[_0x763a[775]](_0x3536x2)};mxKeyHandler[_0x763a[202]][_0x763a[3049]]= function(_0x3536x2){return null!= _0x3536x2?this[_0x763a[775]](_0x3536x2)?mxEvent[_0x763a[774]](_0x3536x2)?this[_0x763a[3043]][_0x3536x2[_0x763a[2124]]]:this[_0x763a[3042]][_0x3536x2[_0x763a[2124]]]:mxEvent[_0x763a[774]](_0x3536x2)?this[_0x763a[3041]][_0x3536x2[_0x763a[2124]]]:this[_0x763a[3040]][_0x3536x2[_0x763a[2124]]]:null};mxKeyHandler[_0x763a[202]][_0x763a[3050]]= function(_0x3536x2){_0x3536x2= mxEvent[_0x763a[728]](_0x3536x2);if(_0x3536x2== this[_0x763a[772]]|| _0x3536x2[_0x763a[265]]== this[_0x763a[772]]|| null!= this[_0x763a[1179]][_0x763a[2347]]&& _0x3536x2== this[_0x763a[1179]][_0x763a[2347]][_0x763a[126]]){return !0};for(;null!= _0x3536x2;){if(_0x3536x2== this[_0x763a[1179]][_0x763a[526]]){return !0};_0x3536x2= _0x3536x2[_0x763a[265]]};return !1};mxKeyHandler[_0x763a[202]][_0x763a[3044]]= function(_0x3536x2){if(this[_0x763a[1179]][_0x763a[994]]()&& !mxEvent[_0x763a[721]](_0x3536x2)&& this[_0x763a[3050]](_0x3536x2)&& this[_0x763a[994]]()){if(27== _0x3536x2[_0x763a[2124]]){this[_0x763a[859]](_0x3536x2)}else {if(!this[_0x763a[1179]][_0x763a[2203]]()){var _0x3536x3=this[_0x763a[3049]](_0x3536x2);null!= _0x3536x3&& (_0x3536x3(_0x3536x2),mxEvent[_0x763a[722]](_0x3536x2))}}}};mxKeyHandler[_0x763a[202]][_0x763a[859]]= function(_0x3536x2){this[_0x763a[1179]][_0x763a[2608]]()&& this[_0x763a[1179]][_0x763a[859]](_0x3536x2)};mxKeyHandler[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[772]]= null};function mxTooltipHandler(_0x3536x2,_0x3536x3){null!= _0x3536x2&& (this[_0x763a[1179]]= _0x3536x2,this[_0x763a[1140]]= _0x3536x3|| 500,this[_0x763a[1179]][_0x763a[1133]](this))}mxTooltipHandler[_0x763a[202]][_0x763a[931]]= 10005;mxTooltipHandler[_0x763a[202]][_0x763a[1179]]= null;mxTooltipHandler[_0x763a[202]][_0x763a[1140]]= null;mxTooltipHandler[_0x763a[202]][_0x763a[3051]]= !1;mxTooltipHandler[_0x763a[202]][_0x763a[984]]= !0;mxTooltipHandler[_0x763a[202]][_0x763a[994]]= function(){return this[_0x763a[984]]};mxTooltipHandler[_0x763a[202]][_0x763a[995]]= function(_0x3536x2){this[_0x763a[984]]= _0x3536x2};mxTooltipHandler[_0x763a[202]][_0x763a[2277]]= function(){return this[_0x763a[3051]]};mxTooltipHandler[_0x763a[202]][_0x763a[3052]]= function(_0x3536x2){this[_0x763a[3051]]= _0x3536x2};mxTooltipHandler[_0x763a[202]][_0x763a[176]]= function(){null!= document[_0x763a[112]]&& (this[_0x763a[485]]= document[_0x763a[55]](_0x763a[485]),this[_0x763a[485]][_0x763a[926]]= _0x763a[3053],this[_0x763a[485]][_0x763a[124]][_0x763a[187]]= _0x763a[188],this[_0x763a[485]][_0x763a[124]][_0x763a[931]]= this[_0x763a[931]],document[_0x763a[112]][_0x763a[62]](this[_0x763a[485]]),mxEvent[_0x763a[169]](this[_0x763a[485]],_0x763a[751],mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[3054]]()})))};mxTooltipHandler[_0x763a[202]][_0x763a[787]]= function(_0x3536x2,_0x3536x3){this[_0x763a[862]](_0x3536x3,!1);this[_0x763a[3054]]()};mxTooltipHandler[_0x763a[202]][_0x763a[788]]= function(_0x3536x2,_0x3536x3){if(_0x3536x3[_0x763a[730]]()!= this[_0x763a[1217]]|| _0x3536x3[_0x763a[732]]()!= this[_0x763a[1218]]){this[_0x763a[862]](_0x3536x3,!0),(this[_0x763a[2277]]()|| _0x3536x3[_0x763a[248]]()!= this[_0x763a[724]]|| _0x3536x3[_0x763a[728]]()!= this[_0x763a[252]]&& (!this[_0x763a[3055]]|| null!= _0x3536x3[_0x763a[248]]()&& this[_0x763a[3055]]== (_0x3536x3[_0x763a[729]](_0x3536x3[_0x763a[248]]()[_0x763a[253]])|| !_0x3536x3[_0x763a[729]](_0x3536x3[_0x763a[248]]()[_0x763a[963]]))))&& this[_0x763a[3054]]()};this[_0x763a[1217]]= _0x3536x3[_0x763a[730]]();this[_0x763a[1218]]= _0x3536x3[_0x763a[732]]()};mxTooltipHandler[_0x763a[202]][_0x763a[789]]= function(_0x3536x2,_0x3536x3){this[_0x763a[862]](_0x3536x3,!0);this[_0x763a[3054]]()};mxTooltipHandler[_0x763a[202]][_0x763a[3056]]= function(){null!= this[_0x763a[1123]]&& (window[_0x763a[2924]](this[_0x763a[1123]]),this[_0x763a[1123]]= null)};mxTooltipHandler[_0x763a[202]][_0x763a[862]]= function(_0x3536x2,_0x3536x3){this[_0x763a[3056]]();if(_0x3536x3&& this[_0x763a[994]]()&& null!= _0x3536x2[_0x763a[248]]()&& (null== this[_0x763a[485]]|| _0x763a[188]== this[_0x763a[485]][_0x763a[124]][_0x763a[187]])){var _0x3536x4=_0x3536x2[_0x763a[248]](),_0x3536x5=_0x3536x2[_0x763a[728]](),_0x3536x9=_0x3536x2[_0x763a[730]](),_0x3536xa=_0x3536x2[_0x763a[732]](),_0x3536x12=_0x3536x2[_0x763a[729]](_0x3536x4[_0x763a[253]])|| _0x3536x2[_0x763a[729]](_0x3536x4[_0x763a[963]]);this[_0x763a[1123]]= window[_0x763a[261]](mxUtils[_0x763a[885]](this,function(){if(!this[_0x763a[1179]][_0x763a[2203]]()&& !this[_0x763a[1179]][_0x763a[2316]][_0x763a[1031]]()){var _0x3536x2=this[_0x763a[1179]][_0x763a[2595]](_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa);this[_0x763a[539]](_0x3536x2,_0x3536x9,_0x3536xa);this[_0x763a[724]]= _0x3536x4;this[_0x763a[252]]= _0x3536x5;this[_0x763a[3055]]= _0x3536x12}}),this[_0x763a[1140]])}};mxTooltipHandler[_0x763a[202]][_0x763a[801]]= function(){this[_0x763a[3056]]();this[_0x763a[3054]]()};mxTooltipHandler[_0x763a[202]][_0x763a[3054]]= function(){null!= this[_0x763a[485]]&& (this[_0x763a[485]][_0x763a[124]][_0x763a[187]]= _0x763a[188])};mxTooltipHandler[_0x763a[202]][_0x763a[539]]= function(_0x3536x2,_0x3536x3,_0x3536x4){if(null!= _0x3536x2&& 0< _0x3536x2[_0x763a[67]]){null== this[_0x763a[485]]&& this[_0x763a[176]]();var _0x3536x5=mxUtils[_0x763a[444]]();this[_0x763a[485]][_0x763a[124]][_0x763a[361]]= _0x3536x3+ _0x3536x5[_0x763a[235]]+ _0x763a[168];this[_0x763a[485]][_0x763a[124]][_0x763a[125]]= _0x3536x4+ mxConstants[_0x763a[560]]+ _0x3536x5[_0x763a[236]]+ _0x763a[168];mxUtils[_0x763a[1331]](_0x3536x2)?(this[_0x763a[485]][_0x763a[339]]= _0x763a[110],this[_0x763a[485]][_0x763a[62]](_0x3536x2)):this[_0x763a[485]][_0x763a[339]]= _0x3536x2[_0x763a[230]](/\n/g,_0x763a[545]);this[_0x763a[485]][_0x763a[124]][_0x763a[187]]= _0x763a[110];mxUtils[_0x763a[933]](this[_0x763a[485]])}};mxTooltipHandler[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[1179]][_0x763a[1148]](this);mxEvent[_0x763a[762]](this[_0x763a[485]]);null!= this[_0x763a[485]]&& null!= this[_0x763a[485]][_0x763a[265]]&& this[_0x763a[485]][_0x763a[265]][_0x763a[266]](this[_0x763a[485]]);this[_0x763a[485]]= null};function mxCellTracker(_0x3536x2,_0x3536x3,_0x3536x4){mxCellMarker[_0x763a[239]](this,_0x3536x2,_0x3536x3);this[_0x763a[1179]][_0x763a[1133]](this);null!= _0x3536x4&& (this[_0x763a[736]]= _0x3536x4);mxClient[_0x763a[80]]&& mxEvent[_0x763a[169]](window,_0x763a[2428],mxUtils[_0x763a[885]](this,function(){this[_0x763a[515]]()}))}mxUtils[_0x763a[1284]](mxCellTracker,mxCellMarker);mxCellTracker[_0x763a[202]][_0x763a[787]]= function(_0x3536x2,_0x3536x3){};mxCellTracker[_0x763a[202]][_0x763a[788]]= function(_0x3536x2,_0x3536x3){this[_0x763a[994]]()&& this[_0x763a[2871]](_0x3536x3)};mxCellTracker[_0x763a[202]][_0x763a[789]]= function(_0x3536x2,_0x3536x3){this[_0x763a[862]]()};mxCellTracker[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[2717]]|| (this[_0x763a[2717]]= !0,this[_0x763a[1179]][_0x763a[1148]](this),mxCellMarker[_0x763a[202]][_0x763a[515]][_0x763a[183]](this))};function mxCellHighlight(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){null!= _0x3536x2&& (this[_0x763a[1179]]= _0x3536x2,this[_0x763a[2943]]= null!= _0x3536x3?_0x3536x3:mxConstants[_0x763a[2854]],this[_0x763a[610]]= null!= _0x3536x4?_0x3536x4:mxConstants[_0x763a[3057]],this[_0x763a[648]]= null!= _0x3536x5?_0x3536x5:!1,this[_0x763a[3058]]= mxUtils[_0x763a[885]](this,function(){this[_0x763a[2950]]()}),this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.SCALE,this[_0x763a[3058]]),this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.TRANSLATE,this[_0x763a[3058]]),this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.SCALE_AND_TRANSLATE,this[_0x763a[3058]]),this[_0x763a[1179]][_0x763a[502]]()[_0x763a[169]](mxEvent.CHANGE,this[_0x763a[3058]]),this[_0x763a[2877]]= mxUtils[_0x763a[885]](this,function(){this[_0x763a[801]]()}),this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.DOWN,this[_0x763a[2877]]),this[_0x763a[1179]][_0x763a[249]]()[_0x763a[169]](mxEvent.UP,this[_0x763a[2877]]))}mxCellHighlight[_0x763a[202]][_0x763a[3059]]= !1;mxCellHighlight[_0x763a[202]][_0x763a[1179]]= !0;mxCellHighlight[_0x763a[202]][_0x763a[724]]= null;mxCellHighlight[_0x763a[202]][_0x763a[657]]= 2;mxCellHighlight[_0x763a[202]][_0x763a[2877]]= null;mxCellHighlight[_0x763a[202]][_0x763a[2828]]= function(_0x3536x2){this[_0x763a[2943]]= _0x3536x2;null!= this[_0x763a[253]]&& (this[_0x763a[253]][_0x763a[1336]]= _0x3536x2)};mxCellHighlight[_0x763a[202]][_0x763a[3060]]= function(){this[_0x763a[253]]= this[_0x763a[2156]]();this[_0x763a[2950]]();!this[_0x763a[3059]]&& this[_0x763a[253]][_0x763a[252]][_0x763a[265]][_0x763a[285]]!= this[_0x763a[253]][_0x763a[252]]&& this[_0x763a[253]][_0x763a[252]][_0x763a[265]][_0x763a[950]](this[_0x763a[253]][_0x763a[252]],this[_0x763a[253]][_0x763a[252]][_0x763a[265]][_0x763a[285]])};mxCellHighlight[_0x763a[202]][_0x763a[2156]]= function(){var _0x3536x2=null,_0x3536x2=this[_0x763a[1179]][_0x763a[251]][_0x763a[250]](this[_0x763a[724]][_0x763a[246]])? new mxPolyline(this[_0x763a[724]][_0x763a[439]],this[_0x763a[2943]],this[_0x763a[610]]): new mxRectangleShape( new mxRectangle,null,this[_0x763a[2943]],this[_0x763a[610]]);_0x3536x2[_0x763a[507]]= this[_0x763a[1179]][_0x763a[507]]!= mxConstants[_0x763a[508]]?mxConstants[_0x763a[1523]]:mxConstants[_0x763a[508]];_0x3536x2[_0x763a[176]](this[_0x763a[1179]][_0x763a[249]]()[_0x763a[1524]]());mxEvent[_0x763a[2733]](_0x3536x2[_0x763a[252]],this[_0x763a[1179]],this[_0x763a[724]]);_0x3536x2[_0x763a[1564]]= 0;_0x3536x2[_0x763a[1229]]= !1;_0x3536x2[_0x763a[1522]]= this[_0x763a[648]];return _0x3536x2};mxCellHighlight[_0x763a[202]][_0x763a[2950]]= function(){if(null!= this[_0x763a[724]]&& null!= this[_0x763a[253]]){var _0x3536x2=0;this[_0x763a[1179]][_0x763a[251]][_0x763a[250]](this[_0x763a[724]][_0x763a[246]])?this[_0x763a[253]][_0x763a[1525]]= this[_0x763a[724]][_0x763a[439]]:(this[_0x763a[253]][_0x763a[1562]]= new mxRectangle(this[_0x763a[724]][_0x763a[235]]- this[_0x763a[657]],this[_0x763a[724]][_0x763a[236]]- this[_0x763a[657]],this[_0x763a[724]][_0x763a[117]]+ 2* this[_0x763a[657]],this[_0x763a[724]][_0x763a[119]]+ 2* this[_0x763a[657]]),_0x3536x2= Number(this[_0x763a[724]][_0x763a[124]][mxConstants[_0x763a[2278]]]|| _0x763a[468]));null!= this[_0x763a[724]][_0x763a[253]]&& this[_0x763a[253]][_0x763a[1609]](this[_0x763a[724]][_0x763a[253]][_0x763a[1610]]());0!= _0x3536x2&& (this[_0x763a[253]][_0x763a[603]]= _0x3536x2);this[_0x763a[253]][_0x763a[258]]()}};mxCellHighlight[_0x763a[202]][_0x763a[801]]= function(){this[_0x763a[1016]](null)};mxCellHighlight[_0x763a[202]][_0x763a[1016]]= function(_0x3536x2){this[_0x763a[724]]!= _0x3536x2&& (null!= this[_0x763a[253]]&& (this[_0x763a[253]][_0x763a[515]](),this[_0x763a[253]]= null),this[_0x763a[724]]= _0x3536x2,null!= this[_0x763a[724]]&& this[_0x763a[3060]]())};mxCellHighlight[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[1179]][_0x763a[249]]()[_0x763a[745]](this[_0x763a[3058]]);this[_0x763a[1179]][_0x763a[502]]()[_0x763a[745]](this[_0x763a[3058]]);this[_0x763a[1179]][_0x763a[249]]()[_0x763a[745]](this[_0x763a[2877]]);this[_0x763a[1179]][_0x763a[502]]()[_0x763a[745]](this[_0x763a[2877]]);null!= this[_0x763a[253]]&& (this[_0x763a[253]][_0x763a[515]](),this[_0x763a[253]]= null)};function mxDefaultKeyHandler(_0x3536x2){if(null!= _0x3536x2){this[_0x763a[3061]]= _0x3536x2;this[_0x763a[2458]]= new mxKeyHandler(_0x3536x2[_0x763a[1179]]);var _0x3536x3=this[_0x763a[2458]][_0x763a[859]];this[_0x763a[2458]][_0x763a[859]]= function(_0x3536x4){_0x3536x3[_0x763a[183]](this,arguments);_0x3536x2[_0x763a[3062]]();_0x3536x2[_0x763a[746]]( new mxEventObject(mxEvent.ESCAPE,_0x763a[763],_0x3536x4))}}}mxDefaultKeyHandler[_0x763a[202]][_0x763a[3061]]= null;mxDefaultKeyHandler[_0x763a[202]][_0x763a[2458]]= null;mxDefaultKeyHandler[_0x763a[202]][_0x763a[3063]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=mxUtils[_0x763a[885]](this,function(){this[_0x763a[3061]][_0x763a[350]](_0x3536x3)});_0x3536x4?this[_0x763a[2458]][_0x763a[3047]](_0x3536x2,_0x3536x5):this[_0x763a[2458]][_0x763a[3045]](_0x3536x2,_0x3536x5)};mxDefaultKeyHandler[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[2458]][_0x763a[515]]();this[_0x763a[2458]]= null};function mxDefaultPopupMenu(_0x3536x2){this[_0x763a[3064]]= _0x3536x2}mxDefaultPopupMenu[_0x763a[202]][_0x763a[88]]= null;mxDefaultPopupMenu[_0x763a[202]][_0x763a[3064]]= null;mxDefaultPopupMenu[_0x763a[202]][_0x763a[3065]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){if(null!= this[_0x763a[3064]]){var _0x3536x9=this[_0x763a[3066]](_0x3536x2,_0x3536x4,_0x3536x5);this[_0x763a[3067]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,this[_0x763a[3064]][_0x763a[285]],null)}};mxDefaultPopupMenu[_0x763a[202]][_0x763a[3067]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12){for(var _0x3536x13=!1;null!= _0x3536xa;){if(_0x763a[99]== _0x3536xa[_0x763a[301]]){var _0x3536x14=_0x3536xa[_0x763a[284]](_0x763a[3068]);if(null== _0x3536x14|| _0x3536x9[_0x3536x14]){var _0x3536x14=_0x3536xa[_0x763a[284]](_0x763a[3069]),_0x3536x14=mxResources[_0x763a[203]](_0x3536x14)|| _0x3536x14,_0x3536x15=mxUtils[_0x763a[1545]](mxUtils[_0x763a[329]](_0x3536xa)),_0x3536x16=_0x3536xa[_0x763a[284]](_0x763a[892]),_0x3536x17=_0x3536xa[_0x763a[284]](_0x763a[2916]),_0x3536x18=_0x3536xa[_0x763a[284]](_0x763a[3070]);_0x3536x13&& (_0x3536x3[_0x763a[1051]](_0x3536x12),_0x3536x13= !1);null!= _0x3536x17&& this[_0x763a[88]]&& (_0x3536x17= this[_0x763a[88]]+ _0x3536x17);_0x3536x14= this[_0x763a[3071]](_0x3536x3,_0x3536x2,_0x3536x14,_0x3536x17,_0x3536x15,_0x3536x16,_0x3536x4,_0x3536x12,_0x3536x18);this[_0x763a[3067]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa[_0x763a[285]],_0x3536x14)}}else {_0x763a[3072]== _0x3536xa[_0x763a[301]]&& (_0x3536x13= !0)};_0x3536xa= _0x3536xa[_0x763a[287]]}};mxDefaultPopupMenu[_0x763a[202]][_0x763a[3071]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa,_0x3536x12,_0x3536x13,_0x3536x14){return _0x3536x2[_0x763a[1025]](_0x3536x4,_0x3536x5,function(_0x3536x2){_0x763a[279]== typeof _0x3536x9&& _0x3536x9[_0x763a[239]](_0x3536x3,_0x3536x3,_0x3536x12,_0x3536x2);null!= _0x3536xa&& _0x3536x3[_0x763a[350]](_0x3536xa,_0x3536x12,_0x3536x2)},_0x3536x13,_0x3536x14)};mxDefaultPopupMenu[_0x763a[202]][_0x763a[3066]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=_0x3536x2[_0x763a[1179]][_0x763a[502]](),_0x3536x9=_0x3536x5[_0x763a[262]](_0x3536x3),_0x3536xa=[];_0x3536xa[_0x763a[3073]]= null== _0x3536x3;_0x3536xa[_0x763a[3074]]= 1< _0x3536x2[_0x763a[1179]][_0x763a[2694]]();_0x3536xa[_0x763a[3075]]= _0x3536x5[_0x763a[501]]()!= _0x3536x5[_0x763a[1197]](_0x3536x2[_0x763a[1179]][_0x763a[902]]());_0x3536xa[_0x763a[246]]= null!= _0x3536x3;_0x3536x5= null!= _0x3536x3&& 1== _0x3536x2[_0x763a[1179]][_0x763a[2694]]();_0x3536xa[_0x763a[3076]]= _0x3536x5&& 0< _0x3536x9;_0x3536xa[_0x763a[3077]]= _0x3536x5&& _0x3536x2[_0x763a[1179]][_0x763a[2516]](_0x3536x3,!1);_0x3536xa[_0x763a[3078]]= _0x3536x5&& _0x3536x2[_0x763a[1179]][_0x763a[2516]](_0x3536x3,!0);_0x3536xa[_0x763a[3079]]= _0x3536x5&& _0x3536x2[_0x763a[1179]][_0x763a[2553]](_0x3536x3);_0x3536xa[_0x763a[3080]]= _0x3536xa[_0x763a[3079]]&& 0== _0x3536x9;_0x3536xa[_0x763a[687]]= _0x3536x5&& _0x3536x2[_0x763a[1179]][_0x763a[1730]](_0x3536x3);_0x3536x9= this[_0x763a[3064]][_0x763a[64]](_0x763a[3081]);for(_0x3536x5= 0;_0x3536x5< _0x3536x9[_0x763a[67]];_0x3536x5++){var _0x3536x12=mxUtils[_0x763a[1545]](mxUtils[_0x763a[329]](_0x3536x9[_0x3536x5])),_0x3536x13=_0x3536x9[_0x3536x5][_0x763a[284]](_0x763a[298]);null!= _0x3536x13&& _0x763a[279]== typeof _0x3536x12&& (_0x3536xa[_0x3536x13]= _0x3536x12(_0x3536x2,_0x3536x3,_0x3536x4))};return _0x3536xa};function mxDefaultToolbar(_0x3536x2,_0x3536x3){this[_0x763a[3061]]= _0x3536x3;null!= _0x3536x2&& null!= _0x3536x3&& this[_0x763a[176]](_0x3536x2)}mxDefaultToolbar[_0x763a[202]][_0x763a[3061]]= null;mxDefaultToolbar[_0x763a[202]][_0x763a[3082]]= null;mxDefaultToolbar[_0x763a[202]][_0x763a[2877]]= null;mxDefaultToolbar[_0x763a[202]][_0x763a[657]]= 4;mxDefaultToolbar[_0x763a[202]][_0x763a[2804]]= !1;mxDefaultToolbar[_0x763a[202]][_0x763a[176]]= function(_0x3536x2){null!= _0x3536x2&& (this[_0x763a[3082]]= new mxToolbar(_0x3536x2),this[_0x763a[3082]][_0x763a[169]](mxEvent.SELECT,mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x4){var _0x3536x5=_0x3536x4[_0x763a[720]](_0x763a[279]);this[_0x763a[3061]][_0x763a[3083]]= null!= _0x3536x5?mxUtils[_0x763a[885]](this,function(){_0x3536x5[_0x763a[183]](this,arguments);this[_0x763a[3082]][_0x763a[1050]]()}):null})),this[_0x763a[2877]]= mxUtils[_0x763a[885]](this,function(){null!= this[_0x763a[3082]]&& this[_0x763a[3082]][_0x763a[1050]](!0)}),this[_0x763a[3061]][_0x763a[1179]][_0x763a[169]](mxEvent.DOUBLE_CLICK,this[_0x763a[2877]]),this[_0x763a[3061]][_0x763a[169]](mxEvent.ESCAPE,this[_0x763a[2877]]))};mxDefaultToolbar[_0x763a[202]][_0x763a[1025]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=mxUtils[_0x763a[885]](this,function(){null!= _0x3536x4&& 0< _0x3536x4[_0x763a[67]]&& this[_0x763a[3061]][_0x763a[350]](_0x3536x4)});return this[_0x763a[3082]][_0x763a[1025]](_0x3536x2,_0x3536x3,_0x3536x9,_0x3536x5)};mxDefaultToolbar[_0x763a[202]][_0x763a[1051]]= function(_0x3536x2){_0x3536x2= _0x3536x2|| mxClient[_0x763a[88]]+ _0x763a[3084];this[_0x763a[3082]][_0x763a[1051]](_0x3536x2)};mxDefaultToolbar[_0x763a[202]][_0x763a[970]]= function(){return this[_0x763a[3082]][_0x763a[970]]()};mxDefaultToolbar[_0x763a[202]][_0x763a[1038]]= function(_0x3536x2){return this[_0x763a[3082]][_0x763a[1038]](_0x3536x2)};mxDefaultToolbar[_0x763a[202]][_0x763a[3085]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=mxUtils[_0x763a[885]](this,function(){this[_0x763a[3061]][_0x763a[350]](_0x3536x4)});this[_0x763a[972]](_0x3536x2,_0x3536x3,_0x3536x5)};mxDefaultToolbar[_0x763a[202]][_0x763a[972]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return this[_0x763a[3082]][_0x763a[972]](_0x3536x2,_0x3536x3,_0x3536x4)};mxDefaultToolbar[_0x763a[202]][_0x763a[1048]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){var _0x3536xa=mxUtils[_0x763a[885]](this,function(){this[_0x763a[3061]][_0x763a[3086]](_0x3536x4);null!= _0x3536x9&& _0x3536x9(this[_0x763a[3061]])});return this[_0x763a[3082]][_0x763a[1042]](_0x3536x2,_0x3536x3,_0x3536xa,_0x3536x5)};mxDefaultToolbar[_0x763a[202]][_0x763a[3087]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9,_0x3536xa){var _0x3536x12=function(){return _0x763a[279]== typeof _0x3536x4?_0x3536x4():null!= _0x3536x4?_0x3536x4[_0x763a[238]]():null},_0x3536x13=mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x3){_0x763a[279]== typeof _0x3536x9?_0x3536x9(this[_0x763a[3061]],_0x3536x12(),_0x3536x2,_0x3536x3):this[_0x763a[1008]](_0x3536x12(),_0x3536x2,_0x3536x3);this[_0x763a[3082]][_0x763a[1050]]();mxEvent[_0x763a[722]](_0x3536x2)});_0x3536x2= this[_0x763a[3082]][_0x763a[1048]](_0x3536x2,_0x3536x3,_0x3536x13,_0x3536x5,null,_0x3536xa);this[_0x763a[3088]](_0x3536x2,function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x13(_0x3536x3,_0x3536x4)});return _0x3536x2};mxDefaultToolbar[_0x763a[202]][_0x763a[1008]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[3061]][_0x763a[1179]],_0x3536x9=_0x3536x5[_0x763a[502]]();if(null== _0x3536x4|| _0x3536x9[_0x763a[250]](_0x3536x4)|| !this[_0x763a[2804]]|| !_0x3536x5[_0x763a[2565]](_0x3536x4)){for(;null!= _0x3536x4&& !_0x3536x5[_0x763a[2685]](_0x3536x4,[_0x3536x2],_0x3536x3);){_0x3536x4= _0x3536x9[_0x763a[1197]](_0x3536x4)};this[_0x763a[1937]](_0x3536x2,_0x3536x3,_0x3536x4)}else {this[_0x763a[807]](_0x3536x2,_0x3536x3,_0x3536x4)}};mxDefaultToolbar[_0x763a[202]][_0x763a[1937]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[3061]][_0x763a[1179]];if(_0x3536x5[_0x763a[2621]](_0x3536x2)){var _0x3536x9=mxEvent[_0x763a[731]](_0x3536x3),_0x3536xa=mxEvent[_0x763a[733]](_0x3536x3),_0x3536x9=mxUtils[_0x763a[2196]](_0x3536x5[_0x763a[526]],_0x3536x9,_0x3536xa);return _0x3536x5[_0x763a[2655]]()&& _0x3536x5[_0x763a[2686]](_0x3536x4,[_0x3536x2],_0x3536x3)?_0x3536x5[_0x763a[853]](_0x3536x4,[_0x3536x2],null,_0x3536x9[_0x763a[235]],_0x3536x9[_0x763a[236]]):this[_0x763a[3061]][_0x763a[817]](_0x3536x4,_0x3536x2,_0x3536x9[_0x763a[235]],_0x3536x9[_0x763a[236]])};return null};mxDefaultToolbar[_0x763a[202]][_0x763a[807]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x3= this[_0x763a[3061]][_0x763a[1179]];var _0x3536x5=_0x3536x3[_0x763a[502]]();if(null!= _0x3536x4&& _0x3536x3[_0x763a[2565]](_0x3536x2)&& _0x3536x3[_0x763a[2581]](null,_0x3536x4,_0x3536x2)){var _0x3536x9=null;_0x3536x5[_0x763a[473]]();try{var _0x3536xa=_0x3536x5[_0x763a[1721]](_0x3536x4),_0x3536x12=_0x3536x5[_0x763a[1721]](_0x3536x2)[_0x763a[238]]();_0x3536x12[_0x763a[235]]= _0x3536xa[_0x763a[235]]+ (_0x3536xa[_0x763a[117]]- _0x3536x12[_0x763a[117]])/ 2;_0x3536x12[_0x763a[236]]= _0x3536xa[_0x763a[236]]+ (_0x3536xa[_0x763a[119]]- _0x3536x12[_0x763a[119]])/ 2;var _0x3536x13=this[_0x763a[657]]* _0x3536x3[_0x763a[1020]],_0x3536x14=20* _0x3536x5[_0x763a[1962]](_0x3536x4,!0);this[_0x763a[3061]][_0x763a[3089]]?_0x3536x12[_0x763a[235]]+= (_0x3536x12[_0x763a[117]]+ _0x3536xa[_0x763a[117]])/ 2+ _0x3536x13+ _0x3536x14:_0x3536x12[_0x763a[236]]+= (_0x3536x12[_0x763a[119]]+ _0x3536xa[_0x763a[119]])/ 2+ _0x3536x13+ _0x3536x14;_0x3536x2[_0x763a[1724]](_0x3536x12);var _0x3536x15=_0x3536x5[_0x763a[1197]](_0x3536x4);_0x3536x3[_0x763a[2103]](_0x3536x2,_0x3536x15);_0x3536x3[_0x763a[2509]](_0x3536x2);_0x3536x9= this[_0x763a[3061]][_0x763a[2503]](_0x3536x4,_0x3536x2);if(null== _0x3536x5[_0x763a[1721]](_0x3536x9)){var _0x3536x16= new mxGeometry;_0x3536x16[_0x763a[1500]]= !0;_0x3536x5[_0x763a[1724]](_0x3536x9,_0x3536x16)};_0x3536x3[_0x763a[2504]](_0x3536x9,_0x3536x15,_0x3536x4,_0x3536x2)}finally{_0x3536x5[_0x763a[476]]()};_0x3536x3[_0x763a[904]]([_0x3536x2,_0x3536x9]);_0x3536x3[_0x763a[2564]](_0x3536x2)}};mxDefaultToolbar[_0x763a[202]][_0x763a[3088]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=document[_0x763a[55]](_0x763a[466]);_0x3536x4[_0x763a[57]](_0x763a[390],_0x3536x2[_0x763a[284]](_0x763a[390]));var _0x3536x5=mxUtils[_0x763a[885]](this,function(_0x3536x9){_0x3536x4[_0x763a[124]][_0x763a[117]]= 2* _0x3536x2[_0x763a[359]]+ _0x763a[168];_0x3536x4[_0x763a[124]][_0x763a[119]]= 2* _0x3536x2[_0x763a[167]]+ _0x763a[168];mxUtils[_0x763a[3090]](_0x3536x2,this[_0x763a[3061]][_0x763a[1179]],_0x3536x3,_0x3536x4);mxEvent[_0x763a[745]](_0x3536x4,_0x763a[219],_0x3536x5)});mxClient[_0x763a[80]]?_0x3536x5():mxEvent[_0x763a[169]](_0x3536x4,_0x763a[219],_0x3536x5)};mxDefaultToolbar[_0x763a[202]][_0x763a[515]]= function(){null!= this[_0x763a[2877]]&& (this[_0x763a[3061]][_0x763a[1179]][_0x763a[745]](_0x763a[760],this[_0x763a[2877]]),this[_0x763a[3061]][_0x763a[745]](_0x763a[859],this[_0x763a[2877]]),this[_0x763a[2877]]= null);null!= this[_0x763a[3082]]&& (this[_0x763a[3082]][_0x763a[515]](),this[_0x763a[3082]]= null)};function mxEditor(_0x3536x2){this[_0x763a[3091]]= [];this[_0x763a[3092]]();if(null!= document[_0x763a[112]]){this[_0x763a[3093]]= [];this[_0x763a[3094]]= new mxDefaultPopupMenu;this[_0x763a[3095]]= new mxUndoManager;this[_0x763a[1179]]= this[_0x763a[3096]]();this[_0x763a[3082]]= this[_0x763a[3097]]();this[_0x763a[3098]]= new mxDefaultKeyHandler(this);this[_0x763a[3099]](_0x3536x2);this[_0x763a[1179]][_0x763a[2180]]= this[_0x763a[3100]];!mxClient[_0x763a[3101]]&& null!= this[_0x763a[1056]]&& (this[_0x763a[812]]= this[_0x763a[3102]]());if(null!= this[_0x763a[1987]]){this[_0x763a[1987]]()};mxClient[_0x763a[80]]&& mxEvent[_0x763a[169]](window,_0x763a[2428],mxUtils[_0x763a[885]](this,function(){this[_0x763a[515]]()}))}}mxLoadResources&& mxResources[_0x763a[99]](mxClient[_0x763a[86]]+ _0x763a[3103]);mxEditor[_0x763a[202]]= new mxEventSource;mxEditor[_0x763a[202]][_0x763a[196]]= mxEditor;mxEditor[_0x763a[202]][_0x763a[3104]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[3105]:_0x763a[110];mxEditor[_0x763a[202]][_0x763a[3106]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[3107]:_0x763a[110];mxEditor[_0x763a[202]][_0x763a[3108]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[3109]:_0x763a[110];mxEditor[_0x763a[202]][_0x763a[3110]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[716]:_0x763a[110];mxEditor[_0x763a[202]][_0x763a[3111]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[3112]:_0x763a[110];mxEditor[_0x763a[202]][_0x763a[3113]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[2719]:_0x763a[110];mxEditor[_0x763a[202]][_0x763a[3114]]= _0x763a[130]!= mxClient[_0x763a[90]]?_0x763a[2136]:_0x763a[110];mxEditor[_0x763a[202]][_0x763a[2136]]= null;mxEditor[_0x763a[202]][_0x763a[1179]]= null;mxEditor[_0x763a[202]][_0x763a[2720]]= null;mxEditor[_0x763a[202]][_0x763a[3082]]= null;mxEditor[_0x763a[202]][_0x763a[812]]= null;mxEditor[_0x763a[202]][_0x763a[879]]= null;mxEditor[_0x763a[202]][_0x763a[3094]]= null;mxEditor[_0x763a[202]][_0x763a[3095]]= null;mxEditor[_0x763a[202]][_0x763a[3098]]= null;mxEditor[_0x763a[202]][_0x763a[3091]]= null;mxEditor[_0x763a[202]][_0x763a[3115]]= _0x763a[1061];mxEditor[_0x763a[202]][_0x763a[3116]]= !1;mxEditor[_0x763a[202]][_0x763a[1157]]= !0;mxEditor[_0x763a[202]][_0x763a[3083]]= null;mxEditor[_0x763a[202]][_0x763a[3117]]= !1;mxEditor[_0x763a[202]][_0x763a[3118]]= null;mxEditor[_0x763a[202]][_0x763a[2075]]= null;mxEditor[_0x763a[202]][_0x763a[3119]]= null;mxEditor[_0x763a[202]][_0x763a[3120]]= null;mxEditor[_0x763a[202]][_0x763a[3121]]= null;mxEditor[_0x763a[202]][_0x763a[3122]]= null;mxEditor[_0x763a[202]][_0x763a[1069]]= _0x763a[336];mxEditor[_0x763a[202]][_0x763a[3123]]= _0x763a[338];mxEditor[_0x763a[202]][_0x763a[1070]]= !0;mxEditor[_0x763a[202]][_0x763a[3124]]= null;mxEditor[_0x763a[202]][_0x763a[3125]]= null;mxEditor[_0x763a[202]][_0x763a[1056]]= null;mxEditor[_0x763a[202]][_0x763a[1058]]= null;mxEditor[_0x763a[202]][_0x763a[1057]]= null;mxEditor[_0x763a[202]][_0x763a[3089]]= !1;mxEditor[_0x763a[202]][_0x763a[3126]]= !1;mxEditor[_0x763a[202]][_0x763a[3127]]= 0;mxEditor[_0x763a[202]][_0x763a[3128]]= !1;mxEditor[_0x763a[202]][_0x763a[3129]]= !1;mxEditor[_0x763a[202]][_0x763a[3093]]= null;mxEditor[_0x763a[202]][_0x763a[3130]]= 0;mxEditor[_0x763a[202]][_0x763a[3100]]= _0x763a[604];mxEditor[_0x763a[202]][_0x763a[3112]]= null;mxEditor[_0x763a[202]][_0x763a[3131]]= null;mxEditor[_0x763a[202]][_0x763a[3132]]= 20;mxEditor[_0x763a[202]][_0x763a[2719]]= null;mxEditor[_0x763a[202]][_0x763a[3133]]= null;mxEditor[_0x763a[202]][_0x763a[3134]]= null;mxEditor[_0x763a[202]][_0x763a[3135]]= 300;mxEditor[_0x763a[202]][_0x763a[3136]]= 260;mxEditor[_0x763a[202]][_0x763a[3137]]= 240;mxEditor[_0x763a[202]][_0x763a[3138]]= null;mxEditor[_0x763a[202]][_0x763a[3139]]= !1;mxEditor[_0x763a[202]][_0x763a[3140]]= !1;mxEditor[_0x763a[202]][_0x763a[2113]]= !1;mxEditor[_0x763a[202]][_0x763a[2133]]= function(){return this[_0x763a[2113]]};mxEditor[_0x763a[202]][_0x763a[2128]]= function(_0x3536x2){this[_0x763a[2113]]= _0x3536x2};mxEditor[_0x763a[202]][_0x763a[3092]]= function(){this[_0x763a[3071]](_0x763a[815],function(_0x3536x2){_0x3536x2[_0x763a[815]]()});this[_0x763a[3071]](_0x763a[540],function(_0x3536x2){( new mxPrintPreview(_0x3536x2[_0x763a[1179]],1))[_0x763a[392]]()});this[_0x763a[3071]](_0x763a[539],function(_0x3536x2){mxUtils[_0x763a[539]](_0x3536x2[_0x763a[1179]],null,10,10)});this[_0x763a[3071]](_0x763a[3141],function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[3142]]();if(null== _0x3536x3|| mxClient[_0x763a[3101]]){_0x3536x2[_0x763a[350]](_0x763a[539])}else {var _0x3536x4=mxUtils[_0x763a[3143]](_0x3536x2[_0x763a[1179]],1),_0x3536x4=mxUtils[_0x763a[875]](_0x3536x4,_0x763a[192]);mxUtils[_0x763a[894]](_0x3536x3,_0x3536x2[_0x763a[3123]]+ _0x763a[226]+ encodeURIComponent(_0x3536x4),document,_0x763a[3144])}});this[_0x763a[3071]](_0x763a[802],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[802]]()});this[_0x763a[3071]](_0x763a[3145],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& mxClipboard[_0x763a[3145]](_0x3536x2[_0x763a[1179]])});this[_0x763a[3071]](_0x763a[149],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& mxClipboard[_0x763a[149]](_0x3536x2[_0x763a[1179]])});this[_0x763a[3071]](_0x763a[3146],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& mxClipboard[_0x763a[3146]](_0x3536x2[_0x763a[1179]])});this[_0x763a[3071]](_0x763a[3147],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[842]]()});this[_0x763a[3071]](_0x763a[1504],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[2450]](_0x3536x2[_0x763a[844]]())});this[_0x763a[3071]](_0x763a[3148],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[904]](_0x3536x2[_0x763a[1179]][_0x763a[845]]())});this[_0x763a[3071]](_0x763a[1997],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[846]]()});this[_0x763a[3071]](_0x763a[824],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[824]]()});this[_0x763a[3071]](_0x763a[825],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[825]]()});this[_0x763a[3071]](_0x763a[2558],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[2558]]()});this[_0x763a[3071]](_0x763a[2559],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[2559]]()});this[_0x763a[3071]](_0x763a[3149],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[2560]]()});this[_0x763a[3071]](_0x763a[933],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[933]]()});this[_0x763a[3071]](_0x763a[3150],function(_0x3536x2,_0x3536x3){_0x3536x2[_0x763a[3150]](_0x3536x3)});this[_0x763a[3071]](_0x763a[2705],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[2705]]()});this[_0x763a[3071]](_0x763a[3151],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[2440]]()});this[_0x763a[3071]](_0x763a[2706],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[2706]]()});this[_0x763a[3071]](_0x763a[2708],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[2708]]()});this[_0x763a[3071]](_0x763a[1061],function(_0x3536x2,_0x3536x3){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[2453]](_0x3536x3)&& _0x3536x2[_0x763a[1179]][_0x763a[2451]](_0x3536x3)});this[_0x763a[3071]](_0x763a[3152],function(_0x3536x2,_0x3536x3){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[840]](!0)});this[_0x763a[3071]](_0x763a[3153],function(_0x3536x2,_0x3536x3){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[840]](!1)});this[_0x763a[3071]](_0x763a[2552],function(_0x3536x2,_0x3536x3){_0x3536x2[_0x763a[1179]][_0x763a[2552]](_0x3536x3)});this[_0x763a[3071]](_0x763a[2554],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[2554]]()});this[_0x763a[3071]](_0x763a[2442],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[2442]]()});this[_0x763a[3071]](_0x763a[3154],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[2702]]()});this[_0x763a[3071]](_0x763a[3155],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[2700]]()});this[_0x763a[3071]](_0x763a[3156],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[2703]]()});this[_0x763a[3071]](_0x763a[3157],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[2704]]()});this[_0x763a[3071]](_0x763a[2514],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[847]](!0)});this[_0x763a[3071]](_0x763a[3158],function(_0x3536x2){if(_0x3536x2[_0x763a[1179]][_0x763a[994]]()){var _0x3536x3=_0x3536x2[_0x763a[1179]][_0x763a[1728]]();_0x3536x2[_0x763a[1179]][_0x763a[847]](!0,!1,_0x3536x3)}});this[_0x763a[3071]](_0x763a[3159],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[847]](!1)});this[_0x763a[3071]](_0x763a[3160],function(_0x3536x2){if(_0x3536x2[_0x763a[1179]][_0x763a[994]]()){var _0x3536x3=_0x3536x2[_0x763a[1179]][_0x763a[1728]]();_0x3536x2[_0x763a[1179]][_0x763a[847]](!1,!1,_0x3536x3)}});this[_0x763a[3071]](_0x763a[1447],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[2491]](mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_BOLD)});this[_0x763a[3071]](_0x763a[1449],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[2491]](mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_ITALIC)});this[_0x763a[3071]](_0x763a[355],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[2491]](mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_UNDERLINE)});this[_0x763a[3071]](_0x763a[639],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[2491]](mxConstants.STYLE_FONTSTYLE,mxConstants.FONT_SHADOW)});this[_0x763a[3071]](_0x763a[3161],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[849]](mxConstants.ALIGN_LEFT)});this[_0x763a[3071]](_0x763a[3162],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[849]](mxConstants.ALIGN_CENTER)});this[_0x763a[3071]](_0x763a[3163],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[849]](mxConstants.ALIGN_RIGHT)});this[_0x763a[3071]](_0x763a[3164],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[849]](mxConstants.ALIGN_TOP)});this[_0x763a[3071]](_0x763a[3165],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[849]](mxConstants.ALIGN_MIDDLE)});this[_0x763a[3071]](_0x763a[3166],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[849]](mxConstants.ALIGN_BOTTOM)});this[_0x763a[3071]](_0x763a[3167],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[1717]](mxConstants.STYLE_ALIGN,mxConstants.ALIGN_LEFT)});this[_0x763a[3071]](_0x763a[3168],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[1717]](mxConstants.STYLE_ALIGN,mxConstants.ALIGN_CENTER)});this[_0x763a[3071]](_0x763a[3169],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[1717]](mxConstants.STYLE_ALIGN,mxConstants.ALIGN_RIGHT)});this[_0x763a[3071]](_0x763a[3170],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[1717]](mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_TOP)});this[_0x763a[3071]](_0x763a[3171],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[1717]](mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_MIDDLE)});this[_0x763a[3071]](_0x763a[3172],function(_0x3536x2){_0x3536x2[_0x763a[1179]][_0x763a[994]]()&& _0x3536x2[_0x763a[1179]][_0x763a[1717]](mxConstants.STYLE_VERTICAL_ALIGN,mxConstants.ALIGN_BOTTOM)});this[_0x763a[3071]](_0x763a[499],function(_0x3536x2){var _0x3536x3=100* _0x3536x2[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]],_0x3536x3=parseFloat(mxUtils[_0x763a[3173]](mxResources[_0x763a[203]](_0x3536x2[_0x763a[3104]])|| _0x3536x2[_0x763a[3104]],_0x3536x3))/ 100;isNaN(_0x3536x3)|| _0x3536x2[_0x763a[1179]][_0x763a[249]]()[_0x763a[2262]](_0x3536x3)});this[_0x763a[3071]](_0x763a[3174],function(_0x3536x2){null!= _0x3536x2[_0x763a[3112]]?_0x3536x2[_0x763a[3112]][_0x763a[175]](!_0x3536x2[_0x763a[3112]][_0x763a[174]]()):_0x3536x2[_0x763a[3175]]()});this[_0x763a[3071]](_0x763a[3176],function(_0x3536x2){null!= _0x3536x2[_0x763a[2719]]?_0x3536x2[_0x763a[2719]][_0x763a[175]](!_0x3536x2[_0x763a[2719]][_0x763a[174]]()):_0x3536x2[_0x763a[3177]]()});this[_0x763a[3071]](_0x763a[3178],function(_0x3536x2){null== _0x3536x2[_0x763a[2136]]?_0x3536x2[_0x763a[3179]]():_0x3536x2[_0x763a[2136]][_0x763a[175]](!_0x3536x2[_0x763a[2136]][_0x763a[174]]())});this[_0x763a[3071]](_0x763a[3180],function(_0x3536x2){mxLog[_0x763a[175]](!mxLog[_0x763a[174]]())})};mxEditor[_0x763a[202]][_0x763a[3102]]= function(){var _0x3536x2=mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[746]]( new mxEventObject(mxEvent.SESSION,_0x763a[812],_0x3536x2))});return this[_0x763a[807]](this[_0x763a[1056]],this[_0x763a[1057]],this[_0x763a[1058]],_0x3536x2)};mxEditor[_0x763a[202]][_0x763a[3099]]= function(_0x3536x2){null!= _0x3536x2&& (( new mxCodec(_0x3536x2[_0x763a[295]]))[_0x763a[1093]](_0x3536x2,this),this[_0x763a[3181]]())};mxEditor[_0x763a[202]][_0x763a[3182]]= function(){document[_0x763a[3183]]= _0x763a[3184]};mxEditor[_0x763a[202]][_0x763a[3181]]= function(){this[_0x763a[1184]]= ( new Date)[_0x763a[178]]();this[_0x763a[3095]][_0x763a[200]]();this[_0x763a[1183]]= 0;this[_0x763a[2128]](!1)};mxEditor[_0x763a[202]][_0x763a[3071]]= function(_0x3536x2,_0x3536x3){this[_0x763a[3091]][_0x3536x2]= _0x3536x3};mxEditor[_0x763a[202]][_0x763a[350]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[3091]][_0x3536x2];if(null!= _0x3536x5){try{var _0x3536x9=arguments;_0x3536x9[0]= this;_0x3536x5[_0x763a[183]](this,_0x3536x9)}catch(f){throw mxUtils[_0x763a[267]](_0x763a[3185]+ _0x3536x2+ _0x763a[3186]+ f[_0x763a[281]],280,!0),f}}else {mxUtils[_0x763a[267]](_0x763a[3187]+ _0x3536x2,280,!0)}};mxEditor[_0x763a[202]][_0x763a[3188]]= function(_0x3536x2,_0x3536x3){this[_0x763a[3118]][_0x3536x2]= _0x3536x3};mxEditor[_0x763a[202]][_0x763a[3189]]= function(_0x3536x2){return this[_0x763a[3118]][_0x3536x2]};mxEditor[_0x763a[202]][_0x763a[3096]]= function(){var _0x3536x2= new mxGraph(null,null,this[_0x763a[2720]]);_0x3536x2[_0x763a[2673]](!0);_0x3536x2[_0x763a[2674]](!0);this[_0x763a[3190]](_0x3536x2);this[_0x763a[3191]](_0x3536x2);this[_0x763a[3192]](_0x3536x2);this[_0x763a[3193]](_0x3536x2);this[_0x763a[3194]](_0x3536x2);_0x3536x2[_0x763a[2316]][_0x763a[1033]]= mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x4,_0x3536x5){return this[_0x763a[3195]](_0x3536x2,_0x3536x4,_0x3536x5)});_0x3536x2[_0x763a[2433]][_0x763a[1033]]= mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x4){return this[_0x763a[2503]](_0x3536x2,_0x3536x4)});this[_0x763a[3196]](_0x3536x2);this[_0x763a[3197]](_0x3536x2);return _0x3536x2};mxEditor[_0x763a[202]][_0x763a[3196]]= function(_0x3536x2){_0x3536x2= new mxSwimlaneManager(_0x3536x2,!1);_0x3536x2[_0x763a[1737]]= mxUtils[_0x763a[885]](this,function(){return this[_0x763a[3089]]});_0x3536x2[_0x763a[994]]= mxUtils[_0x763a[885]](this,function(){return this[_0x763a[3128]]});return _0x3536x2};mxEditor[_0x763a[202]][_0x763a[3197]]= function(_0x3536x2){var _0x3536x3= new mxLayoutManager(_0x3536x2),_0x3536x4=this;_0x3536x3[_0x763a[2754]]= function(_0x3536x3){var _0x3536x9=null,_0x3536xa=_0x3536x4[_0x763a[1179]][_0x763a[502]]();if(null!= _0x3536xa[_0x763a[1197]](_0x3536x3)){if(_0x3536x4[_0x763a[3129]]&& _0x3536x2[_0x763a[1730]](_0x3536x3)){null== _0x3536x4[_0x763a[3198]]&& (_0x3536x4[_0x763a[3198]]= _0x3536x4[_0x763a[3199]]()),_0x3536x9= _0x3536x4[_0x763a[3198]]}else {if(_0x3536x4[_0x763a[3126]]&& (_0x3536x2[_0x763a[2553]](_0x3536x3)|| null== _0x3536xa[_0x763a[1197]](_0x3536xa[_0x763a[1197]](_0x3536x3)))){null== _0x3536x4[_0x763a[3200]]&& (_0x3536x4[_0x763a[3200]]= _0x3536x4[_0x763a[3201]]()),_0x3536x9= _0x3536x4[_0x763a[3200]]}}};return _0x3536x9};return _0x3536x3};mxEditor[_0x763a[202]][_0x763a[3202]]= function(_0x3536x2){null== this[_0x763a[1179]][_0x763a[526]]&& (this[_0x763a[1179]][_0x763a[176]](_0x3536x2),this[_0x763a[3203]]= new mxRubberband(this[_0x763a[1179]]),this[_0x763a[1157]]&& mxEvent[_0x763a[1157]](_0x3536x2),mxClient[_0x763a[496]]&& new mxDivResizer(_0x3536x2))};mxEditor[_0x763a[202]][_0x763a[3190]]= function(_0x3536x2){_0x3536x2[_0x763a[169]](mxEvent.DOUBLE_CLICK,mxUtils[_0x763a[885]](this,function(_0x3536x3,_0x3536x4){var _0x3536x5=_0x3536x4[_0x763a[720]](_0x763a[246]);null!= _0x3536x5&& (_0x3536x2[_0x763a[994]]()&& null!= this[_0x763a[3115]])&& (this[_0x763a[350]](this[_0x763a[3115]],_0x3536x5),_0x3536x4[_0x763a[722]]())}))};mxEditor[_0x763a[202]][_0x763a[3191]]= function(_0x3536x2){var _0x3536x3=mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x3){var _0x3536x9=_0x3536x3[_0x763a[720]](_0x763a[1061]);this[_0x763a[3095]][_0x763a[1114]](_0x3536x9)});_0x3536x2[_0x763a[502]]()[_0x763a[169]](mxEvent.UNDO,_0x3536x3);_0x3536x2[_0x763a[249]]()[_0x763a[169]](mxEvent.UNDO,_0x3536x3);_0x3536x3= function(_0x3536x3,_0x3536x5){var _0x3536x9=_0x3536x5[_0x763a[720]](_0x763a[1061])[_0x763a[1065]];_0x3536x2[_0x763a[904]](_0x3536x2[_0x763a[2436]](_0x3536x9))};this[_0x763a[3095]][_0x763a[169]](mxEvent.UNDO,_0x3536x3);this[_0x763a[3095]][_0x763a[169]](mxEvent.REDO,_0x3536x3)};mxEditor[_0x763a[202]][_0x763a[3192]]= function(_0x3536x2){var _0x3536x3=mxUtils[_0x763a[885]](this,function(_0x3536x2){this[_0x763a[746]]( new mxEventObject(mxEvent.ROOT))});_0x3536x2[_0x763a[249]]()[_0x763a[169]](mxEvent.DOWN,_0x3536x3);_0x3536x2[_0x763a[249]]()[_0x763a[169]](mxEvent.UP,_0x3536x3)};mxEditor[_0x763a[202]][_0x763a[3193]]= function(_0x3536x2){var _0x3536x3=mxUtils[_0x763a[885]](this,function(_0x3536x3,_0x3536x5){this[_0x763a[2128]](!0);!0== this[_0x763a[3140]]&& _0x3536x2[_0x763a[2585]]();for(var _0x3536x9=_0x3536x5[_0x763a[720]](_0x763a[1061])[_0x763a[1065]],_0x3536xa=0;_0x3536xa< _0x3536x9[_0x763a[67]];_0x3536xa++){var _0x3536x12=_0x3536x9[_0x3536xa];if(_0x3536x12 instanceof mxRootChange|| _0x3536x12 instanceof mxValueChange&& _0x3536x12[_0x763a[246]]== this[_0x763a[1179]][_0x763a[251]][_0x763a[813]]|| _0x3536x12 instanceof mxCellAttributeChange&& _0x3536x12[_0x763a[246]]== this[_0x763a[1179]][_0x763a[251]][_0x763a[813]]){this[_0x763a[746]]( new mxEventObject(mxEvent.ROOT));break}}});_0x3536x2[_0x763a[502]]()[_0x763a[169]](mxEvent.CHANGE,_0x3536x3)};mxEditor[_0x763a[202]][_0x763a[3194]]= function(_0x3536x2){var _0x3536x3=this;_0x3536x2[_0x763a[1133]]({mouseDown:function(_0x3536x2,_0x3536x5){if(null!= _0x3536x3[_0x763a[3083]]&& !_0x3536x5[_0x763a[737]]()&& (_0x3536x3[_0x763a[3117]]|| null== _0x3536x5[_0x763a[248]]())){_0x3536x3[_0x763a[1179]][_0x763a[2440]](),_0x3536x3[_0x763a[3083]](_0x3536x5[_0x763a[727]](),_0x3536x5[_0x763a[736]]()),this[_0x763a[1142]]= !0,_0x3536x5[_0x763a[722]]()}},mouseMove:function(_0x3536x2,_0x3536x3){this[_0x763a[1142]]&& _0x3536x3[_0x763a[722]]()},mouseUp:function(_0x3536x2,_0x3536x3){this[_0x763a[1142]]&& (this[_0x763a[1142]]= !1,_0x3536x3[_0x763a[722]]())}})};mxEditor[_0x763a[202]][_0x763a[3201]]= function(){var _0x3536x2=this[_0x763a[1179]][_0x763a[1020]],_0x3536x3= new mxStackLayout(this[_0x763a[1179]],!this[_0x763a[3089]],this[_0x763a[3127]],2* _0x3536x2,2* _0x3536x2);_0x3536x3[_0x763a[1713]]= function(_0x3536x2){return !_0x3536x3[_0x763a[1179]][_0x763a[1730]](_0x3536x2)};return _0x3536x3};mxEditor[_0x763a[202]][_0x763a[3199]]= function(){return new mxCompactTreeLayout(this[_0x763a[1179]],this[_0x763a[3089]])};mxEditor[_0x763a[202]][_0x763a[3097]]= function(){return new mxDefaultToolbar(null,this)};mxEditor[_0x763a[202]][_0x763a[3204]]= function(_0x3536x2){this[_0x763a[3082]][_0x763a[176]](_0x3536x2);mxClient[_0x763a[496]]&& new mxDivResizer(_0x3536x2)};mxEditor[_0x763a[202]][_0x763a[3205]]= function(_0x3536x2){null== this[_0x763a[879]]&& (this[_0x763a[879]]= _0x3536x2,this[_0x763a[169]](mxEvent.SAVE,mxUtils[_0x763a[885]](this,function(){var _0x3536x2=( new Date)[_0x763a[3206]]();this[_0x763a[3207]]((mxResources[_0x763a[203]](this[_0x763a[3106]])|| this[_0x763a[3106]])+ _0x763a[3186]+ _0x3536x2)})),this[_0x763a[169]](mxEvent.OPEN,mxUtils[_0x763a[885]](this,function(){this[_0x763a[3207]]((mxResources[_0x763a[203]](this[_0x763a[3108]])|| this[_0x763a[3108]])+ _0x763a[3186]+ this[_0x763a[3122]])})),mxClient[_0x763a[496]]&& new mxDivResizer(_0x3536x2))};mxEditor[_0x763a[202]][_0x763a[3207]]= function(_0x3536x2){null!= this[_0x763a[879]]&& null!= _0x3536x2&& (this[_0x763a[879]][_0x763a[339]]= _0x3536x2)};mxEditor[_0x763a[202]][_0x763a[3208]]= function(_0x3536x2){this[_0x763a[169]](mxEvent.ROOT,mxUtils[_0x763a[885]](this,function(_0x3536x3){_0x3536x2[_0x763a[339]]= this[_0x763a[3209]]()}));mxClient[_0x763a[496]]&& new mxDivResizer(_0x3536x2)};mxEditor[_0x763a[202]][_0x763a[3210]]= function(_0x3536x2,_0x3536x3){null!= _0x3536x2&& ( new mxCompactTreeLayout(this[_0x763a[1179]],_0x3536x3))[_0x763a[350]](_0x3536x2)};mxEditor[_0x763a[202]][_0x763a[3209]]= function(){for(var _0x3536x2=_0x763a[110],_0x3536x3=this[_0x763a[1179]],_0x3536x4=_0x3536x3[_0x763a[2534]]();null!= _0x3536x4&& null!= _0x3536x3[_0x763a[502]]()[_0x763a[1197]](_0x3536x3[_0x763a[502]]()[_0x763a[1197]](_0x3536x4));){_0x3536x3[_0x763a[2553]](_0x3536x4)&& (_0x3536x2= _0x763a[3211]+ _0x3536x3[_0x763a[2454]](_0x3536x4)+ _0x3536x2),_0x3536x4= _0x3536x3[_0x763a[502]]()[_0x763a[1197]](_0x3536x4)};return this[_0x763a[3212]]()+ _0x3536x2};mxEditor[_0x763a[202]][_0x763a[3212]]= function(){var _0x3536x2=this[_0x763a[1179]][_0x763a[502]]()[_0x763a[501]]();return this[_0x763a[1179]][_0x763a[2454]](_0x3536x2)};mxEditor[_0x763a[202]][_0x763a[824]]= function(){this[_0x763a[3095]][_0x763a[824]]()};mxEditor[_0x763a[202]][_0x763a[825]]= function(){this[_0x763a[3095]][_0x763a[825]]()};mxEditor[_0x763a[202]][_0x763a[844]]= function(){var _0x3536x2=null!= this[_0x763a[3121]]?this[_0x763a[3121]]:this[_0x763a[1179]][_0x763a[1020]];return this[_0x763a[1179]][_0x763a[844]](this[_0x763a[3213]](),_0x3536x2)};mxEditor[_0x763a[202]][_0x763a[3213]]= function(){return this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1978]](this[_0x763a[3120]])};mxEditor[_0x763a[202]][_0x763a[392]]= function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=mxUtils[_0x763a[219]](_0x3536x2)[_0x763a[875]]();this[_0x763a[3214]](_0x3536x3[_0x763a[158]]);this[_0x763a[3122]]= _0x3536x2;this[_0x763a[746]]( new mxEventObject(mxEvent.OPEN,_0x763a[3122],_0x3536x2))}};mxEditor[_0x763a[202]][_0x763a[3214]]= function(_0x3536x2){( new mxCodec(_0x3536x2[_0x763a[295]]))[_0x763a[1093]](_0x3536x2,this[_0x763a[1179]][_0x763a[502]]());this[_0x763a[3181]]()};mxEditor[_0x763a[202]][_0x763a[815]]= function(_0x3536x2,_0x3536x3){_0x3536x2= _0x3536x2|| this[_0x763a[3215]]();if(null!= _0x3536x2&& 0< _0x3536x2[_0x763a[67]]){var _0x3536x4=this[_0x763a[3216]](_0x3536x3);this[_0x763a[3217]](_0x3536x2,_0x3536x4);this[_0x763a[2128]](!1)};this[_0x763a[746]]( new mxEventObject(mxEvent.SAVE,_0x763a[863],_0x3536x2))};mxEditor[_0x763a[202]][_0x763a[3217]]= function(_0x3536x2,_0x3536x3){this[_0x763a[1070]]&& (_0x3536x3= encodeURIComponent(_0x3536x3));mxUtils[_0x763a[814]](_0x3536x2,this[_0x763a[3123]]+ _0x763a[226]+ _0x3536x3,mxUtils[_0x763a[885]](this,function(_0x3536x4){this[_0x763a[746]]( new mxEventObject(mxEvent.POST,_0x763a[870],_0x3536x4,_0x763a[863],_0x3536x2,_0x763a[410],_0x3536x3))}))};mxEditor[_0x763a[202]][_0x763a[3216]]= function(_0x3536x2){_0x3536x2= null!= _0x3536x2?_0x3536x2:this[_0x763a[1069]];var _0x3536x3=( new mxCodec)[_0x763a[514]](this[_0x763a[1179]][_0x763a[502]]());return mxUtils[_0x763a[875]](_0x3536x3,_0x3536x2)};mxEditor[_0x763a[202]][_0x763a[3215]]= function(){return this[_0x763a[3124]]};mxEditor[_0x763a[202]][_0x763a[3142]]= function(){return this[_0x763a[3125]]};mxEditor[_0x763a[202]][_0x763a[807]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){var _0x3536x9=null;mxClient[_0x763a[3101]]|| (_0x3536x9= new mxSession(this[_0x763a[1179]][_0x763a[502]](),_0x3536x2,_0x3536x3,_0x3536x4),_0x3536x9[_0x763a[169]](mxEvent.RECEIVE,mxUtils[_0x763a[885]](this,function(_0x3536x2,_0x3536x3){null!= _0x3536x3[_0x763a[720]](_0x763a[252])[_0x763a[284]](_0x763a[1088])&& this[_0x763a[3181]]()})),_0x3536x9[_0x763a[169]](mxEvent.DISCONNECT,_0x3536x5),_0x3536x9[_0x763a[169]](mxEvent.CONNECT,_0x3536x5),_0x3536x9[_0x763a[169]](mxEvent.NOTIFY,_0x3536x5),_0x3536x9[_0x763a[169]](mxEvent.GET,_0x3536x5),_0x3536x9[_0x763a[861]]());return _0x3536x9};mxEditor[_0x763a[202]][_0x763a[3218]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=this[_0x763a[1179]][_0x763a[2434]]()[_0x763a[2054]][_0x3536x3];this[_0x763a[1179]][_0x763a[249]]()[_0x763a[2434]]()[_0x763a[2074]](_0x3536x3,this[_0x763a[1179]][_0x763a[2434]]()[_0x763a[2054]][_0x3536x2]);this[_0x763a[1179]][_0x763a[2434]]()[_0x763a[2074]](_0x3536x2,_0x3536x4);this[_0x763a[1179]][_0x763a[802]]()};mxEditor[_0x763a[202]][_0x763a[3150]]= function(_0x3536x2){_0x3536x2= _0x3536x2|| this[_0x763a[1179]][_0x763a[2452]]();null== _0x3536x2&& (_0x3536x2= this[_0x763a[1179]][_0x763a[2534]](),null== _0x3536x2&& (_0x3536x2= this[_0x763a[1179]][_0x763a[502]]()[_0x763a[501]]()));if(null!= _0x3536x2){this[_0x763a[1179]][_0x763a[2126]](!0);var _0x3536x3=mxUtils[_0x763a[445]](this[_0x763a[1179]][_0x763a[526]]),_0x3536x4=_0x3536x3[_0x763a[235]]+ 10,_0x3536x3=_0x3536x3[_0x763a[236]];if(null!= this[_0x763a[716]]&& !this[_0x763a[3139]]){_0x3536x4= this[_0x763a[716]][_0x763a[730]](),_0x3536x3= this[_0x763a[716]][_0x763a[732]]()}else {var _0x3536x5=this[_0x763a[1179]][_0x763a[2555]](_0x3536x2);null!= _0x3536x5&& (_0x3536x4+= _0x3536x5[_0x763a[235]]+ Math[_0x763a[243]](200,_0x3536x5[_0x763a[117]]),_0x3536x3+= _0x3536x5[_0x763a[236]])};this[_0x763a[3062]]();_0x3536x2= this[_0x763a[3219]](_0x3536x2);null!= _0x3536x2&& (this[_0x763a[716]]= new mxWindow(mxResources[_0x763a[203]](this[_0x763a[3110]])|| this[_0x763a[3110]],_0x3536x2,_0x3536x4,_0x3536x3,this[_0x763a[3137]],this[_0x763a[3138]],!1),this[_0x763a[716]][_0x763a[175]](!0))}};mxEditor[_0x763a[202]][_0x763a[3220]]= function(){return null!= this[_0x763a[716]]};mxEditor[_0x763a[202]][_0x763a[3219]]= function(_0x3536x2){var _0x3536x3=this[_0x763a[1179]][_0x763a[502]](),_0x3536x4=_0x3536x3[_0x763a[433]](_0x3536x2);if(mxUtils[_0x763a[1331]](_0x3536x4)){var _0x3536x5= new mxForm(_0x763a[716]);_0x3536x5[_0x763a[961]](_0x763a[3222],_0x3536x2[_0x763a[1103]]())[_0x763a[57]](_0x763a[3221],_0x763a[128]);var _0x3536x9=null,_0x3536xa=null,_0x3536x12=null,_0x3536x13=null,_0x3536x14=null;_0x3536x3[_0x763a[1193]](_0x3536x2)&& (_0x3536x9= _0x3536x3[_0x763a[1721]](_0x3536x2),null!= _0x3536x9&& (_0x3536xa= _0x3536x5[_0x763a[961]](_0x763a[125],_0x3536x9[_0x763a[236]]),_0x3536x12= _0x3536x5[_0x763a[961]](_0x763a[361],_0x3536x9[_0x763a[235]]),_0x3536x13= _0x3536x5[_0x763a[961]](_0x763a[117],_0x3536x9[_0x763a[117]]),_0x3536x14= _0x3536x5[_0x763a[961]](_0x763a[119],_0x3536x9[_0x763a[119]])));for(var _0x3536x15=_0x3536x3[_0x763a[474]](_0x3536x2),_0x3536x16=_0x3536x5[_0x763a[961]](_0x763a[3223],_0x3536x15|| _0x763a[110]),_0x3536x17=_0x3536x4[_0x763a[320]],_0x3536x18=[],_0x3536x4=0;_0x3536x4< _0x3536x17[_0x763a[67]];_0x3536x4++){_0x3536x18[_0x3536x4]= _0x3536x5[_0x763a[968]](_0x3536x17[_0x3536x4][_0x763a[301]],_0x3536x17[_0x3536x4][_0x763a[318]],_0x763a[685]== _0x3536x17[_0x3536x4][_0x763a[301]]?4:2)};_0x3536x4= mxUtils[_0x763a[885]](this,function(){this[_0x763a[3062]]();_0x3536x3[_0x763a[473]]();try{null!= _0x3536x9&& (_0x3536x9= _0x3536x9[_0x763a[238]](),_0x3536x9[_0x763a[235]]= parseFloat(_0x3536x12[_0x763a[131]]),_0x3536x9[_0x763a[236]]= parseFloat(_0x3536xa[_0x763a[131]]),_0x3536x9[_0x763a[117]]= parseFloat(_0x3536x13[_0x763a[131]]),_0x3536x9[_0x763a[119]]= parseFloat(_0x3536x14[_0x763a[131]]),_0x3536x3[_0x763a[1724]](_0x3536x2,_0x3536x9));0< _0x3536x16[_0x763a[131]][_0x763a[67]]?_0x3536x3[_0x763a[475]](_0x3536x2,_0x3536x16[_0x763a[131]]):_0x3536x3[_0x763a[475]](_0x3536x2,null);for(var _0x3536x4=0;_0x3536x4< _0x3536x17[_0x763a[67]];_0x3536x4++){var _0x3536x5= new mxCellAttributeChange(_0x3536x2,_0x3536x17[_0x3536x4][_0x763a[301]],_0x3536x18[_0x3536x4][_0x763a[131]]);_0x3536x3[_0x763a[350]](_0x3536x5)};this[_0x763a[1179]][_0x763a[2455]](_0x3536x2)&& this[_0x763a[1179]][_0x763a[858]](_0x3536x2)}finally{_0x3536x3[_0x763a[476]]()}});_0x3536x15= mxUtils[_0x763a[885]](this,function(){this[_0x763a[3062]]()});_0x3536x5[_0x763a[956]](_0x3536x4,_0x3536x15);return _0x3536x5[_0x763a[116]]};return null};mxEditor[_0x763a[202]][_0x763a[3062]]= function(){null!= this[_0x763a[716]]&& (this[_0x763a[716]][_0x763a[515]](),this[_0x763a[716]]= null)};mxEditor[_0x763a[202]][_0x763a[3175]]= function(){if(null== this[_0x763a[3112]]){var _0x3536x2=document[_0x763a[55]](_0x763a[485]);_0x3536x2[_0x763a[124]][_0x763a[549]]= _0x763a[952];_0x3536x2[_0x763a[124]][_0x763a[357]]= _0x763a[550];var _0x3536x3=document[_0x763a[112]][_0x763a[159]],_0x3536x3= new mxWindow(mxResources[_0x763a[203]](this[_0x763a[3111]])|| this[_0x763a[3111]],_0x3536x2,_0x3536x3- 220,this[_0x763a[3132]],200);_0x3536x3[_0x763a[164]](!0);_0x3536x3[_0x763a[165]]= !1;var _0x3536x4=mxUtils[_0x763a[885]](this,function(_0x3536x3){mxEvent[_0x763a[762]](_0x3536x2);_0x3536x2[_0x763a[339]]= _0x763a[110];this[_0x763a[3224]](_0x3536x2)});this[_0x763a[1179]][_0x763a[502]]()[_0x763a[169]](mxEvent.CHANGE,_0x3536x4);this[_0x763a[1179]][_0x763a[2435]]()[_0x763a[169]](mxEvent.CHANGE,_0x3536x4);this[_0x763a[1179]][_0x763a[169]](mxEvent.ROOT,_0x3536x4);null!= this[_0x763a[3131]]&& _0x3536x3[_0x763a[951]](this[_0x763a[3131]]);this[_0x763a[3112]]= _0x3536x3;this[_0x763a[3224]](_0x3536x2)};this[_0x763a[3112]][_0x763a[175]](!0)};mxEditor[_0x763a[202]][_0x763a[3225]]= function(_0x3536x2){null!= this[_0x763a[3112]]&& (_0x3536x2= this[_0x763a[3112]][_0x763a[905]],mxEvent[_0x763a[762]](_0x3536x2),_0x3536x2[_0x763a[339]]= _0x763a[110],this[_0x763a[3224]](_0x3536x2))};mxEditor[_0x763a[202]][_0x763a[3224]]= function(_0x3536x2){};mxEditor[_0x763a[202]][_0x763a[3177]]= function(_0x3536x2){if(null== this[_0x763a[2719]]){var _0x3536x3=document[_0x763a[55]](_0x763a[389]);_0x3536x3[_0x763a[57]](_0x763a[390],mxResources[_0x763a[203]](_0x763a[3134])|| this[_0x763a[3134]]);_0x3536x3[_0x763a[57]](_0x763a[119],_0x763a[118]);_0x3536x3[_0x763a[57]](_0x763a[117],_0x763a[118]);_0x3536x3[_0x763a[57]](_0x763a[3226],_0x763a[468]);_0x3536x3[_0x763a[124]][_0x763a[1028]]= _0x763a[1391];_0x3536x2= document[_0x763a[112]][_0x763a[159]];var _0x3536x4=document[_0x763a[112]][_0x763a[157]]|| document[_0x763a[158]][_0x763a[157]],_0x3536x5= new mxWindow(mxResources[_0x763a[203]](this[_0x763a[3113]])|| this[_0x763a[3113]],_0x3536x3,(_0x3536x2- this[_0x763a[3135]])/ 2,(_0x3536x4- this[_0x763a[3136]])/ 3,this[_0x763a[3135]],this[_0x763a[3136]]);_0x3536x5[_0x763a[161]](!0);_0x3536x5[_0x763a[164]](!0);_0x3536x5[_0x763a[165]]= !1;_0x3536x5[_0x763a[163]](!0);null!= this[_0x763a[3133]]&& _0x3536x5[_0x763a[951]](this[_0x763a[3133]]);mxClient[_0x763a[133]]&& (_0x3536x2= function(_0x3536x2){_0x3536x3[_0x763a[57]](_0x763a[119],_0x3536x5[_0x763a[485]][_0x763a[167]]- 26+ _0x763a[168])},_0x3536x5[_0x763a[169]](mxEvent.RESIZE_END,_0x3536x2),_0x3536x5[_0x763a[169]](mxEvent.MAXIMIZE,_0x3536x2),_0x3536x5[_0x763a[169]](mxEvent.NORMALIZE,_0x3536x2),_0x3536x5[_0x763a[169]](mxEvent.SHOW,_0x3536x2));this[_0x763a[2719]]= _0x3536x5};this[_0x763a[2719]][_0x763a[175]](!0)};mxEditor[_0x763a[202]][_0x763a[3179]]= function(){if(null== this[_0x763a[2136]]){var _0x3536x2=document[_0x763a[55]](_0x763a[485]);_0x3536x2[_0x763a[124]][_0x763a[277]]= _0x763a[188];_0x3536x2[_0x763a[124]][_0x763a[117]]= _0x763a[118];_0x3536x2[_0x763a[124]][_0x763a[119]]= _0x763a[118];_0x3536x2[_0x763a[124]][_0x763a[1537]]= _0x763a[1391];_0x3536x2[_0x763a[124]][_0x763a[270]]= _0x763a[582];var _0x3536x3= new mxWindow(mxResources[_0x763a[203]](this[_0x763a[3114]])|| this[_0x763a[3114]],_0x3536x2,600,480,200,200,!1),_0x3536x4= new mxOutline(this[_0x763a[1179]],_0x3536x2);_0x3536x3[_0x763a[164]](!0);_0x3536x3[_0x763a[163]](!0);_0x3536x3[_0x763a[165]]= !1;_0x3536x3[_0x763a[169]](mxEvent.RESIZE_END,function(){_0x3536x4[_0x763a[2729]]()});this[_0x763a[2136]]= _0x3536x3;this[_0x763a[2136]][_0x763a[2136]]= _0x3536x4};this[_0x763a[2136]][_0x763a[175]](!0);this[_0x763a[2136]][_0x763a[2136]][_0x763a[2729]](!0)};mxEditor[_0x763a[202]][_0x763a[3086]]= function(_0x3536x2){_0x763a[804]== _0x3536x2?(this[_0x763a[1179]][_0x763a[2316]][_0x763a[2840]]= !1,this[_0x763a[1179]][_0x763a[1995]](!1)):_0x763a[807]== _0x3536x2?(this[_0x763a[1179]][_0x763a[2316]][_0x763a[2840]]= !1,this[_0x763a[1179]][_0x763a[1995]](!0)):_0x763a[796]== _0x3536x2&& (this[_0x763a[1179]][_0x763a[2316]][_0x763a[2840]]= !0,this[_0x763a[1179]][_0x763a[1995]](!1))};mxEditor[_0x763a[202]][_0x763a[3195]]= function(_0x3536x2,_0x3536x3,_0x3536x4){this[_0x763a[3094]][_0x763a[3065]](this,_0x3536x2,_0x3536x3,_0x3536x4)};mxEditor[_0x763a[202]][_0x763a[2503]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=null;if(null!= this[_0x763a[2075]]){_0x3536x4= this[_0x763a[1179]][_0x763a[502]]()[_0x763a[1978]](this[_0x763a[2075]])}else {_0x3536x4= new mxCell(_0x763a[110]);_0x3536x4[_0x763a[1994]](!0);var _0x3536x5= new mxGeometry;_0x3536x5[_0x763a[1500]]= !0;_0x3536x4[_0x763a[1724]](_0x3536x5)};_0x3536x5= this[_0x763a[2291]]();null!= _0x3536x5&& _0x3536x4[_0x763a[475]](_0x3536x5);return _0x3536x4};mxEditor[_0x763a[202]][_0x763a[2291]]= function(){return this[_0x763a[3119]]};mxEditor[_0x763a[202]][_0x763a[3227]]= function(_0x3536x2){return null!= this[_0x763a[3093]]&& 0< this[_0x763a[3093]][_0x763a[67]]&& this[_0x763a[1179]][_0x763a[1730]](_0x3536x2)?this[_0x763a[3093]][this[_0x763a[3130]]++ % this[_0x763a[3093]][_0x763a[67]]]:null};mxEditor[_0x763a[202]][_0x763a[3228]]= function(_0x3536x2){if(null!= this[_0x763a[3100]]){var _0x3536x3=this[_0x763a[3227]](_0x3536x2);null!= _0x3536x3&& _0x3536x2[_0x763a[475]](_0x3536x2[_0x763a[474]]()+ _0x763a[471]+ this[_0x763a[3100]]+ _0x763a[226]+ _0x3536x3)}};mxEditor[_0x763a[202]][_0x763a[817]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){for(var _0x3536x9=this[_0x763a[1179]][_0x763a[502]]();null!= _0x3536x2&& !this[_0x763a[1179]][_0x763a[2685]](_0x3536x2);){_0x3536x2= _0x3536x9[_0x763a[1197]](_0x3536x2)};_0x3536x2= null!= _0x3536x2?_0x3536x2:this[_0x763a[1179]][_0x763a[2461]](_0x3536x4,_0x3536x5);var _0x3536xa=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[255]],_0x3536x12=_0x3536x9[_0x763a[1721]](_0x3536x3),_0x3536x13=_0x3536x9[_0x763a[1721]](_0x3536x2);if(this[_0x763a[1179]][_0x763a[1730]](_0x3536x3)&& !this[_0x763a[1179]][_0x763a[2412]]){_0x3536x2= null}else {if(null== _0x3536x2&& this[_0x763a[3116]]){return null};if(null!= _0x3536x2&& null!= _0x3536x13){var _0x3536x14=this[_0x763a[1179]][_0x763a[249]]()[_0x763a[248]](_0x3536x2);if(null!= _0x3536x14){if(_0x3536x4-= _0x3536x14[_0x763a[2078]][_0x763a[235]]* _0x3536xa,_0x3536x5-= _0x3536x14[_0x763a[2078]][_0x763a[236]]* _0x3536xa,this[_0x763a[1179]][_0x763a[3229]]){var _0x3536x13=_0x3536x12[_0x763a[117]],_0x3536x15=_0x3536x12[_0x763a[119]],_0x3536x16=_0x3536x14[_0x763a[235]]+ _0x3536x14[_0x763a[117]];_0x3536x4+ _0x3536x13> _0x3536x16&& (_0x3536x4-= _0x3536x4+ _0x3536x13- _0x3536x16);_0x3536x16= _0x3536x14[_0x763a[236]]+ _0x3536x14[_0x763a[119]];_0x3536x5+ _0x3536x15> _0x3536x16&& (_0x3536x5-= _0x3536x5+ _0x3536x15- _0x3536x16)}}else {null!= _0x3536x13&& (_0x3536x4-= _0x3536x13[_0x763a[235]]* _0x3536xa,_0x3536x5-= _0x3536x13[_0x763a[236]]* _0x3536xa)}}};_0x3536x12= _0x3536x12[_0x763a[238]]();_0x3536x12[_0x763a[235]]= this[_0x763a[1179]][_0x763a[1021]](_0x3536x4/ _0x3536xa- this[_0x763a[1179]][_0x763a[249]]()[_0x763a[513]][_0x763a[235]]- this[_0x763a[1179]][_0x763a[1020]]/ 2);_0x3536x12[_0x763a[236]]= this[_0x763a[1179]][_0x763a[1021]](_0x3536x5/ _0x3536xa- this[_0x763a[1179]][_0x763a[249]]()[_0x763a[513]][_0x763a[236]]- this[_0x763a[1179]][_0x763a[1020]]/ 2);_0x3536x3[_0x763a[1724]](_0x3536x12);null== _0x3536x2&& (_0x3536x2= this[_0x763a[1179]][_0x763a[902]]());this[_0x763a[3228]](_0x3536x3);this[_0x763a[746]]( new mxEventObject(mxEvent.BEFORE_ADD_VERTEX,_0x763a[1988],_0x3536x3,_0x763a[1101],_0x3536x2));_0x3536x9[_0x763a[473]]();try{_0x3536x3= this[_0x763a[1179]][_0x763a[2103]](_0x3536x3,_0x3536x2),null!= _0x3536x3&& (this[_0x763a[1179]][_0x763a[2509]](_0x3536x3),this[_0x763a[746]]( new mxEventObject(mxEvent.ADD_VERTEX,_0x763a[1988],_0x3536x3)))}finally{_0x3536x9[_0x763a[476]]()};null!= _0x3536x3&& (this[_0x763a[1179]][_0x763a[2450]](_0x3536x3),this[_0x763a[1179]][_0x763a[2564]](_0x3536x3),this[_0x763a[746]]( new mxEventObject(mxEvent.AFTER_ADD_VERTEX,_0x763a[1988],_0x3536x3)));return _0x3536x3};mxEditor[_0x763a[202]][_0x763a[515]]= function(){this[_0x763a[2717]]|| (this[_0x763a[2717]]= !0,null!= this[_0x763a[3112]]&& this[_0x763a[3112]][_0x763a[515]](),null!= this[_0x763a[2136]]&& this[_0x763a[2136]][_0x763a[515]](),null!= this[_0x763a[716]]&& this[_0x763a[716]][_0x763a[515]](),null!= this[_0x763a[3098]]&& this[_0x763a[3098]][_0x763a[515]](),null!= this[_0x763a[3203]]&& this[_0x763a[3203]][_0x763a[515]](),null!= this[_0x763a[3082]]&& this[_0x763a[3082]][_0x763a[515]](),null!= this[_0x763a[1179]]&& this[_0x763a[1179]][_0x763a[515]](),this[_0x763a[3118]]= this[_0x763a[879]]= null)};var mxCodecRegistry={codecs:[],aliases:[],register:function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[718]]();mxCodecRegistry[_0x763a[3230]][_0x3536x3]= _0x3536x2;var _0x3536x4=mxUtils[_0x763a[197]](_0x3536x2[_0x763a[3231]][_0x763a[196]]);_0x3536x4!= _0x3536x3&& mxCodecRegistry[_0x763a[3232]](_0x3536x4,_0x3536x3)};return _0x3536x2},addAlias:function(_0x3536x2,_0x3536x3){mxCodecRegistry[_0x763a[3233]][_0x3536x2]= _0x3536x3},getCodec:function(_0x3536x2){var _0x3536x3=null;if(null!= _0x3536x2){var _0x3536x3=mxUtils[_0x763a[197]](_0x3536x2),_0x3536x4=mxCodecRegistry[_0x763a[3233]][_0x3536x3];null!= _0x3536x4&& (_0x3536x3= _0x3536x4);_0x3536x3= mxCodecRegistry[_0x763a[3230]][_0x3536x3];if(null== _0x3536x3){try{_0x3536x3= new mxObjectCodec( new _0x3536x2),mxCodecRegistry[_0x763a[3234]](_0x3536x3)}catch(d){}}};return _0x3536x3}};function mxCodec(_0x3536x2){this[_0x763a[395]]= _0x3536x2|| mxUtils[_0x763a[306]]();this[_0x763a[68]]= []}mxCodec[_0x763a[202]][_0x763a[395]]= null;mxCodec[_0x763a[202]][_0x763a[68]]= null;mxCodec[_0x763a[202]][_0x763a[3235]]= !1;mxCodec[_0x763a[202]][_0x763a[1104]]= function(_0x3536x2,_0x3536x3){return this[_0x763a[68]][_0x3536x2]= _0x3536x3};mxCodec[_0x763a[202]][_0x763a[3236]]= function(_0x3536x2){var _0x3536x3=null;null!= _0x3536x2&& (_0x3536x3= this[_0x763a[68]][_0x3536x2],null== _0x3536x3&& (_0x3536x3= this[_0x763a[1060]](_0x3536x2),null== _0x3536x3&& (_0x3536x2= this[_0x763a[1362]](_0x3536x2),null!= _0x3536x2&& (_0x3536x3= this[_0x763a[1093]](_0x3536x2)))));return _0x3536x3};mxCodec[_0x763a[202]][_0x763a[1060]]= function(_0x3536x2){return null};mxCodec[_0x763a[202]][_0x763a[1362]]= function(_0x3536x2,_0x3536x3){return mxUtils[_0x763a[290]](this[_0x763a[395]][_0x763a[158]],null!= _0x3536x3?_0x3536x3:_0x763a[1363],_0x3536x2)};mxCodec[_0x763a[202]][_0x763a[1103]]= function(_0x3536x2){var _0x3536x3=null;null!= _0x3536x2&& (_0x3536x3= this[_0x763a[3237]](_0x3536x2),null== _0x3536x3&& _0x3536x2 instanceof mxCell&& (_0x3536x3= _0x3536x2[_0x763a[1103]](),null== _0x3536x3&& (_0x3536x3= mxCellPath[_0x763a[385]](_0x3536x2),0== _0x3536x3[_0x763a[67]]&& (_0x3536x3= _0x763a[813]))));return _0x3536x3};mxCodec[_0x763a[202]][_0x763a[3237]]= function(_0x3536x2){return null};mxCodec[_0x763a[202]][_0x763a[514]]= function(_0x3536x2){var _0x3536x3=null;if(null!= _0x3536x2&& null!= _0x3536x2[_0x763a[196]]){var _0x3536x4=mxCodecRegistry[_0x763a[3238]](_0x3536x2[_0x763a[196]]);null!= _0x3536x4?_0x3536x3= _0x3536x4[_0x763a[514]](this,_0x3536x2):mxUtils[_0x763a[1331]](_0x3536x2)?_0x3536x3= mxClient[_0x763a[80]]?_0x3536x2[_0x763a[511]](!0):this[_0x763a[395]][_0x763a[3239]](_0x3536x2,!0):mxLog[_0x763a[283]](_0x763a[3240]+ mxUtils[_0x763a[197]](_0x3536x2[_0x763a[196]]))};return _0x3536x3};mxCodec[_0x763a[202]][_0x763a[1093]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=null;if(null!= _0x3536x2&& _0x3536x2[_0x763a[288]]== mxConstants[_0x763a[289]]){var _0x3536x5=null;try{_0x3536x5= eval(_0x3536x2[_0x763a[301]])}catch(e){};try{var _0x3536xa=mxCodecRegistry[_0x763a[3238]](_0x3536x5);null!= _0x3536xa?_0x3536x4= _0x3536xa[_0x763a[1093]](this,_0x3536x2,_0x3536x3):(_0x3536x4= _0x3536x2[_0x763a[511]](!0),_0x3536x4[_0x763a[1390]](_0x763a[3069]))}catch(g){mxLog[_0x763a[143]](_0x763a[3241]+ _0x3536x2[_0x763a[301]]+ _0x763a[3186]+ g[_0x763a[281]])}};return _0x3536x4};mxCodec[_0x763a[202]][_0x763a[3242]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x3[_0x763a[62]](this[_0x763a[514]](_0x3536x2));if(null== _0x3536x4|| _0x3536x4){_0x3536x4= _0x3536x2[_0x763a[262]]();for(var _0x3536x5=0;_0x3536x5< _0x3536x4;_0x3536x5++){this[_0x763a[3242]](_0x3536x2[_0x763a[263]](_0x3536x5),_0x3536x3)}}};mxCodec[_0x763a[202]][_0x763a[3243]]= function(_0x3536x2){return null!= _0x3536x2&& _0x763a[279]== typeof _0x3536x2[_0x763a[3243]]?_0x3536x2[_0x763a[3243]]():!1};mxCodec[_0x763a[202]][_0x763a[3244]]= function(_0x3536x2,_0x3536x3){_0x3536x3= null!= _0x3536x3?_0x3536x3:!0;var _0x3536x4=null;if(null!= _0x3536x2&& _0x3536x2[_0x763a[288]]== mxConstants[_0x763a[289]]){_0x3536x4= mxCodecRegistry[_0x763a[3238]](_0x3536x2[_0x763a[301]]);if(!this[_0x763a[3243]](_0x3536x4)){for(var _0x3536x5=_0x3536x2[_0x763a[285]];null!= _0x3536x5&& !this[_0x763a[3243]](_0x3536x4);){_0x3536x4= mxCodecRegistry[_0x763a[3238]](_0x3536x5[_0x763a[301]]),_0x3536x5= _0x3536x5[_0x763a[287]]}};this[_0x763a[3243]](_0x3536x4)|| (_0x3536x4= mxCodecRegistry[_0x763a[3238]](mxCell));_0x3536x4= _0x3536x4[_0x763a[1093]](this,_0x3536x2);_0x3536x3&& this[_0x763a[3245]](_0x3536x4)};return _0x3536x4};mxCodec[_0x763a[202]][_0x763a[3245]]= function(_0x3536x2){var _0x3536x3=_0x3536x2[_0x763a[1101]],_0x3536x4=_0x3536x2[_0x763a[1709]](!0),_0x3536x5=_0x3536x2[_0x763a[1709]](!1);_0x3536x2[_0x763a[1957]](null,!1);_0x3536x2[_0x763a[1957]](null,!0);_0x3536x2[_0x763a[1101]]= null;null!= _0x3536x3&& _0x3536x3[_0x763a[1937]](_0x3536x2);null!= _0x3536x4&& _0x3536x4[_0x763a[1960]](_0x3536x2,!0);null!= _0x3536x5&& _0x3536x5[_0x763a[1960]](_0x3536x2,!1)};mxCodec[_0x763a[202]][_0x763a[57]]= function(_0x3536x2,_0x3536x3,_0x3536x4){null!= _0x3536x3&& null!= _0x3536x4&& _0x3536x2[_0x763a[57]](_0x3536x3,_0x3536x4)};function mxObjectCodec(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){this[_0x763a[3231]]= _0x3536x2;this[_0x763a[3246]]= null!= _0x3536x3?_0x3536x3:[];this[_0x763a[3247]]= null!= _0x3536x4?_0x3536x4:[];this[_0x763a[3248]]= null!= _0x3536x5?_0x3536x5:[];this[_0x763a[3249]]= {};for(var _0x3536x9 in this[_0x763a[3248]]){this[_0x763a[3249]][this[_0x763a[3248]][_0x3536x9]]= _0x3536x9}}mxObjectCodec[_0x763a[202]][_0x763a[3231]]= null;mxObjectCodec[_0x763a[202]][_0x763a[3246]]= null;mxObjectCodec[_0x763a[202]][_0x763a[3247]]= null;mxObjectCodec[_0x763a[202]][_0x763a[3248]]= null;mxObjectCodec[_0x763a[202]][_0x763a[3249]]= null;mxObjectCodec[_0x763a[202]][_0x763a[718]]= function(){return mxUtils[_0x763a[197]](this[_0x763a[3231]][_0x763a[196]])};mxObjectCodec[_0x763a[202]][_0x763a[3250]]= function(){return new this[_0x763a[3231]][_0x763a[196]]};mxObjectCodec[_0x763a[202]][_0x763a[3251]]= function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=this[_0x763a[3249]][_0x3536x2];null!= _0x3536x3&& (_0x3536x2= _0x3536x3)};return _0x3536x2};mxObjectCodec[_0x763a[202]][_0x763a[3252]]= function(_0x3536x2){if(null!= _0x3536x2){var _0x3536x3=this[_0x763a[3248]][_0x3536x2];null!= _0x3536x3&& (_0x3536x2= _0x3536x3)};return _0x3536x2};mxObjectCodec[_0x763a[202]][_0x763a[3253]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){return _0x3536x3== mxObjectIdentity[_0x763a[195]]|| 0<= mxUtils[_0x763a[2]](this[_0x763a[3246]],_0x3536x3)};mxObjectCodec[_0x763a[202]][_0x763a[3254]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){return 0<= mxUtils[_0x763a[2]](this[_0x763a[3247]],_0x3536x3)};mxObjectCodec[_0x763a[202]][_0x763a[514]]= function(_0x3536x2,_0x3536x3){var _0x3536x4=_0x3536x2[_0x763a[395]][_0x763a[55]](this[_0x763a[718]]());_0x3536x3= this[_0x763a[3255]](_0x3536x2,_0x3536x3,_0x3536x4);this[_0x763a[3256]](_0x3536x2,_0x3536x3,_0x3536x4);return this[_0x763a[3257]](_0x3536x2,_0x3536x3,_0x3536x4)};mxObjectCodec[_0x763a[202]][_0x763a[3256]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x2[_0x763a[57]](_0x3536x4,_0x763a[1363],_0x3536x2[_0x763a[1103]](_0x3536x3));for(var _0x3536x5 in _0x3536x3){var _0x3536x9=_0x3536x5,_0x3536xa=_0x3536x3[_0x3536x9];null!= _0x3536xa&& !this[_0x763a[3253]](_0x3536x3,_0x3536x9,_0x3536xa,!0)&& (mxUtils[_0x763a[1946]](_0x3536x9)&& (_0x3536x9= null),this[_0x763a[3258]](_0x3536x2,_0x3536x3,_0x3536x9,_0x3536xa,_0x3536x4))}};mxObjectCodec[_0x763a[202]][_0x763a[3258]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){if(null!= _0x3536x5){if(this[_0x763a[3254]](_0x3536x3,_0x3536x4,_0x3536x5,!0)){var _0x3536xa=_0x3536x2[_0x763a[1103]](_0x3536x5);if(null== _0x3536xa){mxLog[_0x763a[283]](_0x763a[3259]+ this[_0x763a[718]]()+ _0x763a[87]+ _0x3536x4+ _0x763a[226]+ _0x3536x5);return};_0x3536x5= _0x3536xa};_0x3536xa= this[_0x763a[3231]][_0x3536x4];if(null== _0x3536x4|| _0x3536x2[_0x763a[3235]]|| _0x3536xa!= _0x3536x5){_0x3536x4= this[_0x763a[3252]](_0x3536x4),this[_0x763a[3260]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9)}}};mxObjectCodec[_0x763a[202]][_0x763a[3260]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x763a[194]!= typeof _0x3536x5?this[_0x763a[3261]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9):this[_0x763a[3262]](_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9)};mxObjectCodec[_0x763a[202]][_0x763a[3261]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x5= this[_0x763a[3263]](_0x3536x5);null== _0x3536x4?(_0x3536x3= _0x3536x2[_0x763a[395]][_0x763a[55]](_0x763a[99]),_0x763a[279]== typeof _0x3536x5?_0x3536x3[_0x763a[62]](_0x3536x2[_0x763a[395]][_0x763a[344]](_0x3536x5)):_0x3536x2[_0x763a[57]](_0x3536x3,_0x763a[131],_0x3536x5),_0x3536x9[_0x763a[62]](_0x3536x3)):_0x763a[279]!= typeof _0x3536x5&& _0x3536x2[_0x763a[57]](_0x3536x9,_0x3536x4,_0x3536x5)};mxObjectCodec[_0x763a[202]][_0x763a[3262]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5,_0x3536x9){_0x3536x2= _0x3536x2[_0x763a[514]](_0x3536x5);null!= _0x3536x2?(null!= _0x3536x4&& _0x3536x2[_0x763a[57]](_0x763a[3069],_0x3536x4),_0x3536x9[_0x763a[62]](_0x3536x2)):mxLog[_0x763a[283]](_0x763a[3264]+ this[_0x763a[718]]()+ _0x763a[87]+ _0x3536x4+ _0x763a[3186]+ _0x3536x5)};mxObjectCodec[_0x763a[202]][_0x763a[3263]]= function(_0x3536x2){if(_0x763a[82]== typeof _0x3536x2[_0x763a[67]]&& (!0== _0x3536x2|| !1== _0x3536x2)){_0x3536x2= !0== _0x3536x2?_0x763a[500]:_0x763a[468]};return _0x3536x2};mxObjectCodec[_0x763a[202]][_0x763a[3265]]= function(_0x3536x2){mxUtils[_0x763a[1946]](_0x3536x2)&& (_0x3536x2= parseFloat(_0x3536x2));return _0x3536x2};mxObjectCodec[_0x763a[202]][_0x763a[3255]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return _0x3536x3};mxObjectCodec[_0x763a[202]][_0x763a[3257]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return _0x3536x4};mxObjectCodec[_0x763a[202]][_0x763a[1093]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=_0x3536x3[_0x763a[284]](_0x763a[1363]),_0x3536x9=_0x3536x2[_0x763a[68]][_0x3536x5];null== _0x3536x9&& (_0x3536x9= _0x3536x4|| this[_0x763a[3250]](),null!= _0x3536x5&& _0x3536x2[_0x763a[1104]](_0x3536x5,_0x3536x9));_0x3536x3= this[_0x763a[3266]](_0x3536x2,_0x3536x3,_0x3536x9);this[_0x763a[3267]](_0x3536x2,_0x3536x3,_0x3536x9);return this[_0x763a[3268]](_0x3536x2,_0x3536x3,_0x3536x9)};mxObjectCodec[_0x763a[202]][_0x763a[3267]]= function(_0x3536x2,_0x3536x3,_0x3536x4){null!= _0x3536x3&& (this[_0x763a[3269]](_0x3536x2,_0x3536x3,_0x3536x4),this[_0x763a[3270]](_0x3536x2,_0x3536x3,_0x3536x4))};mxObjectCodec[_0x763a[202]][_0x763a[3269]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x3= _0x3536x3[_0x763a[320]];if(null!= _0x3536x3){for(var _0x3536x5=0;_0x3536x5< _0x3536x3[_0x763a[67]];_0x3536x5++){this[_0x763a[3271]](_0x3536x2,_0x3536x3[_0x3536x5],_0x3536x4)}}};mxObjectCodec[_0x763a[202]][_0x763a[3271]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=_0x3536x3[_0x763a[301]];if(_0x763a[3069]!= _0x3536x5&& _0x763a[1363]!= _0x3536x5){_0x3536x3= this[_0x763a[3265]](_0x3536x3[_0x763a[318]]);var _0x3536x9=this[_0x763a[3251]](_0x3536x5);if(this[_0x763a[3254]](_0x3536x4,_0x3536x9,_0x3536x3,!1)){_0x3536x2= _0x3536x2[_0x763a[3236]](_0x3536x3);if(null== _0x3536x2){mxLog[_0x763a[283]](_0x763a[3272]+ this[_0x763a[718]]()+ _0x763a[87]+ _0x3536x5+ _0x763a[226]+ _0x3536x3);return};_0x3536x3= _0x3536x2};this[_0x763a[3253]](_0x3536x4,_0x3536x5,_0x3536x3,!1)|| (_0x3536x4[_0x3536x5]= _0x3536x3)}};mxObjectCodec[_0x763a[202]][_0x763a[3270]]= function(_0x3536x2,_0x3536x3,_0x3536x4){for(_0x3536x3= _0x3536x3[_0x763a[285]];null!= _0x3536x3;){var _0x3536x5=_0x3536x3[_0x763a[287]];_0x3536x3[_0x763a[288]]== mxConstants[_0x763a[289]]&& !this[_0x763a[3273]](_0x3536x2,_0x3536x3,_0x3536x4)&& this[_0x763a[3274]](_0x3536x2,_0x3536x3,_0x3536x4);_0x3536x3= _0x3536x5}};mxObjectCodec[_0x763a[202]][_0x763a[3274]]= function(_0x3536x2,_0x3536x3,_0x3536x4){var _0x3536x5=this[_0x763a[3251]](_0x3536x3[_0x763a[284]](_0x763a[3069]));if(null== _0x3536x5|| !this[_0x763a[3253]](_0x3536x4,_0x3536x5,_0x3536x3,!1)){var _0x3536x9=this[_0x763a[3275]](_0x3536x4,_0x3536x5,_0x3536x3),_0x3536xa=null;_0x763a[99]== _0x3536x3[_0x763a[301]]?(_0x3536xa= _0x3536x3[_0x763a[284]](_0x763a[131]),null== _0x3536xa&& (_0x3536xa= mxUtils[_0x763a[1545]](mxUtils[_0x763a[329]](_0x3536x3)))):_0x3536xa= _0x3536x2[_0x763a[1093]](_0x3536x3,_0x3536x9);this[_0x763a[3276]](_0x3536x4,_0x3536x5,_0x3536xa,_0x3536x9)}};mxObjectCodec[_0x763a[202]][_0x763a[3275]]= function(_0x3536x2,_0x3536x3,_0x3536x4){_0x3536x2= _0x3536x2[_0x3536x3];_0x3536x2 instanceof Array&& 0< _0x3536x2[_0x763a[67]]&& (_0x3536x2= null);return _0x3536x2};mxObjectCodec[_0x763a[202]][_0x763a[3276]]= function(_0x3536x2,_0x3536x3,_0x3536x4,_0x3536x5){null!= _0x3536x4&& _0x3536x4!= _0x3536x5&& (null!= _0x3536x3&& 0< _0x3536x3[_0x763a[67]]?_0x3536x2[_0x3536x3]= _0x3536x4:_0x3536x2[_0x763a[207]](_0x3536x4))};mxObjectCodec[_0x763a[202]][_0x763a[3273]]= function(_0x3536x2,_0x3536x3,_0x3536x4){if(_0x763a[3277]== _0x3536x3[_0x763a[301]]){_0x3536x3= _0x3536x3[_0x763a[284]](_0x763a[298]);if(null!= _0x3536x3){try{var _0x3536x5=mxUtils[_0x763a[219]](_0x3536x3)[_0x763a[874]]();null!= _0x3536x5&& _0x3536x2[_0x763a[1093]](_0x3536x5,_0x3536x4)}catch(e){}};return !0};return !1};mxObjectCodec[_0x763a[202]][_0x763a[3266]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return _0x3536x3};mxObjectCodec[_0x763a[202]][_0x763a[3268]]= function(_0x3536x2,_0x3536x3,_0x3536x4){return _0x3536x4};mxCodecRegistry[_0x763a[3234]](function(){var _0x3536x2= new mxObjectCodec( new mxCell,[_0x763a[1954],_0x763a[1842],_0x763a[1211],_0x763a[1991]],[_0x763a[1101],_0x763a[1097],_0x763a[772]]);_0x3536x2[_0x763a[3243]]= function(){return !0};_0x3536x2[_0x763a[3253]]= function(_0x3536x2,_0x3536x4,_0x3536x5,_0x3536x9){return mxObjectCodec[_0x763a[202]][_0x763a[3253]][_0x763a[183]](this,arguments)|| _0x3536x9&& _0x763a[131]== _0x3536x4&& _0x3536x5[_0x763a[288]]== mxConstants[_0x763a[289]]};_0x3536x2[_0x763a[3257]]= function(_0x3536x2,_0x3536x4,_0x3536x5){if(null!= _0x3536x4[_0x763a[131]]&& _0x3536x4[_0x763a[131]][_0x763a[288]]== mxConstants[_0x763a[289]]){var _0x3536x9=_0x3536x5;_0x3536x5= mxClient[_0x763a[80]]?_0x3536x4[_0x763a[131]][_0x763a[511]](!0):_0x3536x2[_0x763a[395]][_0x763a[3239]](_0x3536x4[_0x763a[131]],!0);_0x3536x5[_0x763a[62]](_0x3536x9);_0x3536x2= _0x3536x9[_0x763a[284]](_0x763a[1363]);_0x3536x5[_0x763a[57]](_0x763a[1363],_0x3536x2);_0x3536x9[_0x763a[1390]](_0x763a[1363])};return _0x3536x5};_0x3536x2[_0x763a[3266]]= function(_0x3536x2,_0x3536x4,_0x3536x5){var _0x3536x9=_0x3536x4,_0x3536xa=this[_0x763a[718]]();_0x3536x4[_0x763a[301]]!= _0x3536xa?(_0x3536x9= _0x3536x4[_0x763a[64]](_0x3536xa)[0],null!= _0x3536x9&& _0x3536x9[_0x763a[265]]== _0x3536x4?(mxUtils[_0x763a[3278]](_0x3536x9,!0),mxUtils[_0x763a[3278]](_0x3536x9,!1),_0x3536x9[_0x763a[265]][_0x763a[266]](_0x3536x9)):_0x3536x9= null,_0x3536x5[_0x763a[131]]= _0x3536x4[_0x763a[511]](!0),_0x3536x4= _0x3536x5[_0x763a[131]][_0x763a[284]](_0x763a[1363]),null!= _0x3536x4&& (_0x3536x5[_0x763a[1945]](_0x3536x4),_0x3536x5[_0x763a[131]][_0x763a[1390]](_0x763a[1363]))):_0x3536x5[_0x763a[1945]](_0x3536x4[_0x763a[284]](_0x763a[1363]));if(null!= _0x3536x9){for(_0x3536x4= 0;_0x3536x4< this[_0x763a[3247]][_0x763a[67]];_0x3536x4++){var _0x3536xa=this[_0x763a[3247]][_0x3536x4],_0x3536x12=_0x3536x9[_0x763a[284]](_0x3536xa);if(null!= _0x3536x12){_0x3536x9[_0x763a[1390]](_0x3536xa);var _0x3536x13=_0x3536x2[_0x763a[68]][_0x3536x12]|| _0x3536x2[_0x763a[1060]](_0x3536x12);null== _0x3536x13&& (_0x3536x12= _0x3536x2[_0x763a[1362]](_0x3536x12),null!= _0x3536x12&& (_0x3536x13= (mxCodecRegistry[_0x763a[3230]][_0x3536x12[_0x763a[301]]]|| this)[_0x763a[1093]](_0x3536x2,_0x3536x12)));_0x3536x5[_0x3536xa]= _0x3536x13}}};return _0x3536x9};return _0x3536x2}());mxCodecRegistry[_0x763a[3234]](function(){var _0x3536x2= new mxObjectCodec( new mxGraphModel);_0x3536x2[_0x763a[3256]]= function(_0x3536x2,_0x3536x4,_0x3536x5){var _0x3536x9=_0x3536x2[_0x763a[395]][_0x763a[55]](_0x763a[813]);_0x3536x2[_0x763a[3242]](_0x3536x4[_0x763a[501]](),_0x3536x9);_0x3536x5[_0x763a[62]](_0x3536x9)};_0x3536x2[_0x763a[3274]]= function(_0x3536x2,_0x3536x4,_0x3536x5){_0x763a[813]== _0x3536x4[_0x763a[301]]?this[_0x763a[3279]](_0x3536x2,_0x3536x4,_0x3536x5):mxObjectCodec[_0x763a[202]][_0x763a[3274]][_0x763a[183]](this,arguments)};_0x3536x2[_0x763a[3279]]= function(_0x3536x2,_0x3536x4,_0x3536x5){var _0x3536x9=null;for(_0x3536x4= _0x3536x4[_0x763a[285]];null!= _0x3536x4;){var _0x3536xa=_0x3536x2[_0x763a[3244]](_0x3536x4);null!= _0x3536xa&& null== _0x3536xa[_0x763a[1197]]()&& (_0x3536x9= _0x3536xa);_0x3536x4= _0x3536x4[_0x763a[287]]};null!= _0x3536x9&& _0x3536x5[_0x763a[1927]](_0x3536x9)};return _0x3536x2}());mxCodecRegistry[_0x763a[3234]](function(){var _0x3536x2= new mxObjectCodec( new mxRootChange,[_0x763a[251],_0x763a[257],_0x763a[813]]);_0x3536x2[_0x763a[3257]]= function(_0x3536x2,_0x3536x4,_0x3536x5){_0x3536x2[_0x763a[3242]](_0x3536x4[_0x763a[813]],_0x3536x5);return _0x3536x5};_0x3536x2[_0x763a[3266]]= function(_0x3536x2,_0x3536x4,_0x3536x5){if(null!= _0x3536x4[_0x763a[285]]&& _0x3536x4[_0x763a[285]][_0x763a[288]]== mxConstants[_0x763a[289]]){_0x3536x4= _0x3536x4[_0x763a[511]](!0);var _0x3536x9=_0x3536x4[_0x763a[285]];_0x3536x5[_0x763a[813]]= _0x3536x2[_0x763a[3244]](_0x3536x9,!1);_0x3536x5= _0x3536x9[_0x763a[287]];_0x3536x9[_0x763a[265]][_0x763a[266]](_0x3536x9);for(_0x3536x9= _0x3536x5;null!= _0x3536x9;){_0x3536x5= _0x3536x9[_0x763a[287]],_0x3536x2[_0x763a[3244]](_0x3536x9),_0x3536x9[_0x763a[265]][_0x763a[266]](_0x3536x9),_0x3536x9= _0x3536x5}};return _0x3536x4};_0x3536x2[_0x763a[3268]]= function(_0x3536x2,_0x3536x4,_0x3536x5){_0x3536x5[_0x763a[257]]= _0x3536x5[_0x763a[813]];return _0x3536x5};return _0x3536x2}());mxCodecRegistry[_0x763a[3234]](function(){var _0x3536x2= new mxObjectCodec( new mxChildChange,[_0x763a[251],_0x763a[247],_0x763a[1982]],[_0x763a[1101],_0x763a[257]]);_0x3536x2[_0x763a[3254]]= function(_0x3536x2,_0x3536x4,_0x3536x5,_0x3536x9){return _0x763a[247]== _0x3536x4&& (null!= _0x3536x2[_0x763a[257]]|| !_0x3536x9)?!0:0<= mxUtils[_0x763a[2]](this[_0x763a[3247]],_0x3536x4)};_0x3536x2[_0x763a[3257]]= function(_0x3536x2,_0x3536x4,_0x3536x5){this[_0x763a[3254]](_0x3536x4,_0x763a[247],_0x3536x4[_0x763a[247]],!0)?_0x3536x5[_0x763a[57]](_0x763a[247],_0x3536x2[_0x763a[1103]](_0x3536x4[_0x763a[247]])):_0x3536x2[_0x763a[3242]](_0x3536x4[_0x763a[247]],_0x3536x5);return _0x3536x5};_0x3536x2[_0x763a[3266]]= function(_0x3536x2,_0x3536x4,_0x3536x5){if(null!= _0x3536x4[_0x763a[285]]&& _0x3536x4[_0x763a[285]][_0x763a[288]]== mxConstants[_0x763a[289]]){_0x3536x4= _0x3536x4[_0x763a[511]](!0);var _0x3536x9=_0x3536x4[_0x763a[285]];_0x3536x5[_0x763a[247]]= _0x3536x2[_0x763a[3244]](_0x3536x9,!1);_0x3536x5= _0x3536x9[_0x763a[287]];_0x3536x9[_0x763a[265]][_0x763a[266]](_0x3536x9);for(_0x3536x9= _0x3536x5;null!= _0x3536x9;){_0x3536x5= _0x3536x9[_0x763a[287]];if(_0x3536x9[_0x763a[288]]== mxConstants[_0x763a[289]]){var _0x3536xa=_0x3536x9[_0x763a[284]](_0x763a[1363]);null== _0x3536x2[_0x763a[1060]](_0x3536xa)&& _0x3536x2[_0x763a[3244]](_0x3536x9)};_0x3536x9[_0x763a[265]][_0x763a[266]](_0x3536x9);_0x3536x9= _0x3536x5}}else {_0x3536x9= _0x3536x4[_0x763a[284]](_0x763a[247]),_0x3536x5[_0x763a[247]]= _0x3536x2[_0x763a[3236]](_0x3536x9)};return _0x3536x4};_0x3536x2[_0x763a[3268]]= function(_0x3536x2,_0x3536x4,_0x3536x5){_0x3536x5[_0x763a[247]][_0x763a[1101]]= _0x3536x5[_0x763a[257]];_0x3536x5[_0x763a[257]]= _0x3536x5[_0x763a[1101]];_0x3536x5[_0x763a[1982]]= _0x3536x5[_0x763a[1983]];return _0x3536x5};return _0x3536x2}());mxCodecRegistry[_0x763a[3234]](function(){var _0x3536x2= new mxObjectCodec( new mxTerminalChange,[_0x763a[251],_0x763a[257]],[_0x763a[246],_0x763a[1984]]);_0x3536x2[_0x763a[3268]]= function(_0x3536x2,_0x3536x4,_0x3536x5){_0x3536x5[_0x763a[257]]= _0x3536x5[_0x763a[1984]];return _0x3536x5};return _0x3536x2}());var mxGenericChangeCodec=function(_0x3536x2,_0x3536x3){var _0x3536x4= new mxObjectCodec(_0x3536x2,[_0x763a[251],_0x763a[257]],[_0x763a[246]]);_0x3536x4[_0x763a[3268]]= function(_0x3536x2,_0x3536x4,_0x3536xa){mxUtils[_0x763a[1331]](_0x3536xa[_0x763a[246]])&& (_0x3536xa[_0x763a[246]]= _0x3536x2[_0x763a[3244]](_0x3536xa[_0x763a[246]],!1));_0x3536xa[_0x763a[257]]= _0x3536xa[_0x3536x3];return _0x3536xa};return _0x3536x4};mxCodecRegistry[_0x763a[3234]](mxGenericChangeCodec( new mxValueChange,_0x763a[131]));mxCodecRegistry[_0x763a[3234]](mxGenericChangeCodec( new mxStyleChange,_0x763a[124]));mxCodecRegistry[_0x763a[3234]](mxGenericChangeCodec( new mxGeometryChange,_0x763a[256]));mxCodecRegistry[_0x763a[3234]](mxGenericChangeCodec( new mxCollapseChange,_0x763a[1985]));mxCodecRegistry[_0x763a[3234]](mxGenericChangeCodec( new mxVisibleChange,_0x763a[189]));mxCodecRegistry[_0x763a[3234]](mxGenericChangeCodec( new mxCellAttributeChange,_0x763a[131]));mxCodecRegistry[_0x763a[3234]](function(){return new mxObjectCodec( new mxGraph,_0x763a[3280][_0x763a[224]](_0x763a[185]))}());mxCodecRegistry[_0x763a[3234]](function(){var _0x3536x2= new mxObjectCodec( new mxGraphView);_0x3536x2[_0x763a[514]]= function(_0x3536x2,_0x3536x4){return this[_0x763a[3242]](_0x3536x2,_0x3536x4,_0x3536x4[_0x763a[1179]][_0x763a[502]]()[_0x763a[501]]())};_0x3536x2[_0x763a[3242]]= function(_0x3536x2,_0x3536x4,_0x3536x5){var _0x3536x9=_0x3536x4[_0x763a[1179]][_0x763a[502]](),_0x3536xa=_0x3536x4[_0x763a[248]](_0x3536x5),_0x3536x12=_0x3536x9[_0x763a[1197]](_0x3536x5);if(null== _0x3536x12|| null!= _0x3536xa){var _0x3536x13=_0x3536x9[_0x763a[262]](_0x3536x5),_0x3536x14=_0x3536x4[_0x763a[1179]][_0x763a[1198]](_0x3536x5),_0x3536x15=null;_0x3536x12== _0x3536x9[_0x763a[501]]()?_0x3536x15= _0x763a[3281]:null== _0x3536x12?_0x3536x15= _0x763a[1179]:_0x3536x9[_0x763a[250]](_0x3536x5)?_0x3536x15= _0x763a[1989]:0< _0x3536x13&& null!= _0x3536x14?_0x3536x15= _0x763a[1504]:_0x3536x9[_0x763a[1193]](_0x3536x5)&& (_0x3536x15= _0x763a[1988]);if(null!= _0x3536x15){var _0x3536x16=_0x3536x2[_0x763a[395]][_0x763a[55]](_0x3536x15);null!= _0x3536x4[_0x763a[1179]][_0x763a[2183]](_0x3536x5)&& (_0x3536x16[_0x763a[57]](_0x763a[685],_0x3536x4[_0x763a[1179]][_0x763a[2183]](_0x3536x5)),_0x3536x4[_0x763a[1179]][_0x763a[2186]](_0x3536x5)&& _0x3536x16[_0x763a[57]](_0x763a[1428],!0));if(null== _0x3536x12){var _0x3536x17=_0x3536x4[_0x763a[517]]();null!= _0x3536x17&& (_0x3536x16[_0x763a[57]](_0x763a[235],Math[_0x763a[488]](_0x3536x17[_0x763a[235]])),_0x3536x16[_0x763a[57]](_0x763a[236],Math[_0x763a[488]](_0x3536x17[_0x763a[236]])),_0x3536x16[_0x763a[57]](_0x763a[117],Math[_0x763a[488]](_0x3536x17[_0x763a[117]])),_0x3536x16[_0x763a[57]](_0x763a[119],Math[_0x763a[488]](_0x3536x17[_0x763a[119]])));_0x3536x16[_0x763a[57]](_0x763a[255],_0x3536x4[_0x763a[255]])}else {if(null!= _0x3536xa&& null!= _0x3536x14){for(_0x3536x17 in _0x3536xa[_0x763a[124]]){_0x3536x12= _0x3536xa[_0x763a[124]][_0x3536x17],_0x763a[279]== typeof _0x3536x12&& _0x763a[194]== typeof _0x3536x12&& (_0x3536x12= mxStyleRegistry[_0x763a[718]](_0x3536x12)),null!= _0x3536x12&& (_0x763a[279]!= typeof _0x3536x12&& _0x763a[194]!= typeof _0x3536x12)&& _0x3536x16[_0x763a[57]](_0x3536x17,_0x3536x12)};_0x3536x12= _0x3536xa[_0x763a[439]];if(null!= _0x3536x12&& 0< _0x3536x12[_0x763a[67]]){_0x3536x14= Math[_0x763a[488]](_0x3536x12[0][_0x763a[235]])+ _0x763a[537]+ Math[_0x763a[488]](_0x3536x12[0][_0x763a[236]]);for(_0x3536x17= 1;_0x3536x17< _0x3536x12[_0x763a[67]];_0x3536x17++){_0x3536x14+= _0x763a[185]+ Math[_0x763a[488]](_0x3536x12[_0x3536x17][_0x763a[235]])+ _0x763a[537]+ Math[_0x763a[488]](_0x3536x12[_0x3536x17][_0x763a[236]])};_0x3536x16[_0x763a[57]](_0x763a[1525],_0x3536x14)}else {_0x3536x16[_0x763a[57]](_0x763a[235],Math[_0x763a[488]](_0x3536xa[_0x763a[235]])),_0x3536x16[_0x763a[57]](_0x763a[236],Math[_0x763a[488]](_0x3536xa[_0x763a[236]])),_0x3536x16[_0x763a[57]](_0x763a[117],Math[_0x763a[488]](_0x3536xa[_0x763a[117]])),_0x3536x16[_0x763a[57]](_0x763a[119],Math[_0x763a[488]](_0x3536xa[_0x763a[119]]))};_0x3536x17= _0x3536xa[_0x763a[2079]];null!= _0x3536x17&& (0!= _0x3536x17[_0x763a[235]]&& _0x3536x16[_0x763a[57]](_0x763a[1126],Math[_0x763a[488]](_0x3536x17[_0x763a[235]])),0!= _0x3536x17[_0x763a[236]]&& _0x3536x16[_0x763a[57]](_0x763a[1125],Math[_0x763a[488]](_0x3536x17[_0x763a[236]])))}};for(_0x3536x17= 0;_0x3536x17< _0x3536x13;_0x3536x17++){_0x3536xa= this[_0x763a[3242]](_0x3536x2,_0x3536x4,_0x3536x9[_0x763a[263]](_0x3536x5,_0x3536x17)),null!= _0x3536xa&& _0x3536x16[_0x763a[62]](_0x3536xa)}}};return _0x3536x16};return _0x3536x2}());mxCodecRegistry[_0x763a[3234]](function(){var _0x3536x2= new mxObjectCodec( new mxStylesheet);_0x3536x2[_0x763a[514]]= function(_0x3536x2,_0x3536x4){var _0x3536x5=_0x3536x2[_0x763a[395]][_0x763a[55]](this[_0x763a[718]]()),_0x3536x9;for(_0x3536x9 in _0x3536x4[_0x763a[2054]]){var _0x3536xa=_0x3536x4[_0x763a[2054]][_0x3536x9],_0x3536x12=_0x3536x2[_0x763a[395]][_0x763a[55]](_0x763a[99]);if(null!= _0x3536x9){_0x3536x12[_0x763a[57]](_0x763a[3069],_0x3536x9);for(var _0x3536x13 in _0x3536xa){var _0x3536x14=this[_0x763a[3282]](_0x3536x13,_0x3536xa[_0x3536x13]);if(null!= _0x3536x14){var _0x3536x15=_0x3536x2[_0x763a[395]][_0x763a[55]](_0x763a[99]);_0x3536x15[_0x763a[57]](_0x763a[131],_0x3536x14);_0x3536x15[_0x763a[57]](_0x763a[3069],_0x3536x13);_0x3536x12[_0x763a[62]](_0x3536x15)}};0< _0x3536x12[_0x763a[271]][_0x763a[67]]&& _0x3536x5[_0x763a[62]](_0x3536x12)}};return _0x3536x5};_0x3536x2[_0x763a[3282]]= function(_0x3536x2,_0x3536x4){var _0x3536x5= typeof _0x3536x4;_0x763a[279]== _0x3536x5?_0x3536x4= mxStyleRegistry[_0x763a[718]](style[j]):_0x763a[194]== _0x3536x5&& (_0x3536x4= null);return _0x3536x4};_0x3536x2[_0x763a[1093]]= function(_0x3536x2,_0x3536x4,_0x3536x5){_0x3536x5= _0x3536x5|| new this[_0x763a[3231]][_0x763a[196]];var _0x3536x9=_0x3536x4[_0x763a[284]](_0x763a[1363]);null!= _0x3536x9&& (_0x3536x2[_0x763a[68]][_0x3536x9]= _0x3536x5);for(_0x3536x4= _0x3536x4[_0x763a[285]];null!= _0x3536x4;){if(!this[_0x763a[3273]](_0x3536x2,_0x3536x4,_0x3536x5)&& _0x763a[99]== _0x3536x4[_0x763a[301]]&& (_0x3536x9= _0x3536x4[_0x763a[284]](_0x763a[3069]),null!= _0x3536x9)){var _0x3536xa=_0x3536x4[_0x763a[284]](_0x763a[1284]),_0x3536x12=null!= _0x3536xa?mxUtils[_0x763a[238]](_0x3536x5[_0x763a[2054]][_0x3536xa]):null;null== _0x3536x12&& (null!= _0x3536xa&& mxLog[_0x763a[283]](_0x763a[3283]+ _0x3536xa+ _0x763a[3284]),_0x3536x12= {});for(_0x3536xa= _0x3536x4[_0x763a[285]];null!= _0x3536xa;){if(_0x3536xa[_0x763a[288]]== mxConstants[_0x763a[289]]){var _0x3536x13=_0x3536xa[_0x763a[284]](_0x763a[3069]);if(_0x763a[99]== _0x3536xa[_0x763a[301]]){var _0x3536x14=mxUtils[_0x763a[329]](_0x3536xa),_0x3536x15=null;null!= _0x3536x14&& 0< _0x3536x14[_0x763a[67]]?_0x3536x15= mxUtils[_0x763a[1545]](_0x3536x14):(_0x3536x15= _0x3536xa[_0x763a[284]](_0x763a[131]),mxUtils[_0x763a[1946]](_0x3536x15)&& (_0x3536x15= parseFloat(_0x3536x15)));null!= _0x3536x15&& (_0x3536x12[_0x3536x13]= _0x3536x15)}else {_0x763a[205]== _0x3536xa[_0x763a[301]]&& delete _0x3536x12[_0x3536x13]}};_0x3536xa= _0x3536xa[_0x763a[287]]};_0x3536x5[_0x763a[2074]](_0x3536x9,_0x3536x12)};_0x3536x4= _0x3536x4[_0x763a[287]]};return _0x3536x5};return _0x3536x2}());mxCodecRegistry[_0x763a[3234]](function(){var _0x3536x2= new mxObjectCodec( new mxDefaultKeyHandler);_0x3536x2[_0x763a[514]]= function(_0x3536x2,_0x3536x4){return null};_0x3536x2[_0x763a[1093]]= function(_0x3536x2,_0x3536x4,_0x3536x5){if(null!= _0x3536x5){for(_0x3536x4= _0x3536x4[_0x763a[285]];null!= _0x3536x4;){if(!this[_0x763a[3273]](_0x3536x2,_0x3536x4,_0x3536x5)&& _0x763a[99]== _0x3536x4[_0x763a[301]]){var _0x3536x9=_0x3536x4[_0x763a[284]](_0x763a[3069]),_0x3536xa=_0x3536x4[_0x763a[284]](_0x763a[892]),_0x3536x12=_0x3536x4[_0x763a[284]](_0x763a[2207]);_0x3536x5[_0x763a[3063]](_0x3536x9,_0x3536xa,_0x3536x12)};_0x3536x4= _0x3536x4[_0x763a[287]]}};return _0x3536x5};return _0x3536x2}());mxCodecRegistry[_0x763a[3234]](function(){var _0x3536x2= new mxObjectCodec( new mxDefaultToolbar);_0x3536x2[_0x763a[514]]= function(_0x3536x2,_0x3536x4){return null};_0x3536x2[_0x763a[1093]]= function(_0x3536x2,_0x3536x4,_0x3536x5){if(null!= _0x3536x5){var _0x3536x9=_0x3536x5[_0x763a[3061]];for(_0x3536x4= _0x3536x4[_0x763a[285]];null!= _0x3536x4;){if(_0x3536x4[_0x763a[288]]== mxConstants[_0x763a[289]]&& !this[_0x763a[3273]](_0x3536x2,_0x3536x4,_0x3536x5)){if(_0x763a[3072]== _0x3536x4[_0x763a[301]]){_0x3536x5[_0x763a[1051]]()}else {if(_0x763a[345]== _0x3536x4[_0x763a[301]]){_0x3536x5[_0x763a[3082]][_0x763a[1052]]()}else {if(_0x763a[1054]== _0x3536x4[_0x763a[301]]){_0x3536x5[_0x763a[3082]][_0x763a[1053]]()}else {if(_0x763a[99]== _0x3536x4[_0x763a[301]]){var _0x3536xa=_0x3536x4[_0x763a[284]](_0x763a[3069]),_0x3536xa=mxResources[_0x763a[203]](_0x3536xa)|| _0x3536xa,_0x3536x12=_0x3536x4[_0x763a[284]](_0x763a[2916]),_0x3536x13=_0x3536x4[_0x763a[284]](_0x763a[3285]),_0x3536x14=_0x3536x4[_0x763a[284]](_0x763a[892]),_0x3536x15=_0x3536x4[_0x763a[284]](_0x763a[3286]),_0x3536x16=_0x3536x4[_0x763a[284]](_0x763a[3231]),_0x3536x17=_0x763a[468]!= _0x3536x4[_0x763a[284]](_0x763a[3287]),_0x3536x18=mxUtils[_0x763a[329]](_0x3536x4),_0x3536x19=null;if(null!= _0x3536x14){_0x3536x19= _0x3536x5[_0x763a[1025]](_0x3536xa,_0x3536x12,_0x3536x14,_0x3536x13)}else {if(null!= _0x3536x15){var _0x3536x1a=mxUtils[_0x763a[1545]](_0x3536x18),_0x3536x19=_0x3536x5[_0x763a[1048]](_0x3536xa,_0x3536x12,_0x3536x15,_0x3536x13,_0x3536x1a)}else {if(null!= _0x3536x16|| null!= _0x3536x18&& 0< _0x3536x18[_0x763a[67]]){_0x3536x19= _0x3536x9[_0x763a[3118]][_0x3536x16],_0x3536x16= _0x3536x4[_0x763a[284]](_0x763a[124]),null!= _0x3536x19&& null!= _0x3536x16&& (_0x3536x19= _0x3536x19[_0x763a[238]](),_0x3536x19[_0x763a[475]](_0x3536x16)),_0x3536x16= null,null!= _0x3536x18&& 0< _0x3536x18[_0x763a[67]]&& (_0x3536x16= mxUtils[_0x763a[1545]](_0x3536x18)),_0x3536x19= _0x3536x5[_0x763a[3087]](_0x3536xa,_0x3536x12,_0x3536x19,_0x3536x13,_0x3536x16,_0x3536x17)}else {if(_0x3536x13= mxUtils[_0x763a[1540]](_0x3536x4),0< _0x3536x13[_0x763a[67]]){if(null== _0x3536x12){_0x3536x16= _0x3536x5[_0x763a[1038]](_0x3536xa);for(_0x3536xa= 0;_0x3536xa< _0x3536x13[_0x763a[67]];_0x3536xa++){_0x3536x17= _0x3536x13[_0x3536xa],_0x763a[3072]== _0x3536x17[_0x763a[301]]?_0x3536x5[_0x763a[972]](_0x3536x16,_0x763a[3288]):_0x763a[99]== _0x3536x17[_0x763a[301]]&& (_0x3536x12= _0x3536x17[_0x763a[284]](_0x763a[3069]),_0x3536x17= _0x3536x17[_0x763a[284]](_0x763a[892]),_0x3536x5[_0x763a[3085]](_0x3536x16,_0x3536x12,_0x3536x17))}}else {var _0x3536x1b=null,_0x3536x1c=_0x3536x5[_0x763a[3087]](_0x3536xa,_0x3536x12,function(){var _0x3536x2=_0x3536x9[_0x763a[3118]][_0x3536x1b[_0x763a[131]]];if(null!= _0x3536x2){var _0x3536x2=_0x3536x2[_0x763a[238]](),_0x3536x3=_0x3536x1b[_0x763a[1040]][_0x3536x1b[_0x763a[1039]]][_0x763a[3289]];null!= _0x3536x3&& _0x3536x2[_0x763a[475]](_0x3536x3);return _0x3536x2};mxLog[_0x763a[283]](_0x763a[3290]+ _0x3536x2+ _0x763a[3291]);return null},null,null,_0x3536x17),_0x3536x1b=_0x3536x5[_0x763a[970]]();mxEvent[_0x763a[169]](_0x3536x1b,_0x763a[826],function(){_0x3536x5[_0x763a[3082]][_0x763a[1047]](_0x3536x1c,function(_0x3536x2){_0x3536x2= mxUtils[_0x763a[2196]](_0x3536x9[_0x763a[1179]][_0x763a[526]],mxEvent[_0x763a[731]](_0x3536x2),mxEvent[_0x763a[733]](_0x3536x2));return _0x3536x9[_0x763a[817]](null,_0x3536x1a(),_0x3536x2[_0x763a[235]],_0x3536x2[_0x763a[236]])});_0x3536x5[_0x763a[3082]][_0x763a[1023]]= !1});for(_0x3536xa= 0;_0x3536xa< _0x3536x13[_0x763a[67]];_0x3536xa++){_0x3536x17= _0x3536x13[_0x3536xa],_0x763a[3072]== _0x3536x17[_0x763a[301]]?_0x3536x5[_0x763a[972]](_0x3536x1b,_0x763a[3288]):_0x763a[99]== _0x3536x17[_0x763a[301]]&& (_0x3536x12= _0x3536x17[_0x763a[284]](_0x763a[3069]),_0x3536x18= _0x3536x17[_0x763a[284]](_0x763a[3231]),_0x3536x5[_0x763a[972]](_0x3536x1b,_0x3536x12,_0x3536x18|| _0x3536x16)[_0x763a[3289]]= _0x3536x17[_0x763a[284]](_0x763a[124]))}}}}}};null!= _0x3536x19&& (_0x3536x16= _0x3536x4[_0x763a[284]](_0x763a[1363]),null!= _0x3536x16&& 0< _0x3536x16[_0x763a[67]]&& _0x3536x19[_0x763a[57]](_0x763a[1363],_0x3536x16))}}}}};_0x3536x4= _0x3536x4[_0x763a[287]]}};return _0x3536x5};return _0x3536x2}());mxCodecRegistry[_0x763a[3234]](function(){var _0x3536x2= new mxObjectCodec( new mxDefaultPopupMenu);_0x3536x2[_0x763a[514]]= function(_0x3536x2,_0x3536x4){return null};_0x3536x2[_0x763a[1093]]= function(_0x3536x2,_0x3536x4,_0x3536x5){var _0x3536x9=_0x3536x4[_0x763a[64]](_0x763a[3277])[0];null!= _0x3536x9?this[_0x763a[3273]](_0x3536x2,_0x3536x9,_0x3536x5):null!= _0x3536x5&& (_0x3536x5[_0x763a[3064]]= _0x3536x4);return _0x3536x5};return _0x3536x2}());mxCodecRegistry[_0x763a[3234]](function(){var _0x3536x2= new mxObjectCodec( new mxEditor,_0x763a[3292][_0x763a[224]](_0x763a[185]));_0x3536x2[_0x763a[3268]]= function(_0x3536x2,_0x3536x4,_0x3536x5){_0x3536x2= _0x3536x4[_0x763a[284]](_0x763a[2075]);null!= _0x3536x2&& (_0x3536x4[_0x763a[1390]](_0x763a[2075]),_0x3536x5[_0x763a[2075]]= _0x3536x5[_0x763a[3118]][_0x3536x2]);_0x3536x2= _0x3536x4[_0x763a[284]](_0x763a[3120]);null!= _0x3536x2&& (_0x3536x4[_0x763a[1390]](_0x763a[3120]),_0x3536x5[_0x763a[3120]]= _0x3536x5[_0x763a[3118]][_0x3536x2]);return _0x3536x5};_0x3536x2[_0x763a[3274]]= function(_0x3536x2,_0x3536x4,_0x3536x5){if(_0x763a[3293]== _0x3536x4[_0x763a[301]]){if(_0x763a[3118]== _0x3536x4[_0x763a[284]](_0x763a[3069])){this[_0x763a[3294]](_0x3536x2,_0x3536x4,_0x3536x5);return}}else {if(_0x763a[3295]== _0x3536x4[_0x763a[301]]){this[_0x763a[3296]](_0x3536x2,_0x3536x4,_0x3536x5);return}};mxObjectCodec[_0x763a[202]][_0x763a[3274]][_0x763a[183]](this,arguments)};_0x3536x2[_0x763a[3296]]= function(_0x3536x2,_0x3536x4,_0x3536x5){for(_0x3536x2= _0x3536x4[_0x763a[285]];null!= _0x3536x2;){if(_0x763a[99]== _0x3536x2[_0x763a[301]]){_0x3536x4= _0x3536x2[_0x763a[284]](_0x763a[3069]);var _0x3536x9=_0x3536x2[_0x763a[284]](_0x763a[980]),_0x3536xa=_0x3536x2[_0x763a[284]](_0x763a[124]),_0x3536x12=null;if(null!= _0x3536x9){_0x3536x12= document[_0x763a[1362]](_0x3536x9),null!= _0x3536x12&& null!= _0x3536xa&& (_0x3536x12[_0x763a[124]][_0x763a[103]]+= _0x763a[471]+ _0x3536xa)}else {var _0x3536x9=parseInt(_0x3536x2[_0x763a[284]](_0x763a[235])),_0x3536x13=parseInt(_0x3536x2[_0x763a[284]](_0x763a[236])),_0x3536x14=_0x3536x2[_0x763a[284]](_0x763a[117]),_0x3536x15=_0x3536x2[_0x763a[284]](_0x763a[119]),_0x3536x12=document[_0x763a[55]](_0x763a[485]);_0x3536x12[_0x763a[124]][_0x763a[103]]= _0x3536xa;( new mxWindow(mxResources[_0x763a[203]](_0x3536x4)|| _0x3536x4,_0x3536x12,_0x3536x9,_0x3536x13,_0x3536x14,_0x3536x15,!1,!0))[_0x763a[175]](!0)};_0x763a[1179]== _0x3536x4?_0x3536x5[_0x763a[3202]](_0x3536x12):_0x763a[3082]== _0x3536x4?_0x3536x5[_0x763a[3204]](_0x3536x12):_0x763a[924]== _0x3536x4?_0x3536x5[_0x763a[3208]](_0x3536x12):_0x763a[879]== _0x3536x4?_0x3536x5[_0x763a[3205]](_0x3536x12):_0x763a[201]== _0x3536x4&& _0x3536x5[_0x763a[3297]](_0x3536x12)}else {_0x763a[3298]== _0x3536x2[_0x763a[301]]?mxResources[_0x763a[99]](_0x3536x2[_0x763a[284]](_0x763a[3299])):_0x763a[94]== _0x3536x2[_0x763a[301]]&& mxClient[_0x763a[54]](_0x763a[94],_0x3536x2[_0x763a[284]](_0x763a[298]))};_0x3536x2= _0x3536x2[_0x763a[287]]}};_0x3536x2[_0x763a[3294]]= function(_0x3536x2,_0x3536x4,_0x3536x5){null== _0x3536x5[_0x763a[3118]]&& (_0x3536x5[_0x763a[3118]]= []);_0x3536x4= mxUtils[_0x763a[1540]](_0x3536x4);for(var _0x3536x9=0;_0x3536x9< _0x3536x4[_0x763a[67]];_0x3536x9++){for(var _0x3536xa=_0x3536x4[_0x3536x9][_0x763a[284]](_0x763a[3069]),_0x3536x12=_0x3536x4[_0x3536x9][_0x763a[285]];null!= _0x3536x12&& 1!= _0x3536x12[_0x763a[288]];){_0x3536x12= _0x3536x12[_0x763a[287]]};null!= _0x3536x12&& (_0x3536x5[_0x763a[3118]][_0x3536xa]= _0x3536x2[_0x763a[3244]](_0x3536x12))}};return _0x3536x2}()) \ No newline at end of file +var mxClient = { + VERSION: "2.0.0.0", + IS_IE: 0 <= navigator.userAgent.indexOf("MSIE"), + IS_IE6: 0 <= navigator.userAgent.indexOf("MSIE 6"), + IS_QUIRKS: 0 <= navigator.userAgent.indexOf("MSIE") && (null == document.documentMode || 5 == document.documentMode), + VML_PREFIX: "v", + OFFICE_PREFIX: "o", + IS_NS: 0 <= navigator.userAgent.indexOf("Mozilla/") && 0 > navigator.userAgent.indexOf("MSIE"), + IS_OP: 0 <= navigator.userAgent.indexOf("Opera/"), + IS_OT: 0 > navigator.userAgent.indexOf("Presto/2.4.") && 0 > navigator.userAgent.indexOf("Presto/2.3.") && 0 > navigator.userAgent.indexOf("Presto/2.2.") && + 0 > navigator.userAgent.indexOf("Presto/2.1.") && 0 > navigator.userAgent.indexOf("Presto/2.0.") && 0 > navigator.userAgent.indexOf("Presto/1."), + IS_SF: 0 <= navigator.userAgent.indexOf("AppleWebKit/") && 0 > navigator.userAgent.indexOf("Chrome/"), + IS_GC: 0 <= navigator.userAgent.indexOf("Chrome/"), + IS_MT: 0 <= navigator.userAgent.indexOf("Firefox/") && 0 > navigator.userAgent.indexOf("Firefox/1.") && 0 > navigator.userAgent.indexOf("Firefox/2.") || 0 <= navigator.userAgent.indexOf( + "Iceweasel/") && 0 > navigator.userAgent.indexOf("Iceweasel/1.") && + 0 > navigator.userAgent.indexOf("Iceweasel/2.") || 0 <= navigator.userAgent.indexOf("SeaMonkey/") && 0 > navigator.userAgent.indexOf("SeaMonkey/1.") || 0 <= navigator.userAgent.indexOf( + "Iceape/") && 0 > navigator.userAgent.indexOf("Iceape/1."), + IS_SVG: 0 <= navigator.userAgent.indexOf("Firefox/") || 0 <= navigator.userAgent.indexOf("Iceweasel/") || 0 <= navigator.userAgent.indexOf("Seamonkey/") || 0 <= navigator.userAgent.indexOf( + "Iceape/") || 0 <= navigator.userAgent.indexOf("Galeon/") || 0 <= navigator.userAgent.indexOf("Epiphany/") || 0 <= + navigator.userAgent.indexOf("AppleWebKit/") || 0 <= navigator.userAgent.indexOf("Gecko/") || 0 <= navigator.userAgent.indexOf("Opera/"), + NO_FO: 0 <= navigator.userAgent.indexOf("Firefox/1.") || 0 <= navigator.userAgent.indexOf("Iceweasel/1.") || 0 <= navigator.userAgent.indexOf("Firefox/2.") || 0 <= navigator.userAgent.indexOf( + "Iceweasel/2.") || 0 <= navigator.userAgent.indexOf("SeaMonkey/1.") || 0 <= navigator.userAgent.indexOf("Iceape/1.") || 0 <= navigator.userAgent.indexOf("Camino/1.") || 0 <= navigator.userAgent + .indexOf("Epiphany/2.") || + 0 <= navigator.userAgent.indexOf("Opera/") || 0 <= navigator.userAgent.indexOf("MSIE") || 0 <= navigator.userAgent.indexOf("Mozilla/2."), + IS_VML: "MICROSOFT INTERNET EXPLORER" == navigator.appName.toUpperCase(), + IS_MAC: 0 < navigator.userAgent.toUpperCase().indexOf("MACINTOSH"), + IS_TOUCH: 0 < navigator.userAgent.toUpperCase().indexOf("IPAD") || 0 < navigator.userAgent.toUpperCase().indexOf("IPOD") || 0 < navigator.userAgent.toUpperCase().indexOf("IPHONE") || 0 < + navigator.userAgent.toUpperCase().indexOf("ANDROID"), + IS_LOCAL: 0 > document.location.href.indexOf("http://") && + 0 > document.location.href.indexOf("https://"), + isBrowserSupported: function() { + return mxClient.IS_VML || mxClient.IS_SVG + }, + link: function(a, b, c) { + c = c || document; + if (mxClient.IS_IE6) c.write('\x3clink rel\x3d"' + a + '" href\x3d"' + b + '" charset\x3d"ISO-8859-1" type\x3d"text/css"/\x3e'); + else { + var d = c.createElement("link"); + d.setAttribute("rel", a); + d.setAttribute("href", b); + d.setAttribute("charset", "ISO-8859-1"); + d.setAttribute("type", "text/css"); + c.getElementsByTagName("head")[0].appendChild(d) + } + }, + include: function(a) { + document.write('\x3cscript src\x3d"' + + a + '"\x3e\x3c/script\x3e') + }, + dispose: function() { + for (var a = 0; a < mxEvent.objects.length; a++) null != mxEvent.objects[a].mxListenerList && mxEvent.removeAllListeners(mxEvent.objects[a]) + } +}; +mxClient.IS_OP && mxClient.IS_OT ? mxClient.CSS_PREFIX = "O" : mxClient.IS_SF || mxClient.IS_GC ? mxClient.CSS_PREFIX = "Webkit" : mxClient.IS_MT ? mxClient.CSS_PREFIX = "Moz" : mxClient.IS_IE && 9 <= + document.documentMode && (mxClient.CSS_PREFIX = "ms"); +"undefined" == typeof mxLoadResources && (mxLoadResources = !0); +"undefined" == typeof mxResourceExtension && (mxResourceExtension = ".txt"); +"undefined" == typeof mxLoadStylesheets && (mxLoadStylesheets = !0); +"undefined" != typeof mxBasePath && 0 < mxBasePath.length ? ("/" == mxBasePath.substring(mxBasePath.length - 1) && (mxBasePath = mxBasePath.substring(0, mxBasePath.length - 1)), mxClient.basePath = + mxBasePath) : mxClient.basePath = "."; +"undefined" != typeof mxImageBasePath && 0 < mxImageBasePath.length ? ("/" == mxImageBasePath.substring(mxImageBasePath.length - 1) && (mxImageBasePath = mxImageBasePath.substring(0, mxImageBasePath.length - + 1)), mxClient.imageBasePath = mxImageBasePath) : mxClient.imageBasePath = mxClient.basePath + "/images"; +mxClient.language = "undefined" != typeof mxLanguage ? mxLanguage : mxClient.IS_IE ? navigator.userLanguage : navigator.language; +mxClient.defaultLanguage = "undefined" != typeof mxDefaultLanguage ? mxDefaultLanguage : "en"; +mxLoadStylesheets && mxClient.link("stylesheet", mxClient.basePath + "/css/common.css"); +"undefined" != typeof mxLanguages && (mxClient.languages = mxLanguages); +if (mxClient.IS_IE) { + if (9 <= document.documentMode) mxClient.IS_VML = !1, mxClient.IS_SVG = !0; + else { + 8 == document.documentMode ? (document.namespaces.add(mxClient.VML_PREFIX, "urn:schemas-microsoft-com:vml", "#default#VML"), document.namespaces.add(mxClient.OFFICE_PREFIX, + "urn:schemas-microsoft-com:office:office", "#default#VML")) : (document.namespaces.add(mxClient.VML_PREFIX, "urn:schemas-microsoft-com:vml"), document.namespaces.add(mxClient.OFFICE_PREFIX, + "urn:schemas-microsoft-com:office:office")); + var ss = document.createStyleSheet(); + ss.cssText = "v\\:*{behavior:url(#default#VML)}o\\:*{behavior:url(#default#VML)}"; + mxLoadStylesheets && mxClient.link("stylesheet", mxClient.basePath + "/css/explorer.css") + } + window.attachEvent("onunload", mxClient.dispose) +} +var mxLog = { + consoleName: "Console", + TRACE: !1, + DEBUG: !0, + WARN: !0, + buffer: "", + init: function() { + if (null == mxLog.window && null != document.body) { + var a = mxLog.consoleName + " - mxGraph " + mxClient.VERSION, + b = document.createElement("table"); + b.setAttribute("width", "100%"); + b.setAttribute("height", "100%"); + var c = document.createElement("tbody"), + d = document.createElement("tr"), + e = document.createElement("td"); + e.style.verticalAlign = "top"; + mxLog.textarea = document.createElement("textarea"); + mxLog.textarea.setAttribute("readOnly", "true"); + mxLog.textarea.style.height = "100%"; + mxLog.textarea.style.resize = "none"; + mxLog.textarea.value = mxLog.buffer; + mxLog.textarea.style.width = mxClient.IS_NS && "BackCompat" != document.compatMode ? "99%" : "100%"; + e.appendChild(mxLog.textarea); + d.appendChild(e); + c.appendChild(d); + d = document.createElement("tr"); + mxLog.td = document.createElement("td"); + mxLog.td.style.verticalAlign = "top"; + mxLog.td.setAttribute("height", "30px"); + d.appendChild(mxLog.td); + c.appendChild(d); + b.appendChild(c); + mxLog.addButton("Info", function(a) { + mxLog.info() + }); + mxLog.addButton("DOM", function(a) { + a = mxUtils.getInnerHtml(document.body); + mxLog.debug(a) + }); + mxLog.addButton("Trace", function(a) { + mxLog.TRACE = !mxLog.TRACE; + mxLog.TRACE ? mxLog.debug("Tracing enabled") : mxLog.debug("Tracing disabled") + }); + mxLog.addButton("Copy", function(a) { + try { + mxUtils.copy(mxLog.textarea.value) + } catch (b) { + mxUtils.alert(b) + } + }); + mxLog.addButton("Show", function(a) { + try { + mxUtils.popup(mxLog.textarea.value) + } catch (b) { + mxUtils.alert(b) + } + }); + mxLog.addButton("Clear", function(a) { + mxLog.textarea.value = "" + }); + d = c = 0; + "number" === typeof window.innerWidth ? (c = window.innerHeight, d = window.innerWidth) : (c = document.documentElement.clientHeight || document.body.clientHeight, d = document.body.clientWidth); + mxLog.window = new mxWindow(a, b, Math.max(0, d - 320), Math.max(0, c - 210), 300, 160); + mxLog.window.setMaximizable(!0); + mxLog.window.setScrollable(!1); + mxLog.window.setResizable(!0); + mxLog.window.setClosable(!0); + mxLog.window.destroyOnClose = !1; + if ((mxClient.IS_NS || mxClient.IS_IE) && !mxClient.IS_GC && !mxClient.IS_SF && "BackCompat" != document.compatMode) { + var f = + mxLog.window.getElement(), + a = function(a, b) { + mxLog.textarea.style.height = Math.max(0, f.offsetHeight - 70) + "px" + }; + mxLog.window.addListener(mxEvent.RESIZE_END, a); + mxLog.window.addListener(mxEvent.MAXIMIZE, a); + mxLog.window.addListener(mxEvent.NORMALIZE, a); + mxLog.textarea.style.height = "92px" + } + } + }, + info: function() { + mxLog.writeln(mxUtils.toString(navigator)) + }, + addButton: function(a, b) { + var c = document.createElement("button"); + mxUtils.write(c, a); + mxEvent.addListener(c, "click", b); + mxLog.td.appendChild(c) + }, + isVisible: function() { + return null != + mxLog.window ? mxLog.window.isVisible() : !1 + }, + show: function() { + mxLog.setVisible(!0) + }, + setVisible: function(a) { + null == mxLog.window && mxLog.init(); + null != mxLog.window && mxLog.window.setVisible(a) + }, + enter: function(a) { + if (mxLog.TRACE) return mxLog.writeln("Entering " + a), (new Date).getTime() + }, + leave: function(a, b) { + if (mxLog.TRACE) { + var c = 0 != b ? " (" + ((new Date).getTime() - b) + " ms)" : ""; + mxLog.writeln("Leaving " + a + c) + } + }, + debug: function() { + mxLog.DEBUG && mxLog.writeln.apply(this, arguments) + }, + warn: function() { + mxLog.WARN && mxLog.writeln.apply(this, + arguments) + }, + write: function() { + for (var a = "", b = 0; b < arguments.length; b++) a += arguments[b], b < arguments.length - 1 && (a += " "); + null != mxLog.textarea ? (mxLog.textarea.value += a, 0 <= navigator.userAgent.indexOf("Presto/2.5") && (mxLog.textarea.style.visibility = "hidden", mxLog.textarea.style.visibility = "visible"), + mxLog.textarea.scrollTop = mxLog.textarea.scrollHeight) : mxLog.buffer += a + }, + writeln: function() { + for (var a = "", b = 0; b < arguments.length; b++) a += arguments[b], b < arguments.length - 1 && (a += " "); + mxLog.write(a + "\n") + } + }, + mxObjectIdentity = { + FIELD_NAME: "mxObjectId", + counter: 0, + get: function(a) { + if ("object" == typeof a && null == a[mxObjectIdentity.FIELD_NAME]) { + var b = mxUtils.getFunctionName(a.constructor); + a[mxObjectIdentity.FIELD_NAME] = b + "#" + mxObjectIdentity.counter++ + } + return a[mxObjectIdentity.FIELD_NAME] + }, + clear: function(a) { + "object" == typeof a && delete a[mxObjectIdentity.FIELD_NAME] + } + }; + +function mxDictionary() { + this.clear() +} +mxDictionary.prototype.map = null; +mxDictionary.prototype.clear = function() { + this.map = {} +}; +mxDictionary.prototype.get = function(a) { + a = mxObjectIdentity.get(a); + return this.map[a] +}; +mxDictionary.prototype.put = function(a, b) { + var c = mxObjectIdentity.get(a), + d = this.map[c]; + this.map[c] = b; + return d +}; +mxDictionary.prototype.remove = function(a) { + a = mxObjectIdentity.get(a); + var b = this.map[a]; + delete this.map[a]; + return b +}; +mxDictionary.prototype.getKeys = function() { + var a = [], + b; + for (b in this.map) a.push(b); + return a +}; +mxDictionary.prototype.getValues = function() { + var a = [], + b; + for (b in this.map) a.push(this.map[b]); + return a +}; +mxDictionary.prototype.visit = function(a) { + for (var b in this.map) a(b, this.map[b]) +}; +var mxResources = { + resources: [], + extension: mxResourceExtension, + resourcesEncoded: !1, + loadDefaultBundle: !0, + loadSpecialBundle: !0, + isLanguageSupported: function(a) { + return null != mxClient.languages ? 0 <= mxUtils.indexOf(mxClient.languages, a) : !0 + }, + getDefaultBundle: function(a, b) { + return mxResources.loadDefaultBundle || !mxResources.isLanguageSupported(b) ? a + mxResources.extension : null + }, + getSpecialBundle: function(a, b) { + if (null == mxClient.languages || !this.isLanguageSupported(b)) { + var c = b.indexOf("-"); + 0 < c && (b = b.substring(0, c)) + } + return mxResources.loadSpecialBundle && + mxResources.isLanguageSupported(b) && b != mxClient.defaultLanguage ? a + "_" + b + mxResources.extension : null + }, + add: function(a, b) { + b = null != b ? b : mxClient.language.toLowerCase(); + if (b != mxConstants.NONE) { + var c = mxResources.getDefaultBundle(a, b); + if (null != c) try { + var d = mxUtils.load(c); + d.isReady() && mxResources.parse(d.getText()) + } catch (e) {} + c = mxResources.getSpecialBundle(a, b); + if (null != c) try { + d = mxUtils.load(c), d.isReady() && mxResources.parse(d.getText()) + } catch (f) {} + } + }, + parse: function(a) { + if (null != a) { + a = a.split("\n"); + for (var b = 0; b < + a.length; b++) + if ("#" != a[b].charAt(0)) { + var c = a[b].indexOf("\x3d"); + if (0 < c) { + var d = a[b].substring(0, c), + e = a[b].length; + 13 == a[b].charCodeAt(e - 1) && e--; + c = a[b].substring(c + 1, e); + this.resourcesEncoded ? (c = c.replace(/\\(?=u[a-fA-F\d]{4})/g, "%"), mxResources.resources[d] = unescape(c)) : mxResources.resources[d] = c + } + } + } + }, + get: function(a, b, c) { + a = mxResources.resources[a]; + null == a && (a = c); + if (null != a && null != b) { + c = []; + for (var d = null, e = 0; e < a.length; e++) { + var f = a.charAt(e); + "{" == f ? d = "" : null != d && "}" == f ? (d = parseInt(d) - 1, 0 <= d && d < b.length && + c.push(b[d]), d = null) : null != d ? d += f : c.push(f) + } + a = c.join("") + } + return a + } +}; + +function mxPoint(a, b) { + this.x = null != a ? a : 0; + this.y = null != b ? b : 0 +} +mxPoint.prototype.x = null; +mxPoint.prototype.y = null; +mxPoint.prototype.equals = function(a) { + return a.x == this.x && a.y == this.y +}; +mxPoint.prototype.clone = function() { + return mxUtils.clone(this) +}; + +function mxRectangle(a, b, c, d) { + mxPoint.call(this, a, b); + this.width = null != c ? c : 0; + this.height = null != d ? d : 0 +} +mxRectangle.prototype = new mxPoint; +mxRectangle.prototype.constructor = mxRectangle; +mxRectangle.prototype.width = null; +mxRectangle.prototype.height = null; +mxRectangle.prototype.setRect = function(a, b, c, d) { + this.x = a; + this.y = b; + this.width = c; + this.height = d +}; +mxRectangle.prototype.getCenterX = function() { + return this.x + this.width / 2 +}; +mxRectangle.prototype.getCenterY = function() { + return this.y + this.height / 2 +}; +mxRectangle.prototype.add = function(a) { + if (null != a) { + var b = Math.min(this.x, a.x), + c = Math.min(this.y, a.y), + d = Math.max(this.x + this.width, a.x + a.width); + a = Math.max(this.y + this.height, a.y + a.height); + this.x = b; + this.y = c; + this.width = d - b; + this.height = a - c + } +}; +mxRectangle.prototype.grow = function(a) { + this.x -= a; + this.y -= a; + this.width += 2 * a; + this.height += 2 * a +}; +mxRectangle.prototype.getPoint = function() { + return new mxPoint(this.x, this.y) +}; +mxRectangle.prototype.equals = function(a) { + return a.x == this.x && a.y == this.y && a.width == this.width && a.height == this.height +}; +var mxEffects = { + animateChanges: function(a, b, c) { + var d = 0, + e = function() { + for (var g = !1, h = 0; h < b.length; h++) { + var k = b[h]; + if (k instanceof mxGeometryChange || k instanceof mxTerminalChange || k instanceof mxValueChange || k instanceof mxChildChange || k instanceof mxStyleChange) { + var l = a.getView().getState(k.cell || k.child, !1); + if (null != l) + if (g = !0, k.constructor != mxGeometryChange || a.model.isEdge(k.cell)) mxUtils.setOpacity(l.shape.node, 100 * d / 10); + else { + var m = a.getView().scale, + n = (k.geometry.x - k.previous.x) * m, + p = (k.geometry.y - + k.previous.y) * m, + q = (k.geometry.width - k.previous.width) * m, + m = (k.geometry.height - k.previous.height) * m; + 0 == d ? (l.x -= n, l.y -= p, l.width -= q, l.height -= m) : (l.x += n / 10, l.y += p / 10, l.width += q / 10, l.height += m / 10); + a.cellRenderer.redraw(l); + mxEffects.cascadeOpacity(a, k.cell, 100 * d / 10) + } + } + } + 10 > d && g ? (d++, window.setTimeout(e, f)) : null != c && c() + }, + f = 30; + e() + }, + cascadeOpacity: function(a, b, c) { + for (var d = a.model.getChildCount(b), e = 0; e < d; e++) { + var f = a.model.getChildAt(b, e), + g = a.getView().getState(f); + null != g && (mxUtils.setOpacity(g.shape.node, + c), mxEffects.cascadeOpacity(a, f, c)) + } + b = a.model.getEdges(b); + if (null != b) + for (e = 0; e < b.length; e++) d = a.getView().getState(b[e]), null != d && mxUtils.setOpacity(d.shape.node, c) + }, + fadeOut: function(a, b, c, d, e, f) { + d = d || 40; + e = e || 30; + var g = b || 100; + mxUtils.setOpacity(a, g); + if (f || null == f) { + var h = function() { + g = Math.max(g - d, 0); + mxUtils.setOpacity(a, g); + 0 < g ? window.setTimeout(h, e) : (a.style.visibility = "hidden", c && a.parentNode && a.parentNode.removeChild(a)) + }; + window.setTimeout(h, e) + } else a.style.visibility = "hidden", c && a.parentNode && a.parentNode.removeChild(a) + } + }, + mxUtils = { + errorResource: "none" != mxClient.language ? "error" : "", + closeResource: "none" != mxClient.language ? "close" : "", + errorImage: mxClient.imageBasePath + "/error.gif", + removeCursors: function(a) { + null != a.style && (a.style.cursor = ""); + a = a.childNodes; + if (null != a) + for (var b = a.length, c = 0; c < b; c += 1) mxUtils.removeCursors(a[c]) + }, + getCurrentStyle: function() { + return mxClient.IS_IE ? function(a) { + return null != a ? a.currentStyle : null + } : function(a) { + return null != a ? window.getComputedStyle(a, "") : null + } + }(), + hasScrollbars: function(a) { + a = mxUtils.getCurrentStyle(a); + return null != a && ("scroll" == a.overflow || "auto" == a.overflow) + }, + bind: function(a, b) { + return function() { + return b.apply(a, arguments) + } + }, + eval: function(a) { + var b = null; + if (0 <= a.indexOf("function")) try { + eval("var _mxJavaScriptExpression\x3d" + a), b = _mxJavaScriptExpression, _mxJavaScriptExpression = null + } catch (c) { + mxLog.warn(c.message + " while evaluating " + a) + } else try { + b = eval(a) + } catch (d) { + mxLog.warn(d.message + " while evaluating " + a) + } + return b + }, + findNode: function(a, b, c) { + var d = a.getAttribute(b); + if (null != d && d == c) return a; + for (a = + a.firstChild; null != a;) { + d = mxUtils.findNode(a, b, c); + if (null != d) return d; + a = a.nextSibling + } + return null + }, + findNodeByAttribute: function() { + return 9 <= document.documentMode ? function(a, b, c) { + var d = null; + if (null != a) + if (a.nodeType == mxConstants.NODETYPE_ELEMENT && a.getAttribute(b) == c) d = a; + else + for (a = a.firstChild; null != a && null == d;) d = mxUtils.findNodeByAttribute(a, b, c), a = a.nextSibling; + return d + } : mxClient.IS_IE ? function(a, b, c) { + return null == a ? null : a.ownerDocument.selectSingleNode("//*[@" + b + "\x3d'" + c + "']") + } : function(a, b, c) { + return null == + a ? null : a.ownerDocument.evaluate("//*[@" + b + "\x3d'" + c + "']", a.ownerDocument, null, XPathResult.ANY_TYPE, null).iterateNext() + } + }(), + getFunctionName: function(a) { + var b = null; + if (null != a) + if (null != a.name) b = a.name; + else { + a = a.toString(); + for (b = 9; + " " == a.charAt(b);) b++; + var c = a.indexOf("(", b), + b = a.substring(b, c) + } + return b + }, + indexOf: function(a, b) { + if (null != a && null != b) + for (var c = 0; c < a.length; c++) + if (a[c] == b) return c; + return -1 + }, + remove: function(a, b) { + var c = null; + if ("object" == typeof b) + for (var d = mxUtils.indexOf(b, a); 0 <= d;) b.splice(d, + 1), c = a, d = mxUtils.indexOf(b, a); + for (var e in b) b[e] == a && (delete b[e], c = a); + return c + }, + isNode: function(a, b, c, d) { + return null != a && !isNaN(a.nodeType) && (null == b || a.nodeName.toLowerCase() == b.toLowerCase()) ? null == c || a.getAttribute(c) == d : !1 + }, + getChildNodes: function(a, b) { + b = b || mxConstants.NODETYPE_ELEMENT; + for (var c = [], d = a.firstChild; null != d;) d.nodeType == b && c.push(d), d = d.nextSibling; + return c + }, + createXmlDocument: function() { + var a = null; + document.implementation && document.implementation.createDocument ? a = document.implementation.createDocument("", + "", null) : window.ActiveXObject && (a = new ActiveXObject("Microsoft.XMLDOM")); + return a + }, + parseXml: function() { + return mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? function(a) { + var b = mxUtils.createXmlDocument(); + b.async = "false"; + b.loadXML(a); + return b + } : function(a) { + return (new DOMParser).parseFromString(a, "text/xml") + } + }(), + clearSelection: function() { + if (document.selection) return function() { + document.selection.empty() + }; + if (window.getSelection) return function() { + window.getSelection().removeAllRanges() + } + }(), + getPrettyXml: function(a, b, c) { + var d = []; + if (null != a) + if (b = b || " ", c = c || "", a.nodeType == mxConstants.NODETYPE_TEXT) d.push(a.nodeValue); + else { + d.push(c + "\x3c" + a.nodeName); + var e = a.attributes; + if (null != e) + for (var f = 0; f < e.length; f++) { + var g = mxUtils.htmlEntities(e[f].nodeValue); + d.push(" " + e[f].nodeName + '\x3d"' + g + '"') + } + e = a.firstChild; + if (null != e) { + for (d.push("\x3e\n"); null != e;) d.push(mxUtils.getPrettyXml(e, b, c + b)), e = e.nextSibling; + d.push(c + "\x3c/" + a.nodeName + "\x3e\n") + } else d.push("/\x3e\n") + } + return d.join("") + }, + removeWhitespace: function(a, + b) { + for (var c = b ? a.previousSibling : a.nextSibling; null != c && c.nodeType == mxConstants.NODETYPE_TEXT;) { + var d = b ? c.previousSibling : c.nextSibling, + e = mxUtils.getTextContent(c); + 0 == mxUtils.trim(e).length && c.parentNode.removeChild(c); + c = d + } + }, + htmlEntities: function(a, b) { + a = (a || "").replace(/&/g, "\x26amp;"); + a = a.replace(/"/g, "\x26quot;"); + a = a.replace(/\'/g, "\x26#39;"); + a = a.replace(//g, "\x26gt;"); + if (null == b || b) a = a.replace(/\n/g, "\x26#xa;"); + return a + }, + isVml: function(a) { + return null != a && "urn:schemas-microsoft-com:vml" == + a.tagUrn + }, + getXml: function(a, b) { + var c = ""; + null != a && (c = a.xml, c = null == c ? a.innerHTML ? a.innerHTML : (new XMLSerializer).serializeToString(a) : c.replace(/\r\n\t[\t]*/g, "").replace(/>\r\n/g, "\x3e").replace(/\r\n/g, "\n")); + return c = c.replace(/\n/g, b || "\x26#xa;") + }, + getTextContent: function(a) { + var b = ""; + null != a && (null != a.firstChild && (a = a.firstChild), b = a.nodeValue || ""); + return b + }, + getInnerHtml: function() { + return mxClient.IS_IE ? function(a) { + return null != a ? a.innerHTML : "" + } : function(a) { + return null != a ? (new XMLSerializer).serializeToString(a) : + "" + } + }(), + getOuterHtml: function() { + return mxClient.IS_IE ? function(a) { + if (null != a) { + if (null != a.outerHTML) return a.outerHTML; + var b = []; + b.push("\x3c" + a.nodeName); + var c = a.attributes; + if (null != c) + for (var d = 0; d < c.length; d++) { + var e = c[d].nodeValue; + null != e && 0 < e.length && (b.push(" "), b.push(c[d].nodeName), b.push('\x3d"'), b.push(e), b.push('"')) + } + 0 == a.innerHTML.length ? b.push("/\x3e") : (b.push("\x3e"), b.push(a.innerHTML), b.push("\x3c/" + a.nodeName + "\x3e")); + return b.join("") + } + return "" + } : function(a) { + return null != a ? (new XMLSerializer).serializeToString(a) : + "" + } + }(), + write: function(a, b) { + var c = a.ownerDocument.createTextNode(b); + null != a && a.appendChild(c); + return c + }, + writeln: function(a, b) { + var c = a.ownerDocument.createTextNode(b); + null != a && (a.appendChild(c), a.appendChild(document.createElement("br"))); + return c + }, + br: function(a, b) { + b = b || 1; + for (var c = null, d = 0; d < b; d++) null != a && (c = a.ownerDocument.createElement("br"), a.appendChild(c)); + return c + }, + button: function(a, b, c) { + c = null != c ? c : document; + c = c.createElement("button"); + mxUtils.write(c, a); + mxEvent.addListener(c, "click", function(a) { + b(a) + }); + return c + }, + para: function(a, b) { + var c = document.createElement("p"); + mxUtils.write(c, b); + null != a && a.appendChild(c); + return c + }, + addTransparentBackgroundFilter: function(a) { + a.style.filter += "progid:DXImageTransform.Microsoft.AlphaImageLoader(src\x3d'" + mxClient.imageBasePath + "/transparent.gif', sizingMethod\x3d'scale')" + }, + linkAction: function(a, b, c, d, e) { + return mxUtils.link(a, b, function() { + c.execute(d) + }, e) + }, + linkInvoke: function(a, b, c, d, e, f) { + return mxUtils.link(a, b, function() { + c[d](e) + }, f) + }, + link: function(a, b, c, d) { + var e = + document.createElement("span"); + e.style.color = "blue"; + e.style.textDecoration = "underline"; + e.style.cursor = "pointer"; + null != d && (e.style.paddingLeft = d + "px"); + mxEvent.addListener(e, "click", c); + mxUtils.write(e, b); + null != a && a.appendChild(e); + return e + }, + fit: function(a) { + var b = parseInt(a.offsetLeft), + c = parseInt(a.offsetWidth), + d = document.body, + e = document.documentElement, + f = (d.scrollLeft || e.scrollLeft) + (d.clientWidth || e.clientWidth); + b + c > f && (a.style.left = Math.max(d.scrollLeft || e.scrollLeft, f - c) + "px"); + b = parseInt(a.offsetTop); + c = parseInt(a.offsetHeight); + f = (d.scrollTop || e.scrollTop) + Math.max(d.clientHeight || 0, e.clientHeight); + b + c > f && (a.style.top = Math.max(d.scrollTop || e.scrollTop, f - c) + "px") + }, + open: function(a) { + if (mxClient.IS_NS) { + try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect") + } catch (b) { + return mxUtils.alert("Permission to read file denied."), "" + } + var c = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); + c.initWithPath(a); + if (!c.exists()) return mxUtils.alert("File not found."), + ""; + a = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); + a.init(c, 1, 4, null); + c = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream); + c.init(a); + return c.read(c.available()) + } + c = (new ActiveXObject("Scripting.FileSystemObject")).OpenTextFile(a, 1); + a = c.readAll(); + c.close(); + return a + }, + save: function(a, b) { + if (mxClient.IS_NS) { + try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect") + } catch (c) { + mxUtils.alert("Permission to write file denied."); + return + } + var d = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); + d.initWithPath(a); + d.exists() || d.create(0, 420); + var e = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); + e.init(d, 34, 4, null); + e.write(b, b.length); + e.flush(); + e.close() + } else d = (new ActiveXObject("Scripting.FileSystemObject")).CreateTextFile(a, !0), d.Write(b), d.Close() + }, + saveAs: function(a) { + var b = document.createElement("iframe"); + b.setAttribute("src", ""); + b.style.visibility = "hidden"; + document.body.appendChild(b); + try { + if (mxClient.IS_NS) { + var c = b.contentDocument; + c.open(); + c.write(a); + c.close(); + try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"), b.focus(), saveDocument(c) + } catch (d) { + mxUtils.alert("Permission to save document denied.") + } + } else c = b.contentWindow.document, c.write(a), c.execCommand("SaveAs", !1, document.location) + } finally { + document.body.removeChild(b) + } + }, + copy: function(a) { + if (window.clipboardData) window.clipboardData.setData("Text", + a); + else { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); + var b = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard); + if (b) { + var c = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable); + if (c) { + c.addDataFlavor("text/unicode"); + var d = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString); + d.data = a; + c.setTransferData("text/unicode", + d, 2 * a.length); + b.setData(c, null, Components.interfaces.nsIClipboard.kGlobalClipboard) + } + } + } + }, + load: function(a) { + a = new mxXmlRequest(a, null, "GET", !1); + a.send(); + return a + }, + get: function(a, b, c) { + return (new mxXmlRequest(a, null, "GET")).send(b, c) + }, + post: function(a, b, c, d) { + return (new mxXmlRequest(a, b)).send(c, d) + }, + submit: function(a, b, c, d) { + return (new mxXmlRequest(a, b)).simulate(c, d) + }, + loadInto: function(a, b, c) { + mxClient.IS_IE ? b.onreadystatechange = function() { + 4 == b.readyState && c() + } : b.addEventListener("load", c, !1); + b.load(a) + }, + getValue: function(a, b, c) { + a = null != a ? a[b] : null; + null == a && (a = c); + return a + }, + getNumber: function(a, b, c) { + a = null != a ? a[b] : null; + null == a && (a = c || 0); + return Number(a) + }, + getColor: function(a, b, c) { + a = null != a ? a[b] : null; + null == a ? a = c : a == mxConstants.NONE && (a = null); + return a + }, + clone: function(a, b, c) { + c = null != c ? c : !1; + var d = null; + if (null != a && "function" == typeof a.constructor) { + var d = new a.constructor, + e; + for (e in a) + if (e != mxObjectIdentity.FIELD_NAME && (null == b || 0 > mxUtils.indexOf(b, e))) d[e] = !c && "object" == typeof a[e] ? mxUtils.clone(a[e]) : a[e] + } + return d + }, + equalPoints: function(a, b) { + if (null == a && null != b || null != a && null == b || null != a && null != b && a.length != b.length) return !1; + if (null != a && null != b) + for (var c = 0; c < a.length; c++) + if (a[c] == b[c] || null != a[c] && !a[c].equals(b[c])) return !1; + return !0 + }, + equalEntries: function(a, b) { + if (null == a && null != b || null != a && null == b || null != a && null != b && a.length != b.length) return !1; + if (null != a && null != b) + for (var c in a) + if (a[c] != b[c]) return !1; + return !0 + }, + extend: function(a, b) { + var c = function() {}; + c.prototype = b.prototype; + a.prototype = new c; + a.prototype.constructor = + a + }, + toString: function(a) { + var b = "", + c; + for (c in a) try { + if (null == a[c]) b += c + " \x3d [null]\n"; + else if ("function" == typeof a[c]) b += c + " \x3d\x3e [Function]\n"; + else if ("object" == typeof a[c]) var d = mxUtils.getFunctionName(a[c].constructor), + b = b + (c + " \x3d\x3e [" + d + "]\n"); + else b += c + " \x3d " + a[c] + "\n" + } catch (e) { + b += c + "\x3d" + e.message + } + return b + }, + toRadians: function(a) { + return Math.PI * a / 180 + }, + arcToCurves: function(a, b, c, d, e, f, g, h, k) { + h -= a; + k -= b; + if (0 === c || 0 === d) return p; + c = Math.abs(c); + d = Math.abs(d); + var l = -h / 2, + m = -k / 2, + n = Math.cos(e * + Math.PI / 180), + p = Math.sin(e * Math.PI / 180); + e = n * l + p * m; + var l = -1 * p * l + n * m, + m = e * e, + q = l * l, + s = c * c, + r = d * d, + t = m / s + q / r; + 1 < t ? (c *= Math.sqrt(t), d *= Math.sqrt(t), f = 0) : (t = 1, f === g && (t = -1), f = t * Math.sqrt((s * r - s * q - r * m) / (s * q + r * m))); + m = f * c * l / d; + q = -1 * f * d * e / c; + h = n * m - p * q + h / 2; + k = p * m + n * q + k / 2; + s = Math.atan2((l - q) / d, (e - m) / c) - Math.atan2(0, 1); + f = 0 <= s ? s : 2 * Math.PI + s; + s = Math.atan2((-l - q) / d, (-e - m) / c) - Math.atan2((l - q) / d, (e - m) / c); + e = 0 <= s ? s : 2 * Math.PI + s; + 0 == g && 0 < e ? e -= 2 * Math.PI : 0 != g && 0 > e && (e += 2 * Math.PI); + g = 2 * e / Math.PI; + g = Math.ceil(0 > g ? -1 * g : g); + e /= g; + l = 8 / 3 * Math.sin(e / + 4) * Math.sin(e / 4) / Math.sin(e / 2); + m = n * c; + n *= d; + c *= p; + d *= p; + for (var v = Math.cos(f), w = Math.sin(f), q = -l * (m * w + d * v), s = -l * (c * w - n * v), t = r = 0, p = [], u = 0; u < g; ++u) { + f += e; + var v = Math.cos(f), + w = Math.sin(f), + r = m * v - d * w + h, + t = c * v + n * w + k, + y = -l * (m * w + d * v), + v = -l * (c * w - n * v), + w = 6 * u; + p[w] = Number(q + a); + p[w + 1] = Number(s + b); + p[w + 2] = Number(r - y + a); + p[w + 3] = Number(t - v + b); + p[w + 4] = Number(r + a); + p[w + 5] = Number(t + b); + q = r + y; + s = t + v + } + return p + }, + getBoundingBox: function(a, b) { + var c = null; + if (null != a && null != b && 0 != b) { + var d = mxUtils.toRadians(b), + c = Math.cos(d), + e = Math.sin(d), + f = + new mxPoint(a.x + a.width / 2, a.y + a.height / 2), + g = new mxPoint(a.x, a.y), + d = new mxPoint(a.x + a.width, a.y), + h = new mxPoint(d.x, a.y + a.height), + k = new mxPoint(a.x, h.y), + g = mxUtils.getRotatedPoint(g, c, e, f), + d = mxUtils.getRotatedPoint(d, c, e, f), + h = mxUtils.getRotatedPoint(h, c, e, f), + k = mxUtils.getRotatedPoint(k, c, e, f), + c = new mxRectangle(g.x, g.y, 0, 0); + c.add(new mxRectangle(d.x, d.y, 0, 0)); + c.add(new mxRectangle(h.x, h.y, 0, 0)); + c.add(new mxRectangle(k.x, k.y, 0, 0)) + } + return c + }, + getRotatedPoint: function(a, b, c, d) { + d = null != d ? d : new mxPoint; + var e = + a.x - d.x; + a = a.y - d.y; + return new mxPoint(e * b - a * c + d.x, a * b + e * c + d.y) + }, + getPortConstraints: function(a, b, c, d) { + a = mxUtils.getValue(a.style, mxConstants.STYLE_PORT_CONSTRAINT, null); + if (null == a) return d; + d = a.toString(); + a = mxConstants.DIRECTION_MASK_NONE; + 0 <= d.indexOf(mxConstants.DIRECTION_NORTH) && (a |= mxConstants.DIRECTION_MASK_NORTH); + 0 <= d.indexOf(mxConstants.DIRECTION_WEST) && (a |= mxConstants.DIRECTION_MASK_WEST); + 0 <= d.indexOf(mxConstants.DIRECTION_SOUTH) && (a |= mxConstants.DIRECTION_MASK_SOUTH); + 0 <= d.indexOf(mxConstants.DIRECTION_EAST) && + (a |= mxConstants.DIRECTION_MASK_EAST); + return a + }, + reversePortConstraints: function(a) { + var b = 0, + b = (a & mxConstants.DIRECTION_MASK_WEST) << 3, + b = b | (a & mxConstants.DIRECTION_MASK_NORTH) << 1, + b = b | (a & mxConstants.DIRECTION_MASK_SOUTH) >> 1; + return b |= (a & mxConstants.DIRECTION_MASK_EAST) >> 3 + }, + findNearestSegment: function(a, b, c) { + var d = -1; + if (0 < a.absolutePoints.length) + for (var e = a.absolutePoints[0], f = null, g = 1; g < a.absolutePoints.length; g++) { + var h = a.absolutePoints[g], + e = mxUtils.ptSegDistSq(e.x, e.y, h.x, h.y, b, c); + if (null == f || e < f) f = + e, d = g - 1; + e = h + } + return d + }, + rectangleIntersectsSegment: function(a, b, c) { + var d = a.y, + e = a.x, + f = d + a.height, + g = e + a.width; + a = b.x; + var h = c.x; + b.x > c.x && (a = c.x, h = b.x); + h > g && (h = g); + a < e && (a = e); + if (a > h) return !1; + var e = b.y, + g = c.y, + k = c.x - b.x; + 1E-7 < Math.abs(k) && (c = (c.y - b.y) / k, b = b.y - c * b.x, e = c * a + b, g = c * h + b); + e > g && (b = g, g = e, e = b); + g > f && (g = f); + e < d && (e = d); + return e > g ? !1 : !0 + }, + contains: function(a, b, c) { + return a.x <= b && a.x + a.width >= b && a.y <= c && a.y + a.height >= c + }, + intersects: function(a, b) { + var c = a.width, + d = a.height, + e = b.width, + f = b.height; + if (0 >= e || 0 >= f || 0 >= c || + 0 >= d) return !1; + var g = a.x, + h = a.y, + k = b.x, + l = b.y, + e = e + k, + f = f + l, + c = c + g, + d = d + h; + return (e < k || e > g) && (f < l || f > h) && (c < g || c > k) && (d < h || d > l) + }, + intersectsHotspot: function(a, b, c, d, e, f) { + d = null != d ? d : 1; + e = null != e ? e : 0; + f = null != f ? f : 0; + if (0 < d) { + var g = a.getCenterX(), + h = a.getCenterY(), + k = a.width, + l = a.height, + m = mxUtils.getValue(a.style, mxConstants.STYLE_STARTSIZE) * a.view.scale; + 0 < m && (mxUtils.getValue(a.style, mxConstants.STYLE_HORIZONTAL, !0) ? (h = a.y + m / 2, l = m) : (g = a.x + m / 2, k = m)); + k = Math.max(e, k * d); + l = Math.max(e, l * d); + 0 < f && (k = Math.min(k, f), l = Math.min(l, + f)); + d = new mxRectangle(g - k / 2, h - l / 2, k, l); + g = mxUtils.toRadians(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION) || 0); + 0 != g && (e = Math.cos(-g), f = Math.sin(-g), g = new mxPoint(a.getCenterX(), a.getCenterY()), a = mxUtils.getRotatedPoint(new mxPoint(b, c), e, f, g), b = a.x, c = a.y); + return mxUtils.contains(d, b, c) + } + return !0 + }, + getOffset: function(a, b) { + var c = 0, + d = 0; + if (null != b && b) var e = document.body, + f = document.documentElement, + c = c + (e.scrollLeft || f.scrollLeft), + d = d + (e.scrollTop || f.scrollTop); + for (; a.offsetParent;) c += a.offsetLeft, d += + a.offsetTop, a = a.offsetParent; + return new mxPoint(c, d) + }, + getScrollOrigin: function(a) { + for (var b = document.body, c = document.documentElement, d = new mxPoint(b.scrollLeft || c.scrollLeft, b.scrollTop || c.scrollTop); null != a && a != b && a != c;) !isNaN(a.scrollLeft) && ! + isNaN(a.scrollTop) && (d.x += a.scrollLeft, d.y += a.scrollTop), a = a.parentNode; + return d + }, + convertPoint: function(a, b, c) { + var d = mxUtils.getScrollOrigin(a); + a = mxUtils.getOffset(a); + a.x -= d.x; + a.y -= d.y; + return new mxPoint(b - a.x, c - a.y) + }, + ltrim: function(a, b) { + return a.replace(RegExp("^[" + + (b || "\\s") + "]+", "g"), "") + }, + rtrim: function(a, b) { + return a.replace(RegExp("[" + (b || "\\s") + "]+$", "g"), "") + }, + trim: function(a, b) { + return mxUtils.ltrim(mxUtils.rtrim(a, b), b) + }, + isNumeric: function(a) { + return null != a && (null == a.length || 0 < a.length && 0 > a.indexOf("0x") && 0 > a.indexOf("0X")) && !isNaN(a) + }, + mod: function(a, b) { + return (a % b + b) % b + }, + intersection: function(a, b, c, d, e, f, g, h) { + var k = (h - f) * (c - a) - (g - e) * (d - b); + g = ((g - e) * (b - f) - (h - f) * (a - e)) / k; + e = ((c - a) * (b - f) - (d - b) * (a - e)) / k; + return 0 <= g && 1 >= g && 0 <= e && 1 >= e ? new mxPoint(a + g * (c - a), b + g * + (d - b)) : null + }, + ptSegDistSq: function(a, b, c, d, e, f) { + c -= a; + d -= b; + e -= a; + f -= b; + 0 >= e * c + f * d ? c = 0 : (e = c - e, f = d - f, a = e * c + f * d, c = 0 >= a ? 0 : a * a / (c * c + d * d)); + e = e * e + f * f - c; + 0 > e && (e = 0); + return e + }, + relativeCcw: function(a, b, c, d, e, f) { + c -= a; + d -= b; + e -= a; + f -= b; + a = e * d - f * c; + 0 == a && (a = e * c + f * d, 0 < a && (a = (e - c) * c + (f - d) * d, 0 > a && (a = 0))); + return 0 > a ? -1 : 0 < a ? 1 : 0 + }, + animateChanges: function(a, b) { + mxEffects.animateChanges.apply(this, arguments) + }, + cascadeOpacity: function(a, b, c) { + mxEffects.cascadeOpacity.apply(this, arguments) + }, + fadeOut: function(a, b, c, d, e, f) { + mxEffects.fadeOut.apply(this, + arguments) + }, + setOpacity: function(a, b) { + mxUtils.isVml(a) ? a.style.filter = 100 <= b ? null : "alpha(opacity\x3d" + b / 5 + ")" : mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? a.style + .filter = 100 <= b ? null : "alpha(opacity\x3d" + b + ")" : a.style.opacity = b / 100 + }, + createImage: function(a) { + var b = null; + mxClient.IS_IE6 && "CSS1Compat" != document.compatMode ? (b = document.createElement(mxClient.VML_PREFIX + ":image"), b.setAttribute("src", a), b.style.borderStyle = "none") : (b = document.createElement( + "img"), b.setAttribute("src", + a), b.setAttribute("border", "0")); + return b + }, + sortCells: function(a, b) { + b = null != b ? b : !0; + var c = new mxDictionary; + a.sort(function(a, e) { + var f = c.get(a); + null == f && (f = mxCellPath.create(a).split(mxCellPath.PATH_SEPARATOR), c.put(a, f)); + var g = c.get(e); + null == g && (g = mxCellPath.create(e).split(mxCellPath.PATH_SEPARATOR), c.put(e, g)); + f = mxCellPath.compare(f, g); + return 0 == f ? 0 : 0 < f == b ? 1 : -1 + }); + return a + }, + getStylename: function(a) { + return null != a && (a = a.split(";")[0], 0 > a.indexOf("\x3d")) ? a : "" + }, + getStylenames: function(a) { + var b = []; + if (null != + a) { + a = a.split(";"); + for (var c = 0; c < a.length; c++) 0 > a[c].indexOf("\x3d") && b.push(a[c]) + } + return b + }, + indexOfStylename: function(a, b) { + if (null != a && null != b) + for (var c = a.split(";"), d = 0, e = 0; e < c.length; e++) { + if (c[e] == b) return d; + d += c[e].length + 1 + } + return -1 + }, + addStylename: function(a, b) { + 0 > mxUtils.indexOfStylename(a, b) && (null == a ? a = "" : 0 < a.length && ";" != a.charAt(a.length - 1) && (a += ";"), a += b); + return a + }, + removeStylename: function(a, b) { + var c = []; + if (null != a) + for (var d = a.split(";"), e = 0; e < d.length; e++) d[e] != b && c.push(d[e]); + return c.join(";") + }, + removeAllStylenames: function(a) { + var b = []; + if (null != a) { + a = a.split(";"); + for (var c = 0; c < a.length; c++) 0 <= a[c].indexOf("\x3d") && b.push(a[c]) + } + return b.join(";") + }, + setCellStyles: function(a, b, c, d) { + if (null != b && 0 < b.length) { + a.beginUpdate(); + try { + for (var e = 0; e < b.length; e++) + if (null != b[e]) { + var f = mxUtils.setStyle(a.getStyle(b[e]), c, d); + a.setStyle(b[e], f) + } + } finally { + a.endUpdate() + } + } + }, + setStyle: function(a, b, c) { + var d = null != c && ("undefined" == typeof c.length || 0 < c.length); + if (null == a || 0 == a.length) d && (a = b + "\x3d" + c); + else { + var e = a.indexOf(b + + "\x3d"); + 0 > e ? d && (d = ";" == a.charAt(a.length - 1) ? "" : ";", a = a + d + b + "\x3d" + c) : (b = d ? b + "\x3d" + c : "", c = a.indexOf(";", e), d || c++, a = a.substring(0, e) + b + (c > e ? + a.substring(c) : "")) + } + return a + }, + setCellStyleFlags: function(a, b, c, d, e) { + if (null != b && 0 < b.length) { + a.beginUpdate(); + try { + for (var f = 0; f < b.length; f++) + if (null != b[f]) { + var g = mxUtils.setStyleFlag(a.getStyle(b[f]), c, d, e); + a.setStyle(b[f], g) + } + } finally { + a.endUpdate() + } + } + }, + setStyleFlag: function(a, b, c, d) { + if (null == a || 0 == a.length) a = d || null == d ? b + "\x3d" + c : b + "\x3d0"; + else { + var e = a.indexOf(b + + "\x3d"); + if (0 > e) e = ";" == a.charAt(a.length - 1) ? "" : ";", a = d || null == d ? a + e + b + "\x3d" + c : a + e + b + "\x3d0"; + else { + var f = a.indexOf(";", e), + g = "", + g = 0 > f ? a.substring(e + b.length + 1) : a.substring(e + b.length + 1, f), + g = null == d ? parseInt(g) ^ c : d ? parseInt(g) | c : parseInt(g) & ~c; + a = a.substring(0, e) + b + "\x3d" + g + (0 <= f ? a.substring(f) : "") + } + } + return a + }, + getAlignmentAsPoint: function(a, b) { + var c = 0, + d = 0; + a == mxConstants.ALIGN_CENTER ? c = -0.5 : a == mxConstants.ALIGN_RIGHT && (c = -1); + b == mxConstants.ALIGN_MIDDLE ? d = -0.5 : b == mxConstants.ALIGN_BOTTOM && (d = -1); + return new mxPoint(c, + d) + }, + getSizeForString: function(a, b, c) { + b = null != b ? b : mxConstants.DEFAULT_FONTSIZE; + c = null != c ? c : mxConstants.DEFAULT_FONTFAMILY; + var d = document.createElement("div"); + d.style.fontFamily = c; + d.style.fontSize = Math.round(b) + "px"; + d.style.lineHeight = Math.round(b * mxConstants.LINE_HEIGHT) + "px"; + d.style.position = "absolute"; + d.style.whiteSpace = "nowrap"; + d.style.visibility = "hidden"; + d.style.display = mxClient.IS_QUIRKS ? "inline" : "inline-block"; + d.style.zoom = "1"; + d.innerHTML = a; + document.body.appendChild(d); + a = new mxRectangle(0, 0, + d.offsetWidth, d.offsetHeight); + document.body.removeChild(d); + return a + }, + getViewXml: function(a, b, c, d, e) { + d = null != d ? d : 0; + e = null != e ? e : 0; + b = null != b ? b : 1; + null == c && (c = [a.getModel().getRoot()]); + var f = a.getView(), + g = null, + h = f.isEventsEnabled(); + f.setEventsEnabled(!1); + var k = f.drawPane, + l = f.overlayPane; + a.dialect == mxConstants.DIALECT_SVG ? (f.drawPane = document.createElementNS(mxConstants.NS_SVG, "g"), f.canvas.appendChild(f.drawPane), f.overlayPane = document.createElementNS(mxConstants.NS_SVG, + "g")) : (f.drawPane = f.drawPane.cloneNode(!1), + f.canvas.appendChild(f.drawPane), f.overlayPane = f.overlayPane.cloneNode(!1)); + f.canvas.appendChild(f.overlayPane); + var m = f.getTranslate(); + f.translate = new mxPoint(d, e); + b = new mxTemporaryCellStates(a.getView(), b, c); + try { + g = (new mxCodec).encode(a.getView()) + } finally { + b.destroy(), f.translate = m, f.canvas.removeChild(f.drawPane), f.canvas.removeChild(f.overlayPane), f.drawPane = k, f.overlayPane = l, f.setEventsEnabled(h) + } + return g + }, + getScaleForPageCount: function(a, b, c, d) { + if (1 > a) return 1; + c = null != c ? c : mxConstants.PAGE_FORMAT_A4_PORTRAIT; + d = null != d ? d : 0; + var e = c.width - 2 * d; + c = c.height - 2 * d; + d = b.getGraphBounds().clone(); + b = b.getView().getScale(); + d.width /= b; + d.height /= b; + b = d.width; + c = b / d.height / (e / c); + d = Math.sqrt(a); + var f = Math.sqrt(c); + c = d * f; + d /= f; + if (1 > c && d > a) { + var g = d / a; + d = a; + c /= g + } + 1 > d && c > a && (g = c / a, c = a, d /= g); + g = Math.ceil(c) * Math.ceil(d); + for (f = 0; g > a;) { + var g = Math.floor(c) / c, + h = Math.floor(d) / d; + 1 == g && (g = Math.floor(c - 1) / c); + 1 == h && (h = Math.floor(d - 1) / d); + g = g > h ? g : h; + c *= g; + d *= g; + g = Math.ceil(c) * Math.ceil(d); + f++; + if (10 < f) break + } + return 0.99999 * (e * c / b) + }, + show: function(a, + b, c, d) { + c = null != c ? c : 0; + d = null != d ? d : 0; + null == b ? b = window.open().document : b.open(); + var e = a.getGraphBounds(); + c = -e.x + c; + d = -e.y + d; + if (mxClient.IS_IE) { + for (var e = "\x3chtml\x3e\x3chead\x3e", f = document.getElementsByTagName("base"), g = 0; g < f.length; g++) e += f[g].outerHTML; + e += "\x3cstyle\x3e"; + for (g = 0; g < document.styleSheets.length; g++) try { + e += document.styleSheets(g).cssText + } catch (h) {} + e += "\x3c/style\x3e\x3c/head\x3e"; + e += "\x3cbody\x3e"; + e += a.container.innerHTML; + e += "\x3c/body\x3e"; + e += "\x3chtml\x3e"; + b.writeln(e); + b.close(); + a = + b.body.getElementsByTagName("DIV")[0]; + null != a && (a.style.position = "absolute", a.style.left = c + "px", a.style.top = d + "px") + } else { + b.writeln("\x3chtml"); + b.writeln("\x3chead\x3e"); + f = document.getElementsByTagName("base"); + for (g = 0; g < f.length; g++) b.writeln(mxUtils.getOuterHtml(f[g])); + f = document.getElementsByTagName("link"); + for (g = 0; g < f.length; g++) b.writeln(mxUtils.getOuterHtml(f[g])); + f = document.getElementsByTagName("style"); + for (g = 0; g < f.length; g++) b.writeln(mxUtils.getOuterHtml(f[g])); + b.writeln("\x3c/head\x3e"); + b.writeln("\x3c/html\x3e"); + b.close(); + null == b.body && b.documentElement.appendChild(b.createElement("body")); + b.body.style.overflow = "auto"; + for (a = a.container.firstChild; null != a;) g = a.cloneNode(!0), b.body.appendChild(g), a = a.nextSibling; + a = b.getElementsByTagName("g")[0]; + null != a && (a.setAttribute("transform", "translate(" + c + "," + d + ")"), c = a.ownerSVGElement, c.setAttribute("width", e.width + Math.max(e.x, 0) + 3), c.setAttribute("height", e.height + + Math.max(e.y, 0) + 3)) + } + mxUtils.removeCursors(b.body); + return b + }, + printScreen: function(a) { + var b = window.open(); + mxUtils.show(a, b.document); + a = function() { + b.focus(); + b.print(); + b.close() + }; + mxClient.IS_GC ? b.setTimeout(a, 500) : a() + }, + popup: function(a, b) { + if (b) { + var c = document.createElement("div"); + c.style.overflow = "scroll"; + c.style.width = "636px"; + c.style.height = "460px"; + var d = document.createElement("pre"); + d.innerHTML = mxUtils.htmlEntities(a, !1).replace(/\n/g, "\x3cbr\x3e").replace(/ /g, "\x26nbsp;"); + c.appendChild(d); + c = new mxWindow("Popup Window", c, document.body.clientWidth / 2 - 320, (document.body.clientHeight || document.documentElement.clientHeight) / + 2 - 240, 640, 480, !1, !0); + c.setClosable(!0); + c.setVisible(!0) + } else mxClient.IS_NS ? (c = window.open(), c.document.writeln("\x3cpre\x3e" + mxUtils.htmlEntities(a) + "\x3c/pre"), c.document.close()) : (c = window.open(), d = c.document.createElement( + "pre"), d.innerHTML = mxUtils.htmlEntities(a, !1).replace(/\n/g, "\x3cbr\x3e").replace(/ /g, "\x26nbsp;"), c.document.body.appendChild(d)) + }, + alert: function(a) { + alert(a) + }, + prompt: function(a, b) { + return prompt(a, b) + }, + confirm: function(a) { + return confirm(a) + }, + error: function(a, b, c, d) { + var e = document.createElement("div"); + e.style.padding = "20px"; + var f = document.createElement("img"); + f.setAttribute("src", d || mxUtils.errorImage); + f.setAttribute("valign", "bottom"); + f.style.verticalAlign = "middle"; + e.appendChild(f); + e.appendChild(document.createTextNode("\u00a0")); + e.appendChild(document.createTextNode("\u00a0")); + e.appendChild(document.createTextNode("\u00a0")); + mxUtils.write(e, a); + a = document.body.clientWidth; + d = document.body.clientHeight || document.documentElement.clientHeight; + var g = new mxWindow(mxResources.get(mxUtils.errorResource) || + mxUtils.errorResource, e, (a - b) / 2, d / 4, b, null, !1, !0); + c && (mxUtils.br(e), b = document.createElement("p"), c = document.createElement("button"), mxClient.IS_IE ? c.style.cssText = "float:right" : c.setAttribute("style", "float:right"), mxEvent.addListener( + c, "click", + function(a) { + g.destroy() + }), mxUtils.write(c, mxResources.get(mxUtils.closeResource) || mxUtils.closeResource), b.appendChild(c), e.appendChild(b), mxUtils.br(e), g.setClosable(!0)); + g.setVisible(!0); + return g + }, + makeDraggable: function(a, b, c, d, e, f, g, h, k, l) { + a = new mxDragSource(a, + c); + a.dragOffset = new mxPoint(null != e ? e : 0, null != f ? f : mxConstants.TOOLTIP_VERTICAL_OFFSET); + a.autoscroll = g; + a.setGuidesEnabled(!1); + null != k && (a.highlightDropTargets = k); + null != l && (a.getDropTarget = l); + a.getGraphForEvent = function(a) { + return "function" == typeof b ? b(a) : b + }; + null != d && (a.createDragElement = function() { + return d.cloneNode(!0) + }, h && (a.createPreviewElement = function(a) { + var b = d.cloneNode(!0), + c = parseInt(b.style.width), + e = parseInt(b.style.height); + b.style.width = Math.round(c * a.view.scale) + "px"; + b.style.height = Math.round(e * + a.view.scale) + "px"; + return b + })); + return a + } + }, + mxConstants = { + DEFAULT_HOTSPOT: 0.3, + MIN_HOTSPOT_SIZE: 8, + MAX_HOTSPOT_SIZE: 0, + RENDERING_HINT_EXACT: "exact", + RENDERING_HINT_FASTER: "faster", + RENDERING_HINT_FASTEST: "fastest", + DIALECT_SVG: "svg", + DIALECT_VML: "vml", + DIALECT_MIXEDHTML: "mixedHtml", + DIALECT_PREFERHTML: "preferHtml", + DIALECT_STRICTHTML: "strictHtml", + NS_SVG: "http://www.w3.org/2000/svg", + NS_XHTML: "http://www.w3.org/1999/xhtml", + NS_XLINK: "http://www.w3.org/1999/xlink", + SHADOWCOLOR: "gray", + SHADOW_OFFSET_X: 2, + SHADOW_OFFSET_Y: 3, + SHADOW_OPACITY: 1, + NODETYPE_ELEMENT: 1, + NODETYPE_ATTRIBUTE: 2, + NODETYPE_TEXT: 3, + NODETYPE_CDATA: 4, + NODETYPE_ENTITY_REFERENCE: 5, + NODETYPE_ENTITY: 6, + NODETYPE_PROCESSING_INSTRUCTION: 7, + NODETYPE_COMMENT: 8, + NODETYPE_DOCUMENT: 9, + NODETYPE_DOCUMENTTYPE: 10, + NODETYPE_DOCUMENT_FRAGMENT: 11, + NODETYPE_NOTATION: 12, + TOOLTIP_VERTICAL_OFFSET: 16, + DEFAULT_VALID_COLOR: "#00FF00", + DEFAULT_INVALID_COLOR: "#FF0000", + HIGHLIGHT_STROKEWIDTH: 3, + CURSOR_MOVABLE_VERTEX: "move", + CURSOR_MOVABLE_EDGE: "move", + CURSOR_LABEL_HANDLE: "default", + CURSOR_BEND_HANDLE: "pointer", + CURSOR_CONNECT: "pointer", + HIGHLIGHT_COLOR: "#00FF00", + CONNECT_TARGET_COLOR: "#0000FF", + INVALID_CONNECT_TARGET_COLOR: "#FF0000", + DROP_TARGET_COLOR: "#0000FF", + VALID_COLOR: "#00FF00", + INVALID_COLOR: "#FF0000", + EDGE_SELECTION_COLOR: "#00FF00", + VERTEX_SELECTION_COLOR: "#00FF00", + VERTEX_SELECTION_STROKEWIDTH: 1, + EDGE_SELECTION_STROKEWIDTH: 1, + VERTEX_SELECTION_DASHED: !0, + EDGE_SELECTION_DASHED: !0, + GUIDE_COLOR: "#FF0000", + GUIDE_STROKEWIDTH: 1, + OUTLINE_COLOR: "#0099FF", + OUTLINE_STROKEWIDTH: mxClient.IS_IE ? 2 : 3, + HANDLE_SIZE: 7, + LABEL_HANDLE_SIZE: 4, + HANDLE_FILLCOLOR: "#00FF00", + HANDLE_STROKECOLOR: "black", + LABEL_HANDLE_FILLCOLOR: "yellow", + CONNECT_HANDLE_FILLCOLOR: "#0000FF", + LOCKED_HANDLE_FILLCOLOR: "#FF0000", + OUTLINE_HANDLE_FILLCOLOR: "#00FFFF", + OUTLINE_HANDLE_STROKECOLOR: "#0033FF", + DEFAULT_FONTFAMILY: "Arial,Helvetica", + DEFAULT_FONTSIZE: 11, + LINE_HEIGHT: 1.2, + DEFAULT_FONTSTYLE: 0, + DEFAULT_STARTSIZE: 40, + DEFAULT_MARKERSIZE: 6, + DEFAULT_IMAGESIZE: 24, + ENTITY_SEGMENT: 30, + RECTANGLE_ROUNDING_FACTOR: 0.15, + LINE_ARCSIZE: 20, + ARROW_SPACING: 10, + ARROW_WIDTH: 30, + ARROW_SIZE: 30, + PAGE_FORMAT_A4_PORTRAIT: new mxRectangle(0, + 0, 826, 1169), + PAGE_FORMAT_A4_LANDSCAPE: new mxRectangle(0, 0, 1169, 826), + PAGE_FORMAT_LETTER_PORTRAIT: new mxRectangle(0, 0, 850, 1100), + PAGE_FORMAT_LETTER_LANDSCAPE: new mxRectangle(0, 0, 1100, 850), + NONE: "none", + STYLE_PERIMETER: "perimeter", + STYLE_SOURCE_PORT: "sourcePort", + STYLE_TARGET_PORT: "targetPort", + STYLE_PORT_CONSTRAINT: "portConstraint", + STYLE_OPACITY: "opacity", + STYLE_TEXT_OPACITY: "textOpacity", + STYLE_OVERFLOW: "overflow", + STYLE_ORTHOGONAL: "orthogonal", + STYLE_EXIT_X: "exitX", + STYLE_EXIT_Y: "exitY", + STYLE_EXIT_PERIMETER: "exitPerimeter", + STYLE_ENTRY_X: "entryX", + STYLE_ENTRY_Y: "entryY", + STYLE_ENTRY_PERIMETER: "entryPerimeter", + STYLE_WHITE_SPACE: "whiteSpace", + STYLE_ROTATION: "rotation", + STYLE_FILLCOLOR: "fillColor", + STYLE_SWIMLANE_FILLCOLOR: "swimlaneFillColor", + STYLE_GRADIENTCOLOR: "gradientColor", + STYLE_GRADIENT_DIRECTION: "gradientDirection", + STYLE_STROKECOLOR: "strokeColor", + STYLE_SEPARATORCOLOR: "separatorColor", + STYLE_STROKEWIDTH: "strokeWidth", + STYLE_ALIGN: "align", + STYLE_VERTICAL_ALIGN: "verticalAlign", + STYLE_LABEL_POSITION: "labelPosition", + STYLE_VERTICAL_LABEL_POSITION: "verticalLabelPosition", + STYLE_IMAGE_ASPECT: "imageAspect", + STYLE_IMAGE_ALIGN: "imageAlign", + STYLE_IMAGE_VERTICAL_ALIGN: "imageVerticalAlign", + STYLE_GLASS: "glass", + STYLE_IMAGE: "image", + STYLE_IMAGE_WIDTH: "imageWidth", + STYLE_IMAGE_HEIGHT: "imageHeight", + STYLE_IMAGE_BACKGROUND: "imageBackground", + STYLE_IMAGE_BORDER: "imageBorder", + STYLE_FLIPH: "flipH", + STYLE_FLIPV: "flipV", + STYLE_NOLABEL: "noLabel", + STYLE_NOEDGESTYLE: "noEdgeStyle", + STYLE_LABEL_BACKGROUNDCOLOR: "labelBackgroundColor", + STYLE_LABEL_BORDERCOLOR: "labelBorderColor", + STYLE_LABEL_PADDING: "labelPadding", + STYLE_INDICATOR_SHAPE: "indicatorShape", + STYLE_INDICATOR_IMAGE: "indicatorImage", + STYLE_INDICATOR_COLOR: "indicatorColor", + STYLE_INDICATOR_STROKECOLOR: "indicatorStrokeColor", + STYLE_INDICATOR_GRADIENTCOLOR: "indicatorGradientColor", + STYLE_INDICATOR_SPACING: "indicatorSpacing", + STYLE_INDICATOR_WIDTH: "indicatorWidth", + STYLE_INDICATOR_HEIGHT: "indicatorHeight", + STYLE_INDICATOR_DIRECTION: "indicatorDirection", + STYLE_SHADOW: "shadow", + STYLE_SEGMENT: "segment", + STYLE_ENDARROW: "endArrow", + STYLE_STARTARROW: "startArrow", + STYLE_ENDSIZE: "endSize", + STYLE_STARTSIZE: "startSize", + STYLE_SWIMLANE_LINE: "swimlaneLine", + STYLE_ENDFILL: "endFill", + STYLE_STARTFILL: "startFill", + STYLE_DASHED: "dashed", + STYLE_DASH_PATTERN: "dashPattern", + STYLE_ROUNDED: "rounded", + STYLE_CURVED: "curved", + STYLE_ARCSIZE: "arcSize", + STYLE_SMOOTH: "smooth", + STYLE_SOURCE_PERIMETER_SPACING: "sourcePerimeterSpacing", + STYLE_TARGET_PERIMETER_SPACING: "targetPerimeterSpacing", + STYLE_PERIMETER_SPACING: "perimeterSpacing", + STYLE_SPACING: "spacing", + STYLE_SPACING_TOP: "spacingTop", + STYLE_SPACING_LEFT: "spacingLeft", + STYLE_SPACING_BOTTOM: "spacingBottom", + STYLE_SPACING_RIGHT: "spacingRight", + STYLE_HORIZONTAL: "horizontal", + STYLE_DIRECTION: "direction", + STYLE_ELBOW: "elbow", + STYLE_FONTCOLOR: "fontColor", + STYLE_FONTFAMILY: "fontFamily", + STYLE_FONTSIZE: "fontSize", + STYLE_FONTSTYLE: "fontStyle", + STYLE_AUTOSIZE: "autosize", + STYLE_FOLDABLE: "foldable", + STYLE_EDITABLE: "editable", + STYLE_BENDABLE: "bendable", + STYLE_MOVABLE: "movable", + STYLE_RESIZABLE: "resizable", + STYLE_CLONEABLE: "cloneable", + STYLE_DELETABLE: "deletable", + STYLE_SHAPE: "shape", + STYLE_EDGE: "edgeStyle", + STYLE_LOOP: "loopStyle", + STYLE_ROUTING_CENTER_X: "routingCenterX", + STYLE_ROUTING_CENTER_Y: "routingCenterY", + FONT_BOLD: 1, + FONT_ITALIC: 2, + FONT_UNDERLINE: 4, + FONT_SHADOW: 8, + SHAPE_RECTANGLE: "rectangle", + SHAPE_ELLIPSE: "ellipse", + SHAPE_DOUBLE_ELLIPSE: "doubleEllipse", + SHAPE_RHOMBUS: "rhombus", + SHAPE_LINE: "line", + SHAPE_IMAGE: "image", + SHAPE_ARROW: "arrow", + SHAPE_LABEL: "label", + SHAPE_CYLINDER: "cylinder", + SHAPE_SWIMLANE: "swimlane", + SHAPE_CONNECTOR: "connector", + SHAPE_ACTOR: "actor", + SHAPE_CLOUD: "cloud", + SHAPE_TRIANGLE: "triangle", + SHAPE_HEXAGON: "hexagon", + ARROW_CLASSIC: "classic", + ARROW_BLOCK: "block", + ARROW_OPEN: "open", + ARROW_OVAL: "oval", + ARROW_DIAMOND: "diamond", + ARROW_DIAMOND_THIN: "diamondThin", + ALIGN_LEFT: "left", + ALIGN_CENTER: "center", + ALIGN_RIGHT: "right", + ALIGN_TOP: "top", + ALIGN_MIDDLE: "middle", + ALIGN_BOTTOM: "bottom", + DIRECTION_NORTH: "north", + DIRECTION_SOUTH: "south", + DIRECTION_EAST: "east", + DIRECTION_WEST: "west", + DIRECTION_MASK_NONE: 0, + DIRECTION_MASK_WEST: 1, + DIRECTION_MASK_NORTH: 2, + DIRECTION_MASK_SOUTH: 4, + DIRECTION_MASK_EAST: 8, + DIRECTION_MASK_ALL: 15, + ELBOW_VERTICAL: "vertical", + ELBOW_HORIZONTAL: "horizontal", + EDGESTYLE_ELBOW: "elbowEdgeStyle", + EDGESTYLE_ENTITY_RELATION: "entityRelationEdgeStyle", + EDGESTYLE_LOOP: "loopEdgeStyle", + EDGESTYLE_SIDETOSIDE: "sideToSideEdgeStyle", + EDGESTYLE_TOPTOBOTTOM: "topToBottomEdgeStyle", + EDGESTYLE_ORTHOGONAL: "orthogonalEdgeStyle", + EDGESTYLE_SEGMENT: "segmentEdgeStyle", + PERIMETER_ELLIPSE: "ellipsePerimeter", + PERIMETER_RECTANGLE: "rectanglePerimeter", + PERIMETER_RHOMBUS: "rhombusPerimeter", + PERIMETER_TRIANGLE: "trianglePerimeter" + }; + +function mxEventObject(a) { + this.name = a; + this.properties = []; + for (var b = 1; b < arguments.length; b += 2) null != arguments[b + 1] && (this.properties[arguments[b]] = arguments[b + 1]) +} +mxEventObject.prototype.name = null; +mxEventObject.prototype.properties = null; +mxEventObject.prototype.consumed = !1; +mxEventObject.prototype.getName = function() { + return this.name +}; +mxEventObject.prototype.getProperties = function() { + return this.properties +}; +mxEventObject.prototype.getProperty = function(a) { + return this.properties[a] +}; +mxEventObject.prototype.isConsumed = function() { + return this.consumed +}; +mxEventObject.prototype.consume = function() { + this.consumed = !0 +}; + +function mxMouseEvent(a, b) { + this.evt = a; + this.state = b +} +mxMouseEvent.prototype.consumed = !1; +mxMouseEvent.prototype.evt = null; +mxMouseEvent.prototype.graphX = null; +mxMouseEvent.prototype.graphY = null; +mxMouseEvent.prototype.state = null; +mxMouseEvent.prototype.getEvent = function() { + return this.evt +}; +mxMouseEvent.prototype.getSource = function() { + return mxEvent.getSource(this.evt) +}; +mxMouseEvent.prototype.isSource = function(a) { + if (null != a) + for (var b = this.getSource(); null != b;) { + if (b == a.node) return !0; + b = b.parentNode + } + return !1 +}; +mxMouseEvent.prototype.getX = function() { + return mxEvent.getClientX(this.getEvent()) +}; +mxMouseEvent.prototype.getY = function() { + return mxEvent.getClientY(this.getEvent()) +}; +mxMouseEvent.prototype.getGraphX = function() { + return this.graphX +}; +mxMouseEvent.prototype.getGraphY = function() { + return this.graphY +}; +mxMouseEvent.prototype.getState = function() { + return this.state +}; +mxMouseEvent.prototype.getCell = function() { + var a = this.getState(); + return null != a ? a.cell : null +}; +mxMouseEvent.prototype.isPopupTrigger = function() { + return mxEvent.isPopupTrigger(this.getEvent()) +}; +mxMouseEvent.prototype.isConsumed = function() { + return this.consumed +}; +mxMouseEvent.prototype.consume = function(a) { + (null != a ? a : 1) && this.evt.preventDefault && this.evt.preventDefault(); + this.evt.returnValue = !1; + this.consumed = !0 +}; + +function mxEventSource(a) { + this.setEventSource(a) +} +mxEventSource.prototype.eventListeners = null; +mxEventSource.prototype.eventsEnabled = !0; +mxEventSource.prototype.eventSource = null; +mxEventSource.prototype.isEventsEnabled = function() { + return this.eventsEnabled +}; +mxEventSource.prototype.setEventsEnabled = function(a) { + this.eventsEnabled = a +}; +mxEventSource.prototype.getEventSource = function() { + return this.eventSource +}; +mxEventSource.prototype.setEventSource = function(a) { + this.eventSource = a +}; +mxEventSource.prototype.addListener = function(a, b) { + null == this.eventListeners && (this.eventListeners = []); + this.eventListeners.push(a); + this.eventListeners.push(b) +}; +mxEventSource.prototype.removeListener = function(a) { + if (null != this.eventListeners) + for (var b = 0; b < this.eventListeners.length;) this.eventListeners[b + 1] == a ? this.eventListeners.splice(b, 2) : b += 2 +}; +mxEventSource.prototype.fireEvent = function(a, b) { + if (null != this.eventListeners && this.isEventsEnabled()) { + null == a && (a = new mxEventObject); + null == b && (b = this.getEventSource()); + null == b && (b = this); + for (var c = [b, a], d = 0; d < this.eventListeners.length; d += 2) { + var e = this.eventListeners[d]; + (null == e || e == a.getName()) && this.eventListeners[d + 1].apply(this, c) + } + } +}; +var mxEvent = { + objects: [], + addListener: function() { + var a = function(a, c, d) { + null == a.mxListenerList && (a.mxListenerList = [], mxEvent.objects.push(a)); + a.mxListenerList.push({ + name: c, + f: d + }) + }; + return window.addEventListener ? function(b, c, d) { + b.addEventListener(c, d, !1); + a(b, c, d) + } : function(b, c, d) { + b.attachEvent("on" + c, d); + a(b, c, d) + } + }(), + removeListener: function() { + var a = function(a, c, d) { + if (null != a.mxListenerList) { + c = a.mxListenerList.length; + for (var e = 0; e < c; e++) + if (a.mxListenerList[e].f == d) { + a.mxListenerList.splice(e, 1); + break + } + 0 == + a.mxListenerList.length && (a.mxListenerList = null) + } + }; + return window.removeEventListener ? function(b, c, d) { + b.removeEventListener(c, d, !1); + a(b, c, d) + } : function(b, c, d) { + b.detachEvent("on" + c, d); + a(b, c, d) + } + }(), + removeAllListeners: function(a) { + var b = a.mxListenerList; + if (null != b) + for (; 0 < b.length;) { + var c = b[0]; + mxEvent.removeListener(a, c.name, c.f) + } + }, + addGestureListeners: function(a, b, c, d) { + null != b && mxEvent.addListener(a, "mousedown", b); + null != c && mxEvent.addListener(a, "mousemove", c); + null != d && mxEvent.addListener(a, "mouseup", d); + mxClient.IS_TOUCH && (null != b && mxEvent.addListener(a, "touchstart", b), null != c && mxEvent.addListener(a, "touchmove", c), null != d && mxEvent.addListener(a, "touchend", d)) + }, + removeGestureListeners: function(a, b, c, d) { + null != b && mxEvent.removeListener(a, "mousedown", b); + null != c && mxEvent.removeListener(a, "mousemove", c); + null != d && mxEvent.removeListener(a, "mouseup", d); + mxClient.IS_TOUCH && (null != b && mxEvent.removeListener(a, "touchstart", b), null != c && mxEvent.removeListener(a, "touchmove", c), null != d && mxEvent.removeListener(a, "touchend", + d)) + }, + redirectMouseEvents: function(a, b, c, d, e, f, g) { + var h = function(a) { + return "function" == typeof c ? c(a) : c + }; + mxEvent.addGestureListeners(a, function(a) { + null != d ? d(a) : mxEvent.isConsumed(a) || b.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a, h(a))) + }, function(a) { + null != e ? e(a) : mxEvent.isConsumed(a) || b.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(a, h(a))) + }, function(a) { + null != f ? f(a) : mxEvent.isConsumed(a) || b.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(a, h(a))) + }); + mxEvent.addListener(a, "dblclick", function(a) { + if (null != + g) g(a); + else if (!mxEvent.isConsumed(a)) { + var c = h(a); + b.dblClick(a, null != c ? c.cell : null) + } + }) + }, + release: function(a) { + if (null != a && (mxEvent.removeAllListeners(a), a = a.childNodes, null != a)) + for (var b = a.length, c = 0; c < b; c += 1) mxEvent.release(a[c]) + }, + addMouseWheelListener: function(a) { + if (null != a) { + var b = function(b) { + null == b && (b = window.event); + var d = 0, + d = mxClient.IS_NS && !mxClient.IS_SF && !mxClient.IS_GC ? -b.detail / 2 : b.wheelDelta / 120; + 0 != d && a(b, 0 < d) + }; + mxClient.IS_NS ? mxEvent.addListener(window, mxClient.IS_SF || mxClient.IS_GC ? "mousewheel" : + "DOMMouseScroll", b) : mxEvent.addListener(document, "mousewheel", b) + } + }, + disableContextMenu: function() { + return mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? function(a) { + mxEvent.addListener(a, "contextmenu", function() { + return !1 + }) + } : function(a) { + a.setAttribute("oncontextmenu", "return false;") + } + }(), + getSource: function(a) { + return null != a.srcElement ? a.srcElement : a.target + }, + isConsumed: function(a) { + return null != a.isConsumed && a.isConsumed + }, + isLeftMouseButton: function(a) { + return a.button == + (mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? 1 : 0) + }, + isRightMouseButton: function(a) { + return 2 == a.button + }, + isPopupTrigger: function(a) { + return mxEvent.isRightMouseButton(a) || mxEvent.isShiftDown(a) && !mxEvent.isControlDown(a) + }, + isShiftDown: function(a) { + return null != a ? a.shiftKey : !1 + }, + isAltDown: function(a) { + return null != a ? a.altKey : !1 + }, + isControlDown: function(a) { + return null != a ? a.ctrlKey : !1 + }, + isMetaDown: function(a) { + return null != a ? a.metaKey : !1 + }, + getMainEvent: function(a) { + ("touchstart" == + a.type || "touchmove" == a.type) && null != a.touches && null != a.touches[0] ? a = a.touches[0] : "touchend" == a.type && (null != a.changedTouches && null != a.changedTouches[0]) && (a = + a.changedTouches[0]); + return a + }, + getClientX: function(a) { + return mxEvent.getMainEvent(a).clientX + }, + getClientY: function(a) { + return mxEvent.getMainEvent(a).clientY + }, + consume: function(a, b, c) { + c = null != c ? c : !0; + if (null != b ? b : 1) a.preventDefault ? (c && a.stopPropagation(), a.preventDefault()) : c && (a.cancelBubble = !0); + a.isConsumed = !0; + a.returnValue = !1 + }, + LABEL_HANDLE: -1, + ROTATION_HANDLE: -2, + MOUSE_DOWN: "mouseDown", + MOUSE_MOVE: "mouseMove", + MOUSE_UP: "mouseUp", + ACTIVATE: "activate", + RESIZE_START: "resizeStart", + RESIZE: "resize", + RESIZE_END: "resizeEnd", + MOVE_START: "moveStart", + MOVE: "move", + MOVE_END: "moveEnd", + PAN_START: "panStart", + PAN: "pan", + PAN_END: "panEnd", + MINIMIZE: "minimize", + NORMALIZE: "normalize", + MAXIMIZE: "maximize", + HIDE: "hide", + SHOW: "show", + CLOSE: "close", + DESTROY: "destroy", + REFRESH: "refresh", + SIZE: "size", + SELECT: "select", + FIRED: "fired", + GET: "get", + RECEIVE: "receive", + CONNECT: "connect", + DISCONNECT: "disconnect", + SUSPEND: "suspend", + RESUME: "resume", + MARK: "mark", + SESSION: "session", + ROOT: "root", + POST: "post", + OPEN: "open", + SAVE: "save", + BEFORE_ADD_VERTEX: "beforeAddVertex", + ADD_VERTEX: "addVertex", + AFTER_ADD_VERTEX: "afterAddVertex", + DONE: "done", + EXECUTE: "execute", + EXECUTED: "executed", + BEGIN_UPDATE: "beginUpdate", + START_EDIT: "startEdit", + END_UPDATE: "endUpdate", + END_EDIT: "endEdit", + BEFORE_UNDO: "beforeUndo", + UNDO: "undo", + REDO: "redo", + CHANGE: "change", + NOTIFY: "notify", + LAYOUT_CELLS: "layoutCells", + CLICK: "click", + SCALE: "scale", + TRANSLATE: "translate", + SCALE_AND_TRANSLATE: "scaleAndTranslate", + UP: "up", + DOWN: "down", + ADD: "add", + REMOVE: "remove", + CLEAR: "clear", + ADD_CELLS: "addCells", + CELLS_ADDED: "cellsAdded", + MOVE_CELLS: "moveCells", + CELLS_MOVED: "cellsMoved", + RESIZE_CELLS: "resizeCells", + CELLS_RESIZED: "cellsResized", + TOGGLE_CELLS: "toggleCells", + CELLS_TOGGLED: "cellsToggled", + ORDER_CELLS: "orderCells", + CELLS_ORDERED: "cellsOrdered", + REMOVE_CELLS: "removeCells", + CELLS_REMOVED: "cellsRemoved", + GROUP_CELLS: "groupCells", + UNGROUP_CELLS: "ungroupCells", + REMOVE_CELLS_FROM_PARENT: "removeCellsFromParent", + FOLD_CELLS: "foldCells", + CELLS_FOLDED: "cellsFolded", + ALIGN_CELLS: "alignCells", + LABEL_CHANGED: "labelChanged", + CONNECT_CELL: "connectCell", + CELL_CONNECTED: "cellConnected", + SPLIT_EDGE: "splitEdge", + FLIP_EDGE: "flipEdge", + START_EDITING: "startEditing", + ADD_OVERLAY: "addOverlay", + REMOVE_OVERLAY: "removeOverlay", + UPDATE_CELL_SIZE: "updateCellSize", + ESCAPE: "escape", + CLICK: "click", + DOUBLE_CLICK: "doubleClick", + START: "start", + RESET: "reset" +}; + +function mxXmlRequest(a, b, c, d, e, f) { + this.url = a; + this.params = b; + this.method = c || "POST"; + this.async = null != d ? d : !0; + this.username = e; + this.password = f +} +mxXmlRequest.prototype.url = null; +mxXmlRequest.prototype.params = null; +mxXmlRequest.prototype.method = null; +mxXmlRequest.prototype.async = null; +mxXmlRequest.prototype.binary = !1; +mxXmlRequest.prototype.username = null; +mxXmlRequest.prototype.password = null; +mxXmlRequest.prototype.request = null; +mxXmlRequest.prototype.isBinary = function() { + return this.binary +}; +mxXmlRequest.prototype.setBinary = function(a) { + this.binary = a +}; +mxXmlRequest.prototype.getText = function() { + return this.request.responseText +}; +mxXmlRequest.prototype.isReady = function() { + return 4 == this.request.readyState +}; +mxXmlRequest.prototype.getDocumentElement = function() { + var a = this.getXml(); + return null != a ? a.documentElement : null +}; +mxXmlRequest.prototype.getXml = function() { + var a = this.request.responseXML; + if (9 <= document.documentMode || null == a || null == a.documentElement) a = mxUtils.parseXml(this.request.responseText); + return a +}; +mxXmlRequest.prototype.getText = function() { + return this.request.responseText +}; +mxXmlRequest.prototype.getStatus = function() { + return this.request.status +}; +mxXmlRequest.prototype.create = function() { + if (window.XMLHttpRequest) return function() { + var a = new XMLHttpRequest; + this.isBinary() && a.overrideMimeType && a.overrideMimeType("text/plain; charset\x3dx-user-defined"); + return a + }; + if ("undefined" != typeof ActiveXObject) return function() { + return new ActiveXObject("Microsoft.XMLHTTP") + } +}(); +mxXmlRequest.prototype.send = function(a, b) { + this.request = this.create(); + null != this.request && (null != a && (this.request.onreadystatechange = mxUtils.bind(this, function() { + this.isReady() && (a(this), this.onreadystatechaange = null) + })), this.request.open(this.method, this.url, this.async, this.username, this.password), this.setRequestHeaders(this.request, this.params), this.request.send(this.params)) +}; +mxXmlRequest.prototype.setRequestHeaders = function(a, b) { + null != b && a.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") +}; +mxXmlRequest.prototype.simulate = function(a, b) { + a = a || document; + var c = null; + a == document && (c = window.onbeforeunload, window.onbeforeunload = null); + var d = a.createElement("form"); + d.setAttribute("method", this.method); + d.setAttribute("action", this.url); + null != b && d.setAttribute("target", b); + d.style.display = "none"; + d.style.visibility = "hidden"; + for (var e = 0 < this.params.indexOf("\x26") ? this.params.split("\x26") : this.params.split(), f = 0; f < e.length; f++) { + var g = e[f].indexOf("\x3d"); + if (0 < g) { + var h = e[f].substring(0, g), + k = e[f].substring(g + + 1), + g = a.createElement("textarea"); + g.setAttribute("name", h); + k = k.replace(/\n/g, "\x26#xa;"); + h = a.createTextNode(k); + g.appendChild(h); + d.appendChild(g) + } + } + a.body.appendChild(d); + d.submit(); + a.body.removeChild(d); + null != c && (window.onbeforeunload = c) +}; +var mxClipboard = { + STEPSIZE: 10, + insertCount: 1, + cells: null, + isEmpty: function() { + return null == mxClipboard.cells + }, + cut: function(a, b) { + b = mxClipboard.copy(a, b); + mxClipboard.insertCount = 0; + mxClipboard.removeCells(a, b); + return b + }, + removeCells: function(a, b) { + a.removeCells(b) + }, + copy: function(a, b) { + b = b || a.getSelectionCells(); + var c = a.getExportableCells(b); + mxClipboard.insertCount = 1; + mxClipboard.cells = a.cloneCells(c); + return c + }, + paste: function(a) { + if (null != mxClipboard.cells) { + var b = a.getImportableCells(mxClipboard.cells), + c = mxClipboard.insertCount * + mxClipboard.STEPSIZE, + d = a.getDefaultParent(), + b = a.importCells(b, c, c, d); + mxClipboard.insertCount++; + a.setSelectionCells(b) + } + } +}; + +function mxWindow(a, b, c, d, e, f, g, h, k, l) { + null != b && (g = null != g ? g : !0, this.content = b, this.init(c, d, e, f, l), this.installMaximizeHandler(), this.installMinimizeHandler(), this.installCloseHandler(), this.setMinimizable(g), + this.setTitle(a), (null == h || h) && this.installMoveHandler(), null != k && null != k.parentNode ? k.parentNode.replaceChild(this.div, k) : document.body.appendChild(this.div)) +} +mxWindow.prototype = new mxEventSource; +mxWindow.prototype.constructor = mxWindow; +mxWindow.prototype.closeImage = mxClient.imageBasePath + "/close.gif"; +mxWindow.prototype.minimizeImage = mxClient.imageBasePath + "/minimize.gif"; +mxWindow.prototype.normalizeImage = mxClient.imageBasePath + "/normalize.gif"; +mxWindow.prototype.maximizeImage = mxClient.imageBasePath + "/maximize.gif"; +mxWindow.prototype.resizeImage = mxClient.imageBasePath + "/resize.gif"; +mxWindow.prototype.visible = !1; +mxWindow.prototype.content = !1; +mxWindow.prototype.minimumSize = new mxRectangle(0, 0, 50, 40); +mxWindow.prototype.title = !1; +mxWindow.prototype.content = !1; +mxWindow.prototype.destroyOnClose = !0; +mxWindow.prototype.init = function(a, b, c, d, e) { + e = null != e ? e : "mxWindow"; + this.div = document.createElement("div"); + this.div.className = e; + this.div.style.left = a + "px"; + this.div.style.top = b + "px"; + this.table = document.createElement("table"); + this.table.className = e; + null != c && (mxClient.IS_IE || (this.div.style.width = c + "px"), this.table.style.width = c + "px"); + null != d && (mxClient.IS_IE || (this.div.style.height = d + "px"), this.table.style.height = d + "px"); + a = document.createElement("tbody"); + b = document.createElement("tr"); + this.title = document.createElement("td"); + this.title.className = e + "Title"; + b.appendChild(this.title); + a.appendChild(b); + b = document.createElement("tr"); + this.td = document.createElement("td"); + this.td.className = e + "Pane"; + this.contentWrapper = document.createElement("div"); + this.contentWrapper.className = e + "Pane"; + this.contentWrapper.style.width = "100%"; + this.contentWrapper.appendChild(this.content); + if (mxClient.IS_IE || "DIV" != this.content.nodeName.toUpperCase()) this.contentWrapper.style.height = "100%"; + this.td.appendChild(this.contentWrapper); + b.appendChild(this.td); + a.appendChild(b); + this.table.appendChild(a); + this.div.appendChild(this.table); + e = mxUtils.bind(this, function(a) { + this.activate() + }); + mxEvent.addListener(this.title, "mousedown", e); + mxEvent.addListener(this.table, "mousedown", e); + mxClient.IS_TOUCH && (mxEvent.addListener(this.title, "touchstart", e), mxEvent.addListener(this.table, "touchstart", e)); + this.hide() +}; +mxWindow.prototype.setTitle = function(a) { + for (var b = this.title.firstChild; null != b;) { + var c = b.nextSibling; + b.nodeType == mxConstants.NODETYPE_TEXT && b.parentNode.removeChild(b); + b = c + } + mxUtils.write(this.title, a || "") +}; +mxWindow.prototype.setScrollable = function(a) { + 0 > navigator.userAgent.indexOf("Presto/2.5") && (this.contentWrapper.style.overflow = a ? "auto" : "hidden") +}; +mxWindow.prototype.activate = function() { + if (mxWindow.activeWindow != this) { + var a = mxUtils.getCurrentStyle(this.getElement()), + a = null != a ? a.zIndex : 3; + if (mxWindow.activeWindow) { + var b = mxWindow.activeWindow.getElement(); + null != b && null != b.style && (b.style.zIndex = a) + } + b = mxWindow.activeWindow; + this.getElement().style.zIndex = parseInt(a) + 1; + mxWindow.activeWindow = this; + this.fireEvent(new mxEventObject(mxEvent.ACTIVATE, "previousWindow", b)) + } +}; +mxWindow.prototype.getElement = function() { + return this.div +}; +mxWindow.prototype.fit = function() { + mxUtils.fit(this.div) +}; +mxWindow.prototype.isResizable = function() { + return null != this.resize ? "none" != this.resize.style.display : !1 +}; +mxWindow.prototype.setResizable = function(a) { + a ? null == this.resize ? (this.resize = document.createElement("img"), this.resize.style.position = "absolute", this.resize.style.bottom = "2px", this.resize.style.right = "2px", this.resize.setAttribute( + "src", mxClient.imageBasePath + "/resize.gif"), this.resize.style.cursor = "nw-resize", mxEvent.addGestureListeners(this.resize, mxUtils.bind(this, function(a) { + this.activate(); + var c = mxEvent.getClientX(a), + d = mxEvent.getClientY(a), + e = this.div.offsetWidth, + f = this.div.offsetHeight, + g = mxUtils.bind(this, + function(a) { + var b = mxEvent.getClientX(a) - c, + g = mxEvent.getClientY(a) - d; + this.setSize(e + b, f + g); + this.fireEvent(new mxEventObject(mxEvent.RESIZE, "event", a)); + mxEvent.consume(a) + }), + h = mxUtils.bind(this, function(a) { + mxEvent.removeGestureListeners(document, null, g, h); + this.fireEvent(new mxEventObject(mxEvent.RESIZE_END, "event", a)); + mxEvent.consume(a) + }); + mxEvent.addGestureListeners(document, null, g, h); + this.fireEvent(new mxEventObject(mxEvent.RESIZE_START, "event", a)); + mxEvent.consume(a) + }), null, null), this.div.appendChild(this.resize)) : + this.resize.style.display = "inline" : null != this.resize && (this.resize.style.display = "none") +}; +mxWindow.prototype.setSize = function(a, b) { + a = Math.max(this.minimumSize.width, a); + b = Math.max(this.minimumSize.height, b); + mxClient.IS_IE || (this.div.style.width = a + "px", this.div.style.height = b + "px"); + this.table.style.width = a + "px"; + this.table.style.height = b + "px"; + mxClient.IS_IE || (this.contentWrapper.style.height = this.div.offsetHeight - this.title.offsetHeight - 2 + "px") +}; +mxWindow.prototype.setMinimizable = function(a) { + this.minimize.style.display = a ? "" : "none" +}; +mxWindow.prototype.getMinimumSize = function() { + return new mxRectangle(0, 0, 0, this.title.offsetHeight) +}; +mxWindow.prototype.installMinimizeHandler = function() { + this.minimize = document.createElement("img"); + this.minimize.setAttribute("src", this.minimizeImage); + this.minimize.setAttribute("align", "right"); + this.minimize.setAttribute("title", "Minimize"); + this.minimize.style.cursor = "pointer"; + this.minimize.style.marginRight = "1px"; + this.minimize.style.display = "none"; + this.title.appendChild(this.minimize); + var a = !1, + b = null, + c = null, + d = mxUtils.bind(this, function(d) { + this.activate(); + if (a) a = !1, this.minimize.setAttribute("src", + this.minimizeImage), this.minimize.setAttribute("title", "Minimize"), this.contentWrapper.style.display = "", this.maximize.style.display = b, mxClient.IS_IE || (this.div.style.height = + c), this.table.style.height = c, null != this.resize && (this.resize.style.visibility = ""), this.fireEvent(new mxEventObject(mxEvent.NORMALIZE, "event", d)); + else { + a = !0; + this.minimize.setAttribute("src", this.normalizeImage); + this.minimize.setAttribute("title", "Normalize"); + this.contentWrapper.style.display = "none"; + b = this.maximize.style.display; + this.maximize.style.display = "none"; + c = this.table.style.height; + var f = this.getMinimumSize(); + 0 < f.height && (mxClient.IS_IE || (this.div.style.height = f.height + "px"), this.table.style.height = f.height + "px"); + 0 < f.width && (mxClient.IS_IE || (this.div.style.width = f.width + "px"), this.table.style.width = f.width + "px"); + null != this.resize && (this.resize.style.visibility = "hidden"); + this.fireEvent(new mxEventObject(mxEvent.MINIMIZE, "event", d)) + } + mxEvent.consume(d) + }); + mxEvent.addListener(this.minimize, "mousedown", d); + mxClient.IS_TOUCH && + mxEvent.addListener(this.minimize, "touchstart", d) +}; +mxWindow.prototype.setMaximizable = function(a) { + this.maximize.style.display = a ? "" : "none" +}; +mxWindow.prototype.installMaximizeHandler = function() { + this.maximize = document.createElement("img"); + this.maximize.setAttribute("src", this.maximizeImage); + this.maximize.setAttribute("align", "right"); + this.maximize.setAttribute("title", "Maximize"); + this.maximize.style.cursor = "default"; + this.maximize.style.marginLeft = "1px"; + this.maximize.style.cursor = "pointer"; + this.maximize.style.display = "none"; + this.title.appendChild(this.maximize); + var a = !1, + b = null, + c = null, + d = null, + e = null, + f = mxUtils.bind(this, function(f) { + this.activate(); + if ("none" != this.maximize.style.display) { + if (a) { + a = !1; + this.maximize.setAttribute("src", this.maximizeImage); + this.maximize.setAttribute("title", "Maximize"); + this.contentWrapper.style.display = ""; + this.minimize.style.visibility = ""; + this.div.style.left = b + "px"; + this.div.style.top = c + "px"; + if (!mxClient.IS_IE && (this.div.style.height = d, this.div.style.width = e, h = mxUtils.getCurrentStyle(this.contentWrapper), "auto" == h.overflow || null != this.resize)) this.contentWrapper + .style.height = this.div.offsetHeight - this.title.offsetHeight - + 2 + "px"; + this.table.style.height = d; + this.table.style.width = e; + null != this.resize && (this.resize.style.visibility = ""); + this.fireEvent(new mxEventObject(mxEvent.NORMALIZE, "event", f)) + } else { + a = !0; + this.maximize.setAttribute("src", this.normalizeImage); + this.maximize.setAttribute("title", "Normalize"); + this.contentWrapper.style.display = ""; + this.minimize.style.visibility = "hidden"; + b = parseInt(this.div.style.left); + c = parseInt(this.div.style.top); + d = this.table.style.height; + e = this.table.style.width; + this.div.style.left = "0px"; + this.div.style.top = "0px"; + mxClient.IS_IE || (this.div.style.height = document.body.clientHeight - 2 + "px", this.div.style.width = document.body.clientWidth - 2 + "px"); + this.table.style.width = document.body.clientWidth - 2 + "px"; + this.table.style.height = document.body.clientHeight - 2 + "px"; + null != this.resize && (this.resize.style.visibility = "hidden"); + if (!mxClient.IS_IE) { + var h = mxUtils.getCurrentStyle(this.contentWrapper); + if ("auto" == h.overflow || null != this.resize) this.contentWrapper.style.height = this.div.offsetHeight - this.title.offsetHeight - + 2 + "px" + } + this.fireEvent(new mxEventObject(mxEvent.MAXIMIZE, "event", f)) + } + mxEvent.consume(f) + } + }); + mxEvent.addGestureListeners(this.maximize, f); + mxEvent.addListener(this.title, "dblclick", f) +}; +mxWindow.prototype.installMoveHandler = function() { + this.title.style.cursor = "move"; + mxEvent.addGestureListeners(this.title, mxUtils.bind(this, function(a) { + var b = mxEvent.getClientX(a), + c = mxEvent.getClientY(a), + d = this.getX(), + e = this.getY(), + f = mxUtils.bind(this, function(a) { + var f = mxEvent.getClientX(a) - b, + g = mxEvent.getClientY(a) - c; + this.setLocation(d + f, e + g); + this.fireEvent(new mxEventObject(mxEvent.MOVE, "event", a)); + mxEvent.consume(a) + }), + g = mxUtils.bind(this, function(a) { + mxEvent.removeGestureListeners(document, null, f, + g); + this.fireEvent(new mxEventObject(mxEvent.MOVE_END, "event", a)); + mxEvent.consume(a) + }); + mxEvent.addGestureListeners(document, null, f, g); + this.fireEvent(new mxEventObject(mxEvent.MOVE_START, "event", a)); + mxEvent.consume(a) + })) +}; +mxWindow.prototype.setLocation = function(a, b) { + this.div.style.left = a + "px"; + this.div.style.top = b + "px" +}; +mxWindow.prototype.getX = function() { + return parseInt(this.div.style.left) +}; +mxWindow.prototype.getY = function() { + return parseInt(this.div.style.top) +}; +mxWindow.prototype.installCloseHandler = function() { + this.closeImg = document.createElement("img"); + this.closeImg.setAttribute("src", this.closeImage); + this.closeImg.setAttribute("align", "right"); + this.closeImg.setAttribute("title", "Close"); + this.closeImg.style.marginLeft = "2px"; + this.closeImg.style.cursor = "pointer"; + this.closeImg.style.display = "none"; + this.title.insertBefore(this.closeImg, this.title.firstChild); + mxEvent.addGestureListeners(this.closeImg, mxUtils.bind(this, function(a) { + this.fireEvent(new mxEventObject(mxEvent.CLOSE, + "event", a)); + this.destroyOnClose ? this.destroy() : this.setVisible(!1); + mxEvent.consume(a) + })) +}; +mxWindow.prototype.setImage = function(a) { + this.image = document.createElement("img"); + this.image.setAttribute("src", a); + this.image.setAttribute("align", "left"); + this.image.style.marginRight = "4px"; + this.image.style.marginLeft = "0px"; + this.image.style.marginTop = "-2px"; + this.title.insertBefore(this.image, this.title.firstChild) +}; +mxWindow.prototype.setClosable = function(a) { + this.closeImg.style.display = a ? "" : "none" +}; +mxWindow.prototype.isVisible = function() { + return null != this.div ? "hidden" != this.div.style.visibility : !1 +}; +mxWindow.prototype.setVisible = function(a) { + null != this.div && this.isVisible() != a && (a ? this.show() : this.hide()) +}; +mxWindow.prototype.show = function() { + this.div.style.visibility = ""; + this.activate(); + var a = mxUtils.getCurrentStyle(this.contentWrapper); + if (!mxClient.IS_IE && ("auto" == a.overflow || null != this.resize)) this.contentWrapper.style.height = this.div.offsetHeight - this.title.offsetHeight - 2 + "px"; + this.fireEvent(new mxEventObject(mxEvent.SHOW)) +}; +mxWindow.prototype.hide = function() { + this.div.style.visibility = "hidden"; + this.fireEvent(new mxEventObject(mxEvent.HIDE)) +}; +mxWindow.prototype.destroy = function() { + this.fireEvent(new mxEventObject(mxEvent.DESTROY)); + null != this.div && (mxEvent.release(this.div), this.div.parentNode.removeChild(this.div), this.div = null); + this.contentWrapper = this.content = this.title = null +}; + +function mxForm(a) { + this.table = document.createElement("table"); + this.table.className = a; + this.body = document.createElement("tbody"); + this.table.appendChild(this.body) +} +mxForm.prototype.table = null; +mxForm.prototype.body = !1; +mxForm.prototype.getTable = function() { + return this.table +}; +mxForm.prototype.addButtons = function(a, b) { + var c = document.createElement("tr"), + d = document.createElement("td"); + c.appendChild(d); + var d = document.createElement("td"), + e = document.createElement("button"); + mxUtils.write(e, mxResources.get("ok") || "OK"); + d.appendChild(e); + mxEvent.addListener(e, "click", function() { + a() + }); + e = document.createElement("button"); + mxUtils.write(e, mxResources.get("cancel") || "Cancel"); + d.appendChild(e); + mxEvent.addListener(e, "click", function() { + b() + }); + c.appendChild(d); + this.body.appendChild(c) +}; +mxForm.prototype.addText = function(a, b) { + var c = document.createElement("input"); + c.setAttribute("type", "text"); + c.value = b; + return this.addField(a, c) +}; +mxForm.prototype.addCheckbox = function(a, b) { + var c = document.createElement("input"); + c.setAttribute("type", "checkbox"); + this.addField(a, c); + b && (c.checked = !0); + return c +}; +mxForm.prototype.addTextarea = function(a, b, c) { + var d = document.createElement("textarea"); + mxClient.IS_NS && c--; + d.setAttribute("rows", c || 2); + d.value = b; + return this.addField(a, d) +}; +mxForm.prototype.addCombo = function(a, b, c) { + var d = document.createElement("select"); + null != c && d.setAttribute("size", c); + b && d.setAttribute("multiple", "true"); + return this.addField(a, d) +}; +mxForm.prototype.addOption = function(a, b, c, d) { + var e = document.createElement("option"); + mxUtils.writeln(e, b); + e.setAttribute("value", c); + d && e.setAttribute("selected", d); + a.appendChild(e) +}; +mxForm.prototype.addField = function(a, b) { + var c = document.createElement("tr"), + d = document.createElement("td"); + mxUtils.write(d, a); + c.appendChild(d); + d = document.createElement("td"); + d.appendChild(b); + c.appendChild(d); + this.body.appendChild(c); + return b +}; + +function mxImage(a, b, c) { + this.src = a; + this.width = b; + this.height = c +} +mxImage.prototype.src = null; +mxImage.prototype.width = null; +mxImage.prototype.height = null; + +function mxDivResizer(a, b) { + if ("div" == a.nodeName.toLowerCase()) { + null == b && (b = window); + this.div = a; + var c = mxUtils.getCurrentStyle(a); + null != c && (this.resizeWidth = "auto" == c.width, this.resizeHeight = "auto" == c.height); + mxEvent.addListener(b, "resize", mxUtils.bind(this, function(a) { + this.handlingResize || (this.handlingResize = !0, this.resize(), this.handlingResize = !1) + })); + this.resize() + } +} +mxDivResizer.prototype.resizeWidth = !0; +mxDivResizer.prototype.resizeHeight = !0; +mxDivResizer.prototype.handlingResize = !1; +mxDivResizer.prototype.resize = function() { + var a = this.getDocumentWidth(), + b = this.getDocumentHeight(), + c = parseInt(this.div.style.left), + d = parseInt(this.div.style.right), + e = parseInt(this.div.style.top), + f = parseInt(this.div.style.bottom); + this.resizeWidth && (!isNaN(c) && !isNaN(d) && 0 <= c && 0 <= d && 0 < a - d - c) && (this.div.style.width = a - d - c + "px"); + this.resizeHeight && (!isNaN(e) && !isNaN(f) && 0 <= e && 0 <= f && 0 < b - e - f) && (this.div.style.height = b - e - f + "px") +}; +mxDivResizer.prototype.getDocumentWidth = function() { + return document.body.clientWidth +}; +mxDivResizer.prototype.getDocumentHeight = function() { + return document.body.clientHeight +}; + +function mxDragSource(a, b) { + this.element = a; + this.dropHandler = b; + mxEvent.addGestureListeners(a, mxUtils.bind(this, this.mouseDown)) +} +mxDragSource.prototype.element = null; +mxDragSource.prototype.dropHandler = null; +mxDragSource.prototype.dragOffset = null; +mxDragSource.prototype.dragElement = null; +mxDragSource.prototype.previewElement = null; +mxDragSource.prototype.enabled = !0; +mxDragSource.prototype.currentGraph = null; +mxDragSource.prototype.currentDropTarget = null; +mxDragSource.prototype.currentPoint = null; +mxDragSource.prototype.currentGuide = null; +mxDragSource.prototype.currentHighlight = null; +mxDragSource.prototype.autoscroll = !0; +mxDragSource.prototype.guidesEnabled = !0; +mxDragSource.prototype.gridEnabled = !0; +mxDragSource.prototype.highlightDropTargets = !0; +mxDragSource.prototype.dragElementZIndex = 100; +mxDragSource.prototype.dragElementOpacity = 70; +mxDragSource.prototype.isEnabled = function() { + return this.enabled +}; +mxDragSource.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxDragSource.prototype.isGuidesEnabled = function() { + return this.guidesEnabled +}; +mxDragSource.prototype.setGuidesEnabled = function(a) { + this.guidesEnabled = a +}; +mxDragSource.prototype.isGridEnabled = function() { + return this.gridEnabled +}; +mxDragSource.prototype.setGridEnabled = function(a) { + this.gridEnabled = a +}; +mxDragSource.prototype.getGraphForEvent = function(a) { + return null +}; +mxDragSource.prototype.getDropTarget = function(a, b, c) { + return a.getCellAt(b, c) +}; +mxDragSource.prototype.createDragElement = function(a) { + return this.element.cloneNode(!0) +}; +mxDragSource.prototype.createPreviewElement = function(a) { + return null +}; +mxDragSource.prototype.mouseDown = function(a) { + this.enabled && (!mxEvent.isConsumed(a) && null == this.mouseMoveHandler) && (this.startDrag(a), this.mouseMoveHandler = mxUtils.bind(this, this.mouseMove), this.mouseUpHandler = mxUtils.bind( + this, this.mouseUp), mxEvent.addGestureListeners(document, null, this.mouseMoveHandler, this.mouseUpHandler), mxEvent.consume(a, !0, !1)) +}; +mxDragSource.prototype.startDrag = function(a) { + this.dragElement = this.createDragElement(a); + this.dragElement.style.position = "absolute"; + this.dragElement.style.zIndex = this.dragElementZIndex; + mxUtils.setOpacity(this.dragElement, this.dragElementOpacity) +}; +mxDragSource.prototype.stopDrag = function(a) { + null != this.dragElement && (null != this.dragElement.parentNode && this.dragElement.parentNode.removeChild(this.dragElement), this.dragElement = null) +}; +mxDragSource.prototype.graphContainsEvent = function(a, b) { + var c = mxEvent.getClientX(b), + d = mxEvent.getClientY(b), + e = mxUtils.getOffset(a.container), + f = mxUtils.getScrollOrigin(); + return c >= e.x - f.x && d >= e.y - f.y && c <= e.x - f.x + a.container.offsetWidth && d <= e.y - f.y + a.container.offsetHeight +}; +mxDragSource.prototype.mouseMove = function(a) { + var b = this.getGraphForEvent(a); + null != b && !this.graphContainsEvent(b, a) && (b = null); + b != this.currentGraph && (null != this.currentGraph && this.dragExit(this.currentGraph), this.currentGraph = b, null != this.currentGraph && this.dragEnter(this.currentGraph)); + null != this.currentGraph && this.dragOver(this.currentGraph, a); + if (null != this.dragElement && (null == this.previewElement || "visible" != this.previewElement.style.visibility)) { + var b = mxEvent.getClientX(a), + c = mxEvent.getClientY(a); + null == this.dragElement.parentNode && document.body.appendChild(this.dragElement); + this.dragElement.style.visibility = "visible"; + null != this.dragOffset && (b += this.dragOffset.x, c += this.dragOffset.y); + b += document.body.scrollLeft || document.documentElement.scrollLeft; + c += document.body.scrollTop || document.documentElement.scrollTop; + this.dragElement.style.left = b + "px"; + this.dragElement.style.top = c + "px" + } else null != this.dragElement && (this.dragElement.style.visibility = "hidden"); + mxEvent.consume(a) +}; +mxDragSource.prototype.mouseUp = function(a) { + if (null != this.currentGraph) { + if (null != this.currentPoint && (null == this.previewElement || "hidden" != this.previewElement.style.visibility)) { + var b = this.currentGraph.view.scale, + c = this.currentGraph.view.translate; + this.drop(this.currentGraph, a, this.currentDropTarget, this.currentPoint.x / b - c.x, this.currentPoint.y / b - c.y) + } + this.dragExit(this.currentGraph) + } + this.stopDrag(a); + mxEvent.removeGestureListeners(document, null, this.mouseMoveHandler, this.mouseUpHandler); + this.currentGraph = + this.mouseUpHandler = this.mouseMoveHandler = null; + mxEvent.consume(a) +}; +mxDragSource.prototype.dragEnter = function(a) { + a.isMouseDown = !0; + this.previewElement = this.createPreviewElement(a); + this.isGuidesEnabled() && null != this.previewElement && (this.currentGuide = new mxGuide(a, a.graphHandler.getGuideStates())); + this.highlightDropTargets && (this.currentHighlight = new mxCellHighlight(a, mxConstants.DROP_TARGET_COLOR)) +}; +mxDragSource.prototype.dragExit = function(a) { + this.currentPoint = this.currentDropTarget = null; + a.isMouseDown = !1; + null != this.previewElement && (null != this.previewElement.parentNode && this.previewElement.parentNode.removeChild(this.previewElement), this.previewElement = null); + null != this.currentGuide && (this.currentGuide.destroy(), this.currentGuide = null); + null != this.currentHighlight && (this.currentHighlight.destroy(), this.currentHighlight = null) +}; +mxDragSource.prototype.dragOver = function(a, b) { + var c = mxUtils.getOffset(a.container), + d = mxUtils.getScrollOrigin(a.container), + e = mxEvent.getClientX(b) - c.x + d.x, + c = mxEvent.getClientY(b) - c.y + d.y; + a.autoScroll && (null == this.autoscroll || this.autoscroll) && a.scrollPointToVisible(e, c, a.autoExtend); + null != this.currentHighlight && a.isDropEnabled() && (this.currentDropTarget = this.getDropTarget(a, e, c), d = a.getView().getState(this.currentDropTarget), this.currentHighlight.highlight(d)); + if (null != this.previewElement) { + null == this.previewElement.parentNode && + (a.container.appendChild(this.previewElement), this.previewElement.style.zIndex = "3", this.previewElement.style.position = "absolute"); + var d = this.isGridEnabled() && a.isGridEnabledEvent(b), + f = !0; + if (null != this.currentGuide && this.currentGuide.isEnabledForEvent(b)) var f = parseInt(this.previewElement.style.width), + g = parseInt(this.previewElement.style.height), + f = new mxRectangle(0, 0, f, g), + c = new mxPoint(e, c), + c = this.currentGuide.move(f, c, d), + f = !1, + e = c.x, + c = c.y; + else if (d) var d = a.view.scale, + g = a.view.translate, + h = a.gridSize / + 2, + e = (a.snap(e / d - g.x - h) + g.x) * d, + c = (a.snap(c / d - g.y - h) + g.y) * d; + null != this.currentGuide && f && this.currentGuide.hide(); + null != this.previewOffset && (e += this.previewOffset.x, c += this.previewOffset.y); + this.previewElement.style.left = Math.round(e) + "px"; + this.previewElement.style.top = Math.round(c) + "px"; + this.previewElement.style.visibility = "visible" + } + this.currentPoint = new mxPoint(e, c) +}; +mxDragSource.prototype.drop = function(a, b, c, d, e) { + this.dropHandler(a, b, c, d, e); + a.container.focus() +}; + +function mxToolbar(a) { + this.container = a +} +mxToolbar.prototype = new mxEventSource; +mxToolbar.prototype.constructor = mxToolbar; +mxToolbar.prototype.container = null; +mxToolbar.prototype.enabled = !0; +mxToolbar.prototype.noReset = !1; +mxToolbar.prototype.updateDefaultMode = !0; +mxToolbar.prototype.addItem = function(a, b, c, d, e, f) { + var g = document.createElement(null != b ? "img" : "button"), + h = e || (null != f ? "mxToolbarMode" : "mxToolbarItem"); + g.className = h; + g.setAttribute("src", b); + null != a && (null != b ? g.setAttribute("title", a) : mxUtils.write(g, a)); + this.container.appendChild(g); + null != c && (mxEvent.addListener(g, "click", c), mxClient.IS_TOUCH && mxEvent.addListener(g, "touchend", c)); + a = mxUtils.bind(this, function(a) { + null != d ? g.setAttribute("src", b) : g.style.backgroundColor = "" + }); + mxEvent.addGestureListeners(g, + mxUtils.bind(this, function(a) { + null != d ? g.setAttribute("src", d) : g.style.backgroundColor = "gray"; + if (null != f) { + null == this.menu && (this.menu = new mxPopupMenu, this.menu.init()); + var b = this.currentImg; + this.menu.isMenuShowing() && this.menu.hideMenu(); + b != g && (this.currentImg = g, this.menu.factoryMethod = f, b = new mxPoint(g.offsetLeft, g.offsetTop + g.offsetHeight), this.menu.popup(b.x, b.y, null, a), this.menu.isMenuShowing() && + (g.className = h + "Selected", this.menu.hideMenu = function() { + mxPopupMenu.prototype.hideMenu.apply(this); + g.className = h; + this.currentImg = null + })) + } + }), null, a); + mxEvent.addListener(g, "mouseout", a); + return g +}; +mxToolbar.prototype.addCombo = function(a) { + var b = document.createElement("div"); + b.style.display = "inline"; + b.className = "mxToolbarComboContainer"; + var c = document.createElement("select"); + c.className = a || "mxToolbarCombo"; + b.appendChild(c); + this.container.appendChild(b); + return c +}; +mxToolbar.prototype.addActionCombo = function(a, b) { + var c = document.createElement("select"); + c.className = b || "mxToolbarCombo"; + this.addOption(c, a, null); + mxEvent.addListener(c, "change", function(a) { + var b = c.options[c.selectedIndex]; + c.selectedIndex = 0; + null != b.funct && b.funct(a) + }); + this.container.appendChild(c); + return c +}; +mxToolbar.prototype.addOption = function(a, b, c) { + var d = document.createElement("option"); + mxUtils.writeln(d, b); + "function" == typeof c ? d.funct = c : d.setAttribute("value", c); + a.appendChild(d); + return d +}; +mxToolbar.prototype.addSwitchMode = function(a, b, c, d, e) { + var f = document.createElement("img"); + f.initialClassName = e || "mxToolbarMode"; + f.className = f.initialClassName; + f.setAttribute("src", b); + f.altIcon = d; + null != a && f.setAttribute("title", a); + mxEvent.addListener(f, "click", mxUtils.bind(this, function(a) { + a = this.selectedMode.altIcon; + null != a ? (this.selectedMode.altIcon = this.selectedMode.getAttribute("src"), this.selectedMode.setAttribute("src", a)) : this.selectedMode.className = this.selectedMode.initialClassName; + this.updateDefaultMode && + (this.defaultMode = f); + this.selectedMode = f; + a = f.altIcon; + null != a ? (f.altIcon = f.getAttribute("src"), f.setAttribute("src", a)) : f.className = f.initialClassName + "Selected"; + this.fireEvent(new mxEventObject(mxEvent.SELECT)); + c() + })); + this.container.appendChild(f); + null == this.defaultMode && (this.defaultMode = f, this.selectMode(f), c()); + return f +}; +mxToolbar.prototype.addMode = function(a, b, c, d, e, f) { + f = null != f ? f : !0; + var g = document.createElement(null != b ? "img" : "button"); + g.initialClassName = e || "mxToolbarMode"; + g.className = g.initialClassName; + g.setAttribute("src", b); + g.altIcon = d; + null != a && g.setAttribute("title", a); + this.enabled && f && (mxEvent.addListener(g, "click", mxUtils.bind(this, function(a) { + this.selectMode(g, c); + this.noReset = !1 + })), mxEvent.addListener(g, "dblclick", mxUtils.bind(this, function(a) { + this.selectMode(g, c); + this.noReset = !0 + })), null == this.defaultMode && + (this.defaultMode = g, this.defaultFunction = c, this.selectMode(g, c))); + this.container.appendChild(g); + return g +}; +mxToolbar.prototype.selectMode = function(a, b) { + if (this.selectedMode != a) { + if (null != this.selectedMode) { + var c = this.selectedMode.altIcon; + null != c ? (this.selectedMode.altIcon = this.selectedMode.getAttribute("src"), this.selectedMode.setAttribute("src", c)) : this.selectedMode.className = this.selectedMode.initialClassName + } + this.selectedMode = a; + c = this.selectedMode.altIcon; + null != c ? (this.selectedMode.altIcon = this.selectedMode.getAttribute("src"), this.selectedMode.setAttribute("src", c)) : this.selectedMode.className = this.selectedMode.initialClassName + + "Selected"; + this.fireEvent(new mxEventObject(mxEvent.SELECT, "function", b)) + } +}; +mxToolbar.prototype.resetMode = function(a) { + (a || !this.noReset) && this.selectedMode != this.defaultMode && this.selectMode(this.defaultMode, this.defaultFunction) +}; +mxToolbar.prototype.addSeparator = function(a) { + return this.addItem(null, a, null) +}; +mxToolbar.prototype.addBreak = function() { + mxUtils.br(this.container) +}; +mxToolbar.prototype.addLine = function() { + var a = document.createElement("hr"); + a.style.marginRight = "6px"; + a.setAttribute("size", "1"); + this.container.appendChild(a) +}; +mxToolbar.prototype.destroy = function() { + mxEvent.release(this.container); + this.selectedMode = this.defaultFunction = this.defaultMode = this.container = null; + null != this.menu && this.menu.destroy() +}; + +function mxSession(a, b, c, d) { + this.model = a; + this.urlInit = b; + this.urlPoll = c; + this.urlNotify = d; + null != a && (this.codec = new mxCodec, this.codec.lookup = function(b) { + return a.getCell(b) + }); + a.addListener(mxEvent.NOTIFY, mxUtils.bind(this, function(a, b) { + var c = b.getProperty("edit"); + (null != c && this.debug || this.connected && !this.suspended) && this.notify("\x3cedit\x3e" + this.encodeChanges(c.changes, c.undone) + "\x3c/edit\x3e") + })) +} +mxSession.prototype = new mxEventSource; +mxSession.prototype.constructor = mxSession; +mxSession.prototype.model = null; +mxSession.prototype.urlInit = null; +mxSession.prototype.urlPoll = null; +mxSession.prototype.urlNotify = null; +mxSession.prototype.codec = null; +mxSession.prototype.linefeed = "\x26#xa;"; +mxSession.prototype.escapePostData = !0; +mxSession.prototype.significantRemoteChanges = !0; +mxSession.prototype.sent = 0; +mxSession.prototype.received = 0; +mxSession.prototype.debug = !1; +mxSession.prototype.connected = !1; +mxSession.prototype.suspended = !1; +mxSession.prototype.polling = !1; +mxSession.prototype.start = function() { + this.debug ? (this.connected = !0, this.fireEvent(new mxEventObject(mxEvent.CONNECT))) : this.connected || this.get(this.urlInit, mxUtils.bind(this, function(a) { + this.connected = !0; + this.fireEvent(new mxEventObject(mxEvent.CONNECT)); + this.poll() + })) +}; +mxSession.prototype.suspend = function() { + this.connected && !this.suspended && (this.suspended = !0, this.fireEvent(new mxEventObject(mxEvent.SUSPEND))) +}; +mxSession.prototype.resume = function(a, b, c) { + this.connected && this.suspended && (this.suspended = !1, this.fireEvent(new mxEventObject(mxEvent.RESUME)), this.polling || this.poll()) +}; +mxSession.prototype.stop = function(a) { + this.connected && (this.connected = !1); + this.fireEvent(new mxEventObject(mxEvent.DISCONNECT, "reason", a)) +}; +mxSession.prototype.poll = function() { + this.connected && !this.suspended && null != this.urlPoll ? (this.polling = !0, this.get(this.urlPoll, mxUtils.bind(this, function() { + this.poll() + }))) : this.polling = !1 +}; +mxSession.prototype.notify = function(a, b, c) { + null != a && 0 < a.length && (null != this.urlNotify && (this.debug ? (mxLog.show(), mxLog.debug("mxSession.notify: " + this.urlNotify + " xml\x3d" + a)) : (a = "\x3cmessage\x3e\x3cdelta\x3e" + a + + "\x3c/delta\x3e\x3c/message\x3e", this.escapePostData && (a = encodeURIComponent(a)), mxUtils.post(this.urlNotify, "xml\x3d" + a, b, c))), this.sent += a.length, this.fireEvent(new mxEventObject( + mxEvent.NOTIFY, "url", this.urlNotify, "xml", a))) +}; +mxSession.prototype.get = function(a, b, c) { + if ("undefined" != typeof mxUtils) { + var d = mxUtils.bind(this, function(a) { + null != c ? c(a) : this.stop(a) + }); + mxUtils.get(a, mxUtils.bind(this, function(c) { + if ("undefined" != typeof mxUtils) + if (c.isReady() && 404 != c.getStatus()) { + if (this.received += c.getText().length, this.fireEvent(new mxEventObject(mxEvent.GET, "url", a, "request", c)), this.isValidResponse(c)) { + if (0 < c.getText().length) { + var f = c.getDocumentElement(); + null == f ? d("Invalid response: " + c.getText()) : this.receive(f) + } + null != b && b(c) + } + } else d("Response not ready") + }), + function(a) { + d("Transmission error") + }) + } +}; +mxSession.prototype.isValidResponse = function(a) { + return 0 > a.getText().indexOf("\x3c?php") +}; +mxSession.prototype.encodeChanges = function(a, b) { + for (var c = "", d = b ? -1 : 1, e = b ? a.length - 1 : 0; 0 <= e && e < a.length; e += d) var f = this.codec.encode(a[e]), + c = c + mxUtils.getXml(f, this.linefeed); + return c +}; +mxSession.prototype.receive = function(a) { + if (null != a && a.nodeType == mxConstants.NODETYPE_ELEMENT) { + var b = a.getAttribute("namespace"); + null != b && (this.model.prefix = b + "-"); + for (b = a.firstChild; null != b;) { + var c = b.nodeName.toLowerCase(); + "state" == c ? this.processState(b) : "delta" == c && this.processDelta(b); + b = b.nextSibling + } + this.fireEvent(new mxEventObject(mxEvent.RECEIVE, "node", a)) + } +}; +mxSession.prototype.processState = function(a) { + (new mxCodec(a.ownerDocument)).decode(a.firstChild, this.model) +}; +mxSession.prototype.processDelta = function(a) { + for (a = a.firstChild; null != a;) "edit" == a.nodeName && this.processEdit(a), a = a.nextSibling +}; +mxSession.prototype.processEdit = function(a) { + a = this.decodeChanges(a); + if (0 < a.length) { + var b = this.createUndoableEdit(a); + this.model.fireEvent(new mxEventObject(mxEvent.CHANGE, "edit", b, "changes", a)); + this.model.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", b)); + this.fireEvent(new mxEventObject(mxEvent.FIRED, "edit", b)) + } +}; +mxSession.prototype.createUndoableEdit = function(a) { + var b = new mxUndoableEdit(this.model, this.significantRemoteChanges); + b.changes = a; + b.notify = function() { + b.source.fireEvent(new mxEventObject(mxEvent.CHANGE, "edit", b, "changes", b.changes)); + b.source.fireEvent(new mxEventObject(mxEvent.NOTIFY, "edit", b, "changes", b.changes)) + }; + return b +}; +mxSession.prototype.decodeChanges = function(a) { + this.codec.document = a.ownerDocument; + var b = []; + for (a = a.firstChild; null != a;) { + var c = this.decodeChange(a); + null != c && b.push(c); + a = a.nextSibling + } + return b +}; +mxSession.prototype.decodeChange = function(a) { + var b = null; + a.nodeType == mxConstants.NODETYPE_ELEMENT && (b = "mxRootChange" == a.nodeName ? (new mxCodec(a.ownerDocument)).decode(a) : this.codec.decode(a), null != b && (b.model = this.model, b.execute(), + "mxChildChange" == a.nodeName && null == b.parent && this.cellRemoved(b.child))); + return b +}; +mxSession.prototype.cellRemoved = function(a, b) { + this.codec.putObject(a.getId(), a); + for (var c = this.model.getChildCount(a), d = 0; d < c; d++) this.cellRemoved(this.model.getChildAt(a, d)) +}; + +function mxUndoableEdit(a, b) { + this.source = a; + this.changes = []; + this.significant = null != b ? b : !0 +} +mxUndoableEdit.prototype.source = null; +mxUndoableEdit.prototype.changes = null; +mxUndoableEdit.prototype.significant = null; +mxUndoableEdit.prototype.undone = !1; +mxUndoableEdit.prototype.redone = !1; +mxUndoableEdit.prototype.isEmpty = function() { + return 0 == this.changes.length +}; +mxUndoableEdit.prototype.isSignificant = function() { + return this.significant +}; +mxUndoableEdit.prototype.add = function(a) { + this.changes.push(a) +}; +mxUndoableEdit.prototype.notify = function() {}; +mxUndoableEdit.prototype.die = function() {}; +mxUndoableEdit.prototype.undo = function() { + if (!this.undone) { + this.source.fireEvent(new mxEventObject(mxEvent.START_EDIT)); + for (var a = this.changes.length - 1; 0 <= a; a--) { + var b = this.changes[a]; + null != b.execute ? b.execute() : null != b.undo && b.undo(); + this.source.fireEvent(new mxEventObject(mxEvent.EXECUTED, "change", b)) + } + this.undone = !0; + this.redone = !1; + this.source.fireEvent(new mxEventObject(mxEvent.END_EDIT)) + } + this.notify() +}; +mxUndoableEdit.prototype.redo = function() { + if (!this.redone) { + this.source.fireEvent(new mxEventObject(mxEvent.START_EDIT)); + for (var a = this.changes.length, b = 0; b < a; b++) { + var c = this.changes[b]; + null != c.execute ? c.execute() : null != c.redo && c.redo(); + this.source.fireEvent(new mxEventObject(mxEvent.EXECUTED, "change", c)) + } + this.undone = !1; + this.redone = !0; + this.source.fireEvent(new mxEventObject(mxEvent.END_EDIT)) + } + this.notify() +}; + +function mxUndoManager(a) { + this.size = null != a ? a : 100; + this.clear() +} +mxUndoManager.prototype = new mxEventSource; +mxUndoManager.prototype.constructor = mxUndoManager; +mxUndoManager.prototype.size = null; +mxUndoManager.prototype.history = null; +mxUndoManager.prototype.indexOfNextAdd = 0; +mxUndoManager.prototype.isEmpty = function() { + return 0 == this.history.length +}; +mxUndoManager.prototype.clear = function() { + this.history = []; + this.indexOfNextAdd = 0; + this.fireEvent(new mxEventObject(mxEvent.CLEAR)) +}; +mxUndoManager.prototype.canUndo = function() { + return 0 < this.indexOfNextAdd +}; +mxUndoManager.prototype.undo = function() { + for (; 0 < this.indexOfNextAdd;) { + var a = this.history[--this.indexOfNextAdd]; + a.undo(); + if (a.isSignificant()) { + this.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", a)); + break + } + } +}; +mxUndoManager.prototype.canRedo = function() { + return this.indexOfNextAdd < this.history.length +}; +mxUndoManager.prototype.redo = function() { + for (var a = this.history.length; this.indexOfNextAdd < a;) { + var b = this.history[this.indexOfNextAdd++]; + b.redo(); + if (b.isSignificant()) { + this.fireEvent(new mxEventObject(mxEvent.REDO, "edit", b)); + break + } + } +}; +mxUndoManager.prototype.undoableEditHappened = function(a) { + this.trim(); + 0 < this.size && this.size == this.history.length && this.history.shift(); + this.history.push(a); + this.indexOfNextAdd = this.history.length; + this.fireEvent(new mxEventObject(mxEvent.ADD, "edit", a)) +}; +mxUndoManager.prototype.trim = function() { + if (this.history.length > this.indexOfNextAdd) + for (var a = this.history.splice(this.indexOfNextAdd, this.history.length - this.indexOfNextAdd), b = 0; b < a.length; b++) a[b].die() +}; +var mxUrlConverter = function(a) { + var b = !0, + c = null, + d = null; + return { + isEnabled: function() { + return b + }, + setEnabled: function(a) { + b = a + }, + getBaseUrl: function() { + return c + }, + setBaseUrl: function(a) { + c = a + }, + getBaseDomain: function() { + return c + }, + setBaseDomain: function(a) { + c = a + }, + isRelativeUrl: function(a) { + return "http://" != a.substring(0, 7) && "https://" != a.substring(0, 8) && "data:image" != a.substring(0, 10) + }, + convert: function(a) { + if (b && this.isRelativeUrl(a)) { + if (null == c) { + d = location.protocol + "//" + location.host; + c = d + location.pathname; + var f = c.lastIndexOf("/"); + 0 < f && (c = c.substring(0, f + 1)) + } + a = "/" == a.charAt(0) ? d + a : c + a + } + return a + } + } +}; + +function mxPanningManager(a) { + this.thread = null; + this.active = !1; + this.dy = this.dx = this.t0y = this.t0x = this.tdy = this.tdx = 0; + this.scrollbars = !1; + this.scrollTop = this.scrollLeft = 0; + this.mouseListener = { + mouseDown: function(a, b) {}, + mouseMove: function(a, b) {}, + mouseUp: mxUtils.bind(this, function(a, b) { + this.active && this.stop() + }) + }; + a.addMouseListener(this.mouseListener); + mxEvent.addListener(document, "mouseup", mxUtils.bind(this, function() { + this.active && this.stop() + })); + var b = mxUtils.bind(this, function() { + this.scrollbars = mxUtils.hasScrollbars(a.container); + this.scrollLeft = a.container.scrollLeft; + this.scrollTop = a.container.scrollTop; + return window.setInterval(mxUtils.bind(this, function() { + this.tdx -= this.dx; + this.tdy -= this.dy; + if (this.scrollbars) { + var b = -a.container.scrollLeft - Math.ceil(this.dx), + d = -a.container.scrollTop - Math.ceil(this.dy); + a.panGraph(b, d); + a.panDx = this.scrollLeft - a.container.scrollLeft; + a.panDy = this.scrollTop - a.container.scrollTop; + a.fireEvent(new mxEventObject(mxEvent.PAN)) + } else a.panGraph(this.getDx(), this.getDy()) + }), this.delay) + }); + this.isActive = + function() { + return active + }; + this.getDx = function() { + return Math.round(this.tdx) + }; + this.getDy = function() { + return Math.round(this.tdy) + }; + this.start = function() { + this.t0x = a.view.translate.x; + this.t0y = a.view.translate.y; + this.active = !0 + }; + this.panTo = function(c, d, e, f) { + this.active || this.start(); + this.scrollLeft = a.container.scrollLeft; + this.scrollTop = a.container.scrollTop; + f = null != f ? f : 0; + var g = a.container; + this.dx = c + (null != e ? e : 0) - g.scrollLeft - g.clientWidth; + 0 > this.dx && Math.abs(this.dx) < this.border ? this.dx = this.border + this.dx : + this.dx = this.handleMouseOut ? Math.max(this.dx, 0) : 0; + 0 == this.dx && (this.dx = c - g.scrollLeft, this.dx = 0 < this.dx && this.dx < this.border ? this.dx - this.border : this.handleMouseOut ? Math.min(0, this.dx) : 0); + this.dy = d + f - g.scrollTop - g.clientHeight; + 0 > this.dy && Math.abs(this.dy) < this.border ? this.dy = this.border + this.dy : this.dy = this.handleMouseOut ? Math.max(this.dy, 0) : 0; + 0 == this.dy && (this.dy = d - g.scrollTop, this.dy = 0 < this.dy && this.dy < this.border ? this.dy - this.border : this.handleMouseOut ? Math.min(0, this.dy) : 0); + 0 != this.dx || 0 != this.dy ? + (this.dx *= this.damper, this.dy *= this.damper, null == this.thread && (this.thread = b())) : null != this.thread && (window.clearInterval(this.thread), this.thread = null) + }; + this.stop = function() { + if (this.active) + if (this.active = !1, null != this.thread && (window.clearInterval(this.thread), this.thread = null), this.tdy = this.tdx = 0, this.scrollbars) a.panDx = 0, a.panDy = 0, a.fireEvent(new mxEventObject( + mxEvent.PAN)); + else { + var b = a.panDx, + d = a.panDy; + if (0 != b || 0 != d) a.panGraph(0, 0), a.view.setTranslate(this.t0x + b / a.view.scale, this.t0y + d / a.view.scale) + } + }; + this.destroy = function() { + a.removeMouseListener(this.mouseListener) + } +} +mxPanningManager.prototype.damper = 1 / 6; +mxPanningManager.prototype.delay = 10; +mxPanningManager.prototype.handleMouseOut = !0; +mxPanningManager.prototype.border = 0; + +function mxPopupMenu(a) { + this.factoryMethod = a; + null != a && this.init() +} +mxPopupMenu.prototype = new mxEventSource; +mxPopupMenu.prototype.constructor = mxPopupMenu; +mxPopupMenu.prototype.submenuImage = mxClient.imageBasePath + "/submenu.gif"; +mxPopupMenu.prototype.zIndex = 10006; +mxPopupMenu.prototype.factoryMethod = null; +mxPopupMenu.prototype.useLeftButtonForPopup = !1; +mxPopupMenu.prototype.enabled = !0; +mxPopupMenu.prototype.itemCount = 0; +mxPopupMenu.prototype.autoExpand = !1; +mxPopupMenu.prototype.smartSeparators = !1; +mxPopupMenu.prototype.labels = !0; +mxPopupMenu.prototype.init = function() { + this.table = document.createElement("table"); + this.table.className = "mxPopupMenu"; + this.tbody = document.createElement("tbody"); + this.table.appendChild(this.tbody); + this.div = document.createElement("div"); + this.div.className = "mxPopupMenu"; + this.div.style.display = "inline"; + this.div.style.zIndex = this.zIndex; + this.div.appendChild(this.table); + mxEvent.disableContextMenu(this.div) +}; +mxPopupMenu.prototype.isEnabled = function() { + return this.enabled +}; +mxPopupMenu.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxPopupMenu.prototype.isPopupTrigger = function(a) { + return a.isPopupTrigger() || this.useLeftButtonForPopup && mxEvent.isLeftMouseButton(a.getEvent()) +}; +mxPopupMenu.prototype.addItem = function(a, b, c, d, e, f) { + d = d || this; + this.itemCount++; + d.willAddSeparator && (d.containsItems && this.addSeparator(d, !0), d.willAddSeparator = !1); + d.containsItems = !0; + var g = document.createElement("tr"); + g.className = "mxPopupMenuItem"; + var h = document.createElement("td"); + h.className = "mxPopupMenuIcon"; + null != b ? (e = document.createElement("img"), e.src = b, h.appendChild(e)) : null != e && (b = document.createElement("div"), b.className = e, h.appendChild(b)); + g.appendChild(h); + this.labels && (h = document.createElement("td"), + h.className = "mxPopupMenuItem" + (null != f && !f ? " disabled" : ""), mxUtils.write(h, a), h.align = "left", g.appendChild(h), a = document.createElement("td"), a.className = + "mxPopupMenuItem" + (null != f && !f ? " disabled" : ""), a.style.paddingRight = "6px", a.style.textAlign = "right", g.appendChild(a), null == d.div && this.createSubmenu(d)); + d.tbody.appendChild(g); + if (null == f || f) mxEvent.addGestureListeners(g, mxUtils.bind(this, function(a) { + this.eventReceiver = g; + d.activeRow != g && d.activeRow != d && (null != d.activeRow && null != d.activeRow.div.parentNode && + this.hideSubmenu(d), null != g.div && (this.showSubmenu(d, g), d.activeRow = g)); + mxEvent.consume(a) + }), mxUtils.bind(this, function(a) { + d.activeRow != g && d.activeRow != d && (null != d.activeRow && null != d.activeRow.div.parentNode && this.hideSubmenu(d), this.autoExpand && null != g.div && (this.showSubmenu(d, g), d.activeRow = + g)); + g.className = "mxPopupMenuItemHover" + }), mxUtils.bind(this, function(a) { + this.eventReceiver == g && (d.activeRow != g && this.hideMenu(), null != c && c(a)); + this.eventReceiver = null; + mxEvent.consume(a) + })), mxEvent.addListener(g, + "mouseout", mxUtils.bind(this, function(a) { + g.className = "mxPopupMenuItem" + })); + return g +}; +mxPopupMenu.prototype.createSubmenu = function(a) { + a.table = document.createElement("table"); + a.table.className = "mxPopupMenu"; + a.tbody = document.createElement("tbody"); + a.table.appendChild(a.tbody); + a.div = document.createElement("div"); + a.div.className = "mxPopupMenu"; + a.div.style.position = "absolute"; + a.div.style.display = "inline"; + a.div.style.zIndex = this.zIndex; + a.div.appendChild(a.table); + var b = document.createElement("img"); + b.setAttribute("src", this.submenuImage); + td = a.firstChild.nextSibling.nextSibling; + td.appendChild(b) +}; +mxPopupMenu.prototype.showSubmenu = function(a, b) { + if (null != b.div) { + b.div.style.left = a.div.offsetLeft + b.offsetLeft + b.offsetWidth - 1 + "px"; + b.div.style.top = a.div.offsetTop + b.offsetTop + "px"; + document.body.appendChild(b.div); + var c = parseInt(b.div.offsetLeft), + d = parseInt(b.div.offsetWidth), + e = document.body, + f = document.documentElement; + if (c + d > (e.scrollLeft || f.scrollLeft) + (e.clientWidth || f.clientWidth)) b.div.style.left = a.div.offsetLeft - d + (mxClient.IS_IE ? 6 : -6) + "px"; + mxUtils.fit(b.div) + } +}; +mxPopupMenu.prototype.addSeparator = function(a, b) { + a = a || this; + if (this.smartSeparators && !b) a.willAddSeparator = !0; + else if (null != a.tbody) { + a.willAddSeparator = !1; + var c = document.createElement("tr"), + d = document.createElement("td"); + d.className = "mxPopupMenuIcon"; + d.style.padding = "0 0 0 0px"; + c.appendChild(d); + d = document.createElement("td"); + d.style.padding = "0 0 0 0px"; + d.setAttribute("colSpan", "2"); + var e = document.createElement("hr"); + e.setAttribute("size", "1"); + d.appendChild(e); + c.appendChild(d); + a.tbody.appendChild(c) + } +}; +mxPopupMenu.prototype.popup = function(a, b, c, d) { + if (null != this.div && null != this.tbody && null != this.factoryMethod) { + this.div.style.left = a + "px"; + for (this.div.style.top = b + "px"; null != this.tbody.firstChild;) mxEvent.release(this.tbody.firstChild), this.tbody.removeChild(this.tbody.firstChild); + this.itemCount = 0; + this.factoryMethod(this, c, d); + 0 < this.itemCount && (this.showMenu(), this.fireEvent(new mxEventObject(mxEvent.SHOW))) + } +}; +mxPopupMenu.prototype.isMenuShowing = function() { + return null != this.div && this.div.parentNode == document.body +}; +mxPopupMenu.prototype.showMenu = function() { + 9 <= document.documentMode && (this.div.style.filter = "none"); + document.body.appendChild(this.div); + mxUtils.fit(this.div) +}; +mxPopupMenu.prototype.hideMenu = function() { + null != this.div && (null != this.div.parentNode && this.div.parentNode.removeChild(this.div), this.hideSubmenu(this), this.containsItems = !1) +}; +mxPopupMenu.prototype.hideSubmenu = function(a) { + null != a.activeRow && (this.hideSubmenu(a.activeRow), null != a.activeRow.div.parentNode && a.activeRow.div.parentNode.removeChild(a.activeRow.div), a.activeRow = null) +}; +mxPopupMenu.prototype.destroy = function() { + null != this.div && (mxEvent.release(this.div), null != this.div.parentNode && this.div.parentNode.removeChild(this.div), this.div = null) +}; + +function mxAutoSaveManager(a) { + this.changeHandler = mxUtils.bind(this, function(a, c) { + this.isEnabled() && this.graphModelChanged(c.getProperty("edit").changes) + }); + this.setGraph(a) +} +mxAutoSaveManager.prototype = new mxEventSource; +mxAutoSaveManager.prototype.constructor = mxAutoSaveManager; +mxAutoSaveManager.prototype.graph = null; +mxAutoSaveManager.prototype.autoSaveDelay = 10; +mxAutoSaveManager.prototype.autoSaveThrottle = 2; +mxAutoSaveManager.prototype.autoSaveThreshold = 5; +mxAutoSaveManager.prototype.ignoredChanges = 0; +mxAutoSaveManager.prototype.lastSnapshot = 0; +mxAutoSaveManager.prototype.enabled = !0; +mxAutoSaveManager.prototype.changeHandler = null; +mxAutoSaveManager.prototype.isEnabled = function() { + return this.enabled +}; +mxAutoSaveManager.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxAutoSaveManager.prototype.setGraph = function(a) { + null != this.graph && this.graph.getModel().removeListener(this.changeHandler); + this.graph = a; + null != this.graph && this.graph.getModel().addListener(mxEvent.CHANGE, this.changeHandler) +}; +mxAutoSaveManager.prototype.save = function() {}; +mxAutoSaveManager.prototype.graphModelChanged = function(a) { + a = ((new Date).getTime() - this.lastSnapshot) / 1E3; + a > this.autoSaveDelay || this.ignoredChanges >= this.autoSaveThreshold && a > this.autoSaveThrottle ? (this.save(), this.reset()) : this.ignoredChanges++ +}; +mxAutoSaveManager.prototype.reset = function() { + this.lastSnapshot = (new Date).getTime(); + this.ignoredChanges = 0 +}; +mxAutoSaveManager.prototype.destroy = function() { + this.setGraph(null) +}; + +function mxAnimation(a) { + this.delay = null != a ? a : 20 +} +mxAnimation.prototype = new mxEventSource; +mxAnimation.prototype.constructor = mxAnimation; +mxAnimation.prototype.delay = null; +mxAnimation.prototype.thread = null; +mxAnimation.prototype.startAnimation = function() { + null == this.thread && (this.thread = window.setInterval(mxUtils.bind(this, this.updateAnimation), this.delay)) +}; +mxAnimation.prototype.updateAnimation = function() { + this.fireEvent(new mxEventObject(mxEvent.EXECUTE)) +}; +mxAnimation.prototype.stopAnimation = function() { + null != this.thread && (window.clearInterval(this.thread), this.thread = null, this.fireEvent(new mxEventObject(mxEvent.DONE))) +}; + +function mxMorphing(a, b, c, d) { + mxAnimation.call(this, d); + this.graph = a; + this.steps = null != b ? b : 6; + this.ease = null != c ? c : 1.5 +} +mxMorphing.prototype = new mxAnimation; +mxMorphing.prototype.constructor = mxMorphing; +mxMorphing.prototype.graph = null; +mxMorphing.prototype.steps = null; +mxMorphing.prototype.step = 0; +mxMorphing.prototype.ease = null; +mxMorphing.prototype.cells = null; +mxMorphing.prototype.updateAnimation = function() { + var a = new mxCellStatePreview(this.graph); + if (null != this.cells) + for (var b = 0; b < this.cells.length; b++) this.animateCell(cells[b], a, !1); + else this.animateCell(this.graph.getModel().getRoot(), a, !0); + this.show(a); + (a.isEmpty() || this.step++ >= this.steps) && this.stopAnimation() +}; +mxMorphing.prototype.show = function(a) { + a.show() +}; +mxMorphing.prototype.animateCell = function(a, b, c) { + var d = this.graph.getView().getState(a), + e = null; + if (null != d && (e = this.getDelta(d), this.graph.getModel().isVertex(a) && (0 != e.x || 0 != e.y))) { + var f = this.graph.view.getTranslate(), + g = this.graph.view.getScale(); + e.x += f.x * g; + e.y += f.y * g; + b.moveState(d, -e.x / this.ease, -e.y / this.ease) + } + if (c && !this.stopRecursion(d, e)) { + d = this.graph.getModel().getChildCount(a); + for (e = 0; e < d; e++) this.animateCell(this.graph.getModel().getChildAt(a, e), b, c) + } +}; +mxMorphing.prototype.stopRecursion = function(a, b) { + return null != b && (0 != b.x || 0 != b.y) +}; +mxMorphing.prototype.getDelta = function(a) { + var b = this.getOriginForCell(a.cell), + c = this.graph.getView().getTranslate(), + d = this.graph.getView().getScale(); + a = new mxPoint(a.x / d - c.x, a.y / d - c.y); + return new mxPoint((b.x - a.x) * d, (b.y - a.y) * d) +}; +mxMorphing.prototype.getOriginForCell = function(a) { + var b = null; + null != a && (b = this.getOriginForCell(this.graph.getModel().getParent(a)), a = this.graph.getCellGeometry(a), null != a && (b.x += a.x, b.y += a.y)); + null == b && (b = this.graph.view.getTranslate(), b = new mxPoint(-b.x, -b.y)); + return b +}; + +function mxImageBundle(a) { + this.images = []; + this.alt = null != a ? a : !1 +} +mxImageBundle.prototype.images = null; +mxImageBundle.prototype.images = null; +mxImageBundle.prototype.putImage = function(a, b, c) { + this.images[a] = { + value: b, + fallback: c + } +}; +mxImageBundle.prototype.getImage = function(a) { + var b = null; + null != a && (a = this.images[a], null != a && (b = this.alt ? a.fallback : a.value)); + return b +}; + +function mxImageExport() {} +mxImageExport.prototype.includeOverlays = !1; +mxImageExport.prototype.drawState = function(a, b) { + null != a && (this.visitStatesRecursive(a, b, this.drawCellState), this.includeOverlays && this.visitStatesRecursive(a, b, this.drawOverlays)) +}; +mxImageExport.prototype.visitStatesRecursive = function(a, b, c) { + if (null != a) { + c(a, b); + for (var d = a.view.graph, e = d.model.getChildCount(a.cell), f = 0; f < e; f++) { + var g = d.view.getState(d.model.getChildAt(a.cell, f)); + this.visitStatesRecursive(g, b, c) + } + } +}; +mxImageExport.prototype.drawCellState = function(a, b) { + a.shape instanceof mxShape && (b.save(), a.shape.paint(b), b.restore()); + null != a.text && (b.save(), a.text.paint(b), b.restore()) +}; +mxImageExport.prototype.drawOverlays = function(a, b) { + null != a.overlays && a.overlays.visit(function(a, d) { + d instanceof mxShape && d.paint(b) + }) +}; + +function mxAbstractCanvas2D() { + this.converter = this.createUrlConverter(); + this.reset() +} +mxAbstractCanvas2D.prototype.state = null; +mxAbstractCanvas2D.prototype.states = null; +mxAbstractCanvas2D.prototype.path = null; +mxAbstractCanvas2D.prototype.rotateHtml = !0; +mxAbstractCanvas2D.prototype.lastX = 0; +mxAbstractCanvas2D.prototype.lastY = 0; +mxAbstractCanvas2D.prototype.moveOp = "M"; +mxAbstractCanvas2D.prototype.lineOp = "L"; +mxAbstractCanvas2D.prototype.quadOp = "Q"; +mxAbstractCanvas2D.prototype.curveOp = "C"; +mxAbstractCanvas2D.prototype.closeOp = "Z"; +mxAbstractCanvas2D.prototype.pointerEvents = !1; +mxAbstractCanvas2D.prototype.createUrlConverter = function() { + return new mxUrlConverter +}; +mxAbstractCanvas2D.prototype.reset = function() { + this.state = this.createState(); + this.states = [] +}; +mxAbstractCanvas2D.prototype.createState = function() { + return { + dx: 0, + dy: 0, + scale: 1, + alpha: 1, + fillColor: null, + fillAlpha: 1, + gradientColor: null, + gradientAlpha: 1, + gradientDirection: null, + strokeColor: null, + strokeWidth: 1, + dashed: !1, + dashPattern: "3 3", + lineCap: "flat", + lineJoin: "miter", + miterLimit: 10, + fontColor: "#000000", + fontBackgroundColor: null, + fontBorderColor: null, + fontSize: mxConstants.DEFAULT_FONTSIZE, + fontFamily: mxConstants.DEFAULT_FONTFAMILY, + fontStyle: 0, + shadow: !1, + shadowColor: mxConstants.SHADOWCOLOR, + shadowAlpha: mxConstants.SHADOW_OPACITY, + shadowDx: mxConstants.SHADOW_OFFSET_X, + shadowDy: mxConstants.SHADOW_OFFSET_Y, + rotation: 0, + rotationCx: 0, + rotationCy: 0 + } +}; +mxAbstractCanvas2D.prototype.format = function(a) { + return Math.round(parseFloat(a)) +}; +mxAbstractCanvas2D.prototype.addOp = function() { + if (null != this.path && (this.path.push(arguments[0]), 2 < arguments.length)) + for (var a = this.state, b = 2; b < arguments.length; b += 2) this.lastX = arguments[b - 1], this.lastY = arguments[b], this.path.push(this.format((this.lastX + a.dx) * a.scale)), this.path.push( + this.format((this.lastY + a.dy) * a.scale)) +}; +mxAbstractCanvas2D.prototype.rotatePoint = function(a, b, c, d, e) { + c *= Math.PI / 180; + return mxUtils.getRotatedPoint(new mxPoint(a, b), Math.cos(c), Math.sin(c), new mxPoint(d, e)) +}; +mxAbstractCanvas2D.prototype.save = function() { + this.states.push(this.state); + this.state = mxUtils.clone(this.state) +}; +mxAbstractCanvas2D.prototype.restore = function() { + this.state = this.states.pop() +}; +mxAbstractCanvas2D.prototype.scale = function(a) { + this.state.scale *= a; + this.state.strokeWidth *= a +}; +mxAbstractCanvas2D.prototype.translate = function(a, b) { + this.state.dx += a; + this.state.dy += b +}; +mxAbstractCanvas2D.prototype.setAlpha = function(a) { + this.state.alpha = a +}; +mxAbstractCanvas2D.prototype.setFillColor = function(a) { + a == mxConstants.NONE && (a = null); + this.state.fillColor = a; + this.state.gradientColor = null +}; +mxAbstractCanvas2D.prototype.setGradient = function(a, b, c, d, e, f, g, h, k) { + c = this.state; + c.fillColor = a; + c.fillAlpha = null != h ? h : 1; + c.gradientColor = b; + c.gradientAlpha = null != k ? k : 1; + c.gradientDirection = g +}; +mxAbstractCanvas2D.prototype.setStrokeColor = function(a) { + a == mxConstants.NONE && (a = null); + this.state.strokeColor = a +}; +mxAbstractCanvas2D.prototype.setStrokeWidth = function(a) { + this.state.strokeWidth = a +}; +mxAbstractCanvas2D.prototype.setDashed = function(a) { + this.state.dashed = a +}; +mxAbstractCanvas2D.prototype.setDashPattern = function(a) { + this.state.dashPattern = a +}; +mxAbstractCanvas2D.prototype.setLineCap = function(a) { + this.state.lineCap = a +}; +mxAbstractCanvas2D.prototype.setLineJoin = function(a) { + this.state.lineJoin = a +}; +mxAbstractCanvas2D.prototype.setMiterLimit = function(a) { + this.state.miterLimit = a +}; +mxAbstractCanvas2D.prototype.setFontColor = function(a) { + a == mxConstants.NONE && (a = null); + this.state.fontColor = a +}; +mxAbstractCanvas2D.prototype.setFontBackgroundColor = function(a) { + a == mxConstants.NONE && (a = null); + this.state.fontBackgroundColor = a +}; +mxAbstractCanvas2D.prototype.setFontBorderColor = function(a) { + a == mxConstants.NONE && (a = null); + this.state.fontBorderColor = a +}; +mxAbstractCanvas2D.prototype.setFontSize = function(a) { + this.state.fontSize = a +}; +mxAbstractCanvas2D.prototype.setFontFamily = function(a) { + this.state.fontFamily = a +}; +mxAbstractCanvas2D.prototype.setFontStyle = function(a) { + null == a && (a = 0); + this.state.fontStyle = a +}; +mxAbstractCanvas2D.prototype.setShadow = function(a) { + this.state.shadow = a +}; +mxAbstractCanvas2D.prototype.setShadowColor = function(a) { + a == mxConstants.NONE && (a = null); + this.state.shadowColor = a +}; +mxAbstractCanvas2D.prototype.setShadowAlpha = function(a) { + this.state.shadowAlpha = a +}; +mxAbstractCanvas2D.prototype.setShadowOffset = function(a, b) { + this.state.shadowDx = a; + this.state.shadowDy = b +}; +mxAbstractCanvas2D.prototype.begin = function() { + this.lastY = this.lastX = 0; + this.path = [] +}; +mxAbstractCanvas2D.prototype.moveTo = function(a, b) { + this.addOp(this.moveOp, a, b) +}; +mxAbstractCanvas2D.prototype.lineTo = function(a, b) { + this.addOp(this.lineOp, a, b) +}; +mxAbstractCanvas2D.prototype.quadTo = function(a, b, c, d) { + this.addOp(this.quadOp, a, b, c, d) +}; +mxAbstractCanvas2D.prototype.curveTo = function(a, b, c, d, e, f) { + this.addOp(this.curveOp, a, b, c, d, e, f) +}; +mxAbstractCanvas2D.prototype.arcTo = function(a, b, c, d, e, f, g) { + a = mxUtils.arcToCurves(this.lastX, this.lastY, a, b, c, d, e, f, g); + for (b = 0; b < a.length; b += 6) this.curveTo(a[b], a[b + 1], a[b + 2], a[b + 3], a[b + 4], a[b + 5]) +}; +mxAbstractCanvas2D.prototype.close = function(a, b, c, d, e, f) { + this.addOp(this.closeOp) +}; +mxAbstractCanvas2D.prototype.end = function() {}; + +function mxXmlCanvas2D(a) { + mxAbstractCanvas2D.call(this); + this.root = a; + this.writeDefaults() +} +mxUtils.extend(mxXmlCanvas2D, mxAbstractCanvas2D); +mxXmlCanvas2D.prototype.textEnabled = !0; +mxXmlCanvas2D.prototype.compressed = !0; +mxXmlCanvas2D.prototype.writeDefaults = function() { + var a; + a = this.createElement("fontfamily"); + a.setAttribute("family", mxConstants.DEFAULT_FONTFAMILY); + this.root.appendChild(a); + a = this.createElement("fontsize"); + a.setAttribute("size", mxConstants.DEFAULT_FONTSIZE); + this.root.appendChild(a); + a = this.createElement("shadowcolor"); + a.setAttribute("color", mxConstants.SHADOWCOLOR); + this.root.appendChild(a); + a = this.createElement("shadowalpha"); + a.setAttribute("alpha", mxConstants.SHADOW_OPACITY); + this.root.appendChild(a); + a = this.createElement("shadowoffset"); + a.setAttribute("dx", mxConstants.SHADOW_OFFSET_X); + a.setAttribute("dy", mxConstants.SHADOW_OFFSET_Y); + this.root.appendChild(a) +}; +mxXmlCanvas2D.prototype.format = function(a) { + return parseFloat(parseFloat(a).toFixed(2)) +}; +mxXmlCanvas2D.prototype.createElement = function(a) { + return this.root.ownerDocument.createElement(a) +}; +mxXmlCanvas2D.prototype.save = function() { + this.compressed && mxAbstractCanvas2D.prototype.save.apply(this, arguments); + this.root.appendChild(this.createElement("save")) +}; +mxXmlCanvas2D.prototype.restore = function() { + this.compressed && mxAbstractCanvas2D.prototype.restore.apply(this, arguments); + this.root.appendChild(this.createElement("restore")) +}; +mxXmlCanvas2D.prototype.scale = function(a) { + if (this.compressed) { + if (this.state.scale == a) return; + mxAbstractCanvas2D.prototype.setAlpha.apply(this, arguments) + } + var b = this.createElement("scale"); + b.setAttribute("scale", a); + this.root.appendChild(b) +}; +mxXmlCanvas2D.prototype.translate = function(a, b) { + var c = this.createElement("translate"); + c.setAttribute("dx", this.format(a)); + c.setAttribute("dy", this.format(b)); + this.root.appendChild(c) +}; +mxXmlCanvas2D.prototype.rotate = function(a, b, c, d, e) { + var f = this.createElement("rotate"); + if (0 != a || b || c) f.setAttribute("theta", this.format(a)), f.setAttribute("flipH", b ? "1" : "0"), f.setAttribute("flipV", c ? "1" : "0"), f.setAttribute("cx", this.format(d)), f.setAttribute( + "cy", this.format(e)), this.root.appendChild(f) +}; +mxXmlCanvas2D.prototype.setAlpha = function(a) { + if (this.compressed) { + if (this.state.alpha == a) return; + mxAbstractCanvas2D.prototype.setAlpha.apply(this, arguments) + } + var b = this.createElement("alpha"); + b.setAttribute("alpha", this.format(a)); + this.root.appendChild(b) +}; +mxXmlCanvas2D.prototype.setFillColor = function(a) { + a == mxConstants.NONE && (a = null); + if (this.compressed) { + if (this.state.fillColor == a) return; + mxAbstractCanvas2D.prototype.setFillColor.apply(this, arguments) + } + var b = this.createElement("fillcolor"); + b.setAttribute("color", null != a ? a : mxConstants.NONE); + this.root.appendChild(b) +}; +mxXmlCanvas2D.prototype.setGradient = function(a, b, c, d, e, f, g, h, k) { + if (null != a && null != b) { + mxAbstractCanvas2D.prototype.setGradient.apply(this, arguments); + var l = this.createElement("gradient"); + l.setAttribute("c1", a); + l.setAttribute("c2", b); + l.setAttribute("x", this.format(c)); + l.setAttribute("y", this.format(d)); + l.setAttribute("w", this.format(e)); + l.setAttribute("h", this.format(f)); + null != g && l.setAttribute("direction", g); + null != h && l.setAttribute("alpha1", h); + null != k && l.setAttribute("alpha2", k); + this.root.appendChild(l) + } +}; +mxXmlCanvas2D.prototype.setStrokeColor = function(a) { + a == mxConstants.NONE && (a = null); + if (this.compressed) { + if (this.state.strokeColor == a) return; + mxAbstractCanvas2D.prototype.setStrokeColor.apply(this, arguments) + } + var b = this.createElement("strokecolor"); + b.setAttribute("color", null != a ? a : mxConstants.NONE); + this.root.appendChild(b) +}; +mxXmlCanvas2D.prototype.setStrokeWidth = function(a) { + if (this.compressed) { + if (this.state.strokeWidth == a) return; + mxAbstractCanvas2D.prototype.setStrokeWidth.apply(this, arguments) + } + var b = this.createElement("strokewidth"); + b.setAttribute("width", this.format(a)); + this.root.appendChild(b) +}; +mxXmlCanvas2D.prototype.setDashed = function(a) { + if (this.compressed) { + if (this.state.dashed == a) return; + mxAbstractCanvas2D.prototype.setDashed.apply(this, arguments) + } + var b = this.createElement("dashed"); + b.setAttribute("dashed", a ? "1" : "0"); + this.root.appendChild(b) +}; +mxXmlCanvas2D.prototype.setDashPattern = function(a) { + if (this.compressed) { + if (this.state.dashPattern == a) return; + mxAbstractCanvas2D.prototype.setDashPattern.apply(this, arguments) + } + var b = this.createElement("dashpattern"); + b.setAttribute("pattern", a); + this.root.appendChild(b) +}; +mxXmlCanvas2D.prototype.setLineCap = function(a) { + if (this.compressed) { + if (this.state.lineCap == a) return; + mxAbstractCanvas2D.prototype.setLineCap.apply(this, arguments) + } + var b = this.createElement("linecap"); + b.setAttribute("cap", a); + this.root.appendChild(b) +}; +mxXmlCanvas2D.prototype.setLineJoin = function(a) { + if (this.compressed) { + if (this.state.lineJoin == a) return; + mxAbstractCanvas2D.prototype.setLineJoin.apply(this, arguments) + } + var b = this.createElement("linejoin"); + b.setAttribute("join", a); + this.root.appendChild(b) +}; +mxXmlCanvas2D.prototype.setMiterLimit = function(a) { + if (this.compressed) { + if (this.state.miterLimit == a) return; + mxAbstractCanvas2D.prototype.setMiterLimit.apply(this, arguments) + } + var b = this.createElement("miterlimit"); + b.setAttribute("limit", a); + this.root.appendChild(b) +}; +mxXmlCanvas2D.prototype.setFontColor = function(a) { + if (this.textEnabled) { + a == mxConstants.NONE && (a = null); + if (this.compressed) { + if (this.state.fontColor == a) return; + mxAbstractCanvas2D.prototype.setFontColor.apply(this, arguments) + } + var b = this.createElement("fontcolor"); + b.setAttribute("color", null != a ? a : mxConstants.NONE); + this.root.appendChild(b) + } +}; +mxXmlCanvas2D.prototype.setFontBackgroundColor = function(a) { + if (this.textEnabled) { + a == mxConstants.NONE && (a = null); + if (this.compressed) { + if (this.state.fontBackgroundColor == a) return; + mxAbstractCanvas2D.prototype.setFontBackgroundColor.apply(this, arguments) + } + var b = this.createElement("fontbackgroundcolor"); + b.setAttribute("color", null != a ? a : mxConstants.NONE); + this.root.appendChild(b) + } +}; +mxXmlCanvas2D.prototype.setFontBorderColor = function(a) { + if (this.textEnabled) { + a == mxConstants.NONE && (a = null); + if (this.compressed) { + if (this.state.fontBorderColor == a) return; + mxAbstractCanvas2D.prototype.setFontBorderColor.apply(this, arguments) + } + var b = this.createElement("fontbordercolor"); + b.setAttribute("color", null != a ? a : mxConstants.NONE); + this.root.appendChild(b) + } +}; +mxXmlCanvas2D.prototype.setFontSize = function(a) { + if (this.textEnabled) { + if (this.compressed) { + if (this.state.fontSize == a) return; + mxAbstractCanvas2D.prototype.setFontSize.apply(this, arguments) + } + var b = this.createElement("fontsize"); + b.setAttribute("size", a); + this.root.appendChild(b) + } +}; +mxXmlCanvas2D.prototype.setFontFamily = function(a) { + if (this.textEnabled) { + if (this.compressed) { + if (this.state.fontFamily == a) return; + mxAbstractCanvas2D.prototype.setFontFamily.apply(this, arguments) + } + var b = this.createElement("fontfamily"); + b.setAttribute("family", a); + this.root.appendChild(b) + } +}; +mxXmlCanvas2D.prototype.setFontStyle = function(a) { + if (this.textEnabled) { + null == a && (a = 0); + if (this.compressed) { + if (this.state.fontStyle == a) return; + mxAbstractCanvas2D.prototype.setFontStyle.apply(this, arguments) + } + var b = this.createElement("fontstyle"); + b.setAttribute("style", a); + this.root.appendChild(b) + } +}; +mxXmlCanvas2D.prototype.setShadow = function(a) { + if (this.compressed) { + if (this.state.shadow == a) return; + mxAbstractCanvas2D.prototype.setShadow.apply(this, arguments) + } + var b = this.createElement("shadow"); + b.setAttribute("enabled", a ? "1" : "0"); + this.root.appendChild(b) +}; +mxXmlCanvas2D.prototype.setShadowColor = function(a) { + if (this.compressed) { + a == mxConstants.NONE && (a = null); + if (this.state.shadowColor == a) return; + mxAbstractCanvas2D.prototype.setShadowColor.apply(this, arguments) + } + var b = this.createElement("shadowcolor"); + b.setAttribute("color", null != a ? a : mxConstants.NONE); + this.root.appendChild(b) +}; +mxXmlCanvas2D.prototype.setShadowAlpha = function(a) { + if (this.compressed) { + if (this.state.shadowAlpha == a) return; + mxAbstractCanvas2D.prototype.setShadowAlpha.apply(this, arguments) + } + var b = this.createElement("shadowalpha"); + b.setAttribute("alpha", a); + this.root.appendChild(b) +}; +mxXmlCanvas2D.prototype.setShadowOffset = function(a, b) { + if (this.compressed) { + if (this.state.shadowDx == a && this.state.shadowDy == b) return; + mxAbstractCanvas2D.prototype.setShadowOffset.apply(this, arguments) + } + var c = this.createElement("shadowoffset"); + c.setAttribute("dx", a); + c.setAttribute("dy", b); + this.root.appendChild(c) +}; +mxXmlCanvas2D.prototype.rect = function(a, b, c, d) { + var e = this.createElement("rect"); + e.setAttribute("x", this.format(a)); + e.setAttribute("y", this.format(b)); + e.setAttribute("w", this.format(c)); + e.setAttribute("h", this.format(d)); + this.root.appendChild(e) +}; +mxXmlCanvas2D.prototype.roundrect = function(a, b, c, d, e, f) { + var g = this.createElement("roundrect"); + g.setAttribute("x", this.format(a)); + g.setAttribute("y", this.format(b)); + g.setAttribute("w", this.format(c)); + g.setAttribute("h", this.format(d)); + g.setAttribute("dx", this.format(e)); + g.setAttribute("dy", this.format(f)); + this.root.appendChild(g) +}; +mxXmlCanvas2D.prototype.ellipse = function(a, b, c, d) { + var e = this.createElement("ellipse"); + e.setAttribute("x", this.format(a)); + e.setAttribute("y", this.format(b)); + e.setAttribute("w", this.format(c)); + e.setAttribute("h", this.format(d)); + this.root.appendChild(e) +}; +mxXmlCanvas2D.prototype.image = function(a, b, c, d, e, f, g, h) { + e = this.converter.convert(e); + var k = this.createElement("image"); + k.setAttribute("x", this.format(a)); + k.setAttribute("y", this.format(b)); + k.setAttribute("w", this.format(c)); + k.setAttribute("h", this.format(d)); + k.setAttribute("src", e); + k.setAttribute("aspect", f ? "1" : "0"); + k.setAttribute("flipH", g ? "1" : "0"); + k.setAttribute("flipV", h ? "1" : "0"); + this.root.appendChild(k) +}; +mxXmlCanvas2D.prototype.begin = function() { + this.root.appendChild(this.createElement("begin")); + this.lastY = this.lastX = 0 +}; +mxXmlCanvas2D.prototype.moveTo = function(a, b) { + var c = this.createElement("move"); + c.setAttribute("x", this.format(a)); + c.setAttribute("y", this.format(b)); + this.root.appendChild(c); + this.lastX = a; + this.lastY = b +}; +mxXmlCanvas2D.prototype.lineTo = function(a, b) { + var c = this.createElement("line"); + c.setAttribute("x", this.format(a)); + c.setAttribute("y", this.format(b)); + this.root.appendChild(c); + this.lastX = a; + this.lastY = b +}; +mxXmlCanvas2D.prototype.quadTo = function(a, b, c, d) { + var e = this.createElement("quad"); + e.setAttribute("x1", this.format(a)); + e.setAttribute("y1", this.format(b)); + e.setAttribute("x2", this.format(c)); + e.setAttribute("y2", this.format(d)); + this.root.appendChild(e); + this.lastX = c; + this.lastY = d +}; +mxXmlCanvas2D.prototype.curveTo = function(a, b, c, d, e, f) { + var g = this.createElement("curve"); + g.setAttribute("x1", this.format(a)); + g.setAttribute("y1", this.format(b)); + g.setAttribute("x2", this.format(c)); + g.setAttribute("y2", this.format(d)); + g.setAttribute("x3", this.format(e)); + g.setAttribute("y3", this.format(f)); + this.root.appendChild(g); + this.lastX = e; + this.lastY = f +}; +mxXmlCanvas2D.prototype.close = function() { + this.root.appendChild(this.createElement("close")) +}; +mxXmlCanvas2D.prototype.text = function(a, b, c, d, e, f, g, h, k, l, m, n) { + if (this.textEnabled && null != e) { + mxUtils.isNode(e) && (e = mxUtils.getOuterHtml(e)); + var p = this.createElement("text"); + p.setAttribute("x", this.format(a)); + p.setAttribute("y", this.format(b)); + p.setAttribute("w", this.format(c)); + p.setAttribute("h", this.format(d)); + p.setAttribute("str", e); + null != f && p.setAttribute("align", f); + null != g && p.setAttribute("valign", g); + p.setAttribute("wrap", h ? "1" : "0"); + null == k && (k = ""); + p.setAttribute("format", k); + null != l && p.setAttribute("fill", + l ? "1" : "0"); + null != m && p.setAttribute("clip", m ? "1" : "0"); + null != n && p.setAttribute("rotation", n); + this.root.appendChild(p) + } +}; +mxXmlCanvas2D.prototype.stroke = function() { + this.root.appendChild(this.createElement("stroke")) +}; +mxXmlCanvas2D.prototype.fill = function() { + this.root.appendChild(this.createElement("fill")) +}; +mxXmlCanvas2D.prototype.fillAndStroke = function() { + this.root.appendChild(this.createElement("fillstroke")) +}; + +function mxSvgCanvas2D(a, b) { + mxAbstractCanvas2D.call(this); + this.root = a; + this.gradients = []; + this.defs = null; + this.styleEnabled = null != b ? b : !1; + var c = null; + if (a.ownerDocument != document) + for (c = a; null != c && "svg" != c.nodeName;) c = c.parentNode; + null != c && (0 < c.getElementsByTagName("defs").length && (this.defs = c.getElementsByTagName("defs")[0]), null == this.defs && (this.defs = this.createElement("defs"), null != c.firstChild ? c.insertBefore( + this.defs, c.firstChild) : c.appendChild(this.defs)), this.styleEnabled && this.defs.appendChild(this.createStyle())) +} +mxUtils.extend(mxSvgCanvas2D, mxAbstractCanvas2D); +mxSvgCanvas2D.prototype.node = null; +mxSvgCanvas2D.prototype.matchHtmlAlignment = !0; +mxSvgCanvas2D.prototype.textEnabled = !0; +mxSvgCanvas2D.prototype.foEnabled = !0; +mxSvgCanvas2D.prototype.strokeTolerance = 0; +mxSvgCanvas2D.prototype.refCount = 0; +mxSvgCanvas2D.prototype.blockImagePointerEvents = !1; +mxSvgCanvas2D.prototype.reset = function() { + mxAbstractCanvas2D.prototype.reset.apply(this, arguments); + this.gradients = [] +}; +mxSvgCanvas2D.prototype.createStyle = function(a) { + a = this.createElement("style"); + a.setAttribute("type", "text/css"); + mxUtils.write(a, "svg{font-family:" + mxConstants.DEFAULT_FONTFAMILY + ";font-size:" + mxConstants.DEFAULT_FONTSIZE + ";fill:none;stroke-miterlimit:10}"); + return a +}; +mxSvgCanvas2D.prototype.createElement = function(a, b) { + if (null != this.root.ownerDocument.createElementNS) return this.root.ownerDocument.createElementNS(b || mxConstants.NS_SVG, a); + var c = this.root.ownerDocument.createElement(a); + null != b && c.setAttribute("xmlns", b); + return c +}; +mxSvgCanvas2D.prototype.createGradientId = function(a, b, c, d, e) { + "#" == a.charAt(0) && (a = a.substring(1)); + "#" == b.charAt(0) && (b = b.substring(1)); + a = a.toLowerCase() + "-" + c; + b = b.toLowerCase() + "-" + d; + c = null; + null == e || e == mxConstants.DIRECTION_SOUTH ? c = "s" : e == mxConstants.DIRECTION_EAST ? c = "e" : (d = a, a = b, b = d, e == mxConstants.DIRECTION_NORTH ? c = "s" : e == mxConstants.DIRECTION_WEST && + (c = "e")); + return "mx-gradient-" + a + "-" + b + "-" + c +}; +mxSvgCanvas2D.prototype.getSvgGradient = function(a, b, c, d, e) { + var f = this.createGradientId(a, b, c, d, e), + g = this.gradients[f]; + if (null == g) { + var h = this.root.ownerSVGElement, + k = 0, + l = f + "-" + k; + if (null != h) + for (g = h.ownerDocument.getElementById(l); null != g && g.ownerSVGElement != h;) l = f + "-" + k++, g = h.ownerDocument.getElementById(l); + else l = "id" + ++this.refCount; + null == g && (g = this.createSvgGradient(a, b, c, d, e), g.setAttribute("id", l), null != this.defs ? this.defs.appendChild(g) : h.appendChild(g)); + this.gradients[f] = g + } + return g.getAttribute("id") +}; +mxSvgCanvas2D.prototype.createSvgGradient = function(a, b, c, d, e) { + var f = this.createElement("linearGradient"); + f.setAttribute("x1", "0%"); + f.setAttribute("y1", "0%"); + f.setAttribute("x2", "0%"); + f.setAttribute("y2", "0%"); + null == e || e == mxConstants.DIRECTION_SOUTH ? f.setAttribute("y2", "100%") : e == mxConstants.DIRECTION_EAST ? f.setAttribute("x2", "100%") : e == mxConstants.DIRECTION_NORTH ? f.setAttribute( + "y1", "100%") : e == mxConstants.DIRECTION_WEST && f.setAttribute("x1", "100%"); + c = 1 > c ? ";stop-opacity:" + c : ""; + e = this.createElement("stop"); + e.setAttribute("offset", "0%"); + e.setAttribute("style", "stop-color:" + a + c); + f.appendChild(e); + c = 1 > d ? ";stop-opacity:" + d : ""; + e = this.createElement("stop"); + e.setAttribute("offset", "100%"); + e.setAttribute("style", "stop-color:" + b + c); + f.appendChild(e); + return f +}; +mxSvgCanvas2D.prototype.addNode = function(a, b) { + var c = this.node, + d = this.state; + if (null != c) { + if ("path" == c.nodeName) + if (null != this.path && 0 < this.path.length) c.setAttribute("d", this.path.join(" ")); + else return; + a && null != d.fillColor ? this.updateFill() : this.styleEnabled || ("ellipse" == c.nodeName && mxClient.IS_NS && !mxClient.IS_GC && !mxClient.IS_SF ? c.setAttribute("fill", "transparent") : c.setAttribute( + "fill", "none"), a = !1); + b && null != d.strokeColor ? this.updateStroke() : this.styleEnabled || c.setAttribute("stroke", "none"); + null != + d.transform && 0 < d.transform.length && c.setAttribute("transform", d.transform); + d.shadow && this.root.appendChild(this.createShadow(c)); + 0 < this.strokeTolerance && !a && this.root.appendChild(this.createTolerance(c)); + this.pointerEvents && ("path" != c.nodeName || this.path[this.path.length - 1] == this.closeOp) && c.setAttribute("pointer-events", "all"); + this.root.appendChild(c) + } +}; +mxSvgCanvas2D.prototype.updateFill = function() { + var a = this.state; + 1 > a.alpha && this.node.setAttribute("fill-opacity", a.alpha); + null != a.fillColor && (null != a.gradientColor ? (a = this.getSvgGradient(a.fillColor, a.gradientColor, a.fillAlpha, a.gradientAlpha, a.gradientDirection), this.node.setAttribute("fill", "url(#" + + a + ")")) : this.node.setAttribute("fill", a.fillColor.toLowerCase())) +}; +mxSvgCanvas2D.prototype.updateStroke = function() { + var a = this.state; + this.node.setAttribute("stroke", a.strokeColor.toLowerCase()); + 1 > a.alpha && this.node.setAttribute("stroke-opacity", a.alpha); + var b = Math.max(1, this.format(a.strokeWidth * a.scale)); + 1 != b && this.node.setAttribute("stroke-width", b); + "path" == this.node.nodeName && this.updateStrokeAttributes(); + a.dashed && this.node.setAttribute("stroke-dasharray", this.createDashPattern(b)) +}; +mxSvgCanvas2D.prototype.updateStrokeAttributes = function() { + var a = this.state; + null != a.lineJoin && "miter" != a.lineJoin && this.node.setAttribute("stroke-linejoin", a.lineJoin); + if (null != a.lineCap) { + var b = a.lineCap; + "flat" == b && (b = "butt"); + "butt" != b && this.node.setAttribute("stroke-linecap", b) + } + null != a.miterLimit && (!this.styleEnabled || 10 != a.miterLimit) && this.node.setAttribute("stroke-miterlimit", a.miterLimit) +}; +mxSvgCanvas2D.prototype.createDashPattern = function(a) { + var b = this.state.dashPattern.split(" "), + c = []; + if (0 < b.length) + for (var d = 0; d < b.length; d++) c[d] = Number(b[d]) * a; + return c.join(" ") +}; +mxSvgCanvas2D.prototype.createTolerance = function(a) { + a = a.cloneNode(!0); + var b = parseFloat(a.getAttribute("stroke-width") || 1) + this.strokeTolerance; + a.setAttribute("pointer-events", "stroke"); + a.setAttribute("visibility", "hidden"); + a.removeAttribute("stroke-dasharray"); + a.setAttribute("stroke-width", b); + a.setAttribute("fill", "none"); + a.setAttribute("stroke", mxClient.IS_OP ? "none" : "white"); + return a +}; +mxSvgCanvas2D.prototype.createShadow = function(a) { + a = a.cloneNode(!0); + var b = this.state; + "none" != a.getAttribute("fill") && a.setAttribute("fill", b.shadowColor); + "none" != a.getAttribute("stroke") && a.setAttribute("stroke", b.shadowColor); + a.setAttribute("transform", "translate(" + this.format(b.shadowDx * b.scale) + "," + this.format(b.shadowDy * b.scale) + ")" + (b.transform || "")); + a.setAttribute("opacity", b.shadowAlpha); + return a +}; +mxSvgCanvas2D.prototype.rotate = function(a, b, c, d, e) { + if (0 != a || b || c) { + var f = this.state; + d += f.dx; + e += f.dy; + d *= f.scale; + e *= f.scale; + f.transform = f.transform || ""; + if (b && c) a += 180; + else if (b ^ c) { + var g = b ? d : 0, + h = b ? -1 : 1, + k = c ? e : 0, + l = c ? -1 : 1; + f.transform += "translate(" + this.format(g) + "," + this.format(k) + ")scale(" + this.format(h) + "," + this.format(l) + ")translate(" + this.format(-g) + "," + this.format(-k) + ")" + } + if (b ? !c : c) a *= -1; + 0 != a && (f.transform += "rotate(" + this.format(a) + "," + this.format(d) + "," + this.format(e) + ")"); + f.rotation += a; + f.rotationCx = + d; + f.rotationCy = e + } +}; +mxSvgCanvas2D.prototype.begin = function() { + mxAbstractCanvas2D.prototype.begin.apply(this, arguments); + this.node = this.createElement("path") +}; +mxSvgCanvas2D.prototype.rect = function(a, b, c, d) { + var e = this.state, + f = this.createElement("rect"); + f.setAttribute("x", this.format((a + e.dx) * e.scale)); + f.setAttribute("y", this.format((b + e.dy) * e.scale)); + f.setAttribute("width", this.format(c * e.scale)); + f.setAttribute("height", this.format(d * e.scale)); + this.node = f +}; +mxSvgCanvas2D.prototype.roundrect = function(a, b, c, d, e, f) { + this.rect(a, b, c, d); + 0 < e && this.node.setAttribute("rx", this.format(e * this.state.scale)); + 0 < f && this.node.setAttribute("ry", this.format(f * this.state.scale)) +}; +mxSvgCanvas2D.prototype.ellipse = function(a, b, c, d) { + var e = this.state, + f = this.createElement("ellipse"); + f.setAttribute("cx", Math.round((a + c / 2 + e.dx) * e.scale)); + f.setAttribute("cy", Math.round((b + d / 2 + e.dy) * e.scale)); + f.setAttribute("rx", c / 2 * e.scale); + f.setAttribute("ry", d / 2 * e.scale); + this.node = f +}; +mxSvgCanvas2D.prototype.image = function(a, b, c, d, e, f, g, h) { + e = this.converter.convert(e); + f = null != f ? f : !0; + g = null != g ? g : !1; + h = null != h ? h : !1; + var k = this.state; + a += k.dx; + b += k.dy; + var l = this.createElement("image"); + l.setAttribute("x", this.format(a * k.scale)); + l.setAttribute("y", this.format(b * k.scale)); + l.setAttribute("width", this.format(c * k.scale)); + l.setAttribute("height", this.format(d * k.scale)); + null == l.setAttributeNS ? l.setAttribute("xlink:href", e) : l.setAttributeNS(mxConstants.NS_XLINK, "href", e); + f || l.setAttribute("preserveAspectRatio", + "none"); + 1 > k.alpha && l.setAttribute("opacity", k.alpha); + e = this.state.transform || ""; + if (g || h) { + var m = f = 1, + n = 0, + p = 0; + g && (f = -1, n = -c - 2 * a); + h && (m = -1, p = -d - 2 * b); + e += "scale(" + f + "," + m + ")translate(" + n + "," + p + ")" + } + 0 < e.length && l.setAttribute("transform", e); + this.root.appendChild(l); + this.blockImagePointerEvents && (l.setAttribute("style", "pointer-events:none"), l = this.createElement("rect"), l.setAttribute("visibility", "hidden"), l.setAttribute("pointer-events", "fill"), + l.setAttribute("x", this.format(a * k.scale)), l.setAttribute("y", + this.format(b * k.scale)), l.setAttribute("width", this.format(c * k.scale)), l.setAttribute("height", this.format(d * k.scale)), this.root.appendChild(l)) +}; +mxSvgCanvas2D.prototype.createDiv = function(a, b, c, d, e) { + c = this.state; + d = "display:inline-block;font-size:" + Math.round(c.fontSize) + "px;font-family:" + c.fontFamily + ";color:" + c.fontColor + ";line-height:" + Math.round(c.fontSize * mxConstants.LINE_HEIGHT) + + "px;" + d; + (c.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (d += "font-weight:bold;"); + (c.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && (d += "font-style:italic;"); + (c.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE && (d += "font-decoration:underline;"); + b == mxConstants.ALIGN_CENTER ? d += "text-align:center;" : b == mxConstants.ALIGN_RIGHT && (d += "text-align:right;"); + b = ""; + null != c.fontBackgroundColor && (b += "background-color:" + c.fontBackgroundColor + ";"); + null != c.fontBorderColor && (b += "border:1px solid " + c.fontBorderColor + ";"); + mxUtils.isNode(a) || (c = document.createElement("textarea"), c.innerHTML = a.replace(/</g, "\x26amp;lt;").replace(/>/g, "\x26amp;gt;").replace(//g, "\x26gt;"), a = + c.value, e ? d += b : 0 < b.length && (a = '\x3cdiv xmlns\x3d"http://www.w3.org/1999/xhtml" style\x3d"display:inline-block;' + + b + '"\x3e' + a + "\x3c/div\x3e")); + if (!mxClient.IS_IE && document.createElementNS) return e = document.createElementNS("http://www.w3.org/1999/xhtml", "div"), e.setAttribute("style", d), mxUtils.isNode(a) ? this.root.ownerDocument != + document ? e.appendChild(a.cloneNode(!0)) : e.appendChild(a) : e.innerHTML = a, e; + mxUtils.isNode(a) && this.root.ownerDocument != document && (a = a.outerHTML); + a = a.replace(/
/g, "\x3cbr /\x3e").replace(/
/g, "\x3chr /\x3e"); + return mxUtils.parseXml('\x3cdiv xmlns\x3d"http://www.w3.org/1999/xhtml" style\x3d"' + + d + '"\x3e' + a + "\x3c/div\x3e").documentElement +}; +mxSvgCanvas2D.prototype.text = function(a, b, c, d, e, f, g, h, k, l, m, n) { + if (this.textEnabled && null != e) { + n = null != n ? n : 0; + var p = this.state; + a += p.dx; + b += p.dy; + if (this.foEnabled && "html" == k) { + var q = "vertical-align:top;"; + m ? (q += "overflow:hidden;", 0 < d && (q += "max-height:" + Math.round(d) + "px;"), 0 < c && (q += "width:" + Math.round(c) + "px;")) : l && (q += "width:" + Math.round(c) + "px;", 0 < d && + (q += "max-height:" + Math.round(d) + "px;")); + h ? (!m && 0 < c && (q += "width:" + Math.round(c) + "px;"), q += "white-space:normal;") : q += "white-space:nowrap;"; + h = this.createElement("g"); + 1 > p.alpha && h.setAttribute("opacity", p.alpha); + k = this.createElement("foreignObject"); + k.setAttribute("pointer-events", "all"); + q = this.createDiv(e, f, g, q, l); + if (null != q) { + h.appendChild(k); + this.root.appendChild(h); + var s = 0; + if (mxClient.IS_IE && !mxClient.IS_SVG) { + var r = document.createElement("div"); + r.style.cssText = q.getAttribute("style"); + r.style.display = mxClient.IS_QUIRKS ? "inline" : "inline-block"; + r.style.visibility = "hidden"; + r.innerHTML = mxUtils.isNode(e) ? e.outerHTML : e; + document.body.appendChild(r); + s = r.offsetWidth; + d = mxClient.IS_QUIRKS && 0 < d && m ? Math.min(d, r.offsetHeight + 2) : r.offsetHeight; + r.parentNode.removeChild(r); + k.appendChild(q) + } else this.root.ownerDocument != document ? (q.style.visibility = "hidden", document.body.appendChild(q), s = q.offsetWidth, d = q.offsetHeight, k.appendChild(q), q.style.visibility = "") : + (k.appendChild(q), s = q.offsetWidth, d = q.offsetHeight); + c = l ? Math.max(c, s) : s; + 1 > p.alpha && h.setAttribute("opacity", p.alpha); + l = e = 0; + f == mxConstants.ALIGN_CENTER ? e -= c / 2 : f == mxConstants.ALIGN_RIGHT && (e -= c); + a += e; + g == mxConstants.ALIGN_MIDDLE ? + l -= d / 2 : g == mxConstants.ALIGN_BOTTOM && (l -= d); + b += l; + f = 1 != p.scale ? "scale(" + p.scale + ")" : ""; + 0 != p.rotation && this.rotateHtml ? (f += "rotate(" + p.rotation + "," + c / 2 + "," + d / 2 + ")", b = this.rotatePoint((a + c / 2) * p.scale, (b + d / 2) * p.scale, p.rotation, p.rotationCx, + p.rotationCy), a = b.x - c * p.scale / 2, b = b.y - d * p.scale / 2) : (a *= p.scale, b *= p.scale); + 0 != n && (f += "rotate(" + n + "," + -e + "," + -l + ")"); + h.setAttribute("transform", "translate(" + Math.round(a) + "," + Math.round(b) + ")" + f); + k.setAttribute("width", Math.round(Math.max(1, c))); + k.setAttribute("height", + Math.round(Math.max(1, d))) + } + } else this.plainText(a, b, c, d, e, f, g, h, l, m, n) + } +}; +mxSvgCanvas2D.prototype.createClip = function(a, b, c, d) { + a = Math.round(a); + b = Math.round(b); + c = Math.round(c); + d = Math.round(d); + for (var e = "mx-clip-" + a + "-" + b + "-" + c + "-" + d, f = 0, g = e + "-" + f; null != document.getElementById(g);) g = e + "-" + ++f; + clip = this.createElement("clipPath"); + clip.setAttribute("id", g); + e = this.createElement("rect"); + e.setAttribute("x", a); + e.setAttribute("y", b); + e.setAttribute("width", c); + e.setAttribute("height", d); + clip.appendChild(e); + return clip +}; +mxSvgCanvas2D.prototype.plainText = function(a, b, c, d, e, f, g, h, k, l, m) { + m = null != m ? m : 0; + h = this.state; + var n = Math.round(h.fontSize), + p = this.createElement("g"), + q = h.transform || ""; + 0 != m && (q += "rotate(" + m + "," + this.format(a * h.scale) + "," + this.format(b * h.scale) + ")"); + if (l && 0 < c && 0 < d) { + var s = a; + m = b; + f == mxConstants.ALIGN_CENTER ? s -= c / 2 : f == mxConstants.ALIGN_RIGHT && (s -= c); + g == mxConstants.ALIGN_MIDDLE ? m -= d / 2 : g == mxConstants.ALIGN_BOTTOM && (m -= d); + m = this.createClip(s * h.scale - 2, m * h.scale - 2, c * h.scale + 4, d * h.scale + 4); + null != this.defs ? this.defs.appendChild(m) : + this.root.appendChild(m); + p.setAttribute("clip-path", "url(#" + m.getAttribute("id") + ")") + } + this.updateFont(p, f); + m = f == mxConstants.ALIGN_RIGHT ? "end" : f == mxConstants.ALIGN_CENTER ? "middle" : "start"; + "start" != m && p.setAttribute("text-anchor", m); + (!this.styleEnabled || n != mxConstants.DEFAULT_FONTSIZE) && p.setAttribute("font-size", Math.round(n * h.scale) + "px"); + 0 < q.length && p.setAttribute("transform", q); + 1 > h.alpha && p.setAttribute("opacity", h.alpha); + var q = e.split("\n"), + s = Math.round(n * mxConstants.LINE_HEIGHT), + r = n + (q.length - + 1) * s; + m = b + n - 1; + g == mxConstants.ALIGN_MIDDLE ? (d = (this.matchHtmlAlignment && l && 0 < d ? Math.min(r, d) : r) / 2, m -= d + 1) : g == mxConstants.ALIGN_BOTTOM && (d = this.matchHtmlAlignment && l && 0 < d ? + Math.min(r, d) : r, m -= d + 2); + for (d = 0; d < q.length; d++) 0 < q[d].length && 0 < mxUtils.trim(q[d]).length && (l = this.createElement("text"), l.setAttribute("x", this.format(a * h.scale)), l.setAttribute("y", this.format( + m * h.scale)), mxUtils.write(l, q[d]), p.appendChild(l)), m += s; + this.root.appendChild(p); + this.addTextBackground(p, e, a, b, c, r, f, g, k) +}; +mxSvgCanvas2D.prototype.updateFont = function(a) { + var b = this.state; + a.setAttribute("fill", b.fontColor); + (!this.styleEnabled || b.fontFamily != mxConstants.DEFAULT_FONTFAMILY) && a.setAttribute("font-family", b.fontFamily); + (b.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && a.setAttribute("font-weight", "bold"); + (b.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && a.setAttribute("font-style", "italic"); + (b.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE && a.setAttribute("text-decoration", + "underline") +}; +mxSvgCanvas2D.prototype.addTextBackground = function(a, b, c, d, e, f, g, h, k) { + var l = this.state; + if (null != l.fontBackgroundColor || null != l.fontBorderColor) { + var m = null; + k ? (g == mxConstants.ALIGN_CENTER ? c -= e / 2 : g == mxConstants.ALIGN_RIGHT && (c -= e), h == mxConstants.ALIGN_MIDDLE ? d -= f / 2 : h == mxConstants.ALIGN_BOTTOM && (d -= f), m = new mxRectangle( + (c + 1) * l.scale, d * l.scale, (e - 2) * l.scale, (f + 2) * l.scale)) : null != a.getBBox && this.root.ownerDocument == document ? (m = a.getBBox(), b = mxClient.IS_IE && mxClient.IS_SVG, + m = new mxRectangle(m.x, m.y + (b ? 0 : + 1), m.width, m.height + (b ? 1 : 0))) : (m = document.createElement("div"), m.style.lineHeight = Math.round(l.fontSize * mxConstants.LINE_HEIGHT) + "px", m.style.fontSize = Math.round(l.fontSize) + + "px", m.style.fontFamily = l.fontFamily, m.style.whiteSpace = "nowrap", m.style.position = "absolute", m.style.visibility = "hidden", m.style.display = mxClient.IS_QUIRKS ? "inline" : + "inline-block", m.style.zoom = "1", (l.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (m.style.fontWeight = "bold"), (l.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && + (m.style.fontStyle = "italic"), b = mxUtils.htmlEntities(b, !1), m.innerHTML = b.replace(/\n/g, "\x3cbr/\x3e"), document.body.appendChild(m), e = m.offsetWidth, f = m.offsetHeight, m.parentNode + .removeChild(m), g == mxConstants.ALIGN_CENTER ? c -= e / 2 : g == mxConstants.ALIGN_RIGHT && (c -= e), h == mxConstants.ALIGN_MIDDLE ? d -= f / 2 : h == mxConstants.ALIGN_BOTTOM && (d -= f), + m = new mxRectangle((c + 1) * l.scale, (d + 2) * l.scale, e * l.scale, (f + 1) * l.scale)); + null != m && (b = this.createElement("rect"), b.setAttribute("fill", l.fontBackgroundColor || "none"), b.setAttribute("stroke", + l.fontBorderColor || "none"), b.setAttribute("x", Math.floor(m.x - 1)), b.setAttribute("y", Math.floor(m.y - 1)), b.setAttribute("width", Math.ceil(m.width + 2)), b.setAttribute("height", + Math.ceil(m.height)), l = null != l.fontBorderColor ? Math.max(1, this.format(l.scale)) : 0, b.setAttribute("stroke-width", l), this.root.ownerDocument == document && 1 == mxUtils.mod(l, + 2) && b.setAttribute("transform", "translate(0.5, 0.5)"), a.insertBefore(b, a.firstChild)) + } +}; +mxSvgCanvas2D.prototype.stroke = function() { + this.addNode(!1, !0) +}; +mxSvgCanvas2D.prototype.fill = function() { + this.addNode(!0, !1) +}; +mxSvgCanvas2D.prototype.fillAndStroke = function() { + this.addNode(!0, !0) +}; +var mxVmlCanvas2D = function(a) { + mxAbstractCanvas2D.call(this); + this.root = a +}; +mxUtils.extend(mxVmlCanvas2D, mxAbstractCanvas2D); +mxVmlCanvas2D.prototype.node = null; +mxVmlCanvas2D.prototype.textEnabled = !0; +mxVmlCanvas2D.prototype.moveOp = "m"; +mxVmlCanvas2D.prototype.lineOp = "l"; +mxVmlCanvas2D.prototype.curveOp = "c"; +mxVmlCanvas2D.prototype.closeOp = "x"; +mxVmlCanvas2D.prototype.rotatedHtmlBackground = ""; +mxVmlCanvas2D.prototype.vmlScale = 1; +mxVmlCanvas2D.prototype.addNode = function(a, b) { + var c = this.node, + d = this.state; + if (null != c) { + if ("shape" == c.nodeName) + if (null != this.path && 0 < this.path.length) c.path = this.path.join(" ") + " e", c.style.width = this.root.style.width, c.style.height = this.root.style.height, c.coordsize = parseInt(c.style + .width) + " " + parseInt(c.style.height); + else return; + c.strokeweight = this.format(Math.max(1, d.strokeWidth * d.scale / this.vmlScale)) + "px"; + d.shadow && this.root.appendChild(this.createShadow(c, a && null != d.fillColor, b && null != d.strokeColor)); + b && null != d.strokeColor ? (c.stroked = "true", c.strokecolor = d.strokeColor) : c.stroked = "false"; + c.appendChild(this.createStroke()); + a && null != d.fillColor ? c.appendChild(this.createFill()) : this.pointerEvents && ("shape" != c.nodeName || this.path[this.path.length - 1] == this.closeOp) ? c.appendChild(this.createTransparentFill()) : + c.filled = "false"; + this.root.appendChild(c) + } +}; +mxVmlCanvas2D.prototype.createTransparentFill = function() { + var a = document.createElement(mxClient.VML_PREFIX + ":fill"); + a.src = mxClient.imageBasePath + "/transparent.gif"; + a.type = "tile"; + return a +}; +mxVmlCanvas2D.prototype.createFill = function() { + var a = this.state, + b = document.createElement(mxClient.VML_PREFIX + ":fill"); + b.color = a.fillColor; + if (null != a.gradientColor) { + b.type = "gradient"; + b.method = "none"; + b.color2 = a.gradientColor; + var c = 180 - a.rotation, + c = a.gradientDirection == mxConstants.DIRECTION_WEST ? c - (90 + ("x" == this.root.style.flip ? 180 : 0)) : a.gradientDirection == mxConstants.DIRECTION_EAST ? c + (90 + ("x" == this.root.style + .flip ? 180 : 0)) : a.gradientDirection == mxConstants.DIRECTION_NORTH ? c - (180 + ("y" == this.root.style.flip ? + -180 : 0)) : c + ("y" == this.root.style.flip ? -180 : 0); + if ("x" == this.root.style.flip || "y" == this.root.style.flip) c *= -1; + b.angle = mxUtils.mod(c, 360); + b.opacity = 100 * a.alpha * a.fillAlpha + "%"; + b.setAttribute(mxClient.OFFICE_PREFIX + ":opacity2", 100 * a.alpha * a.gradientAlpha + "%") + } else 1 > a.alpha && (b.opacity = 100 * a.alpha + "%"); + return b +}; +mxVmlCanvas2D.prototype.createStroke = function() { + var a = this.state, + b = document.createElement(mxClient.VML_PREFIX + ":stroke"); + b.endcap = a.lineCap || "flat"; + b.joinstyle = a.lineJoin || "miter"; + b.miterlimit = a.miterLimit || "10"; + 1 > a.alpha && (b.opacity = 100 * a.alpha + "%"); + a.dashed && (b.dashstyle = this.getVmlDashStyle()); + return b +}; +mxVmlCanvas2D.prototype.getVmlDashStyle = function() { + var a = "dash"; + if (null != this.state.dashPattern) { + var b = this.state.dashPattern.split(" "); + 0 < b.length && 1 == b[0] && (a = "0 2") + } + return a +}; +mxVmlCanvas2D.prototype.createShadow = function(a, b, c) { + var d = this.state, + e = -d.rotation * (Math.PI / 180), + f = Math.cos(e), + e = Math.sin(e), + g = d.shadowDx * d.scale, + h = d.shadowDy * d.scale; + "x" == this.root.style.flip ? g *= -1 : "y" == this.root.style.flip && (h *= -1); + var k = a.cloneNode(!0); + k.style.marginLeft = Math.round(g * f - h * e) + "px"; + k.style.marginTop = Math.round(g * e + h * f) + "px"; + 8 == document.documentMode && (k.strokeweight = a.strokeweight, "shape" == a.nodeName && (k.path = this.path.join(" ") + " e", k.style.width = this.root.style.width, k.style.height = + this.root.style.height, k.coordsize = parseInt(a.style.width) + " " + parseInt(a.style.height))); + c ? (k.strokecolor = d.shadowColor, k.appendChild(this.createShadowStroke())) : k.stroked = "false"; + b ? k.appendChild(this.createShadowFill()) : k.filled = "false"; + return k +}; +mxVmlCanvas2D.prototype.createShadowFill = function() { + var a = document.createElement(mxClient.VML_PREFIX + ":fill"); + a.color = this.state.shadowColor; + a.opacity = 100 * this.state.alpha * this.state.shadowAlpha + "%"; + return a +}; +mxVmlCanvas2D.prototype.createShadowStroke = function() { + var a = this.createStroke(); + a.opacity = 100 * this.state.alpha * this.state.shadowAlpha + "%"; + return a +}; +mxVmlCanvas2D.prototype.rotate = function(a, b, c, d, e) { + b && c ? a += 180 : b ? this.root.style.flip = "x" : c && (this.root.style.flip = "y"); + if (b ? !c : c) a *= -1; + this.root.style.rotation = a; + this.state.rotation += a; + this.state.rotationCx = d; + this.state.rotationCy = e +}; +mxVmlCanvas2D.prototype.begin = function() { + mxAbstractCanvas2D.prototype.begin.apply(this, arguments); + this.node = document.createElement(mxClient.VML_PREFIX + ":shape"); + this.node.style.position = "absolute" +}; +mxVmlCanvas2D.prototype.quadTo = function(a, b, c, d) { + var e = this.state, + f = (this.lastX + e.dx) * e.scale, + g = (this.lastY + e.dy) * e.scale; + a = (a + e.dx) * e.scale; + b = (b + e.dy) * e.scale; + c = (c + e.dx) * e.scale; + d = (d + e.dy) * e.scale; + var g = g + 2 / 3 * (b - g), + h = c + 2 / 3 * (a - c); + b = d + 2 / 3 * (b - d); + this.path.push("c " + this.format(f + 2 / 3 * (a - f)) + " " + this.format(g) + " " + this.format(h) + " " + this.format(b) + " " + this.format(c) + " " + this.format(d)); + this.lastX = c / e.scale - e.dx; + this.lastY = d / e.scale - e.dy +}; +mxVmlCanvas2D.prototype.createRect = function(a, b, c, d, e) { + var f = this.state; + a = document.createElement(a); + a.style.position = "absolute"; + a.style.left = this.format((b + f.dx) * f.scale) + "px"; + a.style.top = this.format((c + f.dy) * f.scale) + "px"; + a.style.width = this.format(d * f.scale) + "px"; + a.style.height = this.format(e * f.scale) + "px"; + return a +}; +mxVmlCanvas2D.prototype.rect = function(a, b, c, d) { + this.node = this.createRect(mxClient.VML_PREFIX + ":rect", a, b, c, d) +}; +mxVmlCanvas2D.prototype.roundrect = function(a, b, c, d, e, f) { + this.node = this.createRect(mxClient.VML_PREFIX + ":roundrect", a, b, c, d); + this.node.setAttribute("arcsize", Math.max(100 * e / c, 100 * f / d) + "%") +}; +mxVmlCanvas2D.prototype.ellipse = function(a, b, c, d) { + this.node = this.createRect(mxClient.VML_PREFIX + ":oval", a, b, c, d) +}; +mxVmlCanvas2D.prototype.image = function(a, b, c, d, e, f, g, h) { + var k = null; + f ? (k = this.createRect(mxClient.VML_PREFIX + ":rect", a, b, c, d), k.stroked = "false", a = document.createElement(mxClient.VML_PREFIX + ":fill"), a.aspect = f ? "atmost" : "ignore", a.rotate = + "true", a.type = "frame", a.src = e, k.appendChild(a)) : (k = this.createRect(mxClient.VML_PREFIX + ":image", a, b, c, d), k.src = e); + g && h ? k.style.rotation = "180" : g ? k.style.flip = "x" : h && (k.style.flip = "y"); + 1 > this.state.alpha && (k.style.filter += "alpha(opacity\x3d" + 100 * this.state.alpha + ")"); + this.root.appendChild(k) +}; +mxVmlCanvas2D.prototype.createDiv = function(a, b, c, d) { + c = document.createElement("div"); + var e = this.state, + f = ""; + null != e.fontBackgroundColor && (f += "background-color:" + e.fontBackgroundColor + ";"); + null != e.fontBorderColor && (f += "border:1px solid " + e.fontBorderColor + ";"); + mxUtils.isNode(a) ? c.appendChild(a) : 0 < f.length && !d ? (d = document.createElement("div"), d.style.cssText = f, d.style.display = mxClient.IS_QUIRKS ? "inline" : "inline-block", d.style.zoom = + "1", d.innerHTML = a, c.appendChild(d)) : (c.style.cssText = f, c.innerHTML = a); + a = c.style; + a.fontSize = Math.round(e.fontSize / this.vmlScale) + "px"; + a.fontFamily = e.fontFamily; + a.color = e.fontColor; + a.verticalAlign = "top"; + a.textAlign = b || "left"; + a.lineHeight = Math.round(e.fontSize * mxConstants.LINE_HEIGHT / this.vmlScale) + "px"; + (e.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (a.fontWeight = "bold"); + (e.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && (a.fontStyle = "italic"); + (e.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE && (a.fontDecoration = "underline"); + return c +}; +mxVmlCanvas2D.prototype.text = function(a, b, c, d, e, f, g, h, k, l, m, n) { + if (this.textEnabled && null != e) { + var p = this.state; + if ("html" == k) { + null != p.rotation && (b = this.rotatePoint(a, b, p.rotation, p.rotationCx, p.rotationCy), a = b.x, b = b.y); + 8 == document.documentMode ? (a += p.dx, b += p.dy) : (a *= p.scale, b *= p.scale); + k = 8 == document.documentMode ? document.createElement(mxClient.VML_PREFIX + ":group") : document.createElement("div"); + k.style.position = "absolute"; + k.style.display = "inline"; + k.style.left = this.format(a) + "px"; + k.style.top = this.format(b) + + "px"; + k.style.zoom = p.scale; + var q = document.createElement("div"); + q.style.position = "relative"; + q.style.display = "inline"; + var s = mxUtils.getAlignmentAsPoint(f, g), + r = s.x, + s = s.y; + e = this.createDiv(e, f, g, l); + f = document.createElement("div"); + h ? (!m && 0 < c && (e.style.width = Math.round(c) + "px"), e.style.whiteSpace = "normal") : e.style.whiteSpace = "nowrap"; + h = p.rotation + (n || 0); + this.rotateHtml && 0 != h ? (f.style.display = "inline", f.style.zoom = "1", f.appendChild(e), 8 == document.documentMode && "DIV" != this.root.nodeName ? (q.appendChild(f), k.appendChild(q)) : + k.appendChild(f)) : 8 == document.documentMode ? (q.appendChild(e), k.appendChild(q)) : (e.style.display = "inline", k.appendChild(e)); + "DIV" != this.root.nodeName ? (n = document.createElement(mxClient.VML_PREFIX + ":rect"), n.stroked = "false", n.filled = "false", n.appendChild(k), this.root.appendChild(n)) : this.root.appendChild( + k); + m ? (e.style.overflow = "hidden", 0 < c && (e.style.width = Math.round(c) + "px"), 0 < d && 8 == document.documentMode && (e.style.maxHeight = Math.round(d) + "px")) : l && (e.style.width = c + + "px", 0 < d && (e.style.maxHeight = Math.round(d) + + "px")); + if (this.rotateHtml && 0 != h) { + c = h * (Math.PI / 180); + h = parseFloat(parseFloat(Math.cos(c)).toFixed(8)); + n = parseFloat(parseFloat(Math.sin(-c)).toFixed(8)); + c %= 2 * Math.PI; + 0 > c && (c += 2 * Math.PI); + c %= Math.PI; + c > Math.PI / 2 && (c = Math.PI - c); + g = Math.cos(c); + var t = Math.sin(c); + 8 == document.documentMode && (e.style.display = "inline-block", f.style.display = "inline-block", q.style.display = "inline-block"); + e.style.visibility = "hidden"; + document.body.appendChild(e); + c = e.offsetWidth; + q = e.offsetHeight; + if (mxClient.IS_QUIRKS && (m || l) && q > d) q = + d, e.style.height = q + "px"; + d = q; + m = (d - d * g + c * -t) / 2 - n * c * (r + 0.5) + h * d * (s + 0.5); + l = (c - c * g + d * -t) / 2 + h * c * (r + 0.5) + n * d * (s + 0.5); + "group" == k.nodeName && "DIV" == this.root.nodeName ? (r = document.createElement("div"), r.style.display = "inline-block", r.style.position = "absolute", r.style.left = this.format(a + (l - + c / 2) * p.scale) + "px", r.style.top = this.format(b + (m - d / 2) * p.scale) + "px", k.parentNode.appendChild(r), r.appendChild(k)) : (p = 8 == document.documentMode ? 1 : p.scale, k.style + .left = this.format(a + (l - c / 2) * p) + "px", k.style.top = this.format(b + (m - + d / 2) * p) + "px"); + f.style.filter = "progid:DXImageTransform.Microsoft.Matrix(M11\x3d" + h + ", M12\x3d" + n + ", M21\x3d" + -n + ", M22\x3d" + h + ", sizingMethod\x3d'auto expand')"; + f.style.backgroundColor = this.rotatedHtmlBackground; + 1 > this.state.alpha && (f.style.filter += "alpha(opacity\x3d" + 100 * this.state.alpha + ")"); + e.style.visibility = ""; + f.appendChild(e) + } else 8 != document.documentMode ? (e.style.verticalAlign = "top", 1 > this.state.alpha && (k.style.filter = "alpha(opacity\x3d" + 100 * this.state.alpha + ")"), p = e.parentNode, e.style.visibility = + "hidden", document.body.appendChild(e), c = e.offsetWidth, q = e.offsetHeight, mxClient.IS_QUIRKS && (m && q > d) && (q = d, e.style.height = q + "px"), d = q, e.style.visibility = "", p.appendChild( + e), k.style.left = this.format(a + c * r * this.state.scale) + "px", k.style.top = this.format(b + d * s * this.state.scale) + "px") : (1 > this.state.alpha && (e.style.filter = + "alpha(opacity\x3d" + 100 * this.state.alpha + ")"), q.style.left = 100 * r + "%", q.style.top = 100 * s + "%") + } else this.plainText(a, b, c, d, mxUtils.htmlEntities(e, !1), f, g, h, k, l, m, n) + } +}; +mxVmlCanvas2D.prototype.plainText = function(a, b, c, d, e, f, g, h, k, l, m, n) { + d = this.state; + a = (a + d.dx) * d.scale; + b = (b + d.dy) * d.scale; + c = document.createElement(mxClient.VML_PREFIX + ":shape"); + c.style.width = "1px"; + c.style.height = "1px"; + c.stroked = "false"; + l = document.createElement(mxClient.VML_PREFIX + ":fill"); + l.color = d.fontColor; + l.opacity = 100 * d.alpha + "%"; + c.appendChild(l); + l = document.createElement(mxClient.VML_PREFIX + ":path"); + l.textpathok = "true"; + l.v = "m " + this.format(0) + " " + this.format(0) + " l " + this.format(1) + " " + this.format(0); + c.appendChild(l); + l = document.createElement(mxClient.VML_PREFIX + ":textpath"); + l.style.cssText = "v-text-align:" + f; + l.style.align = f; + l.style.fontFamily = d.fontFamily; + l.string = e; + l.on = "true"; + f = Math.round(d.fontSize * d.scale / this.vmlScale); + l.style.fontSize = f + "px"; + (d.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (l.style.fontWeight = "bold"); + (d.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && (l.style.fontStyle = "italic"); + (d.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE && + (l.style.textDecoration = "underline"); + e = e.split("\n"); + d = f + (e.length - 1) * f * mxConstants.LINE_HEIGHT; + f = e = 0; + g == mxConstants.ALIGN_BOTTOM ? f = -d / 2 : g != mxConstants.ALIGN_MIDDLE && (f = d / 2); + null != n && (c.style.rotation = n, g = n * (Math.PI / 180), e = Math.sin(g) * f, f *= Math.cos(g)); + c.appendChild(l); + c.style.left = this.format(a - e) + "px"; + c.style.top = this.format(b + f) + "px"; + this.root.appendChild(c) +}; +mxVmlCanvas2D.prototype.stroke = function() { + this.addNode(!1, !0) +}; +mxVmlCanvas2D.prototype.fill = function() { + this.addNode(!0, !1) +}; +mxVmlCanvas2D.prototype.fillAndStroke = function() { + this.addNode(!0, !0) +}; + +function mxGuide(a, b) { + this.graph = a; + this.setStates(b) +} +mxGuide.prototype.graph = null; +mxGuide.prototype.states = null; +mxGuide.prototype.horizontal = !0; +mxGuide.prototype.vertical = !0; +mxGuide.prototype.guideX = null; +mxGuide.prototype.guideY = null; +mxGuide.prototype.setStates = function(a) { + this.states = a +}; +mxGuide.prototype.isEnabledForEvent = function(a) { + return !0 +}; +mxGuide.prototype.getGuideTolerance = function() { + return this.graph.gridSize * this.graph.view.scale / 2 +}; +mxGuide.prototype.createGuideShape = function(a) { + a = new mxPolyline([], mxConstants.GUIDE_COLOR, mxConstants.GUIDE_STROKEWIDTH); + a.isDashed = !0; + return a +}; +mxGuide.prototype.move = function(a, b, c) { + if (null != this.states && (this.horizontal || this.vertical) && null != a && null != b) { + var d = this.graph.getView().translate, + e = this.graph.getView().scale, + f = b.x, + g = b.y, + h = !1, + k = !1, + l = this.getGuideTolerance(), + m = l, + n = l, + l = a.clone(); + l.x += b.x; + l.y += b.y; + var p = l.x, + q = l.x + l.width, + s = l.getCenterX(), + r = l.y, + t = l.y + l.height, + v = l.getCenterY(); + b = function(b) { + b += this.graph.panDx; + var c = !1; + Math.abs(b - s) < m ? (f = b - a.getCenterX(), m = Math.abs(b - s), c = !0) : Math.abs(b - p) < m ? (f = b - a.x, m = Math.abs(b - p), c = !0) : Math.abs(b - + q) < m && (f = b - a.x - a.width, m = Math.abs(b - q), c = !0); + if (c) { + null == this.guideX && (this.guideX = this.createGuideShape(!0), this.guideX.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG, + this.guideX.pointerEvents = !1, this.guideX.init(this.graph.getView().getOverlayPane())); + var d = this.graph.container; + b -= this.graph.panDx; + this.guideX.points = [new mxPoint(b, -this.graph.panDy), new mxPoint(b, d.scrollHeight - 3 - this.graph.panDy)] + } + h = h || c + }; + for (var l = function(b) { + b += this.graph.panDy; + var c = !1; + Math.abs(b - v) < n ? (g = b - a.getCenterY(), n = Math.abs(b - v), c = !0) : Math.abs(b - r) < n ? (g = b - a.y, n = Math.abs(b - r), c = !0) : Math.abs(b - t) < n && (g = b - a.y - a.height, + n = Math.abs(b - t), c = !0); + if (c) { + null == this.guideY && (this.guideY = this.createGuideShape(!1), this.guideY.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG, + this.guideY.pointerEvents = !1, this.guideY.init(this.graph.getView().getOverlayPane())); + var d = this.graph.container; + b -= this.graph.panDy; + this.guideY.points = [new mxPoint(-this.graph.panDx, + b), new mxPoint(d.scrollWidth - 3 - this.graph.panDx, b)] + } + k = k || c + }, w = 0; w < this.states.length; w++) { + var u = this.states[w]; + null != u && (this.horizontal && (b.call(this, u.getCenterX()), b.call(this, u.x), b.call(this, u.x + u.width)), this.vertical && (l.call(this, u.getCenterY()), l.call(this, u.y), l.call(this, + u.y + u.height))) + }!h && null != this.guideX ? this.guideX.node.style.visibility = "hidden" : null != this.guideX && (this.guideX.node.style.visibility = "visible", this.guideX.redraw()); + !k && null != this.guideY ? this.guideY.node.style.visibility = + "hidden" : null != this.guideY && (this.guideY.node.style.visibility = "visible", this.guideY.redraw()); + c && (h || (c = a.x - (this.graph.snap(a.x / e - d.x) + d.x) * e, f = this.graph.snap(f / e) * e - c), k || (d = a.y - (this.graph.snap(a.y / e - d.y) + d.y) * e, g = this.graph.snap(g / e) * e - + d)); + b = new mxPoint(f, g) + } + return b +}; +mxGuide.prototype.hide = function() { + null != this.guideX && (this.guideX.node.style.visibility = "hidden"); + null != this.guideY && (this.guideY.node.style.visibility = "hidden") +}; +mxGuide.prototype.destroy = function() { + null != this.guideX && (this.guideX.destroy(), this.guideX = null); + null != this.guideY && (this.guideY.destroy(), this.guideY = null) +}; + +function mxStencil(a) { + this.desc = a; + this.parseDescription(); + this.parseConstraints() +} +mxStencil.defaultLocalized = !1; +mxStencil.prototype.desc = null; +mxStencil.prototype.constraints = null; +mxStencil.prototype.aspect = null; +mxStencil.prototype.w0 = null; +mxStencil.prototype.h0 = null; +mxStencil.prototype.bgNode = null; +mxStencil.prototype.fgNode = null; +mxStencil.prototype.strokewidth = null; +mxStencil.prototype.parseDescription = function() { + this.fgNode = this.desc.getElementsByTagName("foreground")[0]; + this.bgNode = this.desc.getElementsByTagName("background")[0]; + this.w0 = Number(this.desc.getAttribute("w") || 100); + this.h0 = Number(this.desc.getAttribute("h") || 100); + var a = this.desc.getAttribute("aspect"); + this.aspect = null != a ? a : "variable"; + a = this.desc.getAttribute("strokewidth"); + this.strokewidth = null != a ? a : "1" +}; +mxStencil.prototype.parseConstraints = function() { + var a = this.desc.getElementsByTagName("connections")[0]; + if (null != a && (a = mxUtils.getChildNodes(a), null != a && 0 < a.length)) { + this.constraints = []; + for (var b = 0; b < a.length; b++) this.constraints.push(this.parseConstraint(a[b])) + } +}; +mxStencil.prototype.parseConstraint = function(a) { + var b = Number(a.getAttribute("x")), + c = Number(a.getAttribute("y")); + a = "1" == a.getAttribute("perimeter"); + return new mxConnectionConstraint(new mxPoint(b, c), a) +}; +mxStencil.prototype.evaluateTextAttribute = function(a, b, c) { + b = this.evaluateAttribute(a, b, c); + a = a.getAttribute("localized"); + if (mxStencil.defaultLocalized && null == a || "1" == a) b = mxResources.get(b); + return b +}; +mxStencil.prototype.evaluateAttribute = function(a, b, c) { + b = a.getAttribute(b); + null == b && (a = mxUtils.getTextContent(a), null != a && (a = mxUtils.eval(a), "function" == typeof a && (b = a(c)))); + return b +}; +mxStencil.prototype.drawShape = function(a, b, c, d, e, f) { + this.drawChildren(a, b, c, d, e, f, this.bgNode, !1); + this.drawChildren(a, b, c, d, e, f, this.fgNode, !0) +}; +mxStencil.prototype.drawChildren = function(a, b, c, d, e, f, g, h) { + if (null != g) { + var k = mxUtils.getValue(b.style, mxConstants.STYLE_DIRECTION, null); + c = this.computeAspect(b.style, c, d, e, f, k); + d = Math.min(c.width, c.height); + d = "inherit" == this.strokewidth ? Number(mxUtils.getNumber(b.style, mxConstants.STYLE_STROKEWIDTH, 1)) : Number(this.strokewidth) * d; + a.setStrokeWidth(d); + for (g = g.firstChild; null != g;) g.nodeType == mxConstants.NODETYPE_ELEMENT && this.drawNode(a, b, g, c, h), g = g.nextSibling + } +}; +mxStencil.prototype.computeAspect = function(a, b, c, d, e, f) { + a = b; + b = d / this.w0; + var g = e / this.h0; + if (f = "north" == f || "south" == f) { + g = d / this.h0; + b = e / this.w0; + var h = (d - e) / 2; + a += h; + c -= h + } + "fixed" == this.aspect && (b = g = Math.min(b, g), f ? (a += (e - this.w0 * b) / 2, c += (d - this.h0 * g) / 2) : (a += (d - this.w0 * b) / 2, c += (e - this.h0 * g) / 2)); + return new mxRectangle(a, c, b, g) +}; +mxStencil.prototype.drawNode = function(a, b, c, d, e) { + var f = c.nodeName, + g = d.x, + h = d.y, + k = d.width, + l = d.height, + m = Math.min(k, l); + if ("save" == f) a.save(); + else if ("restore" == f) a.restore(); + else if ("path" == f) { + a.begin(); + for (c = c.firstChild; null != c;) c.nodeType == mxConstants.NODETYPE_ELEMENT && this.drawNode(a, b, c, d, e), c = c.nextSibling + } else if ("close" == f) a.close(); + else if ("move" == f) a.moveTo(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l); + else if ("line" == f) a.lineTo(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * + l); + else if ("quad" == f) a.quadTo(g + Number(c.getAttribute("x1")) * k, h + Number(c.getAttribute("y1")) * l, g + Number(c.getAttribute("x2")) * k, h + Number(c.getAttribute("y2")) * l); + else if ("curve" == f) a.curveTo(g + Number(c.getAttribute("x1")) * k, h + Number(c.getAttribute("y1")) * l, g + Number(c.getAttribute("x2")) * k, h + Number(c.getAttribute("y2")) * l, g + Number( + c.getAttribute("x3")) * k, h + Number(c.getAttribute("y3")) * l); + else if ("arc" == f) a.arcTo(Number(c.getAttribute("rx")) * k, Number(c.getAttribute("ry")) * l, Number(c.getAttribute("x-axis-rotation")), + Number(c.getAttribute("large-arc-flag")), Number(c.getAttribute("sweep-flag")), g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l); + else if ("rect" == f) a.rect(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, Number(c.getAttribute("w")) * k, Number(c.getAttribute("h")) * l); + else if ("roundrect" == f) b = c.getAttribute("arcsize"), 0 == b && (b = 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR), m = Number(c.getAttribute("w")) * k, d = Number(c.getAttribute("h")) * l, b = + Number(b) / 100, b = Math.min(m * b, d * b), a.roundrect(g + + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, m, d, b, b); + else if ("ellipse" == f) a.ellipse(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, Number(c.getAttribute("w")) * k, Number(c.getAttribute("h")) * l); + else if ("image" == f) b = this.evaluateAttribute(c, "src", b), a.image(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, Number(c.getAttribute("w")) * k, Number(c.getAttribute( + "h")) * l, b, !1, "1" == c.getAttribute("flipH"), "1" == c.getAttribute("flipV")); + else if ("text" == f) { + m = this.evaluateTextAttribute(c, + "str", b); + d = "1" == c.getAttribute("vertical") ? -90 : 0; + if ("0" == c.getAttribute("align-shape")) { + var n = b.rotation, + p = 1 == mxUtils.getValue(b.style, mxConstants.STYLE_FLIPH, 0); + b = 1 == mxUtils.getValue(b.style, mxConstants.STYLE_FLIPV, 0); + d = p && b ? d - n : p || b ? d + n : d - n + } + d -= c.getAttribute("rotation"); + a.text(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, 0, 0, m, c.getAttribute("align") || "left", c.getAttribute("valign") || "top", !1, "", !1, !1, d) + } else if ("include-shape" == f) n = mxStencilRegistry.getStencil(c.getAttribute("name")), + null != n && (g += Number(c.getAttribute("x")) * k, h += Number(c.getAttribute("y")) * l, m = Number(c.getAttribute("w")) * k, d = Number(c.getAttribute("h")) * l, n.drawShape(a, b, g, h, m, d)); + else if ("fillstroke" == f) a.fillAndStroke(); + else if ("fill" == f) a.fill(); + else if ("stroke" == f) a.stroke(); + else if ("strokewidth" == f) a.setStrokeWidth(Number(c.getAttribute("width")) * m); + else if ("dashed" == f) a.setDashed("1" == c.getAttribute("dashed")); + else if ("dashpattern" == f) { + if (c = c.getAttribute("pattern"), null != c) { + c = c.split(" "); + k = []; + for (l = 0; l < + c.length; l++) 0 < c[l].length && k.push(Number(c[l]) * m); + c = k.join(" "); + a.setDashPattern(c) + } + } else "strokecolor" == f ? a.setStrokeColor(c.getAttribute("color")) : "linecap" == f ? a.setLineCap(c.getAttribute("cap")) : "linejoin" == f ? a.setLineJoin(c.getAttribute("join")) : + "miterlimit" == f ? a.setMiterLimit(Number(c.getAttribute("limit"))) : "fillcolor" == f ? a.setFillColor(c.getAttribute("color")) : "alpha" == f ? a.setAlpha(c.getAttribute("alpha")) : + "fontcolor" == f ? a.setFontColor(c.getAttribute("color")) : "fontstyle" == f ? a.setFontStyle(c.getAttribute("style")) : + "fontfamily" == f ? a.setFontFamily(c.getAttribute("family")) : "fontsize" == f && a.setFontSize(Number(c.getAttribute("size")) * m); + e && ("fillstroke" == f || "fill" == f || "stroke" == f) && a.setShadow(!1) +}; + +function mxShape(a) { + this.stencil = a; + this.strokewidth = 1; + this.rotation = 0; + this.opacity = 100; + this.flipV = this.flipH = !1 +} +mxShape.prototype.dialect = null; +mxShape.prototype.scale = 1; +mxShape.prototype.bounds = null; +mxShape.prototype.points = null; +mxShape.prototype.node = null; +mxShape.prototype.style = null; +mxShape.prototype.style = null; +mxShape.prototype.boundingBox = null; +mxShape.prototype.stencil = null; +mxShape.prototype.svgStrokeTolerance = 6; +mxShape.prototype.pointerEvents = !0; +mxShape.prototype.stencilPointerEvents = !1; +mxShape.prototype.vmlScale = 1; +mxShape.prototype.init = function(a) { + null == this.node && (this.node = this.create(a), null != a && a.appendChild(this.node)) +}; +mxShape.prototype.isParseVml = function() { + return !0 +}; +mxShape.prototype.isHtmlAllowed = function() { + return !1 +}; +mxShape.prototype.getSvgScreenOffset = function() { + return 1 == mxUtils.mod(Math.max(1, Math.round(this.strokewidth * this.scale)), 2) ? 0.5 : 0 +}; +mxShape.prototype.create = function(a) { + var b = null; + return b = null != a.ownerSVGElement ? this.createSvg(a) : 8 == document.documentMode || this.dialect == mxConstants.DIALECT_SVG || this.dialect != mxConstants.DIALECT_VML && this.isHtmlAllowed() ? + this.createHtml(a) : this.createVml(a) +}; +mxShape.prototype.createSvg = function() { + return document.createElementNS(mxConstants.NS_SVG, "g") +}; +mxShape.prototype.createVml = function() { + var a = document.createElement(mxClient.VML_PREFIX + ":group"); + a.style.position = "absolute"; + return a +}; +mxShape.prototype.createHtml = function() { + var a = document.createElement("div"); + a.style.position = "absolute"; + return a +}; +mxShape.prototype.reconfigure = function() { + this.redraw() +}; +mxShape.prototype.redraw = function() { + this.updateBoundsFromPoints(); + this.checkBounds() ? (this.node.style.visibility = "", "DIV" == this.node.nodeName && this.isHtmlAllowed() ? this.redrawHtmlShape() : this.redrawShape(), this.updateBoundingBox()) : (this.node.style + .visibility = "hidden", this.boundingBox = null) +}; +mxShape.prototype.updateBoundsFromPoints = function() { + var a = this.points; + if (null != a && 0 < a.length && null != a[0]) { + this.bounds = new mxRectangle(Number(a[0].x), Number(a[0].y), 1, 1); + for (var b = 1; b < this.points.length; b++) null != a[b] && this.bounds.add(new mxRectangle(Number(a[b].x), Number(a[b].y), 1, 1)) + } +}; +mxShape.prototype.checkBounds = function() { + return null != this.bounds && !isNaN(this.bounds.x) && !isNaN(this.bounds.y) && !isNaN(this.bounds.width) && !isNaN(this.bounds.height) && 0 < this.bounds.width && 0 < this.bounds.height +}; +mxShape.prototype.createVmlGroup = function() { + var a = document.createElement(mxClient.VML_PREFIX + ":group"); + a.style.position = "absolute"; + a.style.width = this.node.style.width; + a.style.height = this.node.style.height; + return a +}; +mxShape.prototype.redrawShape = function() { + var a = this.createCanvas(); + for (a.pointerEvents = this.pointerEvents; this.node.hasChildNodes();) this.node.removeChild(this.node.lastChild); + this.paint(a); + this.node != a.root && this.node.insertAdjacentHTML("beforeend", a.root.outerHTML); + "DIV" == this.node.nodeName && 8 == document.documentMode && (this.node.style.filter = "", (null == this.stencil || !this.stencilPointerEvents) && mxUtils.addTransparentBackgroundFilter(this.node)); + this.destroyCanvas(a) +}; +mxShape.prototype.createCanvas = function() { + var a = null, + b = null; + if (null != this.node.ownerSVGElement) a = new mxSvgCanvas2D(this.node, !1), a.strokeTolerance = this.svgStrokeTolerance, a.blockImagePointerEvents = mxClient.IS_NS && !mxClient.IS_SF && ! + mxClient.IS_GC, b = this.getSvgScreenOffset(), 0 != b ? this.node.setAttribute("transform", "translate(" + b + "," + b + ")") : this.node.removeAttribute("transform"); + else { + this.updateVmlContainer(); + var c = Math.max(1, Math.round(this.bounds.width)), + d = Math.max(1, Math.round(this.bounds.height)), + b = 8 == document.documentMode && this.isParseVml() ? this.createVmlGroup() : this.node, + a = new mxVmlCanvas2D(b, !1); + "" != b.tagUrn && (b.coordsize = c * this.vmlScale + "," + d * this.vmlScale, a.scale(this.vmlScale), a.vmlScale = this.vmlScale); + b = this.scale; + a.translate(-Math.round(this.bounds.x / b), -Math.round(this.bounds.y / b)) + } + return a +}; +mxShape.prototype.updateVmlContainer = function() { + this.node.style.left = Math.round(this.bounds.x) + "px"; + this.node.style.top = Math.round(this.bounds.y) + "px"; + var a = Math.max(1, Math.round(this.bounds.width)), + b = Math.max(1, Math.round(this.bounds.height)); + this.node.style.width = a + "px"; + this.node.style.height = b + "px"; + this.node.style.overflow = "visible" +}; +mxShape.prototype.destroyCanvas = function(a) { + if (a instanceof mxSvgCanvas2D) { + for (var b in a.gradients) { + var c = a.gradients[b]; + c.mxRefCount = (c.mxRefCount || 0) + 1 + } + this.releaseSvgGradients(this.oldGradients); + this.oldGradients = a.gradients + } +}; +mxShape.prototype.paint = function(a) { + var b = this.scale, + c = this.bounds.x / b, + d = this.bounds.y / b, + e = this.bounds.width / b, + f = this.bounds.height / b; + if (this.isPaintBoundsInverted()) var g = (e - f) / 2, + c = c + g, + d = d - g, + g = e, + e = f, + f = g; + this.updateTransform(a, c, d, e, f); + this.configureCanvas(a, c, d, e, f); + if (null != this.stencil) this.paintStencilShape(a, c, d, e, f); + else if (a.setStrokeWidth(this.strokewidth), null != this.points) { + c = []; + for (d = 0; d < this.points.length; d++) c.push(new mxPoint(this.points[d].x / b, this.points[d].y / b)); + this.paintEdgeShape(a, + c) + } else this.paintVertexShape(a, c, d, e, f) +}; +mxShape.prototype.configureCanvas = function(a, b, c, d, e) { + var f = null; + null != this.style && (f = this.style.dashPattern); + a.setAlpha(this.opacity / 100); + null != this.isShadow && a.setShadow(this.isShadow); + null != this.isDashed && a.setDashed(this.isDashed); + null != f && a.setDashPattern(f); + null != this.gradient ? (b = this.getGradientBounds(a, b, c, d, e), a.setGradient(this.fill, this.gradient, b.x, b.y, b.width, b.height, this.gradientDirection)) : a.setFillColor(this.fill); + a.setStrokeColor(this.stroke) +}; +mxShape.prototype.getGradientBounds = function(a, b, c, d, e) { + return new mxRectangle(b, c, d, e) +}; +mxShape.prototype.updateTransform = function(a, b, c, d, e) { + a.scale(this.scale); + a.rotate(this.getShapeRotation(), this.flipH, this.flipV, b + d / 2, c + e / 2) +}; +mxShape.prototype.paintStencilShape = function(a, b, c, d, e) { + this.stencilPointerEvents && (this.dialect == mxConstants.DIALECT_SVG ? this.addTransparentBackgroundRectangle(this.node, b, c, d, e) : 8 != document.documentMode && this.setTransparentBackgroundImage( + this.node)); + this.stencil.drawShape(a, this, b, c, d, e) +}; +mxShape.prototype.paintVertexShape = function(a, b, c, d, e) { + this.paintBackground(a, b, c, d, e); + a.setShadow(!1); + this.paintForeground(a, b, c, d, e) +}; +mxShape.prototype.paintBackground = function(a, b, c, d, e) {}; +mxShape.prototype.paintForeground = function(a, b, c, d, e) {}; +mxShape.prototype.paintEdgeShape = function(a, b) {}; +mxShape.prototype.getArcSize = function(a, b) { + var c = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR) / 100; + return Math.min(a * c, b * c) +}; +mxShape.prototype.paintGlassEffect = function(a, b, c, d, e, f) { + var g = Math.ceil(this.strokewidth / 2); + a.setGradient("#ffffff", "#ffffff", b, c, d, 0.6 * e, "south", 0.9, 0.1); + a.begin(); + f += 2 * g; + this.isRounded ? (a.moveTo(b - g + f, c - g), a.quadTo(b - g, c - g, b - g, c - g + f), a.lineTo(b - g, c + 0.4 * e), a.quadTo(b + 0.5 * d, c + 0.7 * e, b + d + g, c + 0.4 * e), a.lineTo(b + d + + g, c - g + f), a.quadTo(b + d + g, c - g, b + d + g - f, c - g)) : (a.moveTo(b - g, c - g), a.lineTo(b - g, c + 0.4 * e), a.quadTo(b + 0.5 * d, c + 0.7 * e, b + d + g, c + 0.4 * e), a.lineTo( + b + d + g, c - g)); + a.close(); + a.fill() +}; +mxShape.prototype.apply = function(a) { + this.state = a; + this.style = a.style; + if (null != this.style) { + this.fill = mxUtils.getValue(this.style, mxConstants.STYLE_FILLCOLOR, this.fill); + this.gradient = mxUtils.getValue(this.style, mxConstants.STYLE_GRADIENTCOLOR, this.gradient); + this.gradientDirection = mxUtils.getValue(this.style, mxConstants.STYLE_GRADIENT_DIRECTION, this.gradientDirection); + this.opacity = mxUtils.getValue(this.style, mxConstants.STYLE_OPACITY, this.opacity); + this.stroke = mxUtils.getValue(this.style, mxConstants.STYLE_STROKECOLOR, + this.stroke); + this.strokewidth = mxUtils.getNumber(this.style, mxConstants.STYLE_STROKEWIDTH, this.strokewidth); + this.spacing = mxUtils.getValue(this.style, mxConstants.STYLE_SPACING, this.spacing); + this.startSize = mxUtils.getNumber(this.style, mxConstants.STYLE_STARTSIZE, this.startSize); + this.endSize = mxUtils.getNumber(this.style, mxConstants.STYLE_ENDSIZE, this.endSize); + this.startArrow = mxUtils.getValue(this.style, mxConstants.STYLE_STARTARROW, this.startArrow); + this.endArrow = mxUtils.getValue(this.style, mxConstants.STYLE_ENDARROW, + this.endArrow); + this.rotation = mxUtils.getValue(this.style, mxConstants.STYLE_ROTATION, this.rotation); + this.direction = mxUtils.getValue(this.style, mxConstants.STYLE_DIRECTION, this.direction); + this.flipH = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_FLIPH, 0); + this.flipV = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_FLIPV, 0); + null != this.stencil && (this.flipH = 1 == mxUtils.getValue(this.style, "stencilFlipH", 0) || this.flipH, this.flipV = 1 == mxUtils.getValue(this.style, "stencilFlipV", 0) || this.flipV); + if ("north" == + this.direction || "south" == this.direction) a = this.flipH, this.flipH = this.flipV, this.flipV = a; + this.isShadow = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_SHADOW, this.isShadow); + this.isDashed = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_DASHED, this.isDashed); + this.isRounded = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_ROUNDED, this.isRounded); + this.glass = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_GLASS, this.glass); + "none" == this.fill && (this.fill = null); + "none" == this.gradient && (this.gradient = null); + "none" == this.stroke && (this.stroke = null) + } +}; +mxShape.prototype.setCursor = function(a) { + null == a && (a = ""); + this.cursor = a; + null != this.node && (this.node.style.cursor = a) +}; +mxShape.prototype.getCursor = function() { + return this.cursor +}; +mxShape.prototype.updateBoundingBox = function() { + if (null != this.bounds) { + var a = this.createBoundingBox(); + if (null != a) { + this.augmentBoundingBox(a); + var b = this.getShapeRotation(); + 0 != b && (a = mxUtils.getBoundingBox(a, b)); + a.x = Math.floor(a.x); + a.y = Math.floor(a.y); + a.width = Math.ceil(a.width); + a.height = Math.ceil(a.height) + } + this.boundingBox = a + } +}; +mxShape.prototype.createBoundingBox = function() { + var a = this.bounds.clone(); + if (this.isPaintBoundsInverted()) { + var b = (a.width - a.height) / 2; + a.x += b; + a.y -= b; + b = a.width; + a.width = a.height; + a.height = b + } + return a +}; +mxShape.prototype.augmentBoundingBox = function(a) { + this.isShadow && (a.width += Math.ceil(mxConstants.SHADOW_OFFSET_X * this.scale), a.height += Math.ceil(mxConstants.SHADOW_OFFSET_Y * this.scale)); + var b = Math.ceil(this.strokewidth * this.scale); + a.grow(Math.ceil(b / 2)) +}; +mxShape.prototype.isPaintBoundsInverted = function() { + return null == this.stencil && ("north" == this.direction || "south" == this.direction) +}; +mxShape.prototype.getRotation = function() { + return null != this.rotation ? this.rotation : 0 +}; +mxShape.prototype.getTextRotation = function() { + var a = this.getRotation(); + 1 != mxUtils.getValue(this.style, mxConstants.STYLE_HORIZONTAL, 1) && (a += mxText.prototype.verticalTextRotation); + return a +}; +mxShape.prototype.getShapeRotation = function() { + var a = this.getRotation(); + null != this.direction && ("north" == this.direction ? a += 270 : "west" == this.direction ? a += 180 : "south" == this.direction && (a += 90)); + return a +}; +mxShape.prototype.addTransparentBackgroundRectangle = function(a, b, c, d, e) { + a = document.createElementNS(mxConstants.NS_SVG, "rect"); + a.setAttribute("x", b); + a.setAttribute("y", c); + a.setAttribute("width", d); + a.setAttribute("height", e); + a.setAttribute("fill", "none"); + a.setAttribute("stroke", "none"); + a.setAttribute("pointer-events", "all"); + this.node.appendChild(a) +}; +mxShape.prototype.setTransparentBackgroundImage = function(a) { + a.style.backgroundImage = "url('" + mxClient.imageBasePath + "/transparent.gif')" +}; +mxShape.prototype.releaseSvgGradients = function(a) { + if (null != a) + for (var b in a) { + var c = a[b]; + c.mxRefCount = (c.mxRefCount || 0) - 1; + 0 == c.mxRefCount && null != c.parentNode && c.parentNode.removeChild(c) + } +}; +mxShape.prototype.destroy = function() { + null != this.node && (mxEvent.release(this.node), null != this.node.parentNode && this.node.parentNode.removeChild(this.node), this.node = null); + this.releaseSvgGradients(this.oldGradients); + this.oldGradients = null +}; +var mxStencilRegistry = { + stencils: [], + addStencil: function(a, b) { + mxStencilRegistry.stencils[a] = b + }, + getStencil: function(a) { + return mxStencilRegistry.stencils[a] + } + }, + mxMarker = { + markers: [], + addMarker: function(a, b) { + mxMarker.markers[a] = b + }, + createMarker: function(a, b, c, d, e, f, g, h, k, l) { + var m = mxMarker.markers[c]; + return null != m ? m(a, b, c, d, e, f, g, h, k, l) : null + } + }; +(function() { + function a(a, b, e, f, g, h, k, l, m, n) { + b = 1.118 * g * m; + l = 1.118 * h * m; + g *= k + m; + h *= k + m; + var p = f.clone(); + p.x -= b; + p.y -= l; + k = e != mxConstants.ARROW_CLASSIC ? 1 : 0.75; + f.x += -g * k - b; + f.y += -h * k - l; + return function() { + a.begin(); + a.moveTo(p.x, p.y); + a.lineTo(p.x - g - h / 2, p.y - h + g / 2); + e == mxConstants.ARROW_CLASSIC && a.lineTo(p.x - 3 * g / 4, p.y - 3 * h / 4); + a.lineTo(p.x + h / 2 - g, p.y - h - g / 2); + a.close(); + n ? a.fillAndStroke() : a.stroke() + } + } + + function b(a, b, e, f, g, h, k, l, m, n) { + l = e == mxConstants.ARROW_DIAMOND ? 0.7071 : 0.9862; + b = g * m * l; + l *= h * m; + g *= k + m; + h *= k + m; + var p = f.clone(); + p.x -= b; + p.y -= l; + f.x += -g - b; + f.y += -h - l; + var q = e == mxConstants.ARROW_DIAMOND ? 2 : 3.4; + return function() { + a.begin(); + a.moveTo(p.x, p.y); + a.lineTo(p.x - g / 2 - h / q, p.y + g / q - h / 2); + a.lineTo(p.x - g, p.y - h); + a.lineTo(p.x - g / 2 + h / q, p.y - h / 2 - g / q); + a.close(); + n ? a.fillAndStroke() : a.stroke() + } + } + mxMarker.addMarker("classic", a); + mxMarker.addMarker("block", a); + mxMarker.addMarker("open", function(a, b, e, f, g, h, k, l, m, n) { + b = 1.118 * g * m; + e = 1.118 * h * m; + g *= k + m; + h *= k + m; + var p = f.clone(); + p.x -= b; + p.y -= e; + f.x += 2 * -b; + f.y += 2 * -e; + return function() { + a.begin(); + a.moveTo(p.x - g - + h / 2, p.y - h + g / 2); + a.lineTo(p.x, p.y); + a.lineTo(p.x + h / 2 - g, p.y - h - g / 2); + a.stroke() + } + }); + mxMarker.addMarker("oval", function(a, b, e, f, g, h, k, l, m, n) { + var p = k / 2, + q = f.clone(); + f.x -= g * p; + f.y -= h * p; + return function() { + a.ellipse(q.x - p, q.y - p, k, k); + n ? a.fillAndStroke() : a.stroke() + } + }); + mxMarker.addMarker("diamond", b); + mxMarker.addMarker("diamondThin", b) +})(); + +function mxActor(a, b, c, d) { + mxShape.call(this); + this.bounds = a; + this.fill = b; + this.stroke = c; + this.strokewidth = null != d ? d : 1 +} +mxUtils.extend(mxActor, mxShape); +mxActor.prototype.paintVertexShape = function(a, b, c, d, e) { + a.translate(b, c); + a.begin(); + this.redrawPath(a, b, c, d, e); + a.fillAndStroke() +}; +mxActor.prototype.redrawPath = function(a, b, c, d, e) { + b = d / 3; + a.moveTo(0, e); + a.curveTo(0, 3 * e / 5, 0, 2 * e / 5, d / 2, 2 * e / 5); + a.curveTo(d / 2 - b, 2 * e / 5, d / 2 - b, 0, d / 2, 0); + a.curveTo(d / 2 + b, 0, d / 2 + b, 2 * e / 5, d / 2, 2 * e / 5); + a.curveTo(d, 2 * e / 5, d, 3 * e / 5, d, e); + a.close() +}; + +function mxCloud(a, b, c, d) { + mxActor.call(this); + this.bounds = a; + this.fill = b; + this.stroke = c; + this.strokewidth = null != d ? d : 1 +} +mxUtils.extend(mxCloud, mxActor); +mxCloud.prototype.redrawPath = function(a, b, c, d, e) { + a.moveTo(0.25 * d, 0.25 * e); + a.curveTo(0.05 * d, 0.25 * e, 0, 0.5 * e, 0.16 * d, 0.55 * e); + a.curveTo(0, 0.66 * e, 0.18 * d, 0.9 * e, 0.31 * d, 0.8 * e); + a.curveTo(0.4 * d, e, 0.7 * d, e, 0.8 * d, 0.8 * e); + a.curveTo(d, 0.8 * e, d, 0.6 * e, 0.875 * d, 0.5 * e); + a.curveTo(d, 0.3 * e, 0.8 * d, 0.1 * e, 0.625 * d, 0.2 * e); + a.curveTo(0.5 * d, 0.05 * e, 0.3 * d, 0.05 * e, 0.25 * d, 0.25 * e); + a.close() +}; + +function mxRectangleShape(a, b, c, d) { + mxShape.call(this); + this.bounds = a; + this.fill = b; + this.stroke = c; + this.strokewidth = null != d ? d : 1 +} +mxUtils.extend(mxRectangleShape, mxShape); +mxRectangleShape.prototype.isHtmlAllowed = function() { + return !this.isRounded && !this.glass && 0 == this.rotation +}; +mxRectangleShape.prototype.paintBackground = function(a, b, c, d, e) { + if (this.isRounded) { + var f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR) / 100, + f = Math.min(d * f, e * f); + a.roundrect(b, c, d, e, f, f) + } else a.rect(b, c, d, e); + a.fillAndStroke() +}; +mxRectangleShape.prototype.paintForeground = function(a, b, c, d, e) { + this.glass && this.paintGlassEffect(a, b, c, d, e, this.getArcSize(d + this.strokewidth, e + this.strokewidth)) +}; +mxRectangleShape.prototype.redrawHtmlShape = function() { + this.updateHtmlBounds(this.node); + this.updateHtmlFilters(this.node); + this.updateHtmlColors(this.node) +}; +mxRectangleShape.prototype.updateHtmlBounds = function(a) { + var b = 9 <= document.documentMode ? 0 : Math.ceil(this.strokewidth * this.scale); + a.style.borderWidth = Math.max(1, b) + "px"; + a.style.overflow = "hidden"; + a.style.left = Math.round(this.bounds.x - b / 2) + "px"; + a.style.top = Math.round(this.bounds.y - b / 2) + "px"; + "CSS1Compat" == document.compatMode && (b = -b); + a.style.width = Math.round(Math.max(0, this.bounds.width + b)) + "px"; + a.style.height = Math.round(Math.max(0, this.bounds.height + b)) + "px" +}; +mxRectangleShape.prototype.updateHtmlColors = function(a) { + var b = this.stroke; + null != b && b != mxConstants.NONE ? (a.style.borderColor = b, this.isDashed ? a.style.borderStyle = "dashed" : 0 < this.strokewidth && (a.style.borderStyle = "solid"), a.style.borderWidth = Math + .max(1, Math.ceil(this.strokewidth * this.scale)) + "px") : a.style.borderWidth = "0px"; + b = this.fill; + null != b && b != mxConstants.NONE ? (a.style.backgroundColor = b, a.style.backgroundImage = "none") : this.pointerEvents ? a.style.backgroundColor = "transparent" : 8 == document.documentMode ? + mxUtils.addTransparentBackgroundFilter(a) : this.setTransparentBackgroundImage(a) +}; +mxRectangleShape.prototype.updateHtmlFilters = function(a) { + var b = ""; + 100 > this.opacity && (b += "alpha(opacity\x3d" + this.opacity + ")"); + this.isShadow && (b += "progid:DXImageTransform.Microsoft.dropShadow (OffX\x3d'" + Math.round(mxConstants.SHADOW_OFFSET_X * this.scale) + "', OffY\x3d'" + Math.round(mxConstants.SHADOW_OFFSET_Y * + this.scale) + "', Color\x3d'" + mxConstants.SHADOWCOLOR + "')"); + if (this.gradient) { + var c = this.fill, + d = this.gradient, + e = "0", + f = { + east: 0, + south: 1, + west: 2, + north: 3 + }, + g = null != this.direction ? f[this.direction] : 0; + null != + this.gradientDirection && (g = mxUtils.mod(g + f[this.gradientDirection] - 1, 4)); + 1 == g ? (e = "1", f = c, c = d, d = f) : 2 == g ? (f = c, c = d, d = f) : 3 == g && (e = "1"); + b += "progid:DXImageTransform.Microsoft.gradient(startColorStr\x3d'" + c + "', endColorStr\x3d'" + d + "', gradientType\x3d'" + e + "')" + } + a.style.filter = b +}; + +function mxEllipse(a, b, c, d) { + mxShape.call(this); + this.bounds = a; + this.fill = b; + this.stroke = c; + this.strokewidth = null != d ? d : 1 +} +mxUtils.extend(mxEllipse, mxShape); +mxEllipse.prototype.paintVertexShape = function(a, b, c, d, e) { + a.ellipse(b, c, d, e); + a.fillAndStroke() +}; + +function mxDoubleEllipse(a, b, c, d) { + mxShape.call(this); + this.bounds = a; + this.fill = b; + this.stroke = c; + this.strokewidth = null != d ? d : 1 +} +mxUtils.extend(mxDoubleEllipse, mxShape); +mxDoubleEllipse.prototype.vmlScale = 10; +mxDoubleEllipse.prototype.paintBackground = function(a, b, c, d, e) { + a.ellipse(b, c, d, e); + a.fillAndStroke() +}; +mxDoubleEllipse.prototype.paintForeground = function(a, b, c, d, e) { + var f = Math.min(4, Math.min(d / 5, e / 5)); + d -= 2 * f; + e -= 2 * f; + 0 < d && 0 < e && a.ellipse(b + f, c + f, d, e); + a.stroke() +}; + +function mxRhombus(a, b, c, d) { + mxShape.call(this); + this.bounds = a; + this.fill = b; + this.stroke = c; + this.strokewidth = null != d ? d : 1 +} +mxUtils.extend(mxRhombus, mxShape); +mxRhombus.prototype.paintVertexShape = function(a, b, c, d, e) { + var f = d / 2, + g = e / 2; + a.begin(); + a.moveTo(b + f, c); + a.lineTo(b + d, c + g); + a.lineTo(b + f, c + e); + a.lineTo(b, c + g); + a.close(); + a.fillAndStroke() +}; + +function mxPolyline(a, b, c) { + mxShape.call(this); + this.points = a; + this.stroke = b; + this.strokewidth = null != c ? c : 1 +} +mxUtils.extend(mxPolyline, mxShape); +mxPolyline.prototype.getRotation = function() { + return 0 +}; +mxPolyline.prototype.paintEdgeShape = function(a, b) { + this.paintLine(a, b, this.isRounded) +}; +mxPolyline.prototype.paintLine = function(a, b, c) { + var d = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2, + e = b[0], + f = b[b.length - 1]; + a.begin(); + a.moveTo(e.x, e.y); + for (var g = 1; g < b.length - 1; g++) { + var h = b[g], + k = e.x - h.x, + e = e.y - h.y; + if (c && g < b.length - 1 && (0 != k || 0 != e)) { + var l = Math.sqrt(k * k + e * e), + k = k * Math.min(d, l / 2) / l, + e = e * Math.min(d, l / 2) / l; + a.lineTo(h.x + k, h.y + e); + e = b[g + 1]; + k = e.x - h.x; + e = e.y - h.y; + l = Math.max(1, Math.sqrt(k * k + e * e)); + k = k * Math.min(d, l / 2) / l; + e = e * Math.min(d, l / 2) / l; + k = h.x + k; + e = h.y + e; + a.quadTo(h.x, + h.y, k, e); + h = new mxPoint(k, e) + } else a.lineTo(h.x, h.y); + e = h + } + a.lineTo(f.x, f.y); + a.stroke() +}; + +function mxArrow(a, b, c, d, e, f, g) { + mxShape.call(this); + this.points = a; + this.fill = b; + this.stroke = c; + this.strokewidth = null != d ? d : 1; + this.arrowWidth = null != e ? e : mxConstants.ARROW_WIDTH; + this.spacing = null != f ? f : mxConstants.ARROW_SPACING; + this.endSize = null != g ? g : mxConstants.ARROW_SIZE +} +mxUtils.extend(mxArrow, mxShape); +mxArrow.prototype.paintEdgeShape = function(a, b) { + var c = mxConstants.ARROW_SPACING, + d = mxConstants.ARROW_WIDTH, + e = mxConstants.ARROW_SIZE, + f = b[0], + g = b[b.length - 1], + h = g.x - f.x, + k = g.y - f.y, + l = Math.sqrt(h * h + k * k), + m = l - 2 * c - e, + h = h / l, + k = k / l, + l = d * k / 3, + d = -d * h / 3, + e = f.x - l / 2 + c * h, + f = f.y - d / 2 + c * k, + n = e + l, + p = f + d, + q = n + m * h, + m = p + m * k, + s = q + l, + r = m + d, + t = s - 3 * l, + v = r - 3 * d; + a.begin(); + a.moveTo(e, f); + a.lineTo(n, p); + a.lineTo(q, m); + a.lineTo(s, r); + a.lineTo(g.x - c * h, g.y - c * k); + a.lineTo(t, v); + a.lineTo(t + l, v + d); + a.close(); + a.fillAndStroke() +}; + +function mxText(a, b, c, d, e, f, g, h, k, l, m, n, p, q, s, r, t, v, w, u) { + mxShape.call(this); + this.value = a; + this.bounds = b; + this.color = null != e ? e : "black"; + this.align = null != c ? c : ""; + this.valign = null != d ? d : ""; + this.family = null != f ? f : mxConstants.DEFAULT_FONTFAMILY; + this.size = null != g ? g : mxConstants.DEFAULT_FONTSIZE; + this.fontStyle = null != h ? h : mxConstants.DEFAULT_FONTSTYLE; + this.spacing = parseInt(k || 2); + this.spacingTop = this.spacing + parseInt(l || 0); + this.spacingRight = this.spacing + parseInt(m || 0); + this.spacingBottom = this.spacing + parseInt(n || 0); + this.spacingLeft = this.spacing + parseInt(p || 0); + this.horizontal = null != q ? q : !0; + this.background = s; + this.border = r; + this.wrap = null != t ? t : !1; + this.clipped = null != v ? v : !1; + this.overflow = null != w ? w : "visible"; + this.labelPadding = null != u ? u : 0; + this.rotation = 0 +} +mxUtils.extend(mxText, mxShape); +mxText.prototype.baseSpacingTop = 0; +mxText.prototype.baseSpacingBottom = 0; +mxText.prototype.baseSpacingLeft = 0; +mxText.prototype.baseSpacingRight = 0; +mxText.prototype.replaceLinefeeds = !0; +mxText.prototype.verticalTextRotation = -90; +mxText.prototype.ignoreClippedStringSize = !0; +mxText.prototype.ignoreStringSize = !1; +mxText.prototype.isParseVml = function() { + return !1 +}; +mxText.prototype.isHtmlAllowed = function() { + return 8 != document.documentMode +}; +mxText.prototype.getSvgScreenOffset = function() { + return 0 +}; +mxText.prototype.checkBounds = function() { + return null != this.bounds && !isNaN(this.bounds.x) && !isNaN(this.bounds.y) && !isNaN(this.bounds.width) && !isNaN(this.bounds.height) +}; +mxText.prototype.updateBoundingBox = function() { + var a = this.node; + 8 == document.documentMode && null != a.firstChild && (a = a.firstChild, null != a.firstChild && (a = a.firstChild)); + this.boundingBox = this.bounds.clone(); + var b = this.getTextRotation(); + if (!this.ignoreStringSize && null != a && "fill" != this.overflow && (!this.clipped || !this.ignoreClippedStringSize)) { + var c = null, + d = null; + if (null != a.ownerSVGElement) + if (null != a.firstChild && null != a.firstChild.firstChild && "foreignObject" == a.firstChild.firstChild.nodeName) a = a.firstChild.firstChild, + c = this.wrap ? this.bounds.width : parseInt(a.getAttribute("width")) * this.scale, d = parseInt(a.getAttribute("height")) * this.scale; + else { + b = a.getBBox(); + if (0 == b.width && 0 == b.height) return; + this.boundingBox = new mxRectangle(b.x, b.y, b.width, b.height); + b = 0 + } else d = this.state.view.textDiv, null != this.offsetWidth && null != this.offsetHeight ? (c = this.wrap ? this.bounds.width : this.offsetWidth * this.scale, d = this.offsetHeight * this.scale) : + null != d ? (this.updateFont(d), this.updateSize(d), mxUtils.isNode(this.value) ? d.innerHTML = this.value.outerHTML : + (c = this.replaceLinefeeds ? this.value.replace(/\n/g, "\x3cbr/\x3e") : this.value, d.innerHTML = c), c = this.wrap ? this.bounds.width : d.offsetWidth * this.scale, d = d.offsetHeight * + this.scale) : (c = this.wrap ? this.bounds.width : a.offsetWidth * this.scale, d = a.offsetHeight * this.scale); + null != c && null != d && (this.boundingBox = new mxRectangle(this.bounds.x + this.margin.x * c, this.bounds.y + this.margin.y * d, c, d)) + } else this.boundingBox.x += this.margin.x * this.boundingBox.width, this.boundingBox.y += this.margin.y * this.boundingBox.height; + null != + this.boundingBox && (0 != b && (b = mxUtils.getBoundingBox(this.boundingBox, b), this.boundingBox.x = b.x, this.boundingBox.y = b.y, mxClient.IS_QUIRKS || (this.boundingBox.width = b.width, + this.boundingBox.height = b.height)), this.boundingBox.x = Math.floor(this.boundingBox.x), this.boundingBox.y = Math.floor(this.boundingBox.y), this.boundingBox.width = Math.ceil(this.boundingBox + .width), this.boundingBox.height = Math.ceil(this.boundingBox.height)) +}; +mxText.prototype.getShapeRotation = function() { + return 0 +}; +mxText.prototype.getTextRotation = function() { + return null != this.state && null != this.state.shape ? this.state.shape.getTextRotation() : 0 +}; +mxText.prototype.isPaintBoundsInverted = function() { + return !this.horizontal && null != this.state && this.state.view.graph.model.isVertex(this.state.cell) +}; +mxText.prototype.configureCanvas = function(a, b, c, d, e) { + mxShape.prototype.configureCanvas.apply(this, arguments); + a.setFontColor(this.color); + a.setFontBackgroundColor(this.background); + a.setFontBorderColor(this.border); + a.setFontFamily(this.family); + a.setFontSize(this.size); + a.setFontStyle(this.fontStyle) +}; +mxText.prototype.updateVmlContainer = function() { + this.node.style.left = Math.round(this.bounds.x) + "px"; + this.node.style.top = Math.round(this.bounds.y) + "px"; + this.node.style.width = "1px"; + this.node.style.height = "1px"; + this.node.style.overflow = "visible" +}; +mxText.prototype.paint = function(a) { + var b = this.scale, + c = this.bounds.x / b, + d = this.bounds.y / b, + e = this.bounds.width / b, + b = this.bounds.height / b; + this.updateTransform(a, c, d, e, b); + this.configureCanvas(a, c, d, e, b); + var f = mxUtils.isNode(this.value) || this.dialect == mxConstants.DIALECT_STRICTHTML, + g = f || a instanceof mxVmlCanvas2D ? "html" : "", + h = this.value; + !f && "html" == g && (h = mxUtils.htmlEntities(h, !1)); + h = !mxUtils.isNode(this.value) && this.replaceLinefeeds && "html" == g ? h.replace(/\n/g, "\x3cbr/\x3e") : h; + a.text(c, d, e, b, h, this.align, + this.valign, this.wrap, g, "fill" == this.overflow, this.clipped, this.getTextRotation()) +}; +mxText.prototype.redrawHtmlShape = function() { + var a = this.node.style; + a.opacity = 1 > this.opacity ? this.opacity : ""; + a.overflow = ""; + a.width = ""; + a.height = ""; + this.updateFont(this.node); + this.updateSize(this.node); + this.updateValue(); + this.offsetHeight = this.offsetWidth = null; + null != mxClient.CSS_PREFIX ? this.updateHtmlTransform() : this.updateHtmlFilter() +}; +mxText.prototype.updateHtmlTransform = function() { + var a = this.getTextRotation(), + b = this.node.style, + c = this.margin.x, + d = this.margin.y; + 0 != a ? (b[mxClient.CSS_PREFIX + "TransformOrigin"] = 100 * -c + "% " + 100 * -d + "%", b[mxClient.CSS_PREFIX + "Transform"] = "translate(" + 100 * c + "%," + 100 * d + "%)scale(" + this.scale + + ") rotate(" + a + "deg)") : (b[mxClient.CSS_PREFIX + "TransformOrigin"] = "0% 0%", b[mxClient.CSS_PREFIX + "Transform"] = "scale(" + this.scale + ")translate(" + 100 * c + "%," + 100 * d + + "%)"); + b.left = Math.round(this.bounds.x) + "px"; + b.top = Math.round(this.bounds.y) + + "px" +}; +mxText.prototype.updateHtmlFilter = function() { + var a = this.node.style, + b = this.margin.x, + c = this.margin.y, + d = this.scale; + a.filter = ""; + var e = 0, + f = 0, + g = null != this.state ? this.state.view.textDiv : null; + if (null != g) { + g.style.overflow = ""; + g.style.height = ""; + g.style.width = ""; + this.updateFont(g); + this.updateSize(g); + if (mxUtils.isNode(this.value)) g.innerHTML = this.value.outerHTML; + else { + var h = this.value; + this.dialect != mxConstants.DIALECT_STRICTHTML && (h = mxUtils.htmlEntities(h, !1)); + h = this.replaceLinefeeds ? h.replace(/\n/g, "\x3cbr/\x3e") : h; + g.innerHTML = h + } + e = g.offsetWidth + 2; + f = g.offsetHeight + 2 + } else e = this.node.offsetWidth, f = this.node.offsetHeight + 1; + this.offsetWidth = e; + this.offsetHeight = f; + g = this.bounds.width / d; + h = this.bounds.height / d; + mxClient.IS_QUIRKS && (this.clipped || "fill" == this.overflow) && 0 < h ? (h = Math.min(h, f), a.height = Math.round(h + 1) + "px") : h = f; + "fill" != this.overflow && (mxClient.IS_QUIRKS && (this.clipped || this.wrap) && 0 < g ? (g = Math.min(g, e), a.width = Math.round(g) + "px") : g = e); + var h = h * d, + g = g * d, + e = this.getTextRotation() * (Math.PI / 180), + f = parseFloat(parseFloat(Math.cos(e)).toFixed(8)), + k = parseFloat(parseFloat(Math.sin(-e)).toFixed(8)), + e = e % (2 * Math.PI); + 0 > e && (e += 2 * Math.PI); + e %= Math.PI; + e > Math.PI / 2 && (e = Math.PI - e); + var l = Math.cos(e), + m = Math.sin(-e), + b = g * -(b + 0.5), + c = h * -(c + 0.5), + n = (h - h * l + g * m) / 2 + k * b - f * c; + 0 != e && (a.filter = "progid:DXImageTransform.Microsoft.Matrix(M11\x3d" + f + ", M12\x3d" + k + ", M21\x3d" + -k + ", M22\x3d" + f + ", sizingMethod\x3d'auto expand')"); + a.zoom = d; + a.left = Math.round(this.bounds.x + ((g - g * l + h * m) / 2 - f * b - k * c) - g / 2) + "px"; + a.top = Math.round(this.bounds.y + n - h / 2) + "px" +}; +mxText.prototype.updateValue = function() { + if (mxUtils.isNode(this.value)) this.node.innerHTML = "", this.node.appendChild(this.value); + else { + var a = this.value; + this.dialect != mxConstants.DIALECT_STRICTHTML && (a = mxUtils.htmlEntities(a, !1)); + var a = this.replaceLinefeeds ? a.replace(/\n/g, "\x3cbr/\x3e") : a, + b = null != this.background && this.background != mxConstants.NONE ? this.background : null, + c = null != this.border && this.border != mxConstants.NONE ? this.border : null; + if (null != b || null != c) + if ("fill" == this.overflow) null != b && (this.node.style.backgroundColor = + b), null != c && (this.node.style.border = "1px solid " + c); + else { + var d = ""; + null != b && (d += "background-color:" + b + ";"); + null != c && (d += "border:1px solid " + c + ";"); + a = '\x3cdiv style\x3d"zoom:1;' + d + "display:inline-block;_display:inline;padding-bottom:1px;padding-right:1px;line-height:" + this.node.style.lineHeight + '"\x3e' + a + "\x3c/div\x3e"; + this.node.style.lineHeight = "" + } + this.node.innerHTML = a + } +}; +mxText.prototype.updateFont = function(a) { + a = a.style; + a.lineHeight = Math.round(this.size * mxConstants.LINE_HEIGHT) + "px"; + a.fontSize = Math.round(this.size) + "px"; + a.fontFamily = this.family; + a.verticalAlign = "top"; + a.color = this.color; + a.fontWeight = (this.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD ? "bold" : ""; + a.fontStyle = (this.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC ? "italic" : ""; + a.fontDecoration = (this.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE ? "underline" : ""; + a.textAlign = + this.align == mxConstants.ALIGN_CENTER ? "center" : this.align == mxConstants.ALIGN_RIGHT ? "right" : "left" +}; +mxText.prototype.updateSize = function(a) { + var b = Math.round(this.bounds.width / this.scale), + c = Math.round(this.bounds.height / this.scale); + a = a.style; + this.clipped ? (a.overflow = "hidden", 0 < c && (a.maxHeight = c + "px"), 0 < b && (a.width = b + "px")) : "fill" == this.overflow && (a.width = b + "px", 0 < c && (a.maxHeight = c + "px")); + this.wrap ? (!this.clipped && 0 < b && (a.width = b + "px"), a.whiteSpace = "normal") : a.whiteSpace = "nowrap" +}; +mxText.prototype.updateMargin = function() { + this.margin = mxUtils.getAlignmentAsPoint(this.align, this.valign) +}; +mxText.prototype.getSpacing = function() { + var a = 0, + b = 0, + a = this.align == mxConstants.ALIGN_CENTER ? (this.spacingLeft - this.spacingRight) / 2 : this.align == mxConstants.ALIGN_RIGHT ? -this.spacingRight - this.baseSpacingRight : this.spacingLeft + + this.baseSpacingLeft, + b = this.valign == mxConstants.ALIGN_MIDDLE ? (this.spacingTop - this.spacingBottom) / 2 : this.valign == mxConstants.ALIGN_BOTTOM ? -this.spacingBottom - this.baseSpacingBottom : this.spacingTop + + this.baseSpacingTop; + return new mxPoint(a, b) +}; + +function mxTriangle() { + mxActor.call(this) +} +mxUtils.extend(mxTriangle, mxActor); +mxTriangle.prototype.redrawPath = function(a, b, c, d, e) { + a.moveTo(0, 0); + a.lineTo(d, 0.5 * e); + a.lineTo(0, e); + a.close() +}; + +function mxHexagon() { + mxActor.call(this) +} +mxUtils.extend(mxHexagon, mxActor); +mxHexagon.prototype.redrawPath = function(a, b, c, d, e) { + a.moveTo(0.25 * d, 0); + a.lineTo(0.75 * d, 0); + a.lineTo(d, 0.5 * e); + a.lineTo(0.75 * d, e); + a.lineTo(0.25 * d, e); + a.lineTo(0, 0.5 * e); + a.close() +}; + +function mxLine(a, b, c) { + mxShape.call(this); + this.bounds = a; + this.stroke = b; + this.strokewidth = null != c ? c : 1 +} +mxUtils.extend(mxLine, mxShape); +mxLine.prototype.paintVertexShape = function(a, b, c, d, e) { + c += e / 2; + a.begin(); + a.moveTo(b, c); + a.lineTo(b + d, c); + a.stroke() +}; + +function mxImageShape(a, b, c, d, e) { + mxShape.call(this); + this.bounds = a; + this.image = b; + this.fill = c; + this.stroke = d; + this.strokewidth = null != e ? e : 1; + this.shadow = !1 +} +mxUtils.extend(mxImageShape, mxRectangleShape); +mxImageShape.prototype.preserveImageAspect = !0; +mxImageShape.prototype.getSvgScreenOffset = function() { + return !mxClient.IS_IE ? 0.5 : 0 +}; +mxImageShape.prototype.apply = function(a) { + mxShape.prototype.apply.apply(this, arguments); + this.gradient = this.stroke = this.fill = null; + null != this.style && (this.fill = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BACKGROUND), this.stroke = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BORDER), this.preserveImageAspect = + 1 == mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_ASPECT, 1), this.flipH = this.flipH || 1 == mxUtils.getValue(this.style, "imageFlipH", 0), this.flipV = this.flipV || 1 == mxUtils.getValue( + this.style, + "imageFlipV", 0)) +}; +mxImageShape.prototype.isHtmlAllowed = function() { + return !this.preserveImageAspect +}; +mxImageShape.prototype.createHtml = function() { + var a = document.createElement("div"); + a.style.position = "absolute"; + return a +}; +mxImageShape.prototype.paintVertexShape = function(a, b, c, d, e) { + if (null != this.image) { + var f = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BACKGROUND, null), + g = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BORDER, null); + if (null != f || null != g) a.setFillColor(f), a.setStrokeColor(g), a.rect(b, c, d, e), a.fillAndStroke(); + a.image(b, c, d, e, this.image, this.preserveImageAspect, !1, !1) + } else mxRectangleShape.prototype.paintBackground.apply(this, arguments) +}; +mxImageShape.prototype.redrawHtmlShape = function() { + this.node.style.left = Math.round(this.bounds.x) + "px"; + this.node.style.top = Math.round(this.bounds.y) + "px"; + this.node.style.width = Math.max(0, Math.round(this.bounds.width)) + "px"; + this.node.style.height = Math.max(0, Math.round(this.bounds.height)) + "px"; + this.node.style.backgroundColor = this.fill || ""; + this.node.style.borderColor = this.stroke || ""; + this.node.innerHTML = ""; + if (null != this.image) { + var a = document.createElement(mxClient.IS_IE6 || null == mxClient.CSS_PREFIX && 0 != + this.rotation ? mxClient.VML_PREFIX + ":image" : "img"); + a.style.position = "absolute"; + a.src = this.image; + var b = 100 > this.opacity ? "alpha(opacity\x3d" + this.opacity + ")" : ""; + this.node.style.filter = b; + this.flipH && this.flipV ? b += "progid:DXImageTransform.Microsoft.BasicImage(rotation\x3d2)" : this.flipH ? b += "progid:DXImageTransform.Microsoft.BasicImage(mirror\x3d1)" : this.flipV && (b += + "progid:DXImageTransform.Microsoft.BasicImage(rotation\x3d2, mirror\x3d1)"); + a.style.filter != b && (a.style.filter = b); + "image" == a.nodeName ? a.style.rotation = + this.rotation : a.style[mxClient.CSS_PREFIX + "Transform"] = "rotate(" + this.rotation + "deg)"; + a.style.width = this.node.style.width; + a.style.height = this.node.style.height; + this.node.style.backgroundImage = ""; + this.node.appendChild(a) + } else this.setTransparentBackgroundImage(this.node) +}; + +function mxLabel(a, b, c, d) { + mxRectangleShape.call(this, a, b, c, d) +} +mxUtils.extend(mxLabel, mxRectangleShape); +mxLabel.prototype.imageSize = mxConstants.DEFAULT_IMAGESIZE; +mxLabel.prototype.spacing = 2; +mxLabel.prototype.indicatorSize = 10; +mxLabel.prototype.indicatorSpacing = 2; +mxLabel.prototype.init = function(a) { + mxShape.prototype.init.apply(this, arguments); + null != this.indicatorColor && null != this.indicatorShape && (this.indicator = new this.indicatorShape, this.indicator.dialect = this.dialect, this.indicator.bounds = this.bounds, this.indicator + .fill = this.indicatorColor, this.indicator.stroke = this.indicatorColor, this.indicator.gradient = this.indicatorGradientColor, this.indicator.direction = this.indicatorDirection, this.indicator + .init(this.node)) +}; +mxLabel.prototype.redraw = function() { + null != this.indicator && (this.indicator.fill = this.indicatorColor, this.indicator.stroke = this.indicatorColor, this.indicator.gradient = this.indicatorGradientColor, this.indicator.direction = + this.indicatorDirection); + mxShape.prototype.redraw.apply(this, arguments) +}; +mxLabel.prototype.isHtmlAllowed = function() { + return mxRectangleShape.prototype.isHtmlAllowed.apply(this, arguments) && null == this.indicatorColor && null == this.indicatorShape +}; +mxLabel.prototype.paintForeground = function(a, b, c, d, e) { + this.paintImage(a, b, c, d, e); + this.paintIndicator(a, b, c, d, e); + mxRectangleShape.prototype.paintForeground.apply(this, arguments) +}; +mxLabel.prototype.paintImage = function(a, b, c, d, e) { + null != this.image && (b = this.getImageBounds(b, c, d, e), a.image(b.x, b.y, b.width, b.height, this.image, !1, !1, !1)) +}; +mxLabel.prototype.getImageBounds = function(a, b, c, d) { + var e = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_ALIGN, mxConstants.ALIGN_LEFT), + f = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE), + g = mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_WIDTH, mxConstants.DEFAULT_IMAGESIZE), + h = mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_HEIGHT, mxConstants.DEFAULT_IMAGESIZE), + k = mxUtils.getNumber(this.style, mxConstants.STYLE_SPACING, this.spacing) + 5; + a = e == mxConstants.ALIGN_CENTER ? + a + (c - g) / 2 : e == mxConstants.ALIGN_RIGHT ? a + (c - g - k) : a + k; + b = f == mxConstants.ALIGN_TOP ? b + k : f == mxConstants.ALIGN_BOTTOM ? b + (d - h - k) : b + (d - h) / 2; + return new mxRectangle(a, b, g, h) +}; +mxLabel.prototype.paintIndicator = function(a, b, c, d, e) { + null != this.indicator ? (this.indicator.bounds = this.getIndicatorBounds(b, c, d, e), this.indicator.paint(a)) : null != this.indicatorImage && (b = this.getIndicatorBounds(b, c, d, e), a.image( + b.x, b.y, b.width, b.height, this.indicatorImage, !1, !1, !1)) +}; +mxLabel.prototype.getIndicatorBounds = function(a, b, c, d) { + var e = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_ALIGN, mxConstants.ALIGN_LEFT), + f = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE), + g = mxUtils.getNumber(this.style, mxConstants.STYLE_INDICATOR_WIDTH, this.indicatorSize), + h = mxUtils.getNumber(this.style, mxConstants.STYLE_INDICATOR_HEIGHT, this.indicatorSize), + k = this.spacing + 5; + a = e == mxConstants.ALIGN_RIGHT ? a + (c - g - k) : e == mxConstants.ALIGN_CENTER ? a + (c - g) / + 2 : a + k; + b = f == mxConstants.ALIGN_BOTTOM ? b + (d - h - k) : f == mxConstants.ALIGN_TOP ? b + k : b + (d - h) / 2; + return new mxRectangle(a, b, g, h) +}; +mxLabel.prototype.redrawHtmlShape = function() { + for (mxRectangleShape.prototype.redrawHtmlShape.apply(this, arguments); this.node.hasChildNodes();) this.node.removeChild(this.node.lastChild); + if (null != this.image) { + var a = document.createElement("img"); + a.style.position = "relative"; + a.setAttribute("border", "0"); + var b = this.getImageBounds(this.bounds.x, this.bounds.y, this.bounds.width, this.bounds.height); + b.x -= this.bounds.x; + b.y -= this.bounds.y; + a.style.left = Math.round(b.x) + "px"; + a.style.top = Math.round(b.y) + "px"; + a.style.width = + Math.round(b.width) + "px"; + a.style.height = Math.round(b.height) + "px"; + a.src = this.image; + this.node.appendChild(a) + } +}; + +function mxCylinder(a, b, c, d) { + mxShape.call(this); + this.bounds = a; + this.fill = b; + this.stroke = c; + this.strokewidth = null != d ? d : 1 +} +mxUtils.extend(mxCylinder, mxShape); +mxCylinder.prototype.maxHeight = 40; +mxCylinder.prototype.svgStrokeTolerance = 0; +mxCylinder.prototype.paintVertexShape = function(a, b, c, d, e) { + a.translate(b, c); + a.begin(); + this.redrawPath(a, b, c, d, e, !1); + a.fillAndStroke(); + a.setShadow(!1); + a.begin(); + this.redrawPath(a, b, c, d, e, !0); + a.stroke() +}; +mxCylinder.prototype.redrawPath = function(a, b, c, d, e, f) { + b = Math.min(this.maxHeight, Math.round(e / 5)); + if (f && null != this.fill || !f && null == this.fill) a.moveTo(0, b), a.curveTo(0, 2 * b, d, 2 * b, d, b), f || (a.stroke(), a.begin()); + f || (a.moveTo(0, b), a.curveTo(0, -b / 3, d, -b / 3, d, b), a.lineTo(d, e - b), a.curveTo(d, e + b / 3, 0, e + b / 3, 0, e - b), a.close()) +}; + +function mxConnector(a, b, c) { + mxPolyline.call(this, a, b, c) +} +mxUtils.extend(mxConnector, mxPolyline); +mxConnector.prototype.paintEdgeShape = function(a, b) { + var c = this.createMarker(a, b, !0), + d = this.createMarker(a, b, !1); + null == this.style || 1 != this.style[mxConstants.STYLE_CURVED] ? this.paintLine(a, b, this.isRounded) : this.paintCurvedLine(a, b); + a.setFillColor(this.stroke); + a.setShadow(!1); + a.setDashed(!1); + null != c && c(); + null != d && d() +}; +mxConnector.prototype.paintCurvedLine = function(a, b) { + a.begin(); + var c = b[0], + d = b.length; + a.moveTo(c.x, c.y); + for (c = 1; c < d - 2; c++) { + var e = b[c], + f = b[c + 1]; + a.quadTo(e.x, e.y, (e.x + f.x) / 2, (e.y + f.y) / 2) + } + e = b[d - 2]; + f = b[d - 1]; + a.quadTo(e.x, e.y, f.x, f.y); + a.stroke() +}; +mxConnector.prototype.createMarker = function(a, b, c) { + var d = b.length, + e = c ? b[1] : b[d - 2]; + b = c ? b[0] : b[d - 1]; + var d = b.x - e.x, + f = b.y - e.y, + g = Math.max(1, Math.sqrt(d * d + f * f)), + e = d / g, + d = f / g, + f = mxUtils.getNumber(this.style, c ? mxConstants.STYLE_STARTSIZE : mxConstants.STYLE_ENDSIZE, mxConstants.DEFAULT_MARKERSIZE), + g = mxUtils.getValue(this.style, c ? mxConstants.STYLE_STARTARROW : mxConstants.STYLE_ENDARROW); + return mxMarker.createMarker(a, this, g, b, e, d, f, c, this.strokewidth, 0 != this.style[c ? mxConstants.STYLE_STARTFILL : mxConstants.STYLE_ENDFILL]) +}; +mxConnector.prototype.augmentBoundingBox = function(a) { + mxShape.prototype.augmentBoundingBox.apply(this, arguments); + var b = 0; + mxUtils.getValue(this.style, mxConstants.STYLE_STARTARROW, mxConstants.NONE) != mxConstants.NONE && (b = mxUtils.getNumber(this.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_MARKERSIZE) + + 1); + mxUtils.getValue(this.style, mxConstants.STYLE_ENDARROW, mxConstants.NONE) != mxConstants.NONE && (b = Math.max(b, mxUtils.getNumber(this.style, mxConstants.STYLE_ENDSIZE, mxConstants.DEFAULT_MARKERSIZE)) + + 1); + a.grow(Math.ceil(b * this.scale)) +}; + +function mxSwimlane(a, b, c, d) { + mxShape.call(this); + this.bounds = a; + this.fill = b; + this.stroke = c; + this.strokewidth = null != d ? d : 1 +} +mxUtils.extend(mxSwimlane, mxShape); +mxSwimlane.prototype.imageSize = 16; +mxSwimlane.prototype.getGradientBounds = function(a, b, c, d, e) { + a = Math.min(e, mxUtils.getValue(this.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE)); + return new mxRectangle(b, c, d, a) +}; +mxSwimlane.prototype.getRotation = function() { + var a = mxShape.prototype.getRotation.apply(this, arguments); + 1 != mxUtils.getValue(this.style, mxConstants.STYLE_HORIZONTAL, 1) && (a += mxText.prototype.verticalTextRotation); + return a +}; +mxSwimlane.prototype.getTextRotation = function() { + return this.getRotation() +}; +mxSwimlane.prototype.isPaintBoundsInverted = function() { + return mxShape.prototype.isPaintBoundsInverted.apply(this, arguments) || 1 != mxUtils.getValue(this.style, mxConstants.STYLE_HORIZONTAL, 1) +}; +mxSwimlane.prototype.getArcSize = function(a, b, c) { + a = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR) / 100; + return 3 * c * a +}; +mxSwimlane.prototype.paintVertexShape = function(a, b, c, d, e) { + var f = Math.min(e, mxUtils.getValue(this.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE)), + g = mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_FILLCOLOR, mxConstants.NONE), + h = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_LINE, 1), + k = 0; + a.translate(b, c); + this.isRounded ? (k = this.getArcSize(d, e, f), this.paintRoundedSwimlane(a, b, c, d, e, f, k, g, h)) : this.paintSwimlane(a, b, c, d, e, f, g, h); + g = mxUtils.getValue(this.style, mxConstants.STYLE_SEPARATORCOLOR, + mxConstants.NONE); + this.paintSeparator(a, d, f, e, g); + null != this.image && (e = this.getImageBounds(b, f, d, e), a.image(e.x - b, e.y - c, e.width, e.height, this.image, !1, !1, !1)); + this.glass && (a.setShadow(!1), this.paintGlassEffect(a, 0, 0, d, f, k)) +}; +mxSwimlane.prototype.paintSwimlane = function(a, b, c, d, e, f, g, h) { + g != mxConstants.NONE && (a.save(), a.setFillColor(g), a.rect(0, 0, d, e), a.fillAndStroke(), a.restore(), a.setShadow(!1)); + a.begin(); + a.moveTo(0, f); + a.lineTo(0, 0); + a.lineTo(d, 0); + a.lineTo(d, f); + h && a.close(); + a.fillAndStroke(); + f < e && g == mxConstants.NONE && (a.pointerEvents = !1, a.begin(), a.moveTo(0, f), a.lineTo(0, e), a.lineTo(d, e), a.lineTo(d, f), a.stroke()) +}; +mxSwimlane.prototype.paintRoundedSwimlane = function(a, b, c, d, e, f, g, h, k) { + h != mxConstants.NONE && (a.save(), a.setFillColor(h), a.roundrect(0, 0, d, e, g, g), a.fillAndStroke(), a.restore(), a.setShadow(!1)); + a.begin(); + a.moveTo(d, f); + a.lineTo(d, g); + a.quadTo(d, 0, d - Math.min(d / 2, g), 0); + a.lineTo(Math.min(d / 2, g), 0); + a.quadTo(0, 0, 0, g); + a.lineTo(0, f); + k && a.close(); + a.fillAndStroke(); + f < e && h == mxConstants.NONE && (a.pointerEvents = !1, a.begin(), a.moveTo(0, f), a.lineTo(0, e - g), a.quadTo(0, e, Math.min(d / 2, g), e), a.lineTo(d - Math.min(d / 2, g), e), + a.quadTo(d, e, d, e - g), a.lineTo(d, f), a.stroke()) +}; +mxSwimlane.prototype.paintSeparator = function(a, b, c, d, e) { + e != mxConstants.NONE && (a.setStrokeColor(e), a.setDashed(!0), a.begin(), a.moveTo(b, c), a.lineTo(b, d), a.stroke(), a.setDashed(!1)) +}; +mxSwimlane.prototype.getImageBounds = function(a, b, c, d) { + return new mxRectangle(a + c - this.imageSize, b, this.imageSize, this.imageSize) +}; + +function mxGraphLayout(a) { + this.graph = a +} +mxGraphLayout.prototype.graph = null; +mxGraphLayout.prototype.useBoundingBox = !0; +mxGraphLayout.prototype.parent = null; +mxGraphLayout.prototype.moveCell = function(a, b, c) {}; +mxGraphLayout.prototype.execute = function(a) {}; +mxGraphLayout.prototype.getGraph = function() { + return this.graph +}; +mxGraphLayout.prototype.getConstraint = function(a, b, c, d) { + c = this.graph.view.getState(b); + b = null != c ? c.style : this.graph.getCellStyle(b); + return null != b ? b[a] : null +}; +mxGraphLayout.traverse = function(a, b, c, d, e) { + if (null != c && null != a) { + b = null != b ? b : !0; + e = e || []; + var f = mxCellPath.create(a); + if (null == e[f] && (e[f] = a, d = c(a, d), null == d || d)) + if (d = this.graph.model.getEdgeCount(a), 0 < d) + for (f = 0; f < d; f++) { + var g = this.graph.model.getEdgeAt(a, f), + h = this.graph.model.getTerminal(g, !0) == a; + if (!b || h) h = this.graph.view.getVisibleTerminal(g, !h), this.traverse(h, b, c, g, e) + } + } +}; +mxGraphLayout.prototype.isVertexMovable = function(a) { + return this.graph.isCellMovable(a) +}; +mxGraphLayout.prototype.isVertexIgnored = function(a) { + return !this.graph.getModel().isVertex(a) || !this.graph.isCellVisible(a) +}; +mxGraphLayout.prototype.isEdgeIgnored = function(a) { + var b = this.graph.getModel(); + return !b.isEdge(a) || !this.graph.isCellVisible(a) || null == b.getTerminal(a, !0) || null == b.getTerminal(a, !1) +}; +mxGraphLayout.prototype.setEdgeStyleEnabled = function(a, b) { + this.graph.setCellStyles(mxConstants.STYLE_NOEDGESTYLE, b ? "0" : "1", [a]) +}; +mxGraphLayout.prototype.setOrthogonalEdge = function(a, b) { + this.graph.setCellStyles(mxConstants.STYLE_ORTHOGONAL, b ? "1" : "0", [a]) +}; +mxGraphLayout.prototype.getParentOffset = function(a) { + var b = new mxPoint; + if (null != a && a != this.parent) { + var c = this.graph.getModel(); + if (c.isAncestor(this.parent, a)) + for (var d = c.getGeometry(a); a != this.parent;) b.x += d.x, b.y += d.y, a = c.getParent(a), d = c.getGeometry(a) + } + return b +}; +mxGraphLayout.prototype.setEdgePoints = function(a, b) { + if (null != a) { + var c = this.graph.model, + d = c.getGeometry(a); + null == d ? (d = new mxGeometry, d.setRelative(!0)) : d = d.clone(); + if (null != this.parent && null != b) + for (var e = c.getParent(a), e = this.getParentOffset(e), f = 0; f < b.length; f++) b[f].x -= e.x, b[f].y -= e.y; + d.points = b; + c.setGeometry(a, d) + } +}; +mxGraphLayout.prototype.setVertexLocation = function(a, b, c) { + var d = this.graph.getModel(), + e = d.getGeometry(a), + f = null; + if (null != e) { + f = new mxRectangle(b, c, e.width, e.height); + if (this.useBoundingBox) { + var g = this.graph.getView().getState(a); + if (null != g && null != g.text && null != g.text.boundingBox) { + var h = this.graph.getView().scale, + k = g.text.boundingBox; + g.text.boundingBox.x < g.x && (b += (g.x - k.x) / h, f.width = k.width); + g.text.boundingBox.y < g.y && (c += (g.y - k.y) / h, f.height = k.height) + } + } + null != this.parent && (g = d.getParent(a), null != g && g != + this.parent && (g = this.getParentOffset(g), b -= g.x, c -= g.y)); + if (e.x != b || e.y != c) e = e.clone(), e.x = b, e.y = c, d.setGeometry(a, e) + } + return f +}; +mxGraphLayout.prototype.getVertexBounds = function(a) { + var b = this.graph.getModel().getGeometry(a); + if (this.useBoundingBox) { + var c = this.graph.getView().getState(a); + if (null != c && null != c.text && null != c.text.boundingBox) var d = this.graph.getView().scale, + e = c.text.boundingBox, + f = Math.max(c.x - e.x, 0) / d, + g = Math.max(c.y - e.y, 0) / d, + h = Math.max(e.x + e.width - (c.x + c.width), 0) / d, + c = Math.max(e.y + e.height - (c.y + c.height), 0) / d, + b = new mxRectangle(b.x - f, b.y - g, b.width + f + h, b.height + g + c) + } + null != this.parent && (a = this.graph.getModel().getParent(a), + b = b.clone(), null != a && a != this.parent && (a = this.getParentOffset(a), b.x += a.x, b.y += a.y)); + return new mxRectangle(b.x, b.y, b.width, b.height) +}; +mxGraphLayout.prototype.arrangeGroups = function(a, b) { + this.graph.getModel().beginUpdate(); + try { + for (var c = a.length - 1; 0 <= c; c--) { + var d = a[c], + e = this.graph.getChildVertices(d), + f = this.graph.getBoundingBoxFromGeometry(e), + g = this.graph.getCellGeometry(d), + h = 0, + k = 0; + if (this.graph.isSwimlane(d)) var l = this.graph.getStartSize(d), + h = l.width, + k = l.height; + null != f && null != g && (g = g.clone(), g.x = g.x + f.x - b - h, g.y = g.y + f.y - b - k, g.width = f.width + 2 * b + h, g.height = f.height + 2 * b + k, this.graph.getModel().setGeometry(d, + g), this.graph.moveCells(e, + b + h - f.x, b + k - f.y)) + } + } finally { + this.graph.getModel().endUpdate() + } +}; + +function mxStackLayout(a, b, c, d, e, f) { + mxGraphLayout.call(this, a); + this.horizontal = null != b ? b : !0; + this.spacing = null != c ? c : 0; + this.x0 = null != d ? d : 0; + this.y0 = null != e ? e : 0; + this.border = null != f ? f : 0 +} +mxStackLayout.prototype = new mxGraphLayout; +mxStackLayout.prototype.constructor = mxStackLayout; +mxStackLayout.prototype.horizontal = null; +mxStackLayout.prototype.spacing = null; +mxStackLayout.prototype.x0 = null; +mxStackLayout.prototype.y0 = null; +mxStackLayout.prototype.border = 0; +mxStackLayout.prototype.keepFirstLocation = !1; +mxStackLayout.prototype.fill = !1; +mxStackLayout.prototype.resizeParent = !1; +mxStackLayout.prototype.resizeLast = !1; +mxStackLayout.prototype.wrap = null; +mxStackLayout.prototype.isHorizontal = function() { + return this.horizontal +}; +mxStackLayout.prototype.moveCell = function(a, b, c) { + var d = this.graph.getModel(), + e = d.getParent(a), + f = this.isHorizontal(); + if (null != a && null != e) { + var g = 0, + h = 0, + k = d.getChildCount(e); + b = f ? b : c; + g = this.graph.getView().getState(e); + null != g && (b -= f ? g.x : g.y); + for (g = 0; g < k; g++) + if (c = d.getChildAt(e, g), c != a && (c = d.getGeometry(c), null != c)) { + c = f ? c.x + c.width / 2 : c.y + c.height / 2; + if (h < b && c > b) break; + h = c + } + f = e.getIndex(a); + f = Math.max(0, g - (g > f ? 1 : 0)); + d.add(e, a, f) + } +}; +mxStackLayout.prototype.getParentSize = function(a) { + var b = this.graph.getModel(), + c = b.getGeometry(a); + if (null != this.graph.container && (null == c && b.isLayer(a) || a == this.graph.getView().currentRoot)) c = new mxRectangle(0, 0, this.graph.container.offsetWidth - 1, this.graph.container.offsetHeight - + 1); + return c +}; +mxStackLayout.prototype.execute = function(a) { + if (null != a) { + var b = this.isHorizontal(), + c = this.graph.getModel(), + d = this.getParentSize(a), + e = 0; + null != d && (e = b ? d.height : d.width); + var e = e - (2 * this.spacing + 2 * this.border), + f = this.x0 + this.border, + g = this.y0 + this.border; + if (this.graph.isSwimlane(a)) { + var h = this.graph.getCellStyle(a), + k = mxUtils.getValue(h, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE), + h = mxUtils.getValue(h, mxConstants.STYLE_HORIZONTAL, !0); + b == h && (e -= k); + b ? g += k : f += k + } + c.beginUpdate(); + try { + for (var k = 0, + h = null, l = c.getChildCount(a), m = 0; m < l; m++) { + var n = c.getChildAt(a, m); + if (!this.isVertexIgnored(n) && this.isVertexMovable(n)) { + var p = c.getGeometry(n); + if (null != p) { + p = p.clone(); + if (null != this.wrap && null != h && (b && h.x + h.width + p.width + 2 * this.spacing > this.wrap || !b && h.y + h.height + p.height + 2 * this.spacing > this.wrap)) h = null, b ? g += + k + this.spacing : f += k + this.spacing, k = 0; + k = Math.max(k, b ? p.height : p.width); + null != h ? b ? p.x = h.x + h.width + this.spacing : p.y = h.y + h.height + this.spacing : this.keepFirstLocation || (b ? p.x = f : p.y = g); + b ? p.y = g : p.x = f; + this.fill && 0 < e && (b ? p.height = e : p.width = e); + c.setGeometry(n, p); + h = p + } + } + } + this.resizeParent && null != d && null != h && !this.graph.isCellCollapsed(a) ? (d = d.clone(), b ? d.width = h.x + h.width + this.spacing : d.height = h.y + h.height + this.spacing, c.setGeometry( + a, d)) : this.resizeLast && (null != d && null != h) && (b ? h.width = d.width - h.x - this.spacing : h.height = d.height - h.y - this.spacing) + } finally { + c.endUpdate() + } + } +}; + +function mxPartitionLayout(a, b, c, d) { + mxGraphLayout.call(this, a); + this.horizontal = null != b ? b : !0; + this.spacing = c || 0; + this.border = d || 0 +} +mxPartitionLayout.prototype = new mxGraphLayout; +mxPartitionLayout.prototype.constructor = mxPartitionLayout; +mxPartitionLayout.prototype.horizontal = null; +mxPartitionLayout.prototype.spacing = null; +mxPartitionLayout.prototype.border = null; +mxPartitionLayout.prototype.resizeVertices = !0; +mxPartitionLayout.prototype.isHorizontal = function() { + return this.horizontal +}; +mxPartitionLayout.prototype.moveCell = function(a, b, c) { + c = this.graph.getModel(); + var d = c.getParent(a); + if (null != a && null != d) { + for (var e = 0, f = 0, g = c.getChildCount(d), e = 0; e < g; e++) { + var h = c.getChildAt(d, e), + h = this.getVertexBounds(h); + if (null != h) { + h = h.x + h.width / 2; + if (f < b && h > b) break; + f = h + } + } + b = d.getIndex(a); + b = Math.max(0, e - (e > b ? 1 : 0)); + c.add(d, a, b) + } +}; +mxPartitionLayout.prototype.execute = function(a) { + var b = this.isHorizontal(), + c = this.graph.getModel(), + d = c.getGeometry(a); + if (null != this.graph.container && (null == d && c.isLayer(a) || a == this.graph.getView().currentRoot)) d = new mxRectangle(0, 0, this.graph.container.offsetWidth - 1, this.graph.container.offsetHeight - + 1); + if (null != d) { + for (var e = [], f = c.getChildCount(a), g = 0; g < f; g++) { + var h = c.getChildAt(a, g); + !this.isVertexIgnored(h) && this.isVertexMovable(h) && e.push(h) + } + f = e.length; + if (0 < f) { + var k = this.border, + l = this.border, + m = b ? + d.height : d.width, + m = m - 2 * this.border; + a = this.graph.isSwimlane(a) ? this.graph.getStartSize(a) : new mxRectangle; + m -= b ? a.height : a.width; + k += a.width; + l += a.height; + a = this.border + (f - 1) * this.spacing; + d = b ? (d.width - k - a) / f : (d.height - l - a) / f; + if (0 < d) { + c.beginUpdate(); + try { + for (g = 0; g < f; g++) { + var h = e[g], + n = c.getGeometry(h); + null != n && (n = n.clone(), n.x = k, n.y = l, b ? (this.resizeVertices && (n.width = d, n.height = m), k += d + this.spacing) : (this.resizeVertices && (n.height = d, n.width = m), l += + d + this.spacing), c.setGeometry(h, n)) + } + } finally { + c.endUpdate() + } + } + } + } +}; + +function mxCompactTreeLayout(a, b, c) { + mxGraphLayout.call(this, a); + this.horizontal = null != b ? b : !0; + this.invert = null != c ? c : !1 +} +mxCompactTreeLayout.prototype = new mxGraphLayout; +mxCompactTreeLayout.prototype.constructor = mxCompactTreeLayout; +mxCompactTreeLayout.prototype.horizontal = null; +mxCompactTreeLayout.prototype.invert = null; +mxCompactTreeLayout.prototype.resizeParent = !0; +mxCompactTreeLayout.prototype.groupPadding = 10; +mxCompactTreeLayout.prototype.parentsChanged = null; +mxCompactTreeLayout.prototype.moveTree = !1; +mxCompactTreeLayout.prototype.levelDistance = 10; +mxCompactTreeLayout.prototype.nodeDistance = 20; +mxCompactTreeLayout.prototype.resetEdges = !0; +mxCompactTreeLayout.prototype.prefHozEdgeSep = 5; +mxCompactTreeLayout.prototype.prefVertEdgeOff = 4; +mxCompactTreeLayout.prototype.minEdgeJetty = 8; +mxCompactTreeLayout.prototype.channelBuffer = 4; +mxCompactTreeLayout.prototype.edgeRouting = !0; +mxCompactTreeLayout.prototype.isVertexIgnored = function(a) { + return mxGraphLayout.prototype.isVertexIgnored.apply(this, arguments) || 0 == this.graph.getConnections(a).length +}; +mxCompactTreeLayout.prototype.isHorizontal = function() { + return this.horizontal +}; +mxCompactTreeLayout.prototype.execute = function(a, b) { + this.parent = a; + var c = this.graph.getModel(); + if (null == b) + if (0 < this.graph.getEdges(a, c.getParent(a), this.invert, !this.invert, !1).length) b = a; + else { + var d = this.graph.findTreeRoots(a, !0, this.invert); + if (0 < d.length) + for (var e = 0; e < d.length; e++) + if (!this.isVertexIgnored(d[e]) && 0 < this.graph.getEdges(d[e], null, this.invert, !this.invert, !1).length) { + b = d[e]; + break + } + } + if (null != b) { + this.parentsChanged = this.resizeParent ? {} : null; + c.beginUpdate(); + try { + var f = this.dfs(b, a); + if (null != + f) { + this.layout(f); + var g = this.graph.gridSize, + d = g; + if (!this.moveTree) { + var h = this.getVertexBounds(b); + null != h && (g = h.x, d = h.y) + } + h = null; + h = this.isHorizontal() ? this.horizontalLayout(f, g, d) : this.verticalLayout(f, null, g, d); + if (null != h) { + var k = e = 0; + 0 > h.x && (e = Math.abs(g - h.x)); + 0 > h.y && (k = Math.abs(d - h.y)); + (0 != e || 0 != k) && this.moveNode(f, e, k); + this.resizeParent && this.adjustParents(); + this.edgeRouting && this.localEdgeProcessing(f) + } + } + } finally { + c.endUpdate() + } + } +}; +mxCompactTreeLayout.prototype.moveNode = function(a, b, c) { + a.x += b; + a.y += c; + this.apply(a); + for (a = a.child; null != a;) this.moveNode(a, b, c), a = a.next +}; +mxCompactTreeLayout.prototype.dfs = function(a, b, c) { + c = null != c ? c : []; + var d = mxCellPath.create(a), + e = null; + if (null != a && null == c[d] && !this.isVertexIgnored(a)) { + c[d] = a; + var e = this.createNode(a), + d = this.graph.getModel(), + f = null; + a = this.graph.getEdges(a, b, this.invert, !this.invert, !1, !0); + for (var g = this.graph.getView(), h = 0; h < a.length; h++) { + var k = a[h]; + if (!this.isEdgeIgnored(k)) { + this.resetEdges && this.setEdgePoints(k, null); + this.edgeRouting && (this.setEdgeStyleEnabled(k, !1), this.setEdgePoints(k, null)); + var l = g.getState(k), + k = null != l ? l.getVisibleTerminal(this.invert) : g.getVisibleTerminal(k, this.invert), + l = this.dfs(k, b, c); + null != l && null != d.getGeometry(k) && (null == f ? e.child = l : f.next = l, f = l) + } + } + } + return e +}; +mxCompactTreeLayout.prototype.layout = function(a) { + if (null != a) { + for (var b = a.child; null != b;) this.layout(b), b = b.next; + null != a.child ? this.attachParent(a, this.join(a)) : this.layoutLeaf(a) + } +}; +mxCompactTreeLayout.prototype.horizontalLayout = function(a, b, c, d) { + a.x += b + a.offsetX; + a.y += c + a.offsetY; + d = this.apply(a, d); + b = a.child; + if (null != b) { + d = this.horizontalLayout(b, a.x, a.y, d); + c = a.y + b.offsetY; + for (var e = b.next; null != e;) d = this.horizontalLayout(e, a.x + b.offsetX, c, d), c += e.offsetY, e = e.next + } + return d +}; +mxCompactTreeLayout.prototype.verticalLayout = function(a, b, c, d, e) { + a.x += c + a.offsetY; + a.y += d + a.offsetX; + e = this.apply(a, e); + b = a.child; + if (null != b) { + e = this.verticalLayout(b, a, a.x, a.y, e); + c = a.x + b.offsetY; + for (d = b.next; null != d;) e = this.verticalLayout(d, a, c, a.y + b.offsetX, e), c += d.offsetY, d = d.next + } + return e +}; +mxCompactTreeLayout.prototype.attachParent = function(a, b) { + var c = this.nodeDistance + this.levelDistance, + d = (b - a.width) / 2 - this.nodeDistance, + e = d + a.width + 2 * this.nodeDistance - b; + a.child.offsetX = c + a.height; + a.child.offsetY = e; + a.contour.upperHead = this.createLine(a.height, 0, this.createLine(c, e, a.contour.upperHead)); + a.contour.lowerHead = this.createLine(a.height, 0, this.createLine(c, d, a.contour.lowerHead)) +}; +mxCompactTreeLayout.prototype.layoutLeaf = function(a) { + var b = 2 * this.nodeDistance; + a.contour.upperTail = this.createLine(a.height + b, 0); + a.contour.upperHead = a.contour.upperTail; + a.contour.lowerTail = this.createLine(0, -a.width - b); + a.contour.lowerHead = this.createLine(a.height + b, 0, a.contour.lowerTail) +}; +mxCompactTreeLayout.prototype.join = function(a) { + var b = 2 * this.nodeDistance, + c = a.child; + a.contour = c.contour; + for (var d = c.width + b, e = d, c = c.next; null != c;) { + var f = this.merge(a.contour, c.contour); + c.offsetY = f + d; + c.offsetX = 0; + d = c.width + b; + e += f + d; + c = c.next + } + return e +}; +mxCompactTreeLayout.prototype.merge = function(a, b) { + for (var c = 0, d = 0, e = 0, f = a.lowerHead, g = b.upperHead; null != g && null != f;) { + var h = this.offset(c, d, g.dx, g.dy, f.dx, f.dy), + d = d + h, + e = e + h; + c + g.dx <= f.dx ? (c += g.dx, d += g.dy, g = g.next) : (c -= f.dx, d -= f.dy, f = f.next) + } + null != g ? (c = this.bridge(a.upperTail, 0, 0, g, c, d), a.upperTail = null != c.next ? b.upperTail : c, a.lowerTail = b.lowerTail) : (c = this.bridge(b.lowerTail, c, d, f, 0, 0), null == c.next && + (a.lowerTail = c)); + a.lowerHead = b.lowerHead; + return e +}; +mxCompactTreeLayout.prototype.offset = function(a, b, c, d, e, f) { + var g = 0; + if (e <= a || 0 >= a + c) return 0; + g = 0 < e * d - c * f ? 0 > a ? a * d / c - b : 0 < a ? a * f / e - b : -b : e < a + c ? f - (b + (e - a) * d / c) : e > a + c ? (c + a) * f / e - (b + d) : f - (b + d); + return 0 < g ? g : 0 +}; +mxCompactTreeLayout.prototype.bridge = function(a, b, c, d, e, f) { + b = e + d.dx - b; + e = e = 0; + 0 == d.dx ? e = d.dy : (e = b * d.dy, e /= d.dx); + b = this.createLine(b, e, d.next); + a.next = this.createLine(0, f + d.dy - e - c, b); + return b +}; +mxCompactTreeLayout.prototype.createNode = function(a) { + var b = {}; + b.cell = a; + b.x = 0; + b.y = 0; + b.width = 0; + b.height = 0; + a = this.getVertexBounds(a); + null != a && (this.isHorizontal() ? (b.width = a.height, b.height = a.width) : (b.width = a.width, b.height = a.height)); + b.offsetX = 0; + b.offsetY = 0; + b.contour = {}; + return b +}; +mxCompactTreeLayout.prototype.apply = function(a, b) { + var c = this.graph.getModel(), + d = a.cell, + e = c.getGeometry(d); + null != d && null != e && (this.isVertexMovable(d) && (e = this.setVertexLocation(d, a.x, a.y), this.resizeParent && (c = c.getParent(d), d = mxCellPath.create(c), null == this.parentsChanged[d] && + (this.parentsChanged[d] = c))), b = null == b ? new mxRectangle(e.x, e.y, e.width, e.height) : new mxRectangle(Math.min(b.x, e.x), Math.min(b.y, e.y), Math.max(b.x + b.width, e.x + e.width), + Math.max(b.y + b.height, e.y + e.height))); + return b +}; +mxCompactTreeLayout.prototype.createLine = function(a, b, c) { + var d = {}; + d.dx = a; + d.dy = b; + d.next = c; + return d +}; +mxCompactTreeLayout.prototype.adjustParents = function() { + var a = [], + b; + for (b in this.parentsChanged) a.push(this.parentsChanged[b]); + this.arrangeGroups(mxUtils.sortCells(a, !0), this.groupPadding) +}; +mxCompactTreeLayout.prototype.localEdgeProcessing = function(a) { + this.processNodeOutgoing(a); + for (a = a.child; null != a;) this.localEdgeProcessing(a), a = a.next +}; +mxCompactTreeLayout.prototype.processNodeOutgoing = function(a) { + for (var b = a.child, c = a.cell, d = 0, e = []; null != b;) { + d++; + var f = b.x; + this.horizontal && (f = b.y); + e.push(new WeightedCellSorter(b, f)); + b = b.next + } + e.sort(WeightedCellSorter.prototype.compare); + var f = a.width, + g = (d + 1) * this.prefHozEdgeSep; + f > g + 2 * this.prefHozEdgeSep && (f -= 2 * this.prefHozEdgeSep); + a = f / d; + b = a / 2; + f > g + 2 * this.prefHozEdgeSep && (b += this.prefHozEdgeSep); + for (var f = this.minEdgeJetty - this.prefVertEdgeOff, g = 0, h = this.getVertexBounds(c), k = 0; k < e.length; k++) { + for (var l = + e[k].cell.cell, m = this.getVertexBounds(l), l = this.graph.getEdgesBetween(c, l, !1), n = [], p = 0, q = 0, s = 0; s < l.length; s++) this.horizontal ? (p = h.x + h.width, q = h.y + b, n.push( + new mxPoint(p, q)), p = h.x + h.width + f, n.push(new mxPoint(p, q)), q = m.y + m.height / 2) : (p = h.x + b, q = h.y + h.height, n.push(new mxPoint(p, q)), q = h.y + h.height + f, n.push( + new mxPoint(p, q)), p = m.x + m.width / 2), n.push(new mxPoint(p, q)), this.setEdgePoints(l[s], n); + k < d / 2 ? f += this.prefVertEdgeOff : k > d / 2 && (f -= this.prefVertEdgeOff); + b += a; + g = Math.max(g, f) + } +}; + +function WeightedCellSorter(a, b) { + this.cell = a; + this.weightedValue = b +} +WeightedCellSorter.prototype.weightedValue = 0; +WeightedCellSorter.prototype.nudge = !1; +WeightedCellSorter.prototype.visited = !1; +WeightedCellSorter.prototype.rankIndex = null; +WeightedCellSorter.prototype.cell = null; +WeightedCellSorter.prototype.compare = function(a, b) { + return null != a && null != b ? b.weightedValue > a.weightedValue ? 1 : b.weightedValue < a.weightedValue ? -1 : b.nudge ? 1 : -1 : 0 +}; + +function mxFastOrganicLayout(a) { + mxGraphLayout.call(this, a) +} +mxFastOrganicLayout.prototype = new mxGraphLayout; +mxFastOrganicLayout.prototype.constructor = mxFastOrganicLayout; +mxFastOrganicLayout.prototype.useInputOrigin = !0; +mxFastOrganicLayout.prototype.resetEdges = !0; +mxFastOrganicLayout.prototype.disableEdgeStyle = !0; +mxFastOrganicLayout.prototype.forceConstant = 50; +mxFastOrganicLayout.prototype.forceConstantSquared = 0; +mxFastOrganicLayout.prototype.minDistanceLimit = 2; +mxFastOrganicLayout.prototype.maxDistanceLimit = 500; +mxFastOrganicLayout.prototype.minDistanceLimitSquared = 4; +mxFastOrganicLayout.prototype.initialTemp = 200; +mxFastOrganicLayout.prototype.temperature = 0; +mxFastOrganicLayout.prototype.maxIterations = 0; +mxFastOrganicLayout.prototype.iteration = 0; +mxFastOrganicLayout.prototype.allowedToRun = !0; +mxFastOrganicLayout.prototype.isVertexIgnored = function(a) { + return mxGraphLayout.prototype.isVertexIgnored.apply(this, arguments) || 0 == this.graph.getConnections(a).length +}; +mxFastOrganicLayout.prototype.execute = function(a) { + var b = this.graph.getModel(); + this.vertexArray = []; + for (var c = this.graph.getChildVertices(a), d = 0; d < c.length; d++) this.isVertexIgnored(c[d]) || this.vertexArray.push(c[d]); + var e = this.useInputOrigin ? this.graph.view.getBounds(this.vertexArray) : null, + f = this.vertexArray.length; + this.indices = []; + this.dispX = []; + this.dispY = []; + this.cellLocation = []; + this.isMoveable = []; + this.neighbours = []; + this.radius = []; + this.radiusSquared = []; + 0.0010 > this.forceConstant && (this.forceConstant = + 0.0010); + this.forceConstantSquared = this.forceConstant * this.forceConstant; + for (d = 0; d < this.vertexArray.length; d++) { + var g = this.vertexArray[d]; + this.cellLocation[d] = []; + var h = mxCellPath.create(g); + this.indices[h] = d; + var k = this.getVertexBounds(g), + l = k.width, + m = k.height, + n = k.x, + p = k.y; + this.cellLocation[d][0] = n + l / 2; + this.cellLocation[d][1] = p + m / 2; + this.radius[d] = Math.min(l, m); + this.radiusSquared[d] = this.radius[d] * this.radius[d] + } + b.beginUpdate(); + try { + for (d = 0; d < f; d++) { + this.dispX[d] = 0; + this.dispY[d] = 0; + this.isMoveable[d] = this.isVertexMovable(this.vertexArray[d]); + var q = this.graph.getConnections(this.vertexArray[d], a), + c = this.graph.getOpposites(q, this.vertexArray[d]); + this.neighbours[d] = []; + for (l = 0; l < c.length; l++) { + this.resetEdges && this.graph.resetEdge(q[l]); + this.disableEdgeStyle && this.setEdgeStyleEnabled(q[l], !1); + var h = mxCellPath.create(c[l]), + s = this.indices[h]; + this.neighbours[d][l] = null != s ? s : d + } + } + this.temperature = this.initialTemp; + 0 == this.maxIterations && (this.maxIterations = 20 * Math.sqrt(f)); + for (this.iteration = 0; this.iteration < this.maxIterations; this.iteration++) { + if (!this.allowedToRun) return; + this.calcRepulsion(); + this.calcAttraction(); + this.calcPositions(); + this.reduceTemperature() + } + a = c = null; + for (d = 0; d < this.vertexArray.length; d++) g = this.vertexArray[d], this.isVertexMovable(g) && (k = this.getVertexBounds(g), null != k && (this.cellLocation[d][0] -= k.width / 2, this.cellLocation[ + d][1] -= k.height / 2, n = this.graph.snap(this.cellLocation[d][0]), p = this.graph.snap(this.cellLocation[d][1]), this.setVertexLocation(g, n, p), c = null == c ? n : Math.min(c, n), a = + null == a ? p : Math.min(a, p))); + d = -(c || 0) + 1; + g = -(a || 0) + 1; + null != e && (d += e.x, + g += e.y); + this.graph.moveCells(this.vertexArray, d, g) + } finally { + b.endUpdate() + } +}; +mxFastOrganicLayout.prototype.calcPositions = function() { + for (var a = 0; a < this.vertexArray.length; a++) + if (this.isMoveable[a]) { + var b = Math.sqrt(this.dispX[a] * this.dispX[a] + this.dispY[a] * this.dispY[a]); + 0.0010 > b && (b = 0.0010); + var c = this.dispX[a] / b * Math.min(b, this.temperature), + b = this.dispY[a] / b * Math.min(b, this.temperature); + this.dispX[a] = 0; + this.dispY[a] = 0; + this.cellLocation[a][0] += c; + this.cellLocation[a][1] += b + } +}; +mxFastOrganicLayout.prototype.calcAttraction = function() { + for (var a = 0; a < this.vertexArray.length; a++) + for (var b = 0; b < this.neighbours[a].length; b++) { + var c = this.neighbours[a][b]; + if (a != c && this.isMoveable[a] && this.isMoveable[c]) { + var d = this.cellLocation[a][0] - this.cellLocation[c][0], + e = this.cellLocation[a][1] - this.cellLocation[c][1], + f = d * d + e * e - this.radiusSquared[a] - this.radiusSquared[c]; + f < this.minDistanceLimitSquared && (f = this.minDistanceLimitSquared); + var g = Math.sqrt(f), + f = f / this.forceConstant, + d = d / g * f, + e = e / g * f; + this.dispX[a] -= d; + this.dispY[a] -= e; + this.dispX[c] += d; + this.dispY[c] += e + } + } +}; +mxFastOrganicLayout.prototype.calcRepulsion = function() { + for (var a = this.vertexArray.length, b = 0; b < a; b++) + for (var c = b; c < a; c++) { + if (!this.allowedToRun) return; + if (c != b && this.isMoveable[b] && this.isMoveable[c]) { + var d = this.cellLocation[b][0] - this.cellLocation[c][0], + e = this.cellLocation[b][1] - this.cellLocation[c][1]; + 0 == d && (d = 0.01 + Math.random()); + 0 == e && (e = 0.01 + Math.random()); + var f = Math.sqrt(d * d + e * e), + g = f - this.radius[b] - this.radius[c]; + g > this.maxDistanceLimit || (g < this.minDistanceLimit && (g = this.minDistanceLimit), g = this.forceConstantSquared / + g, d = d / f * g, e = e / f * g, this.dispX[b] += d, this.dispY[b] += e, this.dispX[c] -= d, this.dispY[c] -= e) + } + } +}; +mxFastOrganicLayout.prototype.reduceTemperature = function() { + this.temperature = this.initialTemp * (1 - this.iteration / this.maxIterations) +}; + +function mxCircleLayout(a, b) { + mxGraphLayout.call(this, a); + this.radius = null != b ? b : 100 +} +mxCircleLayout.prototype = new mxGraphLayout; +mxCircleLayout.prototype.constructor = mxCircleLayout; +mxCircleLayout.prototype.radius = null; +mxCircleLayout.prototype.moveCircle = !1; +mxCircleLayout.prototype.x0 = 0; +mxCircleLayout.prototype.y0 = 0; +mxCircleLayout.prototype.resetEdges = !0; +mxCircleLayout.prototype.disableEdgeStyle = !0; +mxCircleLayout.prototype.execute = function(a) { + var b = this.graph.getModel(); + b.beginUpdate(); + try { + for (var c = 0, d = null, e = null, f = [], g = b.getChildCount(a), h = 0; h < g; h++) { + var k = b.getChildAt(a, h); + if (this.isVertexIgnored(k)) this.isEdgeIgnored(k) || (this.resetEdges && this.graph.resetEdge(k), this.disableEdgeStyle && this.setEdgeStyleEnabled(k, !1)); + else { + f.push(k); + var l = this.getVertexBounds(k), + d = null == d ? l.y : Math.min(d, l.y), + e = null == e ? l.x : Math.min(e, l.x), + c = Math.max(c, Math.max(l.width, l.height)) + } + } + var m = this.getRadius(f.length, + c); + this.moveCircle && (e = this.x0, d = this.y0); + this.circle(f, m, e, d) + } finally { + b.endUpdate() + } +}; +mxCircleLayout.prototype.getRadius = function(a, b) { + return Math.max(a * b / Math.PI, this.radius) +}; +mxCircleLayout.prototype.circle = function(a, b, c, d) { + for (var e = a.length, f = 2 * Math.PI / e, g = 0; g < e; g++) this.isVertexMovable(a[g]) && this.setVertexLocation(a[g], c + b + b * Math.sin(g * f), d + b + b * Math.cos(g * f)) +}; + +function mxParallelEdgeLayout(a) { + mxGraphLayout.call(this, a) +} +mxParallelEdgeLayout.prototype = new mxGraphLayout; +mxParallelEdgeLayout.prototype.constructor = mxParallelEdgeLayout; +mxParallelEdgeLayout.prototype.spacing = 20; +mxParallelEdgeLayout.prototype.execute = function(a) { + a = this.findParallels(a); + this.graph.model.beginUpdate(); + try { + for (var b in a) { + var c = a[b]; + 1 < c.length && this.layout(c) + } + } finally { + this.graph.model.endUpdate() + } +}; +mxParallelEdgeLayout.prototype.findParallels = function(a) { + for (var b = this.graph.getModel(), c = [], d = b.getChildCount(a), e = 0; e < d; e++) { + var f = b.getChildAt(a, e); + if (!this.isEdgeIgnored(f)) { + var g = this.getEdgeId(f); + null != g && (null == c[g] && (c[g] = []), c[g].push(f)) + } + } + return c +}; +mxParallelEdgeLayout.prototype.getEdgeId = function(a) { + var b = this.graph.getView(), + c = b.getState(a), + d = null != c ? c.getVisibleTerminal(!0) : b.getVisibleTerminal(a, !0); + a = null != c ? c.getVisibleTerminal(!1) : b.getVisibleTerminal(a, !1); + return null != d && null != a ? (d = mxCellPath.create(d), a = mxCellPath.create(a), d > a ? a + "-" + d : d + "-" + a) : null +}; +mxParallelEdgeLayout.prototype.layout = function(a) { + var b = a[0], + c = this.graph.getModel(), + d = c.getGeometry(c.getTerminal(b, !0)), + e = c.getGeometry(c.getTerminal(b, !1)); + if (d == e) + for (var b = d.x + d.width + this.spacing, c = d.y + d.height / 2, f = 0; f < a.length; f++) this.route(a[f], b, c), b += this.spacing; + else if (null != d && null != e) + for (var b = d.x + d.width / 2, c = d.y + d.height / 2, f = e.x + e.width / 2 - b, g = e.y + e.height / 2 - c, e = Math.sqrt(f * f + g * g), d = g * this.spacing / e, e = f * this.spacing / e, + b = b + f / 2 + d * (a.length - 1) / 2, c = c + g / 2 - e * (a.length - 1) / 2, f = 0; f < a.length; f++) this.route(a[f], + b, c), b -= d, c += e +}; +mxParallelEdgeLayout.prototype.route = function(a, b, c) { + this.graph.isCellMovable(a) && this.setEdgePoints(a, [new mxPoint(b, c)]) +}; + +function mxCompositeLayout(a, b, c) { + mxGraphLayout.call(this, a); + this.layouts = b; + this.master = c +} +mxCompositeLayout.prototype = new mxGraphLayout; +mxCompositeLayout.prototype.constructor = mxCompositeLayout; +mxCompositeLayout.prototype.layouts = null; +mxCompositeLayout.prototype.master = null; +mxCompositeLayout.prototype.moveCell = function(a, b, c) { + null != this.master ? this.master.move.apply(this.master, arguments) : this.layouts[0].move.apply(this.layouts[0], arguments) +}; +mxCompositeLayout.prototype.execute = function(a) { + var b = this.graph.getModel(); + b.beginUpdate(); + try { + for (var c = 0; c < this.layouts.length; c++) this.layouts[c].execute.apply(this.layouts[c], arguments) + } finally { + b.endUpdate() + } +}; + +function mxEdgeLabelLayout(a, b) { + mxGraphLayout.call(this, a) +} +mxEdgeLabelLayout.prototype = new mxGraphLayout; +mxEdgeLabelLayout.prototype.constructor = mxEdgeLabelLayout; +mxEdgeLabelLayout.prototype.execute = function(a) { + for (var b = this.graph.view, c = this.graph.getModel(), d = [], e = [], f = c.getChildCount(a), g = 0; g < f; g++) { + var h = c.getChildAt(a, g), + k = b.getState(h); + null != k && (this.isVertexIgnored(h) ? this.isEdgeIgnored(h) || d.push(k) : e.push(k)) + } + this.placeLabels(e, d) +}; +mxEdgeLabelLayout.prototype.placeLabels = function(a, b) { + var c = this.graph.getModel(); + c.beginUpdate(); + try { + for (var d = 0; d < b.length; d++) { + var e = b[d]; + if (null != e && null != e.text && null != e.text.boundingBox) + for (var f = 0; f < a.length; f++) { + var g = a[f]; + null != g && this.avoid(e, g) + } + } + } finally { + c.endUpdate() + } +}; +mxEdgeLabelLayout.prototype.avoid = function(a, b) { + var c = this.graph.getModel(), + d = a.text.boundingBox; + if (mxUtils.intersects(d, b)) { + var e = -d.y - d.height + b.y, + f = -d.y + b.y + b.height, + e = Math.abs(e) < Math.abs(f) ? e : f, + f = -d.x - d.width + b.x, + d = -d.x + b.x + b.width, + d = Math.abs(f) < Math.abs(d) ? f : d; + Math.abs(d) < Math.abs(e) ? e = 0 : d = 0; + f = c.getGeometry(a.cell); + null != f && (f = f.clone(), null != f.offset ? (f.offset.x += d, f.offset.y += e) : f.offset = new mxPoint(d, e), c.setGeometry(a.cell, f)) + } +}; + +function mxGraphAbstractHierarchyCell() { + this.x = []; + this.y = []; + this.temp = [] +} +mxGraphAbstractHierarchyCell.prototype.maxRank = -1; +mxGraphAbstractHierarchyCell.prototype.minRank = -1; +mxGraphAbstractHierarchyCell.prototype.x = null; +mxGraphAbstractHierarchyCell.prototype.y = null; +mxGraphAbstractHierarchyCell.prototype.width = 0; +mxGraphAbstractHierarchyCell.prototype.height = 0; +mxGraphAbstractHierarchyCell.prototype.nextLayerConnectedCells = null; +mxGraphAbstractHierarchyCell.prototype.previousLayerConnectedCells = null; +mxGraphAbstractHierarchyCell.prototype.temp = null; +mxGraphAbstractHierarchyCell.prototype.getNextLayerConnectedCells = function(a) { + return null +}; +mxGraphAbstractHierarchyCell.prototype.getPreviousLayerConnectedCells = function(a) { + return null +}; +mxGraphAbstractHierarchyCell.prototype.isEdge = function() { + return !1 +}; +mxGraphAbstractHierarchyCell.prototype.isVertex = function() { + return !1 +}; +mxGraphAbstractHierarchyCell.prototype.getGeneralPurposeVariable = function(a) { + return null +}; +mxGraphAbstractHierarchyCell.prototype.setGeneralPurposeVariable = function(a, b) { + return null +}; +mxGraphAbstractHierarchyCell.prototype.setX = function(a, b) { + this.isVertex() ? this.x[0] = b : this.isEdge() && (this.x[a - this.minRank - 1] = b) +}; +mxGraphAbstractHierarchyCell.prototype.getX = function(a) { + return this.isVertex() ? this.x[0] : this.isEdge() ? this.x[a - this.minRank - 1] : 0 +}; +mxGraphAbstractHierarchyCell.prototype.setY = function(a, b) { + this.isVertex() ? this.y[0] = b : this.isEdge() && (this.y[a - this.minRank - 1] = b) +}; + +function mxGraphHierarchyNode(a) { + mxGraphAbstractHierarchyCell.apply(this, arguments); + this.cell = a +} +mxGraphHierarchyNode.prototype = new mxGraphAbstractHierarchyCell; +mxGraphHierarchyNode.prototype.constructor = mxGraphHierarchyNode; +mxGraphHierarchyNode.prototype.cell = null; +mxGraphHierarchyNode.prototype.connectsAsTarget = []; +mxGraphHierarchyNode.prototype.connectsAsSource = []; +mxGraphHierarchyNode.prototype.hashCode = !1; +mxGraphHierarchyNode.prototype.getRankValue = function(a) { + return this.maxRank +}; +mxGraphHierarchyNode.prototype.getNextLayerConnectedCells = function(a) { + if (null == this.nextLayerConnectedCells) { + this.nextLayerConnectedCells = []; + this.nextLayerConnectedCells[0] = []; + for (var b = 0; b < this.connectsAsTarget.length; b++) { + var c = this.connectsAsTarget[b]; - 1 == c.maxRank || c.maxRank == a + 1 ? this.nextLayerConnectedCells[0].push(c.source) : this.nextLayerConnectedCells[0].push(c) + } + } + return this.nextLayerConnectedCells[0] +}; +mxGraphHierarchyNode.prototype.getPreviousLayerConnectedCells = function(a) { + if (null == this.previousLayerConnectedCells) { + this.previousLayerConnectedCells = []; + this.previousLayerConnectedCells[0] = []; + for (var b = 0; b < this.connectsAsSource.length; b++) { + var c = this.connectsAsSource[b]; - 1 == c.minRank || c.minRank == a - 1 ? this.previousLayerConnectedCells[0].push(c.target) : this.previousLayerConnectedCells[0].push(c) + } + } + return this.previousLayerConnectedCells[0] +}; +mxGraphHierarchyNode.prototype.isVertex = function() { + return !0 +}; +mxGraphHierarchyNode.prototype.getGeneralPurposeVariable = function(a) { + return this.temp[0] +}; +mxGraphHierarchyNode.prototype.setGeneralPurposeVariable = function(a, b) { + this.temp[0] = b +}; +mxGraphHierarchyNode.prototype.isAncestor = function(a) { + if (null != a && null != this.hashCode && null != a.hashCode && this.hashCode.length < a.hashCode.length) { + if (this.hashCode == a.hashCode) return !0; + if (null == this.hashCode || null == this.hashCode) return !1; + for (var b = 0; b < this.hashCode.length; b++) + if (this.hashCode[b] != a.hashCode[b]) return !1; + return !0 + } + return !1 +}; +mxGraphHierarchyNode.prototype.getCoreCell = function() { + return this.cell +}; + +function mxGraphHierarchyEdge(a) { + mxGraphAbstractHierarchyCell.apply(this, arguments); + this.edges = a +} +mxGraphHierarchyEdge.prototype = new mxGraphAbstractHierarchyCell; +mxGraphHierarchyEdge.prototype.constructor = mxGraphHierarchyEdge; +mxGraphHierarchyEdge.prototype.edges = null; +mxGraphHierarchyEdge.prototype.source = null; +mxGraphHierarchyEdge.prototype.target = null; +mxGraphHierarchyEdge.prototype.isReversed = !1; +mxGraphHierarchyEdge.prototype.invert = function(a) { + a = this.source; + this.source = this.target; + this.target = a; + this.isReversed = !this.isReversed +}; +mxGraphHierarchyEdge.prototype.getNextLayerConnectedCells = function(a) { + if (null == this.nextLayerConnectedCells) { + this.nextLayerConnectedCells = []; + for (var b = 0; b < this.temp.length; b++) this.nextLayerConnectedCells[b] = [], b == this.temp.length - 1 ? this.nextLayerConnectedCells[b].push(this.source) : this.nextLayerConnectedCells[b].push( + this) + } + return this.nextLayerConnectedCells[a - this.minRank - 1] +}; +mxGraphHierarchyEdge.prototype.getPreviousLayerConnectedCells = function(a) { + if (null == this.previousLayerConnectedCells) { + this.previousLayerConnectedCells = []; + for (var b = 0; b < this.temp.length; b++) this.previousLayerConnectedCells[b] = [], 0 == b ? this.previousLayerConnectedCells[b].push(this.target) : this.previousLayerConnectedCells[b].push( + this) + } + return this.previousLayerConnectedCells[a - this.minRank - 1] +}; +mxGraphHierarchyEdge.prototype.isEdge = function() { + return !0 +}; +mxGraphHierarchyEdge.prototype.getGeneralPurposeVariable = function(a) { + return this.temp[a - this.minRank - 1] +}; +mxGraphHierarchyEdge.prototype.setGeneralPurposeVariable = function(a, b) { + this.temp[a - this.minRank - 1] = b +}; +mxGraphHierarchyEdge.prototype.getCoreCell = function() { + return null != this.edges && 0 < this.edges.length ? this.edges[0] : null +}; + +function mxGraphHierarchyModel(a, b, c, d, e) { + a.getGraph(); + this.tightenToSource = e; + this.roots = c; + this.parent = d; + this.vertexMapper = {}; + this.edgeMapper = {}; + this.maxRank = 0; + c = []; + null == b && (b = this.graph.getChildVertices(d)); + this.maxRank = this.SOURCESCANSTARTRANK; + this.createInternalCells(a, b, c); + for (d = 0; d < b.length; d++) { + e = c[d].connectsAsSource; + for (var f = 0; f < e.length; f++) { + var g = e[f], + h = g.edges; + if (null != h && 0 < h.length) { + var h = h[0], + k = a.getVisibleTerminal(h, !1), + k = mxCellPath.create(k), + k = this.vertexMapper[k]; + c[d] == k && (k = a.getVisibleTerminal(h, !0), k = mxCellPath.create(k), k = this.vertexMapper[k]); + null != k && c[d] != k && (g.target = k, 0 == k.connectsAsTarget.length && (k.connectsAsTarget = []), 0 > mxUtils.indexOf(k.connectsAsTarget, g) && k.connectsAsTarget.push(g)) + } + } + c[d].temp[0] = 1 + } +} +mxGraphHierarchyModel.prototype.maxRank = null; +mxGraphHierarchyModel.prototype.vertexMapper = null; +mxGraphHierarchyModel.prototype.edgeMapper = null; +mxGraphHierarchyModel.prototype.ranks = null; +mxGraphHierarchyModel.prototype.roots = null; +mxGraphHierarchyModel.prototype.parent = null; +mxGraphHierarchyModel.prototype.dfsCount = 0; +mxGraphHierarchyModel.prototype.SOURCESCANSTARTRANK = 1E8; +mxGraphHierarchyModel.prototype.tightenToSource = !1; +mxGraphHierarchyModel.prototype.createInternalCells = function(a, b, c) { + for (var d = a.getGraph(), e = 0; e < b.length; e++) { + c[e] = new mxGraphHierarchyNode(b[e]); + var f = mxCellPath.create(b[e]); + this.vertexMapper[f] = c[e]; + f = a.getEdges(b[e]); + c[e].connectsAsSource = []; + for (var g = 0; g < f.length; g++) { + var h = a.getVisibleTerminal(f[g], !1); + if (h != b[e] && h != b[e] && a.graph.model.isVertex(h) && !a.isVertexIgnored(h)) { + var k = a.getEdgesBetween(b[e], h, !1), + l = a.getEdgesBetween(b[e], h, !0), + h = mxCellPath.create(k[0]); + if (null != k && 0 < k.length && null == + this.edgeMapper[h] && 2 * l.length >= k.length) { + for (var l = new mxGraphHierarchyEdge(k), m = 0; m < k.length; m++) { + var n = k[m], + h = mxCellPath.create(n); + this.edgeMapper[h] = l; + d.resetEdge(n); + a.disableEdgeStyle && (a.setEdgeStyleEnabled(n, !1), a.setOrthogonalEdge(n, !0)) + } + l.source = c[e]; + 0 > mxUtils.indexOf(c[e].connectsAsSource, l) && c[e].connectsAsSource.push(l) + } + } + } + c[e].temp[0] = 0 + } +}; +mxGraphHierarchyModel.prototype.initialRank = function() { + var a = []; + if (null != this.roots) + for (var b = 0; b < this.roots.length; b++) { + var c = mxCellPath.create(this.roots[b]), + c = this.vertexMapper[c]; + null != c && a.push(c) + } + for (var d in this.vertexMapper) c = this.vertexMapper[d], c.temp[0] = -1; + for (var e = a.slice(); 0 < a.length;) { + var c = a[0], + f, g; + f = c.connectsAsTarget; + g = c.connectsAsSource; + for (var h = !0, k = this.SOURCESCANSTARTRANK, b = 0; b < f.length; b++) { + var l = f[b]; + if (5270620 == l.temp[0]) l = l.source, k = Math.min(k, l.temp[0] - 1); + else { + h = !1; + break + } + } + if (h) { + c.temp[0] = + k; + this.maxRank = Math.min(this.maxRank, k); + if (null != g) + for (b = 0; b < g.length; b++) l = g[b], l.temp[0] = 5270620, l = l.target, -1 == l.temp[0] && (a.push(l), l.temp[0] = -2); + a.shift() + } else if (b = a.shift(), a.push(c), b == c && 1 == a.length) break + } + for (d in this.vertexMapper) c = this.vertexMapper[d], c.temp[0] -= this.maxRank; + for (b = 0; b < e.length; b++) { + c = e[b]; + a = 0; + f = c.connectsAsSource; + for (d = 0; d < f.length; d++) l = f[d], l = l.target, c.temp[0] = Math.max(a, l.temp[0] + 1), a = c.temp[0] + } + this.maxRank = this.SOURCESCANSTARTRANK - this.maxRank +}; +mxGraphHierarchyModel.prototype.fixRanks = function() { + var a = []; + this.ranks = []; + for (var b = 0; b < this.maxRank + 1; b++) a[b] = [], this.ranks[b] = a[b]; + var c = null; + if (null != this.roots) + for (var d = this.roots, c = [], b = 0; b < d.length; b++) { + var e = mxCellPath.create(d[b]); + c[b] = this.vertexMapper[e] + } + this.visit(function(b, c, d, e, l) { + 0 == l && (0 > c.maxRank && 0 > c.minRank) && (a[c.temp[0]].push(c), c.maxRank = c.temp[0], c.minRank = c.temp[0], c.temp[0] = a[c.maxRank].length - 1); + if (null != b && null != d && 1 < b.maxRank - c.maxRank) { + d.maxRank = b.maxRank; + d.minRank = + c.maxRank; + d.temp = []; + d.x = []; + d.y = []; + for (b = d.minRank + 1; b < d.maxRank; b++) a[b].push(d), d.setGeneralPurposeVariable(b, a[b].length - 1) + } + }, c, !1, null) +}; +mxGraphHierarchyModel.prototype.visit = function(a, b, c, d) { + if (null != b) { + for (var e = 0; e < b.length; e++) { + var f = b[e]; + null != f && (null == d && (d = {}), c ? (f.hashCode = [], f.hashCode[0] = this.dfsCount, f.hashCode[1] = e, this.extendedDfs(null, f, null, a, d, f.hashCode, e, 0)) : this.dfs(null, f, null, + a, d, 0)) + } + this.dfsCount++ + } +}; +mxGraphHierarchyModel.prototype.dfs = function(a, b, c, d, e, f) { + if (null != b) { + var g = mxCellPath.create(b.cell); + if (null == e[g]) { + e[g] = b; + d(a, b, c, f, 0); + a = b.connectsAsSource.slice(); + for (c = 0; c < a.length; c++) g = a[c], this.dfs(b, g.target, g, d, e, f + 1) + } else d(a, b, c, f, 1) + } +}; +mxGraphHierarchyModel.prototype.extendedDfs = function(a, b, c, d, e, f, g, h) { + if (null != b) { + if (null != a && (null == b.hashCode || b.hashCode[0] != a.hashCode[0])) f = a.hashCode.length + 1, b.hashCode = a.hashCode.slice(), b.hashCode[f - 1] = g; + g = mxCellPath.create(b.cell); + if (null == e[g]) { + e[g] = b; + d(a, b, c, h, 0); + a = b.connectsAsSource.slice(); + for (c = 0; c < a.length; c++) g = a[c], this.extendedDfs(b, g.target, g, d, e, b.hashCode, c, h + 1) + } else d(a, b, c, h, 1) + } +}; + +function mxHierarchicalLayoutStage() {} +mxHierarchicalLayoutStage.prototype.execute = function(a) {}; + +function mxMedianHybridCrossingReduction(a) { + this.layout = a +} +mxMedianHybridCrossingReduction.prototype = new mxHierarchicalLayoutStage; +mxMedianHybridCrossingReduction.prototype.constructor = mxMedianHybridCrossingReduction; +mxMedianHybridCrossingReduction.prototype.layout = null; +mxMedianHybridCrossingReduction.prototype.maxIterations = 24; +mxMedianHybridCrossingReduction.prototype.nestedBestRanks = null; +mxMedianHybridCrossingReduction.prototype.currentBestCrossings = 0; +mxMedianHybridCrossingReduction.prototype.iterationsWithoutImprovement = 0; +mxMedianHybridCrossingReduction.prototype.maxNoImprovementIterations = 2; +mxMedianHybridCrossingReduction.prototype.execute = function(a) { + a = this.layout.getModel(); + this.nestedBestRanks = []; + for (var b = 0; b < a.ranks.length; b++) this.nestedBestRanks[b] = a.ranks[b].slice(); + for (var c = 0, d = this.calculateCrossings(a), b = 0; b < this.maxIterations && c < this.maxNoImprovementIterations; b++) { + this.weightedMedian(b, a); + this.transpose(b, a); + var e = this.calculateCrossings(a); + if (e < d) { + d = e; + for (e = c = 0; e < this.nestedBestRanks.length; e++) + for (var f = a.ranks[e], g = 0; g < f.length; g++) { + var h = f[g]; + this.nestedBestRanks[e][h.getGeneralPurposeVariable(e)] = + h + } + } else { + c++; + for (e = 0; e < this.nestedBestRanks.length; e++) { + f = a.ranks[e]; + for (g = 0; g < f.length; g++) h = f[g], h.setGeneralPurposeVariable(e, g) + } + } + if (0 == d) break + } + c = []; + d = []; + for (b = 0; b < a.maxRank + 1; b++) d[b] = [], c[b] = d[b]; + for (b = 0; b < this.nestedBestRanks.length; b++) + for (e = 0; e < this.nestedBestRanks[b].length; e++) d[b].push(this.nestedBestRanks[b][e]); + a.ranks = c +}; +mxMedianHybridCrossingReduction.prototype.calculateCrossings = function(a) { + for (var b = a.ranks.length, c = 0, d = 1; d < b; d++) c += this.calculateRankCrossing(d, a); + return c +}; +mxMedianHybridCrossingReduction.prototype.calculateRankCrossing = function(a, b) { + for (var c = 0, d = b.ranks[a], e = d.length, f = b.ranks[a - 1].length, g = [], h = 0; h < e; h++) g[h] = []; + for (h = 0; h < d.length; h++) + for (var k = d[h], l = k.getGeneralPurposeVariable(a), m = k.getPreviousLayerConnectedCells(a), k = 0; k < m.length; k++) { + var n = m[k].getGeneralPurposeVariable(a - 1); + g[l][n] = 201207 + } + for (h = 0; h < e; h++) + for (k = 0; k < f; k++) + if (201207 == g[h][k]) { + for (d = h + 1; d < e; d++) + for (l = 0; l < k; l++) 201207 == g[d][l] && c++; + for (d = 0; d < h; d++) + for (l = k + 1; l < f; l++) 201207 == g[d][l] && + c++ + } + return c / 2 +}; +mxMedianHybridCrossingReduction.prototype.transpose = function(a, b) { + for (var c = !0, d = 0; c && 10 > d++;) + for (var e = 1 == a % 2 && 1 == d % 2, c = !1, f = 0; f < b.ranks.length; f++) { + for (var g = b.ranks[f], h = [], k = 0; k < g.length; k++) { + var l = g[k], + m = l.getGeneralPurposeVariable(f); + 0 > m && (m = k); + h[m] = l + } + for (var n = m = l = null, p = null, q = null, s = null, r = null, t = null, v = null, w = null, k = 0; k < g.length - 1; k++) { + if (0 == k) { + for (var v = h[k], l = v.getNextLayerConnectedCells(f), m = v.getPreviousLayerConnectedCells(f), q = [], s = [], u = 0; u < l.length; u++) q[u] = l[u].getGeneralPurposeVariable(f + 1); + for (u = 0; u < m.length; u++) s[u] = m[u].getGeneralPurposeVariable(f - 1) + } else l = n, m = p, q = r, s = t, v = w; + w = h[k + 1]; + n = w.getNextLayerConnectedCells(f); + p = w.getPreviousLayerConnectedCells(f); + r = []; + t = []; + for (u = 0; u < n.length; u++) r[u] = n[u].getGeneralPurposeVariable(f + 1); + for (u = 0; u < p.length; u++) t[u] = p[u].getGeneralPurposeVariable(f - 1); + for (var y = 0, z = 0, u = 0; u < q.length; u++) + for (var x = 0; x < r.length; x++) q[u] > r[x] && y++, q[u] < r[x] && z++; + for (u = 0; u < s.length; u++) + for (x = 0; x < t.length; x++) s[u] > t[x] && y++, s[u] < t[x] && z++; + if (z < y || z == y && e) n = v.getGeneralPurposeVariable(f), + v.setGeneralPurposeVariable(f, w.getGeneralPurposeVariable(f)), w.setGeneralPurposeVariable(f, n), n = l, p = m, r = q, t = s, w = v, e || (c = !0) + } + } +}; +mxMedianHybridCrossingReduction.prototype.weightedMedian = function(a, b) { + var c = 0 == a % 2; + if (c) + for (var d = b.maxRank - 1; 0 <= d; d--) this.medianRank(d, c); + else + for (d = 1; d < b.maxRank; d++) this.medianRank(d, c) +}; +mxMedianHybridCrossingReduction.prototype.medianRank = function(a, b) { + for (var c = this.nestedBestRanks[a].length, d = [], e = [], f = 0; f < c; f++) { + var g = this.nestedBestRanks[a][f], + h = new MedianCellSorter; + h.cell = g; + var k; + k = b ? g.getNextLayerConnectedCells(a) : g.getPreviousLayerConnectedCells(a); + var l; + l = b ? a + 1 : a - 1; + null != k && 0 != k.length ? (h.medianValue = this.medianValue(k, l), d.push(h)) : e[g.getGeneralPurposeVariable(a)] = !0 + } + d.sort(MedianCellSorter.prototype.compare); + for (f = 0; f < c; f++) null == e[f] && (g = d.shift().cell, g.setGeneralPurposeVariable(a, + f)) +}; +mxMedianHybridCrossingReduction.prototype.medianValue = function(a, b) { + for (var c = [], d = 0, e = 0; e < a.length; e++) { + var f = a[e]; + c[d++] = f.getGeneralPurposeVariable(b) + } + c.sort(function(a, b) { + return a - b + }); + if (1 == d % 2) return c[Math.floor(d / 2)]; + if (2 == d) return (c[0] + c[1]) / 2; + e = d / 2; + f = c[e - 1] - c[0]; + d = c[d - 1] - c[e]; + return (c[e - 1] * d + c[e] * f) / (f + d) +}; + +function MedianCellSorter() {} +MedianCellSorter.prototype.medianValue = 0; +MedianCellSorter.prototype.cell = !1; +MedianCellSorter.prototype.compare = function(a, b) { + return null != a && null != b ? b.medianValue > a.medianValue ? -1 : b.medianValue < a.medianValue ? 1 : 0 : 0 +}; + +function mxMinimumCycleRemover(a) { + this.layout = a +} +mxMinimumCycleRemover.prototype = new mxHierarchicalLayoutStage; +mxMinimumCycleRemover.prototype.constructor = mxMinimumCycleRemover; +mxMinimumCycleRemover.prototype.layout = null; +mxMinimumCycleRemover.prototype.execute = function(a) { + var b = this.layout.getModel(), + c = {}, + d = mxUtils.clone(b.vertexMapper, null, !0), + e = null; + if (null != b.roots) { + var f = b.roots, + e = []; + for (a = 0; a < f.length; a++) { + var g = mxCellPath.create(f[a]); + e[a] = b.vertexMapper[g] + } + } + b.visit(function(a, b, e, f, g) { + b.isAncestor(a) && (e.invert(), mxUtils.remove(e, a.connectsAsSource), a.connectsAsTarget.push(e), mxUtils.remove(e, b.connectsAsTarget), b.connectsAsSource.push(e)); + a = mxCellPath.create(b.cell); + c[a] = b; + delete d[a] + }, e, !0, null); + e = null; + 0 < + d.lenth && (e = mxUtils.clone(d, null, !0)); + a = mxUtils.clone(c, null, !0); + b.visit(function(a, b, e, f, g) { + b.isAncestor(a) && (e.invert(), mxUtils.remove(e, a.connectsAsSource), b.connectsAsSource.push(e), a.connectsAsTarget.push(e), mxUtils.remove(e, b.connectsAsTarget)); + a = mxCellPath.create(b.cell); + c[a] = b; + delete d[a] + }, d, !0, a); + f = this.layout.getGraph(); + if (null != e && 0 < e.length) { + b = b.roots; + for (a = 0; a < e.length; a++) g = e[a].cell, 0 == f.getIncomingEdges(g).length && b.push(g) + } +}; + +function mxCoordinateAssignment(a, b, c, d, e, f) { + this.layout = a; + this.intraCellSpacing = b; + this.interRankCellSpacing = c; + this.orientation = d; + this.initialX = e; + this.parallelEdgeSpacing = f +} +var mxHierarchicalEdgeStyle = { + ORTHOGONAL: 1, + POLYLINE: 2, + STRAIGHT: 3, + CURVE: 4 +}; +mxCoordinateAssignment.prototype = new mxHierarchicalLayoutStage; +mxCoordinateAssignment.prototype.constructor = mxCoordinateAssignment; +mxCoordinateAssignment.prototype.layout = null; +mxCoordinateAssignment.prototype.intraCellSpacing = 30; +mxCoordinateAssignment.prototype.interRankCellSpacing = 100; +mxCoordinateAssignment.prototype.parallelEdgeSpacing = 10; +mxCoordinateAssignment.prototype.maxIterations = 8; +mxCoordinateAssignment.prototype.prefHozEdgeSep = 5; +mxCoordinateAssignment.prototype.prefVertEdgeOff = 2; +mxCoordinateAssignment.prototype.minEdgeJetty = 12; +mxCoordinateAssignment.prototype.channelBuffer = 4; +mxCoordinateAssignment.prototype.jettyPositions = null; +mxCoordinateAssignment.prototype.orientation = mxConstants.DIRECTION_NORTH; +mxCoordinateAssignment.prototype.initialX = null; +mxCoordinateAssignment.prototype.limitX = null; +mxCoordinateAssignment.prototype.currentXDelta = null; +mxCoordinateAssignment.prototype.widestRank = null; +mxCoordinateAssignment.prototype.rankTopY = null; +mxCoordinateAssignment.prototype.rankBottomY = null; +mxCoordinateAssignment.prototype.widestRankValue = null; +mxCoordinateAssignment.prototype.rankWidths = null; +mxCoordinateAssignment.prototype.rankY = null; +mxCoordinateAssignment.prototype.fineTuning = !0; +mxCoordinateAssignment.prototype.edgeStyle = mxHierarchicalEdgeStyle.POLYLINE; +mxCoordinateAssignment.prototype.nextLayerConnectedCache = null; +mxCoordinateAssignment.prototype.previousLayerConnectedCache = null; +mxCoordinateAssignment.prototype.groupPadding = 10; +mxCoordinateAssignment.prototype.printStatus = function() { + var a = this.layout.getModel(); + mxLog.show(); + mxLog.writeln("\x3d\x3d\x3d\x3d\x3d\x3dCoord assignment debug\x3d\x3d\x3d\x3d\x3d\x3d\x3d"); + for (var b = 0; b < a.ranks.length; b++) { + mxLog.write("Rank ", b, " : "); + for (var c = a.ranks[b], d = 0; d < c.length; d++) mxLog.write(c[d].getGeneralPurposeVariable(b), " "); + mxLog.writeln() + } + mxLog.writeln("\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d") +}; +mxCoordinateAssignment.prototype.execute = function(a) { + this.jettyPositions = []; + a = this.layout.getModel(); + this.currentXDelta = 0; + this.initialCoords(this.layout.getGraph(), a); + this.fineTuning && this.minNode(a); + var b = 1E8; + if (this.fineTuning) + for (var c = 0; c < this.maxIterations; c++) { + 0 != c && (this.medianPos(c, a), this.minNode(a)); + if (this.currentXDelta < b) { + for (var d = 0; d < a.ranks.length; d++) + for (var e = a.ranks[d], f = 0; f < e.length; f++) { + var g = e[f]; + g.setX(d, g.getGeneralPurposeVariable(d)) + } + b = this.currentXDelta + } else + for (d = 0; d < a.ranks.length; d++) { + e = + a.ranks[d]; + for (f = 0; f < e.length; f++) g = e[f], g.setGeneralPurposeVariable(d, g.getX(d)) + } + this.minPath(this.layout.getGraph(), a); + this.currentXDelta = 0 + } + this.setCellLocations(this.layout.getGraph(), a) +}; +mxCoordinateAssignment.prototype.minNode = function(a) { + for (var b = [], c = [], d = [], e = 0; e <= a.maxRank; e++) { + d[e] = a.ranks[e]; + for (var f = 0; f < d[e].length; f++) { + var g = d[e][f], + h = new WeightedCellSorter(g, e); + h.rankIndex = f; + h.visited = !0; + b.push(h); + g = mxCellPath.create(g.getCoreCell()); + c[g] = h + } + } + a = 10 * b.length; + for (f = 0; 0 < b.length && f <= a;) { + var h = b.shift(), + e = h.cell, + k = h.weightedValue, + l = parseInt(h.rankIndex), + g = e.getNextLayerConnectedCells(k), + m = e.getPreviousLayerConnectedCells(k), + n = g.length, + p = m.length, + q = this.medianXValue(g, k + 1), + s = + this.medianXValue(m, k - 1), + r = n + p, + t = e.getGeneralPurposeVariable(k), + v = t; + 0 < r && (v = (q * n + s * p) / r); + n = !1; + v < t - 1 ? 0 == l ? (e.setGeneralPurposeVariable(k, v), n = !0) : (l = d[k][l - 1], t = l.getGeneralPurposeVariable(k), t = t + l.width / 2 + this.intraCellSpacing + e.width / 2, t < v ? (e.setGeneralPurposeVariable( + k, v), n = !0) : t < e.getGeneralPurposeVariable(k) - 1 && (e.setGeneralPurposeVariable(k, t), n = !0)) : v > t + 1 && (l == d[k].length - 1 ? (e.setGeneralPurposeVariable(k, v), n = !0) : + (l = d[k][l + 1], t = l.getGeneralPurposeVariable(k), t = t - l.width / 2 - this.intraCellSpacing - + e.width / 2, t > v ? (e.setGeneralPurposeVariable(k, v), n = !0) : t > e.getGeneralPurposeVariable(k) + 1 && (e.setGeneralPurposeVariable(k, t), n = !0))); + if (n) { + for (e = 0; e < g.length; e++) k = g[e], k = mxCellPath.create(k.getCoreCell()), k = c[k], null != k && !1 == k.visited && (k.visited = !0, b.push(k)); + for (e = 0; e < m.length; e++) k = m[e], k = mxCellPath.create(k.getCoreCell()), k = c[k], null != k && !1 == k.visited && (k.visited = !0, b.push(k)) + } + h.visited = !1; + f++ + } +}; +mxCoordinateAssignment.prototype.medianPos = function(a, b) { + if (0 == a % 2) + for (var c = b.maxRank; 0 < c; c--) this.rankMedianPosition(c - 1, b, c); + else + for (c = 0; c < b.maxRank - 1; c++) this.rankMedianPosition(c + 1, b, c) +}; +mxCoordinateAssignment.prototype.rankMedianPosition = function(a, b, c) { + b = b.ranks[a]; + for (var d = [], e = [], f = 0; f < b.length; f++) { + var g = b[f]; + d[f] = new WeightedCellSorter; + d[f].cell = g; + d[f].rankIndex = f; + var h = mxCellPath.create(g.getCoreCell()); + e[h] = d[f]; + var k = null, + k = c < a ? g.getPreviousLayerConnectedCells(a) : g.getNextLayerConnectedCells(a); + d[f].weightedValue = this.calculatedWeightedValue(g, k) + } + d.sort(WeightedCellSorter.prototype.compare); + for (f = 0; f < d.length; f++) { + h = 0; + g = d[f].cell; + h = 0; + k = c < a ? g.getPreviousLayerConnectedCells(a).slice() : + g.getNextLayerConnectedCells(a).slice(); + null != k && (h = k.length, h = 0 < h ? this.medianXValue(k, c) : g.getGeneralPurposeVariable(a)); + for (var l = 0, k = -1E8, m = d[f].rankIndex - 1; 0 <= m;) { + var n = mxCellPath.create(b[m].getCoreCell()), + n = e[n]; + if (null != n) { + var p = n.cell; + n.visited ? (k = p.getGeneralPurposeVariable(a) + p.width / 2 + this.intraCellSpacing + l + g.width / 2, m = -1) : (l += p.width + this.intraCellSpacing, m--) + } + } + l = 0; + p = 1E8; + for (m = d[f].rankIndex + 1; m < d.length;) + if (n = mxCellPath.create(b[m].getCoreCell()), n = e[n], null != n) { + var q = n.cell; + n.visited ? + (p = q.getGeneralPurposeVariable(a) - q.width / 2 - this.intraCellSpacing - l - g.width / 2, m = d.length) : (l += q.width + this.intraCellSpacing, m++) + } + h >= k && h <= p ? g.setGeneralPurposeVariable(a, h) : h < k ? (g.setGeneralPurposeVariable(a, k), this.currentXDelta += k - h) : h > p && (g.setGeneralPurposeVariable(a, p), this.currentXDelta += + h - p); + d[f].visited = !0 + } +}; +mxCoordinateAssignment.prototype.calculatedWeightedValue = function(a, b) { + for (var c = 0, d = 0; d < b.length; d++) { + var e = b[d]; + a.isVertex() && e.isVertex() ? c++ : c = a.isEdge() && e.isEdge() ? c + 8 : c + 2 + } + return c +}; +mxCoordinateAssignment.prototype.medianXValue = function(a, b) { + if (0 == a.length) return 0; + for (var c = [], d = 0; d < a.length; d++) c[d] = a[d].getGeneralPurposeVariable(b); + c.sort(function(a, b) { + return a - b + }); + if (1 == a.length % 2) return c[Math.floor(a.length / 2)]; + d = a.length / 2; + return (c[d - 1] + c[d]) / 2 +}; +mxCoordinateAssignment.prototype.initialCoords = function(a, b) { + this.calculateWidestRank(a, b); + for (var c = this.widestRank; 0 <= c; c--) c < b.maxRank && this.rankCoordinates(c, a, b); + for (c = this.widestRank + 1; c <= b.maxRank; c++) 0 < c && this.rankCoordinates(c, a, b) +}; +mxCoordinateAssignment.prototype.rankCoordinates = function(a, b, c) { + b = c.ranks[a]; + c = 0; + for (var d = this.initialX + (this.widestRankValue - this.rankWidths[a]) / 2, e = !1, f = 0; f < b.length; f++) { + var g = b[f]; + if (g.isVertex()) { + var h = this.layout.getVertexBounds(g.cell); + null != h ? this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (g.width = h.width, g.height = h.height) : (g.width = h.height, g.height = h.width) : + e = !0; + c = Math.max(c, g.height) + } else g.isEdge() && (h = 1, null != g.edges ? h = g.edges.length : mxLog.warn("edge.edges is null"), + g.width = (h - 1) * this.parallelEdgeSpacing); + d += g.width / 2; + g.setX(a, d); + g.setGeneralPurposeVariable(a, d); + d += g.width / 2; + d += this.intraCellSpacing + }!0 == e && mxLog.warn("At least one cell has no bounds") +}; +mxCoordinateAssignment.prototype.calculateWidestRank = function(a, b) { + var c = -this.interRankCellSpacing, + d = 0; + this.rankWidths = []; + this.rankY = []; + for (var e = b.maxRank; 0 <= e; e--) { + for (var f = 0, g = b.ranks[e], h = this.initialX, k = !1, l = 0; l < g.length; l++) { + var m = g[l]; + if (m.isVertex()) { + var n = this.layout.getVertexBounds(m.cell); + null != n ? this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (m.width = n.width, m.height = n.height) : (m.width = n.height, m.height = n + .width) : k = !0; + f = Math.max(f, m.height) + } else m.isEdge() && + (n = 1, null != m.edges ? n = m.edges.length : mxLog.warn("edge.edges is null"), m.width = (n - 1) * this.parallelEdgeSpacing); + h += m.width / 2; + m.setX(e, h); + m.setGeneralPurposeVariable(e, h); + h += m.width / 2; + h += this.intraCellSpacing; + h > this.widestRankValue && (this.widestRankValue = h, this.widestRank = e); + this.rankWidths[e] = h + }!0 == k && mxLog.warn("At least one cell has no bounds"); + this.rankY[e] = c; + h = f / 2 + d / 2 + this.interRankCellSpacing; + d = f; + c = this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_WEST ? c + h : c - + h; + for (l = 0; l < g.length; l++) g[l].setY(e, c) + } +}; +mxCoordinateAssignment.prototype.minPath = function(a, b) { + var c = b.edgeMapper, + d; + for (d in c) { + var e = c[d]; + if (!(1 > e.maxRank - e.minRank - 1)) { + for (var f = e.getGeneralPurposeVariable(e.minRank + 1), g = !0, h = 0, k = e.minRank + 2; k < e.maxRank; k++) { + var l = e.getGeneralPurposeVariable(k); + f != l ? (g = !1, f = l) : h++ + } + if (!g) { + for (var g = f = 0, l = [], m = [], n = e.getGeneralPurposeVariable(e.minRank + 1), k = e.minRank + 1; k < e.maxRank - 1; k++) { + var p = e.getX(k + 1); + n == p ? (l[k - e.minRank - 1] = n, f++) : this.repositionValid(b, e, k + 1, n) ? (l[k - e.minRank - 1] = n, f++) : n = l[k - e.minRank - + 1] = p + } + n = e.getX(k); + for (k = e.maxRank - 1; k > e.minRank + 1; k--) p = e.getX(k - 1), n == p ? (m[k - e.minRank - 2] = n, g++) : this.repositionValid(b, e, k - 1, n) ? (m[k - e.minRank - 2] = n, g++) : (m[k - + e.minRank - 2] = e.getX(k - 1), n = p); + if (g > h || f > h) + if (g >= f) + for (k = e.maxRank - 2; k > e.minRank; k--) e.setX(k, m[k - e.minRank - 1]); + else if (f > g) + for (k = e.minRank + 2; k < e.maxRank; k++) e.setX(k, l[k - e.minRank - 2]) + } + } + } +}; +mxCoordinateAssignment.prototype.repositionValid = function(a, b, c, d) { + a = a.ranks[c]; + for (var e = -1, f = 0; f < a.length; f++) + if (b == a[f]) { + e = f; + break + } + if (0 > e) return !1; + f = b.getGeneralPurposeVariable(c); + if (d < f) { + if (0 == e) return !0; + a = a[e - 1]; + c = a.getGeneralPurposeVariable(c); + c = c + a.width / 2 + this.intraCellSpacing + b.width / 2; + if (!(c <= d)) return !1 + } else if (d > f) { + if (e == a.length - 1) return !0; + a = a[e + 1]; + c = a.getGeneralPurposeVariable(c); + c = c - a.width / 2 - this.intraCellSpacing - b.width / 2; + if (!(c >= d)) return !1 + } + return !0 +}; +mxCoordinateAssignment.prototype.setCellLocations = function(a, b) { + this.rankTopY = []; + this.rankBottomY = []; + for (var c = 0; c < b.ranks.length; c++) this.rankTopY[c] = Number.MAX_VALUE, this.rankBottomY[c] = 0; + c = null; + this.layout.resizeParent && (c = {}); + var d = b.edgeMapper, + e = b.vertexMapper, + f; + for (f in e) { + var g = e[f]; + this.setVertexLocation(g); + if (this.layout.resizeParent) { + var g = a.model.getParent(g.cell), + h = mxCellPath.create(g); + null == c[h] && (c[h] = g) + } + } + this.layout.resizeParent && null != c && this.adjustParents(c); + (this.edgeStyle == mxHierarchicalEdgeStyle.ORTHOGONAL || + this.edgeStyle == mxHierarchicalEdgeStyle.POLYLINE || this.edgeStyle == mxHierarchicalEdgeStyle.CURVE) && this.localEdgeProcessing(b); + for (f in d) this.setEdgePosition(d[f]) +}; +mxCoordinateAssignment.prototype.adjustParents = function(a) { + var b = [], + c; + for (c in a) b.push(a[c]); + this.layout.arrangeGroups(mxUtils.sortCells(b, !0), this.groupPadding) +}; +mxCoordinateAssignment.prototype.localEdgeProcessing = function(a) { + for (var b = 0; b < a.ranks.length; b++) + for (var c = a.ranks[b], d = 0; d < c.length; d++) { + var e = c[d]; + if (e.isVertex()) + for (var f = e.getPreviousLayerConnectedCells(b), g = b - 1, h = 0; 2 > h; h++) { + if (-1 < g && g < a.ranks.length && null != f && 0 < f.length) { + for (var k = [], l = 0; l < f.length; l++) { + var m = new WeightedCellSorter(f[l], f[l].getX(g)); + k.push(m) + } + k.sort(WeightedCellSorter.prototype.compare); + for (var m = e.x[0] - e.width / 2, n = m + e.width, p = f = 0, g = [], l = 0; l < k.length; l++) { + var q = k[l].cell, + s; + if (q.isVertex()) { + s = 0 == h ? e.connectsAsSource : e.connectsAsTarget; + for (var r = 0; r < s.length; r++) + if (s[r].source == q || s[r].target == q) f += s[r].edges.length, p++, g.push(s[r]) + } else f += q.edges.length, p++, g.push(q) + } + e.width > (f + 1) * this.prefHozEdgeSep + 2 * this.prefHozEdgeSep && (m += this.prefHozEdgeSep, n -= this.prefHozEdgeSep); + k = (n - m) / f; + m += k / 2; + n = this.minEdgeJetty - this.prefVertEdgeOff; + for (l = p = 0; l < g.length; l++) { + q = g[l].edges.length; + r = mxCellPath.create(g[l].edges[0]); + s = this.jettyPositions[r]; + null == s && (s = [], this.jettyPositions[r] = + s); + l < f / 2 ? n += this.prefVertEdgeOff : l > f / 2 && (n -= this.prefVertEdgeOff); + for (r = 0; r < q; r++) s[4 * r + 2 * h] = m, m += k, s[4 * r + 2 * h + 1] = n; + p = Math.max(p, n) + } + } + f = e.getNextLayerConnectedCells(b); + g = b + 1 + } + } +}; +mxCoordinateAssignment.prototype.setEdgePosition = function(a) { + var b = 0; + if (101207 != a.temp[0]) { + var c = a.maxRank, + d = a.minRank; + c == d && (c = a.source.maxRank, d = a.target.minRank); + for (var e = 0, f = mxCellPath.create(a.edges[0]), f = this.jettyPositions[f], g = a.isReversed ? a.target.cell : a.source.cell, h = this.layout.graph, k = 0; k < a.edges.length; k++) { + var l = a.edges[k], + m = this.layout.getVisibleTerminal(l, !0), + n = h.model.getTerminal(l, !0), + p = [], + q = a.isReversed; + m != g && (q = !q); + if (null != f) { + var s = q ? 2 : 0, + r = q ? this.rankTopY[d] : this.rankBottomY[c], + t = f[4 * e + 1 + s]; + q && (t = -t); + r += t; + s = f[4 * e + s]; + n = h.model.getTerminal(l, !0); + this.layout.isPort(n) && h.model.getParent(n) == m && (s = h.view.getState(n), s = null != s ? s.x : m.geometry.x + a.source.width * n.geometry.x); + this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (p.push(new mxPoint(s, r)), this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && p.push( + new mxPoint(s, r + t))) : (p.push(new mxPoint(r, s)), this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && p.push(new mxPoint(r + t, s))) + } + s = a.x.length - + 1; + r = t = -1; + m = a.maxRank - 1; + q && (s = 0, t = a.x.length, r = 1, m = a.minRank + 1); + for (; a.maxRank != a.minRank && s != t; s += r) { + var n = a.x[s] + b, + v = (this.rankTopY[m] + this.rankBottomY[m + 1]) / 2, + w = (this.rankTopY[m - 1] + this.rankBottomY[m]) / 2; + if (q) var u = v, + v = w, + w = u; + this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (p.push(new mxPoint(n, v)), p.push(new mxPoint(n, w))) : (p.push(new mxPoint(v, n)), p.push( + new mxPoint(w, n))); + this.limitX = Math.max(this.limitX, n); + m += r + } + null != f && (s = q ? 2 : 0, r = q ? this.rankBottomY[c] : + this.rankTopY[d], t = f[4 * e + 3 - s], q && (t = -t), r -= t, s = f[4 * e + 2 - s], q = h.model.getTerminal(l, !1), m = this.layout.getVisibleTerminal(l, !1), this.layout.isPort(q) && h.model + .getParent(q) == m && (s = h.view.getState(q), s = null != s ? s.x : m.geometry.x + a.target.width * q.geometry.x), this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == + mxConstants.DIRECTION_SOUTH ? (this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && p.push(new mxPoint(s, r - t)), p.push(new mxPoint(s, r))) : (this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && + p.push(new mxPoint(r - + t, s)), p.push(new mxPoint(r, s)))); + a.isReversed && this.processReversedEdge(a, l); + this.layout.setEdgePoints(l, p); + b = 0 == b ? this.parallelEdgeSpacing : 0 < b ? -b : -b + this.parallelEdgeSpacing; + e++ + } + a.temp[0] = 101207 + } +}; +mxCoordinateAssignment.prototype.setVertexLocation = function(a) { + var b = a.cell, + c = a.x[0] - a.width / 2, + d = a.y[0] - a.height / 2; + this.rankTopY[a.minRank] = Math.min(this.rankTopY[a.minRank], d); + this.rankBottomY[a.minRank] = Math.max(this.rankBottomY[a.minRank], d + a.height); + this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? this.layout.setVertexLocation(b, c, d) : this.layout.setVertexLocation(b, d, c); + this.limitX = Math.max(this.limitX, c + a.width) +}; +mxCoordinateAssignment.prototype.processReversedEdge = function(a, b) {}; + +function WeightedCellSorter(a, b) { + this.cell = a; + this.weightedValue = b +} +WeightedCellSorter.prototype.weightedValue = 0; +WeightedCellSorter.prototype.nudge = !1; +WeightedCellSorter.prototype.visited = !1; +WeightedCellSorter.prototype.rankIndex = null; +WeightedCellSorter.prototype.cell = null; +WeightedCellSorter.prototype.compare = function(a, b) { + return null != a && null != b ? b.weightedValue > a.weightedValue ? -1 : b.weightedValue < a.weightedValue ? 1 : b.nudge ? -1 : 1 : 0 +}; + +function mxHierarchicalLayout(a, b, c) { + mxGraphLayout.call(this, a); + this.orientation = null != b ? b : mxConstants.DIRECTION_NORTH; + this.deterministic = null != c ? c : !0 +} +mxHierarchicalLayout.prototype = new mxGraphLayout; +mxHierarchicalLayout.prototype.constructor = mxHierarchicalLayout; +mxHierarchicalLayout.prototype.roots = null; +mxHierarchicalLayout.prototype.resizeParent = !1; +mxHierarchicalLayout.prototype.moveParent = !1; +mxHierarchicalLayout.prototype.parentBorder = 0; +mxHierarchicalLayout.prototype.intraCellSpacing = 30; +mxHierarchicalLayout.prototype.interRankCellSpacing = 100; +mxHierarchicalLayout.prototype.interHierarchySpacing = 60; +mxHierarchicalLayout.prototype.parallelEdgeSpacing = 10; +mxHierarchicalLayout.prototype.orientation = mxConstants.DIRECTION_NORTH; +mxHierarchicalLayout.prototype.fineTuning = !0; +mxHierarchicalLayout.prototype.tightenToSource = !0; +mxHierarchicalLayout.prototype.disableEdgeStyle = !0; +mxHierarchicalLayout.prototype.traverseAncestors = !0; +mxHierarchicalLayout.prototype.model = null; +mxHierarchicalLayout.prototype.edgesCache = null; +mxHierarchicalLayout.prototype.getModel = function() { + return this.model +}; +mxHierarchicalLayout.prototype.execute = function(a, b) { + this.parent = a; + var c = this.graph.model; + this.edgesCache = {}; + if (!(null == b && null == a)) { + if (null != b && null != a) { + for (var d = [], e = 0; e < b.length; e++) c.isAncestor(a, b[e]) && d.push(b[e]); + this.roots = d + } else this.roots = b; + c.beginUpdate(); + try { + this.run(a), this.resizeParent && !this.graph.isCellCollapsed(a) && this.graph.updateGroupBounds([a], this.parentBorder, this.moveParent) + } finally { + c.endUpdate() + } + } +}; +mxHierarchicalLayout.prototype.findRoots = function(a, b) { + var c = []; + if (null != a && null != b) { + var d = this.graph.model, + e = null, + f = -1E5, + g; + for (g in b) { + var h = b[g]; + if (d.isVertex(h) && this.graph.isCellVisible(h)) { + for (var k = this.getEdges(h), l = 0, m = 0, n = 0; n < k.length; n++) this.getVisibleTerminal(k[n], !0) == h ? l++ : m++; + 0 == m && 0 < l && c.push(h); + k = l - m; + k > f && (f = k, e = h) + } + } + 0 == c.length && null != e && c.push(e) + } + return c +}; +mxHierarchicalLayout.prototype.getEdges = function(a) { + var b = mxCellPath.create(a); + if (null != this.edgesCache[b]) return this.edgesCache[b]; + for (var c = this.graph.model, d = [], e = this.graph.isCellCollapsed(a), f = c.getChildCount(a), g = 0; g < f; g++) { + var h = c.getChildAt(a, g); + if (this.isPort(h)) d = d.concat(c.getEdges(h, !0, !0)); + else if (e || !this.graph.isCellVisible(h)) d = d.concat(c.getEdges(h, !0, !0)) + } + d = d.concat(c.getEdges(a, !0, !0)); + c = []; + for (g = 0; g < d.length; g++) e = this.getVisibleTerminal(d[g], !0), f = this.getVisibleTerminal(d[g], !1), (e == f || e != f && (f == a && (null == this.parent || this.graph.isValidAncestor(e, + this.parent, this.traverseAncestors)) || e == a && (null == this.parent || this.graph.isValidAncestor(f, this.parent, this.traverseAncestors)))) && c.push(d[g]); + return this.edgesCache[b] = c +}; +mxHierarchicalLayout.prototype.getVisibleTerminal = function(a, b) { + var c = this.graph.view.getState(a), + c = null != c ? c.getVisibleTerminal(b) : this.graph.view.getVisibleTerminal(a, b); + this.isPort(c) && (c = this.graph.model.getParent(c)); + return c +}; +mxHierarchicalLayout.prototype.run = function(a) { + var b = [], + c = []; + if (null == this.roots && null != a) { + var d = {}; + this.filterDescendants(a, d); + this.roots = []; + var e = !0, + f; + for (f in d) + if (null != d[f]) { + e = !1; + break + } + for (; !e;) { + for (var g = this.findRoots(a, d), e = 0; e < g.length; e++) { + var h = []; + b.push(h); + this.traverse(g[e], !0, null, c, h, b, d) + } + for (e = 0; e < g.length; e++) this.roots.push(g[e]); + e = !0; + for (f in d) + if (null != d[f]) { + e = !1; + break + } + } + } else + for (e = 0; e < roots.length; e++) h = [], b.push(h), traverse(roots.get(e), !0, null, c, h, b, null); + for (e = c = 0; e < b.length; e++) { + h = + b[e]; + d = []; + for (f in h) d.push(h[f]); + this.model = new mxGraphHierarchyModel(this, d, this.roots, a, this.tightenToSource); + this.cycleStage(a); + this.layeringStage(); + this.crossingStage(a); + c = this.placementStage(c, a) + } +}; +mxHierarchicalLayout.prototype.filterDescendants = function(a, b) { + var c = this.graph.model; + c.isVertex(a) && (a != this.parent && this.graph.isCellVisible(a)) && (b[mxCellPath.create(a)] = a); + if (this.traverseAncestors || a == this.parent && this.graph.isCellVisible(a)) + for (var d = c.getChildCount(a), e = 0; e < d; e++) { + var f = c.getChildAt(a, e); + this.isPort(f) || this.filterDescendants(f, b) + } +}; +mxHierarchicalLayout.prototype.isPort = function(a) { + return a.geometry.relative ? !0 : !1 +}; +mxHierarchicalLayout.prototype.getEdgesBetween = function(a, b, c) { + c = null != c ? c : !1; + for (var d = this.getEdges(a), e = [], f = 0; f < d.length; f++) { + var g = this.getVisibleTerminal(d[f], !0), + h = this.getVisibleTerminal(d[f], !1); + (g == a && h == b || !c && g == b && h == a) && e.push(d[f]) + } + return e +}; +mxHierarchicalLayout.prototype.traverse = function(a, b, c, d, e, f, g) { + if (null != a && null != d) { + var h = mxCellPath.create(a); + if (null == d[h] && (null == g || null != g[h])) { + null == e[h] && (e[h] = a); + null == d[h] && (d[h] = a); + delete g[h]; + var k = this.getEdges(a); + for (c = 0; c < k.length; c++) + if (h = this.getVisibleTerminal(k[c], !0) == a, !b || h) h = this.getVisibleTerminal(k[c], !h), e = this.traverse(h, b, k[c], d, e, f, g) + } else if (null == e[h]) + for (c = 0; c < f.length; c++) + if (a = f[c], null != a[h]) { + for (k in e) a[k] = e[k]; + f.pop(); + return a + } + } + return e +}; +mxHierarchicalLayout.prototype.cycleStage = function(a) { + (new mxMinimumCycleRemover(this)).execute(a) +}; +mxHierarchicalLayout.prototype.layeringStage = function() { + this.model.initialRank(); + this.model.fixRanks() +}; +mxHierarchicalLayout.prototype.crossingStage = function(a) { + (new mxMedianHybridCrossingReduction(this)).execute(a) +}; +mxHierarchicalLayout.prototype.placementStage = function(a, b) { + var c = new mxCoordinateAssignment(this, this.intraCellSpacing, this.interRankCellSpacing, this.orientation, a, this.parallelEdgeSpacing); + c.fineTuning = this.fineTuning; + c.execute(b); + return c.limitX + this.interHierarchySpacing +}; + +function mxGraphModel(a) { + this.currentEdit = this.createUndoableEdit(); + null != a ? this.setRoot(a) : this.clear() +} +mxGraphModel.prototype = new mxEventSource; +mxGraphModel.prototype.constructor = mxGraphModel; +mxGraphModel.prototype.root = null; +mxGraphModel.prototype.cells = null; +mxGraphModel.prototype.maintainEdgeParent = !0; +mxGraphModel.prototype.createIds = !0; +mxGraphModel.prototype.prefix = ""; +mxGraphModel.prototype.postfix = ""; +mxGraphModel.prototype.nextId = 0; +mxGraphModel.prototype.currentEdit = null; +mxGraphModel.prototype.updateLevel = 0; +mxGraphModel.prototype.endingUpdate = !1; +mxGraphModel.prototype.clear = function() { + this.setRoot(this.createRoot()) +}; +mxGraphModel.prototype.isCreateIds = function() { + return this.createIds +}; +mxGraphModel.prototype.setCreateIds = function(a) { + this.createIds = a +}; +mxGraphModel.prototype.createRoot = function() { + var a = new mxCell; + a.insert(new mxCell); + return a +}; +mxGraphModel.prototype.getCell = function(a) { + return null != this.cells ? this.cells[a] : null +}; +mxGraphModel.prototype.filterCells = function(a, b) { + var c = null; + if (null != a) + for (var c = [], d = 0; d < a.length; d++) b(a[d]) && c.push(a[d]); + return c +}; +mxGraphModel.prototype.getDescendants = function(a) { + return this.filterDescendants(null, a) +}; +mxGraphModel.prototype.filterDescendants = function(a, b) { + var c = []; + b = b || this.getRoot(); + (null == a || a(b)) && c.push(b); + for (var d = this.getChildCount(b), e = 0; e < d; e++) var f = this.getChildAt(b, e), + c = c.concat(this.filterDescendants(a, f)); + return c +}; +mxGraphModel.prototype.getRoot = function(a) { + var b = a || this.root; + if (null != a) + for (; null != a;) b = a, a = this.getParent(a); + return b +}; +mxGraphModel.prototype.setRoot = function(a) { + this.execute(new mxRootChange(this, a)); + return a +}; +mxGraphModel.prototype.rootChanged = function(a) { + var b = this.root; + this.root = a; + this.nextId = 0; + this.cells = null; + this.cellAdded(a); + return b +}; +mxGraphModel.prototype.isRoot = function(a) { + return null != a && this.root == a +}; +mxGraphModel.prototype.isLayer = function(a) { + return this.isRoot(this.getParent(a)) +}; +mxGraphModel.prototype.isAncestor = function(a, b) { + for (; null != b && b != a;) b = this.getParent(b); + return b == a +}; +mxGraphModel.prototype.contains = function(a) { + return this.isAncestor(this.root, a) +}; +mxGraphModel.prototype.getParent = function(a) { + return null != a ? a.getParent() : null +}; +mxGraphModel.prototype.add = function(a, b, c) { + if (b != a && null != a && null != b) { + null == c && (c = this.getChildCount(a)); + var d = a != this.getParent(b); + this.execute(new mxChildChange(this, a, b, c)); + this.maintainEdgeParent && d && this.updateEdgeParents(b) + } + return b +}; +mxGraphModel.prototype.cellAdded = function(a) { + if (null != a) { + null == a.getId() && this.createIds && a.setId(this.createId(a)); + if (null != a.getId()) { + var b = this.getCell(a.getId()); + if (b != a) { + for (; null != b;) a.setId(this.createId(a)), b = this.getCell(a.getId()); + null == this.cells && (this.cells = {}); + this.cells[a.getId()] = a + } + } + mxUtils.isNumeric(a.getId()) && (this.nextId = Math.max(this.nextId, a.getId())); + for (var b = this.getChildCount(a), c = 0; c < b; c++) this.cellAdded(this.getChildAt(a, c)) + } +}; +mxGraphModel.prototype.createId = function(a) { + a = this.nextId; + this.nextId++; + return this.prefix + a + this.postfix +}; +mxGraphModel.prototype.updateEdgeParents = function(a, b) { + b = b || this.getRoot(a); + for (var c = this.getChildCount(a), d = 0; d < c; d++) { + var e = this.getChildAt(a, d); + this.updateEdgeParents(e, b) + } + e = this.getEdgeCount(a); + c = []; + for (d = 0; d < e; d++) c.push(this.getEdgeAt(a, d)); + for (d = 0; d < c.length; d++) e = c[d], this.isAncestor(b, e) && this.updateEdgeParent(e, b) +}; +mxGraphModel.prototype.updateEdgeParent = function(a, b) { + for (var c = this.getTerminal(a, !0), d = this.getTerminal(a, !1), e = null; null != c && !this.isEdge(c) && null != c.geometry && c.geometry.relative;) c = this.getParent(c); + for (; null != d && !this.isEdge(d) && null != d.geometry && d.geometry.relative;) d = this.getParent(d); + if (this.isAncestor(b, c) && this.isAncestor(b, d) && (e = c == d ? this.getParent(c) : this.getNearestCommonAncestor(c, d), null != e && (this.getParent(e) != this.root || this.isAncestor(e, a)) && + this.getParent(a) != e)) { + c = this.getGeometry(a); + if (null != c) { + var f = this.getOrigin(this.getParent(a)), + g = this.getOrigin(e), + d = g.x - f.x, + f = g.y - f.y, + c = c.clone(); + c.translate(-d, -f); + this.setGeometry(a, c) + } + this.add(e, a, this.getChildCount(e)) + } +}; +mxGraphModel.prototype.getOrigin = function(a) { + var b = null; + null != a ? (b = this.getOrigin(this.getParent(a)), this.isEdge(a) || (a = this.getGeometry(a), null != a && (b.x += a.x, b.y += a.y))) : b = new mxPoint; + return b +}; +mxGraphModel.prototype.getNearestCommonAncestor = function(a, b) { + if (null != a && null != b) { + var c = mxCellPath.create(b); + if (null != c && 0 < c.length) { + var d = a, + e = mxCellPath.create(d); + if (c.length < e.length) var d = b, + f = e, + e = c, + c = f; + for (; null != d;) { + f = this.getParent(d); + if (0 == c.indexOf(e + mxCellPath.PATH_SEPARATOR) && null != f) return d; + e = mxCellPath.getParentPath(e); + d = f + } + } + } + return null +}; +mxGraphModel.prototype.remove = function(a) { + a == this.root ? this.setRoot(null) : null != this.getParent(a) && this.execute(new mxChildChange(this, null, a)); + return a +}; +mxGraphModel.prototype.cellRemoved = function(a) { + if (null != a && null != this.cells) { + for (var b = this.getChildCount(a) - 1; 0 <= b; b--) this.cellRemoved(this.getChildAt(a, b)); + null != this.cells && null != a.getId() && delete this.cells[a.getId()] + } +}; +mxGraphModel.prototype.parentForCellChanged = function(a, b, c) { + var d = this.getParent(a); + null != b ? (b != d || d.getIndex(a) != c) && b.insert(a, c) : null != d && (c = d.getIndex(a), d.remove(c)); + !this.contains(d) && null != b ? this.cellAdded(a) : null == b && this.cellRemoved(a); + return d +}; +mxGraphModel.prototype.getChildCount = function(a) { + return null != a ? a.getChildCount() : 0 +}; +mxGraphModel.prototype.getChildAt = function(a, b) { + return null != a ? a.getChildAt(b) : null +}; +mxGraphModel.prototype.getChildren = function(a) { + return null != a ? a.children : null +}; +mxGraphModel.prototype.getChildVertices = function(a) { + return this.getChildCells(a, !0, !1) +}; +mxGraphModel.prototype.getChildEdges = function(a) { + return this.getChildCells(a, !1, !0) +}; +mxGraphModel.prototype.getChildCells = function(a, b, c) { + b = null != b ? b : !1; + c = null != c ? c : !1; + for (var d = this.getChildCount(a), e = [], f = 0; f < d; f++) { + var g = this.getChildAt(a, f); + (!c && !b || c && this.isEdge(g) || b && this.isVertex(g)) && e.push(g) + } + return e +}; +mxGraphModel.prototype.getTerminal = function(a, b) { + return null != a ? a.getTerminal(b) : null +}; +mxGraphModel.prototype.setTerminal = function(a, b, c) { + var d = b != this.getTerminal(a, c); + this.execute(new mxTerminalChange(this, a, b, c)); + this.maintainEdgeParent && d && this.updateEdgeParent(a, this.getRoot()); + return b +}; +mxGraphModel.prototype.setTerminals = function(a, b, c) { + this.beginUpdate(); + try { + this.setTerminal(a, b, !0), this.setTerminal(a, c, !1) + } finally { + this.endUpdate() + } +}; +mxGraphModel.prototype.terminalForCellChanged = function(a, b, c) { + var d = this.getTerminal(a, c); + null != b ? b.insertEdge(a, c) : null != d && d.removeEdge(a, c); + return d +}; +mxGraphModel.prototype.getEdgeCount = function(a) { + return null != a ? a.getEdgeCount() : 0 +}; +mxGraphModel.prototype.getEdgeAt = function(a, b) { + return null != a ? a.getEdgeAt(b) : null +}; +mxGraphModel.prototype.getDirectedEdgeCount = function(a, b, c) { + for (var d = 0, e = this.getEdgeCount(a), f = 0; f < e; f++) { + var g = this.getEdgeAt(a, f); + g != c && this.getTerminal(g, b) == a && d++ + } + return d +}; +mxGraphModel.prototype.getConnections = function(a) { + return this.getEdges(a, !0, !0, !1) +}; +mxGraphModel.prototype.getIncomingEdges = function(a) { + return this.getEdges(a, !0, !1, !1) +}; +mxGraphModel.prototype.getOutgoingEdges = function(a) { + return this.getEdges(a, !1, !0, !1) +}; +mxGraphModel.prototype.getEdges = function(a, b, c, d) { + b = null != b ? b : !0; + c = null != c ? c : !0; + d = null != d ? d : !0; + for (var e = this.getEdgeCount(a), f = [], g = 0; g < e; g++) { + var h = this.getEdgeAt(a, g), + k = this.getTerminal(h, !0), + l = this.getTerminal(h, !1); + (d && k == l || k != l && (b && l == a || c && k == a)) && f.push(h) + } + return f +}; +mxGraphModel.prototype.getEdgesBetween = function(a, b, c) { + c = null != c ? c : !1; + var d = this.getEdgeCount(a), + e = this.getEdgeCount(b), + f = a, + g = d; + e < d && (g = e, f = b); + d = []; + for (e = 0; e < g; e++) { + var h = this.getEdgeAt(f, e), + k = this.getTerminal(h, !0), + l = this.getTerminal(h, !1), + m = l == a && k == b; + (k == a && l == b || !c && m) && d.push(h) + } + return d +}; +mxGraphModel.prototype.getOpposites = function(a, b, c, d) { + c = null != c ? c : !0; + d = null != d ? d : !0; + var e = []; + if (null != a) + for (var f = 0; f < a.length; f++) { + var g = this.getTerminal(a[f], !0), + h = this.getTerminal(a[f], !1); + g == b && null != h && h != b && d ? e.push(h) : h == b && (null != g && g != b && c) && e.push(g) + } + return e +}; +mxGraphModel.prototype.getTopmostCells = function(a) { + for (var b = [], c = 0; c < a.length; c++) { + for (var d = a[c], e = !0, f = this.getParent(d); null != f;) { + if (0 <= mxUtils.indexOf(a, f)) { + e = !1; + break + } + f = this.getParent(f) + } + e && b.push(d) + } + return b +}; +mxGraphModel.prototype.isVertex = function(a) { + return null != a ? a.isVertex() : !1 +}; +mxGraphModel.prototype.isEdge = function(a) { + return null != a ? a.isEdge() : !1 +}; +mxGraphModel.prototype.isConnectable = function(a) { + return null != a ? a.isConnectable() : !1 +}; +mxGraphModel.prototype.getValue = function(a) { + return null != a ? a.getValue() : null +}; +mxGraphModel.prototype.setValue = function(a, b) { + this.execute(new mxValueChange(this, a, b)); + return b +}; +mxGraphModel.prototype.valueForCellChanged = function(a, b) { + return a.valueChanged(b) +}; +mxGraphModel.prototype.getGeometry = function(a, b) { + return null != a ? a.getGeometry() : null +}; +mxGraphModel.prototype.setGeometry = function(a, b) { + b != this.getGeometry(a) && this.execute(new mxGeometryChange(this, a, b)); + return b +}; +mxGraphModel.prototype.geometryForCellChanged = function(a, b) { + var c = this.getGeometry(a); + a.setGeometry(b); + return c +}; +mxGraphModel.prototype.getStyle = function(a) { + return null != a ? a.getStyle() : null +}; +mxGraphModel.prototype.setStyle = function(a, b) { + b != this.getStyle(a) && this.execute(new mxStyleChange(this, a, b)); + return b +}; +mxGraphModel.prototype.styleForCellChanged = function(a, b) { + var c = this.getStyle(a); + a.setStyle(b); + return c +}; +mxGraphModel.prototype.isCollapsed = function(a) { + return null != a ? a.isCollapsed() : !1 +}; +mxGraphModel.prototype.setCollapsed = function(a, b) { + b != this.isCollapsed(a) && this.execute(new mxCollapseChange(this, a, b)); + return b +}; +mxGraphModel.prototype.collapsedStateForCellChanged = function(a, b) { + var c = this.isCollapsed(a); + a.setCollapsed(b); + return c +}; +mxGraphModel.prototype.isVisible = function(a) { + return null != a ? a.isVisible() : !1 +}; +mxGraphModel.prototype.setVisible = function(a, b) { + b != this.isVisible(a) && this.execute(new mxVisibleChange(this, a, b)); + return b +}; +mxGraphModel.prototype.visibleStateForCellChanged = function(a, b) { + var c = this.isVisible(a); + a.setVisible(b); + return c +}; +mxGraphModel.prototype.execute = function(a) { + a.execute(); + this.beginUpdate(); + this.currentEdit.add(a); + this.fireEvent(new mxEventObject(mxEvent.EXECUTE, "change", a)); + this.fireEvent(new mxEventObject(mxEvent.EXECUTED, "change", a)); + this.endUpdate() +}; +mxGraphModel.prototype.beginUpdate = function() { + this.updateLevel++; + this.fireEvent(new mxEventObject(mxEvent.BEGIN_UPDATE)); + 1 == this.updateLevel && this.fireEvent(new mxEventObject(mxEvent.START_EDIT)) +}; +mxGraphModel.prototype.endUpdate = function() { + this.updateLevel--; + 0 == this.updateLevel && this.fireEvent(new mxEventObject(mxEvent.END_EDIT)); + if (!this.endingUpdate) { + this.endingUpdate = 0 == this.updateLevel; + this.fireEvent(new mxEventObject(mxEvent.END_UPDATE, "edit", this.currentEdit)); + try { + if (this.endingUpdate && !this.currentEdit.isEmpty()) { + this.fireEvent(new mxEventObject(mxEvent.BEFORE_UNDO, "edit", this.currentEdit)); + var a = this.currentEdit; + this.currentEdit = this.createUndoableEdit(); + a.notify(); + this.fireEvent(new mxEventObject(mxEvent.UNDO, + "edit", a)) + } + } finally { + this.endingUpdate = !1 + } + } +}; +mxGraphModel.prototype.createUndoableEdit = function() { + var a = new mxUndoableEdit(this, !0); + a.notify = function() { + a.source.fireEvent(new mxEventObject(mxEvent.CHANGE, "edit", a, "changes", a.changes)); + a.source.fireEvent(new mxEventObject(mxEvent.NOTIFY, "edit", a, "changes", a.changes)) + }; + return a +}; +mxGraphModel.prototype.mergeChildren = function(a, b, c) { + c = null != c ? c : !0; + this.beginUpdate(); + try { + var d = {}; + this.mergeChildrenImpl(a, b, c, d); + for (var e in d) { + var f = d[e], + g = this.getTerminal(f, !0); + null != g && (g = d[mxCellPath.create(g)], this.setTerminal(f, g, !0)); + g = this.getTerminal(f, !1); + null != g && (g = d[mxCellPath.create(g)], this.setTerminal(f, g, !1)) + } + } finally { + this.endUpdate() + } +}; +mxGraphModel.prototype.mergeChildrenImpl = function(a, b, c, d) { + this.beginUpdate(); + try { + for (var e = a.getChildCount(), f = 0; f < e; f++) { + var g = a.getChildAt(f); + if ("function" == typeof g.getId) { + var h = g.getId(), + k = null != h && (!this.isEdge(g) || !c) ? this.getCell(h) : null; + if (null == k) { + var l = g.clone(); + l.setId(h); + l.setTerminal(g.getTerminal(!0), !0); + l.setTerminal(g.getTerminal(!1), !1); + k = b.insert(l); + this.cellAdded(k) + } + d[mxCellPath.create(g)] = k; + this.mergeChildrenImpl(g, k, c, d) + } + } + } finally { + this.endUpdate() + } +}; +mxGraphModel.prototype.getParents = function(a) { + var b = []; + if (null != a) + for (var c = {}, d = 0; d < a.length; d++) { + var e = this.getParent(a[d]); + if (null != e) { + var f = mxCellPath.create(e); + null == c[f] && (c[f] = e, b.push(e)) + } + } + return b +}; +mxGraphModel.prototype.cloneCell = function(a) { + return null != a ? this.cloneCells([a], !0)[0] : null +}; +mxGraphModel.prototype.cloneCells = function(a, b) { + for (var c = {}, d = [], e = 0; e < a.length; e++) null != a[e] ? d.push(this.cloneCellImpl(a[e], c, b)) : d.push(null); + for (e = 0; e < d.length; e++) null != d[e] && this.restoreClone(d[e], a[e], c); + return d +}; +mxGraphModel.prototype.cloneCellImpl = function(a, b, c) { + var d = this.cellCloned(a); + b[mxObjectIdentity.get(a)] = d; + if (c) { + c = this.getChildCount(a); + for (var e = 0; e < c; e++) { + var f = this.cloneCellImpl(this.getChildAt(a, e), b, !0); + d.insert(f) + } + } + return d +}; +mxGraphModel.prototype.cellCloned = function(a) { + return a.clone() +}; +mxGraphModel.prototype.restoreClone = function(a, b, c) { + var d = this.getTerminal(b, !0); + null != d && (d = c[mxObjectIdentity.get(d)], null != d && d.insertEdge(a, !0)); + d = this.getTerminal(b, !1); + null != d && (d = c[mxObjectIdentity.get(d)], null != d && d.insertEdge(a, !1)); + for (var d = this.getChildCount(a), e = 0; e < d; e++) this.restoreClone(this.getChildAt(a, e), this.getChildAt(b, e), c) +}; + +function mxRootChange(a, b) { + this.model = a; + this.previous = this.root = b +} +mxRootChange.prototype.execute = function() { + this.root = this.previous; + this.previous = this.model.rootChanged(this.previous) +}; + +function mxChildChange(a, b, c, d) { + this.model = a; + this.previous = this.parent = b; + this.child = c; + this.previousIndex = this.index = d +} +mxChildChange.prototype.execute = function() { + var a = this.model.getParent(this.child), + b = null != a ? a.getIndex(this.child) : 0; + null == this.previous && this.connect(this.child, !1); + a = this.model.parentForCellChanged(this.child, this.previous, this.previousIndex); + null != this.previous && this.connect(this.child, !0); + this.parent = this.previous; + this.previous = a; + this.index = this.previousIndex; + this.previousIndex = b +}; +mxChildChange.prototype.connect = function(a, b) { + b = null != b ? b : !0; + var c = a.getTerminal(!0), + d = a.getTerminal(!1); + null != c && (b ? this.model.terminalForCellChanged(a, c, !0) : this.model.terminalForCellChanged(a, null, !0)); + null != d && (b ? this.model.terminalForCellChanged(a, d, !1) : this.model.terminalForCellChanged(a, null, !1)); + a.setTerminal(c, !0); + a.setTerminal(d, !1); + c = this.model.getChildCount(a); + for (d = 0; d < c; d++) this.connect(this.model.getChildAt(a, d), b) +}; + +function mxTerminalChange(a, b, c, d) { + this.model = a; + this.cell = b; + this.previous = this.terminal = c; + this.source = d +} +mxTerminalChange.prototype.execute = function() { + this.terminal = this.previous; + this.previous = this.model.terminalForCellChanged(this.cell, this.previous, this.source) +}; + +function mxValueChange(a, b, c) { + this.model = a; + this.cell = b; + this.previous = this.value = c +} +mxValueChange.prototype.execute = function() { + this.value = this.previous; + this.previous = this.model.valueForCellChanged(this.cell, this.previous) +}; + +function mxStyleChange(a, b, c) { + this.model = a; + this.cell = b; + this.previous = this.style = c +} +mxStyleChange.prototype.execute = function() { + this.style = this.previous; + this.previous = this.model.styleForCellChanged(this.cell, this.previous) +}; + +function mxGeometryChange(a, b, c) { + this.model = a; + this.cell = b; + this.previous = this.geometry = c +} +mxGeometryChange.prototype.execute = function() { + this.geometry = this.previous; + this.previous = this.model.geometryForCellChanged(this.cell, this.previous) +}; + +function mxCollapseChange(a, b, c) { + this.model = a; + this.cell = b; + this.previous = this.collapsed = c +} +mxCollapseChange.prototype.execute = function() { + this.collapsed = this.previous; + this.previous = this.model.collapsedStateForCellChanged(this.cell, this.previous) +}; + +function mxVisibleChange(a, b, c) { + this.model = a; + this.cell = b; + this.previous = this.visible = c +} +mxVisibleChange.prototype.execute = function() { + this.visible = this.previous; + this.previous = this.model.visibleStateForCellChanged(this.cell, this.previous) +}; + +function mxCellAttributeChange(a, b, c) { + this.cell = a; + this.attribute = b; + this.previous = this.value = c +} +mxCellAttributeChange.prototype.execute = function() { + var a = this.cell.getAttribute(this.attribute); + null == this.previous ? this.cell.value.removeAttribute(this.attribute) : this.cell.setAttribute(this.attribute, this.previous); + this.previous = a +}; + +function mxCell(a, b, c) { + this.value = a; + this.setGeometry(b); + this.setStyle(c); + if (null != this.onInit) this.onInit() +} +mxCell.prototype.id = null; +mxCell.prototype.value = null; +mxCell.prototype.geometry = null; +mxCell.prototype.style = null; +mxCell.prototype.vertex = !1; +mxCell.prototype.edge = !1; +mxCell.prototype.connectable = !0; +mxCell.prototype.visible = !0; +mxCell.prototype.collapsed = !1; +mxCell.prototype.parent = null; +mxCell.prototype.source = null; +mxCell.prototype.target = null; +mxCell.prototype.children = null; +mxCell.prototype.edges = null; +mxCell.prototype.mxTransient = "id value parent source target children edges".split(" "); +mxCell.prototype.getId = function() { + return this.id +}; +mxCell.prototype.setId = function(a) { + this.id = a +}; +mxCell.prototype.getValue = function() { + return this.value +}; +mxCell.prototype.setValue = function(a) { + this.value = a +}; +mxCell.prototype.valueChanged = function(a) { + var b = this.getValue(); + this.setValue(a); + return b +}; +mxCell.prototype.getGeometry = function() { + return this.geometry +}; +mxCell.prototype.setGeometry = function(a) { + this.geometry = a +}; +mxCell.prototype.getStyle = function() { + return this.style +}; +mxCell.prototype.setStyle = function(a) { + this.style = a +}; +mxCell.prototype.isVertex = function() { + return this.vertex +}; +mxCell.prototype.setVertex = function(a) { + this.vertex = a +}; +mxCell.prototype.isEdge = function() { + return this.edge +}; +mxCell.prototype.setEdge = function(a) { + this.edge = a +}; +mxCell.prototype.isConnectable = function() { + return this.connectable +}; +mxCell.prototype.setConnectable = function(a) { + this.connectable = a +}; +mxCell.prototype.isVisible = function() { + return this.visible +}; +mxCell.prototype.setVisible = function(a) { + this.visible = a +}; +mxCell.prototype.isCollapsed = function() { + return this.collapsed +}; +mxCell.prototype.setCollapsed = function(a) { + this.collapsed = a +}; +mxCell.prototype.getParent = function() { + return this.parent +}; +mxCell.prototype.setParent = function(a) { + this.parent = a +}; +mxCell.prototype.getTerminal = function(a) { + return a ? this.source : this.target +}; +mxCell.prototype.setTerminal = function(a, b) { + b ? this.source = a : this.target = a; + return a +}; +mxCell.prototype.getChildCount = function() { + return null == this.children ? 0 : this.children.length +}; +mxCell.prototype.getIndex = function(a) { + return mxUtils.indexOf(this.children, a) +}; +mxCell.prototype.getChildAt = function(a) { + return null == this.children ? null : this.children[a] +}; +mxCell.prototype.insert = function(a, b) { + null != a && (null == b && (b = this.getChildCount(), a.getParent() == this && b--), a.removeFromParent(), a.setParent(this), null == this.children ? (this.children = [], this.children.push(a)) : + this.children.splice(b, 0, a)); + return a +}; +mxCell.prototype.remove = function(a) { + var b = null; + null != this.children && 0 <= a && (b = this.getChildAt(a), null != b && (this.children.splice(a, 1), b.setParent(null))); + return b +}; +mxCell.prototype.removeFromParent = function() { + if (null != this.parent) { + var a = this.parent.getIndex(this); + this.parent.remove(a) + } +}; +mxCell.prototype.getEdgeCount = function() { + return null == this.edges ? 0 : this.edges.length +}; +mxCell.prototype.getEdgeIndex = function(a) { + return mxUtils.indexOf(this.edges, a) +}; +mxCell.prototype.getEdgeAt = function(a) { + return null == this.edges ? null : this.edges[a] +}; +mxCell.prototype.insertEdge = function(a, b) { + if (null != a && (a.removeFromTerminal(b), a.setTerminal(this, b), null == this.edges || a.getTerminal(!b) != this || 0 > mxUtils.indexOf(this.edges, a))) null == this.edges && (this.edges = []), + this.edges.push(a); + return a +}; +mxCell.prototype.removeEdge = function(a, b) { + if (null != a) { + if (a.getTerminal(!b) != this && null != this.edges) { + var c = this.getEdgeIndex(a); + 0 <= c && this.edges.splice(c, 1) + } + a.setTerminal(null, b) + } + return a +}; +mxCell.prototype.removeFromTerminal = function(a) { + var b = this.getTerminal(a); + null != b && b.removeEdge(this, a) +}; +mxCell.prototype.getAttribute = function(a, b) { + var c = this.getValue(); + return (null != c && c.nodeType == mxConstants.NODETYPE_ELEMENT ? c.getAttribute(a) : null) || b +}; +mxCell.prototype.setAttribute = function(a, b) { + var c = this.getValue(); + null != c && c.nodeType == mxConstants.NODETYPE_ELEMENT && c.setAttribute(a, b) +}; +mxCell.prototype.clone = function() { + var a = mxUtils.clone(this, this.mxTransient); + a.setValue(this.cloneValue()); + return a +}; +mxCell.prototype.cloneValue = function() { + var a = this.getValue(); + null != a && ("function" == typeof a.clone ? a = a.clone() : isNaN(a.nodeType) || (a = a.cloneNode(!0))); + return a +}; + +function mxGeometry(a, b, c, d) { + mxRectangle.call(this, a, b, c, d) +} +mxGeometry.prototype = new mxRectangle; +mxGeometry.prototype.constructor = mxGeometry; +mxGeometry.prototype.TRANSLATE_CONTROL_POINTS = !0; +mxGeometry.prototype.alternateBounds = null; +mxGeometry.prototype.sourcePoint = null; +mxGeometry.prototype.targetPoint = null; +mxGeometry.prototype.points = null; +mxGeometry.prototype.offset = null; +mxGeometry.prototype.relative = !1; +mxGeometry.prototype.swap = function() { + if (null != this.alternateBounds) { + var a = new mxRectangle(this.x, this.y, this.width, this.height); + this.x = this.alternateBounds.x; + this.y = this.alternateBounds.y; + this.width = this.alternateBounds.width; + this.height = this.alternateBounds.height; + this.alternateBounds = a + } +}; +mxGeometry.prototype.getTerminalPoint = function(a) { + return a ? this.sourcePoint : this.targetPoint +}; +mxGeometry.prototype.setTerminalPoint = function(a, b) { + b ? this.sourcePoint = a : this.targetPoint = a; + return a +}; +mxGeometry.prototype.translate = function(a, b) { + this.clone(); + this.relative || (this.x += a, this.y += b); + null != this.sourcePoint && (this.sourcePoint.x += a, this.sourcePoint.y += b); + null != this.targetPoint && (this.targetPoint.x += a, this.targetPoint.y += b); + if (this.TRANSLATE_CONTROL_POINTS && null != this.points) + for (var c = this.points.length, d = 0; d < c; d++) { + var e = this.points[d]; + null != e && (e.x += a, e.y += b) + } +}; +var mxCellPath = { + PATH_SEPARATOR: ".", + create: function(a) { + var b = ""; + if (null != a) + for (var c = a.getParent(); null != c;) b = c.getIndex(a) + mxCellPath.PATH_SEPARATOR + b, a = c, c = a.getParent(); + a = b.length; + 1 < a && (b = b.substring(0, a - 1)); + return b + }, + getParentPath: function(a) { + if (null != a) { + var b = a.lastIndexOf(mxCellPath.PATH_SEPARATOR); + if (0 <= b) return a.substring(0, b); + if (0 < a.length) return "" + } + return null + }, + resolve: function(a, b) { + var c = a; + if (null != b) + for (var d = b.split(mxCellPath.PATH_SEPARATOR), e = 0; e < d.length; e++) c = c.getChildAt(parseInt(d[e])); + return c + }, + compare: function(a, b) { + for (var c = Math.min(a.length, b.length), d = 0, e = 0; e < c; e++) + if (a[e] != b[e]) { + 0 == a[e].length || 0 == b[e].length ? d = a[e] == b[e] ? 0 : a[e] > b[e] ? 1 : -1 : (c = parseInt(a[e]), e = parseInt(b[e]), d = c == e ? 0 : c > e ? 1 : -1); + break + } + 0 == d && (c = a.length, e = b.length, c != e && (d = c > e ? 1 : -1)); + return d + } + }, + mxPerimeter = { + RectanglePerimeter: function(a, b, c, d) { + b = a.getCenterX(); + var e = a.getCenterY(), + f = Math.atan2(c.y - e, c.x - b), + g = new mxPoint(0, 0), + h = Math.PI, + k = Math.PI / 2 - f, + l = Math.atan2(a.height, a.width); + f < -h + l || f > h - l ? (g.x = a.x, g.y = e - a.width * + Math.tan(f) / 2) : f < -l ? (g.y = a.y, g.x = b - a.height * Math.tan(k) / 2) : f < l ? (g.x = a.x + a.width, g.y = e + a.width * Math.tan(f) / 2) : (g.y = a.y + a.height, g.x = b + a.height * + Math.tan(k) / 2); + d && (c.x >= a.x && c.x <= a.x + a.width ? g.x = c.x : c.y >= a.y && c.y <= a.y + a.height && (g.y = c.y), c.x < a.x ? g.x = a.x : c.x > a.x + a.width && (g.x = a.x + a.width), c.y < a.y ? g.y = + a.y : c.y > a.y + a.height && (g.y = a.y + a.height)); + return g + }, + EllipsePerimeter: function(a, b, c, d) { + var e = a.x, + f = a.y, + g = a.width / 2, + h = a.height / 2, + k = e + g, + l = f + h; + b = c.x; + c = c.y; + var m = parseInt(b - k), + n = parseInt(c - l); + if (0 == m && 0 != n) return new mxPoint(k, + l + h * n / Math.abs(n)); + if (0 == m && 0 == n) return new mxPoint(b, c); + if (d) { + if (c >= f && c <= f + a.height) return a = c - l, a = Math.sqrt(g * g * (1 - a * a / (h * h))) || 0, b <= e && (a = -a), new mxPoint(k + a, c); + if (b >= e && b <= e + a.width) return a = b - k, a = Math.sqrt(h * h * (1 - a * a / (g * g))) || 0, c <= f && (a = -a), new mxPoint(b, l + a) + } + e = n / m; + l -= e * k; + f = g * g * e * e + h * h; + a = -2 * k * f; + h = Math.sqrt(a * a - 4 * f * (g * g * e * e * k * k + h * h * k * k - g * g * h * h)); + g = (-a + h) / (2 * f); + h = (-a - h) / (2 * f); + k = e * g + l; + l = e * h + l; + e = Math.sqrt(Math.pow(g - b, 2) + Math.pow(k - c, 2)); + b = Math.sqrt(Math.pow(h - b, 2) + Math.pow(l - c, 2)); + f = c = 0; + e < b ? (c = + g, f = k) : (c = h, f = l); + return new mxPoint(c, f) + }, + RhombusPerimeter: function(a, b, c, d) { + b = a.x; + var e = a.y, + f = a.width; + a = a.height; + var g = b + f / 2, + h = e + a / 2, + k = c.x; + c = c.y; + if (g == k) return h > c ? new mxPoint(g, e) : new mxPoint(g, e + a); + if (h == c) return g > k ? new mxPoint(b, h) : new mxPoint(b + f, h); + var l = g, + m = h; + d && (k >= b && k <= b + f ? l = k : c >= e && c <= e + a && (m = c)); + return k < g ? c < h ? mxUtils.intersection(k, c, l, m, g, e, b, h) : mxUtils.intersection(k, c, l, m, g, e + a, b, h) : c < h ? mxUtils.intersection(k, c, l, m, g, e, b + f, h) : mxUtils.intersection( + k, c, l, m, g, e + a, b + f, h) + }, + TrianglePerimeter: function(a, + b, c, d) { + b = null != b ? b.style[mxConstants.STYLE_DIRECTION] : null; + var e = b == mxConstants.DIRECTION_NORTH || b == mxConstants.DIRECTION_SOUTH, + f = a.x, + g = a.y, + h = a.width; + a = a.height; + var k = f + h / 2, + l = g + a / 2, + m = new mxPoint(f, g), + n = new mxPoint(f + h, l), + p = new mxPoint(f, g + a); + b == mxConstants.DIRECTION_NORTH ? (m = p, n = new mxPoint(k, g), p = new mxPoint(f + h, g + a)) : b == mxConstants.DIRECTION_SOUTH ? (n = new mxPoint(k, g + a), p = new mxPoint(f + h, g)) : + b == mxConstants.DIRECTION_WEST && (m = new mxPoint(f + h, g), n = new mxPoint(f, l), p = new mxPoint(f + h, g + a)); + var q = c.x - + k, + s = c.y - l, + q = e ? Math.atan2(q, s) : Math.atan2(s, q), + r = e ? Math.atan2(h, a) : Math.atan2(a, h), + s = !1, + s = b == mxConstants.DIRECTION_NORTH || b == mxConstants.DIRECTION_WEST ? q > -r && q < r : q < -Math.PI + r || q > Math.PI - r, + r = null; + s ? r = d && (e && c.x >= m.x && c.x <= p.x || !e && c.y >= m.y && c.y <= p.y) ? e ? new mxPoint(c.x, m.y) : new mxPoint(m.x, c.y) : b == mxConstants.DIRECTION_NORTH ? new mxPoint(f + h / 2 + + a * Math.tan(q) / 2, g + a) : b == mxConstants.DIRECTION_SOUTH ? new mxPoint(f + h / 2 - a * Math.tan(q) / 2, g) : b == mxConstants.DIRECTION_WEST ? new mxPoint(f + h, g + a / 2 + h * + Math.tan(q) / 2) : new mxPoint(f, + g + a / 2 - h * Math.tan(q) / 2) : (d && (d = new mxPoint(k, l), c.y >= g && c.y <= g + a ? (d.x = e ? k : b == mxConstants.DIRECTION_WEST ? f + h : f, d.y = c.y) : c.x >= f && c.x <= f + + h && (d.x = c.x, d.y = !e ? l : b == mxConstants.DIRECTION_NORTH ? g + a : g), k = d.x, l = d.y), r = e && c.x <= f + h / 2 || !e && c.y <= g + a / 2 ? mxUtils.intersection(c.x, c.y, k, + l, m.x, m.y, n.x, n.y) : mxUtils.intersection(c.x, c.y, k, l, n.x, n.y, p.x, p.y)); + null == r && (r = new mxPoint(k, l)); + return r + } + }; + +function mxPrintPreview(a, b, c, d, e, f, g, h, k) { + this.graph = a; + this.scale = null != b ? b : 1 / a.pageScale; + this.border = null != d ? d : 0; + this.pageFormat = null != c ? c : a.pageFormat; + this.title = null != h ? h : "Printer-friendly version"; + this.x0 = null != e ? e : 0; + this.y0 = null != f ? f : 0; + this.borderColor = g; + this.pageSelector = null != k ? k : !0 +} +mxPrintPreview.prototype.graph = null; +mxPrintPreview.prototype.pageFormat = null; +mxPrintPreview.prototype.scale = null; +mxPrintPreview.prototype.border = 0; +mxPrintPreview.prototype.x0 = 0; +mxPrintPreview.prototype.y0 = 0; +mxPrintPreview.prototype.autoOrigin = !0; +mxPrintPreview.prototype.printOverlays = !1; +mxPrintPreview.prototype.borderColor = null; +mxPrintPreview.prototype.title = null; +mxPrintPreview.prototype.pageSelector = null; +mxPrintPreview.prototype.wnd = null; +mxPrintPreview.prototype.pageCount = 0; +mxPrintPreview.prototype.getWindow = function() { + return this.wnd +}; +mxPrintPreview.prototype.getDoctype = function() { + var a = ""; + 8 == document.documentMode && (a = '\x3cmeta http-equiv\x3d"X-UA-Compatible" content\x3d"IE\x3d8"\x3e'); + return a +}; +mxPrintPreview.prototype.open = function(a) { + var b = this.graph.cellRenderer.initializeOverlay, + c = null; + try { + this.printOverlays && (this.graph.cellRenderer.initializeOverlay = function(a, b) { + b.init(a.view.getDrawPane()) + }); + if (null == this.wnd) { + this.wnd = window.open(); + var d = this.wnd.document, + e = this.getDoctype(); + null != e && 0 < e.length && d.writeln(e); + d.writeln("\x3chtml\x3e"); + d.writeln("\x3chead\x3e"); + this.writeHead(d, a); + d.writeln("\x3c/head\x3e"); + d.writeln('\x3cbody class\x3d"mxPage"\x3e'); + mxClient.link("stylesheet", mxClient.basePath + + "/css/common.css", d); + mxClient.IS_VML && (d.namespaces.add("v", "urn:schemas-microsoft-com:vml"), d.namespaces.add("o", "urn:schemas-microsoft-com:office:office"), d.createStyleSheet().cssText = + "v\\:*{behavior:url(#default#VML)}o\\:*{behavior:url(#default#VML)}", mxClient.link("stylesheet", mxClient.basePath + "/css/explorer.css", d)); + var f = this.graph.getGraphBounds().clone(), + g = this.graph.getView().getScale(), + h = g / this.scale, + k = this.graph.getView().getTranslate(); + this.autoOrigin || (this.x0 = -k.x * this.scale, this.y0 = -k.y * this.scale, f.width += f.x, f.height += f.y, f.x = 0, this.border = f.y = 0); + f.width /= h; + f.height /= h; + var l = this.pageFormat.width - 2 * this.border, + m = this.pageFormat.height - 2 * this.border, + n = Math.max(1, Math.ceil((f.width + this.x0) / l)), + p = Math.max(1, Math.ceil((f.height + this.y0) / m)); + this.pageCount = n * p; + var q = mxUtils.bind(this, function() { + if (this.pageSelector && (1 < p || 1 < n)) { + var a = this.createPageSelector(p, n); + d.body.appendChild(a); + if (mxClient.IS_IE) { + a.style.position = "absolute"; + var b = function() { + a.style.top = d.body.scrollTop + + 10 + "px" + }; + mxEvent.addListener(this.wnd, "scroll", function(a) { + b() + }); + mxEvent.addListener(this.wnd, "resize", function(a) { + b() + }) + } + } + }); + a = function(a, b) { + null != this.borderColor && (a.style.borderColor = this.borderColor, a.style.borderStyle = "solid", a.style.borderWidth = "1px"); + a.style.background = "white"; + b && (a.style.pageBreakAfter = "always"); + mxClient.IS_IE ? (d.writeln(a.outerHTML), a.parentNode.removeChild(a)) : (a.parentNode.removeChild(a), d.body.appendChild(a)); + if (b) { + var c = d.createElement("hr"); + c.className = "mxPageBreak"; + d.body.appendChild(c) + } + }; + var s = this.getCoverPages(this.pageFormat.width, this.pageFormat.height); + if (null != s) + for (var r = 0; r < s.length; r++) a(s[r], !0); + for (var t = this.getAppendices(this.pageFormat.width, this.pageFormat.height), r = 0; r < p; r++) + for (var v = r * m / this.scale - this.y0 / this.scale + (f.y - k.y * g) / g, s = 0; s < n; s++) { + if (null == this.wnd) return null; + var w = s * l / this.scale - this.x0 / this.scale + (f.x - k.x * g) / g, + u = r * n + s + 1, + c = this.renderPage(this.pageFormat.width, this.pageFormat.height, mxUtils.bind(this, function(a) { + this.addGraphFragment(-w, -v, this.scale, u, a) + })); + c.setAttribute("id", "mxPage-" + u); + a(c, null != t || r < p - 1 || s < n - 1) + } + if (null != t) + for (r = 0; r < t.length; r++) a(t[r], r < t.length); + d.writeln("\x3c/body\x3e"); + d.writeln("\x3c/html\x3e"); + d.close(); + q(); + mxEvent.release(d.body) + } + this.wnd.focus() + } catch (y) { + null != c && null != c.parentNode && c.parentNode.removeChild(c) + } finally { + this.graph.cellRenderer.initializeOverlay = b + } + return this.wnd +}; +mxPrintPreview.prototype.writeHead = function(a, b) { + null != this.title && a.writeln("\x3ctitle\x3e" + this.title + "\x3c/title\x3e"); + a.writeln('\x3cstyle type\x3d"text/css"\x3e'); + a.writeln("@media print {"); + a.writeln(" table.mxPageSelector { display: none; }"); + a.writeln(" hr.mxPageBreak { display: none; }"); + a.writeln("}"); + a.writeln("@media screen {"); + a.writeln(" table.mxPageSelector { position: fixed; right: 10px; top: 10px;font-family: Arial; font-size:10pt; border: solid 1px darkgray;background: white; border-collapse:collapse; }"); + a.writeln(" table.mxPageSelector td { border: solid 1px gray; padding:4px; }"); + a.writeln(" body.mxPage { background: gray; }"); + a.writeln("}"); + null != b && a.writeln(b); + a.writeln("\x3c/style\x3e") +}; +mxPrintPreview.prototype.createPageSelector = function(a, b) { + var c = this.wnd.document, + d = c.createElement("table"); + d.className = "mxPageSelector"; + d.setAttribute("border", "0"); + for (var e = c.createElement("tbody"), f = 0; f < a; f++) { + for (var g = c.createElement("tr"), h = 0; h < b; h++) { + var k = f * b + h + 1, + l = c.createElement("td"); + if (!mxClient.IS_NS || mxClient.IS_SF || mxClient.IS_GC) { + var m = c.createElement("a"); + m.setAttribute("href", "#mxPage-" + k); + mxUtils.write(m, k, c); + l.appendChild(m) + } else mxUtils.write(l, k, c); + g.appendChild(l) + } + e.appendChild(g) + } + d.appendChild(e); + return d +}; +mxPrintPreview.prototype.renderPage = function(a, b, c) { + var d = document.createElement("div"); + try { + d.style.width = a + "px"; + d.style.height = b + "px"; + d.style.overflow = "hidden"; + d.style.pageBreakInside = "avoid"; + d.style.position = "relative"; + var e = document.createElement("div"); + e.style.top = this.border + "px"; + e.style.left = this.border + "px"; + e.style.width = a - 2 * this.border + "px"; + e.style.height = b - 2 * this.border + "px"; + e.style.overflow = "hidden"; + this.graph.dialect == mxConstants.DIALECT_VML && (e.style.position = "absolute"); + d.appendChild(e); + document.body.appendChild(d); + c(e) + } catch (f) { + throw d.parentNode.removeChild(d), f; + } + return d +}; +mxPrintPreview.prototype.addGraphFragment = function(a, b, c, d, e) { + d = this.graph.getView(); + var f = this.graph.container; + this.graph.container = e; + var g = d.getCanvas(), + h = d.getBackgroundPane(), + k = d.getDrawPane(), + l = d.getOverlayPane(); + this.graph.dialect == mxConstants.DIALECT_SVG ? d.createSvg() : this.graph.dialect == mxConstants.DIALECT_VML ? d.createVml() : d.createHtml(); + var m = d.isEventsEnabled(); + d.setEventsEnabled(!1); + var n = this.graph.isEnabled(); + this.graph.setEnabled(!1); + var p = d.getTranslate(); + d.translate = new mxPoint(a, + b); + a = null; + try { + var q = [this.graph.getModel().getRoot()]; + a = new mxTemporaryCellStates(d, c, q) + } finally { + if (mxClient.IS_IE) d.overlayPane.innerHTML = ""; + else + for (c = e.firstChild; null != c;) q = c.nextSibling, b = c.nodeName.toLowerCase(), "svg" == b ? (c.setAttribute("width", parseInt(e.style.width)), c.setAttribute("height", parseInt(e.style.height))) : + "default" != c.style.cursor && "table" != b && c.parentNode.removeChild(c), c = q; + d.overlayPane.parentNode.removeChild(d.overlayPane); + this.graph.setEnabled(n); + this.graph.container = f; + d.canvas = + g; + d.backgroundPane = h; + d.drawPane = k; + d.overlayPane = l; + d.translate = p; + a.destroy(); + d.setEventsEnabled(m) + } +}; +mxPrintPreview.prototype.getCoverPages = function() { + return null +}; +mxPrintPreview.prototype.getAppendices = function() { + return null +}; +mxPrintPreview.prototype.print = function() { + var a = this.open(); + null != a && a.print() +}; +mxPrintPreview.prototype.close = function() { + null != this.wnd && (this.wnd.close(), this.wnd = null) +}; + +function mxStylesheet() { + this.styles = {}; + this.putDefaultVertexStyle(this.createDefaultVertexStyle()); + this.putDefaultEdgeStyle(this.createDefaultEdgeStyle()) +} +mxStylesheet.prototype.createDefaultVertexStyle = function() { + var a = {}; + a[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE; + a[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter; + a[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_MIDDLE; + a[mxConstants.STYLE_ALIGN] = mxConstants.ALIGN_CENTER; + a[mxConstants.STYLE_FILLCOLOR] = "#C3D9FF"; + a[mxConstants.STYLE_STROKECOLOR] = "#6482B9"; + a[mxConstants.STYLE_FONTCOLOR] = "#774400"; + return a +}; +mxStylesheet.prototype.createDefaultEdgeStyle = function() { + var a = {}; + a[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_CONNECTOR; + a[mxConstants.STYLE_ENDARROW] = mxConstants.ARROW_CLASSIC; + a[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_MIDDLE; + a[mxConstants.STYLE_ALIGN] = mxConstants.ALIGN_CENTER; + a[mxConstants.STYLE_STROKECOLOR] = "#6482B9"; + a[mxConstants.STYLE_FONTCOLOR] = "#446299"; + return a +}; +mxStylesheet.prototype.putDefaultVertexStyle = function(a) { + this.putCellStyle("defaultVertex", a) +}; +mxStylesheet.prototype.putDefaultEdgeStyle = function(a) { + this.putCellStyle("defaultEdge", a) +}; +mxStylesheet.prototype.getDefaultVertexStyle = function() { + return this.styles.defaultVertex +}; +mxStylesheet.prototype.getDefaultEdgeStyle = function() { + return this.styles.defaultEdge +}; +mxStylesheet.prototype.putCellStyle = function(a, b) { + this.styles[a] = b +}; +mxStylesheet.prototype.getCellStyle = function(a, b) { + var c = b; + if (null != a && 0 < a.length) + for (var d = a.split(";"), c = null != c && ";" != a.charAt(0) ? mxUtils.clone(c) : {}, e = 0; e < d.length; e++) { + var f = d[e], + g = f.indexOf("\x3d"); + if (0 <= g) { + var h = f.substring(0, g), + f = f.substring(g + 1); + f == mxConstants.NONE ? delete c[h] : mxUtils.isNumeric(f) ? c[h] = parseFloat(f) : c[h] = f + } else if (f = this.styles[f], null != f) + for (h in f) c[h] = f[h] + } + return c +}; + +function mxCellState(a, b, c) { + this.view = a; + this.cell = b; + this.style = c; + this.origin = new mxPoint; + this.absoluteOffset = new mxPoint +} +mxCellState.prototype = new mxRectangle; +mxCellState.prototype.constructor = mxCellState; +mxCellState.prototype.view = null; +mxCellState.prototype.cell = null; +mxCellState.prototype.style = null; +mxCellState.prototype.invalid = !0; +mxCellState.prototype.invalidOrder = !1; +mxCellState.prototype.orderChanged = !1; +mxCellState.prototype.origin = null; +mxCellState.prototype.absolutePoints = null; +mxCellState.prototype.absoluteOffset = null; +mxCellState.prototype.visibleSourceState = null; +mxCellState.prototype.visibleTargetState = null; +mxCellState.prototype.terminalDistance = 0; +mxCellState.prototype.length = 0; +mxCellState.prototype.segments = null; +mxCellState.prototype.shape = null; +mxCellState.prototype.text = null; +mxCellState.prototype.getPerimeterBounds = function(a, b) { + a = a || 0; + b = null != b ? b : new mxRectangle(this.x, this.y, this.width, this.height); + if (null != this.shape && null != this.shape.stencil) { + var c = this.shape.stencil.computeAspect(this.style, b.x, b.y, b.width, b.height); + b.x = c.x; + b.y = c.y; + b.width = this.shape.stencil.w0 * c.width; + b.height = this.shape.stencil.h0 * c.height + } + 0 != a && b.grow(a); + return b +}; +mxCellState.prototype.setAbsoluteTerminalPoint = function(a, b) { + b ? (null == this.absolutePoints && (this.absolutePoints = []), 0 == this.absolutePoints.length ? this.absolutePoints.push(a) : this.absolutePoints[0] = a) : null == this.absolutePoints ? (this.absolutePoints = [], + this.absolutePoints.push(null), this.absolutePoints.push(a)) : 1 == this.absolutePoints.length ? this.absolutePoints.push(a) : this.absolutePoints[this.absolutePoints.length - 1] = a +}; +mxCellState.prototype.setCursor = function(a) { + null != this.shape && this.shape.setCursor(a); + null != this.text && this.text.setCursor(a) +}; +mxCellState.prototype.getVisibleTerminal = function(a) { + a = this.getVisibleTerminalState(a); + return null != a ? a.cell : null +}; +mxCellState.prototype.getVisibleTerminalState = function(a) { + return a ? this.visibleSourceState : this.visibleTargetState +}; +mxCellState.prototype.setVisibleTerminalState = function(a, b) { + b ? this.visibleSourceState = a : this.visibleTargetState = a +}; +mxCellState.prototype.destroy = function() { + this.view.graph.cellRenderer.destroy(this) +}; +mxCellState.prototype.clone = function() { + var a = new mxCellState(this.view, this.cell, this.style); + if (null != this.absolutePoints) { + a.absolutePoints = []; + for (var b = 0; b < this.absolutePoints.length; b++) a.absolutePoints[b] = this.absolutePoints[b].clone() + } + null != this.origin && (a.origin = this.origin.clone()); + null != this.absoluteOffset && (a.absoluteOffset = this.absoluteOffset.clone()); + null != this.boundingBox && (a.boundingBox = this.boundingBox.clone()); + a.terminalDistance = this.terminalDistance; + a.segments = this.segments; + a.length = + this.length; + a.x = this.x; + a.y = this.y; + a.width = this.width; + a.height = this.height; + return a +}; + +function mxGraphSelectionModel(a) { + this.graph = a; + this.cells = [] +} +mxGraphSelectionModel.prototype = new mxEventSource; +mxGraphSelectionModel.prototype.constructor = mxGraphSelectionModel; +mxGraphSelectionModel.prototype.doneResource = "none" != mxClient.language ? "done" : ""; +mxGraphSelectionModel.prototype.updatingSelectionResource = "none" != mxClient.language ? "updatingSelection" : ""; +mxGraphSelectionModel.prototype.graph = null; +mxGraphSelectionModel.prototype.singleSelection = !1; +mxGraphSelectionModel.prototype.isSingleSelection = function() { + return this.singleSelection +}; +mxGraphSelectionModel.prototype.setSingleSelection = function(a) { + this.singleSelection = a +}; +mxGraphSelectionModel.prototype.isSelected = function(a) { + return null != a ? 0 <= mxUtils.indexOf(this.cells, a) : !1 +}; +mxGraphSelectionModel.prototype.isEmpty = function() { + return 0 == this.cells.length +}; +mxGraphSelectionModel.prototype.clear = function() { + this.changeSelection(null, this.cells) +}; +mxGraphSelectionModel.prototype.setCell = function(a) { + null != a && this.setCells([a]) +}; +mxGraphSelectionModel.prototype.setCells = function(a) { + if (null != a) { + this.singleSelection && (a = [this.getFirstSelectableCell(a)]); + for (var b = [], c = 0; c < a.length; c++) this.graph.isCellSelectable(a[c]) && b.push(a[c]); + this.changeSelection(b, this.cells) + } +}; +mxGraphSelectionModel.prototype.getFirstSelectableCell = function(a) { + if (null != a) + for (var b = 0; b < a.length; b++) + if (this.graph.isCellSelectable(a[b])) return a[b]; + return null +}; +mxGraphSelectionModel.prototype.addCell = function(a) { + null != a && this.addCells([a]) +}; +mxGraphSelectionModel.prototype.addCells = function(a) { + if (null != a) { + var b = null; + this.singleSelection && (b = this.cells, a = [this.getFirstSelectableCell(a)]); + for (var c = [], d = 0; d < a.length; d++) !this.isSelected(a[d]) && this.graph.isCellSelectable(a[d]) && c.push(a[d]); + this.changeSelection(c, b) + } +}; +mxGraphSelectionModel.prototype.removeCell = function(a) { + null != a && this.removeCells([a]) +}; +mxGraphSelectionModel.prototype.removeCells = function(a) { + if (null != a) { + for (var b = [], c = 0; c < a.length; c++) this.isSelected(a[c]) && b.push(a[c]); + this.changeSelection(null, b) + } +}; +mxGraphSelectionModel.prototype.changeSelection = function(a, b) { + if (null != a && 0 < a.length && null != a[0] || null != b && 0 < b.length && null != b[0]) { + var c = new mxSelectionChange(this, a, b); + c.execute(); + var d = new mxUndoableEdit(this, !1); + d.add(c); + this.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", d)) + } +}; +mxGraphSelectionModel.prototype.cellAdded = function(a) { + null != a && !this.isSelected(a) && this.cells.push(a) +}; +mxGraphSelectionModel.prototype.cellRemoved = function(a) { + null != a && (a = mxUtils.indexOf(this.cells, a), 0 <= a && this.cells.splice(a, 1)) +}; + +function mxSelectionChange(a, b, c) { + this.selectionModel = a; + this.added = null != b ? b.slice() : null; + this.removed = null != c ? c.slice() : null +} +mxSelectionChange.prototype.execute = function() { + var a = mxLog.enter("mxSelectionChange.execute"); + window.status = mxResources.get(this.selectionModel.updatingSelectionResource) || this.selectionModel.updatingSelectionResource; + if (null != this.removed) + for (var b = 0; b < this.removed.length; b++) this.selectionModel.cellRemoved(this.removed[b]); + if (null != this.added) + for (b = 0; b < this.added.length; b++) this.selectionModel.cellAdded(this.added[b]); + b = this.added; + this.added = this.removed; + this.removed = b; + window.status = mxResources.get(this.selectionModel.doneResource) || + this.selectionModel.doneResource; + mxLog.leave("mxSelectionChange.execute", a); + this.selectionModel.fireEvent(new mxEventObject(mxEvent.CHANGE, "added", this.added, "removed", this.removed)) +}; + +function mxCellEditor(a) { + this.graph = a +} +mxCellEditor.prototype.graph = null; +mxCellEditor.prototype.textarea = null; +mxCellEditor.prototype.editingCell = null; +mxCellEditor.prototype.trigger = null; +mxCellEditor.prototype.modified = !1; +mxCellEditor.prototype.autoSize = !0; +mxCellEditor.prototype.emptyLabelText = ""; +mxCellEditor.prototype.textNode = ""; +mxCellEditor.prototype.init = function() { + this.textarea = document.createElement("textarea"); + this.textarea.className = "mxCellEditor"; + this.textarea.style.position = "absolute"; + this.textarea.style.overflow = "visible"; + this.textarea.setAttribute("cols", "20"); + this.textarea.setAttribute("rows", "4"); + mxClient.IS_NS && (this.textarea.style.resize = "none"); + mxEvent.addListener(this.textarea, "blur", mxUtils.bind(this, function(a) { + this.focusLost() + })); + mxEvent.addListener(this.textarea, "keydown", mxUtils.bind(this, function(a) { + mxEvent.isConsumed(a) || + (113 == a.keyCode || this.graph.isEnterStopsCellEditing() && 13 == a.keyCode && !mxEvent.isControlDown(a) && !mxEvent.isShiftDown(a) ? (this.graph.stopEditing(!1), mxEvent.consume(a)) : + 27 == a.keyCode ? (this.graph.stopEditing(!0), mxEvent.consume(a)) : (this.clearOnChange && (this.clearOnChange = !1, this.textarea.value = ""), this.setModified(!0))) + })); + mxEvent.addListener(this.textarea, "keypress", mxUtils.bind(this, function(a) { + this.autoSize && !mxEvent.isConsumed(a) && setTimeout(mxUtils.bind(this, function() { + this.resize() + }), 0) + })) +}; +mxCellEditor.prototype.resize = function() { + if (null != this.textDiv) { + var a = this.graph.getView().getState(this.editingCell), + b = this.graph.isLabelClipped(a.cell), + c = this.graph.isWrapping(a.cell); + if (this.graph.getModel().isEdge(a.cell)) this.bounds.x = a.absoluteOffset.x, this.bounds.y = a.absoluteOffset.y, this.bounds.width = 0, this.bounds.height = 0; + else if (null != this.bounds) { + this.bounds.x = a.x; + this.bounds.y = a.y; + this.bounds.width = a.width; + this.bounds.height = a.height; + var d = mxUtils.getValue(a.style, mxConstants.STYLE_LABEL_POSITION, + mxConstants.ALIGN_CENTER); + d == mxConstants.ALIGN_LEFT ? this.bounds.x -= a.width : d == mxConstants.ALIGN_RIGHT && (this.bounds.x += a.width); + d = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE); + d == mxConstants.ALIGN_TOP ? this.bounds.y -= a.height : d == mxConstants.ALIGN_BOTTOM && (this.bounds.y += a.height) + } + d = this.textarea.value; + if ("\n" == d.charAt(d.length - 1) || "" == d) d += "\x26nbsp;"; + d = mxUtils.htmlEntities(d, !1); + c ? (this.textDiv.style.whiteSpace = "normal", this.textDiv.style.width = this.bounds.width + + "px") : d = d.replace(/ /g, "\x26nbsp;"); + d = d.replace(/\n/g, "\x3cbr/\x3e"); + this.textDiv.innerHTML = d; + var d = this.textDiv.offsetWidth + 30, + e = this.textDiv.offsetHeight + 16, + d = Math.max(d, 40), + e = Math.max(e, 20); + b && (d = Math.min(this.bounds.width - 4, d), e = Math.min(this.bounds.height, e)); + var f = null != a.text ? a.text.margin : null; + null == f && (f = mxUtils.getValue(a.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER), a = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE), f = + mxUtils.getAlignmentAsPoint(f, + a)); + if (null != f) { + if (b || !c) this.textarea.style.left = Math.max(0, Math.round(this.bounds.x - f.x * this.bounds.width + f.x * d) - 3) + "px"; + this.textarea.style.top = Math.max(0, Math.round(this.bounds.y - f.y * this.bounds.height + f.y * e) + 4) + "px" + } + if (b || !c) this.textarea.style.width = d + "px"; + this.textarea.style.height = e + "px" + } +}; +mxCellEditor.prototype.isModified = function() { + return this.modified +}; +mxCellEditor.prototype.setModified = function(a) { + this.modified = a +}; +mxCellEditor.prototype.focusLost = function() { + this.stopEditing(!this.graph.isInvokesStopCellEditing()) +}; +mxCellEditor.prototype.startEditing = function(a, b) { + null == this.textarea && this.init(); + this.stopEditing(!0); + var c = this.graph.getView().getState(a); + if (null != c) { + this.editingCell = a; + this.trigger = b; + this.textNode = null; + null != c.text && this.isHideLabel(c) && (this.textNode = c.text.node, this.textNode.style.visibility = "hidden"); + var d = this.graph.getView().scale, + d = mxUtils.getValue(c.style, mxConstants.STYLE_FONTSIZE, mxConstants.DEFAULT_FONTSIZE) * d, + e = mxUtils.getValue(c.style, mxConstants.STYLE_FONTFAMILY, mxConstants.DEFAULT_FONTFAMILY), + f = mxUtils.getValue(c.style, mxConstants.STYLE_FONTCOLOR, "black"), + g = mxUtils.getValue(c.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_LEFT), + h = (mxUtils.getValue(c.style, mxConstants.STYLE_FONTSTYLE, 0) & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD, + k = (mxUtils.getValue(c.style, mxConstants.STYLE_FONTSTYLE, 0) & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC, + l = (mxUtils.getValue(c.style, mxConstants.STYLE_FONTSTYLE, 0) & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE; + this.textarea.style.fontSize = Math.round(d) + + "px"; + this.textarea.style.lineHeight = Math.round(d * mxConstants.LINE_HEIGHT) + "px"; + this.textarea.style.fontFamily = e; + this.textarea.style.textAlign = g; + this.textarea.style.color = f; + this.textarea.style.fontWeight = h ? "bold" : "normal"; + this.textarea.style.fontStyle = k ? "italic" : ""; + this.textarea.style.textDecoration = l ? "underline" : ""; + this.textarea.style.overflow = "auto"; + this.textarea.style.outline = "none"; + this.bounds = d = this.getEditorBounds(c); + this.textarea.style.left = d.x + "px"; + this.textarea.style.top = d.y + "px"; + this.textarea.style.width = + d.width + "px"; + this.textarea.style.height = d.height + "px"; + this.textarea.style.zIndex = 5; + c = this.getInitialValue(c, b); + null == c || 0 == c.length ? (c = this.getEmptyLabelText(), this.clearOnChange = !0) : this.clearOnChange = !1; + this.setModified(!1); + this.textarea.value = c; + this.graph.container.appendChild(this.textarea); + "none" != this.textarea.style.display && (this.autoSize && (this.textDiv = this.createTextDiv(), document.body.appendChild(this.textDiv), this.resize()), this.textarea.focus(), this.textarea.select()) + } +}; +mxCellEditor.prototype.createTextDiv = function() { + var a = document.createElement("div"), + b = a.style; + b.position = "absolute"; + b.whiteSpace = "nowrap"; + b.visibility = "hidden"; + b.display = mxClient.IS_QUIRKS ? "inline" : "inline-block"; + b.zoom = "1"; + b.verticalAlign = "top"; + b.lineHeight = this.textarea.style.lineHeight; + b.fontSize = this.textarea.style.fontSize; + b.fontFamily = this.textarea.style.fontFamily; + b.fontWeight = this.textarea.style.fontWeight; + b.textAlign = this.textarea.style.textAlign; + b.fontStyle = this.textarea.style.fontStyle; + b.textDecoration = this.textarea.style.textDecoration; + return a +}; +mxCellEditor.prototype.stopEditing = function(a) { + null != this.editingCell && (null != this.textNode && (this.textNode.style.visibility = "visible", this.textNode = null), !a && this.isModified() && this.graph.labelChanged(this.editingCell, this + .getCurrentValue(), this.trigger), null != this.textDiv && (document.body.removeChild(this.textDiv), this.textDiv = null), this.bounds = this.trigger = this.editingCell = null, this.textarea + .blur(), this.textarea.parentNode.removeChild(this.textarea)) +}; +mxCellEditor.prototype.getInitialValue = function(a, b) { + return this.graph.getEditingValue(a.cell, b) +}; +mxCellEditor.prototype.getCurrentValue = function() { + return this.textarea.value.replace(/\r/g, "") +}; +mxCellEditor.prototype.isHideLabel = function(a) { + return !0 +}; +mxCellEditor.prototype.getMinimumSize = function(a) { + var b = this.graph.getView().scale; + return new mxRectangle(0, 0, null == a.text ? 30 : a.text.size * b + 20, "left" == this.textarea.style.textAlign ? 120 : 40) +}; +mxCellEditor.prototype.getEditorBounds = function(a) { + var b = this.graph.getModel().isEdge(a.cell), + c = this.graph.getView().scale, + d = this.getMinimumSize(a), + e = d.width, + d = d.height, + f = parseInt(a.style[mxConstants.STYLE_SPACING] || 2) * c, + g = parseInt(a.style[mxConstants.STYLE_SPACING_TOP] || 0) * c + f, + h = parseInt(a.style[mxConstants.STYLE_SPACING_RIGHT] || 0) * c + f, + k = parseInt(a.style[mxConstants.STYLE_SPACING_BOTTOM] || 0) * c + f, + c = parseInt(a.style[mxConstants.STYLE_SPACING_LEFT] || 0) * c + f, + h = new mxRectangle(a.x, a.y, Math.max(e, a.width - + c - h), Math.max(d, a.height - g - k)); + b ? (h.x = a.absoluteOffset.x, h.y = a.absoluteOffset.y, null != a.text && null != a.text.boundingBox && (0 < a.text.boundingBox.x && (h.x = a.text.boundingBox.x), 0 < a.text.boundingBox.y && (h.y = + a.text.boundingBox.y))) : null != a.text && null != a.text.boundingBox && (h.x = Math.min(h.x, a.text.boundingBox.x), h.y = Math.min(h.y, a.text.boundingBox.y)); + h.x += c; + h.y += g; + null != a.text && null != a.text.boundingBox && (b ? (h.width = Math.max(e, a.text.boundingBox.width), h.height = Math.max(d, a.text.boundingBox.height)) : (h.width = + Math.max(h.width, a.text.boundingBox.width), h.height = Math.max(h.height, a.text.boundingBox.height))); + this.graph.getModel().isVertex(a.cell) && (b = mxUtils.getValue(a.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER), b == mxConstants.ALIGN_LEFT ? h.x -= a.width : b == + mxConstants.ALIGN_RIGHT && (h.x += a.width), b = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE), b == mxConstants.ALIGN_TOP ? h.y -= a.height : + b == mxConstants.ALIGN_BOTTOM && (h.y += a.height)); + return h +}; +mxCellEditor.prototype.getEmptyLabelText = function(a) { + return this.emptyLabelText +}; +mxCellEditor.prototype.getEditingCell = function() { + return this.editingCell +}; +mxCellEditor.prototype.destroy = function() { + null != this.textarea && (mxEvent.release(this.textarea), null != this.textarea.parentNode && this.textarea.parentNode.removeChild(this.textarea), this.textarea = null) +}; + +function mxCellRenderer() {} +mxCellRenderer.prototype.defaultEdgeShape = mxConnector; +mxCellRenderer.prototype.defaultVertexShape = mxRectangleShape; +mxCellRenderer.prototype.defaultTextShape = mxText; +mxCellRenderer.prototype.legacyControlPosition = !0; +mxCellRenderer.prototype.defaultShapes = {}; +mxCellRenderer.registerShape = function(a, b) { + mxCellRenderer.prototype.defaultShapes[a] = b +}; +mxCellRenderer.registerShape(mxConstants.SHAPE_RECTANGLE, mxRectangleShape); +mxCellRenderer.registerShape(mxConstants.SHAPE_ELLIPSE, mxEllipse); +mxCellRenderer.registerShape(mxConstants.SHAPE_RHOMBUS, mxRhombus); +mxCellRenderer.registerShape(mxConstants.SHAPE_CYLINDER, mxCylinder); +mxCellRenderer.registerShape(mxConstants.SHAPE_CONNECTOR, mxConnector); +mxCellRenderer.registerShape(mxConstants.SHAPE_ACTOR, mxActor); +mxCellRenderer.registerShape(mxConstants.SHAPE_TRIANGLE, mxTriangle); +mxCellRenderer.registerShape(mxConstants.SHAPE_HEXAGON, mxHexagon); +mxCellRenderer.registerShape(mxConstants.SHAPE_CLOUD, mxCloud); +mxCellRenderer.registerShape(mxConstants.SHAPE_LINE, mxLine); +mxCellRenderer.registerShape(mxConstants.SHAPE_ARROW, mxArrow); +mxCellRenderer.registerShape(mxConstants.SHAPE_DOUBLE_ELLIPSE, mxDoubleEllipse); +mxCellRenderer.registerShape(mxConstants.SHAPE_SWIMLANE, mxSwimlane); +mxCellRenderer.registerShape(mxConstants.SHAPE_IMAGE, mxImageShape); +mxCellRenderer.registerShape(mxConstants.SHAPE_LABEL, mxLabel); +mxCellRenderer.prototype.initialize = function(a, b) { + var c = a.view.graph.getModel(); + if (null != a.view.graph.container && null == a.shape && a.cell != a.view.currentRoot && (c.isVertex(a.cell) || c.isEdge(a.cell))) + if (this.createShape(a), null != a.shape && (null == b || b)) this.initializeShape(a), a.view.graph.ordered || c.isEdge(a.cell) ? a.invalidOrder = !0 : a.view.graph.keepEdgesInForeground && + null != this.firstEdge && (this.firstEdge.parentNode == a.shape.node.parentNode ? this.insertState(a, this.firstEdge) : this.firstEdge = null), a.shape.scale = + a.view.scale, this.createCellOverlays(a), this.installListeners(a) +}; +mxCellRenderer.prototype.initializeShape = function(a) { + a.shape.init(a.view.getDrawPane()) +}; +mxCellRenderer.prototype.getPreviousStateInContainer = function(a, b) { + for (var c = null, d = a.view.graph, e = d.getModel(), f = a.cell, g = e.getParent(f); null != g && null == c;) c = this.findPreviousStateInContainer(d, g, f, b), f = g, g = e.getParent(f); + return c +}; +mxCellRenderer.prototype.findPreviousStateInContainer = function(a, b, c, d) { + var e = null, + f = a.getModel(); + for (c = null != c ? b.getIndex(c) - 1 : f.getChildCount(b) - 1; 0 <= c && null == e; c--) e = this.findPreviousStateInContainer(a, f.getChildAt(b, c), null, d); + if (null == e && (e = a.view.getState(b), null != e && (null == e.shape || null == e.shape.node || e.shape.node.parentNode != d))) e = null; + return e +}; +mxCellRenderer.prototype.order = function(a) { + var b = a.shape.node.parentNode, + c = this.getPreviousStateInContainer(a, b), + d = b.firstChild; + null != c && (d = c.shape.node, null != c.text && (null != c.text.node && c.text.node.parentNode == b) && (d = c.text.node), d = d.nextSibling); + this.insertState(a, d) +}; +mxCellRenderer.prototype.orderEdge = function(a) { + var b = a.view, + c = b.graph.getModel(); + if (b.graph.keepEdgesInForeground) { + if (null == this.firstEdge || null == this.firstEdge.parentNode || this.firstEdge.parentNode != a.shape.node.parentNode) this.firstEdge = a.shape.node + } else if (b.graph.keepEdgesInBackground) { + var d = a.shape.node, + e = d.parentNode, + c = c.getParent(a.cell), + b = b.getState(c), + e = null != b && null != b.shape && null != b.shape.node ? b.shape.node.nextSibling : e.firstChild; + null != e && e != d && this.insertState(a, e) + } +}; +mxCellRenderer.prototype.insertState = function(a, b) { + a.shape.node.parentNode.insertBefore(a.shape.node, b); + null != a.text && (null != a.text.node && a.text.node.parentNode == a.shape.node.parentNode) && a.shape.node.parentNode.insertBefore(a.text.node, a.shape.node.nextSibling) +}; +mxCellRenderer.prototype.createShape = function(a) { + if (null != a.style) { + var b = mxStencilRegistry.getStencil(a.style[mxConstants.STYLE_SHAPE]); + null != b ? a.shape = new mxShape(b) : (b = this.getShapeConstructor(a), a.shape = new b); + a.shape.points = a.absolutePoints; + a.shape.bounds = new mxRectangle(a.x, a.y, a.width, a.height); + a.shape.dialect = a.view.graph.dialect; + this.configureShape(a) + } +}; +mxCellRenderer.prototype.getShape = function(a) { + return null != a ? mxCellRenderer.prototype.defaultShapes[a] : null +}; +mxCellRenderer.prototype.getShapeConstructor = function(a) { + var b = this.getShape(a.style[mxConstants.STYLE_SHAPE]); + null == b && (b = a.view.graph.getModel().isEdge(a.cell) ? this.defaultEdgeShape : this.defaultVertexShape); + return b +}; +mxCellRenderer.prototype.configureShape = function(a) { + a.shape.apply(a); + a.shape.image = a.view.graph.getImage(a); + a.shape.indicatorShape = this.getShape(a.view.graph.getIndicatorShape(a)); + a.shape.indicatorColor = a.view.graph.getIndicatorColor(a); + a.shape.indicatorGradientColor = a.view.graph.getIndicatorGradientColor(a); + a.shape.indicatorDirection = a.style[mxConstants.STYLE_INDICATOR_DIRECTION]; + a.shape.indicatorImage = a.view.graph.getIndicatorImage(a); + this.postConfigureShape(a) +}; +mxCellRenderer.prototype.postConfigureShape = function(a) { + null != a.shape && (this.resolveColor(a, "indicatorColor", mxConstants.STYLE_FILLCOLOR), this.resolveColor(a, "indicatorGradientColor", mxConstants.STYLE_GRADIENTCOLOR), this.resolveColor(a, + "fill", mxConstants.STYLE_FILLCOLOR), this.resolveColor(a, "stroke", mxConstants.STYLE_STROKECOLOR), this.resolveColor(a, "gradient", mxConstants.STYLE_GRADIENTCOLOR)) +}; +mxCellRenderer.prototype.resolveColor = function(a, b, c) { + var d = a.shape[b], + e = a.view.graph, + f = null; + "inherit" == d ? f = e.model.getParent(a.cell) : "swimlane" == d ? (f = null != e.model.getTerminal(a.cell, !1) ? e.model.getTerminal(a.cell, !1) : a.cell, f = e.getSwimlane(f), c = e.swimlaneIndicatorColorAttribute) : + "indicated" == d && (a.shape[b] = a.shape.indicatorColor); + null != f && (d = e.getView().getState(f), a.shape[b] = null, null != d && (a.shape[b] = null != d.shape && "indicatorColor" != b ? d.shape[b] : d.style[c])) +}; +mxCellRenderer.prototype.getLabelValue = function(a) { + return a.view.graph.getLabel(a.cell) +}; +mxCellRenderer.prototype.createLabel = function(a, b) { + var c = a.view.graph; + c.getModel().isEdge(a.cell); + if (0 < a.style[mxConstants.STYLE_FONTSIZE] || null == a.style[mxConstants.STYLE_FONTSIZE]) { + var d = c.isHtmlLabel(a.cell) || null != b && mxUtils.isNode(b); + a.text = new this.defaultTextShape(b, new mxRectangle, a.style[mxConstants.STYLE_ALIGN] || mxConstants.ALIGN_CENTER, c.getVerticalAlign(a), a.style[mxConstants.STYLE_FONTCOLOR], a.style[ + mxConstants.STYLE_FONTFAMILY], a.style[mxConstants.STYLE_FONTSIZE], a.style[mxConstants.STYLE_FONTSTYLE], + a.style[mxConstants.STYLE_SPACING], a.style[mxConstants.STYLE_SPACING_TOP], a.style[mxConstants.STYLE_SPACING_RIGHT], a.style[mxConstants.STYLE_SPACING_BOTTOM], a.style[mxConstants.STYLE_SPACING_LEFT], + a.style[mxConstants.STYLE_HORIZONTAL], a.style[mxConstants.STYLE_LABEL_BACKGROUNDCOLOR], a.style[mxConstants.STYLE_LABEL_BORDERCOLOR], c.isWrapping(a.cell) && c.isHtmlLabel(a.cell), c.isLabelClipped( + a.cell), a.style[mxConstants.STYLE_OVERFLOW], a.style[mxConstants.STYLE_LABEL_PADDING]); + a.text.opacity = mxUtils.getValue(a.style, + mxConstants.STYLE_TEXT_OPACITY, 100); + a.text.dialect = d ? mxConstants.DIALECT_STRICTHTML : a.view.graph.dialect; + a.text.state = a; + this.initializeLabel(a); + var e = !1, + f = function(b) { + var d = a; + if (mxClient.IS_TOUCH || e) d = mxEvent.getClientX(b), b = mxEvent.getClientY(b), b = mxUtils.convertPoint(c.container, d, b), d = c.view.getState(c.getCellAt(b.x, b.y)); + return d + }; + mxEvent.addGestureListeners(a.text.node, mxUtils.bind(this, function(b) { + this.isLabelEvent(a, b) && (c.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(b, a)), e = c.dialect != + mxConstants.DIALECT_SVG && "IMG" == mxEvent.getSource(b).nodeName) + }), mxUtils.bind(this, function(b) { + this.isLabelEvent(a, b) && c.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(b, f(b))) + }), mxUtils.bind(this, function(b) { + this.isLabelEvent(a, b) && (c.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(b, f(b))), e = !1) + })); + mxEvent.addListener(a.text.node, "dblclick", mxUtils.bind(this, function(b) { + this.isLabelEvent(a, b) && (c.dblClick(b, a.cell), mxEvent.consume(b)) + })) + } +}; +mxCellRenderer.prototype.initializeLabel = function(a) { + var b = a.view.graph; + a.text.dialect != mxConstants.DIALECT_SVG && (mxClient.IS_SVG && mxClient.NO_FO ? a.text.init(b.container) : mxUtils.isVml(a.view.getDrawPane()) && (null != a.shape.label ? a.text.init(a.shape.label) : + a.text.init(a.shape.node))); + null == a.text.node && (a.text.init(a.view.getDrawPane()), null != a.shape && null != a.text && a.shape.node.parentNode.insertBefore(a.text.node, a.shape.node.nextSibling)) +}; +mxCellRenderer.prototype.createCellOverlays = function(a) { + var b = a.view.graph.getCellOverlays(a.cell), + c = null; + if (null != b) + for (var c = new mxDictionary, d = 0; d < b.length; d++) { + var e = null != a.overlays ? a.overlays.remove(b[d]) : null; + null == e && (e = new mxImageShape(new mxRectangle, b[d].image.src), e.dialect = a.view.graph.dialect, e.preserveImageAspect = !1, e.overlay = b[d], this.initializeOverlay(a, e), this.installCellOverlayListeners( + a, b[d], e), null != b[d].cursor && (e.node.style.cursor = b[d].cursor)); + c.put(b[d], e) + } + null != a.overlays && + a.overlays.visit(function(a, b) { + b.destroy() + }); + a.overlays = c +}; +mxCellRenderer.prototype.initializeOverlay = function(a, b) { + b.init(a.view.getOverlayPane()) +}; +mxCellRenderer.prototype.installCellOverlayListeners = function(a, b, c) { + var d = a.view.graph; + mxEvent.addListener(c.node, "click", function(c) { + d.isEditing() && d.stopEditing(!d.isInvokesStopCellEditing()); + b.fireEvent(new mxEventObject(mxEvent.CLICK, "event", c, "cell", a.cell)) + }); + mxEvent.addGestureListeners(c.node, function(a) { + mxEvent.consume(a) + }, function(b) { + d.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(b, a)) + }); + mxClient.IS_TOUCH && mxEvent.addListener(c.node, "touchend", function(c) { + b.fireEvent(new mxEventObject(mxEvent.CLICK, + "event", c, "cell", a.cell)) + }) +}; +mxCellRenderer.prototype.createControl = function(a) { + var b = a.view.graph, + c = b.getFoldingImage(a); + if (b.foldingEnabled && null != c) { + if (null == a.control) { + var d = new mxRectangle(0, 0, c.width, c.height); + a.control = new mxImageShape(d, c.src); + a.control.preserveImageAspect = !1; + a.control.dialect = b.dialect; + this.initControl(a, a.control, !0, function(c) { + if (b.isEnabled()) { + var d = !b.isCellCollapsed(a.cell); + b.foldCells(d, !1, [a.cell]); + mxEvent.consume(c) + } + }) + } + } else null != a.control && (a.control.destroy(), a.control = null) +}; +mxCellRenderer.prototype.initControl = function(a, b, c, d) { + var e = a.view.graph; + e.isHtmlLabel(a.cell) && mxClient.NO_FO && e.dialect == mxConstants.DIALECT_SVG ? (b.dialect = mxConstants.DIALECT_PREFERHTML, b.init(e.container), b.node.style.zIndex = 1) : b.init(a.view.getOverlayPane()); + b = b.innerNode || b.node; + d && (e.isEnabled() && (b.style.cursor = "pointer"), mxEvent.addListener(b, "click", d)); + c && mxEvent.addGestureListeners(b, function(b) { + e.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(b, a)); + mxEvent.consume(b) + }, function(b) { + e.fireMouseEvent(mxEvent.MOUSE_MOVE, + new mxMouseEvent(b, a)) + }); + return b +}; +mxCellRenderer.prototype.isShapeEvent = function(a, b) { + return !0 +}; +mxCellRenderer.prototype.isLabelEvent = function(a, b) { + return !0 +}; +mxCellRenderer.prototype.installListeners = function(a) { + var b = a.view.graph, + c = function(c) { + var d = a; + if (b.dialect != mxConstants.DIALECT_SVG && "IMG" == mxEvent.getSource(c).nodeName || mxClient.IS_TOUCH) d = mxEvent.getClientX(c), c = mxEvent.getClientY(c), c = mxUtils.convertPoint(b.container, + d, c), d = b.view.getState(b.getCellAt(c.x, c.y)); + return d + }, + d = !1; + mxEvent.addListener(a.shape.node, "gesturestart", mxUtils.bind(this, function(a) { + b.lastTouchTime = 0; + d = !0; + mxEvent.consume(a) + })); + mxEvent.addGestureListeners(a.shape.node, mxUtils.bind(this, + function(c) { + this.isShapeEvent(a, c) && !d ? b.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(c, null != a.shape && mxEvent.getSource(c) == a.shape.content ? null : a)) : d && mxEvent.consume(c) + }), mxUtils.bind(this, function(e) { + this.isShapeEvent(a, e) && !d ? b.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(e, null != a.shape && mxEvent.getSource(e) == a.shape.content ? null : c(e))) : d && mxEvent.consume( + e) + }), mxUtils.bind(this, function(e) { + this.isShapeEvent(a, e) && !d ? b.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(e, null != a.shape && + mxEvent.getSource(e) == a.shape.content ? null : c(e))) : d && mxEvent.consume(e) + })); + var e = mxClient.IS_TOUCH ? "gestureend" : "dblclick"; + mxEvent.addListener(a.shape.node, e, mxUtils.bind(this, function(c) { + d = !1; + "gestureend" == e ? (b.lastTouchTime = 0, b.gestureEnabled && (b.handleGesture(a, c), mxEvent.consume(c))) : this.isShapeEvent(a, c) && (b.dblClick(c, null != a.shape && mxEvent.getSource( + c) == a.shape.content ? null : a.cell), mxEvent.consume(c)) + })) +}; +mxCellRenderer.prototype.redrawLabel = function(a, b) { + var c = this.getLabelValue(a); + if (null == a.text && null != c && (mxUtils.isNode(c) || 0 < c.length)) this.createLabel(a, c); + else if (null != a.text && (null == c || 0 == c.length)) a.text.destroy(), a.text = null; + if (null != a.text) { + var d = a.view.graph, + e = d.isWrapping(a.cell), + d = d.isLabelClipped(a.cell), + f = this.getLabelBounds(a); + if (b || a.text.value != c || a.text.isWrapping != e || a.text.isClipping != d || a.text.scale != a.view.scale || !a.text.bounds.equals(f)) a.text.value = c, a.text.bounds = f, a.text.scale = + this.getTextScale(a), a.text.isWrapping = e, a.text.isClipping = d, a.text.redraw() + } +}; +mxCellRenderer.prototype.getTextScale = function(a) { + return a.view.scale +}; +mxCellRenderer.prototype.getLabelBounds = function(a) { + var b = a.view.graph, + c = a.view.scale, + d = b.getModel().isEdge(a.cell), + e = new mxRectangle(a.absoluteOffset.x, a.absoluteOffset.y); + a.text.updateMargin(); + d ? (d = a.text.getSpacing(), e.x += d.x * c, e.y += d.y * c, b = b.getCellGeometry(a.cell), null != b && (e.width = Math.max(0, a.text.margin.x * b.width * c - a.text.spacingLeft * c - a.text.spacingRight * + c), e.height = Math.max(0, a.text.margin.y * b.height * c - a.text.spacingTop * c - a.text.spacingBottom * c))) : (a.text.isPaintBoundsInverted() && (d = e.x, + e.x = e.y, e.y = d), e.x += a.x, e.y += a.y, e.width = Math.max(1, a.width), e.height = Math.max(1, a.height), b.isSwimlane(a.cell) && (b = b.getStartSize(a.cell), 0 < b.width ? (d = Math.min( + e.width, b.width * c), a.shape.flipH && (e.x += e.width - d), e.width = d) : 0 < b.height && (d = Math.min(e.height, b.height * c), a.shape.flipV && (e.y += e.height - d), e.height = d)), + this.rotateLabelBounds(a, e)); + return e +}; +mxCellRenderer.prototype.rotateLabelBounds = function(a, b) { + if (a.text.isPaintBoundsInverted()) { + var c = (a.width - a.height) / 2; + b.x += c; + b.y -= c; + c = b.width; + b.width = b.height; + b.height = c + } + b.x -= a.text.margin.x * b.width; + b.y -= a.text.margin.y * b.height; + if ("fill" != a.style[mxConstants.STYLE_OVERFLOW]) { + var c = a.view.scale, + d = a.text.getSpacing(); + b.x += d.x * c; + b.y += d.y * c; + b.width = Math.max(0, b.width - a.text.spacingLeft * c - a.text.spacingRight * c); + b.height = Math.max(0, b.height - a.text.spacingTop * c - a.text.spacingBottom * c) + } + var e = a.text.getTextRotation(); + if (0 != e && (null != a && a.view.graph.model.isVertex(a.cell)) && (c = a.getCenterX(), d = a.getCenterY(), b.x != c || b.y != d)) e *= Math.PI / 180, pt = mxUtils.getRotatedPoint(new mxPoint(b.x, + b.y), Math.cos(e), Math.sin(e), new mxPoint(c, d)), b.x = pt.x, b.y = pt.y +}; +mxCellRenderer.prototype.redrawCellOverlays = function(a, b) { + this.createCellOverlays(a); + if (null != a.overlays) { + var c = mxUtils.mod(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0), 90), + d = mxUtils.toRadians(c), + e = Math.cos(d), + f = Math.sin(d); + a.overlays.visit(function(d, h) { + var k = h.overlay.getBounds(a); + if (!a.view.graph.getModel().isEdge(a.cell) && null != a.shape && 0 != c) { + var l = k.getCenterX(), + m = k.getCenterY(), + m = mxUtils.getRotatedPoint(new mxPoint(l, m), e, f, new mxPoint(a.getCenterX(), a.getCenterY())), + l = m.x, + m = m.y; + k.x = + Math.round(l - k.width / 2); + k.y = Math.round(m - k.height / 2) + } + if (b || null == h.bounds || h.scale != a.view.scale || !h.bounds.equals(k)) h.bounds = k, h.scale = a.view.scale, h.redraw() + }) + } +}; +mxCellRenderer.prototype.redrawControl = function(a, b) { + if (null != a.control) { + var c = this.getControlBounds(a), + d = this.legacyControlPosition ? mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0) : a.shape.getTextRotation(), + e = a.view.scale; + if (b || a.control.scale != e || !a.control.bounds.equals(c) || a.control.rotation != d) a.control.rotation = d, a.control.bounds = c, a.control.scale = e, a.control.redraw() + } +}; +mxCellRenderer.prototype.getControlBounds = function(a) { + if (null != a.control) { + var b = a.control.scale, + c = a.control.bounds.width / b, + b = a.control.bounds.height / b, + d = a.view.scale, + e = a.getCenterX(), + f = a.getCenterY(); + if (!a.view.graph.getModel().isEdge(a.cell) && (e = a.x + c * d, f = a.y + b * d, null != a.shape)) { + var g = a.shape.getShapeRotation(); + if (this.legacyControlPosition) g = mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0); + else if (a.shape.isPaintBoundsInverted()) var h = (a.width - a.height) / 2, + e = e + h, + f = f - h; + 0 != g && (h = mxUtils.toRadians(g), + g = Math.cos(h), h = Math.sin(h), f = mxUtils.getRotatedPoint(new mxPoint(e, f), g, h, new mxPoint(a.getCenterX(), a.getCenterY())), e = f.x, f = f.y) + } + return a.view.graph.getModel().isEdge(a.cell), new mxRectangle(Math.round(e - c / 2 * d), Math.round(f - b / 2 * d), Math.round(c * d), Math.round(b * d)) + } + return null +}; +mxCellRenderer.prototype.redraw = function(a, b, c) { + if (null != a.shape) { + var d = !1; + a.view.graph.getModel().isEdge(a.cell); + reconfigure = null != b ? b : !1; + this.createControl(a); + if (a.orderChanged || a.invalidOrder) a.view.graph.ordered ? this.order(a) : this.orderEdge(a); + if (a.orderChanged || !mxUtils.equalEntries(a.shape.style, a.style)) this.configureShape(a), b = !0; + delete a.invalidOrder; + delete a.orderChanged; + if (b || null == a.shape.bounds || a.shape.scale != a.view.scale || !a.shape.bounds.equals(a) || !mxUtils.equalPoints(a.shape.points, + a.absolutePoints)) d = !0, a.shape.points = null != a.absolutePoints ? a.absolutePoints.slice() : null, a.shape.bounds = new mxRectangle(a.x, a.y, a.width, a.height), a.shape.scale = a.view + .scale, null == c || c ? a.shape.redraw() : a.shape.updateBoundingBox(); + if (null == c || c) this.redrawLabel(a, d), this.redrawCellOverlays(a, d), this.redrawControl(a, d) + } +}; +mxCellRenderer.prototype.destroy = function(a) { + null != a.shape && (null != a.text && (a.text.destroy(), a.text = null), null != a.overlays && (a.overlays.visit(function(a, c) { + c.destroy() + }), a.overlays = null), null != a.control && (a.control.destroy(), a.control = null), a.shape.destroy(), a.shape = null) +}; +var mxEdgeStyle = { + EntityRelation: function(a, b, c, d, e) { + var f = a.view, + g = f.graph; + d = mxUtils.getValue(a.style, mxConstants.STYLE_SEGMENT, mxConstants.ENTITY_SEGMENT) * f.scale; + var h = a.absolutePoints, + k = h[0], + l = h[h.length - 1], + h = !1; + if (null != k) b = new mxCellState, b.x = k.x, b.y = k.y; + else if (null != b) { + var m = mxUtils.getPortConstraints(b, a, !0, mxConstants.DIRECTION_MASK_NONE); + m != mxConstants.DIRECTION_MASK_NONE ? h = m == mxConstants.DIRECTION_MASK_WEST : (k = g.getCellGeometry(b.cell), k.relative ? h = 0.5 >= k.x : null != c && (h = c.x + c.width < b.x)) + } else return; + k = !0; + null != l ? (c = new mxCellState, c.x = l.x, c.y = l.y) : null != c && (m = mxUtils.getPortConstraints(c, a, !1, mxConstants.DIRECTION_MASK_NONE), m != mxConstants.DIRECTION_MASK_NONE ? k = m == + mxConstants.DIRECTION_MASK_WEST : (a = g.getCellGeometry(c.cell), a.relative ? k = 0.5 >= a.x : null != b && (k = b.x + b.width < c.x))); + null != b && null != c && (a = h ? b.x : b.x + b.width, b = f.getRoutingCenterY(b), g = k ? c.x : c.x + c.width, c = f.getRoutingCenterY(c), f = new mxPoint(a + (h ? -d : d), b), l = new mxPoint( + g + (k ? -d : d), c), h == k ? (d = h ? Math.min(a, g) - d : Math.max(a, g) + d, e.push(new mxPoint(d, + b)), e.push(new mxPoint(d, c))) : (f.x < l.x == h ? (d = b + (c - b) / 2, e.push(f), e.push(new mxPoint(f.x, d)), e.push(new mxPoint(l.x, d))) : e.push(f), e.push(l))) + }, + Loop: function(a, b, c, d, e) { + if (null != b) { + c = a.view; + var f = c.graph; + d = null != d && 0 < d.length ? d[0] : null; + null != d && (d = c.transformControlPoint(a, d), mxUtils.contains(b, d.x, d.y) && (d = null)); + var g = 0, + h = 0, + k = 0, + l = 0, + f = mxUtils.getValue(a.style, mxConstants.STYLE_SEGMENT, f.gridSize) * c.scale; + a = mxUtils.getValue(a.style, mxConstants.STYLE_DIRECTION, mxConstants.DIRECTION_WEST); + a == mxConstants.DIRECTION_NORTH || + a == mxConstants.DIRECTION_SOUTH ? (g = c.getRoutingCenterX(b), h = f) : (k = c.getRoutingCenterY(b), l = f); + null == d || d.x < b.x || d.x > b.x + b.width ? null != d ? (g = d.x, l = Math.max(Math.abs(k - d.y), l)) : a == mxConstants.DIRECTION_NORTH ? k = b.y - 2 * h : a == mxConstants.DIRECTION_SOUTH ? + k = b.y + b.height + 2 * h : g = a == mxConstants.DIRECTION_EAST ? b.x - 2 * l : b.x + b.width + 2 * l : null != d && (g = c.getRoutingCenterX(b), h = Math.max(Math.abs(g - d.x), l), k = + d.y, l = 0); + e.push(new mxPoint(g - h, k - l)); + e.push(new mxPoint(g + h, k + l)) + } + }, + ElbowConnector: function(a, b, c, d, e) { + var f = null != + d && 0 < d.length ? d[0] : null, + g = !1, + h = !1; + if (null != b && null != c) + if (null != f) var k = Math.min(b.x, c.x), + l = Math.max(b.x + b.width, c.x + c.width), + h = Math.min(b.y, c.y), + m = Math.max(b.y + b.height, c.y + c.height), + f = a.view.transformControlPoint(a, f), + g = f.y < h || f.y > m, + h = f.x < k || f.x > l; + else k = Math.max(b.x, c.x), l = Math.min(b.x + b.width, c.x + c.width), g = k == l, g || (h = Math.max(b.y, c.y), m = Math.min(b.y + b.height, c.y + c.height), h = h == m); + !h && (g || a.style[mxConstants.STYLE_ELBOW] == mxConstants.ELBOW_VERTICAL) ? mxEdgeStyle.TopToBottom(a, b, c, d, e) : mxEdgeStyle.SideToSide(a, + b, c, d, e) + }, + SideToSide: function(a, b, c, d, e) { + var f = a.view; + d = null != d && 0 < d.length ? d[0] : null; + var g = a.absolutePoints, + h = g[0], + g = g[g.length - 1]; + null != d && (d = f.transformControlPoint(a, d)); + null != h && (b = new mxCellState, b.x = h.x, b.y = h.y); + null != g && (c = new mxCellState, c.x = g.x, c.y = g.y); + null != b && null != c && (a = Math.max(b.x, c.x), h = Math.min(b.x + b.width, c.x + c.width), a = null != d ? d.x : h + (a - h) / 2, h = f.getRoutingCenterY(b), f = f.getRoutingCenterY(c), + null != d && (d.y >= b.y && d.y <= b.y + b.height && (h = d.y), d.y >= c.y && d.y <= c.y + c.height && (f = d.y)), !mxUtils.contains(c, + a, h) && !mxUtils.contains(b, a, h) && e.push(new mxPoint(a, h)), !mxUtils.contains(c, a, f) && !mxUtils.contains(b, a, f) && e.push(new mxPoint(a, f)), 1 == e.length && (null != d ? ! + mxUtils.contains(c, a, d.y) && !mxUtils.contains(b, a, d.y) && e.push(new mxPoint(a, d.y)) : (f = Math.max(b.y, c.y), b = Math.min(b.y + b.height, c.y + c.height), e.push(new mxPoint(a, + f + (b - f) / 2))))) + }, + TopToBottom: function(a, b, c, d, e) { + var f = a.view; + d = null != d && 0 < d.length ? d[0] : null; + var g = a.absolutePoints, + h = g[0], + g = g[g.length - 1]; + null != d && (d = f.transformControlPoint(a, d)); + null != + h && (b = new mxCellState, b.x = h.x, b.y = h.y); + null != g && (c = new mxCellState, c.x = g.x, c.y = g.y); + null != b && null != c && (h = Math.max(b.y, c.y), g = Math.min(b.y + b.height, c.y + c.height), a = f.getRoutingCenterX(b), null != d && (d.x >= b.x && d.x <= b.x + b.width) && (a = d.x), h = + null != d ? d.y : g + (h - g) / 2, !mxUtils.contains(c, a, h) && !mxUtils.contains(b, a, h) && e.push(new mxPoint(a, h)), a = null != d && d.x >= c.x && d.x <= c.x + c.width ? d.x : f.getRoutingCenterX( + c), !mxUtils.contains(c, a, h) && !mxUtils.contains(b, a, h) && e.push(new mxPoint(a, h)), 1 == e.length && (null != d && 1 == + e.length ? !mxUtils.contains(c, d.x, h) && !mxUtils.contains(b, d.x, h) && e.push(new mxPoint(d.x, h)) : (f = Math.max(b.x, c.x), b = Math.min(b.x + b.width, c.x + c.width), e.push(new mxPoint( + f + (b - f) / 2, h))))) + }, + SegmentConnector: function(a, b, c, d, e) { + var f = a.absolutePoints, + g = !0, + h = null, + k = f[0]; + null == k && null != b ? k = new mxPoint(a.view.getRoutingCenterX(b), a.view.getRoutingCenterY(b)) : null != k && (k = k.clone()); + var l = f.length - 1; + if (null != d && 0 < d.length) { + for (var h = a.view.transformControlPoint(a, d[0]), m = b, n = f[0], p = !1, q = !1, p = h, s = d.length, r = + 0; 2 > r; r++) { + var t = null != n && n.x == p.x, + v = null != n && n.y == p.y, + w = null != m && p.y >= m.y && p.y <= m.y + m.height, + m = null != m && p.x >= m.x && p.x <= m.x + m.width, + p = v || null == n && w, + q = t || null == n && m; + if (null != n && !v && !t && (w || m)) { + g = w ? !1 : !0; + break + } + if (q || p) { + g = p; + 1 == r && (g = 0 == d.length % 2 ? p : q); + break + } + m = c; + n = f[l]; + p = a.view.transformControlPoint(a, d[s - 1]) + } + g && (null != f[0] && f[0].y != h.y || null == f[0] && null != b && (h.y < b.y || h.y > b.y + b.height)) ? e.push(new mxPoint(k.x, h.y)) : !g && (null != f[0] && f[0].x != h.x || null == f[ + 0] && null != b && (h.x < b.x || h.x > b.x + b.width)) && e.push(new mxPoint(h.x, + k.y)); + g ? k.y = h.y : k.x = h.x; + for (r = 0; r < d.length; r++) g = !g, h = a.view.transformControlPoint(a, d[r]), g ? k.y = h.y : k.x = h.x, e.push(k.clone()) + } else h = k, g = !0; + k = f[l]; + null == k && null != c && (k = new mxPoint(a.view.getRoutingCenterX(c), a.view.getRoutingCenterY(c))); + g && (null != f[l] && f[l].y != h.y || null == f[l] && null != c && (h.y < c.y || h.y > c.y + c.height)) ? e.push(new mxPoint(k.x, h.y)) : !g && (null != f[l] && f[l].x != h.x || null == f[l] && + null != c && (h.x < c.x || h.x > c.x + c.width)) && e.push(new mxPoint(h.x, k.y)); + if (null == f[0] && null != b) + for (; 1 < e.length && mxUtils.contains(b, + e[1].x, e[1].y);) e = e.splice(1, 1); + if (null == f[l] && null != c) + for (; 1 < e.length && mxUtils.contains(c, e[e.length - 1].x, e[e.length - 1].y);) e = e.splice(e.length - 1, 1) + }, + orthBuffer: 10, + dirVectors: [ + [-1, 0], + [0, -1], + [1, 0], + [0, 1], + [-1, 0], + [0, -1], + [1, 0] + ], + wayPoints1: [ + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + routePatterns: [ + [ + [513, 2308, 2081, 2562], + [513, 1090, 514, 2184, 2114, 2561], + [513, 1090, 514, 2564, 2184, 2562], + [513, 2308, 2561, 1090, 514, 2568, 2308] + ], + [ + [514, 1057, 513, 2308, 2081, 2562], + [514, 2184, 2114, 2561], + [514, 2184, + 2562, 1057, 513, 2564, 2184 + ], + [514, 1057, 513, 2568, 2308, 2561] + ], + [ + [1090, 514, 1057, 513, 2308, 2081, 2562], + [2114, 2561], + [1090, 2562, 1057, 513, 2564, 2184], + [1090, 514, 1057, 513, 2308, 2561, 2568] + ], + [ + [2081, 2562], + [1057, 513, 1090, 514, 2184, 2114, 2561], + [1057, 513, 1090, 514, 2184, 2562, 2564], + [1057, 2561, 1090, 514, 2568, 2308] + ] + ], + inlineRoutePatterns: [ + [null, [2114, 2568], null, null], + [null, [514, 2081, 2114, 2568], null, null], + [null, [2114, 2561], null, null], + [ + [2081, 2562], + [1057, 2114, 2568], + [2184, 2562], null + ] + ], + vertexSeperations: [], + limits: [ + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0] + ], + LEFT_MASK: 32, + TOP_MASK: 64, + RIGHT_MASK: 128, + BOTTOM_MASK: 256, + LEFT: 1, + TOP: 2, + RIGHT: 4, + BOTTOM: 8, + SIDE_MASK: 480, + CENTER_MASK: 512, + SOURCE_MASK: 1024, + TARGET_MASK: 2048, + VERTEX_MASK: 3072, + OrthConnector: function(a, b, c, d, e) { + var f = a.view.graph, + g = null == b ? !1 : f.getModel().isEdge(b.cell), + f = null == c ? !1 : f.getModel().isEdge(c.cell); + if (null != d && 0 < d.length || g || f) mxEdgeStyle.SegmentConnector(a, b, c, d, e); + else { + d = a.absolutePoints; + var h = d[0], + k = d[d.length - 1]; + d = null != b ? b.x : h.x; + var g = null != b ? b.y : h.y, + l = null != b ? b.width : + 1, + m = null != b ? b.height : 1, + n = null != c ? c.x : k.x, + p = null != c ? c.y : k.y, + q = null != c ? c.width : 1, + s = null != c ? c.height : 1, + f = a.view.scale * mxEdgeStyle.orthBuffer, + r = [mxConstants.DIRECTION_MASK_ALL, mxConstants.DIRECTION_MASK_ALL]; + null != b && (r[0] = mxUtils.getPortConstraints(b, a, !0, mxConstants.DIRECTION_MASK_ALL)); + null != c && (r[1] = mxUtils.getPortConstraints(c, a, !1, mxConstants.DIRECTION_MASK_ALL)); + a = [0, 0]; + d = [ + [d, g, l, m], + [n, p, q, s] + ]; + for (l = 0; 2 > l; l++) mxEdgeStyle.limits[l][1] = d[l][0] - f, mxEdgeStyle.limits[l][2] = d[l][1] - f, mxEdgeStyle.limits[l][4] = + d[l][0] + d[l][2] + f, mxEdgeStyle.limits[l][8] = d[l][1] + d[l][3] + f; + l = d[0][0] + d[0][2] / 2 - (d[1][0] + d[1][2] / 2); + m = d[0][1] + d[0][3] / 2 - (d[1][1] + d[1][3] / 2); + g = 0; + 0 > l ? g = 0 > m ? 2 : 1 : 0 >= m && (g = 3, 0 == l && (g = 2)); + m = null; + null != b && (m = h); + b = [ + [0.5, 0.5], + [0.5, 0.5] + ]; + for (l = 0; 2 > l; l++) null != m && (b[l][0] = (m.x - d[l][0]) / d[l][2], 0.01 > b[l][0] ? a[l] = mxConstants.DIRECTION_MASK_WEST : 0.99 < b[l][0] && (a[l] = mxConstants.DIRECTION_MASK_EAST), + b[l][1] = (m.y - d[l][1]) / d[l][3], 0.01 > b[l][1] ? a[l] = mxConstants.DIRECTION_MASK_NORTH : 0.99 < b[l][1] && (a[l] = mxConstants.DIRECTION_MASK_SOUTH)), + m = null, null != c && (m = k); + l = d[0][1] - (d[1][1] + d[1][3]); + m = d[0][0] - (d[1][0] + d[1][2]); + n = d[1][1] - (d[0][1] + d[0][3]); + p = d[1][0] - (d[0][0] + d[0][2]); + mxEdgeStyle.vertexSeperations[1] = Math.max(m - 2 * f, 0); + mxEdgeStyle.vertexSeperations[2] = Math.max(l - 2 * f, 0); + mxEdgeStyle.vertexSeperations[4] = Math.max(n - 2 * f, 0); + mxEdgeStyle.vertexSeperations[3] = Math.max(p - 2 * f, 0); + c = []; + h = []; + k = []; + h[0] = m >= p ? mxConstants.DIRECTION_MASK_WEST : mxConstants.DIRECTION_MASK_EAST; + k[0] = l >= n ? mxConstants.DIRECTION_MASK_NORTH : mxConstants.DIRECTION_MASK_SOUTH; + h[1] = mxUtils.reversePortConstraints(h[0]); + k[1] = mxUtils.reversePortConstraints(k[0]); + m = m >= p ? m : p; + n = l >= n ? l : n; + p = [ + [0, 0], + [0, 0] + ]; + q = !1; + for (l = 0; 2 > l; l++) 0 == a[l] && (0 == (h[l] & r[l]) && (h[l] = mxUtils.reversePortConstraints(h[l])), 0 == (k[l] & r[l]) && (k[l] = mxUtils.reversePortConstraints(k[l])), p[l][0] = k[l], + p[l][1] = h[l]); + n > 2 * f && m > 2 * f && (0 < (h[0] & r[0]) && 0 < (k[1] & r[1]) ? (p[0][0] = h[0], p[0][1] = k[0], p[1][0] = k[1], p[1][1] = h[1], q = !0) : 0 < (k[0] & r[0]) && 0 < (h[1] & r[1]) && (p[0] + [0] = k[0], p[0][1] = h[0], p[1][0] = h[1], p[1][1] = k[1], q = !0)); + n > 2 * f && !q && + (p[0][0] = k[0], p[0][1] = h[0], p[1][0] = k[1], p[1][1] = h[1], q = !0); + m > 2 * f && !q && (p[0][0] = h[0], p[0][1] = k[0], p[1][0] = h[1], p[1][1] = k[1]); + for (l = 0; 2 > l; l++) + if (0 == a[l] && (0 == (p[l][0] & r[l]) && (p[l][0] = p[l][1]), c[l] = p[l][0] & r[l], c[l] |= (p[l][1] & r[l]) << 8, c[l] |= (p[1 - l][l] & r[l]) << 16, c[l] |= (p[1 - l][1 - l] & r[l]) << + 24, 0 == (c[l] & 15) && (c[l] <<= 8), 0 == (c[l] & 3840) && (c[l] = c[l] & 15 | c[l] >> 8), 0 == (c[l] & 983040) && (c[l] = c[l] & 65535 | (c[l] & 251658240) >> 8), a[l] = c[l] & 15, + r[l] == mxConstants.DIRECTION_MASK_WEST || r[l] == mxConstants.DIRECTION_MASK_NORTH || r[l] == + mxConstants.DIRECTION_MASK_EAST || r[l] == mxConstants.DIRECTION_MASK_SOUTH)) a[l] = r[l]; + l = a[0] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[0]; + r = a[1] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[1]; + l -= g; + r -= g; + 1 > l && (l += 4); + 1 > r && (r += 4); + r = mxEdgeStyle.routePatterns[l - 1][r - 1]; + mxEdgeStyle.wayPoints1[0][0] = d[0][0]; + mxEdgeStyle.wayPoints1[0][1] = d[0][1]; + switch (a[0]) { + case mxConstants.DIRECTION_MASK_WEST: + mxEdgeStyle.wayPoints1[0][0] -= f; + mxEdgeStyle.wayPoints1[0][1] += b[0][1] * d[0][3]; + break; + case mxConstants.DIRECTION_MASK_SOUTH: + mxEdgeStyle.wayPoints1[0][0] += + b[0][0] * d[0][2]; + mxEdgeStyle.wayPoints1[0][1] += d[0][3] + f; + break; + case mxConstants.DIRECTION_MASK_EAST: + mxEdgeStyle.wayPoints1[0][0] += d[0][2] + f; + mxEdgeStyle.wayPoints1[0][1] += b[0][1] * d[0][3]; + break; + case mxConstants.DIRECTION_MASK_NORTH: + mxEdgeStyle.wayPoints1[0][0] += b[0][0] * d[0][2], mxEdgeStyle.wayPoints1[0][1] -= f + } + f = 0; + h = c = 0 < (a[0] & (mxConstants.DIRECTION_MASK_EAST | mxConstants.DIRECTION_MASK_WEST)) ? 0 : 1; + for (l = k = 0; l < r.length; l++) { + k = r[l] & 15; + s = k == mxConstants.DIRECTION_MASK_EAST ? 3 : k; + s += g; + 4 < s && (s -= 4); + m = mxEdgeStyle.dirVectors[s - + 1]; + k = 0 < s % 2 ? 0 : 1; + k != c && (f++, mxEdgeStyle.wayPoints1[f][0] = mxEdgeStyle.wayPoints1[f - 1][0], mxEdgeStyle.wayPoints1[f][1] = mxEdgeStyle.wayPoints1[f - 1][1]); + var t = 0 < (r[l] & mxEdgeStyle.TARGET_MASK), + q = 0 < (r[l] & mxEdgeStyle.SOURCE_MASK), + n = (r[l] & mxEdgeStyle.SIDE_MASK) >> 5, + n = n << g; + 15 < n && (n >>= 4); + p = 0 < (r[l] & mxEdgeStyle.CENTER_MASK); + (q || t) && 9 > n ? (s = 0, q = q ? 0 : 1, s = p && 0 == k ? d[q][0] + b[q][0] * d[q][2] : p ? d[q][1] + b[q][1] * d[q][3] : mxEdgeStyle.limits[q][n], 0 == k ? (n = (s - mxEdgeStyle.wayPoints1[ + f][0]) * m[0], 0 < n && (mxEdgeStyle.wayPoints1[f][0] += + m[0] * n)) : (n = (s - mxEdgeStyle.wayPoints1[f][1]) * m[1], 0 < n && (mxEdgeStyle.wayPoints1[f][1] += m[1] * n))) : p && (mxEdgeStyle.wayPoints1[f][0] += m[0] * Math.abs(mxEdgeStyle.vertexSeperations[ + s] / 2), mxEdgeStyle.wayPoints1[f][1] += m[1] * Math.abs(mxEdgeStyle.vertexSeperations[s] / 2)); + 0 < f && mxEdgeStyle.wayPoints1[f][k] == mxEdgeStyle.wayPoints1[f - 1][k] ? f-- : c = k + } + for (l = 0; l <= f && !(l == f && ((0 < (a[1] & (mxConstants.DIRECTION_MASK_EAST | mxConstants.DIRECTION_MASK_WEST)) ? 0 : 1) == h ? 0 : 1) != (f + 1) % 2); l++) e.push(new mxPoint( + mxEdgeStyle.wayPoints1[l][0], + mxEdgeStyle.wayPoints1[l][1])) + } + }, + getRoutePattern: function(a, b, c, d) { + var e = a[0] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[0]; + a = a[1] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[1]; + e -= b; + a -= b; + 1 > e && (e += 4); + 1 > a && (a += 4); + b = routePatterns[e - 1][a - 1]; + if (0 == c || 0 == d) null != inlineRoutePatterns[e - 1][a - 1] && (b = inlineRoutePatterns[e - 1][a - 1]); + return b + } + }, + mxStyleRegistry = { + values: [], + putValue: function(a, b) { + mxStyleRegistry.values[a] = b + }, + getValue: function(a) { + return mxStyleRegistry.values[a] + }, + getName: function(a) { + for (var b in mxStyleRegistry.values) + if (mxStyleRegistry.values[b] == + a) return b; + return null + } + }; +mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ELBOW, mxEdgeStyle.ElbowConnector); +mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ENTITY_RELATION, mxEdgeStyle.EntityRelation); +mxStyleRegistry.putValue(mxConstants.EDGESTYLE_LOOP, mxEdgeStyle.Loop); +mxStyleRegistry.putValue(mxConstants.EDGESTYLE_SIDETOSIDE, mxEdgeStyle.SideToSide); +mxStyleRegistry.putValue(mxConstants.EDGESTYLE_TOPTOBOTTOM, mxEdgeStyle.TopToBottom); +mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ORTHOGONAL, mxEdgeStyle.OrthConnector); +mxStyleRegistry.putValue(mxConstants.EDGESTYLE_SEGMENT, mxEdgeStyle.SegmentConnector); +mxStyleRegistry.putValue(mxConstants.PERIMETER_ELLIPSE, mxPerimeter.EllipsePerimeter); +mxStyleRegistry.putValue(mxConstants.PERIMETER_RECTANGLE, mxPerimeter.RectanglePerimeter); +mxStyleRegistry.putValue(mxConstants.PERIMETER_RHOMBUS, mxPerimeter.RhombusPerimeter); +mxStyleRegistry.putValue(mxConstants.PERIMETER_TRIANGLE, mxPerimeter.TrianglePerimeter); + +function mxGraphView(a) { + this.graph = a; + this.translate = new mxPoint; + this.graphBounds = new mxRectangle; + this.states = new mxDictionary +} +mxGraphView.prototype = new mxEventSource; +mxGraphView.prototype.constructor = mxGraphView; +mxGraphView.prototype.EMPTY_POINT = new mxPoint; +mxGraphView.prototype.doneResource = "none" != mxClient.language ? "done" : ""; +mxGraphView.prototype.updatingDocumentResource = "none" != mxClient.language ? "updatingDocument" : ""; +mxGraphView.prototype.allowEval = !1; +mxGraphView.prototype.captureDocumentGesture = !0; +mxGraphView.prototype.optimizeVmlReflows = !0; +mxGraphView.prototype.rendering = !0; +mxGraphView.prototype.graph = null; +mxGraphView.prototype.currentRoot = null; +mxGraphView.prototype.graphBounds = null; +mxGraphView.prototype.scale = 1; +mxGraphView.prototype.translate = null; +mxGraphView.prototype.updateStyle = !1; +mxGraphView.prototype.getGraphBounds = function() { + return this.graphBounds +}; +mxGraphView.prototype.setGraphBounds = function(a) { + this.graphBounds = a +}; +mxGraphView.prototype.getBounds = function(a) { + var b = null; + if (null != a && 0 < a.length) + for (var c = this.graph.getModel(), d = 0; d < a.length; d++) + if (c.isVertex(a[d]) || c.isEdge(a[d])) { + var e = this.getState(a[d]); + null != e && (null == b ? b = new mxRectangle(e.x, e.y, e.width, e.height) : b.add(e)) + } + return b +}; +mxGraphView.prototype.setCurrentRoot = function(a) { + if (this.currentRoot != a) { + var b = new mxCurrentRootChange(this, a); + b.execute(); + var c = new mxUndoableEdit(this, !1); + c.add(b); + this.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", c)); + this.graph.sizeDidChange() + } + return a +}; +mxGraphView.prototype.scaleAndTranslate = function(a, b, c) { + var d = this.scale, + e = new mxPoint(this.translate.x, this.translate.y); + if (this.scale != a || this.translate.x != b || this.translate.y != c) this.scale = a, this.translate.x = b, this.translate.y = c, this.isEventsEnabled() && (this.revalidate(), this.graph.sizeDidChange()); + this.fireEvent(new mxEventObject(mxEvent.SCALE_AND_TRANSLATE, "scale", a, "previousScale", d, "translate", this.translate, "previousTranslate", e)) +}; +mxGraphView.prototype.getScale = function() { + return this.scale +}; +mxGraphView.prototype.setScale = function(a) { + var b = this.scale; + this.scale != a && (this.scale = a, this.isEventsEnabled() && (this.revalidate(), this.graph.sizeDidChange())); + this.fireEvent(new mxEventObject(mxEvent.SCALE, "scale", a, "previousScale", b)) +}; +mxGraphView.prototype.getTranslate = function() { + return this.translate +}; +mxGraphView.prototype.setTranslate = function(a, b) { + var c = new mxPoint(this.translate.x, this.translate.y); + if (this.translate.x != a || this.translate.y != b) this.translate.x = a, this.translate.y = b, this.isEventsEnabled() && (this.revalidate(), this.graph.sizeDidChange()); + this.fireEvent(new mxEventObject(mxEvent.TRANSLATE, "translate", this.translate, "previousTranslate", c)) +}; +mxGraphView.prototype.refresh = function() { + null != this.currentRoot && this.clear(); + this.revalidate() +}; +mxGraphView.prototype.revalidate = function() { + this.invalidate(); + this.validate() +}; +mxGraphView.prototype.clear = function(a, b, c) { + var d = this.graph.getModel(); + a = a || d.getRoot(); + b = null != b ? b : !1; + c = null != c ? c : !0; + this.removeState(a); + if (c && (b || a != this.currentRoot)) { + c = d.getChildCount(a); + for (var e = 0; e < c; e++) this.clear(d.getChildAt(a, e), b) + } else this.invalidate(a) +}; +mxGraphView.prototype.invalidate = function(a, b, c, d) { + var e = this.graph.getModel(); + a = a || e.getRoot(); + b = null != b ? b : !0; + c = null != c ? c : !0; + d = null != d ? d : !1; + var f = this.getState(a); + null != f && (f.invalid = !0, d && (f.orderChanged = !0)); + if (b) + for (var g = e.getChildCount(a), f = 0; f < g; f++) { + var h = e.getChildAt(a, f); + this.invalidate(h, b, c, d) + } + if (c) { + d = e.getEdgeCount(a); + for (f = 0; f < d; f++) this.invalidate(e.getEdgeAt(a, f), b, c) + } +}; +mxGraphView.prototype.validate = function(a) { + var b = mxLog.enter("mxGraphView.validate"); + window.status = mxResources.get(this.updatingDocumentResource) || this.updatingDocumentResource; + var c = null; + if (this.optimizeVmlReflows && null != this.canvas && null == this.textDiv && (8 == document.documentMode || mxClient.IS_QUIRKS)) { + c = this.canvas.style.display; + this.canvas.style.display = "none"; + var d = document.createElement("div"); + d.style.position = "absolute"; + d.style.whiteSpace = "nowrap"; + d.style.visibility = "hidden"; + d.style.display = mxClient.IS_QUIRKS ? + "inline" : "inline-block"; + d.style.zoom = "1"; + document.body.appendChild(d); + this.textDiv = d + } + a = a || (null != this.currentRoot ? this.currentRoot : this.graph.getModel().getRoot()); + this.validateBounds(null, a); + a = this.validatePoints(null, a); + null == a && (a = new mxRectangle); + this.setGraphBounds(a); + this.validateBackground(); + null != c && (this.canvas.style.display = c, document.body.removeChild(this.textDiv), this.textDiv = null); + window.status = mxResources.get(this.doneResource) || this.doneResource; + mxLog.leave("mxGraphView.validate", b) +}; +mxGraphView.prototype.createBackgroundPageShape = function(a) { + return new mxRectangleShape(a, "white", "black") +}; +mxGraphView.prototype.validateBackground = function() { + var a = this.graph.getBackgroundImage(); + if (null != a) { + if (null == this.backgroundImage || this.backgroundImage.image != a.src) { + null != this.backgroundImage && this.backgroundImage.destroy(); + var b = new mxRectangle(0, 0, 1, 1); + this.backgroundImage = new mxImageShape(b, a.src); + this.backgroundImage.dialect = this.graph.dialect; + this.backgroundImage.init(this.backgroundPane); + this.backgroundImage.redraw() + } + this.redrawBackgroundImage(this.backgroundImage, a) + } else null != this.backgroundImage && + (this.backgroundImage.destroy(), this.backgroundImage = null); + this.graph.pageVisible ? (b = this.getBackgroundPageBounds(), null == this.backgroundPageShape ? (this.backgroundPageShape = this.createBackgroundPageShape(b), this.backgroundPageShape.scale = + this.scale, this.backgroundPageShape.isShadow = !0, this.backgroundPageShape.dialect = this.graph.dialect, this.backgroundPageShape.init(this.backgroundPane), this.backgroundPageShape.redraw(), + mxEvent.addListener(this.backgroundPageShape.node, "dblclick", mxUtils.bind(this, + function(a) { + this.graph.dblClick(a) + })), mxEvent.addGestureListeners(this.backgroundPageShape.node, mxUtils.bind(this, function(a) { + this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a)) + }), mxUtils.bind(this, function(a) { + null != this.graph.tooltipHandler && this.graph.tooltipHandler.isHideOnHover() && this.graph.tooltipHandler.hide(); + this.graph.isMouseDown && !mxEvent.isConsumed(a) && this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(a)) + }), mxUtils.bind(this, function(a) { + this.graph.fireMouseEvent(mxEvent.MOUSE_UP, + new mxMouseEvent(a)) + }))) : (this.backgroundPageShape.scale = this.scale, this.backgroundPageShape.bounds = b, this.backgroundPageShape.redraw())) : null != this.backgroundPageShape && (this.backgroundPageShape.destroy(), + this.backgroundPageShape = null) +}; +mxGraphView.prototype.getBackgroundPageBounds = function() { + var a = this.graph.pageFormat, + b = this.scale * this.graph.pageScale; + return new mxRectangle(this.scale * this.translate.x, this.scale * this.translate.y, a.width * b, a.height * b) +}; +mxGraphView.prototype.redrawBackgroundImage = function(a, b) { + a.scale = this.scale; + a.bounds.x = this.scale * this.translate.x; + a.bounds.y = this.scale * this.translate.y; + a.bounds.width = this.scale * b.width; + a.bounds.height = this.scale * b.height; + a.redraw() +}; +mxGraphView.prototype.validateBounds = function(a, b) { + var c = this.graph.getModel(), + d = this.getState(b, !0); + if (null != d && d.invalid) { + if (this.graph.isCellVisible(b)) { + if (b != this.currentRoot && null != a) { + d.absoluteOffset.x = 0; + d.absoluteOffset.y = 0; + d.origin.x = a.origin.x; + d.origin.y = a.origin.y; + var e = this.graph.getCellGeometry(b); + if (null != e) { + if (!c.isEdge(b)) { + var f = e.offset || this.EMPTY_POINT; + e.relative ? (d.origin.x += e.x * a.width / this.scale + f.x, d.origin.y += e.y * a.height / this.scale + f.y) : (d.absoluteOffset.x = this.scale * f.x, d.absoluteOffset.y = + this.scale * f.y, d.origin.x += e.x, d.origin.y += e.y) + } + d.x = this.scale * (this.translate.x + d.origin.x); + d.y = this.scale * (this.translate.y + d.origin.y); + d.width = this.scale * e.width; + d.height = this.scale * e.height; + if (c.isVertex(b)) { + if (e.relative && (f = mxUtils.toRadians(a.style[mxConstants.STYLE_ROTATION] || "0"), 0 != f)) { + var e = Math.cos(f), + f = Math.sin(f), + g = new mxPoint(d.getCenterX(), d.getCenterY()), + h = new mxPoint(a.getCenterX(), a.getCenterY()), + e = mxUtils.getRotatedPoint(g, e, f, h); + d.x = e.x - d.width / 2; + d.y = e.y - d.height / 2 + } + this.updateVertexLabelOffset(d) + } + } + } + } else this.removeState(b); + f = this.graph.getChildOffsetForCell(b); + null != f && (d.origin.x += f.x, d.origin.y += f.y) + } + if (null != d && (!this.graph.isCellCollapsed(b) || b == this.currentRoot)) { + e = c.getChildCount(b); + for (f = 0; f < e; f++) g = c.getChildAt(b, f), this.validateBounds(d, g) + } +}; +mxGraphView.prototype.updateVertexLabelOffset = function(a) { + var b = mxUtils.getValue(a.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER); + b == mxConstants.ALIGN_LEFT ? a.absoluteOffset.x -= a.width : b == mxConstants.ALIGN_RIGHT && (a.absoluteOffset.x += a.width); + b = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE); + b == mxConstants.ALIGN_TOP ? a.absoluteOffset.y -= a.height : b == mxConstants.ALIGN_BOTTOM && (a.absoluteOffset.y += a.height) +}; +mxGraphView.prototype.validatePoints = function(a, b) { + var c = this.graph.getModel(), + d = this.getState(b), + e = null; + if (null != d) { + if (d.invalid) { + var f = this.graph.getCellGeometry(b); + if (null != f && c.isEdge(b)) { + var g = this.getState(this.getVisibleTerminal(b, !0)); + d.setVisibleTerminalState(g, !0); + if (null != g && c.isEdge(g.cell) && !c.isAncestor(g.cell, b)) { + var h = this.getState(c.getParent(g.cell)); + this.validatePoints(h, g.cell) + } + var k = this.getState(this.getVisibleTerminal(b, !1)); + d.setVisibleTerminalState(k, !1); + null != k && (c.isEdge(k.cell) && + !c.isAncestor(k.cell, b)) && (h = this.getState(c.getParent(k.cell)), this.validatePoints(h, k.cell)); + this.updateFixedTerminalPoints(d, g, k); + this.updatePoints(d, f.points, g, k); + this.updateFloatingTerminalPoints(d, g, k); + this.updateEdgeBounds(d); + this.updateEdgeLabelOffset(d) + } else null != f && (f.relative && null != a && c.isEdge(a.cell)) && (f = this.getPoint(a, f), null != f && (d.x = f.x, d.y = f.y, f.x = f.x / this.scale - this.translate.x, f.y = f.y / this.scale - + this.translate.y, d.origin = f, this.childMoved(a, d))); + d.invalid = !1; + b != this.currentRoot && + this.graph.cellRenderer.redraw(d, !1, this.isRendering()) + } + if (c.isEdge(b) || c.isVertex(b)) null != d.shape && null != d.shape.boundingBox && (e = d.shape.boundingBox.clone()), null != d.text && !this.graph.isLabelClipped(d.cell) && null != d.text.boundingBox && + (null != e ? e.add(d.text.boundingBox) : e = d.text.boundingBox.clone()) + } + if (null != d && (!this.graph.isCellCollapsed(b) || b == this.currentRoot)) { + f = c.getChildCount(b); + for (g = 0; g < f; g++) h = c.getChildAt(b, g), h = this.validatePoints(d, h), null != h && (null == e ? e = h : e.add(h)) + } + return e +}; +mxGraphView.prototype.childMoved = function(a, b) { + var c = b.cell; + if (!this.graph.isCellCollapsed(c) || c == this.currentRoot) + for (var d = this.graph.getModel(), e = d.getChildCount(c), f = 0; f < e; f++) this.validateBounds(b, d.getChildAt(c, f)) +}; +mxGraphView.prototype.updateFixedTerminalPoints = function(a, b, c) { + this.updateFixedTerminalPoint(a, b, !0, this.graph.getConnectionConstraint(a, b, !0)); + this.updateFixedTerminalPoint(a, c, !1, this.graph.getConnectionConstraint(a, c, !1)) +}; +mxGraphView.prototype.updateFixedTerminalPoint = function(a, b, c, d) { + var e = null; + null != d && (e = this.graph.getConnectionPoint(b, d)); + if (null == e && null == b) { + b = this.scale; + d = this.translate; + var f = a.origin, + e = this.graph.getCellGeometry(a.cell).getTerminalPoint(c); + null != e && (e = new mxPoint(b * (d.x + e.x + f.x), b * (d.y + e.y + f.y))) + } + a.setAbsoluteTerminalPoint(e, c) +}; +mxGraphView.prototype.updatePoints = function(a, b, c, d) { + if (null != a) { + var e = []; + e.push(a.absolutePoints[0]); + var f = this.getEdgeStyle(a, b, c, d); + if (null != f) c = this.getTerminalPort(a, c, !0), d = this.getTerminalPort(a, d, !1), f(a, c, d, b, e); + else if (null != b) + for (f = 0; f < b.length; f++) null != b[f] && (d = mxUtils.clone(b[f]), e.push(this.transformControlPoint(a, d))); + b = a.absolutePoints; + e.push(b[b.length - 1]); + a.absolutePoints = e + } +}; +mxGraphView.prototype.transformControlPoint = function(a, b) { + var c = a.origin; + return new mxPoint(this.scale * (b.x + this.translate.x + c.x), this.scale * (b.y + this.translate.y + c.y)) +}; +mxGraphView.prototype.getEdgeStyle = function(a, b, c, d) { + a = null != c && c == d ? mxUtils.getValue(a.style, mxConstants.STYLE_LOOP, this.graph.defaultLoopStyle) : !mxUtils.getValue(a.style, mxConstants.STYLE_NOEDGESTYLE, !1) ? a.style[mxConstants.STYLE_EDGE] : + null; + "string" == typeof a && (b = mxStyleRegistry.getValue(a), null == b && this.isAllowEval() && (b = mxUtils.eval(a)), a = b); + return "function" == typeof a ? a : null +}; +mxGraphView.prototype.updateFloatingTerminalPoints = function(a, b, c) { + var d = a.absolutePoints, + e = d[0]; + null == d[d.length - 1] && null != c && this.updateFloatingTerminalPoint(a, c, b, !1); + null == e && null != b && this.updateFloatingTerminalPoint(a, b, c, !0) +}; +mxGraphView.prototype.updateFloatingTerminalPoint = function(a, b, c, d) { + b = this.getTerminalPort(a, b, d); + var e = this.getNextPoint(a, c, d), + f = this.graph.isOrthogonal(a); + c = mxUtils.toRadians(Number(b.style[mxConstants.STYLE_ROTATION] || "0")); + var g = new mxPoint(b.getCenterX(), b.getCenterY()); + if (0 != c) var h = Math.cos(-c), + k = Math.sin(-c), + e = mxUtils.getRotatedPoint(e, h, k, g); + h = parseFloat(a.style[mxConstants.STYLE_PERIMETER_SPACING] || 0); + h += parseFloat(a.style[d ? mxConstants.STYLE_SOURCE_PERIMETER_SPACING : mxConstants.STYLE_TARGET_PERIMETER_SPACING] || + 0); + b = this.getPerimeterPoint(b, e, 0 == c && f, h); + 0 != c && (h = Math.cos(c), k = Math.sin(c), b = mxUtils.getRotatedPoint(b, h, k, g)); + a.setAbsoluteTerminalPoint(b, d) +}; +mxGraphView.prototype.getTerminalPort = function(a, b, c) { + a = mxUtils.getValue(a.style, c ? mxConstants.STYLE_SOURCE_PORT : mxConstants.STYLE_TARGET_PORT); + null != a && (a = this.getState(this.graph.getModel().getCell(a)), null != a && (b = a)); + return b +}; +mxGraphView.prototype.getPerimeterPoint = function(a, b, c, d) { + var e = null; + if (null != a) { + var f = this.getPerimeterFunction(a); + if (null != f && null != b && (d = this.getPerimeterBounds(a, d), 0 < d.width || 0 < d.height)) e = f(d, a, b, c); + null == e && (e = this.getPoint(a)) + } + return e +}; +mxGraphView.prototype.getRoutingCenterX = function(a) { + var b = null != a.style ? parseFloat(a.style[mxConstants.STYLE_ROUTING_CENTER_X]) || 0 : 0; + return a.getCenterX() + b * a.width +}; +mxGraphView.prototype.getRoutingCenterY = function(a) { + var b = null != a.style ? parseFloat(a.style[mxConstants.STYLE_ROUTING_CENTER_Y]) || 0 : 0; + return a.getCenterY() + b * a.height +}; +mxGraphView.prototype.getPerimeterBounds = function(a, b) { + b = null != b ? b : 0; + null != a && (b += parseFloat(a.style[mxConstants.STYLE_PERIMETER_SPACING] || 0)); + return a.getPerimeterBounds(b * this.scale) +}; +mxGraphView.prototype.getPerimeterFunction = function(a) { + a = a.style[mxConstants.STYLE_PERIMETER]; + if ("string" == typeof a) { + var b = mxStyleRegistry.getValue(a); + null == b && this.isAllowEval() && (b = mxUtils.eval(a)); + a = b + } + return "function" == typeof a ? a : null +}; +mxGraphView.prototype.getNextPoint = function(a, b, c) { + a = a.absolutePoints; + var d = null; + if (null != a && (c || 2 < a.length || null == b)) d = a.length, d = a[c ? Math.min(1, d - 1) : Math.max(0, d - 2)]; + null == d && null != b && (d = new mxPoint(b.getCenterX(), b.getCenterY())); + return d +}; +mxGraphView.prototype.getVisibleTerminal = function(a, b) { + for (var c = this.graph.getModel(), d = c.getTerminal(a, b), e = d; null != d && d != this.currentRoot;) { + if (!this.graph.isCellVisible(e) || this.graph.isCellCollapsed(d)) e = d; + d = c.getParent(d) + } + c.getParent(e) == c.getRoot() && (e = null); + return e +}; +mxGraphView.prototype.updateEdgeBounds = function(a) { + var b = a.absolutePoints; + a.length = 0; + if (null != b && 0 < b.length) { + var c = b[0], + d = b[b.length - 1]; + if (null == c || null == d) a.cell != this.currentRoot && this.clear(a.cell, !0); + else { + if (c.x != d.x || c.y != d.y) { + var e = d.x - c.x, + f = d.y - c.y; + a.terminalDistance = Math.sqrt(e * e + f * f) + } else a.terminalDistance = 0; + var d = 0, + g = [], + f = c; + if (null != f) { + for (var c = f.x, h = f.y, k = c, l = h, m = 1; m < b.length; m++) { + var n = b[m]; + null != n && (e = f.x - n.x, f = f.y - n.y, e = Math.sqrt(e * e + f * f), g.push(e), d += e, f = n, c = Math.min(f.x, c), h = Math.min(f.y, + h), k = Math.max(f.x, k), l = Math.max(f.y, l)) + } + a.length = d; + a.segments = g; + a.x = c; + a.y = h; + a.width = Math.max(1, k - c); + a.height = Math.max(1, l - h) + } + } + } +}; +mxGraphView.prototype.getPoint = function(a, b) { + var c = a.getCenterX(), + d = a.getCenterY(); + if (null != a.segments && (null == b || b.relative)) { + for (var e = a.absolutePoints.length, f = ((null != b ? b.x / 2 : 0) + 0.5) * a.length, g = a.segments[0], h = 0, k = 1; f > h + g && k < e - 1;) h += g, g = a.segments[k++]; + e = 0 == g ? 0 : (f - h) / g; + f = a.absolutePoints[k - 1]; + k = a.absolutePoints[k]; + if (null != f && null != k) { + h = c = d = 0; + if (null != b) { + var d = b.y, + l = b.offset; + null != l && (c = l.x, h = l.y) + } + l = k.x - f.x; + k = k.y - f.y; + c = f.x + l * e + ((0 == g ? 0 : k / g) * d + c) * this.scale; + d = f.y + k * e - ((0 == g ? 0 : l / g) * d - h) * this.scale + } + } else null != + b && (l = b.offset, null != l && (c += l.x, d += l.y)); + return new mxPoint(c, d) +}; +mxGraphView.prototype.getRelativePoint = function(a, b, c) { + var d = this.graph.getModel().getGeometry(a.cell); + if (null != d) { + var e = a.absolutePoints.length; + if (d.relative && 1 < e) { + for (var d = a.length, f = a.segments, g = a.absolutePoints[0], h = a.absolutePoints[1], k = mxUtils.ptSegDistSq(g.x, g.y, h.x, h.y, b, c), l = 0, m = 0, n = 0, p = 2; p < e; p++) m += f[p - + 2], h = a.absolutePoints[p], g = mxUtils.ptSegDistSq(g.x, g.y, h.x, h.y, b, c), g <= k && (k = g, l = p - 1, n = m), g = h; + e = f[l]; + g = a.absolutePoints[l]; + h = a.absolutePoints[l + 1]; + k = h.x; + f = h.y; + a = g.x - k; + l = g.y - f; + k = b - k; + f = c - f; + k = a - k; + f = l - f; + f = k * a + f * l; + a = Math.sqrt(0 >= f ? 0 : f * f / (a * a + l * l)); + a > e && (a = e); + e = Math.sqrt(mxUtils.ptSegDistSq(g.x, g.y, h.x, h.y, b, c)); - 1 == mxUtils.relativeCcw(g.x, g.y, h.x, h.y, b, c) && (e = -e); + return new mxPoint(-2 * ((d / 2 - n - a) / d), e / this.scale) + } + } + return new mxPoint +}; +mxGraphView.prototype.updateEdgeLabelOffset = function(a) { + var b = a.absolutePoints; + a.absoluteOffset.x = a.getCenterX(); + a.absoluteOffset.y = a.getCenterY(); + if (null != b && 0 < b.length && null != a.segments) { + var c = this.graph.getCellGeometry(a.cell); + if (c.relative) { + var d = this.getPoint(a, c); + null != d && (a.absoluteOffset = d) + } else { + var d = b[0], + e = b[b.length - 1]; + if (null != d && null != e) { + var b = e.x - d.x, + f = e.y - d.y, + g = e = 0, + c = c.offset; + null != c && (e = c.x, g = c.y); + c = d.y + f / 2 + g * this.scale; + a.absoluteOffset.x = d.x + b / 2 + e * this.scale; + a.absoluteOffset.y = c + } + } + } +}; +mxGraphView.prototype.getState = function(a, b) { + b = b || !1; + var c = null; + null != a && (c = this.states.get(a), this.graph.isCellVisible(a) && (null == c && b && this.graph.isCellVisible(a) ? (c = this.createState(a), this.states.put(a, c)) : b && (null != c && this.updateStyle) && + (c.style = this.graph.getCellStyle(a)))); + return c +}; +mxGraphView.prototype.isRendering = function() { + return this.rendering +}; +mxGraphView.prototype.setRendering = function(a) { + this.rendering = a +}; +mxGraphView.prototype.isAllowEval = function() { + return this.allowEval +}; +mxGraphView.prototype.setAllowEval = function(a) { + this.allowEval = a +}; +mxGraphView.prototype.getStates = function() { + return this.states +}; +mxGraphView.prototype.setStates = function(a) { + this.states = a +}; +mxGraphView.prototype.getCellStates = function(a) { + if (null == a) return this.states; + for (var b = [], c = 0; c < a.length; c++) { + var d = this.getState(a[c]); + null != d && b.push(d) + } + return b +}; +mxGraphView.prototype.removeState = function(a) { + var b = null; + null != a && (b = this.states.remove(a), null != b && (this.graph.cellRenderer.destroy(b), b.destroy())); + return b +}; +mxGraphView.prototype.createState = function(a) { + var b = this.graph.getCellStyle(a); + a = new mxCellState(this, a, b); + this.graph.cellRenderer.initialize(a, this.isRendering()); + return a +}; +mxGraphView.prototype.getCanvas = function() { + return this.canvas +}; +mxGraphView.prototype.getBackgroundPane = function() { + return this.backgroundPane +}; +mxGraphView.prototype.getDrawPane = function() { + return this.drawPane +}; +mxGraphView.prototype.getOverlayPane = function() { + return this.overlayPane +}; +mxGraphView.prototype.isContainerEvent = function(a) { + a = mxEvent.getSource(a); + return a == this.graph.container || a.parentNode == this.backgroundPane || null != a.parentNode && a.parentNode.parentNode == this.backgroundPane || a == this.canvas.parentNode || a == this.canvas || + a == this.backgroundPane || a == this.drawPane || a == this.overlayPane +}; +mxGraphView.prototype.isScrollEvent = function(a) { + var b = mxUtils.getOffset(this.graph.container); + a = new mxPoint(a.clientX - b.x, a.clientY - b.y); + var b = this.graph.container.offsetWidth, + c = this.graph.container.clientWidth; + if (b > c && a.x > c + 2 && a.x <= b) return !0; + b = this.graph.container.offsetHeight; + c = this.graph.container.clientHeight; + return b > c && a.y > c + 2 && a.y <= b ? !0 : !1 +}; +mxGraphView.prototype.init = function() { + this.installListeners(); + var a = this.graph; + a.dialect == mxConstants.DIALECT_SVG ? this.createSvg() : a.dialect == mxConstants.DIALECT_VML ? this.createVml() : this.createHtml() +}; +mxGraphView.prototype.installListeners = function() { + var a = this.graph, + b = a.container; + if (null != b) { + mxEvent.addGestureListeners(b, mxUtils.bind(this, function(b) { + mxClient.IS_TOUCH && a.isEditing() && a.stopEditing(!a.isInvokesStopCellEditing()); + this.isContainerEvent(b) && (!mxClient.IS_IE && !mxClient.IS_GC && !mxClient.IS_OP && !mxClient.IS_SF || !this.isScrollEvent(b)) && a.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent( + b)) + }), mxUtils.bind(this, function(b) { + this.isContainerEvent(b) && a.fireMouseEvent(mxEvent.MOUSE_MOVE, + new mxMouseEvent(b)) + }), mxUtils.bind(this, function(b) { + this.isContainerEvent(b) && a.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(b)) + })); + mxEvent.addListener(b, "dblclick", mxUtils.bind(this, function(b) { + a.dblClick(b) + })); + var c = function(c) { + var e = null; + mxClient.IS_TOUCH && (e = mxEvent.getClientX(c), c = mxEvent.getClientY(c), c = mxUtils.convertPoint(b, e, c), e = a.view.getState(a.getCellAt(c.x, c.y))); + return e + }; + a.addMouseListener({ + mouseDown: function(b, c) { + a.panningHandler.hideMenu() + }, + mouseMove: function() {}, + mouseUp: function() {} + }); + this.moveHandler = mxUtils.bind(this, function(b) { + null != a.tooltipHandler && a.tooltipHandler.isHideOnHover() && a.tooltipHandler.hide(); + this.captureDocumentGesture && (a.isMouseDown && !mxEvent.isConsumed(b)) && a.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(b, c(b))) + }); + this.endHandler = mxUtils.bind(this, function(b) { + this.captureDocumentGesture && a.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(b)) + }); + mxEvent.addGestureListeners(document, null, this.moveHandler, this.endHandler) + } +}; +mxGraphView.prototype.createHtml = function() { + var a = this.graph.container; + null != a && (this.canvas = this.createHtmlPane("100%", "100%"), this.backgroundPane = this.createHtmlPane("1px", "1px"), this.drawPane = this.createHtmlPane("1px", "1px"), this.overlayPane = + this.createHtmlPane("1px", "1px"), this.canvas.appendChild(this.backgroundPane), this.canvas.appendChild(this.drawPane), this.canvas.appendChild(this.overlayPane), a.appendChild(this.canvas), + mxClient.IS_QUIRKS && (a = mxUtils.bind(this, function(a) { + a = this.getGraphBounds(); + this.updateHtmlCanvasSize(a.x + a.width + this.graph.border, a.y + a.height + this.graph.border) + }), mxEvent.addListener(window, "resize", a))) +}; +mxGraphView.prototype.updateHtmlCanvasSize = function(a, b) { + if (null != this.graph.container) { + var c = this.graph.container.offsetHeight; + this.canvas.style.width = this.graph.container.offsetWidth < a ? a + "px" : "100%"; + this.canvas.style.height = c < b ? b + "px" : "100%" + } +}; +mxGraphView.prototype.createHtmlPane = function(a, b) { + var c = document.createElement("DIV"); + null != a && null != b ? (c.style.position = "absolute", c.style.left = "0px", c.style.top = "0px", c.style.width = a, c.style.height = b) : c.style.position = "relative"; + return c +}; +mxGraphView.prototype.createVml = function() { + var a = this.graph.container; + if (null != a) { + var b = a.offsetWidth, + c = a.offsetHeight; + this.canvas = this.createVmlPane(b, c); + this.backgroundPane = this.createVmlPane(b, c); + this.drawPane = this.createVmlPane(b, c); + this.overlayPane = this.createVmlPane(b, c); + this.canvas.appendChild(this.backgroundPane); + this.canvas.appendChild(this.drawPane); + this.canvas.appendChild(this.overlayPane); + a.appendChild(this.canvas) + } +}; +mxGraphView.prototype.createVmlPane = function(a, b) { + var c = document.createElement(mxClient.VML_PREFIX + ":group"); + c.style.position = "absolute"; + c.style.left = "0px"; + c.style.top = "0px"; + c.style.width = a + "px"; + c.style.height = b + "px"; + c.setAttribute("coordsize", a + "," + b); + c.setAttribute("coordorigin", "0,0"); + return c +}; +mxGraphView.prototype.createSvg = function() { + var a = this.graph.container; + this.canvas = document.createElementNS(mxConstants.NS_SVG, "g"); + this.backgroundPane = document.createElementNS(mxConstants.NS_SVG, "g"); + this.canvas.appendChild(this.backgroundPane); + this.drawPane = document.createElementNS(mxConstants.NS_SVG, "g"); + this.canvas.appendChild(this.drawPane); + this.overlayPane = document.createElementNS(mxConstants.NS_SVG, "g"); + this.canvas.appendChild(this.overlayPane); + var b = document.createElementNS(mxConstants.NS_SVG, + "svg"); + b.style.width = "100%"; + b.style.height = "100%"; + b.style.display = "block"; + b.appendChild(this.canvas); + null != a && (a.appendChild(b), "static" == mxUtils.getCurrentStyle(a).position && (a.style.position = "relative")) +}; +mxGraphView.prototype.destroy = function() { + var a = null != this.canvas ? this.canvas.ownerSVGElement : null; + null == a && (a = this.canvas); + null != a && null != a.parentNode && (this.clear(this.currentRoot, !0), mxEvent.removeGestureListeners(document, null, this.moveHandler, this.endHandler), mxEvent.release(this.graph.container), a + .parentNode.removeChild(a), this.overlayPane = this.drawPane = this.backgroundPane = this.canvas = this.endHandler = this.moveHandler = null) +}; + +function mxCurrentRootChange(a, b) { + this.view = a; + this.previous = this.root = b; + this.isUp = null == b; + if (!this.isUp) + for (var c = this.view.currentRoot, d = this.view.graph.getModel(); null != c;) { + if (c == b) { + this.isUp = !0; + break + } + c = d.getParent(c) + } +} +mxCurrentRootChange.prototype.execute = function() { + var a = this.view.currentRoot; + this.view.currentRoot = this.previous; + this.previous = a; + a = this.view.graph.getTranslateForRoot(this.view.currentRoot); + null != a && (this.view.translate = new mxPoint(-a.x, -a.y)); + this.view.fireEvent(new mxEventObject(this.isUp ? mxEvent.UP : mxEvent.DOWN, "root", this.view.currentRoot, "previous", this.previous)); + this.isUp ? (this.view.clear(this.view.currentRoot, !0), this.view.validate()) : this.view.refresh(); + this.isUp = !this.isUp +}; + +function mxGraph(a, b, c, d) { + this.mouseListeners = null; + this.renderHint = c; + this.dialect = mxClient.IS_SVG ? mxConstants.DIALECT_SVG : c == mxConstants.RENDERING_HINT_EXACT && mxClient.IS_VML ? mxConstants.DIALECT_VML : c == mxConstants.RENDERING_HINT_FASTEST ? mxConstants + .DIALECT_STRICTHTML : c == mxConstants.RENDERING_HINT_FASTER ? mxConstants.DIALECT_PREFERHTML : mxConstants.DIALECT_MIXEDHTML; + this.model = null != b ? b : new mxGraphModel; + this.multiplicities = []; + this.imageBundles = []; + this.cellRenderer = this.createCellRenderer(); + this.setSelectionModel(this.createSelectionModel()); + this.setStylesheet(null != d ? d : this.createStylesheet()); + this.view = this.createGraphView(); + this.graphModelChangeListener = mxUtils.bind(this, function(a, b) { + this.graphModelChanged(b.getProperty("edit").changes) + }); + this.model.addListener(mxEvent.CHANGE, this.graphModelChangeListener); + this.createHandlers(); + null != a && this.init(a); + this.view.revalidate() +} +mxLoadResources && mxResources.add(mxClient.basePath + "/resources/graph"); +mxGraph.prototype = new mxEventSource; +mxGraph.prototype.constructor = mxGraph; +mxGraph.prototype.EMPTY_ARRAY = []; +mxGraph.prototype.mouseListeners = null; +mxGraph.prototype.isMouseDown = !1; +mxGraph.prototype.model = null; +mxGraph.prototype.view = null; +mxGraph.prototype.stylesheet = null; +mxGraph.prototype.selectionModel = null; +mxGraph.prototype.cellEditor = null; +mxGraph.prototype.cellRenderer = null; +mxGraph.prototype.multiplicities = null; +mxGraph.prototype.renderHint = null; +mxGraph.prototype.dialect = null; +mxGraph.prototype.gridSize = 10; +mxGraph.prototype.gridEnabled = !0; +mxGraph.prototype.portsEnabled = !0; +mxGraph.prototype.doubleTapEnabled = !0; +mxGraph.prototype.doubleTapTimeout = 700; +mxGraph.prototype.doubleTapTolerance = 25; +mxGraph.prototype.lastTouchY = 0; +mxGraph.prototype.lastTouchY = 0; +mxGraph.prototype.lastTouchTime = 0; +mxGraph.prototype.gestureEnabled = !0; +mxGraph.prototype.tolerance = 4; +mxGraph.prototype.defaultOverlap = 0.5; +mxGraph.prototype.defaultParent = null; +mxGraph.prototype.alternateEdgeStyle = null; +mxGraph.prototype.backgroundImage = null; +mxGraph.prototype.pageVisible = !1; +mxGraph.prototype.pageBreaksVisible = !1; +mxGraph.prototype.pageBreakColor = "gray"; +mxGraph.prototype.pageBreakDashed = !0; +mxGraph.prototype.minPageBreakDist = 20; +mxGraph.prototype.preferPageSize = !1; +mxGraph.prototype.pageFormat = mxConstants.PAGE_FORMAT_A4_PORTRAIT; +mxGraph.prototype.pageScale = 1.5; +mxGraph.prototype.enabled = !0; +mxGraph.prototype.escapeEnabled = !0; +mxGraph.prototype.invokesStopCellEditing = !0; +mxGraph.prototype.enterStopsCellEditing = !1; +mxGraph.prototype.useScrollbarsForPanning = !0; +mxGraph.prototype.exportEnabled = !0; +mxGraph.prototype.importEnabled = !0; +mxGraph.prototype.cellsLocked = !1; +mxGraph.prototype.cellsCloneable = !0; +mxGraph.prototype.foldingEnabled = !0; +mxGraph.prototype.cellsEditable = !0; +mxGraph.prototype.cellsDeletable = !0; +mxGraph.prototype.cellsMovable = !0; +mxGraph.prototype.edgeLabelsMovable = !0; +mxGraph.prototype.vertexLabelsMovable = !1; +mxGraph.prototype.dropEnabled = !1; +mxGraph.prototype.splitEnabled = !0; +mxGraph.prototype.cellsResizable = !0; +mxGraph.prototype.cellsBendable = !0; +mxGraph.prototype.cellsSelectable = !0; +mxGraph.prototype.cellsDisconnectable = !0; +mxGraph.prototype.autoSizeCells = !1; +mxGraph.prototype.autoScroll = !0; +mxGraph.prototype.timerAutoScroll = !1; +mxGraph.prototype.allowAutoPanning = !1; +mxGraph.prototype.ignoreScrollbars = !1; +mxGraph.prototype.autoExtend = !0; +mxGraph.prototype.maximumGraphBounds = null; +mxGraph.prototype.minimumGraphSize = null; +mxGraph.prototype.minimumContainerSize = null; +mxGraph.prototype.maximumContainerSize = null; +mxGraph.prototype.resizeContainer = !1; +mxGraph.prototype.border = 0; +mxGraph.prototype.ordered = !0; +mxGraph.prototype.keepEdgesInForeground = !1; +mxGraph.prototype.keepEdgesInBackground = !0; +mxGraph.prototype.allowNegativeCoordinates = !0; +mxGraph.prototype.constrainChildren = !0; +mxGraph.prototype.extendParents = !0; +mxGraph.prototype.extendParentsOnAdd = !0; +mxGraph.prototype.collapseToPreferredSize = !0; +mxGraph.prototype.zoomFactor = 1.2; +mxGraph.prototype.keepSelectionVisibleOnZoom = !1; +mxGraph.prototype.centerZoom = !0; +mxGraph.prototype.resetViewOnRootChange = !0; +mxGraph.prototype.resetEdgesOnResize = !1; +mxGraph.prototype.resetEdgesOnMove = !1; +mxGraph.prototype.resetEdgesOnConnect = !0; +mxGraph.prototype.allowLoops = !1; +mxGraph.prototype.defaultLoopStyle = mxEdgeStyle.Loop; +mxGraph.prototype.multigraph = !0; +mxGraph.prototype.connectableEdges = !1; +mxGraph.prototype.allowDanglingEdges = !0; +mxGraph.prototype.cloneInvalidEdges = !1; +mxGraph.prototype.disconnectOnMove = !0; +mxGraph.prototype.labelsVisible = !0; +mxGraph.prototype.htmlLabels = !1; +mxGraph.prototype.swimlaneSelectionEnabled = !0; +mxGraph.prototype.swimlaneNesting = !0; +mxGraph.prototype.swimlaneIndicatorColorAttribute = mxConstants.STYLE_FILLCOLOR; +mxGraph.prototype.imageBundles = null; +mxGraph.prototype.minFitScale = 0.1; +mxGraph.prototype.maxFitScale = 8; +mxGraph.prototype.panDx = 0; +mxGraph.prototype.panDy = 0; +mxGraph.prototype.collapsedImage = new mxImage(mxClient.imageBasePath + "/collapsed.gif", 9, 9); +mxGraph.prototype.expandedImage = new mxImage(mxClient.imageBasePath + "/expanded.gif", 9, 9); +// mxGraph.prototype.warningImage = new mxImage(mxClient.imageBasePath + "/warning" + (mxClient.IS_MAC ? ".png" : ".gif"), 16, 16); +mxGraph.prototype.warningImage = new mxImage("/assets/plugins/mxgraph/images/warning.gif", 16, 16); + + +mxGraph.prototype.alreadyConnectedResource = "none" != mxClient.language ? "alreadyConnected" : ""; +mxGraph.prototype.containsValidationErrorsResource = "none" != mxClient.language ? "containsValidationErrors" : ""; +mxGraph.prototype.collapseExpandResource = "none" != mxClient.language ? "collapse-expand" : ""; +mxGraph.prototype.init = function(a) { + this.container = a; + this.cellEditor = this.createCellEditor(); + this.view.init(); + this.sizeDidChange(); + mxClient.IS_IE && (mxEvent.addListener(window, "unload", mxUtils.bind(this, function() { + this.destroy() + })), mxEvent.addListener(a, "selectstart", mxUtils.bind(this, function() { + return this.isEditing() + }))); + 8 == document.documentMode && a.insertAdjacentHTML("beforeend", '\x3cv:group style\x3d"DISPLAY: none;"\x3e\x3c/v:group\x3e') +}; +mxGraph.prototype.createHandlers = function(a) { + this.tooltipHandler = new mxTooltipHandler(this); + this.tooltipHandler.setEnabled(!1); + this.panningHandler = new mxPanningHandler(this); + this.panningHandler.panningEnabled = !1; + this.selectionCellsHandler = new mxSelectionCellsHandler(this); + this.connectionHandler = new mxConnectionHandler(this); + this.connectionHandler.setEnabled(!1); + this.graphHandler = new mxGraphHandler(this) +}; +mxGraph.prototype.createSelectionModel = function() { + return new mxGraphSelectionModel(this) +}; +mxGraph.prototype.createStylesheet = function() { + return new mxStylesheet +}; +mxGraph.prototype.createGraphView = function() { + return new mxGraphView(this) +}; +mxGraph.prototype.createCellRenderer = function() { + return new mxCellRenderer +}; +mxGraph.prototype.createCellEditor = function() { + return new mxCellEditor(this) +}; +mxGraph.prototype.getModel = function() { + return this.model +}; +mxGraph.prototype.getView = function() { + return this.view +}; +mxGraph.prototype.getStylesheet = function() { + return this.stylesheet +}; +mxGraph.prototype.setStylesheet = function(a) { + this.stylesheet = a +}; +mxGraph.prototype.getSelectionModel = function() { + return this.selectionModel +}; +mxGraph.prototype.setSelectionModel = function(a) { + this.selectionModel = a +}; +mxGraph.prototype.getSelectionCellsForChanges = function(a) { + for (var b = [], c = 0; c < a.length; c++) { + var d = a[c]; + if (d.constructor != mxRootChange) { + var e = null; + d instanceof mxChildChange && null == d.previous ? e = d.child : null != d.cell && d.cell instanceof mxCell && (e = d.cell); + null != e && 0 > mxUtils.indexOf(b, e) && b.push(e) + } + } + return this.getModel().getTopmostCells(b) +}; +mxGraph.prototype.graphModelChanged = function(a) { + for (var b = 0; b < a.length; b++) this.processChange(a[b]); + this.removeSelectionCells(this.getRemovedCellsForChanges(a)); + this.view.validate(); + this.sizeDidChange() +}; +mxGraph.prototype.getRemovedCellsForChanges = function(a) { + for (var b = [], c = 0; c < a.length; c++) { + var d = a[c]; + if (d instanceof mxRootChange) break; + else d instanceof mxChildChange ? null != d.previous && null == d.parent && (b = b.concat(this.model.getDescendants(d.child))) : d instanceof mxVisibleChange && (b = b.concat(this.model.getDescendants( + d.cell))) + } + return b +}; +mxGraph.prototype.processChange = function(a) { + if (a instanceof mxRootChange) this.clearSelection(), this.removeStateForCell(a.previous), this.resetViewOnRootChange && (this.view.scale = 1, this.view.translate.x = 0, this.view.translate.y = 0), + this.fireEvent(new mxEventObject(mxEvent.ROOT)); + else if (a instanceof mxChildChange) { + var b = this.model.getParent(a.child); + null != b ? this.view.invalidate(a.child, !0, !1, null != a.previous) : (this.removeStateForCell(a.child), this.view.currentRoot == a.child && this.home()); + b != a.previous && + (null != b && this.view.invalidate(b, !1, !1), null != a.previous && this.view.invalidate(a.previous, !1, !1)) + } else a instanceof mxTerminalChange || a instanceof mxGeometryChange ? this.view.invalidate(a.cell) : a instanceof mxValueChange ? this.view.invalidate(a.cell, !1, !1) : a instanceof mxStyleChange ? + (this.view.invalidate(a.cell, !0, !0, !1), this.view.removeState(a.cell)) : null != a.cell && a.cell instanceof mxCell && this.removeStateForCell(a.cell) +}; +mxGraph.prototype.removeStateForCell = function(a) { + for (var b = this.model.getChildCount(a), c = 0; c < b; c++) this.removeStateForCell(this.model.getChildAt(a, c)); + this.view.removeState(a) +}; +mxGraph.prototype.addCellOverlay = function(a, b) { + null == a.overlays && (a.overlays = []); + a.overlays.push(b); + var c = this.view.getState(a); + null != c && this.cellRenderer.redraw(c); + this.fireEvent(new mxEventObject(mxEvent.ADD_OVERLAY, "cell", a, "overlay", b)); + return b +}; +mxGraph.prototype.getCellOverlays = function(a) { + return a.overlays +}; +mxGraph.prototype.removeCellOverlay = function(a, b) { + if (null == b) this.removeCellOverlays(a); + else { + var c = mxUtils.indexOf(a.overlays, b); + 0 <= c ? (a.overlays.splice(c, 1), 0 == a.overlays.length && (a.overlays = null), c = this.view.getState(a), null != c && this.cellRenderer.redraw(c), this.fireEvent(new mxEventObject(mxEvent.REMOVE_OVERLAY, + "cell", a, "overlay", b))) : b = null + } + return b +}; +mxGraph.prototype.removeCellOverlays = function(a) { + var b = a.overlays; + if (null != b) { + a.overlays = null; + var c = this.view.getState(a); + null != c && this.cellRenderer.redraw(c); + for (c = 0; c < b.length; c++) this.fireEvent(new mxEventObject(mxEvent.REMOVE_OVERLAY, "cell", a, "overlay", b[c])) + } + return b +}; +mxGraph.prototype.clearCellOverlays = function(a) { + a = null != a ? a : this.model.getRoot(); + this.removeCellOverlays(a); + for (var b = this.model.getChildCount(a), c = 0; c < b; c++) { + var d = this.model.getChildAt(a, c); + this.clearCellOverlays(d) + } +}; +mxGraph.prototype.setCellWarning = function(a, b, c, d) { + if (null != b && 0 < b.length) return c = null != c ? c : this.warningImage, b = new mxCellOverlay(c, "\x3cfont color\x3dred\x3e" + b + "\x3c/font\x3e"), d && b.addListener(mxEvent.CLICK, mxUtils + .bind(this, function(b, c) { + this.isEnabled() && this.setSelectionCell(a) + })), this.addCellOverlay(a, b); + this.removeCellOverlays(a); + return null +}; +mxGraph.prototype.startEditing = function(a) { + this.startEditingAtCell(null, a) +}; +mxGraph.prototype.startEditingAtCell = function(a, b) { + null == a && (a = this.getSelectionCell(), null != a && !this.isCellEditable(a) && (a = null)); + null != a && (this.fireEvent(new mxEventObject(mxEvent.START_EDITING, "cell", a, "event", b)), this.cellEditor.startEditing(a, b)) +}; +mxGraph.prototype.getEditingValue = function(a, b) { + return this.convertValueToString(a) +}; +mxGraph.prototype.stopEditing = function(a) { + this.cellEditor.stopEditing(a) +}; +mxGraph.prototype.labelChanged = function(a, b, c) { + this.model.beginUpdate(); + try { + this.cellLabelChanged(a, b, this.isAutoSizeCell(a)), this.fireEvent(new mxEventObject(mxEvent.LABEL_CHANGED, "cell", a, "value", b, "event", c)) + } finally { + this.model.endUpdate() + } + return a +}; +mxGraph.prototype.cellLabelChanged = function(a, b, c) { + this.model.beginUpdate(); + try { + this.model.setValue(a, b), c && this.cellSizeUpdated(a, !1) + } finally { + this.model.endUpdate() + } +}; +mxGraph.prototype.escape = function(a) { + this.stopEditing(!0); + this.connectionHandler.reset(); + this.graphHandler.reset(); + a = this.getSelectionCells(); + for (var b = 0; b < a.length; b++) { + var c = this.view.getState(a[b]); + null != c && null != c.handler && c.handler.reset() + } +}; +mxGraph.prototype.click = function(a) { + var b = a.getEvent(), + c = a.getCell(), + d = new mxEventObject(mxEvent.CLICK, "event", b, "cell", c); + a.isConsumed() && d.consume(); + this.fireEvent(d); + this.isEnabled() && (!mxEvent.isConsumed(b) && !d.isConsumed()) && (null != c ? this.selectCellForEvent(c, b) : (c = null, this.isSwimlaneSelectionEnabled() && (c = this.getSwimlaneAt(a.getGraphX(), + a.getGraphY())), null != c ? this.selectCellForEvent(c, b) : this.isToggleEvent(b) || this.clearSelection())) +}; +mxGraph.prototype.dblClick = function(a, b) { + var c = new mxEventObject(mxEvent.DOUBLE_CLICK, "event", a, "cell", b); + this.fireEvent(c); + this.isEnabled() && (!mxEvent.isConsumed(a) && !c.isConsumed() && null != b && this.isCellEditable(b)) && this.startEditingAtCell(b, a) +}; +mxGraph.prototype.scrollPointToVisible = function(a, b, c, d) { + if (!this.timerAutoScroll && (this.ignoreScrollbars || mxUtils.hasScrollbars(this.container))) { + var e = this.container; + d = null != d ? d : 20; + if (a >= e.scrollLeft && b >= e.scrollTop && a <= e.scrollLeft + e.clientWidth && b <= e.scrollTop + e.clientHeight) { + var f = e.scrollLeft + e.clientWidth - a; + if (f < d) { + if (a = e.scrollLeft, e.scrollLeft += d - f, c && a == e.scrollLeft) { + if (this.dialect == mxConstants.DIALECT_SVG) { + a = this.view.getDrawPane().ownerSVGElement; + var g = this.container.scrollWidth + d - f + } else g = + Math.max(e.clientWidth, e.scrollWidth) + d - f, a = this.view.getCanvas(); + a.style.width = g + "px"; + e.scrollLeft += d - f + } + } else f = a - e.scrollLeft, f < d && (e.scrollLeft -= d - f); + f = e.scrollTop + e.clientHeight - b; + f < d ? (a = e.scrollTop, e.scrollTop += d - f, a == e.scrollTop && c && (this.dialect == mxConstants.DIALECT_SVG ? (a = this.view.getDrawPane().ownerSVGElement, b = this.container.scrollHeight + + d - f) : (b = Math.max(e.clientHeight, e.scrollHeight) + d - f, a = this.view.getCanvas()), a.style.height = b + "px", e.scrollTop += d - f)) : (f = b - e.scrollTop, f < d && (e.scrollTop -= + d - f)) + } + } else this.allowAutoPanning && !this.panningHandler.active && (null == this.panningManager && (this.panningManager = this.createPanningManager()), this.panningManager.panTo(a + this.panDx, b + + this.panDy)) +}; +mxGraph.prototype.createPanningManager = function() { + return new mxPanningManager(this) +}; +mxGraph.prototype.getBorderSizes = function() { + function a(a) { + var b = 0, + b = "thin" == a ? 2 : "medium" == a ? 4 : "thick" == a ? 6 : parseInt(a); + isNaN(b) && (b = 0); + return b + } + var b = mxUtils.getCurrentStyle(this.container), + c = new mxRectangle; + c.x = a(b.borderLeftWidth) + parseInt(b.paddingLeft || 0); + c.y = a(b.borderTopWidth) + parseInt(b.paddingTop || 0); + c.width = a(b.borderRightWidth) + parseInt(b.paddingRight || 0); + c.height = a(b.borderBottomWidth) + parseInt(b.paddingBottom || 0); + return c +}; +mxGraph.prototype.getPreferredPageSize = function(a, b, c) { + a = this.view.scale; + var d = this.view.translate, + e = this.pageFormat, + f = a * this.pageScale, + e = new mxRectangle(0, 0, e.width * f, e.height * f); + b = this.pageBreaksVisible ? Math.ceil(b / e.width) : 1; + c = this.pageBreaksVisible ? Math.ceil(c / e.height) : 1; + return new mxRectangle(0, 0, b * e.width + 2 + d.x / a, c * e.height + 2 + d.y / a) +}; +mxGraph.prototype.sizeDidChange = function() { + var a = this.getGraphBounds(); + if (null != this.container) { + var b = this.getBorder(), + c = Math.max(0, a.x + a.width + 1 + b), + b = Math.max(0, a.y + a.height + 1 + b); + null != this.minimumContainerSize && (c = Math.max(c, this.minimumContainerSize.width), b = Math.max(b, this.minimumContainerSize.height)); + this.resizeContainer && this.doResizeContainer(c, b); + if (this.preferPageSize || !mxClient.IS_IE && this.pageVisible) { + var d = this.getPreferredPageSize(a, c, b); + null != d && (c = d.width, b = d.height) + } + null != this.minimumGraphSize && + (c = Math.max(c, this.minimumGraphSize.width * this.view.scale), b = Math.max(b, this.minimumGraphSize.height * this.view.scale)); + c = Math.ceil(c - 1); + b = Math.ceil(b - 1); + this.dialect == mxConstants.DIALECT_SVG ? (d = this.view.getDrawPane().ownerSVGElement, d.style.minWidth = Math.max(1, c) + "px", d.style.minHeight = Math.max(1, b) + "px", d.style.width = + "100%", d.style.height = "100%") : mxClient.IS_QUIRKS ? this.view.updateHtmlCanvasSize(Math.max(1, c), Math.max(1, b)) : (this.view.canvas.style.minWidth = Math.max(1, c) + "px", this.view.canvas + .style.minHeight = + Math.max(1, b) + "px"); + this.updatePageBreaks(this.pageBreaksVisible, c - 1, b - 1) + } + this.fireEvent(new mxEventObject(mxEvent.SIZE, "bounds", a)) +}; +mxGraph.prototype.doResizeContainer = function(a, b) { + if (mxClient.IS_IE) + if (mxClient.IS_QUIRKS) { + var c = this.getBorderSizes(); + a += Math.max(2, c.x + c.width + 1); + b += Math.max(2, c.y + c.height + 1) + } else 9 <= document.documentMode ? (a += 3, b += 5) : (a += 1, b += 1); + else b += 1; + null != this.maximumContainerSize && (a = Math.min(this.maximumContainerSize.width, a), b = Math.min(this.maximumContainerSize.height, b)); + this.container.style.width = Math.ceil(a) + "px"; + this.container.style.height = Math.ceil(b) + "px" +}; +mxGraph.prototype.updatePageBreaks = function(a, b, c) { + var d = this.view.scale, + e = this.view.translate, + f = this.pageFormat, + g = d * this.pageScale, + e = new mxRectangle(d * e.x, d * e.y, f.width * g, f.height * g); + a = a && Math.min(e.width, e.height) > this.minPageBreakDist; + e.x = mxUtils.mod(e.x, e.width); + e.y = mxUtils.mod(e.y, e.height); + f = a ? Math.ceil((b - e.x) / e.width) : 0; + a = a ? Math.ceil((c - e.y) / e.height) : 0; + null == this.horizontalPageBreaks && 0 < f && (this.horizontalPageBreaks = []); + if (null != this.horizontalPageBreaks) { + for (g = 0; g <= f; g++) { + var h = [new mxPoint(e.x + + g * e.width, 1), new mxPoint(e.x + g * e.width, c)]; + null != this.horizontalPageBreaks[g] ? (this.horizontalPageBreaks[g].scale = 1, this.horizontalPageBreaks[g].points = h, this.horizontalPageBreaks[g].redraw()) : (h = new mxPolyline(h, this.pageBreakColor, + this.scale), h.dialect = this.dialect, h.isDashed = this.pageBreakDashed, h.scale = d, h.init(this.view.backgroundPane), h.redraw(), this.horizontalPageBreaks[g] = h) + } + for (g = f; g < this.horizontalPageBreaks.length; g++) this.horizontalPageBreaks[g].destroy(); + this.horizontalPageBreaks.splice(f, + this.horizontalPageBreaks.length - f) + } + null == this.verticalPageBreaks && 0 < a && (this.verticalPageBreaks = []); + if (null != this.verticalPageBreaks) { + for (g = 0; g <= a; g++) h = [new mxPoint(1, e.y + g * e.height), new mxPoint(b, e.y + g * e.height)], null != this.verticalPageBreaks[g] ? (this.verticalPageBreaks[g].scale = 1, this.verticalPageBreaks[ + g].points = h, this.verticalPageBreaks[g].redraw()) : (h = new mxPolyline(h, this.pageBreakColor, d), h.dialect = this.dialect, h.isDashed = this.pageBreakDashed, h.scale = d, h.init(this.view + .backgroundPane), h.redraw(), + this.verticalPageBreaks[g] = h); + for (g = a; g < this.verticalPageBreaks.length; g++) this.verticalPageBreaks[g].destroy(); + this.verticalPageBreaks.splice(a, this.verticalPageBreaks.length - a) + } +}; +mxGraph.prototype.getCellStyle = function(a) { + var b = this.model.getStyle(a), + c = null, + c = this.model.isEdge(a) ? this.stylesheet.getDefaultEdgeStyle() : this.stylesheet.getDefaultVertexStyle(); + null != b && (c = this.postProcessCellStyle(this.stylesheet.getCellStyle(b, c))); + null == c && (c = mxGraph.prototype.EMPTY_ARRAY); + return c +}; +mxGraph.prototype.postProcessCellStyle = function(a) { + if (null != a) { + var b = a[mxConstants.STYLE_IMAGE], + c = this.getImageFromBundles(b); + null != c ? a[mxConstants.STYLE_IMAGE] = c : c = b; + null != c && "data:image/" == c.substring(0, 11) && (b = c.indexOf(","), 0 < b && (c = c.substring(0, b) + ";base64," + c.substring(b + 1)), a[mxConstants.STYLE_IMAGE] = c) + } + return a +}; +mxGraph.prototype.setCellStyle = function(a, b) { + b = b || this.getSelectionCells(); + if (null != b) { + this.model.beginUpdate(); + try { + for (var c = 0; c < b.length; c++) this.model.setStyle(b[c], a) + } finally { + this.model.endUpdate() + } + } +}; +mxGraph.prototype.toggleCellStyle = function(a, b, c) { + c = c || this.getSelectionCell(); + this.toggleCellStyles(a, b, [c]) +}; +mxGraph.prototype.toggleCellStyles = function(a, b, c) { + b = null != b ? b : !1; + c = c || this.getSelectionCells(); + if (null != c && 0 < c.length) { + var d = this.view.getState(c[0]), + d = null != d ? d.style : this.getCellStyle(c[0]); + null != d && (b = mxUtils.getValue(d, a, b) ? 0 : 1, this.setCellStyles(a, b, c)) + } +}; +mxGraph.prototype.setCellStyles = function(a, b, c) { + c = c || this.getSelectionCells(); + mxUtils.setCellStyles(this.model, c, a, b) +}; +mxGraph.prototype.toggleCellStyleFlags = function(a, b, c) { + this.setCellStyleFlags(a, b, null, c) +}; +mxGraph.prototype.setCellStyleFlags = function(a, b, c, d) { + d = d || this.getSelectionCells(); + if (null != d && 0 < d.length) { + if (null == c) { + var e = this.view.getState(d[0]), + e = null != e ? e.style : this.getCellStyle(d[0]); + null != e && (c = (parseInt(e[a] || 0) & b) != b) + } + mxUtils.setCellStyleFlags(this.model, d, a, b, c) + } +}; +mxGraph.prototype.alignCells = function(a, b, c) { + null == b && (b = this.getSelectionCells()); + if (null != b && 1 < b.length) { + if (null == c) + for (var d = 0; d < b.length; d++) { + var e = this.getCellGeometry(b[d]); + if (null != e && !this.model.isEdge(b[d])) + if (null == c) + if (a == mxConstants.ALIGN_CENTER) { + c = e.x + e.width / 2; + break + } else if (a == mxConstants.ALIGN_RIGHT) c = e.x + e.width; + else if (a == mxConstants.ALIGN_TOP) c = e.y; + else if (a == mxConstants.ALIGN_MIDDLE) { + c = e.y + e.height / 2; + break + } else c = a == mxConstants.ALIGN_BOTTOM ? e.y + e.height : e.x; + else c = a == mxConstants.ALIGN_RIGHT ? + Math.max(c, e.x + e.width) : a == mxConstants.ALIGN_TOP ? Math.min(c, e.y) : a == mxConstants.ALIGN_BOTTOM ? Math.max(c, e.y + e.height) : Math.min(c, e.x) + } + if (null != c) { + this.model.beginUpdate(); + try { + for (d = 0; d < b.length; d++) e = this.getCellGeometry(b[d]), null != e && !this.model.isEdge(b[d]) && (e = e.clone(), a == mxConstants.ALIGN_CENTER ? e.x = c - e.width / 2 : a == + mxConstants.ALIGN_RIGHT ? e.x = c - e.width : a == mxConstants.ALIGN_TOP ? e.y = c : a == mxConstants.ALIGN_MIDDLE ? e.y = c - e.height / 2 : a == mxConstants.ALIGN_BOTTOM ? e.y = c - e + .height : e.x = c, this.model.setGeometry(b[d], + e)); + this.fireEvent(new mxEventObject(mxEvent.ALIGN_CELLS, "align", a, "cells", b)) + } finally { + this.model.endUpdate() + } + } + } + return b +}; +mxGraph.prototype.flipEdge = function(a) { + if (null != a && null != this.alternateEdgeStyle) { + this.model.beginUpdate(); + try { + var b = this.model.getStyle(a); + null == b || 0 == b.length ? this.model.setStyle(a, this.alternateEdgeStyle) : this.model.setStyle(a, null); + this.resetEdge(a); + this.fireEvent(new mxEventObject(mxEvent.FLIP_EDGE, "edge", a)) + } finally { + this.model.endUpdate() + } + } + return a +}; +mxGraph.prototype.addImageBundle = function(a) { + this.imageBundles.push(a) +}; +mxGraph.prototype.removeImageBundle = function(a) { + for (var b = [], c = 0; c < this.imageBundles.length; c++) this.imageBundles[c] != a && b.push(this.imageBundles[c]); + this.imageBundles = b +}; +mxGraph.prototype.getImageFromBundles = function(a) { + if (null != a) + for (var b = 0; b < this.imageBundles.length; b++) { + var c = this.imageBundles[b].getImage(a); + if (null != c) return c + } + return null +}; +mxGraph.prototype.orderCells = function(a, b) { + null == b && (b = mxUtils.sortCells(this.getSelectionCells(), !0)); + this.model.beginUpdate(); + try { + this.cellsOrdered(b, a), this.fireEvent(new mxEventObject(mxEvent.ORDER_CELLS, "back", a, "cells", b)) + } finally { + this.model.endUpdate() + } + return b +}; +mxGraph.prototype.cellsOrdered = function(a, b) { + if (null != a) { + this.model.beginUpdate(); + try { + for (var c = 0; c < a.length; c++) { + var d = this.model.getParent(a[c]); + b ? this.model.add(d, a[c], c) : this.model.add(d, a[c], this.model.getChildCount(d) - 1) + } + this.fireEvent(new mxEventObject(mxEvent.CELLS_ORDERED, "back", b, "cells", a)) + } finally { + this.model.endUpdate() + } + } +}; +mxGraph.prototype.groupCells = function(a, b, c) { + null == c && (c = mxUtils.sortCells(this.getSelectionCells(), !0)); + c = this.getCellsForGroup(c); + null == a && (a = this.createGroupCell(c)); + var d = this.getBoundsForGroup(a, c, b); + if (0 < c.length && null != d) { + var e = this.model.getParent(a); + null == e && (e = this.model.getParent(c[0])); + this.model.beginUpdate(); + try { + null == this.getCellGeometry(a) && this.model.setGeometry(a, new mxGeometry); + var f = this.model.getChildCount(e); + this.cellsAdded([a], e, f, null, null, !1); + f = this.model.getChildCount(a); + this.cellsAdded(c, a, f, null, null, !1, !1); + this.cellsMoved(c, -d.x, -d.y, !1, !0); + this.cellsResized([a], [d]); + this.fireEvent(new mxEventObject(mxEvent.GROUP_CELLS, "group", a, "border", b, "cells", c)) + } finally { + this.model.endUpdate() + } + } + return a +}; +mxGraph.prototype.getCellsForGroup = function(a) { + var b = []; + if (null != a && 0 < a.length) { + var c = this.model.getParent(a[0]); + b.push(a[0]); + for (var d = 1; d < a.length; d++) this.model.getParent(a[d]) == c && b.push(a[d]) + } + return b +}; +mxGraph.prototype.getBoundsForGroup = function(a, b, c) { + b = this.getBoundingBoxFromGeometry(b); + null != b && (this.isSwimlane(a) && (a = this.getStartSize(a), b.x -= a.width, b.y -= a.height, b.width += a.width, b.height += a.height), b.x -= c, b.y -= c, b.width += 2 * c, b.height += 2 * c); + return b +}; +mxGraph.prototype.createGroupCell = function(a) { + a = new mxCell(""); + a.setVertex(!0); + a.setConnectable(!1); + return a +}; +mxGraph.prototype.ungroupCells = function(a) { + var b = []; + if (null == a) { + a = this.getSelectionCells(); + for (var c = [], d = 0; d < a.length; d++) 0 < this.model.getChildCount(a[d]) && c.push(a[d]); + a = c + } + if (null != a && 0 < a.length) { + this.model.beginUpdate(); + try { + for (d = 0; d < a.length; d++) { + var e = this.model.getChildren(a[d]); + if (null != e && 0 < e.length) { + var e = e.slice(), + f = this.model.getParent(a[d]), + g = this.model.getChildCount(f); + this.cellsAdded(e, f, g, null, null, !0); + b = b.concat(e) + } + } + this.cellsRemoved(this.addAllEdges(a)); + this.fireEvent(new mxEventObject(mxEvent.UNGROUP_CELLS, + "cells", a)) + } finally { + this.model.endUpdate() + } + } + return b +}; +mxGraph.prototype.removeCellsFromParent = function(a) { + null == a && (a = this.getSelectionCells()); + this.model.beginUpdate(); + try { + var b = this.getDefaultParent(), + c = this.model.getChildCount(b); + this.cellsAdded(a, b, c, null, null, !0); + this.fireEvent(new mxEventObject(mxEvent.REMOVE_CELLS_FROM_PARENT, "cells", a)) + } finally { + this.model.endUpdate() + } + return a +}; +mxGraph.prototype.updateGroupBounds = function(a, b, c) { + null == a && (a = this.getSelectionCells()); + b = null != b ? b : 0; + c = null != c ? c : !1; + this.model.beginUpdate(); + try { + for (var d = 0; d < a.length; d++) { + var e = this.getCellGeometry(a[d]); + if (null != e) { + var f = this.getChildCells(a[d]); + if (null != f && 0 < f.length) { + var g = this.getBoundingBoxFromGeometry(f); + if (0 < g.width && 0 < g.height) { + var h = this.isSwimlane(a[d]) ? this.getStartSize(a[d]) : new mxRectangle, + e = e.clone(); + c && (e.x += g.x - h.width - b, e.y += g.y - h.height - b); + e.width = g.width + h.width + 2 * b; + e.height = + g.height + h.height + 2 * b; + this.model.setGeometry(a[d], e); + this.moveCells(f, -g.x + h.width + b, -g.y + h.height + b) + } + } + } + } + } finally { + this.model.endUpdate() + } + return a +}; +mxGraph.prototype.cloneCells = function(a, b) { + b = null != b ? b : !0; + var c = null; + if (null != a) { + for (var d = {}, c = [], e = 0; e < a.length; e++) { + var f = mxCellPath.create(a[e]); + d[f] = a[e]; + c.push(a[e]) + } + if (0 < c.length) + for (var f = this.view.scale, g = this.view.translate, c = this.model.cloneCells(a, !0), e = 0; e < a.length; e++) + if (!b && this.model.isEdge(c[e]) && null != this.getEdgeValidationError(c[e], this.model.getTerminal(c[e], !0), this.model.getTerminal(c[e], !1))) c[e] = null; + else { + var h = this.model.getGeometry(c[e]); + if (null != h) { + var k = this.view.getState(a[e]), + l = this.view.getState(this.model.getParent(a[e])); + if (null != k && null != l) { + var m = l.origin.x, + l = l.origin.y; + if (this.model.isEdge(c[e])) { + for (var k = k.absolutePoints, n = this.model.getTerminal(a[e], !0), p = mxCellPath.create(n); null != n && null == d[p];) n = this.model.getParent(n), p = mxCellPath.create(n); + null == n && h.setTerminalPoint(new mxPoint(k[0].x / f - g.x, k[0].y / f - g.y), !0); + n = this.model.getTerminal(a[e], !1); + for (p = mxCellPath.create(n); null != n && null == d[p];) n = this.model.getParent(n), p = mxCellPath.create(n); + null == n && (n = k.length - + 1, h.setTerminalPoint(new mxPoint(k[n].x / f - g.x, k[n].y / f - g.y), !1)); + h = h.points; + if (null != h) + for (k = 0; k < h.length; k++) h[k].x += m, h[k].y += l + } else h.x += m, h.y += l + } + } + } else c = [] + } + return c +}; +mxGraph.prototype.insertVertex = function(a, b, c, d, e, f, g, h, k) { + b = this.createVertex(a, b, c, d, e, f, g, h, k); + return this.addCell(b, a) +}; +mxGraph.prototype.createVertex = function(a, b, c, d, e, f, g, h, k) { + a = new mxGeometry(d, e, f, g); + a.relative = null != k ? k : !1; + c = new mxCell(c, a, h); + c.setId(b); + c.setVertex(!0); + c.setConnectable(!0); + return c +}; +mxGraph.prototype.insertEdge = function(a, b, c, d, e, f) { + b = this.createEdge(a, b, c, d, e, f); + return this.addEdge(b, a, d, e) +}; +mxGraph.prototype.createEdge = function(a, b, c, d, e, f) { + a = new mxCell(c, new mxGeometry, f); + a.setId(b); + a.setEdge(!0); + a.geometry.relative = !0; + return a +}; +mxGraph.prototype.addEdge = function(a, b, c, d, e) { + return this.addCell(a, b, e, c, d) +}; +mxGraph.prototype.addCell = function(a, b, c, d, e) { + return this.addCells([a], b, c, d, e)[0] +}; +mxGraph.prototype.addCells = function(a, b, c, d, e) { + null == b && (b = this.getDefaultParent()); + null == c && (c = this.model.getChildCount(b)); + this.model.beginUpdate(); + try { + this.cellsAdded(a, b, c, d, e, !1, !0), this.fireEvent(new mxEventObject(mxEvent.ADD_CELLS, "cells", a, "parent", b, "index", c, "source", d, "target", e)) + } finally { + this.model.endUpdate() + } + return a +}; +mxGraph.prototype.cellsAdded = function(a, b, c, d, e, f, g) { + if (null != a && null != b && null != c) { + this.model.beginUpdate(); + try { + for (var h = f ? this.view.getState(b) : null, k = null != h ? h.origin : null, l = new mxPoint(0, 0), h = 0; h < a.length; h++) + if (null == a[h]) c--; + else { + var m = this.model.getParent(a[h]); + if (null != k && a[h] != b && b != m) { + var n = this.view.getState(m), + p = null != n ? n.origin : l, + q = this.model.getGeometry(a[h]); + if (null != q) { + var s = p.x - k.x, + r = p.y - k.y, + q = q.clone(); + q.translate(s, r); + !q.relative && (this.model.isVertex(a[h]) && !this.isAllowNegativeCoordinates()) && + (q.x = Math.max(0, q.x), q.y = Math.max(0, q.y)); + this.model.setGeometry(a[h], q) + } + } + b == m && c + h > this.model.getChildCount(b) && c--; + this.model.add(b, a[h], c + h); + this.isExtendParentsOnAdd() && this.isExtendParent(a[h]) && this.extendParent(a[h]); + (null == g || g) && this.constrainChild(a[h]); + null != d && this.cellConnected(a[h], d, !0); + null != e && this.cellConnected(a[h], e, !1) + } + this.fireEvent(new mxEventObject(mxEvent.CELLS_ADDED, "cells", a, "parent", b, "index", c, "source", d, "target", e, "absolute", f)) + } finally { + this.model.endUpdate() + } + } +}; +mxGraph.prototype.removeCells = function(a, b) { + b = null != b ? b : !0; + null == a && (a = this.getDeletableCells(this.getSelectionCells())); + b && (a = this.getDeletableCells(this.addAllEdges(a))); + this.model.beginUpdate(); + try { + this.cellsRemoved(a), this.fireEvent(new mxEventObject(mxEvent.REMOVE_CELLS, "cells", a, "includeEdges", b)) + } finally { + this.model.endUpdate() + } + return a +}; +mxGraph.prototype.cellsRemoved = function(a) { + if (null != a && 0 < a.length) { + var b = this.view.scale, + c = this.view.translate; + this.model.beginUpdate(); + try { + for (var d = {}, e = 0; e < a.length; e++) { + var f = mxCellPath.create(a[e]); + d[f] = a[e] + } + for (e = 0; e < a.length; e++) { + for (var g = this.getConnections(a[e]), h = 0; h < g.length; h++) + if (f = mxCellPath.create(g[h]), null == d[f]) { + var k = this.model.getGeometry(g[h]); + if (null != k) { + var l = this.view.getState(g[h]); + if (null != l) { + var k = k.clone(), + m = l.getVisibleTerminal(!0) == a[e], + n = l.absolutePoints, + p = m ? 0 : n.length - + 1; + k.setTerminalPoint(new mxPoint(n[p].x / b - c.x, n[p].y / b - c.y), m); + this.model.setTerminal(g[h], null, m); + this.model.setGeometry(g[h], k) + } + } + } + this.model.remove(a[e]) + } + this.fireEvent(new mxEventObject(mxEvent.CELLS_REMOVED, "cells", a)) + } finally { + this.model.endUpdate() + } + } +}; +mxGraph.prototype.splitEdge = function(a, b, c, d, e) { + d = d || 0; + e = e || 0; + null == c && (c = this.cloneCells([a])[0]); + var f = this.model.getParent(a), + g = this.model.getTerminal(a, !0); + this.model.beginUpdate(); + try { + this.cellsMoved(b, d, e, !1, !1), this.cellsAdded(b, f, this.model.getChildCount(f), null, null, !0), this.cellsAdded([c], f, this.model.getChildCount(f), g, b[0], !1), this.cellConnected(a, b[ + 0], !0), this.fireEvent(new mxEventObject(mxEvent.SPLIT_EDGE, "edge", a, "cells", b, "newEdge", c, "dx", d, "dy", e)) + } finally { + this.model.endUpdate() + } + return c +}; +mxGraph.prototype.toggleCells = function(a, b, c) { + null == b && (b = this.getSelectionCells()); + c && (b = this.addAllEdges(b)); + this.model.beginUpdate(); + try { + this.cellsToggled(b, a), this.fireEvent(new mxEventObject(mxEvent.TOGGLE_CELLS, "show", a, "cells", b, "includeEdges", c)) + } finally { + this.model.endUpdate() + } + return b +}; +mxGraph.prototype.cellsToggled = function(a, b) { + if (null != a && 0 < a.length) { + this.model.beginUpdate(); + try { + for (var c = 0; c < a.length; c++) this.model.setVisible(a[c], b) + } finally { + this.model.endUpdate() + } + } +}; +mxGraph.prototype.foldCells = function(a, b, c, d) { + b = null != b ? b : !1; + null == c && (c = this.getFoldableCells(this.getSelectionCells(), a)); + this.stopEditing(!1); + this.model.beginUpdate(); + try { + this.cellsFolded(c, a, b, d), this.fireEvent(new mxEventObject(mxEvent.FOLD_CELLS, "collapse", a, "recurse", b, "cells", c)) + } finally { + this.model.endUpdate() + } + return c +}; +mxGraph.prototype.cellsFolded = function(a, b, c, d) { + if (null != a && 0 < a.length) { + this.model.beginUpdate(); + try { + for (var e = 0; e < a.length; e++) + if ((!d || this.isCellFoldable(a[e], b)) && b != this.isCellCollapsed(a[e])) + if (this.model.setCollapsed(a[e], b), this.swapBounds(a[e], b), this.isExtendParent(a[e]) && this.extendParent(a[e]), c) { + var f = this.model.getChildren(a[e]); + this.foldCells(f, b, c) + } + this.fireEvent(new mxEventObject(mxEvent.CELLS_FOLDED, "cells", a, "collapse", b, "recurse", c)) + } finally { + this.model.endUpdate() + } + } +}; +mxGraph.prototype.swapBounds = function(a, b) { + if (null != a) { + var c = this.model.getGeometry(a); + null != c && (c = c.clone(), this.updateAlternateBounds(a, c, b), c.swap(), this.model.setGeometry(a, c)) + } +}; +mxGraph.prototype.updateAlternateBounds = function(a, b, c) { + if (null != a && null != b) { + c = this.view.getState(a); + c = null != c ? c.style : this.getCellStyle(a); + if (null == b.alternateBounds) { + var d = b; + this.collapseToPreferredSize && (a = this.getPreferredSizeForCell(a), null != a && (d = a, a = mxUtils.getValue(c, mxConstants.STYLE_STARTSIZE), 0 < a && (d.height = Math.max(d.height, a)))); + b.alternateBounds = new mxRectangle(0, 0, d.width, d.height) + } + if (null != b.alternateBounds) { + b.alternateBounds.x = b.x; + b.alternateBounds.y = b.y; + var e = mxUtils.toRadians(c[mxConstants.STYLE_ROTATION] || + "0"); + 0 != e && (a = b.alternateBounds.getCenterX() - b.getCenterX(), c = b.alternateBounds.getCenterY() - b.getCenterY(), d = Math.cos(e), e = Math.sin(e), b.alternateBounds.x += d * a - e * c - a, + b.alternateBounds.y += e * a + d * c - c) + } + } +}; +mxGraph.prototype.addAllEdges = function(a) { + var b = a.slice(); + return b = b.concat(this.getAllEdges(a)) +}; +mxGraph.prototype.getAllEdges = function(a) { + var b = []; + if (null != a) + for (var c = 0; c < a.length; c++) { + for (var d = this.model.getEdgeCount(a[c]), e = 0; e < d; e++) b.push(this.model.getEdgeAt(a[c], e)); + d = this.model.getChildren(a[c]); + b = b.concat(this.getAllEdges(d)) + } + return b +}; +mxGraph.prototype.updateCellSize = function(a, b) { + b = null != b ? b : !1; + this.model.beginUpdate(); + try { + this.cellSizeUpdated(a, b), this.fireEvent(new mxEventObject(mxEvent.UPDATE_CELL_SIZE, "cell", a, "ignoreChildren", b)) + } finally { + this.model.endUpdate() + } + return a +}; +mxGraph.prototype.cellSizeUpdated = function(a, b) { + if (null != a) { + this.model.beginUpdate(); + try { + var c = this.getPreferredSizeForCell(a), + d = this.model.getGeometry(a); + if (null != c && null != d) { + var e = this.isCellCollapsed(a), + d = d.clone(); + if (this.isSwimlane(a)) { + var f = this.view.getState(a), + g = null != f ? f.style : this.getCellStyle(a), + h = this.model.getStyle(a); + null == h && (h = ""); + mxUtils.getValue(g, mxConstants.STYLE_HORIZONTAL, !0) ? (h = mxUtils.setStyle(h, mxConstants.STYLE_STARTSIZE, c.height + 8), e && (d.height = c.height + 8), d.width = c.width) : + (h = mxUtils.setStyle(h, mxConstants.STYLE_STARTSIZE, c.width + 8), e && (d.width = c.width + 8), d.height = c.height); + this.model.setStyle(a, h) + } else d.width = c.width, d.height = c.height; + if (!b && !e) { + var k = this.view.getBounds(this.model.getChildren(a)); + if (null != k) { + var l = this.view.translate, + m = this.view.scale, + n = (k.y + k.height) / m - d.y - l.y; + d.width = Math.max(d.width, (k.x + k.width) / m - d.x - l.x); + d.height = Math.max(d.height, n) + } + } + this.cellsResized([a], [d]) + } + } finally { + this.model.endUpdate() + } + } +}; +mxGraph.prototype.getPreferredSizeForCell = function(a) { + var b = null; + if (null != a) { + var c = this.view.getState(a), + d = null != c ? c.style : this.getCellStyle(a); + if (null != d && !this.model.isEdge(a)) { + var e = d[mxConstants.STYLE_FONTSIZE] || mxConstants.DEFAULT_FONTSIZE, + f = 0, + b = 0; + if ((null != this.getImage(c) || null != d[mxConstants.STYLE_IMAGE]) && d[mxConstants.STYLE_SHAPE] == mxConstants.SHAPE_LABEL) d[mxConstants.STYLE_VERTICAL_ALIGN] == mxConstants.ALIGN_MIDDLE && + (f += parseFloat(d[mxConstants.STYLE_IMAGE_WIDTH]) || mxLabel.prototype.imageSize), + d[mxConstants.STYLE_ALIGN] != mxConstants.ALIGN_CENTER && (b += parseFloat(d[mxConstants.STYLE_IMAGE_HEIGHT]) || mxLabel.prototype.imageSize); + f += 2 * (d[mxConstants.STYLE_SPACING] || 0); + f += d[mxConstants.STYLE_SPACING_LEFT] || 0; + f += d[mxConstants.STYLE_SPACING_RIGHT] || 0; + b += 2 * (d[mxConstants.STYLE_SPACING] || 0); + b += d[mxConstants.STYLE_SPACING_TOP] || 0; + b += d[mxConstants.STYLE_SPACING_BOTTOM] || 0; + c = this.getFoldingImage(c); + null != c && (f += c.width + 8); + c = this.getLabel(a); + null != c && 0 < c.length ? (this.isHtmlLabel(a) || (c = c.replace(/\n/g, + "\x3cbr\x3e")), e = mxUtils.getSizeForString(c, e, d[mxConstants.STYLE_FONTFAMILY]), a = e.width + f, b = e.height + b, mxUtils.getValue(d, mxConstants.STYLE_HORIZONTAL, !0) || (d = b, + b = a, a = d), this.gridEnabled && (a = this.snap(a + this.gridSize / 2), b = this.snap(b + this.gridSize / 2)), b = new mxRectangle(0, 0, a, b)) : (d = 4 * this.gridSize, b = new mxRectangle( + 0, 0, d, d)) + } + } + return b +}; +mxGraph.prototype.handleGesture = function(a, b) { + if (0.2 < Math.abs(1 - b.scale)) { + var c = this.view.scale, + d = this.view.translate, + e = a.width * b.scale, + f = a.height * b.scale, + g = a.y - (f - a.height) / 2, + c = new mxRectangle(this.snap((a.x - (e - a.width) / 2) / c) - d.x, this.snap(g / c) - d.y, this.snap(e / c), this.snap(f / c)); + this.resizeCell(a.cell, c) + } +}; +mxGraph.prototype.resizeCell = function(a, b) { + return this.resizeCells([a], [b])[0] +}; +mxGraph.prototype.resizeCells = function(a, b) { + this.model.beginUpdate(); + try { + this.cellsResized(a, b), this.fireEvent(new mxEventObject(mxEvent.RESIZE_CELLS, "cells", a, "bounds", b)) + } finally { + this.model.endUpdate() + } + return a +}; +mxGraph.prototype.cellsResized = function(a, b) { + if (null != a && null != b && a.length == b.length) { + this.model.beginUpdate(); + try { + for (var c = 0; c < a.length; c++) { + var d = b[c], + e = this.model.getGeometry(a[c]); + if (null != e && (e.x != d.x || e.y != d.y || e.width != d.width || e.height != d.height)) { + e = e.clone(); + if (e.relative) { + var f = e.offset; + null != f && (f.x += d.x - e.x, f.y += d.y - e.y) + } else e.x = d.x, e.y = d.y; + e.width = d.width; + e.height = d.height; + !e.relative && (this.model.isVertex(a[c]) && !this.isAllowNegativeCoordinates()) && (e.x = Math.max(0, e.x), e.y = Math.max(0, + e.y)); + this.model.setGeometry(a[c], e); + this.isExtendParent(a[c]) && this.extendParent(a[c]) + } + } + this.resetEdgesOnResize && this.resetEdges(a); + this.fireEvent(new mxEventObject(mxEvent.CELLS_RESIZED, "cells", a, "bounds", b)) + } finally { + this.model.endUpdate() + } + } +}; +mxGraph.prototype.extendParent = function(a) { + if (null != a) { + var b = this.model.getParent(a), + c = this.model.getGeometry(b); + if (null != b && (null != c && !this.isCellCollapsed(b)) && (a = this.model.getGeometry(a), null != a && (c.width < a.x + a.width || c.height < a.y + a.height))) c = c.clone(), c.width = Math.max( + c.width, a.x + a.width), c.height = Math.max(c.height, a.y + a.height), this.cellsResized([b], [c]) + } +}; +mxGraph.prototype.importCells = function(a, b, c, d, e) { + return this.moveCells(a, b, c, !0, d, e) +}; +mxGraph.prototype.moveCells = function(a, b, c, d, e, f) { + b = null != b ? b : 0; + c = null != c ? c : 0; + d = null != d ? d : !1; + if (null != a && (0 != b || 0 != c || d || null != e)) { + this.model.beginUpdate(); + try { + d && (a = this.cloneCells(a, this.isCloneInvalidEdges()), null == e && (e = this.getDefaultParent())); + var g = this.isAllowNegativeCoordinates(); + null != e && this.setAllowNegativeCoordinates(!0); + this.cellsMoved(a, b, c, !d && this.isDisconnectOnMove() && this.isAllowDanglingEdges(), null == e); + this.setAllowNegativeCoordinates(g); + if (null != e) { + var h = this.model.getChildCount(e); + this.cellsAdded(a, e, h, null, null, !0) + } + this.fireEvent(new mxEventObject(mxEvent.MOVE_CELLS, "cells", a, "dx", b, "dy", c, "clone", d, "target", e, "event", f)) + } finally { + this.model.endUpdate() + } + } + return a +}; +mxGraph.prototype.cellsMoved = function(a, b, c, d, e) { + if (null != a && (0 != b || 0 != c)) { + this.model.beginUpdate(); + try { + d && this.disconnectGraph(a); + for (var f = 0; f < a.length; f++) this.translateCell(a[f], b, c), e && this.constrainChild(a[f]); + this.resetEdgesOnMove && this.resetEdges(a); + this.fireEvent(new mxEventObject(mxEvent.CELLS_MOVED, "cells", a, "dx", c, "dy", c, "disconnect", d)) + } finally { + this.model.endUpdate() + } + } +}; +mxGraph.prototype.translateCell = function(a, b, c) { + var d = this.model.getGeometry(a); + null != d && (d = d.clone(), d.translate(b, c), !d.relative && (this.model.isVertex(a) && !this.isAllowNegativeCoordinates()) && (d.x = Math.max(0, d.x), d.y = Math.max(0, d.y)), d.relative && ! + this.model.isEdge(a) && (null == d.offset ? d.offset = new mxPoint(b, c) : (d.offset.x += b, d.offset.y += c)), this.model.setGeometry(a, d)) +}; +mxGraph.prototype.getCellContainmentArea = function(a) { + if (null != a && !this.model.isEdge(a)) { + var b = this.model.getParent(a); + if (b == this.getDefaultParent() || b == this.getCurrentRoot()) return this.getMaximumGraphBounds(); + if (null != b && b != this.getDefaultParent()) { + var c = this.model.getGeometry(b); + if (null != c) { + var d = a = 0, + e = c.width, + c = c.height; + this.isSwimlane(b) && (b = this.getStartSize(b), a = b.width, e -= b.width, d = b.height, c -= b.height); + return new mxRectangle(a, d, e, c) + } + } + } + return null +}; +mxGraph.prototype.getMaximumGraphBounds = function() { + return this.maximumGraphBounds +}; +mxGraph.prototype.constrainChild = function(a) { + if (null != a) { + var b = this.model.getGeometry(a), + c = this.isConstrainChild(a) ? this.getCellContainmentArea(a) : this.getMaximumGraphBounds(); + if (null != b && null != c && !b.relative && (b.x < c.x || b.y < c.y || c.width < b.x + b.width || c.height < b.y + b.height)) a = this.getOverlap(a), 0 < c.width && (b.x = Math.min(b.x, c.x + + c.width - (1 - a) * b.width)), 0 < c.height && (b.y = Math.min(b.y, c.y + c.height - (1 - a) * b.height)), b.x = Math.max(b.x, c.x - b.width * a), b.y = Math.max(b.y, c.y - b.height * a) + } +}; +mxGraph.prototype.resetEdges = function(a) { + if (null != a) { + for (var b = {}, c = 0; c < a.length; c++) { + var d = mxCellPath.create(a[c]); + b[d] = a[c] + } + this.model.beginUpdate(); + try { + for (c = 0; c < a.length; c++) { + var e = this.model.getEdges(a[c]); + if (null != e) + for (d = 0; d < e.length; d++) { + var f = this.view.getState(e[d]), + g = null != f ? f.getVisibleTerminal(!0) : this.view.getVisibleTerminal(e[d], !0), + h = null != f ? f.getVisibleTerminal(!1) : this.view.getVisibleTerminal(e[d], !1), + k = mxCellPath.create(g), + l = mxCellPath.create(h); + (null == b[k] || null == b[l]) && this.resetEdge(e[d]) + } + this.resetEdges(this.model.getChildren(a[c])) + } + } finally { + this.model.endUpdate() + } + } +}; +mxGraph.prototype.resetEdge = function(a) { + var b = this.model.getGeometry(a); + null != b && (null != b.points && 0 < b.points.length) && (b = b.clone(), b.points = [], this.model.setGeometry(a, b)); + return a +}; +mxGraph.prototype.getAllConnectionConstraints = function(a, b) { + return null != a && null != a.shape && null != a.shape.stencil ? a.shape.stencil.constraints : null +}; +mxGraph.prototype.getConnectionConstraint = function(a, b, c) { + b = null; + var d = a.style[c ? mxConstants.STYLE_EXIT_X : mxConstants.STYLE_ENTRY_X]; + if (null != d) { + var e = a.style[c ? mxConstants.STYLE_EXIT_Y : mxConstants.STYLE_ENTRY_Y]; + null != e && (b = new mxPoint(parseFloat(d), parseFloat(e))) + } + d = !1; + null != b && (d = mxUtils.getValue(a.style, c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, !0)); + return new mxConnectionConstraint(b, d) +}; +mxGraph.prototype.setConnectionConstraint = function(a, b, c, d) { + if (null != d) { + this.model.beginUpdate(); + try { + null == d || null == d.point ? (this.setCellStyles(c ? mxConstants.STYLE_EXIT_X : mxConstants.STYLE_ENTRY_X, null, [a]), this.setCellStyles(c ? mxConstants.STYLE_EXIT_Y : mxConstants.STYLE_ENTRY_Y, + null, [a]), this.setCellStyles(c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, null, [a])) : null != d.point && (this.setCellStyles(c ? mxConstants.STYLE_EXIT_X : + mxConstants.STYLE_ENTRY_X, d.point.x, [a]), this.setCellStyles(c ? + mxConstants.STYLE_EXIT_Y : mxConstants.STYLE_ENTRY_Y, d.point.y, [a]), d.perimeter ? this.setCellStyles(c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, null, [ + a + ]) : this.setCellStyles(c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, "0", [a])) + } finally { + this.model.endUpdate() + } + } +}; +mxGraph.prototype.getConnectionPoint = function(a, b) { + var c = null; + if (null != a) { + var d = this.view.getPerimeterBounds(a), + e = new mxPoint(d.getCenterX(), d.getCenterY()), + f = a.style[mxConstants.STYLE_DIRECTION], + g = 0; + if (null != f && ("north" == f ? g += 270 : "west" == f ? g += 180 : "south" == f && (g += 90), "north" == f || "south" == f)) { + d.x += d.width / 2 - d.height / 2; + d.y += d.height / 2 - d.width / 2; + var h = d.width; + d.width = d.height; + d.height = h + } + if (null != b.point) { + var k = c = 1, + l = 0, + m = 0; + if (this.getModel().isVertex(a.cell)) { + var n = a.style[mxConstants.STYLE_FLIPH], + p = + a.style[mxConstants.STYLE_FLIPV]; + null != a.shape.stencil && (n = 1 == mxUtils.getValue(a.style, "stencilFlipH", 0) || n, p = 1 == mxUtils.getValue(a.style, "stencilFlipV", 0) || p); + if ("north" == f || "south" == f) h = n, n = p, p = h; + n && (c = -1, l = -d.width); + p && (k = -1, m = -d.height) + } + c = new mxPoint(d.x + b.point.x * d.width * c - l, d.y + b.point.y * d.height * k - m) + } + f = a.style[mxConstants.STYLE_ROTATION] || 0; + b.perimeter ? (0 != g && null != c && (h = d = 0, 90 == g ? h = 1 : 180 == g ? d = -1 : 270 == f && (h = -1), c = mxUtils.getRotatedPoint(c, d, h, e)), null != c && b.perimeter && (c = this.view + .getPerimeterPoint(a, + c, !1))) : f += g; + 0 != f && null != c && (g = mxUtils.toRadians(f), d = Math.cos(g), h = Math.sin(g), c = mxUtils.getRotatedPoint(c, d, h, e)) + } + return c +}; +mxGraph.prototype.connectCell = function(a, b, c, d) { + this.model.beginUpdate(); + try { + var e = this.model.getTerminal(a, c); + this.cellConnected(a, b, c, d); + this.fireEvent(new mxEventObject(mxEvent.CONNECT_CELL, "edge", a, "terminal", b, "source", c, "previous", e)) + } finally { + this.model.endUpdate() + } + return a +}; +mxGraph.prototype.cellConnected = function(a, b, c, d) { + if (null != a) { + this.model.beginUpdate(); + try { + var e = this.model.getTerminal(a, c); + this.setConnectionConstraint(a, b, c, d); + this.isPortsEnabled() && (d = null, this.isPort(b) && (d = b.getId(), b = this.getTerminalForPort(b, c)), this.setCellStyles(c ? mxConstants.STYLE_SOURCE_PORT : mxConstants.STYLE_TARGET_PORT, + d, [a])); + this.model.setTerminal(a, b, c); + this.resetEdgesOnConnect && this.resetEdge(a); + this.fireEvent(new mxEventObject(mxEvent.CELL_CONNECTED, "edge", a, "terminal", b, "source", + c, "previous", e)) + } finally { + this.model.endUpdate() + } + } +}; +mxGraph.prototype.disconnectGraph = function(a) { + if (null != a) { + this.model.beginUpdate(); + try { + for (var b = this.view.scale, c = this.view.translate, d = {}, e = 0; e < a.length; e++) { + var f = mxCellPath.create(a[e]); + d[f] = a[e] + } + for (e = 0; e < a.length; e++) + if (this.model.isEdge(a[e])) { + var g = this.model.getGeometry(a[e]); + if (null != g) { + var h = this.view.getState(a[e]), + k = this.view.getState(this.model.getParent(a[e])); + if (null != h && null != k) { + var g = g.clone(), + l = -k.origin.x, + m = -k.origin.y, + n = h.absolutePoints, + p = this.model.getTerminal(a[e], !0); + if (null != + p && this.isCellDisconnectable(a[e], p, !0)) { + for (var q = mxCellPath.create(p); null != p && null == d[q];) p = this.model.getParent(p), q = mxCellPath.create(p); + null == p && (g.setTerminalPoint(new mxPoint(n[0].x / b - c.x + l, n[0].y / b - c.y + m), !0), this.model.setTerminal(a[e], null, !0)) + } + var s = this.model.getTerminal(a[e], !1); + if (null != s && this.isCellDisconnectable(a[e], s, !1)) { + for (var r = mxCellPath.create(s); null != s && null == d[r];) s = this.model.getParent(s), r = mxCellPath.create(s); + if (null == s) { + var t = n.length - 1; + g.setTerminalPoint(new mxPoint(n[t].x / + b - c.x + l, n[t].y / b - c.y + m), !1); + this.model.setTerminal(a[e], null, !1) + } + } + this.model.setGeometry(a[e], g) + } + } + } + } finally { + this.model.endUpdate() + } + } +}; +mxGraph.prototype.getCurrentRoot = function() { + return this.view.currentRoot +}; +mxGraph.prototype.getTranslateForRoot = function(a) { + return null +}; +mxGraph.prototype.isPort = function(a) { + return !1 +}; +mxGraph.prototype.getTerminalForPort = function(a, b) { + return this.model.getParent(a) +}; +mxGraph.prototype.getChildOffsetForCell = function(a) { + return null +}; +mxGraph.prototype.enterGroup = function(a) { + a = a || this.getSelectionCell(); + null != a && this.isValidRoot(a) && (this.view.setCurrentRoot(a), this.clearSelection()) +}; +mxGraph.prototype.exitGroup = function() { + var a = this.model.getRoot(), + b = this.getCurrentRoot(); + if (null != b) { + for (var c = this.model.getParent(b); c != a && !this.isValidRoot(c) && this.model.getParent(c) != a;) c = this.model.getParent(c); + c == a || this.model.getParent(c) == a ? this.view.setCurrentRoot(null) : this.view.setCurrentRoot(c); + null != this.view.getState(b) && this.setSelectionCell(b) + } +}; +mxGraph.prototype.home = function() { + var a = this.getCurrentRoot(); + null != a && (this.view.setCurrentRoot(null), null != this.view.getState(a) && this.setSelectionCell(a)) +}; +mxGraph.prototype.isValidRoot = function(a) { + return null != a +}; +mxGraph.prototype.getGraphBounds = function() { + return this.view.getGraphBounds() +}; +mxGraph.prototype.getCellBounds = function(a, b, c) { + var d = [a]; + b && (d = d.concat(this.model.getEdges(a))); + d = this.view.getBounds(d); + if (c) { + c = this.model.getChildCount(a); + for (var e = 0; e < c; e++) { + var f = this.getCellBounds(this.model.getChildAt(a, e), b, !0); + null != d ? d.add(f) : d = f + } + } + return d +}; +mxGraph.prototype.getBoundingBoxFromGeometry = function(a, b) { + b = null != b ? b : !1; + var c = null; + if (null != a) + for (var d = 0; d < a.length; d++) + if (b || this.model.isVertex(a[d])) { + var e = this.getCellGeometry(a[d]); + if (null != e) { + var f = e.points; + if (null != f && 0 < f.length) { + for (var g = new mxRectangle(f[0].x, f[0].y, 0, 0), h = function(a) { + null != a && g.add(new mxRectangle(a.x, a.y, 0, 0)) + }, k = 1; k < f.length; k++) h(f[k]); + h(e.getTerminalPoint(!0)); + h(e.getTerminalPoint(!1)) + } + null == c ? c = new mxRectangle(e.x, e.y, e.width, e.height) : c.add(e) + } + } + return c +}; +mxGraph.prototype.refresh = function(a) { + this.view.clear(a, null == a); + this.view.validate(); + this.sizeDidChange(); + this.fireEvent(new mxEventObject(mxEvent.REFRESH)) +}; +mxGraph.prototype.snap = function(a) { + this.gridEnabled && (a = Math.round(a / this.gridSize) * this.gridSize); + return a +}; +mxGraph.prototype.panGraph = function(a, b) { + if (this.useScrollbarsForPanning && mxUtils.hasScrollbars(this.container)) this.container.scrollLeft = -a, this.container.scrollTop = -b; + else { + var c = this.view.getCanvas(); + if (this.dialect == mxConstants.DIALECT_SVG) + if (0 == a && 0 == b) { + if (mxClient.IS_IE ? c.setAttribute("transform", "translate(" + a + "," + b + ")") : c.removeAttribute("transform"), null != this.shiftPreview1) { + for (var d = this.shiftPreview1.firstChild; null != d;) { + var e = d.nextSibling; + this.container.appendChild(d); + d = e + } + this.shiftPreview1.parentNode.removeChild(this.shiftPreview1); + this.shiftPreview1 = null; + this.container.appendChild(c.parentNode); + for (d = this.shiftPreview2.firstChild; null != d;) e = d.nextSibling, this.container.appendChild(d), d = e; + this.shiftPreview2.parentNode.removeChild(this.shiftPreview2); + this.shiftPreview2 = null + } + } else { + c.setAttribute("transform", "translate(" + a + "," + b + ")"); + if (null == this.shiftPreview1) { + this.shiftPreview1 = document.createElement("div"); + this.shiftPreview1.style.position = "absolute"; + this.shiftPreview1.style.overflow = "visible"; + this.shiftPreview2 = document.createElement("div"); + this.shiftPreview2.style.position = "absolute"; + this.shiftPreview2.style.overflow = "visible"; + for (var f = this.shiftPreview1, d = this.container.firstChild; null != d;) e = d.nextSibling, d != c.parentNode ? f.appendChild(d) : f = this.shiftPreview2, d = e; + this.container.insertBefore(this.shiftPreview1, c.parentNode); + this.container.appendChild(this.shiftPreview2) + } + this.shiftPreview1.style.left = a + "px"; + this.shiftPreview1.style.top = b + "px"; + this.shiftPreview2.style.left = a + "px"; + this.shiftPreview2.style.top = b + "px" + } else c.style.left = + a + "px", c.style.top = b + "px"; + this.panDx = a; + this.panDy = b; + this.fireEvent(new mxEventObject(mxEvent.PAN)) + } +}; +mxGraph.prototype.zoomIn = function() { + this.zoom(this.zoomFactor) +}; +mxGraph.prototype.zoomOut = function() { + this.zoom(1 / this.zoomFactor) +}; +mxGraph.prototype.zoomActual = function() { + 1 == this.view.scale ? this.view.setTranslate(0, 0) : (this.view.translate.x = 0, this.view.translate.y = 0, this.view.setScale(1)) +}; +mxGraph.prototype.zoomTo = function(a, b) { + this.zoom(a / this.view.scale, b) +}; +mxGraph.prototype.zoom = function(a, b) { + b = null != b ? b : this.centerZoom; + var c = this.view.scale * a, + d = this.view.getState(this.getSelectionCell()); + if (this.keepSelectionVisibleOnZoom && null != d) d = new mxRectangle(d.x * a, d.y * a, d.width * a, d.height * a), this.view.scale = c, this.scrollRectToVisible(d) || (this.view.revalidate(), + this.view.setScale(c)); + else if (b && !mxUtils.hasScrollbars(this.container)) { + var d = this.container.offsetWidth, + e = this.container.offsetHeight; + if (1 < a) var f = (a - 1) / (2 * c), + d = d * -f, + e = e * -f; + else f = (1 / a - 1) / (2 * this.view.scale), + d *= f, e *= f; + this.view.scaleAndTranslate(c, this.view.translate.x + d, this.view.translate.y + e) + } else this.view.setScale(c), mxUtils.hasScrollbars(this.container) && (e = d = 0, b && (d = this.container.offsetWidth * (a - 1) / 2, e = this.container.offsetHeight * (a - 1) / 2), this.container + .scrollLeft = Math.round(this.container.scrollLeft * a + d), this.container.scrollTop = Math.round(this.container.scrollTop * a + e)) +}; +mxGraph.prototype.zoomToRect = function(a) { + var b = this.container.clientWidth / a.width / (this.container.clientHeight / a.height); + a.x = Math.max(0, a.x); + a.y = Math.max(0, a.y); + var c = Math.min(this.container.scrollWidth, a.x + a.width), + d = Math.min(this.container.scrollHeight, a.y + a.height); + a.width = c - a.x; + a.height = d - a.y; + 1 > b ? (b = a.height / b, c = (b - a.height) / 2, a.height = b, b = Math.min(a.y, c), a.y -= b, d = Math.min(this.container.scrollHeight, a.y + a.height), a.height = d - a.y) : (b *= a.width, c = + (b - a.width) / 2, a.width = b, b = Math.min(a.x, c), a.x -= b, + c = Math.min(this.container.scrollWidth, a.x + a.width), a.width = c - a.x); + b = this.container.clientWidth / a.width; + c = this.view.scale * b; + mxUtils.hasScrollbars(this.container) ? (this.view.setScale(c), this.container.scrollLeft = Math.round(a.x * b), this.container.scrollTop = Math.round(a.y * b)) : this.view.scaleAndTranslate(c, + this.view.translate.x - a.x / this.view.scale, this.view.translate.y - a.y / this.view.scale) +}; +mxGraph.prototype.fit = function(a, b) { + if (null != this.container) { + a = null != a ? a : 0; + b = null != b ? b : !1; + var c = this.container.clientWidth, + d = this.container.clientHeight, + e = this.view.getGraphBounds(); + b && (null != e.x && null != e.y) && (e.width += e.x, e.height += e.y, e.x = 0, e.y = 0); + var f = this.view.scale, + g = e.width / f, + h = e.height / f; + null != this.backgroundImage && (g = Math.max(g, this.backgroundImage.width - e.x / f), h = Math.max(h, this.backgroundImage.height - e.y / f)); + var k = b ? a : 2 * a, + c = Math.floor(100 * Math.min(c / (g + k), d / (h + k))) / 100; + null != this.minFitScale && + (c = Math.max(c, this.minFitScale)); + null != this.maxFitScale && (c = Math.min(c, this.maxFitScale)); + b ? this.view.scale != c && this.view.setScale(c) : mxUtils.hasScrollbars(this.container) ? (this.view.setScale(c), null != e.x && (this.container.scrollLeft = Math.round(e.x / f) * c - a - + Math.max(0, (this.container.clientWidth - g * c) / 2)), null != e.y && (this.container.scrollTop = Math.round(e.y / f) * c - a - Math.max(0, (this.container.clientHeight - h * c) / 2))) : + this.view.scaleAndTranslate(c, null != e.x ? Math.floor(this.view.translate.x - e.x / f + a + 1) : a, null != + e.y ? Math.floor(this.view.translate.y - e.y / f + a + 1) : a) + } + return this.view.scale +}; +mxGraph.prototype.scrollCellToVisible = function(a, b) { + var c = -this.view.translate.x, + d = -this.view.translate.y, + e = this.view.getState(a); + null != e && (c = new mxRectangle(c + e.x, d + e.y, e.width, e.height), b && null != this.container && (d = this.container.clientWidth, e = this.container.clientHeight, c.x = c.getCenterX() - d / + 2, c.width = d, c.y = c.getCenterY() - e / 2, c.height = e), this.scrollRectToVisible(c) && this.view.setTranslate(this.view.translate.x, this.view.translate.y)) +}; +mxGraph.prototype.scrollRectToVisible = function(a) { + var b = !1; + if (null != a) { + var c = this.container.offsetWidth, + d = this.container.offsetHeight, + e = Math.min(c, a.width), + f = Math.min(d, a.height); + if (mxUtils.hasScrollbars(this.container)) { + c = this.container; + a.x += this.view.translate.x; + a.y += this.view.translate.y; + var g = c.scrollLeft - a.x, + d = Math.max(g - c.scrollLeft, 0); + 0 < g ? c.scrollLeft -= g + 2 : (g = a.x + e - c.scrollLeft - c.clientWidth, 0 < g && (c.scrollLeft += g + 2)); + e = c.scrollTop - a.y; + g = Math.max(0, e - c.scrollTop); + 0 < e ? c.scrollTop -= e + 2 : (e = a.y + + f - c.scrollTop - c.clientHeight, 0 < e && (c.scrollTop += e + 2)); + !this.useScrollbarsForPanning && (0 != d || 0 != g) && this.view.setTranslate(d, g) + } else { + var g = -this.view.translate.x, + h = -this.view.translate.y, + k = this.view.scale; + a.x + e > g + c && (this.view.translate.x -= (a.x + e - c - g) / k, b = !0); + a.y + f > h + d && (this.view.translate.y -= (a.y + f - d - h) / k, b = !0); + a.x < g && (this.view.translate.x += (g - a.x) / k, b = !0); + a.y < h && (this.view.translate.y += (h - a.y) / k, b = !0); + b && (this.view.refresh(), null != this.selectionCellsHandler && this.selectionCellsHandler.refresh()) + } + } + return b +}; +mxGraph.prototype.getCellGeometry = function(a) { + return this.model.getGeometry(a) +}; +mxGraph.prototype.isCellVisible = function(a) { + return this.model.isVisible(a) +}; +mxGraph.prototype.isCellCollapsed = function(a) { + return this.model.isCollapsed(a) +}; +mxGraph.prototype.isCellConnectable = function(a) { + return this.model.isConnectable(a) +}; +mxGraph.prototype.isOrthogonal = function(a) { + var b = a.style[mxConstants.STYLE_ORTHOGONAL]; + if (null != b) return b; + a = this.view.getEdgeStyle(a); + return a == mxEdgeStyle.SegmentConnector || a == mxEdgeStyle.ElbowConnector || a == mxEdgeStyle.SideToSide || a == mxEdgeStyle.TopToBottom || a == mxEdgeStyle.EntityRelation || a == mxEdgeStyle.OrthConnector +}; +mxGraph.prototype.isLoop = function(a) { + var b = a.getVisibleTerminalState(!0); + a = a.getVisibleTerminalState(!1); + return null != b && b == a +}; +mxGraph.prototype.isCloneEvent = function(a) { + return mxEvent.isControlDown(a) +}; +mxGraph.prototype.isToggleEvent = function(a) { + return mxClient.IS_MAC ? mxEvent.isMetaDown(a) : mxEvent.isControlDown(a) +}; +mxGraph.prototype.isGridEnabledEvent = function(a) { + return null != a && !mxEvent.isAltDown(a) +}; +mxGraph.prototype.isConstrainedEvent = function(a) { + return mxEvent.isShiftDown(a) +}; +mxGraph.prototype.isForceMarqueeEvent = function(a) { + return mxEvent.isAltDown(a) +}; +mxGraph.prototype.validationAlert = function(a) { + mxUtils.alert(a) +}; +mxGraph.prototype.isEdgeValid = function(a, b, c) { + return null == this.getEdgeValidationError(a, b, c) +}; +mxGraph.prototype.getEdgeValidationError = function(a, b, c) { + if (null != a && !this.isAllowDanglingEdges() && (null == b || null == c)) return ""; + if (null != a && null == this.model.getTerminal(a, !0) && null == this.model.getTerminal(a, !1)) return null; + if (!this.allowLoops && b == c && null != b || !this.isValidConnection(b, c)) return ""; + if (null != b && null != c) { + var d = ""; + if (!this.multigraph) { + var e = this.model.getEdgesBetween(b, c, !0); + if (1 < e.length || 1 == e.length && e[0] != a) d += (mxResources.get(this.alreadyConnectedResource) || this.alreadyConnectedResource) + + "\n" + } + var e = this.model.getDirectedEdgeCount(b, !0, a), + f = this.model.getDirectedEdgeCount(c, !1, a); + if (null != this.multiplicities) + for (var g = 0; g < this.multiplicities.length; g++) { + var h = this.multiplicities[g].check(this, a, b, c, e, f); + null != h && (d += h) + } + h = this.validateEdge(a, b, c); + null != h && (d += h); + return 0 < d.length ? d : null + } + return this.allowDanglingEdges ? null : "" +}; +mxGraph.prototype.validateEdge = function(a, b, c) { + return null +}; +mxGraph.prototype.validateGraph = function(a, b) { + a = null != a ? a : this.model.getRoot(); + b = null != b ? b : {}; + for (var c = !0, d = this.model.getChildCount(a), e = 0; e < d; e++) { + var f = this.model.getChildAt(a, e), + g = b; + this.isValidRoot(f) && (g = {}); + g = this.validateGraph(f, g); + null != g ? this.setCellWarning(f, g.replace(/\n/g, "\x3cbr\x3e")) : this.setCellWarning(f, null); + c = c && null == g + } + d = ""; + this.isCellCollapsed(a) && !c && (d += (mxResources.get(this.containsValidationErrorsResource) || this.containsValidationErrorsResource) + "\n"); + d = this.model.isEdge(a) ? + d + (this.getEdgeValidationError(a, this.model.getTerminal(a, !0), this.model.getTerminal(a, !1)) || "") : d + (this.getCellValidationError(a) || ""); + e = this.validateCell(a, b); + null != e && (d += e); + null == this.model.getParent(a) && this.view.validate(); + return 0 < d.length || !c ? d : null +}; +mxGraph.prototype.getCellValidationError = function(a) { + var b = this.model.getDirectedEdgeCount(a, !0), + c = this.model.getDirectedEdgeCount(a, !1); + a = this.model.getValue(a); + var d = ""; + if (null != this.multiplicities) + for (var e = 0; e < this.multiplicities.length; e++) { + var f = this.multiplicities[e]; + if (f.source && mxUtils.isNode(a, f.type, f.attr, f.value) && (0 == f.max && 0 < b || 1 == f.min && 0 == b || 1 == f.max && 1 < b)) d += f.countError + "\n"; + else if (!f.source && mxUtils.isNode(a, f.type, f.attr, f.value) && (0 == f.max && 0 < c || 1 == f.min && 0 == c || 1 == f.max && 1 < + c)) d += f.countError + "\n" + } + return 0 < d.length ? d : null +}; +mxGraph.prototype.validateCell = function(a, b) { + return null +}; +mxGraph.prototype.getBackgroundImage = function() { + return this.backgroundImage +}; +mxGraph.prototype.setBackgroundImage = function(a) { + this.backgroundImage = a +}; +mxGraph.prototype.getFoldingImage = function(a) { + if (null != a && this.foldingEnabled && !this.getModel().isEdge(a.cell)) { + var b = this.isCellCollapsed(a.cell); + if (this.isCellFoldable(a.cell, !b)) return b ? this.collapsedImage : this.expandedImage + } + return null +}; +mxGraph.prototype.convertValueToString = function(a) { + a = this.model.getValue(a); + if (null != a) { + if (mxUtils.isNode(a)) return a.nodeName; + if ("function" == typeof a.toString) return a.toString() + } + return "" +}; +mxGraph.prototype.getLabel = function(a) { + var b = ""; + if (this.labelsVisible && null != a) { + var c = this.view.getState(a), + c = null != c ? c.style : this.getCellStyle(a); + mxUtils.getValue(c, mxConstants.STYLE_NOLABEL, !1) || (b = this.convertValueToString(a)) + } + return b +}; +mxGraph.prototype.isHtmlLabel = function(a) { + return this.isHtmlLabels() +}; +mxGraph.prototype.isHtmlLabels = function() { + return this.htmlLabels +}; +mxGraph.prototype.setHtmlLabels = function(a) { + this.htmlLabels = a +}; +mxGraph.prototype.isWrapping = function(a) { + var b = this.view.getState(a); + a = null != b ? b.style : this.getCellStyle(a); + return null != a ? "wrap" == a[mxConstants.STYLE_WHITE_SPACE] : !1 +}; +mxGraph.prototype.isLabelClipped = function(a) { + var b = this.view.getState(a); + a = null != b ? b.style : this.getCellStyle(a); + return null != a ? "hidden" == a[mxConstants.STYLE_OVERFLOW] : !1 +}; +mxGraph.prototype.getTooltip = function(a, b, c, d) { + var e = null; + if (null != a) { + if (null != a.control && (b == a.control.node || b.parentNode == a.control.node)) e = this.collapseExpandResource, e = mxResources.get(e) || e; + null == e && null != a.overlays && a.overlays.visit(function(a, c) { + if (null == e && (b == c.node || b.parentNode == c.node)) e = c.overlay.toString() + }); + null == e && (c = this.selectionCellsHandler.getHandler(a.cell), null != c && "function" == typeof c.getTooltipForNode && (e = c.getTooltipForNode(b))); + null == e && (e = this.getTooltipForCell(a.cell)) + } + return e +}; +mxGraph.prototype.getTooltipForCell = function(a) { + var b = null; + return b = null != a && null != a.getTooltip ? a.getTooltip() : this.convertValueToString(a) +}; +mxGraph.prototype.getCursorForCell = function(a) { + return null +}; +mxGraph.prototype.getStartSize = function(a) { + var b = new mxRectangle, + c = this.view.getState(a); + a = null != c ? c.style : this.getCellStyle(a); + null != a && (c = parseInt(mxUtils.getValue(a, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE)), mxUtils.getValue(a, mxConstants.STYLE_HORIZONTAL, !0) ? b.height = c : b.width = c); + return b +}; +mxGraph.prototype.getImage = function(a) { + return null != a && null != a.style ? a.style[mxConstants.STYLE_IMAGE] : null +}; +mxGraph.prototype.getVerticalAlign = function(a) { + return null != a && null != a.style ? a.style[mxConstants.STYLE_VERTICAL_ALIGN] || mxConstants.ALIGN_MIDDLE : null +}; +mxGraph.prototype.getIndicatorColor = function(a) { + return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_COLOR] : null +}; +mxGraph.prototype.getIndicatorGradientColor = function(a) { + return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_GRADIENTCOLOR] : null +}; +mxGraph.prototype.getIndicatorShape = function(a) { + return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_SHAPE] : null +}; +mxGraph.prototype.getIndicatorImage = function(a) { + return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_IMAGE] : null +}; +mxGraph.prototype.getBorder = function() { + return this.border +}; +mxGraph.prototype.setBorder = function(a) { + this.border = a +}; +mxGraph.prototype.isSwimlane = function(a) { + if (null != a && this.model.getParent(a) != this.model.getRoot()) { + var b = this.view.getState(a), + b = null != b ? b.style : this.getCellStyle(a); + if (null != b && !this.model.isEdge(a)) return b[mxConstants.STYLE_SHAPE] == mxConstants.SHAPE_SWIMLANE + } + return !1 +}; +mxGraph.prototype.isResizeContainer = function() { + return this.resizeContainer +}; +mxGraph.prototype.setResizeContainer = function(a) { + this.resizeContainer = a +}; +mxGraph.prototype.isEnabled = function() { + return this.enabled +}; +mxGraph.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxGraph.prototype.isEscapeEnabled = function() { + return this.escapeEnabled +}; +mxGraph.prototype.setEscapeEnabled = function(a) { + this.escapeEnabled = a +}; +mxGraph.prototype.isInvokesStopCellEditing = function() { + return this.invokesStopCellEditing +}; +mxGraph.prototype.setInvokesStopCellEditing = function(a) { + this.invokesStopCellEditing = a +}; +mxGraph.prototype.isEnterStopsCellEditing = function() { + return this.enterStopsCellEditing +}; +mxGraph.prototype.setEnterStopsCellEditing = function(a) { + this.enterStopsCellEditing = a +}; +mxGraph.prototype.isCellLocked = function(a) { + var b = this.model.getGeometry(a); + return this.isCellsLocked() || null != b && this.model.isVertex(a) && b.relative +}; +mxGraph.prototype.isCellsLocked = function() { + return this.cellsLocked +}; +mxGraph.prototype.setCellsLocked = function(a) { + this.cellsLocked = a +}; +mxGraph.prototype.getCloneableCells = function(a) { + return this.model.filterCells(a, mxUtils.bind(this, function(a) { + return this.isCellCloneable(a) + })) +}; +mxGraph.prototype.isCellCloneable = function(a) { + var b = this.view.getState(a); + a = null != b ? b.style : this.getCellStyle(a); + return this.isCellsCloneable() && 0 != a[mxConstants.STYLE_CLONEABLE] +}; +mxGraph.prototype.isCellsCloneable = function() { + return this.cellsCloneable +}; +mxGraph.prototype.setCellsCloneable = function(a) { + this.cellsCloneable = a +}; +mxGraph.prototype.getExportableCells = function(a) { + return this.model.filterCells(a, mxUtils.bind(this, function(a) { + return this.canExportCell(a) + })) +}; +mxGraph.prototype.canExportCell = function(a) { + return this.exportEnabled +}; +mxGraph.prototype.getImportableCells = function(a) { + return this.model.filterCells(a, mxUtils.bind(this, function(a) { + return this.canImportCell(a) + })) +}; +mxGraph.prototype.canImportCell = function(a) { + return this.importEnabled +}; +mxGraph.prototype.isCellSelectable = function(a) { + return this.isCellsSelectable() +}; +mxGraph.prototype.isCellsSelectable = function() { + return this.cellsSelectable +}; +mxGraph.prototype.setCellsSelectable = function(a) { + this.cellsSelectable = a +}; +mxGraph.prototype.getDeletableCells = function(a) { + return this.model.filterCells(a, mxUtils.bind(this, function(a) { + return this.isCellDeletable(a) + })) +}; +mxGraph.prototype.isCellDeletable = function(a) { + var b = this.view.getState(a); + a = null != b ? b.style : this.getCellStyle(a); + return this.isCellsDeletable() && 0 != a[mxConstants.STYLE_DELETABLE] +}; +mxGraph.prototype.isCellsDeletable = function() { + return this.cellsDeletable +}; +mxGraph.prototype.setCellsDeletable = function(a) { + this.cellsDeletable = a +}; +mxGraph.prototype.isLabelMovable = function(a) { + return !this.isCellLocked(a) && (this.model.isEdge(a) && this.edgeLabelsMovable || this.model.isVertex(a) && this.vertexLabelsMovable) +}; +mxGraph.prototype.getMovableCells = function(a) { + return this.model.filterCells(a, mxUtils.bind(this, function(a) { + return this.isCellMovable(a) + })) +}; +mxGraph.prototype.isCellMovable = function(a) { + var b = this.view.getState(a), + b = null != b ? b.style : this.getCellStyle(a); + return this.isCellsMovable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_MOVABLE] +}; +mxGraph.prototype.isCellsMovable = function() { + return this.cellsMovable +}; +mxGraph.prototype.setCellsMovable = function(a) { + this.cellsMovable = a +}; +mxGraph.prototype.isGridEnabled = function() { + return this.gridEnabled +}; +mxGraph.prototype.setGridEnabled = function(a) { + this.gridEnabled = a +}; +mxGraph.prototype.isPortsEnabled = function() { + return this.portsEnabled +}; +mxGraph.prototype.setPortsEnabled = function(a) { + this.portsEnabled = a +}; +mxGraph.prototype.getGridSize = function() { + return this.gridSize +}; +mxGraph.prototype.setGridSize = function(a) { + this.gridSize = a +}; +mxGraph.prototype.getTolerance = function() { + return this.tolerance +}; +mxGraph.prototype.setTolerance = function(a) { + this.tolerance = a +}; +mxGraph.prototype.isVertexLabelsMovable = function() { + return this.vertexLabelsMovable +}; +mxGraph.prototype.setVertexLabelsMovable = function(a) { + this.vertexLabelsMovable = a +}; +mxGraph.prototype.isEdgeLabelsMovable = function() { + return this.edgeLabelsMovable +}; +mxGraph.prototype.setEdgeLabelsMovable = function(a) { + this.edgeLabelsMovable = a +}; +mxGraph.prototype.isSwimlaneNesting = function() { + return this.swimlaneNesting +}; +mxGraph.prototype.setSwimlaneNesting = function(a) { + this.swimlaneNesting = a +}; +mxGraph.prototype.isSwimlaneSelectionEnabled = function() { + return this.swimlaneSelectionEnabled +}; +mxGraph.prototype.setSwimlaneSelectionEnabled = function(a) { + this.swimlaneSelectionEnabled = a +}; +mxGraph.prototype.isMultigraph = function() { + return this.multigraph +}; +mxGraph.prototype.setMultigraph = function(a) { + this.multigraph = a +}; +mxGraph.prototype.isAllowLoops = function() { + return this.allowLoops +}; +mxGraph.prototype.setAllowDanglingEdges = function(a) { + this.allowDanglingEdges = a +}; +mxGraph.prototype.isAllowDanglingEdges = function() { + return this.allowDanglingEdges +}; +mxGraph.prototype.setConnectableEdges = function(a) { + this.connectableEdges = a +}; +mxGraph.prototype.isConnectableEdges = function() { + return this.connectableEdges +}; +mxGraph.prototype.setCloneInvalidEdges = function(a) { + this.cloneInvalidEdges = a +}; +mxGraph.prototype.isCloneInvalidEdges = function() { + return this.cloneInvalidEdges +}; +mxGraph.prototype.setAllowLoops = function(a) { + this.allowLoops = a +}; +mxGraph.prototype.isDisconnectOnMove = function() { + return this.disconnectOnMove +}; +mxGraph.prototype.setDisconnectOnMove = function(a) { + this.disconnectOnMove = a +}; +mxGraph.prototype.isDropEnabled = function() { + return this.dropEnabled +}; +mxGraph.prototype.setDropEnabled = function(a) { + this.dropEnabled = a +}; +mxGraph.prototype.isSplitEnabled = function() { + return this.splitEnabled +}; +mxGraph.prototype.setSplitEnabled = function(a) { + this.splitEnabled = a +}; +mxGraph.prototype.isCellResizable = function(a) { + var b = this.view.getState(a), + b = null != b ? b.style : this.getCellStyle(a); + return this.isCellsResizable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_RESIZABLE] +}; +mxGraph.prototype.isCellsResizable = function() { + return this.cellsResizable +}; +mxGraph.prototype.setCellsResizable = function(a) { + this.cellsResizable = a +}; +mxGraph.prototype.isTerminalPointMovable = function(a, b) { + return !0 +}; +mxGraph.prototype.isCellBendable = function(a) { + var b = this.view.getState(a), + b = null != b ? b.style : this.getCellStyle(a); + return this.isCellsBendable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_BENDABLE] +}; +mxGraph.prototype.isCellsBendable = function() { + return this.cellsBendable +}; +mxGraph.prototype.setCellsBendable = function(a) { + this.cellsBendable = a +}; +mxGraph.prototype.isCellEditable = function(a) { + var b = this.view.getState(a), + b = null != b ? b.style : this.getCellStyle(a); + return this.isCellsEditable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_EDITABLE] +}; +mxGraph.prototype.isCellsEditable = function() { + return this.cellsEditable +}; +mxGraph.prototype.setCellsEditable = function(a) { + this.cellsEditable = a +}; +mxGraph.prototype.isCellDisconnectable = function(a, b, c) { + return this.isCellsDisconnectable() && !this.isCellLocked(a) +}; +mxGraph.prototype.isCellsDisconnectable = function() { + return this.cellsDisconnectable +}; +mxGraph.prototype.setCellsDisconnectable = function(a) { + this.cellsDisconnectable = a +}; +mxGraph.prototype.isValidSource = function(a) { + return null == a && this.allowDanglingEdges || null != a && (!this.model.isEdge(a) || this.connectableEdges) && this.isCellConnectable(a) +}; +mxGraph.prototype.isValidTarget = function(a) { + return this.isValidSource(a) +}; +mxGraph.prototype.isValidConnection = function(a, b) { + return this.isValidSource(a) && this.isValidTarget(b) +}; +mxGraph.prototype.setConnectable = function(a) { + this.connectionHandler.setEnabled(a) +}; +mxGraph.prototype.isConnectable = function(a) { + return this.connectionHandler.isEnabled() +}; +mxGraph.prototype.setTooltips = function(a) { + this.tooltipHandler.setEnabled(a) +}; +mxGraph.prototype.setPanning = function(a) { + this.panningHandler.panningEnabled = a +}; +mxGraph.prototype.isEditing = function(a) { + if (null != this.cellEditor) { + var b = this.cellEditor.getEditingCell(); + return null == a ? null != b : a == b + } + return !1 +}; +mxGraph.prototype.isAutoSizeCell = function(a) { + var b = this.view.getState(a); + a = null != b ? b.style : this.getCellStyle(a); + return this.isAutoSizeCells() || 1 == a[mxConstants.STYLE_AUTOSIZE] +}; +mxGraph.prototype.isAutoSizeCells = function() { + return this.autoSizeCells +}; +mxGraph.prototype.setAutoSizeCells = function(a) { + this.autoSizeCells = a +}; +mxGraph.prototype.isExtendParent = function(a) { + return !this.getModel().isEdge(a) && this.isExtendParents() +}; +mxGraph.prototype.isExtendParents = function() { + return this.extendParents +}; +mxGraph.prototype.setExtendParents = function(a) { + this.extendParents = a +}; +mxGraph.prototype.isExtendParentsOnAdd = function() { + return this.extendParentsOnAdd +}; +mxGraph.prototype.setExtendParentsOnAdd = function(a) { + this.extendParentsOnAdd = a +}; +mxGraph.prototype.isConstrainChild = function(a) { + return this.isConstrainChildren() && !this.getModel().isEdge(this.getModel().getParent(a)) +}; +mxGraph.prototype.isConstrainChildren = function() { + return this.constrainChildren +}; +mxGraph.prototype.setConstrainChildren = function(a) { + this.constrainChildren = a +}; +mxGraph.prototype.isAllowNegativeCoordinates = function() { + return this.allowNegativeCoordinates +}; +mxGraph.prototype.setAllowNegativeCoordinates = function(a) { + this.allowNegativeCoordinates = a +}; +mxGraph.prototype.getOverlap = function(a) { + return this.isAllowOverlapParent(a) ? this.defaultOverlap : 0 +}; +mxGraph.prototype.isAllowOverlapParent = function(a) { + return !1 +}; +mxGraph.prototype.getFoldableCells = function(a, b) { + return this.model.filterCells(a, mxUtils.bind(this, function(a) { + return this.isCellFoldable(a, b) + })) +}; +mxGraph.prototype.isCellFoldable = function(a, b) { + var c = this.view.getState(a), + c = null != c ? c.style : this.getCellStyle(a); + return 0 < this.model.getChildCount(a) && 0 != c[mxConstants.STYLE_FOLDABLE] +}; +mxGraph.prototype.isValidDropTarget = function(a, b, c) { + return null != a && (this.isSplitEnabled() && this.isSplitTarget(a, b, c) || !this.model.isEdge(a) && (this.isSwimlane(a) || 0 < this.model.getChildCount(a) && !this.isCellCollapsed(a))) +}; +mxGraph.prototype.isSplitTarget = function(a, b, c) { + return this.model.isEdge(a) && null != b && 1 == b.length && this.isCellConnectable(b[0]) && null == this.getEdgeValidationError(a, this.model.getTerminal(a, !0), b[0]) ? (c = this.model.getTerminal( + a, !0), a = this.model.getTerminal(a, !1), !this.model.isAncestor(b[0], c) && !this.model.isAncestor(b[0], a)) : !1 +}; +mxGraph.prototype.getDropTarget = function(a, b, c) { + if (!this.isSwimlaneNesting()) + for (var d = 0; d < a.length; d++) + if (this.isSwimlane(a[d])) return null; + d = mxUtils.convertPoint(this.container, mxEvent.getClientX(b), mxEvent.getClientY(b)); + d.x -= this.panDx; + d.y -= this.panDy; + d = this.getSwimlaneAt(d.x, d.y); + if (null == c) c = d; + else if (null != d) { + for (var e = this.model.getParent(d); null != e && this.isSwimlane(e) && e != c;) e = this.model.getParent(e); + e == c && (c = d) + } + for (; null != c && !this.isValidDropTarget(c, a, b) && !this.model.isLayer(c);) c = this.model.getParent(c); + return !this.model.isLayer(c) && 0 > mxUtils.indexOf(a, c) ? c : null +}; +mxGraph.prototype.getDefaultParent = function() { + var a = this.defaultParent; + null == a && (a = this.getCurrentRoot(), null == a && (a = this.model.getRoot(), a = this.model.getChildAt(a, 0))); + return a +}; +mxGraph.prototype.setDefaultParent = function(a) { + this.defaultParent = a +}; +mxGraph.prototype.getSwimlane = function(a) { + for (; null != a && !this.isSwimlane(a);) a = this.model.getParent(a); + return a +}; +mxGraph.prototype.getSwimlaneAt = function(a, b, c) { + c = c || this.getDefaultParent(); + if (null != c) + for (var d = this.model.getChildCount(c), e = 0; e < d; e++) { + var f = this.model.getChildAt(c, e), + g = this.getSwimlaneAt(a, b, f); + if (null != g) return g; + if (this.isSwimlane(f) && (g = this.view.getState(f), this.intersects(g, a, b))) return f + } + return null +}; +mxGraph.prototype.getCellAt = function(a, b, c, d, e) { + d = null != d ? d : !0; + e = null != e ? e : !0; + c = null != c ? c : this.getDefaultParent(); + if (null != c) + for (var f = this.model.getChildCount(c) - 1; 0 <= f; f--) { + var g = this.model.getChildAt(c, f), + h = this.getCellAt(a, b, g, d, e); + if (null != h) return h; + if (this.isCellVisible(g) && (e && this.model.isEdge(g) || d && this.model.isVertex(g))) + if (h = this.view.getState(g), this.intersects(h, a, b)) return g + } + return null +}; +mxGraph.prototype.intersects = function(a, b, c) { + if (null != a) { + var d = a.absolutePoints; + if (null != d) { + a = this.tolerance * this.tolerance; + for (var e = d[0], f = 1; f < d.length; f++) { + var g = d[f]; + if (mxUtils.ptSegDistSq(e.x, e.y, g.x, g.y, b, c) <= a) return !0; + e = g + } + } else if (e = mxUtils.toRadians(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION) || 0), 0 != e && (d = Math.cos(-e), e = Math.sin(-e), f = new mxPoint(a.getCenterX(), a.getCenterY()), e = + mxUtils.getRotatedPoint(new mxPoint(b, c), d, e, f), b = e.x, c = e.y), mxUtils.contains(a, b, c)) return !0 + } + return !1 +}; +mxGraph.prototype.hitsSwimlaneContent = function(a, b, c) { + var d = this.getView().getState(a); + a = this.getStartSize(a); + if (null != d) { + var e = this.getView().getScale(); + b -= d.x; + c -= d.y; + if (0 < a.width && 0 < b && b > a.width * e || 0 < a.height && 0 < c && c > a.height * e) return !0 + } + return !1 +}; +mxGraph.prototype.getChildVertices = function(a) { + return this.getChildCells(a, !0, !1) +}; +mxGraph.prototype.getChildEdges = function(a) { + return this.getChildCells(a, !1, !0) +}; +mxGraph.prototype.getChildCells = function(a, b, c) { + a = null != a ? a : this.getDefaultParent(); + a = this.model.getChildCells(a, null != b ? b : !1, null != c ? c : !1); + b = []; + for (c = 0; c < a.length; c++) this.isCellVisible(a[c]) && b.push(a[c]); + return b +}; +mxGraph.prototype.getConnections = function(a, b) { + return this.getEdges(a, b, !0, !0, !1) +}; +mxGraph.prototype.getIncomingEdges = function(a, b) { + return this.getEdges(a, b, !0, !1, !1) +}; +mxGraph.prototype.getOutgoingEdges = function(a, b) { + return this.getEdges(a, b, !1, !0, !1) +}; +mxGraph.prototype.getEdges = function(a, b, c, d, e, f) { + c = null != c ? c : !0; + d = null != d ? d : !0; + e = null != e ? e : !0; + f = null != f ? f : !1; + for (var g = [], h = this.isCellCollapsed(a), k = this.model.getChildCount(a), l = 0; l < k; l++) { + var m = this.model.getChildAt(a, l); + if (h || !this.isCellVisible(m)) g = g.concat(this.model.getEdges(m, c, d)) + } + g = g.concat(this.model.getEdges(a, c, d)); + h = []; + for (l = 0; l < g.length; l++) m = this.view.getState(g[l]), k = null != m ? m.getVisibleTerminal(!0) : this.view.getVisibleTerminal(g[l], !0), m = null != m ? m.getVisibleTerminal(!1) : this.view + .getVisibleTerminal(g[l], !1), (e && k == m || k != m && (c && m == a && (null == b || this.isValidAncestor(k, b, f)) || d && k == a && (null == b || this.isValidAncestor(m, b, f)))) && h.push( + g[l]); + return h +}; +mxGraph.prototype.isValidAncestor = function(a, b, c) { + return c ? this.model.isAncestor(b, a) : this.model.getParent(a) == b +}; +mxGraph.prototype.getOpposites = function(a, b, c, d) { + c = null != c ? c : !0; + d = null != d ? d : !0; + var e = [], + f = {}; + if (null != a) + for (var g = 0; g < a.length; g++) { + var h = this.view.getState(a[g]), + k = null != h ? h.getVisibleTerminal(!0) : this.view.getVisibleTerminal(a[g], !0), + h = null != h ? h.getVisibleTerminal(!1) : this.view.getVisibleTerminal(a[g], !1); + if (k == b && null != h && h != b && d) { + var l = mxCellPath.create(h); + null == f[l] && (f[l] = h, e.push(h)) + } else h == b && (null != k && k != b && c) && (l = mxCellPath.create(k), null == f[l] && (f[l] = k, e.push(k))) + } + return e +}; +mxGraph.prototype.getEdgesBetween = function(a, b, c) { + c = null != c ? c : !1; + for (var d = this.getEdges(a), e = [], f = 0; f < d.length; f++) { + var g = this.view.getState(d[f]), + h = null != g ? g.getVisibleTerminal(!0) : this.view.getVisibleTerminal(d[f], !0), + g = null != g ? g.getVisibleTerminal(!1) : this.view.getVisibleTerminal(d[f], !1); + (h == a && g == b || !c && h == b && g == a) && e.push(d[f]) + } + return e +}; +mxGraph.prototype.getPointForEvent = function(a, b) { + var c = mxUtils.convertPoint(this.container, mxEvent.getClientX(a), mxEvent.getClientY(a)), + d = this.view.scale, + e = this.view.translate, + f = !1 != b ? this.gridSize / 2 : 0; + c.x = this.snap(c.x / d - e.x - f); + c.y = this.snap(c.y / d - e.y - f); + return c +}; +mxGraph.prototype.getCells = function(a, b, c, d, e, f) { + f = null != f ? f : []; + if (0 < c || 0 < d) { + var g = a + c, + h = b + d; + e = e || this.getDefaultParent(); + if (null != e) + for (var k = this.model.getChildCount(e), l = 0; l < k; l++) { + var m = this.model.getChildAt(e, l), + n = this.view.getState(m); + if (this.isCellVisible(m) && null != n) { + var p = n, + n = mxUtils.getValue(n.style, mxConstants.STYLE_ROTATION) || 0; + 0 != n && (p = mxUtils.getBoundingBox(p, n)); + p.x >= a && p.y + p.height <= h && p.y >= b && p.x + p.width <= g ? f.push(m) : this.getCells(a, b, c, d, m, f) + } + } + } + return f +}; +mxGraph.prototype.getCellsBeyond = function(a, b, c, d, e) { + var f = []; + if (d || e) + if (null == c && (c = this.getDefaultParent()), null != c) + for (var g = this.model.getChildCount(c), h = 0; h < g; h++) { + var k = this.model.getChildAt(c, h), + l = this.view.getState(k); + this.isCellVisible(k) && null != l && (!d || l.x >= a) && (!e || l.y >= b) && f.push(k) + } + return f +}; +mxGraph.prototype.findTreeRoots = function(a, b, c) { + b = null != b ? b : !1; + c = null != c ? c : !1; + var d = []; + if (null != a) { + for (var e = this.getModel(), f = e.getChildCount(a), g = null, h = 0, k = 0; k < f; k++) { + var l = e.getChildAt(a, k); + if (this.model.isVertex(l) && this.isCellVisible(l)) { + for (var m = this.getConnections(l, b ? a : null), n = 0, p = 0, q = 0; q < m.length; q++) this.view.getVisibleTerminal(m[q], !0) == l ? n++ : p++; + (c && 0 == n && 0 < p || !c && 0 == p && 0 < n) && d.push(l); + m = c ? p - n : n - p; + m > h && (h = m, g = l) + } + } + 0 == d.length && null != g && d.push(g) + } + return d +}; +mxGraph.prototype.traverse = function(a, b, c, d, e) { + if (null != c && null != a) { + b = null != b ? b : !0; + e = e || []; + var f = mxCellPath.create(a); + if (null == e[f] && (e[f] = a, d = c(a, d), null == d || d)) + if (d = this.model.getEdgeCount(a), 0 < d) + for (f = 0; f < d; f++) { + var g = this.model.getEdgeAt(a, f), + h = this.model.getTerminal(g, !0) == a; + if (!b || h) h = this.model.getTerminal(g, !h), this.traverse(h, b, c, g, e) + } + } +}; +mxGraph.prototype.isCellSelected = function(a) { + return this.getSelectionModel().isSelected(a) +}; +mxGraph.prototype.isSelectionEmpty = function() { + return this.getSelectionModel().isEmpty() +}; +mxGraph.prototype.clearSelection = function() { + return this.getSelectionModel().clear() +}; +mxGraph.prototype.getSelectionCount = function() { + return this.getSelectionModel().cells.length +}; +mxGraph.prototype.getSelectionCell = function() { + return this.getSelectionModel().cells[0] +}; +mxGraph.prototype.getSelectionCells = function() { + return this.getSelectionModel().cells.slice() +}; +mxGraph.prototype.setSelectionCell = function(a) { + this.getSelectionModel().setCell(a) +}; +mxGraph.prototype.setSelectionCells = function(a) { + this.getSelectionModel().setCells(a) +}; +mxGraph.prototype.addSelectionCell = function(a) { + this.getSelectionModel().addCell(a) +}; +mxGraph.prototype.addSelectionCells = function(a) { + this.getSelectionModel().addCells(a) +}; +mxGraph.prototype.removeSelectionCell = function(a) { + this.getSelectionModel().removeCell(a) +}; +mxGraph.prototype.removeSelectionCells = function(a) { + this.getSelectionModel().removeCells(a) +}; +mxGraph.prototype.selectRegion = function(a, b) { + var c = this.getCells(a.x, a.y, a.width, a.height); + this.selectCellsForEvent(c, b); + return c +}; +mxGraph.prototype.selectNextCell = function() { + this.selectCell(!0) +}; +mxGraph.prototype.selectPreviousCell = function() { + this.selectCell() +}; +mxGraph.prototype.selectParentCell = function() { + this.selectCell(!1, !0) +}; +mxGraph.prototype.selectChildCell = function() { + this.selectCell(!1, !1, !0) +}; +mxGraph.prototype.selectCell = function(a, b, c) { + var d = this.selectionModel, + e = 0 < d.cells.length ? d.cells[0] : null; + 1 < d.cells.length && d.clear(); + var d = null != e ? this.model.getParent(e) : this.getDefaultParent(), + f = this.model.getChildCount(d); + null == e && 0 < f ? (a = this.model.getChildAt(d, 0), this.setSelectionCell(a)) : (null == e || b) && null != this.view.getState(d) && null != this.model.getGeometry(d) ? this.getCurrentRoot() != + d && this.setSelectionCell(d) : null != e && c ? 0 < this.model.getChildCount(e) && (a = this.model.getChildAt(e, 0), this.setSelectionCell(a)) : + 0 < f && (b = d.getIndex(e), a ? (b++, a = this.model.getChildAt(d, b % f)) : (b--, a = this.model.getChildAt(d, 0 > b ? f - 1 : b)), this.setSelectionCell(a)) +}; +mxGraph.prototype.selectAll = function(a) { + a = a || this.getDefaultParent(); + a = this.model.getChildren(a); + null != a && this.setSelectionCells(a) +}; +mxGraph.prototype.selectVertices = function(a) { + this.selectCells(!0, !1, a) +}; +mxGraph.prototype.selectEdges = function(a) { + this.selectCells(!1, !0, a) +}; +mxGraph.prototype.selectCells = function(a, b, c) { + c = c || this.getDefaultParent(); + var d = mxUtils.bind(this, function(c) { + return null != this.view.getState(c) && 0 == this.model.getChildCount(c) && (this.model.isVertex(c) && a || this.model.isEdge(c) && b) + }); + c = this.model.filterDescendants(d, c); + this.setSelectionCells(c) +}; +mxGraph.prototype.selectCellForEvent = function(a, b) { + var c = this.isCellSelected(a); + this.isToggleEvent(b) ? c ? this.removeSelectionCell(a) : this.addSelectionCell(a) : (!c || 1 != this.getSelectionCount()) && this.setSelectionCell(a) +}; +mxGraph.prototype.selectCellsForEvent = function(a, b) { + this.isToggleEvent(b) ? this.addSelectionCells(a) : this.setSelectionCells(a) +}; +mxGraph.prototype.createHandler = function(a) { + var b = null; + null != a && (this.model.isEdge(a.cell) ? (b = this.view.getEdgeStyle(a), b = this.isLoop(a) || b == mxEdgeStyle.ElbowConnector || b == mxEdgeStyle.SideToSide || b == mxEdgeStyle.TopToBottom ? + new mxElbowEdgeHandler(a) : b == mxEdgeStyle.SegmentConnector || b == mxEdgeStyle.OrthConnector ? new mxEdgeSegmentHandler(a) : new mxEdgeHandler(a)) : b = new mxVertexHandler(a)); + return b +}; +mxGraph.prototype.addMouseListener = function(a) { + null == this.mouseListeners && (this.mouseListeners = []); + this.mouseListeners.push(a) +}; +mxGraph.prototype.removeMouseListener = function(a) { + if (null != this.mouseListeners) + for (var b = 0; b < this.mouseListeners.length; b++) + if (this.mouseListeners[b] == a) { + this.mouseListeners.splice(b, 1); + break + } +}; +mxGraph.prototype.updateMouseEvent = function(a) { + if (null == a.graphX || null == a.graphY) { + var b = mxUtils.convertPoint(this.container, a.getX(), a.getY()); + a.graphX = b.x - this.panDx; + a.graphY = b.y - this.panDy + } +}; +mxGraph.prototype.fireMouseEvent = function(a, b, c) { + null == c && (c = this); + this.updateMouseEvent(b); + a == mxEvent.MOUSE_DOWN && (this.isMouseDown = !0); + if (mxClient.IS_TOUCH && this.doubleTapEnabled && a == mxEvent.MOUSE_DOWN) { + var d = (new Date).getTime(); + d - this.lastTouchTime < this.doubleTapTimeout && Math.abs(this.lastTouchX - b.getX()) < this.doubleTapTolerance && Math.abs(this.lastTouchY - b.getY()) < this.doubleTapTolerance ? (this.lastTouchTime = + 0, this.dblClick(b.getEvent(), b.getCell()), b.getEvent().cancelBubble = !0) : (this.lastTouchX = + b.getX(), this.lastTouchY = b.getY(), this.lastTouchTime = d) + } + d = 2 != b.getEvent().detail; + if (mxClient.IS_IE && "CSS1Compat" == document.compatMode) { + if (null != this.lastMouseX && Math.abs(this.lastMouseX - b.getX()) > this.doubleTapTolerance || null != this.lastMouseY && Math.abs(this.lastMouseY - b.getY()) > this.doubleTapTolerance) d = ! + 0; + a == mxEvent.MOUSE_UP && (this.lastMouseX = b.getX(), this.lastMouseY = b.getY()) + } + if ((a != mxEvent.MOUSE_UP || this.isMouseDown) && d) { + if (a == mxEvent.MOUSE_UP && (this.isMouseDown = !1), !this.isEditing() && (mxClient.IS_OP || + mxClient.IS_SF || mxClient.IS_GC || mxClient.IS_IE && mxClient.IS_SVG || b.getEvent().target != this.container)) { + a == mxEvent.MOUSE_MOVE && (this.isMouseDown && this.autoScroll) && this.scrollPointToVisible(b.getGraphX(), b.getGraphY(), this.autoExtend); + if (null != this.mouseListeners) { + c = [c, b]; + b.getEvent().returnValue = !0; + for (d = 0; d < this.mouseListeners.length; d++) { + var e = this.mouseListeners[d]; + a == mxEvent.MOUSE_DOWN ? e.mouseDown.apply(e, c) : a == mxEvent.MOUSE_MOVE ? e.mouseMove.apply(e, c) : a == mxEvent.MOUSE_UP && e.mouseUp.apply(e, c) + } + } + a == + mxEvent.MOUSE_UP && this.click(b) + } + } else a == mxEvent.MOUSE_UP && (this.isMouseDown = !1) +}; +mxGraph.prototype.destroy = function() { + this.destroyed || (this.destroyed = !0, null != this.tooltipHandler && this.tooltipHandler.destroy(), null != this.selectionCellsHandler && this.selectionCellsHandler.destroy(), null != this.panningHandler && + this.panningHandler.destroy(), null != this.connectionHandler && this.connectionHandler.destroy(), null != this.graphHandler && this.graphHandler.destroy(), null != this.cellEditor && this.cellEditor + .destroy(), null != this.view && this.view.destroy(), null != this.model && null != this.graphModelChangeListener && + (this.model.removeListener(this.graphModelChangeListener), this.graphModelChangeListener = null), this.container = null) +}; + +function mxCellOverlay(a, b, c, d, e, f) { + this.image = a; + this.tooltip = b; + this.align = null != c ? c : this.align; + this.verticalAlign = null != d ? d : this.verticalAlign; + this.offset = null != e ? e : new mxPoint; + this.cursor = null != f ? f : "help" +} +mxCellOverlay.prototype = new mxEventSource; +mxCellOverlay.prototype.constructor = mxCellOverlay; +mxCellOverlay.prototype.image = null; +mxCellOverlay.prototype.tooltip = null; +mxCellOverlay.prototype.align = mxConstants.ALIGN_RIGHT; +mxCellOverlay.prototype.verticalAlign = mxConstants.ALIGN_BOTTOM; +mxCellOverlay.prototype.offset = null; +mxCellOverlay.prototype.cursor = null; +mxCellOverlay.prototype.defaultOverlap = 0.5; +mxCellOverlay.prototype.getBounds = function(a) { + var b = a.view.graph.getModel().isEdge(a.cell), + c = a.view.scale, + d = null, + e = this.image.width, + f = this.image.height; + b ? (b = a.absolutePoints, 1 == b.length % 2 ? d = b[Math.floor(b.length / 2)] : (d = b.length / 2, a = b[d - 1], b = b[d], d = new mxPoint(a.x + (b.x - a.x) / 2, a.y + (b.y - a.y) / 2))) : (d = + new mxPoint, d.x = this.align == mxConstants.ALIGN_LEFT ? a.x : this.align == mxConstants.ALIGN_CENTER ? a.x + a.width / 2 : a.x + a.width, d.y = this.verticalAlign == mxConstants.ALIGN_TOP ? + a.y : this.verticalAlign == mxConstants.ALIGN_MIDDLE ? + a.y + a.height / 2 : a.y + a.height); + return new mxRectangle(Math.round(d.x - (e * this.defaultOverlap - this.offset.x) * c), Math.round(d.y - (f * this.defaultOverlap - this.offset.y) * c), e * c, f * c) +}; +mxCellOverlay.prototype.toString = function() { + return this.tooltip +}; + +function mxOutline(a, b) { + this.source = a; + null != b && this.init(b) +} +mxOutline.prototype.source = null; +mxOutline.prototype.outline = null; +mxOutline.prototype.graphRenderHint = mxConstants.RENDERING_HINT_FASTER; +mxOutline.prototype.enabled = !0; +mxOutline.prototype.showViewport = !0; +mxOutline.prototype.border = 10; +mxOutline.prototype.sizerSize = 8; +mxOutline.prototype.updateOnPan = !1; +mxOutline.prototype.sizerImage = null; +mxOutline.prototype.suspended = !1; +mxOutline.prototype.init = function(a) { + this.outline = new mxGraph(a, this.source.getModel(), this.graphRenderHint, this.source.getStylesheet()); + this.outline.foldingEnabled = !1; + this.outline.autoScroll = !1; + var b = this.outline.graphModelChanged; + this.outline.graphModelChanged = mxUtils.bind(this, function(a) { + !this.suspended && null != this.outline && b.apply(this.outline, arguments) + }); + mxClient.IS_SVG && (a = this.outline.getView().getCanvas().parentNode, a.setAttribute("shape-rendering", "optimizeSpeed"), a.setAttribute("image-rendering", + "optimizeSpeed")); + this.outline.labelsVisible = !1; + this.outline.setEnabled(!1); + this.updateHandler = mxUtils.bind(this, function(a, b) { + !this.suspended && !this.active && this.update() + }); + this.source.getModel().addListener(mxEvent.CHANGE, this.updateHandler); + this.outline.addMouseListener(this); + a = this.source.getView(); + a.addListener(mxEvent.SCALE, this.updateHandler); + a.addListener(mxEvent.TRANSLATE, this.updateHandler); + a.addListener(mxEvent.SCALE_AND_TRANSLATE, this.updateHandler); + a.addListener(mxEvent.DOWN, this.updateHandler); + a.addListener(mxEvent.UP, this.updateHandler); + mxEvent.addListener(this.source.container, "scroll", this.updateHandler); + this.panHandler = mxUtils.bind(this, function(a) { + this.updateOnPan && this.updateHandler.apply(this, arguments) + }); + this.source.addListener(mxEvent.PAN, this.panHandler); + this.refreshHandler = mxUtils.bind(this, function(a) { + this.outline.setStylesheet(this.source.getStylesheet()); + this.outline.refresh() + }); + this.source.addListener(mxEvent.REFRESH, this.refreshHandler); + this.bounds = new mxRectangle(0, 0, 0, + 0); + this.selectionBorder = new mxRectangleShape(this.bounds, null, mxConstants.OUTLINE_COLOR, mxConstants.OUTLINE_STROKEWIDTH); + this.selectionBorder.dialect = this.outline.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG; + this.selectionBorder.init(this.outline.getView().getOverlayPane()); + mxEvent.redirectMouseEvents(this.selectionBorder.node, this.outline); + this.selectionBorder.node.style.background = ""; + this.sizer = this.createSizer(); + this.sizer.init(this.outline.getView().getOverlayPane()); + this.enabled && (this.sizer.node.style.cursor = "pointer"); + mxEvent.addListener(this.sizer.node, mxClient.IS_TOUCH ? "touchstart" : "mousedown", mxUtils.bind(this, function(a) { + this.outline.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a)) + })); + this.selectionBorder.node.style.display = this.showViewport ? "" : "none"; + this.sizer.node.style.display = this.selectionBorder.node.style.display; + this.selectionBorder.node.style.cursor = "move"; + this.update(!1) +}; +mxOutline.prototype.isEnabled = function() { + return this.enabled +}; +mxOutline.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxOutline.prototype.setZoomEnabled = function(a) { + this.sizer.node.style.visibility = a ? "visible" : "hidden" +}; +mxOutline.prototype.refresh = function() { + this.update(!0) +}; +mxOutline.prototype.createSizer = function() { + var a = null != this.sizerImage ? new mxImageShape(new mxRectangle(0, 0, this.sizerImage.width, this.sizerImage.height), this.sizerImage.src) : new mxRectangleShape(new mxRectangle(0, 0, this.sizerSize, + this.sizerSize), mxConstants.OUTLINE_HANDLE_FILLCOLOR, mxConstants.OUTLINE_HANDLE_STROKECOLOR); + a.dialect = this.outline.dialect; + return a +}; +mxOutline.prototype.getSourceContainerSize = function() { + return new mxRectangle(0, 0, this.source.container.scrollWidth, this.source.container.scrollHeight) +}; +mxOutline.prototype.getOutlineOffset = function(a) { + return null +}; +mxOutline.prototype.update = function(a) { + if (null != this.source) { + var b = this.source.view.scale, + c = this.source.getGraphBounds(), + c = new mxRectangle(c.x / b + this.source.panDx, c.y / b + this.source.panDy, c.width / b, c.height / b), + d = new mxRectangle(0, 0, this.source.container.clientWidth / b, this.source.container.clientHeight / b), + e = c.clone(); + e.add(d); + var f = this.getSourceContainerSize(), + d = Math.max(f.width / b, e.width), + b = Math.max(f.height / b, e.height), + e = Math.max(0, this.outline.container.clientWidth - this.border), + f = Math.max(0, this.outline.container.clientHeight - + this.border), + e = Math.min(e / d, f / b); + if (0 < e) { + this.outline.getView().scale != e && (this.outline.getView().scale = e, a = !0); + d = this.outline.getView(); + d.currentRoot != this.source.getView().currentRoot && d.setCurrentRoot(this.source.getView().currentRoot); + var b = this.source.view.translate, + f = b.x + this.source.panDx, + g = b.y + this.source.panDy, + e = this.getOutlineOffset(e); + null != e && (f += e.x, g += e.y); + 0 > c.x && (f -= c.x); + 0 > c.y && (g -= c.y); + if (d.translate.x != f || d.translate.y != g) d.translate.x = f, d.translate.y = g, a = !0; + var c = d.translate, + e = this.source.getView().scale, + f = e / d.scale, + g = 1 / d.scale, + h = this.source.container; + this.bounds = new mxRectangle((c.x - b.x - this.source.panDx) / g, (c.y - b.y - this.source.panDy) / g, h.clientWidth / f, h.clientHeight / f); + this.bounds.x += this.source.container.scrollLeft * d.scale / e; + this.bounds.y += this.source.container.scrollTop * d.scale / e; + c = this.selectionBorder.bounds; + if (c.x != this.bounds.x || c.y != this.bounds.y || c.width != this.bounds.width || c.height != this.bounds.height) this.selectionBorder.bounds = this.bounds, this.selectionBorder.redraw(); + c = this.sizer.bounds; + d = new mxRectangle(this.bounds.x + this.bounds.width - c.width / 2, this.bounds.y + this.bounds.height - c.height / 2, c.width, c.height); + if (c.x != d.x || c.y != d.y || c.width != d.width || c.height != d.height) this.sizer.bounds = d, "hidden" != this.sizer.node.style.visibility && this.sizer.redraw(); + a && this.outline.view.revalidate() + } + } +}; +mxOutline.prototype.mouseDown = function(a, b) { + this.enabled && this.showViewport && (this.zoom = b.isSource(this.sizer), this.startX = b.getX(), this.startY = b.getY(), this.active = !0, this.source.useScrollbarsForPanning && mxUtils.hasScrollbars( + this.source.container) ? (this.dx0 = this.source.container.scrollLeft, this.dy0 = this.source.container.scrollTop) : this.dy0 = this.dx0 = 0); + b.consume() +}; +mxOutline.prototype.mouseMove = function(a, b) { + if (this.active) { + this.selectionBorder.node.style.display = this.showViewport ? "" : "none"; + this.sizer.node.style.display = this.selectionBorder.node.style.display; + var c = b.getX() - this.startX, + d = b.getY() - this.startY, + e = null; + if (this.zoom) e = this.source.container, d = c / (e.clientWidth / e.clientHeight), e = new mxRectangle(this.bounds.x, this.bounds.y, Math.max(1, this.bounds.width + c), Math.max(1, this.bounds + .height + d)), this.selectionBorder.bounds = e, this.selectionBorder.redraw(); + else { + var f = + this.outline.getView().scale, + e = new mxRectangle(this.bounds.x + c, this.bounds.y + d, this.bounds.width, this.bounds.height); + this.selectionBorder.bounds = e; + this.selectionBorder.redraw(); + c = c / f * this.source.getView().scale; + d = d / f * this.source.getView().scale; + this.source.panGraph(-c - this.dx0, -d - this.dy0) + } + c = this.sizer.bounds; + this.sizer.bounds = new mxRectangle(e.x + e.width - c.width / 2, e.y + e.height - c.height / 2, c.width, c.height); + "hidden" != this.sizer.node.style.visibility && this.sizer.redraw(); + b.consume() + } +}; +mxOutline.prototype.mouseUp = function(a, b) { + if (this.active) { + var c = b.getX() - this.startX, + d = b.getY() - this.startY; + if (0 < Math.abs(c) || 0 < Math.abs(d)) { + if (this.zoom) { + var d = this.selectionBorder.bounds.width, + e = this.source.getView().scale; + this.source.zoomTo(e - c * e / d, !1) + } else if (!this.source.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.source.container)) this.source.panGraph(0, 0), c /= this.outline.getView().scale, d /= this.outline.getView().scale, + e = this.source.getView().translate, this.source.getView().setTranslate(e.x - + c, e.y - d); + this.update(); + b.consume() + } + this.index = null; + this.active = !1 + } +}; +mxOutline.prototype.destroy = function() { + null != this.source && (this.source.removeListener(this.panHandler), this.source.removeListener(this.refreshHandler), this.source.getModel().removeListener(this.updateHandler), this.source.getView() + .removeListener(this.updateHandler), mxEvent.addListener(this.source.container, "scroll", this.updateHandler), this.source = null); + null != this.outline && (this.outline.removeMouseListener(this), this.outline.destroy(), this.outline = null); + null != this.selectionBorder && (this.selectionBorder.destroy(), + this.selectionBorder = null); + null != this.sizer && (this.sizer.destroy(), this.sizer = null) +}; + +function mxMultiplicity(a, b, c, d, e, f, g, h, k, l) { + this.source = a; + this.type = b; + this.attr = c; + this.value = d; + this.min = null != e ? e : 0; + this.max = null != f ? f : "n"; + this.validNeighbors = g; + this.countError = mxResources.get(h) || h; + this.typeError = mxResources.get(k) || k; + this.validNeighborsAllowed = null != l ? l : !0 +} +mxMultiplicity.prototype.type = null; +mxMultiplicity.prototype.attr = null; +mxMultiplicity.prototype.value = null; +mxMultiplicity.prototype.source = null; +mxMultiplicity.prototype.min = null; +mxMultiplicity.prototype.max = null; +mxMultiplicity.prototype.validNeighbors = null; +mxMultiplicity.prototype.validNeighborsAllowed = !0; +mxMultiplicity.prototype.countError = null; +mxMultiplicity.prototype.typeError = null; +mxMultiplicity.prototype.check = function(a, b, c, d, e, f) { + var g = ""; + if (this.source && this.checkTerminal(a, c, b) || !this.source && this.checkTerminal(a, d, b)) { + if (null != this.countError && (this.source && (0 == this.max || e >= this.max) || !this.source && (0 == this.max || f >= this.max))) g += this.countError + "\n"; + null != this.validNeighbors && (null != this.typeError && 0 < this.validNeighbors.length) && (this.checkNeighbors(a, b, c, d) || (g += this.typeError + "\n")) + } + return 0 < g.length ? g : null +}; +mxMultiplicity.prototype.checkNeighbors = function(a, b, c, d) { + b = a.model.getValue(c); + d = a.model.getValue(d); + c = !this.validNeighborsAllowed; + for (var e = this.validNeighbors, f = 0; f < e.length; f++) + if (this.source && this.checkType(a, d, e[f])) { + c = this.validNeighborsAllowed; + break + } else if (!this.source && this.checkType(a, b, e[f])) { + c = this.validNeighborsAllowed; + break + } + return c +}; +mxMultiplicity.prototype.checkTerminal = function(a, b, c) { + b = a.model.getValue(b); + return this.checkType(a, b, this.type, this.attr, this.value) +}; +mxMultiplicity.prototype.checkType = function(a, b, c, d, e) { + return null != b ? isNaN(b.nodeType) ? b == c : mxUtils.isNode(b, c, d, e) : !1 +}; + +function mxLayoutManager(a) { + this.undoHandler = mxUtils.bind(this, function(a, c) { + this.isEnabled() && this.beforeUndo(c.getProperty("edit")) + }); + this.moveHandler = mxUtils.bind(this, function(a, c) { + this.isEnabled() && this.cellsMoved(c.getProperty("cells"), c.getProperty("event")) + }); + this.setGraph(a) +} +mxLayoutManager.prototype = new mxEventSource; +mxLayoutManager.prototype.constructor = mxLayoutManager; +mxLayoutManager.prototype.graph = null; +mxLayoutManager.prototype.bubbling = !0; +mxLayoutManager.prototype.enabled = !0; +mxLayoutManager.prototype.updateHandler = null; +mxLayoutManager.prototype.moveHandler = null; +mxLayoutManager.prototype.isEnabled = function() { + return this.enabled +}; +mxLayoutManager.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxLayoutManager.prototype.isBubbling = function() { + return this.bubbling +}; +mxLayoutManager.prototype.setBubbling = function(a) { + this.bubbling = a +}; +mxLayoutManager.prototype.getGraph = function() { + return this.graph +}; +mxLayoutManager.prototype.setGraph = function(a) { + if (null != this.graph) { + var b = this.graph.getModel(); + b.removeListener(this.undoHandler); + this.graph.removeListener(this.moveHandler) + } + this.graph = a; + null != this.graph && (b = this.graph.getModel(), b.addListener(mxEvent.BEFORE_UNDO, this.undoHandler), this.graph.addListener(mxEvent.MOVE_CELLS, this.moveHandler)) +}; +mxLayoutManager.prototype.getLayout = function(a) { + return null +}; +mxLayoutManager.prototype.beforeUndo = function(a) { + a = this.getCellsForChanges(a.changes); + var b = this.getGraph().getModel(); + if (this.isBubbling()) + for (var c = b.getParents(a); 0 < c.length;) a = a.concat(c), c = b.getParents(c); + this.layoutCells(mxUtils.sortCells(a, !1)) +}; +mxLayoutManager.prototype.cellsMoved = function(a, b) { + if (null != a && null != b) + for (var c = mxUtils.convertPoint(this.getGraph().container, mxEvent.getClientX(b), mxEvent.getClientY(b)), d = this.getGraph().getModel(), e = 0; e < a.length; e++) { + var f = this.getLayout(d.getParent(a[e])); + null != f && f.moveCell(a[e], c.x, c.y) + } +}; +mxLayoutManager.prototype.getCellsForChanges = function(a) { + for (var b = [], c = {}, d = 0; d < a.length; d++) { + var e = a[d]; + if (e instanceof mxRootChange) return []; + for (var e = this.getCellsForChange(e), f = 0; f < e.length; f++) + if (null != e[f]) { + var g = mxCellPath.create(e[f]); + null == c[g] && (c[g] = e[f], b.push(e[f])) + } + } + return b +}; +mxLayoutManager.prototype.getCellsForChange = function(a) { + var b = this.getGraph().getModel(); + return a instanceof mxChildChange ? [a.child, a.previous, b.getParent(a.child)] : a instanceof mxTerminalChange || a instanceof mxGeometryChange ? [a.cell, b.getParent(a.cell)] : [] +}; +mxLayoutManager.prototype.layoutCells = function(a) { + if (0 < a.length) { + var b = this.getGraph().getModel(); + b.beginUpdate(); + try { + for (var c = null, d = 0; d < a.length; d++) a[d] != b.getRoot() && a[d] != c && (c = a[d], this.executeLayout(this.getLayout(c), c)); + this.fireEvent(new mxEventObject(mxEvent.LAYOUT_CELLS, "cells", a)) + } finally { + b.endUpdate() + } + } +}; +mxLayoutManager.prototype.executeLayout = function(a, b) { + null != a && null != b && a.execute(b) +}; +mxLayoutManager.prototype.destroy = function() { + this.setGraph(null) +}; + +function mxSpaceManager(a, b, c, d) { + this.resizeHandler = mxUtils.bind(this, function(a, b) { + this.isEnabled() && this.cellsResized(b.getProperty("cells")) + }); + this.foldHandler = mxUtils.bind(this, function(a, b) { + this.isEnabled() && this.cellsResized(b.getProperty("cells")) + }); + this.shiftRightwards = null != b ? b : !0; + this.shiftDownwards = null != c ? c : !0; + this.extendParents = null != d ? d : !0; + this.setGraph(a) +} +mxSpaceManager.prototype = new mxEventSource; +mxSpaceManager.prototype.constructor = mxSpaceManager; +mxSpaceManager.prototype.graph = null; +mxSpaceManager.prototype.enabled = !0; +mxSpaceManager.prototype.shiftRightwards = !0; +mxSpaceManager.prototype.shiftDownwards = !0; +mxSpaceManager.prototype.extendParents = !0; +mxSpaceManager.prototype.resizeHandler = null; +mxSpaceManager.prototype.foldHandler = null; +mxSpaceManager.prototype.isCellIgnored = function(a) { + return !this.getGraph().getModel().isVertex(a) +}; +mxSpaceManager.prototype.isCellShiftable = function(a) { + return this.getGraph().getModel().isVertex(a) && this.getGraph().isCellMovable(a) +}; +mxSpaceManager.prototype.isEnabled = function() { + return this.enabled +}; +mxSpaceManager.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxSpaceManager.prototype.isShiftRightwards = function() { + return this.shiftRightwards +}; +mxSpaceManager.prototype.setShiftRightwards = function(a) { + this.shiftRightwards = a +}; +mxSpaceManager.prototype.isShiftDownwards = function() { + return this.shiftDownwards +}; +mxSpaceManager.prototype.setShiftDownwards = function(a) { + this.shiftDownwards = a +}; +mxSpaceManager.prototype.isExtendParents = function() { + return this.extendParents +}; +mxSpaceManager.prototype.setExtendParents = function(a) { + this.extendParents = a +}; +mxSpaceManager.prototype.getGraph = function() { + return this.graph +}; +mxSpaceManager.prototype.setGraph = function(a) { + null != this.graph && (this.graph.removeListener(this.resizeHandler), this.graph.removeListener(this.foldHandler)); + this.graph = a; + null != this.graph && (this.graph.addListener(mxEvent.RESIZE_CELLS, this.resizeHandler), this.graph.addListener(mxEvent.FOLD_CELLS, this.foldHandler)) +}; +mxSpaceManager.prototype.cellsResized = function(a) { + if (null != a) { + var b = this.graph.getModel(); + b.beginUpdate(); + try { + for (var c = 0; c < a.length; c++) + if (!this.isCellIgnored(a[c])) { + this.cellResized(a[c]); + break + } + } finally { + b.endUpdate() + } + } +}; +mxSpaceManager.prototype.cellResized = function(a) { + var b = this.getGraph(), + c = b.getView(), + d = b.getModel(), + e = c.getState(a), + f = c.getState(d.getParent(a)); + if (null != e && null != f) { + var g = this.getCellsToShift(e), + h = d.getGeometry(a); + if (null != g && null != h) { + var k = c.translate, + l = c.scale, + c = e.x - f.origin.x - k.x * l, + f = e.y - f.origin.y - k.y * l, + k = e.x + e.width, + m = e.y + e.height, + n = e.width - h.width * l + c - h.x * l, + p = e.height - h.height * l + f - h.y * l, + q = 1 - h.width * l / e.width, + e = 1 - h.height * l / e.height; + d.beginUpdate(); + try { + for (h = 0; h < g.length; h++) g[h] != a && this.isCellShiftable(g[h]) && + this.shiftCell(g[h], n, p, c, f, k, m, q, e, this.isExtendParents() && b.isExtendParent(g[h])) + } finally { + d.endUpdate() + } + } + } +}; +mxSpaceManager.prototype.shiftCell = function(a, b, c, d, e, f, g, h, k, l) { + d = this.getGraph(); + var m = d.getView().getState(a); + if (null != m) { + var n = d.getModel(), + p = n.getGeometry(a); + if (null != p) { + n.beginUpdate(); + try { + if (this.isShiftRightwards()) + if (m.x >= f) p = p.clone(), p.translate(-b, 0); + else { + var q = Math.max(0, m.x - x0), + p = p.clone(); + p.translate(-h * q, 0) + } + if (this.isShiftDownwards()) + if (m.y >= g) p = p.clone(), p.translate(0, -c); + else { + var s = Math.max(0, m.y - e), + p = p.clone(); + p.translate(0, -k * s) + } + p != n.getGeometry(a) && (n.setGeometry(a, p), l && d.extendParent(a)) + } finally { + n.endUpdate() + } + } + } +}; +mxSpaceManager.prototype.getCellsToShift = function(a) { + var b = this.getGraph(), + c = b.getModel().getParent(a.cell), + d = this.isShiftDownwards(), + e = this.isShiftRightwards(); + return b.getCellsBeyond(a.x + (d ? 0 : a.width), a.y + (d && e ? 0 : a.height), c, e, d) +}; +mxSpaceManager.prototype.destroy = function() { + this.setGraph(null) +}; + +function mxSwimlaneManager(a, b, c, d) { + this.horizontal = null != b ? b : !0; + this.addEnabled = null != c ? c : !0; + this.resizeEnabled = null != d ? d : !0; + this.addHandler = mxUtils.bind(this, function(a, b) { + this.isEnabled() && this.isAddEnabled() && this.cellsAdded(b.getProperty("cells")) + }); + this.resizeHandler = mxUtils.bind(this, function(a, b) { + this.isEnabled() && this.isResizeEnabled() && this.cellsResized(b.getProperty("cells")) + }); + this.setGraph(a) +} +mxSwimlaneManager.prototype = new mxEventSource; +mxSwimlaneManager.prototype.constructor = mxSwimlaneManager; +mxSwimlaneManager.prototype.graph = null; +mxSwimlaneManager.prototype.enabled = !0; +mxSwimlaneManager.prototype.horizontal = !0; +mxSwimlaneManager.prototype.addEnabled = !0; +mxSwimlaneManager.prototype.resizeEnabled = !0; +mxSwimlaneManager.prototype.addHandler = null; +mxSwimlaneManager.prototype.resizeHandler = null; +mxSwimlaneManager.prototype.isEnabled = function() { + return this.enabled +}; +mxSwimlaneManager.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxSwimlaneManager.prototype.isHorizontal = function() { + return this.horizontal +}; +mxSwimlaneManager.prototype.setHorizontal = function(a) { + this.horizontal = a +}; +mxSwimlaneManager.prototype.isAddEnabled = function() { + return this.addEnabled +}; +mxSwimlaneManager.prototype.setAddEnabled = function(a) { + this.addEnabled = a +}; +mxSwimlaneManager.prototype.isResizeEnabled = function() { + return this.resizeEnabled +}; +mxSwimlaneManager.prototype.setResizeEnabled = function(a) { + this.resizeEnabled = a +}; +mxSwimlaneManager.prototype.getGraph = function() { + return this.graph +}; +mxSwimlaneManager.prototype.setGraph = function(a) { + null != this.graph && (this.graph.removeListener(this.addHandler), this.graph.removeListener(this.resizeHandler)); + this.graph = a; + null != this.graph && (this.graph.addListener(mxEvent.ADD_CELLS, this.addHandler), this.graph.addListener(mxEvent.CELLS_RESIZED, this.resizeHandler)) +}; +mxSwimlaneManager.prototype.isSwimlaneIgnored = function(a) { + return !this.getGraph().isSwimlane(a) +}; +mxSwimlaneManager.prototype.isCellHorizontal = function(a) { + if (this.graph.isSwimlane(a)) { + var b = this.graph.view.getState(a); + a = null != b ? b.style : this.graph.getCellStyle(a); + return 1 == mxUtils.getValue(a, mxConstants.STYLE_HORIZONTAL, 1) + } + return !this.isHorizontal() +}; +mxSwimlaneManager.prototype.cellsAdded = function(a) { + if (null != a) { + var b = this.getGraph().getModel(); + b.beginUpdate(); + try { + for (var c = 0; c < a.length; c++) this.isSwimlaneIgnored(a[c]) || this.swimlaneAdded(a[c]) + } finally { + b.endUpdate() + } + } +}; +mxSwimlaneManager.prototype.swimlaneAdded = function(a) { + for (var b = this.getGraph().getModel(), c = b.getParent(a), d = b.getChildCount(c), e = null, f = 0; f < d; f++) { + var g = b.getChildAt(c, f); + if (g != a && !this.isSwimlaneIgnored(g) && (e = b.getGeometry(g), null != e)) break + } + null != e && this.resizeSwimlane(a, e.width, e.height) +}; +mxSwimlaneManager.prototype.cellsResized = function(a) { + if (null != a) { + var b = this.getGraph().getModel(); + b.beginUpdate(); + try { + for (var c = 0; c < a.length; c++) + if (!this.isSwimlaneIgnored(a[c])) { + var d = b.getGeometry(a[c]); + if (null != d) { + for (var e = new mxRectangle(0, 0, d.width, d.height), f = a[c], g = f; null != g;) { + var f = g, + g = b.getParent(g), + h = this.graph.isSwimlane(g) ? this.graph.getStartSize(g) : new mxRectangle; + e.width += h.width; + e.height += h.height + } + this.resizeSwimlane(f, e.width, e.height) + } + } + } finally { + b.endUpdate() + } + } +}; +mxSwimlaneManager.prototype.resizeSwimlane = function(a, b, c) { + var d = this.getGraph().getModel(); + d.beginUpdate(); + try { + if (!this.isSwimlaneIgnored(a)) { + var e = d.getGeometry(a); + if (null != e) { + var f = this.isCellHorizontal(a); + if (f && e.height != c || !f && e.width != b) e = e.clone(), f ? e.height = c : e.width = b, d.setGeometry(a, e) + } + } + var g = this.graph.isSwimlane(a) ? this.graph.getStartSize(a) : new mxRectangle; + b -= g.width; + c -= g.height; + for (var h = d.getChildCount(a), e = 0; e < h; e++) { + var k = d.getChildAt(a, e); + this.resizeSwimlane(k, b, c) + } + } finally { + d.endUpdate() + } +}; +mxSwimlaneManager.prototype.destroy = function() { + this.setGraph(null) +}; + +function mxTemporaryCellStates(a, b, c) { + this.view = a; + b = null != b ? b : 1; + this.oldBounds = a.getGraphBounds(); + this.oldStates = a.getStates(); + this.oldScale = a.getScale(); + a.setStates(new mxDictionary); + a.setScale(b); + if (null != c) { + b = a.createState(new mxCell); + for (var d = 0; d < c.length; d++) a.validateBounds(b, c[d]); + for (var e = null, d = 0; d < c.length; d++) { + var f = a.validatePoints(b, c[d]); + null == e ? e = f : e.add(f) + } + null == e && (e = new mxRectangle); + a.setGraphBounds(e) + } +} +mxTemporaryCellStates.prototype.view = null; +mxTemporaryCellStates.prototype.oldStates = null; +mxTemporaryCellStates.prototype.oldBounds = null; +mxTemporaryCellStates.prototype.oldScale = null; +mxTemporaryCellStates.prototype.destroy = function() { + this.view.setScale(this.oldScale); + this.view.setStates(this.oldStates); + this.view.setGraphBounds(this.oldBounds) +}; + +function mxCellStatePreview(a) { + this.graph = a; + this.deltas = {} +} +mxCellStatePreview.prototype.graph = null; +mxCellStatePreview.prototype.deltas = null; +mxCellStatePreview.prototype.count = 0; +mxCellStatePreview.prototype.isEmpty = function() { + return 0 == this.count +}; +mxCellStatePreview.prototype.moveState = function(a, b, c, d, e) { + d = null != d ? d : !0; + e = null != e ? e : !0; + var f = mxCellPath.create(a.cell), + g = this.deltas[f]; + null == g ? (g = new mxPoint(b, c), this.deltas[f] = g, this.count++) : d ? (g.X += b, g.Y += c) : (g.X = b, g.Y = c); + e && this.addEdges(a); + return g +}; +mxCellStatePreview.prototype.show = function(a) { + var b = this.graph.getModel(), + c = b.getRoot(), + d; + for (d in this.deltas) { + var e = mxCellPath.resolve(c, d), + f = this.graph.view.getState(e), + g = this.deltas[d], + e = this.graph.view.getState(b.getParent(e)); + this.translateState(e, f, g.x, g.y) + } + for (d in this.deltas) e = mxCellPath.resolve(c, d), f = this.graph.view.getState(e), g = this.deltas[d], e = this.graph.view.getState(b.getParent(e)), this.revalidateState(e, f, g.x, g.y, a) +}; +mxCellStatePreview.prototype.translateState = function(a, b, c, d) { + if (null != b) { + var e = this.graph.getModel(); + if (e.isVertex(b.cell)) { + b.invalid = !0; + this.graph.view.validateBounds(a, b.cell); + a = e.getGeometry(b.cell); + var f = mxCellPath.create(b.cell); + if ((0 != c || 0 != d) && null != a && (!a.relative || null != this.deltas[f])) b.x += c, b.y += d + } + a = e.getChildCount(b.cell); + for (f = 0; f < a; f++) this.translateState(b, this.graph.view.getState(e.getChildAt(b.cell, f)), c, d) + } +}; +mxCellStatePreview.prototype.revalidateState = function(a, b, c, d, e) { + if (null != b) { + b.invalid = !0; + this.graph.view.validatePoints(a, b.cell); + var f = mxCellPath.create(b.cell), + g = this.graph.getModel(), + h = this.graph.getCellGeometry(b.cell); + if ((0 != c || 0 != d) && null != h && h.relative && g.isVertex(b.cell) && (null == a || g.isVertex(a.cell) || null != this.deltas[f])) b.x += c, b.y += d, this.graph.cellRenderer.redraw(b); + null != e && e(b); + a = g.getChildCount(b.cell); + for (f = 0; f < a; f++) this.revalidateState(b, this.graph.view.getState(g.getChildAt(b.cell, + f)), c, d, e) + } +}; +mxCellStatePreview.prototype.addEdges = function(a) { + for (var b = this.graph.getModel(), c = b.getEdgeCount(a.cell), d = 0; d < c; d++) { + var e = this.graph.view.getState(b.getEdgeAt(a.cell, d)); + null != e && this.moveState(e, 0, 0) + } +}; + +function mxConnectionConstraint(a, b) { + this.point = a; + this.perimeter = null != b ? b : !0 +} +mxConnectionConstraint.prototype.point = null; +mxConnectionConstraint.prototype.perimeter = null; + +function mxGraphHandler(a) { + this.graph = a; + this.graph.addMouseListener(this); + this.panHandler = mxUtils.bind(this, function() { + this.updatePreviewShape() + }); + this.graph.addListener(mxEvent.PAN, this.panHandler) +} +mxGraphHandler.prototype.graph = null; +mxGraphHandler.prototype.maxCells = mxClient.IS_IE ? 20 : 50; +mxGraphHandler.prototype.enabled = !0; +mxGraphHandler.prototype.highlightEnabled = !0; +mxGraphHandler.prototype.cloneEnabled = !0; +mxGraphHandler.prototype.moveEnabled = !0; +mxGraphHandler.prototype.guidesEnabled = !1; +mxGraphHandler.prototype.guide = null; +mxGraphHandler.prototype.currentDx = null; +mxGraphHandler.prototype.currentDy = null; +mxGraphHandler.prototype.updateCursor = !0; +mxGraphHandler.prototype.selectEnabled = !0; +mxGraphHandler.prototype.removeCellsFromParent = !0; +mxGraphHandler.prototype.connectOnDrop = !1; +mxGraphHandler.prototype.scrollOnMove = !0; +mxGraphHandler.prototype.minimumSize = 6; +mxGraphHandler.prototype.previewColor = "black"; +mxGraphHandler.prototype.htmlPreview = !1; +mxGraphHandler.prototype.shape = null; +mxGraphHandler.prototype.scaleGrid = !1; +mxGraphHandler.prototype.rotationEnabled = !0; +mxGraphHandler.prototype.isEnabled = function() { + return this.enabled +}; +mxGraphHandler.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxGraphHandler.prototype.isCloneEnabled = function() { + return this.cloneEnabled +}; +mxGraphHandler.prototype.setCloneEnabled = function(a) { + this.cloneEnabled = a +}; +mxGraphHandler.prototype.isMoveEnabled = function() { + return this.moveEnabled +}; +mxGraphHandler.prototype.setMoveEnabled = function(a) { + this.moveEnabled = a +}; +mxGraphHandler.prototype.isSelectEnabled = function() { + return this.selectEnabled +}; +mxGraphHandler.prototype.setSelectEnabled = function(a) { + this.selectEnabled = a +}; +mxGraphHandler.prototype.isRemoveCellsFromParent = function() { + return this.removeCellsFromParent +}; +mxGraphHandler.prototype.setRemoveCellsFromParent = function(a) { + this.removeCellsFromParent = a +}; +mxGraphHandler.prototype.getInitialCellForEvent = function(a) { + return a.getCell() +}; +mxGraphHandler.prototype.isDelayedSelection = function(a) { + return this.graph.isCellSelected(a) +}; +mxGraphHandler.prototype.mouseDown = function(a, b) { + if (!b.isConsumed() && this.isEnabled() && this.graph.isEnabled() && !this.graph.isForceMarqueeEvent(b.getEvent()) && null != b.getState()) { + var c = this.getInitialCellForEvent(b); + this.cell = null; + this.delayedSelection = this.isDelayedSelection(c); + this.isSelectEnabled() && !this.delayedSelection && this.graph.selectCellForEvent(c, b.getEvent()); + if (this.isMoveEnabled()) { + var d = this.graph.model, + e = d.getGeometry(c); + this.graph.isCellMovable(c) && (!d.isEdge(c) || 1 < this.graph.getSelectionCount() || + null != e.points && 0 < e.points.length || null == d.getTerminal(c, !0) || null == d.getTerminal(c, !1) || this.graph.allowDanglingEdges || this.graph.isCloneEvent(b.getEvent()) && this.graph + .isCellsCloneable()) && this.start(c, b.getX(), b.getY()); + this.cellWasClicked = !0; + !mxClient.IS_SF && !mxClient.IS_GC || "SELECT" != b.getSource().nodeName ? b.consume() : mxClient.IS_SF && "SELECT" == b.getSource().nodeName && (this.cellWasClicked = !1, this.first = null) + } + } +}; +mxGraphHandler.prototype.getGuideStates = function() { + var a = this.graph.getDefaultParent(), + b = this.graph.getModel(), + c = mxUtils.bind(this, function(a) { + return null != this.graph.view.getState(a) && b.isVertex(a) && null != b.getGeometry(a) && !b.getGeometry(a).relative + }); + return this.graph.view.getCellStates(b.filterDescendants(c, a)) +}; +mxGraphHandler.prototype.getCells = function(a) { + return !this.delayedSelection && this.graph.isCellMovable(a) ? [a] : this.graph.getMovableCells(this.graph.getSelectionCells()) +}; +mxGraphHandler.prototype.getPreviewBounds = function(a) { + a = this.getBoundingBox(a); + null != a && (a.grow(-1, -1), a.width < this.minimumSize && (a.x -= (this.minimumSize - a.width) / 2, a.width = this.minimumSize), a.height < this.minimumSize && (a.y -= (this.minimumSize - a.height) / + 2, a.height = this.minimumSize)); + return a +}; +mxGraphHandler.prototype.getBoundingBox = function(a) { + var b = null; + if (null != a && 0 < a.length) + for (var c = this.graph.getModel(), d = 0; d < a.length; d++) + if (c.isVertex(a[d]) || c.isEdge(a[d])) { + var e = this.graph.view.getState(a[d]); + if (null != e) { + var f = e; + c.isVertex(a[d]) && (null != e.shape && null != e.shape.boundingBox) && (f = e.shape.boundingBox); + null == b ? b = new mxRectangle(f.x, f.y, f.width, f.height) : b.add(f) + } + } + return b +}; +mxGraphHandler.prototype.createPreviewShape = function(a) { + a = new mxRectangleShape(a, null, this.previewColor); + a.isDashed = !0; + this.htmlPreview ? (a.dialect = mxConstants.DIALECT_STRICTHTML, a.init(this.graph.container)) : (a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG, + a.init(this.graph.getView().getOverlayPane()), a.pointerEvents = !1); + return a +}; +mxGraphHandler.prototype.start = function(a, b, c) { + this.cell = a; + this.first = mxUtils.convertPoint(this.graph.container, b, c); + this.cells = this.getCells(this.cell); + this.bounds = this.graph.getView().getBounds(this.cells); + this.pBounds = this.getPreviewBounds(this.cells); + this.guidesEnabled && (this.guide = new mxGuide(this.graph, this.getGuideStates())) +}; +mxGraphHandler.prototype.useGuidesForEvent = function(a) { + return null != this.guide ? this.guide.isEnabledForEvent(a.getEvent()) : !0 +}; +mxGraphHandler.prototype.snap = function(a) { + var b = this.scaleGrid ? this.graph.view.scale : 1; + a.x = this.graph.snap(a.x / b) * b; + a.y = this.graph.snap(a.y / b) * b; + return a +}; +mxGraphHandler.prototype.mouseMove = function(a, b) { + var c = this.graph; + if (!b.isConsumed() && c.isMouseDown && null != this.cell && null != this.first && null != this.bounds) { + var d = mxUtils.convertPoint(c.container, b.getX(), b.getY()), + e = d.x - this.first.x, + f = d.y - this.first.y, + d = c.tolerance; + if (null != this.shape || Math.abs(e) > d || Math.abs(f) > d) { + null == this.highlight && (this.highlight = new mxCellHighlight(this.graph, mxConstants.DROP_TARGET_COLOR, 3)); + null == this.shape && (this.shape = this.createPreviewShape(this.bounds)); + var g = c.isGridEnabledEvent(b.getEvent()), + d = !0; + if (null != this.guide && this.useGuidesForEvent(b)) f = this.guide.move(this.bounds, new mxPoint(e, f), g), d = !1, e = f.x, f = f.y; + else if (g) var h = c.getView().translate, + k = c.getView().scale, + g = this.bounds.x - (c.snap(this.bounds.x / k - h.x) + h.x) * k, + h = this.bounds.y - (c.snap(this.bounds.y / k - h.y) + h.y) * k, + f = this.snap(new mxPoint(e, f)), + e = f.x - g, + f = f.y - h; + null != this.guide && d && this.guide.hide(); + c.isConstrainedEvent(b.getEvent()) && (Math.abs(e) > Math.abs(f) ? f = 0 : e = 0); + this.currentDx = e; + this.currentDy = f; + this.updatePreviewShape(); + d = null; + f = b.getCell(); + c.isDropEnabled() && this.highlightEnabled && (d = c.getDropTarget(this.cells, b.getEvent(), f)); + g = d; + for (h = c.getModel(); null != g && g != this.cells[0];) g = h.getParent(g); + var k = c.isCloneEvent(b.getEvent()) && c.isCellsCloneable() && this.isCloneEnabled(), + e = c.getView().getState(d), + l = !1; + null != e && null == g && (h.getParent(this.cell) != d || k) ? (this.target != d && (this.target = d, this.setHighlightColor(mxConstants.DROP_TARGET_COLOR)), l = !0) : (this.target = null, + this.connectOnDrop && (null != f && 1 == this.cells.length && c.getModel().isVertex(f) && + c.isCellConnectable(f)) && (e = c.getView().getState(f), null != e && (c = null == c.getEdgeValidationError(null, this.cell, f) ? mxConstants.VALID_COLOR : mxConstants.INVALID_CONNECT_TARGET_COLOR, + this.setHighlightColor(c), l = !0))); + null != e && l ? this.highlight.highlight(e) : this.highlight.hide() + } + b.consume(); + mxEvent.consume(b.getEvent()) + } else if ((this.isMoveEnabled() || this.isCloneEnabled()) && this.updateCursor && !b.isConsumed() && null != b.getState() && !c.isMouseDown) e = c.getCursorForCell(b.getCell()), null == e && (c.isEnabled() && + c.isCellMovable(b.getCell())) && + (e = c.getModel().isEdge(b.getCell()) ? mxConstants.CURSOR_MOVABLE_EDGE : mxConstants.CURSOR_MOVABLE_VERTEX), b.getState().setCursor(e), b.consume() +}; +mxGraphHandler.prototype.updatePreviewShape = function() { + null != this.shape && (this.shape.bounds = new mxRectangle(Math.round(this.pBounds.x + this.currentDx - this.graph.panDx), Math.round(this.pBounds.y + this.currentDy - this.graph.panDy), this.pBounds + .width, this.pBounds.height), this.shape.redraw()) +}; +mxGraphHandler.prototype.setHighlightColor = function(a) { + null != this.highlight && this.highlight.setHighlightColor(a) +}; +mxGraphHandler.prototype.mouseUp = function(a, b) { + if (!b.isConsumed()) { + var c = this.graph; + if (null != this.cell && null != this.first && null != this.shape && null != this.currentDx && null != this.currentDy) { + var d = c.getView().scale, + e = c.isCloneEvent(b.getEvent()) && c.isCellsCloneable() && this.isCloneEnabled(), + f = this.currentDx / d, + d = this.currentDy / d, + g = b.getCell(); + this.connectOnDrop && null == this.target && null != g && c.getModel().isVertex(g) && c.isCellConnectable(g) && c.isEdgeValid(null, this.cell, g) ? c.connectionHandler.connect(this.cell, + g, b.getEvent()) : (g = this.target, c.isSplitEnabled() && c.isSplitTarget(g, this.cells, b.getEvent()) ? c.splitEdge(g, this.cells, null, f, d) : this.moveCells(this.cells, f, d, e, this + .target, b.getEvent())) + } else this.isSelectEnabled() && (this.delayedSelection && null != this.cell) && this.selectDelayed(b) + } + this.cellWasClicked && b.consume(); + this.reset() +}; +mxGraphHandler.prototype.selectDelayed = function(a) { + this.graph.selectCellForEvent(this.cell, a.getEvent()) +}; +mxGraphHandler.prototype.reset = function() { + this.destroyShapes(); + this.delayedSelection = this.cellWasClicked = !1; + this.target = this.cell = this.first = this.guides = this.currentDy = this.currentDx = null +}; +mxGraphHandler.prototype.shouldRemoveCellsFromParent = function(a, b, c) { + if (this.graph.getModel().isVertex(a)) { + a = this.graph.getView().getState(a); + c = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(c), mxEvent.getClientY(c)); + var d = mxUtils.toRadians(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION) || 0); + if (0 != d) { + b = Math.cos(-d); + var d = Math.sin(-d), + e = new mxPoint(a.getCenterX(), a.getCenterY()); + c = mxUtils.getRotatedPoint(c, b, d, e) + } + return null != a && !mxUtils.contains(a, c.x, c.y) + } + return !1 +}; +mxGraphHandler.prototype.moveCells = function(a, b, c, d, e, f) { + d && (a = this.graph.getCloneableCells(a)); + null == e && (this.isRemoveCellsFromParent() && this.shouldRemoveCellsFromParent(this.graph.getModel().getParent(this.cell), a, f)) && (e = this.graph.getDefaultParent()); + a = this.graph.moveCells(a, b - this.graph.panDx / this.graph.view.scale, c - this.graph.panDy / this.graph.view.scale, d, e, f); + this.isSelectEnabled() && this.scrollOnMove && this.graph.scrollCellToVisible(a[0]); + d && this.graph.setSelectionCells(a) +}; +mxGraphHandler.prototype.destroyShapes = function() { + null != this.shape && (this.shape.destroy(), this.shape = null); + null != this.guide && (this.guide.destroy(), this.guide = null); + null != this.highlight && (this.highlight.destroy(), this.highlight = null) +}; +mxGraphHandler.prototype.destroy = function() { + this.graph.removeMouseListener(this); + this.graph.removeListener(this.panHandler); + this.destroyShapes() +}; + +function mxPanningHandler(a, b) { + null != a && (this.graph = a, this.factoryMethod = b, this.graph.addMouseListener(this), this.init()) +} +mxPanningHandler.prototype = new mxPopupMenu; +mxPanningHandler.prototype.constructor = mxPanningHandler; +mxPanningHandler.prototype.graph = null; +mxPanningHandler.prototype.triggerX = null; +mxPanningHandler.prototype.triggerY = null; +mxPanningHandler.prototype.usePopupTrigger = !0; +mxPanningHandler.prototype.useLeftButtonForPanning = !1; +mxPanningHandler.prototype.selectOnPopup = !0; +mxPanningHandler.prototype.clearSelectionOnBackground = !0; +mxPanningHandler.prototype.ignoreCell = !1; +mxPanningHandler.prototype.previewEnabled = !0; +mxPanningHandler.prototype.useGrid = !1; +mxPanningHandler.prototype.panningEnabled = !0; +mxPanningHandler.prototype.isPanningEnabled = function() { + return this.panningEnabled +}; +mxPanningHandler.prototype.setPanningEnabled = function(a) { + this.panningEnabled = a +}; +mxPanningHandler.prototype.init = function() { + mxPopupMenu.prototype.init.apply(this); + mxEvent.addListener(this.div, mxClient.IS_TOUCH ? "touchmove" : "mousemove", mxUtils.bind(this, function(a) { + this.graph.tooltipHandler.hide() + })) +}; +mxPanningHandler.prototype.isPanningTrigger = function(a) { + var b = a.getEvent(); + return this.useLeftButtonForPanning && (this.ignoreCell || null == a.getState()) && mxEvent.isLeftMouseButton(b) || mxEvent.isControlDown(b) && mxEvent.isShiftDown(b) || this.usePopupTrigger && + mxEvent.isPopupTrigger(b) +}; +mxPanningHandler.prototype.mouseDown = function(a, b) { + if (!b.isConsumed() && this.isEnabled()) { + this.hideMenu(); + this.dx0 = -this.graph.container.scrollLeft; + this.dy0 = -this.graph.container.scrollTop; + var c = mxUtils.convertPoint(this.graph.container, b.getX(), b.getY()); + this.triggerX = c.x; + this.triggerY = c.y; + this.popupTrigger = this.isPopupTrigger(b); + this.panningTrigger = this.isPanningEnabled() && this.isPanningTrigger(b); + this.startX = b.getX(); + this.startY = b.getY(); + this.panningTrigger && this.consumePanningTrigger(b) + } +}; +mxPanningHandler.prototype.consumePanningTrigger = function(a) { + a.consume() +}; +mxPanningHandler.prototype.mouseMove = function(a, b) { + var c = b.getX() - this.startX, + d = b.getY() - this.startY; + if (this.active) this.previewEnabled && (this.useGrid && (c = this.graph.snap(c), d = this.graph.snap(d)), this.graph.panGraph(c + this.dx0, d + this.dy0)), this.fireEvent(new mxEventObject( + mxEvent.PAN, "event", b)), b.consume(); + else if (this.panningTrigger) { + var e = this.active; + this.active = Math.abs(c) > this.graph.tolerance || Math.abs(d) > this.graph.tolerance; + !e && this.active && this.fireEvent(new mxEventObject(mxEvent.PAN_START, + "event", b)) + } +}; +mxPanningHandler.prototype.mouseUp = function(a, b) { + var c = Math.abs(b.getX() - this.startX), + d = Math.abs(b.getY() - this.startY); + if (this.active) { + if (!this.graph.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.graph.container)) { + c = b.getX() - this.startX; + d = b.getY() - this.startY; + this.useGrid && (c = this.graph.snap(c), d = this.graph.snap(d)); + var e = this.graph.getView().scale, + f = this.graph.getView().translate; + this.graph.panGraph(0, 0); + this.panGraph(f.x + c / e, f.y + d / e) + } + this.active = !1; + this.fireEvent(new mxEventObject(mxEvent.PAN_END, "event", + b)); + b.consume() + } else this.popupTrigger && (c < this.graph.tolerance && d < this.graph.tolerance) && (c = this.getCellForPopupEvent(b), this.graph.isEnabled() && this.selectOnPopup && null != c && !this.graph.isCellSelected( + c) ? this.graph.setSelectionCell(c) : this.clearSelectionOnBackground && null == c && this.graph.clearSelection(), this.graph.tooltipHandler.hide(), d = mxUtils.getScrollOrigin(), d = new mxPoint( + b.getX() + d.x, b.getY() + d.y), this.popup(d.x + 1, d.y + 1, c, b.getEvent()), b.consume()); + this.popupTrigger = this.panningTrigger = !1 +}; +mxPanningHandler.prototype.getCellForPopupEvent = function(a) { + return a.getCell() +}; +mxPanningHandler.prototype.panGraph = function(a, b) { + this.graph.getView().setTranslate(a, b) +}; +mxPanningHandler.prototype.destroy = function() { + this.graph.removeMouseListener(this); + mxPopupMenu.prototype.destroy.apply(this) +}; + +function mxCellMarker(a, b, c, d) { + mxEventSource.call(this); + null != a && (this.graph = a, this.validColor = null != b ? b : mxConstants.DEFAULT_VALID_COLOR, this.invalidColor = null != b ? c : mxConstants.DEFAULT_INVALID_COLOR, this.hotspot = null != d ? d : + mxConstants.DEFAULT_HOTSPOT, this.highlight = new mxCellHighlight(a)) +} +mxUtils.extend(mxCellMarker, mxEventSource); +mxCellMarker.prototype.graph = null; +mxCellMarker.prototype.enabled = !0; +mxCellMarker.prototype.hotspot = mxConstants.DEFAULT_HOTSPOT; +mxCellMarker.prototype.hotspotEnabled = !1; +mxCellMarker.prototype.validColor = null; +mxCellMarker.prototype.invalidColor = null; +mxCellMarker.prototype.currentColor = null; +mxCellMarker.prototype.validState = null; +mxCellMarker.prototype.markedState = null; +mxCellMarker.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxCellMarker.prototype.isEnabled = function() { + return this.enabled +}; +mxCellMarker.prototype.setHotspot = function(a) { + this.hotspot = a +}; +mxCellMarker.prototype.getHotspot = function() { + return this.hotspot +}; +mxCellMarker.prototype.setHotspotEnabled = function(a) { + this.hotspotEnabled = a +}; +mxCellMarker.prototype.isHotspotEnabled = function() { + return this.hotspotEnabled +}; +mxCellMarker.prototype.hasValidState = function() { + return null != this.validState +}; +mxCellMarker.prototype.getValidState = function() { + return this.validState +}; +mxCellMarker.prototype.getMarkedState = function() { + return this.markedState +}; +mxCellMarker.prototype.reset = function() { + this.validState = null; + null != this.markedState && (this.markedState = null, this.unmark()) +}; +mxCellMarker.prototype.process = function(a) { + var b = null; + if (this.isEnabled()) { + var b = this.getState(a), + c = null != b ? this.isValidState(b) : !1; + a = this.getMarkerColor(a.getEvent(), b, c); + this.validState = c ? b : null; + if (b != this.markedState || a != this.currentColor) this.currentColor = a, null != b && null != this.currentColor ? (this.markedState = b, this.mark()) : null != this.markedState && (this.markedState = + null, this.unmark()) + } + return b +}; +mxCellMarker.prototype.markCell = function(a, b) { + var c = this.graph.getView().getState(a); + null != c && (this.currentColor = null != b ? b : this.validColor, this.markedState = c, this.mark()) +}; +mxCellMarker.prototype.mark = function() { + this.highlight.setHighlightColor(this.currentColor); + this.highlight.highlight(this.markedState); + this.fireEvent(new mxEventObject(mxEvent.MARK, "state", this.markedState)) +}; +mxCellMarker.prototype.unmark = function() { + this.mark() +}; +mxCellMarker.prototype.isValidState = function(a) { + return !0 +}; +mxCellMarker.prototype.getMarkerColor = function(a, b, c) { + return c ? this.validColor : this.invalidColor +}; +mxCellMarker.prototype.getState = function(a) { + var b = this.graph.getView(); + cell = this.getCell(a); + b = this.getStateToMark(b.getState(cell)); + return null != b && this.intersects(b, a) ? b : null +}; +mxCellMarker.prototype.getCell = function(a) { + return a.getCell() +}; +mxCellMarker.prototype.getStateToMark = function(a) { + return a +}; +mxCellMarker.prototype.intersects = function(a, b) { + return this.hotspotEnabled ? mxUtils.intersectsHotspot(a, b.getGraphX(), b.getGraphY(), this.hotspot, mxConstants.MIN_HOTSPOT_SIZE, mxConstants.MAX_HOTSPOT_SIZE) : !0 +}; +mxCellMarker.prototype.destroy = function() { + this.graph.getView().removeListener(this.resetHandler); + this.graph.getModel().removeListener(this.resetHandler); + this.highlight.destroy() +}; + +function mxSelectionCellsHandler(a) { + mxEventSource.call(this); + this.graph = a; + this.handlers = new mxDictionary; + this.graph.addMouseListener(this); + this.refreshHandler = mxUtils.bind(this, function(a, c) { + this.isEnabled() && this.refresh() + }); + this.graph.getSelectionModel().addListener(mxEvent.CHANGE, this.refreshHandler); + this.graph.getModel().addListener(mxEvent.CHANGE, this.refreshHandler); + this.graph.getView().addListener(mxEvent.SCALE, this.refreshHandler); + this.graph.getView().addListener(mxEvent.TRANSLATE, this.refreshHandler); + this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE, this.refreshHandler); + this.graph.getView().addListener(mxEvent.DOWN, this.refreshHandler); + this.graph.getView().addListener(mxEvent.UP, this.refreshHandler) +} +mxUtils.extend(mxSelectionCellsHandler, mxEventSource); +mxSelectionCellsHandler.prototype.graph = null; +mxSelectionCellsHandler.prototype.enabled = !0; +mxSelectionCellsHandler.prototype.refreshHandler = null; +mxSelectionCellsHandler.prototype.maxHandlers = 100; +mxSelectionCellsHandler.prototype.handlers = null; +mxSelectionCellsHandler.prototype.isEnabled = function() { + return this.enabled +}; +mxSelectionCellsHandler.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxSelectionCellsHandler.prototype.getHandler = function(a) { + return this.handlers.get(a) +}; +mxSelectionCellsHandler.prototype.reset = function() { + this.handlers.visit(function(a, b) { + b.reset.apply(b) + }) +}; +mxSelectionCellsHandler.prototype.refresh = function() { + var a = this.handlers; + this.handlers = new mxDictionary; + for (var b = this.graph.getSelectionCells(), c = 0; c < b.length; c++) { + var d = this.graph.view.getState(b[c]); + if (null != d) { + var e = a.remove(b[c]); + null != e && (e.state != d ? (e.destroy(), e = null) : e.redraw()); + null == e && (e = this.graph.createHandler(d), this.fireEvent(new mxEventObject(mxEvent.ADD, "state", d))); + null != e && this.handlers.put(b[c], e) + } + } + a.visit(mxUtils.bind(this, function(a, b) { + this.fireEvent(new mxEventObject(mxEvent.REMOVE, + "state", b.state)); + b.destroy() + })) +}; +mxSelectionCellsHandler.prototype.mouseDown = function(a, b) { + if (this.graph.isEnabled() && this.isEnabled()) { + var c = [a, b]; + this.handlers.visit(function(a, b) { + b.mouseDown.apply(b, c) + }) + } +}; +mxSelectionCellsHandler.prototype.mouseMove = function(a, b) { + if (this.graph.isEnabled() && this.isEnabled()) { + var c = [a, b]; + this.handlers.visit(function(a, b) { + b.mouseMove.apply(b, c) + }) + } +}; +mxSelectionCellsHandler.prototype.mouseUp = function(a, b) { + if (this.graph.isEnabled() && this.isEnabled()) { + var c = [a, b]; + this.handlers.visit(function(a, b) { + b.mouseUp.apply(b, c) + }) + } +}; +mxSelectionCellsHandler.prototype.destroy = function() { + this.graph.removeMouseListener(this); + null != this.refreshHandler && (this.graph.getSelectionModel().removeListener(this.refreshHandler), this.graph.getModel().removeListener(this.refreshHandler), this.graph.getView().removeListener( + this.refreshHandler), this.refreshHandler = null) +}; + +function mxConnectionHandler(a, b) { + mxEventSource.call(this); + null != a && (this.graph = a, this.factoryMethod = b, this.init()) +} +mxUtils.extend(mxConnectionHandler, mxEventSource); +mxConnectionHandler.prototype.graph = null; +mxConnectionHandler.prototype.factoryMethod = !0; +mxConnectionHandler.prototype.moveIconFront = !1; +mxConnectionHandler.prototype.moveIconBack = !1; +mxConnectionHandler.prototype.connectImage = null; +mxConnectionHandler.prototype.targetConnectImage = !1; +mxConnectionHandler.prototype.enabled = !0; +mxConnectionHandler.prototype.select = !0; +mxConnectionHandler.prototype.createTarget = !1; +mxConnectionHandler.prototype.marker = null; +mxConnectionHandler.prototype.constraintHandler = null; +mxConnectionHandler.prototype.error = null; +mxConnectionHandler.prototype.waypointsEnabled = !1; +mxConnectionHandler.prototype.tapAndHoldEnabled = !0; +mxConnectionHandler.prototype.tapAndHoldDelay = 500; +mxConnectionHandler.prototype.tapAndHoldInProgress = !1; +mxConnectionHandler.prototype.tapAndHoldValid = !1; +mxConnectionHandler.prototype.tapAndHoldTolerance = 4; +mxConnectionHandler.prototype.initialTouchX = 0; +mxConnectionHandler.prototype.initialTouchY = 0; +mxConnectionHandler.prototype.ignoreMouseDown = !1; +mxConnectionHandler.prototype.first = null; +mxConnectionHandler.prototype.connectIconOffset = new mxPoint(0, mxConstants.TOOLTIP_VERTICAL_OFFSET); +mxConnectionHandler.prototype.edgeState = null; +mxConnectionHandler.prototype.changeHandler = null; +mxConnectionHandler.prototype.drillHandler = null; +mxConnectionHandler.prototype.mouseDownCounter = 0; +mxConnectionHandler.prototype.movePreviewAway = mxClient.IS_VML; +mxConnectionHandler.prototype.isEnabled = function() { + return this.enabled +}; +mxConnectionHandler.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxConnectionHandler.prototype.isCreateTarget = function() { + return this.createTarget +}; +mxConnectionHandler.prototype.setCreateTarget = function(a) { + this.createTarget = a +}; +mxConnectionHandler.prototype.createShape = function() { + var a = new mxPolyline([], mxConstants.INVALID_COLOR); + a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG; + a.init(this.graph.getView().getOverlayPane()); + a.svgStrokeTolerance = 0; + a.pointerEvents = !1; + a.isDashed = !0; + if (this.graph.dialect == mxConstants.DIALECT_SVG) a.node.setAttribute("pointer-events", "none"); + else { + var b = mxUtils.bind(this, function(a) { + a = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(a), + mxEvent.getClientY(a)); + return this.graph.view.getState(this.graph.getCellAt(a.x, a.y)) + }); + mxEvent.redirectMouseEvents(a.node, this.graph, b) + } + return a +}; +mxConnectionHandler.prototype.init = function() { + this.graph.addMouseListener(this); + this.marker = this.createMarker(); + this.constraintHandler = new mxConstraintHandler(this.graph); + this.changeHandler = mxUtils.bind(this, function(a) { + null != this.iconState && (this.iconState = this.graph.getView().getState(this.iconState.cell)); + null != this.iconState ? this.redrawIcons(this.icons, this.iconState) : (this.destroyIcons(this.icons), this.previous = null); + this.constraintHandler.reset() + }); + this.graph.getModel().addListener(mxEvent.CHANGE, + this.changeHandler); + this.graph.getView().addListener(mxEvent.SCALE, this.changeHandler); + this.graph.getView().addListener(mxEvent.TRANSLATE, this.changeHandler); + this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE, this.changeHandler); + this.drillHandler = mxUtils.bind(this, function(a) { + this.destroyIcons(this.icons) + }); + this.graph.addListener(mxEvent.START_EDITING, this.drillHandler); + this.graph.getView().addListener(mxEvent.DOWN, this.drillHandler); + this.graph.getView().addListener(mxEvent.UP, this.drillHandler) +}; +mxConnectionHandler.prototype.isConnectableCell = function(a) { + return !0 +}; +mxConnectionHandler.prototype.createMarker = function() { + var a = new mxCellMarker(this.graph); + a.hotspotEnabled = !0; + a.getCell = mxUtils.bind(this, function(b, c) { + c = mxCellMarker.prototype.getCell.apply(a, arguments); + this.error = null; + if (!this.isConnectableCell(c)) return null; + null != c ? this.isConnecting() ? null != this.previous && (this.error = this.validateConnection(this.previous.cell, c), null != this.error && 0 == this.error.length && (c = null, this.isCreateTarget() && + (this.error = null))) : this.isValidSource(c) || (c = null) : this.isConnecting() && + (!this.isCreateTarget() && !this.graph.allowDanglingEdges) && (this.error = ""); + return c + }); + a.isValidState = mxUtils.bind(this, function(b) { + return this.isConnecting() ? null == this.error : mxCellMarker.prototype.isValidState.apply(a, arguments) + }); + a.getMarkerColor = mxUtils.bind(this, function(b, c, d) { + return null == this.connectImage || this.isConnecting() ? mxCellMarker.prototype.getMarkerColor.apply(a, arguments) : null + }); + a.intersects = mxUtils.bind(this, function(b, c) { + return null != this.connectImage || this.isConnecting() ? !0 : mxCellMarker.prototype.intersects.apply(a, + arguments) + }); + return a +}; +mxConnectionHandler.prototype.start = function(a, b, c, d) { + this.previous = a; + this.first = new mxPoint(b, c); + this.edgeState = null != d ? d : this.createEdgeState(null); + this.marker.currentColor = this.marker.validColor; + this.marker.markedState = a; + this.marker.mark(); + this.fireEvent(new mxEventObject(mxEvent.START, "state", this.previous)) +}; +mxConnectionHandler.prototype.isConnecting = function() { + return null != this.first && null != this.shape +}; +mxConnectionHandler.prototype.isValidSource = function(a) { + return this.graph.isValidSource(a) +}; +mxConnectionHandler.prototype.isValidTarget = function(a) { + return !0 +}; +mxConnectionHandler.prototype.validateConnection = function(a, b) { + return !this.isValidTarget(b) ? "" : this.graph.getEdgeValidationError(null, a, b) +}; +mxConnectionHandler.prototype.getConnectImage = function(a) { + return this.connectImage +}; +mxConnectionHandler.prototype.isMoveIconToFrontForState = function(a) { + return null != a.text && a.text.node.parentNode == this.graph.container ? !0 : this.moveIconFront +}; +mxConnectionHandler.prototype.createIcons = function(a) { + var b = this.getConnectImage(a); + if (null != b && null != a) { + this.iconState = a; + var c = [], + d = new mxRectangle(0, 0, b.width, b.height), + e = new mxImageShape(d, b.src, null, null, 0); + e.preserveImageAspect = !1; + this.isMoveIconToFrontForState(a) ? (e.dialect = mxConstants.DIALECT_STRICTHTML, e.init(this.graph.container)) : (e.dialect = this.graph.dialect == mxConstants.DIALECT_SVG ? mxConstants.DIALECT_SVG : + mxConstants.DIALECT_VML, e.init(this.graph.getView().getOverlayPane()), this.moveIconBack && + null != e.node.previousSibling && e.node.parentNode.insertBefore(e.node, e.node.parentNode.firstChild)); + e.node.style.cursor = mxConstants.CURSOR_CONNECT; + var f = mxUtils.bind(this, function() { + return null != this.currentState ? this.currentState : a + }), + b = mxUtils.bind(this, function(a) { + mxEvent.isConsumed(a) || (this.icon = e, this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a, f()))) + }); + mxEvent.redirectMouseEvents(e.node, this.graph, f, b); + c.push(e); + this.redrawIcons(c, this.iconState); + return c + } + return null +}; +mxConnectionHandler.prototype.redrawIcons = function(a, b) { + if (null != a && null != a[0] && null != b) { + var c = this.getIconPosition(a[0], b); + a[0].bounds.x = c.x; + a[0].bounds.y = c.y; + a[0].redraw() + } +}; +mxConnectionHandler.prototype.getIconPosition = function(a, b) { + var c = this.graph.getView().scale, + d = b.getCenterX(), + e = b.getCenterY(); + if (this.graph.isSwimlane(b.cell)) { + var f = this.graph.getStartSize(b.cell), + d = 0 != f.width ? b.x + f.width * c / 2 : d, + e = 0 != f.height ? b.y + f.height * c / 2 : e, + f = mxUtils.toRadians(mxUtils.getValue(b.style, mxConstants.STYLE_ROTATION) || 0); + if (0 != f) var c = Math.cos(f), + f = Math.sin(f), + g = new mxPoint(b.getCenterX(), b.getCenterY()), + e = mxUtils.getRotatedPoint(new mxPoint(d, e), c, f, g), + d = e.x, + e = e.y + } + return new mxPoint(d - + a.bounds.width / 2, e - a.bounds.height / 2) +}; +mxConnectionHandler.prototype.destroyIcons = function(a) { + if (null != a) { + this.iconState = null; + for (var b = 0; b < a.length; b++) a[b].destroy() + } +}; +mxConnectionHandler.prototype.isStartEvent = function(a) { + return !this.graph.isForceMarqueeEvent(a.getEvent()) && (null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentConstraint || null != this.previous && null == this.error && + (null == this.icons || null != this.icons && null != this.icon)) +}; +mxConnectionHandler.prototype.mouseDown = function(a, b) { + this.mouseDownCounter++; + if (this.isEnabled() && this.graph.isEnabled() && !b.isConsumed() && !this.isConnecting() && this.isStartEvent(b)) { + null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentPoint ? (this.sourceConstraint = this.constraintHandler.currentConstraint, + this.previous = this.constraintHandler.currentFocus, this.first = this.constraintHandler.currentPoint.clone()) : this.first = new mxPoint(b.getGraphX(), + b.getGraphY()); + this.edgeState = this.createEdgeState(b); + this.mouseDownCounter = 1; + this.waypointsEnabled && null == this.shape && (this.waypoints = null, this.shape = this.createShape()); + if (null == this.previous && null != this.edgeState) { + var c = this.graph.getPointForEvent(b.getEvent()); + this.edgeState.cell.geometry.setTerminalPoint(c, !0) + } + this.fireEvent(new mxEventObject(mxEvent.START, "state", this.previous)); + b.consume() + } else if (mxClient.IS_TOUCH && this.tapAndHoldEnabled && !this.tapAndHoldInProgress && this.isEnabled() && this.graph.isEnabled() && + !this.isConnecting()) { + this.tapAndHoldInProgress = !0; + this.initialTouchX = b.getX(); + this.initialTouchY = b.getY(); + var d = this.graph.view.getState(this.marker.getCell(b)); + this.tapAndHoldThread && window.clearTimeout(this.tapAndHoldThread); + this.tapAndHoldThread = window.setTimeout(mxUtils.bind(this, function() { + this.tapAndHoldValid && this.tapAndHold(b, d); + this.tapAndHoldValid = this.tapAndHoldInProgress = !1 + }), this.tapAndHoldDelay); + this.tapAndHoldValid = !0 + } + this.selectedIcon = this.icon; + this.icon = null +}; +mxConnectionHandler.prototype.tapAndHold = function(a, b) { + null != b && (this.marker.currentColor = this.marker.validColor, this.marker.markedState = b, this.marker.mark(), this.first = new mxPoint(a.getGraphX(), a.getGraphY()), this.edgeState = this.createEdgeState( + a), this.previous = b, this.fireEvent(new mxEventObject(mxEvent.START, "state", this.previous))) +}; +mxConnectionHandler.prototype.isImmediateConnectSource = function(a) { + return !this.graph.isCellMovable(a.cell) +}; +mxConnectionHandler.prototype.createEdgeState = function(a) { + return null +}; +mxConnectionHandler.prototype.updateCurrentState = function(a) { + var b = this.marker.process(a); + this.constraintHandler.update(a, null == this.first); + this.currentState = b +}; +mxConnectionHandler.prototype.convertWaypoint = function(a) { + var b = this.graph.getView().getScale(), + c = this.graph.getView().getTranslate(); + a.x = a.x / b - c.x; + a.y = a.y / b - c.y +}; +mxConnectionHandler.prototype.mouseMove = function(a, b) { + this.tapAndHoldValid && (this.tapAndHoldValid = Math.abs(this.initialTouchX - b.getX()) < this.tapAndHoldTolerance && Math.abs(this.initialTouchY - b.getY()) < this.tapAndHoldTolerance); + if (!b.isConsumed() && (this.ignoreMouseDown || null != this.first || !this.graph.isMouseDown)) { + !this.isEnabled() && null != this.currentState && (this.destroyIcons(this.icons), this.currentState = null); + (null != this.first || this.isEnabled() && this.graph.isEnabled()) && this.updateCurrentState(b); + if (null != this.first) { + var c = this.graph.getView().scale, + c = new mxPoint(this.graph.snap(b.getGraphX() / c) * c, this.graph.snap(b.getGraphY() / c) * c), + d = null, + e = c; + null != this.constraintHandler.currentConstraint && (null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentPoint) && (d = this.constraintHandler.currentConstraint, + e = this.constraintHandler.currentPoint.clone()); + var f = this.first; + if (null != this.selectedIcon) { + var g = this.selectedIcon.bounds.width, + h = this.selectedIcon.bounds.height; + null != this.currentState && + this.targetConnectImage ? (g = this.getIconPosition(this.selectedIcon, this.currentState), this.selectedIcon.bounds.x = g.x, this.selectedIcon.bounds.y = g.y) : (g = new mxRectangle(b.getGraphX() + + this.connectIconOffset.x, b.getGraphY() + this.connectIconOffset.y, g, h), this.selectedIcon.bounds = g); + this.selectedIcon.redraw() + } + if (null != this.edgeState) { + this.edgeState.absolutePoints = [null, null != this.currentState ? null : e]; + this.graph.view.updateFixedTerminalPoint(this.edgeState, this.previous, !0, this.sourceConstraint); + null != this.currentState && + (null == d && (d = this.graph.getConnectionConstraint(this.edgeState, this.previous, !1)), this.edgeState.setAbsoluteTerminalPoint(null, !1), this.graph.view.updateFixedTerminalPoint(this + .edgeState, this.currentState, !1, d)); + f = null; + if (null != this.waypoints) { + f = []; + for (e = 0; e < this.waypoints.length; e++) d = this.waypoints[e].clone(), this.convertWaypoint(d), f[e] = d + } + this.graph.view.updatePoints(this.edgeState, f, this.previous, this.currentState); + this.graph.view.updateFloatingTerminalPoints(this.edgeState, this.previous, this.currentState); + e = this.edgeState.absolutePoints[this.edgeState.absolutePoints.length - 1]; + f = this.edgeState.absolutePoints[0] + } else null != this.currentState && null == this.constraintHandler.currentConstraint && (g = this.getTargetPerimeterPoint(this.currentState, b), null != g && (e = g)), null == this.sourceConstraint && + null != this.previous && (g = this.getSourcePerimeterPoint(this.previous, null != this.waypoints && 0 < this.waypoints.length ? this.waypoints[0] : e, b), null != g && (f = g)); + if (null == this.currentState && this.movePreviewAway) { + g = f; + null != this.edgeState && + 2 < this.edgeState.absolutePoints.length && (d = this.edgeState.absolutePoints[this.edgeState.absolutePoints.length - 2], null != d && (g = d)); + d = e.x - g.x; + g = e.y - g.y; + h = Math.sqrt(d * d + g * g); + if (0 == h) return; + e.x -= 4 * d / h; + e.y -= 4 * g / h + } + if (null == this.shape && (d = Math.abs(c.x - this.first.x), g = Math.abs(c.y - this.first.y), d > this.graph.tolerance || g > this.graph.tolerance)) this.shape = this.createShape(), this.updateCurrentState( + b); + null != this.shape && (null != this.edgeState ? this.shape.points = this.edgeState.absolutePoints : (c = [f], null != this.waypoints && + (c = c.concat(this.waypoints)), c.push(e), this.shape.points = c), this.drawPreview()); + mxEvent.consume(b.getEvent()); + b.consume() + } else !this.isEnabled() || !this.graph.isEnabled() ? this.constraintHandler.reset() : this.previous != this.currentState && null == this.edgeState ? (this.destroyIcons(this.icons), this.icons = + null, null != this.currentState && null == this.error && (this.icons = this.createIcons(this.currentState), null == this.icons && (this.currentState.setCursor(mxConstants.CURSOR_CONNECT), b + .consume())), this.previous = this.currentState) : + this.previous == this.currentState && (null != this.currentState && null == this.icons && !this.graph.isMouseDown) && b.consume(); + null != this.constraintHandler.currentConstraint && this.marker.reset(); + if (!this.graph.isMouseDown && null != this.currentState && null != this.icons) { + c = !1; + f = b.getSource(); + for (e = 0; e < this.icons.length && !c; e++) c = f == this.icons[e].node || f.parentNode == this.icons[e].node; + c || this.updateIcons(this.currentState, this.icons, b) + } + } else this.constraintHandler.reset() +}; +mxConnectionHandler.prototype.getTargetPerimeterPoint = function(a, b) { + var c = null, + d = a.view, + e = d.getPerimeterFunction(a); + if (null != e) { + var f = null != this.waypoints && 0 < this.waypoints.length ? this.waypoints[this.waypoints.length - 1] : new mxPoint(this.previous.getCenterX(), this.previous.getCenterY()), + d = e(d.getPerimeterBounds(a), this.edgeState, f, !1); + null != d && (c = d) + } else c = new mxPoint(a.getCenterX(), a.getCenterY()); + return c +}; +mxConnectionHandler.prototype.getSourcePerimeterPoint = function(a, b, c) { + c = null; + var d = a.view, + e = d.getPerimeterFunction(a), + f = new mxPoint(a.getCenterX(), a.getCenterY()); + if (null != e) { + var g = mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0), + h = -g * (Math.PI / 180); + 0 != g && (b = mxUtils.getRotatedPoint(new mxPoint(b.x, b.y), Math.cos(h), Math.sin(h), f)); + a = e(d.getPerimeterBounds(a), a, b, !1); + null != a && (0 != g && (a = mxUtils.getRotatedPoint(new mxPoint(a.x, a.y), Math.cos(-h), Math.sin(-h), f)), c = a) + } else c = f; + return c +}; +mxConnectionHandler.prototype.updateIcons = function(a, b, c) {}; +mxConnectionHandler.prototype.isStopEvent = function(a) { + return null != a.getState() +}; +mxConnectionHandler.prototype.addWaypointForEvent = function(a) { + var b = mxUtils.convertPoint(this.graph.container, a.getX(), a.getY()), + c = Math.abs(b.x - this.first.x), + b = Math.abs(b.y - this.first.y); + if (null != this.waypoints || 1 < this.mouseDownCounter && (c > this.graph.tolerance || b > this.graph.tolerance)) null == this.waypoints && (this.waypoints = []), c = this.graph.view.scale, b = + new mxPoint(this.graph.snap(a.getGraphX() / c) * c, this.graph.snap(a.getGraphY() / c) * c), this.waypoints.push(b) +}; +mxConnectionHandler.prototype.mouseUp = function(a, b) { + if (!b.isConsumed() && this.isConnecting()) { + if (this.waypointsEnabled && !this.isStopEvent(b)) { + this.addWaypointForEvent(b); + b.consume(); + return + } + if (null == this.error) { + var c = null != this.previous ? this.previous.cell : null, + d = null; + null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && (d = this.constraintHandler.currentFocus.cell); + null == d && this.marker.hasValidState() && (d = this.marker.validState.cell); + this.connect(c, d, b.getEvent(), + b.getCell()) + } else null != this.previous && (null != this.marker.validState && this.previous.cell == this.marker.validState.cell) && this.graph.selectCellForEvent(this.marker.source, evt), 0 < this.error.length && + this.graph.validationAlert(this.error); + this.destroyIcons(this.icons); + b.consume() + } + null != this.first && this.reset(); + this.tapAndHoldValid = this.tapAndHoldInProgress = !1 +}; +mxConnectionHandler.prototype.reset = function() { + null != this.shape && (this.shape.destroy(), this.shape = null); + this.destroyIcons(this.icons); + this.icons = null; + this.marker.reset(); + this.constraintHandler.reset(); + this.sourceConstraint = this.error = this.previous = this.edgeState = this.selectedIcon = null; + this.mouseDownCounter = 0; + this.icon = this.first = null; + this.fireEvent(new mxEventObject(mxEvent.RESET)) +}; +mxConnectionHandler.prototype.drawPreview = function() { + var a = null == this.error; + this.shape.strokewidth = this.getEdgeWidth(a); + a = this.getEdgeColor(a); + this.shape.stroke = a; + this.shape.redraw() +}; +mxConnectionHandler.prototype.getEdgeColor = function(a) { + return a ? mxConstants.VALID_COLOR : mxConstants.INVALID_COLOR +}; +mxConnectionHandler.prototype.getEdgeWidth = function(a) { + return a ? 3 : 1 +}; +mxConnectionHandler.prototype.connect = function(a, b, c, d) { + if (null != b || this.isCreateTarget() || this.graph.allowDanglingEdges) { + var e = this.graph.getModel(), + f = null; + e.beginUpdate(); + try { + if (null != a && (null == b && this.isCreateTarget()) && (b = this.createTargetVertex(c, a), null != b)) { + d = this.graph.getDropTarget([b], c, d); + if (null == d || !this.graph.getModel().isEdge(d)) { + var g = this.graph.getView().getState(d); + if (null != g) { + var h = e.getGeometry(b); + h.x -= g.origin.x; + h.y -= g.origin.y + } + } else d = this.graph.getDefaultParent(); + this.graph.addCell(b, + d) + } + var k = this.graph.getDefaultParent(); + null != a && (null != b && e.getParent(a) == e.getParent(b) && e.getParent(e.getParent(a)) != e.getRoot()) && (k = e.getParent(a), null != a.geometry && a.geometry.relative && (null != b.geometry && + b.geometry.relative) && (k = e.getParent(k))); + h = g = null; + null != this.edgeState && (g = this.edgeState.cell.value, h = this.edgeState.cell.style); + f = this.insertEdge(k, null, g, a, b, h); + if (null != f) { + this.graph.setConnectionConstraint(f, a, !0, this.sourceConstraint); + this.graph.setConnectionConstraint(f, b, !1, this.constraintHandler.currentConstraint); + null != this.edgeState && e.setGeometry(f, this.edgeState.cell.geometry); + var l = e.getGeometry(f); + null == l && (l = new mxGeometry, l.relative = !0, e.setGeometry(f, l)); + if (null != this.waypoints && 0 < this.waypoints.length) { + var m = this.graph.view.scale, + n = this.graph.view.translate; + l.points = []; + for (a = 0; a < this.waypoints.length; a++) { + var p = this.waypoints[a]; + l.points.push(new mxPoint(p.x / m - n.x, p.y / m - n.y)) + } + } + null == b && (p = this.graph.getPointForEvent(c, !1), p.x -= this.graph.panDx / this.graph.view.scale, p.y -= this.graph.panDy / this.graph.view.scale, + l.setTerminalPoint(p, !1)); + this.fireEvent(new mxEventObject(mxEvent.CONNECT, "cell", f, "event", c, "target", d)) + } + } catch (q) { + mxLog.show(), mxLog.debug(q.message) + } finally { + e.endUpdate() + } + this.select && this.selectCells(f, b) + } +}; +mxConnectionHandler.prototype.selectCells = function(a, b) { + this.graph.setSelectionCell(a) +}; +mxConnectionHandler.prototype.insertEdge = function(a, b, c, d, e, f) { + if (null == this.factoryMethod) return this.graph.insertEdge(a, b, c, d, e, f); + b = this.createEdge(c, d, e, f); + return b = this.graph.addEdge(b, a, d, e) +}; +mxConnectionHandler.prototype.createTargetVertex = function(a, b) { + for (var c = this.graph.getCellGeometry(b); null != c && c.relative;) b = this.graph.getModel().getParent(b), c = this.graph.getCellGeometry(b); + var d = this.graph.cloneCells([b])[0], + c = this.graph.getModel().getGeometry(d); + if (null != c) { + var e = this.graph.getPointForEvent(a); + c.x = this.graph.snap(e.x - c.width / 2) - this.graph.panDx / this.graph.view.scale; + c.y = this.graph.snap(e.y - c.height / 2) - this.graph.panDy / this.graph.view.scale; + if (null != this.first) { + var f = this.graph.view.getState(b); + if (null != f) { + var g = this.getAlignmentTolerance(); + Math.abs(this.graph.snap(this.first.x) - this.graph.snap(e.x)) <= g ? c.x = f.x : Math.abs(this.graph.snap(this.first.y) - this.graph.snap(e.y)) <= g && (c.y = f.y) + } + } + } + return d +}; +mxConnectionHandler.prototype.getAlignmentTolerance = function() { + return this.graph.isGridEnabled() ? this.graph.gridSize : this.graph.tolerance +}; +mxConnectionHandler.prototype.createEdge = function(a, b, c, d) { + var e = null; + null != this.factoryMethod && (e = this.factoryMethod(b, c, d)); + null == e && (e = new mxCell(a || ""), e.setEdge(!0), e.setStyle(d), a = new mxGeometry, a.relative = !0, e.setGeometry(a)); + return e +}; +mxConnectionHandler.prototype.destroy = function() { + this.graph.removeMouseListener(this); + null != this.shape && (this.shape.destroy(), this.shape = null); + null != this.marker && (this.marker.destroy(), this.marker = null); + null != this.constraintHandler && (this.constraintHandler.destroy(), this.constraintHandler = null); + null != this.changeHandler && (this.graph.getModel().removeListener(this.changeHandler), this.graph.getView().removeListener(this.changeHandler), this.changeHandler = null); + null != this.drillHandler && (this.graph.removeListener(this.drillHandler), + this.graph.getView().removeListener(this.drillHandler), this.drillHandler = null) +}; + +function mxConstraintHandler(a) { + this.graph = a +} +mxConstraintHandler.prototype.pointImage = new mxImage(mxClient.imageBasePath + "/point.gif", 5, 5); +mxConstraintHandler.prototype.graph = null; +mxConstraintHandler.prototype.enabled = !0; +mxConstraintHandler.prototype.highlightColor = mxConstants.DEFAULT_VALID_COLOR; +mxConstraintHandler.prototype.isEnabled = function() { + return this.enabled +}; +mxConstraintHandler.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxConstraintHandler.prototype.reset = function() { + if (null != this.focusIcons) { + for (var a = 0; a < this.focusIcons.length; a++) this.focusIcons[a].destroy(); + this.focusIcons = null + } + null != this.focusHighlight && (this.focusHighlight.destroy(), this.focusHighlight = null); + this.focusPoints = this.currentFocus = this.currentPoint = this.currentFocusArea = this.currentConstraint = null +}; +mxConstraintHandler.prototype.getTolerance = function() { + return this.graph.getTolerance() +}; +mxConstraintHandler.prototype.getImageForConstraint = function(a, b, c) { + return this.pointImage +}; +mxConstraintHandler.prototype.isEventIgnored = function(a, b) { + return !1 +}; +mxConstraintHandler.prototype.update = function(a, b) { + if (this.isEnabled() && !this.isEventIgnored(a)) { + var c = this.getTolerance(), + d = new mxRectangle(a.getGraphX() - c, a.getGraphY() - c, 2 * c, 2 * c), + e = null != a.getCell() ? this.graph.isCellConnectable(a.getCell()) : !1; + if (null == this.currentFocusArea || !mxUtils.intersects(this.currentFocusArea, d) || null != a.getState() && null != this.currentFocus && e) + if (this.currentFocusArea = null, a.getState() != this.currentFocus) + if (this.currentFocus = null, this.constraints = null != a.getState() && e ? this.graph.getAllConnectionConstraints(a.getState(), + b) : null, null != this.constraints) { + this.currentFocus = a.getState(); + this.currentFocusArea = new mxRectangle(a.getState().x, a.getState().y, a.getState().width, a.getState().height); + if (null != this.focusIcons) { + for (e = 0; e < this.focusIcons.length; e++) this.focusIcons[e].destroy(); + this.focusPoints = this.focusIcons = null + } + this.focusIcons = []; + this.focusPoints = []; + for (e = 0; e < this.constraints.length; e++) { + var f = this.graph.getConnectionPoint(a.getState(), this.constraints[e]), + g = this.getImageForConstraint(a.getState(), this.constraints[e], + f), + h = g.src, + g = new mxRectangle(f.x - g.width / 2, f.y - g.height / 2, g.width, g.height), + g = new mxImageShape(g, h); + g.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : mxConstants.DIALECT_SVG; + g.preserveImageAspect = !1; + g.init(this.graph.getView().getOverlayPane()); + null != g.node.previousSibling && g.node.parentNode.insertBefore(g.node, g.node.parentNode.firstChild); + h = mxUtils.bind(this, function() { + return null != this.currentFocus ? this.currentFocus : a.getState() + }); + g.redraw(); + mxEvent.redirectMouseEvents(g.node, + this.graph, h); + this.currentFocusArea.add(g.bounds); + this.focusIcons.push(g); + this.focusPoints.push(f) + } + this.currentFocusArea.grow(c) + } else if (null != this.focusIcons) { + null != this.focusHighlight && (this.focusHighlight.destroy(), this.focusHighlight = null); + for (e = 0; e < this.focusIcons.length; e++) this.focusIcons[e].destroy(); + this.focusPoints = this.focusIcons = null + } + this.currentPoint = this.currentConstraint = null; + if (null != this.focusIcons && null != this.constraints && (null == a.getState() || this.currentFocus == a.getState())) + for (e = + 0; e < this.focusIcons.length; e++) + if (mxUtils.intersects(this.focusIcons[e].bounds, d)) { + this.currentConstraint = this.constraints[e]; + this.currentPoint = this.focusPoints[e]; + c = this.focusIcons[e].bounds.clone(); + c.grow(mxClient.IS_IE ? 3 : 2); + mxClient.IS_IE && (c.width -= 1, c.height -= 1); + null == this.focusHighlight ? (c = new mxRectangleShape(c, null, this.highlightColor, 3), c.dialect = this.graph.dialect == mxConstants.DIALECT_SVG ? mxConstants.DIALECT_SVG : mxConstants + .DIALECT_VML, c.init(this.graph.getView().getOverlayPane()), this.focusHighlight = + c, h = mxUtils.bind(this, function() { + return null != this.currentFocus ? this.currentFocus : a.getState() + }), mxEvent.redirectMouseEvents(c.node, this.graph, h)) : (this.focusHighlight.bounds = c, this.focusHighlight.redraw()); + break + } + null == this.currentConstraint && null != this.focusHighlight && (this.focusHighlight.destroy(), this.focusHighlight = null) + } +}; +mxConstraintHandler.prototype.destroy = function() { + this.reset() +}; + +function mxRubberband(a) { + null != a && (this.graph = a, this.graph.addMouseListener(this), this.panHandler = mxUtils.bind(this, function() { + this.repaint() + }), this.graph.addListener(mxEvent.PAN, this.panHandler), mxClient.IS_IE && mxEvent.addListener(window, "unload", mxUtils.bind(this, function() { + this.destroy() + }))) +} +mxRubberband.prototype.defaultOpacity = 20; +mxRubberband.prototype.enabled = !0; +mxRubberband.prototype.div = null; +mxRubberband.prototype.sharedDiv = null; +mxRubberband.prototype.currentX = 0; +mxRubberband.prototype.currentY = 0; +mxRubberband.prototype.isEnabled = function() { + return this.enabled +}; +mxRubberband.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxRubberband.prototype.mouseDown = function(a, b) { + if (!b.isConsumed() && this.isEnabled() && this.graph.isEnabled() && (this.graph.isForceMarqueeEvent(b.getEvent()) || null == b.getState())) { + var c = mxUtils.getOffset(this.graph.container), + d = mxUtils.getScrollOrigin(this.graph.container); + d.x -= c.x; + d.y -= c.y; + this.start(b.getX() + d.x, b.getY() + d.y); + if (mxClient.IS_NS && !mxClient.IS_SF && !mxClient.IS_GC) { + var e = this.graph.container, + f = function(a) { + a = new mxMouseEvent(a); + var b = mxUtils.convertPoint(e, a.getX(), a.getY()); + a.graphX = b.x; + a.graphY = b.y; + return a + }; + this.dragHandler = mxUtils.bind(this, function(a) { + this.mouseMove(this.graph, f(a)) + }); + this.dropHandler = mxUtils.bind(this, function(a) { + this.mouseUp(this.graph, f(a)) + }); + mxEvent.addListener(document, "mousemove", this.dragHandler); + mxEvent.addListener(document, "mouseup", this.dropHandler) + } + b.consume(!1) + } +}; +mxRubberband.prototype.start = function(a, b) { + this.first = new mxPoint(a, b) +}; +mxRubberband.prototype.mouseMove = function(a, b) { + if (!b.isConsumed() && null != this.first) { + var c = mxUtils.getScrollOrigin(this.graph.container), + d = mxUtils.getOffset(this.graph.container); + c.x -= d.x; + c.y -= d.y; + var d = b.getX() + c.x, + c = b.getY() + c.y, + e = this.first.x - d, + f = this.first.y - c, + g = this.graph.tolerance; + if (null != this.div || Math.abs(e) > g || Math.abs(f) > g) null == this.div && (this.div = this.createShape()), mxUtils.clearSelection(), this.update(d, c), b.consume() + } +}; +mxRubberband.prototype.createShape = function() { + null == this.sharedDiv && (this.sharedDiv = document.createElement("div"), this.sharedDiv.className = "mxRubberband", mxUtils.setOpacity(this.sharedDiv, this.defaultOpacity)); + this.graph.container.appendChild(this.sharedDiv); + return this.sharedDiv +}; +mxRubberband.prototype.mouseUp = function(a, b) { + var c = null != this.div; + this.reset(); + c && (c = new mxRectangle(this.x, this.y, this.width, this.height), this.graph.selectRegion(c, b.getEvent()), b.consume()) +}; +mxRubberband.prototype.reset = function() { + null != this.div && this.div.parentNode.removeChild(this.div); + null != this.dragHandler && (mxEvent.removeListener(document, "mousemove", this.dragHandler), this.dragHandler = null); + null != this.dropHandler && (mxEvent.removeListener(document, "mouseup", this.dropHandler), this.dropHandler = null); + this.currentY = this.currentX = 0; + this.div = this.first = null +}; +mxRubberband.prototype.update = function(a, b) { + this.currentX = a; + this.currentY = b; + this.repaint() +}; +mxRubberband.prototype.repaint = function() { + if (null != this.div) { + var a = this.currentX - this.graph.panDx, + b = this.currentY - this.graph.panDy; + this.x = Math.min(this.first.x, a); + this.y = Math.min(this.first.y, b); + this.width = Math.max(this.first.x, a) - this.x; + this.height = Math.max(this.first.y, b) - this.y; + a = mxClient.IS_VML ? this.graph.panDy : 0; + this.div.style.left = this.x + (mxClient.IS_VML ? this.graph.panDx : 0) + "px"; + this.div.style.top = this.y + a + "px"; + this.div.style.width = Math.max(1, this.width) + "px"; + this.div.style.height = Math.max(1, + this.height) + "px" + } +}; +mxRubberband.prototype.destroy = function() { + this.destroyed || (this.destroyed = !0, this.graph.removeMouseListener(this), this.graph.removeListener(this.panHandler), this.reset(), null != this.sharedDiv && (this.sharedDiv = null)) +}; + +function mxVertexHandler(a) { + null != a && (this.state = a, this.init()) +} +mxVertexHandler.prototype.graph = null; +mxVertexHandler.prototype.state = null; +mxVertexHandler.prototype.singleSizer = !1; +mxVertexHandler.prototype.index = null; +mxVertexHandler.prototype.allowHandleBoundsCheck = !0; +mxVertexHandler.prototype.handleImage = null; +mxVertexHandler.prototype.tolerance = 0; +mxVertexHandler.prototype.rotationEnabled = !1; +mxVertexHandler.prototype.rotationRaster = !0; +mxVertexHandler.prototype.init = function() { + this.graph = this.state.view.graph; + this.selectionBounds = this.getSelectionBounds(this.state); + this.bounds = new mxRectangle(this.selectionBounds.x, this.selectionBounds.y, this.selectionBounds.width, this.selectionBounds.height); + this.selectionBorder = this.createSelectionShape(this.bounds); + this.selectionBorder.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG; + this.selectionBorder.pointerEvents = !1; + this.selectionBorder.init(this.graph.getView().getOverlayPane()); + this.graph.isCellMovable(this.state.cell) && (this.selectionBorder.node.style.cursor = mxConstants.CURSOR_MOVABLE_VERTEX); + mxEvent.redirectMouseEvents(this.selectionBorder.node, this.graph, this.state); + if (0 >= mxGraphHandler.prototype.maxCells || this.graph.getSelectionCount() < mxGraphHandler.prototype.maxCells) { + var a = this.graph.isCellResizable(this.state.cell); + this.sizers = []; + if (a || this.graph.isLabelMovable(this.state.cell) && 2 <= this.state.width && 2 <= this.state.height) { + var b = 0; + a && (this.singleSizer || (this.sizers.push(this.createSizer("nw-resize", + b++)), this.sizers.push(this.createSizer("n-resize", b++)), this.sizers.push(this.createSizer("ne-resize", b++)), this.sizers.push(this.createSizer("w-resize", b++)), this.sizers.push( + this.createSizer("e-resize", b++)), this.sizers.push(this.createSizer("sw-resize", b++)), this.sizers.push(this.createSizer("s-resize", b++))), this.sizers.push(this.createSizer( + "se-resize", b++))); + a = this.graph.model.getGeometry(this.state.cell); + null != a && (!a.relative && !this.graph.isSwimlane(this.state.cell) && this.graph.isLabelMovable(this.state.cell)) && + (this.labelShape = this.createSizer(mxConstants.CURSOR_LABEL_HANDLE, mxEvent.LABEL_HANDLE, mxConstants.LABEL_HANDLE_SIZE, mxConstants.LABEL_HANDLE_FILLCOLOR), this.sizers.push(this.labelShape)) + } else this.graph.isCellMovable(this.state.cell) && (!this.graph.isCellResizable(this.state.cell) && 2 > this.state.width && 2 > this.state.height) && (this.labelShape = this.createSizer( + mxConstants.CURSOR_MOVABLE_VERTEX, null, null, mxConstants.LABEL_HANDLE_FILLCOLOR), this.sizers.push(this.labelShape)) + } + if (this.rotationEnabled && (0 >= + mxGraphHandler.prototype.maxCells || this.graph.getSelectionCount() < mxGraphHandler.prototype.maxCells)) this.rotationShape = this.createSizer("pointer", mxEvent.ROTATION_HANDLE, mxConstants + .HANDLE_SIZE + 3, mxConstants.HANDLE_FILLCOLOR), this.sizers.push(this.rotationShape); + this.redraw() +}; +mxVertexHandler.prototype.getSelectionBounds = function(a) { + return new mxRectangle(Math.round(a.x), Math.round(a.y), Math.round(a.width), Math.round(a.height)) +}; +mxVertexHandler.prototype.createSelectionShape = function(a) { + a = new mxRectangleShape(a, null, this.getSelectionColor()); + a.strokewidth = this.getSelectionStrokeWidth(); + a.isDashed = this.isSelectionDashed(); + return a +}; +mxVertexHandler.prototype.getSelectionColor = function() { + return mxConstants.VERTEX_SELECTION_COLOR +}; +mxVertexHandler.prototype.getSelectionStrokeWidth = function() { + return mxConstants.VERTEX_SELECTION_STROKEWIDTH +}; +mxVertexHandler.prototype.isSelectionDashed = function() { + return mxConstants.VERTEX_SELECTION_DASHED +}; +mxVertexHandler.prototype.createSizer = function(a, b, c, d) { + c = c || mxConstants.HANDLE_SIZE; + c = new mxRectangle(0, 0, c, c); + d = this.createSizerShape(c, b, d); + d.isHtmlAllowed() && null != this.state.text && this.state.text.node.parentNode == this.graph.container ? (d.bounds.height -= 1, d.bounds.width -= 1, d.dialect = mxConstants.DIALECT_STRICTHTML, d + .init(this.graph.container)) : (d.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : mxConstants.DIALECT_SVG, d.init(this.graph.getView().getOverlayPane())); + mxEvent.redirectMouseEvents(d.node, this.graph, this.state); + this.graph.isEnabled() && (d.node.style.cursor = a); + this.isSizerVisible(b) || (d.node.style.visibility = "hidden"); + return d +}; +mxVertexHandler.prototype.isSizerVisible = function(a) { + return !0 +}; +mxVertexHandler.prototype.createSizerShape = function(a, b, c) { + return null != this.handleImage ? (a.width = this.handleImage.width, a.height = this.handleImage.height, new mxImageShape(a, this.handleImage.src)) : b == mxEvent.ROTATION_HANDLE ? new mxEllipse( + a, c || mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR) : new mxRectangleShape(a, c || mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR) +}; +mxVertexHandler.prototype.moveSizerTo = function(a, b, c) { + null != a && (a.bounds.x = Math.round(b - a.bounds.width / 2), a.bounds.y = Math.round(c - a.bounds.height / 2), a.redraw()) +}; +mxVertexHandler.prototype.getHandleForEvent = function(a) { + if (a.isSource(this.rotationShape)) return mxEvent.ROTATION_HANDLE; + if (a.isSource(this.labelShape)) return mxEvent.LABEL_HANDLE; + if (null != this.sizers) + for (var b = this.tolerance, b = this.allowHandleBoundsCheck && (mxClient.IS_IE || 0 < b) ? new mxRectangle(a.getGraphX() - b, a.getGraphY() - b, 2 * b, 2 * b) : null, c = 0; c < this.sizers.length; c++) + if (a.isSource(this.sizers[c]) || null != b && mxUtils.intersects(this.sizers[c].bounds, b)) return c; + return null +}; +mxVertexHandler.prototype.mouseDown = function(a, b) { + if (!b.isConsumed() && this.graph.isEnabled() && !this.graph.isForceMarqueeEvent(b.getEvent()) && (0 < this.tolerance || b.getState() == this.state)) { + var c = this.getHandleForEvent(b); + null != c && (this.start(b.getX(), b.getY(), c), b.consume()) + } +}; +mxVertexHandler.prototype.start = function(a, b, c) { + a = mxUtils.convertPoint(this.graph.container, a, b); + this.startX = a.x; + this.startY = a.y; + this.index = c; + this.selectionBorder.node.style.display = c == mxEvent.ROTATION_HANDLE ? "inline" : "none"; + this.preview = this.createSelectionShape(this.bounds); + !(mxClient.IS_SVG && 0 != Number(this.state.style[mxConstants.STYLE_ROTATION] || "0")) && null != this.state.text && this.state.text.node.parentNode == this.graph.container ? (this.preview.dialect = + mxConstants.DIALECT_STRICTHTML, this.preview.init(this.graph.container)) : + (this.preview.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG, this.preview.init(this.graph.view.getOverlayPane())) +}; +mxVertexHandler.prototype.mouseMove = function(a, b) { + if (!b.isConsumed() && null != this.index) { + var c = new mxPoint(b.getGraphX(), b.getGraphY()), + d = this.graph.isGridEnabledEvent(b.getEvent()), + e = this.graph.getView().scale; + if (this.index == mxEvent.LABEL_HANDLE) d && (c.x = this.graph.snap(c.x / e) * e, c.y = this.graph.snap(c.y / e) * e), this.moveSizerTo(this.sizers[this.sizers.length - 1], c.x, c.y); + else if (this.index == mxEvent.ROTATION_HANDLE) { + var f = this.state.x + this.state.width / 2 - c.x, + g = this.state.y + this.state.height / 2 - c.y; + this.currentAlpha = + 0 != f ? 180 * Math.atan(g / f) / Math.PI + 90 : 0 > g ? 180 : 0; + 0 < f && (this.currentAlpha -= 180); + this.rotationRaster && (f = c.x - this.state.getCenterX(), g = c.y - this.state.getCenterY(), f = Math.abs(Math.sqrt(f * f + g * g) - this.state.height / 2 - 20), f = Math.max(1, 5 * Math.min( + 3, Math.max(0, Math.round(80 / Math.abs(f))))), this.currentAlpha = Math.round(this.currentAlpha / f) * f); + this.selectionBorder.rotation = this.currentAlpha; + this.selectionBorder.redraw() + } else { + var h = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || "0"), + k = Math.cos(-h), + l = Math.sin(-h), + m = new mxPoint(this.state.getCenterX(), this.state.getCenterY()), + f = c.x - this.startX, + g = c.y - this.startY, + c = this.graph.view.translate, + n = l * f + k * g, + f = k * f - l * g; + this.bounds = this.union(this.selectionBounds, f, n, this.index, d, e, c); + k = Math.cos(h); + l = Math.sin(h); + g = new mxPoint(this.bounds.getCenterX(), this.bounds.getCenterY()); + f = g.x - m.x; + g = g.y - m.y; + m = l * f + k * g - g; + this.bounds.x += k * f - l * g - f; + this.bounds.y += m; + this.drawPreview() + } + b.consume() + } else null != this.getHandleForEvent(b) && b.consume(!1) +}; +mxVertexHandler.prototype.mouseUp = function(a, b) { + if (!b.isConsumed() && null != this.index && null != this.state) { + var c = new mxPoint(b.getGraphX(), b.getGraphY()); + this.graph.getModel().beginUpdate(); + try { + if (this.index == mxEvent.ROTATION_HANDLE) null != this.currentAlpha && this.rotateCell(this.state.cell, this.currentAlpha - (this.state.style[mxConstants.STYLE_ROTATION] || 0)); + else { + var d = this.graph.isGridEnabledEvent(b.getEvent()), + e = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || "0"), + f = Math.cos(-e), + g = Math.sin(-e), + h = c.x - this.startX, + k = c.y - this.startY, + c = g * h + f * k, + h = f * h - g * k, + k = c, + l = this.graph.view.scale; + this.resizeCell(this.state.cell, h / l, k / l, this.index, d) + } + } finally { + this.graph.getModel().endUpdate() + } + this.reset(); + b.consume() + } +}; +mxVertexHandler.prototype.rotateCell = function(a, b) { + var c = this.graph.getModel(); + if (c.isVertex(a)) { + var d = a == this.state ? this.state : this.graph.view.getState(a); + null != d && this.graph.setCellStyles(mxConstants.STYLE_ROTATION, (d.style[mxConstants.STYLE_ROTATION] || 0) + b, [a]); + if (this.state.cell != a && (d = this.graph.getCellGeometry(a), null != d && !d.relative)) + if (0 != b) { + var e = this.graph.getModel().getParent(a), + f = this.graph.getCellGeometry(e); + if (!d.relative && null != f) { + var g = mxUtils.toRadians(b), + e = Math.cos(g), + g = Math.sin(g), + h = new mxPoint(d.getCenterX(), d.getCenterY()), + f = new mxPoint(f.width / 2, f.height / 2), + e = mxUtils.getRotatedPoint(h, e, g, f), + d = d.clone(); + d.x = e.x - d.width / 2; + d.y = e.y - d.height / 2; + c.setGeometry(a, d) + } + } else d = d.clone(), d.x += dx, d.y += dy, c.setGeometry(a, d); + d = c.getChildCount(a); + for (e = 0; e < d; e++) this.rotateCell(c.getChildAt(a, e), b) + } +}; +mxVertexHandler.prototype.reset = function() { + this.index = this.currentAlpha = null; + null != this.preview && (this.preview.destroy(), this.preview = null); + null != this.selectionBorder && (this.selectionBorder.node.style.display = "inline", this.selectionBounds = this.getSelectionBounds(this.state), this.bounds = new mxRectangle(this.selectionBounds + .x, this.selectionBounds.y, this.selectionBounds.width, this.selectionBounds.height), this.drawPreview()) +}; +mxVertexHandler.prototype.resizeCell = function(a, b, c, d, e) { + var f = this.graph.model.getGeometry(a); + if (null != f) + if (d == mxEvent.LABEL_HANDLE) d = this.graph.view.scale, b = (this.labelShape.bounds.getCenterX() - this.startX) / d, c = (this.labelShape.bounds.getCenterY() - this.startY) / d, f = f.clone(), + null == f.offset ? f.offset = new mxPoint(b, c) : (f.offset.x += b, f.offset.y += c), this.graph.model.setGeometry(a, f); + else { + d = this.union(f, b, c, d, e, 1, new mxPoint(0, 0)); + var g = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || "0"); + if (0 != g) { + b = d.getCenterX() - f.getCenterX(); + c = d.getCenterY() - f.getCenterY(); + e = Math.cos(g); + var h = Math.sin(g), + g = e * b - h * c - b; + b = h * b + e * c - c; + c = d.x - f.x; + var k = d.y - f.y, + l = e * c - h * k; + e = h * c + e * k; + d.x += g; + d.y += b; + if (!this.graph.isCellCollapsed(a) && (0 != g || 0 != b)) c = f.x - d.x + l, k = f.y - d.y + e, this.moveChildren(a, c, k) + } + this.graph.resizeCell(a, d) + } +}; +mxVertexHandler.prototype.moveChildren = function(a, b, c) { + for (var d = this.graph.getModel(), e = d.getChildCount(a), f = 0; f < e; f++) { + var g = d.getChildAt(a, f); + if (d.isVertex(g)) { + var h = this.graph.getCellGeometry(g); + null != h && !h.relative && (h = h.clone(), h.x += b, h.y += c, d.setGeometry(g, h)) + } + } +}; +mxVertexHandler.prototype.union = function(a, b, c, d, e, f, g) { + if (this.singleSizer) { + g = a.x + a.width + b; + var h = a.y + a.height + c; + e && (g = this.graph.snap(g / f) * f, h = this.graph.snap(h / f) * f); + f = new mxRectangle(a.x, a.y, 0, 0); + f.add(new mxRectangle(g, h, 0, 0)); + return f + } + var h = a.x - g.x * f, + k = h + a.width, + l = a.y - g.y * f; + a = l + a.height; + 4 < d ? (a += c, e && (a = this.graph.snap(a / f) * f)) : 3 > d && (l += c, e && (l = this.graph.snap(l / f) * f)); + if (0 == d || 3 == d || 5 == d) h += b, e && (h = this.graph.snap(h / f) * f); + else if (2 == d || 4 == d || 7 == d) k += b, e && (k = this.graph.snap(k / f) * f); + e = k - h; + a -= + l; + 0 > e && (h += e, e = Math.abs(e)); + 0 > a && (l += a, a = Math.abs(a)); + return new mxRectangle(h + g.x * f, l + g.y * f, e, a) +}; +mxVertexHandler.prototype.redraw = function() { + this.selectionBounds = this.getSelectionBounds(this.state); + this.bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height); + var a = this.state; + if (null != this.sizers) { + var b = a.x + a.width, + c = a.y + a.height; + if (this.singleSizer) this.moveSizerTo(this.sizers[0], b, c); + else { + var d = a.x + a.width / 2, + e = a.y + a.height / 2; + if (1 < this.sizers.length) { + var f = mxUtils.toRadians(a.style[mxConstants.STYLE_ROTATION] || "0"), + g = Math.cos(f), + f = Math.sin(f), + h = new mxPoint(a.getCenterX(), + a.getCenterY()), + k = mxUtils.getRotatedPoint(new mxPoint(a.x, a.y), g, f, h); + this.moveSizerTo(this.sizers[0], k.x, k.y); + k.x = d; + k.y = a.y; + k = mxUtils.getRotatedPoint(k, g, f, h); + this.moveSizerTo(this.sizers[1], k.x, k.y); + k.x = b; + k.y = a.y; + k = mxUtils.getRotatedPoint(k, g, f, h); + this.moveSizerTo(this.sizers[2], k.x, k.y); + k.x = a.x; + k.y = e; + k = mxUtils.getRotatedPoint(k, g, f, h); + this.moveSizerTo(this.sizers[3], k.x, k.y); + k.x = b; + k.y = e; + k = mxUtils.getRotatedPoint(k, g, f, h); + this.moveSizerTo(this.sizers[4], k.x, k.y); + k.x = a.x; + k.y = c; + k = mxUtils.getRotatedPoint(k, + g, f, h); + this.moveSizerTo(this.sizers[5], k.x, k.y); + k.x = d; + k.y = c; + k = mxUtils.getRotatedPoint(k, g, f, h); + this.moveSizerTo(this.sizers[6], k.x, k.y); + k.x = b; + k.y = c; + k = mxUtils.getRotatedPoint(k, g, f, h); + this.moveSizerTo(this.sizers[7], k.x, k.y); + this.moveSizerTo(this.sizers[8], d + a.absoluteOffset.x, e + a.absoluteOffset.y) + } else 2 <= this.state.width && 2 <= this.state.height ? this.moveSizerTo(this.sizers[0], d + a.absoluteOffset.x, e + a.absoluteOffset.y) : this.moveSizerTo(this.sizers[0], a.x, a.y) + } + } + null != this.rotationShape && (f = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || + "0"), g = Math.cos(f), f = Math.sin(f), h = new mxPoint(this.state.getCenterX(), this.state.getCenterY()), k = mxUtils.getRotatedPoint(new mxPoint(a.x + a.width / 2, a.y - 16), g, f, h), + this.moveSizerTo(this.rotationShape, k.x, k.y)); + this.selectionBorder.rotation = Number(this.state.style[mxConstants.STYLE_ROTATION] || "0"); + this.drawPreview() +}; +mxVertexHandler.prototype.drawPreview = function() { + null != this.preview && (this.preview.bounds = this.bounds, this.preview.node.parentNode == this.graph.container && (this.preview.bounds.width = Math.max(0, this.preview.bounds.width - 1), this.preview + .bounds.height = Math.max(0, this.preview.bounds.height - 1)), this.preview.rotation = Number(this.state.style[mxConstants.STYLE_ROTATION] || "0"), this.preview.redraw()); + this.selectionBorder.bounds = this.bounds; + this.selectionBorder.redraw() +}; +mxVertexHandler.prototype.destroy = function() { + null != this.preview && (this.preview.destroy(), this.preview = null); + this.selectionBorder.destroy(); + this.labelShape = this.selectionBorder = null; + if (null != this.sizers) + for (var a = 0; a < this.sizers.length; a++) this.sizers[a].destroy(), this.sizers[a] = null +}; + +function mxEdgeHandler(a) { + null != a && (this.state = a, this.init()) +} +mxEdgeHandler.prototype.graph = null; +mxEdgeHandler.prototype.state = null; +mxEdgeHandler.prototype.marker = null; +mxEdgeHandler.prototype.constraintHandler = null; +mxEdgeHandler.prototype.error = null; +mxEdgeHandler.prototype.shape = null; +mxEdgeHandler.prototype.bends = null; +mxEdgeHandler.prototype.labelShape = null; +mxEdgeHandler.prototype.cloneEnabled = !0; +mxEdgeHandler.prototype.addEnabled = !1; +mxEdgeHandler.prototype.removeEnabled = !1; +mxEdgeHandler.prototype.preferHtml = !1; +mxEdgeHandler.prototype.allowHandleBoundsCheck = !0; +mxEdgeHandler.prototype.snapToTerminals = !1; +mxEdgeHandler.prototype.handleImage = null; +mxEdgeHandler.prototype.tolerance = 0; +mxEdgeHandler.prototype.init = function() { + this.graph = this.state.view.graph; + this.marker = this.createMarker(); + this.constraintHandler = new mxConstraintHandler(this.graph); + this.points = []; + this.abspoints = this.getSelectionPoints(this.state); + this.shape = this.createSelectionShape(this.abspoints); + this.shape.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : mxConstants.DIALECT_SVG; + this.shape.init(this.graph.getView().getOverlayPane()); + this.shape.svgStrokeTolerance = 0; + this.shape.node.style.cursor = + mxConstants.CURSOR_MOVABLE_EDGE; + mxEvent.addListener(this.shape.node, "dblclick", mxUtils.bind(this, function(a) { + this.graph.dblClick(a, this.state.cell) + })); + mxEvent.addGestureListeners(this.shape.node, mxUtils.bind(this, function(a) { + this.addEnabled && this.isAddPointEvent(a) ? this.addPoint(this.state, a) : this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a, this.state)) + }), mxUtils.bind(this, function(a) { + var c = this.state.cell; + if (null != this.index) { + var d = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(a), + mxEvent.getClientY(a)), + c = this.graph.getCellAt(d.x, d.y); + this.graph.isSwimlane(c) && this.graph.hitsSwimlaneContent(c, d.x, d.y) && (c = null) + } + this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(a, this.graph.getView().getState(c))) + }), mxUtils.bind(this, function(a) { + this.graph.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(a, this.state)) + })); + this.preferHtml = null != this.state.text && this.state.text.node.parentNode == this.graph.container; + if (!this.preferHtml) { + var a = this.state.getVisibleTerminalState(!0); + null != a && (this.preferHtml = null != a.text && a.text.node.parentNode == this.graph.container); + this.preferHtml || (a = this.state.getVisibleTerminalState(!1), null != a && (this.preferHtml = null != a.text && a.text.node.parentNode == this.graph.container)) + } + if (this.graph.getSelectionCount() < mxGraphHandler.prototype.maxCells || 0 >= mxGraphHandler.prototype.maxCells) this.bends = this.createBends(); + this.label = new mxPoint(this.state.absoluteOffset.x, this.state.absoluteOffset.y); + this.labelShape = new mxRectangleShape(new mxRectangle, + mxConstants.LABEL_HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR); + this.labelShape.pointerEvents = !1; + this.initBend(this.labelShape); + this.labelShape.node.style.cursor = mxConstants.CURSOR_LABEL_HANDLE; + mxEvent.redirectMouseEvents(this.labelShape.node, this.graph, this.state); + this.redraw() +}; +mxEdgeHandler.prototype.isAddPointEvent = function(a) { + return mxEvent.isShiftDown(a) +}; +mxEdgeHandler.prototype.isRemovePointEvent = function(a) { + return mxEvent.isShiftDown(a) +}; +mxEdgeHandler.prototype.getSelectionPoints = function(a) { + return a.absolutePoints +}; +mxEdgeHandler.prototype.createSelectionShape = function(a) { + a = new mxPolyline(a, this.getSelectionColor()); + a.strokewidth = this.getSelectionStrokeWidth(); + a.isDashed = this.isSelectionDashed(); + return a +}; +mxEdgeHandler.prototype.getSelectionColor = function() { + return mxConstants.EDGE_SELECTION_COLOR +}; +mxEdgeHandler.prototype.getSelectionStrokeWidth = function() { + return mxConstants.EDGE_SELECTION_STROKEWIDTH +}; +mxEdgeHandler.prototype.isSelectionDashed = function() { + return mxConstants.EDGE_SELECTION_DASHED +}; +mxEdgeHandler.prototype.isConnectableCell = function(a) { + return !0 +}; +mxEdgeHandler.prototype.createMarker = function() { + var a = new mxCellMarker(this.graph), + b = this; + a.getCell = function(a) { + var d = mxCellMarker.prototype.getCell.apply(this, arguments); + if (!b.isConnectableCell(d)) return null; + var e = b.graph.getModel(); + if (d == b.state.cell || null != d && !b.graph.connectableEdges && e.isEdge(d)) d = null; + return d + }; + a.isValidState = function(a) { + var d = b.graph.getModel(), + d = b.graph.view.getTerminalPort(a, b.graph.view.getState(d.getTerminal(b.state.cell, !b.isSource)), !b.isSource), + d = null != d ? d.cell : null; + b.error = b.validateConnection(b.isSource ? a.cell : d, b.isSource ? d : a.cell); + return null == b.error + }; + return a +}; +mxEdgeHandler.prototype.validateConnection = function(a, b) { + return this.graph.getEdgeValidationError(this.state.cell, a, b) +}; +mxEdgeHandler.prototype.createBends = function() { + for (var a = this.state.cell, b = [], c = 0; c < this.abspoints.length; c++) + if (this.isHandleVisible(c)) { + var d = c == this.abspoints.length - 1; + if ((d = 0 == c || d) || this.graph.isCellBendable(a)) { + var e = this.createHandleShape(c); + this.initBend(e); + mxClient.IS_TOUCH && e.node.setAttribute("pointer-events", "none"); + if (this.isHandleEnabled(c)) + if (mxClient.IS_TOUCH) { + var f = mxUtils.bind(this, function(a) { + a = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(a), mxEvent.getClientY(a)); + return this.graph.view.getState(this.graph.getCellAt(a.x, a.y)) + }); + mxEvent.redirectMouseEvents(e.node, this.graph, f) + } else e.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE, mxEvent.redirectMouseEvents(e.node, this.graph, this.state); + b.push(e); + d || (this.points.push(new mxPoint(0, 0)), e.node.style.visibility = "hidden") + } + } + return b +}; +mxEdgeHandler.prototype.isHandleEnabled = function(a) { + return !0 +}; +mxEdgeHandler.prototype.isHandleVisible = function(a) { + return !0 +}; +mxEdgeHandler.prototype.createHandleShape = function(a) { + if (null != this.handleImage) return new mxImageShape(new mxRectangle(0, 0, this.handleImage.width, this.handleImage.height), this.handleImage.src); + a = mxConstants.HANDLE_SIZE; + this.preferHtml && (a -= 1); + return new mxRectangleShape(new mxRectangle(0, 0, a, a), mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR) +}; +mxEdgeHandler.prototype.initBend = function(a) { + this.preferHtml ? (a.dialect = mxConstants.DIALECT_STRICTHTML, a.init(this.graph.container)) : (a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : + mxConstants.DIALECT_SVG, a.init(this.graph.getView().getOverlayPane())) +}; +mxEdgeHandler.prototype.getHandleForEvent = function(a) { + if (null != this.bends) + for (var b = this.tolerance, b = this.allowHandleBoundsCheck && (mxClient.IS_IE || 0 < b) ? new mxRectangle(a.getGraphX() - b, a.getGraphY() - b, 2 * b, 2 * b) : null, c = 0; c < this.bends.length; c++) + if ((a.isSource(this.bends[c]) || null != b && mxUtils.intersects(this.bends[c].bounds, b)) && "hidden" != this.bends[c].node.style.visibility) return c; + if (a.isSource(this.labelShape) && "hidden" != this.labelShape.node.style.visibility || a.isSource(this.state.text)) + if (!mxClient.IS_SF && + !mxClient.IS_GC || "SELECT" != a.getSource().nodeName) return mxEvent.LABEL_HANDLE; + return null +}; +mxEdgeHandler.prototype.mouseDown = function(a, b) { + var c = null, + c = this.getHandleForEvent(b); + null != c && (!b.isConsumed() && this.graph.isEnabled() && !this.graph.isForceMarqueeEvent(b.getEvent())) && (this.removeEnabled && this.isRemovePointEvent(b.getEvent()) ? this.removePoint(this.state, + c) : (c != mxEvent.LABEL_HANDLE || this.graph.isLabelMovable(b.getCell())) && this.start(b.getX(), b.getY(), c), b.consume()) +}; +mxEdgeHandler.prototype.start = function(a, b, c) { + this.startX = a; + this.startY = b; + this.isSource = null == this.bends ? !1 : 0 == c; + this.isTarget = null == this.bends ? !1 : c == this.bends.length - 1; + this.isLabel = c == mxEvent.LABEL_HANDLE; + if (this.isSource || this.isTarget) { + if (a = this.state.cell, b = this.graph.model.getTerminal(a, this.isSource), null == b && this.graph.isTerminalPointMovable(a, this.isSource) || null != b && this.graph.isCellDisconnectable(a, + b, this.isSource)) this.index = c + } else this.index = c +}; +mxEdgeHandler.prototype.clonePreviewState = function(a, b) { + return this.state.clone() +}; +mxEdgeHandler.prototype.getSnapToTerminalTolerance = function() { + return this.graph.gridSize * this.graph.view.scale / 2 +}; +mxEdgeHandler.prototype.getPointForEvent = function(a) { + var b = new mxPoint(a.getGraphX(), a.getGraphY()), + c = this.getSnapToTerminalTolerance(), + d = this.graph.getView(), + e = !1, + f = !1; + if (this.snapToTerminals && 0 < c) { + var g = function(a) { + if (null != a) { + var d = a.x; + Math.abs(b.x - d) < c && (b.x = d, e = !0); + a = a.y; + Math.abs(b.y - a) < c && (b.y = a, f = !0) + } + }, + h = function(a) { + null != a && g.call(this, new mxPoint(d.getRoutingCenterX(a), d.getRoutingCenterY(a))) + }; + h.call(this, this.state.getVisibleTerminalState(!0)); + h.call(this, this.state.getVisibleTerminalState(!1)); + if (null != this.abspoints) + for (h = 0; h < this.abspoints; h++) h != this.index && g.call(this, this.abspoints[h]) + } + this.graph.isGridEnabledEvent(a.getEvent()) && (a = d.scale, h = d.translate, e || (b.x = (this.graph.snap(b.x / a - h.x) + h.x) * a), f || (b.y = (this.graph.snap(b.y / a - h.y) + h.y) * a)); + return b +}; +mxEdgeHandler.prototype.getPreviewTerminalState = function(a) { + this.constraintHandler.update(a, this.isSource); + this.marker.process(a); + a = this.marker.getValidState(); + var b = null; + null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentConstraint && this.marker.reset(); + null != a ? b = a : null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && (b = this.constraintHandler.currentFocus); + return b +}; +mxEdgeHandler.prototype.getPreviewPoints = function(a) { + var b = this.graph.getCellGeometry(this.state.cell), + b = null != b.points ? b.points.slice() : null; + !this.isSource && !this.isTarget ? (this.convertPoint(a, !1), null == b ? b = [a] : b[this.index - 1] = a) : this.graph.resetEdgesOnConnect && (b = null); + return b +}; +mxEdgeHandler.prototype.updatePreviewState = function(a, b, c) { + var d = this.isSource ? c : this.state.getVisibleTerminalState(!0), + e = this.isTarget ? c : this.state.getVisibleTerminalState(!1), + f = this.graph.getConnectionConstraint(a, d, !0), + g = this.graph.getConnectionConstraint(a, e, !1), + h = this.constraintHandler.currentConstraint; + null == h && (h = new mxConnectionConstraint); + this.isSource ? f = h : this.isTarget && (g = h); + (!this.isSource || null != d) && a.view.updateFixedTerminalPoint(a, d, !0, f); + (!this.isTarget || null != e) && a.view.updateFixedTerminalPoint(a, + e, !1, g); + if ((this.isSource || this.isTarget) && null == c) a.setAbsoluteTerminalPoint(b, this.isSource), null == this.marker.getMarkedState() && (this.error = this.graph.allowDanglingEdges ? null : ""); + a.view.updatePoints(a, this.points, d, e); + a.view.updateFloatingTerminalPoints(a, d, e) +}; +mxEdgeHandler.prototype.mouseMove = function(a, b) { + if (null != this.index && null != this.marker) { + var c = this.getPointForEvent(b); + if (this.isLabel) this.label.x = c.x, this.label.y = c.y; + else { + this.points = this.getPreviewPoints(c); + var d = this.isSource || this.isTarget ? this.getPreviewTerminalState(b) : null, + e = this.clonePreviewState(c, null != d ? d.cell : null); + this.updatePreviewState(e, c, d); + this.setPreviewColor(null == this.error ? this.marker.validColor : this.marker.invalidColor); + this.abspoints = e.absolutePoints; + this.active = !0 + } + this.drawPreview(); + mxEvent.consume(b.getEvent()); + b.consume() + } else mxClient.IS_IE && null != this.getHandleForEvent(b) && b.consume(!1) +}; +mxEdgeHandler.prototype.mouseUp = function(a, b) { + if (null != this.index && null != this.marker) { + var c = this.state.cell; + if (b.getX() != this.startX || b.getY() != this.startY) + if (null != this.error) 0 < this.error.length && this.graph.validationAlert(this.error); + else if (this.isLabel) this.moveLabel(this.state, this.label.x, this.label.y); + else if (this.isSource || this.isTarget) { + var d = null; + null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && (d = this.constraintHandler.currentFocus.cell); + null == + d && this.marker.hasValidState() && (d = this.marker.validState.cell); + if (null != d) c = this.connect(c, d, this.isSource, this.graph.isCloneEvent(b.getEvent()) && this.cloneEnabled && this.graph.isCellsCloneable(), b); + else if (this.graph.isAllowDanglingEdges()) { + d = this.abspoints[this.isSource ? 0 : this.abspoints.length - 1]; + d.x = d.x / this.graph.view.scale - this.graph.view.translate.x; + d.y = d.y / this.graph.view.scale - this.graph.view.translate.y; + var e = this.graph.getView().getState(this.graph.getModel().getParent(c)); + null != e && (d.x -= + e.origin.x, d.y -= e.origin.y); + d.x -= this.graph.panDx / this.graph.view.scale; + d.y -= this.graph.panDy / this.graph.view.scale; + this.changeTerminalPoint(c, d, this.isSource) + } + } else this.active ? this.changePoints(c, this.points) : (this.graph.getView().invalidate(this.state.cell), this.graph.getView().revalidate(this.state.cell)); + null != this.marker && (this.reset(), c != this.state.cell && this.graph.setSelectionCell(c)); + b.consume() + } +}; +mxEdgeHandler.prototype.reset = function() { + this.points = this.label = this.index = this.error = null; + this.isTarget = this.isSource = this.isLabel = this.active = !1; + this.marker.reset(); + this.constraintHandler.reset(); + this.setPreviewColor(mxConstants.EDGE_SELECTION_COLOR); + this.redraw() +}; +mxEdgeHandler.prototype.setPreviewColor = function(a) { + null != this.shape && (this.shape.stroke = a) +}; +mxEdgeHandler.prototype.convertPoint = function(a, b) { + var c = this.graph.getView().getScale(), + d = this.graph.getView().getTranslate(); + b && (a.x = this.graph.snap(a.x), a.y = this.graph.snap(a.y)); + a.x = Math.round(a.x / c - d.x); + a.y = Math.round(a.y / c - d.y); + c = this.graph.getView().getState(this.graph.getModel().getParent(this.state.cell)); + null != c && (a.x -= c.origin.x, a.y -= c.origin.y); + return a +}; +mxEdgeHandler.prototype.moveLabel = function(a, b, c) { + var d = this.graph.getModel(), + e = d.getGeometry(a.cell); + if (null != e) { + var e = e.clone(), + f = this.graph.getView().getRelativePoint(a, b, c); + e.x = f.x; + e.y = f.y; + var g = this.graph.getView().scale; + e.offset = new mxPoint(0, 0); + f = this.graph.view.getPoint(a, e); + e.offset = new mxPoint((b - f.x) / g, (c - f.y) / g); + d.setGeometry(a.cell, e) + } +}; +mxEdgeHandler.prototype.connect = function(a, b, c, d, e) { + e = this.graph.getModel(); + var f = e.getParent(a); + e.beginUpdate(); + try { + if (d) { + var g = a.clone(); + e.add(f, g, e.getChildCount(f)); + var h = e.getTerminal(a, !c); + this.graph.connectCell(g, h, !c); + a = g + } + var k = this.constraintHandler.currentConstraint; + null == k && (k = new mxConnectionConstraint); + this.graph.connectCell(a, b, c, k) + } finally { + e.endUpdate() + } + return a +}; +mxEdgeHandler.prototype.changeTerminalPoint = function(a, b, c) { + var d = this.graph.getModel(), + e = d.getGeometry(a); + if (null != e) { + d.beginUpdate(); + try { + e = e.clone(), e.setTerminalPoint(b, c), d.setGeometry(a, e), this.graph.connectCell(a, null, c, new mxConnectionConstraint) + } finally { + d.endUpdate() + } + } +}; +mxEdgeHandler.prototype.changePoints = function(a, b) { + var c = this.graph.getModel(), + d = c.getGeometry(a); + null != d && (d = d.clone(), d.points = b, c.setGeometry(a, d)) +}; +mxEdgeHandler.prototype.addPoint = function(a, b) { + var c = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(b), mxEvent.getClientY(b)), + d = this.graph.isGridEnabledEvent(b); + this.convertPoint(c, d); + this.addPointAt(a, c.x, c.y); + mxEvent.consume(b) +}; +mxEdgeHandler.prototype.addPointAt = function(a, b, c) { + var d = this.graph.getCellGeometry(a.cell); + b = new mxPoint(b, c); + if (null != d) { + d = d.clone(); + c = this.graph.view.translate; + var e = this.graph.view.scale; + c = mxUtils.findNearestSegment(a, (b.x + c.x) * e, (b.y + c.y) * e); + null == d.points ? d.points = [b] : d.points.splice(c, 0, b); + this.graph.getModel().setGeometry(a.cell, d); + this.destroy(); + this.init() + } +}; +mxEdgeHandler.prototype.removePoint = function(a, b) { + if (0 < b && b < this.abspoints.length - 1) { + var c = this.graph.getCellGeometry(this.state.cell); + null != c && null != c.points && (c = c.clone(), c.points.splice(b - 1, 1), this.graph.getModel().setGeometry(a.cell, c), this.destroy(), this.init()) + } +}; +mxEdgeHandler.prototype.getHandleFillColor = function(a) { + a = 0 == a; + var b = this.state.cell, + c = this.graph.getModel().getTerminal(b, a), + d = mxConstants.HANDLE_FILLCOLOR; + null != c && !this.graph.isCellDisconnectable(b, c, a) || null == c && !this.graph.isTerminalPointMovable(b, a) ? d = mxConstants.LOCKED_HANDLE_FILLCOLOR : null != c && this.graph.isCellDisconnectable( + b, c, a) && (d = mxConstants.CONNECT_HANDLE_FILLCOLOR); + return d +}; +mxEdgeHandler.prototype.redraw = function() { + this.abspoints = this.state.absolutePoints.slice(); + var a = this.state.cell, + b = mxConstants.LABEL_HANDLE_SIZE; + this.label = new mxPoint(this.state.absoluteOffset.x, this.state.absoluteOffset.y); + this.labelShape.bounds = new mxRectangle(Math.round(this.label.x - b / 2), Math.round(this.label.y - b / 2), b, b); + this.labelShape.redraw(); + b = this.graph.getLabel(a); + null != b && 0 < b.length && this.graph.isLabelMovable(a) ? this.labelShape.node.style.visibility = "visible" : this.labelShape.node.style.visibility = + "hidden"; + if (null != this.bends && 0 < this.bends.length) { + var c = this.abspoints.length - 1, + a = this.abspoints[0], + d = this.abspoints[0].y, + b = this.bends[0].bounds; + this.bends[0].bounds = new mxRectangle(Math.round(this.abspoints[0].x - b.width / 2), Math.round(d - b.height / 2), b.width, b.height); + this.bends[0].fill = this.getHandleFillColor(0); + this.bends[0].redraw(); + var d = this.abspoints[c], + e = this.abspoints[c].x, + c = this.abspoints[c].y, + f = this.bends.length - 1, + b = this.bends[f].bounds; + this.bends[f].bounds = new mxRectangle(Math.round(e - b.width / + 2), Math.round(c - b.height / 2), b.width, b.height); + this.bends[f].fill = this.getHandleFillColor(f); + this.bends[f].redraw(); + this.redrawInnerBends(a, d) + } + this.drawPreview() +}; +mxEdgeHandler.prototype.redrawInnerBends = function(a, b) { + var c = this.graph.getModel().getGeometry(this.state.cell).points; + if (null != c) { + null == this.points && (this.points = []); + for (var d = 1; d < this.bends.length - 1; d++) + if (null != this.bends[d]) + if (null != this.abspoints[d]) { + var e = this.abspoints[d].x, + f = this.abspoints[d].y, + g = this.bends[d].bounds; + this.bends[d].node.style.visibility = "visible"; + this.bends[d].bounds = new mxRectangle(Math.round(e - g.width / 2), Math.round(f - g.height / 2), g.width, g.height); + this.bends[d].redraw(); + this.points[d - + 1] = c[d - 1] + } else this.bends[d].destroy(), this.bends[d] = null + } +}; +mxEdgeHandler.prototype.drawPreview = function() { + if (this.isLabel) { + var a = mxConstants.LABEL_HANDLE_SIZE, + a = new mxRectangle(Math.round(this.label.x - a / 2), Math.round(this.label.y - a / 2), a, a); + this.labelShape.bounds = a; + this.labelShape.redraw() + } else this.shape.points = this.abspoints, this.shape.redraw() +}; +mxEdgeHandler.prototype.destroy = function() { + null != this.marker && (this.marker.destroy(), this.marker = null); + null != this.shape && (this.shape.destroy(), this.shape = null); + null != this.labelShape && (this.labelShape.destroy(), this.labelShape = null); + null != this.constraintHandler && (this.constraintHandler.destroy(), this.constraintHandler = null); + if (null != this.bends) + for (var a = 0; a < this.bends.length; a++) null != this.bends[a] && (this.bends[a].destroy(), this.bends[a] = null) +}; + +function mxElbowEdgeHandler(a) { + mxEdgeHandler.call(this, a) +} +mxUtils.extend(mxElbowEdgeHandler, mxEdgeHandler); +mxElbowEdgeHandler.prototype = new mxEdgeHandler; +mxElbowEdgeHandler.prototype.constructor = mxElbowEdgeHandler; +mxElbowEdgeHandler.prototype.flipEnabled = !0; +mxElbowEdgeHandler.prototype.doubleClickOrientationResource = "none" != mxClient.language ? "doubleClickOrientation" : ""; +mxElbowEdgeHandler.prototype.createBends = function() { + var a = [], + b = this.createHandleShape(0); + this.initBend(b); + b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE; + mxEvent.redirectMouseEvents(b.node, this.graph, this.state); + a.push(b); + mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none"); + a.push(this.createVirtualBend()); + this.points.push(new mxPoint(0, 0)); + b = this.createHandleShape(2); + this.initBend(b); + b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE; + mxEvent.redirectMouseEvents(b.node, this.graph, this.state); + a.push(b); + mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none"); + return a +}; +mxElbowEdgeHandler.prototype.createVirtualBend = function() { + var a = this.createHandleShape(); + this.initBend(a); + var b = this.getCursorForBend(); + a.node.style.cursor = b; + b = mxUtils.bind(this, function(a) { + !mxEvent.isConsumed(a) && this.flipEnabled && (this.graph.flipEdge(this.state.cell, a), mxEvent.consume(a)) + }); + mxEvent.redirectMouseEvents(a.node, this.graph, this.state, null, null, null, b); + this.graph.isCellBendable(this.state.cell) || (a.node.style.display = "none"); + return a +}; +mxElbowEdgeHandler.prototype.getCursorForBend = function() { + return this.state.style[mxConstants.STYLE_EDGE] == mxEdgeStyle.TopToBottom || this.state.style[mxConstants.STYLE_EDGE] == mxConstants.EDGESTYLE_TOPTOBOTTOM || (this.state.style[mxConstants.STYLE_EDGE] == + mxEdgeStyle.ElbowConnector || this.state.style[mxConstants.STYLE_EDGE] == mxConstants.EDGESTYLE_ELBOW) && this.state.style[mxConstants.STYLE_ELBOW] == mxConstants.ELBOW_VERTICAL ? + "row-resize" : "col-resize" +}; +mxElbowEdgeHandler.prototype.getTooltipForNode = function(a) { + var b = null; + if (null != this.bends && null != this.bends[1] && (a == this.bends[1].node || a.parentNode == this.bends[1].node)) b = this.doubleClickOrientationResource, b = mxResources.get(b) || b; + return b +}; +mxElbowEdgeHandler.prototype.convertPoint = function(a, b) { + var c = this.graph.getView().getScale(), + d = this.graph.getView().getTranslate(), + e = this.state.origin; + b && (a.x = this.graph.snap(a.x), a.y = this.graph.snap(a.y)); + a.x = Math.round(a.x / c - d.x - e.x); + a.y = Math.round(a.y / c - d.y - e.y) +}; +mxElbowEdgeHandler.prototype.redrawInnerBends = function(a, b) { + var c = this.graph.getModel().getGeometry(this.state.cell).points, + c = null != c ? c[0] : null, + c = null == c ? new mxPoint(a.x + (b.x - a.x) / 2, a.y + (b.y - a.y) / 2) : new mxPoint(this.graph.getView().scale * (c.x + this.graph.getView().translate.x + this.state.origin.x), this.graph.getView() + .scale * (c.y + this.graph.getView().translate.y + this.state.origin.y)), + d = this.bends[1].bounds, + e = d.width, + d = d.height; + null == this.handleImage && (d = e = mxConstants.HANDLE_SIZE); + var f = new mxRectangle(Math.round(c.x - + e / 2), Math.round(c.y - d / 2), e, d); + null == this.handleImage && ("hidden" != this.labelShape.node.style.visibility && mxUtils.intersects(f, this.labelShape.bounds)) && (e += 3, d += 3, f = new mxRectangle(Math.round(c.x - e / 2), + Math.round(c.y - d / 2), e, d)); + this.bends[1].bounds = f; + this.bends[1].redraw() +}; + +function mxEdgeSegmentHandler(a) { + mxEdgeHandler.call(this, a) +} +mxUtils.extend(mxEdgeSegmentHandler, mxEdgeHandler); +mxEdgeSegmentHandler.prototype = new mxElbowEdgeHandler; +mxEdgeSegmentHandler.prototype.constructor = mxEdgeSegmentHandler; +mxEdgeSegmentHandler.prototype.getPreviewPoints = function(a) { + if (this.isSource || this.isTarget) return mxElbowEdgeHandler.prototype.getPreviewPoints.apply(this, arguments); + this.convertPoint(a, !1); + var b = this.state.absolutePoints, + c = b[0].clone(); + this.convertPoint(c, !1); + for (var d = [], e = 1; e < b.length; e++) { + var f = b[e].clone(); + this.convertPoint(f, !1); + e == this.index && (c.x == f.x ? (c.x = a.x, f.x = a.x) : (c.y = a.y, f.y = a.y)); + e < b.length - 1 && d.push(f); + c = f + } + if (1 == d.length) { + if (c = this.state.view, e = this.state.getVisibleTerminalState(!0), + f = this.state.getVisibleTerminalState(!1), null != f & null != e) { + var g = this.state.origin.x, + h = this.state.origin.y; + mxUtils.contains(f, d[0].x + g, d[0].y + h) ? b[1].y == b[2].y ? d[0].y = c.getRoutingCenterY(e) - h : d[0].x = c.getRoutingCenterX(e) - g : mxUtils.contains(e, d[0].x + g, d[0].y + h) && (b[ + 1].y == b[0].y ? d[0].y = c.getRoutingCenterY(f) - h : d[0].x = c.getRoutingCenterX(f) - g) + } + } else 0 == d.length && (d = [a]); + return d +}; +mxEdgeSegmentHandler.prototype.createBends = function() { + var a = [], + b = this.createHandleShape(0); + this.initBend(b); + b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE; + mxEvent.redirectMouseEvents(b.node, this.graph, this.state); + a.push(b); + mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none"); + var c = this.state.absolutePoints; + if (this.graph.isCellBendable(this.state.cell)) { + null == this.points && (this.points = []); + for (var d = 0; d < c.length - 1; d++) b = this.createVirtualBend(), a.push(b), b.node.style.cursor = 0 == c[d].x - + c[d + 1].x ? "col-resize" : "row-resize", this.points.push(new mxPoint(0, 0)), mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none") + } + b = this.createHandleShape(c.length); + this.initBend(b); + b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE; + mxEvent.redirectMouseEvents(b.node, this.graph, this.state); + a.push(b); + mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none"); + return a +}; +mxEdgeSegmentHandler.prototype.redraw = function() { + this.refresh(); + mxEdgeHandler.prototype.redraw.apply(this, arguments) +}; +mxEdgeSegmentHandler.prototype.refresh = function() { + if (null != this.bends) { + for (var a = 0; a < this.bends.length; a++) null != this.bends[a] && (this.bends[a].destroy(), this.bends[a] = null); + this.bends = this.createBends() + } +}; +mxEdgeSegmentHandler.prototype.redrawInnerBends = function(a, b) { + if (this.graph.isCellBendable(this.state.cell)) { + var c = mxConstants.HANDLE_SIZE, + d = this.state.absolutePoints; + if (null != d && 1 < d.length) + for (var e = 0; e < this.state.absolutePoints.length - 1; e++) + if (null != this.bends[e + 1]) { + a = d[e]; + b = d[e + 1]; + var f = new mxPoint(a.x + (b.x - a.x) / 2, a.y + (b.y - a.y) / 2); + this.bends[e + 1].bounds = new mxRectangle(Math.round(f.x - c / 2), Math.round(f.y - c / 2), c, c); + this.bends[e + 1].redraw() + } + } +}; +mxEdgeSegmentHandler.prototype.changePoints = function(a, b) { + b = []; + var c = this.abspoints; + if (1 < c.length) + for (var d = c[0], e = c[1], f = 2; f < c.length; f++) { + var g = c[f]; + if ((Math.round(d.x) != Math.round(e.x) || Math.round(e.x) != Math.round(g.x)) && (Math.round(d.y) != Math.round(e.y) || Math.round(e.y) != Math.round(g.y))) d = e, e = e.clone(), this.convertPoint( + e, !1), b.push(e); + e = g + } + mxElbowEdgeHandler.prototype.changePoints.apply(this, arguments) +}; + +function mxKeyHandler(a, b) { + null != a && (this.graph = a, this.target = b || document.documentElement, this.normalKeys = [], this.shiftKeys = [], this.controlKeys = [], this.controlShiftKeys = [], mxEvent.addListener(this.target, + "keydown", mxUtils.bind(this, function(a) { + this.keyDown(a) + })), mxClient.IS_IE && mxEvent.addListener(window, "unload", mxUtils.bind(this, function() { + this.destroy() + }))) +} +mxKeyHandler.prototype.graph = null; +mxKeyHandler.prototype.target = null; +mxKeyHandler.prototype.normalKeys = null; +mxKeyHandler.prototype.shiftKeys = null; +mxKeyHandler.prototype.controlKeys = null; +mxKeyHandler.prototype.controlShiftKeys = null; +mxKeyHandler.prototype.enabled = !0; +mxKeyHandler.prototype.isEnabled = function() { + return this.enabled +}; +mxKeyHandler.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxKeyHandler.prototype.bindKey = function(a, b) { + this.normalKeys[a] = b +}; +mxKeyHandler.prototype.bindShiftKey = function(a, b) { + this.shiftKeys[a] = b +}; +mxKeyHandler.prototype.bindControlKey = function(a, b) { + this.controlKeys[a] = b +}; +mxKeyHandler.prototype.bindControlShiftKey = function(a, b) { + this.controlShiftKeys[a] = b +}; +mxKeyHandler.prototype.isControlDown = function(a) { + return mxEvent.isControlDown(a) +}; +mxKeyHandler.prototype.getFunction = function(a) { + return null != a ? this.isControlDown(a) ? mxEvent.isShiftDown(a) ? this.controlShiftKeys[a.keyCode] : this.controlKeys[a.keyCode] : mxEvent.isShiftDown(a) ? this.shiftKeys[a.keyCode] : this.normalKeys[ + a.keyCode] : null +}; +mxKeyHandler.prototype.isGraphEvent = function(a) { + a = mxEvent.getSource(a); + if (a == this.target || a.parentNode == this.target || null != this.graph.cellEditor && a == this.graph.cellEditor.textarea) return !0; + for (; null != a;) { + if (a == this.graph.container) return !0; + a = a.parentNode + } + return !1 +}; +mxKeyHandler.prototype.keyDown = function(a) { + if (this.graph.isEnabled() && !mxEvent.isConsumed(a) && this.isGraphEvent(a) && this.isEnabled()) + if (27 == a.keyCode) this.escape(a); + else if (!this.graph.isEditing()) { + var b = this.getFunction(a); + null != b && (b(a), mxEvent.consume(a)) + } +}; +mxKeyHandler.prototype.escape = function(a) { + this.graph.isEscapeEnabled() && this.graph.escape(a) +}; +mxKeyHandler.prototype.destroy = function() { + this.target = null +}; + +function mxTooltipHandler(a, b) { + null != a && (this.graph = a, this.delay = b || 500, this.graph.addMouseListener(this)) +} +mxTooltipHandler.prototype.zIndex = 10005; +mxTooltipHandler.prototype.graph = null; +mxTooltipHandler.prototype.delay = null; +mxTooltipHandler.prototype.hideOnHover = !1; +mxTooltipHandler.prototype.enabled = !0; +mxTooltipHandler.prototype.isEnabled = function() { + return this.enabled +}; +mxTooltipHandler.prototype.setEnabled = function(a) { + this.enabled = a +}; +mxTooltipHandler.prototype.isHideOnHover = function() { + return this.hideOnHover +}; +mxTooltipHandler.prototype.setHideOnHover = function(a) { + this.hideOnHover = a +}; +mxTooltipHandler.prototype.init = function() { + null != document.body && (this.div = document.createElement("div"), this.div.className = "mxTooltip", this.div.style.visibility = "hidden", this.div.style.zIndex = this.zIndex, document.body.appendChild( + this.div), mxEvent.addListener(this.div, "mousedown", mxUtils.bind(this, function(a) { + this.hideTooltip() + }))) +}; +mxTooltipHandler.prototype.mouseDown = function(a, b) { + this.reset(b, !1); + this.hideTooltip() +}; +mxTooltipHandler.prototype.mouseMove = function(a, b) { + if (b.getX() != this.lastX || b.getY() != this.lastY) this.reset(b, !0), (this.isHideOnHover() || b.getState() != this.state || b.getSource() != this.node && (!this.stateSource || null != b.getState() && + this.stateSource == (b.isSource(b.getState().shape) || !b.isSource(b.getState().text)))) && this.hideTooltip(); + this.lastX = b.getX(); + this.lastY = b.getY() +}; +mxTooltipHandler.prototype.mouseUp = function(a, b) { + this.reset(b, !0); + this.hideTooltip() +}; +mxTooltipHandler.prototype.resetTimer = function() { + null != this.thread && (window.clearTimeout(this.thread), this.thread = null) +}; +mxTooltipHandler.prototype.reset = function(a, b) { + this.resetTimer(); + if (b && this.isEnabled() && null != a.getState() && (null == this.div || "hidden" == this.div.style.visibility)) { + var c = a.getState(), + d = a.getSource(), + e = a.getX(), + f = a.getY(), + g = a.isSource(c.shape) || a.isSource(c.text); + this.thread = window.setTimeout(mxUtils.bind(this, function() { + if (!this.graph.isEditing() && !this.graph.panningHandler.isMenuShowing()) { + var a = this.graph.getTooltip(c, d, e, f); + this.show(a, e, f); + this.state = c; + this.node = d; + this.stateSource = g + } + }), this.delay) + } +}; +mxTooltipHandler.prototype.hide = function() { + this.resetTimer(); + this.hideTooltip() +}; +mxTooltipHandler.prototype.hideTooltip = function() { + null != this.div && (this.div.style.visibility = "hidden") +}; +mxTooltipHandler.prototype.show = function(a, b, c) { + if (null != a && 0 < a.length) { + null == this.div && this.init(); + var d = mxUtils.getScrollOrigin(); + this.div.style.left = b + d.x + "px"; + this.div.style.top = c + mxConstants.TOOLTIP_VERTICAL_OFFSET + d.y + "px"; + mxUtils.isNode(a) ? (this.div.innerHTML = "", this.div.appendChild(a)) : this.div.innerHTML = a.replace(/\n/g, "\x3cbr\x3e"); + this.div.style.visibility = ""; + mxUtils.fit(this.div) + } +}; +mxTooltipHandler.prototype.destroy = function() { + this.graph.removeMouseListener(this); + mxEvent.release(this.div); + null != this.div && null != this.div.parentNode && this.div.parentNode.removeChild(this.div); + this.div = null +}; + +function mxCellTracker(a, b, c) { + mxCellMarker.call(this, a, b); + this.graph.addMouseListener(this); + null != c && (this.getCell = c); + mxClient.IS_IE && mxEvent.addListener(window, "unload", mxUtils.bind(this, function() { + this.destroy() + })) +} +mxUtils.extend(mxCellTracker, mxCellMarker); +mxCellTracker.prototype.mouseDown = function(a, b) {}; +mxCellTracker.prototype.mouseMove = function(a, b) { + this.isEnabled() && this.process(b) +}; +mxCellTracker.prototype.mouseUp = function(a, b) { + this.reset() +}; +mxCellTracker.prototype.destroy = function() { + this.destroyed || (this.destroyed = !0, this.graph.removeMouseListener(this), mxCellMarker.prototype.destroy.apply(this)) +}; + +function mxCellHighlight(a, b, c, d) { + null != a && (this.graph = a, this.highlightColor = null != b ? b : mxConstants.DEFAULT_VALID_COLOR, this.strokeWidth = null != c ? c : mxConstants.HIGHLIGHT_STROKEWIDTH, this.dashed = null != d ? + d : !1, this.repaintHandler = mxUtils.bind(this, function() { + this.repaint() + }), this.graph.getView().addListener(mxEvent.SCALE, this.repaintHandler), this.graph.getView().addListener(mxEvent.TRANSLATE, this.repaintHandler), this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE, + this.repaintHandler), this.graph.getModel().addListener(mxEvent.CHANGE, + this.repaintHandler), this.resetHandler = mxUtils.bind(this, function() { + this.hide() + }), this.graph.getView().addListener(mxEvent.DOWN, this.resetHandler), this.graph.getView().addListener(mxEvent.UP, this.resetHandler)) +} +mxCellHighlight.prototype.keepOnTop = !1; +mxCellHighlight.prototype.graph = !0; +mxCellHighlight.prototype.state = null; +mxCellHighlight.prototype.spacing = 2; +mxCellHighlight.prototype.resetHandler = null; +mxCellHighlight.prototype.setHighlightColor = function(a) { + this.highlightColor = a; + null != this.shape && (this.shape.stroke = a) +}; +mxCellHighlight.prototype.drawHighlight = function() { + this.shape = this.createShape(); + this.repaint(); + !this.keepOnTop && this.shape.node.parentNode.firstChild != this.shape.node && this.shape.node.parentNode.insertBefore(this.shape.node, this.shape.node.parentNode.firstChild) +}; +mxCellHighlight.prototype.createShape = function() { + var a = null, + a = this.graph.model.isEdge(this.state.cell) ? new mxPolyline(this.state.absolutePoints, this.highlightColor, this.strokeWidth) : new mxRectangleShape(new mxRectangle, null, this.highlightColor, + this.strokeWidth); + a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG; + a.init(this.graph.getView().getOverlayPane()); + mxEvent.redirectMouseEvents(a.node, this.graph, this.state); + a.svgStrokeTolerance = 0; + a.pointerEvents = !1; + a.isDashed = this.dashed; + return a +}; +mxCellHighlight.prototype.repaint = function() { + if (null != this.state && null != this.shape) { + var a = 0; + this.graph.model.isEdge(this.state.cell) ? this.shape.points = this.state.absolutePoints : (this.shape.bounds = new mxRectangle(this.state.x - this.spacing, this.state.y - this.spacing, this.state + .width + 2 * this.spacing, this.state.height + 2 * this.spacing), a = Number(this.state.style[mxConstants.STYLE_ROTATION] || "0")); + null != this.state.shape && this.shape.setCursor(this.state.shape.getCursor()); + 0 != a && (this.shape.rotation = a); + this.shape.redraw() + } +}; +mxCellHighlight.prototype.hide = function() { + this.highlight(null) +}; +mxCellHighlight.prototype.highlight = function(a) { + this.state != a && (null != this.shape && (this.shape.destroy(), this.shape = null), this.state = a, null != this.state && this.drawHighlight()) +}; +mxCellHighlight.prototype.destroy = function() { + this.graph.getView().removeListener(this.repaintHandler); + this.graph.getModel().removeListener(this.repaintHandler); + this.graph.getView().removeListener(this.resetHandler); + this.graph.getModel().removeListener(this.resetHandler); + null != this.shape && (this.shape.destroy(), this.shape = null) +}; + +function mxDefaultKeyHandler(a) { + if (null != a) { + this.editor = a; + this.handler = new mxKeyHandler(a.graph); + var b = this.handler.escape; + this.handler.escape = function(c) { + b.apply(this, arguments); + a.hideProperties(); + a.fireEvent(new mxEventObject(mxEvent.ESCAPE, "event", c)) + } + } +} +mxDefaultKeyHandler.prototype.editor = null; +mxDefaultKeyHandler.prototype.handler = null; +mxDefaultKeyHandler.prototype.bindAction = function(a, b, c) { + var d = mxUtils.bind(this, function() { + this.editor.execute(b) + }); + c ? this.handler.bindControlKey(a, d) : this.handler.bindKey(a, d) +}; +mxDefaultKeyHandler.prototype.destroy = function() { + this.handler.destroy(); + this.handler = null +}; + +function mxDefaultPopupMenu(a) { + this.config = a +} +mxDefaultPopupMenu.prototype.imageBasePath = null; +mxDefaultPopupMenu.prototype.config = null; +mxDefaultPopupMenu.prototype.createMenu = function(a, b, c, d) { + if (null != this.config) { + var e = this.createConditions(a, c, d); + this.addItems(a, b, c, d, e, this.config.firstChild, null) + } +}; +mxDefaultPopupMenu.prototype.addItems = function(a, b, c, d, e, f, g) { + for (var h = !1; null != f;) { + if ("add" == f.nodeName) { + var k = f.getAttribute("if"); + if (null == k || e[k]) { + var k = f.getAttribute("as"), + k = mxResources.get(k) || k, + l = mxUtils.eval(mxUtils.getTextContent(f)), + m = f.getAttribute("action"), + n = f.getAttribute("icon"), + p = f.getAttribute("iconCls"); + h && (b.addSeparator(g), h = !1); + null != n && this.imageBasePath && (n = this.imageBasePath + n); + k = this.addAction(b, a, k, n, l, m, c, g, p); + this.addItems(a, b, c, d, e, f.firstChild, k) + } + } else "separator" == + f.nodeName && (h = !0); + f = f.nextSibling + } +}; +mxDefaultPopupMenu.prototype.addAction = function(a, b, c, d, e, f, g, h, k) { + return a.addItem(c, d, function(a) { + "function" == typeof e && e.call(b, b, g, a); + null != f && b.execute(f, g, a) + }, h, k) +}; +mxDefaultPopupMenu.prototype.createConditions = function(a, b, c) { + var d = a.graph.getModel(), + e = d.getChildCount(b), + f = []; + f.nocell = null == b; + f.ncells = 1 < a.graph.getSelectionCount(); + f.notRoot = d.getRoot() != d.getParent(a.graph.getDefaultParent()); + f.cell = null != b; + d = null != b && 1 == a.graph.getSelectionCount(); + f.nonEmpty = d && 0 < e; + f.expandable = d && a.graph.isCellFoldable(b, !1); + f.collapsable = d && a.graph.isCellFoldable(b, !0); + f.validRoot = d && a.graph.isValidRoot(b); + f.emptyValidRoot = f.validRoot && 0 == e; + f.swimlane = d && a.graph.isSwimlane(b); + e = this.config.getElementsByTagName("condition"); + for (d = 0; d < e.length; d++) { + var g = mxUtils.eval(mxUtils.getTextContent(e[d])), + h = e[d].getAttribute("name"); + null != h && "function" == typeof g && (f[h] = g(a, b, c)) + } + return f +}; + +function mxDefaultToolbar(a, b) { + this.editor = b; + null != a && null != b && this.init(a) +} +mxDefaultToolbar.prototype.editor = null; +mxDefaultToolbar.prototype.toolbar = null; +mxDefaultToolbar.prototype.resetHandler = null; +mxDefaultToolbar.prototype.spacing = 4; +mxDefaultToolbar.prototype.connectOnDrop = !1; +mxDefaultToolbar.prototype.init = function(a) { + null != a && (this.toolbar = new mxToolbar(a), this.toolbar.addListener(mxEvent.SELECT, mxUtils.bind(this, function(a, c) { + var d = c.getProperty("function"); + this.editor.insertFunction = null != d ? mxUtils.bind(this, function() { + d.apply(this, arguments); + this.toolbar.resetMode() + }) : null + })), this.resetHandler = mxUtils.bind(this, function() { + null != this.toolbar && this.toolbar.resetMode(!0) + }), this.editor.graph.addListener(mxEvent.DOUBLE_CLICK, this.resetHandler), this.editor.addListener(mxEvent.ESCAPE, + this.resetHandler)) +}; +mxDefaultToolbar.prototype.addItem = function(a, b, c, d) { + var e = mxUtils.bind(this, function() { + null != c && 0 < c.length && this.editor.execute(c) + }); + return this.toolbar.addItem(a, b, e, d) +}; +mxDefaultToolbar.prototype.addSeparator = function(a) { + a = a || mxClient.imageBasePath + "/separator.gif"; + this.toolbar.addSeparator(a) +}; +mxDefaultToolbar.prototype.addCombo = function() { + return this.toolbar.addCombo() +}; +mxDefaultToolbar.prototype.addActionCombo = function(a) { + return this.toolbar.addActionCombo(a) +}; +mxDefaultToolbar.prototype.addActionOption = function(a, b, c) { + var d = mxUtils.bind(this, function() { + this.editor.execute(c) + }); + this.addOption(a, b, d) +}; +mxDefaultToolbar.prototype.addOption = function(a, b, c) { + return this.toolbar.addOption(a, b, c) +}; +mxDefaultToolbar.prototype.addMode = function(a, b, c, d, e) { + var f = mxUtils.bind(this, function() { + this.editor.setMode(c); + null != e && e(this.editor) + }); + return this.toolbar.addSwitchMode(a, b, f, d) +}; +mxDefaultToolbar.prototype.addPrototype = function(a, b, c, d, e, f) { + var g = function() { + return "function" == typeof c ? c() : null != c ? c.clone() : null + }, + h = mxUtils.bind(this, function(a, b) { + "function" == typeof e ? e(this.editor, g(), a, b) : this.drop(g(), a, b); + this.toolbar.resetMode(); + mxEvent.consume(a) + }); + a = this.toolbar.addMode(a, b, h, d, null, f); + this.installDropHandler(a, function(a, b, c) { + h(b, c) + }); + return a +}; +mxDefaultToolbar.prototype.drop = function(a, b, c) { + var d = this.editor.graph, + e = d.getModel(); + if (null == c || e.isEdge(c) || !this.connectOnDrop || !d.isCellConnectable(c)) { + for (; null != c && !d.isValidDropTarget(c, [a], b);) c = e.getParent(c); + this.insert(a, b, c) + } else this.connect(a, b, c) +}; +mxDefaultToolbar.prototype.insert = function(a, b, c) { + var d = this.editor.graph; + if (d.canImportCell(a)) { + var e = mxEvent.getClientX(b), + f = mxEvent.getClientY(b), + e = mxUtils.convertPoint(d.container, e, f); + return d.isSplitEnabled() && d.isSplitTarget(c, [a], b) ? d.splitEdge(c, [a], null, e.x, e.y) : this.editor.addVertex(c, a, e.x, e.y) + } + return null +}; +mxDefaultToolbar.prototype.connect = function(a, b, c) { + b = this.editor.graph; + var d = b.getModel(); + if (null != c && b.isCellConnectable(a) && b.isEdgeValid(null, c, a)) { + var e = null; + d.beginUpdate(); + try { + var f = d.getGeometry(c), + g = d.getGeometry(a).clone(); + g.x = f.x + (f.width - g.width) / 2; + g.y = f.y + (f.height - g.height) / 2; + var h = this.spacing * b.gridSize, + k = 20 * d.getDirectedEdgeCount(c, !0); + this.editor.horizontalFlow ? g.x += (g.width + f.width) / 2 + h + k : g.y += (g.height + f.height) / 2 + h + k; + a.setGeometry(g); + var l = d.getParent(c); + b.addCell(a, l); + b.constrainChild(a); + e = this.editor.createEdge(c, a); + if (null == d.getGeometry(e)) { + var m = new mxGeometry; + m.relative = !0; + d.setGeometry(e, m) + } + b.addEdge(e, l, c, a) + } finally { + d.endUpdate() + } + b.setSelectionCells([a, e]); + b.scrollCellToVisible(a) + } +}; +mxDefaultToolbar.prototype.installDropHandler = function(a, b) { + var c = document.createElement("img"); + c.setAttribute("src", a.getAttribute("src")); + var d = mxUtils.bind(this, function(e) { + c.style.width = 2 * a.offsetWidth + "px"; + c.style.height = 2 * a.offsetHeight + "px"; + mxUtils.makeDraggable(a, this.editor.graph, b, c); + mxEvent.removeListener(c, "load", d) + }); + mxClient.IS_IE ? d() : mxEvent.addListener(c, "load", d) +}; +mxDefaultToolbar.prototype.destroy = function() { + null != this.resetHandler && (this.editor.graph.removeListener("dblclick", this.resetHandler), this.editor.removeListener("escape", this.resetHandler), this.resetHandler = null); + null != this.toolbar && (this.toolbar.destroy(), this.toolbar = null) +}; + +function mxEditor(a) { + this.actions = []; + this.addActions(); + if (null != document.body) { + this.cycleAttributeValues = []; + this.popupHandler = new mxDefaultPopupMenu; + this.undoManager = new mxUndoManager; + this.graph = this.createGraph(); + this.toolbar = this.createToolbar(); + this.keyHandler = new mxDefaultKeyHandler(this); + this.configure(a); + this.graph.swimlaneIndicatorColorAttribute = this.cycleAttributeName; + !mxClient.IS_LOCAL && null != this.urlInit && (this.session = this.createSession()); + if (null != this.onInit) this.onInit(); + mxClient.IS_IE && + mxEvent.addListener(window, "unload", mxUtils.bind(this, function() { + this.destroy() + })) + } +} +mxLoadResources && mxResources.add(mxClient.basePath + "/resources/editor"); +mxEditor.prototype = new mxEventSource; +mxEditor.prototype.constructor = mxEditor; +mxEditor.prototype.askZoomResource = "none" != mxClient.language ? "askZoom" : ""; +mxEditor.prototype.lastSavedResource = "none" != mxClient.language ? "lastSaved" : ""; +mxEditor.prototype.currentFileResource = "none" != mxClient.language ? "currentFile" : ""; +mxEditor.prototype.propertiesResource = "none" != mxClient.language ? "properties" : ""; +mxEditor.prototype.tasksResource = "none" != mxClient.language ? "tasks" : ""; +mxEditor.prototype.helpResource = "none" != mxClient.language ? "help" : ""; +mxEditor.prototype.outlineResource = "none" != mxClient.language ? "outline" : ""; +mxEditor.prototype.outline = null; +mxEditor.prototype.graph = null; +mxEditor.prototype.graphRenderHint = null; +mxEditor.prototype.toolbar = null; +mxEditor.prototype.session = null; +mxEditor.prototype.status = null; +mxEditor.prototype.popupHandler = null; +mxEditor.prototype.undoManager = null; +mxEditor.prototype.keyHandler = null; +mxEditor.prototype.actions = null; +mxEditor.prototype.dblClickAction = "edit"; +mxEditor.prototype.swimlaneRequired = !1; +mxEditor.prototype.disableContextMenu = !0; +mxEditor.prototype.insertFunction = null; +mxEditor.prototype.forcedInserting = !1; +mxEditor.prototype.templates = null; +mxEditor.prototype.defaultEdge = null; +mxEditor.prototype.defaultEdgeStyle = null; +mxEditor.prototype.defaultGroup = null; +mxEditor.prototype.groupBorderSize = null; +mxEditor.prototype.filename = null; +mxEditor.prototype.linefeed = "\x26#xa;"; +mxEditor.prototype.postParameterName = "xml"; +mxEditor.prototype.escapePostData = !0; +mxEditor.prototype.urlPost = null; +mxEditor.prototype.urlImage = null; +mxEditor.prototype.urlInit = null; +mxEditor.prototype.urlNotify = null; +mxEditor.prototype.urlPoll = null; +mxEditor.prototype.horizontalFlow = !1; +mxEditor.prototype.layoutDiagram = !1; +mxEditor.prototype.swimlaneSpacing = 0; +mxEditor.prototype.maintainSwimlanes = !1; +mxEditor.prototype.layoutSwimlanes = !1; +mxEditor.prototype.cycleAttributeValues = null; +mxEditor.prototype.cycleAttributeIndex = 0; +mxEditor.prototype.cycleAttributeName = "fillColor"; +mxEditor.prototype.tasks = null; +mxEditor.prototype.tasksWindowImage = null; +mxEditor.prototype.tasksTop = 20; +mxEditor.prototype.help = null; +mxEditor.prototype.helpWindowImage = null; +mxEditor.prototype.urlHelp = null; +mxEditor.prototype.helpWidth = 300; +mxEditor.prototype.helpHeight = 260; +mxEditor.prototype.propertiesWidth = 240; +mxEditor.prototype.propertiesHeight = null; +mxEditor.prototype.movePropertiesDialog = !1; +mxEditor.prototype.validating = !1; +mxEditor.prototype.modified = !1; +mxEditor.prototype.isModified = function() { + return this.modified +}; +mxEditor.prototype.setModified = function(a) { + this.modified = a +}; +mxEditor.prototype.addActions = function() { + this.addAction("save", function(a) { + a.save() + }); + this.addAction("print", function(a) { + (new mxPrintPreview(a.graph, 1)).open() + }); + this.addAction("show", function(a) { + mxUtils.show(a.graph, null, 10, 10) + }); + this.addAction("exportImage", function(a) { + var b = a.getUrlImage(); + if (null == b || mxClient.IS_LOCAL) a.execute("show"); + else { + var c = mxUtils.getViewXml(a.graph, 1), + c = mxUtils.getXml(c, "\n"); + mxUtils.submit(b, a.postParameterName + "\x3d" + encodeURIComponent(c), document, "_blank") + } + }); + this.addAction("refresh", + function(a) { + a.graph.refresh() + }); + this.addAction("cut", function(a) { + a.graph.isEnabled() && mxClipboard.cut(a.graph) + }); + this.addAction("copy", function(a) { + a.graph.isEnabled() && mxClipboard.copy(a.graph) + }); + this.addAction("paste", function(a) { + a.graph.isEnabled() && mxClipboard.paste(a.graph) + }); + this.addAction("delete", function(a) { + a.graph.isEnabled() && a.graph.removeCells() + }); + this.addAction("group", function(a) { + a.graph.isEnabled() && a.graph.setSelectionCell(a.groupCells()) + }); + this.addAction("ungroup", function(a) { + a.graph.isEnabled() && + a.graph.setSelectionCells(a.graph.ungroupCells()) + }); + this.addAction("removeFromParent", function(a) { + a.graph.isEnabled() && a.graph.removeCellsFromParent() + }); + this.addAction("undo", function(a) { + a.graph.isEnabled() && a.undo() + }); + this.addAction("redo", function(a) { + a.graph.isEnabled() && a.redo() + }); + this.addAction("zoomIn", function(a) { + a.graph.zoomIn() + }); + this.addAction("zoomOut", function(a) { + a.graph.zoomOut() + }); + this.addAction("actualSize", function(a) { + a.graph.zoomActual() + }); + this.addAction("fit", function(a) { + a.graph.fit() + }); + this.addAction("showProperties", function(a, b) { + a.showProperties(b) + }); + this.addAction("selectAll", function(a) { + a.graph.isEnabled() && a.graph.selectAll() + }); + this.addAction("selectNone", function(a) { + a.graph.isEnabled() && a.graph.clearSelection() + }); + this.addAction("selectVertices", function(a) { + a.graph.isEnabled() && a.graph.selectVertices() + }); + this.addAction("selectEdges", function(a) { + a.graph.isEnabled() && a.graph.selectEdges() + }); + this.addAction("edit", function(a, b) { + a.graph.isEnabled() && a.graph.isCellEditable(b) && a.graph.startEditingAtCell(b) + }); + this.addAction("toBack", function(a, b) { + a.graph.isEnabled() && a.graph.orderCells(!0) + }); + this.addAction("toFront", function(a, b) { + a.graph.isEnabled() && a.graph.orderCells(!1) + }); + this.addAction("enterGroup", function(a, b) { + a.graph.enterGroup(b) + }); + this.addAction("exitGroup", function(a) { + a.graph.exitGroup() + }); + this.addAction("home", function(a) { + a.graph.home() + }); + this.addAction("selectPrevious", function(a) { + a.graph.isEnabled() && a.graph.selectPreviousCell() + }); + this.addAction("selectNext", function(a) { + a.graph.isEnabled() && + a.graph.selectNextCell() + }); + this.addAction("selectParent", function(a) { + a.graph.isEnabled() && a.graph.selectParentCell() + }); + this.addAction("selectChild", function(a) { + a.graph.isEnabled() && a.graph.selectChildCell() + }); + this.addAction("collapse", function(a) { + a.graph.isEnabled() && a.graph.foldCells(!0) + }); + this.addAction("collapseAll", function(a) { + if (a.graph.isEnabled()) { + var b = a.graph.getChildVertices(); + a.graph.foldCells(!0, !1, b) + } + }); + this.addAction("expand", function(a) { + a.graph.isEnabled() && a.graph.foldCells(!1) + }); + this.addAction("expandAll", function(a) { + if (a.graph.isEnabled()) { + var b = a.graph.getChildVertices(); + a.graph.foldCells(!1, !1, b) + } + }); + this.addAction("bold", function(a) { + a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, mxConstants.FONT_BOLD) + }); + this.addAction("italic", function(a) { + a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, mxConstants.FONT_ITALIC) + }); + this.addAction("underline", function(a) { + a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, + mxConstants.FONT_UNDERLINE) + }); + this.addAction("shadow", function(a) { + a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, mxConstants.FONT_SHADOW) + }); + this.addAction("alignCellsLeft", function(a) { + a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_LEFT) + }); + this.addAction("alignCellsCenter", function(a) { + a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_CENTER) + }); + this.addAction("alignCellsRight", function(a) { + a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_RIGHT) + }); + this.addAction("alignCellsTop", function(a) { + a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_TOP) + }); + this.addAction("alignCellsMiddle", function(a) { + a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_MIDDLE) + }); + this.addAction("alignCellsBottom", function(a) { + a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_BOTTOM) + }); + this.addAction("alignFontLeft", function(a) { + a.graph.setCellStyles(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_LEFT) + }); + this.addAction("alignFontCenter", function(a) { + a.graph.isEnabled() && + a.graph.setCellStyles(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER) + }); + this.addAction("alignFontRight", function(a) { + a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_RIGHT) + }); + this.addAction("alignFontTop", function(a) { + a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_TOP) + }); + this.addAction("alignFontMiddle", function(a) { + a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE) + }); + this.addAction("alignFontBottom", function(a) { + a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_BOTTOM) + }); + this.addAction("zoom", function(a) { + var b = 100 * a.graph.getView().scale, + b = parseFloat(mxUtils.prompt(mxResources.get(a.askZoomResource) || a.askZoomResource, b)) / 100; + isNaN(b) || a.graph.getView().setScale(b) + }); + this.addAction("toggleTasks", function(a) { + null != a.tasks ? a.tasks.setVisible(!a.tasks.isVisible()) : a.showTasks() + }); + this.addAction("toggleHelp", function(a) { + null != + a.help ? a.help.setVisible(!a.help.isVisible()) : a.showHelp() + }); + this.addAction("toggleOutline", function(a) { + null == a.outline ? a.showOutline() : a.outline.setVisible(!a.outline.isVisible()) + }); + this.addAction("toggleConsole", function(a) { + mxLog.setVisible(!mxLog.isVisible()) + }) +}; +mxEditor.prototype.createSession = function() { + var a = mxUtils.bind(this, function(a) { + this.fireEvent(new mxEventObject(mxEvent.SESSION, "session", a)) + }); + return this.connect(this.urlInit, this.urlPoll, this.urlNotify, a) +}; +mxEditor.prototype.configure = function(a) { + null != a && ((new mxCodec(a.ownerDocument)).decode(a, this), this.resetHistory()) +}; +mxEditor.prototype.resetFirstTime = function() { + document.cookie = "mxgraph\x3dseen; expires\x3dFri, 27 Jul 2001 02:47:11 UTC; path\x3d/" +}; +mxEditor.prototype.resetHistory = function() { + this.lastSnapshot = (new Date).getTime(); + this.undoManager.clear(); + this.ignoredChanges = 0; + this.setModified(!1) +}; +mxEditor.prototype.addAction = function(a, b) { + this.actions[a] = b +}; +mxEditor.prototype.execute = function(a, b, c) { + var d = this.actions[a]; + if (null != d) try { + var e = arguments; + e[0] = this; + d.apply(this, e) + } catch (f) { + throw mxUtils.error("Cannot execute " + a + ": " + f.message, 280, !0), f; + } else mxUtils.error("Cannot find action " + a, 280, !0) +}; +mxEditor.prototype.addTemplate = function(a, b) { + this.templates[a] = b +}; +mxEditor.prototype.getTemplate = function(a) { + return this.templates[a] +}; +mxEditor.prototype.createGraph = function() { + var a = new mxGraph(null, null, this.graphRenderHint); + a.setTooltips(!0); + a.setPanning(!0); + this.installDblClickHandler(a); + this.installUndoHandler(a); + this.installDrillHandler(a); + this.installChangeHandler(a); + this.installInsertHandler(a); + a.panningHandler.factoryMethod = mxUtils.bind(this, function(a, c, d) { + return this.createPopupMenu(a, c, d) + }); + a.connectionHandler.factoryMethod = mxUtils.bind(this, function(a, c) { + return this.createEdge(a, c) + }); + this.createSwimlaneManager(a); + this.createLayoutManager(a); + return a +}; +mxEditor.prototype.createSwimlaneManager = function(a) { + a = new mxSwimlaneManager(a, !1); + a.isHorizontal = mxUtils.bind(this, function() { + return this.horizontalFlow + }); + a.isEnabled = mxUtils.bind(this, function() { + return this.maintainSwimlanes + }); + return a +}; +mxEditor.prototype.createLayoutManager = function(a) { + var b = new mxLayoutManager(a), + c = this; + b.getLayout = function(b) { + var e = null, + f = c.graph.getModel(); + if (null != f.getParent(b)) + if (c.layoutSwimlanes && a.isSwimlane(b)) null == c.swimlaneLayout && (c.swimlaneLayout = c.createSwimlaneLayout()), e = c.swimlaneLayout; + else if (c.layoutDiagram && (a.isValidRoot(b) || null == f.getParent(f.getParent(b)))) null == c.diagramLayout && (c.diagramLayout = c.createDiagramLayout()), e = c.diagramLayout; + return e + }; + return b +}; +mxEditor.prototype.setGraphContainer = function(a) { + null == this.graph.container && (this.graph.init(a), this.rubberband = new mxRubberband(this.graph), this.disableContextMenu && mxEvent.disableContextMenu(a), mxClient.IS_QUIRKS && new mxDivResizer( + a)) +}; +mxEditor.prototype.installDblClickHandler = function(a) { + a.addListener(mxEvent.DOUBLE_CLICK, mxUtils.bind(this, function(b, c) { + var d = c.getProperty("cell"); + null != d && (a.isEnabled() && null != this.dblClickAction) && (this.execute(this.dblClickAction, d), c.consume()) + })) +}; +mxEditor.prototype.installUndoHandler = function(a) { + var b = mxUtils.bind(this, function(a, b) { + var e = b.getProperty("edit"); + this.undoManager.undoableEditHappened(e) + }); + a.getModel().addListener(mxEvent.UNDO, b); + a.getView().addListener(mxEvent.UNDO, b); + b = function(b, d) { + var e = d.getProperty("edit").changes; + a.setSelectionCells(a.getSelectionCellsForChanges(e)) + }; + this.undoManager.addListener(mxEvent.UNDO, b); + this.undoManager.addListener(mxEvent.REDO, b) +}; +mxEditor.prototype.installDrillHandler = function(a) { + var b = mxUtils.bind(this, function(a) { + this.fireEvent(new mxEventObject(mxEvent.ROOT)) + }); + a.getView().addListener(mxEvent.DOWN, b); + a.getView().addListener(mxEvent.UP, b) +}; +mxEditor.prototype.installChangeHandler = function(a) { + var b = mxUtils.bind(this, function(b, d) { + this.setModified(!0); + !0 == this.validating && a.validateGraph(); + for (var e = d.getProperty("edit").changes, f = 0; f < e.length; f++) { + var g = e[f]; + if (g instanceof mxRootChange || g instanceof mxValueChange && g.cell == this.graph.model.root || g instanceof mxCellAttributeChange && g.cell == this.graph.model.root) { + this.fireEvent(new mxEventObject(mxEvent.ROOT)); + break + } + } + }); + a.getModel().addListener(mxEvent.CHANGE, b) +}; +mxEditor.prototype.installInsertHandler = function(a) { + var b = this; + a.addMouseListener({ + mouseDown: function(a, d) { + if (null != b.insertFunction && !d.isPopupTrigger() && (b.forcedInserting || null == d.getState())) b.graph.clearSelection(), b.insertFunction(d.getEvent(), d.getCell()), this.isActive = ! + 0, d.consume() + }, + mouseMove: function(a, b) { + this.isActive && b.consume() + }, + mouseUp: function(a, b) { + this.isActive && (this.isActive = !1, b.consume()) + } + }) +}; +mxEditor.prototype.createDiagramLayout = function() { + var a = this.graph.gridSize, + b = new mxStackLayout(this.graph, !this.horizontalFlow, this.swimlaneSpacing, 2 * a, 2 * a); + b.isVertexIgnored = function(a) { + return !b.graph.isSwimlane(a) + }; + return b +}; +mxEditor.prototype.createSwimlaneLayout = function() { + return new mxCompactTreeLayout(this.graph, this.horizontalFlow) +}; +mxEditor.prototype.createToolbar = function() { + return new mxDefaultToolbar(null, this) +}; +mxEditor.prototype.setToolbarContainer = function(a) { + this.toolbar.init(a); + mxClient.IS_QUIRKS && new mxDivResizer(a) +}; +mxEditor.prototype.setStatusContainer = function(a) { + null == this.status && (this.status = a, this.addListener(mxEvent.SAVE, mxUtils.bind(this, function() { + var a = (new Date).toLocaleString(); + this.setStatus((mxResources.get(this.lastSavedResource) || this.lastSavedResource) + ": " + a) + })), this.addListener(mxEvent.OPEN, mxUtils.bind(this, function() { + this.setStatus((mxResources.get(this.currentFileResource) || this.currentFileResource) + ": " + this.filename) + })), mxClient.IS_QUIRKS && new mxDivResizer(a)) +}; +mxEditor.prototype.setStatus = function(a) { + null != this.status && null != a && (this.status.innerHTML = a) +}; +mxEditor.prototype.setTitleContainer = function(a) { + this.addListener(mxEvent.ROOT, mxUtils.bind(this, function(b) { + a.innerHTML = this.getTitle() + })); + mxClient.IS_QUIRKS && new mxDivResizer(a) +}; +mxEditor.prototype.treeLayout = function(a, b) { + null != a && (new mxCompactTreeLayout(this.graph, b)).execute(a) +}; +mxEditor.prototype.getTitle = function() { + for (var a = "", b = this.graph, c = b.getCurrentRoot(); null != c && null != b.getModel().getParent(b.getModel().getParent(c));) b.isValidRoot(c) && (a = " \x3e " + b.convertValueToString(c) + a), + c = b.getModel().getParent(c); + return this.getRootTitle() + a +}; +mxEditor.prototype.getRootTitle = function() { + var a = this.graph.getModel().getRoot(); + return this.graph.convertValueToString(a) +}; +mxEditor.prototype.undo = function() { + this.undoManager.undo() +}; +mxEditor.prototype.redo = function() { + this.undoManager.redo() +}; +mxEditor.prototype.groupCells = function() { + var a = null != this.groupBorderSize ? this.groupBorderSize : this.graph.gridSize; + return this.graph.groupCells(this.createGroup(), a) +}; +mxEditor.prototype.createGroup = function() { + return this.graph.getModel().cloneCell(this.defaultGroup) +}; +mxEditor.prototype.open = function(a) { + if (null != a) { + var b = mxUtils.load(a).getXml(); + this.readGraphModel(b.documentElement); + this.filename = a; + this.fireEvent(new mxEventObject(mxEvent.OPEN, "filename", a)) + } +}; +mxEditor.prototype.readGraphModel = function(a) { + (new mxCodec(a.ownerDocument)).decode(a, this.graph.getModel()); + this.resetHistory() +}; +mxEditor.prototype.save = function(a, b) { + a = a || this.getUrlPost(); + if (null != a && 0 < a.length) { + var c = this.writeGraphModel(b); + this.postDiagram(a, c); + this.setModified(!1) + } + this.fireEvent(new mxEventObject(mxEvent.SAVE, "url", a)) +}; +mxEditor.prototype.postDiagram = function(a, b) { + this.escapePostData && (b = encodeURIComponent(b)); + mxUtils.post(a, this.postParameterName + "\x3d" + b, mxUtils.bind(this, function(c) { + this.fireEvent(new mxEventObject(mxEvent.POST, "request", c, "url", a, "data", b)) + })) +}; +mxEditor.prototype.writeGraphModel = function(a) { + a = null != a ? a : this.linefeed; + var b = (new mxCodec).encode(this.graph.getModel()); + return mxUtils.getXml(b, a) +}; +mxEditor.prototype.getUrlPost = function() { + return this.urlPost +}; +mxEditor.prototype.getUrlImage = function() { + return this.urlImage +}; +mxEditor.prototype.connect = function(a, b, c, d) { + var e = null; + mxClient.IS_LOCAL || (e = new mxSession(this.graph.getModel(), a, b, c), e.addListener(mxEvent.RECEIVE, mxUtils.bind(this, function(a, b) { + null != b.getProperty("node").getAttribute("namespace") && this.resetHistory() + })), e.addListener(mxEvent.DISCONNECT, d), e.addListener(mxEvent.CONNECT, d), e.addListener(mxEvent.NOTIFY, d), e.addListener(mxEvent.GET, d), e.start()); + return e +}; +mxEditor.prototype.swapStyles = function(a, b) { + var c = this.graph.getStylesheet().styles[b]; + this.graph.getView().getStylesheet().putCellStyle(b, this.graph.getStylesheet().styles[a]); + this.graph.getStylesheet().putCellStyle(a, c); + this.graph.refresh() +}; +mxEditor.prototype.showProperties = function(a) { + a = a || this.graph.getSelectionCell(); + null == a && (a = this.graph.getCurrentRoot(), null == a && (a = this.graph.getModel().getRoot())); + if (null != a) { + this.graph.stopEditing(!0); + var b = mxUtils.getOffset(this.graph.container), + c = b.x + 10, + b = b.y; + if (null != this.properties && !this.movePropertiesDialog) c = this.properties.getX(), b = this.properties.getY(); + else { + var d = this.graph.getCellBounds(a); + null != d && (c += d.x + Math.min(200, d.width), b += d.y) + } + this.hideProperties(); + a = this.createProperties(a); + null != a && (this.properties = new mxWindow(mxResources.get(this.propertiesResource) || this.propertiesResource, a, c, b, this.propertiesWidth, this.propertiesHeight, !1), this.properties.setVisible(! + 0)) + } +}; +mxEditor.prototype.isPropertiesVisible = function() { + return null != this.properties +}; +mxEditor.prototype.createProperties = function(a) { + var b = this.graph.getModel(), + c = b.getValue(a); + if (mxUtils.isNode(c)) { + var d = new mxForm("properties"); + d.addText("ID", a.getId()).setAttribute("readonly", "true"); + var e = null, + f = null, + g = null, + h = null, + k = null; + b.isVertex(a) && (e = b.getGeometry(a), null != e && (f = d.addText("top", e.y), g = d.addText("left", e.x), h = d.addText("width", e.width), k = d.addText("height", e.height))); + for (var l = b.getStyle(a), m = d.addText("Style", l || ""), n = c.attributes, p = [], c = 0; c < n.length; c++) p[c] = d.addTextarea(n[c].nodeName, + n[c].nodeValue, "label" == n[c].nodeName ? 4 : 2); + c = mxUtils.bind(this, function() { + this.hideProperties(); + b.beginUpdate(); + try { + null != e && (e = e.clone(), e.x = parseFloat(g.value), e.y = parseFloat(f.value), e.width = parseFloat(h.value), e.height = parseFloat(k.value), b.setGeometry(a, e)); + 0 < m.value.length ? b.setStyle(a, m.value) : b.setStyle(a, null); + for (var c = 0; c < n.length; c++) { + var d = new mxCellAttributeChange(a, n[c].nodeName, p[c].value); + b.execute(d) + } + this.graph.isAutoSizeCell(a) && this.graph.updateCellSize(a) + } finally { + b.endUpdate() + } + }); + l = mxUtils.bind(this, function() { + this.hideProperties() + }); + d.addButtons(c, l); + return d.table + } + return null +}; +mxEditor.prototype.hideProperties = function() { + null != this.properties && (this.properties.destroy(), this.properties = null) +}; +mxEditor.prototype.showTasks = function() { + if (null == this.tasks) { + var a = document.createElement("div"); + a.style.padding = "4px"; + a.style.paddingLeft = "20px"; + var b = document.body.clientWidth, + b = new mxWindow(mxResources.get(this.tasksResource) || this.tasksResource, a, b - 220, this.tasksTop, 200); + b.setClosable(!0); + b.destroyOnClose = !1; + var c = mxUtils.bind(this, function(b) { + mxEvent.release(a); + a.innerHTML = ""; + this.createTasks(a) + }); + this.graph.getModel().addListener(mxEvent.CHANGE, c); + this.graph.getSelectionModel().addListener(mxEvent.CHANGE, + c); + this.graph.addListener(mxEvent.ROOT, c); + null != this.tasksWindowImage && b.setImage(this.tasksWindowImage); + this.tasks = b; + this.createTasks(a) + } + this.tasks.setVisible(!0) +}; +mxEditor.prototype.refreshTasks = function(a) { + null != this.tasks && (a = this.tasks.content, mxEvent.release(a), a.innerHTML = "", this.createTasks(a)) +}; +mxEditor.prototype.createTasks = function(a) {}; +mxEditor.prototype.showHelp = function(a) { + if (null == this.help) { + var b = document.createElement("iframe"); + b.setAttribute("src", mxResources.get("urlHelp") || this.urlHelp); + b.setAttribute("height", "100%"); + b.setAttribute("width", "100%"); + b.setAttribute("frameBorder", "0"); + b.style.backgroundColor = "white"; + a = document.body.clientWidth; + var c = document.body.clientHeight || document.documentElement.clientHeight, + d = new mxWindow(mxResources.get(this.helpResource) || this.helpResource, b, (a - this.helpWidth) / 2, (c - this.helpHeight) / + 3, this.helpWidth, this.helpHeight); + d.setMaximizable(!0); + d.setClosable(!0); + d.destroyOnClose = !1; + d.setResizable(!0); + null != this.helpWindowImage && d.setImage(this.helpWindowImage); + mxClient.IS_NS && (a = function(a) { + b.setAttribute("height", d.div.offsetHeight - 26 + "px") + }, d.addListener(mxEvent.RESIZE_END, a), d.addListener(mxEvent.MAXIMIZE, a), d.addListener(mxEvent.NORMALIZE, a), d.addListener(mxEvent.SHOW, a)); + this.help = d + } + this.help.setVisible(!0) +}; +mxEditor.prototype.showOutline = function() { + if (null == this.outline) { + var a = document.createElement("div"); + a.style.overflow = "hidden"; + a.style.width = "100%"; + a.style.height = "100%"; + a.style.background = "white"; + a.style.cursor = "move"; + var b = new mxWindow(mxResources.get(this.outlineResource) || this.outlineResource, a, 600, 480, 200, 200, !1), + c = new mxOutline(this.graph, a); + b.setClosable(!0); + b.setResizable(!0); + b.destroyOnClose = !1; + b.addListener(mxEvent.RESIZE_END, function() { + c.update() + }); + this.outline = b; + this.outline.outline = c + } + this.outline.setVisible(!0); + this.outline.outline.update(!0) +}; +mxEditor.prototype.setMode = function(a) { + "select" == a ? (this.graph.panningHandler.useLeftButtonForPanning = !1, this.graph.setConnectable(!1)) : "connect" == a ? (this.graph.panningHandler.useLeftButtonForPanning = !1, this.graph.setConnectable(! + 0)) : "pan" == a && (this.graph.panningHandler.useLeftButtonForPanning = !0, this.graph.setConnectable(!1)) +}; +mxEditor.prototype.createPopupMenu = function(a, b, c) { + this.popupHandler.createMenu(this, a, b, c) +}; +mxEditor.prototype.createEdge = function(a, b) { + var c = null; + if (null != this.defaultEdge) c = this.graph.getModel().cloneCell(this.defaultEdge); + else { + c = new mxCell(""); + c.setEdge(!0); + var d = new mxGeometry; + d.relative = !0; + c.setGeometry(d) + } + d = this.getEdgeStyle(); + null != d && c.setStyle(d); + return c +}; +mxEditor.prototype.getEdgeStyle = function() { + return this.defaultEdgeStyle +}; +mxEditor.prototype.consumeCycleAttribute = function(a) { + return null != this.cycleAttributeValues && 0 < this.cycleAttributeValues.length && this.graph.isSwimlane(a) ? this.cycleAttributeValues[this.cycleAttributeIndex++ % this.cycleAttributeValues.length] : + null +}; +mxEditor.prototype.cycleAttribute = function(a) { + if (null != this.cycleAttributeName) { + var b = this.consumeCycleAttribute(a); + null != b && a.setStyle(a.getStyle() + ";" + this.cycleAttributeName + "\x3d" + b) + } +}; +mxEditor.prototype.addVertex = function(a, b, c, d) { + for (var e = this.graph.getModel(); null != a && !this.graph.isValidDropTarget(a);) a = e.getParent(a); + a = null != a ? a : this.graph.getSwimlaneAt(c, d); + var f = this.graph.getView().scale, + g = e.getGeometry(b), + h = e.getGeometry(a); + if (this.graph.isSwimlane(b) && !this.graph.swimlaneNesting) a = null; + else { + if (null == a && this.swimlaneRequired) return null; + if (null != a && null != h) { + var k = this.graph.getView().getState(a); + if (null != k) { + if (c -= k.origin.x * f, d -= k.origin.y * f, this.graph.isConstrainedMoving) { + var h = + g.width, + l = g.height, + m = k.x + k.width; + c + h > m && (c -= c + h - m); + m = k.y + k.height; + d + l > m && (d -= d + l - m) + } + } else null != h && (c -= h.x * f, d -= h.y * f) + } + } + g = g.clone(); + g.x = this.graph.snap(c / f - this.graph.getView().translate.x - this.graph.gridSize / 2); + g.y = this.graph.snap(d / f - this.graph.getView().translate.y - this.graph.gridSize / 2); + b.setGeometry(g); + null == a && (a = this.graph.getDefaultParent()); + this.cycleAttribute(b); + this.fireEvent(new mxEventObject(mxEvent.BEFORE_ADD_VERTEX, "vertex", b, "parent", a)); + e.beginUpdate(); + try { + b = this.graph.addCell(b, + a), null != b && (this.graph.constrainChild(b), this.fireEvent(new mxEventObject(mxEvent.ADD_VERTEX, "vertex", b))) + } finally { + e.endUpdate() + } + null != b && (this.graph.setSelectionCell(b), this.graph.scrollCellToVisible(b), this.fireEvent(new mxEventObject(mxEvent.AFTER_ADD_VERTEX, "vertex", b))); + return b +}; +mxEditor.prototype.destroy = function() { + this.destroyed || (this.destroyed = !0, null != this.tasks && this.tasks.destroy(), null != this.outline && this.outline.destroy(), null != this.properties && this.properties.destroy(), null != + this.keyHandler && this.keyHandler.destroy(), null != this.rubberband && this.rubberband.destroy(), null != this.toolbar && this.toolbar.destroy(), null != this.graph && this.graph.destroy(), + this.templates = this.status = null) +}; +var mxCodecRegistry = { + codecs: [], + aliases: [], + register: function(a) { + if (null != a) { + var b = a.getName(); + mxCodecRegistry.codecs[b] = a; + var c = mxUtils.getFunctionName(a.template.constructor); + c != b && mxCodecRegistry.addAlias(c, b) + } + return a + }, + addAlias: function(a, b) { + mxCodecRegistry.aliases[a] = b + }, + getCodec: function(a) { + var b = null; + if (null != a) { + var b = mxUtils.getFunctionName(a), + c = mxCodecRegistry.aliases[b]; + null != c && (b = c); + b = mxCodecRegistry.codecs[b]; + if (null == b) try { + b = new mxObjectCodec(new a), mxCodecRegistry.register(b) + } catch (d) {} + } + return b + } +}; + +function mxCodec(a) { + this.document = a || mxUtils.createXmlDocument(); + this.objects = [] +} +mxCodec.prototype.document = null; +mxCodec.prototype.objects = null; +mxCodec.prototype.encodeDefaults = !1; +mxCodec.prototype.putObject = function(a, b) { + return this.objects[a] = b +}; +mxCodec.prototype.getObject = function(a) { + var b = null; + null != a && (b = this.objects[a], null == b && (b = this.lookup(a), null == b && (a = this.getElementById(a), null != a && (b = this.decode(a))))); + return b +}; +mxCodec.prototype.lookup = function(a) { + return null +}; +mxCodec.prototype.getElementById = function(a, b) { + return mxUtils.findNodeByAttribute(this.document.documentElement, null != b ? b : "id", a) +}; +mxCodec.prototype.getId = function(a) { + var b = null; + null != a && (b = this.reference(a), null == b && a instanceof mxCell && (b = a.getId(), null == b && (b = mxCellPath.create(a), 0 == b.length && (b = "root")))); + return b +}; +mxCodec.prototype.reference = function(a) { + return null +}; +mxCodec.prototype.encode = function(a) { + var b = null; + if (null != a && null != a.constructor) { + var c = mxCodecRegistry.getCodec(a.constructor); + null != c ? b = c.encode(this, a) : mxUtils.isNode(a) ? b = mxClient.IS_IE ? a.cloneNode(!0) : this.document.importNode(a, !0) : mxLog.warn("mxCodec.encode: No codec for " + mxUtils.getFunctionName( + a.constructor)) + } + return b +}; +mxCodec.prototype.decode = function(a, b) { + var c = null; + if (null != a && a.nodeType == mxConstants.NODETYPE_ELEMENT) { + var d = null; + try { + d = eval(a.nodeName) + } catch (e) {} + try { + var f = mxCodecRegistry.getCodec(d); + null != f ? c = f.decode(this, a, b) : (c = a.cloneNode(!0), c.removeAttribute("as")) + } catch (g) { + mxLog.debug("Cannot decode " + a.nodeName + ": " + g.message) + } + } + return c +}; +mxCodec.prototype.encodeCell = function(a, b, c) { + b.appendChild(this.encode(a)); + if (null == c || c) { + c = a.getChildCount(); + for (var d = 0; d < c; d++) this.encodeCell(a.getChildAt(d), b) + } +}; +mxCodec.prototype.isCellCodec = function(a) { + return null != a && "function" == typeof a.isCellCodec ? a.isCellCodec() : !1 +}; +mxCodec.prototype.decodeCell = function(a, b) { + b = null != b ? b : !0; + var c = null; + if (null != a && a.nodeType == mxConstants.NODETYPE_ELEMENT) { + c = mxCodecRegistry.getCodec(a.nodeName); + if (!this.isCellCodec(c)) + for (var d = a.firstChild; null != d && !this.isCellCodec(c);) c = mxCodecRegistry.getCodec(d.nodeName), d = d.nextSibling; + this.isCellCodec(c) || (c = mxCodecRegistry.getCodec(mxCell)); + c = c.decode(this, a); + b && this.insertIntoGraph(c) + } + return c +}; +mxCodec.prototype.insertIntoGraph = function(a) { + var b = a.parent, + c = a.getTerminal(!0), + d = a.getTerminal(!1); + a.setTerminal(null, !1); + a.setTerminal(null, !0); + a.parent = null; + null != b && b.insert(a); + null != c && c.insertEdge(a, !0); + null != d && d.insertEdge(a, !1) +}; +mxCodec.prototype.setAttribute = function(a, b, c) { + null != b && null != c && a.setAttribute(b, c) +}; + +function mxObjectCodec(a, b, c, d) { + this.template = a; + this.exclude = null != b ? b : []; + this.idrefs = null != c ? c : []; + this.mapping = null != d ? d : []; + this.reverse = {}; + for (var e in this.mapping) this.reverse[this.mapping[e]] = e +} +mxObjectCodec.prototype.template = null; +mxObjectCodec.prototype.exclude = null; +mxObjectCodec.prototype.idrefs = null; +mxObjectCodec.prototype.mapping = null; +mxObjectCodec.prototype.reverse = null; +mxObjectCodec.prototype.getName = function() { + return mxUtils.getFunctionName(this.template.constructor) +}; +mxObjectCodec.prototype.cloneTemplate = function() { + return new this.template.constructor +}; +mxObjectCodec.prototype.getFieldName = function(a) { + if (null != a) { + var b = this.reverse[a]; + null != b && (a = b) + } + return a +}; +mxObjectCodec.prototype.getAttributeName = function(a) { + if (null != a) { + var b = this.mapping[a]; + null != b && (a = b) + } + return a +}; +mxObjectCodec.prototype.isExcluded = function(a, b, c, d) { + return b == mxObjectIdentity.FIELD_NAME || 0 <= mxUtils.indexOf(this.exclude, b) +}; +mxObjectCodec.prototype.isReference = function(a, b, c, d) { + return 0 <= mxUtils.indexOf(this.idrefs, b) +}; +mxObjectCodec.prototype.encode = function(a, b) { + var c = a.document.createElement(this.getName()); + b = this.beforeEncode(a, b, c); + this.encodeObject(a, b, c); + return this.afterEncode(a, b, c) +}; +mxObjectCodec.prototype.encodeObject = function(a, b, c) { + a.setAttribute(c, "id", a.getId(b)); + for (var d in b) { + var e = d, + f = b[e]; + null != f && !this.isExcluded(b, e, f, !0) && (mxUtils.isNumeric(e) && (e = null), this.encodeValue(a, b, e, f, c)) + } +}; +mxObjectCodec.prototype.encodeValue = function(a, b, c, d, e) { + if (null != d) { + if (this.isReference(b, c, d, !0)) { + var f = a.getId(d); + if (null == f) { + mxLog.warn("mxObjectCodec.encode: No ID for " + this.getName() + "." + c + "\x3d" + d); + return + } + d = f + } + f = this.template[c]; + if (null == c || a.encodeDefaults || f != d) c = this.getAttributeName(c), this.writeAttribute(a, b, c, d, e) + } +}; +mxObjectCodec.prototype.writeAttribute = function(a, b, c, d, e) { + "object" != typeof d ? this.writePrimitiveAttribute(a, b, c, d, e) : this.writeComplexAttribute(a, b, c, d, e) +}; +mxObjectCodec.prototype.writePrimitiveAttribute = function(a, b, c, d, e) { + d = this.convertValueToXml(d); + null == c ? (b = a.document.createElement("add"), "function" == typeof d ? b.appendChild(a.document.createTextNode(d)) : a.setAttribute(b, "value", d), e.appendChild(b)) : "function" != typeof d && + a.setAttribute(e, c, d) +}; +mxObjectCodec.prototype.writeComplexAttribute = function(a, b, c, d, e) { + a = a.encode(d); + null != a ? (null != c && a.setAttribute("as", c), e.appendChild(a)) : mxLog.warn("mxObjectCodec.encode: No node for " + this.getName() + "." + c + ": " + d) +}; +mxObjectCodec.prototype.convertValueToXml = function(a) { + if ("undefined" == typeof a.length && (!0 == a || !1 == a)) a = !0 == a ? "1" : "0"; + return a +}; +mxObjectCodec.prototype.convertValueFromXml = function(a) { + mxUtils.isNumeric(a) && (a = parseFloat(a)); + // + // Marco (marco.murdocca@xenialab.it) + Andrea Bianco (andrea.bianco@xcally.com) + // 2016-02-24 + // + // mxUtils.isNumeric(a) && (a = ((Number(a) === a) && (a % 1 !== 0)) ? parseFloat(a) : a); + return a +}; +mxObjectCodec.prototype.beforeEncode = function(a, b, c) { + return b +}; +mxObjectCodec.prototype.afterEncode = function(a, b, c) { + return c +}; +mxObjectCodec.prototype.decode = function(a, b, c) { + var d = b.getAttribute("id"), + e = a.objects[d]; + null == e && (e = c || this.cloneTemplate(), null != d && a.putObject(d, e)); + b = this.beforeDecode(a, b, e); + this.decodeNode(a, b, e); + return this.afterDecode(a, b, e) +}; +mxObjectCodec.prototype.decodeNode = function(a, b, c) { + null != b && (this.decodeAttributes(a, b, c), this.decodeChildren(a, b, c)) +}; +mxObjectCodec.prototype.decodeAttributes = function(a, b, c) { + b = b.attributes; + if (null != b) + for (var d = 0; d < b.length; d++) this.decodeAttribute(a, b[d], c) +}; +mxObjectCodec.prototype.decodeAttribute = function(a, b, c) { + var d = b.nodeName; + if ("as" != d && "id" != d) { + b = this.convertValueFromXml(b.nodeValue); + var e = this.getFieldName(d); + if (this.isReference(c, e, b, !1)) { + a = a.getObject(b); + if (null == a) { + mxLog.warn("mxObjectCodec.decode: No object for " + this.getName() + "." + d + "\x3d" + b); + return + } + b = a + } + this.isExcluded(c, d, b, !1) || (c[d] = b) + } +}; +mxObjectCodec.prototype.decodeChildren = function(a, b, c) { + for (b = b.firstChild; null != b;) { + var d = b.nextSibling; + b.nodeType == mxConstants.NODETYPE_ELEMENT && !this.processInclude(a, b, c) && this.decodeChild(a, b, c); + b = d + } +}; +mxObjectCodec.prototype.decodeChild = function(a, b, c) { + var d = this.getFieldName(b.getAttribute("as")); + if (null == d || !this.isExcluded(c, d, b, !1)) { + var e = this.getFieldTemplate(c, d, b), + f = null; + "add" == b.nodeName ? (f = b.getAttribute("value"), null == f && (f = mxUtils.eval(mxUtils.getTextContent(b)))) : f = a.decode(b, e); + this.addObjectValue(c, d, f, e) + } +}; +mxObjectCodec.prototype.getFieldTemplate = function(a, b, c) { + a = a[b]; + a instanceof Array && 0 < a.length && (a = null); + return a +}; +mxObjectCodec.prototype.addObjectValue = function(a, b, c, d) { + null != c && c != d && (null != b && 0 < b.length ? a[b] = c : a.push(c)) +}; +mxObjectCodec.prototype.processInclude = function(a, b, c) { + if ("include" == b.nodeName) { + b = b.getAttribute("name"); + if (null != b) try { + var d = mxUtils.load(b).getDocumentElement(); + null != d && a.decode(d, c) + } catch (e) {} + return !0 + } + return !1 +}; +mxObjectCodec.prototype.beforeDecode = function(a, b, c) { + return b +}; +mxObjectCodec.prototype.afterDecode = function(a, b, c) { + return c +}; +mxCodecRegistry.register(function() { + var a = new mxObjectCodec(new mxCell, ["children", "edges", "overlays", "mxTransient"], ["parent", "source", "target"]); + a.isCellCodec = function() { + return !0 + }; + a.isExcluded = function(a, c, d, e) { + return mxObjectCodec.prototype.isExcluded.apply(this, arguments) || e && "value" == c && d.nodeType == mxConstants.NODETYPE_ELEMENT + }; + a.afterEncode = function(a, c, d) { + if (null != c.value && c.value.nodeType == mxConstants.NODETYPE_ELEMENT) { + var e = d; + d = mxClient.IS_IE ? c.value.cloneNode(!0) : a.document.importNode(c.value, !0); + d.appendChild(e); + a = e.getAttribute("id"); + d.setAttribute("id", a); + e.removeAttribute("id") + } + return d + }; + a.beforeDecode = function(a, c, d) { + var e = c, + f = this.getName(); + c.nodeName != f ? (e = c.getElementsByTagName(f)[0], null != e && e.parentNode == c ? (mxUtils.removeWhitespace(e, !0), mxUtils.removeWhitespace(e, !1), e.parentNode.removeChild(e)) : e = + null, d.value = c.cloneNode(!0), c = d.value.getAttribute("id"), null != c && (d.setId(c), d.value.removeAttribute("id"))) : d.setId(c.getAttribute("id")); + if (null != e) + for (c = 0; c < this.idrefs.length; c++) { + var f = + this.idrefs[c], + g = e.getAttribute(f); + if (null != g) { + e.removeAttribute(f); + var h = a.objects[g] || a.lookup(g); + null == h && (g = a.getElementById(g), null != g && (h = (mxCodecRegistry.codecs[g.nodeName] || this).decode(a, g))); + d[f] = h + } + } + return e + }; + return a +}()); +mxCodecRegistry.register(function() { + var a = new mxObjectCodec(new mxGraphModel); + a.encodeObject = function(a, c, d) { + var e = a.document.createElement("root"); + a.encodeCell(c.getRoot(), e); + d.appendChild(e) + }; + a.decodeChild = function(a, c, d) { + "root" == c.nodeName ? this.decodeRoot(a, c, d) : mxObjectCodec.prototype.decodeChild.apply(this, arguments) + }; + a.decodeRoot = function(a, c, d) { + var e = null; + for (c = c.firstChild; null != c;) { + var f = a.decodeCell(c); + null != f && null == f.getParent() && (e = f); + c = c.nextSibling + } + null != e && d.setRoot(e) + }; + return a +}()); +mxCodecRegistry.register(function() { + var a = new mxObjectCodec(new mxRootChange, ["model", "previous", "root"]); + a.afterEncode = function(a, c, d) { + a.encodeCell(c.root, d); + return d + }; + a.beforeDecode = function(a, c, d) { + if (null != c.firstChild && c.firstChild.nodeType == mxConstants.NODETYPE_ELEMENT) { + c = c.cloneNode(!0); + var e = c.firstChild; + d.root = a.decodeCell(e, !1); + d = e.nextSibling; + e.parentNode.removeChild(e); + for (e = d; null != e;) d = e.nextSibling, a.decodeCell(e), e.parentNode.removeChild(e), e = d + } + return c + }; + a.afterDecode = function(a, c, + d) { + d.previous = d.root; + return d + }; + return a +}()); +mxCodecRegistry.register(function() { + var a = new mxObjectCodec(new mxChildChange, ["model", "child", "previousIndex"], ["parent", "previous"]); + a.isReference = function(a, c, d, e) { + return "child" == c && (null != a.previous || !e) ? !0 : 0 <= mxUtils.indexOf(this.idrefs, c) + }; + a.afterEncode = function(a, c, d) { + this.isReference(c, "child", c.child, !0) ? d.setAttribute("child", a.getId(c.child)) : a.encodeCell(c.child, d); + return d + }; + a.beforeDecode = function(a, c, d) { + if (null != c.firstChild && c.firstChild.nodeType == mxConstants.NODETYPE_ELEMENT) { + c = c.cloneNode(!0); + var e = c.firstChild; + d.child = a.decodeCell(e, !1); + d = e.nextSibling; + e.parentNode.removeChild(e); + for (e = d; null != e;) { + d = e.nextSibling; + if (e.nodeType == mxConstants.NODETYPE_ELEMENT) { + var f = e.getAttribute("id"); + null == a.lookup(f) && a.decodeCell(e) + } + e.parentNode.removeChild(e); + e = d + } + } else e = c.getAttribute("child"), d.child = a.getObject(e); + return c + }; + a.afterDecode = function(a, c, d) { + d.child.parent = d.previous; + d.previous = d.parent; + d.previousIndex = d.index; + return d + }; + return a +}()); +mxCodecRegistry.register(function() { + var a = new mxObjectCodec(new mxTerminalChange, ["model", "previous"], ["cell", "terminal"]); + a.afterDecode = function(a, c, d) { + d.previous = d.terminal; + return d + }; + return a +}()); +var mxGenericChangeCodec = function(a, b) { + var c = new mxObjectCodec(a, ["model", "previous"], ["cell"]); + c.afterDecode = function(a, c, f) { + mxUtils.isNode(f.cell) && (f.cell = a.decodeCell(f.cell, !1)); + f.previous = f[b]; + return f + }; + return c +}; +mxCodecRegistry.register(mxGenericChangeCodec(new mxValueChange, "value")); +mxCodecRegistry.register(mxGenericChangeCodec(new mxStyleChange, "style")); +mxCodecRegistry.register(mxGenericChangeCodec(new mxGeometryChange, "geometry")); +mxCodecRegistry.register(mxGenericChangeCodec(new mxCollapseChange, "collapsed")); +mxCodecRegistry.register(mxGenericChangeCodec(new mxVisibleChange, "visible")); +mxCodecRegistry.register(mxGenericChangeCodec(new mxCellAttributeChange, "value")); +mxCodecRegistry.register(function() { + return new mxObjectCodec(new mxGraph, "graphListeners eventListeners view container cellRenderer editor selection".split(" ")) +}()); +mxCodecRegistry.register(function() { + var a = new mxObjectCodec(new mxGraphView); + a.encode = function(a, c) { + return this.encodeCell(a, c, c.graph.getModel().getRoot()) + }; + a.encodeCell = function(a, c, d) { + var e = c.graph.getModel(), + f = c.getState(d), + g = e.getParent(d); + if (null == g || null != f) { + var h = e.getChildCount(d), + k = c.graph.getCellGeometry(d), + l = null; + g == e.getRoot() ? l = "layer" : null == g ? l = "graph" : e.isEdge(d) ? l = "edge" : 0 < h && null != k ? l = "group" : e.isVertex(d) && (l = "vertex"); + if (null != l) { + var m = a.document.createElement(l); + null != c.graph.getLabel(d) && + (m.setAttribute("label", c.graph.getLabel(d)), c.graph.isHtmlLabel(d) && m.setAttribute("html", !0)); + if (null == g) { + var n = c.getGraphBounds(); + null != n && (m.setAttribute("x", Math.round(n.x)), m.setAttribute("y", Math.round(n.y)), m.setAttribute("width", Math.round(n.width)), m.setAttribute("height", Math.round(n.height))); + m.setAttribute("scale", c.scale) + } else if (null != f && null != k) { + for (n in f.style) g = f.style[n], "function" == typeof g && "object" == typeof g && (g = mxStyleRegistry.getName(g)), null != g && ("function" != typeof g && "object" != + typeof g) && m.setAttribute(n, g); + g = f.absolutePoints; + if (null != g && 0 < g.length) { + k = Math.round(g[0].x) + "," + Math.round(g[0].y); + for (n = 1; n < g.length; n++) k += " " + Math.round(g[n].x) + "," + Math.round(g[n].y); + m.setAttribute("points", k) + } else m.setAttribute("x", Math.round(f.x)), m.setAttribute("y", Math.round(f.y)), m.setAttribute("width", Math.round(f.width)), m.setAttribute("height", Math.round(f.height)); + n = f.absoluteOffset; + null != n && (0 != n.x && m.setAttribute("dx", Math.round(n.x)), 0 != n.y && m.setAttribute("dy", Math.round(n.y))) + } + for (n = + 0; n < h; n++) f = this.encodeCell(a, c, e.getChildAt(d, n)), null != f && m.appendChild(f) + } + } + return m + }; + return a +}()); +mxCodecRegistry.register(function() { + var a = new mxObjectCodec(new mxStylesheet); + a.encode = function(a, c) { + var d = a.document.createElement(this.getName()), + e; + for (e in c.styles) { + var f = c.styles[e], + g = a.document.createElement("add"); + if (null != e) { + g.setAttribute("as", e); + for (var h in f) { + var k = this.getStringValue(h, f[h]); + if (null != k) { + var l = a.document.createElement("add"); + l.setAttribute("value", k); + l.setAttribute("as", h); + g.appendChild(l) + } + } + 0 < g.childNodes.length && d.appendChild(g) + } + } + return d + }; + a.getStringValue = function(a, + c) { + var d = typeof c; + "function" == d ? c = mxStyleRegistry.getName(style[j]) : "object" == d && (c = null); + return c + }; + a.decode = function(a, c, d) { + d = d || new this.template.constructor; + var e = c.getAttribute("id"); + null != e && (a.objects[e] = d); + for (c = c.firstChild; null != c;) { + if (!this.processInclude(a, c, d) && "add" == c.nodeName && (e = c.getAttribute("as"), null != e)) { + var f = c.getAttribute("extend"), + g = null != f ? mxUtils.clone(d.styles[f]) : null; + null == g && (null != f && mxLog.warn("mxStylesheetCodec.decode: stylesheet " + f + " not found to extend"), g = {}); + for (f = c.firstChild; null != f;) { + if (f.nodeType == mxConstants.NODETYPE_ELEMENT) { + var h = f.getAttribute("as"); + if ("add" == f.nodeName) { + var k = mxUtils.getTextContent(f), + l = null; + null != k && 0 < k.length ? l = mxUtils.eval(k) : (l = f.getAttribute("value"), mxUtils.isNumeric(l) && (l = parseFloat(l))); + null != l && (g[h] = l) + } else "remove" == f.nodeName && delete g[h] + } + f = f.nextSibling + } + d.putCellStyle(e, g) + } + c = c.nextSibling + } + return d + }; + return a +}()); +mxCodecRegistry.register(function() { + var a = new mxObjectCodec(new mxDefaultKeyHandler); + a.encode = function(a, c) { + return null + }; + a.decode = function(a, c, d) { + if (null != d) + for (c = c.firstChild; null != c;) { + if (!this.processInclude(a, c, d) && "add" == c.nodeName) { + var e = c.getAttribute("as"), + f = c.getAttribute("action"), + g = c.getAttribute("control"); + d.bindAction(e, f, g) + } + c = c.nextSibling + } + return d + }; + return a +}()); +mxCodecRegistry.register(function() { + var a = new mxObjectCodec(new mxDefaultToolbar); + a.encode = function(a, c) { + return null + }; + a.decode = function(a, c, d) { + if (null != d) { + var e = d.editor; + for (c = c.firstChild; null != c;) { + if (c.nodeType == mxConstants.NODETYPE_ELEMENT && !this.processInclude(a, c, d)) + if ("separator" == c.nodeName) d.addSeparator(); + else if ("br" == c.nodeName) d.toolbar.addBreak(); + else if ("hr" == c.nodeName) d.toolbar.addLine(); + else if ("add" == c.nodeName) { + var f = c.getAttribute("as"), + f = mxResources.get(f) || f, + g = c.getAttribute("icon"), + h = c.getAttribute("pressedIcon"), + k = c.getAttribute("action"), + l = c.getAttribute("mode"), + m = c.getAttribute("template"), + n = "0" != c.getAttribute("toggle"), + p = mxUtils.getTextContent(c), + q = null; + if (null != k) q = d.addItem(f, g, k, h); + else if (null != l) var s = mxUtils.eval(p), + q = d.addMode(f, g, l, h, s); + else if (null != m || null != p && 0 < p.length) q = e.templates[m], m = c.getAttribute("style"), null != q && null != m && (q = q.clone(), q.setStyle(m)), m = null, null != p && 0 < + p.length && (m = mxUtils.eval(p)), q = d.addPrototype(f, g, q, h, m, n); + else if (h = mxUtils.getChildNodes(c), + 0 < h.length) + if (null == g) { + m = d.addActionCombo(f); + for (f = 0; f < h.length; f++) n = h[f], "separator" == n.nodeName ? d.addOption(m, "---") : "add" == n.nodeName && (g = n.getAttribute("as"), n = n.getAttribute("action"), d.addActionOption( + m, g, n)) + } else { + var r = null, + t = d.addPrototype(f, g, function() { + var a = e.templates[r.value]; + if (null != a) { + var a = a.clone(), + b = r.options[r.selectedIndex].cellStyle; + null != b && a.setStyle(b); + return a + } + mxLog.warn("Template " + a + " not found"); + return null + }, null, null, n), + r = d.addCombo(); + mxEvent.addListener(r, "change", + function() { + d.toolbar.selectMode(t, function(a) { + a = mxUtils.convertPoint(e.graph.container, mxEvent.getClientX(a), mxEvent.getClientY(a)); + return e.addVertex(null, s(), a.x, a.y) + }); + d.toolbar.noReset = !1 + }); + for (f = 0; f < h.length; f++) n = h[f], "separator" == n.nodeName ? d.addOption(r, "---") : "add" == n.nodeName && (g = n.getAttribute("as"), p = n.getAttribute("template"), d.addOption( + r, g, p || m).cellStyle = n.getAttribute("style")) + } + null != q && (m = c.getAttribute("id"), null != m && 0 < m.length && q.setAttribute("id", m)) + } + c = c.nextSibling + } + } + return d + }; + return a +}()); +mxCodecRegistry.register(function() { + var a = new mxObjectCodec(new mxDefaultPopupMenu); + a.encode = function(a, c) { + return null + }; + a.decode = function(a, c, d) { + var e = c.getElementsByTagName("include")[0]; + null != e ? this.processInclude(a, e, d) : null != d && (d.config = c); + return d + }; + return a +}()); +mxCodecRegistry.register(function() { + var a = new mxObjectCodec(new mxEditor, "modified lastSnapshot ignoredChanges undoManager graphContainer toolbarContainer".split(" ")); + a.afterDecode = function(a, c, d) { + a = c.getAttribute("defaultEdge"); + null != a && (c.removeAttribute("defaultEdge"), d.defaultEdge = d.templates[a]); + a = c.getAttribute("defaultGroup"); + null != a && (c.removeAttribute("defaultGroup"), d.defaultGroup = d.templates[a]); + return d + }; + a.decodeChild = function(a, c, d) { + if ("Array" == c.nodeName) { + if ("templates" == c.getAttribute("as")) { + this.decodeTemplates(a, + c, d); + return + } + } else if ("ui" == c.nodeName) { + this.decodeUi(a, c, d); + return + } + mxObjectCodec.prototype.decodeChild.apply(this, arguments) + }; + a.decodeUi = function(a, c, d) { + for (a = c.firstChild; null != a;) { + if ("add" == a.nodeName) { + c = a.getAttribute("as"); + var e = a.getAttribute("element"), + f = a.getAttribute("style"), + g = null; + if (null != e) g = document.getElementById(e), null != g && null != f && (g.style.cssText += ";" + f); + else { + var e = parseInt(a.getAttribute("x")), + h = parseInt(a.getAttribute("y")), + k = a.getAttribute("width"), + l = a.getAttribute("height"), + g = document.createElement("div"); + g.style.cssText = f; + (new mxWindow(mxResources.get(c) || c, g, e, h, k, l, !1, !0)).setVisible(!0) + } + "graph" == c ? d.setGraphContainer(g) : "toolbar" == c ? d.setToolbarContainer(g) : "title" == c ? d.setTitleContainer(g) : "status" == c ? d.setStatusContainer(g) : "map" == c && d.setMapContainer( + g) + } else "resource" == a.nodeName ? mxResources.add(a.getAttribute("basename")) : "stylesheet" == a.nodeName && mxClient.link("stylesheet", a.getAttribute("name")); + a = a.nextSibling + } + }; + a.decodeTemplates = function(a, c, d) { + null == d.templates && + (d.templates = []); + c = mxUtils.getChildNodes(c); + for (var e = 0; e < c.length; e++) { + for (var f = c[e].getAttribute("as"), g = c[e].firstChild; null != g && 1 != g.nodeType;) g = g.nextSibling; + null != g && (d.templates[f] = a.decodeCell(g)) + } + }; + return a +}()); diff --git a/public/assets/plugins/square/js/Actions.js b/public/assets/plugins/square/js/Actions.js index e0c521f..891e88f 100644 --- a/public/assets/plugins/square/js/Actions.js +++ b/public/assets/plugins/square/js/Actions.js @@ -1 +1,638 @@ -var _0x6814=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x64\x69\x74\x6F\x72\x55\x69","\x61\x63\x74\x69\x6F\x6E\x73","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x65\x64\x69\x74\x6F\x72","\x67\x72\x61\x70\x68","\x6E\x65\x77","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x68\x6F\x77\x44\x69\x61\x6C\x6F\x67","\x61\x64\x64\x41\x63\x74\x69\x6F\x6E","\x6F\x70\x65\x6E","\x73\x61\x76\x65","\x73\x61\x76\x65\x46\x69\x6C\x65","\x43\x74\x72\x6C\x2B\x53","\x73\x61\x76\x65\x41\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2D\x53","\x70\x75\x62\x6C\x69\x73\x68","\x70\x75\x62\x6C\x69\x73\x68\x46\x69\x6C\x65","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x50","\x76\x61\x72\x69\x61\x62\x6C\x65","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x69\x6D\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x43\x74\x72\x6C\x2B\x45","\x65\x64\x69\x74\x46\x69\x6C\x65","\x65\x64\x69\x74","\x67\x65\x74","\x62\x69\x6E\x64","\x70\x75\x74","\x70\x72\x69\x6E\x74","\x70\x72\x69\x6E\x74\x53\x63\x72\x65\x65\x6E","\x73\x70\x72\x69\x74\x65\x2D\x70\x72\x69\x6E\x74","\x43\x74\x72\x6C\x2B\x50","\x70\x72\x65\x76\x69\x65\x77","\x73\x68\x6F\x77","\x75\x6E\x64\x6F","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x73\x70\x72\x69\x74\x65\x2D\x75\x6E\x64\x6F","\x43\x74\x72\x6C\x2B\x5A","\x72\x65\x64\x6F","\x73\x70\x72\x69\x74\x65\x2D\x72\x65\x64\x6F","\x43\x74\x72\x6C\x2B\x59","\x63\x75\x74","\x73\x70\x72\x69\x74\x65\x2D\x63\x75\x74","\x43\x74\x72\x6C\x2B\x58","\x63\x6F\x70\x79","\x73\x70\x72\x69\x74\x65\x2D\x63\x6F\x70\x79","\x43\x74\x72\x6C\x2B\x43","\x70\x61\x73\x74\x65","\x73\x70\x72\x69\x74\x65\x2D\x70\x61\x73\x74\x65","\x43\x74\x72\x6C\x2B\x56","\x64\x65\x6C\x65\x74\x65","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x44\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x67\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x44","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x56","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x45","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x43\x74\x72\x6C\x2B\x41","\x68\x6F\x6D\x65","\x48\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x50\x61\x67\x65\x20\x55\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x50\x61\x67\x65\x20\x44\x6F\x77\x6E","\x65\x78\x70\x61\x6E\x64","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x45\x6E\x74\x65\x72","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x42\x61\x63\x6B\x73\x70\x61\x63\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x6F\x72\x64\x65\x72\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x46","\x74\x6F\x42\x61\x63\x6B","\x43\x74\x72\x6C\x2B\x42","\x67\x72\x6F\x75\x70","\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x43\x74\x72\x6C\x2B\x47","\x75\x6E\x67\x72\x6F\x75\x70","\x75\x6E\x67\x72\x6F\x75\x70\x43\x65\x6C\x6C\x73","\x43\x74\x72\x6C\x2B\x55","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x65\x64\x69\x74\x4C\x69\x6E\x6B","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","","\x65\x6E\x74\x65\x72\x56\x61\x6C\x75\x65","\x70\x72\x6F\x6D\x70\x74","\x73\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x6C\x65\x6E\x67\x74\x68","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x75\x70\x64\x61\x74\x65\x47\x72\x6F\x75\x70\x42\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x43\x65\x6C\x6C\x53\x69\x7A\x65","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x77\x6F\x72\x64\x57\x72\x61\x70","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x77\x72\x61\x70","\x53\x54\x59\x4C\x45\x5F\x57\x48\x49\x54\x45\x5F\x53\x50\x41\x43\x45","\x73\x74\x79\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x30","\x53\x54\x59\x4C\x45\x5F\x52\x4F\x54\x41\x54\x49\x4F\x4E","\x20\x28","\x20\x30\x2D\x33\x36\x30\x29","\x74\x69\x6C\x74","\x69\x73\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x63\x6C\x6F\x6E\x65","\x78","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x79","\x73\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x76\x69\x65\x77","\x53\x54\x59\x4C\x45\x5F\x44\x49\x52\x45\x43\x54\x49\x4F\x4E","\x65\x61\x73\x74","\x73\x6F\x75\x74\x68","\x77\x65\x73\x74","\x6E\x6F\x72\x74\x68","\x43\x74\x72\x6C\x2B\x52","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x54\x6F","\x7A\x6F\x6F\x6D\x49\x6E","\x41\x64\x64","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x53\x75\x62\x74\x72\x61\x63\x74","\x66\x69\x74\x57\x69\x6E\x64\x6F\x77","\x66\x69\x74","\x66\x69\x74\x50\x61\x67\x65","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x66\x75\x6E\x63\x74","\x70\x61\x67\x65\x56\x69\x65\x77","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x6D\x69\x6E","\x66\x6C\x6F\x6F\x72","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x6D\x61\x78","\x72\x6F\x75\x6E\x64","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x66\x69\x74\x50\x61\x67\x65\x57\x69\x64\x74\x68","\x63\x75\x73\x74\x6F\x6D\x5A\x6F\x6F\x6D","\x63\x75\x73\x74\x6F\x6D","\x20\x28\x25\x29","\x67\x65\x74\x53\x63\x61\x6C\x65","\x67\x72\x69\x64","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x75\x70\x64\x61\x74\x65\x47\x72\x61\x70\x68\x43\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x43\x74\x72\x6C\x2B\x53\x68\x69\x66\x74\x2B\x47","\x73\x65\x74\x54\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x65\x64\x43\x61\x6C\x6C\x62\x61\x63\x6B","\x67\x75\x69\x64\x65\x73","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x74\x6F\x6F\x6C\x74\x69\x70\x73","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x72\x65\x76\x61\x6C\x69\x64\x61\x74\x65","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x73\x63\x61\x6C\x65","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x61\x75\x74\x6F","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x76\x61\x6C\x69\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x6F\x75\x74\x6C\x69\x6E\x65","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x43\x74\x72\x6C\x2B\x51","\x63\x6F\x70\x79\x43\x6F\x6E\x6E\x65\x63\x74","\x69\x73\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x68\x65\x6C\x70","\x6C\x61\x6E\x67\x75\x61\x67\x65","\x69\x73\x4C\x61\x6E\x67\x75\x61\x67\x65\x53\x75\x70\x70\x6F\x72\x74\x65\x64","\x5F","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x69\x6B\x69\x2E\x78\x63\x61\x6C\x6C\x79\x6D\x6F\x74\x69\x6F\x6E\x2E\x63\x6F\x6D\x2F\x64\x69\x73\x70\x6C\x61\x79\x2F\x58\x4D\x44\x2F\x43\x61\x6C\x6C\x79\x2B\x53\x71\x75\x61\x72\x65","\x61\x62\x6F\x75\x74","\x20\x43\x61\x6C\x6C\x79\x20\x53\x71\x75\x61\x72\x65","\x46\x31","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x46\x6C\x61\x67\x73","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x73\x68\x61\x64\x6F\x77","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x64\x61\x73\x68\x65\x64","\x72\x6F\x75\x6E\x64\x65\x64","\x63\x75\x72\x76\x65\x64","\x29","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x73\x74\x61\x74\x65","\x74\x72\x69\x67\x67\x65\x72\x58","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x74\x72\x69\x67\x67\x65\x72\x59","\x61\x64\x64\x50\x6F\x69\x6E\x74\x41\x74","\x72\x65\x6D\x6F\x76\x65\x57\x61\x79\x70\x6F\x69\x6E\x74","\x68\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x64\x65\x78","\x72\x65\x6D\x6F\x76\x65\x50\x6F\x69\x6E\x74","\x69\x6D\x61\x67\x65","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x69\x6E\x73\x65\x72\x74\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x67\x65\x74\x47\x65\x6F\x6D\x65\x74\x72\x79","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x53\x54\x59\x4C\x45\x5F\x49\x4D\x41\x47\x45","\x75\x72\x6C","\x6F\x6E\x6C\x6F\x61\x64","\x6F\x6E\x65\x72\x72\x6F\x72","\x66\x69\x6C\x65\x4E\x6F\x74\x46\x6F\x75\x6E\x64","\x61\x6C\x65\x72\x74","\x73\x72\x63","\x63\x61\x6C\x6C","\x6C\x61\x62\x65\x6C","\x65\x6E\x61\x62\x6C\x65\x64","\x69\x63\x6F\x6E\x43\x6C\x73","\x73\x68\x6F\x72\x74\x63\x75\x74","\x65\x78\x74\x65\x6E\x64","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x74\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x65\x64\x43\x61\x6C\x6C\x62\x61\x63\x6B","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64"];_0x6814[0];function Actions(_0x9af7x2){this[_0x6814[1]]= _0x9af7x2;this[_0x6814[2]]= new Object();this[_0x6814[3]]()}Actions[_0x6814[4]][_0x6814[3]]= function(){var _0x9af7x3=this[_0x6814[1]];var _0x9af7x4=_0x9af7x3[_0x6814[5]];var _0x9af7x5=_0x9af7x4[_0x6814[6]];this[_0x6814[10]](_0x6814[7],function(){_0x9af7x3[_0x6814[9]]( new NewDialog(_0x9af7x3)[_0x6814[8]],300,180,true,true)});this[_0x6814[10]](_0x6814[11],function(){_0x9af7x3[_0x6814[9]]( new OpenDialog(_0x9af7x3)[_0x6814[8]],300,180,true,true)});this[_0x6814[10]](_0x6814[12],function(){_0x9af7x3[_0x6814[13]](false)},null,null,_0x6814[14]);this[_0x6814[10]](_0x6814[15],function(){_0x9af7x3[_0x6814[13]](true)},null,null,_0x6814[16]);this[_0x6814[10]](_0x6814[17],function(){_0x9af7x3[_0x6814[18]](false)},null,null,_0x6814[19]);this[_0x6814[10]](_0x6814[20],function(){_0x9af7x3[_0x6814[9]]( new VariableDialog(_0x9af7x3)[_0x6814[8]],300,180,true,true)});this[_0x6814[10]](_0x6814[21],function(){_0x9af7x3[_0x6814[9]]( new DescriptionDialog(_0x9af7x3)[_0x6814[8]],300,180,true,true)});this[_0x6814[10]](_0x6814[22],function(){_0x9af7x3[_0x6814[9]]( new ImportDialog(_0x9af7x3)[_0x6814[8]],300,200,true,true)});this[_0x6814[10]](_0x6814[23],function(){_0x9af7x3[_0x6814[9]]( new ExportDialog(_0x9af7x3)[_0x6814[8]],300,200,true,true)},null,null,_0x6814[24]);this[_0x6814[29]](_0x6814[25], new Action(mxResources[_0x6814[27]](_0x6814[26]),mxUtils[_0x6814[28]](this,function(){this[_0x6814[1]][_0x6814[9]]( new EditFileDialog(_0x9af7x3)[_0x6814[8]],620,420,true,true)})));this[_0x6814[10]](_0x6814[30],function(){mxUtils[_0x6814[31]](_0x9af7x5)},null,_0x6814[32],_0x6814[33]);this[_0x6814[10]](_0x6814[34],function(){mxUtils[_0x6814[35]](_0x9af7x5,null,10,10)});this[_0x6814[10]](_0x6814[36],function(){_0x9af7x4[_0x6814[37]][_0x6814[36]]()},null,_0x6814[38],_0x6814[39]);this[_0x6814[10]](_0x6814[40],function(){_0x9af7x4[_0x6814[37]][_0x6814[40]]()},null,_0x6814[41],_0x6814[42]);this[_0x6814[10]](_0x6814[43],function(){mxClipboard[_0x6814[43]](_0x9af7x5)},null,_0x6814[44],_0x6814[45]);this[_0x6814[10]](_0x6814[46],function(){mxClipboard[_0x6814[46]](_0x9af7x5)},null,_0x6814[47],_0x6814[48]);this[_0x6814[10]](_0x6814[49],function(){mxClipboard[_0x6814[49]](_0x9af7x5)},false,_0x6814[50],_0x6814[51]);this[_0x6814[10]](_0x6814[52],function(){_0x9af7x5[_0x6814[53]]()},null,null,_0x6814[54]);this[_0x6814[10]](_0x6814[55],function(){var _0x9af7x6=_0x9af7x5[_0x6814[56]];_0x9af7x5[_0x6814[59]](_0x9af7x5[_0x6814[58]](_0x9af7x5[_0x6814[57]](),_0x9af7x6,_0x9af7x6,true))},null,null,_0x6814[60]);this[_0x6814[10]](_0x6814[61],function(){_0x9af7x5[_0x6814[61]]()},null,null,_0x6814[62]);this[_0x6814[10]](_0x6814[63],function(){_0x9af7x5[_0x6814[63]]()},null,null,_0x6814[64]);this[_0x6814[10]](_0x6814[65],function(){_0x9af7x5[_0x6814[65]]()},null,null,_0x6814[66]);this[_0x6814[10]](_0x6814[67],function(){_0x9af7x5[_0x6814[67]]()},null,null,_0x6814[68]);this[_0x6814[10]](_0x6814[69],function(){_0x9af7x5[_0x6814[69]]()},null,null,_0x6814[70]);this[_0x6814[10]](_0x6814[71],function(){_0x9af7x5[_0x6814[71]]()},null,null,_0x6814[72]);this[_0x6814[10]](_0x6814[73],function(){_0x9af7x5[_0x6814[74]](false)},null,null,_0x6814[75]);this[_0x6814[10]](_0x6814[76],function(){_0x9af7x5[_0x6814[74]](true)},null,null,_0x6814[77]);this[_0x6814[10]](_0x6814[78],function(){_0x9af7x5[_0x6814[79]](false)},null,null,_0x6814[80]);this[_0x6814[10]](_0x6814[81],function(){_0x9af7x5[_0x6814[79]](true)},null,null,_0x6814[82]);this[_0x6814[10]](_0x6814[83],function(){_0x9af7x5[_0x6814[85]](_0x9af7x5[_0x6814[84]](null,0))},null,null,_0x6814[86]);this[_0x6814[10]](_0x6814[87],function(){_0x9af7x5[_0x6814[59]](_0x9af7x5[_0x6814[88]]())},null,null,_0x6814[89]);this[_0x6814[10]](_0x6814[90],function(){_0x9af7x5[_0x6814[91]]()});this[_0x6814[10]](_0x6814[92],function(){var _0x9af7x7=_0x9af7x5[_0x6814[93]]();var _0x9af7x8=_0x9af7x5[_0x6814[94]](_0x9af7x7);if(_0x9af7x8== null){_0x9af7x8= _0x6814[95]};_0x9af7x8= mxUtils[_0x6814[97]](mxResources[_0x6814[27]](_0x6814[96]),_0x9af7x8);if(_0x9af7x8!= null){_0x9af7x5[_0x6814[98]](_0x9af7x7,_0x9af7x8)}});this[_0x6814[10]](_0x6814[99],function(){var _0x9af7x7=_0x9af7x5[_0x6814[93]]();var _0x9af7x8=_0x9af7x5[_0x6814[94]](_0x9af7x7);if(_0x9af7x8!= null){window[_0x6814[11]](_0x9af7x8)}});this[_0x6814[10]](_0x6814[100],function(){var _0x9af7x9=_0x9af7x5[_0x6814[57]]();if(_0x9af7x9!= null){_0x9af7x5[_0x6814[102]]()[_0x6814[101]]();try{for(var _0x9af7xa=0;_0x9af7xa< _0x9af7x9[_0x6814[103]];_0x9af7xa++){var _0x9af7x7=_0x9af7x9[_0x9af7xa];if(_0x9af7x5[_0x6814[102]]()[_0x6814[104]](_0x9af7x7)){_0x9af7x5[_0x6814[105]]([_0x9af7x7],20)}else {_0x9af7x5[_0x6814[106]](_0x9af7x7)}}}finally{_0x9af7x5[_0x6814[102]]()[_0x6814[107]]()}}});this[_0x6814[10]](_0x6814[108],function(){var _0x9af7xb=_0x9af7x5[_0x6814[110]]()[_0x6814[109]](_0x9af7x5[_0x6814[93]]());var _0x9af7xc=_0x6814[111];if(_0x9af7xb!= null&& _0x9af7xb[_0x6814[113]][mxConstants[_0x6814[112]]]== _0x6814[111]){_0x9af7xc= null};_0x9af7x5[_0x6814[114]](mxConstants.STYLE_WHITE_SPACE,_0x9af7xc)});this[_0x6814[10]](_0x6814[115],function(){var _0x9af7xc=_0x6814[116];var _0x9af7xb=_0x9af7x5[_0x6814[110]]()[_0x6814[109]](_0x9af7x5[_0x6814[93]]());if(_0x9af7xb!= null){_0x9af7xc= _0x9af7xb[_0x6814[113]][mxConstants[_0x6814[117]]]|| _0x9af7xc};_0x9af7xc= mxUtils[_0x6814[97]](mxResources[_0x6814[27]](_0x6814[96])+ _0x6814[118]+ mxResources[_0x6814[27]](_0x6814[115])+ _0x6814[119],_0x9af7xc);if(_0x9af7xc!= null){_0x9af7x5[_0x6814[114]](mxConstants.STYLE_ROTATION,_0x9af7xc)}});this[_0x6814[10]](_0x6814[120],function(){var _0x9af7x9=_0x9af7x5[_0x6814[57]]();if(_0x9af7x9!= null){_0x9af7x5[_0x6814[102]]()[_0x6814[101]]();try{for(var _0x9af7xa=0;_0x9af7xa< _0x9af7x9[_0x6814[103]];_0x9af7xa++){var _0x9af7x7=_0x9af7x9[_0x9af7xa];if(_0x9af7x5[_0x6814[102]]()[_0x6814[121]](_0x9af7x7)&& _0x9af7x5[_0x6814[102]]()[_0x6814[104]](_0x9af7x7)== 0){var _0x9af7xd=_0x9af7x5[_0x6814[122]](_0x9af7x7);if(_0x9af7xd!= null){_0x9af7xd= _0x9af7xd[_0x6814[123]]();_0x9af7xd[_0x6814[124]]+= _0x9af7xd[_0x6814[125]]/ 2- _0x9af7xd[_0x6814[126]]/ 2;_0x9af7xd[_0x6814[127]]+= _0x9af7xd[_0x6814[126]]/ 2- _0x9af7xd[_0x6814[125]]/ 2;var _0x9af7xe=_0x9af7xd[_0x6814[125]];_0x9af7xd[_0x6814[125]]= _0x9af7xd[_0x6814[126]];_0x9af7xd[_0x6814[126]]= _0x9af7xe;_0x9af7x5[_0x6814[102]]()[_0x6814[128]](_0x9af7x7,_0x9af7xd);var _0x9af7xb=_0x9af7x5[_0x6814[129]][_0x6814[109]](_0x9af7x7);if(_0x9af7xb!= null){var _0x9af7xf=_0x9af7xb[_0x6814[113]][mxConstants[_0x6814[130]]]|| _0x6814[131];if(_0x9af7xf== _0x6814[131]){_0x9af7xf= _0x6814[132]}else {if(_0x9af7xf== _0x6814[132]){_0x9af7xf= _0x6814[133]}else {if(_0x9af7xf== _0x6814[133]){_0x9af7xf= _0x6814[134]}else {if(_0x9af7xf== _0x6814[134]){_0x9af7xf= _0x6814[131]}}}};_0x9af7x5[_0x6814[114]](mxConstants.STYLE_DIRECTION,_0x9af7xf,[_0x9af7x7])}}}}}finally{_0x9af7x5[_0x6814[102]]()[_0x6814[107]]()}}},null,null,_0x6814[135]);this[_0x6814[10]](_0x6814[136],function(){_0x9af7x5[_0x6814[137]](1)});this[_0x6814[10]](_0x6814[138],function(){_0x9af7x5[_0x6814[138]]()},null,null,_0x6814[139]);this[_0x6814[10]](_0x6814[140],function(){_0x9af7x5[_0x6814[140]]()},null,null,_0x6814[141]);this[_0x6814[10]](_0x6814[142],function(){_0x9af7x5[_0x6814[143]]()});this[_0x6814[10]](_0x6814[144],mxUtils[_0x6814[28]](this,function(){if(!_0x9af7x5[_0x6814[145]]){this[_0x6814[27]](_0x6814[147])[_0x6814[146]]()};var _0x9af7x10=_0x9af7x5[_0x6814[148]];var _0x9af7x11=_0x9af7x5[_0x6814[149]];var _0x9af7x12=_0x9af7x5[_0x6814[8]][_0x6814[150]]- 20;var _0x9af7x13=_0x9af7x5[_0x6814[8]][_0x6814[151]]- 20;var _0x9af7x14=Math[_0x6814[153]](100* Math[_0x6814[152]](_0x9af7x12/ _0x9af7x10[_0x6814[125]]/ _0x9af7x11,_0x9af7x13/ _0x9af7x10[_0x6814[126]]/ _0x9af7x11))/ 100;_0x9af7x5[_0x6814[137]](_0x9af7x14);_0x9af7x5[_0x6814[8]][_0x6814[154]]= Math[_0x6814[157]](_0x9af7x5[_0x6814[129]][_0x6814[155]][_0x6814[124]]* _0x9af7x14- Math[_0x6814[156]](10,(_0x9af7x5[_0x6814[8]][_0x6814[150]]- _0x9af7x10[_0x6814[125]]* _0x9af7x11* _0x9af7x14)/ 2));_0x9af7x5[_0x6814[8]][_0x6814[158]]= Math[_0x6814[157]](_0x9af7x5[_0x6814[129]][_0x6814[155]][_0x6814[127]]* _0x9af7x14- Math[_0x6814[156]](10,(_0x9af7x5[_0x6814[8]][_0x6814[151]]- _0x9af7x10[_0x6814[126]]* _0x9af7x11* _0x9af7x14)/ 2))}));this[_0x6814[10]](_0x6814[159],mxUtils[_0x6814[28]](this,function(){if(!_0x9af7x5[_0x6814[145]]){this[_0x6814[27]](_0x6814[147])[_0x6814[146]]()};var _0x9af7x10=_0x9af7x5[_0x6814[148]];var _0x9af7x11=_0x9af7x5[_0x6814[149]];var _0x9af7x12=_0x9af7x5[_0x6814[8]][_0x6814[150]]- 20;var _0x9af7x14=Math[_0x6814[153]](100* _0x9af7x12/ _0x9af7x10[_0x6814[125]]/ _0x9af7x11)/ 100;_0x9af7x5[_0x6814[137]](_0x9af7x14);_0x9af7x5[_0x6814[8]][_0x6814[154]]= Math[_0x6814[157]](_0x9af7x5[_0x6814[129]][_0x6814[155]][_0x6814[124]]* _0x9af7x14- Math[_0x6814[156]](10,(_0x9af7x5[_0x6814[8]][_0x6814[150]]- _0x9af7x10[_0x6814[125]]* _0x9af7x11* _0x9af7x14)/ 2));_0x9af7x5[_0x6814[8]][_0x6814[158]]= Math[_0x6814[157]](_0x9af7x5[_0x6814[129]][_0x6814[155]][_0x6814[127]]* _0x9af7x14- Math[_0x6814[156]](10,(_0x9af7x5[_0x6814[8]][_0x6814[151]]- _0x9af7x10[_0x6814[126]]* _0x9af7x11* _0x9af7x14)/ 2))}));this[_0x6814[29]](_0x6814[160], new Action(mxResources[_0x6814[27]](_0x6814[161]),function(){var _0x9af7xc=mxUtils[_0x6814[97]](mxResources[_0x6814[27]](_0x6814[96])+ _0x6814[162],parseInt(_0x9af7x5[_0x6814[110]]()[_0x6814[163]]()* 100));if(_0x9af7xc!= null&& _0x9af7xc[_0x6814[103]]> 0&& !isNaN(parseInt(_0x9af7xc))){_0x9af7x5[_0x6814[137]](parseInt(_0x9af7xc)/ 100)}}));var _0x9af7x15=null;_0x9af7x15= this[_0x6814[10]](_0x6814[164],function(){_0x9af7x5[_0x6814[166]](!_0x9af7x5[_0x6814[165]]());_0x9af7x4[_0x6814[167]]()},null,null,_0x6814[168]);_0x9af7x15[_0x6814[169]](true);_0x9af7x15[_0x6814[170]](function(){return _0x9af7x5[_0x6814[165]]()});_0x9af7x15= this[_0x6814[10]](_0x6814[171],function(){_0x9af7x5[_0x6814[173]][_0x6814[172]]= !_0x9af7x5[_0x6814[173]][_0x6814[172]]});_0x9af7x15[_0x6814[169]](true);_0x9af7x15[_0x6814[170]](function(){return _0x9af7x5[_0x6814[173]][_0x6814[172]]});_0x9af7x15= this[_0x6814[10]](_0x6814[174],function(){_0x9af7x5[_0x6814[176]][_0x6814[177]](!_0x9af7x5[_0x6814[176]][_0x6814[175]]())});_0x9af7x15[_0x6814[169]](true);_0x9af7x15[_0x6814[170]](function(){return _0x9af7x5[_0x6814[176]][_0x6814[175]]()});_0x9af7x15= this[_0x6814[10]](_0x6814[178],function(){_0x9af7x5[_0x6814[179]]= !_0x9af7x5[_0x6814[179]];_0x9af7x5[_0x6814[129]][_0x6814[180]]()});_0x9af7x15[_0x6814[169]](true);_0x9af7x15[_0x6814[170]](function(){return _0x9af7x5[_0x6814[179]]});_0x9af7x15= this[_0x6814[10]](_0x6814[181],function(){_0x9af7x5[_0x6814[181]]= !_0x9af7x5[_0x6814[181]];_0x9af7x4[_0x6814[167]]();if(!_0x9af7x5[_0x6814[181]]){var _0x9af7x16=_0x9af7x5[_0x6814[129]][_0x6814[155]];_0x9af7x5[_0x6814[129]][_0x6814[183]](_0x9af7x16[_0x6814[124]]- _0x9af7x5[_0x6814[8]][_0x6814[154]]/ _0x9af7x5[_0x6814[129]][_0x6814[182]],_0x9af7x16[_0x6814[127]]- _0x9af7x5[_0x6814[8]][_0x6814[158]]/ _0x9af7x5[_0x6814[129]][_0x6814[182]]);_0x9af7x5[_0x6814[8]][_0x6814[154]]= 0;_0x9af7x5[_0x6814[8]][_0x6814[158]]= 0;_0x9af7x5[_0x6814[184]]()}else {var _0x9af7x17=_0x9af7x5[_0x6814[129]][_0x6814[155]][_0x6814[124]];var _0x9af7x18=_0x9af7x5[_0x6814[129]][_0x6814[155]][_0x6814[127]];_0x9af7x5[_0x6814[129]][_0x6814[155]][_0x6814[124]]= 0;_0x9af7x5[_0x6814[129]][_0x6814[155]][_0x6814[127]]= 0;_0x9af7x5[_0x6814[184]]();_0x9af7x5[_0x6814[8]][_0x6814[154]]-= Math[_0x6814[157]](_0x9af7x17* _0x9af7x5[_0x6814[129]][_0x6814[182]]);_0x9af7x5[_0x6814[8]][_0x6814[158]]-= Math[_0x6814[157]](_0x9af7x18* _0x9af7x5[_0x6814[129]][_0x6814[182]])}},!mxClient.IS_TOUCH);_0x9af7x15[_0x6814[169]](true);_0x9af7x15[_0x6814[170]](function(){return _0x9af7x5[_0x6814[8]][_0x6814[113]][_0x6814[185]]== _0x6814[186]});_0x9af7x15= this[_0x6814[10]](_0x6814[147],mxUtils[_0x6814[28]](this,function(){_0x9af7x5[_0x6814[145]]= !_0x9af7x5[_0x6814[145]];_0x9af7x5[_0x6814[187]]= _0x9af7x5[_0x6814[145]];_0x9af7x5[_0x6814[188]]= _0x9af7x5[_0x6814[187]];_0x9af7x5[_0x6814[129]][_0x6814[189]]();_0x9af7x5[_0x6814[184]]();_0x9af7x4[_0x6814[167]]();_0x9af7x4[_0x6814[191]][_0x6814[190]]();if(mxUtils[_0x6814[192]](_0x9af7x5[_0x6814[8]])){if(_0x9af7x5[_0x6814[145]]){_0x9af7x5[_0x6814[8]][_0x6814[154]]-= 20;_0x9af7x5[_0x6814[8]][_0x6814[158]]-= 20}else {_0x9af7x5[_0x6814[8]][_0x6814[154]]+= 20;_0x9af7x5[_0x6814[8]][_0x6814[158]]+= 20}}}));_0x9af7x15[_0x6814[169]](true);_0x9af7x15[_0x6814[170]](function(){return _0x9af7x5[_0x6814[145]]});_0x9af7x15= this[_0x6814[10]](_0x6814[193],function(){_0x9af7x5[_0x6814[195]](!_0x9af7x5[_0x6814[194]][_0x6814[175]]())},null,null,_0x6814[196]);_0x9af7x15[_0x6814[169]](true);_0x9af7x15[_0x6814[170]](function(){return _0x9af7x5[_0x6814[194]][_0x6814[175]]()});_0x9af7x15= this[_0x6814[10]](_0x6814[197],function(){_0x9af7x5[_0x6814[194]][_0x6814[199]](!_0x9af7x5[_0x6814[194]][_0x6814[198]]())});_0x9af7x15[_0x6814[169]](true);_0x9af7x15[_0x6814[170]](function(){return _0x9af7x5[_0x6814[194]][_0x6814[198]]()});this[_0x6814[10]](_0x6814[200],function(){var _0x9af7x19=_0x6814[95];if(mxResources[_0x6814[202]](mxClient[_0x6814[201]])){_0x9af7x19= _0x6814[203]+ mxClient[_0x6814[201]]};window[_0x6814[11]](_0x6814[204])});this[_0x6814[29]](_0x6814[205], new Action(mxResources[_0x6814[27]](_0x6814[205])+ _0x6814[206],function(){_0x9af7x3[_0x6814[9]]( new AboutDialog(_0x9af7x3)[_0x6814[8]],320,280,true,true)},null,null,_0x6814[207]));var _0x9af7x1a=mxUtils[_0x6814[28]](this,function(_0x9af7x1b,_0x9af7x1c){this[_0x6814[10]](_0x9af7x1b,function(){_0x9af7x5[_0x6814[208]](mxConstants.STYLE_FONTSTYLE,_0x9af7x1c)})});_0x9af7x1a(_0x6814[209],mxConstants.FONT_BOLD);_0x9af7x1a(_0x6814[210],mxConstants.FONT_ITALIC);_0x9af7x1a(_0x6814[211],mxConstants.FONT_UNDERLINE);this[_0x6814[10]](_0x6814[212],function(){_0x9af7x5[_0x6814[213]](mxConstants.STYLE_SHADOW)});this[_0x6814[10]](_0x6814[214],function(){_0x9af7x5[_0x6814[213]](mxConstants.STYLE_DASHED)});this[_0x6814[10]](_0x6814[215],function(){_0x9af7x5[_0x6814[213]](mxConstants.STYLE_ROUNDED)});this[_0x6814[10]](_0x6814[216],function(){_0x9af7x5[_0x6814[213]](mxConstants.STYLE_CURVED)});this[_0x6814[10]](_0x6814[113],function(){var _0x9af7x9=_0x9af7x5[_0x6814[57]]();if(_0x9af7x9!= null&& _0x9af7x9[_0x6814[103]]> 0){var _0x9af7x1d=_0x9af7x5[_0x6814[102]]();var _0x9af7x1c=mxUtils[_0x6814[97]](mxResources[_0x6814[27]](_0x6814[96])+ _0x6814[118]+ mxResources[_0x6814[27]](_0x6814[113])+ _0x6814[217],_0x9af7x1d[_0x6814[218]](_0x9af7x9[0])|| _0x6814[95]);if(_0x9af7x1c!= null){_0x9af7x5[_0x6814[219]](_0x9af7x1c,_0x9af7x9)}}});this[_0x6814[10]](_0x6814[220],function(){_0x9af7x5[_0x6814[221]](_0x9af7x5[_0x6814[93]]())});this[_0x6814[10]](_0x6814[222],function(){var _0x9af7x7=_0x9af7x5[_0x6814[93]]();if(_0x9af7x7!= null&& _0x9af7x5[_0x6814[102]]()[_0x6814[223]](_0x9af7x7)){var _0x9af7x1e=_0x9af7x4[_0x6814[6]][_0x6814[225]][_0x6814[224]](_0x9af7x7);if(_0x9af7x1e instanceof mxEdgeHandler){var _0x9af7x16=_0x9af7x5[_0x6814[129]][_0x6814[155]];var _0x9af7x6=_0x9af7x5[_0x6814[129]][_0x6814[182]];var _0x9af7x17=_0x9af7x16[_0x6814[124]];var _0x9af7x18=_0x9af7x16[_0x6814[127]];var _0x9af7x1f=_0x9af7x5[_0x6814[102]]()[_0x6814[226]](_0x9af7x7);var _0x9af7x20=_0x9af7x5[_0x6814[122]](_0x9af7x1f);if(_0x9af7x5[_0x6814[102]]()[_0x6814[121]](_0x9af7x1f)&& _0x9af7x20!= null){_0x9af7x17+= _0x9af7x20[_0x6814[124]];_0x9af7x18+= _0x9af7x20[_0x6814[127]]};_0x9af7x1e[_0x6814[231]](_0x9af7x1e[_0x6814[227]],_0x9af7x5[_0x6814[229]][_0x6814[228]]/ _0x9af7x6- _0x9af7x17,_0x9af7x5[_0x6814[229]][_0x6814[230]]/ _0x9af7x6- _0x9af7x18)}}});this[_0x6814[10]](_0x6814[232],function(){var _0x9af7x21=_0x9af7x3[_0x6814[2]][_0x6814[27]](_0x6814[232]);if(_0x9af7x21[_0x6814[233]]!= null){_0x9af7x21[_0x6814[233]][_0x6814[235]](_0x9af7x21[_0x6814[233]][_0x6814[227]],_0x9af7x21[_0x6814[234]])}});this[_0x6814[10]](_0x6814[236],function(){function _0x9af7x22(_0x9af7xc,_0x9af7x23,_0x9af7x24){var _0x9af7x25=null;var _0x9af7x9=_0x9af7x5[_0x6814[57]]();_0x9af7x5[_0x6814[102]]()[_0x6814[101]]();try{if(_0x9af7x9[_0x6814[103]]== 0){var _0x9af7x26=_0x9af7x5[_0x6814[237]]();_0x9af7x9= [_0x9af7x5[_0x6814[239]](_0x9af7x5[_0x6814[238]](),null,_0x6814[95],_0x9af7x26,_0x9af7x26,_0x9af7x23,_0x9af7x24)];_0x9af7x25= _0x9af7x9};_0x9af7x5[_0x6814[114]](mxConstants.STYLE_IMAGE,_0x9af7xc,_0x9af7x9);_0x9af7x5[_0x6814[114]](mxConstants.STYLE_SHAPE,_0x6814[236],_0x9af7x9);if(_0x9af7x5[_0x6814[240]]()== 1){if(_0x9af7x23!= null&& _0x9af7x24!= null){var _0x9af7x7=_0x9af7x9[0];var _0x9af7xd=_0x9af7x5[_0x6814[102]]()[_0x6814[241]](_0x9af7x7);if(_0x9af7xd!= null){_0x9af7xd= _0x9af7xd[_0x6814[123]]();_0x9af7xd[_0x6814[125]]= _0x9af7x23;_0x9af7xd[_0x6814[126]]= _0x9af7x24;_0x9af7x5[_0x6814[102]]()[_0x6814[128]](_0x9af7x7,_0x9af7xd)}}}}finally{_0x9af7x5[_0x6814[102]]()[_0x6814[107]]()};if(_0x9af7x25!= null){_0x9af7x5[_0x6814[59]](_0x9af7x25);_0x9af7x5[_0x6814[242]](_0x9af7x25[0])}}var _0x9af7xc=_0x6814[95];var _0x9af7xb=_0x9af7x5[_0x6814[110]]()[_0x6814[109]](_0x9af7x5[_0x6814[93]]());if(_0x9af7xb!= null){_0x9af7xc= _0x9af7xb[_0x6814[113]][mxConstants[_0x6814[243]]]|| _0x9af7xc};_0x9af7xc= mxUtils[_0x6814[97]](mxResources[_0x6814[27]](_0x6814[96])+ _0x6814[118]+ mxResources[_0x6814[27]](_0x6814[244])+ _0x6814[217],_0x9af7xc);if(_0x9af7xc!= null){if(_0x9af7xc[_0x6814[103]]> 0){var _0x9af7x27= new Image();_0x9af7x27[_0x6814[245]]= function(){_0x9af7x22(_0x9af7xc,_0x9af7x27[_0x6814[125]],_0x9af7x27[_0x6814[126]])};_0x9af7x27[_0x6814[246]]= function(){mxUtils[_0x6814[248]](mxResources[_0x6814[27]](_0x6814[247]))};_0x9af7x27[_0x6814[249]]= _0x9af7xc}}})};Actions[_0x6814[4]][_0x6814[10]]= function(_0x9af7x1b,_0x9af7x28,_0x9af7x29,_0x9af7x2a,_0x9af7x2b){return this[_0x6814[29]](_0x9af7x1b, new Action(mxResources[_0x6814[27]](_0x9af7x1b),_0x9af7x28,_0x9af7x29,_0x9af7x2a,_0x9af7x2b))};Actions[_0x6814[4]][_0x6814[29]]= function(_0x9af7x2c,_0x9af7x15){this[_0x6814[2]][_0x9af7x2c]= _0x9af7x15;return _0x9af7x15};Actions[_0x6814[4]][_0x6814[27]]= function(_0x9af7x2c){return this[_0x6814[2]][_0x9af7x2c]};function Action(_0x9af7x2e,_0x9af7x28,_0x9af7x29,_0x9af7x2a,_0x9af7x2b){mxEventSource[_0x6814[250]](this);this[_0x6814[251]]= _0x9af7x2e;this[_0x6814[146]]= _0x9af7x28;this[_0x6814[252]]= (_0x9af7x29!= null)?_0x9af7x29:true;this[_0x6814[253]]= _0x9af7x2a;this[_0x6814[254]]= _0x9af7x2b}mxUtils[_0x6814[255]](Action,mxEventSource);Action[_0x6814[4]][_0x6814[177]]= function(_0x9af7xc){if(this[_0x6814[252]]!= _0x9af7xc){this[_0x6814[252]]= _0x9af7xc;this[_0x6814[257]]( new mxEventObject(_0x6814[256]))}};Action[_0x6814[4]][_0x6814[169]]= function(_0x9af7xc){this[_0x6814[258]]= _0x9af7xc};Action[_0x6814[4]][_0x6814[170]]= function(_0x9af7x28){this[_0x6814[259]]= _0x9af7x28};Action[_0x6814[4]][_0x6814[260]]= function(){return this[_0x6814[259]]()} \ No newline at end of file +'use strict'; +/** + * $Id: Actions.js,v 1.7 2013-02-14 07:48:01 gaudenz Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ +/** + * Constructs the actions object for the given UI. + */ +function Actions(editorUi) { + this.editorUi = editorUi; + this.actions = new Object(); + this.init(); +}; + +/** + * Adds the default actions. + */ +Actions.prototype.init = function() { + var ui = this.editorUi; + var editor = ui.editor; + var graph = editor.graph; + + // File actions + this.addAction('new', function() { + ui.showDialog(new NewDialog(ui).container, 300, 180, true, true); + }); + this.addAction('open', function() { + ui.showDialog(new OpenDialog(ui).container, 300, 180, true, true); + }); + this.addAction('save', function() { + ui.saveFile(false); + }, null, null, 'Ctrl+S'); + this.addAction('saveAs', function() { + ui.saveFile(true); + }, null, null, 'Ctrl+Shift-S'); + this.addAction('publish', function() { + ui.publishFile(false); + }, null, null, 'Ctrl+Shift+P'); + this.addAction('variable', function() { + ui.showDialog(new VariableDialog(ui).container, 300, 180, true, true); + }); + this.addAction('description', function() { + ui.showDialog(new DescriptionDialog(ui).container, 300, 180, true, true); + }); + this.addAction('import', function() { + ui.showDialog(new ImportDialog(ui).container, 300, 200, true, true); + }); + this.addAction('export', function() { + ui.showDialog(new ExportDialog(ui).container, 300, 200, true, true); + }, null, null, 'Ctrl+E'); + this.put('editFile', new Action(mxResources.get('edit'), mxUtils.bind(this, + function() { + this.editorUi.showDialog(new EditFileDialog(ui).container, 620, 420, + true, true); + }))); + // this.addAction('rename', function() { + // ui.showDialog(new RenameDialog(ui).container, 300, 180, true, true); + // }); + this.addAction('print', function() { + mxUtils.printScreen(graph); + }, null, 'sprite-print', 'Ctrl+P'); + this.addAction('preview', function() { + mxUtils.show(graph, null, 10, 10); + }); + + // Edit actions + this.addAction('undo', function() { + editor.undoManager.undo(); + }, null, 'sprite-undo', 'Ctrl+Z'); + this.addAction('redo', function() { + editor.undoManager.redo(); + }, null, 'sprite-redo', 'Ctrl+Y'); + this.addAction('cut', function() { + mxClipboard.cut(graph); + }, null, 'sprite-cut', 'Ctrl+X'); + this.addAction('copy', function() { + mxClipboard.copy(graph); + }, null, 'sprite-copy', 'Ctrl+C'); + this.addAction('paste', function() { + mxClipboard.paste(graph); + }, false, 'sprite-paste', 'Ctrl+V'); + this.addAction('delete', function() { + graph.removeCells(); + }, null, null, 'Delete'); + this.addAction('duplicate', function() { + var s = graph.gridSize; + graph.setSelectionCells(graph.moveCells(graph.getSelectionCells(), s, s, + true)); + }, null, null, 'Ctrl+D'); + this.addAction('selectVertices', function() { + graph.selectVertices(); + }, null, null, 'Ctrl+Shift+V'); + this.addAction('selectEdges', function() { + graph.selectEdges(); + }, null, null, 'Ctrl+Shift+E'); + this.addAction('selectAll', function() { + graph.selectAll(); + }, null, null, 'Ctrl+A'); + + // Navigation actions + this.addAction('home', function() { + graph.home(); + }, null, null, 'Home'); + this.addAction('exitGroup', function() { + graph.exitGroup(); + }, null, null, 'Page Up'); + this.addAction('enterGroup', function() { + graph.enterGroup(); + }, null, null, 'Page Down'); + this.addAction('expand', function() { + graph.foldCells(false); + }, null, null, 'Enter'); + this.addAction('collapse', function() { + graph.foldCells(true); + }, null, null, 'Backspace'); + + // Arrange actions + this.addAction('toFront', function() { + graph.orderCells(false); + }, null, null, 'Ctrl+F'); + this.addAction('toBack', function() { + graph.orderCells(true); + }, null, null, 'Ctrl+B'); + this.addAction('group', function() { + graph.setSelectionCell(graph.groupCells(null, 0)); + }, null, null, 'Ctrl+G'); + this.addAction('ungroup', function() { + graph.setSelectionCells(graph.ungroupCells()); + }, null, null, 'Ctrl+U'); + this.addAction('removeFromGroup', function() { + graph.removeCellsFromParent(); + }); + this.addAction('editLink', function() { + var cell = graph.getSelectionCell(); + var link = graph.getLinkForCell(cell); + + if (link == null) { + link = ''; + } + + link = mxUtils.prompt(mxResources.get('enterValue'), link); + + if (link != null) { + graph.setLinkForCell(cell, link); + } + }); + this.addAction('openLink', function() { + var cell = graph.getSelectionCell(); + var link = graph.getLinkForCell(cell); + + if (link != null) { + window.open(link); + } + }); + this.addAction('autosize', function() { + var cells = graph.getSelectionCells(); + + if (cells != null) { + graph.getModel().beginUpdate(); + try { + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + + if (graph.getModel().getChildCount(cell)) { + graph.updateGroupBounds([cell], 20); + } else { + graph.updateCellSize(cell); + } + } + } finally { + graph.getModel().endUpdate(); + } + } + }); + this.addAction('wordWrap', function() { + var state = graph.getView().getState(graph.getSelectionCell()); + var value = 'wrap'; + + if (state != null && state.style[mxConstants.STYLE_WHITE_SPACE] == 'wrap') { + value = null; + } + + graph.setCellStyles(mxConstants.STYLE_WHITE_SPACE, value); + }); + this.addAction('rotation', function() { + var value = '0'; + var state = graph.getView().getState(graph.getSelectionCell()); + + if (state != null) { + value = state.style[mxConstants.STYLE_ROTATION] || value; + } + + value = mxUtils.prompt(mxResources.get('enterValue') + ' (' + + mxResources.get('rotation') + ' 0-360)', value); + + if (value != null) { + graph.setCellStyles(mxConstants.STYLE_ROTATION, value); + } + }); + this.addAction('tilt', function() { + var cells = graph.getSelectionCells(); + + if (cells != null) { + graph.getModel().beginUpdate(); + try { + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + + if (graph.getModel().isVertex(cell) && graph.getModel().getChildCount( + cell) == 0) { + var geo = graph.getCellGeometry(cell); + + if (geo != null) { + // Rotates the size and position in the geometry + geo = geo.clone(); + geo.x += geo.width / 2 - geo.height / 2; + geo.y += geo.height / 2 - geo.width / 2; + var tmp = geo.width; + geo.width = geo.height; + geo.height = tmp; + graph.getModel().setGeometry(cell, geo); + + // Reads the current direction and advances by 90 degrees + var state = graph.view.getState(cell); + + if (state != null) { + var dir = state.style[mxConstants.STYLE_DIRECTION] || 'east' /*default*/ ; + + if (dir == 'east') { + dir = 'south'; + } else if (dir == 'south') { + dir = 'west'; + } else if (dir == 'west') { + dir = 'north'; + } else if (dir == 'north') { + dir = 'east'; + } + + graph.setCellStyles(mxConstants.STYLE_DIRECTION, dir, [cell]); + } + } + } + } + } finally { + graph.getModel().endUpdate(); + } + } + }, null, null, 'Ctrl+R'); + + // View actions + this.addAction('actualSize', function() { + graph.zoomTo(1); + }); + this.addAction('zoomIn', function() { + graph.zoomIn(); + }, null, null, 'Add'); + this.addAction('zoomOut', function() { + graph.zoomOut(); + }, null, null, 'Subtract'); + this.addAction('fitWindow', function() { + graph.fit(); + }); + + this.addAction('fitPage', mxUtils.bind(this, function() { + if (!graph.pageVisible) { + this.get('pageView').funct(); + } + + var fmt = graph.pageFormat; + var ps = graph.pageScale; + var cw = graph.container.clientWidth - 20; + var ch = graph.container.clientHeight - 20; + + var scale = Math.floor(100 * Math.min(cw / fmt.width / ps, ch / fmt.height / + ps)) / 100; + graph.zoomTo(scale); + + graph.container.scrollLeft = Math.round(graph.view.translate.x * scale - + Math.max(10, (graph.container.clientWidth - fmt.width * ps * scale) / 2) + ); + graph.container.scrollTop = Math.round(graph.view.translate.y * scale - + Math.max(10, (graph.container.clientHeight - fmt.height * ps * scale) / + 2)); + })); + this.addAction('fitPageWidth', mxUtils.bind(this, function() { + if (!graph.pageVisible) { + this.get('pageView').funct(); + } + + var fmt = graph.pageFormat; + var ps = graph.pageScale; + var cw = graph.container.clientWidth - 20; + + var scale = Math.floor(100 * cw / fmt.width / ps) / 100; + graph.zoomTo(scale); + + graph.container.scrollLeft = Math.round(graph.view.translate.x * scale - + Math.max(10, (graph.container.clientWidth - fmt.width * ps * scale) / 2) + ); + graph.container.scrollTop = Math.round(graph.view.translate.y * scale - + Math.max(10, (graph.container.clientHeight - fmt.height * ps * scale) / + 2)); + })); + this.put('customZoom', new Action(mxResources.get('custom'), function() { + var value = mxUtils.prompt(mxResources.get('enterValue') + ' (%)', + parseInt(graph.getView().getScale() * 100)); + + if (value != null && value.length > 0 && !isNaN(parseInt(value))) { + graph.zoomTo(parseInt(value) / 100); + } + })); + + // Option actions + var action = null; + action = this.addAction('grid', function() { + graph.setGridEnabled(!graph.isGridEnabled()); + editor.updateGraphComponents(); + }, null, null, 'Ctrl+Shift+G'); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.isGridEnabled(); + }); + action = this.addAction('guides', function() { + graph.graphHandler.guidesEnabled = !graph.graphHandler.guidesEnabled; + }); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.graphHandler.guidesEnabled; + }); + action = this.addAction('tooltips', function() { + graph.tooltipHandler.setEnabled(!graph.tooltipHandler.isEnabled()); + }); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.tooltipHandler.isEnabled(); + }); + action = this.addAction('navigation', function() { + graph.foldingEnabled = !graph.foldingEnabled; + graph.view.revalidate(); + }); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.foldingEnabled; + }); + action = this.addAction('scrollbars', function() { + graph.scrollbars = !graph.scrollbars; + editor.updateGraphComponents(); + + if (!graph.scrollbars) { + var t = graph.view.translate; + graph.view.setTranslate(t.x - graph.container.scrollLeft / graph.view.scale, + t.y - graph.container.scrollTop / graph.view.scale); + graph.container.scrollLeft = 0; + graph.container.scrollTop = 0; + graph.sizeDidChange(); + } else { + var dx = graph.view.translate.x; + var dy = graph.view.translate.y; + + graph.view.translate.x = 0; + graph.view.translate.y = 0; + graph.sizeDidChange(); + graph.container.scrollLeft -= Math.round(dx * graph.view.scale); + graph.container.scrollTop -= Math.round(dy * graph.view.scale); + } + }, !mxClient.IS_TOUCH); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.container.style.overflow == 'auto'; + }); + action = this.addAction('pageView', mxUtils.bind(this, function() { + graph.pageVisible = !graph.pageVisible; + graph.pageBreaksVisible = graph.pageVisible; + graph.preferPageSize = graph.pageBreaksVisible; + graph.view.validate(); + graph.sizeDidChange(); + + editor.updateGraphComponents(); + editor.outline.update(); + + if (mxUtils.hasScrollbars(graph.container)) { + if (graph.pageVisible) { + graph.container.scrollLeft -= 20; + graph.container.scrollTop -= 20; + } else { + graph.container.scrollLeft += 20; + graph.container.scrollTop += 20; + } + } + })); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.pageVisible; + }); + action = this.addAction('connect', function() { + graph.setConnectable(!graph.connectionHandler.isEnabled()); + }, null, null, 'Ctrl+Q'); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.connectionHandler.isEnabled(); + }); + action = this.addAction('copyConnect', function() { + graph.connectionHandler.setCreateTarget(!graph.connectionHandler.isCreateTarget()); + }); + action.setToggleAction(true); + action.setSelectedCallback(function() { + return graph.connectionHandler.isCreateTarget(); + }); + + // Help actions + this.addAction('help', function() { + var ext = ''; + + if (mxResources.isLanguageSupported(mxClient.language)) { + ext = '_' + mxClient.language; + } + + window.open("https://wiki.xcallymotion.com/display/XMD/Cally+Square"); + //window.open(RESOURCES_PATH + '/help' + ext + '.html'); + }); + this.put('about', new Action(mxResources.get('about') + ' Cally Square', + function() { + ui.showDialog(new AboutDialog(ui).container, 320, 280, true, true); + }, null, null, 'F1')); + + // Font style actions + var toggleFontStyle = mxUtils.bind(this, function(key, style) { + this.addAction(key, function() { + graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, style); + }); + }); + + toggleFontStyle('bold', mxConstants.FONT_BOLD); + toggleFontStyle('italic', mxConstants.FONT_ITALIC); + toggleFontStyle('underline', mxConstants.FONT_UNDERLINE); + + // Format actions + this.addAction('shadow', function() { + graph.toggleCellStyles(mxConstants.STYLE_SHADOW); + }); + this.addAction('dashed', function() { + graph.toggleCellStyles(mxConstants.STYLE_DASHED); + }); + this.addAction('rounded', function() { + graph.toggleCellStyles(mxConstants.STYLE_ROUNDED); + }); + this.addAction('curved', function() { + graph.toggleCellStyles(mxConstants.STYLE_CURVED); + }); + this.addAction('style', function() { + var cells = graph.getSelectionCells(); + + if (cells != null && cells.length > 0) { + var model = graph.getModel(); + var style = mxUtils.prompt(mxResources.get('enterValue') + ' (' + + mxResources.get('style') + ')', + model.getStyle(cells[0]) || ''); + + if (style != null) { + graph.setCellStyle(style, cells); + } + } + }); + this.addAction('setAsDefaultEdge', function() { + graph.setDefaultEdge(graph.getSelectionCell()); + }); + this.addAction('addWaypoint', function() { + var cell = graph.getSelectionCell(); + + if (cell != null && graph.getModel().isEdge(cell)) { + var handler = editor.graph.selectionCellsHandler.getHandler(cell); + + if (handler instanceof mxEdgeHandler) { + var t = graph.view.translate; + var s = graph.view.scale; + var dx = t.x; + var dy = t.y; + + var parent = graph.getModel().getParent(cell); + var pgeo = graph.getCellGeometry(parent); + + if (graph.getModel().isVertex(parent) && pgeo != null) { + dx += pgeo.x; + dy += pgeo.y; + } + + handler.addPointAt(handler.state, graph.panningHandler.triggerX / s - dx, + graph.panningHandler.triggerY / s - dy); + } + } + }); + this.addAction('removeWaypoint', function() { + // TODO: Action should run with "this" set to action + var rmWaypointAction = ui.actions.get('removeWaypoint'); + + if (rmWaypointAction.handler != null) { + // NOTE: Popupevent handled and action updated in Menus.createPopupMenu + rmWaypointAction.handler.removePoint(rmWaypointAction.handler.state, + rmWaypointAction.index); + } + }); + this.addAction('image', function() { + function updateImage(value, w, h) { + var select = null; + var cells = graph.getSelectionCells(); + + graph.getModel().beginUpdate(); + try { + // Inserts new cell if no cell is selected + if (cells.length == 0) { + var gs = graph.getGridSize(); + cells = [graph.insertVertex(graph.getDefaultParent(), null, '', gs, gs, + w, h)]; + select = cells; + } + + graph.setCellStyles(mxConstants.STYLE_IMAGE, value, cells); + graph.setCellStyles(mxConstants.STYLE_SHAPE, 'image', cells); + + if (graph.getSelectionCount() == 1) { + if (w != null && h != null) { + var cell = cells[0]; + var geo = graph.getModel().getGeometry(cell); + + if (geo != null) { + geo = geo.clone(); + geo.width = w; + geo.height = h; + graph.getModel().setGeometry(cell, geo); + } + } + } + } finally { + graph.getModel().endUpdate(); + } + + if (select != null) { + graph.setSelectionCells(select); + graph.scrollCellToVisible(select[0]); + } + }; + + var value = ''; + var state = graph.getView().getState(graph.getSelectionCell()); + + if (state != null) { + value = state.style[mxConstants.STYLE_IMAGE] || value; + } + + value = mxUtils.prompt(mxResources.get('enterValue') + ' (' + mxResources.get( + 'url') + ')', value); + + if (value != null) { + if (value.length > 0) { + var img = new Image(); + + img.onload = function() { + updateImage(value, img.width, img.height); + }; + img.onerror = function() { + mxUtils.alert(mxResources.get('fileNotFound')); + }; + + img.src = value; + } + } + }); +}; + +/** + * Registers the given action under the given name. + */ +Actions.prototype.addAction = function(key, funct, enabled, iconCls, shortcut) { + return this.put(key, new Action(mxResources.get(key), funct, enabled, iconCls, + shortcut)); +}; + +/** + * Registers the given action under the given name. + */ +Actions.prototype.put = function(name, action) { + this.actions[name] = action; + + return action; +}; + +/** + * Returns the action for the given name or null if no such action exists. + */ +Actions.prototype.get = function(name) { + return this.actions[name]; +}; + +/** + * Constructs a new action for the given parameters. + */ +function Action(label, funct, enabled, iconCls, shortcut) { + mxEventSource.call(this); + this.label = label; + this.funct = funct; + this.enabled = (enabled != null) ? enabled : true; + this.iconCls = iconCls; + this.shortcut = shortcut; +}; + +// Action inherits from mxEventSource +mxUtils.extend(Action, mxEventSource); + +/** + * Sets the enabled state of the action and fires a stateChanged event. + */ +Action.prototype.setEnabled = function(value) { + if (this.enabled != value) { + this.enabled = value; + this.fireEvent(new mxEventObject('stateChanged')); + } +}; + +/** + * Sets the enabled state of the action and fires a stateChanged event. + */ +Action.prototype.setToggleAction = function(value) { + this.toggleAction = value; +}; + +/** + * Sets the enabled state of the action and fires a stateChanged event. + */ +Action.prototype.setSelectedCallback = function(funct) { + this.selectedCallback = funct; +}; + +/** + * Sets the enabled state of the action and fires a stateChanged event. + */ +Action.prototype.isSelected = function() { + return this.selectedCallback(); +}; diff --git a/public/assets/plugins/square/js/Dialogs.js b/public/assets/plugins/square/js/Dialogs.js index 6ba7c10..17e2529 100644 --- a/public/assets/plugins/square/js/Dialogs.js +++ b/public/assets/plugins/square/js/Dialogs.js @@ -1 +1,1276 @@ -var _0x7859=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x69\x6E\x70\x75\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x74\x79\x70\x65","\x63\x68\x65\x63\x6B\x62\x6F\x78","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x68\x65\x63\x6B\x65\x64","\x47\x45\x54","\x6F\x70\x65\x6E","\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x42\x65\x61\x72\x65\x72\x20","\x74\x6F\x6B\x65\x6E","\x64\x61\x74\x61","\x65\x64\x69\x74\x6F\x72","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x70\x61\x72\x73\x65","\x73\x65\x6C\x65\x63\x74","\x6F\x70\x74\x69\x6F\x6E","\x74\x65\x78\x74","\x2D\x2D\x20\x4E\x6F\x6E\x65\x20\x2D\x2D","\x76\x61\x6C\x75\x65","\x2D\x31","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x25","\x72\x65\x70\x6C\x61\x63\x65","\x66\x6F\x72\x45\x61\x63\x68","\x73\x65\x6C\x65\x63\x74\x65\x64","\x72\x6F\x77\x73","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x66\x6F\x72\x6D\x2D\x63\x6F\x6E\x74\x72\x6F\x6C\x20\x73\x65\x6C\x65\x63\x74\x32","\x67\x72\x6F\x75\x70\x42\x79","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x6F\x70\x74\x67\x72\x6F\x75\x70","\x6C\x61\x62\x65\x6C","\x63\x61\x70\x69\x74\x61\x6C\x69\x7A\x65","\x30","\x73\x65\x6C\x65\x63\x74\x2D\x67\x72\x6F\x75\x70\x2D\x66\x61\x74\x68\x65\x72","\x74\x6F\x55\x70\x70\x65\x72\x43\x61\x73\x65","\x73\x65\x6C\x65\x63\x74\x2D\x67\x72\x6F\x75\x70\x2D\x73\x6F\x6E","\x2D","","\x50\x4F\x53\x54","\x2F\x61\x70\x69\x2F\x72\x65\x73\x74\x2F\x6C\x69\x73\x74\x2F\x6C\x69\x73\x74","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x52\x4D\x49","\x69\x64","\x6E\x61\x6D\x65","\x6C\x6F\x67","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x73\x63\x72\x6F\x6C\x6C\x57\x69\x64\x74\x68","\x62\x6F\x64\x79","\x72\x6F\x75\x6E\x64","\x6D\x61\x78","\x73\x63\x72\x6F\x6C\x6C\x48\x65\x69\x67\x68\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x44\x69\x61\x6C\x6F\x67","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x6D\x6F\x64\x61\x6C\x20\x66\x61\x64\x65\x20\x69\x6E\x20\x63\x65\x6E\x74\x65\x72","\x64\x69\x73\x70\x6C\x61\x79","\x73\x74\x79\x6C\x65","\x62\x6C\x6F\x63\x6B","\x70\x61\x64\x64\x69\x6E\x67\x52\x69\x67\x68\x74","\x31\x32\x70\x78","\x67\x65\x4D\x6F\x64\x61\x6C\x44\x69\x61\x6C\x6F\x67","\x6D\x6F\x64\x61\x6C\x2D\x64\x69\x61\x6C\x6F\x67","\x62\x67","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x6D\x6F\x64\x61\x6C\x2D\x62\x61\x63\x6B\x64\x72\x6F\x70\x20\x66\x61\x64\x65\x20\x69\x6E","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x6F\x6E\x44\x69\x61\x6C\x6F\x67\x43\x6C\x6F\x73\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x6C\x6F\x73\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x6D\x6F\x64\x61\x6C\x2D\x63\x6F\x6E\x74\x65\x6E\x74","\x6D\x6F\x64\x61\x6C\x2D\x68\x65\x61\x64\x65\x72","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79","\x6D\x6F\x64\x61\x6C\x2D\x66\x6F\x6F\x74\x65\x72","\x68\x34","\x63\x72\x65\x61\x74\x65\x48\x65\x61\x64\x65\x72","\x69\x6D\x70\x6F\x72\x74","\x67\x65\x74","\x20\x58\x4D\x4C","\x77\x72\x69\x74\x65","\x68\x69\x64\x65\x44\x69\x61\x6C\x6F\x67","\x62\x75\x74\x74\x6F\x6E","\x72\x6F\x77","\x63\x6F\x6C\x2D\x6D\x64\x2D\x31\x32","\x74\x65\x78\x74\x61\x72\x65\x61","\x77\x69\x64\x74\x68","\x31\x30\x30\x25","\x68\x65\x69\x67\x68\x74","\x33\x37\x34\x70\x78","\x66\x69\x6C\x65","\x61\x63\x63\x65\x70\x74","\x74\x65\x78\x74\x2F\x78\x6D\x6C","\x63\x68\x61\x6E\x67\x65","\x66\x69\x6C\x65\x73","\x74\x61\x72\x67\x65\x74","\x6F\x6E\x6C\x6F\x61\x64","\x72\x65\x73\x75\x6C\x74","\x72\x65\x61\x64\x41\x73\x54\x65\x78\x74","\x46\x61\x69\x6C\x65\x64\x20\x74\x6F\x20\x6C\x6F\x61\x64\x20\x66\x6F\x72\x6D\x61\x74\x20\x66\x69\x6C\x65","\x46\x61\x69\x6C\x65\x64\x20\x74\x6F\x20\x6C\x6F\x61\x64\x20\x66\x69\x6C\x65","\x61\x64\x64\x45\x76\x65\x6E\x74\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x62\x69\x6E\x64","\x62\x74\x6E\x20\x62\x6C\x75\x65","\x63\x61\x6E\x63\x65\x6C","\x62\x74\x6E\x20\x64\x65\x66\x61\x75\x6C\x74","\x61\x62\x6F\x75\x74","\x20\x43\x61\x6C\x6C\x79\x20\x53\x71\x75\x61\x72\x65","\x69\x6D\x67","\x62\x6F\x72\x64\x65\x72","\x30\x70\x78","\x31\x37\x36","\x31\x35\x31","\x73\x72\x63","\x2F\x6C\x6F\x67\x6F\x2E\x70\x6E\x67","\x62\x72","\x50\x6F\x77\x65\x72\x65\x64\x20\x62\x79\x20\x58\x65\x6E\x69\x61\x6C\x61\x62\x20","\x56\x45\x52\x53\x49\x4F\x4E","\x61","\x68\x72\x65\x66","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x63\x61\x6C\x6C\x79\x73\x71\x75\x61\x72\x65\x2E\x63\x6F\x6D\x2F","\x5F\x62\x6C\x61\x6E\x6B","\x77\x77\x77\x2E\x63\x61\x6C\x6C\x79\x73\x71\x75\x61\x72\x65\x2E\x63\x6F\x6D","\x73\x61\x76\x65\x41\x73","\x5F","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x63\x6F\x6C\x2D\x6D\x64\x2D\x34","\x63\x6F\x6C\x2D\x6D\x64\x2D\x38","\x63\x6F\x6E\x74\x72\x6F\x6C\x2D\x6C\x61\x62\x65\x6C\x20\x70\x75\x6C\x6C\x2D\x72\x69\x67\x68\x74","\x5F\x63\x6F\x70\x79","\x66\x6F\x72\x6D\x2D\x63\x6F\x6E\x74\x72\x6F\x6C","\x73\x61\x76\x65","\x6E\x65\x77","\x5F\x6E\x65\x77","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x66\x6F\x72\x6D\x2D\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x20\x66\x6F\x72\x6D\x2D\x72\x6F\x77\x2D\x73\x65\x70\x65\x72\x61\x74\x65\x64","\x66\x6F\x72\x6D\x2D\x67\x72\x6F\x75\x70","\x63\x6F\x6C\x2D\x73\x6D\x2D\x34\x20\x63\x6F\x6E\x74\x72\x6F\x6C\x2D\x6C\x61\x62\x65\x6C","\x63\x6F\x6C\x2D\x73\x6D\x2D\x38","\x75\x70\x64\x61\x74\x65","\x76\x61\x72\x69\x61\x62\x6C\x65","\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x6E\x61\x6D\x65","\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x66\x6F\x72\x6D\x2D\x67\x72\x6F\x75\x70\x20\x6C\x61\x73\x74","\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73","\x6C\x65\x6E\x67\x74\x68","\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x2F","\x72\x65\x6E\x61\x6D\x65","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x50\x55\x54","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x6E\x61\x6D\x65\x3D","\x50\x72\x6F\x6A\x65\x63\x74\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6C\x6C\x79\x20\x72\x65\x6E\x61\x6D\x65\x64","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x6D\x65\x73\x73\x61\x67\x65","\x65\x72\x72\x6F\x72\x73","\x6F\x6E\x65\x72\x72\x6F\x72","\x73\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x61\x6C\x65\x72\x74","\x65\x64\x69\x74","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x73\x74\x6F\x70\x50\x72\x6F\x70\x61\x67\x61\x74\x69\x6F\x6E","\x70\x72\x65\x76\x65\x6E\x74\x44\x65\x66\x61\x75\x6C\x74","\x64\x61\x74\x61\x54\x72\x61\x6E\x73\x66\x65\x72","\x64\x72\x61\x67\x6F\x76\x65\x72","\x64\x72\x6F\x70","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x20\x66\x6F\x72\x6D","\x65\x78\x70\x6F\x72\x74","\x67\x65\x74\x58\x6D\x6C","\x73\x69\x6D\x75\x6C\x61\x74\x65","\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3D","\x67\x72\x61\x70\x68","\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x20\x66\x6F\x72\x6D\x20\x6D\x6F\x64\x61\x6C\x2D\x62\x6F\x64\x79\x2D\x73\x63\x72\x6F\x6C\x6C","\x20","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x61\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x73\x2F\x61\x6C\x6C","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x72\x6F\x6C\x65","\x73\x69\x70\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x71\x75\x65\x75\x65\x73","\x71\x75\x65\x75\x65\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x74\x72\x75\x6E\x6B\x73","\x74\x72\x75\x6E\x6B\x5F\x6E\x61\x6D\x65","\x2F\x61\x70\x69\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64","\x73\x65\x6E\x64\x4D\x61\x69\x6C","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x73\x65\x72\x76\x65\x72\x73\x2F\x6F\x75\x74","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x2F\x61\x70\x69\x2F\x73\x6D\x73\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x61\x63\x63\x6F\x75\x6E\x74\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x74\x65\x6D\x70\x6C\x61\x74\x65\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x63\x6F\x6E\x74\x65\x78\x74\x73","\x63\x6F\x6E\x74\x65\x78\x74","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73","\x6D\x61\x69\x6C\x62\x6F\x78","\x25\x6D\x61\x69\x6C\x62\x6F\x78\x25\x40\x25\x63\x6F\x6E\x74\x65\x78\x74\x25","\x6D\x6F\x64\x65\x6C","\x69\x73\x70\x65\x65\x63\x68\x5F\x61\x73\x72\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x62\x65\x65\x70","\x68\x69\x64\x64\x65\x6E\x64\x69\x67\x69\x74\x73\x70\x6F\x73","\x69\x73\x70\x65\x65\x63\x68\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x67\x6F\x6F\x67\x6C\x65\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x69\x6E\x74\x4B\x65\x79","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x46\x6F\x72\x6D\x61\x74","\x61\x6E\x73\x77\x65\x72","\x6C\x69\x73\x74\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x53\x75\x62\x49\x6E\x74\x65\x72\x76\x61\x6C\x73","\x69\x6E\x74\x65\x72\x76\x61\x6C\x5F\x69\x64","\x70\x72\x6F\x6A\x65\x63\x74\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x6F\x64\x62\x63","\x6F\x64\x62\x63\x5F\x69\x64","\x2F\x61\x70\x69\x2F\x73\x6F\x75\x6E\x64\x73","\x64\x69\x73\x70\x6C\x61\x79\x5F\x6E\x61\x6D\x65","\x66\x69\x6C\x65\x5F\x69\x64","\x74\x69\x6D\x65\x6F\x75\x74","\x64\x69\x67\x69\x74","\x6D\x69\x6E\x64\x69\x67\x69\x74","\x6D\x61\x78\x64\x69\x67\x69\x74","\x72\x65\x74\x72\x79","\x6E\x75\x6D\x62\x65\x72","\x6D\x69\x6E","\x73\x70\x65\x65\x64","\x6B\x65\x79","\x71\x75\x65\x72\x79","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x63\x6F\x6D\x6D\x61\x6E\x64","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x6D\x61\x78\x6C\x65\x6E\x67\x74\x68","\x31\x36\x30","\x73\x6D\x73\x5F\x74\x65\x78\x74","\x68\x65\x6C\x70\x5F","\x70","\x68\x65\x6C\x70\x2D\x62\x6C\x6F\x63\x6B","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x72\x65\x66\x72\x65\x73\x68"];_0x7859[0];function createCheckbox(_0x7535x2){var _0x7535x3=document[_0x7859[2]](_0x7859[1]);_0x7535x3[_0x7859[5]](_0x7859[3],_0x7859[4]);if(_0x7535x2){_0x7535x3[_0x7859[5]](_0x7859[6],true)};return _0x7535x3}function createDropdownFromApi(_0x7535x5,_0x7535x2,_0x7535x6,_0x7535x7,_0x7535x8,_0x7535x9,_0x7535xa){var _0x7535xb= new XMLHttpRequest();_0x7535xb[_0x7859[8]](_0x7859[7],_0x7535x5,false);_0x7535xb[_0x7859[14]](_0x7859[9],_0x7859[10]+ _0x7535x8[_0x7859[13]][_0x7859[12]][_0x7859[11]]);_0x7535xb[_0x7859[15]](null);var _0x7535xc=[];if(_0x7535xb[_0x7859[16]]=== 200){_0x7535xc= JSON[_0x7859[18]](_0x7535xb[_0x7859[17]])};var _0x7535x3=document[_0x7859[2]](_0x7859[19]);var _0x7535xd=document[_0x7859[2]](_0x7859[20]);_0x7535xd[_0x7859[21]]= _0x7859[22];_0x7535xd[_0x7859[23]]= _0x7859[24];_0x7535x3[_0x7859[25]](_0x7535xd);_0x7535xc[_0x7859[30]][_0x7859[28]](function(_0x7535xe){_0x7535xd= document[_0x7859[2]](_0x7859[20]);_0x7535xd[_0x7859[21]]= _0x7535xe[_0x7535x6];if(_0x7535x9&& _0x7535xa){_0x7535xd[_0x7859[23]]= _0x7535xa;_0x7535x9[_0x7859[28]](function(_0x7535xf){_0x7535xd[_0x7859[23]]= _0x7535xd[_0x7859[23]][_0x7859[27]](_0x7859[26]+ _0x7535xf+ _0x7859[26],_0x7535xe[_0x7535xf])});_0x7535xd[_0x7859[29]]= (_0x7535xd[_0x7859[23]]== _0x7535x2)}else {_0x7535xd[_0x7859[23]]= _0x7535xe[_0x7535x7];_0x7535xd[_0x7859[29]]= (_0x7535xe[_0x7535x7]== _0x7535x2)};_0x7535x3[_0x7859[25]](_0x7535xd)});_0x7535x3[_0x7859[31]]= _0x7859[32];return _0x7535x3}function createDropdownWithOptgroupFromApi(_0x7535x5,_0x7535x2,_0x7535x6,_0x7535x7,_0x7535x8,_0x7535x11){var _0x7535xb= new XMLHttpRequest();_0x7535xb[_0x7859[8]](_0x7859[7],_0x7535x5,false);_0x7535xb[_0x7859[14]](_0x7859[9],_0x7859[10]+ _0x7535x8[_0x7859[13]][_0x7859[12]][_0x7859[11]]);_0x7535xb[_0x7859[15]](null);var _0x7535xc=[];if(_0x7535xb[_0x7859[16]]=== 200){_0x7535xc= JSON[_0x7859[18]](_0x7535xb[_0x7859[17]])};var _0x7535x3=document[_0x7859[2]](_0x7859[19]);var _0x7535xd=document[_0x7859[2]](_0x7859[20]);_0x7535xd[_0x7859[21]]= _0x7859[22];_0x7535xd[_0x7859[23]]= _0x7859[24];_0x7535x3[_0x7859[25]](_0x7535xd);var _0x7535x12=_[_0x7859[33]](_0x7535xc[_0x7859[30]],_0x7535x11);for(var _0x7535x13 in _0x7535x12){if(_0x7535x12[_0x7859[34]](_0x7535x13)){var _0x7535x14=document[_0x7859[2]](_0x7859[35]);_0x7535x14[_0x7859[36]]= _[_0x7859[37]](_0x7535x13);var _0x7535x15=_0x7535x12[_0x7535x13];_0x7535x15[_0x7859[28]](function(_0x7535xe){_0x7535xd= document[_0x7859[2]](_0x7859[20]);_0x7535xd[_0x7859[21]]= _0x7535xe[_0x7535x6];_0x7535xd[_0x7859[23]]= _0x7535xe[_0x7535x7];_0x7535xd[_0x7859[29]]= (_0x7535xe[_0x7535x7]== _0x7535x2);_0x7535x14[_0x7859[25]](_0x7535xd)});_0x7535x3[_0x7859[25]](_0x7535x14)}};_0x7535x3[_0x7859[31]]= _0x7859[32];return _0x7535x3}function createGroupedDropdownFromApi(_0x7535x5,_0x7535x2,_0x7535x6,_0x7535x7,_0x7535x8,_0x7535x17){var _0x7535xb= new XMLHttpRequest();_0x7535xb[_0x7859[8]](_0x7859[7],_0x7535x5,false);_0x7535xb[_0x7859[14]](_0x7859[9],_0x7859[10]+ _0x7535x8[_0x7859[13]][_0x7859[12]][_0x7859[11]]);_0x7535xb[_0x7859[15]](null);var _0x7535xc=[];if(_0x7535xb[_0x7859[16]]=== 200){_0x7535xc= JSON[_0x7859[18]](_0x7535xb[_0x7859[17]])};var _0x7535x3=document[_0x7859[2]](_0x7859[19]);var _0x7535xd=document[_0x7859[2]](_0x7859[20]);_0x7535xd[_0x7859[21]]= _0x7859[22];_0x7535xd[_0x7859[23]]= _0x7859[38];_0x7535x3[_0x7859[25]](_0x7535xd);_0x7535xc[_0x7859[30]][_0x7859[28]](function(_0x7535xe){_0x7535xd= document[_0x7859[2]](_0x7859[20]);_0x7535xd[_0x7859[31]]= _0x7859[39];_0x7535xd[_0x7859[21]]= _0x7535xe[_0x7535x6][_0x7859[40]]();_0x7535xd[_0x7859[23]]= _0x7535xe[_0x7535x7];_0x7535xd[_0x7859[29]]= (_0x7535xe[_0x7535x7]== _0x7535x2);_0x7535x3[_0x7859[25]](_0x7535xd);_0x7535xe[_0x7535x17][_0x7859[28]](function(_0x7535xe){_0x7535xd= document[_0x7859[2]](_0x7859[20]);_0x7535xd[_0x7859[31]]= _0x7859[41];_0x7535xd[_0x7859[21]]= _0x7859[42]+ _[_0x7859[37]](_0x7535xe[_0x7535x6]);_0x7535xd[_0x7859[23]]= _0x7535xe[_0x7535x7];_0x7535xd[_0x7859[29]]= (_0x7535xe[_0x7535x7]== _0x7535x2);_0x7535x3[_0x7859[25]](_0x7535xd)})});_0x7535x3[_0x7859[31]]= _0x7859[32];return _0x7535x3}function createDropdownFromArray(_0x7535x19,_0x7535x2){var _0x7535x3=document[_0x7859[2]](_0x7859[19]);for(var _0x7535x1a in _0x7535x19){var _0x7535xd=document[_0x7859[2]](_0x7859[20]);_0x7535xd[_0x7859[21]]= _0x7535x19[_0x7535x1a];_0x7535xd[_0x7859[23]]= _0x7535x1a;if(_0x7535x2> 0|| _0x7535x2!= _0x7859[43]){_0x7535xd[_0x7859[29]]= (_0x7535x2=== _0x7535x1a)?true:false};_0x7535x3[_0x7859[25]](_0x7535xd)};_0x7535x3[_0x7859[31]]= _0x7859[32];return _0x7535x3}function createDropdownFromTigerDialList(_0x7535x2){var _0x7535x3=document[_0x7859[2]](_0x7859[19]);var _0x7535x19=[];var _0x7535x1c= new XMLHttpRequest();try{_0x7535x1c[_0x7859[8]](_0x7859[44],_0x7859[45],false);_0x7535x1c[_0x7859[15]](JSON[_0x7859[46]]({page:1,size:600000}));if(_0x7535x1c[_0x7859[16]]=== 200){var _0x7535xc=JSON[_0x7859[18]](_0x7535x1c[_0x7859[17]]);if(_0x7535xc[_0x7859[16]]> 0){var _0x7535x1d=_0x7535xc[_0x7859[17]][_0x7859[47]][_0x7859[30]];for(var _0x7535x1e in _0x7535x1d){_0x7535x19[_0x7535x1d[_0x7535x1e][_0x7859[48]]]= _0x7535x1d[_0x7535x1e][_0x7859[49]]}}}}catch(e){console[_0x7859[50]](e)};for(var _0x7535x1a in _0x7535x19){var _0x7535xd=document[_0x7859[2]](_0x7859[20]);_0x7535xd[_0x7859[21]]= _0x7535x19[_0x7535x1a];_0x7535xd[_0x7859[23]]= _0x7535x1a;if(_0x7535x2> 0|| _0x7535x2!= _0x7859[43]){_0x7535xd[_0x7859[29]]= (_0x7535x2=== _0x7535x1a)?true:false};_0x7535x3[_0x7859[25]](_0x7535xd)};_0x7535x3[_0x7859[31]]= _0x7859[32];return _0x7535x3}function Dialog(_0x7535x8,_0x7535x20,_0x7535x21,_0x7535x22,_0x7535x23,_0x7535x24,_0x7535x25){var _0x7535x26=0;if(mxClient[_0x7859[51]]&& document[_0x7859[52]]!= 9){_0x7535x26= 60};_0x7535x21+= _0x7535x26;_0x7535x22+= _0x7535x26;var _0x7535x27=Math[_0x7859[56]](0,Math[_0x7859[55]]((document[_0x7859[54]][_0x7859[53]]- _0x7535x21)/ 2));var _0x7535x28=Math[_0x7859[56]](0,Math[_0x7859[55]]((Math[_0x7859[56]](document[_0x7859[54]][_0x7859[57]],document[_0x7859[58]][_0x7859[57]])- _0x7535x22)/ 3));var _0x7535x29=_0x7535x8[_0x7859[60]](_0x7859[59]);_0x7535x29[_0x7859[31]]= _0x7859[61];_0x7535x29[_0x7859[63]][_0x7859[62]]= _0x7859[64];_0x7535x29[_0x7859[63]][_0x7859[65]]= _0x7859[66];var _0x7535x2a=_0x7535x8[_0x7859[60]](_0x7859[67]);_0x7535x2a[_0x7859[31]]= _0x7859[68];_0x7535x2a[_0x7859[25]](_0x7535x20);_0x7535x29[_0x7859[25]](_0x7535x2a);if(this[_0x7859[69]]== null){this[_0x7859[69]]= _0x7535x8[_0x7859[60]](_0x7859[70]);this[_0x7859[69]][_0x7859[31]]= _0x7859[71];if(mxClient[_0x7859[72]]){ new mxDivResizer(this[_0x7859[69]])}};if(_0x7535x23){document[_0x7859[54]][_0x7859[25]](this[_0x7859[69]])};document[_0x7859[54]][_0x7859[25]](_0x7535x29);this[_0x7859[73]]= _0x7535x25;this[_0x7859[74]]= _0x7535x29}Dialog[_0x7859[76]][_0x7859[75]]= function(){if(this[_0x7859[73]]!= null){this[_0x7859[73]]();this[_0x7859[73]]= null};this[_0x7859[74]][_0x7859[78]][_0x7859[77]](this[_0x7859[74]]);this[_0x7859[69]][_0x7859[78]][_0x7859[77]](this[_0x7859[69]])};function ImportDialog(_0x7535x8){var _0x7535x2c=_0x7535x8[_0x7859[60]](_0x7859[79]);var _0x7535x2d=_0x7535x8[_0x7859[60]](_0x7859[80]);var _0x7535x2e=_0x7535x8[_0x7859[60]](_0x7859[81]);var _0x7535x2f=_0x7535x8[_0x7859[60]](_0x7859[82]);var _0x7535x30=_0x7535x8[_0x7859[84]](_0x7859[83]);mxUtils[_0x7859[88]](_0x7535x30,mxResources[_0x7859[86]](_0x7859[85])+ _0x7859[87]);var _0x7535x31=mxUtils[_0x7859[90]](_0x7859[43],function(){_0x7535x8[_0x7859[89]]()});_0x7535x31[_0x7859[31]]= _0x7859[75];_0x7535x2d[_0x7859[25]](_0x7535x31);_0x7535x2d[_0x7859[25]](_0x7535x30);var _0x7535x32=_0x7535x8[_0x7859[60]](_0x7859[91]);var _0x7535x33=_0x7535x8[_0x7859[60]](_0x7859[92]);var _0x7535x34=document[_0x7859[2]](_0x7859[93]);_0x7535x34[_0x7859[63]][_0x7859[94]]= _0x7859[95];_0x7535x34[_0x7859[63]][_0x7859[96]]= _0x7859[97];var _0x7535x3=document[_0x7859[2]](_0x7859[1]);_0x7535x3[_0x7859[3]]= _0x7859[98];_0x7535x3[_0x7859[5]](_0x7859[99],_0x7859[100]);_0x7535x3[_0x7859[109]](_0x7859[101],function _0x7535x35(_0x7535x36){var _0x7535x37=_0x7535x36[_0x7859[103]][_0x7859[102]][0];console[_0x7859[50]](_0x7535x37);if(_0x7535x37){if(_0x7535x37[_0x7859[3]]=== _0x7859[100]){var _0x7535x38= new FileReader();_0x7535x38[_0x7859[104]]= function(_0x7535x39){var _0x7535x3a=_0x7535x39[_0x7859[103]][_0x7859[105]];mxUtils[_0x7859[88]](_0x7535x34,_0x7535x3a)};_0x7535x38[_0x7859[106]](_0x7535x37)}else {alert(_0x7859[107])}}else {alert(_0x7859[108])}},false);_0x7535x33[_0x7859[25]](_0x7535x3);_0x7535x33[_0x7859[25]](_0x7535x34);_0x7535x32[_0x7859[25]](_0x7535x33);_0x7535x2e[_0x7859[25]](_0x7535x32);var _0x7535x3b=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[85]),mxUtils[_0x7859[112]](this,function(_0x7535x3c){var _0x7535x3d=mxUtils[_0x7859[110]](_0x7535x34[_0x7859[23]]);_0x7535x8[_0x7859[13]][_0x7859[111]](_0x7535x3d[_0x7859[58]]);_0x7535x8[_0x7859[89]]()}));_0x7535x3b[_0x7859[31]]= _0x7859[113];var _0x7535x3e=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[114]),function(){_0x7535x8[_0x7859[89]]()});_0x7535x3e[_0x7859[31]]= _0x7859[115];_0x7535x2f[_0x7859[25]](_0x7535x3b);_0x7535x2f[_0x7859[25]](_0x7535x3e);_0x7535x2c[_0x7859[25]](_0x7535x2d);_0x7535x2c[_0x7859[25]](_0x7535x2e);_0x7535x2c[_0x7859[25]](_0x7535x2f);this[_0x7859[74]]= _0x7535x2c}function AboutDialog(_0x7535x8){var _0x7535x2c=_0x7535x8[_0x7859[60]](_0x7859[79]);var _0x7535x2d=_0x7535x8[_0x7859[60]](_0x7859[80]);var _0x7535x2e=_0x7535x8[_0x7859[60]](_0x7859[81]);var _0x7535x2f=_0x7535x8[_0x7859[60]](_0x7859[82]);var _0x7535x30=_0x7535x8[_0x7859[84]](_0x7859[83]);mxUtils[_0x7859[88]](_0x7535x30,mxResources[_0x7859[86]](_0x7859[116])+ _0x7859[117]);var _0x7535x31=mxUtils[_0x7859[90]](_0x7859[43],function(){_0x7535x8[_0x7859[89]]()});_0x7535x31[_0x7859[31]]= _0x7859[75];_0x7535x2d[_0x7859[25]](_0x7535x31);_0x7535x2d[_0x7859[25]](_0x7535x30);var _0x7535x40=document[_0x7859[2]](_0x7859[118]);_0x7535x40[_0x7859[63]][_0x7859[119]]= _0x7859[120];_0x7535x40[_0x7859[5]](_0x7859[94],_0x7859[121]);_0x7535x40[_0x7859[5]](_0x7859[94],_0x7859[122]);_0x7535x40[_0x7859[5]](_0x7859[123],IMAGE_PATH+ _0x7859[124]);_0x7535x2e[_0x7859[25]](_0x7535x40);mxUtils[_0x7859[125]](_0x7535x2e);mxUtils[_0x7859[88]](_0x7535x2e,_0x7859[126]+ mxClient[_0x7859[127]]);mxUtils[_0x7859[125]](_0x7535x2e);var _0x7535x41=document[_0x7859[2]](_0x7859[128]);_0x7535x41[_0x7859[5]](_0x7859[129],_0x7859[130]);_0x7535x41[_0x7859[5]](_0x7859[103],_0x7859[131]);mxUtils[_0x7859[88]](_0x7535x41,_0x7859[132]);_0x7535x2e[_0x7859[25]](_0x7535x41);mxUtils[_0x7859[125]](_0x7535x2e);mxUtils[_0x7859[125]](_0x7535x2e);var _0x7535x3e=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[75]),function(){_0x7535x8[_0x7859[89]]()});_0x7535x3e[_0x7859[31]]= _0x7859[115];_0x7535x2f[_0x7859[25]](_0x7535x3e);_0x7535x2c[_0x7859[25]](_0x7535x2d);_0x7535x2c[_0x7859[25]](_0x7535x2e);_0x7535x2c[_0x7859[25]](_0x7535x2f);this[_0x7859[74]]= _0x7535x2c}function SaveDialog(_0x7535x8){var _0x7535x2c=_0x7535x8[_0x7859[60]](_0x7859[79]);var _0x7535x2d=_0x7535x8[_0x7859[60]](_0x7859[80]);var _0x7535x2e=_0x7535x8[_0x7859[60]](_0x7859[81]);var _0x7535x2f=_0x7535x8[_0x7859[60]](_0x7859[82]);var _0x7535x30=_0x7535x8[_0x7859[84]](_0x7859[83]);mxUtils[_0x7859[88]](_0x7535x30,mxResources[_0x7859[86]](_0x7859[133]));var _0x7535x31=mxUtils[_0x7859[90]](_0x7859[43],function(){_0x7535x8[_0x7859[89]]()});_0x7535x31[_0x7859[31]]= _0x7859[75];_0x7535x2d[_0x7859[25]](_0x7535x31);_0x7535x2d[_0x7859[25]](_0x7535x30);var _0x7535x43=_0x7859[49];var _0x7535x44=_0x7859[134]+ _0x7535x43;var _0x7535x2=_0x7535x8[_0x7859[13]][_0x7859[135]]();var _0x7535x32=_0x7535x8[_0x7859[60]](_0x7859[91]);var _0x7535x33=_0x7535x8[_0x7859[60]](_0x7859[136]);var _0x7535x45=_0x7535x8[_0x7859[60]](_0x7859[137]);var _0x7535x46=document[_0x7859[2]](_0x7859[36]);_0x7535x46[_0x7859[31]]= _0x7859[138];mxUtils[_0x7859[88]](_0x7535x46,mxResources[_0x7859[86]](_0x7535x43));_0x7535x33[_0x7859[25]](_0x7535x46);var _0x7535x47=document[_0x7859[2]](_0x7859[1]);_0x7535x47[_0x7859[5]](_0x7859[23],_0x7535x2+ _0x7859[139]);_0x7535x47[_0x7859[5]](_0x7859[48],_0x7535x44);_0x7535x47[_0x7859[31]]= _0x7859[140];_0x7535x45[_0x7859[25]](_0x7535x47);_0x7535x32[_0x7859[25]](_0x7535x33);_0x7535x32[_0x7859[25]](_0x7535x45);_0x7535x2e[_0x7859[25]](_0x7535x32);var _0x7535x3b=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[141]),function(){_0x7535x8[_0x7859[133]](_0x7535x47[_0x7859[23]]);_0x7535x8[_0x7859[89]]()});_0x7535x3b[_0x7859[31]]= _0x7859[113];var _0x7535x3e=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[114]),function(){_0x7535x8[_0x7859[89]]()});_0x7535x3e[_0x7859[31]]= _0x7859[115];_0x7535x2f[_0x7859[25]](_0x7535x3b);_0x7535x2f[_0x7859[25]](_0x7535x3e);_0x7535x2c[_0x7859[25]](_0x7535x2d);_0x7535x2c[_0x7859[25]](_0x7535x2e);_0x7535x2c[_0x7859[25]](_0x7535x2f);this[_0x7859[74]]= _0x7535x2c}function NewDialog(_0x7535x8){var _0x7535x2c=_0x7535x8[_0x7859[60]](_0x7859[79]);var _0x7535x2d=_0x7535x8[_0x7859[60]](_0x7859[80]);var _0x7535x2e=_0x7535x8[_0x7859[60]](_0x7859[81]);var _0x7535x2f=_0x7535x8[_0x7859[60]](_0x7859[82]);var _0x7535x30=_0x7535x8[_0x7859[84]](_0x7859[83]);mxUtils[_0x7859[88]](_0x7535x30,mxResources[_0x7859[86]](_0x7859[142]));var _0x7535x31=mxUtils[_0x7859[90]](_0x7859[43],function(){_0x7535x8[_0x7859[89]]()});_0x7535x31[_0x7859[31]]= _0x7859[75];_0x7535x2d[_0x7859[25]](_0x7535x31);_0x7535x2d[_0x7859[25]](_0x7535x30);var _0x7535x43=_0x7859[49];var _0x7535x44=_0x7859[134]+ _0x7535x43;var _0x7535x2=_0x7535x8[_0x7859[13]][_0x7859[135]]();var _0x7535x32=_0x7535x8[_0x7859[60]](_0x7859[91]);var _0x7535x33=_0x7535x8[_0x7859[60]](_0x7859[136]);var _0x7535x45=_0x7535x8[_0x7859[60]](_0x7859[137]);var _0x7535x46=document[_0x7859[2]](_0x7859[36]);_0x7535x46[_0x7859[31]]= _0x7859[138];mxUtils[_0x7859[88]](_0x7535x46,mxResources[_0x7859[86]](_0x7535x43));_0x7535x33[_0x7859[25]](_0x7535x46);var _0x7535x47=document[_0x7859[2]](_0x7859[1]);_0x7535x47[_0x7859[5]](_0x7859[23],_0x7535x2+ _0x7859[143]);_0x7535x47[_0x7859[5]](_0x7859[48],_0x7535x44);_0x7535x47[_0x7859[31]]= _0x7859[140];_0x7535x45[_0x7859[25]](_0x7535x47);_0x7535x32[_0x7859[25]](_0x7535x33);_0x7535x32[_0x7859[25]](_0x7535x45);_0x7535x2e[_0x7859[25]](_0x7535x32);var _0x7535x3b=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[142]),function(){_0x7535x8[_0x7859[142]](_0x7535x47[_0x7859[23]]);_0x7535x8[_0x7859[89]]()});_0x7535x3b[_0x7859[31]]= _0x7859[113];var _0x7535x3e=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[114]),function(){_0x7535x8[_0x7859[89]]()});_0x7535x3e[_0x7859[31]]= _0x7859[115];_0x7535x2f[_0x7859[25]](_0x7535x3b);_0x7535x2f[_0x7859[25]](_0x7535x3e);_0x7535x2c[_0x7859[25]](_0x7535x2d);_0x7535x2c[_0x7859[25]](_0x7535x2e);_0x7535x2c[_0x7859[25]](_0x7535x2f);this[_0x7859[74]]= _0x7535x2c}function DescriptionDialog(_0x7535x8){console[_0x7859[50]](_0x7535x8[_0x7859[13]][_0x7859[12]]);var _0x7535x2c=_0x7535x8[_0x7859[60]](_0x7859[79]);var _0x7535x2d=_0x7535x8[_0x7859[60]](_0x7859[80]);var _0x7535x2e=_0x7535x8[_0x7859[60]](_0x7859[81]);var _0x7535x2f=_0x7535x8[_0x7859[60]](_0x7859[82]);var _0x7535x30=_0x7535x8[_0x7859[84]](_0x7859[83]);mxUtils[_0x7859[88]](_0x7535x30,mxResources[_0x7859[86]](_0x7859[144]));var _0x7535x31=mxUtils[_0x7859[90]](_0x7859[43],function(){_0x7535x8[_0x7859[89]]()});_0x7535x31[_0x7859[31]]= _0x7859[75];_0x7535x2d[_0x7859[25]](_0x7535x31);_0x7535x2d[_0x7859[25]](_0x7535x30);var _0x7535x4a=_0x7535x8[_0x7859[60]](_0x7859[145]);var _0x7535x43=_0x7859[144];var _0x7535x44=_0x7859[134]+ _0x7535x43;var _0x7535x2=_0x7535x8[_0x7859[13]][_0x7859[12]][_0x7859[144]]|| _0x7859[43];var _0x7535x13=_0x7535x8[_0x7859[60]](_0x7859[146]);var _0x7535x46=document[_0x7859[2]](_0x7859[36]);_0x7535x46[_0x7859[31]]= _0x7859[147];mxUtils[_0x7859[88]](_0x7535x46,mxResources[_0x7859[86]](_0x7535x43));_0x7535x13[_0x7859[25]](_0x7535x46);var _0x7535x3=document[_0x7859[2]](_0x7859[1]);_0x7535x3[_0x7859[5]](_0x7859[23],_0x7535x2);_0x7535x3[_0x7859[31]]= _0x7859[140];_0x7535x3[_0x7859[5]](_0x7859[48],_0x7535x44);var _0x7535x29=_0x7535x8[_0x7859[60]](_0x7859[148]);_0x7535x29[_0x7859[25]](_0x7535x3);_0x7535x13[_0x7859[25]](_0x7535x29);_0x7535x4a[_0x7859[25]](_0x7535x13);_0x7535x2e[_0x7859[25]](_0x7535x4a);var _0x7535x3b=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[149]),function(){_0x7535x8[_0x7859[144]](_0x7535x3[_0x7859[23]]);_0x7535x8[_0x7859[89]]()});_0x7535x3b[_0x7859[31]]= _0x7859[113];var _0x7535x3e=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[114]),function(){_0x7535x8[_0x7859[89]]()});_0x7535x3e[_0x7859[31]]= _0x7859[115];_0x7535x2f[_0x7859[25]](_0x7535x3b);_0x7535x2f[_0x7859[25]](_0x7535x3e);_0x7535x2c[_0x7859[25]](_0x7535x2d);_0x7535x2c[_0x7859[25]](_0x7535x2e);_0x7535x2c[_0x7859[25]](_0x7535x2f);this[_0x7859[74]]= _0x7535x2c}function VariableDialog(_0x7535x8){var _0x7535x2c=_0x7535x8[_0x7859[60]](_0x7859[79]);var _0x7535x2d=_0x7535x8[_0x7859[60]](_0x7859[80]);var _0x7535x2e=_0x7535x8[_0x7859[60]](_0x7859[81]);var _0x7535x2f=_0x7535x8[_0x7859[60]](_0x7859[82]);var _0x7535x30=_0x7535x8[_0x7859[84]](_0x7859[83]);mxUtils[_0x7859[88]](_0x7535x30,mxResources[_0x7859[86]](_0x7859[150]));var _0x7535x31=mxUtils[_0x7859[90]](_0x7859[43],function(){_0x7535x8[_0x7859[89]]()});_0x7535x31[_0x7859[31]]= _0x7859[75];_0x7535x2d[_0x7859[25]](_0x7535x31);_0x7535x2d[_0x7859[25]](_0x7535x30);var _0x7535x4a=_0x7535x8[_0x7859[60]](_0x7859[145]);var _0x7535x43=_0x7859[49];var _0x7535x44=_0x7859[134]+ _0x7535x43;var _0x7535x2=_0x7859[151];var _0x7535x13=_0x7535x8[_0x7859[60]](_0x7859[146]);var _0x7535x46=document[_0x7859[2]](_0x7859[36]);_0x7535x46[_0x7859[31]]= _0x7859[147];mxUtils[_0x7859[88]](_0x7535x46,mxResources[_0x7859[86]](_0x7535x43));_0x7535x13[_0x7859[25]](_0x7535x46);var _0x7535x3=document[_0x7859[2]](_0x7859[1]);_0x7535x3[_0x7859[5]](_0x7859[23],_0x7535x2);_0x7535x3[_0x7859[31]]= _0x7859[140];_0x7535x3[_0x7859[5]](_0x7859[48],_0x7535x44);var _0x7535x29=_0x7535x8[_0x7859[60]](_0x7859[148]);_0x7535x29[_0x7859[25]](_0x7535x3);_0x7535x13[_0x7859[25]](_0x7535x29);_0x7535x4a[_0x7859[25]](_0x7535x13);_0x7535x43= _0x7859[144];_0x7535x44= _0x7859[134]+ _0x7535x43;_0x7535x2= _0x7859[152];_0x7535x13= _0x7535x8[_0x7859[60]](_0x7859[153]);_0x7535x46= document[_0x7859[2]](_0x7859[36]);_0x7535x46[_0x7859[31]]= _0x7859[147];mxUtils[_0x7859[88]](_0x7535x46,mxResources[_0x7859[86]](_0x7535x43));_0x7535x13[_0x7859[25]](_0x7535x46);var _0x7535x4c=document[_0x7859[2]](_0x7859[1]);_0x7535x4c[_0x7859[5]](_0x7859[23],_0x7535x2);_0x7535x4c[_0x7859[31]]= _0x7859[140];_0x7535x4c[_0x7859[5]](_0x7859[48],_0x7535x44);_0x7535x29= _0x7535x8[_0x7859[60]](_0x7859[148]);_0x7535x29[_0x7859[25]](_0x7535x4c);_0x7535x13[_0x7859[25]](_0x7535x29);_0x7535x4a[_0x7859[25]](_0x7535x13);_0x7535x2e[_0x7859[25]](_0x7535x4a);var _0x7535x3b=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[142]),function(){_0x7535x8[_0x7859[150]](_0x7535x3[_0x7859[23]],_0x7535x4c[_0x7859[23]]);_0x7535x8[_0x7859[89]]()});_0x7535x3b[_0x7859[31]]= _0x7859[113];var _0x7535x3e=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[114]),function(){_0x7535x8[_0x7859[89]]()});_0x7535x3e[_0x7859[31]]= _0x7859[115];_0x7535x2f[_0x7859[25]](_0x7535x3b);_0x7535x2f[_0x7859[25]](_0x7535x3e);_0x7535x2c[_0x7859[25]](_0x7535x2d);_0x7535x2c[_0x7859[25]](_0x7535x2e);_0x7535x2c[_0x7859[25]](_0x7535x2f);this[_0x7859[74]]= _0x7535x2c}function OpenDialog(_0x7535x8){var _0x7535x2c=_0x7535x8[_0x7859[60]](_0x7859[79]);var _0x7535x2d=_0x7535x8[_0x7859[60]](_0x7859[80]);var _0x7535x2e=_0x7535x8[_0x7859[60]](_0x7859[81]);var _0x7535x2f=_0x7535x8[_0x7859[60]](_0x7859[82]);var _0x7535x30=_0x7535x8[_0x7859[84]](_0x7859[83]);mxUtils[_0x7859[88]](_0x7535x30,mxResources[_0x7859[86]](_0x7859[8]));var _0x7535x31=mxUtils[_0x7859[90]](_0x7859[43],function(){_0x7535x8[_0x7859[89]]()});_0x7535x31[_0x7859[31]]= _0x7859[75];_0x7535x2d[_0x7859[25]](_0x7535x31);_0x7535x2d[_0x7859[25]](_0x7535x30);var _0x7535x32=_0x7535x8[_0x7859[60]](_0x7859[91]);var _0x7535x33=_0x7535x8[_0x7859[60]](_0x7859[136]);var _0x7535x45=_0x7535x8[_0x7859[60]](_0x7859[137]);var _0x7535x46=document[_0x7859[2]](_0x7859[36]);_0x7535x46[_0x7859[31]]= _0x7859[138];mxUtils[_0x7859[88]](_0x7535x46,mxResources[_0x7859[86]](_0x7859[49]));_0x7535x33[_0x7859[25]](_0x7535x46);var _0x7535xb= new XMLHttpRequest();_0x7535xb[_0x7859[8]](_0x7859[7],_0x7859[154],false);_0x7535xb[_0x7859[14]](_0x7859[9],_0x7859[10]+ _0x7535x8[_0x7859[13]][_0x7859[12]][_0x7859[11]]);_0x7535xb[_0x7859[15]](null);var _0x7535xc=[];if(_0x7535xb[_0x7859[16]]=== 200){_0x7535xc= JSON[_0x7859[18]](_0x7535xb[_0x7859[17]])};var _0x7535x47=document[_0x7859[2]](_0x7859[19]);for(var _0x7535x4e=0;_0x7535x4e< _0x7535xc[_0x7859[155]];_0x7535x4e++){var _0x7535xd=document[_0x7859[2]](_0x7859[20]);_0x7535xd[_0x7859[21]]= _0x7535xc[_0x7535x4e][_0x7859[49]];_0x7535xd[_0x7859[23]]= _0x7535xc[_0x7535x4e][_0x7859[48]];_0x7535x47[_0x7859[25]](_0x7535xd)};_0x7535x47[_0x7859[31]]= _0x7859[140];_0x7535x45[_0x7859[25]](_0x7535x47);_0x7535x32[_0x7859[25]](_0x7535x33);_0x7535x32[_0x7859[25]](_0x7535x45);_0x7535x2e[_0x7859[25]](_0x7535x32);var _0x7535x3b=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[8]),function(){console[_0x7859[50]](_0x7535x47);console[_0x7859[50]](_0x7535x47[_0x7859[23]]);window[_0x7859[8]](_0x7859[156]+ _0x7535x47[_0x7859[23]],_0x7859[131]);_0x7535x8[_0x7859[89]]()});_0x7535x3b[_0x7859[31]]= _0x7859[113];var _0x7535x3e=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[114]),function(){_0x7535x8[_0x7859[89]]()});_0x7535x3e[_0x7859[31]]= _0x7859[115];_0x7535x2f[_0x7859[25]](_0x7535x3b);_0x7535x2f[_0x7859[25]](_0x7535x3e);_0x7535x2c[_0x7859[25]](_0x7535x2d);_0x7535x2c[_0x7859[25]](_0x7535x2e);_0x7535x2c[_0x7859[25]](_0x7535x2f);this[_0x7859[74]]= _0x7535x2c}function RenameDialog(_0x7535x8){var _0x7535x2c=_0x7535x8[_0x7859[60]](_0x7859[79]);var _0x7535x2d=_0x7535x8[_0x7859[60]](_0x7859[80]);var _0x7535x2e=_0x7535x8[_0x7859[60]](_0x7859[81]);var _0x7535x2f=_0x7535x8[_0x7859[60]](_0x7859[82]);var _0x7535x30=_0x7535x8[_0x7859[84]](_0x7859[83]);mxUtils[_0x7859[88]](_0x7535x30,mxResources[_0x7859[86]](_0x7859[157]));var _0x7535x31=mxUtils[_0x7859[90]](_0x7859[43],function(){_0x7535x8[_0x7859[89]]()});_0x7535x31[_0x7859[31]]= _0x7859[75];_0x7535x2d[_0x7859[25]](_0x7535x31);_0x7535x2d[_0x7859[25]](_0x7535x30);var _0x7535x32=_0x7535x8[_0x7859[60]](_0x7859[91]);var _0x7535x33=_0x7535x8[_0x7859[60]](_0x7859[136]);var _0x7535x45=_0x7535x8[_0x7859[60]](_0x7859[137]);var _0x7535x46=document[_0x7859[2]](_0x7859[36]);_0x7535x46[_0x7859[31]]= _0x7859[138];mxUtils[_0x7859[88]](_0x7535x46,mxResources[_0x7859[86]](_0x7859[49]));_0x7535x33[_0x7859[25]](_0x7535x46);var _0x7535x43=_0x7535x8[_0x7859[13]][_0x7859[158]];var _0x7535x3=document[_0x7859[2]](_0x7859[1]);_0x7535x3[_0x7859[5]](_0x7859[23],_0x7535x43);_0x7535x3[_0x7859[31]]= _0x7859[140];_0x7535x45[_0x7859[25]](_0x7535x3);_0x7535x32[_0x7859[25]](_0x7535x33);_0x7535x32[_0x7859[25]](_0x7535x45);_0x7535x2e[_0x7859[25]](_0x7535x32);var _0x7535x3b=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[141]),function(){var _0x7535xb= new XMLHttpRequest();_0x7535xb[_0x7859[8]](_0x7859[159],SAVE_URL+ _0x7535x8[_0x7859[13]][_0x7859[12]][_0x7859[48]],true);_0x7535xb[_0x7859[14]](_0x7859[160],_0x7859[161]);_0x7535xb[_0x7859[14]](_0x7859[9],_0x7859[10]+ _0x7535x8[_0x7859[13]][_0x7859[12]][_0x7859[11]]);_0x7535xb[_0x7859[15]](_0x7859[162]+ _0x7535x3[_0x7859[23]]);_0x7535xb[_0x7859[104]]= function(_0x7535x39){if(_0x7535xb[_0x7859[16]]=== 200){_0x7535x8[_0x7859[13]][_0x7859[164]](_0x7859[163]);_0x7535x8[_0x7859[13]][_0x7859[158]]= _0x7535x3[_0x7859[23]]}else {console[_0x7859[50]](_0x7535xb[_0x7859[17]]);_0x7535x8[_0x7859[13]][_0x7859[164]](JSON[_0x7859[18]](_0x7535xb[_0x7859[17]])[_0x7859[166]][0][_0x7859[165]])}};_0x7535xb[_0x7859[167]]= function(_0x7535x39){mxUtils[_0x7859[169]](_0x7535xb[_0x7859[168]])};_0x7535x8[_0x7859[89]]()});_0x7535x3b[_0x7859[31]]= _0x7859[113];var _0x7535x3e=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[114]),function(){_0x7535x8[_0x7859[89]]()});_0x7535x3e[_0x7859[31]]= _0x7859[115];_0x7535x2f[_0x7859[25]](_0x7535x3b);_0x7535x2f[_0x7859[25]](_0x7535x3e);_0x7535x2c[_0x7859[25]](_0x7535x2d);_0x7535x2c[_0x7859[25]](_0x7535x2e);_0x7535x2c[_0x7859[25]](_0x7535x2f);this[_0x7859[74]]= _0x7535x2c}function EditFileDialog(_0x7535x8){var _0x7535x2c=_0x7535x8[_0x7859[60]](_0x7859[79]);var _0x7535x2d=_0x7535x8[_0x7859[60]](_0x7859[80]);var _0x7535x2e=_0x7535x8[_0x7859[60]](_0x7859[81]);var _0x7535x2f=_0x7535x8[_0x7859[60]](_0x7859[82]);var _0x7535x30=_0x7535x8[_0x7859[84]](_0x7859[83]);mxUtils[_0x7859[88]](_0x7535x30,mxResources[_0x7859[86]](_0x7859[170]));var _0x7535x31=mxUtils[_0x7859[90]](_0x7859[43],function(){_0x7535x8[_0x7859[89]]()});_0x7535x31[_0x7859[31]]= _0x7859[75];_0x7535x2d[_0x7859[25]](_0x7535x31);_0x7535x2d[_0x7859[25]](_0x7535x30);var _0x7535x32=_0x7535x8[_0x7859[60]](_0x7859[91]);var _0x7535x33=_0x7535x8[_0x7859[60]](_0x7859[92]);var _0x7535x34=document[_0x7859[2]](_0x7859[93]);_0x7535x34[_0x7859[63]][_0x7859[94]]= _0x7859[95];_0x7535x34[_0x7859[63]][_0x7859[96]]= _0x7859[97];_0x7535x34[_0x7859[23]]= mxUtils[_0x7859[172]](_0x7535x8[_0x7859[13]][_0x7859[171]]());if(fileSupport){function _0x7535x51(_0x7535x36){_0x7535x36[_0x7859[173]]();_0x7535x36[_0x7859[174]]();if(_0x7535x36[_0x7859[175]][_0x7859[102]][_0x7859[155]]> 0){var _0x7535x52=_0x7535x36[_0x7859[175]][_0x7859[102]][0];var _0x7535x53= new FileReader();_0x7535x53[_0x7859[104]]= function(_0x7535x39){_0x7535x34[_0x7859[23]]= _0x7535x39[_0x7859[103]][_0x7859[105]]};_0x7535x53[_0x7859[106]](_0x7535x52)}}function _0x7535x54(_0x7535x36){_0x7535x36[_0x7859[173]]();_0x7535x36[_0x7859[174]]()}_0x7535x34[_0x7859[109]](_0x7859[176],_0x7535x54,false);_0x7535x34[_0x7859[109]](_0x7859[177],_0x7535x51,false)};_0x7535x33[_0x7859[25]](_0x7535x34);_0x7535x32[_0x7859[25]](_0x7535x33);_0x7535x2e[_0x7859[25]](_0x7535x32);var _0x7535x3b=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[141]),function(){var _0x7535x3d=mxUtils[_0x7859[110]](_0x7535x34[_0x7859[23]]);_0x7535x8[_0x7859[13]][_0x7859[111]](_0x7535x3d[_0x7859[58]]);_0x7535x8[_0x7859[89]]()});_0x7535x3b[_0x7859[31]]= _0x7859[113];var _0x7535x3e=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[114]),function(){_0x7535x8[_0x7859[89]]()});_0x7535x3e[_0x7859[31]]= _0x7859[115];_0x7535x2f[_0x7859[25]](_0x7535x3b);_0x7535x2f[_0x7859[25]](_0x7535x3e);_0x7535x2c[_0x7859[25]](_0x7535x2d);_0x7535x2c[_0x7859[25]](_0x7535x2e);_0x7535x2c[_0x7859[25]](_0x7535x2f);this[_0x7859[74]]= _0x7535x2c}function ExportDialog(_0x7535x8){var _0x7535x2c=_0x7535x8[_0x7859[60]](_0x7859[79]);var _0x7535x2d=_0x7535x8[_0x7859[60]](_0x7859[80]);var _0x7535x2e=_0x7535x8[_0x7859[60]](_0x7859[178]);var _0x7535x2f=_0x7535x8[_0x7859[60]](_0x7859[82]);var _0x7535x30=_0x7535x8[_0x7859[84]](_0x7859[83]);mxUtils[_0x7859[88]](_0x7535x30,mxResources[_0x7859[86]](_0x7859[179])+ _0x7859[87]);var _0x7535x31=mxUtils[_0x7859[90]](_0x7859[43],function(){_0x7535x8[_0x7859[89]]()});_0x7535x31[_0x7859[31]]= _0x7859[75];_0x7535x2d[_0x7859[25]](_0x7535x31);_0x7535x2d[_0x7859[25]](_0x7535x30);var _0x7535x4a=_0x7535x8[_0x7859[60]](_0x7859[145]);var _0x7535x13=_0x7535x8[_0x7859[60]](_0x7859[153]);var _0x7535x46=document[_0x7859[2]](_0x7859[36]);_0x7535x46[_0x7859[31]]= _0x7859[147];mxUtils[_0x7859[88]](_0x7535x46,mxResources[_0x7859[86]](_0x7859[158]));var _0x7535x3=document[_0x7859[2]](_0x7859[1]);_0x7535x3[_0x7859[5]](_0x7859[23],_0x7535x8[_0x7859[13]][_0x7859[135]]());_0x7535x3[_0x7859[31]]= _0x7859[140];var _0x7535x29=_0x7535x8[_0x7859[60]](_0x7859[148]);_0x7535x29[_0x7859[25]](_0x7535x3);_0x7535x13[_0x7859[25]](_0x7535x46);_0x7535x13[_0x7859[25]](_0x7535x29);_0x7535x4a[_0x7859[25]](_0x7535x13);_0x7535x2e[_0x7859[25]](_0x7535x4a);var _0x7535x3b=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[179]),mxUtils[_0x7859[112]](this,function(_0x7535x3c){_0x7535x8[_0x7859[141]](false);var _0x7535x56=encodeURIComponent(mxUtils[_0x7859[180]](_0x7535x8[_0x7859[13]][_0x7859[171]]())); new mxXmlRequest(SAVE_URL+ _0x7535x8[_0x7859[13]][_0x7859[12]][_0x7859[48]]+ _0x7859[182],_0x7859[183]+ _0x7535x3[_0x7859[23]],_0x7859[7])[_0x7859[181]](document,_0x7859[131]);_0x7535x8[_0x7859[89]]()}));_0x7535x3b[_0x7859[31]]= _0x7859[113];var _0x7535x3e=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[114]),function(){_0x7535x8[_0x7859[89]]()});_0x7535x3e[_0x7859[31]]= _0x7859[115];_0x7535x2f[_0x7859[25]](_0x7535x3b);_0x7535x2f[_0x7859[25]](_0x7535x3e);_0x7535x2c[_0x7859[25]](_0x7535x2d);_0x7535x2c[_0x7859[25]](_0x7535x2e);_0x7535x2c[_0x7859[25]](_0x7535x2f);this[_0x7859[74]]= _0x7535x2c}function GeneralDialog(_0x7535x8,_0x7535x58){var _0x7535x59=_0x7535x8[_0x7859[13]][_0x7859[184]];var _0x7535x2c=_0x7535x8[_0x7859[60]](_0x7859[79]);var _0x7535x2d=_0x7535x8[_0x7859[60]](_0x7859[80]);var _0x7535x2e=_0x7535x8[_0x7859[60]](_0x7859[185]);var _0x7535x2f=_0x7535x8[_0x7859[60]](_0x7859[82]);var _0x7535x30=_0x7535x8[_0x7859[84]](_0x7859[83]);mxUtils[_0x7859[88]](_0x7535x30,mxResources[_0x7859[86]](_0x7859[170])+ _0x7859[186]+ mxResources[_0x7859[86]](_0x7535x58[_0x7859[23]][_0x7859[187]]));var _0x7535x31=mxUtils[_0x7859[90]](_0x7859[43],function(){_0x7535x8[_0x7859[89]]()});_0x7535x31[_0x7859[31]]= _0x7859[75];_0x7535x2d[_0x7859[25]](_0x7535x31);_0x7535x2d[_0x7859[25]](_0x7535x30);var _0x7535x5a=_0x7535x58[_0x7859[23]][_0x7859[188]][_0x7859[155]];var _0x7535x4a=_0x7535x8[_0x7859[60]](_0x7859[145]);for(var _0x7535x5b=0;_0x7535x5b< _0x7535x5a;_0x7535x5b++){var _0x7535x43=_0x7535x58[_0x7859[23]][_0x7859[188]][_0x7535x5b][_0x7859[49]];var _0x7535x44=_0x7859[134]+ _0x7535x43;var _0x7535x2=_0x7535x58[_0x7859[23]][_0x7859[188]][_0x7535x5b][_0x7859[23]];var _0x7535x13=_0x7535x8[_0x7859[60]]((_0x7535x5b== _0x7535x5a- 1)?_0x7859[153]:_0x7859[146]);var _0x7535x46=document[_0x7859[2]](_0x7859[36]);_0x7535x46[_0x7859[31]]= _0x7859[147];mxUtils[_0x7859[88]](_0x7535x46,mxResources[_0x7859[86]](_0x7535x43));_0x7535x13[_0x7859[25]](_0x7535x46);var _0x7535x3;switch(_0x7535x43){case _0x7859[192]:_0x7535x3= createDropdownWithOptgroupFromApi(_0x7859[189],_0x7535x2,_0x7859[190],_0x7859[48],_0x7535x8,_0x7859[191]);break;case _0x7859[194]:_0x7535x3= createDropdownFromApi(_0x7859[193],_0x7535x2,_0x7859[49],_0x7859[49],_0x7535x8);break;case _0x7859[196]:_0x7535x3= createDropdownFromApi(_0x7859[195],_0x7535x2,_0x7859[49],_0x7859[49],_0x7535x8);break;case _0x7859[198]:_0x7535x3= createDropdownFromApi(_0x7859[197],_0x7535x2,_0x7859[49],_0x7859[48],_0x7535x8);break;case _0x7859[203]:if(_0x7535x58[_0x7859[23]][_0x7859[187]]== _0x7859[199]){_0x7535x3= createDropdownFromApi(_0x7859[200],_0x7535x2,_0x7859[201],_0x7859[48],_0x7535x8)}else {_0x7535x3= createDropdownFromApi(_0x7859[202],_0x7535x2,_0x7859[49],_0x7859[48],_0x7535x8)};break;case _0x7859[205]:_0x7535x3= createDropdownFromApi(_0x7859[204],_0x7535x2,_0x7859[49],_0x7859[48],_0x7535x8);break;case _0x7859[207]:_0x7535x3= createDropdownFromApi(_0x7859[206],_0x7535x2,_0x7859[49],_0x7859[49],_0x7535x8);break;case _0x7859[209]:_0x7535x3= createDropdownFromApi(_0x7859[208],_0x7535x2,_0x7859[209],_0x7859[48],_0x7535x8,[_0x7859[209],_0x7859[207]],_0x7859[210]);break;case _0x7859[211]:_0x7535x3= createDropdownFromArray(ISPEECHASRMODEL,_0x7535x2);break;case _0x7859[212]:_0x7535x3= createDropdownFromArray(ISPEECHASRLANG,_0x7535x2);break;case _0x7859[213]:_0x7535x3= createDropdownFromArray(ISPEECHBEEP,_0x7535x2);break;case _0x7859[214]:_0x7535x3= createDropdownFromArray(SECRETDIGITSPOS,_0x7535x2);break;case _0x7859[215]:_0x7535x3= createDropdownFromArray(ISPEECHLANG,_0x7535x2);break;case _0x7859[216]:_0x7535x3= createDropdownFromArray(GOOGLETTSLANG,_0x7535x2);break;case _0x7859[217]:_0x7535x3= createDropdownFromArray(ASRINTKEYS,_0x7535x2);break;case _0x7859[218]:_0x7535x3= createDropdownFromArray(RECORDINGFORMAT,_0x7535x2);break;case _0x7859[219]:_0x7535x3= createDropdownFromArray(BOOLSELECT,_0x7535x2);break;case _0x7859[220]:_0x7535x3= createDropdownFromTigerDialList(_0x7535x2);break;case _0x7859[223]:_0x7535x3= createGroupedDropdownFromApi(_0x7859[221],_0x7535x2,_0x7859[49],_0x7859[48],_0x7535x8,_0x7859[222]);break;case _0x7859[224]:_0x7535x3= createDropdownFromApi(_0x7859[154],_0x7535x2,_0x7859[49],_0x7859[48],_0x7535x8);break;case _0x7859[226]:_0x7535x3= createDropdownFromApi(_0x7859[225],_0x7535x2,_0x7859[49],_0x7859[48],_0x7535x8);break;case _0x7859[229]:_0x7535x3= createDropdownFromApi(_0x7859[227],_0x7535x2,_0x7859[228],_0x7859[48],_0x7535x8);break;case _0x7859[230]:;case _0x7859[231]:;case _0x7859[232]:;case _0x7859[233]:;case _0x7859[17]:;case _0x7859[234]:;case _0x7859[237]:_0x7535x3= document[_0x7859[2]](_0x7859[1]);_0x7535x3[_0x7859[5]](_0x7859[3],_0x7859[235]);_0x7535x3[_0x7859[5]](_0x7859[236],0);_0x7535x3[_0x7859[5]](_0x7859[56],1000);_0x7535x3[_0x7859[5]](_0x7859[23],_0x7535x2);_0x7535x3[_0x7859[31]]= _0x7859[140];break;case _0x7859[21]:;case _0x7859[238]:;case _0x7859[239]:;case _0x7859[240]:;case _0x7859[241]:;case _0x7859[54]:_0x7535x3= document[_0x7859[2]](_0x7859[93]);_0x7535x3[_0x7859[242]]= _0x7535x2;_0x7535x3[_0x7859[31]]= _0x7859[140];break;case _0x7859[245]:_0x7535x3= document[_0x7859[2]](_0x7859[93]);_0x7535x3[_0x7859[242]]= _0x7535x2;_0x7535x3[_0x7859[31]]= _0x7859[140];_0x7535x3[_0x7859[5]](_0x7859[243],_0x7859[244]);break;default:_0x7535x3= document[_0x7859[2]](_0x7859[1]);_0x7535x3[_0x7859[5]](_0x7859[23],_0x7535x2);_0x7535x3[_0x7859[31]]= _0x7859[140];break};_0x7535x3[_0x7859[5]](_0x7859[48],_0x7535x44);var _0x7535x29=_0x7535x8[_0x7859[60]](_0x7859[148]);_0x7535x29[_0x7859[25]](_0x7535x3);if(mxResources[_0x7859[86]](_0x7859[246]+ _0x7535x43)){var _0x7535x5c=_0x7535x8[_0x7859[60]](_0x7859[247]);_0x7535x5c[_0x7859[31]]= _0x7859[248];mxUtils[_0x7859[88]](_0x7535x5c,mxResources[_0x7859[86]](_0x7859[246]+ _0x7535x43));_0x7535x29[_0x7859[25]](_0x7535x5c)};_0x7535x13[_0x7859[25]](_0x7535x29);_0x7535x4a[_0x7859[25]](_0x7535x13)};_0x7535x2e[_0x7859[25]](_0x7535x4a);var _0x7535x3b=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[141]),mxUtils[_0x7859[112]](this,function(_0x7535x3c){for(var _0x7535x5b=0;_0x7535x5b< _0x7535x58[_0x7859[23]][_0x7859[188]][_0x7859[155]];_0x7535x5b++){var _0x7535x44=_0x7859[134]+ _0x7535x58[_0x7859[23]][_0x7859[188]][_0x7535x5b][_0x7859[49]];var _0x7535x43=_0x7535x58[_0x7859[23]][_0x7859[188]][_0x7535x5b][_0x7859[49]];_0x7535x58[_0x7859[5]](_0x7535x43,document[_0x7859[249]](_0x7535x44)[_0x7859[23]])};_0x7535x59[_0x7859[250]](_0x7535x58);_0x7535x8[_0x7859[89]]()}));_0x7535x3b[_0x7859[31]]= _0x7859[113];var _0x7535x3e=mxUtils[_0x7859[90]](mxResources[_0x7859[86]](_0x7859[114]),function(){_0x7535x8[_0x7859[89]]()});_0x7535x3e[_0x7859[31]]= _0x7859[115];_0x7535x2f[_0x7859[25]](_0x7535x3b);_0x7535x2f[_0x7859[25]](_0x7535x3e);_0x7535x2c[_0x7859[25]](_0x7535x2d);_0x7535x2c[_0x7859[25]](_0x7535x2e);_0x7535x2c[_0x7859[25]](_0x7535x2f);this[_0x7859[74]]= _0x7535x2c} \ No newline at end of file +'use strict'; +/** + * $Id: Dialogs.js,v 1.5 2013-01-29 17:23:31 gaudenz Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ +/** + * Constructs a new dialog. + */ + +function createCheckbox(value) { + var input = document.createElement('input'); + input.setAttribute('type', 'checkbox'); + if (value) { + input.setAttribute('checked', true); + } + return input; +} + +function createDropdownFromApi(path, value, option_name, option_value, editorUi, keys, pattern) { + var req = new XMLHttpRequest(); + req.open('GET', path, false); // `false` makes the request synchronous + req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); + req.send(null); + var res = []; + if (req.status === 200) { + res = JSON.parse(req.response); + } + var input = document.createElement('select'); + var option = document.createElement('option'); + option.text = '-- None --'; + option.value = '-1'; + input.appendChild(option); + res.rows.forEach(function(elem) { + option = document.createElement('option'); + option.text = elem[option_name]; + if (keys && pattern) { + option.value = pattern; + keys.forEach(function(key) { + option.value = option.value.replace('%' + key + '%', elem[key]); + }); + option.selected = (option.value == value); + } else { + option.value = elem[option_value]; + option.selected = (elem[option_value] == value); + } + input.appendChild(option); + }); + input.className = 'form-control select2'; + + return input; +} + +function createDropdownWithOptgroupFromApi(path, value, option_name, option_value, editorUi, propertyGroup) { + var req = new XMLHttpRequest(); + req.open('GET', path, false); // `false` makes the request synchronous + req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); + req.send(null); + var res = []; + if (req.status === 200) { + res = JSON.parse(req.response); + } + var input = document.createElement('select'); + var option = document.createElement('option'); + option.text = '-- None --'; + option.value = '-1'; + input.appendChild(option); + + var values = _.groupBy(res.rows, propertyGroup); + + for (var group in values) { + if (values.hasOwnProperty(group)) { + var optgroup = document.createElement('optgroup'); + optgroup.label = _.capitalize(group); + + var valGroup = values[group]; + valGroup.forEach(function(elem) { + // elem is the option + option = document.createElement('option'); + option.text = elem[option_name]; + option.value = elem[option_value]; + option.selected = (elem[option_value] == value); + optgroup.appendChild(option); + }) + + input.appendChild(optgroup); + } + } + + input.className = 'form-control select2'; + + return input; +} + +function createGroupedDropdownFromApi(path, value, option_name, option_value, editorUi, associationArray) { + var req = new XMLHttpRequest(); + req.open('GET', path, false); // `false` makes the request synchronous + req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); + req.send(null); + var res = []; + if (req.status === 200) { + res = JSON.parse(req.response); + } + var input = document.createElement('select'); + var option = document.createElement('option'); + option.text = '-- None --'; + option.value = '0'; + input.appendChild(option); + res.rows.forEach(function(elem) { + option = document.createElement('option'); + option.className = 'select-group-father'; + option.text = elem[option_name].toUpperCase(); + option.value = elem[option_value]; + option.selected = (elem[option_value] == value); + input.appendChild(option); + elem[associationArray].forEach(function(elem) { + option = document.createElement('option'); + option.className = 'select-group-son'; + option.text = '-' + _.capitalize(elem[option_name]); + option.value = elem[option_value]; + option.selected = (elem[option_value] == value); + input.appendChild(option); + }); + }) + input.className = 'form-control select2'; + + return input; +} + +function createDropdownFromArray(array, value) { + var input = document.createElement('select'); + + for (var item in array) { + var option = document.createElement('option'); + option.text = array[item]; + option.value = item; + if (value > 0 || value != '') + option.selected = (value === item) ? true : false; + + input.appendChild(option); + } + + input.className = 'form-control select2'; + + return input; +} + +function createDropdownFromTigerDialList(value) { + var input = document.createElement('select'); + + var array = []; + var request = new XMLHttpRequest(); + try { + request.open('POST', '/api/rest/list/list', false); + request.send(JSON.stringify({ + page: 1, + size: 600000 //Max items ui-grid + })); + + if (request.status === 200) { + var res = JSON.parse(request.response); + if (res.status > 0) { + var rows = res.response.RMI.rows; + for (var index in rows) { + array[rows[index].id] = rows[index].name; + } + } + } + } catch (e) { + console.log(e); + } + + for (var item in array) { + var option = document.createElement('option'); + option.text = array[item]; + option.value = item; + if (value > 0 || value != '') + option.selected = (value === item) ? true : false; + + input.appendChild(option); + } + + input.className = 'form-control select2'; + + return input; +} + +function Dialog(editorUi, elt, w, h, modal, closable, onClose) { + var dx = 0; + + if (mxClient.IS_IE && document.documentMode != 9) { + dx = 60; + } + + w += dx; + h += dx; + + var left = Math.max(0, Math.round((document.body.scrollWidth - w) / 2)); + var top = Math.max(0, Math.round((Math.max(document.body.scrollHeight, + document.documentElement.scrollHeight) - h) / 3)); + + var div = editorUi.createDiv('geDialog'); + div.className = 'modal fade in center'; + div.style.display = 'block'; + div.style.paddingRight = '12px'; + // div.style.width = w + 'px'; + // div.style.height = h + 'px'; + // div.style.left = left + 'px'; + // div.style.top = top + 'px'; + + var divModalDialog = editorUi.createDiv('geModalDialog'); + divModalDialog.className = 'modal-dialog'; + + divModalDialog.appendChild(elt); + div.appendChild(divModalDialog); + + if (this.bg == null) { + this.bg = editorUi.createDiv('background'); + this.bg.className = 'modal-backdrop fade in'; + + if (mxClient.IS_QUIRKS) { + new mxDivResizer(this.bg); + } + } + + if (modal) { + document.body.appendChild(this.bg); + } + + document.body.appendChild(div); + + this.onDialogClose = onClose; + this.container = div; +}; + +/** + * Removes the dialog from the DOM. + */ +Dialog.prototype.close = function() { + if (this.onDialogClose != null) { + this.onDialogClose(); + this.onDialogClose = null; + } + + this.container.parentNode.removeChild(this.container); + this.bg.parentNode.removeChild(this.bg); +}; + +/** + * Constructs a new open dialog. + */ +function ImportDialog(editorUi) { + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('import') + ' XML'); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var row = editorUi.createDiv('row'); + var col1 = editorUi.createDiv('col-md-12'); + + var textarea = document.createElement('textarea'); + textarea.style.width = '100%'; + textarea.style.height = '374px'; + + var input = document.createElement('input'); + input.type = 'file'; + input.setAttribute('accept', 'text/xml'); + + input.addEventListener('change', function readSingleFile(evt) { + //Retrieve the first (and only!) File from the FileList object + var f = evt.target.files[0]; + console.log(f); + if (f) { + if (f.type === 'text/xml') { + var r = new FileReader(); + r.onload = function(e) { + var contents = e.target.result; + mxUtils.write(textarea, contents); + }; + r.readAsText(f); + } else { + alert('Failed to load format file'); + } + } else { + alert('Failed to load file'); + } + }, false); + + col1.appendChild(input); + col1.appendChild(textarea); + + row.appendChild(col1); + body.appendChild(row); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('import'), mxUtils.bind(this, + function(data) { + var doc = mxUtils.parseXml(textarea.value); + editorUi.editor.setGraphXml(doc.documentElement); + editorUi.hideDialog(); + })); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; + +}; + +/** + * Constructs a new about dialog. + */ +function AboutDialog(editorUi) { + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('about') + ' Cally Square'); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var img = document.createElement('img'); + img.style.border = '0px'; + img.setAttribute('width', '176'); + img.setAttribute('width', '151'); + img.setAttribute('src', IMAGE_PATH + '/logo.png'); + body.appendChild(img); + mxUtils.br(body); + mxUtils.write(body, 'Powered by Xenialab ' + mxClient.VERSION); + mxUtils.br(body); + var link = document.createElement('a'); + link.setAttribute('href', 'http://www.callysquare.com/'); + link.setAttribute('target', '_blank'); + mxUtils.write(link, 'www.callysquare.com'); + body.appendChild(link); + mxUtils.br(body); + mxUtils.br(body); + //--- END BODY + + var close = mxUtils.button(mxResources.get('close'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; +}; + +/** + * Constructs a new save dialog. + */ +function SaveDialog(editorUi) { + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('saveAs')); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var name = 'name'; + var id = '_' + name; + var value = editorUi.editor.getOrCreateFilename(); + + var row = editorUi.createDiv('row'); + var col1 = editorUi.createDiv('col-md-4'); + var col2 = editorUi.createDiv('col-md-8'); + + var label = document.createElement('label'); + label.className = 'control-label pull-right'; + mxUtils.write(label, mxResources.get(name)); + col1.appendChild(label); + + var select = document.createElement('input'); + select.setAttribute('value', value + '_copy'); + select.setAttribute('id', id) + select.className = 'form-control'; + col2.appendChild(select); + + row.appendChild(col1); + row.appendChild(col2); + body.appendChild(row); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('save'), function() { + editorUi.saveAs(select.value); + editorUi.hideDialog(); + }); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; + //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); +}; + +/** + * Constructs a new save dialog. + */ +function NewDialog(editorUi) { + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('new')); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var name = 'name'; + var id = '_' + name; + var value = editorUi.editor.getOrCreateFilename(); + + var row = editorUi.createDiv('row'); + var col1 = editorUi.createDiv('col-md-4'); + var col2 = editorUi.createDiv('col-md-8'); + + var label = document.createElement('label'); + label.className = 'control-label pull-right'; + mxUtils.write(label, mxResources.get(name)); + col1.appendChild(label); + + var select = document.createElement('input'); + select.setAttribute('value', value + '_new'); + select.setAttribute('id', id) + select.className = 'form-control'; + col2.appendChild(select); + + row.appendChild(col1); + row.appendChild(col2); + body.appendChild(row); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('new'), function() { + editorUi.new(select.value); + editorUi.hideDialog(); + }); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; + //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); +}; + +/** + * Constructs a new description dialog. + */ +function DescriptionDialog(editorUi) { + console.log(editorUi.editor.data); + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('description')); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + + var form = editorUi.createDiv('form-horizontal form-row-seperated'); + + // START DESCRIPTION field + var name = 'description'; + var id = '_' + name; + var value = editorUi.editor.data.description || ''; + var group = editorUi.createDiv('form-group'); + + var label = document.createElement('label'); + label.className = 'col-sm-4 control-label'; + mxUtils.write(label, mxResources.get(name)); + group.appendChild(label); + + var input = document.createElement('input'); + input.setAttribute('value', value); + input.className = 'form-control'; + input.setAttribute('id', id); + + var div = editorUi.createDiv('col-sm-8'); + div.appendChild(input); + + group.appendChild(div); + form.appendChild(group); + //END DESCRIPTION field + + body.appendChild(form); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('update'), function() { + editorUi.description(input.value); + editorUi.hideDialog(); + }); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; + //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); +} + +/** + * Constructs a new variable dialog. + */ +function VariableDialog(editorUi) { + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('variable')); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + + var form = editorUi.createDiv('form-horizontal form-row-seperated'); + + //NAME field + var name = 'name'; + var id = '_' + name; + var value = 'variable name'; + var group = editorUi.createDiv('form-group'); + + var label = document.createElement('label'); + label.className = 'col-sm-4 control-label'; + mxUtils.write(label, mxResources.get(name)); + group.appendChild(label); + + var input = document.createElement('input'); + input.setAttribute('value', value); + input.className = 'form-control'; + input.setAttribute('id', id); + + var div = editorUi.createDiv('col-sm-8'); + div.appendChild(input); + + group.appendChild(div); + form.appendChild(group); + //END NAME field + + //DESCRIPTION field + name = 'description'; + id = '_' + name; + value = 'variable description'; + group = editorUi.createDiv('form-group last'); + + label = document.createElement('label'); + label.className = 'col-sm-4 control-label'; + mxUtils.write(label, mxResources.get(name)); + group.appendChild(label); + + var inputDesc = document.createElement('input'); + inputDesc.setAttribute('value', value); + inputDesc.className = 'form-control'; + inputDesc.setAttribute('id', id); + + div = editorUi.createDiv('col-sm-8'); + div.appendChild(inputDesc); + + group.appendChild(div); + form.appendChild(group); + //END DESCRIPTION field + + body.appendChild(form); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('new'), function() { + editorUi.variable(input.value, inputDesc.value); + editorUi.hideDialog(); + }); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; + //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); +} + +/** + * Constructs a new save dialog. + */ +function OpenDialog(editorUi) { + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('open')); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var row = editorUi.createDiv('row'); + var col1 = editorUi.createDiv('col-md-4'); + var col2 = editorUi.createDiv('col-md-8'); + + var label = document.createElement('label'); + label.className = 'control-label pull-right'; + mxUtils.write(label, mxResources.get('name')); + col1.appendChild(label); + + var req = new XMLHttpRequest(); + req.open('GET', '/api/square/projects', false); // `false` makes the request synchronous + req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); + req.send(null); + var res = []; + if (req.status === 200) { + res = JSON.parse(req.response); + } + + var select = document.createElement('select'); + + for (var j = 0; j < res.length; j++) { + var option = document.createElement('option'); + option.text = res[j].name; + option.value = res[j].id; + select.appendChild(option); + } + select.className = 'form-control'; + col2.appendChild(select); + + row.appendChild(col1); + row.appendChild(col2); + body.appendChild(row); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('open'), function() { + console.log(select); + console.log(select.value); + window.open('square/project/' + select.value, '_blank'); + editorUi.hideDialog(); + }); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; + //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); +}; +/** + * Constructs a new rename dialog. + */ +function RenameDialog(editorUi) { + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('rename')); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var row = editorUi.createDiv('row'); + var col1 = editorUi.createDiv('col-md-4'); + var col2 = editorUi.createDiv('col-md-8'); + + var label = document.createElement('label'); + label.className = 'control-label pull-right'; + mxUtils.write(label, mxResources.get('name')); + col1.appendChild(label); + var name = editorUi.editor.filename; + var input = document.createElement('input'); + input.setAttribute('value', name); + input.className = 'form-control'; + + col2.appendChild(input); + + row.appendChild(col1); + row.appendChild(col2); + body.appendChild(row); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('save'), function() { + var req = new XMLHttpRequest(); + + req.open("PUT", SAVE_URL + editorUi.editor.data.id, true); + req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token); + req.send('name=' + input.value); + + req.onload = function(e) { + if (req.status === 200) { + editorUi.editor.setStatus('Project successfully renamed'); + editorUi.editor.filename = input.value; + + } else { + console.log(req.response); + editorUi.editor.setStatus(JSON.parse(req.response).errors[0].message); + } + } + req.onerror = function(e) { + mxUtils.alert(req.statusText); + }; + editorUi.hideDialog(); + }); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; + //nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename()); +}; + +/** + * Constructs a new edit file dialog. + */ +function EditFileDialog(editorUi) { + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('edit')); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var row = editorUi.createDiv('row'); + var col1 = editorUi.createDiv('col-md-12'); + + var textarea = document.createElement('textarea'); + textarea.style.width = '100%'; + textarea.style.height = '374px'; + textarea.value = mxUtils.getPrettyXml(editorUi.editor.getGraphXml()); + + // Enables dropping files + if (fileSupport) { + function handleDrop(evt) { + evt.stopPropagation(); + evt.preventDefault(); + + if (evt.dataTransfer.files.length > 0) { + var file = evt.dataTransfer.files[0]; + + var reader = new FileReader(); + reader.onload = function(e) { + textarea.value = e.target.result; + }; + reader.readAsText(file); + } + }; + + function handleDragOver(evt) { + evt.stopPropagation(); + evt.preventDefault(); + }; + + // Setup the dnd listeners. + textarea.addEventListener('dragover', handleDragOver, false); + textarea.addEventListener('drop', handleDrop, false); + } + col1.appendChild(textarea); + + row.appendChild(col1); + body.appendChild(row); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('save'), function() { + var doc = mxUtils.parseXml(textarea.value); + editorUi.editor.setGraphXml(doc.documentElement); + editorUi.hideDialog(); + }); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; +}; + +/** + * Constructs a new export dialog. + */ +function ExportDialog(editorUi) { + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body form'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('export') + ' XML'); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var form = editorUi.createDiv('form-horizontal form-row-seperated'); + var group = editorUi.createDiv('form-group last'); + + var label = document.createElement('label'); + label.className = 'col-sm-4 control-label'; + mxUtils.write(label, mxResources.get('filename')); + + var input = document.createElement('input'); + input.setAttribute('value', editorUi.editor.getOrCreateFilename()); + input.className = 'form-control'; + + var div = editorUi.createDiv('col-sm-8'); + div.appendChild(input); + + group.appendChild(label); + group.appendChild(div); + form.appendChild(group); + + body.appendChild(form); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('export'), mxUtils.bind(this, + function(data) { + editorUi.save(false); + + var xml = encodeURIComponent(mxUtils.getXml(editorUi.editor.getGraphXml())); + new mxXmlRequest(SAVE_URL + editorUi.editor.data.id + '/download', + 'filename=' + input.value, 'GET').simulate(document, "_blank"); + editorUi.hideDialog(); + })); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; +}; + +/** + * Giuseppe Careri + * Constructs a new general dialog. + */ +function GeneralDialog(editorUi, cell) { + var graph = editorUi.editor.graph; + + var content = editorUi.createDiv('modal-content'); + var header = editorUi.createDiv('modal-header'); + var body = editorUi.createDiv('modal-body form modal-body-scroll'); + var footer = editorUi.createDiv('modal-footer'); + + //--- START HEADER + var title = editorUi.createHeader('h4'); + mxUtils.write(title, mxResources.get('edit') + ' ' + mxResources.get(cell.value + .nodeName)); + + var x = mxUtils.button('', function() { + editorUi.hideDialog(); + }); + x.className = 'close'; + + header.appendChild(x); + header.appendChild(title); + //--- END HEADER + + //--- START BODY + var length = cell.value.attributes.length; + var form = editorUi.createDiv('form-horizontal form-row-seperated'); + + for (var i = 0; i < length; i++) { + var name = cell.value.attributes[i].name; + var id = '_' + name; + var value = cell.value.attributes[i].value; + + var group = editorUi.createDiv((i == length - 1) ? 'form-group last' : + 'form-group'); + + var label = document.createElement('label'); + label.className = 'col-sm-4 control-label'; + mxUtils.write(label, mxResources.get(name)); + group.appendChild(label); + + var input; + + switch (name) { + case 'sip_id': + input = createDropdownWithOptgroupFromApi('/api/users/all', value, 'fullname', 'id', editorUi, 'role'); + break; + case 'queue_id': + input = createDropdownFromApi('/api/voice/queues', value, 'name', 'name', + editorUi); + break; + case 'trunk_name': + input = createDropdownFromApi('/api/trunks', value, 'name', 'name', editorUi); + break; + case 'variable_id': + input = createDropdownFromApi('/api/variables', value, 'name', 'id', + editorUi); + break; + case 'account_id': + if (cell.value.nodeName == 'sendMail') { + input = createDropdownFromApi('/api/mail/servers/out', value, 'username', 'id', + editorUi); + } else { + input = createDropdownFromApi('/api/sms/accounts', value, 'name', 'id', + editorUi); + } + break; + case 'template_id': + input = createDropdownFromApi('/api/templates', value, 'name', 'id', + editorUi); + break; + case 'context': + input = createDropdownFromApi('/api/voice/contexts', value, 'name', 'name', + editorUi); + break; + case 'mailbox': + input = createDropdownFromApi('/api/voice/voicemails', value, 'mailbox', + 'id', editorUi, ['mailbox', 'context'], '%mailbox%@%context%'); + break; + case 'model': + input = createDropdownFromArray(ISPEECHASRMODEL, value); + break; + case 'ispeech_asr_language': + input = createDropdownFromArray(ISPEECHASRLANG, value); + break; + case 'beep': + input = createDropdownFromArray(ISPEECHBEEP, value); + break; + case 'hiddendigitspos': + input = createDropdownFromArray(SECRETDIGITSPOS, value); + break; + case 'ispeech_tts_language': + input = createDropdownFromArray(ISPEECHLANG, value); + break; + case 'google_tts_language': + input = createDropdownFromArray(GOOGLETTSLANG, value); + break; + case 'intKey': + input = createDropdownFromArray(ASRINTKEYS, value); + break; + case 'recordingFormat': + input = createDropdownFromArray(RECORDINGFORMAT, value); + break; + case 'answer': + input = createDropdownFromArray(BOOLSELECT, value); + break; + case 'list_id': + input = createDropdownFromTigerDialList(value); + break; + case 'interval_id': + input = createGroupedDropdownFromApi('/api/intervals', value, 'name', 'id', + editorUi, 'SubIntervals'); + break; + case 'project_id': + input = createDropdownFromApi('/api/square/projects', value, 'name', 'id', + editorUi); + break; + case 'odbc_id': + input = createDropdownFromApi('/api/square/odbc', value, 'name', 'id', + editorUi); + break; + case 'file_id': + input = createDropdownFromApi('/api/sounds', value, 'display_name', 'id', + editorUi); + break; + case 'timeout': + case 'digit': + case 'mindigit': + case 'maxdigit': + case 'response': + case 'retry': + case 'speed': + input = document.createElement('input'); + input.setAttribute('type', 'number'); + input.setAttribute('min', 0); + input.setAttribute('max', 1000); + input.setAttribute('value', value); + input.className = 'form-control'; + break; + case 'text': + case 'key': + case 'query': + case 'condition': + case 'command': + case 'body': + input = document.createElement('textarea'); + input.innerHTML = value; + input.className = 'form-control'; + break; + case 'sms_text': + input = document.createElement('textarea'); + input.innerHTML = value; + input.className = 'form-control'; + input.setAttribute('maxlength', '160'); + break; + default: + input = document.createElement('input'); + input.setAttribute('value', value); + input.className = 'form-control'; + break; + } + + input.setAttribute('id', id); + + var div = editorUi.createDiv('col-sm-8'); + div.appendChild(input); + + // Help + if (mxResources.get('help_' + name)) { + var help = editorUi.createDiv('p'); + help.className = 'help-block'; + mxUtils.write(help, mxResources.get('help_' + name)); + div.appendChild(help); + } + + group.appendChild(div); + form.appendChild(group); + } + body.appendChild(form); + //--- END BODY + + //--- START FOOTER + var save = mxUtils.button(mxResources.get('save'), mxUtils.bind(this, + function(data) { + for (var i = 0; i < cell.value.attributes.length; i++) { + var id = '_' + cell.value.attributes[i].name; + var name = cell.value.attributes[i].name; + // console.log(name, document.getElementById(id).value); + cell.setAttribute(name, document.getElementById(id).value); + }; + graph.refresh(cell); + editorUi.hideDialog(); + })); + save.className = 'btn blue'; + + var close = mxUtils.button(mxResources.get('cancel'), function() { + editorUi.hideDialog(); + }); + close.className = 'btn default'; + + footer.appendChild(save); + footer.appendChild(close); + //--- END FOOTER + + //--- START CONTENT + content.appendChild(header); + content.appendChild(body); + content.appendChild(footer); + //--- END CONTENT + + this.container = content; +}; diff --git a/public/assets/plugins/square/js/Editor.js b/public/assets/plugins/square/js/Editor.js index 0170744..9858989 100644 --- a/public/assets/plugins/square/js/Editor.js +++ b/public/assets/plugins/square/js/Editor.js @@ -1 +1,888 @@ -var _0xeed2=["\x49\x53\x5F\x54\x4F\x55\x43\x48","\x73\x74\x6F\x72\x61\x67\x65","\x6C\x6F\x63\x61\x6C","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x46\x69\x6C\x65","\x46\x69\x6C\x65\x52\x65\x61\x64\x65\x72","\x46\x69\x6C\x65\x4C\x69\x73\x74","\x74\x6F\x75\x63\x68","\x31","\x6F\x70\x65\x6E\x65\x72","\x63\x6F\x75\x6E\x74\x65\x72","\x63\x61\x6C\x6C","\x69\x6E\x69\x74","\x69\x6E\x69\x74\x53\x74\x65\x6E\x63\x69\x6C\x52\x65\x67\x69\x73\x74\x72\x79","\x67\x72\x61\x70\x68","\x6F\x75\x74\x6C\x69\x6E\x65","\x75\x70\x64\x61\x74\x65\x4F\x6E\x50\x61\x6E","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x63\x72\x65\x61\x74\x65\x55\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x73\x74\x61\x74\x75\x73","","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x64\x72\x61\x77\x69\x6E\x67","\x67\x65\x74","\x2E\x78\x6D\x6C","\x67\x65\x74\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x67\x72\x61\x70\x68\x43\x68\x61\x6E\x67\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x70\x70\x6C\x79","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x6F\x6E\x62\x65\x66\x6F\x72\x65\x75\x6E\x6C\x6F\x61\x64","\x61\x6C\x6C\x43\x68\x61\x6E\x67\x65\x73\x4C\x6F\x73\x74","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x73\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x65\x78\x74\x65\x6E\x64","\x67\x72\x69\x64\x49\x6D\x61\x67\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x2F\x67\x72\x69\x64\x2E\x67\x69\x66","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x49\x6D\x61\x67\x65","\x2F\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x2E\x67\x69\x66","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C","\x73\x63\x61\x6C\x65","\x76\x69\x65\x77","\x67\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x69\x64","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x30","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x67\x75\x69\x64\x65\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x66\x6F\x6C\x64","\x73\x63\x72\x6F\x6C\x6C\x4C\x65\x66\x74","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x78","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65","\x64\x78","\x79","\x64\x79","\x70\x61\x67\x65\x56\x69\x73\x69\x62\x6C\x65","\x70\x61\x67\x65","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x73\x56\x69\x73\x69\x62\x6C\x65","\x70\x72\x65\x66\x65\x72\x50\x61\x67\x65\x53\x69\x7A\x65","\x70\x61\x67\x65\x53\x63\x61\x6C\x65","\x70\x61\x67\x65\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x48\x65\x69\x67\x68\x74","\x70\x61\x67\x65\x46\x6F\x72\x6D\x61\x74","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x63\x6F\x64\x65","\x75\x70\x64\x61\x74\x65\x47\x72\x61\x70\x68\x43\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x65\x6E\x63\x6F\x64\x65","\x72\x6F\x75\x6E\x64","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x6E\x6F\x6E\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x73\x74\x79\x6C\x65","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x66\x69\x6C\x6C","\x72\x65\x63\x6F\x6E\x66\x69\x67\x75\x72\x65","\x23\x65\x62\x65\x62\x65\x62","\x62\x6F\x72\x64\x65\x72\x53\x74\x79\x6C\x65","\x73\x6F\x6C\x69\x64","\x62\x6F\x72\x64\x65\x72\x43\x6F\x6C\x6F\x72","\x23\x65\x35\x65\x35\x65\x35","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70\x57\x69\x64\x74\x68","\x31\x70\x78","\x62\x6F\x72\x64\x65\x72\x4C\x65\x66\x74\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72\x52\x69\x67\x68\x74\x57\x69\x64\x74\x68","\x30\x70\x78","\x62\x6F\x72\x64\x65\x72\x42\x6F\x74\x74\x6F\x6D\x57\x69\x64\x74\x68","\x62\x6F\x72\x64\x65\x72","\x76\x61\x6C\x69\x64\x61\x74\x65","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x68\x69\x64\x64\x65\x6E","\x61\x75\x74\x6F","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x75\x72\x6C\x28","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x6E\x6F\x64\x65","\x49\x53\x5F\x49\x45\x36","\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x2F\x67\x72\x61\x70\x68\x65\x64\x69\x74\x6F\x72\x2D\x69\x65\x36\x2E\x63\x73\x73","\x6C\x69\x6E\x6B","\x6C\x6F\x61\x64\x44\x65\x66\x61\x75\x6C\x74\x42\x75\x6E\x64\x6C\x65","\x61\x64\x64","\x44\x45\x46\x41\x55\x4C\x54\x5F\x48\x4F\x54\x53\x50\x4F\x54","\x63\x72\x65\x61\x74\x65\x4D\x61\x72\x6B\x65\x72","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x73","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6E\x67","\x53\x48\x41\x44\x4F\x57\x43\x4F\x4C\x4F\x52","\x23\x64\x30\x64\x30\x64\x30","\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x39\x39\x63\x63\x66\x66","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x23\x30\x30\x38\x38\x63\x66","\x56\x45\x52\x54\x45\x58\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x23\x30\x30\x61\x38\x66\x66","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x43\x4F\x4C\x4F\x52","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x4F\x55\x54\x4C\x49\x4E\x45\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x43\x4F\x4C\x4F\x52","\x43\x4F\x4E\x4E\x45\x43\x54\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x23\x63\x65\x65\x37\x66\x66","\x45\x44\x47\x45\x5F\x53\x45\x4C\x45\x43\x54\x49\x4F\x4E\x5F\x43\x4F\x4C\x4F\x52","\x44\x45\x46\x41\x55\x4C\x54\x5F\x56\x41\x4C\x49\x44\x5F\x43\x4F\x4C\x4F\x52","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x46\x49\x4C\x4C\x43\x4F\x4C\x4F\x52","\x47\x55\x49\x44\x45\x5F\x43\x4F\x4C\x4F\x52","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x43\x6F\x6C\x6F\x72","\x23\x63\x30\x63\x30\x63\x30","\x64\x65\x66\x61\x75\x6C\x74\x4F\x70\x61\x63\x69\x74\x79","\x63\x72\x65\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x53\x68\x61\x70\x65","\x77\x68\x69\x74\x65","\x23\x63\x61\x63\x61\x63\x61","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65\x42\x6F\x75\x6E\x64\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x6D\x69\x6E","\x66\x6C\x6F\x6F\x72","\x6D\x61\x78","\x63\x65\x69\x6C","\x70\x61\x6E\x47\x72\x61\x70\x68","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x75\x73\x65\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x68\x61\x73\x53\x63\x72\x6F\x6C\x6C\x62\x61\x72\x73","\x6D\x61\x72\x67\x69\x6E\x4C\x65\x66\x74","\x70\x78","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x67\x65\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x69\x6D\x61\x67\x65","\x73\x72\x63","\x64\x65\x73\x74\x72\x6F\x79","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x6E\x65","\x72\x65\x64\x72\x61\x77","\x72\x65\x64\x72\x61\x77\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x69\x73\x53\x68\x61\x64\x6F\x77","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x54\x52\x49\x43\x54\x48\x54\x4D\x4C","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x69\x6E\x73\x65\x72\x74\x42\x65\x66\x6F\x72\x65","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x61\x67\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x2D\x31\x70\x78\x20\x2D\x31\x70\x78","\x64\x62\x6C\x63\x6C\x69\x63\x6B","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x69\x73\x48\x69\x64\x65\x4F\x6E\x48\x6F\x76\x65\x72","\x68\x69\x64\x65","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x62\x6F\x75\x6E\x64\x73","\x75\x70\x64\x61\x74\x65\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x6D\x69\x6E\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x69\x73\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x70\x6F\x69\x6E\x74\x73","\x69\x73\x44\x61\x73\x68\x65\x64","\x70\x61\x67\x65\x42\x72\x65\x61\x6B\x44\x61\x73\x68\x65\x64","\x61\x64\x64\x50\x69\x70\x65","\x73\x70\x6C\x69\x63\x65","\x76\x65\x72\x74\x69\x63\x61\x6C\x50\x61\x67\x65\x42\x72\x65\x61\x6B\x73","\x73\x6E\x61\x70\x54\x6F\x54\x65\x72\x6D\x69\x6E\x61\x6C\x73","\x73\x68\x6F\x75\x6C\x64\x52\x65\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73\x46\x72\x6F\x6D\x50\x61\x72\x65\x6E\x74","\x69\x73\x56\x65\x72\x74\x65\x78","\x67\x65\x74\x43\x65\x6C\x6C\x47\x65\x6F\x6D\x65\x74\x72\x79","\x72\x65\x6C\x61\x74\x69\x76\x65","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x41\x6C\x74\x44\x6F\x77\x6E","\x61\x64\x64\x49\x74\x65\x6D","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x63\x6F\x6E\x73\x75\x6D\x65","\x67\x65\x74\x49\x6E\x69\x74\x69\x61\x6C\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x69\x73\x44\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x73\x65\x6C\x65\x63\x74\x44\x65\x6C\x61\x79\x65\x64","\x67\x65\x74\x43\x65\x6C\x6C","\x63\x65\x6C\x6C","\x67\x65\x74\x45\x76\x65\x6E\x74","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x46\x6F\x72\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x65\x6C\x6C\x46\x6F\x72\x50\x6F\x70\x75\x70\x45\x76\x65\x6E\x74","\x65\x64\x69\x74","\x67\x65\x74\x50\x72\x6F\x70\x65\x72\x74\x79","\x75\x6E\x64\x6F\x61\x62\x6C\x65\x45\x64\x69\x74\x48\x61\x70\x70\x65\x6E\x65\x64","\x67\x65\x74\x56\x69\x65\x77","\x63\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x46\x6F\x72\x43\x68\x61\x6E\x67\x65\x73","\x67\x65\x74\x53\x74\x61\x74\x65","\x70\x75\x73\x68","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x2F\x67\x65\x6E\x65\x72\x61\x6C\x2E\x78\x6D\x6C","\x6C\x6F\x61\x64\x53\x74\x65\x6E\x63\x69\x6C\x53\x65\x74","\x6C\x69\x62\x72\x61\x72\x69\x65\x73","\x70\x61\x63\x6B\x61\x67\x65\x73","\x67\x65\x74\x53\x74\x65\x6E\x63\x69\x6C","\x73\x74\x65\x6E\x63\x69\x6C\x73","\x67\x65\x74\x42\x61\x73\x65\x6E\x61\x6D\x65\x46\x6F\x72\x53\x74\x65\x6E\x63\x69\x6C","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x2E\x6A\x73","\x6C\x6F\x61\x64","\x67\x65\x74\x54\x65\x78\x74","\x2F","\x2E","\x73\x70\x6C\x69\x74","\x6D\x78\x67\x72\x61\x70\x68","\x67\x65\x74\x58\x6D\x6C","\x70\x61\x72\x73\x65\x53\x74\x65\x6E\x63\x69\x6C\x53\x65\x74","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x6E\x61\x6D\x65","\x6E\x6F\x64\x65\x54\x79\x70\x65","\x4E\x4F\x44\x45\x54\x59\x50\x45\x5F\x45\x4C\x45\x4D\x45\x4E\x54","\x5F","\x72\x65\x70\x6C\x61\x63\x65","\x61\x64\x64\x53\x74\x65\x6E\x63\x69\x6C","\x77","\x68","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x70\x72\x6F\x64\x75\x63\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65\x72","\x64\x6F\x6E\x65","\x73\x65\x74\x43\x6F\x6E\x73\x75\x6D\x65\x72","\x65\x78\x65\x63\x75\x74\x65","\x73\x65\x74\x44\x61\x74\x61","\x64\x61\x74\x61","\x65\x72\x72\x6F\x72","\x63\x61\x6E\x63\x65\x6C","\x61\x6C\x65\x72\x74"];var useLocalStorage=(mxClient[_0xeed2[0]]|| urlParams[_0xeed2[1]]== _0xeed2[2])&& typeof (localStorage)!= _0xeed2[3];var fileSupport=window[_0xeed2[4]]!= null&& window[_0xeed2[5]]!= null&& window[_0xeed2[6]]!= null;var touchStyle=mxClient[_0xeed2[0]]|| urlParams[_0xeed2[7]]== _0xeed2[8];var counter=0;try{var op=window;while(op[_0xeed2[9]]!= null&& !isNaN(op[_0xeed2[9]][_0xeed2[10]])){op= op[_0xeed2[9]]};if(op!= null){op[_0xeed2[10]]++;counter= op[_0xeed2[10]]}}catch(e){};Editor= function(){mxEventSource[_0xeed2[11]](this);this[_0xeed2[12]]();this[_0xeed2[13]]();this[_0xeed2[14]]= new Graph();this[_0xeed2[15]]= new mxOutline(this[_0xeed2[14]]);this[_0xeed2[15]][_0xeed2[16]]= true;this[_0xeed2[17]]= this[_0xeed2[18]]();this[_0xeed2[19]]= _0xeed2[20];this[_0xeed2[21]]= null;this[_0xeed2[22]]= function(){return this[_0xeed2[21]]|| mxResources[_0xeed2[24]](_0xeed2[23],[counter])+ _0xeed2[25]};this[_0xeed2[26]]= function(){return this[_0xeed2[21]]};this[_0xeed2[27]]= function(_0x1d1bx6){this[_0xeed2[19]]= _0x1d1bx6;this[_0xeed2[29]]( new mxEventObject(_0xeed2[28]))};this[_0xeed2[30]]= function(){return this[_0xeed2[19]]};this[_0xeed2[31]]= false;this[_0xeed2[32]]= function(){this[_0xeed2[31]]= true};this[_0xeed2[14]][_0xeed2[36]]()[_0xeed2[35]](mxEvent.CHANGE,mxUtils[_0xeed2[34]](this,function(){this[_0xeed2[32]][_0xeed2[33]](this,arguments)}));window[_0xeed2[37]]= mxUtils[_0xeed2[34]](this,function(){if(this[_0xeed2[31]]){return mxResources[_0xeed2[24]](_0xeed2[38])}});this[_0xeed2[14]][_0xeed2[39]]= false;this[_0xeed2[14]][_0xeed2[40]]= true;this[_0xeed2[14]][_0xeed2[41]]= null};mxUtils[_0xeed2[42]](Editor,mxEventSource);Editor[_0xeed2[44]][_0xeed2[43]]= IMAGE_PATH+ _0xeed2[45];Editor[_0xeed2[44]][_0xeed2[46]]= IMAGE_PATH+ _0xeed2[47];Editor[_0xeed2[44]][_0xeed2[48]]= function(_0x1d1bx7){var _0x1d1bx8= new mxCodec(_0x1d1bx7[_0xeed2[49]]);if(_0x1d1bx7[_0xeed2[50]]== _0xeed2[51]){this[_0xeed2[14]][_0xeed2[53]][_0xeed2[52]]= 1;this[_0xeed2[14]][_0xeed2[54]]= _0x1d1bx7[_0xeed2[56]](_0xeed2[55])!= _0xeed2[57];this[_0xeed2[14]][_0xeed2[59]][_0xeed2[58]]= _0x1d1bx7[_0xeed2[56]](_0xeed2[60])!= _0xeed2[57];this[_0xeed2[14]][_0xeed2[62]](_0x1d1bx7[_0xeed2[56]](_0xeed2[61])!= _0xeed2[57]);this[_0xeed2[14]][_0xeed2[64]](_0x1d1bx7[_0xeed2[56]](_0xeed2[63])!= _0xeed2[57]);this[_0xeed2[14]][_0xeed2[65]]= _0x1d1bx7[_0xeed2[56]](_0xeed2[66])!= _0xeed2[57];this[_0xeed2[14]][_0xeed2[40]]= _0x1d1bx7[_0xeed2[56]](_0xeed2[40])!= _0xeed2[57];if(!this[_0xeed2[14]][_0xeed2[40]]){this[_0xeed2[14]][_0xeed2[68]][_0xeed2[67]]= 0;this[_0xeed2[14]][_0xeed2[68]][_0xeed2[69]]= 0;this[_0xeed2[14]][_0xeed2[53]][_0xeed2[71]][_0xeed2[70]]= Number(_0x1d1bx7[_0xeed2[56]](_0xeed2[72])|| 0);this[_0xeed2[14]][_0xeed2[53]][_0xeed2[71]][_0xeed2[73]]= Number(_0x1d1bx7[_0xeed2[56]](_0xeed2[74])|| 0)};this[_0xeed2[14]][_0xeed2[75]]= _0x1d1bx7[_0xeed2[56]](_0xeed2[76])== _0xeed2[8];this[_0xeed2[14]][_0xeed2[77]]= this[_0xeed2[14]][_0xeed2[75]];this[_0xeed2[14]][_0xeed2[78]]= this[_0xeed2[14]][_0xeed2[77]];var _0x1d1bx9=_0x1d1bx7[_0xeed2[56]](_0xeed2[79]);if(_0x1d1bx9!= null){this[_0xeed2[14]][_0xeed2[79]]= _0x1d1bx9}else {this[_0xeed2[14]][_0xeed2[79]]= 1.5};var _0x1d1bxa=_0x1d1bx7[_0xeed2[56]](_0xeed2[80]);var _0x1d1bxb=_0x1d1bx7[_0xeed2[56]](_0xeed2[81]);if(_0x1d1bxa!= null&& _0x1d1bxb!= null){this[_0xeed2[14]][_0xeed2[82]]= new mxRectangle(0,0,parseFloat(_0x1d1bxa),parseFloat(_0x1d1bxb));this[_0xeed2[15]][_0xeed2[15]][_0xeed2[82]]= this[_0xeed2[14]][_0xeed2[82]]};var _0x1d1bxc=_0x1d1bx7[_0xeed2[56]](_0xeed2[41]);if(_0x1d1bxc!= null&& _0x1d1bxc[_0xeed2[83]]> 0){this[_0xeed2[14]][_0xeed2[41]]= _0x1d1bxc};_0x1d1bx8[_0xeed2[84]](_0x1d1bx7,this[_0xeed2[14]][_0xeed2[36]]());this[_0xeed2[85]]()}};Editor[_0xeed2[44]][_0xeed2[86]]= function(){var _0x1d1bxd= new mxCodec(mxUtils[_0xeed2[87]]());var _0x1d1bx7=_0x1d1bxd[_0xeed2[88]](this[_0xeed2[14]][_0xeed2[36]]());if(this[_0xeed2[14]][_0xeed2[53]][_0xeed2[71]][_0xeed2[70]]!= 0|| this[_0xeed2[14]][_0xeed2[53]][_0xeed2[71]][_0xeed2[73]]!= 0){_0x1d1bx7[_0xeed2[90]](_0xeed2[72],Math[_0xeed2[89]](this[_0xeed2[14]][_0xeed2[53]][_0xeed2[71]][_0xeed2[70]]* 100)/ 100);_0x1d1bx7[_0xeed2[90]](_0xeed2[74],Math[_0xeed2[89]](this[_0xeed2[14]][_0xeed2[53]][_0xeed2[71]][_0xeed2[73]]* 100)/ 100)};_0x1d1bx7[_0xeed2[90]](_0xeed2[55],(this[_0xeed2[14]][_0xeed2[91]]())?_0xeed2[8]:_0xeed2[57]);_0x1d1bx7[_0xeed2[90]](_0xeed2[60],(this[_0xeed2[14]][_0xeed2[59]][_0xeed2[58]])?_0xeed2[8]:_0xeed2[57]);_0x1d1bx7[_0xeed2[90]](_0xeed2[60],(this[_0xeed2[14]][_0xeed2[59]][_0xeed2[58]])?_0xeed2[8]:_0xeed2[57]);_0x1d1bx7[_0xeed2[90]](_0xeed2[61],(this[_0xeed2[14]][_0xeed2[93]][_0xeed2[92]]())?_0xeed2[8]:_0xeed2[57]);_0x1d1bx7[_0xeed2[90]](_0xeed2[63],(this[_0xeed2[14]][_0xeed2[94]][_0xeed2[92]]())?_0xeed2[8]:_0xeed2[57]);_0x1d1bx7[_0xeed2[90]](_0xeed2[66],(this[_0xeed2[14]][_0xeed2[65]])?_0xeed2[8]:_0xeed2[57]);_0x1d1bx7[_0xeed2[90]](_0xeed2[76],(this[_0xeed2[14]][_0xeed2[75]])?_0xeed2[8]:_0xeed2[57]);_0x1d1bx7[_0xeed2[90]](_0xeed2[79],this[_0xeed2[14]][_0xeed2[79]]);_0x1d1bx7[_0xeed2[90]](_0xeed2[80],this[_0xeed2[14]][_0xeed2[82]][_0xeed2[95]]);_0x1d1bx7[_0xeed2[90]](_0xeed2[81],this[_0xeed2[14]][_0xeed2[82]][_0xeed2[96]]);if(!this[_0xeed2[14]][_0xeed2[40]]){_0x1d1bx7[_0xeed2[90]](_0xeed2[40],_0xeed2[57])};if(this[_0xeed2[14]][_0xeed2[41]]!= null){_0x1d1bx7[_0xeed2[90]](_0xeed2[41],this[_0xeed2[14]][_0xeed2[41]])};return _0x1d1bx7};Editor[_0xeed2[44]][_0xeed2[85]]= function(){var _0x1d1bxe=this[_0xeed2[14]];var _0x1d1bxf=this[_0xeed2[15]];if(_0x1d1bxe[_0xeed2[68]]!= null&& _0x1d1bxf[_0xeed2[15]][_0xeed2[68]]!= null){if(_0x1d1bxe[_0xeed2[41]]!= null){if(_0x1d1bxe[_0xeed2[41]]== _0xeed2[97]){_0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[98]]= _0xeed2[100]}else {if(_0x1d1bxe[_0xeed2[53]][_0xeed2[101]]!= null){_0x1d1bxe[_0xeed2[53]][_0xeed2[101]][_0xeed2[102]]= _0x1d1bxe[_0xeed2[41]];_0x1d1bxe[_0xeed2[53]][_0xeed2[101]][_0xeed2[103]]()};_0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[98]]= _0x1d1bxe[_0xeed2[41]]}}else {_0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[98]]= _0xeed2[20]};if(_0x1d1bxe[_0xeed2[75]]){_0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[98]]= _0xeed2[104];_0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[105]]= _0xeed2[106];_0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[107]]= _0xeed2[108];_0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[109]]= _0xeed2[110];_0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[111]]= _0xeed2[110];_0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[112]]= _0xeed2[113];_0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[114]]= _0xeed2[113]}else {_0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[115]]= _0xeed2[20]};_0x1d1bxf[_0xeed2[15]][_0xeed2[68]][_0xeed2[99]][_0xeed2[98]]= _0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[98]];if(_0x1d1bxf[_0xeed2[15]][_0xeed2[75]]!= _0x1d1bxe[_0xeed2[75]]|| _0x1d1bxf[_0xeed2[15]][_0xeed2[79]]!= _0x1d1bxe[_0xeed2[79]]){_0x1d1bxf[_0xeed2[15]][_0xeed2[79]]= _0x1d1bxe[_0xeed2[79]];_0x1d1bxf[_0xeed2[15]][_0xeed2[75]]= _0x1d1bxe[_0xeed2[75]];_0x1d1bxf[_0xeed2[15]][_0xeed2[53]][_0xeed2[116]]()};if(_0x1d1bxe[_0xeed2[40]]&& _0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[117]]== _0xeed2[118]&& !touchStyle){_0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[117]]= _0xeed2[119]}else {if(!_0x1d1bxe[_0xeed2[40]]|| touchStyle){_0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[117]]= _0xeed2[118]}};var _0x1d1bx10=(mxClient[_0xeed2[120]]&& document[_0xeed2[121]]>= 9)?_0xeed2[122]+ this[_0xeed2[46]]+ _0xeed2[123]:_0xeed2[97];_0x1d1bxe[_0xeed2[68]][_0xeed2[99]][_0xeed2[124]]= (!_0x1d1bxe[_0xeed2[75]]&& _0x1d1bxe[_0xeed2[91]]())?_0xeed2[122]+ this[_0xeed2[43]]+ _0xeed2[123]:_0x1d1bx10;if(_0x1d1bxe[_0xeed2[53]][_0xeed2[101]]!= null){_0x1d1bxe[_0xeed2[53]][_0xeed2[101]][_0xeed2[125]][_0xeed2[99]][_0xeed2[124]]= (this[_0xeed2[14]][_0xeed2[91]]())?_0xeed2[122]+ this[_0xeed2[43]]+ _0xeed2[123]:_0xeed2[97]}}};Editor[_0xeed2[44]][_0xeed2[12]]= function(){if(mxClient[_0xeed2[126]]){mxClient[_0xeed2[129]](_0xeed2[127],CSS_PATH+ _0xeed2[128])};mxResources[_0xeed2[130]]= false;mxResources[_0xeed2[131]](RESOURCE_BASE);mxConstants[_0xeed2[132]]= 0.3;var _0x1d1bx11=mxConnectionHandler[_0xeed2[44]][_0xeed2[133]];mxConnectionHandler[_0xeed2[44]][_0xeed2[133]]= function(){var _0x1d1bx12=_0x1d1bx11[_0xeed2[33]](this,arguments);_0x1d1bx12[_0xeed2[134]]= mxUtils[_0xeed2[34]](this,function(_0x1d1bx13,_0x1d1bx14){if(this[_0xeed2[135]]()){return true};return mxCellMarker[_0xeed2[44]][_0xeed2[134]][_0xeed2[33]](_0x1d1bx12,arguments)});return _0x1d1bx12};mxConstants[_0xeed2[136]]= _0xeed2[137];mxConstants[_0xeed2[138]]= _0xeed2[139];mxConstants[_0xeed2[140]]= _0xeed2[141];mxConstants[_0xeed2[142]]= _0xeed2[143];mxConstants[_0xeed2[144]]= _0xeed2[143];mxConstants[_0xeed2[145]]= _0xeed2[139];mxConstants[_0xeed2[146]]= _0xeed2[143];mxConstants[_0xeed2[147]]= _0xeed2[148];mxConstants[_0xeed2[149]]= _0xeed2[143];mxConstants[_0xeed2[150]]= _0xeed2[143];mxConstants[_0xeed2[151]]= _0xeed2[148];mxConstants[_0xeed2[152]]= _0xeed2[141];mxGraph[_0xeed2[44]][_0xeed2[153]]= _0xeed2[154];mxGraph[_0xeed2[44]][_0xeed2[79]]= 1;mxRubberband[_0xeed2[44]][_0xeed2[155]]= 30;mxGraphView[_0xeed2[44]][_0xeed2[156]]= function(_0x1d1bx15){return new mxRectangleShape(_0x1d1bx15,this[_0xeed2[14]][_0xeed2[41]]|| _0xeed2[157],_0xeed2[158])};mxGraphView[_0xeed2[44]][_0xeed2[159]]= function(){var _0x1d1bx16=this[_0xeed2[160]]();var _0x1d1bx17=(_0x1d1bx16[_0xeed2[95]]> 0)?_0x1d1bx16[_0xeed2[70]]/ this[_0xeed2[52]]- this[_0xeed2[71]][_0xeed2[70]]:0;var _0x1d1bx18=(_0x1d1bx16[_0xeed2[96]]> 0)?_0x1d1bx16[_0xeed2[73]]/ this[_0xeed2[52]]- this[_0xeed2[71]][_0xeed2[73]]:0;var _0x1d1bx19=_0x1d1bx16[_0xeed2[95]]/ this[_0xeed2[52]];var _0x1d1bx1a=_0x1d1bx16[_0xeed2[96]]/ this[_0xeed2[52]];var _0x1d1bx1b=this[_0xeed2[14]][_0xeed2[82]];var _0x1d1bx9=this[_0xeed2[14]][_0xeed2[79]];var _0x1d1bxa=_0x1d1bx1b[_0xeed2[95]]* _0x1d1bx9;var _0x1d1bxb=_0x1d1bx1b[_0xeed2[96]]* _0x1d1bx9;var _0x1d1bx1c=Math[_0xeed2[162]](Math[_0xeed2[161]](0,_0x1d1bx17)/ _0x1d1bxa);var _0x1d1bx1d=Math[_0xeed2[162]](Math[_0xeed2[161]](0,_0x1d1bx18)/ _0x1d1bxb);var _0x1d1bx1e=Math[_0xeed2[164]](Math[_0xeed2[163]](1,_0x1d1bx17+ _0x1d1bx19)/ _0x1d1bxa);var _0x1d1bx1f=Math[_0xeed2[164]](Math[_0xeed2[163]](1,_0x1d1bx18+ _0x1d1bx1a)/ _0x1d1bxb);var _0x1d1bx20=_0x1d1bx1e- _0x1d1bx1c;var _0x1d1bx21=_0x1d1bx1f- _0x1d1bx1d;var _0x1d1bx15= new mxRectangle(this[_0xeed2[52]]* (this[_0xeed2[71]][_0xeed2[70]]+ _0x1d1bx1c* _0x1d1bxa),this[_0xeed2[52]]* (this[_0xeed2[71]][_0xeed2[73]]+ _0x1d1bx1d* _0x1d1bxb),this[_0xeed2[52]]* _0x1d1bx20* _0x1d1bxa,this[_0xeed2[52]]* _0x1d1bx21* _0x1d1bxb);return _0x1d1bx15};var _0x1d1bx22=mxGraph[_0xeed2[44]][_0xeed2[165]];mxGraph[_0xeed2[44]][_0xeed2[165]]= function(_0x1d1bx23,_0x1d1bx24){_0x1d1bx22[_0xeed2[33]](this,arguments);if((this[_0xeed2[166]]!= mxConstants[_0xeed2[167]]&& this[_0xeed2[53]][_0xeed2[101]]!= null)&& (!this[_0xeed2[168]]|| !mxUtils[_0xeed2[169]](this[_0xeed2[68]]))){this[_0xeed2[53]][_0xeed2[101]][_0xeed2[125]][_0xeed2[99]][_0xeed2[170]]= _0x1d1bx23+ _0xeed2[171];this[_0xeed2[53]][_0xeed2[101]][_0xeed2[125]][_0xeed2[99]][_0xeed2[172]]= _0x1d1bx24+ _0xeed2[171]}};var _0x1d1bx25=this;mxGraphView[_0xeed2[44]][_0xeed2[173]]= function(){var _0x1d1bxc=this[_0xeed2[14]][_0xeed2[174]]();if(_0x1d1bxc!= null){if(this[_0xeed2[124]]== null|| this[_0xeed2[124]][_0xeed2[175]]!= _0x1d1bxc[_0xeed2[176]]){if(this[_0xeed2[124]]!= null){this[_0xeed2[124]][_0xeed2[177]]()};var _0x1d1bx15= new mxRectangle(0,0,1,1);this[_0xeed2[124]]= new mxImageShape(_0x1d1bx15,_0x1d1bxc[_0xeed2[176]]);this[_0xeed2[124]][_0xeed2[166]]= this[_0xeed2[14]][_0xeed2[166]];this[_0xeed2[124]][_0xeed2[12]](this[_0xeed2[178]]);this[_0xeed2[124]][_0xeed2[179]]()};this[_0xeed2[180]](this[_0xeed2[124]],_0x1d1bxc)}else {if(this[_0xeed2[124]]!= null){this[_0xeed2[124]][_0xeed2[177]]();this[_0xeed2[124]]= null}};if(this[_0xeed2[14]][_0xeed2[75]]){var _0x1d1bx15=this[_0xeed2[159]]();if(this[_0xeed2[101]]== null){this[_0xeed2[101]]= this[_0xeed2[156]](_0x1d1bx15);this[_0xeed2[101]][_0xeed2[52]]= 1;this[_0xeed2[101]][_0xeed2[181]]= true;this[_0xeed2[101]][_0xeed2[166]]= mxConstants[_0xeed2[182]];this[_0xeed2[101]][_0xeed2[12]](this[_0xeed2[14]][_0xeed2[68]]);this[_0xeed2[14]][_0xeed2[68]][_0xeed2[184]][_0xeed2[99]][_0xeed2[183]]= _0xeed2[185];this[_0xeed2[14]][_0xeed2[68]][_0xeed2[186]](this[_0xeed2[101]][_0xeed2[125]],this[_0xeed2[14]][_0xeed2[68]][_0xeed2[184]]);this[_0xeed2[101]][_0xeed2[179]]();this[_0xeed2[101]][_0xeed2[125]][_0xeed2[187]]= _0xeed2[188];this[_0xeed2[101]][_0xeed2[125]][_0xeed2[99]][_0xeed2[189]]= _0xeed2[190];mxEvent[_0xeed2[35]](this[_0xeed2[101]][_0xeed2[125]],_0xeed2[191],mxUtils[_0xeed2[34]](this,function(_0x1d1bx14){this[_0xeed2[14]][_0xeed2[192]](_0x1d1bx14)}));mxEvent[_0xeed2[198]](this[_0xeed2[101]][_0xeed2[125]],mxUtils[_0xeed2[34]](this,function(_0x1d1bx14){this[_0xeed2[14]][_0xeed2[193]](mxEvent.MOUSE_DOWN, new mxMouseEvent(_0x1d1bx14))}),mxUtils[_0xeed2[34]](this,function(_0x1d1bx14){if(this[_0xeed2[14]][_0xeed2[93]]!= null&& this[_0xeed2[14]][_0xeed2[93]][_0xeed2[194]]()){this[_0xeed2[14]][_0xeed2[93]][_0xeed2[195]]()};if(this[_0xeed2[14]][_0xeed2[196]]&& !mxEvent[_0xeed2[197]](_0x1d1bx14)){this[_0xeed2[14]][_0xeed2[193]](mxEvent.MOUSE_MOVE, new mxMouseEvent(_0x1d1bx14))}}),mxUtils[_0xeed2[34]](this,function(_0x1d1bx14){this[_0xeed2[14]][_0xeed2[193]](mxEvent.MOUSE_UP, new mxMouseEvent(_0x1d1bx14))}))}else {this[_0xeed2[101]][_0xeed2[52]]= 1;this[_0xeed2[101]][_0xeed2[199]]= _0x1d1bx15;this[_0xeed2[101]][_0xeed2[179]]()};this[_0xeed2[101]][_0xeed2[125]][_0xeed2[99]][_0xeed2[124]]= (this[_0xeed2[14]][_0xeed2[91]]())?_0xeed2[122]+ _0x1d1bx25[_0xeed2[43]]+ _0xeed2[123]:_0xeed2[97]}else {if(this[_0xeed2[101]]!= null){this[_0xeed2[101]][_0xeed2[177]]();this[_0xeed2[101]]= null}}};mxGraph[_0xeed2[44]][_0xeed2[200]]= function(_0x1d1bx26,_0x1d1bx27,_0x1d1bx28){var _0x1d1bx29=this[_0xeed2[53]][_0xeed2[52]];var _0x1d1bx2a=this[_0xeed2[53]][_0xeed2[71]];var _0x1d1bx1b=this[_0xeed2[82]];var _0x1d1bx9=_0x1d1bx29* this[_0xeed2[79]];var _0x1d1bx2b=this[_0xeed2[53]][_0xeed2[159]]();_0x1d1bx27= _0x1d1bx2b[_0xeed2[95]];_0x1d1bx28= _0x1d1bx2b[_0xeed2[96]];var _0x1d1bx15= new mxRectangle(_0x1d1bx29* _0x1d1bx2a[_0xeed2[70]],_0x1d1bx29* _0x1d1bx2a[_0xeed2[73]],_0x1d1bx1b[_0xeed2[95]]* _0x1d1bx9,_0x1d1bx1b[_0xeed2[96]]* _0x1d1bx9);_0x1d1bx26= _0x1d1bx26&& Math[_0xeed2[161]](_0x1d1bx15[_0xeed2[95]],_0x1d1bx15[_0xeed2[96]])> this[_0xeed2[201]];var _0x1d1bx2c=(_0x1d1bx26)?Math[_0xeed2[164]](_0x1d1bx27/ _0x1d1bx15[_0xeed2[95]])- 1:0;var _0x1d1bx2d=(_0x1d1bx26)?Math[_0xeed2[164]](_0x1d1bx28/ _0x1d1bx15[_0xeed2[96]])- 1:0;var _0x1d1bx2e=_0x1d1bx2b[_0xeed2[70]]+ _0x1d1bx27;var _0x1d1bx2f=_0x1d1bx2b[_0xeed2[73]]+ _0x1d1bx28;if(this[_0xeed2[202]]== null&& _0x1d1bx2c> 0){this[_0xeed2[202]]= []};if(this[_0xeed2[202]]!= null){for(var _0x1d1bx30=0;_0x1d1bx30<= _0x1d1bx2c;_0x1d1bx30++){var _0x1d1bx31=[ new mxPoint(_0x1d1bx2b[_0xeed2[70]]+ (_0x1d1bx30+ 1)* _0x1d1bx15[_0xeed2[95]],_0x1d1bx2b[_0xeed2[73]]), new mxPoint(_0x1d1bx2b[_0xeed2[70]]+ (_0x1d1bx30+ 1)* _0x1d1bx15[_0xeed2[95]],_0x1d1bx2f)];if(this[_0xeed2[202]][_0x1d1bx30]!= null){this[_0xeed2[202]][_0x1d1bx30][_0xeed2[52]]= 1;this[_0xeed2[202]][_0x1d1bx30][_0xeed2[203]]= _0x1d1bx31;this[_0xeed2[202]][_0x1d1bx30][_0xeed2[179]]()}else {var _0x1d1bx32= new mxPolyline(_0x1d1bx31,this[_0xeed2[153]],this[_0xeed2[52]]);_0x1d1bx32[_0xeed2[166]]= this[_0xeed2[166]];_0x1d1bx32[_0xeed2[204]]= this[_0xeed2[205]];_0x1d1bx32[_0xeed2[206]]= false;_0x1d1bx32[_0xeed2[52]]= _0x1d1bx29;_0x1d1bx32[_0xeed2[12]](this[_0xeed2[53]][_0xeed2[178]]);_0x1d1bx32[_0xeed2[179]]();this[_0xeed2[202]][_0x1d1bx30]= _0x1d1bx32}};for(var _0x1d1bx30=_0x1d1bx2c;_0x1d1bx30< this[_0xeed2[202]][_0xeed2[83]];_0x1d1bx30++){this[_0xeed2[202]][_0x1d1bx30][_0xeed2[177]]()};this[_0xeed2[202]][_0xeed2[207]](_0x1d1bx2c,this[_0xeed2[202]][_0xeed2[83]]- _0x1d1bx2c)};if(this[_0xeed2[208]]== null&& _0x1d1bx2d> 0){this[_0xeed2[208]]= []};if(this[_0xeed2[208]]!= null){for(var _0x1d1bx30=0;_0x1d1bx30<= _0x1d1bx2d;_0x1d1bx30++){var _0x1d1bx31=[ new mxPoint(_0x1d1bx2b[_0xeed2[70]],_0x1d1bx2b[_0xeed2[73]]+ (_0x1d1bx30+ 1)* _0x1d1bx15[_0xeed2[96]]), new mxPoint(_0x1d1bx2e,_0x1d1bx2b[_0xeed2[73]]+ (_0x1d1bx30+ 1)* _0x1d1bx15[_0xeed2[96]])];if(this[_0xeed2[208]][_0x1d1bx30]!= null){this[_0xeed2[208]][_0x1d1bx30][_0xeed2[52]]= 1;this[_0xeed2[208]][_0x1d1bx30][_0xeed2[203]]= _0x1d1bx31;this[_0xeed2[208]][_0x1d1bx30][_0xeed2[179]]()}else {var _0x1d1bx32= new mxPolyline(_0x1d1bx31,this[_0xeed2[153]],_0x1d1bx29);_0x1d1bx32[_0xeed2[166]]= this[_0xeed2[166]];_0x1d1bx32[_0xeed2[204]]= this[_0xeed2[205]];_0x1d1bx32[_0xeed2[206]]= false;_0x1d1bx32[_0xeed2[52]]= _0x1d1bx29;_0x1d1bx32[_0xeed2[12]](this[_0xeed2[53]][_0xeed2[178]]);_0x1d1bx32[_0xeed2[179]]();this[_0xeed2[208]][_0x1d1bx30]= _0x1d1bx32}};for(var _0x1d1bx30=_0x1d1bx2d;_0x1d1bx30< this[_0xeed2[208]][_0xeed2[83]];_0x1d1bx30++){this[_0xeed2[208]][_0x1d1bx30][_0xeed2[177]]()};this[_0xeed2[208]][_0xeed2[207]](_0x1d1bx2d,this[_0xeed2[208]][_0xeed2[83]]- _0x1d1bx2d)}};mxEdgeHandler[_0xeed2[44]][_0xeed2[209]]= true;mxGraphHandler[_0xeed2[44]][_0xeed2[58]]= true;var _0x1d1bx33=mxGraphHandler[_0xeed2[44]][_0xeed2[210]];mxGraphHandler[_0xeed2[44]][_0xeed2[210]]= function(_0x1d1bx34,_0x1d1bx35,_0x1d1bx14){for(var _0x1d1bx30=0;_0x1d1bx30< _0x1d1bx35[_0xeed2[83]];_0x1d1bx30++){if(this[_0xeed2[14]][_0xeed2[36]]()[_0xeed2[211]](_0x1d1bx35[_0x1d1bx30])){var _0x1d1bx36=this[_0xeed2[14]][_0xeed2[212]](_0x1d1bx35[_0x1d1bx30]);if(_0x1d1bx36!= null&& _0x1d1bx36[_0xeed2[213]]){return false}}};return _0x1d1bx33[_0xeed2[33]](this,arguments)};mxGuide[_0xeed2[44]][_0xeed2[214]]= function(_0x1d1bx14){return !mxEvent[_0xeed2[215]](_0x1d1bx14)};mxPopupMenuAddItem= mxPopupMenu[_0xeed2[44]][_0xeed2[216]];mxPopupMenu[_0xeed2[44]][_0xeed2[216]]= function(_0x1d1bx37,_0x1d1bx38,_0x1d1bx39,_0x1d1bx34,_0x1d1bx3a,_0x1d1bx3b){var _0x1d1bx3c=mxPopupMenuAddItem[_0xeed2[33]](this,arguments);if(_0x1d1bx3b!= null&& !_0x1d1bx3b){mxEvent[_0xeed2[35]](_0x1d1bx3c,_0xeed2[217],function(_0x1d1bx14){mxEvent[_0xeed2[218]](_0x1d1bx14)})};return _0x1d1bx3c};var _0x1d1bx3d=mxGraphHandler[_0xeed2[44]][_0xeed2[219]];mxGraphHandler[_0xeed2[44]][_0xeed2[219]]= function(_0x1d1bx3e){var _0x1d1bx3f=this[_0xeed2[14]][_0xeed2[36]]();var _0x1d1bx40=_0x1d1bx3f[_0xeed2[221]](this[_0xeed2[14]][_0xeed2[220]]());var _0x1d1bx41=_0x1d1bx3d[_0xeed2[33]](this,arguments);var _0x1d1bx34=_0x1d1bx3f[_0xeed2[221]](_0x1d1bx41);if(_0x1d1bx40== null|| (_0x1d1bx40!= _0x1d1bx41&& _0x1d1bx40!= _0x1d1bx34)){while(!this[_0xeed2[14]][_0xeed2[222]](_0x1d1bx41)&& !this[_0xeed2[14]][_0xeed2[222]](_0x1d1bx34)&& _0x1d1bx3f[_0xeed2[211]](_0x1d1bx34)&& !this[_0xeed2[14]][_0xeed2[223]](_0x1d1bx34)){_0x1d1bx41= _0x1d1bx34;_0x1d1bx34= this[_0xeed2[14]][_0xeed2[36]]()[_0xeed2[221]](_0x1d1bx41)}};return _0x1d1bx41};var _0x1d1bx42=mxGraphHandler[_0xeed2[44]][_0xeed2[224]];mxGraphHandler[_0xeed2[44]][_0xeed2[224]]= function(_0x1d1bx41){var _0x1d1bx3c=_0x1d1bx42[_0xeed2[33]](this,arguments);var _0x1d1bx3f=this[_0xeed2[14]][_0xeed2[36]]();var _0x1d1bx40=_0x1d1bx3f[_0xeed2[221]](this[_0xeed2[14]][_0xeed2[220]]());var _0x1d1bx34=_0x1d1bx3f[_0xeed2[221]](_0x1d1bx41);if(_0x1d1bx40== null|| (_0x1d1bx40!= _0x1d1bx41&& _0x1d1bx40!= _0x1d1bx34)){if(!this[_0xeed2[14]][_0xeed2[222]](_0x1d1bx41)&& _0x1d1bx3f[_0xeed2[211]](_0x1d1bx34)&& !this[_0xeed2[14]][_0xeed2[223]](_0x1d1bx34)){_0x1d1bx3c= true}};return _0x1d1bx3c};mxGraphHandler[_0xeed2[44]][_0xeed2[225]]= function(_0x1d1bx3e){var _0x1d1bx41=_0x1d1bx3e[_0xeed2[226]]();if(_0x1d1bx41== null){_0x1d1bx41= this[_0xeed2[227]]};var _0x1d1bx3f=this[_0xeed2[14]][_0xeed2[36]]();var _0x1d1bx34=_0x1d1bx3f[_0xeed2[221]](_0x1d1bx41);while(this[_0xeed2[14]][_0xeed2[222]](_0x1d1bx41)&& _0x1d1bx3f[_0xeed2[211]](_0x1d1bx34)&& !this[_0xeed2[14]][_0xeed2[223]](_0x1d1bx34)){_0x1d1bx41= _0x1d1bx34;_0x1d1bx34= _0x1d1bx3f[_0xeed2[221]](_0x1d1bx41)};this[_0xeed2[14]][_0xeed2[229]](_0x1d1bx41,_0x1d1bx3e[_0xeed2[228]]())};mxPanningHandler[_0xeed2[44]][_0xeed2[230]]= function(_0x1d1bx3e){var _0x1d1bx41=_0x1d1bx3e[_0xeed2[226]]();var _0x1d1bx3f=this[_0xeed2[14]][_0xeed2[36]]();var _0x1d1bx34=_0x1d1bx3f[_0xeed2[221]](_0x1d1bx41);while(_0x1d1bx3f[_0xeed2[211]](_0x1d1bx34)&& !this[_0xeed2[14]][_0xeed2[223]](_0x1d1bx34)){if(this[_0xeed2[14]][_0xeed2[222]](_0x1d1bx34)){_0x1d1bx41= _0x1d1bx34};_0x1d1bx34= _0x1d1bx3f[_0xeed2[221]](_0x1d1bx34)};return _0x1d1bx41}};Editor[_0xeed2[44]][_0xeed2[18]]= function(){var _0x1d1bxe=this[_0xeed2[14]];var _0x1d1bx43= new mxUndoManager();var _0x1d1bx44=function(_0x1d1bx45,_0x1d1bx14){_0x1d1bx43[_0xeed2[233]](_0x1d1bx14[_0xeed2[232]](_0xeed2[231]))};_0x1d1bxe[_0xeed2[36]]()[_0xeed2[35]](mxEvent.UNDO,_0x1d1bx44);_0x1d1bxe[_0xeed2[234]]()[_0xeed2[35]](mxEvent.UNDO,_0x1d1bx44);var _0x1d1bx46=function(_0x1d1bx45,_0x1d1bx14){var _0x1d1bx47=_0x1d1bxe[_0xeed2[236]](_0x1d1bx14[_0xeed2[232]](_0xeed2[231])[_0xeed2[235]]);var _0x1d1bx35=[];for(var _0x1d1bx30=1;_0x1d1bx30< _0x1d1bx47[_0xeed2[83]];_0x1d1bx30++){if(_0x1d1bxe[_0xeed2[53]][_0xeed2[237]](_0x1d1bx47[_0x1d1bx30])!= null){_0x1d1bx35[_0xeed2[238]](_0x1d1bx47[_0x1d1bx30])}};_0x1d1bxe[_0xeed2[239]](_0x1d1bx35)};_0x1d1bx43[_0xeed2[35]](mxEvent.UNDO,_0x1d1bx46);_0x1d1bx43[_0xeed2[35]](mxEvent.REDO,_0x1d1bx46);return _0x1d1bx43};Editor[_0xeed2[44]][_0xeed2[13]]= function(){mxStencilRegistry[_0xeed2[241]](STENCIL_PATH+ _0xeed2[240])};(function(){mxStencilRegistry[_0xeed2[242]]= {};mxStencilRegistry[_0xeed2[243]]= [];mxStencilRegistry[_0xeed2[244]]= function(_0x1d1bx48){var _0x1d1bx3c=mxStencilRegistry[_0xeed2[245]][_0x1d1bx48];if(_0x1d1bx3c== null){var _0x1d1bx49=mxStencilRegistry[_0xeed2[246]](_0x1d1bx48);if(_0x1d1bx49!= null){var _0x1d1bx4a=mxStencilRegistry[_0xeed2[242]][_0x1d1bx49];if(_0x1d1bx4a!= null){if(mxStencilRegistry[_0xeed2[243]][_0x1d1bx49]== null){mxStencilRegistry[_0xeed2[243]][_0x1d1bx49]= 1;for(var _0x1d1bx30=0;_0x1d1bx30< _0x1d1bx4a[_0xeed2[83]];_0x1d1bx30++){var _0x1d1bx4b=_0x1d1bx4a[_0x1d1bx30];if(_0x1d1bx4b[_0xeed2[248]]()[_0xeed2[247]](_0x1d1bx4b[_0xeed2[83]]- 4,_0x1d1bx4b[_0xeed2[83]])== _0xeed2[25]){mxStencilRegistry[_0xeed2[241]](_0x1d1bx4b,null)}else {if(_0x1d1bx4b[_0xeed2[248]]()[_0xeed2[247]](_0x1d1bx4b[_0xeed2[83]]- 3,_0x1d1bx4b[_0xeed2[83]])== _0xeed2[249]){var _0x1d1bx4c=mxUtils[_0xeed2[250]](_0x1d1bx4b);if(_0x1d1bx4c!= null){eval[_0xeed2[11]](window,_0x1d1bx4c[_0xeed2[251]]())}}else {}}}}}else {mxStencilRegistry[_0xeed2[241]](STENCIL_PATH+ _0xeed2[252]+ _0x1d1bx49+ _0xeed2[25],null)};_0x1d1bx3c= mxStencilRegistry[_0xeed2[245]][_0x1d1bx48]}};return _0x1d1bx3c};mxStencilRegistry[_0xeed2[246]]= function(_0x1d1bx48){var _0x1d1bx4d=_0x1d1bx48[_0xeed2[254]](_0xeed2[253]);var _0x1d1bx4e=null;if(_0x1d1bx4d[_0xeed2[83]]> 0&& _0x1d1bx4d[0]== _0xeed2[255]){_0x1d1bx4e= _0x1d1bx4d[1];for(var _0x1d1bx30=2;_0x1d1bx30< _0x1d1bx4d[_0xeed2[83]]- 1;_0x1d1bx30++){_0x1d1bx4e+= _0xeed2[252]+ _0x1d1bx4d[_0x1d1bx30]}};return _0x1d1bx4e};mxStencilRegistry[_0xeed2[241]]= function(_0x1d1bx4f,_0x1d1bx50,_0x1d1bx51){_0x1d1bx51= (_0x1d1bx51!= null)?_0x1d1bx51:false;var _0x1d1bx52=mxStencilRegistry[_0xeed2[243]][_0x1d1bx4f];if(_0x1d1bx51|| _0x1d1bx52== null){var _0x1d1bx53=false;if(_0x1d1bx52== null){var _0x1d1bx4c=mxUtils[_0xeed2[250]](_0x1d1bx4f);_0x1d1bx52= _0x1d1bx4c[_0xeed2[256]]();mxStencilRegistry[_0xeed2[243]][_0x1d1bx4f]= _0x1d1bx52;_0x1d1bx53= true};mxStencilRegistry[_0xeed2[257]](_0x1d1bx52,_0x1d1bx50,_0x1d1bx53)}};mxStencilRegistry[_0xeed2[257]]= function(_0x1d1bx54,_0x1d1bx50,_0x1d1bx53){_0x1d1bx53= (_0x1d1bx53!= null)?_0x1d1bx53:true;var _0x1d1bx55=_0x1d1bx54[_0xeed2[258]];var _0x1d1bx56=_0x1d1bx55[_0xeed2[184]];var _0x1d1bx57=_0xeed2[20];var _0x1d1bx48=_0x1d1bx55[_0xeed2[56]](_0xeed2[259]);if(_0x1d1bx48!= null){_0x1d1bx57= _0x1d1bx48+ _0xeed2[253]};while(_0x1d1bx56!= null){if(_0x1d1bx56[_0xeed2[260]]== mxConstants[_0xeed2[261]]){_0x1d1bx48= _0x1d1bx56[_0xeed2[56]](_0xeed2[259]);if(_0x1d1bx48!= null){_0x1d1bx57= _0x1d1bx57[_0xeed2[248]]();var _0x1d1bx58=_0x1d1bx48[_0xeed2[263]](/ /g,_0xeed2[262]);if(_0x1d1bx53){mxStencilRegistry[_0xeed2[264]](_0x1d1bx57+ _0x1d1bx58[_0xeed2[248]](), new mxStencil(_0x1d1bx56))};if(_0x1d1bx50!= null){var _0x1d1bx19=_0x1d1bx56[_0xeed2[56]](_0xeed2[265]);var _0x1d1bx1a=_0x1d1bx56[_0xeed2[56]](_0xeed2[266]);_0x1d1bx19= (_0x1d1bx19== null)?80:parseInt(_0x1d1bx19,10);_0x1d1bx1a= (_0x1d1bx1a== null)?80:parseInt(_0x1d1bx1a,10);_0x1d1bx50(_0x1d1bx57,_0x1d1bx58,_0x1d1bx48,_0x1d1bx19,_0x1d1bx1a)}}};_0x1d1bx56= _0x1d1bx56[_0xeed2[267]]}}})();OpenFile= function(_0x1d1bx59){this[_0xeed2[268]]= null;this[_0xeed2[269]]= null;this[_0xeed2[270]]= _0x1d1bx59};OpenFile[_0xeed2[44]][_0xeed2[271]]= function(_0x1d1bx6){this[_0xeed2[269]]= _0x1d1bx6;this[_0xeed2[272]]()};OpenFile[_0xeed2[44]][_0xeed2[273]]= function(_0x1d1bx6,_0x1d1bx5a){this[_0xeed2[274]]= _0x1d1bx6;this[_0xeed2[21]]= _0x1d1bx5a;this[_0xeed2[272]]()};OpenFile[_0xeed2[44]][_0xeed2[275]]= function(_0x1d1bx5b){this[_0xeed2[276]]();mxUtils[_0xeed2[277]](_0x1d1bx5b)};OpenFile[_0xeed2[44]][_0xeed2[272]]= function(){if(this[_0xeed2[269]]!= null&& this[_0xeed2[274]]!= null){this[_0xeed2[269]](this[_0xeed2[274]],this[_0xeed2[21]]);this[_0xeed2[276]]()}};OpenFile[_0xeed2[44]][_0xeed2[276]]= function(){if(this[_0xeed2[270]]!= null){this[_0xeed2[270]]()}} \ No newline at end of file +/** + * $Id: Editor.js,v 1.14 2013/03/06 17:57:10 boris Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ +// Specifies if local storage should be used (eg. on the iPad which has no filesystem) +var useLocalStorage = (mxClient.IS_TOUCH || urlParams['storage'] == 'local') && typeof(localStorage) != 'undefined'; +var fileSupport = window.File != null && window.FileReader != null && window.FileList != null; + +// Specifies if connector should be shown on selected cells +var touchStyle = mxClient.IS_TOUCH || urlParams['touch'] == '1'; + +// Counts open editor tabs (must be global for cross-window access) +var counter = 0; + +// Cross-domain window access is not allowed in FF, so if we +// were opened from another domain then this will fail. +try { + var op = window; + + while (op.opener != null && !isNaN(op.opener.counter)) { + op = op.opener; + } + + // Increments the counter in the first opener in the chain + if (op != null) { + op.counter++; + counter = op.counter; + } +} catch (e) { + // ignore +} + +/** + * Editor constructor executed on page load. + */ +Editor = function() { + mxEventSource.call(this); + this.init(); + this.initStencilRegistry(); + this.graph = new Graph(); + this.outline = new mxOutline(this.graph); + this.outline.updateOnPan = true; + this.undoManager = this.createUndoManager(); + this.status = ''; + + // Contains the name which was used for the last save. Default value is null. + this.filename = null; + + this.getOrCreateFilename = function() { + return this.filename || mxResources.get('drawing', [counter]) + '.xml'; + }; + + this.getFilename = function() { + return this.filename; + }; + + // Sets the status and fires a statusChanged event + this.setStatus = function(value) { + this.status = value; + this.fireEvent(new mxEventObject('statusChanged')); + }; + + // Returns the current status + this.getStatus = function() { + return this.status; + }; + + // Contains the current modified state of the diagram. This is false for + // new diagrams and after the diagram was saved. + this.modified = false; + + // Updates modified state if graph changes + this.graphChangeListener = function() { + this.modified = true; + }; + this.graph.getModel().addListener(mxEvent.CHANGE, mxUtils.bind(this, function() { + this.graphChangeListener.apply(this, arguments); + })); + + // Installs dialog if browser window is closed without saving + // This must be disabled during save and image export + window.onbeforeunload = mxUtils.bind(this, function() { + if (this.modified) { + return mxResources.get('allChangesLost'); + } + }); + + // Sets persistent graph state defaults + this.graph.resetViewOnRootChange = false; + this.graph.scrollbars = true; + this.graph.background = null; +}; + +// Editor inherits from mxEventSource +mxUtils.extend(Editor, mxEventSource); + +/** + * Specifies the image URL to be used for the grid. + */ +Editor.prototype.gridImage = IMAGE_PATH + '/grid.gif'; + +/** + * Specifies the image URL to be used for the transparent background. + */ +Editor.prototype.transparentImage = IMAGE_PATH + '/transparent.gif'; + +/** + * Sets the XML node for the current diagram. + */ +Editor.prototype.setGraphXml = function(node) { + var dec = new mxCodec(node.ownerDocument); + + if (node.nodeName == 'mxGraphModel') { + this.graph.view.scale = 1; + this.graph.gridEnabled = node.getAttribute('grid') != '0'; + this.graph.graphHandler.guidesEnabled = node.getAttribute('guides') != '0'; + this.graph.setTooltips(node.getAttribute('tooltips') != '0'); + this.graph.setConnectable(node.getAttribute('connect') != '0'); + this.graph.foldingEnabled = node.getAttribute('fold') != '0'; + this.graph.scrollbars = node.getAttribute('scrollbars') != '0'; + + if (!this.graph.scrollbars) { + this.graph.container.scrollLeft = 0; + this.graph.container.scrollTop = 0; + this.graph.view.translate.x = Number(node.getAttribute('dx') || 0); + this.graph.view.translate.y = Number(node.getAttribute('dy') || 0); + } + + this.graph.pageVisible = node.getAttribute('page') == '1'; + this.graph.pageBreaksVisible = this.graph.pageVisible; + this.graph.preferPageSize = this.graph.pageBreaksVisible; + + // Loads the persistent state settings + var ps = node.getAttribute('pageScale'); + + if (ps != null) { + this.graph.pageScale = ps; + } else { + this.graph.pageScale = 1.5; + } + + var pw = node.getAttribute('pageWidth'); + var ph = node.getAttribute('pageHeight'); + + if (pw != null && ph != null) { + this.graph.pageFormat = new mxRectangle(0, 0, parseFloat(pw), parseFloat(ph)); + this.outline.outline.pageFormat = this.graph.pageFormat; + } + + // Loads the persistent state settings + var bg = node.getAttribute('background'); + + if (bg != null && bg.length > 0) { + this.graph.background = bg; + } + + dec.decode(node, this.graph.getModel()); + this.updateGraphComponents(); + } +}; + +/** + * Returns the XML node that represents the current diagram. + */ +Editor.prototype.getGraphXml = function() { + var enc = new mxCodec(mxUtils.createXmlDocument()); + var node = enc.encode(this.graph.getModel()); + + if (this.graph.view.translate.x != 0 || this.graph.view.translate.y != 0) { + node.setAttribute('dx', Math.round(this.graph.view.translate.x * 100) / 100); + node.setAttribute('dy', Math.round(this.graph.view.translate.y * 100) / 100); + } + + node.setAttribute('grid', (this.graph.isGridEnabled()) ? '1' : '0'); + node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0'); + node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0'); + node.setAttribute('tooltips', (this.graph.tooltipHandler.isEnabled()) ? '1' : '0'); + node.setAttribute('connect', (this.graph.connectionHandler.isEnabled()) ? '1' : '0'); + node.setAttribute('fold', (this.graph.foldingEnabled) ? '1' : '0'); + node.setAttribute('page', (this.graph.pageVisible) ? '1' : '0'); + node.setAttribute('pageScale', this.graph.pageScale); + node.setAttribute('pageWidth', this.graph.pageFormat.width); + node.setAttribute('pageHeight', this.graph.pageFormat.height); + + if (!this.graph.scrollbars) { + node.setAttribute('scrollbars', '0'); + } + + if (this.graph.background != null) { + node.setAttribute('background', this.graph.background); + } + + return node; +}; + +/** + * Keeps the graph container in sync with the persistent graph state + */ +Editor.prototype.updateGraphComponents = function() { + var graph = this.graph; + var outline = this.outline; + + if (graph.container != null && outline.outline.container != null) { + if (graph.background != null) { + if (graph.background == 'none') { + graph.container.style.backgroundColor = 'transparent'; + } else { + if (graph.view.backgroundPageShape != null) { + graph.view.backgroundPageShape.fill = graph.background; + graph.view.backgroundPageShape.reconfigure(); + } + + graph.container.style.backgroundColor = graph.background; + } + } else { + graph.container.style.backgroundColor = ''; + } + + if (graph.pageVisible) { + graph.container.style.backgroundColor = '#ebebeb'; + graph.container.style.borderStyle = 'solid'; + graph.container.style.borderColor = '#e5e5e5'; + graph.container.style.borderTopWidth = '1px'; + graph.container.style.borderLeftWidth = '1px'; + graph.container.style.borderRightWidth = '0px'; + graph.container.style.borderBottomWidth = '0px'; + } else { + graph.container.style.border = ''; + } + + outline.outline.container.style.backgroundColor = graph.container.style.backgroundColor; + + if (outline.outline.pageVisible != graph.pageVisible || + outline.outline.pageScale != graph.pageScale) { + outline.outline.pageScale = graph.pageScale; + outline.outline.pageVisible = graph.pageVisible; + outline.outline.view.validate(); + } + + if (graph.scrollbars && graph.container.style.overflow == 'hidden' && !touchStyle) { + graph.container.style.overflow = 'auto'; + } else if (!graph.scrollbars || touchStyle) { + graph.container.style.overflow = 'hidden'; + } + + // Transparent.gif is a workaround for focus repaint problems in IE + var noBackground = (mxClient.IS_IE && document.documentMode >= 9) ? 'url(' + this.transparentImage + ')' : 'none'; + graph.container.style.backgroundImage = (!graph.pageVisible && graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : noBackground; + + if (graph.view.backgroundPageShape != null) { + graph.view.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : 'none'; + } + } +}; + +/** + * Initializes the environment. + */ +Editor.prototype.init = function() { + // Adds stylesheet for IE6 + if (mxClient.IS_IE6) { + mxClient.link('stylesheet', CSS_PATH + '/grapheditor-ie6.css'); + } + + // Adds required resources (disables loading of fallback properties, this can only + // be used if we know that all keys are defined in the language specific file) + mxResources.loadDefaultBundle = false; + mxResources.add(RESOURCE_BASE); + + // Makes the connection hotspot smaller + mxConstants.DEFAULT_HOTSPOT = 0.3; + + var mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker; + mxConnectionHandler.prototype.createMarker = function() { + var marker = mxConnectionHandlerCreateMarker.apply(this, arguments); + + // Overrides to ignore hotspot only for target terminal + marker.intersects = mxUtils.bind(this, function(state, evt) { + if (this.isConnecting()) { + return true; + } + + return mxCellMarker.prototype.intersects.apply(marker, arguments); + }); + + return marker; + }; + + // Makes the shadow brighter + mxConstants.SHADOWCOLOR = '#d0d0d0'; + + // Changes some default colors + mxConstants.HANDLE_FILLCOLOR = '#99ccff'; + mxConstants.HANDLE_STROKECOLOR = '#0088cf'; + mxConstants.VERTEX_SELECTION_COLOR = '#00a8ff'; + mxConstants.OUTLINE_COLOR = '#00a8ff'; + mxConstants.OUTLINE_HANDLE_FILLCOLOR = '#99ccff'; + mxConstants.OUTLINE_HANDLE_STROKECOLOR = '#00a8ff'; + mxConstants.CONNECT_HANDLE_FILLCOLOR = '#cee7ff'; + mxConstants.EDGE_SELECTION_COLOR = '#00a8ff'; + mxConstants.DEFAULT_VALID_COLOR = '#00a8ff'; + mxConstants.LABEL_HANDLE_FILLCOLOR = '#cee7ff'; + mxConstants.GUIDE_COLOR = '#0088cf'; + + mxGraph.prototype.pageBreakColor = '#c0c0c0'; + mxGraph.prototype.pageScale = 1; + + // Increases default rubberband opacity (default is 20) + mxRubberband.prototype.defaultOpacity = 30; + + // Changes border color of background page shape + mxGraphView.prototype.createBackgroundPageShape = function(bounds) { + return new mxRectangleShape(bounds, this.graph.background || 'white', '#cacaca'); + }; + + // Fits the number of background pages to the graph + mxGraphView.prototype.getBackgroundPageBounds = function() { + var gb = this.getGraphBounds(); + + // Computes unscaled, untranslated graph bounds + var x = (gb.width > 0) ? gb.x / this.scale - this.translate.x : 0; + var y = (gb.height > 0) ? gb.y / this.scale - this.translate.y : 0; + var w = gb.width / this.scale; + var h = gb.height / this.scale; + + var fmt = this.graph.pageFormat; + var ps = this.graph.pageScale; + + var pw = fmt.width * ps; + var ph = fmt.height * ps; + + var x0 = Math.floor(Math.min(0, x) / pw); + var y0 = Math.floor(Math.min(0, y) / ph); + var xe = Math.ceil(Math.max(1, x + w) / pw); + var ye = Math.ceil(Math.max(1, y + h) / ph); + + var rows = xe - x0; + var cols = ye - y0; + + var bounds = new mxRectangle(this.scale * (this.translate.x + x0 * pw), this.scale * + (this.translate.y + y0 * ph), this.scale * rows * pw, this.scale * cols * ph); + + return bounds; + }; + + // Add panning for background page in VML + var graphPanGraph = mxGraph.prototype.panGraph; + mxGraph.prototype.panGraph = function(dx, dy) { + graphPanGraph.apply(this, arguments); + + if ((this.dialect != mxConstants.DIALECT_SVG && this.view.backgroundPageShape != null) && + (!this.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.container))) { + this.view.backgroundPageShape.node.style.marginLeft = dx + 'px'; + this.view.backgroundPageShape.node.style.marginTop = dy + 'px'; + } + }; + + var editor = this; + + // Uses HTML for background pages (to support grid background image) + mxGraphView.prototype.validateBackground = function() { + var bg = this.graph.getBackgroundImage(); + + if (bg != null) { + if (this.backgroundImage == null || this.backgroundImage.image != bg.src) { + if (this.backgroundImage != null) { + this.backgroundImage.destroy(); + } + + var bounds = new mxRectangle(0, 0, 1, 1); + + this.backgroundImage = new mxImageShape(bounds, bg.src); + this.backgroundImage.dialect = this.graph.dialect; + this.backgroundImage.init(this.backgroundPane); + this.backgroundImage.redraw(); + } + + this.redrawBackgroundImage(this.backgroundImage, bg); + } else if (this.backgroundImage != null) { + this.backgroundImage.destroy(); + this.backgroundImage = null; + } + + if (this.graph.pageVisible) { + var bounds = this.getBackgroundPageBounds(); + + if (this.backgroundPageShape == null) { + this.backgroundPageShape = this.createBackgroundPageShape(bounds); + this.backgroundPageShape.scale = 1; + this.backgroundPageShape.isShadow = true; + this.backgroundPageShape.dialect = mxConstants.DIALECT_STRICTHTML; + this.backgroundPageShape.init(this.graph.container); + // Required for the browser to render the background page in correct order + this.graph.container.firstChild.style.position = 'absolute'; + this.graph.container.insertBefore(this.backgroundPageShape.node, this.graph.container.firstChild); + this.backgroundPageShape.redraw(); + + this.backgroundPageShape.node.className = 'geBackgroundPage'; + this.backgroundPageShape.node.style.backgroundPosition = '-1px -1px'; + + // Adds listener for double click handling on background + mxEvent.addListener(this.backgroundPageShape.node, 'dblclick', + mxUtils.bind(this, function(evt) { + this.graph.dblClick(evt); + }) + ); + + // Adds basic listeners for graph event dispatching outside of the + // container and finishing the handling of a single gesture + mxEvent.addGestureListeners(this.backgroundPageShape.node, + mxUtils.bind(this, function(evt) { + this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(evt)); + }), + mxUtils.bind(this, function(evt) { + // Hides the tooltip if mouse is outside container + if (this.graph.tooltipHandler != null && + this.graph.tooltipHandler.isHideOnHover()) { + this.graph.tooltipHandler.hide(); + } + + if (this.graph.isMouseDown && + !mxEvent.isConsumed(evt)) { + this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE, + new mxMouseEvent(evt)); + } + }), + mxUtils.bind(this, function(evt) { + this.graph.fireMouseEvent(mxEvent.MOUSE_UP, + new mxMouseEvent(evt)); + })); + } else { + this.backgroundPageShape.scale = 1; + this.backgroundPageShape.bounds = bounds; + this.backgroundPageShape.redraw(); + } + + this.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ? + 'url(' + editor.gridImage + ')' : 'none'; + } else if (this.backgroundPageShape != null) { + this.backgroundPageShape.destroy(); + this.backgroundPageShape = null; + } + }; + + // Draws page breaks only within the page + mxGraph.prototype.updatePageBreaks = function(visible, width, height) { + var scale = this.view.scale; + var tr = this.view.translate; + var fmt = this.pageFormat; + var ps = scale * this.pageScale; + + var bounds2 = this.view.getBackgroundPageBounds(); + + width = bounds2.width; + height = bounds2.height; + var bounds = new mxRectangle(scale * tr.x, scale * tr.y, + fmt.width * ps, fmt.height * ps); + + // Does not show page breaks if the scale is too small + visible = visible && Math.min(bounds.width, bounds.height) > this.minPageBreakDist; + + var horizontalCount = (visible) ? Math.ceil(width / bounds.width) - 1 : 0; + var verticalCount = (visible) ? Math.ceil(height / bounds.height) - 1 : 0; + var right = bounds2.x + width; + var bottom = bounds2.y + height; + + if (this.horizontalPageBreaks == null && horizontalCount > 0) { + this.horizontalPageBreaks = []; + } + + if (this.horizontalPageBreaks != null) { + for (var i = 0; i <= horizontalCount; i++) { + var pts = [new mxPoint(bounds2.x + (i + 1) * bounds.width, bounds2.y), + new mxPoint(bounds2.x + (i + 1) * bounds.width, bottom) + ]; + + if (this.horizontalPageBreaks[i] != null) { + this.horizontalPageBreaks[i].scale = 1; + this.horizontalPageBreaks[i].points = pts; + this.horizontalPageBreaks[i].redraw(); + } else { + var pageBreak = new mxPolyline(pts, this.pageBreakColor, this.scale); + pageBreak.dialect = this.dialect; + pageBreak.isDashed = this.pageBreakDashed; + pageBreak.addPipe = false; + pageBreak.scale = scale; + pageBreak.init(this.view.backgroundPane); + pageBreak.redraw(); + + this.horizontalPageBreaks[i] = pageBreak; + } + } + + for (var i = horizontalCount; i < this.horizontalPageBreaks.length; i++) { + this.horizontalPageBreaks[i].destroy(); + } + + this.horizontalPageBreaks.splice(horizontalCount, this.horizontalPageBreaks.length - horizontalCount); + } + + if (this.verticalPageBreaks == null && verticalCount > 0) { + this.verticalPageBreaks = []; + } + + if (this.verticalPageBreaks != null) { + for (var i = 0; i <= verticalCount; i++) { + var pts = [new mxPoint(bounds2.x, bounds2.y + (i + 1) * bounds.height), + new mxPoint(right, bounds2.y + (i + 1) * bounds.height) + ]; + + if (this.verticalPageBreaks[i] != null) { + this.verticalPageBreaks[i].scale = 1; //scale; + this.verticalPageBreaks[i].points = pts; + this.verticalPageBreaks[i].redraw(); + } else { + var pageBreak = new mxPolyline(pts, this.pageBreakColor, scale); + pageBreak.dialect = this.dialect; + pageBreak.isDashed = this.pageBreakDashed; + pageBreak.addPipe = false; + pageBreak.scale = scale; + pageBreak.init(this.view.backgroundPane); + pageBreak.redraw(); + + this.verticalPageBreaks[i] = pageBreak; + } + } + + for (var i = verticalCount; i < this.verticalPageBreaks.length; i++) { + this.verticalPageBreaks[i].destroy(); + } + + this.verticalPageBreaks.splice(verticalCount, this.verticalPageBreaks.length - verticalCount); + } + }; + + // Enables snapping to off-grid terminals for edge waypoints + mxEdgeHandler.prototype.snapToTerminals = true; + + // Enables guides + mxGraphHandler.prototype.guidesEnabled = true; + + // Disables removing relative children from parents + var mxGraphHandlerShouldRemoveCellsFromParent = mxGraphHandler.prototype.shouldRemoveCellsFromParent; + mxGraphHandler.prototype.shouldRemoveCellsFromParent = function(parent, cells, evt) { + for (var i = 0; i < cells.length; i++) { + if (this.graph.getModel().isVertex(cells[i])) { + var geo = this.graph.getCellGeometry(cells[i]); + + if (geo != null && geo.relative) { + return false; + } + } + } + + return mxGraphHandlerShouldRemoveCellsFromParent.apply(this, arguments); + }; + + // Alt-move disables guides + mxGuide.prototype.isEnabledForEvent = function(evt) { + return !mxEvent.isAltDown(evt); + }; + + // Consumes click events for disabled menu items + mxPopupMenuAddItem = mxPopupMenu.prototype.addItem; + mxPopupMenu.prototype.addItem = function(title, image, funct, parent, iconCls, enabled) { + var result = mxPopupMenuAddItem.apply(this, arguments); + + if (enabled != null && !enabled) { + mxEvent.addListener(result, 'mousedown', function(evt) { + mxEvent.consume(evt); + }); + } + + return result; + }; + + // Selects descendants before children selection mode + var graphHandlerGetInitialCellForEvent = mxGraphHandler.prototype.getInitialCellForEvent; + mxGraphHandler.prototype.getInitialCellForEvent = function(me) { + var model = this.graph.getModel(); + var psel = model.getParent(this.graph.getSelectionCell()); + var cell = graphHandlerGetInitialCellForEvent.apply(this, arguments); + var parent = model.getParent(cell); + + if (psel == null || (psel != cell && psel != parent)) { + while (!this.graph.isCellSelected(cell) && !this.graph.isCellSelected(parent) && + model.isVertex(parent) && !this.graph.isValidRoot(parent)) { + cell = parent; + parent = this.graph.getModel().getParent(cell); + } + } + + return cell; + }; + + // Selection is delayed to mouseup if child selected + var graphHandlerIsDelayedSelection = mxGraphHandler.prototype.isDelayedSelection; + mxGraphHandler.prototype.isDelayedSelection = function(cell) { + var result = graphHandlerIsDelayedSelection.apply(this, arguments); + var model = this.graph.getModel(); + var psel = model.getParent(this.graph.getSelectionCell()); + var parent = model.getParent(cell); + + if (psel == null || (psel != cell && psel != parent)) { + if (!this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent)) { + result = true; + } + } + + return result; + }; + + // Delayed selection of parent group + mxGraphHandler.prototype.selectDelayed = function(me) { + var cell = me.getCell(); + + if (cell == null) { + cell = this.cell; + } + + var model = this.graph.getModel(); + var parent = model.getParent(cell); + + while (this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent)) { + cell = parent; + parent = model.getParent(cell); + } + + this.graph.selectCellForEvent(cell, me.getEvent()); + }; + + // Returns last selected ancestor + mxPanningHandler.prototype.getCellForPopupEvent = function(me) { + var cell = me.getCell(); + var model = this.graph.getModel(); + var parent = model.getParent(cell); + + while (model.isVertex(parent) && !this.graph.isValidRoot(parent)) { + if (this.graph.isCellSelected(parent)) { + cell = parent; + } + + parent = model.getParent(parent); + } + + return cell; + }; +}; + +/** + * Creates and returns a new undo manager. + */ +Editor.prototype.createUndoManager = function() { + var graph = this.graph; + var undoMgr = new mxUndoManager(); + + // Installs the command history + var listener = function(sender, evt) { + undoMgr.undoableEditHappened(evt.getProperty('edit')); + }; + + graph.getModel().addListener(mxEvent.UNDO, listener); + graph.getView().addListener(mxEvent.UNDO, listener); + + // Keeps the selection in sync with the history + var undoHandler = function(sender, evt) { + var cand = graph.getSelectionCellsForChanges(evt.getProperty('edit').changes); + var cells = []; + + for (var i = 1; i < cand.length; i++) { + if (graph.view.getState(cand[i]) != null) { + cells.push(cand[i]); + } + } + + graph.setSelectionCells(cells); + }; + + undoMgr.addListener(mxEvent.UNDO, undoHandler); + undoMgr.addListener(mxEvent.REDO, undoHandler); + + return undoMgr; +}; + +/** + * Adds basic stencil set (no namespace). + */ +Editor.prototype.initStencilRegistry = function() { + // Loads default stencils + mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/general.xml'); +}; + +/** + * Overrides stencil registry for dynamic loading of stencils. + */ +(function() { + /** + * Maps from library names to an array of Javascript filenames, + * which are synchronously loaded. Currently only stencil files + * (.xml) and JS files (.js) are supported. + * IMPORTANT: For embedded diagrams to work entries must also + * be added in EmbedServlet.java. + */ + mxStencilRegistry.libraries = {}; + + /** + * Stores all package names that have been dynamically loaded. + * Each package is only loaded once. + */ + mxStencilRegistry.packages = []; + + // Extends the default stencil registry to add dynamic loading + mxStencilRegistry.getStencil = function(name) { + var result = mxStencilRegistry.stencils[name]; + + if (result == null) { + var basename = mxStencilRegistry.getBasenameForStencil(name); + + // Loads stencil files and tries again + if (basename != null) { + var libs = mxStencilRegistry.libraries[basename]; + + if (libs != null) { + if (mxStencilRegistry.packages[basename] == null) { + mxStencilRegistry.packages[basename] = 1; + + for (var i = 0; i < libs.length; i++) { + var fname = libs[i]; + + if (fname.toLowerCase().substring(fname.length - 4, fname.length) == '.xml') { + mxStencilRegistry.loadStencilSet(fname, null); + } else if (fname.toLowerCase().substring(fname.length - 3, fname.length) == '.js') { + var req = mxUtils.load(fname); + + if (req != null) { + eval.call(window, req.getText()); + } + } else { + // FIXME: This does not yet work as the loading is triggered after + // the shape was used in the graph, at which point the keys have + // typically been translated in the calling method. + //mxResources.add(fname); + } + } + } + } else { + mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/' + basename + '.xml', null); + } + + result = mxStencilRegistry.stencils[name]; + } + } + + return result; + }; + + // Returns the basename for the given stencil or null if no file must be + // loaded to render the given stencil. + mxStencilRegistry.getBasenameForStencil = function(name) { + var parts = name.split('.'); + var tmp = null; + + if (parts.length > 0 && parts[0] == 'mxgraph') { + tmp = parts[1]; + + for (var i = 2; i < parts.length - 1; i++) { + tmp += '/' + parts[i]; + } + } + + return tmp; + }; + + // Loads the given stencil set + mxStencilRegistry.loadStencilSet = function(stencilFile, postStencilLoad, force) { + force = (force != null) ? force : false; + + // Uses additional cache for detecting previous load attempts + var xmlDoc = mxStencilRegistry.packages[stencilFile]; + + if (force || xmlDoc == null) { + var install = false; + + if (xmlDoc == null) { + var req = mxUtils.load(stencilFile); + xmlDoc = req.getXml(); + mxStencilRegistry.packages[stencilFile] = xmlDoc; + install = true; + } + + mxStencilRegistry.parseStencilSet(xmlDoc, postStencilLoad, install); + } + }; + + // Parses the given stencil set + mxStencilRegistry.parseStencilSet = function(xmlDocument, postStencilLoad, install) { + install = (install != null) ? install : true; + var root = xmlDocument.documentElement; + var shape = root.firstChild; + var packageName = ''; + var name = root.getAttribute('name'); + + if (name != null) { + packageName = name + '.'; + } + + while (shape != null) { + if (shape.nodeType == mxConstants.NODETYPE_ELEMENT) { + name = shape.getAttribute('name'); + + if (name != null) { + packageName = packageName.toLowerCase(); + var stencilName = name.replace(/ /g, "_"); + + if (install) { + mxStencilRegistry.addStencil(packageName + stencilName.toLowerCase(), new mxStencil(shape)); + } + + if (postStencilLoad != null) { + var w = shape.getAttribute('w'); + var h = shape.getAttribute('h'); + + w = (w == null) ? 80 : parseInt(w, 10); + h = (h == null) ? 80 : parseInt(h, 10); + + postStencilLoad(packageName, stencilName, name, w, h); + } + } + } + + shape = shape.nextSibling; + } + }; +})(); + +/** + * Class for asynchronously opening a new window and loading a file at the same + * time. This acts as a bridge between the open dialog and the new editor. + */ +OpenFile = function(done) { + this.producer = null; + this.consumer = null; + this.done = done; +}; + +/** + * Registers the editor from the new window. + */ +OpenFile.prototype.setConsumer = function(value) { + this.consumer = value; + this.execute(); +}; + +/** + * Sets the data from the loaded file. + */ +OpenFile.prototype.setData = function(value, filename) { + this.data = value; + this.filename = filename; + this.execute(); +}; + +/** + * Displays an error message. + */ +OpenFile.prototype.error = function(msg) { + this.cancel(); + mxUtils.alert(msg); +}; + +/** + * Consumes the data. + */ +OpenFile.prototype.execute = function() { + if (this.consumer != null && this.data != null) { + this.consumer(this.data, this.filename); + this.cancel(); + } +}; + +/** + * Cancels the operation. + */ +OpenFile.prototype.cancel = function() { + if (this.done != null) { + this.done(); + } +}; diff --git a/public/assets/plugins/square/js/EditorUi.js b/public/assets/plugins/square/js/EditorUi.js index 984c8b4..59ee4ce 100644 --- a/public/assets/plugins/square/js/EditorUi.js +++ b/public/assets/plugins/square/js/EditorUi.js @@ -1 +1,1623 @@ -var _0x6ae2=["\x65\x64\x69\x74\x6F\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x45\x64\x69\x74\x6F\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x67\x72\x61\x70\x68","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x73\x74\x79\x6C\x65","\x68\x69\x64\x64\x65\x6E","\x73\x72\x63","\x73\x75\x62\x6D\x65\x6E\x75\x49\x6D\x61\x67\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x61\x63\x74\x69\x6F\x6E\x73","\x6D\x65\x6E\x75\x73","\x63\x72\x65\x61\x74\x65\x44\x69\x76\x73","\x72\x65\x66\x72\x65\x73\x68","\x63\x72\x65\x61\x74\x65\x55\x69","\x65\x76\x65\x6E\x74","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x41\x6C\x6C\x6F\x77\x65\x64","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x62\x69\x6E\x64","\x62\x6F\x64\x79","\x6F\x6E\x73\x65\x6C\x65\x63\x74\x73\x74\x61\x72\x74","\x6D\x65\x6E\x75\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x6E\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x74\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x64\x69\x61\x67\x72\x61\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x69\x64\x65\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x66\x6F\x6F\x74\x65\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x49\x53\x5F\x49\x45","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x4D\x6F\x64\x65","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x6F\x6E\x63\x6F\x6E\x74\x65\x78\x74\x6D\x65\x6E\x75","\x69\x6E\x69\x74","\x74\x61\x62\x69\x6E\x64\x65\x78","\x30","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x75\x72\x73\x6F\x72","\x64\x65\x66\x61\x75\x6C\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x67\x72\x69\x64\x49\x6D\x61\x67\x65","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x2D\x31\x70\x78\x20\x2D\x31\x70\x78","\x66\x6F\x63\x75\x73","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x61\x70\x70\x6C\x79","\x6D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x73\x74\x61\x72\x74","\x66\x69\x6E\x61\x6C\x6C\x79","\x65\x6E\x64","\x6E","\x63\x72\x65\x61\x74\x65\x4D\x75\x6C\x74\x69\x70\x6C\x69\x63\x69\x74\x69\x65\x73","\x61\x6E\x73\x77\x65\x72","\x68\x61\x6E\x67\x75\x70","\x64\x69\x61\x6C","\x65\x78\x74\x5F\x64\x69\x61\x6C","\x71\x75\x65\x75\x65","\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x73\x65\x74","\x6D\x61\x74\x68","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x70\x6C\x61\x79\x62\x61\x63\x6B","\x6D\x65\x6E\x75","\x73\x61\x79\x64\x69\x67\x69\x74\x73","\x73\x61\x79\x6E\x75\x6D\x62\x65\x72","\x73\x61\x79\x70\x68\x6F\x6E\x65\x74\x69\x63","\x74\x74\x73","\x69\x73\x70\x65\x65\x63\x68\x74\x74\x73","\x67\x65\x74\x64\x69\x67\x69\x74\x73","\x67\x65\x74\x73\x65\x63\x72\x65\x74\x64\x69\x67\x69\x74\x73","\x72\x65\x63\x6F\x72\x64","\x64\x61\x74\x61\x62\x61\x73\x65","\x69\x73\x70\x65\x65\x63\x68\x61\x73\x72","\x73\x65\x6E\x64\x53\x4D\x53","\x73\x65\x6E\x64\x4D\x61\x69\x6C","\x67\x6F\x74\x6F\x63","\x67\x6F\x74\x6F\x69\x66","\x67\x6F\x74\x6F\x69\x66\x74\x69\x6D\x65","\x67\x6F\x74\x6F\x69\x66\x6D\x75\x6C\x74\x69\x74\x69\x6D\x65","\x76\x73\x77\x69\x74\x63\x68","\x71\x75\x65\x75\x65\x6C\x6F\x67","\x67\x6F\x61\x6C","\x6E\x6F\x6F\x70","\x73\x79\x73\x74\x65\x6D","\x61\x67\x69","\x73\x75\x62\x70\x72\x6F\x6A\x65\x63\x74","\x63\x75\x73\x74\x6F\x6D\x5F\x61\x70\x70","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x63\x65\x6C\x6C","\x66\x69\x72\x65\x45\x76\x65\x6E\x74","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x74\x61\x67\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x73\x6F\x75\x72\x63\x65","\x69\x6E\x64\x65\x78\x4F\x66","\x73\x74\x61\x72\x74\x45\x64\x69\x74\x69\x6E\x67\x41\x74\x43\x65\x6C\x6C","\x69\x73\x56\x65\x72\x74\x65\x78","\x73\x68\x6F\x77\x44\x69\x61\x6C\x6F\x67","\x63\x6F\x6E\x73\x75\x6D\x65","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x6F\x75\x74\x6C\x69\x6E\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x6F\x75\x74\x6C\x69\x6E\x65","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x67\x65\x73\x74\x75\x72\x65\x63\x68\x61\x6E\x67\x65","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x73\x63\x61\x6C\x65\x28","\x73\x63\x61\x6C\x65","\x67\x65\x74\x44\x72\x61\x77\x50\x61\x6E\x65","\x76\x69\x65\x77","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x67\x65\x73\x74\x75\x72\x65\x65\x6E\x64","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x7A\x6F\x6F\x6D\x54\x6F\x43\x65\x6E\x74\x65\x72","\x7A\x6F\x6F\x6D","\x76\x69\x73\x69\x62\x6C\x65","\x63\x72\x65\x61\x74\x65\x4B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x4B\x65\x79\x48\x61\x6E\x64\x6C\x65\x72","\x72\x65\x73\x69\x7A\x65","\x73\x69\x7A\x65\x44\x69\x64\x43\x68\x61\x6E\x67\x65","\x75\x70\x64\x61\x74\x65","\x6F\x70\x65\x6E","\x73\x70\x6C\x69\x74\x53\x69\x7A\x65","\x6D\x65\x6E\x75\x62\x61\x72\x48\x65\x69\x67\x68\x74","\x74\x6F\x6F\x6C\x62\x61\x72\x48\x65\x69\x67\x68\x74","\x66\x6F\x6F\x74\x65\x72\x48\x65\x69\x67\x68\x74","\x68\x73\x70\x6C\x69\x74\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x76\x73\x70\x6C\x69\x74\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x64\x64\x55\x6E\x64\x6F\x4C\x69\x73\x74\x65\x6E\x65\x72","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x73\x74\x65","\x67\x65\x74","\x69\x73\x45\x6D\x70\x74\x79","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x74","\x63\x6F\x70\x79","\x6F\x70\x65\x6E\x65\x72","\x6F\x70\x65\x6E\x46\x69\x6C\x65","\x70\x61\x72\x73\x65\x58\x6D\x6C","\x64\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x73\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x6D\x6F\x64\x69\x66\x69\x65\x64","\x63\x6C\x65\x61\x72","\x75\x6E\x64\x6F\x4D\x61\x6E\x61\x67\x65\x72","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x69\x6E\x76\x61\x6C\x69\x64\x4F\x72\x4D\x69\x73\x73\x69\x6E\x67\x46\x69\x6C\x65","\x3A\x20","\x6D\x65\x73\x73\x61\x67\x65","\x61\x6C\x65\x72\x74","\x73\x65\x74\x43\x6F\x6E\x73\x75\x6D\x65\x72","\x6F\x70\x65\x6E\x53\x74\x72\x69\x6E\x67","\x64\x61\x74\x61","\x6E\x65\x77","\x67\x65\x74\x47\x72\x61\x70\x68\x58\x6D\x6C","\x67\x65\x74\x50\x72\x65\x74\x74\x79\x58\x6D\x6C","\x67\x65\x74\x49\x74\x65\x6D","\x72\x65\x70\x6C\x61\x63\x65","\x63\x6F\x6E\x66\x69\x72\x6D","\x73\x65\x74\x49\x74\x65\x6D","\x73\x61\x76\x65\x64","\x20","\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x6C\x65\x6E\x67\x74\x68","\x6C\x6F\x67","\x50\x4F\x53\x54","\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x73\x65\x74\x52\x65\x71\x75\x65\x73\x74\x48\x65\x61\x64\x65\x72","\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x42\x65\x61\x72\x65\x72\x20","\x74\x6F\x6B\x65\x6E","\x6F\x6E\x6C\x6F\x61\x64","\x72\x65\x61\x64\x79\x53\x74\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x50\x72\x6F\x6A\x65\x63\x74\x20","\x6E\x61\x6D\x65","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x70\x61\x72\x73\x65","\x20\x69\x73\x20\x6F\x70\x65\x6E\x69\x6E\x67\x20\x69\x6E\x20\x6E\x65\x77\x20\x77\x69\x6E\x64\x6F\x77\x21","\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x76\x69\x65\x77\x2F","\x69\x64","\x5F\x62\x6C\x61\x6E\x6B","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x65\x72\x72\x6F\x72\x73","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x20\x28","\x73\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x6F\x6E\x65\x72\x72\x6F\x72","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D\x70\x72\x6F\x6A\x65\x63\x74\x5F\x6E\x65\x77\x26\x6E\x61\x6D\x65\x3D","\x73\x65\x6E\x64","\x64\x72\x61\x77\x69\x6E\x67\x54\x6F\x6F\x4C\x61\x72\x67\x65","\x70\x6F\x70\x75\x70","\x73\x61\x76\x65","\x50\x55\x54","\x55\x70\x64\x61\x74\x65\x64\x20\x61\x74\x20","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x70\x72\x65\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E\x3D","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x66\x69\x6C\x65","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x45\x72\x72\x6F\x72\x20\x75\x70\x64\x61\x74\x69\x6E\x67\x20\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3A\x20","\x45\x72\x72\x6F\x72\x20\x75\x70\x64\x61\x74\x69\x6E\x67\x20\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D","\x73\x61\x76\x65\x41\x73","\x45\x72\x72\x6F\x72\x20\x63\x6C\x6F\x6E\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x45\x72\x72\x6F\x72\x20\x63\x6C\x6F\x6E\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D\x70\x72\x6F\x6A\x65\x63\x74\x5F\x63\x6C\x6F\x6E\x65\x64\x26\x6E\x61\x6D\x65\x3D","\x26\x70\x72\x65\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E\x3D","\x26\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E\x3D","\x76\x61\x6C\x69\x64\x61\x74\x65","\x67\x65\x74\x52\x6F\x6F\x74","\x6D\x6F\x64\x65\x6C","\x67\x65\x74\x43\x68\x69\x6C\x64\x43\x6F\x75\x6E\x74","\x67\x65\x74\x43\x68\x69\x6C\x64\x41\x74","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x3C\x62\x72\x3E","\x73\x65\x74\x43\x65\x6C\x6C\x57\x61\x72\x6E\x69\x6E\x67","","\x76\x61\x6C\x69\x64\x61\x74\x65\x42\x6C\x6F\x63\x6B","\x4F\x6E\x6C\x79\x20\x6F\x6E\x65\x20\x53\x74\x61\x72\x74\x20\x62\x6C\x6F\x63\x6B\x20\x69\x73\x20\x61\x6C\x6C\x6F\x77\x65\x64","\x0A","\x4F\x6E\x6C\x79\x20\x6F\x6E\x65\x20\x46\x69\x6E\x61\x6C\x6C\x79\x20\x62\x6C\x6F\x63\x6B\x20\x69\x73\x20\x61\x6C\x6C\x6F\x77\x65\x64","\x66\x69\x6C\x65\x5F\x69\x64","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6E\x6F\x41\x75\x64\x69\x6F\x53\x65\x6C\x65\x63\x74\x65\x64","\x64\x69\x67\x69\x74","\x77\x72\x6F\x6E\x67\x4D\x61\x78\x44\x69\x67\x69\x74","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64","\x6E\x6F\x56\x61\x72\x69\x61\x62\x6C\x65\x53\x65\x6C\x65\x63\x74\x65\x64","\x6D\x69\x6E\x64\x69\x67\x69\x74","\x77\x72\x6F\x6E\x67\x4D\x69\x6E\x44\x69\x67\x69\x74","\x6D\x61\x78\x64\x69\x67\x69\x74","\x68\x69\x64\x64\x65\x6E\x64\x69\x67\x69\x74\x73\x6E\x75\x6D","\x77\x72\x6F\x6E\x67\x48\x69\x64\x64\x65\x6E\x44\x69\x67\x69\x74\x73\x6E\x75\x6D","\x76\x61\x72\x69\x61\x62\x6C\x65","\x6F\x64\x62\x63\x5F\x69\x64","\x6E\x6F\x44\x61\x74\x61\x62\x61\x73\x65\x53\x65\x6C\x65\x63\x74\x65\x64","\x74\x72\x75\x6E\x6B\x5F\x6E\x61\x6D\x65","\x2D\x31","\x6E\x6F\x54\x72\x75\x6E\x6B\x53\x65\x6C\x65\x63\x74\x65\x64","\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x6E\x6F\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x53\x65\x6C\x65\x63\x74\x65\x64","\x63\x6F\x6D\x6D\x61\x6E\x64","\x6E\x6F\x43\x6F\x6D\x6D\x61\x6E\x64\x53\x65\x6C\x65\x63\x74\x65\x64","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x6E\x6F\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x53\x65\x6C\x65\x63\x74\x65\x64","\x64\x69\x67\x69\x74\x73","\x6E\x6F\x44\x69\x67\x69\x74\x73\x53\x65\x6C\x65\x63\x74\x65\x64","\x6E\x75\x6D\x62\x65\x72","\x6E\x6F\x4E\x75\x6D\x62\x65\x72\x53\x65\x6C\x65\x63\x74\x65\x64","\x74\x65\x78\x74","\x6E\x6F\x54\x65\x78\x74\x53\x65\x6C\x65\x63\x74\x65\x64","\x66\x69\x6C\x65","\x6E\x6F\x46\x69\x6C\x65\x53\x65\x6C\x65\x63\x74\x65\x64","\x67\x6F\x61\x6C\x6E\x61\x6D\x65","\x6E\x6F\x47\x6F\x61\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x70\x68\x6F\x6E\x65","\x6E\x6F\x49\x64\x65\x6E\x74\x69\x66\x69\x65\x72\x53\x65\x6C\x65\x63\x74\x65\x64","\x73\x69\x70\x5F\x69\x64","\x71\x75\x65\x75\x65\x5F\x69\x64","\x6E\x6F\x51\x75\x65\x75\x65\x53\x65\x6C\x65\x63\x74\x65\x64","\x6C\x69\x73\x74\x5F\x69\x64","\x6E\x6F\x4C\x69\x73\x74\x53\x65\x6C\x65\x63\x74\x65\x64","\x69\x6E\x74\x65\x72\x76\x61\x6C\x5F\x69\x64","\x6E\x6F\x49\x6E\x74\x65\x72\x76\x61\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x6D\x61\x69\x6C\x62\x6F\x78","\x6E\x6F\x42\x6F\x78\x4E\x75\x6D\x62\x65\x72\x53\x65\x6C\x65\x63\x74\x65\x64","\x70\x72\x6F\x6A\x65\x63\x74\x5F\x69\x64","\x6E\x6F\x50\x72\x6F\x6A\x65\x63\x74\x53\x65\x6C\x65\x63\x74\x65\x64","\x61\x63\x63\x6F\x75\x6E\x74\x5F\x69\x64","\x6E\x6F\x41\x63\x63\x6F\x75\x6E\x74\x53\x65\x6C\x65\x63\x74\x65\x64","\x74\x6F","\x6E\x6F\x52\x65\x63\x69\x70\x69\x65\x6E\x74\x53\x65\x6C\x65\x63\x74\x65\x64","\x73\x6D\x73\x5F\x74\x65\x78\x74","\x6B\x65\x79","\x6E\x6F\x4B\x65\x79\x53\x65\x6C\x65\x63\x74\x65\x64","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x67\x65\x74\x49\x64","\x67\x65\x74\x43\x65\x6C\x6C","\x67\x65\x74\x56\x61\x6C\x75\x65","\x74\x65\x73\x74","\x6E\x75\x6D\x62\x65\x72\x4F\x72\x49\x6E\x76\x61\x6C\x69\x64\x4F\x72\x54\x69\x6D\x65\x6F\x75\x74","\x2C","\x73\x70\x6C\x69\x74","\x6E\x75\x6D\x62\x65\x72\x4F\x72\x41\x6C\x6C","\x66\x6F\x72\x45\x61\x63\x68","\x6E\x75\x6D\x62\x65\x72\x4F\x72\x49\x6E\x76\x61\x6C\x69\x64\x4F\x72\x44\x65\x66\x61\x75\x6C\x74","\x74\x72\x75\x65\x4F\x72\x46\x61\x6C\x73\x65","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6C\x6C\x61\x70\x73\x65\x64","\x63\x6F\x6E\x74\x61\x69\x6E\x73\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72\x73\x52\x65\x73\x6F\x75\x72\x63\x65","\x67\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C","\x67\x65\x74\x45\x64\x67\x65\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x67\x65\x74\x43\x65\x6C\x6C\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x45\x72\x72\x6F\x72","\x76\x61\x6C\x69\x64\x61\x74\x65\x43\x65\x6C\x6C","\x67\x65\x74\x50\x61\x72\x65\x6E\x74","\x67\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x50\x61\x72\x65\x6E\x74","\x63\x68\x69\x6C\x64\x72\x65\x6E","\x70\x75\x62\x6C\x69\x73\x68","\x50\x75\x62\x6C\x69\x73\x68\x65\x64\x20\x61\x74\x20","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74\x3A\x20","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x70\x72\x6F\x6A\x65\x63\x74","\x45\x72\x72\x6F\x72\x20\x70\x75\x62\x6C\x69\x73\x68\x69\x6E\x67\x20\x66\x69\x6C\x65","\x56\x61\x72\x69\x61\x62\x6C\x65\x20\x63\x72\x65\x61\x74\x65\x64\x20\x61\x74\x20","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x3A\x20","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65","\x6E\x61\x6D\x65\x3D","\x26\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x3D","\x67\x65\x74\x55\x72\x6C","\x70\x61\x74\x68\x6E\x61\x6D\x65","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x3F","\x26","\x3D","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x61\x6E\x55\x6E\x64\x6F","\x63\x61\x6E\x52\x65\x64\x6F","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x74\x6F\x42\x61\x63\x6B","\x64\x61\x73\x68\x65\x64","\x72\x6F\x75\x6E\x64\x65\x64","\x73\x68\x61\x64\x6F\x77","\x74\x69\x6C\x74","\x61\x75\x74\x6F\x73\x69\x7A\x65","\x63\x75\x72\x76\x65\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x77\x6F\x72\x64\x57\x72\x61\x70","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x67\x72\x6F\x75\x70","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x75\x6E\x67\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x61\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x66\x6F\x72\x6D\x61\x74","\x61\x72\x72\x61\x6E\x67\x65","\x6C\x69\x6E\x65\x77\x69\x64\x74\x68","\x73\x70\x61\x63\x69\x6E\x67","\x6C\x69\x6E\x65","\x6C\x69\x6E\x65\x65\x6E\x64","\x6C\x69\x6E\x65\x73\x74\x61\x72\x74","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x61\x6C\x69\x67\x6E","\x67\x65\x74\x53\x74\x61\x74\x65","\x69\x73\x4C\x6F\x6F\x70","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x63\x75\x72\x72\x65\x6E\x74\x52\x6F\x6F\x74","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x68\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x65\x78\x70\x61\x6E\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x65\x64\x69\x74\x4C\x69\x6E\x6B","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x63\x6C\x69\x65\x6E\x74\x48\x65\x69\x67\x68\x74","\x6D\x69\x6E","\x6D\x61\x78","\x68\x65\x69\x67\x68\x74","\x70\x78","\x74\x6F\x70","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x77\x69\x64\x74\x68","\x62\x6F\x74\x74\x6F\x6D","\x6C\x65\x66\x74","\x64\x69\x73\x70\x6C\x61\x79","\x6E\x6F\x6E\x65","\x68\x73\x70\x6C\x69\x74","\x76\x73\x70\x6C\x69\x74","\x67\x65\x4D\x65\x6E\x75\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x44\x69\x76","\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x53\x69\x64\x65\x62\x61\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x4F\x75\x74\x6C\x69\x6E\x65\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x44\x69\x61\x67\x72\x61\x6D\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x46\x6F\x6F\x74\x65\x72\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x67\x65\x48\x73\x70\x6C\x69\x74","\x67\x65\x56\x73\x70\x6C\x69\x74","\x30\x70\x78","\x72\x69\x67\x68\x74","\x6D\x65\x6E\x75\x62\x61\x72","\x67\x65\x4D\x65\x6E\x75\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75\x62\x61\x72","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x74\x6F\x6F\x6C\x62\x61\x72","\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x54\x6F\x6F\x6C\x62\x61\x72","\x73\x69\x64\x65\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x53\x69\x64\x65\x62\x61\x72","\x63\x72\x65\x61\x74\x65\x46\x6F\x6F\x74\x65\x72","\x73\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x75\x73\x43\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x73\x74\x61\x74\x75\x73\x43\x68\x61\x6E\x67\x65\x64","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x65\x74\x53\x74\x61\x74\x75\x73\x54\x65\x78\x74","\x61\x64\x64\x53\x70\x6C\x69\x74\x48\x61\x6E\x64\x6C\x65\x72","\x61","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x49\x74\x65\x6D\x20\x67\x65\x53\x74\x61\x74\x75\x73","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x67\x65\x46\x6F\x6F\x74\x65\x72","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x48\x65\x61\x64\x65\x72","\x63\x72\x65\x61\x74\x65\x46\x6F\x72\x6D","\x66\x6F\x72\x6D","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x78","\x79","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x74\x6F\x75\x63\x68\x6D\x6F\x76\x65","\x6D\x6F\x75\x73\x65\x75\x70","\x74\x6F\x75\x63\x68\x65\x6E\x64","\x68\x69\x64\x65\x44\x69\x61\x6C\x6F\x67","\x64\x69\x61\x6C\x6F\x67","\x49\x53\x5F\x56\x4D\x4C","\x63\x6C\x6F\x73\x65","\x73\x61\x76\x65\x46\x69\x6C\x65","\x67\x65\x74\x4F\x72\x43\x72\x65\x61\x74\x65\x46\x69\x6C\x65\x6E\x61\x6D\x65","\x70\x75\x62\x6C\x69\x73\x68\x46\x69\x6C\x65","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x61\x6E\x69\x6D\x61\x74\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x65\x78\x65\x63\x75\x74\x65","\x43\x61\x6D\x69\x6E\x6F","\x75\x73\x65\x72\x41\x67\x65\x6E\x74","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x72\x74\x41\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x49\x53\x5F\x4D\x41\x43","\x6D\x65\x74\x61\x4B\x65\x79","\x6D\x6F\x76\x65\x43\x65\x6C\x6C\x73","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x65\x6E\x61\x62\x6C\x65\x64","\x66\x75\x6E\x63\x74","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x43\x6F\x6E\x74\x72\x6F\x6C\x4B\x65\x79","\x62\x69\x6E\x64\x53\x68\x69\x66\x74\x4B\x65\x79","\x62\x69\x6E\x64\x4B\x65\x79","\x65\x73\x63\x61\x70\x65","\x65\x6E\x74\x65\x72","\x66\x6F\x6C\x64\x43\x65\x6C\x6C\x73","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x65\x78\x70\x6F\x72\x74","\x63\x6F\x6E\x6E\x65\x63\x74","\x67\x72\x69\x64","\x61\x62\x6F\x75\x74","\x6D\x75\x73\x74\x68\x61\x76\x65","\x6F\x75\x74\x67\x6F\x69\x6E\x67\x65\x64\x67\x65","\x70\x75\x73\x68","\x69\x6E\x63\x6F\x6D\x69\x6E\x67\x65\x64\x67\x65"];EditorUi= function(_0x1378x1,_0x1378x2){this[_0x6ae2[0]]= _0x1378x1|| new Editor();this[_0x6ae2[1]]= _0x1378x2|| document[_0x6ae2[3]](_0x6ae2[2]);var _0x1378x3=_0x1378x1[_0x6ae2[4]];var _0x1378x4=this;this[_0x6ae2[1]][_0x6ae2[6]][_0x6ae2[5]]= _0x6ae2[7]; new Image()[_0x6ae2[8]]= mxPopupMenu[_0x6ae2[10]][_0x6ae2[9]];if(mxConnectionHandler[_0x6ae2[10]][_0x6ae2[11]]!= null){ new Image()[_0x6ae2[8]]= mxConnectionHandler[_0x6ae2[10]][_0x6ae2[11]][_0x6ae2[8]]};this[_0x6ae2[12]]= new Actions(this);this[_0x6ae2[13]]= new Menus(this);this[_0x6ae2[14]]();this[_0x6ae2[15]]();this[_0x6ae2[16]]();var _0x1378x5=mxUtils[_0x6ae2[20]](this,function(_0x1378x6){if(_0x1378x6== null){_0x1378x6= window[_0x6ae2[17]]};if(this[_0x6ae2[18]](_0x1378x6)){return true};return _0x1378x3[_0x6ae2[19]]()});if(this[_0x6ae2[1]]== document[_0x6ae2[21]]){this[_0x6ae2[23]][_0x6ae2[22]]= _0x1378x5;this[_0x6ae2[23]][_0x6ae2[24]]= _0x1378x5;this[_0x6ae2[25]][_0x6ae2[22]]= _0x1378x5;this[_0x6ae2[25]][_0x6ae2[24]]= _0x1378x5;this[_0x6ae2[26]][_0x6ae2[22]]= _0x1378x5;this[_0x6ae2[26]][_0x6ae2[24]]= _0x1378x5;this[_0x6ae2[27]][_0x6ae2[22]]= _0x1378x5;this[_0x6ae2[27]][_0x6ae2[24]]= _0x1378x5;this[_0x6ae2[28]][_0x6ae2[22]]= _0x1378x5;this[_0x6ae2[28]][_0x6ae2[24]]= _0x1378x5};if(mxClient[_0x6ae2[29]]&& ( typeof (document[_0x6ae2[30]])=== _0x6ae2[31]|| document[_0x6ae2[30]]< 9)){mxEvent[_0x6ae2[33]](this[_0x6ae2[26]],_0x6ae2[32],_0x1378x5);mxEvent[_0x6ae2[33]](this[_0x6ae2[27]],_0x6ae2[32],_0x1378x5)}else {this[_0x6ae2[26]][_0x6ae2[34]]= _0x1378x5;this[_0x6ae2[27]][_0x6ae2[34]]= _0x1378x5};_0x1378x3[_0x6ae2[35]](this[_0x6ae2[26]]);_0x1378x3[_0x6ae2[15]]();_0x1378x3[_0x6ae2[1]][_0x6ae2[38]](_0x6ae2[36],_0x6ae2[37]);_0x1378x3[_0x6ae2[1]][_0x6ae2[6]][_0x6ae2[39]]= _0x6ae2[40];_0x1378x3[_0x6ae2[1]][_0x6ae2[6]][_0x6ae2[41]]= _0x6ae2[42]+ _0x1378x1[_0x6ae2[43]]+ _0x6ae2[44];_0x1378x3[_0x6ae2[1]][_0x6ae2[6]][_0x6ae2[45]]= _0x6ae2[46];_0x1378x3[_0x6ae2[1]][_0x6ae2[47]]();var _0x1378x7=_0x1378x3[_0x6ae2[48]];_0x1378x3[_0x6ae2[48]]= function(_0x1378x8,_0x1378x9,_0x1378xa){if(_0x1378x8== mxEvent[_0x6ae2[49]]){this[_0x6ae2[1]][_0x6ae2[47]]()};_0x1378x7[_0x6ae2[50]](this,arguments)};this[_0x6ae2[56]](_0x1378x3[_0x6ae2[51]],[_0x6ae2[52],_0x6ae2[53],_0x6ae2[54]],[[1,1],[1,1],[0,0]],[[0,0],[0,0],[1,_0x6ae2[55]]]);this[_0x6ae2[56]](_0x1378x3[_0x6ae2[51]],[_0x6ae2[57],_0x6ae2[58],_0x6ae2[59],_0x6ae2[60],_0x6ae2[61],_0x6ae2[62],_0x6ae2[63]],[[1,1],[0,0],[0,1],[0,1],[0,1],[1,1],[0,1]],[[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]]]);this[_0x6ae2[56]](_0x1378x3[_0x6ae2[51]],[_0x6ae2[64],_0x6ae2[65]],[[1,1],[1,1]],[[1,_0x6ae2[55]],[1,_0x6ae2[55]]]);this[_0x6ae2[56]](_0x1378x3[_0x6ae2[51]],[_0x6ae2[66],_0x6ae2[67],_0x6ae2[68],_0x6ae2[69],_0x6ae2[70],_0x6ae2[71],_0x6ae2[72],_0x6ae2[73],_0x6ae2[74],_0x6ae2[75]],[[1,_0x6ae2[55]],[1,1],[1,_0x6ae2[55]],[1,1],[1,1],[1,1],[1,1],[1,1],[1,_0x6ae2[55]],[1,_0x6ae2[55]]],[[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]]]);this[_0x6ae2[56]](_0x1378x3[_0x6ae2[51]],[_0x6ae2[76]],[[1,1]],[[1,_0x6ae2[55]]]);this[_0x6ae2[56]](_0x1378x3[_0x6ae2[51]],[_0x6ae2[77],_0x6ae2[78],_0x6ae2[79],_0x6ae2[80]],[[1,1],[1,1],[1,1],[1,1]],[[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]]]);this[_0x6ae2[56]](_0x1378x3[_0x6ae2[51]],[_0x6ae2[81],_0x6ae2[82],_0x6ae2[83],_0x6ae2[84],_0x6ae2[85]],[[0,0],[1,2],[1,2],[1,2],[1,_0x6ae2[55]]],[[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]]]);this[_0x6ae2[56]](_0x1378x3[_0x6ae2[51]],[_0x6ae2[86],_0x6ae2[87]],[[1,1],[1,1]],[[1,_0x6ae2[55]],[1,_0x6ae2[55]]]);this[_0x6ae2[56]](_0x1378x3[_0x6ae2[51]],[_0x6ae2[88],_0x6ae2[89],_0x6ae2[90],_0x6ae2[91],_0x6ae2[92]],[[1,1],[1,1],[0,1],[0,0],[0,1]],[[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]],[1,_0x6ae2[55]]]);_0x1378x3[_0x6ae2[93]]= function(_0x1378x6,_0x1378xb){var _0x1378xc=[_0x6ae2[66],_0x6ae2[82],_0x6ae2[83],_0x6ae2[68],_0x6ae2[74],_0x6ae2[75],_0x6ae2[85]];var _0x1378xd= new mxEventObject(mxEvent.DOUBLE_CLICK,_0x6ae2[17],_0x1378x6,_0x6ae2[94],_0x1378xb);this[_0x6ae2[95]](_0x1378xd);if(this[_0x6ae2[96]]()&& !mxEvent[_0x6ae2[97]](_0x1378x6)&& !_0x1378xd[_0x6ae2[97]]()){if(this[_0x6ae2[99]]()[_0x6ae2[98]](_0x1378xb)){if(_0x1378xc[_0x6ae2[103]](_0x1378xb[_0x6ae2[102]][_0x6ae2[101]][_0x6ae2[100]])>= 0){this[_0x6ae2[104]](_0x1378xb)}}else {if(this[_0x6ae2[99]]()[_0x6ae2[105]](_0x1378xb)){_0x1378x4[_0x6ae2[106]]( new GeneralDialog(_0x1378x4,_0x1378xb)[_0x6ae2[1]],320,280,true,true)}};_0x1378xd[_0x6ae2[107]]()}};_0x1378x3[_0x6ae2[109]][_0x6ae2[108]]= true;_0x1378x3[_0x6ae2[109]][_0x6ae2[110]]= mxUtils[_0x6ae2[20]](this,function(_0x1378xe,_0x1378xb,_0x1378x6){this[_0x6ae2[13]][_0x6ae2[111]](_0x1378xe,_0x1378xb,_0x1378x6)});_0x1378x1[_0x6ae2[113]][_0x6ae2[35]](this[_0x6ae2[112]]);mxEvent[_0x6ae2[115]](document,mxUtils[_0x6ae2[20]](this,function(_0x1378x6){_0x1378x3[_0x6ae2[109]][_0x6ae2[114]]()}));if(mxClient[_0x6ae2[116]]){mxEvent[_0x6ae2[33]](_0x1378x3[_0x6ae2[1]],_0x6ae2[117],mxUtils[_0x6ae2[20]](this,function(_0x1378x6){_0x1378x3[_0x6ae2[122]][_0x6ae2[121]]()[_0x6ae2[38]](_0x6ae2[118],_0x6ae2[119]+ _0x1378x6[_0x6ae2[120]]+ _0x6ae2[44]);_0x1378x3[_0x6ae2[122]][_0x6ae2[124]]()[_0x6ae2[6]][_0x6ae2[123]]= _0x6ae2[7]}));mxEvent[_0x6ae2[33]](_0x1378x3[_0x6ae2[1]],_0x6ae2[125],mxUtils[_0x6ae2[20]](this,function(_0x1378x6){_0x1378x3[_0x6ae2[122]][_0x6ae2[121]]()[_0x6ae2[126]](_0x6ae2[118]);_0x1378x3[_0x6ae2[127]]= true;_0x1378x3[_0x6ae2[128]](_0x1378x6[_0x6ae2[120]]);_0x1378x3[_0x6ae2[122]][_0x6ae2[124]]()[_0x6ae2[6]][_0x6ae2[123]]= _0x6ae2[129]}))};var _0x1378xf=this[_0x6ae2[130]](_0x1378x1);this[_0x6ae2[131]]= function(){return _0x1378xf};mxEvent[_0x6ae2[33]](window,_0x6ae2[132],mxUtils[_0x6ae2[20]](this,function(){this[_0x6ae2[15]]();_0x1378x3[_0x6ae2[133]]();this[_0x6ae2[0]][_0x6ae2[113]][_0x6ae2[134]](false);this[_0x6ae2[0]][_0x6ae2[113]][_0x6ae2[113]][_0x6ae2[133]]()}));this[_0x6ae2[35]]();this[_0x6ae2[135]]()};EditorUi[_0x6ae2[10]][_0x6ae2[136]]= (mxClient[_0x6ae2[116]])?16:8;EditorUi[_0x6ae2[10]][_0x6ae2[137]]= 33;EditorUi[_0x6ae2[10]][_0x6ae2[138]]= 36;EditorUi[_0x6ae2[10]][_0x6ae2[139]]= 28;EditorUi[_0x6ae2[10]][_0x6ae2[140]]= 204;EditorUi[_0x6ae2[10]][_0x6ae2[141]]= 190;EditorUi[_0x6ae2[10]][_0x6ae2[35]]= function(){this[_0x6ae2[142]]();this[_0x6ae2[143]]();var _0x1378x10=this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[144]);var _0x1378x11=function(){_0x1378x10[_0x6ae2[147]](!mxClipboard[_0x6ae2[146]]())};var _0x1378x12=mxClipboard[_0x6ae2[148]];mxClipboard[_0x6ae2[148]]= function(){_0x1378x12[_0x6ae2[50]](this,arguments);_0x1378x11()};var _0x1378x13=mxClipboard[_0x6ae2[149]];mxClipboard[_0x6ae2[149]]= function(){_0x1378x13[_0x6ae2[50]](this,arguments);_0x1378x11()}};EditorUi[_0x6ae2[10]][_0x6ae2[18]]= function(_0x1378x6){return false};EditorUi[_0x6ae2[10]][_0x6ae2[135]]= function(){try{if(window[_0x6ae2[150]]!= null&& window[_0x6ae2[150]][_0x6ae2[151]]!= null){window[_0x6ae2[150]][_0x6ae2[151]][_0x6ae2[163]](mxUtils[_0x6ae2[20]](this,function(_0x1378x14,_0x1378x15){try{var _0x1378x16=mxUtils[_0x6ae2[152]](_0x1378x14);this[_0x6ae2[0]][_0x6ae2[154]](_0x1378x16[_0x6ae2[153]]);this[_0x6ae2[0]][_0x6ae2[155]]= false;this[_0x6ae2[0]][_0x6ae2[157]][_0x6ae2[156]]();if(_0x1378x15!= null){this[_0x6ae2[0]][_0x6ae2[158]]= _0x1378x15}}catch(e){mxUtils[_0x6ae2[162]](mxResources[_0x6ae2[145]](_0x6ae2[159])+ _0x6ae2[160]+ e[_0x6ae2[161]])}}))}}catch(e){}};EditorUi[_0x6ae2[10]][_0x6ae2[164]]= function(_0x1378x14,_0x1378x15,_0x1378x17){try{var _0x1378x16=mxUtils[_0x6ae2[152]](_0x1378x14);this[_0x6ae2[0]][_0x6ae2[154]](_0x1378x16[_0x6ae2[153]]);this[_0x6ae2[0]][_0x6ae2[155]]= false;this[_0x6ae2[0]][_0x6ae2[157]][_0x6ae2[156]]();if(_0x1378x15!= null){this[_0x6ae2[0]][_0x6ae2[158]]= _0x1378x15};if(_0x1378x17!= null){this[_0x6ae2[0]][_0x6ae2[165]]= _0x1378x17}}catch(e){mxUtils[_0x6ae2[162]](mxResources[_0x6ae2[145]](_0x6ae2[159])+ _0x6ae2[160]+ e[_0x6ae2[161]])}};EditorUi[_0x6ae2[10]][_0x6ae2[166]]= function(_0x1378x18){var _0x1378x1=this[_0x6ae2[0]];if(_0x1378x18!= null){var _0x1378x14=mxUtils[_0x6ae2[168]](this[_0x6ae2[0]][_0x6ae2[167]]());try{if(useLocalStorage){if(localStorage[_0x6ae2[169]](_0x1378x18)!= null&& !mxUtils[_0x6ae2[171]](mxResources[_0x6ae2[145]](_0x6ae2[170],[_0x1378x18]))){return};localStorage[_0x6ae2[172]](_0x1378x18,_0x1378x14);this[_0x6ae2[0]][_0x6ae2[175]](mxResources[_0x6ae2[145]](_0x6ae2[173])+ _0x6ae2[174]+ new Date())}else {console[_0x6ae2[177]](_0x1378x14[_0x6ae2[176]]);console[_0x6ae2[177]](MAX_REQUEST_SIZE);if(_0x1378x14[_0x6ae2[176]]< MAX_REQUEST_SIZE){_0x1378x14= encodeURIComponent(_0x1378x14);_0x1378x18= encodeURIComponent(_0x1378x18);var _0x1378x19= new XMLHttpRequest();_0x1378x19[_0x6ae2[135]](_0x6ae2[178],SAVE_URL,true);_0x1378x19[_0x6ae2[181]](_0x6ae2[179],_0x6ae2[180]);_0x1378x19[_0x6ae2[181]](_0x6ae2[182],_0x6ae2[183]+ _0x1378x1[_0x6ae2[165]][_0x6ae2[184]]);_0x1378x19[_0x6ae2[185]]= function(_0x1378x1a){if(_0x1378x19[_0x6ae2[186]]=== 4){if(_0x1378x19[_0x6ae2[187]]=== 201){_0x1378x1[_0x6ae2[175]](_0x6ae2[188]+ JSON[_0x6ae2[191]](_0x1378x19[_0x6ae2[190]])[_0x6ae2[189]]+ _0x6ae2[192]);setTimeout(function(){window[_0x6ae2[135]](_0x6ae2[193]+ JSON[_0x6ae2[191]](_0x1378x19[_0x6ae2[190]])[_0x6ae2[194]],_0x6ae2[195])},1500)}else {try{var _0x1378x1b=JSON[_0x6ae2[191]](_0x1378x19[_0x6ae2[190]]);_0x1378x1[_0x6ae2[175]](_0x6ae2[196]+ _0x1378x1b[_0x6ae2[197]][0][_0x6ae2[161]])}catch(_0x1378x1a){_0x1378x1[_0x6ae2[175]](_0x6ae2[198]+ _0x6ae2[199]+ _0x1378x19[_0x6ae2[187]]+ _0x6ae2[174]+ _0x1378x19[_0x6ae2[200]]+ _0x6ae2[44])}}}};_0x1378x19[_0x6ae2[201]]= function(_0x1378x1a){mxUtils[_0x6ae2[162]](_0x1378x19[_0x6ae2[200]])};_0x1378x19[_0x6ae2[203]](_0x6ae2[202]+ _0x1378x18)}else {mxUtils[_0x6ae2[162]](mxResources[_0x6ae2[145]](_0x6ae2[204]));mxUtils[_0x6ae2[205]](_0x1378x14);return}};this[_0x6ae2[0]][_0x6ae2[158]]= _0x1378x18;this[_0x6ae2[0]][_0x6ae2[155]]= false}catch(e){this[_0x6ae2[0]][_0x6ae2[175]](_0x6ae2[198])}}else {this[_0x6ae2[0]][_0x6ae2[175]](_0x6ae2[198])}};EditorUi[_0x6ae2[10]][_0x6ae2[206]]= function(_0x1378x18){var _0x1378x1=this[_0x6ae2[0]];if(_0x1378x18!= null){var _0x1378x14=mxUtils[_0x6ae2[168]](this[_0x6ae2[0]][_0x6ae2[167]]());try{if(useLocalStorage){if(localStorage[_0x6ae2[169]](_0x1378x18)!= null&& !mxUtils[_0x6ae2[171]](mxResources[_0x6ae2[145]](_0x6ae2[170],[_0x1378x18]))){return};localStorage[_0x6ae2[172]](_0x1378x18,_0x1378x14);this[_0x6ae2[0]][_0x6ae2[175]](mxResources[_0x6ae2[145]](_0x6ae2[173])+ _0x6ae2[174]+ new Date())}else {console[_0x6ae2[177]](_0x1378x14[_0x6ae2[176]]);console[_0x6ae2[177]](MAX_REQUEST_SIZE);if(_0x1378x14[_0x6ae2[176]]< MAX_REQUEST_SIZE){_0x1378x14= encodeURIComponent(_0x1378x14);var _0x1378x19= new XMLHttpRequest();_0x1378x19[_0x6ae2[135]](_0x6ae2[207],SAVE_URL+ this[_0x6ae2[0]][_0x6ae2[165]][_0x6ae2[194]],true);_0x1378x19[_0x6ae2[181]](_0x6ae2[179],_0x6ae2[180]);_0x1378x19[_0x6ae2[181]](_0x6ae2[182],_0x6ae2[183]+ _0x1378x1[_0x6ae2[165]][_0x6ae2[184]]);_0x1378x19[_0x6ae2[185]]= function(_0x1378x1a){if(_0x1378x19[_0x6ae2[186]]=== 4){if(_0x1378x19[_0x6ae2[187]]=== 200){_0x1378x1[_0x6ae2[175]](_0x6ae2[208]+ JSON[_0x6ae2[191]](_0x1378x19[_0x6ae2[190]])[_0x6ae2[209]]+ _0x6ae2[199]+ _0x1378x19[_0x6ae2[187]]+ _0x6ae2[174]+ _0x1378x19[_0x6ae2[200]]+ _0x6ae2[44])}else {try{var _0x1378x1b=JSON[_0x6ae2[191]](_0x1378x19[_0x6ae2[190]]);_0x1378x1[_0x6ae2[175]](_0x6ae2[210]+ _0x1378x1b[_0x6ae2[197]][0][_0x6ae2[161]])}catch(_0x1378x1a){_0x1378x1[_0x6ae2[175]](_0x6ae2[211]+ _0x6ae2[199]+ _0x1378x19[_0x6ae2[187]]+ _0x6ae2[174]+ _0x1378x19[_0x6ae2[200]]+ _0x6ae2[44])}}}};_0x1378x19[_0x6ae2[201]]= function(_0x1378x1a){mxUtils[_0x6ae2[162]](_0x1378x19[_0x6ae2[200]])};_0x1378x19[_0x6ae2[203]](_0x6ae2[212]+ _0x1378x14)}else {mxUtils[_0x6ae2[162]](mxResources[_0x6ae2[145]](_0x6ae2[204]));mxUtils[_0x6ae2[205]](_0x1378x14);return}};this[_0x6ae2[0]][_0x6ae2[158]]= _0x1378x18;this[_0x6ae2[0]][_0x6ae2[155]]= false}catch(e){this[_0x6ae2[0]][_0x6ae2[175]](_0x6ae2[213])}}else {this[_0x6ae2[0]][_0x6ae2[175]](_0x6ae2[213])}};EditorUi[_0x6ae2[10]][_0x6ae2[214]]= function(_0x1378x1c){var _0x1378x1=this[_0x6ae2[0]];if(_0x1378x1c!== null){var _0x1378x19= new XMLHttpRequest();_0x1378x19[_0x6ae2[135]](_0x6ae2[207],SAVE_URL+ this[_0x6ae2[0]][_0x6ae2[165]][_0x6ae2[194]],true);_0x1378x19[_0x6ae2[181]](_0x6ae2[179],_0x6ae2[180]);_0x1378x19[_0x6ae2[181]](_0x6ae2[182],_0x6ae2[183]+ _0x1378x1[_0x6ae2[165]][_0x6ae2[184]]);_0x1378x19[_0x6ae2[185]]= function(_0x1378x1a){if(_0x1378x19[_0x6ae2[186]]=== 4){if(_0x1378x19[_0x6ae2[187]]=== 200){_0x1378x1[_0x6ae2[175]](_0x6ae2[208]+ JSON[_0x6ae2[191]](_0x1378x19[_0x6ae2[190]])[_0x6ae2[209]]+ _0x6ae2[199]+ _0x1378x19[_0x6ae2[187]]+ _0x6ae2[174]+ _0x1378x19[_0x6ae2[200]]+ _0x6ae2[44]);_0x1378x1[_0x6ae2[165]][_0x6ae2[214]]= _0x1378x1c}else {try{var _0x1378x1b=JSON[_0x6ae2[191]](_0x1378x19[_0x6ae2[190]]);_0x1378x1[_0x6ae2[175]](_0x6ae2[215]+ _0x1378x1b[_0x6ae2[197]][0][_0x6ae2[161]])}catch(_0x1378x1a){_0x1378x1[_0x6ae2[175]](_0x6ae2[216]+ _0x6ae2[199]+ _0x1378x19[_0x6ae2[187]]+ _0x6ae2[174]+ _0x1378x19[_0x6ae2[200]]+ _0x6ae2[44])}}}};_0x1378x19[_0x6ae2[201]]= function(_0x1378x1a){mxUtils[_0x6ae2[162]](_0x1378x19[_0x6ae2[200]])};_0x1378x19[_0x6ae2[203]](_0x6ae2[217]+ _0x1378x1c)}else {this[_0x6ae2[0]][_0x6ae2[175]](_0x6ae2[216])}};EditorUi[_0x6ae2[10]][_0x6ae2[218]]= function(_0x1378x18){var _0x1378x1=this[_0x6ae2[0]];if(_0x1378x18!= null){var _0x1378x14=mxUtils[_0x6ae2[168]](this[_0x6ae2[0]][_0x6ae2[167]]());try{if(useLocalStorage){if(localStorage[_0x6ae2[169]](_0x1378x18)!= null&& !mxUtils[_0x6ae2[171]](mxResources[_0x6ae2[145]](_0x6ae2[170],[_0x1378x18]))){return};localStorage[_0x6ae2[172]](_0x1378x18,_0x1378x14);this[_0x6ae2[0]][_0x6ae2[175]](mxResources[_0x6ae2[145]](_0x6ae2[173])+ _0x6ae2[174]+ new Date())}else {console[_0x6ae2[177]](_0x1378x14[_0x6ae2[176]]);console[_0x6ae2[177]](MAX_REQUEST_SIZE);if(_0x1378x14[_0x6ae2[176]]< MAX_REQUEST_SIZE){_0x1378x14= encodeURIComponent(_0x1378x14);_0x1378x18= encodeURIComponent(_0x1378x18);var _0x1378x19= new XMLHttpRequest();_0x1378x19[_0x6ae2[135]](_0x6ae2[178],SAVE_URL,true);_0x1378x19[_0x6ae2[181]](_0x6ae2[179],_0x6ae2[180]);_0x1378x19[_0x6ae2[181]](_0x6ae2[182],_0x6ae2[183]+ _0x1378x1[_0x6ae2[165]][_0x6ae2[184]]);_0x1378x19[_0x6ae2[185]]= function(_0x1378x1a){if(_0x1378x19[_0x6ae2[186]]=== 4){if(_0x1378x19[_0x6ae2[187]]=== 201){_0x1378x1[_0x6ae2[175]](_0x6ae2[188]+ JSON[_0x6ae2[191]](_0x1378x19[_0x6ae2[190]])[_0x6ae2[189]]+ _0x6ae2[192]);setTimeout(function(){window[_0x6ae2[135]](_0x6ae2[193]+ JSON[_0x6ae2[191]](_0x1378x19[_0x6ae2[190]])[_0x6ae2[194]],_0x6ae2[195])},1500)}else {try{var _0x1378x1b=JSON[_0x6ae2[191]](_0x1378x19[_0x6ae2[190]]);_0x1378x1[_0x6ae2[175]](_0x6ae2[219]+ _0x1378x1b[_0x6ae2[197]][0][_0x6ae2[161]])}catch(_0x1378x1a){_0x1378x1[_0x6ae2[175]](_0x6ae2[220]+ _0x6ae2[199]+ _0x1378x19[_0x6ae2[187]]+ _0x6ae2[174]+ _0x1378x19[_0x6ae2[200]]+ _0x6ae2[44])}}}};_0x1378x19[_0x6ae2[201]]= function(_0x1378x1a){mxUtils[_0x6ae2[162]](_0x1378x19[_0x6ae2[200]])};_0x1378x19[_0x6ae2[203]](_0x6ae2[221]+ _0x1378x18+ _0x6ae2[222]+ _0x1378x14+ _0x6ae2[223]+ _0x1378x14)}else {mxUtils[_0x6ae2[162]](mxResources[_0x6ae2[145]](_0x6ae2[204]));mxUtils[_0x6ae2[205]](_0x1378x14);return}};this[_0x6ae2[0]][_0x6ae2[158]]= _0x1378x18;this[_0x6ae2[0]][_0x6ae2[155]]= false}catch(e){this[_0x6ae2[0]][_0x6ae2[175]](_0x6ae2[213])}}else {this[_0x6ae2[0]][_0x6ae2[175]](_0x6ae2[213])}};EditorUi[_0x6ae2[10]][_0x6ae2[224]]= function(_0x1378x1d,_0x1378x1e){var _0x1378x3=this[_0x6ae2[0]][_0x6ae2[4]];for(var _0x1378x1d=_0x1378x1d!= null?_0x1378x1d:_0x1378x3[_0x6ae2[226]][_0x6ae2[225]](),_0x1378x1e=_0x1378x1e!= null?_0x1378x1e:{},_0x1378x1f=true,_0x1378x20=_0x1378x3[_0x6ae2[226]][_0x6ae2[227]](_0x1378x1d),_0x1378x1a=0;_0x1378x1a< _0x1378x20;_0x1378x1a++){var _0x1378x21=_0x1378x3[_0x6ae2[226]][_0x6ae2[228]](_0x1378x1d,_0x1378x1a),_0x1378x22=_0x1378x1e;_0x1378x3[_0x6ae2[229]](_0x1378x21)&& (_0x1378x22= {});_0x1378x22= this[_0x6ae2[224]](_0x1378x21,_0x1378x22);_0x1378x22!= null?_0x1378x3[_0x6ae2[231]](_0x1378x21,_0x1378x22[_0x6ae2[170]](/\n/g,_0x6ae2[230])):_0x1378x3[_0x6ae2[231]](_0x1378x21,null);_0x1378x1f= _0x1378x1f&& _0x1378x22== null};_0x1378x20= _0x6ae2[232];if(_0x1378x3[_0x6ae2[226]][_0x6ae2[105]](_0x1378x1d)){switch(_0x1378x1d[_0x6ae2[101]][_0x6ae2[291]]){case _0x6ae2[52]:_0x1378x20= this[_0x6ae2[233]](_0x6ae2[52])?_0x6ae2[232]:_0x6ae2[234]+ _0x6ae2[235];break;case _0x6ae2[53]:_0x1378x20= this[_0x6ae2[233]](_0x6ae2[53])?_0x6ae2[232]:_0x6ae2[236]+ _0x6ae2[235];break;case _0x6ae2[67]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[237])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[239])+ _0x6ae2[235];break;case _0x6ae2[66]:;case _0x6ae2[68]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[237])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[239])+ _0x6ae2[235];_0x1378x20+= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[240])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[241])+ _0x6ae2[235];break;case _0x6ae2[74]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[237])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[239])+ _0x6ae2[235];_0x1378x20+= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[242])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[243])+ _0x6ae2[235];_0x1378x20+= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[244])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[245])+ _0x6ae2[235];_0x1378x20+= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[246])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[241])+ _0x6ae2[235];case _0x6ae2[75]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[237])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[239])+ _0x6ae2[235];_0x1378x20+= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[242])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[243])+ _0x6ae2[235];_0x1378x20+= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[244])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[245])+ _0x6ae2[235];_0x1378x20+= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[246])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[241])+ _0x6ae2[235];_0x1378x20+= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[247])>= 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[248])+ _0x6ae2[235];break;case _0x6ae2[85]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[249])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[243])+ _0x6ae2[235];break;case _0x6ae2[77]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[250])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[251])+ _0x6ae2[235];break;case _0x6ae2[60]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[252])!== _0x6ae2[253])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[254])+ _0x6ae2[235];break;case _0x6ae2[64]:;case _0x6ae2[65]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[242])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[243])+ _0x6ae2[235];break;case _0x6ae2[81]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[255])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[256])+ _0x6ae2[235];break;case _0x6ae2[89]:;case _0x6ae2[90]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[257])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[258])+ _0x6ae2[235];break;case _0x6ae2[82]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[259])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[260])+ _0x6ae2[235];break;case _0x6ae2[69]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[261])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[262])+ _0x6ae2[235];break;case _0x6ae2[70]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[263])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[264])+ _0x6ae2[235];break;case _0x6ae2[71]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[265])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[266])+ _0x6ae2[235];break;case _0x6ae2[76]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[267])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[268])+ _0x6ae2[235];break;case _0x6ae2[87]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[269])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[270])+ _0x6ae2[235];break;case _0x6ae2[60]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[271])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[272])+ _0x6ae2[235];break;case _0x6ae2[59]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[273])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[272])+ _0x6ae2[235];break;case _0x6ae2[61]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[274])!== _0x6ae2[253])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[275])+ _0x6ae2[235];break;case _0x6ae2[63]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[276])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[277])+ _0x6ae2[235];break;case _0x6ae2[83]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[278])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[279])+ _0x6ae2[235];break;case _0x6ae2[84]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[278])!= _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[279])+ _0x6ae2[235];break;case _0x6ae2[62]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[280])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[281])+ _0x6ae2[235];break;case _0x6ae2[91]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[282])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[283])+ _0x6ae2[235];break;case _0x6ae2[79]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[284])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[285])+ _0x6ae2[235];_0x1378x20+= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[286])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[287])+ _0x6ae2[235];_0x1378x20+= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[288])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[266])+ _0x6ae2[235];break;case _0x6ae2[80]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[284])> 0)?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[285])+ _0x6ae2[235];_0x1378x20+= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[286])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[287])+ _0x6ae2[235];break;case _0x6ae2[72]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[265])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[266])+ _0x6ae2[235];break;case _0x6ae2[73]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[265])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[266])+ _0x6ae2[235];_0x1378x20+= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[289])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[290])+ _0x6ae2[235];break;case _0x6ae2[78]:_0x1378x20= (_0x1378x1d[_0x6ae2[101]][_0x6ae2[238]](_0x6ae2[289])!== _0x6ae2[232])?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[290])+ _0x6ae2[235];break}};if(_0x1378x3[_0x6ae2[226]][_0x6ae2[98]](_0x1378x1d)){var _0x1378x23=_0x1378x3[_0x6ae2[226]][_0x6ae2[293]](_0x1378x1d[_0x6ae2[102]][_0x6ae2[292]]());switch(_0x1378x23[_0x6ae2[101]][_0x6ae2[291]]){case _0x6ae2[66]:var _0x1378x24=/^[0-9]{1,45}$|^[i]{1}$|^[t]{1}|^[#]{1}|^[*]{1}$/;_0x1378x20= _0x1378x20+ ((_0x1378x24[_0x6ae2[295]](String(_0x1378x1d[_0x6ae2[294]]())))?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[296])+ _0x6ae2[235]);break;case _0x6ae2[68]:var _0x1378x24=/^[0-9]{1,45}$|^[-]{1}$|^[i]{1}$|^[t]{1}|^[#]{1}|^[*]{1}$/;var _0x1378x25=String(_0x1378x1d[_0x6ae2[294]]());var _0x1378x26=_0x1378x25[_0x6ae2[298]](_0x6ae2[297]);_0x1378x26[_0x6ae2[300]](function(_0x1378x27){_0x1378x20= _0x1378x20+ ((_0x1378x24[_0x6ae2[295]](_0x1378x27))?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[299])+ _0x6ae2[235])});break;case _0x6ae2[75]:;case _0x6ae2[74]:var _0x1378x24=/^(x|i|-)$/;var _0x1378x25=String(_0x1378x1d[_0x6ae2[294]]());_0x1378x20= _0x1378x20+ ((_0x1378x24[_0x6ae2[295]](_0x1378x25))?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[301])+ _0x6ae2[235]);break;case _0x6ae2[82]:;case _0x6ae2[83]:;case _0x6ae2[84]:var _0x1378x24=/^(true){1}$|^(false){1}$/;_0x1378x20= _0x1378x20+ ((_0x1378x24[_0x6ae2[295]](String(_0x1378x1d[_0x6ae2[294]]())))?_0x6ae2[232]:mxResources[_0x6ae2[145]](_0x6ae2[302])+ _0x6ae2[235]);break}};_0x1378x3[_0x6ae2[303]](_0x1378x1d)&& !_0x1378x1f&& (_0x1378x20= _0x1378x20+ ((mxResources[_0x6ae2[145]](_0x1378x3[_0x6ae2[304]])|| _0x1378x3[_0x6ae2[304]])+ _0x6ae2[235]));_0x1378x20= _0x1378x3[_0x6ae2[226]][_0x6ae2[98]](_0x1378x1d)?_0x1378x20+ (_0x1378x3[_0x6ae2[306]](_0x1378x1d,_0x1378x3[_0x6ae2[226]][_0x6ae2[305]](_0x1378x1d,true),_0x1378x3[_0x6ae2[226]][_0x6ae2[305]](_0x1378x1d,false))|| _0x6ae2[232]):_0x1378x20+ (_0x1378x3[_0x6ae2[307]](_0x1378x1d)|| _0x6ae2[232]);_0x1378x1a= _0x1378x3[_0x6ae2[308]](_0x1378x1d,_0x1378x1e);_0x1378x1a!= null&& (_0x1378x20= _0x1378x20+ _0x1378x1a);_0x1378x3[_0x6ae2[226]][_0x6ae2[309]](_0x1378x1d)== null&& _0x1378x3[_0x6ae2[122]][_0x6ae2[224]]();return _0x1378x20[_0x6ae2[176]]> 0|| !_0x1378x1f?_0x1378x20:null};EditorUi[_0x6ae2[10]][_0x6ae2[233]]= function(_0x1378x28){var _0x1378x3=this[_0x6ae2[0]][_0x6ae2[4]];var _0x1378x29=_0x1378x3[_0x6ae2[310]]();var _0x1378x2a=0;_0x1378x29[_0x6ae2[311]][_0x6ae2[300]](function(_0x1378x2b){if(_0x1378x3[_0x6ae2[226]][_0x6ae2[105]](_0x1378x2b)&& _0x1378x2b[_0x6ae2[101]][_0x6ae2[291]]== _0x1378x28){_0x1378x2a++}});return _0x1378x2a> 1?false:true};EditorUi[_0x6ae2[10]][_0x6ae2[312]]= function(_0x1378x18){var _0x1378x1=this[_0x6ae2[0]];if(_0x1378x18!= null){var _0x1378x1b=this[_0x6ae2[224]]();if(_0x1378x1b=== null){var _0x1378x14=mxUtils[_0x6ae2[168]](this[_0x6ae2[0]][_0x6ae2[167]]());try{if(useLocalStorage){if(localStorage[_0x6ae2[169]](_0x1378x18)!= null&& !mxUtils[_0x6ae2[171]](mxResources[_0x6ae2[145]](_0x6ae2[170],[_0x1378x18]))){return};localStorage[_0x6ae2[172]](_0x1378x18,_0x1378x14);this[_0x6ae2[0]][_0x6ae2[175]](mxResources[_0x6ae2[145]](_0x6ae2[173])+ _0x6ae2[174]+ new Date())}else {console[_0x6ae2[177]](_0x1378x14[_0x6ae2[176]]);console[_0x6ae2[177]](MAX_REQUEST_SIZE);if(_0x1378x14[_0x6ae2[176]]< MAX_REQUEST_SIZE){_0x1378x14= encodeURIComponent(_0x1378x14);var _0x1378x19= new XMLHttpRequest();_0x1378x19[_0x6ae2[135]](_0x6ae2[207],SAVE_URL+ this[_0x6ae2[0]][_0x6ae2[165]][_0x6ae2[194]],true);_0x1378x19[_0x6ae2[181]](_0x6ae2[179],_0x6ae2[180]);_0x1378x19[_0x6ae2[181]](_0x6ae2[182],_0x6ae2[183]+ _0x1378x1[_0x6ae2[165]][_0x6ae2[184]]);_0x1378x19[_0x6ae2[185]]= function(_0x1378x1a){if(_0x1378x19[_0x6ae2[186]]=== 4){if(_0x1378x19[_0x6ae2[187]]=== 200){_0x1378x1[_0x6ae2[175]](_0x6ae2[313]+ JSON[_0x6ae2[191]](_0x1378x19[_0x6ae2[190]])[_0x6ae2[209]]+ _0x6ae2[199]+ _0x1378x19[_0x6ae2[187]]+ _0x6ae2[174]+ _0x1378x19[_0x6ae2[200]]+ _0x6ae2[44])}else {try{var _0x1378x1b=JSON[_0x6ae2[191]](_0x1378x19[_0x6ae2[190]]);_0x1378x1[_0x6ae2[175]](_0x6ae2[314]+ _0x1378x1b[_0x6ae2[197]][0][_0x6ae2[161]])}catch(_0x1378x1a){_0x1378x1[_0x6ae2[175]](_0x6ae2[315]+ _0x6ae2[199]+ _0x1378x19[_0x6ae2[187]]+ _0x6ae2[174]+ _0x1378x19[_0x6ae2[200]]+ _0x6ae2[44])}}}};_0x1378x19[_0x6ae2[201]]= function(_0x1378x1a){mxUtils[_0x6ae2[162]](_0x1378x19[_0x6ae2[200]])};_0x1378x19[_0x6ae2[203]](_0x6ae2[212]+ _0x1378x14+ _0x6ae2[223]+ _0x1378x14)}else {mxUtils[_0x6ae2[162]](mxResources[_0x6ae2[145]](_0x6ae2[204]));mxUtils[_0x6ae2[205]](_0x1378x14);return}};this[_0x6ae2[0]][_0x6ae2[158]]= _0x1378x18;this[_0x6ae2[0]][_0x6ae2[155]]= false}catch(e){this[_0x6ae2[0]][_0x6ae2[175]](_0x6ae2[316])}}else {_0x1378x1[_0x6ae2[175]](_0x6ae2[314])}}else {this[_0x6ae2[0]][_0x6ae2[175]](_0x6ae2[316])}};EditorUi[_0x6ae2[10]][_0x6ae2[249]]= function(_0x1378x18,_0x1378x1c){var _0x1378x1=this[_0x6ae2[0]];if(_0x1378x18!= null){try{var _0x1378x19= new XMLHttpRequest();_0x1378x19[_0x6ae2[135]](_0x6ae2[178],VARIABLE_URL,true);_0x1378x19[_0x6ae2[181]](_0x6ae2[179],_0x6ae2[180]);_0x1378x19[_0x6ae2[181]](_0x6ae2[182],_0x6ae2[183]+ _0x1378x1[_0x6ae2[165]][_0x6ae2[184]]);_0x1378x19[_0x6ae2[185]]= function(_0x1378x1a){if(_0x1378x19[_0x6ae2[186]]=== 4){if(_0x1378x19[_0x6ae2[187]]=== 201){_0x1378x1[_0x6ae2[175]](_0x6ae2[317]+ JSON[_0x6ae2[191]](_0x1378x19[_0x6ae2[190]])[_0x6ae2[318]]+ _0x6ae2[199]+ _0x1378x19[_0x6ae2[187]]+ _0x6ae2[174]+ _0x1378x19[_0x6ae2[200]]+ _0x6ae2[44])}else {try{var _0x1378x1b=JSON[_0x6ae2[191]](_0x1378x19[_0x6ae2[190]]);_0x1378x1[_0x6ae2[175]](_0x6ae2[319]+ _0x1378x1b[_0x6ae2[197]][0][_0x6ae2[161]])}catch(_0x1378x1a){_0x1378x1[_0x6ae2[175]](_0x6ae2[320]+ _0x6ae2[199]+ _0x1378x19[_0x6ae2[187]]+ _0x6ae2[174]+ _0x1378x19[_0x6ae2[200]]+ _0x6ae2[44])}}}};_0x1378x19[_0x6ae2[201]]= function(_0x1378x1a){mxUtils[_0x6ae2[162]](_0x1378x19[_0x6ae2[200]])};_0x1378x19[_0x6ae2[203]](_0x6ae2[321]+ _0x1378x18+ _0x6ae2[322]+ _0x1378x1c)}catch(e){this[_0x6ae2[0]][_0x6ae2[175]](_0x6ae2[320])}}else {this[_0x6ae2[0]][_0x6ae2[175]](_0x6ae2[320])}};EditorUi[_0x6ae2[10]][_0x6ae2[323]]= function(_0x1378x2c){var _0x1378x2d=(_0x1378x2c!= null)?_0x1378x2c:window[_0x6ae2[325]][_0x6ae2[324]];var _0x1378x2e=(_0x1378x2d[_0x6ae2[103]](_0x6ae2[326])> 0)?1:0;for(var _0x1378x2f in urlParams){if(_0x1378x2e== 0){_0x1378x2d+= _0x6ae2[326]}else {_0x1378x2d+= _0x6ae2[327]};_0x1378x2d+= _0x1378x2f+ _0x6ae2[328]+ urlParams[_0x1378x2f];_0x1378x2e++};return _0x1378x2d};EditorUi[_0x6ae2[10]][_0x6ae2[142]]= function(){var _0x1378x30=this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[329]);var _0x1378x31=this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[330]);var _0x1378x32=this[_0x6ae2[0]][_0x6ae2[157]];var _0x1378x33=function(){_0x1378x30[_0x6ae2[147]](_0x1378x32[_0x6ae2[331]]());_0x1378x31[_0x6ae2[147]](_0x1378x32[_0x6ae2[332]]())};_0x1378x32[_0x6ae2[33]](mxEvent.ADD,_0x1378x33);_0x1378x32[_0x6ae2[33]](mxEvent.UNDO,_0x1378x33);_0x1378x32[_0x6ae2[33]](mxEvent.REDO,_0x1378x33);_0x1378x32[_0x6ae2[33]](mxEvent.CLEAR,_0x1378x33);_0x1378x33()};EditorUi[_0x6ae2[10]][_0x6ae2[143]]= function(){var _0x1378x34=mxUtils[_0x6ae2[20]](this,function(){var _0x1378x3=this[_0x6ae2[0]][_0x6ae2[4]];var _0x1378x35=!_0x1378x3[_0x6ae2[333]]();var _0x1378x36=false;var _0x1378x37=false;var _0x1378x38=_0x1378x3[_0x6ae2[334]]();if(_0x1378x38!= null){for(var _0x1378x39=0;_0x1378x39< _0x1378x38[_0x6ae2[176]];_0x1378x39++){var _0x1378xb=_0x1378x38[_0x1378x39];if(_0x1378x3[_0x6ae2[99]]()[_0x6ae2[98]](_0x1378xb)){_0x1378x37= true};if(_0x1378x3[_0x6ae2[99]]()[_0x6ae2[105]](_0x1378xb)){_0x1378x36= true};if(_0x1378x37&& _0x1378x36){break}}};var _0x1378x3a=[_0x6ae2[148],_0x6ae2[149],_0x6ae2[335],_0x6ae2[336],_0x6ae2[337],_0x6ae2[338],_0x6ae2[6],_0x6ae2[339],_0x6ae2[340],_0x6ae2[341],_0x6ae2[342],_0x6ae2[343],_0x6ae2[344],_0x6ae2[345],_0x6ae2[346]];for(var _0x1378x39=0;_0x1378x39< _0x1378x3a[_0x6ae2[176]];_0x1378x39++){this[_0x6ae2[12]][_0x6ae2[145]](_0x1378x3a[_0x1378x39])[_0x6ae2[147]](_0x1378x35)};this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[347])[_0x6ae2[147]](_0x1378x37);this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[348])[_0x6ae2[147]](_0x1378x36);this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[349])[_0x6ae2[147]](_0x1378x36);this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[351])[_0x6ae2[147]](_0x1378x3[_0x6ae2[350]]()> 1);this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[353])[_0x6ae2[147]](_0x1378x3[_0x6ae2[350]]()== 1&& _0x1378x3[_0x6ae2[99]]()[_0x6ae2[227]](_0x1378x3[_0x6ae2[352]]())> 0);var _0x1378x3b=_0x1378x36&& _0x1378x3[_0x6ae2[350]]()== 1;this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[354])[_0x6ae2[147]](_0x1378x3b&& _0x1378x3[_0x6ae2[99]]()[_0x6ae2[105]](_0x1378x3[_0x6ae2[99]]()[_0x6ae2[309]](_0x1378x3[_0x6ae2[352]]())));var _0x1378x3c=[_0x6ae2[355],_0x6ae2[356],_0x6ae2[357],_0x6ae2[358],_0x6ae2[265],_0x6ae2[359],_0x6ae2[360],_0x6ae2[361],_0x6ae2[362]];for(var _0x1378x39=0;_0x1378x39< _0x1378x3c[_0x6ae2[176]];_0x1378x39++){this[_0x6ae2[13]][_0x6ae2[145]](_0x1378x3c[_0x1378x39])[_0x6ae2[147]](_0x1378x35)};_0x1378x3c= [_0x6ae2[363],_0x6ae2[364],_0x6ae2[365]];for(var _0x1378x39=0;_0x1378x39< _0x1378x3c[_0x6ae2[176]];_0x1378x39++){this[_0x6ae2[13]][_0x6ae2[145]](_0x1378x3c[_0x1378x39])[_0x6ae2[147]](_0x1378x37)};this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[366])[_0x6ae2[147]](_0x1378x37);this[_0x6ae2[13]][_0x6ae2[145]](_0x6ae2[367])[_0x6ae2[147]](_0x1378x3[_0x6ae2[350]]()> 1);this[_0x6ae2[13]][_0x6ae2[145]](_0x6ae2[370])[_0x6ae2[147]](_0x1378x36|| (_0x1378x37&& _0x1378x3[_0x6ae2[369]](_0x1378x3[_0x6ae2[122]][_0x6ae2[368]](_0x1378x3[_0x6ae2[352]]()))));this[_0x6ae2[13]][_0x6ae2[145]](_0x6ae2[373])[_0x6ae2[147]](_0x1378x3[_0x6ae2[371]]&& ((_0x1378x3[_0x6ae2[122]][_0x6ae2[372]]!= null)|| (_0x1378x3[_0x6ae2[350]]()== 1&& _0x1378x3[_0x6ae2[229]](_0x1378x3[_0x6ae2[352]]()))));this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[374])[_0x6ae2[147]](_0x1378x3[_0x6ae2[122]][_0x6ae2[372]]!= null);this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[375])[_0x6ae2[147]](_0x1378x3[_0x6ae2[122]][_0x6ae2[372]]!= null);var _0x1378x3d=_0x1378x3[_0x6ae2[350]]()== 1&& _0x1378x3[_0x6ae2[229]](_0x1378x3[_0x6ae2[352]]());this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[376])[_0x6ae2[147]](_0x1378x3d);this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[377])[_0x6ae2[147]](_0x1378x3d);this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[378])[_0x6ae2[147]](_0x1378x3d);this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[379])[_0x6ae2[147]](_0x1378x3[_0x6ae2[350]]()== 1);this[_0x6ae2[12]][_0x6ae2[145]](_0x6ae2[381])[_0x6ae2[147]](_0x1378x3[_0x6ae2[350]]()== 1&& _0x1378x3[_0x6ae2[380]](_0x1378x3[_0x6ae2[352]]())!= null)});this[_0x6ae2[0]][_0x6ae2[4]][_0x6ae2[382]]()[_0x6ae2[33]](mxEvent.CHANGE,_0x1378x34);_0x1378x34()};EditorUi[_0x6ae2[10]][_0x6ae2[15]]= function(){var _0x1378x3e=mxClient[_0x6ae2[29]]&& (document[_0x6ae2[30]]== null|| document[_0x6ae2[30]]== 5);var _0x1378x3f=this[_0x6ae2[1]][_0x6ae2[383]];var _0x1378x40=this[_0x6ae2[1]][_0x6ae2[384]];if(this[_0x6ae2[1]]== document[_0x6ae2[21]]){_0x1378x3f= document[_0x6ae2[21]][_0x6ae2[383]]|| document[_0x6ae2[153]][_0x6ae2[383]];_0x1378x40= (_0x1378x3e)?document[_0x6ae2[21]][_0x6ae2[384]]|| document[_0x6ae2[153]][_0x6ae2[384]]:document[_0x6ae2[153]][_0x6ae2[384]]};var _0x1378x41=Math[_0x6ae2[386]](0,Math[_0x6ae2[385]](this[_0x6ae2[140]],_0x1378x3f- this[_0x6ae2[136]]- 20));var _0x1378x42=Math[_0x6ae2[386]](0,Math[_0x6ae2[385]](this[_0x6ae2[141]],_0x1378x40- this[_0x6ae2[137]]- this[_0x6ae2[138]]- this[_0x6ae2[139]]- this[_0x6ae2[136]]- 1));this[_0x6ae2[23]][_0x6ae2[6]][_0x6ae2[387]]= this[_0x6ae2[137]]+ _0x6ae2[388];this[_0x6ae2[25]][_0x6ae2[6]][_0x6ae2[389]]= this[_0x6ae2[137]]+ _0x6ae2[388];this[_0x6ae2[25]][_0x6ae2[6]][_0x6ae2[387]]= this[_0x6ae2[138]]+ _0x6ae2[388];var _0x1378x43=this[_0x6ae2[137]]+ this[_0x6ae2[138]];if(!mxClient[_0x6ae2[390]]){_0x1378x43+= 1};this[_0x6ae2[27]][_0x6ae2[6]][_0x6ae2[389]]= _0x1378x43+ _0x6ae2[388];this[_0x6ae2[27]][_0x6ae2[6]][_0x6ae2[391]]= _0x1378x41+ _0x6ae2[388];this[_0x6ae2[112]][_0x6ae2[6]][_0x6ae2[391]]= _0x1378x41+ _0x6ae2[388];this[_0x6ae2[112]][_0x6ae2[6]][_0x6ae2[387]]= _0x1378x42+ _0x6ae2[388];this[_0x6ae2[112]][_0x6ae2[6]][_0x6ae2[392]]= this[_0x6ae2[139]]+ _0x6ae2[388];this[_0x6ae2[26]][_0x6ae2[6]][_0x6ae2[393]]= (_0x1378x41+ this[_0x6ae2[136]])+ _0x6ae2[388];this[_0x6ae2[26]][_0x6ae2[6]][_0x6ae2[389]]= this[_0x6ae2[27]][_0x6ae2[6]][_0x6ae2[389]];this[_0x6ae2[28]][_0x6ae2[6]][_0x6ae2[387]]= this[_0x6ae2[139]]+ _0x6ae2[388];this[_0x6ae2[28]][_0x6ae2[6]][_0x6ae2[394]]= _0x6ae2[395];this[_0x6ae2[396]][_0x6ae2[6]][_0x6ae2[389]]= this[_0x6ae2[27]][_0x6ae2[6]][_0x6ae2[389]];this[_0x6ae2[396]][_0x6ae2[6]][_0x6ae2[392]]= this[_0x6ae2[112]][_0x6ae2[6]][_0x6ae2[392]];this[_0x6ae2[396]][_0x6ae2[6]][_0x6ae2[393]]= _0x1378x41+ _0x6ae2[388];this[_0x6ae2[397]][_0x6ae2[6]][_0x6ae2[391]]= this[_0x6ae2[27]][_0x6ae2[6]][_0x6ae2[391]];this[_0x6ae2[397]][_0x6ae2[6]][_0x6ae2[392]]= (_0x1378x42+ this[_0x6ae2[139]])+ _0x6ae2[388];if(_0x1378x3e){this[_0x6ae2[23]][_0x6ae2[6]][_0x6ae2[391]]= _0x1378x3f+ _0x6ae2[388];this[_0x6ae2[25]][_0x6ae2[6]][_0x6ae2[391]]= this[_0x6ae2[23]][_0x6ae2[6]][_0x6ae2[391]];var _0x1378x44=(_0x1378x40- _0x1378x42- this[_0x6ae2[136]]- this[_0x6ae2[139]]- this[_0x6ae2[137]]- this[_0x6ae2[138]]);this[_0x6ae2[27]][_0x6ae2[6]][_0x6ae2[387]]= _0x1378x44+ _0x6ae2[388];this[_0x6ae2[26]][_0x6ae2[6]][_0x6ae2[391]]= (_0x1378x3f- _0x1378x41- this[_0x6ae2[136]])+ _0x6ae2[388];var _0x1378x45=(_0x1378x40- this[_0x6ae2[139]]- this[_0x6ae2[137]]- this[_0x6ae2[138]]);this[_0x6ae2[26]][_0x6ae2[6]][_0x6ae2[387]]= _0x1378x45+ _0x6ae2[388];this[_0x6ae2[28]][_0x6ae2[6]][_0x6ae2[391]]= this[_0x6ae2[23]][_0x6ae2[6]][_0x6ae2[391]];this[_0x6ae2[396]][_0x6ae2[6]][_0x6ae2[387]]= _0x1378x45+ _0x6ae2[388]}else {this[_0x6ae2[27]][_0x6ae2[6]][_0x6ae2[392]]= (_0x1378x42+ this[_0x6ae2[136]]+ this[_0x6ae2[139]])+ _0x6ae2[388];this[_0x6ae2[26]][_0x6ae2[6]][_0x6ae2[392]]= this[_0x6ae2[112]][_0x6ae2[6]][_0x6ae2[392]]}};EditorUi[_0x6ae2[10]][_0x6ae2[14]]= function(){this[_0x6ae2[23]]= this[_0x6ae2[399]](_0x6ae2[398]);this[_0x6ae2[25]]= this[_0x6ae2[399]](_0x6ae2[400]);this[_0x6ae2[27]]= this[_0x6ae2[399]](_0x6ae2[401]);this[_0x6ae2[112]]= this[_0x6ae2[399]](_0x6ae2[402]);this[_0x6ae2[26]]= this[_0x6ae2[399]](_0x6ae2[403]);this[_0x6ae2[28]]= this[_0x6ae2[399]](_0x6ae2[404]);this[_0x6ae2[396]]= this[_0x6ae2[399]](_0x6ae2[405]);this[_0x6ae2[397]]= this[_0x6ae2[399]](_0x6ae2[406]);this[_0x6ae2[23]][_0x6ae2[6]][_0x6ae2[389]]= _0x6ae2[407];this[_0x6ae2[23]][_0x6ae2[6]][_0x6ae2[393]]= _0x6ae2[407];this[_0x6ae2[23]][_0x6ae2[6]][_0x6ae2[408]]= _0x6ae2[407];this[_0x6ae2[25]][_0x6ae2[6]][_0x6ae2[393]]= _0x6ae2[407];this[_0x6ae2[25]][_0x6ae2[6]][_0x6ae2[408]]= _0x6ae2[407];this[_0x6ae2[27]][_0x6ae2[6]][_0x6ae2[393]]= _0x6ae2[407];this[_0x6ae2[112]][_0x6ae2[6]][_0x6ae2[393]]= _0x6ae2[407];this[_0x6ae2[26]][_0x6ae2[6]][_0x6ae2[408]]= _0x6ae2[407];this[_0x6ae2[28]][_0x6ae2[6]][_0x6ae2[393]]= _0x6ae2[407];this[_0x6ae2[28]][_0x6ae2[6]][_0x6ae2[408]]= _0x6ae2[407];this[_0x6ae2[28]][_0x6ae2[6]][_0x6ae2[392]]= _0x6ae2[407];this[_0x6ae2[397]][_0x6ae2[6]][_0x6ae2[393]]= _0x6ae2[407];this[_0x6ae2[397]][_0x6ae2[6]][_0x6ae2[387]]= this[_0x6ae2[136]]+ _0x6ae2[388];this[_0x6ae2[396]][_0x6ae2[6]][_0x6ae2[391]]= this[_0x6ae2[136]]+ _0x6ae2[388]};EditorUi[_0x6ae2[10]][_0x6ae2[16]]= function(){this[_0x6ae2[409]]= this[_0x6ae2[13]][_0x6ae2[411]](this[_0x6ae2[399]](_0x6ae2[410]));this[_0x6ae2[23]][_0x6ae2[412]](this[_0x6ae2[409]][_0x6ae2[1]]);this[_0x6ae2[413]]= this[_0x6ae2[415]](this[_0x6ae2[399]](_0x6ae2[414]));this[_0x6ae2[25]][_0x6ae2[412]](this[_0x6ae2[413]][_0x6ae2[1]]);this[_0x6ae2[416]]= this[_0x6ae2[417]](this[_0x6ae2[27]]);this[_0x6ae2[28]][_0x6ae2[412]](this[_0x6ae2[418]]());this[_0x6ae2[419]]= this[_0x6ae2[420]]();this[_0x6ae2[0]][_0x6ae2[33]](_0x6ae2[421],mxUtils[_0x6ae2[20]](this,function(){this[_0x6ae2[423]](this[_0x6ae2[0]][_0x6ae2[422]]())}));this[_0x6ae2[423]](this[_0x6ae2[0]][_0x6ae2[422]]());this[_0x6ae2[409]][_0x6ae2[1]][_0x6ae2[412]](this[_0x6ae2[419]]);this[_0x6ae2[1]][_0x6ae2[412]](this[_0x6ae2[23]]);this[_0x6ae2[1]][_0x6ae2[412]](this[_0x6ae2[25]]);this[_0x6ae2[1]][_0x6ae2[412]](this[_0x6ae2[27]]);this[_0x6ae2[1]][_0x6ae2[412]](this[_0x6ae2[112]]);this[_0x6ae2[1]][_0x6ae2[412]](this[_0x6ae2[26]]);this[_0x6ae2[1]][_0x6ae2[412]](this[_0x6ae2[28]]);this[_0x6ae2[1]][_0x6ae2[412]](this[_0x6ae2[396]]);this[_0x6ae2[1]][_0x6ae2[412]](this[_0x6ae2[397]]);this[_0x6ae2[424]](this[_0x6ae2[396]],true,0,mxUtils[_0x6ae2[20]](this,function(_0x1378x46){this[_0x6ae2[140]]= _0x1378x46;this[_0x6ae2[15]]();this[_0x6ae2[0]][_0x6ae2[4]][_0x6ae2[133]]();this[_0x6ae2[0]][_0x6ae2[113]][_0x6ae2[134]](false);this[_0x6ae2[0]][_0x6ae2[113]][_0x6ae2[113]][_0x6ae2[133]]()}));this[_0x6ae2[424]](this[_0x6ae2[397]],false,this[_0x6ae2[139]],mxUtils[_0x6ae2[20]](this,function(_0x1378x46){this[_0x6ae2[141]]= _0x1378x46;this[_0x6ae2[15]]();this[_0x6ae2[0]][_0x6ae2[113]][_0x6ae2[134]](false);this[_0x6ae2[0]][_0x6ae2[113]][_0x6ae2[113]][_0x6ae2[133]]()}))};EditorUi[_0x6ae2[10]][_0x6ae2[420]]= function(){var _0x1378x2=document[_0x6ae2[426]](_0x6ae2[425]);_0x1378x2[_0x6ae2[427]]= _0x6ae2[428];return _0x1378x2};EditorUi[_0x6ae2[10]][_0x6ae2[420]]= function(){var _0x1378x2=document[_0x6ae2[426]](_0x6ae2[425]);_0x1378x2[_0x6ae2[427]]= _0x6ae2[428];return _0x1378x2};EditorUi[_0x6ae2[10]][_0x6ae2[423]]= function(_0x1378x46){this[_0x6ae2[419]][_0x6ae2[429]]= _0x1378x46};EditorUi[_0x6ae2[10]][_0x6ae2[415]]= function(_0x1378x2){return new Toolbar(this,_0x1378x2)};EditorUi[_0x6ae2[10]][_0x6ae2[417]]= function(_0x1378x2){return new Sidebar(this,_0x1378x2)};EditorUi[_0x6ae2[10]][_0x6ae2[418]]= function(){return this[_0x6ae2[399]](_0x6ae2[430])};EditorUi[_0x6ae2[10]][_0x6ae2[399]]= function(_0x1378x47){var _0x1378x48=document[_0x6ae2[426]](_0x6ae2[431]);_0x1378x48[_0x6ae2[427]]= _0x1378x47;return _0x1378x48};EditorUi[_0x6ae2[10]][_0x6ae2[432]]= function(_0x1378x47){var _0x1378x48=document[_0x6ae2[426]](_0x1378x47);return _0x1378x48};EditorUi[_0x6ae2[10]][_0x6ae2[433]]= function(_0x1378x47){var _0x1378x48=document[_0x6ae2[426]](_0x6ae2[434]);_0x1378x48[_0x6ae2[427]]= _0x1378x47;return _0x1378x48};EditorUi[_0x6ae2[10]][_0x6ae2[424]]= function(_0x1378x48,_0x1378x49,_0x1378x4a,_0x1378x4b){var _0x1378x4c=null;var _0x1378x4d=null;function _0x1378x4e(){return parseInt(((_0x1378x49)?_0x1378x48[_0x6ae2[6]][_0x6ae2[393]]:_0x1378x48[_0x6ae2[6]][_0x6ae2[392]]))}function _0x1378x4f(_0x1378x6){if(_0x1378x4c!= null){var _0x1378x50= new mxPoint(mxEvent[_0x6ae2[435]](_0x1378x6),mxEvent[_0x6ae2[436]](_0x1378x6));_0x1378x4b(Math[_0x6ae2[386]](0,_0x1378x4d+ ((_0x1378x49)?(_0x1378x50[_0x6ae2[437]]- _0x1378x4c[_0x6ae2[437]]):(_0x1378x4c[_0x6ae2[438]]- _0x1378x50[_0x6ae2[438]]))- _0x1378x4a));mxEvent[_0x6ae2[107]](_0x1378x6)}}function _0x1378x51(_0x1378x6){_0x1378x4f(_0x1378x6);_0x1378x4c= null;_0x1378x4d= null}mxEvent[_0x6ae2[115]](_0x1378x48,function(_0x1378x6){_0x1378x4c= new mxPoint(mxEvent[_0x6ae2[435]](_0x1378x6),mxEvent[_0x6ae2[436]](_0x1378x6));_0x1378x4d= _0x1378x4e();mxEvent[_0x6ae2[107]](_0x1378x6)});mxEvent[_0x6ae2[33]](document,_0x6ae2[439],_0x1378x4f);mxEvent[_0x6ae2[33]](document,_0x6ae2[440],_0x1378x4f);mxEvent[_0x6ae2[33]](document,_0x6ae2[441],_0x1378x51);mxEvent[_0x6ae2[33]](document,_0x6ae2[442],_0x1378x51)};EditorUi[_0x6ae2[10]][_0x6ae2[106]]= function(_0x1378x48,_0x1378x3f,_0x1378x40,_0x1378x52,_0x1378x53,_0x1378x54){this[_0x6ae2[443]]();this[_0x6ae2[444]]= new Dialog(this,_0x1378x48,_0x1378x3f,(mxClient[_0x6ae2[445]])?_0x1378x40- 12:_0x1378x40,_0x1378x52,_0x1378x53,_0x1378x54)};EditorUi[_0x6ae2[10]][_0x6ae2[443]]= function(){if(this[_0x6ae2[444]]!= null){this[_0x6ae2[444]][_0x6ae2[446]]();this[_0x6ae2[444]]= null;this[_0x6ae2[0]][_0x6ae2[4]][_0x6ae2[1]][_0x6ae2[47]]()}};EditorUi[_0x6ae2[10]][_0x6ae2[447]]= function(_0x1378x55){if(!_0x1378x55&& this[_0x6ae2[0]][_0x6ae2[158]]!= null){this[_0x6ae2[206]](this[_0x6ae2[0]][_0x6ae2[448]]())}else {this[_0x6ae2[106]]( new SaveDialog(this)[_0x6ae2[1]],300,100,true,true)}};EditorUi[_0x6ae2[10]][_0x6ae2[449]]= function(_0x1378x55){if(!_0x1378x55&& this[_0x6ae2[0]][_0x6ae2[158]]!= null){this[_0x6ae2[312]](this[_0x6ae2[0]][_0x6ae2[448]]())}else {}};EditorUi[_0x6ae2[10]][_0x6ae2[450]]= function(_0x1378x56,_0x1378x57,_0x1378x58){var _0x1378x3=this[_0x6ae2[0]][_0x6ae2[4]];var _0x1378xb=_0x1378x3[_0x6ae2[352]]();_0x1378x57= this[_0x6ae2[451]]!= null?this[_0x6ae2[451]]:_0x1378x57;_0x1378x3[_0x6ae2[99]]()[_0x6ae2[452]]();try{_0x1378x56[_0x6ae2[453]](_0x1378x3[_0x6ae2[310]](),_0x1378xb)}catch(e){throw e}finally{if(_0x1378x57&& navigator[_0x6ae2[455]][_0x6ae2[103]](_0x6ae2[454])< 0){var _0x1378x59= new mxMorphing(_0x1378x3);_0x1378x59[_0x6ae2[33]](mxEvent.DONE,mxUtils[_0x6ae2[20]](this,function(){_0x1378x3[_0x6ae2[99]]()[_0x6ae2[456]]()}));_0x1378x59[_0x6ae2[457]]()}else {_0x1378x3[_0x6ae2[99]]()[_0x6ae2[456]]()}}};EditorUi[_0x6ae2[10]][_0x6ae2[130]]= function(_0x1378x1){var _0x1378x3=this[_0x6ae2[0]][_0x6ae2[4]];var _0x1378xf= new mxKeyHandler(_0x1378x3);_0x1378xf[_0x6ae2[458]]= function(_0x1378x6){return mxEvent[_0x6ae2[458]](_0x1378x6)|| (mxClient[_0x6ae2[459]]&& _0x1378x6[_0x6ae2[460]])};function _0x1378x5a(_0x1378x5b){if(!_0x1378x3[_0x6ae2[333]]()){var _0x1378x4a=0;var _0x1378x5c=0;if(_0x1378x5b== 37){_0x1378x4a= -1}else {if(_0x1378x5b== 38){_0x1378x5c= -1}else {if(_0x1378x5b== 39){_0x1378x4a= 1}else {if(_0x1378x5b== 40){_0x1378x5c= 1}}}};_0x1378x3[_0x6ae2[461]](_0x1378x3[_0x6ae2[334]](),_0x1378x4a,_0x1378x5c);_0x1378x3[_0x6ae2[462]](_0x1378x3[_0x6ae2[352]]())}}var _0x1378x5d=mxUtils[_0x6ae2[20]](this,function(_0x1378x5e,_0x1378x5f,_0x1378x2f,_0x1378x60){var _0x1378x61=this[_0x6ae2[12]][_0x6ae2[145]](_0x1378x2f);if(_0x1378x61!= null){var _0x1378x21=function(){if(_0x1378x61[_0x6ae2[463]]){_0x1378x61[_0x6ae2[464]]()}};if(_0x1378x5f){if(_0x1378x60){_0x1378xf[_0x6ae2[465]](_0x1378x5e,_0x1378x21)}else {_0x1378xf[_0x6ae2[466]](_0x1378x5e,_0x1378x21)}}else {if(_0x1378x60){_0x1378xf[_0x6ae2[467]](_0x1378x5e,_0x1378x21)}else {_0x1378xf[_0x6ae2[468]](_0x1378x5e,_0x1378x21)}}}});var _0x1378x62=this;var _0x1378x63=_0x1378xf[_0x6ae2[469]];_0x1378xf[_0x6ae2[469]]= function(_0x1378x6){_0x1378x62[_0x6ae2[443]]();_0x1378x63[_0x6ae2[50]](this,arguments)};_0x1378xf[_0x6ae2[470]]= function(){};_0x1378xf[_0x6ae2[468]](8,function(){_0x1378x3[_0x6ae2[471]](true)});_0x1378xf[_0x6ae2[468]](13,function(){_0x1378x3[_0x6ae2[471]](false)});_0x1378xf[_0x6ae2[468]](33,function(){_0x1378x3[_0x6ae2[375]]()});_0x1378xf[_0x6ae2[468]](34,function(){_0x1378x3[_0x6ae2[376]]()});_0x1378xf[_0x6ae2[468]](36,function(){_0x1378x3[_0x6ae2[374]]()});_0x1378xf[_0x6ae2[468]](35,function(){_0x1378x3[_0x6ae2[15]]()});_0x1378xf[_0x6ae2[468]](37,function(){_0x1378x5a(37)});_0x1378xf[_0x6ae2[468]](38,function(){_0x1378x5a(38)});_0x1378xf[_0x6ae2[468]](39,function(){_0x1378x5a(39)});_0x1378xf[_0x6ae2[468]](40,function(){_0x1378x5a(40)});_0x1378xf[_0x6ae2[468]](113,function(){_0x1378x3[_0x6ae2[104]]()});_0x1378x5d(46,false,_0x6ae2[335]);_0x1378x5d(82,true,_0x6ae2[345]);_0x1378x5d(83,true,_0x6ae2[206]);_0x1378x5d(83,true,_0x6ae2[218],true);_0x1378x5d(107,false,_0x6ae2[472]);_0x1378x5d(109,false,_0x6ae2[473]);_0x1378x5d(65,true,_0x6ae2[474]);_0x1378x5d(86,true,_0x6ae2[475],true);_0x1378x5d(69,true,_0x6ae2[476],true);_0x1378x5d(69,true,_0x6ae2[477]);_0x1378x5d(66,true,_0x6ae2[341]);_0x1378x5d(70,true,_0x6ae2[340]);_0x1378x5d(68,true,_0x6ae2[336]);_0x1378x5d(90,true,_0x6ae2[329]);_0x1378x5d(89,true,_0x6ae2[330]);_0x1378x5d(88,true,_0x6ae2[148]);_0x1378x5d(67,true,_0x6ae2[149]);_0x1378x5d(81,true,_0x6ae2[478]);_0x1378x5d(86,true,_0x6ae2[144]);_0x1378x5d(71,true,_0x6ae2[351]);_0x1378x5d(71,true,_0x6ae2[479],true);_0x1378x5d(85,true,_0x6ae2[353]);_0x1378x5d(112,false,_0x6ae2[480]);_0x1378x5d(80,true,_0x6ae2[312],true);return _0x1378xf};EditorUi[_0x6ae2[10]][_0x6ae2[56]]= function(_0x1378x3,_0x1378x38,_0x1378x64,_0x1378x65){for(var _0x1378x39=0;_0x1378x39< _0x1378x38[_0x6ae2[176]];_0x1378x39++){_0x1378x3[_0x6ae2[483]]( new mxMultiplicity(true,_0x1378x38[_0x1378x39],null,null,_0x1378x64[_0x1378x39][0],_0x1378x64[_0x1378x39][1],null,mxResources[_0x6ae2[145]](_0x1378x38[_0x1378x39])+ mxResources[_0x6ae2[145]](_0x6ae2[481])+ _0x1378x64[_0x1378x39][0]+ mxResources[_0x6ae2[145]](_0x6ae2[482]),null));_0x1378x3[_0x6ae2[483]]( new mxMultiplicity(false,_0x1378x38[_0x1378x39],null,null,_0x1378x65[_0x1378x39][0],_0x1378x65[_0x1378x39][1],null,mxResources[_0x6ae2[145]](_0x1378x38[_0x1378x39])+ mxResources[_0x6ae2[145]](_0x6ae2[481])+ _0x1378x65[_0x1378x39][0]+ mxResources[_0x6ae2[145]](_0x6ae2[484]),null))}} \ No newline at end of file +/** + * $Id: EditorUi.js,v 1.21 2013/03/14 20:46:36 david Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ +/** + * Constructs a new graph editor + */ + +EditorUi = function(editor, container) { + this.editor = editor || new Editor(); + this.container = container || document.getElementById('geEditor'); + var graph = editor.graph; + var self = this; + + // Disables scrollbars + this.container.style.overflow = 'hidden'; + + // Pre-fetches submenu image + new Image().src = mxPopupMenu.prototype.submenuImage; + + // Pre-fetches connect image + if (mxConnectionHandler.prototype.connectImage != null) { + new Image().src = mxConnectionHandler.prototype.connectImage.src; + } + + // Creates the user interface + this.actions = new Actions(this); + this.menus = new Menus(this); + this.createDivs(); + this.refresh(); + this.createUi(); + + // Disables HTML and text selection + var textEditing = mxUtils.bind(this, function(evt) { + if (evt == null) { + evt = window.event; + } + + if (this.isSelectionAllowed(evt)) { + return true; + } + + return graph.isEditing(); + }); + + // Disables text selection while not editing and no dialog visible + if (this.container == document.body) { + this.menubarContainer.onselectstart = textEditing; + this.menubarContainer.onmousedown = textEditing; + this.toolbarContainer.onselectstart = textEditing; + this.toolbarContainer.onmousedown = textEditing; + this.diagramContainer.onselectstart = textEditing; + this.diagramContainer.onmousedown = textEditing; + this.sidebarContainer.onselectstart = textEditing; + this.sidebarContainer.onmousedown = textEditing; + this.footerContainer.onselectstart = textEditing; + this.footerContainer.onmousedown = textEditing; + } + + // And uses built-in context menu while editing + if (mxClient.IS_IE && (typeof(document.documentMode) === 'undefined' || + document.documentMode < 9)) { + mxEvent.addListener(this.diagramContainer, 'contextmenu', textEditing); + mxEvent.addListener(this.sidebarContainer, 'contextmenu', textEditing); + } else { + // Allows browser context menu outside of diagram and sidebar + this.diagramContainer.oncontextmenu = textEditing; + this.sidebarContainer.oncontextmenu = textEditing; + } + + // Contains the main graph instance inside the given panel + graph.init(this.diagramContainer); + graph.refresh(); + + // Enables scrollbars and sets cursor style for the container + graph.container.setAttribute('tabindex', '0'); + // graph.container.style.overflow = (touchStyle) ? 'hidden' : 'auto'; + graph.container.style.cursor = 'default'; + graph.container.style.backgroundImage = 'url(' + editor.gridImage + ')'; + graph.container.style.backgroundPosition = '-1px -1px'; + graph.container.focus(); + + // Keeps graph container focused on mouse down + var graphFireMouseEvent = graph.fireMouseEvent; + graph.fireMouseEvent = function(evtName, me, sender) { + if (evtName == mxEvent.MOUSE_DOWN) { + this.container.focus(); + } + + graphFireMouseEvent.apply(this, arguments); + }; + + // Giuseppe Careri + // Defines invalid connections along with the error messages that they produce. + this.createMultiplicities(graph.multiplicities, ['start', 'finally', 'end'], [ + [1, 1], + [1, 1], + [0, 0] + ], [ + [0, 0], + [0, 0], + [1, 'n'] + ]); + this.createMultiplicities(graph.multiplicities, ['answer', 'hangup', 'dial', + 'ext_dial', 'queue', 'voicemail', 'callback' + ], [ + [1, 1], + [0, 0], + [0, 1], + [0, 1], + [0, 1], + [1, 1], + [0, 1] + ], [ + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'] + ]); + this.createMultiplicities(graph.multiplicities, ['set', 'math'], [ + [1, 1], + [1, 1] + ], [ + [1, 'n'], + [1, 'n'] + ]); + this.createMultiplicities(graph.multiplicities, ['background', 'playback', + 'menu', 'saydigits', 'saynumber', 'sayphonetic', 'tts', 'ispeechtts', + 'getdigits', 'getsecretdigits' + ], [ + [1, 'n'], + [1, 1], + [1, 'n'], + [1, 1], + [1, 1], + [1, 1], + [1, 1], + [1, 1], + [1, 'n'], + [1, 'n'] + ], [ + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'] + ]); + this.createMultiplicities(graph.multiplicities, ['record'], [ + [1, 1] + ], [ + [1, 'n'] + ]); + this.createMultiplicities(graph.multiplicities, ['database', 'ispeechasr', 'sendSMS', 'sendMail'], [ + [1, 1], + [1, 1], + [1, 1], + [1, 1] + ], [ + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'] + ]); + this.createMultiplicities(graph.multiplicities, ['gotoc', 'gotoif', + 'gotoiftime', 'gotoifmultitime', 'vswitch' + ], [ + [0, 0], + [1, 2], + [1, 2], + [1, 2], + [1, 'n'] + ], [ + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'] + ]); + this.createMultiplicities(graph.multiplicities, ['queuelog', 'goal'], [ + [1, 1], + [1, 1] + ], [ + [1, 'n'], + [1, 'n'] + ]); + this.createMultiplicities(graph.multiplicities, ['noop', 'system', 'agi', + 'subproject', 'custom_app' + ], [ + [1, 1], + [1, 1], + [0, 1], + [0, 0], + [0, 1] + ], [ + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'], + [1, 'n'] + ]); + + // Giuseppe Careri + // Processes a doubleclick on an optional cell and fires a event. + // The event is fired initially. + // If the graph is enabled and the event has not been consumed, then is called with the given cell. + // The event is ignored if no cell was specified. + graph.dblClick = function(evt, cell) { + var edges = ['background', 'gotoif', 'gotoiftime', 'menu', 'getdigits', 'getsecretdigits', + 'vswitch' + ]; + var mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell', + cell); + this.fireEvent(mxe); + + if (this.isEnabled() && !mxEvent.isConsumed(evt) && !mxe.isConsumed()) { + // Override dblClick Vertices and Edges + if (this.getModel().isEdge(cell)) { + if (edges.indexOf(cell.source.value.tagName) >= 0) + this.startEditingAtCell(cell); + } else if (this.getModel().isVertex(cell)) { + self.showDialog(new GeneralDialog(self, cell).container, 320, 280, true, + true); + } + mxe.consume(); + } + } + + // Configures automatic expand on mouseover + graph.panningHandler.autoExpand = true; + + // Installs context menu + graph.panningHandler.factoryMethod = mxUtils.bind(this, function(menu, cell, + evt) { + this.menus.createPopupMenu(menu, cell, evt); + }); + + // Initializes the outline + editor.outline.init(this.outlineContainer); + + // Hides context menu + mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) { + graph.panningHandler.hideMenu(); + })); + + // Adds gesture handling (pinch to zoom) + if (mxClient.IS_TOUCH) { + mxEvent.addListener(graph.container, 'gesturechange', + mxUtils.bind(this, function(evt) { + graph.view.getDrawPane().setAttribute('transform', 'scale(' + evt.scale + + ')'); + graph.view.getOverlayPane().style.visibility = 'hidden'; + }) + ); + + mxEvent.addListener(graph.container, 'gestureend', + mxUtils.bind(this, function(evt) { + graph.view.getDrawPane().removeAttribute('transform'); + graph.zoomToCenter = true; + graph.zoom(evt.scale); + graph.view.getOverlayPane().style.visibility = 'visible'; + }) + ); + } + + // Create handler for key events + var keyHandler = this.createKeyHandler(editor); + + // Getter for key handler + this.getKeyHandler = function() { + return keyHandler; + }; + + // Updates the editor UI after the window has been resized + mxEvent.addListener(window, 'resize', mxUtils.bind(this, function() { + this.refresh(); + graph.sizeDidChange(); + this.editor.outline.update(false); + this.editor.outline.outline.sizeDidChange(); + })); + + // Updates action and menu states + this.init(); + this.open(); +}; + +/** + * Specifies the size of the split bar. + */ +EditorUi.prototype.splitSize = (mxClient.IS_TOUCH) ? 16 : 8; + +/** + * Specifies the height of the menubar. Default is 34. + */ +EditorUi.prototype.menubarHeight = 33; + +/** + * Specifies the height of the toolbar. Default is 36. + */ +EditorUi.prototype.toolbarHeight = 36; + +/** + * Specifies the height of the footer. Default is 28. + */ +EditorUi.prototype.footerHeight = 28; + +/** + * Specifies the position of the horizontal split bar. Default is 212. + */ +EditorUi.prototype.hsplitPosition = 204; + +/** + * Specifies the position of the vertical split bar. Default is 190. + */ +EditorUi.prototype.vsplitPosition = 190; + +/** + * Installs the listeners to update the action states. + */ +EditorUi.prototype.init = function() { + // Updates action states + this.addUndoListener(); + this.addSelectionListener(); + + // Overrides clipboard to update paste action state + var paste = this.actions.get('paste'); + + var updatePaste = function() { + paste.setEnabled(!mxClipboard.isEmpty()); + }; + + var mxClipboardCut = mxClipboard.cut; + mxClipboard.cut = function() { + mxClipboardCut.apply(this, arguments); + updatePaste(); + }; + + var mxClipboardCopy = mxClipboard.copy; + mxClipboard.copy = function() { + mxClipboardCopy.apply(this, arguments); + updatePaste(); + }; +}; + +/** + * Hook for allowing selection and context menu for certain events. + */ +EditorUi.prototype.isSelectionAllowed = function(evt) { + return false; +}; + +/** + * Opens the current diagram via the window.opener if one exists. + */ +EditorUi.prototype.open = function() { + // Cross-domain window access is not allowed in FF, so if we + // were opened from another domain then this will fail. + try { + if (window.opener != null && window.opener.openFile != null) { + window.opener.openFile.setConsumer(mxUtils.bind(this, function(xml, + filename) { + try { + var doc = mxUtils.parseXml(xml); + this.editor.setGraphXml(doc.documentElement); + this.editor.modified = false; + this.editor.undoManager.clear(); + + if (filename != null) { + this.editor.filename = filename; + } + } catch (e) { + mxUtils.alert(mxResources.get('invalidOrMissingFile') + ': ' + e.message); + } + })); + } + } catch (e) { + // ignore + } +}; + +/** + * Giuseppe Careri + * Opens the current diagram via string. + */ +EditorUi.prototype.openString = function(xml, filename, data) { + try { + var doc = mxUtils.parseXml(xml); + this.editor.setGraphXml(doc.documentElement); + this.editor.modified = false; + this.editor.undoManager.clear(); + + if (filename != null) { + this.editor.filename = filename; + } + + if (data != null) { + this.editor.data = data; + } + } catch (e) { + mxUtils.alert(mxResources.get('invalidOrMissingFile') + ': ' + e.message); + } +}; + +/** + * Saves As the current graph under the given project name. + */ +EditorUi.prototype.new = function(name) { + var editor = this.editor; + + if (name != null) { + var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); + try { + if (useLocalStorage) { + if (localStorage.getItem(name) != null && + !mxUtils.confirm(mxResources.get('replace', [name]))) { + return; + } + + localStorage.setItem(name, xml); + this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); + } else { + console.log(xml.length); + console.log(MAX_REQUEST_SIZE); + if (xml.length < MAX_REQUEST_SIZE) { + xml = encodeURIComponent(xml); + name = encodeURIComponent(name); + + var xhr = new XMLHttpRequest(); + xhr.open("POST", SAVE_URL, true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); + xhr.onload = function(e) { + if (xhr.readyState === 4) { + if (xhr.status === 201) { + editor.setStatus('Project ' + JSON.parse(xhr.response).name + + ' is opening in new window!'); + setTimeout(function() { + window.open('square/projects/view/' + JSON.parse(xhr.response).id, + '_blank'); + }, 1500); + } else { + try { + var response = JSON.parse(xhr.response); + editor.setStatus('Error creating project: ' + response.errors[0].message); + } catch (e) { + editor.setStatus('Error creating project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } + } + } + }; + xhr.onerror = function(e) { + mxUtils.alert(xhr.statusText); + }; + xhr.send('description=project_new&name=' + name); + } else { + mxUtils.alert(mxResources.get('drawingTooLarge')); + mxUtils.popup(xml); + + return; + } + } + + this.editor.filename = name; + this.editor.modified = false; + } catch (e) { + this.editor.setStatus('Error creating project'); + } + } else { + this.editor.setStatus('Error creating project'); + } +}; + + +/** + * Saves the current graph under the given project name. + */ +EditorUi.prototype.save = function(name) { + var editor = this.editor; + + if (name != null) { + var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); + try { + if (useLocalStorage) { + if (localStorage.getItem(name) != null && + !mxUtils.confirm(mxResources.get('replace', [name]))) { + return; + } + + localStorage.setItem(name, xml); + this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); + } else { + console.log(xml.length); + console.log(MAX_REQUEST_SIZE); + if (xml.length < MAX_REQUEST_SIZE) { + xml = encodeURIComponent(xml); + + var xhr = new XMLHttpRequest(); + xhr.open("PUT", SAVE_URL + this.editor.data.id, true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); + xhr.onload = function(e) { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + editor.setStatus('Updated at ' + JSON.parse(xhr.response).updatedAt + + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } else { + try { + var response = JSON.parse(xhr.response); + editor.setStatus('Error saving project: ' + response.errors[0].message); + } catch (e) { + editor.setStatus('Error saving project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } + } + } + }; + xhr.onerror = function(e) { + mxUtils.alert(xhr.statusText); + }; + xhr.send('preproduction=' + xml); + } else { + mxUtils.alert(mxResources.get('drawingTooLarge')); + mxUtils.popup(xml); + + return; + } + } + + this.editor.filename = name; + this.editor.modified = false; + } catch (e) { + this.editor.setStatus('Error saving file'); + } + } else { + this.editor.setStatus('Error saving file'); + } +}; + +/** + * Saves the current graph under the given project name. + */ +EditorUi.prototype.description = function(description) { + var editor = this.editor; + + if (description !== null) { + var xhr = new XMLHttpRequest(); + xhr.open("PUT", SAVE_URL + this.editor.data.id, true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); + + xhr.onload = function(e) { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + editor.setStatus('Updated at ' + JSON.parse(xhr.response).updatedAt + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + editor.data.description = description; + } else { + try { + var response = JSON.parse(xhr.response); + editor.setStatus('Error updating description: ' + response.errors[0].message); + } catch (e) { + editor.setStatus('Error updating description' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } + } + } + }; + xhr.onerror = function(e) { + mxUtils.alert(xhr.statusText); + }; + xhr.send('description=' + description); + } else { + this.editor.setStatus('Error updating description'); + } +}; + +/** + * Saves As the current graph under the given project name. + */ +EditorUi.prototype.saveAs = function(name) { + var editor = this.editor; + + if (name != null) { + var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); + try { + if (useLocalStorage) { + if (localStorage.getItem(name) != null && + !mxUtils.confirm(mxResources.get('replace', [name]))) { + return; + } + + localStorage.setItem(name, xml); + this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); + } else { + console.log(xml.length); + console.log(MAX_REQUEST_SIZE); + if (xml.length < MAX_REQUEST_SIZE) { + xml = encodeURIComponent(xml); + name = encodeURIComponent(name); + + var xhr = new XMLHttpRequest(); + xhr.open("POST", SAVE_URL, true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); + xhr.onload = function(e) { + if (xhr.readyState === 4) { + if (xhr.status === 201) { + editor.setStatus('Project ' + JSON.parse(xhr.response).name + + ' is opening in new window!'); + setTimeout(function() { + window.open('square/projects/view/' + JSON.parse(xhr.response).id, + '_blank'); + }, 1500); + } else { + try { + var response = JSON.parse(xhr.response); + editor.setStatus('Error cloning project: ' + response.errors[0].message); + } catch (e) { + editor.setStatus('Error cloning project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } + } + } + }; + xhr.onerror = function(e) { + mxUtils.alert(xhr.statusText); + }; + xhr.send('description=project_cloned&name=' + name + + '&preproduction=' + xml + '&production=' + xml); + } else { + mxUtils.alert(mxResources.get('drawingTooLarge')); + mxUtils.popup(xml); + + return; + } + } + + this.editor.filename = name; + this.editor.modified = false; + } catch (e) { + this.editor.setStatus('Error saving file'); + } + } else { + this.editor.setStatus('Error saving file'); + } +}; + +/** + * Plush the current graph under the given project name. + */ +EditorUi.prototype.validate = function(a, b) { + var graph = this.editor.graph; + for (var a = a != null ? a : graph.model.getRoot(), b = b != null ? b : {}, c = + true, d = graph.model.getChildCount(a), e = 0; e < d; e++) { + var f = graph.model.getChildAt(a, e), + g = b; + graph.isValidRoot(f) && (g = {}); + g = this.validate(f, g); + g != null ? graph.setCellWarning(f, g.replace(/\n/g, "
")) : graph.setCellWarning( + f, null); + c = c && g == null + } + + d = ""; + + //--- Giuseppe Careri - Modify 12/12/2013 - giuseppe.careri@gmail.com + if (graph.model.isVertex(a)) { + switch (a.value.nodeName) { + case 'start': + d = this.validateBlock('start') ? '' : "Only one Start block is allowed" + + "\n"; + break; + case 'finally': + d = this.validateBlock('finally') ? '' : + "Only one Finally block is allowed" + "\n"; + break; + case 'playback': + d = (a.value.getAttribute('file_id') > 0) ? "" : mxResources.get( + 'noAudioSelected') + "\n"; + break; + case 'background': + case 'menu': + d = (a.value.getAttribute('file_id') > 0) ? "" : mxResources.get( + 'noAudioSelected') + "\n"; + d += (a.value.getAttribute('digit') > 0) ? "" : mxResources.get( + 'wrongMaxDigit') + "\n"; + break; + case 'getdigits': + d = (a.value.getAttribute('file_id') > 0) ? "" : mxResources.get( + 'noAudioSelected') + "\n"; + d += (a.value.getAttribute('variable_id') > 0) ? "" : mxResources.get( + 'noVariableSelected') + "\n"; + d += (a.value.getAttribute('mindigit') > 0) ? "" : mxResources.get( + 'wrongMinDigit') + "\n"; + d += (a.value.getAttribute('maxdigit') > 0) ? "" : mxResources.get( + 'wrongMaxDigit') + "\n"; + case 'getsecretdigits': + d = (a.value.getAttribute('file_id') > 0) ? "" : mxResources.get( + 'noAudioSelected') + "\n"; + d += (a.value.getAttribute('variable_id') > 0) ? "" : mxResources.get( + 'noVariableSelected') + "\n"; + d += (a.value.getAttribute('mindigit') > 0) ? "" : mxResources.get( + 'wrongMinDigit') + "\n"; + d += (a.value.getAttribute('maxdigit') > 0) ? "" : mxResources.get( + 'wrongMaxDigit') + "\n"; + d += (a.value.getAttribute('hiddendigitsnum') >= 0) ? "" : mxResources.get( + 'wrongHiddenDigitsnum') + "\n"; + break; + case 'vswitch': + d = (a.value.getAttribute('variable') !== "") ? "" : mxResources.get( + 'noVariableSelected') + "\n"; + break; + case 'database': + d = (a.value.getAttribute('odbc_id') > 0) ? "" : mxResources.get( + 'noDatabaseSelected') + "\n"; + break; + case 'ext_dial': + d = (a.value.getAttribute('trunk_name') !== '-1') ? "" : mxResources.get( + 'noTrunkSelected') + "\n"; + break; + case 'set': + case 'math': + d = (a.value.getAttribute('variable_id') > 0) ? "" : mxResources.get( + 'noVariableSelected') + "\n"; + break; + case 'gotoc': + d = (a.value.getAttribute('extension') !== "") ? "" : mxResources.get( + 'noExtensionSelected') + "\n"; + break; + case 'system': + case 'agi': + d = (a.value.getAttribute('command') !== "") ? "" : mxResources.get( + 'noCommandSelected') + "\n"; + break; + case 'gotoif': + d = (a.value.getAttribute('condition') !== "") ? "" : mxResources.get( + 'noConditionSelected') + "\n"; + break; + case 'saydigits': + d = (a.value.getAttribute('digits') !== "") ? "" : mxResources.get( + 'noDigitsSelected') + "\n"; + break; + case 'saynumber': + d = (a.value.getAttribute('number') !== "") ? "" : mxResources.get( + 'noNumberSelected') + "\n"; + break; + case 'sayphonetic': + d = (a.value.getAttribute('text') !== "") ? "" : mxResources.get( + 'noTextSelected') + "\n"; + break; + case 'record': + d = (a.value.getAttribute('file') !== "") ? "" : mxResources.get( + 'noFileSelected') + "\n"; + break; + case 'goal': + d = (a.value.getAttribute('goalname') !== "") ? "" : mxResources.get( + 'noGoalSelected') + "\n"; + break; + case 'ext_dial': + d = (a.value.getAttribute('phone') !== "") ? "" : mxResources.get( + 'noIdentifierSelected') + "\n"; + break; + case 'dial': + d = (a.value.getAttribute('sip_id') > 0) ? "" : mxResources.get( + 'noIdentifierSelected') + "\n"; + break; + case 'queue': + d = (a.value.getAttribute('queue_id') !== "-1") ? "" : mxResources.get( + 'noQueueSelected') + "\n"; + break; + case 'callback': + d = (a.value.getAttribute('list_id') > 0) ? "" : mxResources.get( + 'noListSelected') + "\n"; + break; + case 'gotoiftime': + d = (a.value.getAttribute('interval_id') > 0) ? "" : mxResources.get( + 'noIntervalSelected') + "\n"; + break; + case 'gotoifmultitime': + d = (a.value.getAttribute('interval_id') != "") ? "" : mxResources.get( + 'noIntervalSelected') + "\n"; + break; + case 'voicemail': + d = (a.value.getAttribute('mailbox') !== "") ? "" : mxResources.get( + 'noBoxNumberSelected') + "\n"; + break; + case 'subproject': + d = (a.value.getAttribute('project_id') > 0) ? "" : mxResources.get( + 'noProjectSelected') + "\n"; + break; + case 'sendSMS': + d = (a.value.getAttribute('account_id') > 0) ? "" : mxResources.get( + 'noAccountSelected') + "\n"; + d += (a.value.getAttribute('to') !== "") ? "" : mxResources.get( + 'noRecipientSelected') + "\n"; + d += (a.value.getAttribute('sms_text') !== "") ? "" : mxResources.get( + 'noTextSelected') + "\n"; + break; + case 'sendMail': + d = (a.value.getAttribute('account_id') > 0) ? "" : mxResources.get( + 'noAccountSelected') + "\n"; + d += (a.value.getAttribute('to') !== "") ? "" : mxResources.get( + 'noRecipientSelected') + "\n"; + break; + case 'tts': + d = (a.value.getAttribute('text') !== "") ? "" : mxResources.get( + 'noTextSelected') + "\n"; + break; + case 'ispeechtts': + d = (a.value.getAttribute('text') !== "") ? "" : mxResources.get( + 'noTextSelected') + "\n"; + d += (a.value.getAttribute('key') !== "") ? "" : mxResources.get( + 'noKeySelected') + "\n"; + break; + case 'ispeechasr': + d = (a.value.getAttribute('key') !== "") ? "" : mxResources.get( + 'noKeySelected') + "\n"; + break; + } + } + + if (graph.model.isEdge(a)) { + var z = graph.model.getCell(a.source.getId()); + switch (z.value.nodeName) { + case 'background': + var patt = /^[0-9]{1,45}$|^[i]{1}$|^[t]{1}|^[#]{1}|^[*]{1}$/; + d = d + ((patt.test(String(a.getValue()))) ? "" : mxResources.get( + 'numberOrInvalidOrTimeout') + "\n"); + break; + case 'menu': + var patt = /^[0-9]{1,45}$|^[-]{1}$|^[i]{1}$|^[t]{1}|^[#]{1}|^[*]{1}$/; + var str = String(a.getValue()); + var res = str.split(","); + res.forEach(function(entry) { + d = d + ((patt.test(entry)) ? "" : mxResources.get('numberOrAll') + + "\n"); + }); + break; + case 'getsecretdigits': + case 'getdigits': + var patt = /^(x|i|-)$/; + var str = String(a.getValue()); + d = d + ((patt.test(str)) ? "" : mxResources.get( + 'numberOrInvalidOrDefault') + "\n"); + break; + case 'gotoif': + case 'gotoiftime': + case 'gotoifmultitime': + var patt = /^(true){1}$|^(false){1}$/; + d = d + ((patt.test(String(a.getValue()))) ? "" : mxResources.get( + 'trueOrFalse') + "\n"); + break; + + } + } + // ----------------------------------------------------------------- + + + graph.isCellCollapsed(a) && !c && (d = d + ((mxResources.get(graph.containsValidationErrorsResource) || + graph.containsValidationErrorsResource) + "\n")); + d = graph.model.isEdge(a) ? + d + (graph.getEdgeValidationError(a, graph.model.getTerminal(a, true), graph + .model.getTerminal(a, false)) || "") : d + (graph.getCellValidationError(a) || + ""); + e = graph.validateCell(a, b); + e != null && (d = d + e); + graph.model.getParent(a) == null && graph.view.validate(); + return d.length > 0 || !c ? d : null +}; +EditorUi.prototype.validateBlock = function(blockName) { + var graph = this.editor.graph; + var parent = graph.getDefaultParent(); + var count = 0; + // var model = graph.getModel(); + //We can also use model.getChildren(parent) + parent.children.forEach(function(n) { + if (graph.model.isVertex(n) && n.value.nodeName == blockName) { + count++; + } + }); + return count > 1 ? false : true; +} +EditorUi.prototype.publish = function(name) { + var editor = this.editor; + + if (name != null) { + var response = this.validate(); + if (response === null) { + + var xml = mxUtils.getPrettyXml(this.editor.getGraphXml()); + try { + if (useLocalStorage) { + if (localStorage.getItem(name) != null && + !mxUtils.confirm(mxResources.get('replace', [name]))) { + return; + } + + localStorage.setItem(name, xml); + this.editor.setStatus(mxResources.get('saved') + ' ' + new Date()); + } else { + console.log(xml.length); + console.log(MAX_REQUEST_SIZE); + if (xml.length < MAX_REQUEST_SIZE) { + xml = encodeURIComponent(xml); + + var xhr = new XMLHttpRequest(); + xhr.open("PUT", SAVE_URL + this.editor.data.id, true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); + xhr.onload = function(e) { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + editor.setStatus('Published at ' + JSON.parse(xhr.response).updatedAt + + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } else { + try { + var response = JSON.parse(xhr.response); + editor.setStatus('Error publishing project: ' + response.errors[0].message); + } catch (e) { + editor.setStatus('Error publishing project' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } + } + } + }; + xhr.onerror = function(e) { + mxUtils.alert(xhr.statusText); + }; + xhr.send('preproduction=' + xml + '&production=' + xml); + } else { + mxUtils.alert(mxResources.get('drawingTooLarge')); + mxUtils.popup(xml); + + return; + } + } + + this.editor.filename = name; + this.editor.modified = false; + } catch (e) { + this.editor.setStatus('Error publishing file'); + } + } else { + editor.setStatus('Error publishing project: '); + } + } else { + this.editor.setStatus('Error publishing file'); + } +}; + + +/** + * Create variable + */ +EditorUi.prototype.variable = function(name, description) { + var editor = this.editor; + + if (name != null) { + try { + + var xhr = new XMLHttpRequest(); + xhr.open("POST", VARIABLE_URL, true); + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token); + xhr.onload = function(e) { + if (xhr.readyState === 4) { + if (xhr.status === 201) { + editor.setStatus('Variable created at ' + JSON.parse(xhr.response).createdAt + + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } else { + try { + var response = JSON.parse(xhr.response); + editor.setStatus('Error creating variable: ' + response.errors[0].message); + } catch (e) { + editor.setStatus('Error creating variable' + ' (' + xhr.status + ' ' + xhr.statusText + ')'); + } + } + } + }; + xhr.onerror = function(e) { + mxUtils.alert(xhr.statusText); + }; + xhr.send('name=' + name + '&description=' + description); + } catch (e) { + this.editor.setStatus('Error creating variable'); + } + } else { + this.editor.setStatus('Error creating variable'); + } +}; + +/** + * Returns the URL for a copy of this editor with no state. + */ +EditorUi.prototype.getUrl = function(pathname) { + var href = (pathname != null) ? pathname : window.location.pathname; + var parms = (href.indexOf('?') > 0) ? 1 : 0; + + // Removes template URL parameter for new blank diagram + for (var key in urlParams) { + if (parms == 0) { + href += '?'; + } else { + href += '&'; + } + + href += key + '=' + urlParams[key]; + parms++; + } + + return href; +}; + +/** + * Updates the states of the given undo/redo items. + */ +EditorUi.prototype.addUndoListener = function() { + var undo = this.actions.get('undo'); + var redo = this.actions.get('redo'); + + var undoMgr = this.editor.undoManager; + + var undoListener = function() { + undo.setEnabled(undoMgr.canUndo()); + redo.setEnabled(undoMgr.canRedo()); + }; + + undoMgr.addListener(mxEvent.ADD, undoListener); + undoMgr.addListener(mxEvent.UNDO, undoListener); + undoMgr.addListener(mxEvent.REDO, undoListener); + undoMgr.addListener(mxEvent.CLEAR, undoListener); + + // Updates the button states once + undoListener(); +}; + +/** + * Updates the states of the given toolbar items based on the selection. + */ +EditorUi.prototype.addSelectionListener = function() { + var selectionListener = mxUtils.bind(this, function() { + var graph = this.editor.graph; + var selected = !graph.isSelectionEmpty(); + var vertexSelected = false; + var edgeSelected = false; + + var cells = graph.getSelectionCells(); + + if (cells != null) { + for (var i = 0; i < cells.length; i++) { + var cell = cells[i]; + + if (graph.getModel().isEdge(cell)) { + edgeSelected = true; + } + + if (graph.getModel().isVertex(cell)) { + vertexSelected = true; + } + + if (edgeSelected && vertexSelected) { + break; + } + } + } + + // Updates action states + var actions = ['cut', 'copy', 'delete', 'duplicate', 'bold', 'italic', + 'style', 'underline', 'toFront', 'toBack', 'dashed', 'rounded', + 'shadow', + 'tilt', 'autosize' + ]; + + for (var i = 0; i < actions.length; i++) { + this.actions.get(actions[i]).setEnabled(selected); + } + + this.actions.get('curved').setEnabled(edgeSelected); + this.actions.get('rotation').setEnabled(vertexSelected); + this.actions.get('wordWrap').setEnabled(vertexSelected); + this.actions.get('group').setEnabled(graph.getSelectionCount() > 1); + this.actions.get('ungroup').setEnabled(graph.getSelectionCount() == 1 && + graph.getModel().getChildCount(graph.getSelectionCell()) > 0); + var oneVertexSelected = vertexSelected && graph.getSelectionCount() == 1; + this.actions.get('removeFromGroup').setEnabled(oneVertexSelected && + graph.getModel().isVertex(graph.getModel().getParent(graph.getSelectionCell())) + ); + + // Updates menu states + var menus = ['fontFamily', 'fontSize', 'alignment', 'position', 'text', + 'format', + 'arrange', 'linewidth', 'spacing' + ]; + + for (var i = 0; i < menus.length; i++) { + this.menus.get(menus[i]).setEnabled(selected); + } + + menus = ['line', 'lineend', 'linestart']; + + for (var i = 0; i < menus.length; i++) { + this.menus.get(menus[i]).setEnabled(edgeSelected); + } + + this.actions.get('setAsDefaultEdge').setEnabled(edgeSelected); + + this.menus.get('align').setEnabled(graph.getSelectionCount() > 1); + this.menus.get('direction').setEnabled(vertexSelected || (edgeSelected && + graph.isLoop(graph.view.getState(graph.getSelectionCell())))); + this.menus.get('navigation').setEnabled(graph.foldingEnabled && ((graph.view + .currentRoot != null) || + (graph.getSelectionCount() == 1 && graph.isValidRoot(graph.getSelectionCell())) + )); + this.actions.get('home').setEnabled(graph.view.currentRoot != null); + this.actions.get('exitGroup').setEnabled(graph.view.currentRoot != null); + var groupEnabled = graph.getSelectionCount() == 1 && graph.isValidRoot( + graph.getSelectionCell()); + this.actions.get('enterGroup').setEnabled(groupEnabled); + this.actions.get('expand').setEnabled(groupEnabled); + this.actions.get('collapse').setEnabled(groupEnabled); + this.actions.get('editLink').setEnabled(graph.getSelectionCount() == 1); + this.actions.get('openLink').setEnabled(graph.getSelectionCount() == 1 && + graph.getLinkForCell(graph.getSelectionCell()) != null); + }); + + this.editor.graph.getSelectionModel().addListener(mxEvent.CHANGE, + selectionListener); + selectionListener(); +}; + +/** + * Refreshes the viewport. + */ +EditorUi.prototype.refresh = function() { + var quirks = mxClient.IS_IE && (document.documentMode == null || document.documentMode == + 5); + var w = this.container.clientWidth; + var h = this.container.clientHeight; + + if (this.container == document.body) { + w = document.body.clientWidth || document.documentElement.clientWidth; + h = (quirks) ? document.body.clientHeight || document.documentElement.clientHeight : + document.documentElement.clientHeight; + } + + var effHsplitPosition = Math.max(0, Math.min(this.hsplitPosition, w - this.splitSize - + 20)); + var effVsplitPosition = Math.max(0, Math.min(this.vsplitPosition, h - this.menubarHeight - + this.toolbarHeight - this.footerHeight - this.splitSize - 1)); + + this.menubarContainer.style.height = this.menubarHeight + 'px'; + this.toolbarContainer.style.top = this.menubarHeight + 'px'; + this.toolbarContainer.style.height = this.toolbarHeight + 'px'; + + var tmp = this.menubarHeight + this.toolbarHeight; + + if (!mxClient.IS_QUIRKS) { + tmp += 1; + } + + this.sidebarContainer.style.top = tmp + 'px'; + this.sidebarContainer.style.width = effHsplitPosition + 'px'; + this.outlineContainer.style.width = effHsplitPosition + 'px'; + this.outlineContainer.style.height = effVsplitPosition + 'px'; + this.outlineContainer.style.bottom = this.footerHeight + 'px'; + this.diagramContainer.style.left = (effHsplitPosition + this.splitSize) + + 'px'; + this.diagramContainer.style.top = this.sidebarContainer.style.top; + this.footerContainer.style.height = this.footerHeight + 'px'; + this.footerContainer.style.display = 'none'; + this.hsplit.style.top = this.sidebarContainer.style.top; + this.hsplit.style.bottom = this.outlineContainer.style.bottom; + this.hsplit.style.left = effHsplitPosition + 'px'; + this.vsplit.style.width = this.sidebarContainer.style.width; + this.vsplit.style.bottom = (effVsplitPosition + this.footerHeight) + 'px'; + + if (quirks) { + this.menubarContainer.style.width = w + 'px'; + this.toolbarContainer.style.width = this.menubarContainer.style.width; + var sidebarHeight = (h - effVsplitPosition - this.splitSize - this.footerHeight - + this.menubarHeight - this.toolbarHeight); + this.sidebarContainer.style.height = sidebarHeight + 'px'; + this.diagramContainer.style.width = (w - effHsplitPosition - this.splitSize) + + 'px'; + var diagramHeight = (h - this.footerHeight - this.menubarHeight - this.toolbarHeight); + this.diagramContainer.style.height = diagramHeight + 'px'; + this.footerContainer.style.width = this.menubarContainer.style.width; + this.hsplit.style.height = diagramHeight + 'px'; + } else { + this.sidebarContainer.style.bottom = (effVsplitPosition + this.splitSize + + this.footerHeight) + 'px'; + this.diagramContainer.style.bottom = this.outlineContainer.style.bottom; + } +}; + +/** + * Creates the required containers. + */ +EditorUi.prototype.createDivs = function() { + this.menubarContainer = this.createDiv('geMenubarContainer'); + this.toolbarContainer = this.createDiv('geToolbarContainer'); + this.sidebarContainer = this.createDiv('geSidebarContainer'); + this.outlineContainer = this.createDiv('geOutlineContainer'); + this.diagramContainer = this.createDiv('geDiagramContainer'); + this.footerContainer = this.createDiv('geFooterContainer'); + this.hsplit = this.createDiv('geHsplit'); + this.vsplit = this.createDiv('geVsplit'); + + // Sets static style for containers + this.menubarContainer.style.top = '0px'; + this.menubarContainer.style.left = '0px'; + this.menubarContainer.style.right = '0px'; + this.toolbarContainer.style.left = '0px'; + this.toolbarContainer.style.right = '0px'; + this.sidebarContainer.style.left = '0px'; + this.outlineContainer.style.left = '0px'; + this.diagramContainer.style.right = '0px'; + this.footerContainer.style.left = '0px'; + this.footerContainer.style.right = '0px'; + this.footerContainer.style.bottom = '0px'; + this.vsplit.style.left = '0px'; + this.vsplit.style.height = this.splitSize + 'px'; + this.hsplit.style.width = this.splitSize + 'px'; +}; + +/** + * Creates the required containers. + */ +EditorUi.prototype.createUi = function() { + // Creates menubar + this.menubar = this.menus.createMenubar(this.createDiv('geMenubar')); + this.menubarContainer.appendChild(this.menubar.container); + + // Creates toolbar + this.toolbar = this.createToolbar(this.createDiv('geToolbar')); + this.toolbarContainer.appendChild(this.toolbar.container); + + // Creates the sidebar + this.sidebar = this.createSidebar(this.sidebarContainer); + + // Creates the footer + this.footerContainer.appendChild(this.createFooter()); + + // Adds status bar in menubar + this.statusContainer = this.createStatusContainer(); + + // Connects the status bar to the editor status + this.editor.addListener('statusChanged', mxUtils.bind(this, function() { + this.setStatusText(this.editor.getStatus()); + })); + + this.setStatusText(this.editor.getStatus()); + this.menubar.container.appendChild(this.statusContainer); + + // Inserts into DOM + this.container.appendChild(this.menubarContainer); + this.container.appendChild(this.toolbarContainer); + this.container.appendChild(this.sidebarContainer); + this.container.appendChild(this.outlineContainer); + this.container.appendChild(this.diagramContainer); + this.container.appendChild(this.footerContainer); + this.container.appendChild(this.hsplit); + this.container.appendChild(this.vsplit); + + // HSplit + this.addSplitHandler(this.hsplit, true, 0, mxUtils.bind(this, function( + value) { + this.hsplitPosition = value; + this.refresh(); + this.editor.graph.sizeDidChange(); + this.editor.outline.update(false); + this.editor.outline.outline.sizeDidChange(); + })); + + // VSplit + this.addSplitHandler(this.vsplit, false, this.footerHeight, mxUtils.bind( + this, + function(value) { + this.vsplitPosition = value; + this.refresh(); + this.editor.outline.update(false); + this.editor.outline.outline.sizeDidChange(); + })); +}; + +/** + * Creates a new toolbar for the given container. + */ +EditorUi.prototype.createStatusContainer = function() { + var container = document.createElement('a'); + container.className = 'geItem geStatus'; + + return container; +}; + +/** + * Creates a new toolbar for the given container. + */ +EditorUi.prototype.createStatusContainer = function() { + var container = document.createElement('a'); + container.className = 'geItem geStatus'; + + return container; +}; + +/** + * Creates a new toolbar for the given container. + */ +EditorUi.prototype.setStatusText = function(value) { + this.statusContainer.innerHTML = value; +}; + +/** + * Creates a new toolbar for the given container. + */ +EditorUi.prototype.createToolbar = function(container) { + return new Toolbar(this, container); +}; + +/** + * Creates a new sidebar for the given container. + */ +EditorUi.prototype.createSidebar = function(container) { + return new Sidebar(this, container); +}; + +/** + * Creates and returns a new footer. + */ +EditorUi.prototype.createFooter = function() { + return this.createDiv('geFooter'); +}; + +/** + * Creates the actual toolbar for the toolbar container. + */ +EditorUi.prototype.createDiv = function(classname) { + var elt = document.createElement('div'); + elt.className = classname; + + return elt; +}; + +/** + * Creates the custom header. + */ +EditorUi.prototype.createHeader = function(classname) { + var elt = document.createElement(classname); + return elt; +}; + +/** + * Creates the custom header. + */ +EditorUi.prototype.createForm = function(classname) { + var elt = document.createElement('form'); + elt.className = classname; + + return elt; +}; + +/** + * Updates the states of the given undo/redo items. + */ +EditorUi.prototype.addSplitHandler = function(elt, horizontal, dx, onChange) { + var start = null; + var initial = null; + + function getValue() { + return parseInt(((horizontal) ? elt.style.left : elt.style.bottom)); + }; + + function moveHandler(evt) { + if (start != null) { + var pt = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt)); + onChange(Math.max(0, initial + ((horizontal) ? (pt.x - start.x) : (start.y - + pt.y)) - dx)); + mxEvent.consume(evt); + } + }; + + function dropHandler(evt) { + moveHandler(evt); + start = null; + initial = null; + }; + + mxEvent.addGestureListeners(elt, function(evt) { + start = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt)); + initial = getValue(); + mxEvent.consume(evt); + }); + + mxEvent.addListener(document, 'mousemove', moveHandler); + mxEvent.addListener(document, 'touchmove', moveHandler); + mxEvent.addListener(document, 'mouseup', dropHandler); + mxEvent.addListener(document, 'touchend', dropHandler); +}; + +/** + * Displays a print dialog. + */ +EditorUi.prototype.showDialog = function(elt, w, h, modal, closable, onClose) { + this.hideDialog(); + this.dialog = new Dialog(this, elt, w, (mxClient.IS_VML) ? h - 12 : h, + modal, + closable, onClose); +}; + +/** + * Displays a print dialog. + */ +EditorUi.prototype.hideDialog = function() { + if (this.dialog != null) { + this.dialog.close(); + this.dialog = null; + this.editor.graph.container.focus(); + } +}; + +/** + * Adds the label menu items to the given menu and parent. + */ +EditorUi.prototype.saveFile = function(forceDialog) { + if (!forceDialog && this.editor.filename != null) { + this.save(this.editor.getOrCreateFilename()); + } else { + this.showDialog(new SaveDialog(this).container, 300, 100, true, true); + } +}; + +/** + * Adds the label menu items to the given menu and parent. + */ +EditorUi.prototype.publishFile = function(forceDialog) { + if (!forceDialog && this.editor.filename != null) { + this.publish(this.editor.getOrCreateFilename()); + } else { + //this.showDialog(new SaveDialog(this).container, 300, 100, true, true); + } +}; + +/** + * Executes the given layout. + */ +EditorUi.prototype.executeLayout = function(layout, animate, ignoreChildCount) { + var graph = this.editor.graph; + var cell = graph.getSelectionCell(); + + // Allow global overridding of animation + animate = this.animate != null ? this.animate : animate; + + graph.getModel().beginUpdate(); + try { + layout.execute(graph.getDefaultParent(), cell); + } catch (e) { + throw e; + } finally { + // Animates the changes in the graph model except + // for Camino, where animation is too slow + if (animate && navigator.userAgent.indexOf('Camino') < 0) { + // New API for animating graph layout results asynchronously + var morph = new mxMorphing(graph); + morph.addListener(mxEvent.DONE, mxUtils.bind(this, function() { + graph.getModel().endUpdate(); + })); + + morph.startAnimation(); + } else { + graph.getModel().endUpdate(); + } + } +}; + +/** + * Creates the keyboard event handler for the current graph and history. + */ +EditorUi.prototype.createKeyHandler = function(editor) { + var graph = this.editor.graph; + var keyHandler = new mxKeyHandler(graph); + + // Routes command-key to control-key on Mac + keyHandler.isControlDown = function(evt) { + return mxEvent.isControlDown(evt) || (mxClient.IS_MAC && evt.metaKey); + }; + + // Helper function to move cells with the cursor keys + function nudge(keyCode) { + if (!graph.isSelectionEmpty()) { + var dx = 0; + var dy = 0; + + if (keyCode == 37) { + dx = -1; + } else if (keyCode == 38) { + dy = -1; + } else if (keyCode == 39) { + dx = 1; + } else if (keyCode == 40) { + dy = 1; + } + + graph.moveCells(graph.getSelectionCells(), dx, dy); + graph.scrollCellToVisible(graph.getSelectionCell()); + } + }; + + // Binds keystrokes to actions + var bindAction = mxUtils.bind(this, function(code, control, key, shift) { + var action = this.actions.get(key); + + if (action != null) { + var f = function() { + if (action.enabled) { + action.funct(); + } + }; + + if (control) { + if (shift) { + keyHandler.bindControlShiftKey(code, f); + } else { + keyHandler.bindControlKey(code, f); + } + } else { + if (shift) { + keyHandler.bindShiftKey(code, f); + } else { + keyHandler.bindKey(code, f); + } + } + } + }); + + var ui = this; + var keyHandleEscape = keyHandler.escape; + keyHandler.escape = function(evt) { + ui.hideDialog(); + keyHandleEscape.apply(this, arguments); + }; + + // Ignores enter keystroke. Remove this line if you want the + // enter keystroke to stop editing. + keyHandler.enter = function() {}; + keyHandler.bindKey(8, function() { + graph.foldCells(true); + }); // Backspace + keyHandler.bindKey(13, function() { + graph.foldCells(false); + }); // Enter + keyHandler.bindKey(33, function() { + graph.exitGroup(); + }); // Page Up + keyHandler.bindKey(34, function() { + graph.enterGroup(); + }); // Page Down + keyHandler.bindKey(36, function() { + graph.home(); + }); // Home + keyHandler.bindKey(35, function() { + graph.refresh(); + }); // End + keyHandler.bindKey(37, function() { + nudge(37); + }); // Left arrow + keyHandler.bindKey(38, function() { + nudge(38); + }); // Up arrow + keyHandler.bindKey(39, function() { + nudge(39); + }); // Right arrow + keyHandler.bindKey(40, function() { + nudge(40); + }); // Down arrow + keyHandler.bindKey(113, function() { + graph.startEditingAtCell(); + }); + bindAction(46, false, 'delete'); // Delete + bindAction(82, true, 'tilt'); // Ctrl+R + bindAction(83, true, 'save'); // Ctrl+S + bindAction(83, true, 'saveAs', true); // Ctrl+Shift+S + bindAction(107, false, 'zoomIn'); // Add + bindAction(109, false, 'zoomOut'); // Subtract + bindAction(65, true, 'selectAll'); // Ctrl+A + bindAction(86, true, 'selectVertices', true); // Ctrl+Shift+V + bindAction(69, true, 'selectEdges', true); // Ctrl+Shift+E + bindAction(69, true, 'export'); // Ctrl+Shift+E + bindAction(66, true, 'toBack'); // Ctrl+B + bindAction(70, true, 'toFront'); // Ctrl+F + bindAction(68, true, 'duplicate'); // Ctrl+D + bindAction(90, true, 'undo'); // Ctrl+Z + bindAction(89, true, 'redo'); // Ctrl+Y + bindAction(88, true, 'cut'); // Ctrl+X + bindAction(67, true, 'copy'); // Ctrl+C + bindAction(81, true, 'connect'); // Ctrl+Q + bindAction(86, true, 'paste'); // Ctrl+V + bindAction(71, true, 'group'); // Ctrl+G + bindAction(71, true, 'grid', true); // Ctrl+Shift+G + bindAction(85, true, 'ungroup'); // Ctrl+U + bindAction(112, false, 'about'); // F1 + bindAction(80, true, 'publish', true); // Ctrl+Shift+P + + return keyHandler; +}; + +/** + * Giuseppe Careri + * Creates a new toolbar for the given container. + */ +EditorUi.prototype.createMultiplicities = function(graph, cells, source, + target) { + for (var i = 0; i < cells.length; i++) { + + graph.push(new mxMultiplicity(true, cells[i], null, null, source[i][0], + source[i][1], null, mxResources.get(cells[i]) + mxResources.get( + 'musthave') + source[i][0] + mxResources.get('outgoingedge'), null)); + graph.push(new mxMultiplicity(false, cells[i], null, null, target[i][0], + target[i][1], null, mxResources.get(cells[i]) + mxResources.get( + 'musthave') + target[i][0] + mxResources.get('incomingedge'), null)); + }; +}; diff --git a/public/assets/plugins/square/js/Graph.js b/public/assets/plugins/square/js/Graph.js index baafa4a..dda2a33 100644 --- a/public/assets/plugins/square/js/Graph.js +++ b/public/assets/plugins/square/js/Graph.js @@ -1 +1,644 @@ -var _0xc3d9=["\x63\x61\x6C\x6C","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x73\x65\x74\x44\x72\x6F\x70\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x50\x61\x6E\x6E\x69\x6E\x67","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x4C\x6F\x6F\x70\x73","\x73\x65\x74\x4D\x75\x6C\x74\x69\x67\x72\x61\x70\x68","\x61\x6C\x6C\x6F\x77\x41\x75\x74\x6F\x50\x61\x6E\x6E\x69\x6E\x67","\x72\x65\x73\x65\x74\x45\x64\x67\x65\x73\x4F\x6E\x43\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x43\x68\x69\x6C\x64\x72\x65\x6E","\x74\x61\x72\x67\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x44\x61\x6E\x67\x6C\x69\x6E\x67\x45\x64\x67\x65\x73","\x73\x65\x74\x43\x72\x65\x61\x74\x65\x54\x61\x72\x67\x65\x74","\x69\x73\x56\x61\x6C\x69\x64\x53\x6F\x75\x72\x63\x65","\x61\x70\x70\x6C\x79","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x6E\x65\x63\x74","\x32","\x61\x6C\x74\x65\x72\x6E\x61\x74\x65\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x76\x65\x72\x74\x69\x63\x61\x6C","\x6C\x6F\x61\x64\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x67\x65\x74\x52\x75\x62\x62\x65\x72\x62\x61\x6E\x64","\x63\x75\x72\x73\x6F\x72","\x73\x74\x79\x6C\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x70\x6F\x69\x6E\x74\x65\x72","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x64\x65\x66\x61\x75\x6C\x74","\x69\x73\x48\x74\x6D\x6C\x4C\x61\x62\x65\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x76\x69\x65\x77","\x67\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65","\x68\x74\x6D\x6C","\x31","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x77\x72\x61\x70","\x67\x65\x74\x4C\x61\x62\x65\x6C\x56\x61\x6C\x75\x65","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x68\x74\x6D\x6C\x45\x6E\x74\x69\x74\x69\x65\x73","\x69\x73\x43\x65\x6C\x6C\x4C\x6F\x63\x6B\x65\x64","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64\x54\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x74\x61\x70\x41\x6E\x64\x48\x6F\x6C\x64","\x61\x63\x74\x69\x76\x65","\x67\x72\x61\x70\x68","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x73\x74\x61\x72\x74","\x70\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x63\x65\x6C\x6C","\x69\x73\x43\x65\x6C\x6C\x53\x65\x6C\x65\x63\x74\x65\x64","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x69\x6E\x69\x74\x54\x6F\x75\x63\x68","\x65\x78\x74\x65\x6E\x64","\x6D\x69\x6E\x46\x69\x74\x53\x63\x61\x6C\x65","\x6D\x61\x78\x46\x69\x74\x53\x63\x61\x6C\x65","\x67\x65\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x2F\x64\x65\x66\x61\x75\x6C\x74\x2E\x78\x6D\x6C","\x6C\x6F\x61\x64","\x6F\x77\x6E\x65\x72\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x64\x65\x63\x6F\x64\x65","\x66\x6C\x69\x70\x45\x64\x67\x65","\x67\x65\x74\x56\x61\x6C\x75\x65","\x45\x4C\x42\x4F\x57\x5F\x48\x4F\x52\x49\x5A\x4F\x4E\x54\x41\x4C","\x45\x4C\x42\x4F\x57\x5F\x56\x45\x52\x54\x49\x43\x41\x4C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x69\x73\x45\x64\x67\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x63\x6C\x6F\x6E\x65\x43\x65\x6C\x6C\x73","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x70\x6F\x69\x6E\x74\x73","\x67\x65\x74\x53\x74\x79\x6C\x65","\x73\x65\x74\x53\x74\x79\x6C\x65","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x53\x74\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x53\x74\x61\x74\x65","\x66\x61\x63\x74\x6F\x72\x79\x4D\x65\x74\x68\x6F\x64","\x69\x73\x43\x65\x6C\x6C\x46\x6F\x6C\x64\x61\x62\x6C\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x77\x69\x6D\x6C\x61\x6E\x65","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x63\x72\x65\x61\x74\x65\x47\x72\x6F\x75\x70\x43\x65\x6C\x6C","\x67\x72\x6F\x75\x70","\x67\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x46\x6F\x72\x43\x65\x6C\x6C","","\x69\x73\x56\x65\x72\x74\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x5F","\x6E\x6F\x64\x65\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x67\x65\x74","\x63\x6F\x6E\x76\x65\x72\x74\x56\x61\x6C\x75\x65\x54\x6F\x53\x74\x72\x69\x6E\x67","\x6F\x62\x6A\x65\x63\x74","\x6C\x61\x62\x65\x6C","\x67\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x65\x6C\x6C\x4C\x61\x62\x65\x6C\x43\x68\x61\x6E\x67\x65\x64","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x73\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x55\x73\x65\x72\x4F\x62\x6A\x65\x63\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x6C\x65\x6E\x67\x74\x68","\x6C\x69\x6E\x6B","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x73\x65\x74\x56\x61\x6C\x75\x65","\x6D\x6F\x64\x65\x6C","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x6D\x61\x72\x6B\x65\x72","\x66\x69\x72\x73\x74","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x75\x70\x64\x61\x74\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x67\x72\x61\x70\x68\x58","\x67\x72\x61\x70\x68\x59","\x67\x65\x74\x43\x65\x6C\x6C\x41\x74","\x73\x74\x61\x74\x65","\x73\x68\x61\x70\x65","\x6E\x6F\x64\x65","\x66\x69\x72\x65\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74","\x4D\x4F\x55\x53\x45\x5F\x44\x4F\x57\x4E","\x69\x73\x4D\x65\x6E\x75\x53\x68\x6F\x77\x69\x6E\x67","\x67\x65\x74\x43\x65\x6C\x6C","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x4D\x4F\x55\x53\x45\x5F\x55\x50","\x69\x73\x45\x64\x69\x74\x69\x6E\x67","\x67\x65\x74\x45\x76\x65\x6E\x74","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x70\x6F\x70\x75\x70","\x63\x6F\x6E\x73\x75\x6D\x65","\x4D\x4F\x55\x53\x45\x5F\x4D\x4F\x56\x45","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x72\x6F\x74\x61\x74\x69\x6F\x6E\x45\x6E\x61\x62\x6C\x65\x64","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x54\x6F\x70","\x62\x61\x73\x65\x53\x70\x61\x63\x69\x6E\x67\x42\x6F\x74\x74\x6F\x6D","\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x4C\x41\x42\x45\x4C\x5F\x48\x41\x4E\x44\x4C\x45\x5F\x53\x49\x5A\x45","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x67\x72\x69\x64\x53\x69\x7A\x65","\x73\x65\x6C\x65\x63\x74\x4F\x6E\x50\x6F\x70\x75\x70","\x75\x73\x65\x4C\x65\x66\x74\x42\x75\x74\x74\x6F\x6E\x46\x6F\x72\x50\x61\x6E\x6E\x69\x6E\x67","\x69\x73\x50\x61\x6E\x6E\x69\x6E\x67\x54\x72\x69\x67\x67\x65\x72","\x69\x67\x6E\x6F\x72\x65\x43\x65\x6C\x6C","\x69\x73\x43\x6F\x6E\x74\x72\x6F\x6C\x44\x6F\x77\x6E","\x69\x73\x53\x68\x69\x66\x74\x44\x6F\x77\x6E","\x75\x73\x65\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x6D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x64\x65\x6C\x61\x79\x65\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x43\x65\x6C\x6C\x73","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x64\x62\x6C\x43\x6C\x69\x63\x6B","\x63\x6F\x6E\x76\x65\x72\x74\x50\x6F\x69\x6E\x74","\x78","\x79","\x2F\x74\x6F\x75\x63\x68\x2D\x68\x61\x6E\x64\x6C\x65\x2E\x70\x6E\x67","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x73\x69\x7A\x65\x72\x49\x6D\x61\x67\x65","\x73\x72\x63","\x2F\x74\x6F\x75\x63\x68\x2D\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x2E\x70\x6E\x67","\x69\x6E\x69\x74","\x69\x73\x43\x65\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x49\x6D\x67","\x63\x72\x65\x61\x74\x65\x49\x6D\x61\x67\x65","\x77\x69\x64\x74\x68","\x32\x39\x70\x78","\x68\x65\x69\x67\x68\x74","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x74\x69\x74\x6C\x65","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x70\x61\x64\x64\x69\x6E\x67","\x32\x70\x78","\x69\x73\x4D\x6F\x75\x73\x65\x44\x6F\x77\x6E","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x72\x65\x64\x72\x61\x77\x54\x6F\x6F\x6C\x73","\x72\x65\x64\x72\x61\x77","\x73\x69\x6E\x67\x6C\x65\x53\x69\x7A\x65\x72","\x6C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x78","\x74\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x2F\x63\x6F\x6E\x6E\x65\x63\x74\x6F\x72\x2E\x70\x6E\x67","\x63\x6F\x6E\x6E\x65\x63\x74\x49\x6D\x61\x67\x65","\x49\x53\x5F\x49\x45","\x49\x53\x5F\x53\x56\x47","\x64\x69\x76","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x63\x65\x6E\x74\x65\x72","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x64\x69\x73\x70\x6C\x61\x79","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x69\x6E\x6C\x69\x6E\x65","\x69\x6E\x6C\x69\x6E\x65\x2D\x62\x6C\x6F\x63\x6B","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E"];Graph= function(_0x725fx1,_0x725fx2,_0x725fx3,_0x725fx4){mxGraph[_0xc3d9[0]](this,_0x725fx1,_0x725fx2,_0x725fx3,_0x725fx4);this[_0xc3d9[1]](true);this[_0xc3d9[2]](false);this[_0xc3d9[3]](true);this[_0xc3d9[4]](!mxClient.IS_TOUCH);this[_0xc3d9[5]](false);this[_0xc3d9[6]](false);this[_0xc3d9[7]]= true;this[_0xc3d9[8]]= false;this[_0xc3d9[9]]= false;this[_0xc3d9[11]][_0xc3d9[10]]= true;this[_0xc3d9[12]](false);this[_0xc3d9[11]][_0xc3d9[13]](false);this[_0xc3d9[11]][_0xc3d9[14]]= function(){return mxConnectionHandler[_0xc3d9[16]][_0xc3d9[14]][_0xc3d9[15]](this,arguments)&& urlParams[_0xc3d9[17]]!= _0xc3d9[18]};this[_0xc3d9[19]]= _0xc3d9[20];if(_0x725fx4== null){this[_0xc3d9[21]]()};var _0x725fx5= new mxRubberband(this);this[_0xc3d9[22]]= function(){return _0x725fx5};this[_0xc3d9[29]][_0xc3d9[28]](mxEvent.PAN_START,mxUtils[_0xc3d9[27]](this,function(){this[_0xc3d9[25]][_0xc3d9[24]][_0xc3d9[23]]= _0xc3d9[26]}));this[_0xc3d9[29]][_0xc3d9[28]](mxEvent.PAN_END,mxUtils[_0xc3d9[27]](this,function(){this[_0xc3d9[25]][_0xc3d9[24]][_0xc3d9[23]]= _0xc3d9[30]}));this[_0xc3d9[31]]= function(_0x725fx6){var _0x725fx7=this[_0xc3d9[33]][_0xc3d9[32]](_0x725fx6);var _0x725fx8=(_0x725fx7!= null)?_0x725fx7[_0xc3d9[24]]:this[_0xc3d9[34]](_0x725fx6);return _0x725fx8[_0xc3d9[35]]== _0xc3d9[36]|| _0x725fx8[_0xc3d9[37]]== _0xc3d9[38]};this[_0xc3d9[40]][_0xc3d9[39]]= function(_0x725fx7){var _0x725fx9=mxCellRenderer[_0xc3d9[16]][_0xc3d9[39]][_0xc3d9[15]](this,arguments);if(_0x725fx7[_0xc3d9[24]][_0xc3d9[37]]== _0xc3d9[38]&& _0x725fx7[_0xc3d9[24]][_0xc3d9[35]]!= 1){_0x725fx9= mxUtils[_0xc3d9[41]](_0x725fx9,false)};return _0x725fx9};this[_0xc3d9[42]]= function(_0x725fx6){return false};this[_0xc3d9[11]][_0xc3d9[43]]= 16;var _0x725fxa=this[_0xc3d9[11]][_0xc3d9[44]];this[_0xc3d9[11]][_0xc3d9[44]]= function(_0x725fxb,_0x725fx7){if(_0x725fx7== null){if(!this[_0xc3d9[46]][_0xc3d9[29]][_0xc3d9[45]]){_0x725fx5[_0xc3d9[49]](_0x725fxb[_0xc3d9[47]](),_0x725fxb[_0xc3d9[48]]());this[_0xc3d9[46]][_0xc3d9[29]][_0xc3d9[50]]= false}}else {if(tapAndHoldStartsConnection){_0x725fxa[_0xc3d9[15]](this,arguments)}else {if(this[_0xc3d9[46]][_0xc3d9[52]](_0x725fx7[_0xc3d9[51]])&& this[_0xc3d9[46]][_0xc3d9[53]]()> 1){this[_0xc3d9[46]][_0xc3d9[54]](_0x725fx7[_0xc3d9[51]])}}}};if(touchStyle){this[_0xc3d9[55]]()}};mxUtils[_0xc3d9[56]](Graph,mxGraph);Graph[_0xc3d9[16]][_0xc3d9[57]]= null;Graph[_0xc3d9[16]][_0xc3d9[58]]= null;Graph[_0xc3d9[16]][_0xc3d9[21]]= function(){var _0x725fxc=mxUtils[_0xc3d9[61]](STYLE_PATH+ _0xc3d9[60])[_0xc3d9[59]]();var _0x725fxd= new mxCodec(_0x725fxc[_0xc3d9[62]]);_0x725fxd[_0xc3d9[64]](_0x725fxc,this[_0xc3d9[63]]())};Graph[_0xc3d9[16]][_0xc3d9[65]]= function(_0x725fxe){if(_0x725fxe!= null){var _0x725fx7=this[_0xc3d9[33]][_0xc3d9[32]](_0x725fxe);var _0x725fx8=(_0x725fx7!= null)?_0x725fx7[_0xc3d9[24]]:this[_0xc3d9[34]](_0x725fxe);if(_0x725fx8!= null){var _0x725fxf=mxUtils[_0xc3d9[66]](_0x725fx8,mxConstants.STYLE_ELBOW,mxConstants.ELBOW_HORIZONTAL);var _0x725fx10=(_0x725fxf== mxConstants[_0xc3d9[67]])?mxConstants[_0xc3d9[68]]:mxConstants[_0xc3d9[67]];this[_0xc3d9[69]](mxConstants.STYLE_ELBOW,_0x725fx10,[_0x725fxe])}}};Graph[_0xc3d9[16]][_0xc3d9[70]]= function(_0x725fx6){if(_0x725fx6!= null&& this[_0xc3d9[72]]()[_0xc3d9[71]](_0x725fx6)){var _0x725fx11=this[_0xc3d9[72]]()[_0xc3d9[73]]([_0x725fx6])[0];if(_0x725fx11[_0xc3d9[74]]!= null){_0x725fx11[_0xc3d9[74]][_0xc3d9[75]]= null};var _0x725fx8=_0x725fx11[_0xc3d9[76]]();_0x725fx8= mxUtils[_0xc3d9[77]](_0x725fx8,mxConstants.STYLE_ENTRY_X,null);_0x725fx8= mxUtils[_0xc3d9[77]](_0x725fx8,mxConstants.STYLE_ENTRY_Y,null);_0x725fx8= mxUtils[_0xc3d9[77]](_0x725fx8,mxConstants.STYLE_EXIT_X,null);_0x725fx8= mxUtils[_0xc3d9[77]](_0x725fx8,mxConstants.STYLE_EXIT_Y,null);_0x725fx11[_0xc3d9[77]](_0x725fx8);this[_0xc3d9[11]][_0xc3d9[78]]= function(_0x725fxb){return this[_0xc3d9[46]][_0xc3d9[33]][_0xc3d9[79]](_0x725fx11)};this[_0xc3d9[11]][_0xc3d9[80]]= function(){return this[_0xc3d9[46]][_0xc3d9[73]]([_0x725fx11])[0]}}};Graph[_0xc3d9[16]][_0xc3d9[81]]= function(_0x725fx6){return this[_0xc3d9[82]]&& this[_0xc3d9[83]](_0x725fx6)};Graph[_0xc3d9[16]][_0xc3d9[84]]= function(_0x725fx6){return this[_0xc3d9[83]](_0x725fx6)};Graph[_0xc3d9[16]][_0xc3d9[85]]= function(){var _0x725fx12=mxGraph[_0xc3d9[16]][_0xc3d9[85]][_0xc3d9[15]](this,arguments);_0x725fx12[_0xc3d9[77]](_0xc3d9[86]);return _0x725fx12};Graph[_0xc3d9[16]][_0xc3d9[87]]= function(_0x725fx6){var _0x725fx13=_0xc3d9[88];if(this[_0xc3d9[72]]()[_0xc3d9[89]](_0x725fx6)){_0x725fx13+= mxResources[_0xc3d9[93]](_0xc3d9[90]+ _0x725fx6[_0xc3d9[92]][_0xc3d9[91]])|| _0xc3d9[88]}else {if(this[_0xc3d9[72]]()[_0xc3d9[71]](_0x725fx6)){_0x725fx13= mxGraph[_0xc3d9[16]][_0xc3d9[87]][_0xc3d9[15]](this,arguments)}};return _0x725fx13};Graph[_0xc3d9[16]][_0xc3d9[94]]= function(_0x725fx6){if(_0x725fx6[_0xc3d9[92]]!= null&& typeof (_0x725fx6[_0xc3d9[92]])== _0xc3d9[95]){return _0x725fx6[_0xc3d9[92]][_0xc3d9[97]](_0xc3d9[96])};return mxGraph[_0xc3d9[16]][_0xc3d9[94]][_0xc3d9[15]](this,arguments)};Graph[_0xc3d9[16]][_0xc3d9[98]]= function(_0x725fx6,_0x725fx10,_0x725fx14){if(_0x725fx6[_0xc3d9[92]]!= null&& typeof (_0x725fx6[_0xc3d9[92]])== _0xc3d9[95]){var _0x725fx15=_0x725fx6[_0xc3d9[92]][_0xc3d9[99]](true);_0x725fx15[_0xc3d9[100]](_0xc3d9[96],_0x725fx10);_0x725fx10= _0x725fx15};mxGraph[_0xc3d9[16]][_0xc3d9[98]][_0xc3d9[15]](this,arguments)};Graph[_0xc3d9[16]][_0xc3d9[101]]= function(_0x725fx6,_0x725fx16){var _0x725fx10=null;if(_0x725fx6[_0xc3d9[92]]!= null&& typeof (_0x725fx6[_0xc3d9[92]])== _0xc3d9[95]){_0x725fx10= _0x725fx6[_0xc3d9[92]][_0xc3d9[99]](true)}else {var _0x725fx17=mxUtils[_0xc3d9[102]]();_0x725fx10= _0x725fx17[_0xc3d9[104]](_0xc3d9[103]);_0x725fx10[_0xc3d9[100]](_0xc3d9[96],_0x725fx6[_0xc3d9[92]])};if(_0x725fx16!= null&& _0x725fx16[_0xc3d9[105]]> 0){_0x725fx10[_0xc3d9[100]](_0xc3d9[106],_0x725fx16)}else {_0x725fx10[_0xc3d9[107]](_0xc3d9[106])};this[_0xc3d9[109]][_0xc3d9[108]](_0x725fx6,_0x725fx10)};Graph[_0xc3d9[16]][_0xc3d9[110]]= function(_0x725fx6){if(_0x725fx6[_0xc3d9[92]]!= null&& typeof (_0x725fx6[_0xc3d9[92]])== _0xc3d9[95]){return _0x725fx6[_0xc3d9[92]][_0xc3d9[97]](_0xc3d9[106])};return null};Graph[_0xc3d9[16]][_0xc3d9[55]]= function(){this[_0xc3d9[11]][_0xc3d9[112]][_0xc3d9[111]]= function(){return this[_0xc3d9[46]][_0xc3d9[11]][_0xc3d9[113]]!= null};this[_0xc3d9[28]](mxEvent.START_EDITING,function(_0x725fx18,_0x725fx19){this[_0xc3d9[29]][_0xc3d9[114]]()});var _0x725fx1a=false;var _0x725fx1b=null;this[_0xc3d9[115]]= function(_0x725fxb){mxGraph[_0xc3d9[16]][_0xc3d9[115]][_0xc3d9[15]](this,arguments);if(_0x725fxb[_0xc3d9[32]]()== null){var _0x725fx6=this[_0xc3d9[118]](_0x725fxb[_0xc3d9[116]],_0x725fxb[_0xc3d9[117]]);if(this[_0xc3d9[72]]()[_0xc3d9[71]](_0x725fx6)){_0x725fxb[_0xc3d9[119]]= this[_0xc3d9[33]][_0xc3d9[32]](_0x725fx6);if(_0x725fxb[_0xc3d9[119]]!= null&& _0x725fxb[_0xc3d9[119]][_0xc3d9[120]]!= null){this[_0xc3d9[25]][_0xc3d9[24]][_0xc3d9[23]]= _0x725fxb[_0xc3d9[119]][_0xc3d9[120]][_0xc3d9[121]][_0xc3d9[24]][_0xc3d9[23]]}}};if(_0x725fxb[_0xc3d9[32]]()== null){this[_0xc3d9[25]][_0xc3d9[24]][_0xc3d9[23]]= _0xc3d9[30]}};this[_0xc3d9[122]]= function(_0x725fx1c,_0x725fxb,_0x725fx18){if(_0x725fx1c== mxEvent[_0xc3d9[123]]){if(!this[_0xc3d9[29]][_0xc3d9[124]]()){_0x725fx1b= _0x725fxb[_0xc3d9[125]]();_0x725fx1a= (_0x725fx1b!= null)?this[_0xc3d9[52]](_0x725fx1b):this[_0xc3d9[126]]()}else {_0x725fx1a= false;_0x725fx1b= null}}else {if(_0x725fx1c== mxEvent[_0xc3d9[127]]){if(_0x725fx1a&& !this[_0xc3d9[128]]()){if(!this[_0xc3d9[29]][_0xc3d9[124]]()){var _0x725fx1d=mxEvent[_0xc3d9[130]](_0x725fxb[_0xc3d9[129]]());var _0x725fx1e=mxEvent[_0xc3d9[131]](_0x725fxb[_0xc3d9[129]]());this[_0xc3d9[29]][_0xc3d9[132]](_0x725fx1d+ 16,_0x725fx1e,_0x725fx1b,_0x725fxb[_0xc3d9[129]]())};_0x725fx1a= false;_0x725fx1b= null;_0x725fxb[_0xc3d9[133]]();return};_0x725fx1a= false;_0x725fx1b= null}};mxGraph[_0xc3d9[16]][_0xc3d9[122]][_0xc3d9[15]](this,arguments);if(_0x725fx1c== mxEvent[_0xc3d9[134]]&& _0x725fxb[_0xc3d9[135]]()){_0x725fx1a= false;_0x725fx1b= null}}};(function(){mxVertexHandler[_0xc3d9[16]][_0xc3d9[136]]= true;mxText[_0xc3d9[16]][_0xc3d9[137]]= 5;mxText[_0xc3d9[16]][_0xc3d9[138]]= 1;if(touchStyle){mxConstants[_0xc3d9[139]]= 16;mxConstants[_0xc3d9[140]]= 7;if(mxClient[_0xc3d9[141]]){mxVertexHandler[_0xc3d9[16]][_0xc3d9[142]]= 4;mxEdgeHandler[_0xc3d9[16]][_0xc3d9[142]]= 6;Graph[_0xc3d9[16]][_0xc3d9[142]]= 14;Graph[_0xc3d9[16]][_0xc3d9[143]]= 20;mxPanningHandler[_0xc3d9[16]][_0xc3d9[144]]= false;mxPanningHandler[_0xc3d9[16]][_0xc3d9[145]]= true;mxPanningHandler[_0xc3d9[16]][_0xc3d9[146]]= function(_0x725fxb){var _0x725fx19=_0x725fxb[_0xc3d9[129]]();return (this[_0xc3d9[145]]&& (this[_0xc3d9[147]]|| _0x725fxb[_0xc3d9[32]]()== null))|| (mxEvent[_0xc3d9[148]](_0x725fx19)&& mxEvent[_0xc3d9[149]](_0x725fx19))|| (this[_0xc3d9[150]]&& mxEvent[_0xc3d9[151]](_0x725fx19))}};var _0x725fx1f=mxGraphHandler[_0xc3d9[16]][_0xc3d9[152]];mxGraphHandler[_0xc3d9[16]][_0xc3d9[152]]= function(_0x725fx18,_0x725fxb){_0x725fx1f[_0xc3d9[15]](this,arguments);if(this[_0xc3d9[46]][_0xc3d9[52]](_0x725fxb[_0xc3d9[125]]())&& this[_0xc3d9[46]][_0xc3d9[53]]()> 1){this[_0xc3d9[153]]= false}};Graph[_0xc3d9[16]][_0xc3d9[154]]= function(_0x725fx1){this[_0xc3d9[155]]= new mxTooltipHandler(this);this[_0xc3d9[155]][_0xc3d9[156]](false);this[_0xc3d9[157]]= new mxSelectionCellsHandler(this);this[_0xc3d9[29]]= new mxPanningHandler(this);this[_0xc3d9[29]][_0xc3d9[158]]= false;this[_0xc3d9[11]]= new mxConnectionHandler(this);this[_0xc3d9[11]][_0xc3d9[156]](false);this[_0xc3d9[159]]= new mxGraphHandler(this)};mxConnectionHandler[_0xc3d9[16]][_0xc3d9[160]]= function(_0x725fxe,_0x725fx20){if(touchStyle&& _0x725fx20!= null){this[_0xc3d9[46]][_0xc3d9[161]](_0x725fx20)}else {this[_0xc3d9[46]][_0xc3d9[161]](_0x725fxe)}};var _0x725fx21=mxGraph[_0xc3d9[16]][_0xc3d9[162]];Graph[_0xc3d9[16]][_0xc3d9[162]]= function(_0x725fx19,_0x725fx6){if(_0x725fx6== null){var _0x725fx22=mxUtils[_0xc3d9[163]](this[_0xc3d9[25]],mxEvent[_0xc3d9[130]](_0x725fx19),mxEvent[_0xc3d9[131]](_0x725fx19));_0x725fx6= this[_0xc3d9[118]](_0x725fx22[_0xc3d9[164]],_0x725fx22[_0xc3d9[165]])};_0x725fx21[_0xc3d9[0]](this,_0x725fx19,_0x725fx6)};var _0x725fx23= new mxImage(IMAGE_PATH+ _0xc3d9[166],16,16);mxVertexHandler[_0xc3d9[16]][_0xc3d9[167]]= _0x725fx23;mxEdgeHandler[_0xc3d9[16]][_0xc3d9[167]]= _0x725fx23;mxOutline[_0xc3d9[16]][_0xc3d9[168]]= _0x725fx23; new Image()[_0xc3d9[169]]= _0x725fx23[_0xc3d9[169]];var _0x725fx24=IMAGE_PATH+ _0xc3d9[170];var _0x725fx25=mxVertexHandler[_0xc3d9[16]][_0xc3d9[171]];mxVertexHandler[_0xc3d9[16]][_0xc3d9[171]]= function(){_0x725fx25[_0xc3d9[15]](this,arguments);if(showConnectorImg&& this[_0xc3d9[46]][_0xc3d9[11]][_0xc3d9[111]]()&& this[_0xc3d9[46]][_0xc3d9[172]](this[_0xc3d9[119]][_0xc3d9[51]])&& !this[_0xc3d9[46]][_0xc3d9[84]](this[_0xc3d9[119]][_0xc3d9[51]])&& this[_0xc3d9[46]][_0xc3d9[53]]()== 1){this[_0xc3d9[173]]= mxUtils[_0xc3d9[174]](_0x725fx24);this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[23]]= _0xc3d9[26];this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[175]]= _0xc3d9[176];this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[177]]= _0xc3d9[176];this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[178]]= _0xc3d9[179];if(!mxClient[_0xc3d9[141]]){this[_0xc3d9[173]][_0xc3d9[100]](_0xc3d9[180],mxResources[_0xc3d9[93]](_0xc3d9[17]));mxEvent[_0xc3d9[181]](this[_0xc3d9[173]],this[_0xc3d9[46]],this[_0xc3d9[119]])};this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[182]]= _0xc3d9[183];mxEvent[_0xc3d9[185]](this[_0xc3d9[173]],mxUtils[_0xc3d9[27]](this,function(_0x725fx19){this[_0xc3d9[46]][_0xc3d9[29]][_0xc3d9[114]]();var _0x725fx22=mxUtils[_0xc3d9[163]](this[_0xc3d9[46]][_0xc3d9[25]],mxEvent[_0xc3d9[130]](_0x725fx19),mxEvent[_0xc3d9[131]](_0x725fx19));this[_0xc3d9[46]][_0xc3d9[11]][_0xc3d9[49]](this[_0xc3d9[119]],_0x725fx22[_0xc3d9[164]],_0x725fx22[_0xc3d9[165]]);this[_0xc3d9[46]][_0xc3d9[184]]= true;mxEvent[_0xc3d9[133]](_0x725fx19)}));this[_0xc3d9[46]][_0xc3d9[25]][_0xc3d9[186]](this[_0xc3d9[173]])};this[_0xc3d9[187]]()};var _0x725fx26=mxVertexHandler[_0xc3d9[16]][_0xc3d9[188]];mxVertexHandler[_0xc3d9[16]][_0xc3d9[188]]= function(){_0x725fx26[_0xc3d9[15]](this);this[_0xc3d9[187]]()};mxVertexHandler[_0xc3d9[16]][_0xc3d9[187]]= function(){if(this[_0xc3d9[119]]!= null&& this[_0xc3d9[173]]!= null){if(mxVertexHandler[_0xc3d9[16]][_0xc3d9[189]]){this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[190]]= (this[_0xc3d9[119]][_0xc3d9[164]]+ this[_0xc3d9[119]][_0xc3d9[175]]- this[_0xc3d9[173]][_0xc3d9[191]]/ 2)+ _0xc3d9[192];this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[193]]= (this[_0xc3d9[119]][_0xc3d9[165]]- this[_0xc3d9[173]][_0xc3d9[194]]/ 2)+ _0xc3d9[192]}else {this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[190]]= (this[_0xc3d9[119]][_0xc3d9[164]]+ this[_0xc3d9[119]][_0xc3d9[175]]+ mxConstants[_0xc3d9[139]]/ 2+ 4)+ _0xc3d9[192];this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[193]]= (this[_0xc3d9[119]][_0xc3d9[165]]+ (this[_0xc3d9[119]][_0xc3d9[177]]- this[_0xc3d9[173]][_0xc3d9[194]])/ 2)+ _0xc3d9[192]}}};var _0x725fx27=mxVertexHandler[_0xc3d9[16]][_0xc3d9[195]];mxVertexHandler[_0xc3d9[16]][_0xc3d9[195]]= function(_0x725fx18,_0x725fxb){_0x725fx27[_0xc3d9[15]](this,arguments);if(this[_0xc3d9[173]]!= null){this[_0xc3d9[173]][_0xc3d9[197]][_0xc3d9[196]](this[_0xc3d9[173]]);this[_0xc3d9[173]]= null}}; new Image()[_0xc3d9[169]]= _0x725fx24}else {var _0x725fx28= new mxImage(IMAGE_PATH+ _0xc3d9[198],15,15);mxConnectionHandler[_0xc3d9[16]][_0xc3d9[199]]= _0x725fx28; new Image()[_0xc3d9[169]]= _0x725fx28[_0xc3d9[169]];if(urlParams[_0xc3d9[17]]== _0xc3d9[18]){var _0x725fx28= new mxImage(IMAGE_PATH+ _0xc3d9[198],15,15);var _0x725fx25=mxVertexHandler[_0xc3d9[16]][_0xc3d9[171]];mxVertexHandler[_0xc3d9[16]][_0xc3d9[171]]= function(){_0x725fx25[_0xc3d9[15]](this,arguments);if(showConnectorImg&& this[_0xc3d9[46]][_0xc3d9[11]][_0xc3d9[111]]()&& this[_0xc3d9[46]][_0xc3d9[172]](this[_0xc3d9[119]][_0xc3d9[51]])&& !this[_0xc3d9[46]][_0xc3d9[84]](this[_0xc3d9[119]][_0xc3d9[51]])&& this[_0xc3d9[46]][_0xc3d9[53]]()== 1){if(mxClient[_0xc3d9[200]]&& !mxClient[_0xc3d9[201]]){this[_0xc3d9[173]]= document[_0xc3d9[104]](_0xc3d9[202]);this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[203]]= _0xc3d9[204]+ _0x725fx28[_0xc3d9[169]]+ _0xc3d9[205];this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[206]]= _0xc3d9[207];this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[208]]= _0xc3d9[209];this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[175]]= (_0x725fx28[_0xc3d9[175]]+ 4)+ _0xc3d9[192];this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[177]]= (_0x725fx28[_0xc3d9[177]]+ 4)+ _0xc3d9[192];this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[210]]= (mxClient[_0xc3d9[211]])?_0xc3d9[212]:_0xc3d9[213]}else {this[_0xc3d9[173]]= mxUtils[_0xc3d9[174]](_0x725fx28[_0xc3d9[169]]);this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[175]]= _0x725fx28[_0xc3d9[175]]+ _0xc3d9[192];this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[177]]= _0x725fx28[_0xc3d9[177]]+ _0xc3d9[192]};this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[23]]= _0xc3d9[26];this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[178]]= _0xc3d9[179];this[_0xc3d9[173]][_0xc3d9[100]](_0xc3d9[180],mxResources[_0xc3d9[93]](_0xc3d9[17]));mxEvent[_0xc3d9[181]](this[_0xc3d9[173]],this[_0xc3d9[46]],this[_0xc3d9[119]]);this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[182]]= _0xc3d9[183];mxEvent[_0xc3d9[28]](this[_0xc3d9[173]],_0xc3d9[214],mxUtils[_0xc3d9[27]](this,function(_0x725fx19){this[_0xc3d9[46]][_0xc3d9[29]][_0xc3d9[114]]();var _0x725fx22=mxUtils[_0xc3d9[163]](this[_0xc3d9[46]][_0xc3d9[25]],mxEvent[_0xc3d9[130]](_0x725fx19),mxEvent[_0xc3d9[131]](_0x725fx19));this[_0xc3d9[46]][_0xc3d9[11]][_0xc3d9[49]](this[_0xc3d9[119]],_0x725fx22[_0xc3d9[164]],_0x725fx22[_0xc3d9[165]]);this[_0xc3d9[46]][_0xc3d9[184]]= true;mxEvent[_0xc3d9[133]](_0x725fx19)}));this[_0xc3d9[46]][_0xc3d9[25]][_0xc3d9[186]](this[_0xc3d9[173]])};this[_0xc3d9[187]]()};var _0x725fx26=mxVertexHandler[_0xc3d9[16]][_0xc3d9[188]];mxVertexHandler[_0xc3d9[16]][_0xc3d9[188]]= function(){_0x725fx26[_0xc3d9[15]](this);this[_0xc3d9[187]]()};mxVertexHandler[_0xc3d9[16]][_0xc3d9[187]]= function(){if(this[_0xc3d9[119]]!= null&& this[_0xc3d9[173]]!= null){if(mxVertexHandler[_0xc3d9[16]][_0xc3d9[189]]){this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[190]]= (this[_0xc3d9[119]][_0xc3d9[164]]+ this[_0xc3d9[119]][_0xc3d9[175]]- this[_0xc3d9[173]][_0xc3d9[191]]/ 2)+ _0xc3d9[192];this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[193]]= (this[_0xc3d9[119]][_0xc3d9[165]]- this[_0xc3d9[173]][_0xc3d9[194]]/ 2)+ _0xc3d9[192]}else {this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[190]]= (this[_0xc3d9[119]][_0xc3d9[164]]+ this[_0xc3d9[119]][_0xc3d9[175]]+ mxConstants[_0xc3d9[139]]/ 2+ 2)+ _0xc3d9[192];this[_0xc3d9[173]][_0xc3d9[24]][_0xc3d9[193]]= (this[_0xc3d9[119]][_0xc3d9[165]]+ (this[_0xc3d9[119]][_0xc3d9[177]]- this[_0xc3d9[173]][_0xc3d9[194]])/ 2)+ _0xc3d9[192]}}};var _0x725fx27=mxVertexHandler[_0xc3d9[16]][_0xc3d9[195]];mxVertexHandler[_0xc3d9[16]][_0xc3d9[195]]= function(_0x725fx18,_0x725fxb){_0x725fx27[_0xc3d9[15]](this,arguments);if(this[_0xc3d9[173]]!= null){this[_0xc3d9[173]][_0xc3d9[197]][_0xc3d9[196]](this[_0xc3d9[173]]);this[_0xc3d9[173]]= null}}}}})() \ No newline at end of file +/** + * $Id: Graph.js,v 1.14 2013-02-16 10:19:54 gaudenz Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ +/** + * Constructs a new graph instance. Note that the constructor does not take a + * container because the graph instance is needed for creating the UI, which + * in turn will create the container for the graph. Hence, the container is + * assigned later in EditorUi. + */ +Graph = function(container, model, renderHint, stylesheet) { + mxGraph.call(this, container, model, renderHint, stylesheet); + + this.setConnectable(true); + this.setDropEnabled(false); + this.setPanning(true); + this.setTooltips(!mxClient.IS_TOUCH); + this.setAllowLoops(false); + this.setMultigraph(false); + this.allowAutoPanning = true; + this.resetEdgesOnConnect = false; + this.constrainChildren = false; + + // Centers the port icon on the target port + this.connectionHandler.targetConnectImage = true; + + // Does not allow dangling edges + this.setAllowDanglingEdges(false); + + // Enables cloning of connection sources + this.connectionHandler.setCreateTarget(false); + + // Disables built-in connection starts + this.connectionHandler.isValidSource = function() { + return mxConnectionHandler.prototype.isValidSource.apply(this, arguments) && urlParams['connect'] != '2'; + }; + + // Sets the style to be used when an elbow edge is double clicked + this.alternateEdgeStyle = 'vertical'; + + if (stylesheet == null) { + this.loadStylesheet(); + } + + // Creates rubberband selection + var rubberband = new mxRubberband(this); + + this.getRubberband = function() { + return rubberband; + }; + + // Shows hand cursor while panning + this.panningHandler.addListener(mxEvent.PAN_START, mxUtils.bind(this, function() { + this.container.style.cursor = 'pointer'; + })); + + this.panningHandler.addListener(mxEvent.PAN_END, mxUtils.bind(this, function() { + this.container.style.cursor = 'default'; + })); + + // Adds support for HTML labels via style. Note: Currently, only the Java + // backend supports HTML labels but CSS support is limited to the following: + // http://docs.oracle.com/javase/6/docs/api/index.html?javax/swing/text/html/CSS.html + this.isHtmlLabel = function(cell) { + var state = this.view.getState(cell); + var style = (state != null) ? state.style : this.getCellStyle(cell); + + return style['html'] == '1' || style['whiteSpace'] == 'wrap'; + }; + + // HTML entities are displayed as plain text in wrapped plain text labels + this.cellRenderer.getLabelValue = function(state) { + var result = mxCellRenderer.prototype.getLabelValue.apply(this, arguments); + + if (state.style['whiteSpace'] == 'wrap' && state.style['html'] != 1) { + result = mxUtils.htmlEntities(result, false); + } + + return result; + }; + + // Unlocks all cells + this.isCellLocked = function(cell) { + return false; + }; + + // Tap and hold brings up context menu. + // Tolerance slightly below graph tolerance is better. + this.connectionHandler.tapAndHoldTolerance = 16; + + // Tap and hold on background starts rubberband on cell starts connecting + var connectionHandlerTapAndHold = this.connectionHandler.tapAndHold; + this.connectionHandler.tapAndHold = function(me, state) { + if (state == null) { + if (!this.graph.panningHandler.active) { + rubberband.start(me.getGraphX(), me.getGraphY()); + this.graph.panningHandler.panningTrigger = false; + } + } else if (tapAndHoldStartsConnection) { + connectionHandlerTapAndHold.apply(this, arguments); + } else if (this.graph.isCellSelected(state.cell) && this.graph.getSelectionCount() > 1) { + this.graph.removeSelectionCell(state.cell); + } + }; + + if (touchStyle) { + this.initTouch(); + } +}; + +// Graph inherits from mxGraph +mxUtils.extend(Graph, mxGraph); + +/** + * Allows to all values in fit. + */ +Graph.prototype.minFitScale = null; + +/** + * Allows to all values in fit. + */ +Graph.prototype.maxFitScale = null; + +/** + * Loads the stylesheet for this graph. + */ +Graph.prototype.loadStylesheet = function() { + var node = mxUtils.load(STYLE_PATH + '/default.xml').getDocumentElement(); + var dec = new mxCodec(node.ownerDocument); + dec.decode(node, this.getStylesheet()); +}; + +/** + * Inverts the elbow edge style without removing existing styles. + */ +Graph.prototype.flipEdge = function(edge) { + if (edge != null) { + var state = this.view.getState(edge); + var style = (state != null) ? state.style : this.getCellStyle(edge); + + if (style != null) { + var elbow = mxUtils.getValue(style, mxConstants.STYLE_ELBOW, + mxConstants.ELBOW_HORIZONTAL); + var value = (elbow == mxConstants.ELBOW_HORIZONTAL) ? + mxConstants.ELBOW_VERTICAL : mxConstants.ELBOW_HORIZONTAL; + this.setCellStyles(mxConstants.STYLE_ELBOW, value, [edge]); + } + } +}; + +/** + * Sets the default edge for future connections. + */ +Graph.prototype.setDefaultEdge = function(cell) { + if (cell != null && this.getModel().isEdge(cell)) { + // Take a snapshot of the cell at the moment of calling + var proto = this.getModel().cloneCells([cell])[0]; + + // Delete existing points + if (proto.geometry != null) { + proto.geometry.points = null; + } + + // Delete entry-/exitXY styles + var style = proto.getStyle(); + style = mxUtils.setStyle(style, mxConstants.STYLE_ENTRY_X, null); + style = mxUtils.setStyle(style, mxConstants.STYLE_ENTRY_Y, null); + style = mxUtils.setStyle(style, mxConstants.STYLE_EXIT_X, null); + style = mxUtils.setStyle(style, mxConstants.STYLE_EXIT_Y, null); + proto.setStyle(style); + + // Uses edge template for connect preview + this.connectionHandler.createEdgeState = function(me) { + return this.graph.view.createState(proto); + }; + + // Creates new connections from edge template + this.connectionHandler.factoryMethod = function() { + return this.graph.cloneCells([proto])[0]; + }; + } +}; + +/** + * Disables folding for non-swimlanes. + */ +Graph.prototype.isCellFoldable = function(cell) { + return this.foldingEnabled && this.isSwimlane(cell); +}; + +/** + * Disables drill-down for non-swimlanes. + */ +Graph.prototype.isValidRoot = function(cell) { + return this.isSwimlane(cell); +}; + +/** + * Overrides createGroupCell to set the group style for new groups to 'group'. + */ +Graph.prototype.createGroupCell = function() { + var group = mxGraph.prototype.createGroupCell.apply(this, arguments); + group.setStyle('group'); + + return group; +}; + +/** + * Giuseppe Careri + * Overrides tooltips to show position and size + */ +Graph.prototype.getTooltipForCell = function(cell) { + var tip = ''; + + if (this.getModel().isVertex(cell)) { + // var geo = this.getCellGeometry(cell); + + // var f2 = function(x) + // { + // return Math.round(parseFloat(x) * 100) / 100; + // }; + + // if (geo != null) + // { + // if (tip == null) + // { + // tip = ''; + // } + // else if (tip.length > 0) + // { + // tip += '\n'; + // } + + // tip += 'X: ' + f2(geo.x) + '\nY: ' + f2(geo.y) + '\nW: ' + f2(geo.width) + '\nH: ' + f2(geo.height); + // } + + tip += mxResources.get('description_' + cell.value.nodeName) || ''; + } else if (this.getModel().isEdge(cell)) { + tip = mxGraph.prototype.getTooltipForCell.apply(this, arguments); + } + + return tip; +}; + +/** + * Giuseppe Careri + * Returns the label for the given cell. + */ +Graph.prototype.convertValueToString = function(cell) { + if (cell.value != null && typeof(cell.value) == 'object') { + return cell.value.getAttribute('label'); + } + + return mxGraph.prototype.convertValueToString.apply(this, arguments); +}; + +/** + * Giuseppe Careri + * Handles label changes for XML user objects. + */ +Graph.prototype.cellLabelChanged = function(cell, value, autoSize) { + if (cell.value != null && typeof(cell.value) == 'object') { + var tmp = cell.value.cloneNode(true); + tmp.setAttribute('label', value); + value = tmp; + } + + mxGraph.prototype.cellLabelChanged.apply(this, arguments); +}; + +/** + * Sets the link for the given cell. + */ +Graph.prototype.setLinkForCell = function(cell, link) { + var value = null; + + if (cell.value != null && typeof(cell.value) == 'object') { + value = cell.value.cloneNode(true); + } else { + var doc = mxUtils.createXmlDocument(); + + value = doc.createElement('UserObject'); + value.setAttribute('label', cell.value); + } + + if (link != null && link.length > 0) { + value.setAttribute('link', link); + } else { + value.removeAttribute('link'); + } + + this.model.setValue(cell, value); +}; + +/** + * Returns the link for the given cell. + */ +Graph.prototype.getLinkForCell = function(cell) { + if (cell.value != null && typeof(cell.value) == 'object') { + return cell.value.getAttribute('link'); + } + + return null; +}; + +/** + * Customized graph for touch devices. + */ +Graph.prototype.initTouch = function() { + // Disables new connections via "hotspot" + this.connectionHandler.marker.isEnabled = function() { + return this.graph.connectionHandler.first != null; + }; + + // Hides menu when editing starts + this.addListener(mxEvent.START_EDITING, function(sender, evt) { + this.panningHandler.hideMenu(); + }); + + // Context menu for touchstyle + var showMenu = false; + var menuCell = null; + + // Checks if native hit detection did not return anything and does custom + // hit detection for edges to take into account the tolerance + this.updateMouseEvent = function(me) { + mxGraph.prototype.updateMouseEvent.apply(this, arguments); + + if (me.getState() == null) { + var cell = this.getCellAt(me.graphX, me.graphY); + + if (this.getModel().isEdge(cell)) { + me.state = this.view.getState(cell); + + if (me.state != null && me.state.shape != null) { + this.container.style.cursor = me.state.shape.node.style.cursor; + } + } + } + + if (me.getState() == null) { + this.container.style.cursor = 'default'; + } + }; + + // Handles popup menu on touch devices (tap selected cell) + this.fireMouseEvent = function(evtName, me, sender) { + if (evtName == mxEvent.MOUSE_DOWN) { + if (!this.panningHandler.isMenuShowing()) { + menuCell = me.getCell(); + showMenu = (menuCell != null) ? this.isCellSelected(menuCell) : this.isSelectionEmpty(); + } else { + showMenu = false; + menuCell = null; + } + } else if (evtName == mxEvent.MOUSE_UP) { + if (showMenu && !this.isEditing()) { + if (!this.panningHandler.isMenuShowing()) { + var x = mxEvent.getClientX(me.getEvent()); + var y = mxEvent.getClientY(me.getEvent()); + + this.panningHandler.popup(x + 16, y, menuCell, me.getEvent()); + } + + showMenu = false; + menuCell = null; + me.consume(); + + return; + } + + showMenu = false; + menuCell = null; + } + + mxGraph.prototype.fireMouseEvent.apply(this, arguments); + + if (evtName == mxEvent.MOUSE_MOVE && me.isConsumed()) { + showMenu = false; + menuCell = null; + } + }; +}; + +/** + * Implements touch devices. + */ +(function() { + // Enables rotation handle + mxVertexHandler.prototype.rotationEnabled = true; + + // Matches label positions of mxGraph 1.x + mxText.prototype.baseSpacingTop = 5; + mxText.prototype.baseSpacingBottom = 1; + + // Touch-specific static overrides + if (touchStyle) { + // Sets constants for touch style + mxConstants.HANDLE_SIZE = 16; + mxConstants.LABEL_HANDLE_SIZE = 7; + + // Larger tolerance and grid for real touch devices + if (mxClient.IS_TOUCH) { + mxVertexHandler.prototype.tolerance = 4; + mxEdgeHandler.prototype.tolerance = 6; + Graph.prototype.tolerance = 14; + Graph.prototype.gridSize = 20; + + // One finger pans (no rubberband selection) must start regardless of mouse button + mxPanningHandler.prototype.selectOnPopup = false; + mxPanningHandler.prototype.useLeftButtonForPanning = true; + mxPanningHandler.prototype.isPanningTrigger = function(me) { + var evt = me.getEvent(); + + return (this.useLeftButtonForPanning && (this.ignoreCell || me.getState() == null) + /* && + mxEvent.isLeftMouseButton(evt)*/ + ) || (mxEvent.isControlDown(evt) && + mxEvent.isShiftDown(evt)) || (this.usePopupTrigger && + mxEvent.isPopupTrigger(evt)); + }; + } + + // Don't clear selection if multiple cells selected + var graphHandlerMouseDown = mxGraphHandler.prototype.mouseDown; + mxGraphHandler.prototype.mouseDown = function(sender, me) { + graphHandlerMouseDown.apply(this, arguments); + + if (this.graph.isCellSelected(me.getCell()) && this.graph.getSelectionCount() > 1) { + this.delayedSelection = false; + } + }; + + // Changes order of panninghandler + Graph.prototype.createHandlers = function(container) { + this.tooltipHandler = new mxTooltipHandler(this); + this.tooltipHandler.setEnabled(false); + // Selection cells first + this.selectionCellsHandler = new mxSelectionCellsHandler(this); + this.panningHandler = new mxPanningHandler(this); + this.panningHandler.panningEnabled = false; + this.connectionHandler = new mxConnectionHandler(this); + this.connectionHandler.setEnabled(false); + this.graphHandler = new mxGraphHandler(this); + }; + + // On connect the target is selected and we clone the cell of the preview edge for insert + mxConnectionHandler.prototype.selectCells = function(edge, target) { + if (touchStyle && target != null) { + this.graph.setSelectionCell(target); + } else { + this.graph.setSelectionCell(edge); + } + }; + + // Overrides double click handling to use the tolerance + // FIXME: Double click on edges in iPad needs focus on textarea + var graphDblClick = mxGraph.prototype.dblClick; + Graph.prototype.dblClick = function(evt, cell) { + if (cell == null) { + var pt = mxUtils.convertPoint(this.container, + mxEvent.getClientX(evt), mxEvent.getClientY(evt)); + cell = this.getCellAt(pt.x, pt.y); + } + + graphDblClick.call(this, evt, cell); + }; + + // Rounded edge and vertex handles + var touchHandle = new mxImage(IMAGE_PATH + '/touch-handle.png', 16, 16); + mxVertexHandler.prototype.handleImage = touchHandle; + mxEdgeHandler.prototype.handleImage = touchHandle; + mxOutline.prototype.sizerImage = touchHandle; + + // Pre-fetches touch handle + new Image().src = touchHandle.src; + + // Adds connect icon to selected vertices + var connectorSrc = IMAGE_PATH + '/touch-connector.png'; + + var vertexHandlerInit = mxVertexHandler.prototype.init; + mxVertexHandler.prototype.init = function() { + vertexHandlerInit.apply(this, arguments); + + // Only show connector image on one cell and do not show on containers + if (showConnectorImg && this.graph.connectionHandler.isEnabled() && + this.graph.isCellConnectable(this.state.cell) && + !this.graph.isValidRoot(this.state.cell) && + this.graph.getSelectionCount() == 1) { + this.connectorImg = mxUtils.createImage(connectorSrc); + this.connectorImg.style.cursor = 'pointer'; + this.connectorImg.style.width = '29px'; + this.connectorImg.style.height = '29px'; + this.connectorImg.style.position = 'absolute'; + + if (!mxClient.IS_TOUCH) { + this.connectorImg.setAttribute('title', mxResources.get('connect')); + mxEvent.redirectMouseEvents(this.connectorImg, this.graph, this.state); + } + + // Adds 2px tolerance + this.connectorImg.style.padding = '2px'; + + // Starts connecting on touch/mouse down + mxEvent.addGestureListeners(this.connectorImg, + mxUtils.bind(this, function(evt) { + this.graph.panningHandler.hideMenu(); + var pt = mxUtils.convertPoint(this.graph.container, + mxEvent.getClientX(evt), mxEvent.getClientY(evt)); + this.graph.connectionHandler.start(this.state, pt.x, pt.y); + this.graph.isMouseDown = true; + mxEvent.consume(evt); + }) + ); + + this.graph.container.appendChild(this.connectorImg); + } + + this.redrawTools(); + }; + + var vertexHandlerRedraw = mxVertexHandler.prototype.redraw; + mxVertexHandler.prototype.redraw = function() { + vertexHandlerRedraw.apply(this); + this.redrawTools(); + }; + + mxVertexHandler.prototype.redrawTools = function() { + if (this.state != null && this.connectorImg != null) { + // Top right for single-sizer + if (mxVertexHandler.prototype.singleSizer) { + this.connectorImg.style.left = (this.state.x + this.state.width - this.connectorImg.offsetWidth / 2) + 'px'; + this.connectorImg.style.top = (this.state.y - this.connectorImg.offsetHeight / 2) + 'px'; + } else { + this.connectorImg.style.left = (this.state.x + this.state.width + mxConstants.HANDLE_SIZE / 2 + 4 /* - 2 padding*/ ) + 'px'; + this.connectorImg.style.top = (this.state.y + (this.state.height - this.connectorImg.offsetHeight) / 2) + 'px'; + } + } + }; + + var vertexHandlerDestroy = mxVertexHandler.prototype.destroy; + mxVertexHandler.prototype.destroy = function(sender, me) { + vertexHandlerDestroy.apply(this, arguments); + + if (this.connectorImg != null) { + this.connectorImg.parentNode.removeChild(this.connectorImg); + this.connectorImg = null; + } + }; + + // Pre-fetches touch connector + new Image().src = connectorSrc; + } else { + var img = new mxImage(IMAGE_PATH + '/connector.png', 15, 15); + mxConnectionHandler.prototype.connectImage = img; + + // Pre-fetches img + new Image().src = img.src; + + if (urlParams['connect'] == '2') // not touchStyle + { + var img = new mxImage(IMAGE_PATH + '/connector.png', 15, 15); + + var vertexHandlerInit = mxVertexHandler.prototype.init; + mxVertexHandler.prototype.init = function() { + vertexHandlerInit.apply(this, arguments); + + // Only show connector image on one cell and do not show on containers + if (showConnectorImg && this.graph.connectionHandler.isEnabled() && + this.graph.isCellConnectable(this.state.cell) && + !this.graph.isValidRoot(this.state.cell) && + this.graph.getSelectionCount() == 1) { + // Workaround for event redirection via image tag in quirks and IE8 + if (mxClient.IS_IE && !mxClient.IS_SVG) { + this.connectorImg = document.createElement('div'); + this.connectorImg.style.backgroundImage = 'url(' + img.src + ')'; + this.connectorImg.style.backgroundPosition = 'center'; + this.connectorImg.style.backgroundRepeat = 'no-repeat'; + this.connectorImg.style.width = (img.width + 4) + 'px'; + this.connectorImg.style.height = (img.height + 4) + 'px'; + this.connectorImg.style.display = (mxClient.IS_QUIRKS) ? 'inline' : 'inline-block'; + } else { + this.connectorImg = mxUtils.createImage(img.src); + this.connectorImg.style.width = img.width + 'px'; + this.connectorImg.style.height = img.height + 'px'; + } + + this.connectorImg.style.cursor = 'pointer'; + this.connectorImg.style.position = 'absolute'; + this.connectorImg.setAttribute('title', mxResources.get('connect')); + mxEvent.redirectMouseEvents(this.connectorImg, this.graph, this.state); + + // Adds 2px tolerance + this.connectorImg.style.padding = '2px'; + + // Starts connecting on touch/mouse down + mxEvent.addListener(this.connectorImg, 'mousedown', + mxUtils.bind(this, function(evt) { + this.graph.panningHandler.hideMenu(); + var pt = mxUtils.convertPoint(this.graph.container, + mxEvent.getClientX(evt), mxEvent.getClientY(evt)); + this.graph.connectionHandler.start(this.state, pt.x, pt.y); + this.graph.isMouseDown = true; + mxEvent.consume(evt); + }) + ); + + this.graph.container.appendChild(this.connectorImg); + } + + this.redrawTools(); + }; + + var vertexHandlerRedraw = mxVertexHandler.prototype.redraw; + mxVertexHandler.prototype.redraw = function() { + vertexHandlerRedraw.apply(this); + this.redrawTools(); + }; + + mxVertexHandler.prototype.redrawTools = function() { + if (this.state != null && this.connectorImg != null) { + // Top right for single-sizer + if (mxVertexHandler.prototype.singleSizer) { + this.connectorImg.style.left = (this.state.x + this.state.width - this.connectorImg.offsetWidth / 2) + 'px'; + this.connectorImg.style.top = (this.state.y - this.connectorImg.offsetHeight / 2) + 'px'; + } else { + this.connectorImg.style.left = (this.state.x + this.state.width + mxConstants.HANDLE_SIZE / 2 + 2 /* - 2 padding*/ ) + 'px'; + this.connectorImg.style.top = (this.state.y + (this.state.height - this.connectorImg.offsetHeight) / 2) + 'px'; + } + } + }; + + var vertexHandlerDestroy = mxVertexHandler.prototype.destroy; + mxVertexHandler.prototype.destroy = function(sender, me) { + vertexHandlerDestroy.apply(this, arguments); + + if (this.connectorImg != null) { + this.connectorImg.parentNode.removeChild(this.connectorImg); + this.connectorImg = null; + } + }; + } + } +})(); diff --git a/public/assets/plugins/square/js/Menus.js b/public/assets/plugins/square/js/Menus.js index 9016712..f6563c8 100644 --- a/public/assets/plugins/square/js/Menus.js +++ b/public/assets/plugins/square/js/Menus.js @@ -1 +1,716 @@ -var _0xfb9d=["\x65\x64\x69\x74\x6F\x72\x55\x69","\x6D\x65\x6E\x75\x73","\x69\x6E\x69\x74","\x73\x72\x63","\x2F\x63\x68\x65\x63\x6B\x6D\x61\x72\x6B\x2E\x67\x69\x66","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x67\x72\x61\x70\x68","\x65\x64\x69\x74\x6F\x72","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x56\x65\x72\x64\x61\x6E\x61","\x54\x69\x6D\x65\x73\x20\x4E\x65\x77\x20\x52\x6F\x6D\x61\x6E","\x47\x61\x72\x61\x6D\x6F\x6E\x64","\x43\x6F\x6D\x69\x63\x20\x53\x61\x6E\x73\x20\x4D\x53","\x43\x6F\x75\x72\x69\x65\x72\x20\x4E\x65\x77","\x47\x65\x6F\x72\x67\x69\x61","\x4C\x75\x63\x69\x64\x61\x20\x43\x6F\x6E\x73\x6F\x6C\x65","\x54\x61\x68\x6F\x6D\x61","\x6C\x65\x6E\x67\x74\x68","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x73\x74\x79\x6C\x65\x43\x68\x61\x6E\x67\x65","\x73\x74\x79\x6C\x65","\x6E\x65\x78\x74\x53\x69\x62\x6C\x69\x6E\x67","\x66\x69\x72\x73\x74\x43\x68\x69\x6C\x64","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x63\x75\x73\x74\x6F\x6D","\x67\x65\x74","","\x70\x72\x6F\x6D\x70\x74\x43\x68\x61\x6E\x67\x65","\x62\x69\x6E\x64","\x70\x75\x74","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x28\x70\x74\x29","\x31\x32","\x6C\x69\x6E\x65\x77\x69\x64\x74\x68","\x70\x78","\x53\x54\x59\x4C\x45\x5F\x53\x54\x52\x4F\x4B\x45\x57\x49\x44\x54\x48","\x28\x70\x78\x29","\x31","\x6C\x69\x6E\x65","\x73\x74\x72\x61\x69\x67\x68\x74","\x53\x54\x59\x4C\x45\x5F\x45\x44\x47\x45","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E","\x65\x6E\x74\x69\x74\x79\x52\x65\x6C\x61\x74\x69\x6F\x6E\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x53\x54\x59\x4C\x45\x5F\x45\x4C\x42\x4F\x57","\x65\x6C\x62\x6F\x77\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x76\x65\x72\x74\x69\x63\x61\x6C","\x6D\x61\x6E\x75\x61\x6C","\x73\x65\x67\x6D\x65\x6E\x74\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x61\x75\x74\x6F\x6D\x61\x74\x69\x63","\x6F\x72\x74\x68\x6F\x67\x6F\x6E\x61\x6C\x45\x64\x67\x65\x53\x74\x79\x6C\x65","\x6C\x69\x6E\x65\x65\x6E\x64","\x63\x6C\x61\x73\x73\x69\x63","\x53\x54\x59\x4C\x45\x5F\x45\x4E\x44\x41\x52\x52\x4F\x57","\x41\x52\x52\x4F\x57\x5F\x43\x4C\x41\x53\x53\x49\x43","\x6F\x70\x65\x6E\x41\x72\x72\x6F\x77","\x41\x52\x52\x4F\x57\x5F\x4F\x50\x45\x4E","\x62\x6C\x6F\x63\x6B","\x41\x52\x52\x4F\x57\x5F\x42\x4C\x4F\x43\x4B","\x6F\x76\x61\x6C","\x41\x52\x52\x4F\x57\x5F\x4F\x56\x41\x4C","\x64\x69\x61\x6D\x6F\x6E\x64","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44","\x64\x69\x61\x6D\x6F\x6E\x64\x54\x68\x69\x6E","\x41\x52\x52\x4F\x57\x5F\x44\x49\x41\x4D\x4F\x4E\x44\x5F\x54\x48\x49\x4E","\x6E\x6F\x6E\x65","\x4E\x4F\x4E\x45","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74","\x65\x6E\x64\x46\x69\x6C\x6C","\x74\x6F\x67\x67\x6C\x65\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x61\x64\x64\x49\x74\x65\x6D","\x73\x69\x7A\x65","\x6C\x69\x6E\x65\x73\x74\x61\x72\x74","\x53\x54\x59\x4C\x45\x5F\x53\x54\x41\x52\x54\x41\x52\x52\x4F\x57","\x73\x74\x61\x72\x74\x46\x69\x6C\x6C","\x73\x70\x61\x63\x69\x6E\x67","\x65\x6E\x61\x62\x6C\x65\x64","\x73\x68\x61\x64\x6F\x77","\x61\x63\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x44\x69\x73\x61\x62\x6C\x65\x64","\x74\x6F\x70","\x30","\x72\x69\x67\x68\x74","\x62\x6F\x74\x74\x6F\x6D","\x6C\x65\x66\x74","\x67\x6C\x6F\x62\x61\x6C","\x70\x65\x72\x69\x6D\x65\x74\x65\x72","\x73\x6F\x75\x72\x63\x65\x53\x70\x61\x63\x69\x6E\x67","\x74\x61\x72\x67\x65\x74\x53\x70\x61\x63\x69\x6E\x67","\x66\x6F\x72\x6D\x61\x74","\x61\x64\x64\x4D\x65\x6E\x75\x49\x74\x65\x6D","\x74\x65\x78\x74","\x61\x64\x64\x53\x75\x62\x6D\x65\x6E\x75","\x2D","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x61\x64\x64\x4D\x65\x6E\x75\x49\x74\x65\x6D\x73","\x61\x6C\x69\x67\x6E\x6D\x65\x6E\x74","\x77\x6F\x72\x64\x57\x72\x61\x70","\x74\x65\x78\x74\x4F\x70\x61\x63\x69\x74\x79","\x28\x25\x29","\x31\x30\x30","\x68\x69\x64\x65","\x6C\x65\x66\x74\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x41\x4C\x49\x47\x4E","\x41\x4C\x49\x47\x4E\x5F\x4C\x45\x46\x54","\x63\x65\x6E\x74\x65\x72","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x72\x69\x67\x68\x74\x41\x6C\x69\x67\x6E","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x74\x6F\x70\x41\x6C\x69\x67\x6E","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x41\x4C\x49\x47\x4E","\x41\x4C\x49\x47\x4E\x5F\x54\x4F\x50","\x6D\x69\x64\x64\x6C\x65","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x62\x6F\x74\x74\x6F\x6D\x41\x6C\x69\x67\x6E","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x53\x54\x59\x4C\x45\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x4F\x53\x49\x54\x49\x4F\x4E","\x53\x54\x59\x4C\x45\x5F\x56\x45\x52\x54\x49\x43\x41\x4C\x5F\x4C\x41\x42\x45\x4C\x5F\x50\x4F\x53\x49\x54\x49\x4F\x4E","\x64\x69\x72\x65\x63\x74\x69\x6F\x6E","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x74\x69\x6C\x74","\x72\x6F\x74\x61\x74\x69\x6F\x6E","\x61\x6C\x69\x67\x6E","\x61\x6C\x69\x67\x6E\x43\x65\x6C\x6C\x73","\x6C\x61\x79\x6F\x75\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C\x46\x6C\x6F\x77","\x65\x78\x65\x63\x75\x74\x65\x4C\x61\x79\x6F\x75\x74","\x76\x65\x72\x74\x69\x63\x61\x6C\x46\x6C\x6F\x77","\x6E\x61\x76\x69\x67\x61\x74\x69\x6F\x6E","\x68\x6F\x6D\x65","\x65\x78\x69\x74\x47\x72\x6F\x75\x70","\x65\x6E\x74\x65\x72\x47\x72\x6F\x75\x70","\x65\x78\x70\x61\x6E\x64","\x63\x6F\x6C\x6C\x61\x70\x73\x65","\x61\x72\x72\x61\x6E\x67\x65","\x74\x6F\x46\x72\x6F\x6E\x74","\x74\x6F\x42\x61\x63\x6B","\x67\x72\x6F\x75\x70","\x75\x6E\x67\x72\x6F\x75\x70","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x47\x72\x6F\x75\x70","\x76\x69\x65\x77","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x25","\x7A\x6F\x6F\x6D\x54\x6F","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x66\x69\x74\x57\x69\x6E\x64\x6F\x77","\x63\x75\x73\x74\x6F\x6D\x5A\x6F\x6F\x6D","\x66\x69\x74\x50\x61\x67\x65","\x66\x69\x74\x50\x61\x67\x65\x57\x69\x64\x74\x68","\x66\x69\x6C\x65","\x6E\x65\x77","\x6F\x70\x65\x6E","\x73\x61\x76\x65","\x73\x61\x76\x65\x41\x73","\x70\x75\x62\x6C\x69\x73\x68","\x76\x61\x72\x69\x61\x62\x6C\x65","\x69\x6D\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x65\x64\x69\x74\x46\x69\x6C\x65","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x70\x72\x69\x6E\x74","\x65\x64\x69\x74","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x75\x74","\x63\x6F\x70\x79","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x73\x65\x6C\x65\x63\x74\x56\x65\x72\x74\x69\x63\x65\x73","\x73\x65\x6C\x65\x63\x74\x45\x64\x67\x65\x73","\x73\x65\x6C\x65\x63\x74\x41\x6C\x6C","\x68\x65\x6C\x70","\x61\x62\x6F\x75\x74","\x61\x64\x64\x4D\x65\x6E\x75","\x65\x78\x65\x63\x75\x74\x65","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x65\x6E\x74\x65\x72\x56\x61\x6C\x75\x65","\x20","\x70\x72\x6F\x6D\x70\x74","\x6C\x61\x62\x65\x6C","\x66\x75\x6E\x63\x74","\x74\x6F\x67\x67\x6C\x65\x41\x63\x74\x69\x6F\x6E","\x69\x73\x53\x65\x6C\x65\x63\x74\x65\x64","\x61\x64\x64\x43\x68\x65\x63\x6B\x6D\x61\x72\x6B","\x61\x64\x64\x53\x68\x6F\x72\x74\x63\x75\x74","\x73\x68\x6F\x72\x74\x63\x75\x74","\x73\x70\x61\x6E","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6F\x6C\x6F\x72","\x67\x72\x61\x79","\x77\x72\x69\x74\x65","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x2F\x63\x68\x65\x63\x6B\x6D\x61\x72\x6B\x2E\x67\x69\x66\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x32\x70\x78\x20\x35\x30\x25","\x63\x72\x65\x61\x74\x65\x50\x6F\x70\x75\x70\x4D\x65\x6E\x75","\x73\x6D\x61\x72\x74\x53\x65\x70\x61\x72\x61\x74\x6F\x72\x73","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x6F\x75\x6E\x74","\x69\x73\x45\x64\x67\x65","\x73\x65\x74\x41\x73\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x72","\x73\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73\x48\x61\x6E\x64\x6C\x65\x72","\x62\x65\x6E\x64\x73","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x72\x65\x6D\x6F\x76\x65\x57\x61\x79\x70\x6F\x69\x6E\x74","\x68\x61\x6E\x64\x6C\x65\x72","\x69\x6E\x64\x65\x78","\x61\x64\x64\x57\x61\x79\x70\x6F\x69\x6E\x74","\x67\x65\x74\x4C\x69\x6E\x6B\x46\x6F\x72\x43\x65\x6C\x6C","\x6F\x70\x65\x6E\x4C\x69\x6E\x6B","\x63\x72\x65\x61\x74\x65\x4D\x65\x6E\x75\x62\x61\x72","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x63\x75\x72\x72\x65\x6E\x74\x4D\x65\x6E\x75","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x49\x74\x65\x6D","\x61\x64\x64\x4D\x65\x6E\x75\x48\x61\x6E\x64\x6C\x65\x72","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x64\x69\x76","\x20\x67\x65\x4D\x65\x6E\x75\x62\x61\x72\x4D\x65\x6E\x75","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x61\x70\x70\x6C\x79","\x64\x65\x73\x74\x72\x6F\x79","\x63\x75\x72\x72\x65\x6E\x74\x45\x6C\x74","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x2D\x73\x69\x64\x65\x62\x61\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x6F\x70\x75\x70","\x63\x6F\x6E\x73\x75\x6D\x65","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x63\x6C\x69\x63\x6B","\x63\x61\x6C\x6C","\x65\x78\x74\x65\x6E\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x66\x69\x72\x65\x45\x76\x65\x6E\x74"];Menus= function(_0xf019x1){this[_0xfb9d[0]]= _0xf019x1;this[_0xfb9d[1]]= new Object();this[_0xfb9d[2]](); new Image()[_0xfb9d[3]]= IMAGE_PATH+ _0xfb9d[4]};Menus[_0xfb9d[5]][_0xfb9d[2]]= function(){var _0xf019x2=this[_0xfb9d[0]][_0xfb9d[7]][_0xfb9d[6]];this[_0xfb9d[30]](_0xfb9d[8], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){var _0xf019x5=[_0xfb9d[9],_0xfb9d[10],_0xfb9d[11],_0xfb9d[12],_0xfb9d[13],_0xfb9d[14],_0xfb9d[15],_0xfb9d[16],_0xfb9d[17]];for(var _0xf019x6=0;_0xf019x6< _0xf019x5[_0xfb9d[18]];_0xf019x6++){var _0xf019x7=this[_0xfb9d[20]](_0xf019x3,_0xf019x5[_0xf019x6],[mxConstants[_0xfb9d[19]]],[_0xf019x5[_0xf019x6]],null,_0xf019x4);_0xf019x7[_0xfb9d[23]][_0xfb9d[22]][_0xfb9d[21]][_0xfb9d[8]]= _0xf019x5[_0xf019x6]};_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[28]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[25]),_0xfb9d[27],mxConstants.DEFAULT_FONTFAMILY,mxConstants.STYLE_FONTFAMILY,_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[31], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){var _0xf019x8=[6,8,9,10,11,12,14,18,24,36,48,72];for(var _0xf019x6=0;_0xf019x6< _0xf019x8[_0xfb9d[18]];_0xf019x6++){this[_0xfb9d[20]](_0xf019x3,_0xf019x8[_0xf019x6],[mxConstants[_0xfb9d[32]]],[_0xf019x8[_0xf019x6]],null,_0xf019x4)};_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[28]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[25]),_0xfb9d[33],_0xfb9d[34],mxConstants.STYLE_FONTSIZE,_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[35], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){var _0xf019x8=[1,2,3,4,8,12,16,24];for(var _0xf019x6=0;_0xf019x6< _0xf019x8[_0xfb9d[18]];_0xf019x6++){this[_0xfb9d[20]](_0xf019x3,_0xf019x8[_0xf019x6]+ _0xfb9d[36],[mxConstants[_0xfb9d[37]]],[_0xf019x8[_0xf019x6]],null,_0xf019x4)};_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[28]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[25]),_0xfb9d[38],_0xfb9d[39],mxConstants.STYLE_STROKEWIDTH,_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[40], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[41]),[mxConstants[_0xfb9d[42]]],[null],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[43]),[mxConstants[_0xfb9d[42]]],[_0xfb9d[44]],null,_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[45]),[mxConstants[_0xfb9d[42]],mxConstants[_0xfb9d[46]]],[_0xfb9d[47],_0xfb9d[45]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[48]),[mxConstants[_0xfb9d[42]],mxConstants[_0xfb9d[46]]],[_0xfb9d[47],_0xfb9d[48]],null,_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[49]),[mxConstants[_0xfb9d[42]]],[_0xfb9d[50]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[51]),[mxConstants[_0xfb9d[42]]],[_0xfb9d[52]],null,_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[53], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[54]),[mxConstants[_0xfb9d[55]]],[mxConstants[_0xfb9d[56]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[57]),[mxConstants[_0xfb9d[55]]],[mxConstants[_0xfb9d[58]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[59]),[mxConstants[_0xfb9d[55]]],[mxConstants[_0xfb9d[60]]],null,_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[61]),[mxConstants[_0xfb9d[55]]],[mxConstants[_0xfb9d[62]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[63]),[mxConstants[_0xfb9d[55]]],[mxConstants[_0xfb9d[64]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[65]),[mxConstants[_0xfb9d[55]]],[mxConstants[_0xfb9d[66]]],null,_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[67]),[mxConstants[_0xfb9d[55]]],[mxConstants[_0xfb9d[68]]],null,_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xfb9d[69]),null,function(){_0xf019x2[_0xfb9d[71]](_0xfb9d[70],true)},_0xf019x4,null,true);_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[28]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[73]),_0xfb9d[38],mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_ENDSIZE,_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[74], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[54]),[mxConstants[_0xfb9d[75]]],[mxConstants[_0xfb9d[56]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[57]),[mxConstants[_0xfb9d[75]]],[mxConstants[_0xfb9d[58]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[59]),[mxConstants[_0xfb9d[75]]],[mxConstants[_0xfb9d[60]]],null,_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[61]),[mxConstants[_0xfb9d[75]]],[mxConstants[_0xfb9d[62]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[63]),[mxConstants[_0xfb9d[75]]],[mxConstants[_0xfb9d[64]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[65]),[mxConstants[_0xfb9d[75]]],[mxConstants[_0xfb9d[66]]],null,_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[67]),[mxConstants[_0xfb9d[75]]],[mxConstants[_0xfb9d[68]]],null,_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xfb9d[69]),null,function(){_0xf019x2[_0xfb9d[71]](_0xfb9d[76],true)},_0xf019x4,null,true);_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[28]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[73]),_0xfb9d[38],mxConstants.DEFAULT_MARKERSIZE,mxConstants.STYLE_STARTSIZE,_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[77], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){var _0xf019x9=this[_0xfb9d[0]][_0xfb9d[80]][_0xfb9d[26]](_0xfb9d[79])[_0xfb9d[78]];var _0xf019xa=this[_0xfb9d[26]](_0xfb9d[40])[_0xfb9d[78]];if(_0xf019x9|| _0xf019x3[_0xfb9d[81]]){this[_0xfb9d[28]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[82]),_0xfb9d[38],_0xfb9d[83],mxConstants.STYLE_SPACING_TOP,_0xf019x4,_0xf019x9);this[_0xfb9d[28]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[84]),_0xfb9d[38],_0xfb9d[83],mxConstants.STYLE_SPACING_RIGHT,_0xf019x4,_0xf019x9);this[_0xfb9d[28]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[85]),_0xfb9d[38],_0xfb9d[83],mxConstants.STYLE_SPACING_BOTTOM,_0xf019x4,_0xf019x9);this[_0xfb9d[28]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[86]),_0xfb9d[38],_0xfb9d[83],mxConstants.STYLE_SPACING_LEFT,_0xf019x4,_0xf019x9);_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[28]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[87]),_0xfb9d[38],_0xfb9d[83],mxConstants.STYLE_SPACING,_0xf019x4,_0xf019x9);this[_0xfb9d[28]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[88]),_0xfb9d[38],_0xfb9d[83],mxConstants.STYLE_PERIMETER_SPACING,_0xf019x4,_0xf019x9)};if(_0xf019xa|| _0xf019x3[_0xfb9d[81]]){_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[28]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[89]),_0xfb9d[38],_0xfb9d[83],mxConstants.STYLE_SOURCE_PERIMETER_SPACING,_0xf019x4,_0xf019xa);this[_0xfb9d[28]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[90]),_0xfb9d[38],_0xfb9d[83],mxConstants.STYLE_TARGET_PERIMETER_SPACING,_0xf019x4,_0xf019xa)}})));this[_0xfb9d[30]](_0xfb9d[91], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){this[_0xfb9d[92]](_0xf019x3,_0xfb9d[21],_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[93], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){var _0xf019xb=this[_0xfb9d[26]](_0xfb9d[93])[_0xfb9d[78]];_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[94]](_0xfb9d[8],_0xf019x3,_0xf019x4);this[_0xfb9d[94]](_0xfb9d[31],_0xf019x3,_0xf019x4);this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[95],_0xfb9d[96],_0xfb9d[97],_0xfb9d[98],_0xfb9d[95]],_0xf019x4);this[_0xfb9d[94]](_0xfb9d[100],_0xf019x3,_0xf019x4);this[_0xfb9d[92]](_0xf019x3,_0xfb9d[101],_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[28]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[102]),_0xfb9d[103],_0xfb9d[104],mxConstants.STYLE_TEXT_OPACITY,_0xf019x4,_0xf019xb);_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xfb9d[105]),null,function(){_0xf019x2[_0xfb9d[71]](mxConstants.STYLE_NOLABEL,false)},_0xf019x4,null,_0xf019xb)})));this[_0xfb9d[30]](_0xfb9d[100], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[106]),[mxConstants[_0xfb9d[107]]],[mxConstants[_0xfb9d[108]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[109]),[mxConstants[_0xfb9d[107]]],[mxConstants[_0xfb9d[110]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[111]),[mxConstants[_0xfb9d[107]]],[mxConstants[_0xfb9d[112]]],null,_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[113]),[mxConstants[_0xfb9d[114]]],[mxConstants[_0xfb9d[115]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[116]),[mxConstants[_0xfb9d[114]]],[mxConstants[_0xfb9d[117]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[118]),[mxConstants[_0xfb9d[114]]],[mxConstants[_0xfb9d[119]]],null,_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[94]](_0xfb9d[120],_0xf019x3,_0xf019x4);this[_0xfb9d[94]](_0xfb9d[77],_0xf019x3,_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);var _0xf019xb=this[_0xfb9d[26]](_0xfb9d[93])[_0xfb9d[78]];_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xfb9d[48]),null,function(){_0xf019x2[_0xfb9d[71]](mxConstants.STYLE_HORIZONTAL,true)},_0xf019x4,null,_0xf019xb)})));this[_0xfb9d[30]](_0xfb9d[120], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[86]),[mxConstants[_0xfb9d[121]],mxConstants[_0xfb9d[107]]],[mxConstants[_0xfb9d[108]],mxConstants[_0xfb9d[112]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[109]),[mxConstants[_0xfb9d[121]],mxConstants[_0xfb9d[107]]],[mxConstants[_0xfb9d[110]],mxConstants[_0xfb9d[110]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[84]),[mxConstants[_0xfb9d[121]],mxConstants[_0xfb9d[107]]],[mxConstants[_0xfb9d[112]],mxConstants[_0xfb9d[108]]],null,_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[82]),[mxConstants[_0xfb9d[122]],mxConstants[_0xfb9d[114]]],[mxConstants[_0xfb9d[115]],mxConstants[_0xfb9d[119]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[116]),[mxConstants[_0xfb9d[122]],mxConstants[_0xfb9d[114]]],[mxConstants[_0xfb9d[117]],mxConstants[_0xfb9d[117]]],null,_0xf019x4);this[_0xfb9d[20]](_0xf019x3,mxResources[_0xfb9d[26]](_0xfb9d[85]),[mxConstants[_0xfb9d[122]],mxConstants[_0xfb9d[114]]],[mxConstants[_0xfb9d[119]],mxConstants[_0xfb9d[115]]],null,_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[123], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xfb9d[124]),null,function(){_0xf019x2[_0xfb9d[71]](mxConstants.STYLE_FLIPH,false)},_0xf019x4);_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xfb9d[125]),null,function(){_0xf019x2[_0xfb9d[71]](mxConstants.STYLE_FLIPV,false)},_0xf019x4);this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[95],_0xfb9d[126],_0xfb9d[127]],_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[128], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xfb9d[106]),null,function(){_0xf019x2[_0xfb9d[129]](mxConstants.ALIGN_LEFT)},_0xf019x4);_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xfb9d[109]),null,function(){_0xf019x2[_0xfb9d[129]](mxConstants.ALIGN_CENTER)},_0xf019x4);_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xfb9d[111]),null,function(){_0xf019x2[_0xfb9d[129]](mxConstants.ALIGN_RIGHT)},_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xfb9d[113]),null,function(){_0xf019x2[_0xfb9d[129]](mxConstants.ALIGN_TOP)},_0xf019x4);_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xfb9d[116]),null,function(){_0xf019x2[_0xfb9d[129]](mxConstants.ALIGN_MIDDLE)},_0xf019x4);_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xfb9d[118]),null,function(){_0xf019x2[_0xfb9d[129]](mxConstants.ALIGN_BOTTOM)},_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[130], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xfb9d[131]),null,mxUtils[_0xfb9d[29]](this,function(){var _0xf019xc= new mxHierarchicalLayout(_0xf019x2,mxConstants.DIRECTION_WEST);this[_0xfb9d[0]][_0xfb9d[132]](_0xf019xc,true,true)}),_0xf019x4);_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xfb9d[133]),null,mxUtils[_0xfb9d[29]](this,function(){var _0xf019xc= new mxHierarchicalLayout(_0xf019x2,mxConstants.DIRECTION_NORTH);this[_0xfb9d[0]][_0xfb9d[132]](_0xf019xc,true,true)}),_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[134], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[135],_0xfb9d[95],_0xfb9d[136],_0xfb9d[137],_0xfb9d[95],_0xfb9d[138],_0xfb9d[139]],_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[140], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[141],_0xfb9d[142],_0xfb9d[95]],_0xf019x4);this[_0xfb9d[94]](_0xfb9d[130],_0xf019x3,_0xf019x4);_0xf019x3[_0xfb9d[24]](_0xf019x4);this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[95],_0xfb9d[143],_0xfb9d[144],_0xfb9d[145]],_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[146], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[147]],_0xf019x4);_0xf019x3[_0xfb9d[24]]();var _0xf019xd=[0.25,0.5,0.75,1,2,4];for(var _0xf019x6=0;_0xf019x6< _0xf019xd[_0xfb9d[18]];_0xf019x6++){(function(_0xf019xe){_0xf019x3[_0xfb9d[72]]((_0xf019xe* 100)+ _0xfb9d[148],null,function(){_0xf019x2[_0xfb9d[149]](_0xf019xe)},_0xf019x4)})(_0xf019xd[_0xf019x6])};this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[95],_0xfb9d[150],_0xfb9d[151],_0xfb9d[95],_0xfb9d[152],_0xfb9d[153],_0xfb9d[95],_0xfb9d[154],_0xfb9d[155]],_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[156], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[157],_0xfb9d[158],_0xfb9d[95],_0xfb9d[159],_0xfb9d[160],_0xfb9d[161],_0xfb9d[95],_0xfb9d[162],_0xfb9d[95],_0xfb9d[163],_0xfb9d[164],_0xfb9d[95],_0xfb9d[165],_0xfb9d[166],_0xfb9d[95],_0xfb9d[167]],_0xf019x4)})));this[_0xfb9d[30]](_0xfb9d[168], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[169],_0xfb9d[170],_0xfb9d[95],_0xfb9d[171],_0xfb9d[172],_0xfb9d[173],_0xfb9d[174],_0xfb9d[95],_0xfb9d[175],_0xfb9d[95],_0xfb9d[176],_0xfb9d[177],_0xfb9d[178]])})));this[_0xfb9d[30]](_0xfb9d[179], new Menu(mxUtils[_0xfb9d[29]](this,function(_0xf019x3,_0xf019x4){this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[179],_0xfb9d[95],_0xfb9d[180]])})))};Menus[_0xfb9d[5]][_0xfb9d[30]]= function(_0xf019xf,_0xf019x3){this[_0xfb9d[1]][_0xf019xf]= _0xf019x3};Menus[_0xfb9d[5]][_0xfb9d[26]]= function(_0xf019xf){return this[_0xfb9d[1]][_0xf019xf]};Menus[_0xfb9d[5]][_0xfb9d[94]]= function(_0xf019xf,_0xf019x3,_0xf019x4){var _0xf019xb=this[_0xfb9d[26]](_0xf019xf)[_0xfb9d[78]];if(_0xf019x3[_0xfb9d[81]]|| _0xf019xb){var _0xf019x10=_0xf019x3[_0xfb9d[72]](mxResources[_0xfb9d[26]](_0xf019xf),null,null,_0xf019x4,null,_0xf019xb);this[_0xfb9d[181]](_0xf019xf,_0xf019x3,_0xf019x10)}};Menus[_0xfb9d[5]][_0xfb9d[181]]= function(_0xf019xf,_0xf019x11,_0xf019x4){var _0xf019x3=this[_0xfb9d[26]](_0xf019xf);if(_0xf019x3!= null&& (_0xf019x11[_0xfb9d[81]]|| _0xf019x3[_0xfb9d[78]])){this[_0xfb9d[26]](_0xf019xf)[_0xfb9d[182]](_0xf019x11,_0xf019x4)}};Menus[_0xfb9d[5]][_0xfb9d[20]]= function(_0xf019x3,_0xf019x12,_0xf019x13,_0xf019x14,_0xf019x15,_0xf019x4){return _0xf019x3[_0xfb9d[72]](_0xf019x12,null,mxUtils[_0xfb9d[29]](this,function(){var _0xf019x2=this[_0xfb9d[0]][_0xfb9d[7]][_0xfb9d[6]];_0xf019x2[_0xfb9d[184]]()[_0xfb9d[183]]();try{for(var _0xf019x6=0;_0xf019x6< _0xf019x13[_0xfb9d[18]];_0xf019x6++){_0xf019x2[_0xfb9d[185]](_0xf019x13[_0xf019x6],_0xf019x14[_0xf019x6])}}finally{_0xf019x2[_0xfb9d[184]]()[_0xfb9d[186]]()}}),_0xf019x4,_0xf019x15)};Menus[_0xfb9d[5]][_0xfb9d[28]]= function(_0xf019x3,_0xf019x12,_0xf019x16,_0xf019x17,_0xf019x18,_0xf019x4,_0xf019xb){return _0xf019x3[_0xfb9d[72]](_0xf019x12,null,mxUtils[_0xfb9d[29]](this,function(){var _0xf019x2=this[_0xfb9d[0]][_0xfb9d[7]][_0xfb9d[6]];var _0xf019x19=_0xf019x17;var _0xf019x1a=_0xf019x2[_0xfb9d[189]]()[_0xfb9d[188]](_0xf019x2[_0xfb9d[187]]());if(_0xf019x1a!= null){_0xf019x19= _0xf019x1a[_0xfb9d[21]][_0xf019x18]|| _0xf019x19};_0xf019x19= mxUtils[_0xfb9d[192]](mxResources[_0xfb9d[26]](_0xfb9d[190])+ ((_0xf019x16[_0xfb9d[18]]> 0)?(_0xfb9d[191]+ _0xf019x16):_0xfb9d[27]),_0xf019x19);if(_0xf019x19!= null&& _0xf019x19[_0xfb9d[18]]> 0){_0xf019x2[_0xfb9d[185]](_0xf019x18,_0xf019x19)}}),_0xf019x4,null,_0xf019xb)};Menus[_0xfb9d[5]][_0xfb9d[92]]= function(_0xf019x3,_0xf019x18,_0xf019x4){var _0xf019x1b=this[_0xfb9d[0]][_0xfb9d[80]][_0xfb9d[26]](_0xf019x18);if(_0xf019x1b!= null&& (_0xf019x3[_0xfb9d[81]]|| _0xf019x1b[_0xfb9d[78]])){var _0xf019x1c=_0xf019x3[_0xfb9d[72]](_0xf019x1b[_0xfb9d[193]],null,_0xf019x1b[_0xfb9d[194]],_0xf019x4,null,_0xf019x1b[_0xfb9d[78]]);if(_0xf019x1b[_0xfb9d[195]]&& _0xf019x1b[_0xfb9d[196]]()){this[_0xfb9d[197]](_0xf019x1c)};this[_0xfb9d[198]](_0xf019x1c,_0xf019x1b);return _0xf019x1c};return null};Menus[_0xfb9d[5]][_0xfb9d[198]]= function(_0xf019x1c,_0xf019x1b){if(_0xf019x1b[_0xfb9d[199]]!= null){var _0xf019x1d=_0xf019x1c[_0xfb9d[23]][_0xfb9d[22]][_0xfb9d[22]];var _0xf019x1e=document[_0xfb9d[201]](_0xfb9d[200]);_0xf019x1e[_0xfb9d[21]][_0xfb9d[202]]= _0xfb9d[203];mxUtils[_0xfb9d[204]](_0xf019x1e,_0xf019x1b[_0xfb9d[199]]);_0xf019x1d[_0xfb9d[205]](_0xf019x1e)}};Menus[_0xfb9d[5]][_0xfb9d[197]]= function(_0xf019x1c){var _0xf019x1d=_0xf019x1c[_0xfb9d[23]][_0xfb9d[22]];_0xf019x1d[_0xfb9d[21]][_0xfb9d[206]]= _0xfb9d[207]+ IMAGE_PATH+ _0xfb9d[208];_0xf019x1d[_0xfb9d[21]][_0xfb9d[209]]= _0xfb9d[210];_0xf019x1d[_0xfb9d[21]][_0xfb9d[211]]= _0xfb9d[212]};Menus[_0xfb9d[5]][_0xfb9d[99]]= function(_0xf019x3,_0xf019x13,_0xf019x4){for(var _0xf019x6=0;_0xf019x6< _0xf019x13[_0xfb9d[18]];_0xf019x6++){if(_0xf019x13[_0xf019x6]== _0xfb9d[95]){_0xf019x3[_0xfb9d[24]](_0xf019x4)}else {this[_0xfb9d[92]](_0xf019x3,_0xf019x13[_0xf019x6],_0xf019x4)}}};Menus[_0xfb9d[5]][_0xfb9d[213]]= function(_0xf019x3,_0xf019x1f,_0xf019x20){var _0xf019x2=this[_0xfb9d[0]][_0xfb9d[7]][_0xfb9d[6]];_0xf019x3[_0xfb9d[214]]= true;if(_0xf019x2[_0xfb9d[215]]()){this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[169],_0xfb9d[170],_0xfb9d[95],_0xfb9d[173],_0xfb9d[95]])}else {this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[174],_0xfb9d[95],_0xfb9d[171],_0xfb9d[172],_0xfb9d[95],_0xfb9d[175]]);if(_0xf019x2[_0xfb9d[216]]()== 1&& _0xf019x2[_0xfb9d[184]]()[_0xfb9d[217]](_0xf019x2[_0xfb9d[187]]())){this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[218]])};_0xf019x3[_0xfb9d[24]]()};if(_0xf019x2[_0xfb9d[216]]()> 0){this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[141],_0xfb9d[142],_0xfb9d[95]]);if(_0xf019x2[_0xfb9d[184]]()[_0xfb9d[217]](_0xf019x2[_0xfb9d[187]]())){var _0xf019x21=false;var _0xf019x1f=_0xf019x2[_0xfb9d[187]]();if(_0xf019x1f!= null&& _0xf019x2[_0xfb9d[184]]()[_0xfb9d[217]](_0xf019x1f)){var _0xf019x22=_0xf019x2[_0xfb9d[220]][_0xfb9d[219]](_0xf019x1f);if(_0xf019x22 instanceof mxEdgeHandler&& _0xf019x22[_0xfb9d[221]]!= null&& _0xf019x22[_0xfb9d[221]][_0xfb9d[18]]> 2){var _0xf019x23=_0xf019x22[_0xfb9d[222]]( new mxMouseEvent(_0xf019x20));var _0xf019x24=this[_0xfb9d[0]][_0xfb9d[80]][_0xfb9d[26]](_0xfb9d[223]);_0xf019x24[_0xfb9d[224]]= _0xf019x22;_0xf019x24[_0xfb9d[225]]= _0xf019x23;_0xf019x21= _0xf019x23> 0&& _0xf019x23< _0xf019x22[_0xfb9d[221]][_0xfb9d[18]]}};this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[95],(_0xf019x21)?_0xfb9d[223]:_0xfb9d[226]])}else {if(_0xf019x2[_0xfb9d[216]]()> 1){_0xf019x3[_0xfb9d[24]]();this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[143]])}};_0xf019x3[_0xfb9d[24]]();if(_0xf019x2[_0xfb9d[216]]()== 1){var _0xf019x25=_0xf019x2[_0xfb9d[227]](_0xf019x2[_0xfb9d[187]]());if(_0xf019x25!= null){this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[228]])}}}else {this[_0xfb9d[99]](_0xf019x3,[_0xfb9d[95],_0xfb9d[176],_0xfb9d[177],_0xfb9d[95],_0xfb9d[178]])}};Menus[_0xfb9d[5]][_0xfb9d[229]]= function(_0xf019x26){var _0xf019x27= new Menubar(this[_0xfb9d[0]],_0xf019x26);var _0xf019x28=[_0xfb9d[156],_0xfb9d[168],_0xfb9d[146],_0xfb9d[91],_0xfb9d[93],_0xfb9d[140],_0xfb9d[179]];for(var _0xf019x6=0;_0xf019x6< _0xf019x28[_0xfb9d[18]];_0xf019x6++){_0xf019x27[_0xfb9d[181]](mxResources[_0xfb9d[26]](_0xf019x28[_0xf019x6]),this[_0xfb9d[26]](_0xf019x28[_0xf019x6])[_0xfb9d[194]])};return _0xf019x27};function Menubar(_0xf019x1,_0xf019x26){this[_0xfb9d[0]]= _0xf019x1;this[_0xfb9d[230]]= _0xf019x26;mxEvent[_0xfb9d[232]](document,mxUtils[_0xfb9d[29]](this,function(_0xf019x20){this[_0xfb9d[231]]()}))}Menubar[_0xfb9d[5]][_0xfb9d[231]]= function(){if(this[_0xfb9d[233]]!= null){this[_0xfb9d[233]][_0xfb9d[231]]()}};Menubar[_0xfb9d[5]][_0xfb9d[181]]= function(_0xf019x12,_0xf019x2a){var _0xf019x2b=document[_0xfb9d[201]](_0xfb9d[234]);_0xf019x2b[_0xfb9d[237]](_0xfb9d[235],_0xfb9d[236]);_0xf019x2b[_0xfb9d[238]]= _0xfb9d[239];mxUtils[_0xfb9d[204]](_0xf019x2b,_0xf019x12);this[_0xfb9d[240]](_0xf019x2b,_0xf019x2a);this[_0xfb9d[230]][_0xfb9d[205]](_0xf019x2b);return _0xf019x2b};Menubar[_0xfb9d[5]][_0xfb9d[240]]= function(_0xf019x2b,_0xf019x2a){if(_0xf019x2a!= null){var _0xf019x2c=true;var _0xf019x2d=mxUtils[_0xfb9d[29]](this,function(_0xf019x20){if(_0xf019x2c&& _0xf019x2b[_0xfb9d[78]]== null|| _0xf019x2b[_0xfb9d[78]]){this[_0xfb9d[0]][_0xfb9d[7]][_0xfb9d[6]][_0xfb9d[241]][_0xfb9d[231]]();var _0xf019x3= new mxPopupMenu(_0xf019x2a);_0xf019x3[_0xfb9d[242]][_0xfb9d[238]]+= _0xfb9d[243];_0xf019x3[_0xfb9d[214]]= true;_0xf019x3[_0xfb9d[81]]= true;_0xf019x3[_0xfb9d[244]]= true;_0xf019x3[_0xfb9d[231]]= mxUtils[_0xfb9d[29]](this,function(){mxPopupMenu[_0xfb9d[5]][_0xfb9d[231]][_0xfb9d[245]](_0xf019x3,arguments);_0xf019x3[_0xfb9d[246]]();this[_0xfb9d[233]]= null;this[_0xfb9d[247]]= null});var _0xf019x2e=_0xf019x2b[_0xfb9d[248]]+ document[_0xfb9d[251]](_0xfb9d[250])[_0xfb9d[249]]+ 22;var _0xf019x2f=_0xf019x2b[_0xfb9d[252]]+ _0xf019x2b[_0xfb9d[253]]+ 140;_0xf019x3[_0xfb9d[254]](_0xf019x2e,_0xf019x2f,null,_0xf019x20);this[_0xfb9d[233]]= _0xf019x3;this[_0xfb9d[247]]= _0xf019x2b};_0xf019x2c= true;mxEvent[_0xfb9d[255]](_0xf019x20)});mxEvent[_0xfb9d[257]](_0xf019x2b,_0xfb9d[256],mxUtils[_0xfb9d[29]](this,function(_0xf019x20){if(this[_0xfb9d[233]]!= null&& this[_0xfb9d[247]]!= _0xf019x2b){this[_0xfb9d[231]]();_0xf019x2d(_0xf019x20)}}));mxEvent[_0xfb9d[257]](_0xf019x2b,_0xfb9d[258],mxUtils[_0xfb9d[29]](this,function(){_0xf019x2c= this[_0xfb9d[247]]!= _0xf019x2b}));mxEvent[_0xfb9d[257]](_0xf019x2b,_0xfb9d[259],_0xf019x2d)}};function Menu(_0xf019x2a,_0xf019xb){mxEventSource[_0xfb9d[260]](this);this[_0xfb9d[194]]= _0xf019x2a;this[_0xfb9d[78]]= (_0xf019xb!= null)?_0xf019xb:true}mxUtils[_0xfb9d[261]](Menu,mxEventSource);Menu[_0xfb9d[5]][_0xfb9d[262]]= function(_0xf019x19){if(this[_0xfb9d[78]]!= _0xf019x19){this[_0xfb9d[78]]= _0xf019x19;this[_0xfb9d[264]]( new mxEventObject(_0xfb9d[263]))}};Menu[_0xfb9d[5]][_0xfb9d[182]]= function(_0xf019x3,_0xf019x4){this[_0xfb9d[194]](_0xf019x3,_0xf019x4)} \ No newline at end of file +/** + * $Id: Menus.js,v 1.13 2013-02-20 16:21:29 gaudenz Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ +/** + * Constructs a new graph editor + */ +Menus = function(editorUi) { + this.editorUi = editorUi; + this.menus = new Object(); + this.init(); + + // Pre-fetches checkmark image + new Image().src = IMAGE_PATH + '/checkmark.gif'; +}; + +/** + * Adds the label menu items to the given menu and parent. + */ +Menus.prototype.init = function() { + var graph = this.editorUi.editor.graph; + + this.put('fontFamily', new Menu(mxUtils.bind(this, function(menu, parent) { + var fonts = ['Helvetica', 'Verdana', 'Times New Roman', 'Garamond', + 'Comic Sans MS', + 'Courier New', 'Georgia', 'Lucida Console', 'Tahoma' + ]; + + for (var i = 0; i < fonts.length; i++) { + var tr = this.styleChange(menu, fonts[i], [mxConstants.STYLE_FONTFAMILY], [ + fonts[i] + ], null, parent); + tr.firstChild.nextSibling.style.fontFamily = fonts[i]; + } + + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('custom'), '', mxConstants.DEFAULT_FONTFAMILY, + mxConstants.STYLE_FONTFAMILY, parent); + }))); + this.put('fontSize', new Menu(mxUtils.bind(this, function(menu, parent) { + var sizes = [6, 8, 9, 10, 11, 12, 14, 18, 24, 36, 48, 72]; + + for (var i = 0; i < sizes.length; i++) { + this.styleChange(menu, sizes[i], [mxConstants.STYLE_FONTSIZE], [sizes[i]], + null, parent); + } + + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('custom'), '(pt)', '12', + mxConstants.STYLE_FONTSIZE, parent); + }))); + this.put('linewidth', new Menu(mxUtils.bind(this, function(menu, parent) { + var sizes = [1, 2, 3, 4, 8, 12, 16, 24]; + + for (var i = 0; i < sizes.length; i++) { + this.styleChange(menu, sizes[i] + 'px', [mxConstants.STYLE_STROKEWIDTH], [ + sizes[i] + ], null, parent); + } + + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('custom'), '(px)', '1', + mxConstants.STYLE_STROKEWIDTH, parent); + }))); + this.put('line', new Menu(mxUtils.bind(this, function(menu, parent) { + this.styleChange(menu, mxResources.get('straight'), [mxConstants.STYLE_EDGE], [ + null + ], null, parent); + this.styleChange(menu, mxResources.get('entityRelation'), [mxConstants.STYLE_EDGE], [ + 'entityRelationEdgeStyle' + ], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('horizontal'), [mxConstants.STYLE_EDGE, + mxConstants.STYLE_ELBOW + ], ['elbowEdgeStyle', 'horizontal'], null, parent); + this.styleChange(menu, mxResources.get('vertical'), [mxConstants.STYLE_EDGE, + mxConstants.STYLE_ELBOW + ], ['elbowEdgeStyle', 'vertical'], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('manual'), [mxConstants.STYLE_EDGE], [ + 'segmentEdgeStyle' + ], null, parent); + this.styleChange(menu, mxResources.get('automatic'), [mxConstants.STYLE_EDGE], [ + 'orthogonalEdgeStyle' + ], null, parent); + }))); + this.put('lineend', new Menu(mxUtils.bind(this, function(menu, parent) { + this.styleChange(menu, mxResources.get('classic'), [mxConstants.STYLE_ENDARROW], [ + mxConstants.ARROW_CLASSIC + ], null, parent); + this.styleChange(menu, mxResources.get('openArrow'), [mxConstants.STYLE_ENDARROW], [ + mxConstants.ARROW_OPEN + ], null, parent); + this.styleChange(menu, mxResources.get('block'), [mxConstants.STYLE_ENDARROW], [ + mxConstants.ARROW_BLOCK + ], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('oval'), [mxConstants.STYLE_ENDARROW], [ + mxConstants.ARROW_OVAL + ], null, parent); + this.styleChange(menu, mxResources.get('diamond'), [mxConstants.STYLE_ENDARROW], [ + mxConstants.ARROW_DIAMOND + ], null, parent); + this.styleChange(menu, mxResources.get('diamondThin'), [mxConstants.STYLE_ENDARROW], [ + mxConstants.ARROW_DIAMOND_THIN + ], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('none'), [mxConstants.STYLE_ENDARROW], [ + mxConstants.NONE + ], null, parent); + menu.addSeparator(parent); + menu.addItem(mxResources.get('transparent'), null, function() { + graph.toggleCellStyles('endFill', true); + }, parent, null, true); + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('size'), '(px)', mxConstants.DEFAULT_MARKERSIZE, + mxConstants.STYLE_ENDSIZE, parent); + }))); + this.put('linestart', new Menu(mxUtils.bind(this, function(menu, parent) { + this.styleChange(menu, mxResources.get('classic'), [mxConstants.STYLE_STARTARROW], [ + mxConstants.ARROW_CLASSIC + ], null, parent); + this.styleChange(menu, mxResources.get('openArrow'), [mxConstants.STYLE_STARTARROW], [ + mxConstants.ARROW_OPEN + ], null, parent); + this.styleChange(menu, mxResources.get('block'), [mxConstants.STYLE_STARTARROW], [ + mxConstants.ARROW_BLOCK + ], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('oval'), [mxConstants.STYLE_STARTARROW], [ + mxConstants.ARROW_OVAL + ], null, parent); + this.styleChange(menu, mxResources.get('diamond'), [mxConstants.STYLE_STARTARROW], [ + mxConstants.ARROW_DIAMOND + ], null, parent); + this.styleChange(menu, mxResources.get('diamondThin'), [mxConstants.STYLE_STARTARROW], [ + mxConstants.ARROW_DIAMOND_THIN + ], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('none'), [mxConstants.STYLE_STARTARROW], [ + mxConstants.NONE + ], null, parent); + menu.addSeparator(parent); + menu.addItem(mxResources.get('transparent'), null, function() { + graph.toggleCellStyles('startFill', true); + }, parent, null, true); + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('size'), '(px)', mxConstants.DEFAULT_MARKERSIZE, + mxConstants.STYLE_STARTSIZE, parent); + }))); + this.put('spacing', new Menu(mxUtils.bind(this, function(menu, parent) { + // Uses shadow action and line menu to analyze selection + var vertexSelected = this.editorUi.actions.get('shadow').enabled; + var edgeSelected = this.get('line').enabled; + + if (vertexSelected || menu.showDisabled) { + this.promptChange(menu, mxResources.get('top'), '(px)', '0', + mxConstants.STYLE_SPACING_TOP, parent, vertexSelected); + this.promptChange(menu, mxResources.get('right'), '(px)', '0', + mxConstants.STYLE_SPACING_RIGHT, parent, vertexSelected); + this.promptChange(menu, mxResources.get('bottom'), '(px)', '0', + mxConstants.STYLE_SPACING_BOTTOM, parent, vertexSelected); + this.promptChange(menu, mxResources.get('left'), '(px)', '0', + mxConstants.STYLE_SPACING_LEFT, parent, vertexSelected); + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('global'), '(px)', '0', + mxConstants.STYLE_SPACING, parent, vertexSelected); + this.promptChange(menu, mxResources.get('perimeter'), '(px)', '0', + mxConstants.STYLE_PERIMETER_SPACING, parent, vertexSelected); + } + + if (edgeSelected || menu.showDisabled) { + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('sourceSpacing'), '(px)', '0', + mxConstants.STYLE_SOURCE_PERIMETER_SPACING, parent, edgeSelected); + this.promptChange(menu, mxResources.get('targetSpacing'), '(px)', '0', + mxConstants.STYLE_TARGET_PERIMETER_SPACING, parent, edgeSelected); + } + }))); + this.put('format', new Menu(mxUtils.bind(this, function(menu, parent) { + this.addMenuItem(menu, 'style', parent); + }))); + this.put('text', new Menu(mxUtils.bind(this, function(menu, parent) { + var enabled = this.get('text').enabled; + menu.addSeparator(parent); + this.addSubmenu('fontFamily', menu, parent); + this.addSubmenu('fontSize', menu, parent); + this.addMenuItems(menu, ['-', 'bold', 'italic', 'underline', '-'], + parent); + this.addSubmenu('alignment', menu, parent); + this.addMenuItem(menu, 'wordWrap', parent); + menu.addSeparator(parent); + this.promptChange(menu, mxResources.get('textOpacity'), '(%)', '100', + mxConstants.STYLE_TEXT_OPACITY, parent, enabled); + menu.addItem(mxResources.get('hide'), null, function() { + graph.toggleCellStyles(mxConstants.STYLE_NOLABEL, false); + }, parent, null, enabled); + }))); + this.put('alignment', new Menu(mxUtils.bind(this, function(menu, parent) { + this.styleChange(menu, mxResources.get('leftAlign'), [mxConstants.STYLE_ALIGN], [ + mxConstants.ALIGN_LEFT + ], null, parent); + this.styleChange(menu, mxResources.get('center'), [mxConstants.STYLE_ALIGN], [ + mxConstants.ALIGN_CENTER + ], null, parent); + this.styleChange(menu, mxResources.get('rightAlign'), [mxConstants.STYLE_ALIGN], [ + mxConstants.ALIGN_RIGHT + ], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('topAlign'), [mxConstants.STYLE_VERTICAL_ALIGN], [ + mxConstants.ALIGN_TOP + ], null, parent); + this.styleChange(menu, mxResources.get('middle'), [mxConstants.STYLE_VERTICAL_ALIGN], [ + mxConstants.ALIGN_MIDDLE + ], null, parent); + this.styleChange(menu, mxResources.get('bottomAlign'), [mxConstants.STYLE_VERTICAL_ALIGN], [ + mxConstants.ALIGN_BOTTOM + ], null, parent); + menu.addSeparator(parent); + this.addSubmenu('position', menu, parent); + this.addSubmenu('spacing', menu, parent); + menu.addSeparator(parent); + var enabled = this.get('text').enabled; + menu.addItem(mxResources.get('vertical'), null, function() { + graph.toggleCellStyles(mxConstants.STYLE_HORIZONTAL, true); + }, parent, null, enabled); + }))); + this.put('position', new Menu(mxUtils.bind(this, function(menu, parent) { + this.styleChange(menu, mxResources.get('left'), [mxConstants.STYLE_LABEL_POSITION, + mxConstants.STYLE_ALIGN + ], [mxConstants.ALIGN_LEFT, mxConstants.ALIGN_RIGHT], null, parent); + this.styleChange(menu, mxResources.get('center'), [mxConstants.STYLE_LABEL_POSITION, + mxConstants.STYLE_ALIGN + ], [mxConstants.ALIGN_CENTER, mxConstants.ALIGN_CENTER], null, parent); + this.styleChange(menu, mxResources.get('right'), [mxConstants.STYLE_LABEL_POSITION, + mxConstants.STYLE_ALIGN + ], [mxConstants.ALIGN_RIGHT, mxConstants.ALIGN_LEFT], null, parent); + menu.addSeparator(parent); + this.styleChange(menu, mxResources.get('top'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION, + mxConstants.STYLE_VERTICAL_ALIGN + ], [mxConstants.ALIGN_TOP, mxConstants.ALIGN_BOTTOM], null, parent); + this.styleChange(menu, mxResources.get('middle'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION, + mxConstants.STYLE_VERTICAL_ALIGN + ], [mxConstants.ALIGN_MIDDLE, mxConstants.ALIGN_MIDDLE], null, parent); + this.styleChange(menu, mxResources.get('bottom'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION, + mxConstants.STYLE_VERTICAL_ALIGN + ], [mxConstants.ALIGN_BOTTOM, mxConstants.ALIGN_TOP], null, parent); + }))); + this.put('direction', new Menu(mxUtils.bind(this, function(menu, parent) { + menu.addItem(mxResources.get('flipH'), null, function() { + graph.toggleCellStyles(mxConstants.STYLE_FLIPH, false); + }, parent); + menu.addItem(mxResources.get('flipV'), null, function() { + graph.toggleCellStyles(mxConstants.STYLE_FLIPV, false); + }, parent); + this.addMenuItems(menu, ['-', 'tilt', 'rotation'], parent); + }))); + this.put('align', new Menu(mxUtils.bind(this, function(menu, parent) { + menu.addItem(mxResources.get('leftAlign'), null, function() { + graph.alignCells(mxConstants.ALIGN_LEFT); + }, parent); + menu.addItem(mxResources.get('center'), null, function() { + graph.alignCells(mxConstants.ALIGN_CENTER); + }, parent); + menu.addItem(mxResources.get('rightAlign'), null, function() { + graph.alignCells(mxConstants.ALIGN_RIGHT); + }, parent); + menu.addSeparator(parent); + menu.addItem(mxResources.get('topAlign'), null, function() { + graph.alignCells(mxConstants.ALIGN_TOP); + }, parent); + menu.addItem(mxResources.get('middle'), null, function() { + graph.alignCells(mxConstants.ALIGN_MIDDLE); + }, parent); + menu.addItem(mxResources.get('bottomAlign'), null, function() { + graph.alignCells(mxConstants.ALIGN_BOTTOM); + }, parent); + }))); + this.put('layout', new Menu(mxUtils.bind(this, function(menu, parent) { + // menu.addItem(mxResources.get('horizontalTree'), null, mxUtils.bind(this, function() + // { + // if (!graph.isSelectionEmpty()) + // { + // var layout = new mxCompactTreeLayout(graph, true); + // layout.edgeRouting = false; + // layout.levelDistance = 30; + // this.editorUi.executeLayout(layout, true, true); + // } + // }), parent); + // menu.addItem(mxResources.get('verticalTree'), null, mxUtils.bind(this, function() + // { + // if (!graph.isSelectionEmpty()) + // { + // var layout = new mxCompactTreeLayout(graph, false); + // layout.edgeRouting = false; + // layout.levelDistance = 30; + // this.editorUi.executeLayout(layout, true, true); + // } + // }), parent); + // menu.addSeparator(parent); + menu.addItem(mxResources.get('horizontalFlow'), null, mxUtils.bind(this, + function() { + var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_WEST); + this.editorUi.executeLayout(layout, true, true); + }), parent); + menu.addItem(mxResources.get('verticalFlow'), null, mxUtils.bind(this, + function() { + var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_NORTH); + this.editorUi.executeLayout(layout, true, true); + }), parent); + //menu.addSeparator(parent); + // menu.addItem(mxResources.get('organic'), null, mxUtils.bind(this, function() + // { + // var layout = new mxFastOrganicLayout(graph); + // this.editorUi.executeLayout(layout, true, true); + // }), parent); + // menu.addItem(mxResources.get('circle'), null, mxUtils.bind(this, function() + // { + // var layout = new mxCircleLayout(graph); + // this.editorUi.executeLayout(layout, true, true, graph.getSelectionCells()); + // }), parent); + }))); + this.put('navigation', new Menu(mxUtils.bind(this, function(menu, parent) { + this.addMenuItems(menu, ['home', '-', 'exitGroup', 'enterGroup', '-', + 'expand', 'collapse' + ], parent); + }))); + this.put('arrange', new Menu(mxUtils.bind(this, function(menu, parent) { + this.addMenuItems(menu, ['toFront', 'toBack', '-'], parent); + //this.addSubmenu('direction', menu, parent); + this.addSubmenu('layout', menu, parent); + //this.addSubmenu('align', menu, parent); + menu.addSeparator(parent); + //this.addSubmenu('navigation', menu, parent); + this.addMenuItems(menu, ['-', 'group', 'ungroup', 'removeFromGroup'], + parent); + //this.addMenuItems(menu, ['-', 'group', 'ungroup', 'removeFromGroup', '-', 'autosize'], parent); + }))); + this.put('view', new Menu(mxUtils.bind(this, function(menu, parent) { + this.addMenuItems(menu, ['actualSize'], parent); + menu.addSeparator(); + var scales = [0.25, 0.5, 0.75, 1, 2, 4]; + + for (var i = 0; i < scales.length; i++) { + (function(scale) { + menu.addItem((scale * 100) + '%', null, function() { + graph.zoomTo(scale); + }, parent); + })(scales[i]); + } + + this.addMenuItems(menu, ['-', 'zoomIn', 'zoomOut', '-', 'fitWindow', + 'customZoom', '-', 'fitPage', 'fitPageWidth' + ], parent); + }))); + this.put('file', new Menu(mxUtils.bind(this, function(menu, parent) { + this.addMenuItems(menu, ['new', 'open', '-', 'save', 'saveAs', 'publish', + '-', 'variable', '-', 'import', 'export', '-', 'editFile', 'description', '-', + 'print' + ], parent); + }))); + this.put('edit', new Menu(mxUtils.bind(this, function(menu, parent) { + this.addMenuItems(menu, ['undo', 'redo', '-', 'cut', 'copy', 'paste', + 'delete', '-', 'duplicate', '-', + 'selectVertices', 'selectEdges', 'selectAll' + ]); + }))); + this.put('help', new Menu(mxUtils.bind(this, function(menu, parent) { + this.addMenuItems(menu, ['help', '-', 'about']); + }))); +}; + +/** + * Adds the label menu items to the given menu and parent. + */ +Menus.prototype.put = function(name, menu) { + this.menus[name] = menu; +}; + +/** + * Adds the label menu items to the given menu and parent. + */ +Menus.prototype.get = function(name) { + return this.menus[name]; +}; + +/** + * Adds the given submenu. + */ +Menus.prototype.addSubmenu = function(name, menu, parent) { + var enabled = this.get(name).enabled; + + if (menu.showDisabled || enabled) { + var submenu = menu.addItem(mxResources.get(name), null, null, parent, null, + enabled); + this.addMenu(name, menu, submenu); + } +}; + +/** + * Adds the label menu items to the given menu and parent. + */ +Menus.prototype.addMenu = function(name, popupMenu, parent) { + var menu = this.get(name); + + if (menu != null && (popupMenu.showDisabled || menu.enabled)) { + this.get(name).execute(popupMenu, parent); + } +}; + +/** + * Adds a style change item to the given menu. + */ +Menus.prototype.styleChange = function(menu, label, keys, values, sprite, + parent) { + return menu.addItem(label, null, mxUtils.bind(this, function() { + var graph = this.editorUi.editor.graph; + + graph.getModel().beginUpdate(); + try { + for (var i = 0; i < keys.length; i++) { + graph.setCellStyles(keys[i], values[i]); + } + } finally { + graph.getModel().endUpdate(); + } + }), parent, sprite); +}; + +/** + * Adds a style change item with a prompt to the given menu. + */ +Menus.prototype.promptChange = function(menu, label, hint, defaultValue, key, + parent, enabled) { + return menu.addItem(label, null, mxUtils.bind(this, function() { + var graph = this.editorUi.editor.graph; + var value = defaultValue; + var state = graph.getView().getState(graph.getSelectionCell()); + + if (state != null) { + value = state.style[key] || value; + } + + value = mxUtils.prompt(mxResources.get('enterValue') + ((hint.length > 0) ? + (' ' + hint) : ''), value); + + if (value != null && value.length > 0) { + graph.setCellStyles(key, value); + } + }), parent, null, enabled); +}; + +/** + * Creates the keyboard event handler for the current graph and history. + */ +Menus.prototype.addMenuItem = function(menu, key, parent) { + var action = this.editorUi.actions.get(key); + + if (action != null && (menu.showDisabled || action.enabled)) { + var item = menu.addItem(action.label, null, action.funct, parent, null, + action.enabled); + + // Adds checkmark image + if (action.toggleAction && action.isSelected()) { + this.addCheckmark(item); + } + + this.addShortcut(item, action); + + return item; + } + + return null; +}; + +/** + * Adds a checkmark to the given menuitem. + */ +Menus.prototype.addShortcut = function(item, action) { + if (action.shortcut != null) { + var td = item.firstChild.nextSibling.nextSibling; + var span = document.createElement('span'); + span.style.color = 'gray'; + mxUtils.write(span, action.shortcut); + td.appendChild(span); + } +}; + +/** + * Adds a checkmark to the given menuitem. + */ +Menus.prototype.addCheckmark = function(item) { + var td = item.firstChild.nextSibling; + td.style.backgroundImage = 'url(' + IMAGE_PATH + '/checkmark.gif)'; + td.style.backgroundRepeat = 'no-repeat'; + td.style.backgroundPosition = '2px 50%'; +}; + +/** + * Creates the keyboard event handler for the current graph and history. + */ +Menus.prototype.addMenuItems = function(menu, keys, parent) { + for (var i = 0; i < keys.length; i++) { + if (keys[i] == '-') { + menu.addSeparator(parent); + } else { + this.addMenuItem(menu, keys[i], parent); + } + } +}; + +/** + * Creates the keyboard event handler for the current graph and history. + */ +Menus.prototype.createPopupMenu = function(menu, cell, evt) { + var graph = this.editorUi.editor.graph; + menu.smartSeparators = true; + + if (graph.isSelectionEmpty()) { + this.addMenuItems(menu, ['undo', 'redo', '-', 'paste', '-']); + } else { + this.addMenuItems(menu, ['delete', '-', 'cut', 'copy', '-', 'duplicate']); + + if (graph.getSelectionCount() == 1 && graph.getModel().isEdge(graph.getSelectionCell())) { + this.addMenuItems(menu, ['setAsDefaultEdge']); + } + + menu.addSeparator(); + } + + if (graph.getSelectionCount() > 0) { + this.addMenuItems(menu, ['toFront', 'toBack', '-']); + + if (graph.getModel().isEdge(graph.getSelectionCell())) { + var isWaypoint = false; + var cell = graph.getSelectionCell(); + + if (cell != null && graph.getModel().isEdge(cell)) { + var handler = graph.selectionCellsHandler.getHandler(cell); + + if (handler instanceof mxEdgeHandler && handler.bends != null && handler.bends + .length > 2) { + var index = handler.getHandleForEvent(new mxMouseEvent(evt)); + + // Configures removeWaypoint action before execution + var rmWaypointAction = this.editorUi.actions.get('removeWaypoint'); + rmWaypointAction.handler = handler; + rmWaypointAction.index = index; + + isWaypoint = index > 0 && index < handler.bends.length; + } + } + + this.addMenuItems(menu, ['-', (isWaypoint) ? 'removeWaypoint' : + 'addWaypoint' + ]); + } else if (graph.getSelectionCount() > 1) { + menu.addSeparator(); + this.addMenuItems(menu, ['group']); + } + + menu.addSeparator(); + + if (graph.getSelectionCount() == 1) { + var link = graph.getLinkForCell(graph.getSelectionCell()); + + if (link != null) { + this.addMenuItems(menu, ['openLink']); + } + } + } else { + this.addMenuItems(menu, ['-', 'selectVertices', 'selectEdges', '-', + 'selectAll' + ]); + } +}; + +/** + * Creates the keyboard event handler for the current graph and history. + */ +Menus.prototype.createMenubar = function(container) { + var menubar = new Menubar(this.editorUi, container); + var menus = ['file', 'edit', 'view', 'format', 'text', 'arrange', + 'help' + ]; + + for (var i = 0; i < menus.length; i++) { + menubar.addMenu(mxResources.get(menus[i]), this.get(menus[i]).funct); + } + + return menubar; +}; + +/** + * Construcs a new menubar for the given editor. + */ +function Menubar(editorUi, container) { + this.editorUi = editorUi; + this.container = container; + + // Global handler to hide the current menu + mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) { + this.hideMenu(); + })); +}; + +/** + * Adds the menubar elements. + */ +Menubar.prototype.hideMenu = function() { + if (this.currentMenu != null) { + this.currentMenu.hideMenu(); + } +}; + +/** + * Adds a submenu to this menubar. + */ +Menubar.prototype.addMenu = function(label, funct) { + var elt = document.createElement('a'); + elt.setAttribute('href', 'javascript:void(0);'); + elt.className = 'geItem'; + mxUtils.write(elt, label); + + this.addMenuHandler(elt, funct); + this.container.appendChild(elt); + + return elt; +}; + +/** + * Adds a handler for showing a menu in the given element. + */ +Menubar.prototype.addMenuHandler = function(elt, funct) { + if (funct != null) { + var show = true; + + var clickHandler = mxUtils.bind(this, function(evt) { + if (show && elt.enabled == null || elt.enabled) { + this.editorUi.editor.graph.panningHandler.hideMenu(); + var menu = new mxPopupMenu(funct); + menu.div.className += ' geMenubarMenu'; + menu.smartSeparators = true; + menu.showDisabled = true; + menu.autoExpand = true; + + // Disables autoexpand and destroys menu when hidden + menu.hideMenu = mxUtils.bind(this, function() { + mxPopupMenu.prototype.hideMenu.apply(menu, arguments); + menu.destroy(); + this.currentMenu = null; + this.currentElt = null; + }); + + // Added width of the page-sidebar + var x = elt.offsetLeft + document.getElementById('page-sidebar').offsetWidth + + 22; + // Added static height of the page-navbar + var y = elt.offsetTop + elt.offsetHeight + 140; + + menu.popup(x, y, null, evt); + + //menu.popup(elt.offsetLeft + 4, elt.offsetTop + elt.offsetHeight + 4, null, evt); + this.currentMenu = menu; + this.currentElt = elt; + } + + show = true; + mxEvent.consume(evt); + }); + + // Shows menu automatically while in expanded state + mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) { + if (this.currentMenu != null && this.currentElt != elt) { + this.hideMenu(); + clickHandler(evt); + } + })); + + // Hides menu if already showing + mxEvent.addListener(elt, 'mousedown', mxUtils.bind(this, function() { + show = this.currentElt != elt; + })); + + mxEvent.addListener(elt, 'click', clickHandler); + } +}; + +/** + * Constructs a new action for the given parameters. + */ +function Menu(funct, enabled) { + mxEventSource.call(this); + this.funct = funct; + this.enabled = (enabled != null) ? enabled : true; +}; + +// Menu inherits from mxEventSource +mxUtils.extend(Menu, mxEventSource); + +/** + * Sets the enabled state of the action and fires a stateChanged event. + */ +Menu.prototype.setEnabled = function(value) { + if (this.enabled != value) { + this.enabled = value; + this.fireEvent(new mxEventObject('stateChanged')); + } +}; + +/** + * Sets the enabled state of the action and fires a stateChanged event. + */ +Menu.prototype.execute = function(menu, parent) { + this.funct(menu, parent); +}; diff --git a/public/assets/plugins/square/js/Shapes.js b/public/assets/plugins/square/js/Shapes.js index 1d2f2d3..42e13ca 100644 --- a/public/assets/plugins/square/js/Shapes.js +++ b/public/assets/plugins/square/js/Shapes.js @@ -1 +1,1234 @@ -var _0x4288=["\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x6F\x6E\x73\x74\x72\x75\x63\x74\x6F\x72","\x73\x69\x7A\x65","\x72\x65\x64\x72\x61\x77\x50\x61\x74\x68","\x73\x74\x79\x6C\x65","\x67\x65\x74\x56\x61\x6C\x75\x65","\x6D\x69\x6E","\x6D\x6F\x76\x65\x54\x6F","\x6C\x69\x6E\x65\x54\x6F","\x65\x6E\x64","\x63\x6C\x6F\x73\x65","\x63\x75\x62\x65","\x64\x65\x66\x61\x75\x6C\x74\x53\x68\x61\x70\x65\x73","\x6E\x6F\x74\x65","\x74\x61\x62\x57\x69\x64\x74\x68","\x74\x61\x62\x48\x65\x69\x67\x68\x74","\x74\x61\x62\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x72\x69\x67\x68\x74","\x6C\x65\x66\x74","\x66\x6F\x6C\x64\x65\x72","\x63\x61\x72\x64","\x71\x75\x61\x64\x54\x6F","\x74\x61\x70\x65","\x73\x74\x65\x70","\x63\x61\x6C\x6C","\x65\x78\x74\x65\x6E\x64","\x69\x73\x48\x74\x6D\x6C\x41\x6C\x6C\x6F\x77\x65\x64","\x70\x61\x69\x6E\x74\x46\x6F\x72\x65\x67\x72\x6F\x75\x6E\x64","\x62\x65\x67\x69\x6E","\x73\x74\x72\x6F\x6B\x65","\x61\x70\x70\x6C\x79","\x70\x6C\x75\x73","\x64\x6F\x75\x62\x6C\x65","\x73\x74\x72\x6F\x6B\x65\x77\x69\x64\x74\x68","\x6D\x61\x78","\x70\x61\x69\x6E\x74\x42\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x73\x65\x74\x44\x61\x73\x68\x65\x64","\x73\x79\x6D\x62\x6F\x6C","\x41\x6C\x69\x67\x6E","\x56\x65\x72\x74\x69\x63\x61\x6C\x41\x6C\x69\x67\x6E","\x57\x69\x64\x74\x68","\x48\x65\x69\x67\x68\x74","\x53\x70\x61\x63\x69\x6E\x67","\x41\x72\x63\x53\x70\x61\x63\x69\x6E\x67","\x67\x65\x74\x41\x72\x63\x53\x69\x7A\x65","\x41\x4C\x49\x47\x4E\x5F\x43\x45\x4E\x54\x45\x52","\x41\x4C\x49\x47\x4E\x5F\x52\x49\x47\x48\x54","\x41\x4C\x49\x47\x4E\x5F\x4D\x49\x44\x44\x4C\x45","\x41\x4C\x49\x47\x4E\x5F\x42\x4F\x54\x54\x4F\x4D","\x73\x61\x76\x65","\x70\x61\x69\x6E\x74\x56\x65\x72\x74\x65\x78\x53\x68\x61\x70\x65","\x72\x65\x73\x74\x6F\x72\x65","\x65\x78\x74","\x6D\x65\x73\x73\x61\x67\x65","\x61\x64\x64\x50\x69\x70\x65","\x63\x75\x72\x76\x65\x54\x6F","\x75\x6D\x6C\x41\x63\x74\x6F\x72","\x6C\x6F\x6C\x6C\x69\x70\x6F\x70","\x6A\x65\x74\x74\x79\x57\x69\x64\x74\x68","\x6A\x65\x74\x74\x79\x48\x65\x69\x67\x68\x74","\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74","\x6F\x75\x74\x65\x72\x53\x74\x72\x6F\x6B\x65","\x65\x6C\x6C\x69\x70\x73\x65","\x66\x69\x6C\x6C\x41\x6E\x64\x53\x74\x72\x6F\x6B\x65","\x73\x65\x74\x53\x68\x61\x64\x6F\x77","\x65\x6E\x64\x53\x74\x61\x74\x65","\x73\x74\x61\x72\x74\x53\x74\x61\x74\x65","\x69\x6E\x69\x74\x53\x68\x61\x70\x65\x73","\x78","\x79","\x77\x69\x64\x74\x68","\x68\x65\x69\x67\x68\x74","\x73\x68\x61\x70\x65\x73","\x70\x61\x69\x6E\x74\x45\x64\x67\x65\x53\x68\x61\x70\x65","\x6C\x65\x6E\x67\x74\x68","\x73\x71\x72\x74","\x6C\x69\x6E\x6B","\x64\x61\x73\x68","\x61\x64\x64\x4D\x61\x72\x6B\x65\x72","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x75\x73\x65\x47\x72\x69\x64\x46\x6F\x72\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65","\x69\x6E\x69\x74","\x68\x6F\x72\x69\x7A\x6F\x6E\x74\x61\x6C","\x73\x74\x61\x74\x65","\x67\x72\x61\x70\x68","\x76\x69\x65\x77","\x68\x61\x6E\x64\x6C\x65\x49\x6D\x61\x67\x65","\x73\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65","\x73\x72\x63","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x44\x49\x41\x4C\x45\x43\x54\x5F\x56\x4D\x4C","\x67\x65\x74\x4F\x76\x65\x72\x6C\x61\x79\x50\x61\x6E\x65","\x67\x65\x74\x56\x69\x65\x77","\x63\x75\x72\x73\x6F\x72","\x6E\x6F\x64\x65","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x43\x75\x72\x73\x6F\x72","\x72\x65\x64\x69\x72\x65\x63\x74\x4D\x6F\x75\x73\x65\x45\x76\x65\x6E\x74\x73","\x64\x65\x66\x61\x75\x6C\x74","\x72\x65\x64\x72\x61\x77","\x62\x6F\x75\x6E\x64\x73","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x42\x6F\x75\x6E\x64\x73","\x64\x65\x73\x74\x72\x6F\x79","\x67\x65\x74\x48\x61\x6E\x64\x6C\x65\x46\x6F\x72\x45\x76\x65\x6E\x74","\x69\x73\x53\x6F\x75\x72\x63\x65","\x6D\x6F\x75\x73\x65\x4D\x6F\x76\x65","\x69\x73\x43\x6F\x6E\x73\x75\x6D\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74\x47\x72\x61\x70\x68\x58","\x67\x65\x74\x47\x72\x61\x70\x68\x59","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x50\x6F\x69\x6E\x74","\x67\x65\x74\x45\x76\x65\x6E\x74","\x69\x73\x47\x72\x69\x64\x45\x6E\x61\x62\x6C\x65\x64\x45\x76\x65\x6E\x74","\x73\x63\x61\x6C\x65","\x73\x6E\x61\x70","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65","\x6D\x6F\x76\x65\x53\x69\x7A\x65\x72\x54\x6F","\x63\x65\x6C\x6C\x52\x65\x6E\x64\x65\x72\x65\x72","\x63\x6F\x6E\x73\x75\x6D\x65","\x6D\x6F\x75\x73\x65\x55\x70","\x61\x70\x70\x6C\x79\x53\x74\x79\x6C\x65","\x72\x65\x73\x65\x74","\x67\x65\x74\x53\x68\x61\x70\x65\x52\x6F\x74\x61\x74\x69\x6F\x6E","\x73\x68\x61\x70\x65","\x74\x6F\x52\x61\x64\x69\x61\x6E\x73","\x63\x6F\x73","\x73\x69\x6E","\x69\x73\x50\x61\x69\x6E\x74\x42\x6F\x75\x6E\x64\x73\x49\x6E\x76\x65\x72\x74\x65\x64","\x67\x65\x74\x53\x70\x65\x63\x69\x61\x6C\x48\x61\x6E\x64\x6C\x65\x50\x6F\x69\x6E\x74","\x66\x6C\x69\x70\x48","\x66\x6C\x69\x70\x56","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x58","\x67\x65\x74\x43\x65\x6E\x74\x65\x72\x59","\x67\x65\x74\x52\x6F\x74\x61\x74\x65\x64\x50\x6F\x69\x6E\x74","\x75\x70\x64\x61\x74\x65\x53\x74\x79\x6C\x65\x55\x6E\x72\x6F\x74\x61\x74\x65\x64","\x72\x6F\x75\x6E\x64","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x62\x65\x67\x69\x6E\x55\x70\x64\x61\x74\x65","\x63\x65\x6C\x6C","\x73\x65\x74\x43\x65\x6C\x6C\x53\x74\x79\x6C\x65\x73","\x65\x6E\x64\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x72\x74\x53\x69\x7A\x65","\x64\x65\x66\x61\x75\x6C\x74\x56\x61\x6C\x75\x65","\x73\x63\x61\x6C\x65\x46\x61\x63\x74\x6F\x72","\x63\x72\x65\x61\x74\x65\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x41\x6C\x6C\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73","\x73\x74\x65\x6E\x63\x69\x6C","\x63\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x73"];(function(){function _0x353dx1(){}_0x353dx1[_0x4288[0]]= new mxCylinder();_0x353dx1[_0x4288[0]][_0x4288[1]]= _0x353dx1;_0x353dx1[_0x4288[0]][_0x4288[2]]= 20;_0x353dx1[_0x4288[0]][_0x4288[3]]= function(_0x353dx2,_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6,_0x353dx7){var _0x353dx8=Math[_0x4288[6]](_0x353dx5,Math[_0x4288[6]](_0x353dx6,mxUtils[_0x4288[5]](this[_0x4288[4]],_0x4288[2],this[_0x4288[2]])));if(_0x353dx7){_0x353dx2[_0x4288[7]](_0x353dx8,_0x353dx6);_0x353dx2[_0x4288[8]](_0x353dx8,_0x353dx8);_0x353dx2[_0x4288[8]](0,0);_0x353dx2[_0x4288[7]](_0x353dx8,_0x353dx8);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dx8);_0x353dx2[_0x4288[9]]()}else {_0x353dx2[_0x4288[7]](0,0);_0x353dx2[_0x4288[8]](_0x353dx5- _0x353dx8,0);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dx8);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dx6);_0x353dx2[_0x4288[8]](_0x353dx8,_0x353dx6);_0x353dx2[_0x4288[8]](0,_0x353dx6- _0x353dx8);_0x353dx2[_0x4288[8]](0,0);_0x353dx2[_0x4288[10]]();_0x353dx2[_0x4288[9]]()}};mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[11]]= _0x353dx1;function _0x353dx9(){}_0x353dx9[_0x4288[0]]= new mxCylinder();_0x353dx9[_0x4288[0]][_0x4288[1]]= _0x353dx9;_0x353dx9[_0x4288[0]][_0x4288[2]]= 30;_0x353dx9[_0x4288[0]][_0x4288[3]]= function(_0x353dx2,_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6,_0x353dx7){var _0x353dx8=Math[_0x4288[6]](_0x353dx5,Math[_0x4288[6]](_0x353dx6,mxUtils[_0x4288[5]](this[_0x4288[4]],_0x4288[2],this[_0x4288[2]])));if(_0x353dx7){_0x353dx2[_0x4288[7]](_0x353dx5- _0x353dx8,0);_0x353dx2[_0x4288[8]](_0x353dx5- _0x353dx8,_0x353dx8);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dx8);_0x353dx2[_0x4288[9]]()}else {_0x353dx2[_0x4288[7]](0,0);_0x353dx2[_0x4288[8]](_0x353dx5- _0x353dx8,0);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dx8);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dx6);_0x353dx2[_0x4288[8]](0,_0x353dx6);_0x353dx2[_0x4288[8]](0,0);_0x353dx2[_0x4288[10]]();_0x353dx2[_0x4288[9]]()}};mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[13]]= _0x353dx9;function _0x353dxa(){}_0x353dxa[_0x4288[0]]= new mxCylinder();_0x353dxa[_0x4288[0]][_0x4288[1]]= _0x353dxa;_0x353dxa[_0x4288[0]][_0x4288[14]]= 60;_0x353dxa[_0x4288[0]][_0x4288[15]]= 20;_0x353dxa[_0x4288[0]][_0x4288[16]]= _0x4288[17];_0x353dxa[_0x4288[0]][_0x4288[3]]= function(_0x353dx2,_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6,_0x353dx7){var _0x353dxb=mxUtils[_0x4288[5]](this[_0x4288[4]],_0x4288[14],this[_0x4288[14]]);var _0x353dxc=mxUtils[_0x4288[5]](this[_0x4288[4]],_0x4288[15],this[_0x4288[15]]);var _0x353dxd=mxUtils[_0x4288[5]](this[_0x4288[4]],_0x4288[16],this[_0x4288[16]]);var _0x353dxe=Math[_0x4288[6]](_0x353dx5,_0x353dxb);var _0x353dxf=Math[_0x4288[6]](_0x353dx6,_0x353dxc);if(_0x353dx7){if(_0x353dxd== _0x4288[18]){_0x353dx2[_0x4288[7]](0,_0x353dxf);_0x353dx2[_0x4288[8]](_0x353dxe,_0x353dxf)}else {_0x353dx2[_0x4288[7]](_0x353dx5- _0x353dxe,_0x353dxf);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dxf)};_0x353dx2[_0x4288[9]]()}else {if(_0x353dxd== _0x4288[18]){_0x353dx2[_0x4288[7]](0,0);_0x353dx2[_0x4288[8]](_0x353dxe,0);_0x353dx2[_0x4288[8]](_0x353dxe,_0x353dxf);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dxf)}else {_0x353dx2[_0x4288[7]](0,_0x353dxf);_0x353dx2[_0x4288[8]](_0x353dx5- _0x353dxe,_0x353dxf);_0x353dx2[_0x4288[8]](_0x353dx5- _0x353dxe,0);_0x353dx2[_0x4288[8]](_0x353dx5,0)};_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dx6);_0x353dx2[_0x4288[8]](0,_0x353dx6);_0x353dx2[_0x4288[8]](0,_0x353dxf);_0x353dx2[_0x4288[10]]();_0x353dx2[_0x4288[9]]()}};mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[19]]= _0x353dxa;function _0x353dx10(){}_0x353dx10[_0x4288[0]]= new mxCylinder();_0x353dx10[_0x4288[0]][_0x4288[1]]= _0x353dx10;_0x353dx10[_0x4288[0]][_0x4288[2]]= 30;_0x353dx10[_0x4288[0]][_0x4288[3]]= function(_0x353dx2,_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6,_0x353dx7){var _0x353dx8=Math[_0x4288[6]](_0x353dx5,Math[_0x4288[6]](_0x353dx6,mxUtils[_0x4288[5]](this[_0x4288[4]],_0x4288[2],this[_0x4288[2]])));if(!_0x353dx7){_0x353dx2[_0x4288[7]](_0x353dx8,0);_0x353dx2[_0x4288[8]](_0x353dx5,0);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dx6);_0x353dx2[_0x4288[8]](0,_0x353dx6);_0x353dx2[_0x4288[8]](0,_0x353dx8);_0x353dx2[_0x4288[8]](_0x353dx8,0);_0x353dx2[_0x4288[10]]();_0x353dx2[_0x4288[9]]()}};mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[20]]= _0x353dx10;function _0x353dx11(){}_0x353dx11[_0x4288[0]]= new mxCylinder();_0x353dx11[_0x4288[0]][_0x4288[1]]= _0x353dx11;_0x353dx11[_0x4288[0]][_0x4288[2]]= 0.4;_0x353dx11[_0x4288[0]][_0x4288[3]]= function(_0x353dx2,_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6,_0x353dx7){var _0x353dx8=mxUtils[_0x4288[5]](this[_0x4288[4]],_0x4288[2],this[_0x4288[2]]);var _0x353dxf=_0x353dx6* _0x353dx8;var _0x353dx12=1.4;if(!_0x353dx7){_0x353dx2[_0x4288[7]](0,_0x353dxf/ 2);_0x353dx2[_0x4288[21]](_0x353dx5/ 4,_0x353dxf* _0x353dx12,_0x353dx5/ 2,_0x353dxf/ 2);_0x353dx2[_0x4288[21]](_0x353dx5* 3/ 4,_0x353dxf* (1- _0x353dx12),_0x353dx5,_0x353dxf/ 2);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dx6- _0x353dxf/ 2);_0x353dx2[_0x4288[21]](_0x353dx5* 3/ 4,_0x353dx6- _0x353dxf* _0x353dx12,_0x353dx5/ 2,_0x353dx6- _0x353dxf/ 2);_0x353dx2[_0x4288[21]](_0x353dx5/ 4,_0x353dx6- _0x353dxf* (1- _0x353dx12),0,_0x353dx6- _0x353dxf/ 2);_0x353dx2[_0x4288[8]](0,_0x353dxf/ 2);_0x353dx2[_0x4288[10]]();_0x353dx2[_0x4288[9]]()}};mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[22]]= _0x353dx11;function _0x353dx13(){}_0x353dx13[_0x4288[0]]= new mxCylinder();_0x353dx13[_0x4288[0]][_0x4288[1]]= _0x353dx13;_0x353dx13[_0x4288[0]][_0x4288[2]]= 0.2;_0x353dx13[_0x4288[0]][_0x4288[3]]= function(_0x353dx2,_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6,_0x353dx7){var _0x353dx8=_0x353dx5* mxUtils[_0x4288[5]](this[_0x4288[4]],_0x4288[2],this[_0x4288[2]]);if(!_0x353dx7){_0x353dx2[_0x4288[7]](0,0);_0x353dx2[_0x4288[8]](_0x353dx5- _0x353dx8,0);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dx6/ 2);_0x353dx2[_0x4288[8]](_0x353dx5- _0x353dx8,_0x353dx6);_0x353dx2[_0x4288[8]](0,_0x353dx6);_0x353dx2[_0x4288[8]](_0x353dx8,_0x353dx6/ 2);_0x353dx2[_0x4288[10]]();_0x353dx2[_0x4288[9]]()}};mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[23]]= _0x353dx13;function _0x353dx14(){mxRectangleShape[_0x4288[24]](this)}mxUtils[_0x4288[25]](_0x353dx14,mxRectangleShape);_0x353dx14[_0x4288[0]][_0x4288[26]]= function(){return false};_0x353dx14[_0x4288[0]][_0x4288[27]]= function(_0x353dx15,_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6){var _0x353dx16=Math[_0x4288[6]](_0x353dx5/ 5,_0x353dx6/ 5)+ 1;_0x353dx15[_0x4288[28]]();_0x353dx15[_0x4288[7]](_0x353dx3+ _0x353dx5/ 2,_0x353dx4+ _0x353dx16);_0x353dx15[_0x4288[8]](_0x353dx3+ _0x353dx5/ 2,_0x353dx4+ _0x353dx6- _0x353dx16);_0x353dx15[_0x4288[7]](_0x353dx3+ _0x353dx16,_0x353dx4+ _0x353dx6/ 2);_0x353dx15[_0x4288[8]](_0x353dx3+ _0x353dx5- _0x353dx16,_0x353dx4+ _0x353dx6/ 2);_0x353dx15[_0x4288[9]]();_0x353dx15[_0x4288[29]]();mxRectangleShape[_0x4288[0]][_0x4288[27]][_0x4288[30]](this,arguments)};mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[31]]= _0x353dx14;function _0x353dx17(){mxRectangleShape[_0x4288[24]](this)}mxUtils[_0x4288[25]](_0x353dx17,mxRectangleShape);_0x353dx17[_0x4288[0]][_0x4288[26]]= function(){return false};_0x353dx17[_0x4288[0]][_0x4288[27]]= function(_0x353dx15,_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6){if(this[_0x4288[4]]!= null){if(this[_0x4288[4]][_0x4288[32]]== 1){var _0x353dx18=Math[_0x4288[34]](2,this[_0x4288[33]]+ 1);mxRectangleShape[_0x4288[0]][_0x4288[35]][_0x4288[24]](this,_0x353dx15,_0x353dx3+ _0x353dx18,_0x353dx4+ _0x353dx18,_0x353dx5- 2* _0x353dx18,_0x353dx6- 2* _0x353dx18);mxRectangleShape[_0x4288[0]][_0x4288[27]][_0x4288[30]](this,arguments);_0x353dx3+= _0x353dx18;_0x353dx4+= _0x353dx18;_0x353dx5-= 2* _0x353dx18;_0x353dx6-= 2* _0x353dx18};_0x353dx15[_0x4288[36]](false);var _0x353dx19=0;var _0x353dx1a=null;do{_0x353dx1a= mxCellRenderer[_0x4288[0]][_0x4288[12]][this[_0x4288[4]][_0x4288[37]+ _0x353dx19]];if(_0x353dx1a!= null){var _0x353dx1b=this[_0x4288[4]][_0x4288[37]+ _0x353dx19+ _0x4288[38]];var _0x353dx1c=this[_0x4288[4]][_0x4288[37]+ _0x353dx19+ _0x4288[39]];var _0x353dx1d=this[_0x4288[4]][_0x4288[37]+ _0x353dx19+ _0x4288[40]];var _0x353dx1e=this[_0x4288[4]][_0x4288[37]+ _0x353dx19+ _0x4288[41]];var _0x353dx1f=this[_0x4288[4]][_0x4288[37]+ _0x353dx19+ _0x4288[42]]|| 0;var _0x353dx20=this[_0x4288[4]][_0x4288[37]+ _0x353dx19+ _0x4288[43]];if(_0x353dx20!= null){_0x353dx1f+= this[_0x4288[44]](_0x353dx5+ this[_0x4288[33]],_0x353dx6+ this[_0x4288[33]])* _0x353dx20};var _0x353dx21=_0x353dx3;var _0x353dx22=_0x353dx4;if(_0x353dx1b== mxConstants[_0x4288[45]]){_0x353dx21+= (_0x353dx5- _0x353dx1d)/ 2}else {if(_0x353dx1b== mxConstants[_0x4288[46]]){_0x353dx21+= _0x353dx5- _0x353dx1d- _0x353dx1f}else {_0x353dx21+= _0x353dx1f}};if(_0x353dx1c== mxConstants[_0x4288[47]]){_0x353dx22+= (_0x353dx6- _0x353dx1e)/ 2}else {if(_0x353dx1c== mxConstants[_0x4288[48]]){_0x353dx22+= _0x353dx6- _0x353dx1e- _0x353dx1f}else {_0x353dx22+= _0x353dx1f}};_0x353dx15[_0x4288[49]]();var _0x353dx23= new _0x353dx1a();_0x353dx23[_0x4288[4]]= this[_0x4288[4]];_0x353dx1a[_0x4288[0]][_0x4288[50]][_0x4288[24]](_0x353dx23,_0x353dx15,_0x353dx21,_0x353dx22,_0x353dx1d,_0x353dx1e);_0x353dx15[_0x4288[51]]()};_0x353dx19++}while(_0x353dx1a!= null);}};mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[52]]= _0x353dx17;function _0x353dx24(){}_0x353dx24[_0x4288[0]]= new mxCylinder();_0x353dx24[_0x4288[0]][_0x4288[1]]= _0x353dx24;_0x353dx24[_0x4288[0]][_0x4288[3]]= function(_0x353dx2,_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6,_0x353dx7){if(_0x353dx7){_0x353dx2[_0x4288[7]](0,0);_0x353dx2[_0x4288[8]](_0x353dx5/ 2,_0x353dx6/ 2);_0x353dx2[_0x4288[8]](_0x353dx5,0);_0x353dx2[_0x4288[9]]()}else {_0x353dx2[_0x4288[7]](0,0);_0x353dx2[_0x4288[8]](_0x353dx5,0);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dx6);_0x353dx2[_0x4288[8]](0,_0x353dx6);_0x353dx2[_0x4288[10]]()}};mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[53]]= _0x353dx24;function _0x353dx25(){}_0x353dx25[_0x4288[0]]= new mxCylinder();_0x353dx25[_0x4288[0]][_0x4288[1]]= _0x353dx25;_0x353dx25[_0x4288[0]][_0x4288[54]]= true;_0x353dx25[_0x4288[0]][_0x4288[3]]= function(_0x353dx2,_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6,_0x353dx7){var _0x353dx1d=_0x353dx5/ 3;var _0x353dx1e=_0x353dx6/ 4;if(!_0x353dx7){_0x353dx2[_0x4288[7]](_0x353dx5/ 2,_0x353dx1e);_0x353dx2[_0x4288[55]](_0x353dx5/ 2- _0x353dx1d,_0x353dx1e,_0x353dx5/ 2- _0x353dx1d,0,_0x353dx5/ 2,0);_0x353dx2[_0x4288[55]](_0x353dx5/ 2+ _0x353dx1d,0,_0x353dx5/ 2+ _0x353dx1d,_0x353dx1e,_0x353dx5/ 2,_0x353dx1e);_0x353dx2[_0x4288[10]]();_0x353dx2[_0x4288[7]](_0x353dx5/ 2,_0x353dx1e);_0x353dx2[_0x4288[8]](_0x353dx5/ 2,2* _0x353dx6/ 3);_0x353dx2[_0x4288[7]](_0x353dx5/ 2,_0x353dx6/ 3);_0x353dx2[_0x4288[8]](0,_0x353dx6/ 3);_0x353dx2[_0x4288[7]](_0x353dx5/ 2,_0x353dx6/ 3);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dx6/ 3);_0x353dx2[_0x4288[7]](_0x353dx5/ 2,2* _0x353dx6/ 3);_0x353dx2[_0x4288[8]](0,_0x353dx6);_0x353dx2[_0x4288[7]](_0x353dx5/ 2,2* _0x353dx6/ 3);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dx6);_0x353dx2[_0x4288[9]]()}};mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[56]]= _0x353dx25;function _0x353dx26(){}_0x353dx26[_0x4288[0]]= new mxCylinder();_0x353dx26[_0x4288[0]][_0x4288[1]]= _0x353dx26;_0x353dx26[_0x4288[0]][_0x4288[2]]= 10;_0x353dx26[_0x4288[0]][_0x4288[54]]= true;_0x353dx26[_0x4288[0]][_0x4288[3]]= function(_0x353dx2,_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6,_0x353dx7){var _0x353dx27=mxUtils[_0x4288[5]](this[_0x4288[4]],_0x4288[2],this[_0x4288[2]]);var _0x353dx1d=_0x353dx27* 2/ 3;var _0x353dx1e=_0x353dx27;if(!_0x353dx7){_0x353dx2[_0x4288[7]](_0x353dx5/ 2,_0x353dx1e);_0x353dx2[_0x4288[55]](_0x353dx5/ 2- _0x353dx1d,_0x353dx1e,_0x353dx5/ 2- _0x353dx1d,0,_0x353dx5/ 2,0);_0x353dx2[_0x4288[55]](_0x353dx5/ 2+ _0x353dx1d,0,_0x353dx5/ 2+ _0x353dx1d,_0x353dx1e,_0x353dx5/ 2,_0x353dx1e);_0x353dx2[_0x4288[10]]();_0x353dx2[_0x4288[7]](_0x353dx5/ 2,_0x353dx1e);_0x353dx2[_0x4288[8]](_0x353dx5/ 2,_0x353dx6);_0x353dx2[_0x4288[9]]()}};mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[57]]= _0x353dx26;function _0x353dx28(){}_0x353dx28[_0x4288[0]]= new mxCylinder();_0x353dx28[_0x4288[0]][_0x4288[1]]= _0x353dx28;_0x353dx28[_0x4288[0]][_0x4288[58]]= 32;_0x353dx28[_0x4288[0]][_0x4288[59]]= 12;_0x353dx28[_0x4288[0]][_0x4288[3]]= function(_0x353dx2,_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6,_0x353dx7){var _0x353dxe=mxUtils[_0x4288[5]](this[_0x4288[4]],_0x4288[58],this[_0x4288[58]]);var _0x353dxf=mxUtils[_0x4288[5]](this[_0x4288[4]],_0x4288[59],this[_0x4288[59]]);var _0x353dx29=_0x353dxe/ 2;var _0x353dx2a=_0x353dx29+ _0x353dxe/ 2;var _0x353dx2b=0.3* _0x353dx6- _0x353dxf/ 2;var _0x353dx2c=0.7* _0x353dx6- _0x353dxf/ 2;if(_0x353dx7){_0x353dx2[_0x4288[7]](_0x353dx29,_0x353dx2b);_0x353dx2[_0x4288[8]](_0x353dx2a,_0x353dx2b);_0x353dx2[_0x4288[8]](_0x353dx2a,_0x353dx2b+ _0x353dxf);_0x353dx2[_0x4288[8]](_0x353dx29,_0x353dx2b+ _0x353dxf);_0x353dx2[_0x4288[7]](_0x353dx29,_0x353dx2c);_0x353dx2[_0x4288[8]](_0x353dx2a,_0x353dx2c);_0x353dx2[_0x4288[8]](_0x353dx2a,_0x353dx2c+ _0x353dxf);_0x353dx2[_0x4288[8]](_0x353dx29,_0x353dx2c+ _0x353dxf);_0x353dx2[_0x4288[9]]()}else {_0x353dx2[_0x4288[7]](_0x353dx29,0);_0x353dx2[_0x4288[8]](_0x353dx5,0);_0x353dx2[_0x4288[8]](_0x353dx5,_0x353dx6);_0x353dx2[_0x4288[8]](_0x353dx29,_0x353dx6);_0x353dx2[_0x4288[8]](_0x353dx29,_0x353dx2c+ _0x353dxf);_0x353dx2[_0x4288[8]](0,_0x353dx2c+ _0x353dxf);_0x353dx2[_0x4288[8]](0,_0x353dx2c);_0x353dx2[_0x4288[8]](_0x353dx29,_0x353dx2c);_0x353dx2[_0x4288[8]](_0x353dx29,_0x353dx2b+ _0x353dxf);_0x353dx2[_0x4288[8]](0,_0x353dx2b+ _0x353dxf);_0x353dx2[_0x4288[8]](0,_0x353dx2b);_0x353dx2[_0x4288[8]](_0x353dx29,_0x353dx2b);_0x353dx2[_0x4288[10]]();_0x353dx2[_0x4288[9]]()}};mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[60]]= _0x353dx28;function _0x353dx2d(){}_0x353dx2d[_0x4288[0]]= new mxDoubleEllipse();_0x353dx2d[_0x4288[0]][_0x4288[1]]= _0x353dx2d;_0x353dx2d[_0x4288[0]][_0x4288[61]]= true;_0x353dx2d[_0x4288[0]][_0x4288[50]]= function(_0x353dx15,_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6){var _0x353dx18=Math[_0x4288[6]](4,Math[_0x4288[6]](_0x353dx5/ 5,_0x353dx6/ 5));if(_0x353dx5> 0&& _0x353dx6> 0){_0x353dx15[_0x4288[62]](_0x353dx3+ _0x353dx18,_0x353dx4+ _0x353dx18,_0x353dx5- 2* _0x353dx18,_0x353dx6- 2* _0x353dx18);_0x353dx15[_0x4288[63]]()};_0x353dx15[_0x4288[64]](false);if(this[_0x4288[61]]){_0x353dx15[_0x4288[62]](_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6);_0x353dx15[_0x4288[29]]()}};mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[65]]= _0x353dx2d;function _0x353dx2e(){}_0x353dx2e[_0x4288[0]]= new _0x353dx2d();_0x353dx2e[_0x4288[0]][_0x4288[1]]= _0x353dx2e;_0x353dx2e[_0x4288[0]][_0x4288[61]]= false;mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[66]]= _0x353dx2e;var _0x353dx2f=mxImageExport[_0x4288[0]][_0x4288[67]];mxImageExport[_0x4288[0]][_0x4288[67]]= function(){_0x353dx2f[_0x4288[30]](this,arguments);function _0x353dx30(_0x353dx31){return {drawShape:function(_0x353dx32,_0x353dx33,_0x353dx34,_0x353dx35){var _0x353dx3=_0x353dx34[_0x4288[68]];var _0x353dx4=_0x353dx34[_0x4288[69]];var _0x353dx5=_0x353dx34[_0x4288[70]];var _0x353dx6=_0x353dx34[_0x4288[71]];if(_0x353dx35){var _0x353dx18=Math[_0x4288[6]](4,Math[_0x4288[6]](_0x353dx5/ 5,_0x353dx6/ 5));_0x353dx3+= _0x353dx18;_0x353dx4+= _0x353dx18;_0x353dx5-= 2* _0x353dx18;_0x353dx6-= 2* _0x353dx18;if(_0x353dx5> 0&& _0x353dx6> 0){_0x353dx32[_0x4288[62]](_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6)};return true}else {_0x353dx32[_0x4288[63]]();if(_0x353dx31){_0x353dx32[_0x4288[62]](_0x353dx3,_0x353dx4,_0x353dx5,_0x353dx6);_0x353dx32[_0x4288[29]]()}}}}}this[_0x4288[72]][_0x4288[65]]= _0x353dx30(true);this[_0x4288[72]][_0x4288[66]]= _0x353dx30(false)};function _0x353dx36(){mxArrow[_0x4288[24]](this)}mxUtils[_0x4288[25]](_0x353dx36,mxArrow);_0x353dx36[_0x4288[0]][_0x4288[73]]= function(_0x353dx15,_0x353dx37){var _0x353dx1d=10;var _0x353dx38=_0x353dx37[0];var _0x353dx39=_0x353dx37[_0x353dx37[_0x4288[74]]- 1];var _0x353dxe=_0x353dx39[_0x4288[68]]- _0x353dx38[_0x4288[68]];var _0x353dxf=_0x353dx39[_0x4288[69]]- _0x353dx38[_0x4288[69]];var _0x353dx3a=Math[_0x4288[75]](_0x353dxe* _0x353dxe+ _0x353dxf* _0x353dxf);var _0x353dx3b=_0x353dx3a;var _0x353dx3c=_0x353dxe/ _0x353dx3a;var _0x353dx3d=_0x353dxf/ _0x353dx3a;var _0x353dx3e=_0x353dx3b* _0x353dx3c;var _0x353dx3f=_0x353dx3b* _0x353dx3d;var _0x353dx40=_0x353dx1d* _0x353dx3d/ 3;var _0x353dx41=-_0x353dx1d* _0x353dx3c/ 3;var _0x353dx42=_0x353dx38[_0x4288[68]]- _0x353dx40/ 2;var _0x353dx43=_0x353dx38[_0x4288[69]]- _0x353dx41/ 2;var _0x353dx44=_0x353dx42+ _0x353dx40;var _0x353dx45=_0x353dx43+ _0x353dx41;var _0x353dx46=_0x353dx44+ _0x353dx3e;var _0x353dx47=_0x353dx45+ _0x353dx3f;var _0x353dx48=_0x353dx46+ _0x353dx40;var _0x353dx49=_0x353dx47+ _0x353dx41;var _0x353dx4a=_0x353dx48- 3* _0x353dx40;var _0x353dx4b=_0x353dx49- 3* _0x353dx41;_0x353dx15[_0x4288[28]]();_0x353dx15[_0x4288[7]](_0x353dx44,_0x353dx45);_0x353dx15[_0x4288[8]](_0x353dx46,_0x353dx47);_0x353dx15[_0x4288[7]](_0x353dx4a+ _0x353dx40,_0x353dx4b+ _0x353dx41);_0x353dx15[_0x4288[8]](_0x353dx42,_0x353dx43);_0x353dx15[_0x4288[29]]()};mxCellRenderer[_0x4288[0]][_0x4288[12]][_0x4288[76]]= _0x353dx36;mxMarker[_0x4288[78]](_0x4288[77],function(_0x353dx32,_0x353dx1a,_0x353dx4c,_0x353dx39,_0x353dx4d,_0x353dx4e,_0x353dx4f,_0x353dx50,_0x353dx51,_0x353dx52){var _0x353dx3c=_0x353dx4d* (_0x353dx4f+ _0x353dx51+ 1);var _0x353dx3d=_0x353dx4e* (_0x353dx4f+ _0x353dx51+ 1);return function(){_0x353dx32[_0x4288[28]]();_0x353dx32[_0x4288[7]](_0x353dx39[_0x4288[68]]- _0x353dx3c/ 2- _0x353dx3d/ 2,_0x353dx39[_0x4288[69]]- _0x353dx3d/ 2+ _0x353dx3c/ 2);_0x353dx32[_0x4288[8]](_0x353dx39[_0x4288[68]]+ _0x353dx3d/ 2- 3* _0x353dx3c/ 2,_0x353dx39[_0x4288[69]]- 3* _0x353dx3d/ 2- _0x353dx3c/ 2);_0x353dx32[_0x4288[29]]()}});var _0x353dx53=-99;if( typeof (mxVertexHandler)!= _0x4288[79]){function _0x353dx54(_0x353dx33){mxVertexHandler[_0x4288[24]](this,_0x353dx33)}mxUtils[_0x4288[25]](_0x353dx54,mxVertexHandler);_0x353dx54[_0x4288[0]][_0x4288[80]]= false;_0x353dx54[_0x4288[0]][_0x4288[81]]= function(){this[_0x4288[82]]= mxUtils[_0x4288[5]](this[_0x4288[83]][_0x4288[4]],mxConstants.STYLE_HORIZONTAL,true);var _0x353dx55=this[_0x4288[83]][_0x4288[85]][_0x4288[84]];if(this[_0x4288[86]]!= null){var _0x353dx34= new mxRectangle(0,0,this[_0x4288[86]][_0x4288[70]],this[_0x4288[86]][_0x4288[71]]);this[_0x4288[87]]= new mxImageShape(_0x353dx34,this[_0x4288[86]][_0x4288[88]])}else {var _0x353dx4f=10;var _0x353dx34= new mxRectangle(0,0,_0x353dx4f,_0x353dx4f);this[_0x4288[87]]= new mxRhombus(_0x353dx34,mxConstants.HANDLE_FILLCOLOR,mxConstants.HANDLE_STROKECOLOR)};this[_0x4288[87]][_0x4288[89]]= (_0x353dx55[_0x4288[89]]!= mxConstants[_0x4288[90]])?mxConstants[_0x4288[91]]:mxConstants[_0x4288[90]];this[_0x4288[87]][_0x4288[81]](_0x353dx55[_0x4288[93]]()[_0x4288[92]]());this[_0x4288[87]][_0x4288[95]][_0x4288[4]][_0x4288[94]]= this[_0x4288[96]]();mxEvent[_0x4288[97]](this[_0x4288[87]][_0x4288[95]],_0x353dx55,this[_0x4288[83]]);mxVertexHandler[_0x4288[0]][_0x4288[81]][_0x4288[30]](this,arguments)};_0x353dx54[_0x4288[0]][_0x4288[96]]= function(){return _0x4288[98]};_0x353dx54[_0x4288[0]][_0x4288[99]]= function(){mxVertexHandler[_0x4288[0]][_0x4288[99]][_0x4288[30]](this,arguments);var _0x353dx4f=this[_0x4288[87]][_0x4288[100]][_0x4288[70]];this[_0x4288[87]][_0x4288[100]]= this[_0x4288[101]](_0x353dx4f);this[_0x4288[87]][_0x4288[99]]()};_0x353dx54[_0x4288[0]][_0x4288[102]]= function(){mxVertexHandler[_0x4288[0]][_0x4288[102]][_0x4288[30]](this,arguments);if(this[_0x4288[87]]!= null){this[_0x4288[87]][_0x4288[102]]();this[_0x4288[87]]= null}};_0x353dx54[_0x4288[0]][_0x4288[103]]= function(_0x353dx56){if(_0x353dx56[_0x4288[104]](this[_0x4288[87]])){return _0x353dx53};return mxVertexHandler[_0x4288[0]][_0x4288[103]][_0x4288[30]](this,arguments)};_0x353dx54[_0x4288[0]][_0x4288[105]]= function(_0x353dx57,_0x353dx56){if(!_0x353dx56[_0x4288[106]]()&& this[_0x4288[107]]== _0x353dx53){var _0x353dx58= new mxPoint(_0x353dx56[_0x4288[108]](),_0x353dx56[_0x4288[109]]());this[_0x4288[110]](_0x353dx58);var _0x353dx59=this[_0x4288[84]][_0x4288[112]](_0x353dx56[_0x4288[111]]());var _0x353dx5a=this[_0x4288[84]][_0x4288[93]]()[_0x4288[113]];if(_0x353dx59&& this[_0x4288[80]]){_0x353dx58[_0x4288[68]]= this[_0x4288[84]][_0x4288[114]](_0x353dx58[_0x4288[68]]/ _0x353dx5a)* _0x353dx5a;_0x353dx58[_0x4288[69]]= this[_0x4288[84]][_0x4288[114]](_0x353dx58[_0x4288[69]]/ _0x353dx5a)* _0x353dx5a};this[_0x4288[115]](_0x353dx58);this[_0x4288[116]](this[_0x4288[87]],_0x353dx58[_0x4288[68]],_0x353dx58[_0x4288[69]]);this[_0x4288[83]][_0x4288[85]][_0x4288[84]][_0x4288[117]][_0x4288[99]](this[_0x4288[83]],true);_0x353dx56[_0x4288[118]]()}else {mxVertexHandler[_0x4288[0]][_0x4288[105]][_0x4288[30]](this,arguments)}};_0x353dx54[_0x4288[0]][_0x4288[119]]= function(_0x353dx57,_0x353dx56){if(!_0x353dx56[_0x4288[106]]()&& this[_0x4288[107]]== _0x353dx53){this[_0x4288[120]]();this[_0x4288[121]]();_0x353dx56[_0x4288[118]]()}else {mxVertexHandler[_0x4288[0]][_0x4288[119]][_0x4288[30]](this,arguments)}};_0x353dx54[_0x4288[0]][_0x4288[101]]= function(_0x353dx4f){var _0x353dx5b=this[_0x4288[83]][_0x4288[123]][_0x4288[122]]();var _0x353dx5c=mxUtils[_0x4288[124]](_0x353dx5b);var _0x353dx5d=Math[_0x4288[125]](_0x353dx5c);var _0x353dx5e=Math[_0x4288[126]](_0x353dx5c);var _0x353dx34= new mxRectangle(this[_0x4288[83]][_0x4288[68]],this[_0x4288[83]][_0x4288[69]],this[_0x4288[83]][_0x4288[70]],this[_0x4288[83]][_0x4288[71]]);if(this[_0x4288[83]][_0x4288[123]][_0x4288[127]]()){var _0x353dx5f=(_0x353dx34[_0x4288[70]]- _0x353dx34[_0x4288[71]])/ 2;_0x353dx34[_0x4288[68]]+= _0x353dx5f;_0x353dx34[_0x4288[69]]-= _0x353dx5f;var _0x353dx23=_0x353dx34[_0x4288[70]];_0x353dx34[_0x4288[70]]= _0x353dx34[_0x4288[71]];_0x353dx34[_0x4288[71]]= _0x353dx23};var _0x353dx60=this[_0x4288[128]](_0x353dx34);if(this[_0x4288[83]][_0x4288[123]][_0x4288[129]]){_0x353dx60[_0x4288[68]]= 2* _0x353dx34[_0x4288[68]]+ _0x353dx34[_0x4288[70]]- _0x353dx60[_0x4288[68]]};if(this[_0x4288[83]][_0x4288[123]][_0x4288[130]]){_0x353dx60[_0x4288[69]]= 2* _0x353dx34[_0x4288[69]]+ _0x353dx34[_0x4288[71]]- _0x353dx60[_0x4288[69]]};_0x353dx60= mxUtils[_0x4288[133]](_0x353dx60,_0x353dx5d,_0x353dx5e, new mxPoint(this[_0x4288[83]][_0x4288[131]](),this[_0x4288[83]][_0x4288[132]]()));return new mxRectangle(_0x353dx60[_0x4288[68]]- _0x353dx4f/ 2,_0x353dx60[_0x4288[69]]- _0x353dx4f/ 2,_0x353dx4f,_0x353dx4f)};_0x353dx54[_0x4288[0]][_0x4288[128]]= function(_0x353dx34){return null};_0x353dx54[_0x4288[0]][_0x4288[115]]= function(_0x353dx58){};_0x353dx54[_0x4288[0]][_0x4288[110]]= function(_0x353dx58){_0x353dx58[_0x4288[68]]= Math[_0x4288[34]](this[_0x4288[83]][_0x4288[68]],Math[_0x4288[6]](this[_0x4288[83]][_0x4288[68]]+ this[_0x4288[83]][_0x4288[70]],_0x353dx58[_0x4288[68]]));_0x353dx58[_0x4288[69]]= Math[_0x4288[34]](this[_0x4288[83]][_0x4288[69]],Math[_0x4288[6]](this[_0x4288[83]][_0x4288[69]]+ this[_0x4288[83]][_0x4288[71]],_0x353dx58[_0x4288[69]]))};_0x353dx54[_0x4288[0]][_0x4288[120]]= function(){};function _0x353dx61(_0x353dx33){_0x353dx54[_0x4288[24]](this,_0x353dx33)}mxUtils[_0x4288[25]](_0x353dx61,_0x353dx54);_0x353dx61[_0x4288[0]][_0x4288[128]]= function(_0x353dx34){var _0x353dx5a=this[_0x4288[84]][_0x4288[93]]()[_0x4288[113]];var _0x353dxb=Math[_0x4288[6]](_0x353dx34[_0x4288[70]],mxUtils[_0x4288[5]](this[_0x4288[83]][_0x4288[4]],_0x4288[14],60)* _0x353dx5a);var _0x353dxc=Math[_0x4288[6]](_0x353dx34[_0x4288[71]],mxUtils[_0x4288[5]](this[_0x4288[83]][_0x4288[4]],_0x4288[15],20)* _0x353dx5a);var _0x353dxd=mxUtils[_0x4288[5]](this[_0x4288[83]][_0x4288[4]],_0x4288[16],_0x4288[17]);var _0x353dx3=(_0x353dxd== _0x4288[18])?_0x353dx34[_0x4288[68]]+ _0x353dxb:_0x353dx34[_0x4288[68]]+ _0x353dx34[_0x4288[70]]- _0x353dxb;return new mxPoint(_0x353dx3,_0x353dx34[_0x4288[69]]+ _0x353dxc)};_0x353dx61[_0x4288[0]][_0x4288[115]]= function(_0x353dx58){var _0x353dx5b=this[_0x4288[83]][_0x4288[123]][_0x4288[122]]();var _0x353dx5c=mxUtils[_0x4288[124]](_0x353dx5b);var _0x353dx5d=Math[_0x4288[125]](-_0x353dx5c);var _0x353dx5e=Math[_0x4288[126]](-_0x353dx5c);var _0x353dx34= new mxRectangle(this[_0x4288[83]][_0x4288[68]],this[_0x4288[83]][_0x4288[69]],this[_0x4288[83]][_0x4288[70]],this[_0x4288[83]][_0x4288[71]]);if(this[_0x4288[83]][_0x4288[123]][_0x4288[127]]()){var _0x353dx5f=(_0x353dx34[_0x4288[70]]- _0x353dx34[_0x4288[71]])/ 2;_0x353dx34[_0x4288[68]]+= _0x353dx5f;_0x353dx34[_0x4288[69]]-= _0x353dx5f;var _0x353dx23=_0x353dx34[_0x4288[70]];_0x353dx34[_0x4288[70]]= _0x353dx34[_0x4288[71]];_0x353dx34[_0x4288[71]]= _0x353dx23};var _0x353dx60= new mxPoint(_0x353dx58[_0x4288[68]],_0x353dx58[_0x4288[69]]);_0x353dx60= mxUtils[_0x4288[133]](_0x353dx60,_0x353dx5d,_0x353dx5e, new mxPoint(this[_0x4288[83]][_0x4288[131]](),this[_0x4288[83]][_0x4288[132]]()));if(this[_0x4288[83]][_0x4288[123]][_0x4288[129]]){_0x353dx60[_0x4288[68]]= 2* _0x353dx34[_0x4288[68]]+ _0x353dx34[_0x4288[70]]- _0x353dx60[_0x4288[68]]};if(this[_0x4288[83]][_0x4288[123]][_0x4288[130]]){_0x353dx60[_0x4288[69]]= 2* _0x353dx34[_0x4288[69]]+ _0x353dx34[_0x4288[71]]- _0x353dx60[_0x4288[69]]};var _0x353dx62=this[_0x4288[134]](_0x353dx60,_0x353dx34);if(_0x353dx62!= null){if(this[_0x4288[83]][_0x4288[123]][_0x4288[129]]){_0x353dx62[_0x4288[68]]= 2* _0x353dx34[_0x4288[68]]+ _0x353dx34[_0x4288[70]]- _0x353dx62[_0x4288[68]]};if(this[_0x4288[83]][_0x4288[123]][_0x4288[130]]){_0x353dx62[_0x4288[69]]= 2* _0x353dx34[_0x4288[69]]+ _0x353dx34[_0x4288[71]]- _0x353dx62[_0x4288[69]]};_0x353dx5d= Math[_0x4288[125]](_0x353dx5c);_0x353dx5e= Math[_0x4288[126]](_0x353dx5c);_0x353dx62= mxUtils[_0x4288[133]](_0x353dx62,_0x353dx5d,_0x353dx5e, new mxPoint(this[_0x4288[83]][_0x4288[131]](),this[_0x4288[83]][_0x4288[132]]()));_0x353dx58[_0x4288[68]]= _0x353dx62[_0x4288[68]];_0x353dx58[_0x4288[69]]= _0x353dx62[_0x4288[69]]}};_0x353dx61[_0x4288[0]][_0x4288[134]]= function(_0x353dx60,_0x353dx34){var _0x353dxd=mxUtils[_0x4288[5]](this[_0x4288[83]][_0x4288[4]],_0x4288[16],_0x4288[17]);var _0x353dxb=(_0x353dxd== _0x4288[18])?_0x353dx60[_0x4288[68]]- _0x353dx34[_0x4288[68]]:_0x353dx34[_0x4288[68]]+ _0x353dx34[_0x4288[70]]- _0x353dx60[_0x4288[68]];var _0x353dxc=_0x353dx60[_0x4288[69]]- _0x353dx34[_0x4288[69]];var _0x353dx5a=this[_0x4288[84]][_0x4288[93]]()[_0x4288[113]];this[_0x4288[83]][_0x4288[4]][_0x4288[14]]= Math[_0x4288[135]](Math[_0x4288[34]](1,_0x353dxb)/ _0x353dx5a);this[_0x4288[83]][_0x4288[4]][_0x4288[15]]= Math[_0x4288[135]](Math[_0x4288[34]](1,_0x353dxc)/ _0x353dx5a)};_0x353dx61[_0x4288[0]][_0x4288[120]]= function(){var _0x353dx63=this[_0x4288[84]][_0x4288[136]]();_0x353dx63[_0x4288[137]]();try{this[_0x4288[83]][_0x4288[85]][_0x4288[84]][_0x4288[139]](_0x4288[14],this[_0x4288[83]][_0x4288[4]][_0x4288[14]],[this[_0x4288[83]][_0x4288[138]]]);this[_0x4288[83]][_0x4288[85]][_0x4288[84]][_0x4288[139]](_0x4288[15],this[_0x4288[83]][_0x4288[4]][_0x4288[15]],[this[_0x4288[83]][_0x4288[138]]])}finally{_0x353dx63[_0x4288[140]]()}};function _0x353dx64(_0x353dx33){_0x353dx61[_0x4288[24]](this,_0x353dx33)}mxUtils[_0x4288[25]](_0x353dx64,_0x353dx61);_0x353dx64[_0x4288[0]][_0x4288[128]]= function(_0x353dx34){var _0x353dx5a=this[_0x4288[84]][_0x4288[93]]()[_0x4288[113]];var _0x353dx65=mxUtils[_0x4288[5]](this[_0x4288[83]][_0x4288[4]],mxConstants.STYLE_STARTSIZE,mxConstants.DEFAULT_STARTSIZE);return new mxPoint(_0x353dx34[_0x4288[68]]+ _0x353dx34[_0x4288[70]]/ 2,_0x353dx34[_0x4288[69]]+ Math[_0x4288[6]](_0x353dx34[_0x4288[71]],_0x353dx65* _0x353dx5a))};_0x353dx64[_0x4288[0]][_0x4288[134]]= function(_0x353dx58,_0x353dx34){_0x353dx58[_0x4288[68]]= _0x353dx34[_0x4288[68]]+ _0x353dx34[_0x4288[70]]/ 2;startSize= _0x353dx58[_0x4288[69]]- _0x353dx34[_0x4288[69]];var _0x353dx5a=this[_0x4288[84]][_0x4288[93]]()[_0x4288[113]];this[_0x4288[83]][_0x4288[4]][_0x4288[141]]= Math[_0x4288[135]](Math[_0x4288[34]](1,startSize)/ _0x353dx5a);return _0x353dx58};_0x353dx64[_0x4288[0]][_0x4288[120]]= function(){this[_0x4288[83]][_0x4288[85]][_0x4288[84]][_0x4288[139]](_0x4288[141],this[_0x4288[83]][_0x4288[4]][_0x4288[141]],[this[_0x4288[83]][_0x4288[138]]])};function _0x353dx66(_0x353dx33){_0x353dx61[_0x4288[24]](this,_0x353dx33)}mxUtils[_0x4288[25]](_0x353dx66,_0x353dx61);_0x353dx66[_0x4288[0]][_0x4288[142]]= 20;_0x353dx66[_0x4288[0]][_0x4288[143]]= 1;_0x353dx66[_0x4288[0]][_0x4288[128]]= function(_0x353dx34){var _0x353dx5a=this[_0x4288[84]][_0x4288[93]]()[_0x4288[113]];var _0x353dx67=Math[_0x4288[6]](_0x353dx34[_0x4288[70]],Math[_0x4288[6]](_0x353dx34[_0x4288[71]],mxUtils[_0x4288[5]](this[_0x4288[83]][_0x4288[4]],_0x4288[2],this[_0x4288[142]])* _0x353dx5a/ this[_0x4288[143]]));return new mxPoint(_0x353dx34[_0x4288[68]]+ _0x353dx67,_0x353dx34[_0x4288[69]]+ _0x353dx67)};_0x353dx66[_0x4288[0]][_0x4288[134]]= function(_0x353dx60,_0x353dx34){var _0x353dx4f=Math[_0x4288[34]](0,Math[_0x4288[6]](Math[_0x4288[6]](_0x353dx34[_0x4288[70]]/ this[_0x4288[143]],_0x353dx60[_0x4288[68]]- _0x353dx34[_0x4288[68]]),Math[_0x4288[6]](_0x353dx34[_0x4288[71]]/ this[_0x4288[143]],_0x353dx60[_0x4288[69]]- _0x353dx34[_0x4288[69]])));var _0x353dx5a=this[_0x4288[84]][_0x4288[93]]()[_0x4288[113]];this[_0x4288[83]][_0x4288[4]][_0x4288[2]]= Math[_0x4288[135]](Math[_0x4288[34]](1,_0x353dx4f)/ _0x353dx5a)* this[_0x4288[143]];return new mxPoint(_0x353dx34[_0x4288[68]]+ _0x353dx4f,_0x353dx34[_0x4288[69]]+ _0x353dx4f)};_0x353dx66[_0x4288[0]][_0x4288[120]]= function(){this[_0x4288[83]][_0x4288[85]][_0x4288[84]][_0x4288[139]](_0x4288[2],this[_0x4288[83]][_0x4288[4]][_0x4288[2]],[this[_0x4288[83]][_0x4288[138]]])};function _0x353dx68(_0x353dx33){_0x353dx66[_0x4288[24]](this,_0x353dx33)}mxUtils[_0x4288[25]](_0x353dx68,_0x353dx66);_0x353dx68[_0x4288[0]][_0x4288[142]]= 30;_0x353dx68[_0x4288[0]][_0x4288[143]]= 2;function _0x353dx69(_0x353dx33){_0x353dx66[_0x4288[24]](this,_0x353dx33)}mxUtils[_0x4288[25]](_0x353dx69,_0x353dx66);_0x353dx69[_0x4288[0]][_0x4288[142]]= 30;_0x353dx69[_0x4288[0]][_0x4288[143]]= 1;_0x353dx69[_0x4288[0]][_0x4288[128]]= function(_0x353dx34){var _0x353dx5a=this[_0x4288[84]][_0x4288[93]]()[_0x4288[113]];var _0x353dx67=Math[_0x4288[6]](_0x353dx34[_0x4288[70]],Math[_0x4288[6]](_0x353dx34[_0x4288[71]],mxUtils[_0x4288[5]](this[_0x4288[83]][_0x4288[4]],_0x4288[2],this[_0x4288[142]])* _0x353dx5a/ this[_0x4288[143]]));return new mxPoint(_0x353dx34[_0x4288[68]]+ _0x353dx34[_0x4288[70]]- _0x353dx67,_0x353dx34[_0x4288[69]]+ _0x353dx67)};_0x353dx69[_0x4288[0]][_0x4288[134]]= function(_0x353dx60,_0x353dx34){var _0x353dx4f=Math[_0x4288[34]](0,Math[_0x4288[6]](Math[_0x4288[6]](_0x353dx34[_0x4288[70]]/ this[_0x4288[143]],_0x353dx60[_0x4288[68]]- _0x353dx34[_0x4288[68]]+ _0x353dx34[_0x4288[70]]),Math[_0x4288[6]](_0x353dx34[_0x4288[71]]/ this[_0x4288[143]],_0x353dx60[_0x4288[69]]- _0x353dx34[_0x4288[69]])));var _0x353dx5a=this[_0x4288[84]][_0x4288[93]]()[_0x4288[113]];this[_0x4288[83]][_0x4288[4]][_0x4288[2]]= Math[_0x4288[135]](Math[_0x4288[34]](1,_0x353dx4f)/ _0x353dx5a)* this[_0x4288[143]];return new mxPoint(_0x353dx34[_0x4288[68]]+ _0x353dx34[_0x4288[70]]- _0x353dx4f,_0x353dx34[_0x4288[69]]+ _0x353dx4f)};function _0x353dx6a(_0x353dx33){_0x353dx66[_0x4288[24]](this,_0x353dx33)}mxUtils[_0x4288[25]](_0x353dx6a,_0x353dx66);_0x353dx6a[_0x4288[0]][_0x4288[142]]= 0.2;_0x353dx6a[_0x4288[0]][_0x4288[143]]= 1;_0x353dx6a[_0x4288[0]][_0x4288[128]]= function(_0x353dx34){var _0x353dx67=mxUtils[_0x4288[5]](this[_0x4288[83]][_0x4288[4]],_0x4288[2],this[_0x4288[142]]);return new mxPoint(_0x353dx34[_0x4288[68]]+ _0x353dx34[_0x4288[70]]* _0x353dx67,_0x353dx34[_0x4288[69]]+ _0x353dx34[_0x4288[71]]/ 2)};_0x353dx6a[_0x4288[0]][_0x4288[134]]= function(_0x353dx60,_0x353dx34){var _0x353dx4f=Math[_0x4288[6]](1,(_0x353dx60[_0x4288[68]]- _0x353dx34[_0x4288[68]])/ _0x353dx34[_0x4288[70]]);this[_0x4288[83]][_0x4288[4]][_0x4288[2]]= _0x353dx4f;return new mxPoint(_0x353dx34[_0x4288[68]]+ _0x353dx4f* _0x353dx34[_0x4288[70]],_0x353dx34[_0x4288[69]]+ _0x353dx34[_0x4288[71]]/ 2)};function _0x353dx6b(_0x353dx33){_0x353dx66[_0x4288[24]](this,_0x353dx33)}mxUtils[_0x4288[25]](_0x353dx6b,_0x353dx66);_0x353dx6b[_0x4288[0]][_0x4288[142]]= 0.4;_0x353dx6b[_0x4288[0]][_0x4288[143]]= 1;_0x353dx6b[_0x4288[0]][_0x4288[128]]= function(_0x353dx34){var _0x353dx67=mxUtils[_0x4288[5]](this[_0x4288[83]][_0x4288[4]],_0x4288[2],this[_0x4288[142]]);return new mxPoint(_0x353dx34[_0x4288[68]]+ _0x353dx34[_0x4288[70]]/ 2,_0x353dx34[_0x4288[69]]+ _0x353dx67* _0x353dx34[_0x4288[71]]/ 2)};_0x353dx6b[_0x4288[0]][_0x4288[134]]= function(_0x353dx60,_0x353dx34){var _0x353dx4f=Math[_0x4288[34]](0,Math[_0x4288[6]](1,((_0x353dx60[_0x4288[69]]- _0x353dx34[_0x4288[69]])/ _0x353dx34[_0x4288[71]])* 2));this[_0x4288[83]][_0x4288[4]][_0x4288[2]]= _0x353dx4f;return new mxPoint(_0x353dx34[_0x4288[68]]+ _0x353dx34[_0x4288[70]]/ 2,_0x353dx34[_0x4288[69]]+ _0x353dx4f* _0x353dx34[_0x4288[71]]/ 2)};var _0x353dx6c={"\x73\x77\x69\x6D\x6C\x61\x6E\x65":_0x353dx64,"\x66\x6F\x6C\x64\x65\x72":_0x353dx61,"\x63\x75\x62\x65":_0x353dx66,"\x63\x61\x72\x64":_0x353dx68,"\x6E\x6F\x74\x65":_0x353dx69,"\x73\x74\x65\x70":_0x353dx6a,"\x74\x61\x70\x65":_0x353dx6b};var _0x353dx6d=mxGraph[_0x4288[0]][_0x4288[144]];mxGraph[_0x4288[0]][_0x4288[144]]= function(_0x353dx33){if(_0x353dx33!= null){var _0x353dx6e=_0x353dx6c[_0x353dx33[_0x4288[4]][_0x4288[123]]];if(_0x353dx6e!= null){return new _0x353dx6e(_0x353dx33)}};return _0x353dx6d[_0x4288[30]](this,arguments)}};mxGraph[_0x4288[0]][_0x4288[145]]= function(_0x353dx6f,_0x353dx50){if(_0x353dx6f!= null&& _0x353dx6f[_0x4288[123]]!= null){if(_0x353dx6f[_0x4288[123]][_0x4288[146]]!= null){if(_0x353dx6f[_0x4288[123]][_0x4288[146]]!= null){return _0x353dx6f[_0x4288[123]][_0x4288[146]][_0x4288[147]]}}else {if(_0x353dx6f[_0x4288[123]][_0x4288[147]]!= null){return _0x353dx6f[_0x4288[123]][_0x4288[147]]}}};return null};mxRectangleShape[_0x4288[0]][_0x4288[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0,0.25),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(1,0.25),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];mxLabel[_0x4288[0]][_0x4288[147]]= mxRectangleShape[_0x4288[0]][_0x4288[147]];mxImageShape[_0x4288[0]][_0x4288[147]]= mxRectangleShape[_0x4288[0]][_0x4288[147]];mxSwimlane[_0x4288[0]][_0x4288[147]]= mxRectangleShape[_0x4288[0]][_0x4288[147]];_0x353dx14[_0x4288[0]][_0x4288[147]]= mxRectangleShape[_0x4288[0]][_0x4288[147]];_0x353dx9[_0x4288[0]][_0x4288[147]]= mxRectangleShape[_0x4288[0]][_0x4288[147]];_0x353dx10[_0x4288[0]][_0x4288[147]]= mxRectangleShape[_0x4288[0]][_0x4288[147]];_0x353dx1[_0x4288[0]][_0x4288[147]]= mxRectangleShape[_0x4288[0]][_0x4288[147]];_0x353dxa[_0x4288[0]][_0x4288[147]]= mxRectangleShape[_0x4288[0]][_0x4288[147]];mxCylinder[_0x4288[0]][_0x4288[147]]= [ new mxConnectionConstraint( new mxPoint(0.15,0.05),false), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.85,0.05),false), new mxConnectionConstraint( new mxPoint(0,0.3),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.7),true), new mxConnectionConstraint( new mxPoint(1,0.3),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.7),true), new mxConnectionConstraint( new mxPoint(0.15,0.95),false), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.85,0.95),false)];_0x353dx25[_0x4288[0]][_0x4288[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0.1),false), new mxConnectionConstraint( new mxPoint(0.5,0),false), new mxConnectionConstraint( new mxPoint(0.75,0.1),false), new mxConnectionConstraint( new mxPoint(0,1/ 3),false), new mxConnectionConstraint( new mxPoint(0,1),false), new mxConnectionConstraint( new mxPoint(1,1/ 3),false), new mxConnectionConstraint( new mxPoint(1,1),false), new mxConnectionConstraint( new mxPoint(0.5,0.5),false)];_0x353dx28[_0x4288[0]][_0x4288[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0,0.3),true), new mxConnectionConstraint( new mxPoint(0,0.7),true), new mxConnectionConstraint( new mxPoint(1,0.25),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];mxActor[_0x4288[0]][_0x4288[147]]= [ new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.25,0.2),false), new mxConnectionConstraint( new mxPoint(0.1,0.5),false), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(0.75,0.25),false), new mxConnectionConstraint( new mxPoint(0.9,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.75),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true)];_0x353dx11[_0x4288[0]][_0x4288[147]]= [ new mxConnectionConstraint( new mxPoint(0,0.35),false), new mxConnectionConstraint( new mxPoint(0,0.5),false), new mxConnectionConstraint( new mxPoint(0,0.65),false), new mxConnectionConstraint( new mxPoint(1,0.35),false), new mxConnectionConstraint( new mxPoint(1,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.65),false), new mxConnectionConstraint( new mxPoint(0.25,1),false), new mxConnectionConstraint( new mxPoint(0.75,0),false)];_0x353dx13[_0x4288[0]][_0x4288[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.75,0),true), new mxConnectionConstraint( new mxPoint(0.25,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.75,1),true), new mxConnectionConstraint( new mxPoint(0.1,0.25),false), new mxConnectionConstraint( new mxPoint(0.2,0.5),false), new mxConnectionConstraint( new mxPoint(0.1,0.75),false), new mxConnectionConstraint( new mxPoint(0.9,0.25),false), new mxConnectionConstraint( new mxPoint(1,0.5),false), new mxConnectionConstraint( new mxPoint(0.9,0.75),false)];mxLine[_0x4288[0]][_0x4288[147]]= [ new mxConnectionConstraint( new mxPoint(0,0.5),false), new mxConnectionConstraint( new mxPoint(0.25,0.5),false), new mxConnectionConstraint( new mxPoint(0.75,0.5),false), new mxConnectionConstraint( new mxPoint(1,0.5),false)];_0x353dx26[_0x4288[0]][_0x4288[147]]= [ new mxConnectionConstraint( new mxPoint(0.5,0),false), new mxConnectionConstraint( new mxPoint(0.5,1),false)];mxEllipse[_0x4288[0]][_0x4288[147]]= [ new mxConnectionConstraint( new mxPoint(0,0),true), new mxConnectionConstraint( new mxPoint(1,0),true), new mxConnectionConstraint( new mxPoint(0,1),true), new mxConnectionConstraint( new mxPoint(1,1),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.5))];mxDoubleEllipse[_0x4288[0]][_0x4288[147]]= mxEllipse[_0x4288[0]][_0x4288[147]];mxRhombus[_0x4288[0]][_0x4288[147]]= mxEllipse[_0x4288[0]][_0x4288[147]];mxTriangle[_0x4288[0]][_0x4288[147]]= [ new mxConnectionConstraint( new mxPoint(0,0.25),true), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0,0.75),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(1,0.5),true)];mxHexagon[_0x4288[0]][_0x4288[147]]= [ new mxConnectionConstraint( new mxPoint(0.375,0),true), new mxConnectionConstraint( new mxPoint(0.5,0),true), new mxConnectionConstraint( new mxPoint(0.625,0),true), new mxConnectionConstraint( new mxPoint(0.125,0.25),false), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(0.125,0.75),false), new mxConnectionConstraint( new mxPoint(0.875,0.25),false), new mxConnectionConstraint( new mxPoint(0,0.5),true), new mxConnectionConstraint( new mxPoint(1,0.5),true), new mxConnectionConstraint( new mxPoint(0.875,0.75),false), new mxConnectionConstraint( new mxPoint(0.375,1),true), new mxConnectionConstraint( new mxPoint(0.5,1),true), new mxConnectionConstraint( new mxPoint(0.625,1),true)];mxCloud[_0x4288[0]][_0x4288[147]]= [ new mxConnectionConstraint( new mxPoint(0.25,0.25),false), new mxConnectionConstraint( new mxPoint(0.4,0.1),false), new mxConnectionConstraint( new mxPoint(0.16,0.55),false), new mxConnectionConstraint( new mxPoint(0.07,0.4),false), new mxConnectionConstraint( new mxPoint(0.31,0.8),false), new mxConnectionConstraint( new mxPoint(0.13,0.77),false), new mxConnectionConstraint( new mxPoint(0.8,0.8),false), new mxConnectionConstraint( new mxPoint(0.55,0.95),false), new mxConnectionConstraint( new mxPoint(0.875,0.5),false), new mxConnectionConstraint( new mxPoint(0.96,0.7),false), new mxConnectionConstraint( new mxPoint(0.625,0.2),false), new mxConnectionConstraint( new mxPoint(0.88,0.25),false)];mxArrow[_0x4288[0]][_0x4288[147]]= null})() \ No newline at end of file +/** + * $Id: Shapes.js,v 1.13 2013-02-02 06:44:30 gaudenz Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ + +/** + * Registers shapes. + */ +(function() +{ + // Cube Shape, supports size style + function CubeShape() { }; + CubeShape.prototype = new mxCylinder(); + CubeShape.prototype.constructor = CubeShape; + CubeShape.prototype.size = 20; + CubeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size))); + + if (isForeground) + { + path.moveTo(s, h); + path.lineTo(s, s); + path.lineTo(0, 0); + path.moveTo(s, s); + path.lineTo(w, s); + path.end(); + } + else + { + path.moveTo(0, 0); + path.lineTo(w - s, 0); + path.lineTo(w, s); + path.lineTo(w, h); + path.lineTo(s, h); + path.lineTo(0, h - s); + path.lineTo(0, 0); + path.close(); + path.end(); + } + }; + + mxCellRenderer.prototype.defaultShapes['cube'] = CubeShape; + + // Note Shape, supports size style + function NoteShape() { }; + NoteShape.prototype = new mxCylinder(); + NoteShape.prototype.constructor = NoteShape; + NoteShape.prototype.size = 30; + NoteShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size))); + + if (isForeground) + { + path.moveTo(w - s, 0); + path.lineTo(w - s, s); + path.lineTo(w, s); + path.end(); + } + else + { + path.moveTo(0, 0); + path.lineTo(w - s, 0); + path.lineTo(w, s); + path.lineTo(w, h); + path.lineTo(0, h); + path.lineTo(0, 0); + path.close(); + path.end(); + } + }; + + mxCellRenderer.prototype.defaultShapes['note'] = NoteShape; + + // Folder Shape, supports tabWidth, tabHeight styles + function FolderShape() { }; + FolderShape.prototype = new mxCylinder(); + FolderShape.prototype.constructor = FolderShape; + FolderShape.prototype.tabWidth = 60; + FolderShape.prototype.tabHeight = 20; + FolderShape.prototype.tabPosition = 'right'; + FolderShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var tw = mxUtils.getValue(this.style, 'tabWidth', this.tabWidth); + var th = mxUtils.getValue(this.style, 'tabHeight', this.tabHeight); + var tp = mxUtils.getValue(this.style, 'tabPosition', this.tabPosition); + var dx = Math.min(w, tw); + var dy = Math.min(h, th); + + if (isForeground) + { + if (tp == 'left') + { + path.moveTo(0, dy); + path.lineTo(dx, dy); + } + // Right is default + else + { + path.moveTo(w - dx, dy); + path.lineTo(w, dy); + } + + path.end(); + } + else + { + if (tp == 'left') + { + path.moveTo(0, 0); + path.lineTo(dx, 0); + path.lineTo(dx, dy); + path.lineTo(w, dy); + } + // Right is default + else + { + path.moveTo(0, dy); + path.lineTo(w - dx, dy); + path.lineTo(w - dx, 0); + path.lineTo(w, 0); + } + + path.lineTo(w, h); + path.lineTo(0, h); + path.lineTo(0, dy); + path.close(); + path.end(); + } + }; + + mxCellRenderer.prototype.defaultShapes['folder'] = FolderShape; + + // Card Shape, supports size style + function CardShape() { }; + CardShape.prototype = new mxCylinder(); + CardShape.prototype.constructor = CardShape; + CardShape.prototype.size = 30; + CardShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size))); + + if (!isForeground) + { + path.moveTo(s, 0); + path.lineTo(w, 0); + path.lineTo(w, h); + path.lineTo(0, h); + path.lineTo(0, s); + path.lineTo(s, 0); + path.close(); + path.end(); + } + }; + + mxCellRenderer.prototype.defaultShapes['card'] = CardShape; + + // Tape Shape, supports size style + function TapeShape() { }; + TapeShape.prototype = new mxCylinder(); + TapeShape.prototype.constructor = TapeShape; + TapeShape.prototype.size = 0.4; + TapeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var s = mxUtils.getValue(this.style, 'size', this.size); + var dy = h * s; + var fy = 1.4; + + if (!isForeground) + { + path.moveTo(0, dy / 2); + path.quadTo(w / 4, dy * fy, w / 2, dy / 2); + path.quadTo(w * 3 / 4, dy * (1 - fy), w, dy / 2); + path.lineTo(w, h - dy / 2); + path.quadTo(w * 3 / 4, h - dy * fy, w / 2, h - dy / 2); + path.quadTo(w / 4, h - dy * (1 - fy), 0, h - dy / 2); + path.lineTo(0, dy / 2); + path.close(); + path.end(); + } + }; + + mxCellRenderer.prototype.defaultShapes['tape'] = TapeShape; + + // Tape Shape, supports size style + function StepShape() { }; + StepShape.prototype = new mxCylinder(); + StepShape.prototype.constructor = StepShape; + StepShape.prototype.size = 0.2; + StepShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var s = w * mxUtils.getValue(this.style, 'size', this.size); + + if (!isForeground) + { + path.moveTo(0, 0); + path.lineTo(w - s, 0); + path.lineTo(w, h / 2); + path.lineTo(w - s, h); + path.lineTo(0, h); + path.lineTo(s, h / 2); + path.close(); + path.end(); + } + }; + + mxCellRenderer.prototype.defaultShapes['step'] = StepShape; + + // Plus Shape + function PlusShape() + { + mxRectangleShape.call(this); + }; + mxUtils.extend(PlusShape, mxRectangleShape); + PlusShape.prototype.isHtmlAllowed = function() + { + return false; + }; + PlusShape.prototype.paintForeground = function(c, x, y, w, h) + { + var border = Math.min(w / 5, h / 5) + 1; + + c.begin(); + c.moveTo(x + w / 2, y + border); + c.lineTo(x + w / 2, y + h - border); + c.moveTo(x + border, y + h / 2); + c.lineTo(x + w - border, y + h / 2); + c.end(); + c.stroke(); + mxRectangleShape.prototype.paintForeground.apply(this, arguments); + }; + + mxCellRenderer.prototype.defaultShapes['plus'] = PlusShape; + + // CompositeShape + function ExtendedShape() + { + mxRectangleShape.call(this); + }; + mxUtils.extend(ExtendedShape, mxRectangleShape); + ExtendedShape.prototype.isHtmlAllowed = function() + { + return false; + }; + ExtendedShape.prototype.paintForeground = function(c, x, y, w, h) + { + if (this.style != null) + { + if (this.style['double'] == 1) + { + var inset = Math.max(2, this.strokewidth + 1); + + mxRectangleShape.prototype.paintBackground.call(this, c, x + inset, y + inset, w - 2 * inset, h - 2 * inset); + mxRectangleShape.prototype.paintForeground.apply(this, arguments); + + x += inset; + y += inset; + w -= 2 * inset; + h -= 2 * inset; + } + + c.setDashed(false); + + // Draws the symbols defined in the style. The symbols are + // numbered from 1...n. Possible postfixes are align, + // verticalAlign, spacing, arcSpacing, width, height + var counter = 0; + var shape = null; + + do + { + shape = mxCellRenderer.prototype.defaultShapes[this.style['symbol' + counter]]; + + if (shape != null) + { + var align = this.style['symbol' + counter + 'Align']; + var valign = this.style['symbol' + counter + 'VerticalAlign']; + var width = this.style['symbol' + counter + 'Width']; + var height = this.style['symbol' + counter + 'Height']; + var spacing = this.style['symbol' + counter + 'Spacing'] || 0; + var arcspacing = this.style['symbol' + counter + 'ArcSpacing']; + + if (arcspacing != null) + { + spacing += this.getArcSize(w + this.strokewidth, h + this.strokewidth) * arcspacing; + } + + var x2 = x; + var y2 = y; + + if (align == mxConstants.ALIGN_CENTER) + { + x2 += (w - width) / 2; + } + else if (align == mxConstants.ALIGN_RIGHT) + { + x2 += w - width - spacing; + } + else + { + x2 += spacing; + } + + if (valign == mxConstants.ALIGN_MIDDLE) + { + y2 += (h - height) / 2; + } + else if (valign == mxConstants.ALIGN_BOTTOM) + { + y2 += h - height - spacing; + } + else + { + y2 += spacing; + } + + c.save(); + + // Small hack to pass style along into subshape + var tmp = new shape(); + // TODO: Clone style and override settings (eg. strokewidth) + tmp.style = this.style; + shape.prototype.paintVertexShape.call(tmp, c, x2, y2, width, height); + c.restore(); + } + + counter++; + } + while (shape != null); + } + }; + + mxCellRenderer.prototype.defaultShapes['ext'] = ExtendedShape; + + // Tape Shape, supports size style + function MessageShape() { }; + MessageShape.prototype = new mxCylinder(); + MessageShape.prototype.constructor = MessageShape; + MessageShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + if (isForeground) + { + path.moveTo(0, 0); + path.lineTo(w / 2, h / 2); + path.lineTo(w, 0); + path.end(); + } + else + { + path.moveTo(0, 0); + path.lineTo(w, 0); + path.lineTo(w, h); + path.lineTo(0, h); + path.close(); + } + }; + + mxCellRenderer.prototype.defaultShapes['message'] = MessageShape; + + // New Actor Shape + function UmlActorShape() { }; + UmlActorShape.prototype = new mxCylinder(); + UmlActorShape.prototype.constructor = UmlActorShape; + UmlActorShape.prototype.addPipe = true; + UmlActorShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var width = w / 3; + var height = h / 4; + + if (!isForeground) + { + path.moveTo(w / 2, height); + path.curveTo(w / 2 - width, height, w / 2 - width, 0, w / 2, 0); + path.curveTo(w / 2 + width, 0, w / 2 + width, height, w / 2, height); + path.close(); + + path.moveTo(w / 2, height); + path.lineTo(w / 2, 2 * h / 3); + + // Arms + path.moveTo(w / 2, h / 3); + path.lineTo(0, h / 3); + path.moveTo(w / 2, h / 3); + path.lineTo(w, h / 3); + + // Legs + path.moveTo(w / 2, 2 * h / 3); + path.lineTo(0, h); + path.moveTo(w / 2, 2 * h / 3); + path.lineTo(w, h); + path.end(); + } + }; + + // Replaces existing actor shape + mxCellRenderer.prototype.defaultShapes['umlActor'] = UmlActorShape; + + // New Actor Shape + function LollipopShape() { }; + LollipopShape.prototype = new mxCylinder(); + LollipopShape.prototype.constructor = LollipopShape; + LollipopShape.prototype.size = 10; + LollipopShape.prototype.addPipe = true; + LollipopShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var ss = mxUtils.getValue(this.style, 'size', this.size); + var width = ss * 2 / 3; + var height = ss; + + if (!isForeground) + { + path.moveTo(w / 2, height); + path.curveTo(w / 2 - width, height, w / 2 - width, 0, w / 2, 0); + path.curveTo(w / 2 + width, 0, w / 2 + width, height, w / 2, height); + path.close(); + + path.moveTo(w / 2, height); + path.lineTo(w / 2, h); + path.end(); + } + }; + + // Replaces existing actor shape + mxCellRenderer.prototype.defaultShapes['lollipop'] = LollipopShape; + + // Folder Shape, supports tabWidth, tabHeight styles + function ComponentShape() { }; + ComponentShape.prototype = new mxCylinder(); + ComponentShape.prototype.constructor = ComponentShape; + ComponentShape.prototype.jettyWidth = 32; + ComponentShape.prototype.jettyHeight = 12; + ComponentShape.prototype.redrawPath = function(path, x, y, w, h, isForeground) + { + var dx = mxUtils.getValue(this.style, 'jettyWidth', this.jettyWidth); + var dy = mxUtils.getValue(this.style, 'jettyHeight', this.jettyHeight); + var x0 = dx / 2; + var x1 = x0 + dx / 2; + var y0 = 0.3 * h - dy / 2; + var y1 = 0.7 * h - dy / 2; + + if (isForeground) + { + path.moveTo(x0, y0); + path.lineTo(x1, y0); + path.lineTo(x1, y0 + dy); + path.lineTo(x0, y0 + dy); + path.moveTo(x0, y1); + path.lineTo(x1, y1); + path.lineTo(x1, y1 + dy); + path.lineTo(x0, y1 + dy); + path.end(); + } + else + { + path.moveTo(x0, 0); + path.lineTo(w, 0); + path.lineTo(w, h); + path.lineTo(x0, h); + path.lineTo(x0, y1 + dy); + path.lineTo(0, y1 + dy); + path.lineTo(0, y1); + path.lineTo(x0, y1); + path.lineTo(x0, y0 + dy); + path.lineTo(0, y0 + dy); + path.lineTo(0, y0); + path.lineTo(x0, y0); + path.close(); + path.end(); + } + }; + + mxCellRenderer.prototype.defaultShapes['component'] = ComponentShape; + + // State Shapes derives from double ellipse + function StateShape() { }; + StateShape.prototype = new mxDoubleEllipse(); + StateShape.prototype.constructor = StateShape; + StateShape.prototype.outerStroke = true; + StateShape.prototype.paintVertexShape = function(c, x, y, w, h) + { + var inset = Math.min(4, Math.min(w / 5, h / 5)); + + if (w > 0 && h > 0) + { + c.ellipse(x + inset, y + inset, w - 2 * inset, h - 2 * inset); + c.fillAndStroke(); + } + + c.setShadow(false); + + if (this.outerStroke) + { + c.ellipse(x, y, w, h); + c.stroke(); + } + }; + + mxCellRenderer.prototype.defaultShapes['endState'] = StateShape; + + function StartStateShape() { }; + StartStateShape.prototype = new StateShape(); + StartStateShape.prototype.constructor = StartStateShape; + StartStateShape.prototype.outerStroke = false; + + mxCellRenderer.prototype.defaultShapes['startState'] = StartStateShape; + + // Image export for state shapes + var imageExportInitShapes = mxImageExport.prototype.initShapes; + mxImageExport.prototype.initShapes = function() + { + imageExportInitShapes.apply(this, arguments); + + function createStateShape(outerStroke) + { + return { + drawShape: function(canvas, state, bounds, background) + { + var x = bounds.x; + var y = bounds.y; + var w = bounds.width; + var h = bounds.height; + + if (background) + { + var inset = Math.min(4, Math.min(w / 5, h / 5)); + x += inset; + y += inset; + w -= 2 * inset; + h -= 2 * inset; + + if (w > 0 && h > 0) + { + canvas.ellipse(x, y, w, h); + } + + return true; + } + else + { + canvas.fillAndStroke(); + + if (outerStroke) + { + canvas.ellipse(x, y, w, h); + canvas.stroke(); + } + } + } + }; + }; + + this.shapes['endState'] = createStateShape(true); + this.shapes['startState'] = createStateShape(false); + }; + + // Defines custom edge shape + function LinkShape() + { + mxArrow.call(this); + }; + mxUtils.extend(LinkShape, mxArrow); + LinkShape.prototype.paintEdgeShape = function(c, pts) + { + var width = 10; + + // Base vector (between end points) + var p0 = pts[0]; + var pe = pts[pts.length - 1]; + + var dx = pe.x - p0.x; + var dy = pe.y - p0.y; + var dist = Math.sqrt(dx * dx + dy * dy); + var length = dist; + + // Computes the norm and the inverse norm + var nx = dx / dist; + var ny = dy / dist; + var basex = length * nx; + var basey = length * ny; + var floorx = width * ny/3; + var floory = -width * nx/3; + + // Computes points + var p0x = p0.x - floorx / 2; + var p0y = p0.y - floory / 2; + var p1x = p0x + floorx; + var p1y = p0y + floory; + var p2x = p1x + basex; + var p2y = p1y + basey; + var p3x = p2x + floorx; + var p3y = p2y + floory; + // p4 not necessary + var p5x = p3x - 3 * floorx; + var p5y = p3y - 3 * floory; + + c.begin(); + c.moveTo(p1x, p1y); + c.lineTo(p2x, p2y); + c.moveTo(p5x + floorx, p5y + floory); + c.lineTo(p0x, p0y); + c.stroke(); + }; + + // Registers the link shape + mxCellRenderer.prototype.defaultShapes['link'] = LinkShape; + + // Registers and defines the custom marker + mxMarker.addMarker('dash', function(canvas, shape, type, pe, unitX, unitY, size, source, sw, filled) + { + var nx = unitX * (size + sw + 1); + var ny = unitY * (size + sw + 1); + + return function() + { + canvas.begin(); + canvas.moveTo(pe.x - nx / 2 - ny / 2, pe.y - ny / 2 + nx / 2); + canvas.lineTo(pe.x + ny / 2 - 3 * nx / 2, pe.y - 3 * ny / 2 - nx / 2); + canvas.stroke(); + }; + }); + + // Implements custom handlers + var SPECIAL_HANDLE_INDEX = -99; + + // Handlers are only added if mxVertexHandler is defined (ie. not in embedded graph) + if (typeof(mxVertexHandler) != 'undefined') + { + function mxExtVertexHandler(state) + { + mxVertexHandler.call(this, state); + }; + + mxUtils.extend(mxExtVertexHandler, mxVertexHandler); + + mxExtVertexHandler.prototype.useGridForSpecialHandle = false; + + mxExtVertexHandler.prototype.init = function() + { + this.horizontal = mxUtils.getValue(this.state.style, mxConstants.STYLE_HORIZONTAL, true); + var graph = this.state.view.graph; + + if (this.handleImage != null) + { + var bounds = new mxRectangle(0, 0, this.handleImage.width, this.handleImage.height); + this.specialHandle = new mxImageShape(bounds, this.handleImage.src); + } + else + { + var size = 10; + var bounds = new mxRectangle(0, 0, size, size); + this.specialHandle = new mxRhombus(bounds, mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR); + } + + this.specialHandle.dialect = (graph.dialect != mxConstants.DIALECT_SVG) ? + mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG; + this.specialHandle.init(graph.getView().getOverlayPane()); + this.specialHandle.node.style.cursor = this.getSpecialHandleCursor(); + + mxEvent.redirectMouseEvents(this.specialHandle.node, graph, this.state); + mxVertexHandler.prototype.init.apply(this, arguments); + }; + + mxExtVertexHandler.prototype.getSpecialHandleCursor = function() + { + return 'default'; + }; + + mxExtVertexHandler.prototype.redraw = function() + { + mxVertexHandler.prototype.redraw.apply(this, arguments); + + var size = this.specialHandle.bounds.width; + this.specialHandle.bounds = this.getSpecialHandleBounds(size); + this.specialHandle.redraw(); + }; + + mxExtVertexHandler.prototype.destroy = function() + { + mxVertexHandler.prototype.destroy.apply(this, arguments); + + if (this.specialHandle != null) + { + this.specialHandle.destroy(); + this.specialHandle = null; + } + }; + + mxExtVertexHandler.prototype.getHandleForEvent = function(me) + { + if (me.isSource(this.specialHandle)) + { + return SPECIAL_HANDLE_INDEX; + } + + return mxVertexHandler.prototype.getHandleForEvent.apply(this, arguments); + }; + + mxExtVertexHandler.prototype.mouseMove = function(sender, me) + { + if (!me.isConsumed() && this.index == SPECIAL_HANDLE_INDEX) + { + var point = new mxPoint(me.getGraphX(), me.getGraphY()); + this.constrainPoint(point); + var gridEnabled = this.graph.isGridEnabledEvent(me.getEvent()); + var scale = this.graph.getView().scale; + + if (gridEnabled && this.useGridForSpecialHandle) + { + point.x = this.graph.snap(point.x / scale) * scale; + point.y = this.graph.snap(point.y / scale) * scale; + } + + this.updateStyle(point); + this.moveSizerTo(this.specialHandle, point.x, point.y); + this.state.view.graph.cellRenderer.redraw(this.state, true); + me.consume(); + } + else + { + mxVertexHandler.prototype.mouseMove.apply(this, arguments); + } + }; + + mxExtVertexHandler.prototype.mouseUp = function(sender, me) + { + if (!me.isConsumed() && this.index == SPECIAL_HANDLE_INDEX) + { + this.applyStyle(); + this.reset(); + me.consume(); + } + else + { + mxVertexHandler.prototype.mouseUp.apply(this, arguments); + } + }; + + mxExtVertexHandler.prototype.getSpecialHandleBounds = function(size) + { + var rotation = this.state.shape.getShapeRotation(); + var alpha = mxUtils.toRadians(rotation); + var cos = Math.cos(alpha); + var sin = Math.sin(alpha); + + var bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height); + + if (this.state.shape.isPaintBoundsInverted()) + { + var t = (bounds.width - bounds.height) / 2; + bounds.x += t; + bounds.y -= t; + var tmp = bounds.width; + bounds.width = bounds.height; + bounds.height = tmp; + } + + var pt = this.getSpecialHandlePoint(bounds); + + if (this.state.shape.flipH) + { + pt.x = 2 * bounds.x + bounds.width - pt.x; + } + + if (this.state.shape.flipV) + { + pt.y = 2 * bounds.y + bounds.height - pt.y; + } + + pt = mxUtils.getRotatedPoint(pt, cos, sin, + new mxPoint(this.state.getCenterX(), this.state.getCenterY())); + + return new mxRectangle(pt.x - size / 2, pt.y - size / 2, size, size); + }; + + mxExtVertexHandler.prototype.getSpecialHandlePoint = function(bounds) + { + // Hook for subclassers + return null; + }; + + mxExtVertexHandler.prototype.updateStyle = function(point) + { + // Hook for subclassers + }; + + mxExtVertexHandler.prototype.constrainPoint = function(point) + { + point.x = Math.max(this.state.x, Math.min(this.state.x + this.state.width, point.x)); + point.y = Math.max(this.state.y, Math.min(this.state.y + this.state.height, point.y)); + }; + + mxExtVertexHandler.prototype.applyStyle = function() + { + // Hook for subclassers + }; + + // Folder Handler + function mxFolderHandler(state) + { + mxExtVertexHandler.call(this, state); + }; + + mxUtils.extend(mxFolderHandler, mxExtVertexHandler); + + mxFolderHandler.prototype.getSpecialHandlePoint = function(bounds) + { + var scale = this.graph.getView().scale; + var tw = Math.min(bounds.width, mxUtils.getValue(this.state.style, 'tabWidth', 60) * scale); + var th = Math.min(bounds.height, mxUtils.getValue(this.state.style, 'tabHeight', 20) * scale); + + var tp = mxUtils.getValue(this.state.style, 'tabPosition', 'right'); + var x = (tp == 'left') ? bounds.x + tw : bounds.x + bounds.width - tw; + + return new mxPoint(x, bounds.y + th); + }; + + mxFolderHandler.prototype.updateStyle = function(point) + { + var rotation = this.state.shape.getShapeRotation(); + var alpha = mxUtils.toRadians(rotation); + var cos = Math.cos(-alpha); + var sin = Math.sin(-alpha); + + var bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height); + + if (this.state.shape.isPaintBoundsInverted()) + { + var t = (bounds.width - bounds.height) / 2; + bounds.x += t; + bounds.y -= t; + var tmp = bounds.width; + bounds.width = bounds.height; + bounds.height = tmp; + } + + var pt = new mxPoint(point.x, point.y); + pt = mxUtils.getRotatedPoint(pt, cos, sin, + new mxPoint(this.state.getCenterX(), this.state.getCenterY())); + + if (this.state.shape.flipH) + { + pt.x = 2 * bounds.x + bounds.width - pt.x; + } + + if (this.state.shape.flipV) + { + pt.y = 2 * bounds.y + bounds.height - pt.y; + } + + var result = this.updateStyleUnrotated(pt, bounds); + + // Modifies point to use rotated coordinates of return value + if (result != null) + { + if (this.state.shape.flipH) + { + result.x = 2 * bounds.x + bounds.width - result.x; + } + + if (this.state.shape.flipV) + { + result.y = 2 * bounds.y + bounds.height - result.y; + } + + cos = Math.cos(alpha); + sin = Math.sin(alpha); + result = mxUtils.getRotatedPoint(result, cos, sin, + new mxPoint(this.state.getCenterX(), this.state.getCenterY())); + point.x = result.x; + point.y = result.y; + } + }; + + mxFolderHandler.prototype.updateStyleUnrotated = function(pt, bounds) + { + var tp = mxUtils.getValue(this.state.style, 'tabPosition', 'right'); + var tw = (tp == 'left') ? pt.x - bounds.x : bounds.x + bounds.width - pt.x; + var th = pt.y - bounds.y; + + var scale = this.graph.getView().scale; + this.state.style['tabWidth'] = Math.round(Math.max(1, tw) / scale); + this.state.style['tabHeight'] = Math.round(Math.max(1, th) / scale); + }; + + mxFolderHandler.prototype.applyStyle = function() + { + var model = this.graph.getModel(); + model.beginUpdate(); + try + { + this.state.view.graph.setCellStyles('tabWidth', this.state.style['tabWidth'], [this.state.cell]); + this.state.view.graph.setCellStyles('tabHeight', this.state.style['tabHeight'], [this.state.cell]); + } + finally + { + model.endUpdate(); + } + }; + + // Swimlane Handler + function mxSwimlaneHandler(state) + { + mxFolderHandler.call(this, state); + }; + + mxUtils.extend(mxSwimlaneHandler, mxFolderHandler); + + mxSwimlaneHandler.prototype.getSpecialHandlePoint = function(bounds) + { + var scale = this.graph.getView().scale; + var startSize = mxUtils.getValue(this.state.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE); + + return new mxPoint(bounds.x + bounds.width / 2, bounds.y + Math.min(bounds.height, startSize * scale)); + }; + + mxSwimlaneHandler.prototype.updateStyleUnrotated = function(point, bounds) + { + point.x = bounds.x + bounds.width / 2; + startSize = point.y - bounds.y; + var scale = this.graph.getView().scale; + this.state.style['startSize'] = Math.round(Math.max(1, startSize) / scale); + + return point; + }; + + mxSwimlaneHandler.prototype.applyStyle = function() + { + this.state.view.graph.setCellStyles('startSize', this.state.style['startSize'], [this.state.cell]); + }; + + // Cube Handler + function mxCubeHandler(state) + { + mxFolderHandler.call(this, state); + }; + + mxUtils.extend(mxCubeHandler, mxFolderHandler); + + mxCubeHandler.prototype.defaultValue = 20; + + mxCubeHandler.prototype.scaleFactor = 1; + + mxCubeHandler.prototype.getSpecialHandlePoint = function(bounds) + { + var scale = this.graph.getView().scale; + var sz = Math.min(bounds.width, Math.min(bounds.height, + mxUtils.getValue(this.state.style, 'size', this.defaultValue) * scale / this.scaleFactor)); + + return new mxPoint(bounds.x + sz, bounds.y + sz); + }; + + mxCubeHandler.prototype.updateStyleUnrotated = function(pt, bounds) + { + var size = Math.max(0, Math.min(Math.min(bounds.width / this.scaleFactor, pt.x - bounds.x), + Math.min(bounds.height / this.scaleFactor, pt.y - bounds.y))); + var scale = this.graph.getView().scale; + this.state.style['size'] = Math.round(Math.max(1, size) / scale) * this.scaleFactor; + + // Stays on the diagonal + return new mxPoint(bounds.x + size, bounds.y + size); + }; + + mxCubeHandler.prototype.applyStyle = function() + { + this.state.view.graph.setCellStyles('size', this.state.style['size'], [this.state.cell]); + }; + + // Card Handler + function mxCardHandler(state) + { + mxCubeHandler.call(this, state); + }; + + mxUtils.extend(mxCardHandler, mxCubeHandler); + + mxCardHandler.prototype.defaultValue = 30; + + mxCardHandler.prototype.scaleFactor = 2; + + // Note Handler + function mxNoteHandler(state) + { + mxCubeHandler.call(this, state); + }; + + mxUtils.extend(mxNoteHandler, mxCubeHandler); + + mxNoteHandler.prototype.defaultValue = 30; + + mxNoteHandler.prototype.scaleFactor = 1; + + mxNoteHandler.prototype.getSpecialHandlePoint = function(bounds) + { + var scale = this.graph.getView().scale; + var sz = Math.min(bounds.width, Math.min(bounds.height, + mxUtils.getValue(this.state.style, 'size', this.defaultValue) * scale / this.scaleFactor)); + + return new mxPoint(bounds.x + bounds.width - sz, bounds.y + sz); + }; + + mxNoteHandler.prototype.updateStyleUnrotated = function(pt, bounds) + { + var size = Math.max(0, Math.min(Math.min(bounds.width / this.scaleFactor, pt.x - bounds.x + bounds.width), + Math.min(bounds.height / this.scaleFactor, pt.y - bounds.y))); + var scale = this.graph.getView().scale; + this.state.style['size'] = Math.round(Math.max(1, size) / scale) * this.scaleFactor; + + // Stays on the diagonal + return new mxPoint(bounds.x + bounds.width - size, bounds.y + size); + }; + + // Step Handler + function mxStepHandler(state) + { + mxCubeHandler.call(this, state); + }; + + mxUtils.extend(mxStepHandler, mxCubeHandler); + + mxStepHandler.prototype.defaultValue = 0.2; + + mxStepHandler.prototype.scaleFactor = 1; + + mxStepHandler.prototype.getSpecialHandlePoint = function(bounds) + { + var sz = mxUtils.getValue(this.state.style, 'size', this.defaultValue); + + return new mxPoint(bounds.x + bounds.width * sz, bounds.y + bounds.height / 2); + }; + + mxStepHandler.prototype.updateStyleUnrotated = function(pt, bounds) + { + var size = Math.min(1, (pt.x - bounds.x) / bounds.width); + this.state.style['size'] = size; + + return new mxPoint(bounds.x + size * bounds.width, bounds.y + bounds.height / 2); + }; + + // Tape Handler + function mxTapeHandler(state) + { + mxCubeHandler.call(this, state); + }; + + mxUtils.extend(mxTapeHandler, mxCubeHandler); + + mxTapeHandler.prototype.defaultValue = 0.4; + + mxTapeHandler.prototype.scaleFactor = 1; + + mxTapeHandler.prototype.getSpecialHandlePoint = function(bounds) + { + var sz = mxUtils.getValue(this.state.style, 'size', this.defaultValue); + + return new mxPoint(bounds.x + bounds.width / 2, bounds.y + sz * bounds.height / 2); + }; + + mxTapeHandler.prototype.updateStyleUnrotated = function(pt, bounds) + { + var size = Math.max(0, Math.min(1, ((pt.y - bounds.y) / bounds.height) * 2)); + this.state.style['size'] = size; + + return new mxPoint(bounds.x + bounds.width / 2, bounds.y + size * bounds.height / 2); + }; + + var handlers = {'swimlane': mxSwimlaneHandler, 'folder': mxFolderHandler, 'cube': mxCubeHandler, + 'card': mxCardHandler, 'note': mxNoteHandler, 'step': mxStepHandler, 'tape': mxTapeHandler}; + + var mxGraphCreateHandler = mxGraph.prototype.createHandler; + mxGraph.prototype.createHandler = function(state) + { + if (state != null) + { + var ctor = handlers[state.style['shape']]; + + if (ctor != null) + { + return new ctor(state); + } + } + + return mxGraphCreateHandler.apply(this, arguments); + }; + } + + // Constraints + mxGraph.prototype.getAllConnectionConstraints = function(terminal, source) + { + if (terminal != null && terminal.shape != null) + { + if (terminal.shape.stencil != null) + { + if (terminal.shape.stencil != null) + { + return terminal.shape.stencil.constraints; + } + } + else if (terminal.shape.constraints != null) + { + return terminal.shape.constraints; + } + } + + return null; + }; + + mxRectangleShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true), + new mxConnectionConstraint(new mxPoint(0.5, 0), true), + new mxConnectionConstraint(new mxPoint(0.75, 0), true), + new mxConnectionConstraint(new mxPoint(0, 0.25), true), + new mxConnectionConstraint(new mxPoint(0, 0.5), true), + new mxConnectionConstraint(new mxPoint(0, 0.75), true), + new mxConnectionConstraint(new mxPoint(1, 0.25), true), + new mxConnectionConstraint(new mxPoint(1, 0.5), true), + new mxConnectionConstraint(new mxPoint(1, 0.75), true), + new mxConnectionConstraint(new mxPoint(0.25, 1), true), + new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(0.75, 1), true)]; + mxLabel.prototype.constraints = mxRectangleShape.prototype.constraints; + mxImageShape.prototype.constraints = mxRectangleShape.prototype.constraints; + mxSwimlane.prototype.constraints = mxRectangleShape.prototype.constraints; + PlusShape.prototype.constraints = mxRectangleShape.prototype.constraints; + NoteShape.prototype.constraints = mxRectangleShape.prototype.constraints; + CardShape.prototype.constraints = mxRectangleShape.prototype.constraints; + CubeShape.prototype.constraints = mxRectangleShape.prototype.constraints; + FolderShape.prototype.constraints = mxRectangleShape.prototype.constraints; + mxCylinder.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.15, 0.05), false), + new mxConnectionConstraint(new mxPoint(0.5, 0), true), + new mxConnectionConstraint(new mxPoint(0.85, 0.05), false), + new mxConnectionConstraint(new mxPoint(0, 0.3), true), + new mxConnectionConstraint(new mxPoint(0, 0.5), true), + new mxConnectionConstraint(new mxPoint(0, 0.7), true), + new mxConnectionConstraint(new mxPoint(1, 0.3), true), + new mxConnectionConstraint(new mxPoint(1, 0.5), true), + new mxConnectionConstraint(new mxPoint(1, 0.7), true), + new mxConnectionConstraint(new mxPoint(0.15, 0.95), false), + new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(0.85, 0.95), false)]; + UmlActorShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0.1), false), + new mxConnectionConstraint(new mxPoint(0.5, 0), false), + new mxConnectionConstraint(new mxPoint(0.75, 0.1), false), + new mxConnectionConstraint(new mxPoint(0, 1/3), false), + new mxConnectionConstraint(new mxPoint(0, 1), false), + new mxConnectionConstraint(new mxPoint(1, 1/3), false), + new mxConnectionConstraint(new mxPoint(1, 1), false), + new mxConnectionConstraint(new mxPoint(0.5, 0.5), false)]; + ComponentShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true), + new mxConnectionConstraint(new mxPoint(0.5, 0), true), + new mxConnectionConstraint(new mxPoint(0.75, 0), true), + new mxConnectionConstraint(new mxPoint(0, 0.3), true), + new mxConnectionConstraint(new mxPoint(0, 0.7), true), + new mxConnectionConstraint(new mxPoint(1, 0.25), true), + new mxConnectionConstraint(new mxPoint(1, 0.5), true), + new mxConnectionConstraint(new mxPoint(1, 0.75), true), + new mxConnectionConstraint(new mxPoint(0.25, 1), true), + new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(0.75, 1), true)]; + mxActor.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.5, 0), true), + new mxConnectionConstraint(new mxPoint(0.25, 0.2), false), + new mxConnectionConstraint(new mxPoint(0.1, 0.5), false), + new mxConnectionConstraint(new mxPoint(0, 0.75), true), + new mxConnectionConstraint(new mxPoint(0.75, 0.25), false), + new mxConnectionConstraint(new mxPoint(0.9, 0.5), false), + new mxConnectionConstraint(new mxPoint(1, 0.75), true), + new mxConnectionConstraint(new mxPoint(0.25, 1), true), + new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(0.75, 1), true)]; + TapeShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.35), false), + new mxConnectionConstraint(new mxPoint(0, 0.5), false), + new mxConnectionConstraint(new mxPoint(0, 0.65), false), + new mxConnectionConstraint(new mxPoint(1, 0.35), false), + new mxConnectionConstraint(new mxPoint(1, 0.5), false), + new mxConnectionConstraint(new mxPoint(1, 0.65), false), + new mxConnectionConstraint(new mxPoint(0.25, 1), false), + new mxConnectionConstraint(new mxPoint(0.75, 0), false)]; + // TODO: Relative ports + StepShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true), + new mxConnectionConstraint(new mxPoint(0.5, 0), true), + new mxConnectionConstraint(new mxPoint(0.75, 0), true), + new mxConnectionConstraint(new mxPoint(0.25, 1), true), + new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(0.75, 1), true), + new mxConnectionConstraint(new mxPoint(0.1, 0.25), false), + new mxConnectionConstraint(new mxPoint(0.2, 0.5), false), + new mxConnectionConstraint(new mxPoint(0.1, 0.75), false), + new mxConnectionConstraint(new mxPoint(0.9, 0.25), false), + new mxConnectionConstraint(new mxPoint(1, 0.5), false), + new mxConnectionConstraint(new mxPoint(0.9, 0.75), false)]; + mxLine.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.5), false), + new mxConnectionConstraint(new mxPoint(0.25, 0.5), false), + new mxConnectionConstraint(new mxPoint(0.75, 0.5), false), + new mxConnectionConstraint(new mxPoint(1, 0.5), false)]; + LollipopShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.5, 0), false), + new mxConnectionConstraint(new mxPoint(0.5, 1), false)]; + mxEllipse.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0), true), new mxConnectionConstraint(new mxPoint(1, 0), true), + new mxConnectionConstraint(new mxPoint(0, 1), true), new mxConnectionConstraint(new mxPoint(1, 1), true), + new mxConnectionConstraint(new mxPoint(0.5, 0), true), new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(0, 0.5), true), new mxConnectionConstraint(new mxPoint(1, 0.5))]; + mxDoubleEllipse.prototype.constraints = mxEllipse.prototype.constraints; + mxRhombus.prototype.constraints = mxEllipse.prototype.constraints; + mxTriangle.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.25), true), + new mxConnectionConstraint(new mxPoint(0, 0.5), true), + new mxConnectionConstraint(new mxPoint(0, 0.75), true), + new mxConnectionConstraint(new mxPoint(0.5, 0), true), + new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(1, 0.5), true)]; + mxHexagon.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.375, 0), true), + new mxConnectionConstraint(new mxPoint(0.5, 0), true), + new mxConnectionConstraint(new mxPoint(0.625, 0), true), + new mxConnectionConstraint(new mxPoint(0.125, 0.25), false), + new mxConnectionConstraint(new mxPoint(0, 0.5), true), + new mxConnectionConstraint(new mxPoint(0.125, 0.75), false), + new mxConnectionConstraint(new mxPoint(0.875, 0.25), false), + new mxConnectionConstraint(new mxPoint(0, 0.5), true), + new mxConnectionConstraint(new mxPoint(1, 0.5), true), + new mxConnectionConstraint(new mxPoint(0.875, 0.75), false), + new mxConnectionConstraint(new mxPoint(0.375, 1), true), + new mxConnectionConstraint(new mxPoint(0.5, 1), true), + new mxConnectionConstraint(new mxPoint(0.625, 1), true)]; + mxCloud.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0.25), false), + new mxConnectionConstraint(new mxPoint(0.4, 0.1), false), + new mxConnectionConstraint(new mxPoint(0.16, 0.55), false), + new mxConnectionConstraint(new mxPoint(0.07, 0.4), false), + new mxConnectionConstraint(new mxPoint(0.31, 0.8), false), + new mxConnectionConstraint(new mxPoint(0.13, 0.77), false), + new mxConnectionConstraint(new mxPoint(0.8, 0.8), false), + new mxConnectionConstraint(new mxPoint(0.55, 0.95), false), + new mxConnectionConstraint(new mxPoint(0.875, 0.5), false), + new mxConnectionConstraint(new mxPoint(0.96, 0.7), false), + new mxConnectionConstraint(new mxPoint(0.625, 0.2), false), + new mxConnectionConstraint(new mxPoint(0.88, 0.25), false)]; + mxArrow.prototype.constraints = null; +})(); diff --git a/public/assets/plugins/square/js/Sidebar.js b/public/assets/plugins/square/js/Sidebar.js index 4e9c149..6e4129c 100644 --- a/public/assets/plugins/square/js/Sidebar.js +++ b/public/assets/plugins/square/js/Sidebar.js @@ -1 +1,932 @@ -var _0x6c88=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x64\x69\x74\x6F\x72\x55\x69","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x70\x61\x6C\x65\x74\x74\x65\x73","\x73\x68\x6F\x77\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x67\x72\x61\x70\x68","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x53\x74\x79\x6C\x65\x73\x68\x65\x65\x74","\x65\x64\x69\x74\x6F\x72","\x72\x65\x73\x65\x74\x56\x69\x65\x77\x4F\x6E\x52\x6F\x6F\x74\x43\x68\x61\x6E\x67\x65","\x66\x6F\x6C\x64\x69\x6E\x67\x45\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x43\x6F\x6E\x6E\x65\x63\x74\x61\x62\x6C\x65","\x61\x75\x74\x6F\x53\x63\x72\x6F\x6C\x6C","\x73\x65\x74\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x76\x69\x73\x69\x62\x69\x6C\x69\x74\x79","\x73\x74\x79\x6C\x65","\x68\x69\x64\x64\x65\x6E","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x62\x73\x6F\x6C\x75\x74\x65","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x62\x6F\x64\x79","\x49\x53\x5F\x54\x4F\x55\x43\x48","\x6D\x6F\x75\x73\x65\x75\x70","\x62\x69\x6E\x64","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x73\x63\x72\x6F\x6C\x6C","\x6D\x6F\x75\x73\x65\x64\x6F\x77\x6E","\x68\x69\x64\x65\x54\x6F\x6F\x6C\x74\x69\x70","\x6D\x6F\x75\x73\x65\x6D\x6F\x76\x65","\x67\x65\x74\x53\x6F\x75\x72\x63\x65","\x63\x75\x72\x72\x65\x6E\x74\x45\x6C\x74","\x70\x61\x72\x65\x6E\x74\x4E\x6F\x64\x65","\x6D\x6F\x75\x73\x65\x6F\x75\x74","\x74\x6F\x45\x6C\x65\x6D\x65\x6E\x74","\x72\x65\x6C\x61\x74\x65\x64\x54\x61\x72\x67\x65\x74","\x69\x6E\x69\x74","\x73\x72\x63","\x2F\x74\x6F\x6F\x6C\x74\x69\x70\x2E\x70\x6E\x67","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x6C\x6F\x67","\x65\x6E\x74\x72\x79","\x67\x65\x74","\x2F\x65\x6E\x74\x72\x79\x2F","\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67","\x73\x74\x61\x72\x74","\x66\x69\x6E\x61\x6C\x6C\x79","\x65\x6E\x64","\x61\x64\x64\x49\x6D\x61\x67\x65\x50\x61\x6C\x65\x74\x74\x65","\x63\x61\x6C\x6C\x5F\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74","\x2F\x63\x61\x6C\x6C\x5F\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74\x2F","\x61\x6E\x73\x77\x65\x72","\x68\x61\x6E\x67\x75\x70","\x64\x69\x61\x6C","\x65\x78\x74\x5F\x64\x69\x61\x6C","\x71\x75\x65\x75\x65","\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x76\x61\x72\x69\x61\x62\x6C\x65","\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x2F","\x73\x65\x74","\x6D\x61\x74\x68","\x70\x6C\x61\x79\x62\x61\x63\x6B","\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x2F","\x6D\x65\x6E\x75","\x73\x61\x79\x64\x69\x67\x69\x74\x73","\x73\x61\x79\x6E\x75\x6D\x62\x65\x72","\x73\x61\x79\x70\x68\x6F\x6E\x65\x74\x69\x63","\x74\x74\x73","\x69\x73\x70\x65\x65\x63\x68\x74\x74\x73","\x67\x65\x74\x64\x69\x67\x69\x74\x73","\x67\x65\x74\x73\x65\x63\x72\x65\x74\x64\x69\x67\x69\x74\x73","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2F","\x72\x65\x63\x6F\x72\x64","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x53\x65\x72\x76\x65\x72","\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x5F\x73\x65\x72\x76\x65\x72\x2F","\x64\x61\x74\x61\x62\x61\x73\x65","\x69\x73\x70\x65\x65\x63\x68\x61\x73\x72","\x73\x65\x6E\x64\x53\x4D\x53","\x73\x65\x6E\x64\x4D\x61\x69\x6C","\x63\x61\x6C\x6C\x66\x6C\x6F\x77","\x2F\x63\x61\x6C\x6C\x66\x6C\x6F\x77\x2F","\x67\x6F\x74\x6F\x63","\x67\x6F\x74\x6F\x69\x66","\x67\x6F\x74\x6F\x69\x66\x74\x69\x6D\x65","\x76\x73\x77\x69\x74\x63\x68","\x73\x74\x61\x74\x73","\x2F\x73\x74\x61\x74\x73\x2F","\x67\x6F\x61\x6C","\x67\x65\x6E\x65\x72\x61\x6C","\x2F\x67\x65\x6E\x65\x72\x61\x6C\x2F","\x6E\x6F\x6F\x70","\x73\x79\x73\x74\x65\x6D","\x61\x67\x69","\x73\x75\x62\x70\x72\x6F\x6A\x65\x63\x74","\x63\x75\x73\x74\x6F\x6D\x5F\x61\x70\x70","\x65\x6E\x61\x62\x6C\x65\x54\x6F\x6F\x6C\x74\x69\x70\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x42\x6F\x72\x64\x65\x72","\x74\x68\x75\x6D\x62\x42\x6F\x72\x64\x65\x72","\x74\x6F\x6F\x6C\x74\x69\x70\x44\x65\x6C\x61\x79","\x69\x6E\x73\x74\x61\x6C\x6C\x45\x64\x67\x65\x73","\x67\x65\x61\x72\x49\x6D\x61\x67\x65","\x2F\x63\x6C\x69\x70\x61\x72\x74\x2F\x47\x65\x61\x72\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67","\x74\x68\x75\x6D\x62\x57\x69\x64\x74\x68","\x74\x68\x75\x6D\x62\x48\x65\x69\x67\x68\x74","\x74\x68\x75\x6D\x62\x50\x61\x64\x64\x69\x6E\x67","\x73\x69\x64\x65\x62\x61\x72\x54\x69\x74\x6C\x65\x53\x69\x7A\x65","\x73\x69\x64\x65\x62\x61\x72\x54\x69\x74\x6C\x65\x73","\x74\x6F\x6F\x6C\x74\x69\x70\x54\x69\x74\x6C\x65\x73","\x73\x68\x6F\x77\x54\x6F\x6F\x6C\x74\x69\x70","\x74\x68\x72\x65\x61\x64","\x63\x6C\x65\x61\x72\x54\x69\x6D\x65\x6F\x75\x74","\x74\x6F\x6F\x6C\x74\x69\x70","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x53\x69\x64\x65\x62\x61\x72\x54\x6F\x6F\x6C\x74\x69\x70","\x67\x72\x61\x70\x68\x32","\x73\x65\x74\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x76\x69\x65\x77","\x49\x53\x5F\x53\x56\x47","\x63\x61\x6E\x76\x61\x73","\x72\x65\x6C\x61\x74\x69\x76\x65","\x74\x6F\x6F\x6C\x74\x69\x70\x49\x6D\x61\x67\x65","\x63\x72\x65\x61\x74\x65\x49\x6D\x61\x67\x65","\x77\x69\x64\x74\x68","\x31\x34\x70\x78","\x68\x65\x69\x67\x68\x74","\x32\x37\x70\x78","\x64\x69\x73\x70\x6C\x61\x79","\x62\x6C\x6F\x63\x6B","\x6C\x61\x62\x65\x6C\x73\x56\x69\x73\x69\x62\x6C\x65","\x63\x6C\x65\x61\x72","\x6D\x6F\x64\x65\x6C","\x61\x64\x64\x43\x65\x6C\x6C\x73","\x67\x65\x74\x47\x72\x61\x70\x68\x42\x6F\x75\x6E\x64\x73","\x49\x53\x5F\x51\x55\x49\x52\x4B\x53","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x76\x69\x73\x69\x62\x6C\x65","\x70\x78","\x6C\x65\x6E\x67\x74\x68","\x74\x6F\x6F\x6C\x74\x69\x70\x54\x69\x74\x6C\x65","\x62\x6F\x72\x64\x65\x72\x54\x6F\x70","\x31\x70\x78\x20\x73\x6F\x6C\x69\x64\x20\x67\x72\x61\x79","\x74\x65\x78\x74\x41\x6C\x69\x67\x6E","\x63\x65\x6E\x74\x65\x72","\x31\x30\x30\x25","\x70\x61\x64\x64\x69\x6E\x67\x54\x6F\x70","\x32\x70\x78","\x36\x70\x78","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","","\x77\x72\x69\x74\x65","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x6D\x61\x72\x67\x69\x6E\x54\x6F\x70","\x74\x6F\x70","\x6E\x6F\x6E\x65","\x78","\x6D\x69\x6E","\x79","\x63\x6C\x69\x65\x6E\x74\x57\x69\x64\x74\x68","\x73\x70\x6C\x69\x74\x53\x69\x7A\x65","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x73\x63\x72\x6F\x6C\x6C\x54\x6F\x70","\x6D\x61\x78","\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x28","\x2C","\x29","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x6C\x65\x66\x74","\x64\x72\x61\x77\x50\x61\x6E\x65","\x6F\x66\x66\x73\x65\x74\x57\x69\x64\x74\x68","\x70\x61\x67\x65\x2D\x73\x69\x64\x65\x62\x61\x72","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x73\x65\x74\x54\x69\x6D\x65\x6F\x75\x74","\x63\x72\x65\x61\x74\x65\x54\x69\x74\x6C\x65","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x67\x65\x54\x69\x74\x6C\x65","\x63\x72\x65\x61\x74\x65\x54\x68\x75\x6D\x62","\x73\x63\x61\x6C\x65\x41\x6E\x64\x54\x72\x61\x6E\x73\x6C\x61\x74\x65","\x66\x6C\x6F\x6F\x72","\x64\x69\x61\x6C\x65\x63\x74","\x44\x49\x41\x4C\x45\x43\x54\x5F\x53\x56\x47","\x4E\x4F\x5F\x46\x4F","\x63\x6C\x6F\x6E\x65\x4E\x6F\x64\x65","\x6F\x77\x6E\x65\x72\x53\x56\x47\x45\x6C\x65\x6D\x65\x6E\x74","\x67\x65\x74\x43\x61\x6E\x76\x61\x73","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x49\x53\x5F\x49\x45\x36","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x49\x6D\x61\x67\x65","\x75\x72\x6C\x28","\x74\x72\x61\x6E\x73\x70\x61\x72\x65\x6E\x74\x49\x6D\x61\x67\x65","\x63\x75\x72\x73\x6F\x72","\x70\x6F\x69\x6E\x74\x65\x72","\x6D\x69\x6E\x57\x69\x64\x74\x68","\x6D\x69\x6E\x48\x65\x69\x67\x68\x74","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x6E\x6F\x77\x72\x61\x70","\x49\x53\x5F\x49\x45","\x34\x70\x78","\x63\x72\x65\x61\x74\x65\x49\x74\x65\x6D","\x67\x65\x49\x74\x65\x6D","\x70\x61\x64\x64\x69\x6E\x67","\x63\x6C\x69\x63\x6B","\x63\x6F\x6E\x73\x75\x6D\x65","\x63\x72\x65\x61\x74\x65\x44\x72\x6F\x70\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x65\x74\x49\x6D\x70\x6F\x72\x74\x61\x62\x6C\x65\x43\x65\x6C\x6C\x73","\x69\x73\x56\x61\x6C\x69\x64\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x69\x73\x53\x70\x6C\x69\x74\x45\x6E\x61\x62\x6C\x65\x64","\x69\x73\x53\x70\x6C\x69\x74\x54\x61\x72\x67\x65\x74","\x73\x70\x6C\x69\x74\x45\x64\x67\x65","\x69\x6D\x70\x6F\x72\x74\x43\x65\x6C\x6C\x73","\x73\x63\x72\x6F\x6C\x6C\x43\x65\x6C\x6C\x54\x6F\x56\x69\x73\x69\x62\x6C\x65","\x73\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x50\x72\x65\x76\x69\x65\x77","\x62\x6F\x72\x64\x65\x72","\x31\x70\x78\x20\x64\x61\x73\x68\x65\x64\x20\x62\x6C\x61\x63\x6B","\x63\x72\x65\x61\x74\x65\x44\x72\x61\x67\x53\x6F\x75\x72\x63\x65","\x61\x75\x74\x6F\x73\x63\x72\x6F\x6C\x6C","\x6D\x61\x6B\x65\x44\x72\x61\x67\x67\x61\x62\x6C\x65","\x67\x65\x74\x44\x72\x6F\x70\x54\x61\x72\x67\x65\x74","\x61\x70\x70\x6C\x79","\x69\x73\x56\x61\x6C\x69\x64\x52\x6F\x6F\x74","\x61\x64\x64\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x58","\x67\x65\x74\x43\x6C\x69\x65\x6E\x74\x59","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x6D\x6F\x75\x73\x65\x55\x70","\x69\x73\x50\x6F\x70\x75\x70\x54\x72\x69\x67\x67\x65\x72","\x63\x75\x72\x72\x65\x6E\x74\x47\x72\x61\x70\x68","\x74\x6F\x6C\x65\x72\x61\x6E\x63\x65","\x61\x62\x73","\x67\x65\x74\x47\x72\x69\x64\x53\x69\x7A\x65","\x64\x72\x6F\x70","\x63\x72\x65\x61\x74\x65\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x6C\x61\x62\x65\x6C","\x66\x6F\x72\x45\x61\x63\x68","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78\x54\x65\x6D\x70\x6C\x61\x74\x65","\x79\x65\x73","\x6B\x65\x79","\x69\x73\x70\x65\x65\x63\x68\x5F\x61\x73\x72\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x74\x69\x6D\x65\x6F\x75\x74","\x69\x6E\x74\x4B\x65\x79","\x62\x65\x65\x70","\x69\x74\x2D\x49\x54","\x23","\x66\x69\x6C\x65\x5F\x69\x64","\x6F\x70\x74\x73","\x30","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x64\x69\x67\x69\x74","\x35","\x31","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64","\x72\x65\x74\x72\x79","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64","\x6D\x69\x6E\x64\x69\x67\x69\x74","\x6D\x61\x78\x64\x69\x67\x69\x74","\x31\x30","\x68\x69\x64\x64\x65\x6E\x64\x69\x67\x69\x74\x73\x6E\x75\x6D","\x68\x69\x64\x64\x65\x6E\x64\x69\x67\x69\x74\x73\x70\x6F\x73","\x66\x69\x72\x73\x74","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x6F\x70\x74\x69\x6F\x6E\x73","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x76\x61\x6C\x75\x65","\x6F\x64\x62\x63\x5F\x69\x64","\x71\x75\x65\x72\x79","\x6F\x75\x74\x70\x75\x74","\x63\x6F\x6E\x74\x65\x78\x74","\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x63\x6F\x6D\x6D\x61\x6E\x64","\x61\x72\x67\x73","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x69\x6E\x74\x65\x72\x76\x61\x6C\x5F\x69\x64","\x67\x6F\x74\x6F\x69\x66\x6D\x75\x6C\x74\x69\x74\x69\x6D\x65","\x64\x69\x67\x69\x74\x73","\x65\x73\x63\x61\x70\x65\x5F\x64\x69\x67\x69\x74\x73","\x6E\x75\x6D\x62\x65\x72","\x74\x65\x78\x74","\x66\x69\x6C\x65","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x46\x6F\x72\x6D\x61\x74","\x77\x61\x76","\x2D\x31","\x73\x69\x70\x5F\x69\x64","\x75\x72\x6C","\x36\x30","\x70\x68\x6F\x6E\x65","\x74\x72\x75\x6E\x6B\x5F\x6E\x61\x6D\x65","\x67\x6F\x6F\x67\x6C\x65\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x69\x74","\x69\x73\x70\x65\x65\x63\x68\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x73\x70\x65\x65\x64","\x65\x75\x72\x69\x74\x61\x6C\x69\x61\x6E\x66\x65\x6D\x61\x6C\x65","\x71\x75\x65\x75\x65\x5F\x69\x64","\x6D\x61\x63\x72\x6F","\x67\x6F\x73\x75\x62","\x33\x30\x30","\x6D\x61\x69\x6C\x62\x6F\x78","\x70\x72\x6F\x6A\x65\x63\x74\x5F\x69\x64","\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E","\x71\x75\x65\x75\x65\x6E\x61\x6D\x65","\x61\x67\x65\x6E\x74","\x71\x75\x65\x75\x65\x5F\x65\x76\x65\x6E\x74","\x64\x61\x74\x61\x31","\x64\x61\x74\x61\x32","\x64\x61\x74\x61\x33","\x64\x61\x74\x61\x34","\x64\x61\x74\x61\x35","\x71\x75\x65\x75\x65\x6C\x6F\x67","\x67\x6F\x61\x6C\x6E\x61\x6D\x65","\x6E\x61\x6D\x65","\x6C\x69\x73\x74\x5F\x69\x64","\x64\x65\x6C\x61\x79","\x7B\x43\x41\x4C\x4C\x45\x52\x49\x44\x28\x6E\x75\x6D\x29\x7D","\x61\x63\x63\x6F\x75\x6E\x74\x5F\x69\x64","\x74\x6F","\x73\x6D\x73\x5F\x74\x65\x78\x74","\x74\x65\x6D\x70\x6C\x61\x74\x65\x5F\x69\x64","\x63\x63","\x73\x75\x62\x6A\x65\x63\x74","\x76\x65\x72\x74\x65\x78","\x63\x72\x65\x61\x74\x65\x56\x65\x72\x74\x65\x78\x54\x65\x6D\x70\x6C\x61\x74\x65\x46\x72\x6F\x6D\x43\x65\x6C\x6C\x73","\x69\x73\x47\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x75\x69\x64\x65\x73\x45\x6E\x61\x62\x6C\x65\x64","\x67\x72\x61\x70\x68\x48\x61\x6E\x64\x6C\x65\x72","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x54\x65\x6D\x70\x6C\x61\x74\x65","\x73\x65\x74\x54\x65\x72\x6D\x69\x6E\x61\x6C\x50\x6F\x69\x6E\x74","\x67\x65\x6F\x6D\x65\x74\x72\x79","\x65\x64\x67\x65","\x63\x72\x65\x61\x74\x65\x45\x64\x67\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x46\x72\x6F\x6D\x43\x65\x6C\x6C\x73","\x73\x65\x74\x44\x65\x66\x61\x75\x6C\x74\x45\x64\x67\x65","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72","\x23\x66\x66\x66\x66\x66\x66","\x61\x64\x64\x50\x61\x6C\x65\x74\x74\x65","\x67\x65\x53\x69\x64\x65\x62\x61\x72","\x61\x64\x64\x46\x6F\x6C\x64\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x2F\x63\x6F\x6C\x6C\x61\x70\x73\x65\x64\x2E\x67\x69\x66\x29","\x2F\x65\x78\x70\x61\x6E\x64\x65\x64\x2E\x67\x69\x66\x29","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x52\x65\x70\x65\x61\x74","\x6E\x6F\x2D\x72\x65\x70\x65\x61\x74","\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x31\x30\x30\x25\x20\x35\x30\x25","\x77\x61\x69\x74","\x72\x65\x6D\x6F\x76\x65\x50\x61\x6C\x65\x74\x74\x65","\x72\x65\x6D\x6F\x76\x65\x43\x68\x69\x6C\x64","\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D"];_0x6c88[0];function Sidebar(_0xd3a1x2,_0xd3a1x3){this[_0x6c88[1]]= _0xd3a1x2;this[_0x6c88[2]]= _0xd3a1x3;this[_0x6c88[3]]= new Object();this[_0x6c88[4]]= true;this[_0x6c88[5]]= new Graph(document[_0x6c88[7]](_0x6c88[6]),null,null,this[_0x6c88[1]][_0x6c88[9]][_0x6c88[5]][_0x6c88[8]]());this[_0x6c88[5]][_0x6c88[10]]= false;this[_0x6c88[5]][_0x6c88[11]]= false;this[_0x6c88[5]][_0x6c88[12]](false);this[_0x6c88[5]][_0x6c88[13]]= false;this[_0x6c88[5]][_0x6c88[14]](false);this[_0x6c88[5]][_0x6c88[15]](false);this[_0x6c88[5]][_0x6c88[2]][_0x6c88[17]][_0x6c88[16]]= _0x6c88[18];this[_0x6c88[5]][_0x6c88[2]][_0x6c88[17]][_0x6c88[19]]= _0x6c88[20];document[_0x6c88[22]][_0x6c88[21]](this[_0x6c88[5]][_0x6c88[2]]);if(!mxClient[_0x6c88[23]]){mxEvent[_0x6c88[26]](document,_0x6c88[24],mxUtils[_0x6c88[25]](this,function(){this[_0x6c88[4]]= true}));mxEvent[_0x6c88[26]](_0xd3a1x3,_0x6c88[27],mxUtils[_0x6c88[25]](this,function(){this[_0x6c88[4]]= true}));mxEvent[_0x6c88[26]](document,_0x6c88[28],mxUtils[_0x6c88[25]](this,function(){this[_0x6c88[4]]= false;this[_0x6c88[29]]()}));mxEvent[_0x6c88[26]](document,_0x6c88[30],mxUtils[_0x6c88[25]](this,function(_0xd3a1x4){var _0xd3a1x5=mxEvent[_0x6c88[31]](_0xd3a1x4);while(_0xd3a1x5!= null){if(_0xd3a1x5== this[_0x6c88[32]]){return};_0xd3a1x5= _0xd3a1x5[_0x6c88[33]]};this[_0x6c88[29]]()}));mxEvent[_0x6c88[26]](document,_0x6c88[34],mxUtils[_0x6c88[25]](this,function(_0xd3a1x4){if(_0xd3a1x4[_0x6c88[35]]== null&& _0xd3a1x4[_0x6c88[36]]== null){this[_0x6c88[29]]()}}))};this[_0x6c88[37]](); new Image()[_0x6c88[38]]= IMAGE_PATH+ _0x6c88[39]}Sidebar[_0x6c88[40]][_0x6c88[37]]= function(){var _0xd3a1x6=STENCIL_PATH;console[_0x6c88[41]](_0xd3a1x6);this[_0x6c88[49]](_0x6c88[42],mxResources[_0x6c88[43]](_0x6c88[42]),_0xd3a1x6+ _0x6c88[44],_0x6c88[45],[_0x6c88[46],_0x6c88[47],_0x6c88[48]],[mxResources[_0x6c88[43]](_0x6c88[46]),mxResources[_0x6c88[43]](_0x6c88[47]),mxResources[_0x6c88[43]](_0x6c88[48])]);this[_0x6c88[49]](_0x6c88[50],mxResources[_0x6c88[43]](_0x6c88[50]),_0xd3a1x6+ _0x6c88[51],_0x6c88[45],[_0x6c88[52],_0x6c88[53],_0x6c88[54],_0x6c88[55],_0x6c88[56],_0x6c88[57],_0x6c88[58]],[mxResources[_0x6c88[43]](_0x6c88[52]),mxResources[_0x6c88[43]](_0x6c88[53]),mxResources[_0x6c88[43]](_0x6c88[54]),mxResources[_0x6c88[43]](_0x6c88[55]),mxResources[_0x6c88[43]](_0x6c88[56]),mxResources[_0x6c88[43]](_0x6c88[57]),mxResources[_0x6c88[43]](_0x6c88[58])]);this[_0x6c88[49]](_0x6c88[59],mxResources[_0x6c88[43]](_0x6c88[59]),_0xd3a1x6+ _0x6c88[60],_0x6c88[45],[_0x6c88[61],_0x6c88[62]],[mxResources[_0x6c88[43]](_0x6c88[61]),mxResources[_0x6c88[43]](_0x6c88[62])]);this[_0x6c88[49]](_0x6c88[63],mxResources[_0x6c88[43]](_0x6c88[63]),_0xd3a1x6+ _0x6c88[64],_0x6c88[45],[_0x6c88[63],_0x6c88[65],_0x6c88[66],_0x6c88[67],_0x6c88[68],_0x6c88[69],_0x6c88[70],_0x6c88[71],_0x6c88[72]],[mxResources[_0x6c88[43]](_0x6c88[63]),mxResources[_0x6c88[43]](_0x6c88[65]),mxResources[_0x6c88[43]](_0x6c88[66]),mxResources[_0x6c88[43]](_0x6c88[67]),mxResources[_0x6c88[43]](_0x6c88[68]),mxResources[_0x6c88[43]](_0x6c88[69]),mxResources[_0x6c88[43]](_0x6c88[70]),mxResources[_0x6c88[43]](_0x6c88[71]),mxResources[_0x6c88[43]](_0x6c88[72])]);this[_0x6c88[49]](_0x6c88[73],mxResources[_0x6c88[43]](_0x6c88[73]),_0xd3a1x6+ _0x6c88[74],_0x6c88[45],[_0x6c88[75]],[mxResources[_0x6c88[43]](_0x6c88[75])]);this[_0x6c88[49]](_0x6c88[76],mxResources[_0x6c88[43]](_0x6c88[76]),_0xd3a1x6+ _0x6c88[77],_0x6c88[45],[_0x6c88[78],_0x6c88[79],_0x6c88[80],_0x6c88[81]],[mxResources[_0x6c88[43]](_0x6c88[78]),mxResources[_0x6c88[43]](_0x6c88[79]),mxResources[_0x6c88[43]](_0x6c88[80]),mxResources[_0x6c88[43]](_0x6c88[81])]);this[_0x6c88[49]](_0x6c88[82],mxResources[_0x6c88[43]](_0x6c88[82]),_0xd3a1x6+ _0x6c88[83],_0x6c88[45],[_0x6c88[84],_0x6c88[85],_0x6c88[86],_0x6c88[87]],[mxResources[_0x6c88[43]](_0x6c88[84]),mxResources[_0x6c88[43]](_0x6c88[85]),mxResources[_0x6c88[43]](_0x6c88[86]),mxResources[_0x6c88[43]](_0x6c88[87])]);this[_0x6c88[49]](_0x6c88[88],mxResources[_0x6c88[43]](_0x6c88[88]),_0xd3a1x6+ _0x6c88[89],_0x6c88[45],[_0x6c88[90]],[mxResources[_0x6c88[43]](_0x6c88[90])]);this[_0x6c88[49]](_0x6c88[91],mxResources[_0x6c88[43]](_0x6c88[91]),_0xd3a1x6+ _0x6c88[92],_0x6c88[45],[_0x6c88[93],_0x6c88[94],_0x6c88[95],_0x6c88[96],_0x6c88[97]],[mxResources[_0x6c88[43]](_0x6c88[93]),mxResources[_0x6c88[43]](_0x6c88[94]),mxResources[_0x6c88[43]](_0x6c88[95]),mxResources[_0x6c88[43]](_0x6c88[96]),mxResources[_0x6c88[43]](_0x6c88[97])])};Sidebar[_0x6c88[40]][_0x6c88[98]]= !mxClient[_0x6c88[23]];Sidebar[_0x6c88[40]][_0x6c88[99]]= 16;Sidebar[_0x6c88[40]][_0x6c88[100]]= 3;Sidebar[_0x6c88[40]][_0x6c88[101]]= 300;Sidebar[_0x6c88[40]][_0x6c88[102]]= true;Sidebar[_0x6c88[40]][_0x6c88[103]]= STENCIL_PATH+ _0x6c88[104];Sidebar[_0x6c88[40]][_0x6c88[105]]= 34;Sidebar[_0x6c88[40]][_0x6c88[106]]= 34;Sidebar[_0x6c88[40]][_0x6c88[107]]= 2;Sidebar[_0x6c88[40]][_0x6c88[108]]= 9;Sidebar[_0x6c88[40]][_0x6c88[109]]= false;Sidebar[_0x6c88[40]][_0x6c88[110]]= false;Sidebar[_0x6c88[40]][_0x6c88[111]]= function(_0xd3a1x7,_0xd3a1x8,_0xd3a1x9,_0xd3a1xa){if(this[_0x6c88[98]]&& this[_0x6c88[4]]){if(this[_0x6c88[32]]!= _0xd3a1x7){if(this[_0x6c88[112]]!= null){window[_0x6c88[113]](this[_0x6c88[112]]);this[_0x6c88[112]]= null};var _0xd3a1xb=mxUtils[_0x6c88[25]](this,function(){if(this[_0x6c88[114]]== null){this[_0x6c88[114]]= document[_0x6c88[7]](_0x6c88[6]);this[_0x6c88[114]][_0x6c88[115]]= _0x6c88[116];document[_0x6c88[22]][_0x6c88[21]](this[_0x6c88[114]]);this[_0x6c88[117]]= new Graph(this[_0x6c88[114]],null,null,this[_0x6c88[1]][_0x6c88[9]][_0x6c88[5]][_0x6c88[8]]());this[_0x6c88[117]][_0x6c88[119]][_0x6c88[118]](this[_0x6c88[99]],this[_0x6c88[99]]);this[_0x6c88[117]][_0x6c88[10]]= false;this[_0x6c88[117]][_0x6c88[11]]= false;this[_0x6c88[117]][_0x6c88[13]]= false;this[_0x6c88[117]][_0x6c88[14]](false);this[_0x6c88[117]][_0x6c88[12]](false);this[_0x6c88[117]][_0x6c88[15]](false);if(!mxClient[_0x6c88[120]]){this[_0x6c88[117]][_0x6c88[119]][_0x6c88[121]][_0x6c88[17]][_0x6c88[19]]= _0x6c88[122]};this[_0x6c88[123]]= mxUtils[_0x6c88[124]](IMAGE_PATH+ _0x6c88[39]);this[_0x6c88[123]][_0x6c88[17]][_0x6c88[19]]= _0x6c88[20];this[_0x6c88[123]][_0x6c88[17]][_0x6c88[125]]= _0x6c88[126];this[_0x6c88[123]][_0x6c88[17]][_0x6c88[127]]= _0x6c88[128];document[_0x6c88[22]][_0x6c88[21]](this[_0x6c88[123]])};this[_0x6c88[114]][_0x6c88[17]][_0x6c88[129]]= _0x6c88[130];this[_0x6c88[117]][_0x6c88[131]]= (_0xd3a1xa== null|| _0xd3a1xa);this[_0x6c88[117]][_0x6c88[133]][_0x6c88[132]]();this[_0x6c88[117]][_0x6c88[134]](_0xd3a1x8);var _0xd3a1xc=this[_0x6c88[117]][_0x6c88[135]]();var _0xd3a1xd=_0xd3a1xc[_0x6c88[125]]+ 2* this[_0x6c88[99]];var _0xd3a1xe=_0xd3a1xc[_0x6c88[127]]+ 2* this[_0x6c88[99]];if(mxClient[_0x6c88[136]]){_0xd3a1xd+= 4;_0xd3a1xe+= 4;this[_0x6c88[114]][_0x6c88[17]][_0x6c88[137]]= _0x6c88[18]}else {this[_0x6c88[114]][_0x6c88[17]][_0x6c88[137]]= _0x6c88[138]};this[_0x6c88[123]][_0x6c88[17]][_0x6c88[16]]= _0x6c88[138];this[_0x6c88[114]][_0x6c88[17]][_0x6c88[125]]= _0xd3a1xd+ _0x6c88[139];if(this[_0x6c88[110]]&& _0xd3a1x9!= null&& _0xd3a1x9[_0x6c88[140]]> 0){if(this[_0x6c88[141]]== null){this[_0x6c88[141]]= document[_0x6c88[7]](_0x6c88[6]);this[_0x6c88[141]][_0x6c88[17]][_0x6c88[142]]= _0x6c88[143];this[_0x6c88[141]][_0x6c88[17]][_0x6c88[144]]= _0x6c88[145];this[_0x6c88[141]][_0x6c88[17]][_0x6c88[125]]= _0x6c88[146];this[_0x6c88[141]][_0x6c88[17]][_0x6c88[137]]= _0x6c88[18];if(mxClient[_0x6c88[120]]){this[_0x6c88[141]][_0x6c88[17]][_0x6c88[147]]= _0x6c88[148]}else {this[_0x6c88[141]][_0x6c88[17]][_0x6c88[19]]= _0x6c88[20];this[_0x6c88[141]][_0x6c88[17]][_0x6c88[147]]= _0x6c88[149]};this[_0x6c88[114]][_0x6c88[21]](this[_0x6c88[141]])}else {this[_0x6c88[141]][_0x6c88[150]]= _0x6c88[151]};this[_0x6c88[141]][_0x6c88[17]][_0x6c88[129]]= _0x6c88[151];mxUtils[_0x6c88[152]](this[_0x6c88[141]],_0xd3a1x9);var _0xd3a1xf=this[_0x6c88[141]][_0x6c88[153]]+ 10;_0xd3a1xe+= _0xd3a1xf;if(mxClient[_0x6c88[120]]){this[_0x6c88[141]][_0x6c88[17]][_0x6c88[154]]= (-_0xd3a1xf) + _0x6c88[139]}else {_0xd3a1xe-= 6;this[_0x6c88[141]][_0x6c88[17]][_0x6c88[155]]= (_0xd3a1xe- _0xd3a1xf)+ _0x6c88[139]}}else {if(this[_0x6c88[141]]!= null&& this[_0x6c88[141]][_0x6c88[33]]!= null){this[_0x6c88[141]][_0x6c88[17]][_0x6c88[129]]= _0x6c88[156]}};this[_0x6c88[114]][_0x6c88[17]][_0x6c88[127]]= _0xd3a1xe+ _0x6c88[139];var _0xd3a1x10=-Math[_0x6c88[158]](0,_0xd3a1xc[_0x6c88[157]]- this[_0x6c88[99]]);var _0xd3a1x11=-Math[_0x6c88[158]](0,_0xd3a1xc[_0x6c88[159]]- this[_0x6c88[99]]);var _0xd3a1x12=this[_0x6c88[2]][_0x6c88[160]]+ this[_0x6c88[1]][_0x6c88[161]]+ 3;var _0xd3a1x13=Math[_0x6c88[164]](0,(this[_0x6c88[2]][_0x6c88[162]]+ _0xd3a1x7[_0x6c88[162]]- this[_0x6c88[2]][_0x6c88[163]]- _0xd3a1xe/ 2+ 16));if(mxClient[_0x6c88[120]]){this[_0x6c88[117]][_0x6c88[119]][_0x6c88[121]][_0x6c88[169]](_0x6c88[165],_0x6c88[166]+ _0xd3a1x10+ _0x6c88[167]+ _0xd3a1x11+ _0x6c88[168])}else {this[_0x6c88[117]][_0x6c88[119]][_0x6c88[171]][_0x6c88[17]][_0x6c88[170]]= _0xd3a1x10+ _0x6c88[139];this[_0x6c88[117]][_0x6c88[119]][_0x6c88[171]][_0x6c88[17]][_0x6c88[155]]= _0xd3a1x11+ _0x6c88[139]};_0xd3a1x12+= document[_0x6c88[174]](_0x6c88[173])[_0x6c88[172]];_0xd3a1x13+= 90;this[_0x6c88[114]][_0x6c88[17]][_0x6c88[19]]= _0x6c88[20];this[_0x6c88[114]][_0x6c88[17]][_0x6c88[170]]= _0xd3a1x12+ _0x6c88[139];this[_0x6c88[114]][_0x6c88[17]][_0x6c88[155]]= _0xd3a1x13+ _0x6c88[139];this[_0x6c88[123]][_0x6c88[17]][_0x6c88[170]]= (_0xd3a1x12- 13)+ _0x6c88[139];this[_0x6c88[123]][_0x6c88[17]][_0x6c88[155]]= (_0xd3a1x13+ _0xd3a1xe/ 2- 13)+ _0x6c88[139]});if(this[_0x6c88[114]]!= null&& this[_0x6c88[114]][_0x6c88[17]][_0x6c88[129]]!= _0x6c88[156]){_0xd3a1xb()}else {this[_0x6c88[112]]= window[_0x6c88[175]](_0xd3a1xb,this[_0x6c88[101]])};this[_0x6c88[32]]= _0xd3a1x7}}};Sidebar[_0x6c88[40]][_0x6c88[29]]= function(){if(this[_0x6c88[112]]!= null){window[_0x6c88[113]](this[_0x6c88[112]]);this[_0x6c88[112]]= null};if(this[_0x6c88[114]]!= null){this[_0x6c88[114]][_0x6c88[17]][_0x6c88[129]]= _0x6c88[156];this[_0x6c88[123]][_0x6c88[17]][_0x6c88[16]]= _0x6c88[18];this[_0x6c88[32]]= null}};Sidebar[_0x6c88[40]][_0x6c88[176]]= function(_0xd3a1x14){var _0xd3a1x7=document[_0x6c88[7]](_0x6c88[177]);_0xd3a1x7[_0x6c88[169]](_0x6c88[178],_0x6c88[179]);_0xd3a1x7[_0x6c88[115]]= _0x6c88[180];mxUtils[_0x6c88[152]](_0xd3a1x7,_0xd3a1x14);return _0xd3a1x7};Sidebar[_0x6c88[40]][_0x6c88[181]]= function(_0xd3a1x8,_0xd3a1xd,_0xd3a1xe,_0xd3a1x15,_0xd3a1x9,_0xd3a1xa){this[_0x6c88[5]][_0x6c88[131]]= (_0xd3a1xa== null|| _0xd3a1xa);this[_0x6c88[5]][_0x6c88[119]][_0x6c88[182]](1,0,0);this[_0x6c88[5]][_0x6c88[134]](_0xd3a1x8);var _0xd3a1xc=this[_0x6c88[5]][_0x6c88[135]]();var _0xd3a1x16=this[_0x6c88[100]];var _0xd3a1x17=Math[_0x6c88[158]]((_0xd3a1xd- 2)/ (_0xd3a1xc[_0x6c88[125]]- _0xd3a1xc[_0x6c88[157]]+ _0xd3a1x16),(_0xd3a1xe- 2)/ (_0xd3a1xc[_0x6c88[127]]- _0xd3a1xc[_0x6c88[159]]+ _0xd3a1x16));var _0xd3a1x10=-Math[_0x6c88[158]](_0xd3a1xc[_0x6c88[157]],0);var _0xd3a1x11=-Math[_0x6c88[158]](_0xd3a1xc[_0x6c88[159]],0);this[_0x6c88[5]][_0x6c88[119]][_0x6c88[182]](_0xd3a1x17,_0xd3a1x10,_0xd3a1x11);_0xd3a1xc= this[_0x6c88[5]][_0x6c88[135]]();var _0xd3a1x18=Math[_0x6c88[164]](0,Math[_0x6c88[183]]((_0xd3a1xd- _0xd3a1xc[_0x6c88[125]]- _0xd3a1xc[_0x6c88[157]])/ 2));var _0xd3a1xf=Math[_0x6c88[164]](0,Math[_0x6c88[183]]((_0xd3a1xe- _0xd3a1xc[_0x6c88[127]]- _0xd3a1xc[_0x6c88[159]])/ 2));var _0xd3a1x19=null;if(this[_0x6c88[5]][_0x6c88[184]]== mxConstants[_0x6c88[185]]&& !mxClient[_0x6c88[186]]){_0xd3a1x19= this[_0x6c88[5]][_0x6c88[119]][_0x6c88[189]]()[_0x6c88[188]][_0x6c88[187]](true)}else {_0xd3a1x19= this[_0x6c88[5]][_0x6c88[2]][_0x6c88[187]](false);_0xd3a1x19[_0x6c88[150]]= this[_0x6c88[5]][_0x6c88[2]][_0x6c88[150]]};this[_0x6c88[5]][_0x6c88[190]]()[_0x6c88[132]]();if(mxClient[_0x6c88[191]]){_0xd3a1x15[_0x6c88[17]][_0x6c88[192]]= _0x6c88[193]+ this[_0x6c88[1]][_0x6c88[9]][_0x6c88[194]]+ _0x6c88[168]};var _0xd3a1x1a=3;_0xd3a1x19[_0x6c88[17]][_0x6c88[19]]= _0x6c88[122];_0xd3a1x19[_0x6c88[17]][_0x6c88[137]]= _0x6c88[18];_0xd3a1x19[_0x6c88[17]][_0x6c88[195]]= _0x6c88[196];_0xd3a1x19[_0x6c88[17]][_0x6c88[170]]= (_0xd3a1x18+ _0xd3a1x1a)+ _0x6c88[139];_0xd3a1x19[_0x6c88[17]][_0x6c88[155]]= (_0xd3a1xf+ _0xd3a1x1a)+ _0x6c88[139];_0xd3a1x19[_0x6c88[17]][_0x6c88[125]]= _0xd3a1xd+ _0x6c88[139];_0xd3a1x19[_0x6c88[17]][_0x6c88[127]]= _0xd3a1xe+ _0x6c88[139];_0xd3a1x19[_0x6c88[17]][_0x6c88[16]]= _0x6c88[151];_0xd3a1x19[_0x6c88[17]][_0x6c88[197]]= _0x6c88[151];_0xd3a1x19[_0x6c88[17]][_0x6c88[198]]= _0x6c88[151];_0xd3a1x15[_0x6c88[21]](_0xd3a1x19);if(this[_0x6c88[109]]&& _0xd3a1x9!= null){var _0xd3a1x1b=(mxClient[_0x6c88[136]])?2* this[_0x6c88[107]]+ 2:0;_0xd3a1x15[_0x6c88[17]][_0x6c88[127]]= (this[_0x6c88[106]]+ _0xd3a1x1b+ this[_0x6c88[108]]+ 8)+ _0x6c88[139];var _0xd3a1x1c=document[_0x6c88[7]](_0x6c88[6]);_0xd3a1x1c[_0x6c88[17]][_0x6c88[199]]= this[_0x6c88[108]]+ _0x6c88[139];_0xd3a1x1c[_0x6c88[17]][_0x6c88[144]]= _0x6c88[145];_0xd3a1x1c[_0x6c88[17]][_0x6c88[200]]= _0x6c88[201];if(mxClient[_0x6c88[202]]){_0xd3a1x1c[_0x6c88[17]][_0x6c88[127]]= (this[_0x6c88[108]]+ 12)+ _0x6c88[139]};_0xd3a1x1c[_0x6c88[17]][_0x6c88[147]]= _0x6c88[203];mxUtils[_0x6c88[152]](_0xd3a1x1c,_0xd3a1x9);_0xd3a1x15[_0x6c88[21]](_0xd3a1x1c)}};Sidebar[_0x6c88[40]][_0x6c88[204]]= function(_0xd3a1x8,_0xd3a1x9,_0xd3a1xa){var _0xd3a1x7=document[_0x6c88[7]](_0x6c88[177]);_0xd3a1x7[_0x6c88[169]](_0x6c88[178],_0x6c88[179]);_0xd3a1x7[_0x6c88[115]]= _0x6c88[205];_0xd3a1x7[_0x6c88[17]][_0x6c88[137]]= _0x6c88[18];var _0xd3a1x1b=(mxClient[_0x6c88[136]])?8+ 2* this[_0x6c88[107]]:6;_0xd3a1x7[_0x6c88[17]][_0x6c88[125]]= (this[_0x6c88[105]]+ _0xd3a1x1b)+ _0x6c88[139];_0xd3a1x7[_0x6c88[17]][_0x6c88[127]]= (this[_0x6c88[106]]+ _0xd3a1x1b)+ _0x6c88[139];_0xd3a1x7[_0x6c88[17]][_0x6c88[206]]= this[_0x6c88[107]]+ _0x6c88[139];mxEvent[_0x6c88[26]](_0xd3a1x7,_0x6c88[207],function(_0xd3a1x4){mxEvent[_0x6c88[208]](_0xd3a1x4)});this[_0x6c88[181]](_0xd3a1x8,this[_0x6c88[105]],this[_0x6c88[106]],_0xd3a1x7,_0xd3a1x9,_0xd3a1xa);return _0xd3a1x7};Sidebar[_0x6c88[40]][_0x6c88[209]]= function(_0xd3a1x8,_0xd3a1x1d){return function(_0xd3a1x1e,_0xd3a1x4,_0xd3a1x1f,_0xd3a1x20,_0xd3a1x21){if(_0xd3a1x1e[_0x6c88[210]]()){_0xd3a1x8= _0xd3a1x1e[_0x6c88[211]](_0xd3a1x8);if(_0xd3a1x8[_0x6c88[140]]> 0){var _0xd3a1x22=(_0xd3a1x1f!= null)?_0xd3a1x1e[_0x6c88[212]](_0xd3a1x1f,_0xd3a1x8,_0xd3a1x4):false;var _0xd3a1x23=null;if(_0xd3a1x1f!= null&& !_0xd3a1x22){_0xd3a1x1f= null};if(_0xd3a1x1d&& _0xd3a1x1e[_0x6c88[213]]()&& _0xd3a1x1e[_0x6c88[214]](_0xd3a1x1f,_0xd3a1x8,_0xd3a1x4)){_0xd3a1x1e[_0x6c88[215]](_0xd3a1x1f,_0xd3a1x8,null,_0xd3a1x20,_0xd3a1x21);_0xd3a1x23= _0xd3a1x8}else {if(_0xd3a1x8[_0x6c88[140]]> 0){_0xd3a1x23= _0xd3a1x1e[_0x6c88[216]](_0xd3a1x8,_0xd3a1x20,_0xd3a1x21,_0xd3a1x1f)}};if(_0xd3a1x23!= null&& _0xd3a1x23[_0x6c88[140]]> 0){_0xd3a1x1e[_0x6c88[217]](_0xd3a1x23[0]);_0xd3a1x1e[_0x6c88[218]](_0xd3a1x23)}}}}};Sidebar[_0x6c88[40]][_0x6c88[219]]= function(_0xd3a1xd,_0xd3a1xe){var _0xd3a1x7=document[_0x6c88[7]](_0x6c88[6]);_0xd3a1x7[_0x6c88[17]][_0x6c88[220]]= _0x6c88[221];_0xd3a1x7[_0x6c88[17]][_0x6c88[125]]= _0xd3a1xd+ _0x6c88[139];_0xd3a1x7[_0x6c88[17]][_0x6c88[127]]= _0xd3a1xe+ _0x6c88[139];return _0xd3a1x7};Sidebar[_0x6c88[40]][_0x6c88[222]]= function(_0xd3a1x7,_0xd3a1x24,_0xd3a1x25){var _0xd3a1x26=mxUtils[_0x6c88[224]](_0xd3a1x7,this[_0x6c88[1]][_0x6c88[9]][_0x6c88[5]],_0xd3a1x24,_0xd3a1x25,0,0,this[_0x6c88[1]][_0x6c88[9]][_0x6c88[5]][_0x6c88[223]],true,true);_0xd3a1x26[_0x6c88[225]]= function(_0xd3a1x1e,_0xd3a1x20,_0xd3a1x21){var _0xd3a1x1f=mxDragSource[_0x6c88[40]][_0x6c88[225]][_0x6c88[226]](this,arguments);if(!_0xd3a1x1e[_0x6c88[227]](_0xd3a1x1f)){_0xd3a1x1f= null};return _0xd3a1x1f};return _0xd3a1x26};Sidebar[_0x6c88[40]][_0x6c88[228]]= function(_0xd3a1x7,_0xd3a1x27){var _0xd3a1x1e=this[_0x6c88[1]][_0x6c88[9]][_0x6c88[5]];var _0xd3a1x28=null;mxEvent[_0x6c88[231]](_0xd3a1x7,function(_0xd3a1x4){_0xd3a1x28= new mxPoint(mxEvent[_0x6c88[229]](_0xd3a1x4),mxEvent[_0x6c88[230]](_0xd3a1x4))});var _0xd3a1x29=_0xd3a1x27[_0x6c88[232]];_0xd3a1x27[_0x6c88[232]]= function(_0xd3a1x4){if(!mxEvent[_0x6c88[233]](_0xd3a1x4)&& this[_0x6c88[234]]== null&& _0xd3a1x28!= null){var _0xd3a1x2a=_0xd3a1x1e[_0x6c88[235]];if(Math[_0x6c88[236]](_0xd3a1x28[_0x6c88[157]]- mxEvent[_0x6c88[229]](_0xd3a1x4))<= _0xd3a1x2a&& Math[_0x6c88[236]](_0xd3a1x28[_0x6c88[159]]- mxEvent[_0x6c88[230]](_0xd3a1x4))<= _0xd3a1x2a){var _0xd3a1x2b=_0xd3a1x1e[_0x6c88[237]]();_0xd3a1x27[_0x6c88[238]](_0xd3a1x1e,_0xd3a1x4,null,_0xd3a1x2b,_0xd3a1x2b)}};_0xd3a1x29[_0x6c88[226]](this,arguments);_0xd3a1x28= null}};Sidebar[_0x6c88[40]][_0x6c88[239]]= function(_0xd3a1x2c,_0xd3a1x14,_0xd3a1x2d,_0xd3a1x2e){var _0xd3a1x2f=mxUtils[_0x6c88[239]]();var _0xd3a1x19=_0xd3a1x2f[_0x6c88[7]](_0xd3a1x2c);_0xd3a1x19[_0x6c88[169]](_0x6c88[240],_0xd3a1x14);_0xd3a1x2d[_0x6c88[241]](function(_0xd3a1x30,_0xd3a1x31){_0xd3a1x19[_0x6c88[169]](_0xd3a1x30,_0xd3a1x2e[_0xd3a1x31]?_0xd3a1x2e[_0xd3a1x31]:_0x6c88[151])});return _0xd3a1x19};Sidebar[_0x6c88[40]][_0x6c88[242]]= function(_0xd3a1x32,_0xd3a1xd,_0xd3a1xe,_0xd3a1x33,_0xd3a1x9,_0xd3a1xa){var _0xd3a1x2d=[];var _0xd3a1x2e=[];switch(_0xd3a1x33){case _0x6c88[52]:break;case _0x6c88[46]:_0xd3a1x2d= [_0x6c88[52]];_0xd3a1x2e= [_0x6c88[243]];break;case _0x6c88[79]:_0xd3a1x2d= [_0x6c88[244],_0x6c88[133],_0x6c88[245],_0x6c88[246],_0x6c88[247],_0x6c88[248]];_0xd3a1x2e= [_0x6c88[151],0,_0x6c88[249],1,_0x6c88[250],true];break;case _0x6c88[63]:_0xd3a1x2d= [_0x6c88[251],_0x6c88[252]];_0xd3a1x2e= [_0x6c88[253]];break;case _0x6c88[258]:_0xd3a1x2d= [_0x6c88[251],_0x6c88[254],_0x6c88[255]];_0xd3a1x2e= [_0x6c88[253],_0x6c88[256],_0x6c88[257]];break;case _0x6c88[65]:_0xd3a1x2d= [_0x6c88[251],_0x6c88[254],_0x6c88[255],_0x6c88[259],_0x6c88[260]];_0xd3a1x2e= [_0x6c88[253],_0x6c88[256],_0x6c88[257],_0x6c88[257],_0x6c88[253]];break;case _0x6c88[71]:_0xd3a1x2d= [_0x6c88[251],_0x6c88[254],_0x6c88[261],_0x6c88[262],_0x6c88[259],_0x6c88[260]];_0xd3a1x2e= [_0x6c88[253],_0x6c88[256],_0x6c88[257],_0x6c88[263],_0x6c88[257],_0x6c88[253]];break;case _0x6c88[72]:_0xd3a1x2d= [_0x6c88[251],_0x6c88[254],_0x6c88[261],_0x6c88[262],_0x6c88[259],_0x6c88[264],_0x6c88[265],_0x6c88[260]];_0xd3a1x2e= [_0x6c88[253],_0x6c88[256],_0x6c88[257],_0x6c88[263],_0x6c88[257],_0x6c88[253],_0x6c88[266],_0x6c88[253]];break;case _0x6c88[97]:_0xd3a1x2d= [_0x6c88[267],_0x6c88[268]];_0xd3a1x2e= [_0x6c88[151],_0x6c88[151]];break;case _0x6c88[61]:_0xd3a1x2d= [_0x6c88[260],_0x6c88[269]];_0xd3a1x2e= [_0x6c88[253],_0x6c88[151]];break;case _0x6c88[78]:_0xd3a1x2d= [_0x6c88[270],_0x6c88[271],_0x6c88[260]];_0xd3a1x2e= [_0x6c88[253],_0x6c88[151],_0x6c88[253]];break;case _0x6c88[93]:_0xd3a1x2d= [_0x6c88[272]];_0xd3a1x2e= [];break;case _0x6c88[84]:_0xd3a1x2d= [_0x6c88[273],_0x6c88[274]];_0xd3a1x2e= [];break;case _0x6c88[94]:_0xd3a1x2d= [_0x6c88[260],_0x6c88[275]];_0xd3a1x2e= [];break;case _0x6c88[95]:_0xd3a1x2d= [_0x6c88[276],_0x6c88[275]];_0xd3a1x2e= [];break;case _0x6c88[85]:_0xd3a1x2d= [_0x6c88[277]];_0xd3a1x2e= [];break;case _0x6c88[86]:_0xd3a1x2d= [_0x6c88[278]];_0xd3a1x2e= [_0x6c88[253]];break;case _0x6c88[279]:_0xd3a1x2d= [_0x6c88[278]];_0xd3a1x2e= [_0x6c88[253]];break;case _0x6c88[87]:_0xd3a1x2d= [_0x6c88[260]];_0xd3a1x2e= [_0x6c88[253]];break;case _0x6c88[66]:_0xd3a1x2d= [_0x6c88[280],_0x6c88[281]];_0xd3a1x2e= [_0x6c88[151],_0x6c88[250]];break;case _0x6c88[67]:_0xd3a1x2d= [_0x6c88[282],_0x6c88[281]];_0xd3a1x2e= [_0x6c88[151],_0x6c88[250]];break;case _0x6c88[68]:_0xd3a1x2d= [_0x6c88[283],_0x6c88[281]];_0xd3a1x2e= [_0x6c88[151],_0x6c88[250]];break;case _0x6c88[75]:_0xd3a1x2d= [_0x6c88[284],_0x6c88[285],_0x6c88[246],_0x6c88[281]];_0xd3a1x2e= [_0x6c88[151],_0x6c88[286],_0x6c88[287],_0x6c88[250]];break;case _0x6c88[54]:_0xd3a1x2d= [_0x6c88[288],_0x6c88[246],_0x6c88[97],_0x6c88[289]];_0xd3a1x2e= [_0x6c88[253],_0x6c88[290]];break;case _0x6c88[55]:_0xd3a1x2d= [_0x6c88[291],_0x6c88[292],_0x6c88[246],_0x6c88[252],_0x6c88[289]];_0xd3a1x2e= [_0x6c88[151],_0x6c88[287],_0x6c88[290]];break;case _0x6c88[69]:_0xd3a1x2d= [_0x6c88[283],_0x6c88[293]];_0xd3a1x2e= [_0x6c88[151],_0x6c88[294]];break;case _0x6c88[70]:_0xd3a1x2d= [_0x6c88[283],_0x6c88[244],_0x6c88[295],_0x6c88[296],_0x6c88[247]];_0xd3a1x2e= [_0x6c88[151],_0x6c88[151],_0x6c88[297],_0x6c88[253],_0x6c88[250]];break;case _0x6c88[56]:_0xd3a1x2d= [_0x6c88[298],_0x6c88[252],_0x6c88[289],_0x6c88[251],_0x6c88[246],_0x6c88[95],_0x6c88[299],_0x6c88[300],_0x6c88[19]];_0xd3a1x2e= [_0x6c88[287],_0x6c88[151],_0x6c88[151],_0x6c88[253],_0x6c88[301]];break;case _0x6c88[57]:_0xd3a1x2d= [_0x6c88[302],_0x6c88[268]];_0xd3a1x2e= [_0x6c88[151],_0x6c88[151]];break;case _0x6c88[96]:_0xd3a1x2d= [_0x6c88[303]];_0xd3a1x2e= [_0x6c88[253]];break;case _0x6c88[62]:_0xd3a1x2d= [_0x6c88[304],_0x6c88[260]];_0xd3a1x2e= [_0x6c88[151],_0x6c88[253]];break;case _0x6c88[313]:_0xd3a1x2d= [_0x6c88[305],_0x6c88[306],_0x6c88[307],_0x6c88[308],_0x6c88[309],_0x6c88[310],_0x6c88[311],_0x6c88[312]];_0xd3a1x2e= [];break;case _0x6c88[90]:_0xd3a1x2d= [_0x6c88[314]];_0xd3a1x2e= [];break;case _0x6c88[58]:_0xd3a1x2d= [_0x6c88[315],_0x6c88[291],_0x6c88[316],_0x6c88[317]];_0xd3a1x2e= [_0x6c88[151],_0x6c88[318],_0x6c88[253],_0x6c88[256]];break;case _0x6c88[80]:_0xd3a1x2d= [_0x6c88[319],_0x6c88[320],_0x6c88[321]];_0xd3a1x2e= [_0x6c88[253]];break;case _0x6c88[81]:_0xd3a1x2d= [_0x6c88[319],_0x6c88[322],_0x6c88[320],_0x6c88[323],_0x6c88[324],_0x6c88[283]];_0xd3a1x2e= [_0x6c88[253]];break;default:_0xd3a1x2d= [];_0xd3a1x2e= [];break};var _0xd3a1x19=this[_0x6c88[239]](_0xd3a1x33,_0xd3a1x9,_0xd3a1x2d,_0xd3a1x2e);var _0xd3a1x8=[ new mxCell(_0xd3a1x19, new mxGeometry(0,0,_0xd3a1xd,_0xd3a1xe),_0xd3a1x32)];_0xd3a1x8[0][_0x6c88[325]]= true;return this[_0x6c88[326]](_0xd3a1x8,_0xd3a1xd,_0xd3a1xe,_0xd3a1x9,_0xd3a1xa)};Sidebar[_0x6c88[40]][_0x6c88[326]]= function(_0xd3a1x8,_0xd3a1xd,_0xd3a1xe,_0xd3a1x9,_0xd3a1xa){var _0xd3a1x7=this[_0x6c88[204]](_0xd3a1x8,_0xd3a1x9,_0xd3a1xa);var _0xd3a1x27=this[_0x6c88[222]](_0xd3a1x7,this[_0x6c88[209]](_0xd3a1x8,true),this[_0x6c88[219]](_0xd3a1xd,_0xd3a1xe));this[_0x6c88[228]](_0xd3a1x7,_0xd3a1x27);_0xd3a1x27[_0x6c88[327]]= mxUtils[_0x6c88[25]](this,function(){return this[_0x6c88[1]][_0x6c88[9]][_0x6c88[5]][_0x6c88[329]][_0x6c88[328]]});if(!touchStyle){mxEvent[_0x6c88[26]](_0xd3a1x7,_0x6c88[30],mxUtils[_0x6c88[25]](this,function(_0xd3a1x4){this[_0x6c88[111]](_0xd3a1x7,_0xd3a1x8,_0xd3a1x9,_0xd3a1xa)}))};return _0xd3a1x7};Sidebar[_0x6c88[40]][_0x6c88[330]]= function(_0xd3a1x32,_0xd3a1xd,_0xd3a1xe,_0xd3a1x33,_0xd3a1x9,_0xd3a1xa){var _0xd3a1x8=[ new mxCell((_0xd3a1x33!= null)?_0xd3a1x33:_0x6c88[151], new mxGeometry(0,0,_0xd3a1xd,_0xd3a1xe),_0xd3a1x32)];_0xd3a1x8[0][_0x6c88[332]][_0x6c88[331]]( new mxPoint(0,_0xd3a1xe),true);_0xd3a1x8[0][_0x6c88[332]][_0x6c88[331]]( new mxPoint(_0xd3a1xd,0),false);_0xd3a1x8[0][_0x6c88[332]][_0x6c88[122]]= true;_0xd3a1x8[0][_0x6c88[333]]= true;return this[_0x6c88[334]](_0xd3a1x8,_0xd3a1xd,_0xd3a1xe,_0xd3a1x9,_0xd3a1xa)};Sidebar[_0x6c88[40]][_0x6c88[334]]= function(_0xd3a1x8,_0xd3a1xd,_0xd3a1xe,_0xd3a1x9,_0xd3a1xa){var _0xd3a1x7=this[_0x6c88[204]](_0xd3a1x8,_0xd3a1x9,_0xd3a1xa);this[_0x6c88[222]](_0xd3a1x7,this[_0x6c88[209]](_0xd3a1x8,false),this[_0x6c88[219]](_0xd3a1xd,_0xd3a1xe));var _0xd3a1x1e=this[_0x6c88[1]][_0x6c88[9]][_0x6c88[5]];mxEvent[_0x6c88[26]](_0xd3a1x7,_0x6c88[207],mxUtils[_0x6c88[25]](this,function(_0xd3a1x4){if(this[_0x6c88[102]]){_0xd3a1x1e[_0x6c88[335]](_0xd3a1x8[0])};_0xd3a1x7[_0x6c88[17]][_0x6c88[336]]= _0x6c88[337];window[_0x6c88[175]](function(){_0xd3a1x7[_0x6c88[17]][_0x6c88[336]]= _0x6c88[151]},300);mxEvent[_0x6c88[208]](_0xd3a1x4)}));if(!touchStyle){mxEvent[_0x6c88[26]](_0xd3a1x7,_0x6c88[30],mxUtils[_0x6c88[25]](this,function(_0xd3a1x4){this[_0x6c88[111]](_0xd3a1x7,_0xd3a1x8,_0xd3a1x9,_0xd3a1xa)}))};return _0xd3a1x7};Sidebar[_0x6c88[40]][_0x6c88[338]]= function(_0xd3a1x34,_0xd3a1x9,_0xd3a1x35,_0xd3a1x36){var _0xd3a1x7=this[_0x6c88[176]](_0xd3a1x9);this[_0x6c88[2]][_0x6c88[21]](_0xd3a1x7);var _0xd3a1x1c=document[_0x6c88[7]](_0x6c88[6]);_0xd3a1x1c[_0x6c88[115]]= _0x6c88[339];if(_0xd3a1x35){_0xd3a1x36(_0xd3a1x1c);_0xd3a1x36= null}else {_0xd3a1x1c[_0x6c88[17]][_0x6c88[129]]= _0x6c88[156]};this[_0x6c88[340]](_0xd3a1x7,_0xd3a1x1c,_0xd3a1x36);var _0xd3a1x37=document[_0x6c88[7]](_0x6c88[6]);_0xd3a1x37[_0x6c88[21]](_0xd3a1x1c);this[_0x6c88[2]][_0x6c88[21]](_0xd3a1x37);if(_0xd3a1x34!= null){this[_0x6c88[3]][_0xd3a1x34]= [_0xd3a1x7,_0xd3a1x37]}};Sidebar[_0x6c88[40]][_0x6c88[340]]= function(_0xd3a1x9,_0xd3a1x38,_0xd3a1x39){var _0xd3a1x3a=false;_0xd3a1x9[_0x6c88[17]][_0x6c88[192]]= (_0xd3a1x38[_0x6c88[17]][_0x6c88[129]]== _0x6c88[156])?_0x6c88[193]+ IMAGE_PATH+ _0x6c88[341]:_0x6c88[193]+ IMAGE_PATH+ _0x6c88[342];_0xd3a1x9[_0x6c88[17]][_0x6c88[343]]= _0x6c88[344];_0xd3a1x9[_0x6c88[17]][_0x6c88[345]]= _0x6c88[346];mxEvent[_0x6c88[26]](_0xd3a1x9,_0x6c88[207],function(_0xd3a1x4){if(_0xd3a1x38[_0x6c88[17]][_0x6c88[129]]== _0x6c88[156]){if(!_0xd3a1x3a){_0xd3a1x3a= true;if(_0xd3a1x39!= null){_0xd3a1x9[_0x6c88[17]][_0x6c88[195]]= _0x6c88[347];window[_0x6c88[175]](function(){_0xd3a1x39(_0xd3a1x38);_0xd3a1x9[_0x6c88[17]][_0x6c88[195]]= _0x6c88[151]},0)}};_0xd3a1x9[_0x6c88[17]][_0x6c88[192]]= _0x6c88[193]+ IMAGE_PATH+ _0x6c88[342];_0xd3a1x38[_0x6c88[17]][_0x6c88[129]]= _0x6c88[130]}else {_0xd3a1x9[_0x6c88[17]][_0x6c88[192]]= _0x6c88[193]+ IMAGE_PATH+ _0x6c88[341];_0xd3a1x38[_0x6c88[17]][_0x6c88[129]]= _0x6c88[156]};mxEvent[_0x6c88[208]](_0xd3a1x4)})};Sidebar[_0x6c88[40]][_0x6c88[348]]= function(_0xd3a1x34){var _0xd3a1x3b=this[_0x6c88[3]][_0xd3a1x34];if(_0xd3a1x3b!= null){this[_0x6c88[3]][_0xd3a1x34]= null;for(var _0xd3a1x3c=0;_0xd3a1x3c< _0xd3a1x3b[_0x6c88[140]];_0xd3a1x3c++){this[_0x6c88[2]][_0x6c88[349]](_0xd3a1x3b[_0xd3a1x3c])};return true};return false};Sidebar[_0x6c88[40]][_0x6c88[49]]= function(_0xd3a1x34,_0xd3a1x9,_0xd3a1x3d,_0xd3a1x3e,_0xd3a1x3f,_0xd3a1x40){this[_0x6c88[338]](_0xd3a1x34,_0xd3a1x9,(_0xd3a1x34=== _0x6c88[42]),mxUtils[_0x6c88[25]](this,function(_0xd3a1x38){var _0xd3a1x41=_0xd3a1x40!= null;for(var _0xd3a1x3c=0;_0xd3a1x3c< _0xd3a1x3f[_0x6c88[140]];_0xd3a1x3c++){var _0xd3a1x42=_0xd3a1x3d+ _0xd3a1x3f[_0xd3a1x3c]+ _0xd3a1x3e;_0xd3a1x38[_0x6c88[21]](this[_0x6c88[242]](_0x6c88[350]+ _0xd3a1x42,80,80,_0xd3a1x3f[_0xd3a1x3c],(_0xd3a1x41)?_0xd3a1x40[_0xd3a1x3c]:null,_0xd3a1x41))}}))} \ No newline at end of file +'use strict'; + +/** + * Construcs a new sidebar for the given editor. + */ +function Sidebar(editorUi, container) { + this.editorUi = editorUi; + this.container = container; + this.palettes = new Object(); + this.showTooltips = true; + this.graph = new Graph(document.createElement('div'), null, null, this.editorUi + .editor.graph.getStylesheet()); + this.graph.resetViewOnRootChange = false; + this.graph.foldingEnabled = false; + this.graph.setConnectable(false); + this.graph.autoScroll = false; + this.graph.setTooltips(false); + this.graph.setEnabled(false); + + // Container must be in the DOM for correct HTML rendering + this.graph.container.style.visibility = 'hidden'; + this.graph.container.style.position = 'absolute'; + document.body.appendChild(this.graph.container); + + if (!mxClient.IS_TOUCH) { + mxEvent.addListener(document, 'mouseup', mxUtils.bind(this, function() { + this.showTooltips = true; + })); + + // Enables tooltips after scroll + mxEvent.addListener(container, 'scroll', mxUtils.bind(this, function() { + this.showTooltips = true; + })); + + mxEvent.addListener(document, 'mousedown', mxUtils.bind(this, function() { + this.showTooltips = false; + this.hideTooltip(); + })); + + mxEvent.addListener(document, 'mousemove', mxUtils.bind(this, function(evt) { + var src = mxEvent.getSource(evt); + + while (src != null) { + if (src == this.currentElt) { + return; + } + + src = src.parentNode; + } + + this.hideTooltip(); + })); + + // Handles mouse leaving the window + mxEvent.addListener(document, 'mouseout', mxUtils.bind(this, function(evt) { + if (evt.toElement == null && evt.relatedTarget == null) { + this.hideTooltip(); + } + })); + } + + this.init(); + + // Pre-fetches tooltip image + new Image().src = IMAGE_PATH + '/tooltip.png'; +}; + +/** + * Adds all palettes to the sidebar. + */ +Sidebar.prototype.init = function() { + var dir = STENCIL_PATH; + console.log(dir); + + this.addImagePalette('entry', mxResources.get('entry'), dir + '/entry/', + '_128x128.png', ['start', 'finally', 'end'], [mxResources.get('start'), + mxResources.get('finally'), mxResources.get('end') + ]); + this.addImagePalette('call_management', mxResources.get('call_management'), + dir + '/call_management/', '_128x128.png', ['answer', 'hangup', 'dial', + 'ext_dial', 'queue', 'voicemail', 'callback' + ], [mxResources.get('answer'), mxResources.get('hangup'), mxResources.get( + 'dial'), mxResources.get('ext_dial'), mxResources.get('queue'), + mxResources.get('voicemail'), mxResources.get('callback') + ]); + this.addImagePalette('variable', mxResources.get('variable'), dir + + '/variable/', '_128x128.png', ['set', 'math'], [mxResources.get('set'), + mxResources.get('math') + ]); + this.addImagePalette('playback', mxResources.get('playback'), dir + + '/playback/', '_128x128.png', ['playback', 'menu', + 'saydigits', 'saynumber', 'sayphonetic', 'tts', 'ispeechtts', 'getdigits', 'getsecretdigits' + ], [mxResources.get('playback'), mxResources + .get('menu'), mxResources.get('saydigits'), mxResources.get('saynumber'), + mxResources.get('sayphonetic'), mxResources.get('tts'), mxResources.get( + 'ispeechtts'), mxResources.get('getdigits'), mxResources.get('getsecretdigits') + ]); + this.addImagePalette('recording', mxResources.get('recording'), dir + + '/recording/', '_128x128.png', ['record'], [mxResources.get('record')]); + this.addImagePalette('integrationServer', mxResources.get('integrationServer'), + dir + '/integration_server/', '_128x128.png', ['database', 'ispeechasr', + 'sendSMS', 'sendMail' + ], [ + mxResources.get('database'), mxResources.get('ispeechasr'), mxResources.get( + 'sendSMS'), mxResources.get( + 'sendMail') + ]); + this.addImagePalette('callflow', mxResources.get('callflow'), dir + + '/callflow/', '_128x128.png', ['gotoc', 'gotoif', 'gotoiftime', 'vswitch'], [ + mxResources.get('gotoc'), mxResources.get('gotoif'), mxResources.get( + 'gotoiftime'), mxResources.get('vswitch') + ]); + this.addImagePalette('stats', mxResources.get('stats'), dir + '/stats/', + '_128x128.png', [ + // 'queuelog', + 'goal' + ], [ + // mxResources.get('queuelog'), + mxResources.get('goal') + ]); + this.addImagePalette('general', mxResources.get('general'), dir + '/general/', + '_128x128.png', ['noop', 'system', 'agi', 'subproject', 'custom_app'], [ + mxResources.get( + 'noop'), mxResources.get('system'), mxResources.get('agi'), mxResources.get( + 'subproject'), mxResources.get( + 'custom_app') + ]); + +}; + +/** + * Specifies if tooltips should be visible. Default is true. + */ +Sidebar.prototype.enableTooltips = !mxClient.IS_TOUCH; + +/** + * Specifies the delay for the tooltip. Default is 16 px. + */ +Sidebar.prototype.tooltipBorder = 16; + +/** + * Specifies the delay for the tooltip. Default is 3 px. + */ +Sidebar.prototype.thumbBorder = 3; + +/** + * Specifies the delay for the tooltip. Default is 300 ms. + */ +Sidebar.prototype.tooltipDelay = 300; + +/** + * Specifies if edges should be used as templates if clicked. Default is true. + */ +Sidebar.prototype.installEdges = true; + +/** + * Specifies the URL of the gear image. + */ +Sidebar.prototype.gearImage = STENCIL_PATH + '/clipart/Gear_128x128.png'; + +/** + * Specifies the width of the thumbnails. + */ +Sidebar.prototype.thumbWidth = 34; + +/** + * Specifies the height of the thumbnails. + */ +Sidebar.prototype.thumbHeight = 34; + +/** + * Specifies the padding for the thumbnails. Default is 3. + */ +Sidebar.prototype.thumbPadding = 2; + +/** + * Specifies the size of the sidebar titles. + */ +Sidebar.prototype.sidebarTitleSize = 9; + +/** + * Specifies if titles in the sidebar should be enabled. + */ +Sidebar.prototype.sidebarTitles = false; + +/** + * Specifies if titles in the tooltips should be enabled. + */ +Sidebar.prototype.tooltipTitles = false; + +/** + * Adds all palettes to the sidebar. + */ +Sidebar.prototype.showTooltip = function(elt, cells, title, showLabel) { + if (this.enableTooltips && this.showTooltips) { + if (this.currentElt != elt) { + if (this.thread != null) { + window.clearTimeout(this.thread); + this.thread = null; + } + + var show = mxUtils.bind(this, function() { + // Lazy creation of the DOM nodes and graph instance + if (this.tooltip == null) { + this.tooltip = document.createElement('div'); + this.tooltip.className = 'geSidebarTooltip'; + document.body.appendChild(this.tooltip); + + this.graph2 = new Graph(this.tooltip, null, null, this.editorUi.editor.graph + .getStylesheet()); + this.graph2.view.setTranslate(this.tooltipBorder, this.tooltipBorder); + this.graph2.resetViewOnRootChange = false; + this.graph2.foldingEnabled = false; + this.graph2.autoScroll = false; + this.graph2.setTooltips(false); + this.graph2.setConnectable(false); + this.graph2.setEnabled(false); + + if (!mxClient.IS_SVG) { + this.graph2.view.canvas.style.position = 'relative'; + } + + this.tooltipImage = mxUtils.createImage(IMAGE_PATH + '/tooltip.png'); + this.tooltipImage.style.position = 'absolute'; + this.tooltipImage.style.width = '14px'; + this.tooltipImage.style.height = '27px'; + + document.body.appendChild(this.tooltipImage); + } + + this.tooltip.style.display = 'block'; + this.graph2.labelsVisible = (showLabel == null || showLabel); + this.graph2.model.clear(); + this.graph2.addCells(cells); + + var bounds = this.graph2.getGraphBounds(); + var width = bounds.width + 2 * this.tooltipBorder; + var height = bounds.height + 2 * this.tooltipBorder; + + if (mxClient.IS_QUIRKS) { + width += 4; + height += 4; + this.tooltip.style.overflow = 'hidden'; + } else { + this.tooltip.style.overflow = 'visible'; + } + + this.tooltipImage.style.visibility = 'visible'; + this.tooltip.style.width = width + 'px'; + + // Adds title for entry + if (this.tooltipTitles && title != null && title.length > 0) { + if (this.tooltipTitle == null) { + this.tooltipTitle = document.createElement('div'); + this.tooltipTitle.style.borderTop = '1px solid gray'; + this.tooltipTitle.style.textAlign = 'center'; + this.tooltipTitle.style.width = '100%'; + + // Oversize titles are cut-off currently. Should make tooltip wider later. + this.tooltipTitle.style.overflow = 'hidden'; + + if (mxClient.IS_SVG) { + this.tooltipTitle.style.paddingTop = '2px'; + } else { + this.tooltipTitle.style.position = 'absolute'; + this.tooltipTitle.style.paddingTop = '6px'; + } + + this.tooltip.appendChild(this.tooltipTitle); + } else { + this.tooltipTitle.innerHTML = ''; + } + + this.tooltipTitle.style.display = ''; + mxUtils.write(this.tooltipTitle, title); + + var dy = this.tooltipTitle.offsetHeight + 10; + height += dy; + + if (mxClient.IS_SVG) { + this.tooltipTitle.style.marginTop = (-dy) + 'px'; + } else { + height -= 6; + this.tooltipTitle.style.top = (height - dy) + 'px'; + } + } else if (this.tooltipTitle != null && this.tooltipTitle.parentNode != + null) { + this.tooltipTitle.style.display = 'none'; + } + + this.tooltip.style.height = height + 'px'; + var x0 = -Math.min(0, bounds.x - this.tooltipBorder); + var y0 = -Math.min(0, bounds.y - this.tooltipBorder); + + var left = this.container.clientWidth + this.editorUi.splitSize + 3; + var top = Math.max(0, (this.container.offsetTop + elt.offsetTop - this.container + .scrollTop - height / 2 + 16)); + + if (mxClient.IS_SVG) { + this.graph2.view.canvas.setAttribute('transform', 'translate(' + x0 + + ',' + y0 + ')'); + } else { + this.graph2.view.drawPane.style.left = x0 + 'px'; + this.graph2.view.drawPane.style.top = y0 + 'px'; + } + + // Workaround for ignored position CSS style in IE9 + // (changes to relative without the following line) + // Added width of the page-sidebar + left += document.getElementById('page-sidebar').offsetWidth; + // Added static height of the page-navbar + top += 90; + + this.tooltip.style.position = 'absolute'; + this.tooltip.style.left = left + 'px'; + this.tooltip.style.top = top + 'px'; + this.tooltipImage.style.left = (left - 13) + 'px'; + this.tooltipImage.style.top = (top + height / 2 - 13) + 'px'; + }); + + if (this.tooltip != null && this.tooltip.style.display != 'none') { + show(); + } else { + this.thread = window.setTimeout(show, this.tooltipDelay); + } + + this.currentElt = elt; + } + } +}; + +/** + * Hides the current tooltip. + */ +Sidebar.prototype.hideTooltip = function() { + if (this.thread != null) { + window.clearTimeout(this.thread); + this.thread = null; + } + + if (this.tooltip != null) { + this.tooltip.style.display = 'none'; + this.tooltipImage.style.visibility = 'hidden'; + this.currentElt = null; + } +}; + +/** + * Creates and returns the given title element. + */ +Sidebar.prototype.createTitle = function(label) { + var elt = document.createElement('a'); + elt.setAttribute('href', 'javascript:void(0);'); + elt.className = 'geTitle'; + mxUtils.write(elt, label); + + return elt; +}; + +/** + * Creates a thumbnail for the given cells. + */ +Sidebar.prototype.createThumb = function(cells, width, height, parent, title, + showLabel) { + this.graph.labelsVisible = (showLabel == null || showLabel); + this.graph.view.scaleAndTranslate(1, 0, 0); + this.graph.addCells(cells); + var bounds = this.graph.getGraphBounds(); + var corr = this.thumbBorder; + var s = Math.min((width - 2) / (bounds.width - bounds.x + corr), (height - 2) / + (bounds.height - bounds.y + corr)); + var x0 = -Math.min(bounds.x, 0); + var y0 = -Math.min(bounds.y, 0); + this.graph.view.scaleAndTranslate(s, x0, y0); + + bounds = this.graph.getGraphBounds(); + var dx = Math.max(0, Math.floor((width - bounds.width - bounds.x) / 2)); + var dy = Math.max(0, Math.floor((height - bounds.height - bounds.y) / 2)); + + var node = null; + + // For supporting HTML labels in IE9 standards mode the container is cloned instead + if (this.graph.dialect == mxConstants.DIALECT_SVG && !mxClient.NO_FO) { + node = this.graph.view.getCanvas().ownerSVGElement.cloneNode(true); + } + // LATER: Check if deep clone can be used for quirks if container in DOM + else { + node = this.graph.container.cloneNode(false); + node.innerHTML = this.graph.container.innerHTML; + } + + this.graph.getModel().clear(); + + // Catch-all event handling + if (mxClient.IS_IE6) { + parent.style.backgroundImage = 'url(' + this.editorUi.editor.transparentImage + + ')'; + } + + var dd = 3; + node.style.position = 'relative'; + node.style.overflow = 'hidden'; + node.style.cursor = 'pointer'; + node.style.left = (dx + dd) + 'px'; + node.style.top = (dy + dd) + 'px'; + node.style.width = width + 'px'; + node.style.height = height + 'px'; + node.style.visibility = ''; + node.style.minWidth = ''; + node.style.minHeight = ''; + + parent.appendChild(node); + + // Adds title for sidebar entries + if (this.sidebarTitles && title != null) { + var border = (mxClient.IS_QUIRKS) ? 2 * this.thumbPadding + 2 : 0; + parent.style.height = (this.thumbHeight + border + this.sidebarTitleSize + 8) + + 'px'; + + var div = document.createElement('div'); + div.style.fontSize = this.sidebarTitleSize + 'px'; + div.style.textAlign = 'center'; + div.style.whiteSpace = 'nowrap'; + + if (mxClient.IS_IE) { + div.style.height = (this.sidebarTitleSize + 12) + 'px'; + } + + div.style.paddingTop = '4px'; + mxUtils.write(div, title); + parent.appendChild(div); + } +}; + +/** + * Creates and returns a new palette item for the given image. + */ +Sidebar.prototype.createItem = function(cells, title, showLabel) { + var elt = document.createElement('a'); + elt.setAttribute('href', 'javascript:void(0);'); + elt.className = 'geItem'; + elt.style.overflow = 'hidden'; + var border = (mxClient.IS_QUIRKS) ? 8 + 2 * this.thumbPadding : 6; + elt.style.width = (this.thumbWidth + border) + 'px'; + elt.style.height = (this.thumbHeight + border) + 'px'; + elt.style.padding = this.thumbPadding + 'px'; + + // Blocks default click action + mxEvent.addListener(elt, 'click', function(evt) { + mxEvent.consume(evt); + }); + + this.createThumb(cells, this.thumbWidth, this.thumbHeight, elt, title, + showLabel); + + return elt; +}; + +/** + * Creates a drop handler for inserting the given cells. + */ +Sidebar.prototype.createDropHandler = function(cells, allowSplit) { + return function(graph, evt, target, x, y) { + if (graph.isEnabled()) { + cells = graph.getImportableCells(cells); + + if (cells.length > 0) { + var validDropTarget = (target != null) ? + graph.isValidDropTarget(target, cells, evt) : false; + var select = null; + + if (target != null && !validDropTarget) { + target = null; + } + + // Splits the target edge or inserts into target group + if (allowSplit && graph.isSplitEnabled() && graph.isSplitTarget(target, + cells, evt)) { + graph.splitEdge(target, cells, null, x, y); + select = cells; + } else if (cells.length > 0) { + select = graph.importCells(cells, x, y, target); + } + + if (select != null && select.length > 0) { + graph.scrollCellToVisible(select[0]); + graph.setSelectionCells(select); + } + } + } + }; +}; + +/** + * Creates and returns a preview element for the given width and height. + */ +Sidebar.prototype.createDragPreview = function(width, height) { + var elt = document.createElement('div'); + elt.style.border = '1px dashed black'; + elt.style.width = width + 'px'; + elt.style.height = height + 'px'; + + return elt; +}; + +/** + * Creates a drag source for the given element. + */ +Sidebar.prototype.createDragSource = function(elt, dropHandler, preview) { + var dragSource = mxUtils.makeDraggable(elt, this.editorUi.editor.graph, + dropHandler, + preview, 0, 0, this.editorUi.editor.graph.autoscroll, true, true); + + // Allows drop into cell only if target is a valid root + dragSource.getDropTarget = function(graph, x, y) { + var target = mxDragSource.prototype.getDropTarget.apply(this, arguments); + + if (!graph.isValidRoot(target)) { + target = null; + } + + return target; + }; + + return dragSource; +}; + +/** + * Adds a handler for inserting the cell with a single click. + */ +Sidebar.prototype.addClickHandler = function(elt, ds) { + var graph = this.editorUi.editor.graph; + var first = null; + + mxEvent.addGestureListeners(elt, function(evt) { + first = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt)); + }); + + var oldMouseUp = ds.mouseUp; + ds.mouseUp = function(evt) { + if (!mxEvent.isPopupTrigger(evt) && this.currentGraph == null && first != + null) { + var tol = graph.tolerance; + + if (Math.abs(first.x - mxEvent.getClientX(evt)) <= tol && + Math.abs(first.y - mxEvent.getClientY(evt)) <= tol) { + var gs = graph.getGridSize(); + ds.drop(graph, evt, null, gs, gs); + } + } + + oldMouseUp.apply(this, arguments); + first = null; + }; +}; + +/** + * Giuseppe Careri + * Create xml document vertex + */ +Sidebar.prototype.createXmlDocument = function(element, label, variables, + values) { + var doc = mxUtils.createXmlDocument(); + var node = doc.createElement(element) + node.setAttribute('label', label); + + variables.forEach(function(variable, index) { + node.setAttribute(variable, values[index] ? values[index] : ''); + }); + + return node; +} + +/** + * Giuseppe Careri + * Creates a drop handler for inserting the given cells. + */ +Sidebar.prototype.createVertexTemplate = function(style, width, height, value, + title, showLabel) { + var variables = []; + var values = []; + + switch (value) { + case 'answer': + break; + case 'start': + variables = ['answer']; + values = ['yes']; + break; + case 'ispeechasr': + variables = ['key', 'model', 'ispeech_asr_language', 'timeout', 'intKey', + 'beep' + ]; + values = ['', 0, 'it-IT', 1, '#', true]; + break; + case 'playback': + variables = ['file_id', 'opts']; + values = ['0']; + break; + case 'background': + variables = ['file_id', 'response', 'digit']; + values = ['0', '5', '1']; + break; + case 'menu': + variables = ['file_id', 'response', 'digit', 'retry', 'variable_id']; + values = ['0', '5', '1', '1', '0']; + break; + case 'getdigits': + variables = ['file_id', 'response', 'mindigit', 'maxdigit', 'retry', + 'variable_id' + ]; + values = ['0', '5', '1', '10', '1', '0']; + break; + case 'getsecretdigits': + variables = ['file_id', 'response', 'mindigit', 'maxdigit', 'retry', 'hiddendigitsnum', 'hiddendigitspos', + 'variable_id' + ]; + values = ['0', '5', '1', '10', '1', '0', 'first', '0']; + break; + case 'custom_app': + variables = ['application', 'options']; + values = ['', '']; + break; + case 'set': + variables = ['variable_id', 'variable_value']; + values = ['0', '']; + break; + case 'database': + variables = ['odbc_id', 'query', 'variable_id']; + values = ['0', '', '0']; + break; + case 'noop': + variables = ['output']; + values = []; + break; + case 'gotoc': + variables = ['context', 'extension']; + values = []; + break; + case 'system': + variables = ['variable_id', 'command']; + values = []; + break; + case 'agi': + variables = ['args', 'command']; + values = []; + break; + case 'gotoif': + variables = ['condition']; + values = []; + break; + case 'gotoiftime': + variables = ['interval_id']; + values = ['0']; + break; + case 'gotoifmultitime': + variables = ['interval_id']; + values = ['0']; + break; + case 'vswitch': + variables = ['variable_id']; + values = ['0']; + break; + case 'saydigits': + variables = ['digits', 'escape_digits']; + values = ['', '#']; + break; + case 'saynumber': + variables = ['number', 'escape_digits']; + values = ['', '#']; + break; + case 'sayphonetic': + variables = ['text', 'escape_digits']; + values = ['', '#']; + break; + case 'record': + variables = ['file', 'recordingFormat', 'timeout', 'escape_digits']; + values = ['', 'wav', '-1', '#']; + break; + case 'dial': + variables = ['sip_id', 'timeout', 'custom_app', 'url']; + values = ['0', '60']; + break; + case 'ext_dial': + variables = ['phone', 'trunk_name', 'timeout', 'opts', 'url']; + values = ['', '-1', '60']; + break; + case 'tts': + variables = ['text', 'google_tts_language']; + values = ['', 'it']; + break; + case 'ispeechtts': + variables = ['text', 'key', 'ispeech_tts_language', 'speed', 'intKey']; + values = ['', '', 'euritalianfemale', '0', '#']; + break; + case 'queue': + variables = ['queue_id', 'opts', 'url', 'file_id', 'timeout', 'agi', + 'macro', 'gosub', 'position' + ]; + values = ['-1', '', '', '0', '300']; + break; + case 'voicemail': + variables = ['mailbox', 'options']; + values = ['', '']; + break; + case 'subproject': + variables = ['project_id']; + values = ['0']; + break; + case 'math': + variables = ['operation', 'variable_id']; + values = ['', '0']; + break; + case 'queuelog': + variables = ['queuename', 'agent', 'queue_event', 'data1', 'data2', 'data3', + 'data4', 'data5' + ]; + values = []; + break; + case 'goal': + variables = ['goalname']; + values = []; + break; + case 'callback': + variables = ['name', 'phone', 'list_id', 'delay']; + values = ['', '{CALLERID(num)}', '0', '5']; + break; + case 'sendSMS': + variables = ['account_id', 'to', 'sms_text']; + values = ['0']; + break; + case 'sendMail': + variables = ['account_id', 'template_id', 'to', 'cc', 'subject', 'text']; + values = ['0']; + break; + + default: + variables = []; + values = []; + break; + } + + var node = this.createXmlDocument(value, title, variables, values); + + //var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0, width, height), style)]; + var cells = [new mxCell(node, new mxGeometry(0, 0, width, height), style)]; + cells[0].vertex = true; + + return this.createVertexTemplateFromCells(cells, width, height, title, + showLabel); +}; + +/** + * Creates a drop handler for inserting the given cells. + */ +Sidebar.prototype.createVertexTemplateFromCells = function(cells, width, height, + title, showLabel) { + var elt = this.createItem(cells, title, showLabel); + var ds = this.createDragSource(elt, this.createDropHandler(cells, true), this + .createDragPreview(width, height)); + this.addClickHandler(elt, ds); + + // Uses guides for vertices only if enabled in graph + ds.isGuidesEnabled = mxUtils.bind(this, function() { + return this.editorUi.editor.graph.graphHandler.guidesEnabled; + }); + + // Shows a tooltip with the rendered cell + if (!touchStyle) { + mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) { + this.showTooltip(elt, cells, title, showLabel); + })); + } + + return elt; +}; + +/** + * Creates a drop handler for inserting the given cells. + */ +Sidebar.prototype.createEdgeTemplate = function(style, width, height, value, + title, showLabel) { + var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0, + width, height), style)]; + cells[0].geometry.setTerminalPoint(new mxPoint(0, height), true); + cells[0].geometry.setTerminalPoint(new mxPoint(width, 0), false); + cells[0].geometry.relative = true; + cells[0].edge = true; + + return this.createEdgeTemplateFromCells(cells, width, height, title, + showLabel); +}; + +/** + * Creates a drop handler for inserting the given cells. + */ +Sidebar.prototype.createEdgeTemplateFromCells = function(cells, width, height, + title, showLabel) { + var elt = this.createItem(cells, title, showLabel); + this.createDragSource(elt, this.createDropHandler(cells, false), this.createDragPreview( + width, height)); + + // Installs the default edge + var graph = this.editorUi.editor.graph; + mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt) { + if (this.installEdges) { + graph.setDefaultEdge(cells[0]); + } + + // Highlights the entry for 200ms + elt.style.backgroundColor = '#ffffff'; + + window.setTimeout(function() { + elt.style.backgroundColor = ''; + }, 300); + + mxEvent.consume(evt); + })); + + // Shows a tooltip with the rendered cell + if (!touchStyle) { + mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) { + this.showTooltip(elt, cells, title, showLabel); + })); + } + + return elt; +}; + +/** + * Adds the given palette. + */ +Sidebar.prototype.addPalette = function(id, title, expanded, onInit) { + var elt = this.createTitle(title); + this.container.appendChild(elt); + + var div = document.createElement('div'); + div.className = 'geSidebar'; + + if (expanded) { + onInit(div); + onInit = null; + } else { + div.style.display = 'none'; + } + + this.addFoldingHandler(elt, div, onInit); + + var outer = document.createElement('div'); + outer.appendChild(div); + this.container.appendChild(outer); + + // Keeps references to the DOM nodes + if (id != null) { + this.palettes[id] = [elt, outer]; + } +}; + +/** + * Create the given title element. + */ +Sidebar.prototype.addFoldingHandler = function(title, content, funct) { + var initialized = false; + + title.style.backgroundImage = (content.style.display == 'none') ? + 'url(' + IMAGE_PATH + '/collapsed.gif)' : 'url(' + IMAGE_PATH + + '/expanded.gif)'; + title.style.backgroundRepeat = 'no-repeat'; + title.style.backgroundPosition = '100% 50%'; + + mxEvent.addListener(title, 'click', function(evt) { + if (content.style.display == 'none') { + if (!initialized) { + initialized = true; + + if (funct != null) { + title.style.cursor = 'wait'; + window.setTimeout(function() { + funct(content); + title.style.cursor = ''; + }, 0); + } + } + + title.style.backgroundImage = 'url(' + IMAGE_PATH + '/expanded.gif)'; + content.style.display = 'block'; + } else { + title.style.backgroundImage = 'url(' + IMAGE_PATH + '/collapsed.gif)'; + content.style.display = 'none'; + } + + mxEvent.consume(evt); + }); +}; + +/** + * Removes the palette for the given ID. + */ +Sidebar.prototype.removePalette = function(id) { + var elts = this.palettes[id]; + + if (elts != null) { + this.palettes[id] = null; + + for (var i = 0; i < elts.length; i++) { + this.container.removeChild(elts[i]); + } + + return true; + } + + return false; +}; + +/** + * Adds the given image palette. + */ +Sidebar.prototype.addImagePalette = function(id, title, prefix, postfix, items, + titles) { + // Giuseppe Careri + // Expanded Sidebar only entry + this.addPalette(id, title, (id === 'entry'), mxUtils.bind(this, function( + content) { + var showTitles = titles != null; + + for (var i = 0; i < items.length; i++) { + var icon = prefix + items[i] + postfix; + content.appendChild(this.createVertexTemplate('image;image=' + icon, 80, + 80, items[i], (showTitles) ? titles[i] : null, showTitles)); + } + })); +}; diff --git a/public/assets/plugins/square/js/Toolbar.js b/public/assets/plugins/square/js/Toolbar.js index a9652ac..7eab562 100644 --- a/public/assets/plugins/square/js/Toolbar.js +++ b/public/assets/plugins/square/js/Toolbar.js @@ -1 +1,407 @@ -var _0xa96a=["\x65\x64\x69\x74\x6F\x72\x55\x69","\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72","\x69\x6E\x69\x74","\x68\x69\x64\x65\x4D\x65\x6E\x75","\x62\x69\x6E\x64","\x61\x64\x64\x47\x65\x73\x74\x75\x72\x65\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x73\x61\x76\x65","\x70\x75\x62\x6C\x69\x73\x68","\x2D","\x70\x72\x69\x6E\x74","\x75\x6E\x64\x6F","\x72\x65\x64\x6F","\x63\x6F\x70\x79","\x63\x75\x74","\x70\x61\x73\x74\x65","\x64\x65\x6C\x65\x74\x65","\x64\x75\x70\x6C\x69\x63\x61\x74\x65","\x61\x63\x74\x75\x61\x6C\x53\x69\x7A\x65","\x7A\x6F\x6F\x6D\x49\x6E","\x7A\x6F\x6F\x6D\x4F\x75\x74","\x61\x64\x64\x49\x74\x65\x6D\x73","\x48\x65\x6C\x76\x65\x74\x69\x63\x61","\x66\x6F\x6E\x74\x46\x61\x6D\x69\x6C\x79","\x67\x65\x74","\x61\x64\x64\x4D\x65\x6E\x75","\x77\x68\x69\x74\x65\x53\x70\x61\x63\x65","\x73\x74\x79\x6C\x65","\x6E\x6F\x77\x72\x61\x70","\x6F\x76\x65\x72\x66\x6C\x6F\x77","\x68\x69\x64\x64\x65\x6E","\x77\x69\x64\x74\x68","\x37\x30\x70\x78","\x61\x64\x64\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x31\x32","\x66\x6F\x6E\x74\x53\x69\x7A\x65","\x33\x30\x70\x78","\x62\x6F\x6C\x64","\x69\x74\x61\x6C\x69\x63","\x75\x6E\x64\x65\x72\x6C\x69\x6E\x65","\x67\x72\x61\x70\x68","\x65\x64\x69\x74\x6F\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C","\x67\x65\x74\x53\x74\x61\x74\x65","\x67\x65\x74\x56\x69\x65\x77","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x46\x41\x4D\x49\x4C\x59","\x53\x54\x59\x4C\x45\x5F\x46\x4F\x4E\x54\x53\x49\x5A\x45","\x6C\x65\x6E\x67\x74\x68","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x2E\x2E\x2E","\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x61\x64\x64\x4C\x69\x73\x74\x65\x6E\x65\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x4D\x6F\x64\x65\x6C","\x67\x65\x74\x4D\x6F\x64\x65\x6C","\x63\x75\x72\x72\x65\x6E\x74\x4D\x65\x6E\x75","\x64\x65\x73\x74\x72\x6F\x79","\x6D\x65\x6E\x75\x73","\x66\x75\x6E\x63\x74","\x61\x64\x64\x4D\x65\x6E\x75\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x73\x74\x61\x74\x65\x43\x68\x61\x6E\x67\x65\x64","\x65\x6E\x61\x62\x6C\x65\x64","\x73\x65\x74\x45\x6E\x61\x62\x6C\x65\x64","\x63\x72\x65\x61\x74\x65\x4C\x61\x62\x65\x6C","\x63\x72\x65\x61\x74\x65\x42\x75\x74\x74\x6F\x6E","\x69\x6E\x69\x74\x45\x6C\x65\x6D\x65\x6E\x74","\x61\x64\x64\x4D\x65\x6E\x75\x48\x61\x6E\x64\x6C\x65\x72","\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64","\x64\x69\x76","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x67\x65\x53\x65\x70\x61\x72\x61\x74\x6F\x72","\x67\x65\x53\x70\x72\x69\x74\x65\x2D","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x61\x64\x64\x49\x74\x65\x6D","\x61\x63\x74\x69\x6F\x6E\x73","\x6C\x61\x62\x65\x6C","\x61\x64\x64\x42\x75\x74\x74\x6F\x6E","\x61\x64\x64\x43\x6C\x69\x63\x6B\x48\x61\x6E\x64\x6C\x65\x72","\x61\x64\x64\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x69\x73\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x45\x6D\x70\x74\x79","\x61\x64\x64\x45\x64\x67\x65\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x48\x61\x6E\x64\x6C\x65\x72","\x67\x65\x74\x53\x65\x6C\x65\x63\x74\x69\x6F\x6E\x43\x65\x6C\x6C\x73","\x69\x73\x45\x64\x67\x65","\x74\x61\x62\x69\x6E\x64\x65\x78","\x30","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x74\x69\x74\x6C\x65","\x61\x64\x64\x45\x6E\x61\x62\x6C\x65\x64\x53\x74\x61\x74\x65","\x20\x67\x65\x44\x69\x73\x61\x62\x6C\x65\x64","\x63\x6C\x69\x63\x6B","\x63\x6F\x6E\x73\x75\x6D\x65","\x61","\x68\x72\x65\x66","\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3A\x76\x6F\x69\x64\x28\x30\x29\x3B","\x67\x65\x42\x75\x74\x74\x6F\x6E","\x67\x65\x53\x70\x72\x69\x74\x65\x20","\x67\x65\x4C\x61\x62\x65\x6C","\x77\x72\x69\x74\x65","\x70\x61\x6E\x6E\x69\x6E\x67\x48\x61\x6E\x64\x6C\x65\x72","\x20\x67\x65\x54\x6F\x6F\x6C\x62\x61\x72\x4D\x65\x6E\x75","\x73\x68\x6F\x77\x44\x69\x73\x61\x62\x6C\x65\x64","\x6C\x61\x62\x65\x6C\x73","\x61\x75\x74\x6F\x45\x78\x70\x61\x6E\x64","\x6F\x66\x66\x73\x65\x74\x4C\x65\x66\x74","\x6F\x66\x66\x73\x65\x74\x54\x6F\x70","\x6F\x66\x66\x73\x65\x74\x48\x65\x69\x67\x68\x74","\x70\x6F\x70\x75\x70"];function Toolbar(_0x9e25x2,_0x9e25x3){this[_0xa96a[0]]= _0x9e25x2;this[_0xa96a[1]]= _0x9e25x3;this[_0xa96a[2]]();mxEvent[_0xa96a[5]](document,mxUtils[_0xa96a[4]](this,function(_0x9e25x4){this[_0xa96a[3]]()}))}Toolbar[_0xa96a[6]][_0xa96a[2]]= function(){this[_0xa96a[21]]([_0xa96a[7],_0xa96a[8],_0xa96a[9],_0xa96a[10],_0xa96a[11],_0xa96a[12],_0xa96a[9],_0xa96a[13],_0xa96a[14],_0xa96a[15],_0xa96a[16],_0xa96a[9],_0xa96a[17],_0xa96a[9],_0xa96a[18],_0xa96a[19],_0xa96a[20],_0xa96a[9]]);var _0x9e25x5=this[_0xa96a[25]](_0xa96a[22],mxResources[_0xa96a[24]](_0xa96a[23]),true,_0xa96a[23]);_0x9e25x5[_0xa96a[27]][_0xa96a[26]]= _0xa96a[28];_0x9e25x5[_0xa96a[27]][_0xa96a[29]]= _0xa96a[30];_0x9e25x5[_0xa96a[27]][_0xa96a[31]]= _0xa96a[32];this[_0xa96a[33]]();var _0x9e25x6=this[_0xa96a[25]](_0xa96a[34],mxResources[_0xa96a[24]](_0xa96a[35]),true,_0xa96a[35]);_0x9e25x6[_0xa96a[27]][_0xa96a[26]]= _0xa96a[28];_0x9e25x6[_0xa96a[27]][_0xa96a[29]]= _0xa96a[30];_0x9e25x6[_0xa96a[27]][_0xa96a[31]]= _0xa96a[36];this[_0xa96a[21]]([_0xa96a[9],_0xa96a[37],_0xa96a[38],_0xa96a[39]]);var _0x9e25x7=this[_0xa96a[0]][_0xa96a[41]][_0xa96a[40]];var _0x9e25x8=mxUtils[_0xa96a[4]](this,function(){var _0x9e25x9=_0xa96a[22];var _0x9e25xa=_0xa96a[34];var _0x9e25xb=_0x9e25x7[_0xa96a[44]]()[_0xa96a[43]](_0x9e25x7[_0xa96a[42]]());if(_0x9e25xb!= null){_0x9e25x9= _0x9e25xb[_0xa96a[27]][mxConstants[_0xa96a[45]]]|| _0x9e25x9;_0x9e25xa= _0x9e25xb[_0xa96a[27]][mxConstants[_0xa96a[46]]]|| _0x9e25xa;if(_0x9e25x9[_0xa96a[47]]> 10){_0x9e25x9= _0x9e25x9[_0xa96a[48]](0,8)+ _0xa96a[49]};_0x9e25x5[_0xa96a[50]]= _0x9e25x9;_0x9e25x6[_0xa96a[50]]= _0x9e25xa}});_0x9e25x7[_0xa96a[52]]()[_0xa96a[51]](mxEvent.CHANGE,_0x9e25x8);_0x9e25x7[_0xa96a[53]]()[_0xa96a[51]](mxEvent.CHANGE,_0x9e25x8)};Toolbar[_0xa96a[6]][_0xa96a[3]]= function(){if(this[_0xa96a[54]]!= null){this[_0xa96a[54]][_0xa96a[3]]();this[_0xa96a[54]][_0xa96a[55]]();this[_0xa96a[54]]= null}};Toolbar[_0xa96a[6]][_0xa96a[25]]= function(_0x9e25xc,_0x9e25xd,_0x9e25xe,_0x9e25xf){var _0x9e25x10=this[_0xa96a[0]][_0xa96a[56]][_0xa96a[24]](_0x9e25xf);var _0x9e25x11=this[_0xa96a[58]](_0x9e25xc,_0x9e25xd,_0x9e25xe,_0x9e25x10[_0xa96a[57]]);_0x9e25x10[_0xa96a[51]](_0xa96a[59],function(){_0x9e25x11[_0xa96a[61]](_0x9e25x10[_0xa96a[60]])});return _0x9e25x11};Toolbar[_0xa96a[6]][_0xa96a[58]]= function(_0x9e25xc,_0x9e25xd,_0x9e25xe,_0x9e25x12){var _0x9e25x11=(_0x9e25xe)?this[_0xa96a[62]](_0x9e25xc):this[_0xa96a[63]](_0x9e25xc);this[_0xa96a[64]](_0x9e25x11,_0x9e25xd);this[_0xa96a[65]](_0x9e25x11,_0x9e25xe,_0x9e25x12);this[_0xa96a[1]][_0xa96a[66]](_0x9e25x11);return _0x9e25x11};Toolbar[_0xa96a[6]][_0xa96a[33]]= function(){var _0x9e25x11=document[_0xa96a[68]](_0xa96a[67]);_0x9e25x11[_0xa96a[69]]= _0xa96a[70];this[_0xa96a[1]][_0xa96a[66]](_0x9e25x11);return _0x9e25x11};Toolbar[_0xa96a[6]][_0xa96a[21]]= function(_0x9e25x13){for(var _0x9e25x14=0;_0x9e25x14< _0x9e25x13[_0xa96a[47]];_0x9e25x14++){var _0x9e25x15=_0x9e25x13[_0x9e25x14];if(_0x9e25x15== _0xa96a[9]){this[_0xa96a[33]]()}else {this[_0xa96a[73]](_0xa96a[71]+ _0x9e25x15[_0xa96a[72]](),_0x9e25x15)}}};Toolbar[_0xa96a[6]][_0xa96a[73]]= function(_0x9e25x16,_0x9e25x15){var _0x9e25x17=this[_0xa96a[0]][_0xa96a[74]][_0xa96a[24]](_0x9e25x15);var _0x9e25x11=null;if(_0x9e25x17!= null){_0x9e25x11= this[_0xa96a[76]](_0x9e25x16,_0x9e25x17[_0xa96a[75]],_0x9e25x17[_0xa96a[57]]);_0x9e25x11[_0xa96a[61]](_0x9e25x17[_0xa96a[60]]);_0x9e25x17[_0xa96a[51]](_0xa96a[59],function(){_0x9e25x11[_0xa96a[61]](_0x9e25x17[_0xa96a[60]])})};return _0x9e25x11};Toolbar[_0xa96a[6]][_0xa96a[76]]= function(_0x9e25x18,_0x9e25xd,_0x9e25x12){var _0x9e25x11=this[_0xa96a[63]](_0x9e25x18);this[_0xa96a[64]](_0x9e25x11,_0x9e25xd);this[_0xa96a[77]](_0x9e25x11,_0x9e25x12);this[_0xa96a[1]][_0xa96a[66]](_0x9e25x11);return _0x9e25x11};Toolbar[_0xa96a[6]][_0xa96a[78]]= function(_0x9e25x19){var _0x9e25x7=this[_0xa96a[0]][_0xa96a[41]][_0xa96a[40]];var _0x9e25x1a=function(){var _0x9e25x1b=!_0x9e25x7[_0xa96a[79]]();for(var _0x9e25x14=0;_0x9e25x14< _0x9e25x19[_0xa96a[47]];_0x9e25x14++){_0x9e25x19[_0x9e25x14][_0xa96a[61]](_0x9e25x1b)}};_0x9e25x7[_0xa96a[52]]()[_0xa96a[51]](mxEvent.CHANGE,_0x9e25x1a);_0x9e25x1a()};Toolbar[_0xa96a[6]][_0xa96a[80]]= function(_0x9e25x19){var _0x9e25x7=this[_0xa96a[0]][_0xa96a[41]][_0xa96a[40]];var _0x9e25x1a=function(){var _0x9e25x1c=false;if(!_0x9e25x7[_0xa96a[79]]()){var _0x9e25x1d=_0x9e25x7[_0xa96a[81]]();for(var _0x9e25x14=0;_0x9e25x14< _0x9e25x1d[_0xa96a[47]];_0x9e25x14++){if(_0x9e25x7[_0xa96a[53]]()[_0xa96a[82]](_0x9e25x1d[_0x9e25x14])){_0x9e25x1c= true;break}}};for(var _0x9e25x14=0;_0x9e25x14< _0x9e25x19[_0xa96a[47]];_0x9e25x14++){_0x9e25x19[_0x9e25x14][_0xa96a[61]](_0x9e25x1c)}};_0x9e25x7[_0xa96a[52]]()[_0xa96a[51]](mxEvent.CHANGE,_0x9e25x1a);_0x9e25x1a()};Toolbar[_0xa96a[6]][_0xa96a[64]]= function(_0x9e25x11,_0x9e25xd){_0x9e25x11[_0xa96a[85]](_0xa96a[83],_0xa96a[84]);if(_0x9e25xd!= null){_0x9e25x11[_0xa96a[85]](_0xa96a[86],_0x9e25xd)};this[_0xa96a[87]](_0x9e25x11)};Toolbar[_0xa96a[6]][_0xa96a[87]]= function(_0x9e25x11){var _0x9e25x18=_0x9e25x11[_0xa96a[69]];_0x9e25x11[_0xa96a[61]]= function(_0x9e25x1e){_0x9e25x11[_0xa96a[60]]= _0x9e25x1e;if(_0x9e25x1e){_0x9e25x11[_0xa96a[69]]= _0x9e25x18}else {_0x9e25x11[_0xa96a[69]]= _0x9e25x18+ _0xa96a[88]}};_0x9e25x11[_0xa96a[61]](true)};Toolbar[_0xa96a[6]][_0xa96a[77]]= function(_0x9e25x11,_0x9e25x12){if(_0x9e25x12!= null){mxEvent[_0xa96a[51]](_0x9e25x11,_0xa96a[89],function(_0x9e25x4){if(_0x9e25x11[_0xa96a[60]]){_0x9e25x12(_0x9e25x4)};mxEvent[_0xa96a[90]](_0x9e25x4)})}};Toolbar[_0xa96a[6]][_0xa96a[63]]= function(_0x9e25x18){var _0x9e25x11=document[_0xa96a[68]](_0xa96a[91]);_0x9e25x11[_0xa96a[85]](_0xa96a[92],_0xa96a[93]);_0x9e25x11[_0xa96a[69]]= _0xa96a[94];var _0x9e25x1f=document[_0xa96a[68]](_0xa96a[67]);_0x9e25x1f[_0xa96a[69]]= _0xa96a[95]+ _0x9e25x18;_0x9e25x11[_0xa96a[66]](_0x9e25x1f);return _0x9e25x11};Toolbar[_0xa96a[6]][_0xa96a[62]]= function(_0x9e25xc,_0x9e25xd){var _0x9e25x11=document[_0xa96a[68]](_0xa96a[91]);_0x9e25x11[_0xa96a[85]](_0xa96a[92],_0xa96a[93]);_0x9e25x11[_0xa96a[69]]= _0xa96a[96];mxUtils[_0xa96a[97]](_0x9e25x11,_0x9e25xc);return _0x9e25x11};Toolbar[_0xa96a[6]][_0xa96a[65]]= function(_0x9e25x11,_0x9e25xe,_0x9e25x12,_0x9e25x20){if(_0x9e25x12!= null){var _0x9e25x7=this[_0xa96a[0]][_0xa96a[41]][_0xa96a[40]];var _0x9e25x10=null;mxEvent[_0xa96a[51]](_0x9e25x11,_0xa96a[89],mxUtils[_0xa96a[4]](this,function(_0x9e25x4){if(_0x9e25x11[_0xa96a[60]]== null|| _0x9e25x11[_0xa96a[60]]){_0x9e25x7[_0xa96a[98]][_0xa96a[3]]();_0x9e25x10= new mxPopupMenu(_0x9e25x12);_0x9e25x10[_0xa96a[67]][_0xa96a[69]]+= _0xa96a[99];_0x9e25x10[_0xa96a[100]]= _0x9e25x20;_0x9e25x10[_0xa96a[101]]= _0x9e25xe;_0x9e25x10[_0xa96a[102]]= true;_0x9e25x10[_0xa96a[106]](_0x9e25x11[_0xa96a[103]],_0x9e25x11[_0xa96a[104]]+ _0x9e25x11[_0xa96a[105]]+ 34,null,_0x9e25x4);this[_0xa96a[54]]= _0x9e25x10};mxEvent[_0xa96a[90]](_0x9e25x4)}))}} \ No newline at end of file +/** + * $Id: Toolbar.js,v 1.3 2013-02-20 16:21:29 gaudenz Exp $ + * Copyright (c) 2006-2012, JGraph Ltd + */ +/** + * Construcs a new toolbar for the given editor. + */ +function Toolbar(editorUi, container) +{ + this.editorUi = editorUi; + this.container = container; + this.init(); + + // Global handler to hide the current menu + mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) + { + this.hideMenu(); + })); +}; + +/** + * Adds the toolbar elements. + */ +Toolbar.prototype.init = function() +{ + this.addItems(['save', 'publish', '-', 'print', 'undo', 'redo', '-', 'copy', 'cut', 'paste', 'delete', '-', 'duplicate', '-', 'actualSize', 'zoomIn', 'zoomOut', '-']); + var fontElt = this.addMenu('Helvetica', mxResources.get('fontFamily'), true, 'fontFamily'); + fontElt.style.whiteSpace = 'nowrap'; + fontElt.style.overflow = 'hidden'; + fontElt.style.width = '70px'; + this.addSeparator(); + var sizeElt = this.addMenu('12', mxResources.get('fontSize'), true, 'fontSize'); + sizeElt.style.whiteSpace = 'nowrap'; + sizeElt.style.overflow = 'hidden'; + sizeElt.style.width = '30px'; + + this.addItems(['-', 'bold', 'italic', 'underline']); + // Giuseppe Careri + // var align = this.addMenuFunction('geSprite-left', mxResources.get('align'), false, mxUtils.bind(this, function(menu) + // { + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_LEFT], 'geIcon geSprite geSprite-left', null).setAttribute('title', mxResources.get('left')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_CENTER], 'geIcon geSprite geSprite-center', null).setAttribute('title', mxResources.get('center')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_RIGHT], 'geIcon geSprite geSprite-right', null).setAttribute('title', mxResources.get('right')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_TOP], 'geIcon geSprite geSprite-top', null).setAttribute('title', mxResources.get('top')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_MIDDLE], 'geIcon geSprite geSprite-middle', null).setAttribute('title', mxResources.get('middle')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_BOTTOM], 'geIcon geSprite geSprite-bottom', null).setAttribute('title', mxResources.get('bottom')); + // })); + // this.addItems(['fontColor', '-']); + // var line = this.addMenuFunction('geSprite-straight', mxResources.get('line'), false, mxUtils.bind(this, function(menu) + // { + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], [null], 'geIcon geSprite geSprite-straight', null).setAttribute('title', mxResources.get('straight')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['entityRelationEdgeStyle'], 'geIcon geSprite geSprite-entity', null).setAttribute('title', mxResources.get('entityRelation')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE, mxConstants.STYLE_ELBOW], ['elbowEdgeStyle', 'horizontal'], 'geIcon geSprite geSprite-helbow', null).setAttribute('title', mxResources.get('horizontal')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE, mxConstants.STYLE_ELBOW], ['elbowEdgeStyle', 'vertical'], 'geIcon geSprite geSprite-velbow', null).setAttribute('title', mxResources.get('vertical')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['segmentEdgeStyle'], 'geIcon geSprite geSprite-segment', null).setAttribute('title', mxResources.get('manual')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['orthogonalEdgeStyle'], 'geIcon geSprite geSprite-orthogonal', null).setAttribute('title', mxResources.get('automatic')); + // })); + // var linestart = this.addMenuFunction('geSprite-startclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu) + // { + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null).setAttribute('title', mxResources.get('none')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-startclassic', null).setAttribute('title', mxResources.get('classic')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OPEN, 1], 'geIcon geSprite geSprite-startopen', null).setAttribute('title', mxResources.get('openArrow')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_BLOCK, 1], 'geIcon geSprite geSprite-startblock', null).setAttribute('title', mxResources.get('block')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OVAL, 1], 'geIcon geSprite geSprite-startoval', null).setAttribute('title', mxResources.get('oval')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND, 1], 'geIcon geSprite geSprite-startdiamond', null).setAttribute('title', mxResources.get('diamond')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND_THIN, 1], 'geIcon geSprite geSprite-startthindiamond', null).setAttribute('title', mxResources.get('diamondThin')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_CLASSIC, 0], 'geIcon geSprite geSprite-startclassictrans', null).setAttribute('title', mxResources.get('classic')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_BLOCK, 0], 'geIcon geSprite geSprite-startblocktrans', null).setAttribute('title', mxResources.get('block')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OVAL, 0], 'geIcon geSprite geSprite-startovaltrans', null).setAttribute('title', mxResources.get('oval')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND, 0], 'geIcon geSprite geSprite-startdiamondtrans', null).setAttribute('title', mxResources.get('diamond')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND_THIN, 0], 'geIcon geSprite geSprite-startthindiamondtrans', null).setAttribute('title', mxResources.get('diamondThin')); + // })); + // var lineend = this.addMenuFunction('geSprite-endclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu) + // { + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null).setAttribute('title', mxResources.get('none')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-endclassic', null).setAttribute('title', mxResources.get('classic')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OPEN, 1], 'geIcon geSprite geSprite-endopen', null).setAttribute('title', mxResources.get('openArrow')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_BLOCK, 1], 'geIcon geSprite geSprite-endblock', null).setAttribute('title', mxResources.get('block')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OVAL, 1], 'geIcon geSprite geSprite-endoval', null).setAttribute('title', mxResources.get('oval')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND, 1], 'geIcon geSprite geSprite-enddiamond', null).setAttribute('title', mxResources.get('diamond')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND_THIN, 1], 'geIcon geSprite geSprite-endthindiamond', null).setAttribute('title', mxResources.get('diamondThin')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 0], 'geIcon geSprite geSprite-endclassictrans', null).setAttribute('title', mxResources.get('classic')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_BLOCK, 0], 'geIcon geSprite geSprite-endblocktrans', null).setAttribute('title', mxResources.get('block')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OVAL, 0], 'geIcon geSprite geSprite-endovaltrans', null).setAttribute('title', mxResources.get('oval')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND, 0], 'geIcon geSprite geSprite-enddiamondtrans', null).setAttribute('title', mxResources.get('diamond')); + // this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND_THIN, 0], 'geIcon geSprite geSprite-endthindiamondtrans', null).setAttribute('title', mxResources.get('diamondThin')); + // })); + // this.addItems(['-', 'strokeColor', 'image', 'fillColor']); + // this.addItem('geSprite-gradientcolor', 'gradientColor').setAttribute('title', mxResources.get('gradient')); + // this.addItems(['shadow']); + + var graph = this.editorUi.editor.graph; + + // Update font size and font family labels + var update = mxUtils.bind(this, function() + { + var ff = 'Helvetica'; + var fs = '12'; + var state = graph.getView().getState(graph.getSelectionCell()); + + if (state != null) + { + ff = state.style[mxConstants.STYLE_FONTFAMILY] || ff; + fs = state.style[mxConstants.STYLE_FONTSIZE] || fs; + + if (ff.length > 10) + { + ff = ff.substring(0, 8) + '...'; + } + + fontElt.innerHTML = ff; + sizeElt.innerHTML = fs; + } + }); + + graph.getSelectionModel().addListener(mxEvent.CHANGE, update); + graph.getModel().addListener(mxEvent.CHANGE, update); + + // Giuseppe Careri + // Updates button states + //this.addEdgeSelectionHandler([line, linestart, lineend]); + //this.addSelectionHandler([align]); +}; + +/** + * Hides the current menu. + */ +Toolbar.prototype.hideMenu = function() +{ + if (this.currentMenu != null) + { + this.currentMenu.hideMenu(); + this.currentMenu.destroy(); + this.currentMenu = null; + } +}; + +/** + * Adds a label to the toolbar. + */ +Toolbar.prototype.addMenu = function(label, tooltip, showLabels, name) +{ + var menu = this.editorUi.menus.get(name); + var elt = this.addMenuFunction(label, tooltip, showLabels, menu.funct); + + menu.addListener('stateChanged', function() + { + elt.setEnabled(menu.enabled); + }); + + return elt; +}; + +/** + * Adds a label to the toolbar. + */ +Toolbar.prototype.addMenuFunction = function(label, tooltip, showLabels, funct) +{ + var elt = (showLabels) ? this.createLabel(label) : this.createButton(label); + this.initElement(elt, tooltip); + this.addMenuHandler(elt, showLabels, funct); + this.container.appendChild(elt); + + return elt; +}; + +/** + * Adds a separator to the separator. + */ +Toolbar.prototype.addSeparator = function() +{ + var elt = document.createElement('div'); + elt.className = 'geSeparator'; + this.container.appendChild(elt); + + return elt; +}; + +/** + * Adds given action item + */ +Toolbar.prototype.addItems = function(keys) +{ + for (var i = 0; i < keys.length; i++) + { + var key = keys[i]; + + if (key == '-') + { + this.addSeparator(); + } + else + { + this.addItem('geSprite-' + key.toLowerCase(), key); + } + } +}; + +/** + * Adds given action item + */ +Toolbar.prototype.addItem = function(sprite, key) +{ + var action = this.editorUi.actions.get(key); + var elt = null; + + if (action != null) + { + elt = this.addButton(sprite, action.label, action.funct); + elt.setEnabled(action.enabled); + + action.addListener('stateChanged', function() + { + elt.setEnabled(action.enabled); + }); + } + + return elt; +}; + +/** + * Adds a button to the toolbar. + */ +Toolbar.prototype.addButton = function(classname, tooltip, funct) +{ + var elt = this.createButton(classname); + + this.initElement(elt, tooltip); + this.addClickHandler(elt, funct); + this.container.appendChild(elt); + + return elt; +}; + +/** + * Updates the states of the given toolbar items based on the selection. + */ +Toolbar.prototype.addSelectionHandler = function(items) +{ + var graph = this.editorUi.editor.graph; + + var selectionListener = function() + { + var selected = !graph.isSelectionEmpty(); + + for (var i = 0; i < items.length; i++) + { + items[i].setEnabled(selected); + } + }; + + graph.getSelectionModel().addListener(mxEvent.CHANGE, selectionListener); + selectionListener(); +}; + +/** + * Updates the states of the given toolbar items based on the selection. + */ +Toolbar.prototype.addEdgeSelectionHandler = function(items) +{ + var graph = this.editorUi.editor.graph; + + var selectionListener = function() + { + var edgeSelected = false; + + if (!graph.isSelectionEmpty()) + { + var cells = graph.getSelectionCells(); + + for (var i = 0; i < cells.length; i++) + { + if (graph.getModel().isEdge(cells[i])) + { + edgeSelected = true; + break; + } + } + } + + for (var i = 0; i < items.length; i++) + { + items[i].setEnabled(edgeSelected); + } + }; + + graph.getSelectionModel().addListener(mxEvent.CHANGE, selectionListener); + selectionListener(); +}; + +/** + * Initializes the given toolbar element. + */ +Toolbar.prototype.initElement = function(elt, tooltip) +{ + elt.setAttribute('tabindex', '0'); + + // Adds tooltip + if (tooltip != null) + { + elt.setAttribute('title', tooltip); + } + + this.addEnabledState(elt); +}; + +/** + * Adds enabled state with setter to DOM node (avoids JS wrapper). + */ +Toolbar.prototype.addEnabledState = function(elt) +{ + var classname = elt.className; + + elt.setEnabled = function(value) + { + elt.enabled = value; + + if (value) + { + elt.className = classname; + } + else + { + elt.className = classname + ' geDisabled'; + } + }; + + elt.setEnabled(true); +}; + +/** + * Adds enabled state with setter to DOM node (avoids JS wrapper). + */ +Toolbar.prototype.addClickHandler = function(elt, funct) +{ + if (funct != null) + { + mxEvent.addListener(elt, 'click', function(evt) + { + if (elt.enabled) + { + funct(evt); + } + + mxEvent.consume(evt); + }); + } +}; + +/** + * Creates and returns a new button. + */ +Toolbar.prototype.createButton = function(classname) +{ + var elt = document.createElement('a'); + elt.setAttribute('href', 'javascript:void(0);'); + elt.className = 'geButton'; + + var inner = document.createElement('div'); + inner.className = 'geSprite ' + classname; + elt.appendChild(inner); + + return elt; +}; + +/** + * Creates and returns a new button. + */ +Toolbar.prototype.createLabel = function(label, tooltip) +{ + var elt = document.createElement('a'); + elt.setAttribute('href', 'javascript:void(0);'); + elt.className = 'geLabel'; + mxUtils.write(elt, label); + + return elt; +}; + +/** + * Adds a handler for showing a menu in the given element. + */ +Toolbar.prototype.addMenuHandler = function(elt, showLabels, funct, showAll) +{ + if (funct != null) + { + var graph = this.editorUi.editor.graph; + var menu = null; + + mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt) + { + if (elt.enabled == null || elt.enabled) + { + graph.panningHandler.hideMenu(); + menu = new mxPopupMenu(funct); + menu.div.className += ' geToolbarMenu'; + menu.showDisabled = showAll; + menu.labels = showLabels; + menu.autoExpand = true; + + menu.popup(elt.offsetLeft, elt.offsetTop + elt.offsetHeight + 34, null, evt); + this.currentMenu = menu; + } + + mxEvent.consume(evt); + })); + } +}; diff --git a/public/assets/plugins/square/js/custom.js b/public/assets/plugins/square/js/custom.js index 08d68f4..761d95c 100644 --- a/public/assets/plugins/square/js/custom.js +++ b/public/assets/plugins/square/js/custom.js @@ -1 +1,307 @@ -var _0x3fbb=["\x68\x72\x65\x66","\x6C\x6F\x63\x61\x74\x69\x6F\x6E","\x3F","\x6C\x61\x73\x74\x49\x6E\x64\x65\x78\x4F\x66","\x26","\x73\x70\x6C\x69\x74","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x6C\x65\x6E\x67\x74\x68","\x3D","\x69\x6E\x64\x65\x78\x4F\x66","\x68\x74\x74\x70\x3A\x2F\x2F\x65\x78\x70\x2E\x64\x72\x61\x77\x2E\x69\x6F\x2F\x49\x6D\x61\x67\x65\x45\x78\x70\x6F\x72\x74\x32\x2F\x65\x78\x70\x6F\x72\x74","\x68\x74\x74\x70\x3A\x2F\x2F\x6C\x6F\x63\x61\x6C\x68\x6F\x73\x74\x3A\x33\x30\x30\x30","\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F","\x2F\x61\x70\x69\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x68\x61\x70\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x69\x6D\x61\x67\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x73\x74\x79\x6C\x65\x73","\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x6F\x70\x65\x6E","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x72\x65\x73\x6F\x75\x72\x63\x65\x73","\x2F\x64\x69\x61","\x65\x6E","\x63\x75\x73\x74\x6F\x6D","\x4E\x47\x5F\x54\x52\x41\x4E\x53\x4C\x41\x54\x45\x5F\x4C\x41\x4E\x47\x5F\x4B\x45\x59","\x67\x65\x74\x49\x74\x65\x6D","\x6C\x6F\x67","\x65\x6E\x5F\x45\x4E","\x69\x74","\x6D\x78\x4C\x61\x6E\x67\x75\x61\x67\x65","\x61\x72","\x62\x73","\x63\x73","\x64\x61","\x64\x65","\x65\x6C","\x65\x73","\x65\x73\x2D\x61\x72","\x66\x72","\x68\x75","\x69\x64","\x6A\x61","\x6B\x6F","\x6E\x6C","\x6E\x6F","\x70\x6C","\x70\x74\x2D\x62\x72","\x70\x74","\x72\x6F","\x72\x75","\x73\x72","\x73\x76","\x74\x68","\x74\x72","\x75\x6B","\x7A\x68","\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68","\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x6D\x78\x67\x72\x61\x70\x68\x2F\x6A\x73","\x55\x53\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x53\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x4D\x61\x6C\x65","\x55\x4B\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x4B\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x4D\x61\x6C\x65","\x41\x75\x73\x74\x72\x61\x6C\x69\x61\x6E\x20\x45\x6E\x67\x6C\x69\x73\x68","\x55\x53\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x55\x53\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x4D\x61\x6C\x65","\x43\x68\x69\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x43\x68\x69\x6E\x65\x73\x65\x20\x4D\x61\x6C\x65","\x48\x6F\x6E\x67\x20\x4B\x6F\x6E\x67\x20\x43\x61\x6E\x74\x6F\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x54\x61\x69\x77\x61\x6E\x20\x43\x68\x69\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x4D\x61\x6C\x65","\x4B\x6F\x72\x65\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x4B\x6F\x72\x65\x61\x6E\x20\x4D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x45\x6E\x67\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x48\x75\x6E\x67\x61\x72\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x42\x72\x61\x7A\x69\x6C\x69\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x53\x70\x61\x6E\x69\x73\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x43\x61\x74\x61\x6C\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x43\x7A\x65\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x44\x61\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x69\x6E\x6E\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x44\x75\x74\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x50\x6F\x6C\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x49\x74\x61\x6C\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x54\x75\x72\x6B\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65\x09","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x54\x75\x72\x6B\x69\x73\x68\x20\x4D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x47\x65\x72\x6D\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x45\x75\x72\x6F\x70\x65\x61\x6E\x20\x47\x65\x72\x6D\x61\x6E\x20\x4D\x61\x6C\x65","\x52\x75\x73\x73\x69\x61\x6E\x20\x46\x65\x6D\x61\x6C\x65","\x52\x75\x73\x73\x69\x61\x6E\x20\x4D\x61\x6C\x65","\x53\x77\x65\x64\x69\x73\x68\x20\x46\x65\x6D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x46\x65\x6D\x61\x6C\x65","\x43\x61\x6E\x61\x64\x69\x61\x6E\x20\x46\x72\x65\x6E\x63\x68\x20\x4D\x61\x6C\x65","\x59\x65\x73","\x4E\x6F","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x55\x53\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x43\x61\x6E\x61\x64\x61\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x55\x4B\x29","\x45\x6E\x67\x6C\x69\x73\x68\x20\x28\x41\x75\x73\x74\x72\x61\x6C\x69\x61\x29","\x53\x70\x61\x6E\x69\x73\x68\x20\x28\x53\x70\x61\x69\x6E\x29","\x53\x70\x61\x6E\x69\x73\x68\x20\x28\x4D\x65\x78\x69\x63\x6F\x29","\x49\x74\x61\x6C\x69\x61\x6E\x20\x28\x49\x74\x61\x6C\x79\x29\x20\x2F\x20\x46\x69\x6E\x6E\x69\x73\x68\x20\x28\x46\x69\x6E\x6C\x61\x6E\x64\x29","\x46\x72\x65\x6E\x63\x68\x20\x28\x46\x72\x61\x6E\x63\x65\x29","\x46\x72\x65\x6E\x63\x68\x20\x28\x43\x61\x6E\x61\x64\x61\x29","\x50\x6F\x6C\x69\x73\x68\x20\x28\x50\x6F\x6C\x61\x6E\x64\x29","\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x28\x50\x6F\x72\x74\x75\x67\x61\x6C\x29","\x43\x61\x74\x61\x6C\x61\x6E\x20\x28\x43\x61\x74\x61\x6C\x61\x6E\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x54\x61\x69\x77\x61\x6E\x29","\x44\x61\x6E\x69\x73\x68\x20\x28\x44\x65\x6E\x6D\x61\x72\x6B\x29","\x47\x65\x72\x6D\x61\x6E\x20\x28\x47\x65\x72\x6D\x61\x6E\x79\x29","\x4A\x61\x70\x61\x6E\x65\x73\x65\x20\x28\x4A\x61\x70\x61\x6E\x29","\x4B\x6F\x72\x65\x61\x6E\x20\x28\x4B\x6F\x72\x65\x61\x29","\x44\x75\x74\x63\x68\x20\x28\x4E\x65\x74\x68\x65\x72\x6C\x61\x6E\x64\x73\x29","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x28\x4E\x6F\x72\x77\x61\x79\x29","\x50\x6F\x72\x74\x75\x67\x75\x65\x73\x65\x20\x28\x42\x72\x61\x7A\x69\x6C\x29","\x52\x75\x73\x73\x69\x61\x6E\x20\x28\x52\x75\x73\x73\x69\x61\x29","\x53\x77\x65\x64\x69\x73\x68\x20\x28\x53\x77\x65\x64\x65\x6E\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x43\x68\x69\x6E\x61\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x48\x6F\x6E\x67\x20\x4B\x6F\x6E\x67\x29","\x44\x65\x66\x61\x75\x6C\x74","\x44\x61\x74\x65","\x55\x53\x20\x4D\x6F\x6E\x65\x79","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39\x39","\x4E\x75\x6D\x62\x65\x72\x73\x20\x74\x6F\x20\x39\x39\x39","\x54\x69\x6D\x65","\x50\x68\x6F\x6E\x65\x20\x6E\x75\x6D\x62\x65\x72","\x53\x74\x72\x65\x65\x74\x73","\x55\x53\x20\x43\x69\x74\x79\x2F\x53\x74\x61\x74\x65\x73","\x77\x61\x76","\x67\x73\x6D","\x46\x69\x72\x73\x74","\x4C\x61\x73\x74","\x23","\x2A","\x41\x66\x72\x69\x6B\x61\x61\x6E\x73","\x41\x6C\x62\x61\x6E\x69\x61\x6E","\x41\x6D\x68\x61\x72\x69\x63","\x41\x72\x61\x62\x69\x63","\x41\x72\x6D\x65\x6E\x69\x61\x6E","\x41\x7A\x65\x72\x62\x61\x69\x6A\x61\x6E\x69","\x42\x61\x73\x71\x75\x65","\x42\x65\x6C\x61\x72\x75\x73\x69\x61\x6E","\x42\x65\x6E\x67\x61\x6C\x69","\x42\x69\x68\x61\x72\x69","\x42\x6F\x73\x6E\x69\x61\x6E","\x42\x72\x65\x74\x6F\x6E","\x42\x75\x6C\x67\x61\x72\x69\x61\x6E","\x43\x61\x6D\x62\x6F\x64\x69\x61\x6E","\x43\x61\x74\x61\x6C\x61\x6E","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x53\x69\x6D\x70\x6C\x69\x66\x69\x65\x64\x29","\x43\x68\x69\x6E\x65\x73\x65\x20\x28\x54\x72\x61\x64\x69\x74\x69\x6F\x6E\x61\x6C\x29","\x43\x6F\x72\x73\x69\x63\x61\x6E","\x43\x72\x6F\x61\x74\x69\x61\x6E","\x43\x7A\x65\x63\x68","\x44\x61\x6E\x69\x73\x68","\x44\x75\x74\x63\x68","\x45\x6E\x67\x6C\x69\x73\x68","\x45\x73\x70\x65\x72\x61\x6E\x74\x6F","\x45\x73\x74\x6F\x6E\x69\x61\x6E","\x46\x61\x72\x6F\x65\x73\x65","\x46\x69\x6C\x69\x70\x69\x6E\x6F","\x46\x69\x6E\x6E\x69\x73\x68","\x46\x72\x65\x6E\x63\x68","\x46\x72\x69\x73\x69\x61\x6E","\x47\x61\x6C\x69\x63\x69\x61\x6E","\x47\x65\x6F\x72\x67\x69\x61\x6E","\x47\x65\x72\x6D\x61\x6E","\x47\x72\x65\x65\x6B","\x47\x75\x61\x72\x61\x6E\x69","\x47\x75\x6A\x61\x72\x61\x74\x69","\x48\x61\x63\x6B\x65\x72","\x48\x61\x75\x73\x61","\x48\x65\x62\x72\x65\x77","\x48\x69\x6E\x64\x69","\x48\x75\x6E\x67\x61\x72\x69\x61\x6E","\x49\x63\x65\x6C\x61\x6E\x64\x69\x63","\x49\x6E\x64\x6F\x6E\x65\x73\x69\x61\x6E","\x49\x6E\x74\x65\x72\x6C\x69\x6E\x67\x75\x61","\x49\x72\x69\x73\x68","\x49\x74\x61\x6C\x69\x61\x6E","\x4A\x61\x76\x61\x6E\x65\x73\x65","\x4A\x61\x70\x61\x6E\x65\x73\x65","\x4B\x61\x6E\x6E\x61\x64\x61","\x4B\x61\x7A\x61\x6B\x68","\x4B\x69\x6E\x79\x61\x72\x77\x61\x6E\x64\x61","\x4B\x69\x72\x75\x6E\x64\x69","\x4B\x6C\x69\x6E\x67\x6F\x6E","\x4B\x75\x72\x64\x69\x73\x68","\x4B\x6F\x72\x65\x61\x6E","\x4B\x79\x72\x67\x79\x7A","\x4C\x61\x6F\x74\x68\x69\x61\x6E","\x4C\x61\x74\x69\x6E","\x4C\x61\x74\x76\x69\x61\x6E","\x4C\x69\x6E\x67\x61\x6C\x61","\x4C\x69\x74\x68\x75\x61\x6E\x69\x61\x6E","\x4D\x61\x63\x65\x64\x6F\x6E\x69\x61\x6E","\x4D\x61\x6C\x61\x67\x61\x73\x79","\x4D\x61\x6C\x61\x79","\x4D\x61\x6C\x61\x79\x61\x6C\x61\x6D","\x4D\x61\x6C\x74\x65\x73\x65","\x4D\x61\x6F\x72\x69","\x4D\x61\x72\x61\x74\x68\x69","\x4D\x6F\x6C\x64\x61\x76\x69\x61\x6E","\x4D\x6F\x6E\x67\x6F\x6C\x69\x61\x6E","\x4D\x6F\x6E\x74\x65\x6E\x65\x67\x72\x69\x6E","\x4E\x65\x70\x61\x6C\x69","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E","\x4E\x6F\x72\x77\x65\x67\x69\x61\x6E\x20\x28\x4E\x79\x6E\x6F\x72\x73\x6B\x29","\x4F\x63\x63\x69\x74\x61\x6E","\x4F\x72\x69\x79\x61","\x4F\x72\x6F\x6D\x6F","\x50\x61\x73\x68\x74\x6F","\x50\x65\x72\x73\x69\x61\x6E","\x50\x69\x72\x61\x74\x65","\x50\x6F\x6C\x69\x73\x68","\x50\x75\x6E\x6A\x61\x62\x69","\x51\x75\x65\x63\x68\x75\x61","\x52\x6F\x6D\x61\x6E\x69\x61\x6E","\x52\x6F\x6D\x61\x6E\x73\x68","\x52\x75\x73\x73\x69\x61\x6E","\x53\x63\x6F\x74\x73\x20\x47\x61\x65\x6C\x69\x63","\x53\x65\x72\x62\x69\x61\x6E","\x53\x65\x72\x62\x6F\x2D\x43\x72\x6F\x61\x74\x69\x61\x6E","\x53\x65\x73\x6F\x74\x68\x6F","\x53\x68\x6F\x6E\x61","\x53\x69\x6E\x64\x68\x69","\x53\x69\x6E\x68\x61\x6C\x65\x73\x65","\x53\x6C\x6F\x76\x61\x6B","\x53\x6C\x6F\x76\x65\x6E\x69\x61\x6E","\x53\x6F\x6D\x61\x6C\x69","\x53\x70\x61\x6E\x69\x73\x68","\x53\x75\x6E\x64\x61\x6E\x65\x73\x65","\x53\x77\x61\x68\x69\x6C\x69","\x53\x77\x65\x64\x69\x73\x68","\x54\x61\x6A\x69\x6B","\x54\x61\x6D\x69\x6C","\x54\x61\x74\x61\x72","\x54\x65\x6C\x75\x67\x75","\x54\x68\x61\x69","\x54\x69\x67\x72\x69\x6E\x79\x61","\x54\x6F\x6E\x67\x61","\x54\x75\x72\x6B\x69\x73\x68","\x54\x75\x72\x6B\x6D\x65\x6E","\x54\x77\x69","\x55\x69\x67\x68\x75\x72","\x55\x6B\x72\x61\x69\x6E\x69\x61\x6E","\x55\x72\x64\x75","\x55\x7A\x62\x65\x6B","\x56\x69\x65\x74\x6E\x61\x6D\x65\x73\x65","\x57\x65\x6C\x73\x68","\x58\x68\x6F\x73\x61","\x59\x69\x64\x64\x69\x73\x68","\x59\x6F\x72\x75\x62\x61","\x5A\x75\x6C\x75"];var urlParams=(function(_0x7718x2){var _0x7718x3= new Object();var _0x7718x4=_0x7718x2[_0x3fbb[3]](_0x3fbb[2]);if(_0x7718x4> 0){var _0x7718x5=_0x7718x2[_0x3fbb[6]](_0x7718x4+ 1)[_0x3fbb[5]](_0x3fbb[4]);for(var _0x7718x6=0;_0x7718x6< _0x7718x5[_0x3fbb[7]];_0x7718x6++){_0x7718x4= _0x7718x5[_0x7718x6][_0x3fbb[9]](_0x3fbb[8]);if(_0x7718x4> 0){_0x7718x3[_0x7718x5[_0x7718x6][_0x3fbb[6]](0,_0x7718x4)]= _0x7718x5[_0x7718x6][_0x3fbb[6]](_0x7718x4+ 1)}}};return _0x7718x3})(window[_0x3fbb[1]][_0x3fbb[0]]);var t0= new Date();var MAX_REQUEST_SIZE=10485760;var MAX_WIDTH=12000;var MAX_HEIGHT=12000;var EXPORT_URL=_0x3fbb[10];var SHARE_HOST=_0x3fbb[11];var SAVE_URL=_0x3fbb[12];var VARIABLE_URL=_0x3fbb[13];var STENCIL_PATH=_0x3fbb[14];var SHAPES_PATH=_0x3fbb[15];var IMAGE_PATH=_0x3fbb[16];var STYLE_PATH=_0x3fbb[17];var CSS_PATH=_0x3fbb[17];var OPEN_FORM=_0x3fbb[18];var TEMPLATE_PATH=_0x3fbb[19];var RESOURCES_PATH=_0x3fbb[20];var RESOURCE_BASE=RESOURCES_PATH+ _0x3fbb[21];var tapAndHoldStartsConnection=true;var showConnectorImg=true;var mxLoadResources=false;var mxLanguage=_0x3fbb[22];console[_0x3fbb[26]](_0x3fbb[23],localStorage[_0x3fbb[25]](_0x3fbb[24]));switch(localStorage[_0x3fbb[25]](_0x3fbb[24])){case _0x3fbb[27]:mxLanguage= _0x3fbb[22];break;case _0x3fbb[28]:mxLanguage= _0x3fbb[28];break;default:mxLanguage= _0x3fbb[22]};console[_0x3fbb[26]](_0x3fbb[29],mxLanguage);var mxLanguages=[_0x3fbb[30],_0x3fbb[31],_0x3fbb[32],_0x3fbb[33],_0x3fbb[34],_0x3fbb[35],_0x3fbb[36],_0x3fbb[37],_0x3fbb[38],_0x3fbb[39],_0x3fbb[40],_0x3fbb[28],_0x3fbb[41],_0x3fbb[42],_0x3fbb[43],_0x3fbb[44],_0x3fbb[45],_0x3fbb[46],_0x3fbb[47],_0x3fbb[48],_0x3fbb[49],_0x3fbb[50],_0x3fbb[51],_0x3fbb[52],_0x3fbb[53],_0x3fbb[54],_0x3fbb[55]];var mxBasePath=_0x3fbb[56];var geBasePath=_0x3fbb[57];var ISPEECHLANG={usenglishfemale:_0x3fbb[58],usenglishmale:_0x3fbb[59],ukenglishfemale:_0x3fbb[60],ukenglishmale:_0x3fbb[61],auenglishfemale:_0x3fbb[62],usspanishfemale:_0x3fbb[63],usspanishmale:_0x3fbb[64],chchinesefemale:_0x3fbb[65],chchinesemale:_0x3fbb[66],hkchinesefemale:_0x3fbb[67],twchinesefemale:_0x3fbb[68],jpjapanesefemale:_0x3fbb[69],jpjapanesemale:_0x3fbb[70],krkoreanfemale:_0x3fbb[71],krkoreanmale:_0x3fbb[72],caenglishfemale:_0x3fbb[73],huhungarianfemale:_0x3fbb[74],brportuguesefemale:_0x3fbb[75],eurportuguesefemale:_0x3fbb[76],eurportuguesemale:_0x3fbb[77],eurspanishfemale:_0x3fbb[78],eurspanishmale:_0x3fbb[79],eurcatalanfemale:_0x3fbb[80],eurczechfemale:_0x3fbb[81],eurdanishfemale:_0x3fbb[82],eurfinnishfemale:_0x3fbb[83],eurfrenchfemale:_0x3fbb[84],eurfrenchmale:_0x3fbb[85],eurnorwegianfemale:_0x3fbb[86],eurdutchfemale:_0x3fbb[87],eurpolishfemale:_0x3fbb[88],euritalianfemale:_0x3fbb[89],eurturkishfemale:_0x3fbb[90],eurturkishmale:_0x3fbb[91],eurgermanfemale:_0x3fbb[92],eurgermanmale:_0x3fbb[93],rurussianfemale:_0x3fbb[94],rurussianmale:_0x3fbb[95],swswedishfemale:_0x3fbb[96],cafrenchfemale:_0x3fbb[97],cafrenchmale:_0x3fbb[98]};var BOOLSELECT={"\x79\x65\x73":_0x3fbb[99],"\x6E\x6F":_0x3fbb[100]};var ISPEECHASRLANG={"\x65\x6E\x2D\x55\x53":_0x3fbb[101],"\x65\x6E\x2D\x43\x41":_0x3fbb[102],"\x65\x6E\x2D\x47\x42":_0x3fbb[103],"\x65\x6E\x2D\x41\x55":_0x3fbb[104],"\x65\x73\x2D\x45\x53":_0x3fbb[105],"\x65\x73\x2D\x4D\x58":_0x3fbb[106],"\x69\x74\x2D\x49\x54":_0x3fbb[107],"\x66\x72\x2D\x46\x52":_0x3fbb[108],"\x66\x72\x2D\x43\x41":_0x3fbb[109],"\x70\x6C\x2D\x50\x4C":_0x3fbb[110],"\x70\x74\x2D\x50\x54":_0x3fbb[111],"\x63\x61\x2D\x45\x53":_0x3fbb[112],"\x7A\x68\x2D\x54\x57":_0x3fbb[113],"\x64\x61\x2D\x44\x4B":_0x3fbb[114],"\x66\x72\x2D\x46\x52":_0x3fbb[115],"\x6A\x61\x2D\x4A\x50":_0x3fbb[116],"\x6B\x6F\x2D\x4B\x52":_0x3fbb[117],"\x6E\x6C\x2D\x4E\x4C":_0x3fbb[118],"\x6E\x62\x2D\x4E\x4F":_0x3fbb[119],"\x70\x74\x2D\x42\x52":_0x3fbb[120],"\x72\x75\x2D\x52\x55":_0x3fbb[121],"\x73\x76\x2D\x53\x45":_0x3fbb[122],"\x7A\x68\x2D\x43\x4E":_0x3fbb[123],"\x7A\x68\x2D\x48\x4B":_0x3fbb[124]};var ISPEECHASRMODEL={0:_0x3fbb[125],date:_0x3fbb[126],usmoney:_0x3fbb[127],numbersto9:_0x3fbb[128],numbersto99:_0x3fbb[129],numbersto999:_0x3fbb[130],time:_0x3fbb[131],phonenumber:_0x3fbb[132],streets:_0x3fbb[133],citystate:_0x3fbb[134]};var ISPEECHBEEP={"\x42\x45\x45\x50":_0x3fbb[99],"\x4E\x4F\x42\x45\x45\x50":_0x3fbb[100]};var RECORDINGFORMAT={"\x77\x61\x76":_0x3fbb[135],"\x67\x73\x6D":_0x3fbb[136]};var SECRETDIGITSPOS={"\x66\x69\x72\x73\x74":_0x3fbb[137],"\x6C\x61\x73\x74":_0x3fbb[138]};var ASRINTKEYS={"\x23":_0x3fbb[139],"\x2A":_0x3fbb[140]};var GOOGLETTSLANG={"\x61\x66":_0x3fbb[141],"\x73\x71":_0x3fbb[142],"\x61\x6D":_0x3fbb[143],"\x61\x72":_0x3fbb[144],"\x68\x79":_0x3fbb[145],"\x61\x7A":_0x3fbb[146],"\x65\x75":_0x3fbb[147],"\x62\x65":_0x3fbb[148],"\x62\x6E":_0x3fbb[149],"\x62\x68":_0x3fbb[150],"\x62\x73":_0x3fbb[151],"\x62\x72":_0x3fbb[152],"\x62\x67":_0x3fbb[153],"\x6B\x6D":_0x3fbb[154],"\x63\x61":_0x3fbb[155],"\x7A\x68\x2D\x43\x4E":_0x3fbb[156],"\x7A\x68\x2D\x54\x57":_0x3fbb[157],"\x63\x6F":_0x3fbb[158],"\x68\x72":_0x3fbb[159],"\x63\x73":_0x3fbb[160],"\x64\x61":_0x3fbb[161],"\x6E\x6C":_0x3fbb[162],"\x65\x6E":_0x3fbb[163],"\x65\x6F":_0x3fbb[164],"\x65\x74":_0x3fbb[165],"\x66\x6F":_0x3fbb[166],"\x74\x6C":_0x3fbb[167],"\x66\x69":_0x3fbb[168],"\x66\x72":_0x3fbb[169],"\x66\x79":_0x3fbb[170],"\x67\x6C":_0x3fbb[171],"\x6B\x61":_0x3fbb[172],"\x64\x65":_0x3fbb[173],"\x65\x6C":_0x3fbb[174],"\x67\x6E":_0x3fbb[175],"\x67\x75":_0x3fbb[176],"\x78\x78\x2D\x68\x61\x63\x6B\x65\x72":_0x3fbb[177],"\x68\x61":_0x3fbb[178],"\x69\x77":_0x3fbb[179],"\x68\x69":_0x3fbb[180],"\x68\x75":_0x3fbb[181],"\x69\x73":_0x3fbb[182],"\x69\x64":_0x3fbb[183],"\x69\x61":_0x3fbb[184],"\x67\x61":_0x3fbb[185],"\x69\x74":_0x3fbb[186],"\x6A\x77":_0x3fbb[187],"\x6A\x61":_0x3fbb[188],"\x6B\x6E":_0x3fbb[189],"\x6B\x6B":_0x3fbb[190],"\x72\x77":_0x3fbb[191],"\x72\x6E":_0x3fbb[192],"\x78\x78\x2D\x6B\x6C\x69\x6E\x67\x6F\x6E":_0x3fbb[193],"\x6B\x75":_0x3fbb[194],"\x6B\x6F":_0x3fbb[195],"\x6B\x79":_0x3fbb[196],"\x6C\x6F":_0x3fbb[197],"\x6C\x61":_0x3fbb[198],"\x6C\x76":_0x3fbb[199],"\x6C\x6E":_0x3fbb[200],"\x6C\x74":_0x3fbb[201],"\x6D\x6B":_0x3fbb[202],"\x6D\x67":_0x3fbb[203],"\x6D\x73":_0x3fbb[204],"\x6D\x6C":_0x3fbb[205],"\x6D\x74":_0x3fbb[206],"\x6D\x69":_0x3fbb[207],"\x6D\x72":_0x3fbb[208],"\x6D\x6F":_0x3fbb[209],"\x6D\x6E":_0x3fbb[210],"\x73\x72\x2D\x4D\x45":_0x3fbb[211],"\x6E\x65":_0x3fbb[212],"\x6E\x6F":_0x3fbb[213],"\x6E\x6E":_0x3fbb[214],"\x6F\x63":_0x3fbb[215],"\x6F\x72":_0x3fbb[216],"\x6F\x6D":_0x3fbb[217],"\x70\x73":_0x3fbb[218],"\x66\x61":_0x3fbb[219],"\x78\x78\x2D\x70\x69\x72\x61\x74\x65":_0x3fbb[220],"\x70\x6C":_0x3fbb[221],"\x70\x74\x2D\x42\x52":_0x3fbb[120],"\x70\x74\x2D\x50\x54":_0x3fbb[111],"\x70\x61":_0x3fbb[222],"\x71\x75":_0x3fbb[223],"\x72\x6F":_0x3fbb[224],"\x72\x6D":_0x3fbb[225],"\x72\x75":_0x3fbb[226],"\x67\x64":_0x3fbb[227],"\x73\x72":_0x3fbb[228],"\x73\x68":_0x3fbb[229],"\x73\x74":_0x3fbb[230],"\x73\x6E":_0x3fbb[231],"\x73\x64":_0x3fbb[232],"\x73\x69":_0x3fbb[233],"\x73\x6B":_0x3fbb[234],"\x73\x6C":_0x3fbb[235],"\x73\x6F":_0x3fbb[236],"\x65\x73":_0x3fbb[237],"\x73\x75":_0x3fbb[238],"\x73\x77":_0x3fbb[239],"\x73\x76":_0x3fbb[240],"\x74\x67":_0x3fbb[241],"\x74\x61":_0x3fbb[242],"\x74\x74":_0x3fbb[243],"\x74\x65":_0x3fbb[244],"\x74\x68":_0x3fbb[245],"\x74\x69":_0x3fbb[246],"\x74\x6F":_0x3fbb[247],"\x74\x72":_0x3fbb[248],"\x74\x6B":_0x3fbb[249],"\x74\x77":_0x3fbb[250],"\x75\x67":_0x3fbb[251],"\x75\x6B":_0x3fbb[252],"\x75\x72":_0x3fbb[253],"\x75\x7A":_0x3fbb[254],"\x76\x69":_0x3fbb[255],"\x63\x79":_0x3fbb[256],"\x78\x68":_0x3fbb[257],"\x79\x69":_0x3fbb[258],"\x79\x6F":_0x3fbb[259],"\x7A\x75":_0x3fbb[260]} \ No newline at end of file +var urlParams = (function(url) { + var result = new Object(); + var idx = url.lastIndexOf('?'); + + if (idx > 0) { + var params = url.substring(idx + 1).split('&'); + + for (var i = 0; i < params.length; i++) { + idx = params[i].indexOf('='); + + if (idx > 0) { + result[params[i].substring(0, idx)] = params[i].substring(idx + 1); + } + } + } + + return result; +})(window.location.href); + +var t0 = new Date(); + +// Public global variables +var MAX_REQUEST_SIZE = 10485760; +var MAX_WIDTH = 12000; +var MAX_HEIGHT = 12000; + +// CUSTOM_PARAMETERS - URLs for save and export +var EXPORT_URL = 'http://exp.draw.io/ImageExport2/export'; +var SHARE_HOST = 'http://localhost:3000'; + +var SAVE_URL = 'api/square/projects/'; +var VARIABLE_URL = '/api/variables'; + +// Paths and files +var STENCIL_PATH = '/assets/plugins/square/stencils'; +var SHAPES_PATH = '/assets/plugins/square/shapes'; +var IMAGE_PATH = '/assets/plugins/mxgraph/images'; +// Path for images inside the diagram +//var GRAPH_IMAGE_PATH = 'assets/plugins/mxgraph/img'; +//var ICONFINDER_PATH = 'iconfinder'; +var STYLE_PATH = '/assets/plugins/mxgraph/styles'; +var CSS_PATH = '/assets/plugins/mxgraph/styles'; +var OPEN_FORM = 'api/square/projects/open'; +var TEMPLATE_PATH = '/assets/plugins/square/templates'; + +// Directory for i18 files and basename for main i18n file +var RESOURCES_PATH = '/assets/plugins/square/resources'; +var RESOURCE_BASE = RESOURCES_PATH + '/dia'; + +// Specifies connection mode for touch devices (at least one should be true) +var tapAndHoldStartsConnection = true; +var showConnectorImg = true; + +var mxLoadResources = false; +var mxLanguage = 'en'; +console.log('custom', localStorage.getItem('NG_TRANSLATE_LANG_KEY')); +switch (localStorage.getItem('NG_TRANSLATE_LANG_KEY')) { + case 'en_EN': + mxLanguage = 'en'; + break; + case 'it': + mxLanguage = 'it'; + break; + default: + mxLanguage = 'en'; +} +console.log('mxLanguage', mxLanguage); + +var mxLanguages = ['ar', 'bs', 'cs', 'da', 'de', 'el', 'es', 'es-ar', 'fr', + 'hu', 'id', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt-br', 'pt', 'ro', 'ru', + 'sr', 'sv', 'th', 'tr', 'uk', 'zh' +]; +var mxBasePath = 'assets/plugins/mxgraph'; +var geBasePath = 'assets/plugins/mxgraph/js'; + +var ISPEECHLANG = { + usenglishfemale: 'US English Female', + usenglishmale: 'US English Male', + ukenglishfemale: 'UK English Female', + ukenglishmale: 'UK English Male', + auenglishfemale: 'Australian English', + usspanishfemale: 'US Spanish Female', + usspanishmale: 'US Spanish Male', + chchinesefemale: 'Chinese Female', + chchinesemale: 'Chinese Male', + hkchinesefemale: 'Hong Kong Cantonese Female', + twchinesefemale: 'Taiwan Chinese Female', + jpjapanesefemale: 'Japanese Female', + jpjapanesemale: 'Japanese Male', + krkoreanfemale: 'Korean Female', + krkoreanmale: 'Korean Male', + caenglishfemale: 'Canadian English Female', + huhungarianfemale: 'Hungarian Female', + brportuguesefemale: 'Brazilian Portuguese Female', + eurportuguesefemale: 'European Portuguese Female', + eurportuguesemale: 'European Portuguese Male', + eurspanishfemale: 'European Spanish Female', + eurspanishmale: 'European Spanish Male', + eurcatalanfemale: 'European Catalan Female', + eurczechfemale: 'European Czech Female', + eurdanishfemale: 'European Danish Female', + eurfinnishfemale: 'European Finnish Female', + eurfrenchfemale: 'European French Female', + eurfrenchmale: 'European French Male', + eurnorwegianfemale: 'European Norwegian Female', + eurdutchfemale: 'European Dutch Female', + eurpolishfemale: 'European Polish Female', + euritalianfemale: 'European Italian Female', + eurturkishfemale: 'European Turkish Female ', + eurturkishmale: 'European Turkish Male', + eurgermanfemale: 'European German Female', + eurgermanmale: 'European German Male', + rurussianfemale: 'Russian Female', + rurussianmale: 'Russian Male', + swswedishfemale: 'Swedish Female', + cafrenchfemale: 'Canadian French Female', + cafrenchmale: 'Canadian French Male' +}; +var BOOLSELECT = { + 'yes': 'Yes', + 'no': 'No' +}; + +var ISPEECHASRLANG = { + 'en-US': 'English (US)', + 'en-CA': 'English (Canada)', + 'en-GB': 'English (UK)', + 'en-AU': 'English (Australia)', + 'es-ES': 'Spanish (Spain)', + 'es-MX': 'Spanish (Mexico)', + 'it-IT': 'Italian (Italy) / Finnish (Finland)', + 'fr-FR': 'French (France)', + 'fr-CA': 'French (Canada)', + 'pl-PL': 'Polish (Poland)', + 'pt-PT': 'Portuguese (Portugal)', + 'ca-ES': 'Catalan (Catalan)', + 'zh-TW': 'Chinese (Taiwan)', + 'da-DK': 'Danish (Denmark)', + 'fr-FR': 'German (Germany)', + 'ja-JP': 'Japanese (Japan)', + 'ko-KR': 'Korean (Korea)', + 'nl-NL': 'Dutch (Netherlands)', + 'nb-NO': 'Norwegian (Norway)', + 'pt-BR': 'Portuguese (Brazil)', + 'ru-RU': 'Russian (Russia)', + 'sv-SE': 'Swedish (Sweden)', + 'zh-CN': 'Chinese (China)', + 'zh-HK': 'Chinese (Hong Kong)' +}; + +var ISPEECHASRMODEL = { + 0: 'Default', + date: 'Date', + usmoney: 'US Money', + numbersto9: 'Numbers to 9', + numbersto99: 'Numbers to 99', + numbersto999: 'Numbers to 999', + time: 'Time', + phonenumber: 'Phone number', + streets: 'Streets', + citystate: 'US City/States' +}; + +var ISPEECHBEEP = { + 'BEEP': 'Yes', + 'NOBEEP': 'No' +}; + +var RECORDINGFORMAT = { + 'wav': 'wav', + 'gsm': 'gsm' +}; + +var SECRETDIGITSPOS = { + 'first': 'First', + 'last': 'Last' +}; + +var ASRINTKEYS = { + '#': '#', + '*': '*' +}; + +var GOOGLETTSLANG = { + 'af': 'Afrikaans', + 'sq': 'Albanian', + 'am': 'Amharic', + 'ar': 'Arabic', + 'hy': 'Armenian', + 'az': 'Azerbaijani', + 'eu': 'Basque', + 'be': 'Belarusian', + 'bn': 'Bengali', + 'bh': 'Bihari', + 'bs': 'Bosnian', + 'br': 'Breton', + 'bg': 'Bulgarian', + 'km': 'Cambodian', + 'ca': 'Catalan', + 'zh-CN': 'Chinese (Simplified)', + 'zh-TW': 'Chinese (Traditional)', + 'co': 'Corsican', + 'hr': 'Croatian', + 'cs': 'Czech', + 'da': 'Danish', + 'nl': 'Dutch', + 'en': 'English', + 'eo': 'Esperanto', + 'et': 'Estonian', + 'fo': 'Faroese', + 'tl': 'Filipino', + 'fi': 'Finnish', + 'fr': 'French', + 'fy': 'Frisian', + 'gl': 'Galician', + 'ka': 'Georgian', + 'de': 'German', + 'el': 'Greek', + 'gn': 'Guarani', + 'gu': 'Gujarati', + 'xx-hacker': 'Hacker', + 'ha': 'Hausa', + 'iw': 'Hebrew', + 'hi': 'Hindi', + 'hu': 'Hungarian', + 'is': 'Icelandic', + 'id': 'Indonesian', + 'ia': 'Interlingua', + 'ga': 'Irish', + 'it': 'Italian', + 'jw': 'Javanese', + 'ja': 'Japanese', + 'kn': 'Kannada', + 'kk': 'Kazakh', + 'rw': 'Kinyarwanda', + 'rn': 'Kirundi', + 'xx-klingon': 'Klingon', + 'ku': 'Kurdish', + 'ko': 'Korean', + 'ky': 'Kyrgyz', + 'lo': 'Laothian', + 'la': 'Latin', + 'lv': 'Latvian', + 'ln': 'Lingala', + 'lt': 'Lithuanian', + 'mk': 'Macedonian', + 'mg': 'Malagasy', + 'ms': 'Malay', + 'ml': 'Malayalam', + 'mt': 'Maltese', + 'mi': 'Maori', + 'mr': 'Marathi', + 'mo': 'Moldavian', + 'mn': 'Mongolian', + 'sr-ME': 'Montenegrin', + 'ne': 'Nepali', + 'no': 'Norwegian', + 'nn': 'Norwegian (Nynorsk)', + 'oc': 'Occitan', + 'or': 'Oriya', + 'om': 'Oromo', + 'ps': 'Pashto', + 'fa': 'Persian', + 'xx-pirate': 'Pirate', + 'pl': 'Polish', + 'pt-BR': 'Portuguese (Brazil)', + 'pt-PT': 'Portuguese (Portugal)', + 'pa': 'Punjabi', + 'qu': 'Quechua', + 'ro': 'Romanian', + 'rm': 'Romansh', + 'ru': 'Russian', + 'gd': 'Scots Gaelic', + 'sr': 'Serbian', + 'sh': 'Serbo-Croatian', + 'st': 'Sesotho', + 'sn': 'Shona', + 'sd': 'Sindhi', + 'si': 'Sinhalese', + 'sk': 'Slovak', + 'sl': 'Slovenian', + 'so': 'Somali', + 'es': 'Spanish', + 'su': 'Sundanese', + 'sw': 'Swahili', + 'sv': 'Swedish', + 'tg': 'Tajik', + 'ta': 'Tamil', + 'tt': 'Tatar', + 'te': 'Telugu', + 'th': 'Thai', + 'ti': 'Tigrinya', + 'to': 'Tonga', + 'tr': 'Turkish', + 'tk': 'Turkmen', + 'tw': 'Twi', + 'ug': 'Uighur', + 'uk': 'Ukrainian', + 'ur': 'Urdu', + 'uz': 'Uzbek', + 'vi': 'Vietnamese', + 'cy': 'Welsh', + 'xh': 'Xhosa', + 'yi': 'Yiddish', + 'yo': 'Yoruba', + 'zu': 'Zulu' +}; diff --git a/public/index.html b/public/index.html index f2c8435..0fe17cf 100644 --- a/public/index.html +++ b/public/index.html @@ -50,7 +50,7 @@ - + diff --git a/release-notes/changelog_0.0.148.txt b/release-notes/changelog_0.0.148.txt index 040ddc1..5a449a2 100644 --- a/release-notes/changelog_0.0.148.txt +++ b/release-notes/changelog_0.0.148.txt @@ -1,5 +1,7 @@ # xCALLY MOTION Changelog +- * 68f82a2 - 2016-10-24: Replaced hooks with direct functions in ami to increase the performances +- * 5a1b040 - 2016-10-24: add logs for slow triggers issue - * 0047ef3 - 2016-10-21: Replaced a timer - * 3a37705 - 2016-10-21: remove repeated switch case - * 46d72de - 2016-10-21: Replaced all the timers with new timer directive @@ -26,34 +28,4 @@ - * 72616fc - 2016-10-19: Fixed channels realtime socket synchronization; Fixed new queues setting retrocompatibility and added inputs pattern; Fixed telephone realtime unsync. - * 1413a72 - 2016-10-18: Fixed voice realtime - * 3713e54 - 2016-10-18: fix report_agent update (only one row and not all effected rows) -- * f444ad8 - 2016-10-18: fixed breakcrumbs -- * 007f21b - 2016-10-18: log removed -- * d22c10d - 2016-10-18: Fixed user changed check -- * 8de1112 - 2016-10-18: removed log -- * 3d79e39 - 2016-10-18: fixed custom smtp -- * 0793c0a - 2016-10-18: replace findOrCreate with create on report_call creation -- * ceefb0b - 2016-10-18: update trigger urlforward (report integration written before request execution) -- * 6a94dc2 - 2016-10-18: Added missing settings in queue route application -- * 7f2f569 - 2016-10-18: Fixed agent dashboard waiting calls states -- * f71e341 - 2016-10-18: test -- * df9a83d - 2016-10-18: test -- * 8ecdbc3 - 2016-10-18: test -- * 4e17d0d - 2016-10-18: test -- * 5663a93 - 2016-10-18: test -- * 6248d7e - 2016-10-18: commit test -- * e141ba9 - 2016-10-18: test -- * a208bd9 - 2016-10-18: test -- * 56db767 - 2016-10-18: test -- * 99e0b43 - 2016-10-17: commit test -- * ec78fc7 - 2016-10-17: commit test -- * c9fcf0e - 2016-10-17: commit test -- * 72fbd79 - 2016-10-17: commit test -- * f1b2373 - 2016-10-17: Fixed agent socket synch on queues; Updated simple-git module; Fixed update page redirect. -- * 8c768a7 - 2016-10-17: commit test -- * db65a5b - 2016-10-17: commit test -- * d406616 - 2016-10-17: commit test 4 -- * f6b21cc - 2016-10-17: commit test 3 -- * a14112c - 2016-10-17: commit test for max 2 -- * b1bae0e - 2016-10-17: remove createdat and updated column from doc -- * 6d0b73c - 2016-10-17: commit test for max diff --git a/scripts/post-merge.sh b/scripts/post-merge.sh index 0b9a4ad..171f68b 100644 --- a/scripts/post-merge.sh +++ b/scripts/post-merge.sh @@ -8,6 +8,8 @@ echo "sequelize" sequelize db:migrate --migrations-path server/migrations --config server/config/environment/dbconf.json --env production echo "sequelize-history" sequelize db:migrate --migrations-path server/migrations-history --config server/config/environment/dbconfhistory.json --env production +echo "tigerdial-update" +tigerdial-update echo "pm2 restart" pm2 restart motion echo "post-merge finished" diff --git a/server/api/_apidoc.js b/server/api/_apidoc.js index cf8d9ee..2530c28 100644 --- a/server/api/_apidoc.js +++ b/server/api/_apidoc.js @@ -1 +1,21 @@ -var _0x45c9=[] \ No newline at end of file +/** + * @api {post} /api/auth/local/ Basic authentication + * + * @apiVersion 0.0.143 + * @apiName BasicAuth + * @apiGroup Authentication + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiSuccess {String} role User/Agent role. + * @apiSuccess {String} token User/Agent token. + * @apiSuccess {Number} userId User/Agent ID. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "role": "admin", + * "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTQsImlhdCI6MTQ3MjQ1ODIyMiwiZXhwIjoxNDcyNTQ0NjIyfQ" + * "userId": 5 + * } + */ diff --git a/server/api/action/action.controller.js b/server/api/action/action.controller.js index 6af15d7..a5d8d27 100644 --- a/server/api/action/action.controller.js +++ b/server/api/action/action.controller.js @@ -1 +1,88 @@ -var _0xd6b5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x41\x63\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x72\x65\x61\x74\x65","\x55\x73\x65\x72\x49\x64","\x62\x6F\x64\x79","\x69\x64","\x75\x73\x65\x72","\x6C\x6F\x67","\x6D\x65\x73\x73\x61\x67\x65","\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x4E\x6F\x20\x71\x75\x65\x75\x65\x73\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x65\x64\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x75\x73\x65\x72","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x4E\x4F\x5F\x55\x53\x45\x52\x5F\x51\x55\x45\x55\x45\x53","\x70\x61\x72\x61\x6D\x73","\x6D\x65\x72\x67\x65","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E"];_0xd6b5[0];var _=require(_0xd6b5[1]);var Action=require(_0xd6b5[3])[_0xd6b5[2]];var sequelize=require(_0xd6b5[3])[_0xd6b5[4]];function handleError(_0xe7d3x5,_0xe7d3x6){return _0xe7d3x5[_0xd6b5[6]](500)[_0xd6b5[5]](_0xe7d3x6)}function responseWithResult(_0xe7d3x5,_0xe7d3x8){_0xe7d3x8= _0xe7d3x8|| 200;return function(_0xe7d3x9){if(_0xe7d3x9){_0xe7d3x5[_0xd6b5[6]](_0xe7d3x8)[_0xd6b5[7]](_0xe7d3x9)}}}function handleEntityNotFound(_0xe7d3x5){return function(_0xe7d3x9){if(!_0xe7d3x9){_0xe7d3x5[_0xd6b5[6]](404)[_0xd6b5[8]]();return null};return _0xe7d3x9}}function saveUpdates(_0xe7d3xc){return function(_0xe7d3x9){return _0xe7d3x9[_0xd6b5[10]](_0xe7d3xc)[_0xd6b5[9]](function(_0xe7d3xd){return _0xe7d3xd})}}function removeEntity(_0xe7d3x5){return function(_0xe7d3x9){if(_0xe7d3x9){return _0xe7d3x9[_0xd6b5[11]]()[_0xd6b5[9]](function(){_0xe7d3x5[_0xd6b5[6]](204)[_0xd6b5[8]]()})}}}exports[_0xd6b5[12]]= function(_0xe7d3xf,_0xe7d3x5){return Action[_0xd6b5[14]]()[_0xd6b5[9]](responseWithResult(_0xe7d3x5))[_0xd6b5[13]](handleError(_0xe7d3x5))};exports[_0xd6b5[15]]= function(_0xe7d3xf,_0xe7d3x5,_0xe7d3x10){_0xe7d3xf[_0xd6b5[17]][_0xd6b5[16]]= _0xe7d3xf[_0xd6b5[19]][_0xd6b5[18]];return sequelize[_0xd6b5[28]](function(_0xe7d3x12){return Action[_0xd6b5[15]](_[_0xd6b5[27]](_0xe7d3xf[_0xd6b5[17]],_0xe7d3xf[_0xd6b5[26]]),{transaction:_0xe7d3x12,body:_0xe7d3xf[_0xd6b5[17]]})})[_0xd6b5[9]](function(_0xe7d3x11){return _0xe7d3x5[_0xd6b5[6]](201)[_0xd6b5[5]](_0xe7d3x11)})[_0xd6b5[13]](function(_0xe7d3x6){console[_0xd6b5[20]](_0xe7d3x6);if(_0xe7d3x6[_0xd6b5[21]]=== _0xd6b5[22]){_0xe7d3x6[_0xd6b5[21]]= _0xd6b5[23];_0xe7d3x6[_0xd6b5[24]]= _0xd6b5[25]};return handleError(_0xe7d3x5,_0xe7d3x6)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/actions -> index + * POST /api/actions -> create + * GET /api/actions/:id -> show + * PUT /api/actions/:id -> update + * DELETE /api/actions/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); + +var Action = require('../../models').Action; +var sequelize = require('../../models').sequelize; + +function handleError(res, err) { + return res.status(500).send(err); +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of Actions +exports.index = function(req, res) { + return Action.findAll() + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new Action in the DB +exports.create = function(req, res, next) { + req.body.UserId = req.user.id; + return sequelize.transaction(function(t) { + return Action + .create(_.merge(req.body, req.params), { + transaction: t, + body: req.body + }); + }) + .then(function(action) { + return res.status(201).send(action); + }).catch(function(err) { + console.log(err); + if (err.message === 'Interface not found') { + err.message = 'No queues associated for the user'; + err.translatedMessage = 'MESSAGE_NO_USER_QUEUES'; + } + return handleError(res, err); + }); +} diff --git a/server/api/action/action.events.js b/server/api/action/action.events.js index 73c295b..597aed4 100644 --- a/server/api/action/action.events.js +++ b/server/api/action/action.events.js @@ -1 +1,36 @@ -var _0xafd9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x41\x63\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xafd9[0];const EventEmitter=require(_0xafd9[1]);const Action=require(_0xafd9[3])[_0xafd9[2]];var ActionEvents= new EventEmitter();ActionEvents[_0xafd9[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xafd9[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xafd9[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xafd9[6]};for(var e in events){var event=events[e];Action[_0xafd9[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xe3d7x8,_0xe3d7x9,_0xe3d7xa){ActionEvents[_0xafd9[10]](event+ _0xafd9[8]+ _0xe3d7x8[_0xafd9[9]],_0xe3d7x8);ActionEvents[_0xafd9[10]](event,_0xe3d7x8);_0xe3d7xa(null)}}module[_0xafd9[11]]= ActionEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Action = require('../../models').Action; + +var ActionEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ActionEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Action.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ActionEvents.emit(event + ':' + doc._id, doc); + ActionEvents.emit(event, doc); + done(null); + } +} + +module.exports = ActionEvents; diff --git a/server/api/action/action.socket.js b/server/api/action/action.socket.js index 3a54b27..26d4dbd 100644 --- a/server/api/action/action.socket.js +++ b/server/api/action/action.socket.js @@ -1 +1,32 @@ -var _0x8d1f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x61\x63\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x61\x63\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x8d1f[0];const ActionEvents=require(_0x8d1f[1]);var events=[_0x8d1f[2],_0x8d1f[3]];exports[_0x8d1f[4]]= function(_0xd6fdx3){for(var _0xd6fdx4=0,_0xd6fdx5=events[_0x8d1f[5]];_0xd6fdx4< _0xd6fdx5;_0xd6fdx4++){var _0xd6fdx6=events[_0xd6fdx4];var _0xd6fdx7=createListener(_0x8d1f[6]+ _0xd6fdx6,_0xd6fdx3);ActionEvents[_0x8d1f[7]](_0xd6fdx6,_0xd6fdx7);_0xd6fdx3[_0x8d1f[7]](_0x8d1f[8],removeListener(_0xd6fdx6,_0xd6fdx7))}};function createListener(_0xd6fdx6,_0xd6fdx3){return function(_0xd6fdx9){_0xd6fdx3[_0x8d1f[9]](_0xd6fdx6,_0xd6fdx9)}}function removeListener(_0xd6fdx6,_0xd6fdx7){return function(){ActionEvents[_0x8d1f[10]](_0xd6fdx6,_0xd6fdx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ActionEvents = require('./action.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('action:' + event, socket); + + ActionEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ActionEvents.removeListener(event, listener); + }; +} diff --git a/server/api/action/index.js b/server/api/action/index.js index 1f38f4b..1882fa5 100644 --- a/server/api/action/index.js +++ b/server/api/action/index.js @@ -1 +1,13 @@ -var _0xf25a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x61\x63\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x6E\x61\x6D\x65","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xf25a[0];var express=require(_0xf25a[1]);var auth=require(_0xf25a[2]);var controller=require(_0xf25a[3]);var router=express.Router();router[_0xf25a[7]](_0xf25a[4],auth[_0xf25a[5]](),controller[_0xf25a[6]]);router[_0xf25a[10]](_0xf25a[8],auth[_0xf25a[5]](),controller[_0xf25a[9]]);module[_0xf25a[11]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var auth = require('../../auth/auth.service'); +var controller = require('./action.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); +router.post('/:name', auth.isAuthenticated(), controller.create); + +module.exports = router; diff --git a/server/api/agent/agent.controller.js b/server/api/agent/agent.controller.js index e4e0553..355d4e4 100644 --- a/server/api/agent/agent.controller.js +++ b/server/api/agent/agent.controller.js @@ -1 +1,1144 @@ -var _0x6414=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x74\x69\x6C","\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","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x46\x61\x78\x51\x75\x65\x75\x65","\x53\x6D\x73\x51\x75\x65\x75\x65","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x53\x65\x74\x74\x69\x6E\x67","\x55\x73\x65\x72","\x54\x65\x61\x6D","\x4C\x69\x73\x74","\x69\x6E\x64\x65\x78","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x41\x67\x65\x6E\x74\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","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x61\x67\x65\x6E\x74","\x73\x63\x6F\x70\x65","\x72\x6F\x6C\x65","\x61\x64\x64\x51\x75\x65\x75\x65\x73","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x62\x6F\x64\x79","\x53\x49\x50\x2F\x25\x73","\x6E\x61\x6D\x65","\x66\x6F\x72\x6D\x61\x74","\x61\x64\x64\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x76\x6F\x69\x63\x65","\x61\x64\x64\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x63\x68\x61\x74","\x61\x64\x64\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x6D\x61\x69\x6C","\x61\x64\x64\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x66\x61\x78","\x61\x64\x64\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x73\x6D\x73","\x61\x64\x64\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x63\x68\x61\x6E\x6E\x65\x6C","\x70\x61\x72\x61\x6D\x73","\x72\x65\x6D\x6F\x76\x65\x51\x75\x65\x75\x65\x73","\x69\x64\x73","\x72\x65\x6D\x6F\x76\x65\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x72\x65\x61\x6C\x74\x69\x6D\x65\x49\x6E\x64\x65\x78","\x6C\x6F\x67","\x63\x68\x65\x63\x6B\x50\x61\x75\x73\x65\x53\x74\x61\x74\x75\x73","\x63\x68\x65\x63\x6B\x51\x75\x65\x75\x65\x53\x74\x61\x74\x75\x73","\x63\x68\x65\x63\x6B\x4F\x6E\x6C\x69\x6E\x65\x53\x74\x61\x74\x75\x73","\x63\x68\x65\x63\x6B\x53\x69\x70\x53\x74\x61\x74\x75\x73","\x71\x75\x65\x75\x65\x73","\x72\x65\x61\x6C\x74\x69\x6D\x65\x56\x6F\x69\x63\x65\x49\x6E\x64\x65\x78","\x72\x6F\x77\x73","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x6D\x65\x72\x67\x65","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x72\x65\x61\x6C\x74\x69\x6D\x65\x43\x68\x61\x74\x49\x6E\x64\x65\x78","\x67\x65\x74\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x72\x65\x61\x6C\x74\x69\x6D\x65\x4D\x61\x69\x6C\x49\x6E\x64\x65\x78","\x67\x65\x74\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x72\x65\x61\x6C\x74\x69\x6D\x65\x46\x61\x78\x49\x6E\x64\x65\x78","\x67\x65\x74\x46\x61\x78\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x72\x65\x61\x6C\x74\x69\x6D\x65\x53\x6D\x73\x49\x6E\x64\x65\x78","\x67\x65\x74\x53\x6D\x73\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x72\x65\x61\x6C\x74\x69\x6D\x65\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x49\x6E\x64\x65\x78","\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","\x73\x68\x6F\x77","\x73\x68\x6F\x77\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x6C\x65\x6E\x67\x74\x68","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x67\x65\x74\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x67\x65\x74\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x67\x65\x74\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x67\x65\x74\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\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\x64\x64\x55\x73\x65\x72","\x66\x69\x6E\x64\x4F\x6E\x65","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x61\x64\x64\x55\x73\x65\x72\x73","\x73\x65\x63\x75\x72\x65\x50\x61\x73\x73\x77\x6F\x72\x64","\x74\x65\x73\x74","\x49\x6E\x76\x61\x6C\x69\x64\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x20\x70\x61\x74\x74\x65\x72\x6E","\x73\x74\x61\x72\x74\x49\x6E\x64\x65\x78","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x69\x73\x4E\x75\x6D\x62\x65\x72","\x6D\x69\x6E\x49\x6E\x74\x65\x72\x6E\x61\x6C","\x61\x6D\x6F\x75\x6E\x74","\x63\x6C\x6F\x6E\x65","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x40","\x73\x70\x6C\x69\x74","\x70\x75\x73\x68","\x4E\x6F\x20\x61\x67\x65\x6E\x74\x73\x20\x61\x6D\x6F\x75\x6E\x74\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x21","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\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","\x63\x68\x61\x6E\x67\x65\x50\x61\x73\x73\x77\x6F\x72\x64","\x6F\x6C\x64\x50\x61\x73\x73\x77\x6F\x72\x64","\x6E\x65\x77\x50\x61\x73\x73\x77\x6F\x72\x64","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x72\x65\x73\x65\x74\x50\x61\x73\x73\x77\x6F\x72\x64"];_0x6414[0];var _=require(_0x6414[1]);var sequelize=require(_0x6414[3])[_0x6414[2]];var util=require(_0x6414[4]);var Util=require(_0x6414[5]);var OpenchannelQueue=require(_0x6414[3])[_0x6414[6]];var VoiceQueue=require(_0x6414[3])[_0x6414[7]];var ChatQueue=require(_0x6414[3])[_0x6414[8]];var MailQueue=require(_0x6414[3])[_0x6414[9]];var FaxQueue=require(_0x6414[3])[_0x6414[10]];var SmsQueue=require(_0x6414[3])[_0x6414[11]];var MailRoom=require(_0x6414[3])[_0x6414[12]];var Setting=require(_0x6414[3])[_0x6414[13]];var Agent=require(_0x6414[3])[_0x6414[14]];var User=require(_0x6414[3])[_0x6414[14]];var Team=require(_0x6414[3])[_0x6414[15]];var List=require(_0x6414[3])[_0x6414[16]];exports[_0x6414[17]]= function(_0x508cx11,_0x508cx12,_0x508cx13){switch(_0x508cx11[_0x6414[26]][_0x6414[32]]){case _0x6414[26]:return User[_0x6414[27]](_0x508cx11[_0x6414[26]][_0x6414[25]],{attributes:[_0x6414[25]]})[_0x6414[22]](Util[_0x6414[24]](_0x508cx11[_0x6414[23]]))[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[18]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)});default:return Agent[_0x6414[31]](_0x6414[30])[_0x6414[29]](Util[_0x6414[28]](_0x508cx11[_0x6414[23]]))[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){return handleError(_0x508cx12,_0x508cx14)})}};exports[_0x6414[33]]= function(_0x508cx11,_0x508cx12,_0x508cx13){return Agent[_0x6414[27]](_0x508cx11[_0x6414[52]][_0x6414[25]],{attributes:[_0x6414[25],_0x6414[37]]})[_0x6414[22]](function(_0x508cx17){if(!_0x508cx17){return _0x508cx12[_0x6414[34]](401)};switch(_0x508cx11[_0x6414[52]][_0x6414[51]]){case _0x6414[40]:return _0x508cx17[_0x6414[39]](_0x508cx11[_0x6414[35]],{interface:util[_0x6414[38]](_0x6414[36],_0x508cx17[_0x6414[37]]),stateinterface:util[_0x6414[38]](_0x6414[36],_0x508cx17[_0x6414[37]]),membername:_0x508cx17[_0x6414[37]],UserId:_0x508cx17[_0x6414[25]]});case _0x6414[42]:return _0x508cx17[_0x6414[41]](_0x508cx11[_0x6414[35]]);case _0x6414[44]:return _0x508cx17[_0x6414[43]](_0x508cx11[_0x6414[35]]);case _0x6414[46]:return _0x508cx17[_0x6414[45]](_0x508cx11[_0x6414[35]]);case _0x6414[48]:return _0x508cx17[_0x6414[47]](_0x508cx11[_0x6414[35]]);case _0x6414[50]:return _0x508cx17[_0x6414[49]](_0x508cx11[_0x6414[35]]);default:return null}})[_0x6414[22]](function(_0x508cx16){return _0x508cx12[_0x6414[34]](_0x508cx16?200:401)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[18]](_0x508cx14)})};exports[_0x6414[53]]= function(_0x508cx11,_0x508cx12,_0x508cx13){return Agent[_0x6414[27]](_0x508cx11[_0x6414[52]][_0x6414[25]],{attributes:[_0x6414[25]]})[_0x6414[22]](function(_0x508cx17){if(!_0x508cx17){return _0x508cx12[_0x6414[34]](401)};switch(_0x508cx11[_0x6414[52]][_0x6414[51]]){case _0x6414[40]:return _0x508cx17[_0x6414[55]](_0x508cx11[_0x6414[23]][_0x6414[54]]);case _0x6414[42]:return _0x508cx17[_0x6414[56]](_0x508cx11[_0x6414[23]][_0x6414[54]]);case _0x6414[44]:return _0x508cx17[_0x6414[57]](_0x508cx11[_0x6414[23]][_0x6414[54]]);case _0x6414[48]:return _0x508cx17[_0x6414[58]](_0x508cx11[_0x6414[23]][_0x6414[54]]);case _0x6414[46]:return _0x508cx17[_0x6414[59]](_0x508cx11[_0x6414[23]][_0x6414[54]]);case _0x6414[50]:return _0x508cx17[_0x6414[60]](_0x508cx11[_0x6414[23]][_0x6414[54]]);default:return null}})[_0x6414[22]](function(_0x508cx16){return _0x508cx12[_0x6414[34]](_0x508cx16?200:401)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[18]](_0x508cx14)})};exports[_0x6414[61]]= function(_0x508cx11,_0x508cx12,_0x508cx13){switch(_0x508cx11[_0x6414[26]][_0x6414[32]]){case _0x6414[26]:return User[_0x6414[27]](_0x508cx11[_0x6414[26]][_0x6414[25]],{attributes:[_0x6414[25]]})[_0x6414[22]](Util[_0x6414[24]](_0x508cx11[_0x6414[23]]))[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)});default:return Agent[_0x6414[31]](_0x6414[30],{method:[_0x6414[63],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[64],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[65],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[66],_0x508cx11[_0x6414[23]]]},_0x6414[67])[_0x6414[29]](Util[_0x6414[28]](_0x508cx11[_0x6414[23]]))[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)})}};exports[_0x6414[68]]= function(_0x508cx11,_0x508cx12,_0x508cx13){switch(_0x508cx11[_0x6414[26]][_0x6414[32]]){case _0x6414[26]:var _0x508cx18=[];return User[_0x6414[27]](_0x508cx11[_0x6414[26]][_0x6414[25]],{attributes:[_0x6414[25]]})[_0x6414[22]](Util[_0x6414[74]]({},{attributes:[_0x6414[37]],include:[{raw:true,model:User,attributes:[_0x6414[25]]}]}))[_0x6414[22]](function(_0x508cx16){var _0x508cx19=_[_0x6414[70]](_0x508cx16[_0x6414[69]],_0x6414[37]);_0x508cx16[_0x6414[69]][_0x6414[72]](function(_0x508cx1a){_0x508cx18= _[_0x6414[71]](_0x508cx18,_[_0x6414[70]](_0x508cx1a.Users,_0x6414[25]))});return User[_0x6414[31]](_0x6414[30],{method:[_0x6414[63],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[64],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[65],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[66],_0x508cx11[_0x6414[23]]]})[_0x6414[29]](_[_0x6414[73]](Util[_0x6414[28]](_0x508cx11[_0x6414[23]],{id:{$in:_0x508cx18}}),{include:[{model:VoiceQueue,where:{name:{$in:_0x508cx19}},required:false}]}))})[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)});default:return Agent[_0x6414[31]](_0x6414[30],{method:[_0x6414[63],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[64],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[65],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[66],_0x508cx11[_0x6414[23]]]},_0x6414[67])[_0x6414[29]](Util[_0x6414[28]](_0x508cx11[_0x6414[23]]))[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)})}};exports[_0x6414[75]]= function(_0x508cx11,_0x508cx12,_0x508cx13){switch(_0x508cx11[_0x6414[26]][_0x6414[32]]){case _0x6414[26]:var _0x508cx18=[];return User[_0x6414[27]](_0x508cx11[_0x6414[26]][_0x6414[25]],{attributes:[_0x6414[25]]})[_0x6414[22]](Util[_0x6414[76]]({},{attributes:[_0x6414[25]],include:[{raw:true,model:User,attributes:[_0x6414[25]]}]}))[_0x6414[22]](function(_0x508cx16){var _0x508cx1b=_[_0x6414[70]](_0x508cx16[_0x6414[69]],_0x6414[25]);_0x508cx16[_0x6414[69]][_0x6414[72]](function(_0x508cx1a){_0x508cx18= _[_0x6414[71]](_0x508cx18,_[_0x6414[70]](_0x508cx1a.Users,_0x6414[25]))});return User[_0x6414[31]](_0x6414[30],{method:[_0x6414[63],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[64],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[65],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[66],_0x508cx11[_0x6414[23]]]})[_0x6414[29]](_[_0x6414[73]](Util[_0x6414[28]](_0x508cx11[_0x6414[23]],{id:{$in:_0x508cx18}}),{include:[{model:ChatQueue,where:{id:{$in:_0x508cx1b}},required:false}]}))})[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)});default:return Agent[_0x6414[31]](_0x6414[30],{method:[_0x6414[63],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[64],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[65],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[66],_0x508cx11[_0x6414[23]]]},_0x6414[67])[_0x6414[29]](Util[_0x6414[28]](_0x508cx11[_0x6414[23]]))[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)})}};exports[_0x6414[77]]= function(_0x508cx11,_0x508cx12,_0x508cx13){switch(_0x508cx11[_0x6414[26]][_0x6414[32]]){case _0x6414[26]:var _0x508cx18=[];return User[_0x6414[27]](_0x508cx11[_0x6414[26]][_0x6414[25]],{attributes:[_0x6414[25]]})[_0x6414[22]](Util[_0x6414[78]]({},{attributes:[_0x6414[25]],include:[{raw:true,model:User,attributes:[_0x6414[25]]}]}))[_0x6414[22]](function(_0x508cx16){var _0x508cx1c=_[_0x6414[70]](_0x508cx16[_0x6414[69]],_0x6414[25]);_0x508cx16[_0x6414[69]][_0x6414[72]](function(_0x508cx1a){_0x508cx18= _[_0x6414[71]](_0x508cx18,_[_0x6414[70]](_0x508cx1a.Users,_0x6414[25]))});return User[_0x6414[31]](_0x6414[30],{method:[_0x6414[63],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[64],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[65],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[66],_0x508cx11[_0x6414[23]]]})[_0x6414[29]](_[_0x6414[73]](Util[_0x6414[28]](_0x508cx11[_0x6414[23]],{id:{$in:_0x508cx18}}),{include:[{model:MailQueue,where:{id:{$in:_0x508cx1c}},required:false}]}))})[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)});default:return Agent[_0x6414[31]](_0x6414[30],{method:[_0x6414[63],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[64],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[65],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[66],_0x508cx11[_0x6414[23]]]},_0x6414[67])[_0x6414[29]](Util[_0x6414[28]](_0x508cx11[_0x6414[23]]))[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)})}};exports[_0x6414[79]]= function(_0x508cx11,_0x508cx12,_0x508cx13){switch(_0x508cx11[_0x6414[26]][_0x6414[32]]){case _0x6414[26]:var _0x508cx18=[];return User[_0x6414[27]](_0x508cx11[_0x6414[26]][_0x6414[25]],{attributes:[_0x6414[25]]})[_0x6414[22]](Util[_0x6414[80]]({},{attributes:[_0x6414[25]],include:[{raw:true,model:User,attributes:[_0x6414[25]]}]}))[_0x6414[22]](function(_0x508cx16){var _0x508cx1d=_[_0x6414[70]](_0x508cx16[_0x6414[69]],_0x6414[25]);_0x508cx16[_0x6414[69]][_0x6414[72]](function(_0x508cx1a){_0x508cx18= _[_0x6414[71]](_0x508cx18,_[_0x6414[70]](_0x508cx1a.Users,_0x6414[25]))});return User[_0x6414[31]](_0x6414[30],{method:[_0x6414[63],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[64],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[65],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[66],_0x508cx11[_0x6414[23]]]})[_0x6414[29]](_[_0x6414[73]](Util[_0x6414[28]](_0x508cx11[_0x6414[23]],{id:{$in:_0x508cx18}}),{include:[{model:FaxQueue,where:{id:{$in:_0x508cx1d}},required:false}]}))})[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)});default:return Agent[_0x6414[31]](_0x6414[30],{method:[_0x6414[63],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[64],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[65],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[66],_0x508cx11[_0x6414[23]]]},_0x6414[67])[_0x6414[29]](Util[_0x6414[28]](_0x508cx11[_0x6414[23]]))[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)})}};exports[_0x6414[81]]= function(_0x508cx11,_0x508cx12,_0x508cx13){switch(_0x508cx11[_0x6414[26]][_0x6414[32]]){case _0x6414[26]:var _0x508cx18=[];return User[_0x6414[27]](_0x508cx11[_0x6414[26]][_0x6414[25]],{attributes:[_0x6414[25]]})[_0x6414[22]](Util[_0x6414[82]]({},{attributes:[_0x6414[25]],include:[{raw:true,model:User,attributes:[_0x6414[25]]}]}))[_0x6414[22]](function(_0x508cx16){var _0x508cx1e=_[_0x6414[70]](_0x508cx16[_0x6414[69]],_0x6414[25]);_0x508cx16[_0x6414[69]][_0x6414[72]](function(_0x508cx1a){_0x508cx18= _[_0x6414[71]](_0x508cx18,_[_0x6414[70]](_0x508cx1a.Users,_0x6414[25]))});return User[_0x6414[31]](_0x6414[30],{method:[_0x6414[63],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[64],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[65],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[66],_0x508cx11[_0x6414[23]]]})[_0x6414[29]](_[_0x6414[73]](Util[_0x6414[28]](_0x508cx11[_0x6414[23]],{id:{$in:_0x508cx18}}),{include:[{model:SmsQueue,where:{id:{$in:_0x508cx1e}},required:false}]}))})[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)});default:return Agent[_0x6414[31]](_0x6414[30],{method:[_0x6414[63],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[64],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[65],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[66],_0x508cx11[_0x6414[23]]]},_0x6414[67])[_0x6414[29]](Util[_0x6414[28]](_0x508cx11[_0x6414[23]]))[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)})}};exports[_0x6414[83]]= function(_0x508cx11,_0x508cx12,_0x508cx13){switch(_0x508cx11[_0x6414[26]][_0x6414[32]]){case _0x6414[26]:var _0x508cx18=[];return User[_0x6414[27]](_0x508cx11[_0x6414[26]][_0x6414[25]],{attributes:[_0x6414[25]]})[_0x6414[22]](Util[_0x6414[84]]({},{attributes:[_0x6414[25]],include:[{raw:true,model:User,attributes:[_0x6414[25]]}]}))[_0x6414[22]](function(_0x508cx16){var _0x508cx1f=_[_0x6414[70]](_0x508cx16[_0x6414[69]],_0x6414[25]);_0x508cx16[_0x6414[69]][_0x6414[72]](function(_0x508cx1a){_0x508cx18= _[_0x6414[71]](_0x508cx18,_[_0x6414[70]](_0x508cx1a.Users,_0x6414[25]))});return User[_0x6414[31]](_0x6414[30],{method:[_0x6414[63],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[64],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[65],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[66],_0x508cx11[_0x6414[23]]]})[_0x6414[29]](_[_0x6414[73]](Util[_0x6414[28]](_0x508cx11[_0x6414[23]],{id:{$in:_0x508cx18}}),{include:[{model:OpenchannelQueue,where:{id:{$in:_0x508cx1f}},required:false}]}))})[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)});default:return Agent[_0x6414[31]](_0x6414[30],{method:[_0x6414[63],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[64],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[65],_0x508cx11[_0x6414[23]]]},{method:[_0x6414[66],_0x508cx11[_0x6414[23]]]},_0x6414[67])[_0x6414[29]](Util[_0x6414[28]](_0x508cx11[_0x6414[23]]))[_0x6414[22]](function(_0x508cx15){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx15)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)})}};exports[_0x6414[85]]= function(_0x508cx11,_0x508cx12){return Agent[_0x6414[31]](_0x6414[30])[_0x6414[27]](_0x508cx11[_0x6414[52]][_0x6414[25]])[_0x6414[22]](function(_0x508cx17){if(!_0x508cx17){return _0x508cx12[_0x6414[34]](404)};return _0x508cx12[_0x6414[20]](_0x508cx17)})[_0x6414[19]](function(_0x508cx14){return handleError(_0x508cx12,_0x508cx14)})};exports[_0x6414[86]]= function(_0x508cx11,_0x508cx12){return Agent[_0x6414[31]](_0x6414[30])[_0x6414[27]](_0x508cx11[_0x6414[52]][_0x6414[25]])[_0x6414[22]](function(_0x508cx17){if(!_0x508cx17){return _0x508cx12[_0x6414[34]](404)};return _0x508cx17[_0x6414[88]]({attributes:[_0x6414[37]]})})[_0x6414[22]](function(_0x508cx19){return _0x508cx12[_0x6414[20]]({count:_0x508cx19[_0x6414[87]],rows:_0x508cx19})})[_0x6414[19]](function(_0x508cx14){return handleError(_0x508cx12,_0x508cx14)})};exports[_0x6414[89]]= function(_0x508cx11,_0x508cx12){return Agent[_0x6414[31]](_0x6414[30])[_0x6414[27]](_0x508cx11[_0x6414[52]][_0x6414[25]])[_0x6414[22]](function(_0x508cx17){if(!_0x508cx17){return _0x508cx12[_0x6414[34]](404)};return _0x508cx17[_0x6414[90]]({attributes:[_0x6414[25]]})})[_0x6414[22]](function(_0x508cx1b){return _0x508cx12[_0x6414[20]]({count:_0x508cx1b[_0x6414[87]],rows:_0x508cx1b})})[_0x6414[19]](function(_0x508cx14){return handleError(_0x508cx12,_0x508cx14)})};exports[_0x6414[91]]= function(_0x508cx11,_0x508cx12){return Agent[_0x6414[31]](_0x6414[30])[_0x6414[27]](_0x508cx11[_0x6414[52]][_0x6414[25]])[_0x6414[22]](function(_0x508cx17){if(!_0x508cx17){return _0x508cx12[_0x6414[34]](404)};return _0x508cx17[_0x6414[92]]({attributes:[_0x6414[25]]})})[_0x6414[22]](function(_0x508cx1c){return _0x508cx12[_0x6414[20]]({count:_0x508cx1c[_0x6414[87]],rows:_0x508cx1c})})[_0x6414[19]](function(_0x508cx14){return handleError(_0x508cx12,_0x508cx14)})};exports[_0x6414[93]]= function(_0x508cx11,_0x508cx12){return Agent[_0x6414[31]](_0x6414[30])[_0x6414[27]](_0x508cx11[_0x6414[52]][_0x6414[25]])[_0x6414[22]](function(_0x508cx17){if(!_0x508cx17){return _0x508cx12[_0x6414[34]](404)};return _0x508cx17[_0x6414[94]]({attributes:[_0x6414[25]]})})[_0x6414[22]](function(_0x508cx1d){return _0x508cx12[_0x6414[20]]({count:_0x508cx1d[_0x6414[87]],rows:_0x508cx1d})})[_0x6414[19]](function(_0x508cx14){return handleError(_0x508cx12,_0x508cx14)})};exports[_0x6414[95]]= function(_0x508cx11,_0x508cx12){return Agent[_0x6414[31]](_0x6414[30])[_0x6414[27]](_0x508cx11[_0x6414[52]][_0x6414[25]])[_0x6414[22]](function(_0x508cx17){if(!_0x508cx17){return _0x508cx12[_0x6414[34]](404)};return _0x508cx17[_0x6414[96]]({attributes:[_0x6414[25]]})})[_0x6414[22]](function(_0x508cx1e){return _0x508cx12[_0x6414[20]]({count:_0x508cx1e[_0x6414[87]],rows:_0x508cx1e})})[_0x6414[19]](function(_0x508cx14){return handleError(_0x508cx12,_0x508cx14)})};exports[_0x6414[97]]= function(_0x508cx11,_0x508cx12){return Agent[_0x6414[31]](_0x6414[30])[_0x6414[27]](_0x508cx11[_0x6414[52]][_0x6414[25]])[_0x6414[22]](function(_0x508cx17){if(!_0x508cx17){return _0x508cx12[_0x6414[34]](404)};return _0x508cx17[_0x6414[98]]({attributes:[_0x6414[25]]})})[_0x6414[22]](function(_0x508cx20){return _0x508cx12[_0x6414[20]]({count:_0x508cx20[_0x6414[87]],rows:_0x508cx20})})[_0x6414[19]](function(_0x508cx14){return handleError(_0x508cx12,_0x508cx14)})};exports[_0x6414[99]]= function(_0x508cx11,_0x508cx12){var _0x508cx21;_0x508cx11[_0x6414[35]][_0x6414[32]]= _0x6414[30];return sequelize[_0x6414[104]](function(_0x508cx22){return Agent[_0x6414[31]](_0x6414[30])[_0x6414[99]](_0x508cx11[_0x6414[35]],{transaction:_0x508cx22})[_0x6414[22]](function(_0x508cx17){_0x508cx21= _0x508cx17;return Team[_0x6414[103]]({where:{defaultEntry:true}})})[_0x6414[22]](function(_0x508cx24){return _0x508cx24[_0x6414[102]](_0x508cx21[_0x6414[25]],{transaction:_0x508cx22})})[_0x6414[22]](function(){return List[_0x6414[103]]({where:{defaultEntry:true}})})[_0x6414[22]](function(_0x508cx23){return _0x508cx23[_0x6414[102]](_0x508cx21[_0x6414[25]],{transaction:_0x508cx22})})})[_0x6414[22]](function(){return _0x508cx12[_0x6414[21]](201)[_0x6414[20]](_0x508cx21)})[_0x6414[19]](sequelize.UniqueConstraintError,function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return Util[_0x6414[101]][_0x6414[100]](_0x508cx12,_0x508cx14)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)})};exports[_0x6414[105]]= function(_0x508cx11,_0x508cx12){var _0x508cx25;var _0x508cx26;var _0x508cx27=[];var _0x508cx28=String(_0x508cx11[_0x6414[35]][_0x6414[106]]);return sequelize[_0x6414[104]](function(_0x508cx22){return Setting[_0x6414[27]](1)[_0x6414[22]](function(_0x508cx29){_0x508cx26= _0x508cx29;var _0x508cx2a=_0x508cx26[_0x6414[108]]?/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/:/^[a-zA-Z0-9]{6,}$/;if(!_0x508cx2a[_0x6414[109]](_0x508cx28)){throw new Error(_0x6414[110])};var _0x508cx2b=0;if(_0x508cx11[_0x6414[35]][_0x6414[112]](_0x6414[111])&& _[_0x6414[113]](_0x508cx11[_0x6414[35]][_0x6414[111]])&& _0x508cx11[_0x6414[35]][_0x6414[111]]>= 0){_0x508cx2b= _0x508cx11[_0x6414[35]][_0x6414[111]];delete _0x508cx11[_0x6414[35]][_0x6414[111]]};var _0x508cx2c=_0x508cx11[_0x6414[35]][_0x6414[114]];delete _0x508cx11[_0x6414[35]][_0x6414[114]];if(_0x508cx11[_0x6414[35]][_0x6414[115]]){_0x508cx11[_0x6414[35]][_0x6414[32]]= _0x6414[30];for(var _0x508cx2d=_0x508cx2b;_0x508cx2d< _0x508cx11[_0x6414[35]][_0x6414[115]]+ _0x508cx2b;_0x508cx2d++,_0x508cx2c++){var _0x508cx2e=_[_0x6414[116]](_0x508cx11[_0x6414[35]]);_0x508cx2e[_0x6414[117]]= _0x508cx2c;_0x508cx2e[_0x6414[37]]= _0x508cx2e[_0x6414[37]]+ _0x508cx2d;_0x508cx2e[_0x6414[118]]= _0x508cx2e[_0x6414[118]]+ _0x508cx2d;_0x508cx2e[_0x6414[119]]= _0x508cx2e[_0x6414[119]][_0x6414[121]](_0x6414[120])[0]+ _0x508cx2d+ _0x6414[120]+ _0x508cx2e[_0x6414[119]][_0x6414[121]](_0x6414[120])[1];_0x508cx27[_0x6414[122]](_0x508cx2e)}}else {throw new Error(_0x6414[123])};return Agent[_0x6414[105]](_0x508cx27,{transaction:_0x508cx22,individualHooks:true})})[_0x6414[22]](function(_0x508cx18){_0x508cx25= _0x508cx18;return Team[_0x6414[103]]({where:{defaultEntry:true}})})[_0x6414[22]](function(_0x508cx24){return _0x508cx24[_0x6414[107]](_[_0x6414[70]](_0x508cx25,_0x6414[25]),{transaction:_0x508cx22})})})[_0x6414[22]](function(){return _0x508cx12[_0x6414[34]](201)})[_0x6414[19]](sequelize.UniqueConstraintError,function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return Util[_0x6414[101]][_0x6414[100]](_0x508cx12,_0x508cx14)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)})};exports[_0x6414[124]]= function(_0x508cx11,_0x508cx12){if(_0x508cx11[_0x6414[35]][_0x6414[25]]){delete _0x508cx11[_0x6414[35]][_0x6414[25]]};delete _0x508cx11[_0x6414[35]][_0x6414[32]];delete _0x508cx11[_0x6414[35]][_0x6414[37]];delete _0x508cx11[_0x6414[35]][_0x6414[106]];return sequelize[_0x6414[104]](function(_0x508cx22){return Agent[_0x6414[27]](_0x508cx11[_0x6414[52]][_0x6414[25]])[_0x6414[22]](function(_0x508cx17){if(!_0x508cx17){return _0x508cx12[_0x6414[34]](404)};var _0x508cx2f=_[_0x6414[73]](_0x508cx17,_0x508cx11[_0x6414[35]]);return _0x508cx2f[_0x6414[125]]({transaction:_0x508cx22})})[_0x6414[22]](function(_0x508cx17){return _0x508cx12[_0x6414[21]](200)[_0x6414[20]](_0x508cx17)})})[_0x6414[19]](sequelize.UniqueConstraintError,function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return Util[_0x6414[101]][_0x6414[100]](_0x508cx12,_0x508cx14)})[_0x6414[19]](function(_0x508cx14){console[_0x6414[62]](_0x508cx14);return handleError(_0x508cx12,_0x508cx14)})};exports[_0x6414[126]]= function(_0x508cx11,_0x508cx12){var _0x508cx21;return Agent[_0x6414[27]](_0x508cx11[_0x6414[52]][_0x6414[25]])[_0x6414[22]](function(_0x508cx17){_0x508cx21= _0x508cx17;if(!_0x508cx17){return _0x508cx12[_0x6414[34]](404)};return _0x508cx17[_0x6414[126]]()})[_0x6414[22]](function(){return _0x508cx12[_0x6414[34]](204)})[_0x6414[19]](sequelize.ForeignKeyConstraintError,function(_0x508cx14){return Util[_0x6414[101]][_0x6414[127]](_0x508cx12,_0x6414[30],_0x508cx21[_0x6414[37]],_0x508cx14)})[_0x6414[19]](function(_0x508cx14){return handleError(_0x508cx12,_0x508cx14)})};exports[_0x6414[128]]= function(_0x508cx11,_0x508cx12){return Agent[_0x6414[126]]({where:{id:_0x508cx11[_0x6414[23]][_0x6414[54]]},individualHooks:true})[_0x6414[22]](function(){return _0x508cx12[_0x6414[34]](204)})[_0x6414[19]](function(_0x508cx14){return handleError(_0x508cx12,_0x508cx14)})};exports[_0x6414[129]]= function(_0x508cx11,_0x508cx12,_0x508cx13){var _0x508cx26;var _0x508cx30=_0x508cx11[_0x6414[26]][_0x6414[25]];var _0x508cx31=String(_0x508cx11[_0x6414[35]][_0x6414[130]]);var _0x508cx32=String(_0x508cx11[_0x6414[35]][_0x6414[131]]);return Setting[_0x6414[27]](1)[_0x6414[22]](function(_0x508cx29){_0x508cx26= _0x508cx29;return Agent[_0x6414[27]](_0x508cx30)})[_0x6414[22]](function(_0x508cx33){var _0x508cx2a=_0x508cx26[_0x6414[108]]?/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/:/^[a-zA-Z0-9]{6,}$/;if(!_0x508cx2a[_0x6414[109]](_0x508cx32)){throw new Error(_0x6414[110])};if(_0x508cx33[_0x6414[132]](_0x508cx31)){_0x508cx33[_0x6414[106]]= _0x508cx32;return _0x508cx33[_0x6414[125]]()}else {return _0x508cx12[_0x6414[34]](403)}})[_0x6414[22]](function(){return _0x508cx12[_0x6414[34]](200)})[_0x6414[19]](function(_0x508cx14){return handleError(_0x508cx12,_0x508cx14)})};exports[_0x6414[133]]= function(_0x508cx11,_0x508cx12,_0x508cx13){var _0x508cx26;var _0x508cx30=_0x508cx11[_0x6414[52]][_0x6414[25]];var _0x508cx32=String(_0x508cx11[_0x6414[35]][_0x6414[131]]);return Setting[_0x6414[27]](1)[_0x6414[22]](function(_0x508cx29){_0x508cx26= _0x508cx29;return Agent[_0x6414[27]](_0x508cx30)})[_0x6414[22]](function(_0x508cx33){var _0x508cx2a=_0x508cx26[_0x6414[108]]?/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/:/^[a-zA-Z0-9]{6,}$/;if(!_0x508cx2a[_0x6414[109]](_0x508cx32)){throw new Error(_0x6414[110])};_0x508cx33[_0x6414[106]]= _0x508cx32;return _0x508cx33[_0x6414[125]]()})[_0x6414[22]](function(){return _0x508cx12[_0x6414[34]](200)})[_0x6414[19]](function(_0x508cx14){return handleError(_0x508cx12,_0x508cx14)})};function handleError(_0x508cx12,_0x508cx14){return _0x508cx12[_0x6414[21]](500)[_0x6414[20]](_0x508cx14)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var sequelize = require('../../models').sequelize; + +var util = require('util'); +var Util = require('../../config/util'); + +var OpenchannelQueue = require('../../models').OpenchannelQueue; +var VoiceQueue = require('../../models').VoiceQueue; +var ChatQueue = require('../../models').ChatQueue; +var MailQueue = require('../../models').MailQueue; +var FaxQueue = require('../../models').FaxQueue; +var SmsQueue = require('../../models').SmsQueue; +var MailRoom = require('../../models').MailRoom; +var Setting = require('../../models').Setting; +var Agent = require('../../models').User; +var User = require('../../models').User; +var Team = require('../../models').Team; +var List = require('../../models').List; + +// Get list of agents +exports.index = function(req, res, next) { + switch (req.user.role) { + case 'user': + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getAgentsIdByUser(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); + + default: + return Agent + .scope('agent') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + } +}; + +exports.addQueues = function(req, res, next) { + return Agent + .findById(req.params.id, { + attributes: ['id', 'name'] + }) + .then(function(agent) { + if (!agent) { + return res.sendStatus(401); + } + + switch (req.params.channel) { + case 'voice': + return agent + .addVoiceQueues(req.body, { + interface: util.format('SIP/%s', agent.name), + stateinterface: util.format('SIP/%s', agent.name), + membername: agent.name, + UserId: agent.id, + }); + case 'chat': + return agent + .addChatQueues(req.body); + case 'mail': + return agent + .addMailQueues(req.body); + case 'fax': + return agent + .addFaxQueues(req.body); + case 'sms': + return agent + .addSmsQueues(req.body); + case 'openchannel': + return agent + .addOpenchannelQueues(req.body); + default: + return null; + } + }) + .then(function(queues) { + return res.sendStatus(queues ? 200 : 401); + }) + .catch(function(err) { + console.error(err); + }); +}; + +exports.removeQueues = function(req, res, next) { + return Agent + .findById(req.params.id, { + attributes: ['id'] + }) + .then(function(agent) { + if (!agent) { + return res.sendStatus(401); + } + + switch (req.params.channel) { + case 'voice': + return agent + .removeVoiceQueues(req.query.ids); + case 'chat': + return agent + .removeChatQueues(req.query.ids); + case 'mail': + return agent + .removeMailQueues(req.query.ids); + case 'sms': + return agent + .removeSmsQueues(req.query.ids); + case 'fax': + return agent + .removeFaxQueues(req.query.ids); + case 'openchannel': + return agent + .removeOpenchannelQueues(req.query.ids); + default: + return null; + } + }) + .then(function(queues) { + return res.sendStatus(queues ? 200 : 401); + }) + .catch(function(err) { + console.error(err); + }); +}; + + +// Get list of agents +exports.realtimeIndex = function(req, res, next) { + switch (req.user.role) { + case 'user': + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getAgentsIdByUser(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + default: + return Agent + .scope('agent', { + method: ['checkPauseStatus', req.query] + }, { + method: ['checkQueueStatus', req.query] + }, { + method: ['checkOnlineStatus', req.query] + }, { + method: ['checkSipStatus', req.query] + }, 'queues') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + } +}; + +exports.realtimeVoiceIndex = function(req, res, next) { + switch (req.user.role) { + case 'user': + var agents = []; + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getVoiceQueuesIdByUser({}, { + attributes: ['name'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(queues) { + var voiceQueues = _.map(queues.rows, 'name'); + queues.rows.forEach(function(queue) { + agents = _.union(agents, _.map(queue.Users, 'id')); + }); + return User + .scope('agent', { + method: ['checkPauseStatus', req.query] + }, { + method: ['checkQueueStatus', req.query] + }, { + method: ['checkOnlineStatus', req.query] + }, { + method: ['checkSipStatus', req.query] + }) + .findAndCountAll(_.merge(Util.getQuery(req.query, { + id: { + $in: agents + } + }), { + include: [{ + model: VoiceQueue, + where: { + name: { + $in: voiceQueues + } + }, + required: false + }] + })); + }) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + default: + return Agent + .scope('agent', { + method: ['checkPauseStatus', req.query] + }, { + method: ['checkQueueStatus', req.query] + }, { + method: ['checkOnlineStatus', req.query] + }, { + method: ['checkSipStatus', req.query] + }, 'queues') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + } +}; + +exports.realtimeChatIndex = function(req, res, next) { + switch (req.user.role) { + case 'user': + var agents = []; + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getChatQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(queues) { + var chatQueues = _.map(queues.rows, 'id'); + queues.rows.forEach(function(queue) { + agents = _.union(agents, _.map(queue.Users, 'id')); + }); + return User + .scope('agent', { + method: ['checkPauseStatus', req.query] + }, { + method: ['checkQueueStatus', req.query] + }, { + method: ['checkOnlineStatus', req.query] + }, { + method: ['checkSipStatus', req.query] + }) + .findAndCountAll(_.merge(Util.getQuery(req.query, { + id: { + $in: agents + } + }), { + include: [{ + model: ChatQueue, + where: { + id: { + $in: chatQueues + } + }, + required: false + }] + })); + }) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + default: + return Agent + .scope('agent', { + method: ['checkPauseStatus', req.query] + }, { + method: ['checkQueueStatus', req.query] + }, { + method: ['checkOnlineStatus', req.query] + }, { + method: ['checkSipStatus', req.query] + }, 'queues') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + } +}; + +exports.realtimeMailIndex = function(req, res, next) { + switch (req.user.role) { + case 'user': + var agents = []; + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getMailQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(queues) { + var mailQueues = _.map(queues.rows, 'id'); + queues.rows.forEach(function(queue) { + agents = _.union(agents, _.map(queue.Users, 'id')); + }); + return User + .scope('agent', { + method: ['checkPauseStatus', req.query] + }, { + method: ['checkQueueStatus', req.query] + }, { + method: ['checkOnlineStatus', req.query] + }, { + method: ['checkSipStatus', req.query] + }) + .findAndCountAll(_.merge(Util.getQuery(req.query, { + id: { + $in: agents + } + }), { + include: [{ + model: MailQueue, + where: { + id: { + $in: mailQueues + } + }, + required: false + }] + })); + }) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + default: + return Agent + .scope('agent', { + method: ['checkPauseStatus', req.query] + }, { + method: ['checkQueueStatus', req.query] + }, { + method: ['checkOnlineStatus', req.query] + }, { + method: ['checkSipStatus', req.query] + }, 'queues') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + } +}; + +exports.realtimeFaxIndex = function(req, res, next) { + switch (req.user.role) { + case 'user': + var agents = []; + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getFaxQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(queues) { + var faxQueues = _.map(queues.rows, 'id'); + queues.rows.forEach(function(queue) { + agents = _.union(agents, _.map(queue.Users, 'id')); + }); + return User + .scope('agent', { + method: ['checkPauseStatus', req.query] + }, { + method: ['checkQueueStatus', req.query] + }, { + method: ['checkOnlineStatus', req.query] + }, { + method: ['checkSipStatus', req.query] + }) + .findAndCountAll(_.merge(Util.getQuery(req.query, { + id: { + $in: agents + } + }), { + include: [{ + model: FaxQueue, + where: { + id: { + $in: faxQueues + } + }, + required: false + }] + })); + }) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + default: + return Agent + .scope('agent', { + method: ['checkPauseStatus', req.query] + }, { + method: ['checkQueueStatus', req.query] + }, { + method: ['checkOnlineStatus', req.query] + }, { + method: ['checkSipStatus', req.query] + }, 'queues') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + } +}; +exports.realtimeSmsIndex = function(req, res, next) { + switch (req.user.role) { + case 'user': + var agents = []; + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getSmsQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(queues) { + var smsQueues = _.map(queues.rows, 'id'); + queues.rows.forEach(function(queue) { + agents = _.union(agents, _.map(queue.Users, 'id')); + }); + return User + .scope('agent', { + method: ['checkPauseStatus', req.query] + }, { + method: ['checkQueueStatus', req.query] + }, { + method: ['checkOnlineStatus', req.query] + }, { + method: ['checkSipStatus', req.query] + }) + .findAndCountAll(_.merge(Util.getQuery(req.query, { + id: { + $in: agents + } + }), { + include: [{ + model: SmsQueue, + where: { + id: { + $in: smsQueues + } + }, + required: false + }] + })); + }) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + default: + return Agent + .scope('agent', { + method: ['checkPauseStatus', req.query] + }, { + method: ['checkQueueStatus', req.query] + }, { + method: ['checkOnlineStatus', req.query] + }, { + method: ['checkSipStatus', req.query] + }, 'queues') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + } +}; + +exports.realtimeOpenchannelIndex = function(req, res, next) { + switch (req.user.role) { + case 'user': + var agents = []; + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getOpenchannelQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(queues) { + var openchannelQueues = _.map(queues.rows, 'id'); + queues.rows.forEach(function(queue) { + agents = _.union(agents, _.map(queue.Users, 'id')); + }); + return User + .scope('agent', { + method: ['checkPauseStatus', req.query] + }, { + method: ['checkQueueStatus', req.query] + }, { + method: ['checkOnlineStatus', req.query] + }, { + method: ['checkSipStatus', req.query] + }) + .findAndCountAll(_.merge(Util.getQuery(req.query, { + id: { + $in: agents + } + }), { + include: [{ + model: OpenchannelQueue, + where: { + id: { + $in: openchannelQueues + } + }, + required: false + }] + })); + }) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + default: + return Agent + .scope('agent', { + method: ['checkPauseStatus', req.query] + }, { + method: ['checkQueueStatus', req.query] + }, { + method: ['checkOnlineStatus', req.query] + }, { + method: ['checkSipStatus', req.query] + }, 'queues') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + } +}; +// Get a single agent +exports.show = function(req, res) { + return Agent + .scope('agent') + .findById(req.params.id) + .then(function(agent) { + if (!agent) { + return res.sendStatus(404); + } + return res.send(agent); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single agent +exports.showVoiceQueues = function(req, res) { + return Agent + .scope('agent') + .findById(req.params.id) + .then(function(agent) { + if (!agent) { + return res.sendStatus(404); + } + + return agent + .getVoiceQueues({ + attributes: ['name'] + }); + }) + .then(function(voiceQueues) { + return res.send({ + count: voiceQueues.length, + rows: voiceQueues + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.showChatQueues = function(req, res) { + return Agent + .scope('agent') + .findById(req.params.id) + .then(function(agent) { + if (!agent) { + return res.sendStatus(404); + } + + return agent + .getChatQueues({ + attributes: ['id'] + }); + }) + .then(function(chatQueues) { + return res.send({ + count: chatQueues.length, + rows: chatQueues + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.showMailQueues = function(req, res) { + return Agent + .scope('agent') + .findById(req.params.id) + .then(function(agent) { + if (!agent) { + return res.sendStatus(404); + } + + return agent + .getMailQueues({ + attributes: ['id'] + }); + }) + .then(function(mailQueues) { + return res.send({ + count: mailQueues.length, + rows: mailQueues + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.showFaxQueues = function(req, res) { + return Agent + .scope('agent') + .findById(req.params.id) + .then(function(agent) { + if (!agent) { + return res.sendStatus(404); + } + + return agent + .getFaxQueues({ + attributes: ['id'] + }); + }) + .then(function(faxQueues) { + return res.send({ + count: faxQueues.length, + rows: faxQueues + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.showSmsQueues = function(req, res) { + return Agent + .scope('agent') + .findById(req.params.id) + .then(function(agent) { + if (!agent) { + return res.sendStatus(404); + } + + return agent + .getSmsQueues({ + attributes: ['id'] + }); + }) + .then(function(smsQueues) { + return res.send({ + count: smsQueues.length, + rows: smsQueues + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.showOpenchannelQueues = function(req, res) { + return Agent + .scope('agent') + .findById(req.params.id) + .then(function(agent) { + if (!agent) { + return res.sendStatus(404); + } + + return agent + .getOpenchannelQueues({ + attributes: ['id'] + }); + }) + .then(function(Queues) { + return res.send({ + count: Queues.length, + rows: Queues + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Creates a new agent in the DB. +exports.create = function(req, res) { + var _agent; + + // Set default role + req.body.role = 'agent'; + + return sequelize.transaction(function(t) { + return Agent + .scope('agent') + .create(req.body, { + transaction: t + }) + .then(function(agent) { + _agent = agent; + + return Team + .findOne({ + where: { + defaultEntry: true + } + }); + }) + .then(function(team) { + return team + .addUser(_agent.id, { + transaction: t + }); + }) + .then(function() { + return List + .findOne({ + where: { + defaultEntry: true + } + }); + }) + .then(function(list) { + return list + .addUser(_agent.id, { + transaction: t + }); + }); + // .then(function() { + // if (req.body.channels && req.body.channels.voice && req.body.channels.voice.queues) { + // return _agent + // .addVoiceQueues(req.body.channels.voice.queues, { + // interface: util.format('SIP/%s', _agent.name), + // stateinterface: util.format('SIP/%s', _agent.name), + // membername: _agent.name, + // UserId: _agent.id, + // transaction: t + // }); + // } + // }) + // .then(function() { + // if (req.body.channels && req.body.channels.chat && req.body.channels.chat.queues) { + // return _agent + // .addChatQueues(req.body.channels.chat.queues, { + // transaction: t + // }); + // } + // }) + // .then(function() { + // if (req.body.channels && req.body.channels.mail && req.body.channels.mail.queues) { + // return _agent + // .addMailQueues(req.body.channels.mail.queues, { + // transaction: t + // }); + // } + // }) + // .then(function() { + // if (req.body.channels && req.body.channels.sms && req.body.channels.sms.queues) { + // return _agent + // .addSmsQueues(req.body.channels.sms.queues, { + // transaction: t + // }); + // } + // }) + // .then(function() { + // if (req.body.channels && req.body.channels.fax && req.body.channels.fax.queues) { + // return _agent + // .addFaxQueues(req.body.channels.fax.queues, { + // transaction: t + // }); + // } + // }) + // .then(function() { + // if (req.body.channels && req.body.channels.openchannel && req.body.channels.openchannel.queues) { + // return _agent + // .addOpenchannelQueues(req.body.channels.openchannel.queues, { + // transaction: t + // }); + // } + // }); + }) + .then(function() { + return res.status(201).send(_agent); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + console.log(err); + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Creates a new agent in the DB. +exports.bulkCreate = function(req, res) { + var _agents; + var _setting; + + var items = []; + var password = String(req.body.password); + + return sequelize.transaction(function(t) { + + return Setting + .findById(1) + .then(function(setting) { + _setting = setting; + + var regEx = _setting.securePassword ? /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/ : /^[a-zA-Z0-9]{6,}$/; + + if (!regEx.test(password)) { + throw new Error('Invalid password pattern'); + } + + var startIndex = 0; + if (req.body.hasOwnProperty('startIndex') && _.isNumber(req.body.startIndex) && req.body.startIndex >= 0) { + startIndex = req.body.startIndex; + delete req.body.startIndex; + } + var internalIndex = req.body.minInternal; + delete req.body.minInternal; + + if (req.body.amount) { + req.body.role = 'agent'; + for (var i = startIndex; i < req.body.amount + startIndex; i++, internalIndex++) { + var item = _.clone(req.body); + item.internal = internalIndex; + item.name = item.name + i; + item.fullname = item.fullname + i; + item.email = item.email.split('@')[0] + i + '@' + item.email.split('@')[1]; + items.push(item); + } + } else { + throw new Error('No agents amount specified!'); + } + return Agent + .bulkCreate(items, { + transaction: t, + individualHooks: true + }); + }) + .then(function(agents) { + _agents = agents; + + return Team + .findOne({ + where: { + defaultEntry: true + } + }); + }) + .then(function(team) { + return team + .addUsers(_.map(_agents, 'id'), { + transaction: t + }); + }) + }) + .then(function() { + return res.sendStatus(201); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + console.log(err); + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Updates an existing agent in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + delete req.body.role; + delete req.body.name; + delete req.body.password; + + return sequelize.transaction(function(t) { + return Agent + .findById(req.params.id) + .then(function(agent) { + if (!agent) { + return res.sendStatus(404); + } + var updated = _.merge(agent, req.body); + return updated + .save({ + transaction: t + }); + }) + .then(function(agent) { + return res.status(200).send(agent); + }) + }) + .catch(sequelize.UniqueConstraintError, function(err) { + console.log(err); + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Deletes a agent from the DB. +exports.destroy = function(req, res) { + var _agent; + + return Agent + .findById(req.params.id) + .then(function(agent) { + _agent = agent; + if (!agent) { + return res.sendStatus(404); + } + return agent + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(sequelize.ForeignKeyConstraintError, function(err) { + return Util.errorManager.handleForeignKeyConstraintError(res, 'agent', _agent.name, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a agent from the DB. +exports.bulkDestroy = function(req, res) { + return Agent + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +/** + * Change a user password //DEPRECATED + */ +exports.changePassword = function(req, res, next) { + var _setting; + + var userId = req.user.id; + var oldPass = String(req.body.oldPassword); + var newPass = String(req.body.newPassword); + + return Setting + .findById(1) + .then(function(setting) { + _setting = setting; + + return Agent + .findById(userId); + }) + .then(function(user) { + var regEx = _setting.securePassword ? /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/ : /^[a-zA-Z0-9]{6,}$/; + + if (!regEx.test(newPass)) { + throw new Error('Invalid password pattern'); + } + + if (user.authenticate(oldPass)) { + user.password = newPass; + + return user + .save(); + } else { + return res.sendStatus(403); + } + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +/** + * Change a user password by admin //DEPRECATED + */ +exports.resetPassword = function(req, res, next) { + var _setting; + + var userId = req.params.id; + var newPass = String(req.body.newPassword); + + return Setting + .findById(1) + .then(function(setting) { + _setting = setting; + + return Agent + .findById(userId); + }) + .then(function(user) { + var regEx = _setting.securePassword ? /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/ : /^[a-zA-Z0-9]{6,}$/; + + if (!regEx.test(newPass)) { + throw new Error('Invalid password pattern'); + } + + user.password = newPass; + return user + .save(); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/agent/agent.events.js b/server/api/agent/agent.events.js index 39a3cc3..24661dc 100644 --- a/server/api/agent/agent.events.js +++ b/server/api/agent/agent.events.js @@ -1 +1,36 @@ -var _0xf3b8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xf3b8[0];const EventEmitter=require(_0xf3b8[1]);const Agent=require(_0xf3b8[3])[_0xf3b8[2]];var AgentEvents= new EventEmitter();AgentEvents[_0xf3b8[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xf3b8[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xf3b8[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xf3b8[6]};for(var e in events){var event=events[e];Agent[_0xf3b8[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x1430x8,_0x1430x9,_0x1430xa){AgentEvents[_0xf3b8[10]](event+ _0xf3b8[8]+ _0x1430x8[_0xf3b8[9]],_0x1430x8);AgentEvents[_0xf3b8[10]](event,_0x1430x8);_0x1430xa(null)}}module[_0xf3b8[11]]= AgentEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Agent = require('../../models').User; + +var AgentEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +AgentEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Agent.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + AgentEvents.emit(event + ':' + doc._id, doc); + AgentEvents.emit(event, doc); + done(null); + } +} + +module.exports = AgentEvents; diff --git a/server/api/agent/agent.socket.js b/server/api/agent/agent.socket.js index 3245870..657829a 100644 --- a/server/api/agent/agent.socket.js +++ b/server/api/agent/agent.socket.js @@ -1 +1,51 @@ -var _0xc29c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x61\x67\x65\x6E\x74\x2E\x65\x76\x65\x6E\x74\x73","\x6C\x6F\x64\x61\x73\x68","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x61\x67\x65\x6E\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x72\x6F\x6C\x65","\x61\x67\x65\x6E\x74","\x75\x73\x65\x72\x49\x64","\x69\x64","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x63\x6C\x6F\x6E\x65","\x73\x74\x61\x74\x75\x73","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x5F\x63\x68\x61\x6E\x67\x65\x64","\x71\x75\x65\x75\x65\x53\x74\x61\x74\x75\x73","\x65\x6D\x69\x74","\x61\x67\x65\x6E\x74\x3A\x73\x61\x76\x65","\x61\x67\x65\x6E\x74\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xc29c[0];const AgentEvents=require(_0xc29c[1]);const _=require(_0xc29c[2]);var events=[_0xc29c[3],_0xc29c[4]];exports[_0xc29c[5]]= function(_0xef6bx4){for(var _0xef6bx5=0,_0xef6bx6=events[_0xc29c[6]];_0xef6bx5< _0xef6bx6;_0xef6bx5++){var _0xef6bx7=events[_0xef6bx5];var _0xef6bx8=createListener(_0xc29c[7]+ _0xef6bx7,_0xef6bx4);AgentEvents[_0xc29c[8]](_0xef6bx7,_0xef6bx8);_0xef6bx4[_0xc29c[8]](_0xc29c[9],removeListener(_0xef6bx7,_0xef6bx8))}};function createListener(_0xef6bx7,_0xef6bx4){return function(_0xef6bxa){switch(_0xef6bx7){case _0xc29c[21]:if(_0xef6bxa[_0xc29c[10]]=== _0xc29c[11]&& (_0xef6bx4[_0xc29c[10]]!== _0xc29c[11]|| _0xef6bx4[_0xc29c[12]]== _0xef6bxa[_0xc29c[13]])){var _0xef6bxb=_[_0xc29c[15]](_0xef6bxa[_0xc29c[14]]);if(_0xef6bxa[_0xc29c[18]][_0xc29c[17]](_0xc29c[16])){_0xef6bxb[_0xc29c[19]]= undefined}else {if(_0xef6bxa[_0xc29c[18]][_0xc29c[17]](_0xc29c[19])){_0xef6bxb[_0xc29c[16]]= undefined}};_0xef6bx4[_0xc29c[20]](_0xef6bx7,_0xef6bxb)};break;case _0xc29c[22]:_0xef6bx4[_0xc29c[20]](_0xef6bx7,_0xef6bxa);break;default:}}}function removeListener(_0xef6bx7,_0xef6bx8){return function(){AgentEvents[_0xc29c[23]](_0xef6bx7,_0xef6bx8)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const AgentEvents = require('./agent.events'); +const _ = require('lodash'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('agent:' + event, socket); + + AgentEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'agent:save': + if (doc.role === 'agent' && (socket.role !== 'agent' || socket.userId == doc.id)) { + var myDoc = _.clone(doc.dataValues); + if (doc._changed.hasOwnProperty('status')) { + myDoc.queueStatus = undefined; + } else if (doc._changed.hasOwnProperty('queueStatus')) { + myDoc.status = undefined; + } + socket.emit(event, myDoc); + } + break; + case 'agent:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + AgentEvents.removeListener(event, listener); + }; +} diff --git a/server/api/agent/index.js b/server/api/agent/index.js index db45462..0ad78b5 100644 --- a/server/api/agent/index.js +++ b/server/api/agent/index.js @@ -1 +1,312 @@ -var _0x850a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x61\x67\x65\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65","\x72\x65\x61\x6C\x74\x69\x6D\x65\x49\x6E\x64\x65\x78","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x76\x6F\x69\x63\x65","\x72\x65\x61\x6C\x74\x69\x6D\x65\x56\x6F\x69\x63\x65\x49\x6E\x64\x65\x78","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x6D\x61\x69\x6C","\x72\x65\x61\x6C\x74\x69\x6D\x65\x4D\x61\x69\x6C\x49\x6E\x64\x65\x78","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x63\x68\x61\x74","\x72\x65\x61\x6C\x74\x69\x6D\x65\x43\x68\x61\x74\x49\x6E\x64\x65\x78","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x66\x61\x78","\x72\x65\x61\x6C\x74\x69\x6D\x65\x46\x61\x78\x49\x6E\x64\x65\x78","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x73\x6D\x73","\x72\x65\x61\x6C\x74\x69\x6D\x65\x53\x6D\x73\x49\x6E\x64\x65\x78","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x72\x65\x61\x6C\x74\x69\x6D\x65\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x49\x6E\x64\x65\x78","\x2F\x3A\x69\x64","\x75\x73\x65\x72","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x62\x75\x6C\x6B","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x2F\x3A\x69\x64\x2F\x76\x6F\x69\x63\x65\x2F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x2F\x3A\x69\x64\x2F\x63\x68\x61\x74\x2F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x2F\x3A\x69\x64\x2F\x6D\x61\x69\x6C\x2F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x2F\x3A\x69\x64\x2F\x66\x61\x78\x2F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x2F\x3A\x69\x64\x2F\x73\x6D\x73\x2F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x2F\x3A\x69\x64\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x71\x75\x65\x75\x65\x73","\x73\x68\x6F\x77\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x2F\x3A\x69\x64\x2F\x3A\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x71\x75\x65\x75\x65\x73","\x61\x64\x64\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x51\x75\x65\x75\x65\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0x850a[0];var express=require(_0x850a[1]);var controller=require(_0x850a[2]);var auth=require(_0x850a[3]);var license=require(_0x850a[4]);var router=express.Router();router[_0x850a[11]](_0x850a[5],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7],_0x850a[8]]),controller[_0x850a[10]]);router[_0x850a[11]](_0x850a[12],auth[_0x850a[6]](),auth[_0x850a[9]]([12],[_0x850a[7]]),controller[_0x850a[13]]);router[_0x850a[11]](_0x850a[14],auth[_0x850a[6]](),auth[_0x850a[9]]([7],[_0x850a[7]]),controller[_0x850a[15]]);router[_0x850a[11]](_0x850a[16],auth[_0x850a[6]](),auth[_0x850a[9]]([9],[_0x850a[7]]),controller[_0x850a[17]]);router[_0x850a[11]](_0x850a[18],auth[_0x850a[6]](),auth[_0x850a[9]]([8],[_0x850a[7]]),controller[_0x850a[19]]);router[_0x850a[11]](_0x850a[20],auth[_0x850a[6]](),auth[_0x850a[9]]([10],[_0x850a[7]]),controller[_0x850a[21]]);router[_0x850a[11]](_0x850a[22],auth[_0x850a[6]](),auth[_0x850a[9]]([11],[_0x850a[7]]),controller[_0x850a[23]]);router[_0x850a[11]](_0x850a[24],auth[_0x850a[6]](),auth[_0x850a[9]]([20],[_0x850a[7]]),controller[_0x850a[25]]);router[_0x850a[11]](_0x850a[26],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7],_0x850a[27],_0x850a[8]]),controller[_0x850a[28]]);router[_0x850a[30]](_0x850a[5],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7]]),controller[_0x850a[29]]);router[_0x850a[30]](_0x850a[31],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7]]),controller[_0x850a[32]]);router[_0x850a[34]](_0x850a[26],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7]]),controller[_0x850a[33]]);router[_0x850a[36]](_0x850a[5],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7]]),controller[_0x850a[35]]);router[_0x850a[36]](_0x850a[26],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7]]),controller[_0x850a[37]]);router[_0x850a[11]](_0x850a[38],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7],_0x850a[8]]),controller[_0x850a[39]]);router[_0x850a[11]](_0x850a[40],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7],_0x850a[8]]),controller[_0x850a[41]]);router[_0x850a[11]](_0x850a[42],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7],_0x850a[8]]),controller[_0x850a[43]]);router[_0x850a[11]](_0x850a[44],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7],_0x850a[8]]),controller[_0x850a[45]]);router[_0x850a[11]](_0x850a[46],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7],_0x850a[8]]),controller[_0x850a[47]]);router[_0x850a[11]](_0x850a[48],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7],_0x850a[8]]),controller[_0x850a[49]]);router[_0x850a[30]](_0x850a[50],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7],_0x850a[8]]),controller[_0x850a[51]]);router[_0x850a[36]](_0x850a[50],auth[_0x850a[6]](),auth[_0x850a[9]]([4],[_0x850a[7],_0x850a[8]]),controller[_0x850a[52]]);module[_0x850a[53]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./agent.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); +/** + * @api {get} /api/agents/ Get agents' profile. + * + * @apiParam (Query) {Number} [offset] Pagination offset. + * @apiParam (Query) {Number} limit Pagination limit. + * + * @apiVersion 0.0.143 + * @apiName GetAgents + * @apiGroup Agents + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Number} count Number of agents. + * @apiSuccess {Object[]} rows Get agents' profile list. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "count": 1, + * "rows": [{ + * "id": 1 + * "name": "john.doe", + * "email": "john.doe@xcally.com", + * "internal": 1001, + * "fullname": "John Doe", + * "chatCapacity": 0, + * "mailCapacity": 0, + * "faxCapacity": 0, + * "online": false, + * "voicePause": false, + * "mailPause": false, + * "faxPause": false, + * "chatPause": false, + * "pauseType": "Default Pause", + * ... + * }] + * } + */ +router.get('/', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.index); +router.get('/realtime', auth.isAuthenticated(), auth.hasModule([12], ['admin']), controller.realtimeIndex); +router.get('/realtime/voice', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.realtimeVoiceIndex); +router.get('/realtime/mail', auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.realtimeMailIndex); +router.get('/realtime/chat', auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.realtimeChatIndex); +router.get('/realtime/fax', auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.realtimeFaxIndex); +router.get('/realtime/sms', auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.realtimeSmsIndex); +router.get('/realtime/openchannel', auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.realtimeOpenchannelIndex); + +/** + * @api {get} /api/agents/:id Get agent's profile. + * @apiParam {Number} id Agent's unique ID. + * @apiVersion 0.0.143 + * @apiName GetAgent + * @apiGroup Agents + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Object} Agent's profile. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "john.doe" + * "email": "john.doe@xcally.com", + * "internal": 1001, + * "fullname": "John Doe" + * "chatCapacity": 0, + * "mailCapacity": 0, + * "faxCapacity": 0, + * "online": false, + * "voicePause": false, + * "mailPause": false, + * "faxPause": false, + * "chatPause": false, + * "pauseType": "Default Pause", + * ... + * } + */ +router.get('/:id', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'user', 'agent']), controller.show); + +/** + * @api {post} /api/agents/ Create agent's profile. + * @apiParam (Body) {String} name Agent's username. + * @apiParam (Body) {String} fullname Agent's fullname. + * @apiParam (Body) {String} email Agent's email. + * @apiParam (Body) {String} context="from-sip" Agent's SIP context. + * @apiParam (Body) {String} password Agent's password. + * @apiParam (Body) {Number} internal Agent's internal number. + * @apiParam (Body) {String="tcp", "udp", "tcp,udp"} transport="udp" Agent's SIP transport. + * @apiParam (Body) {String="alaw", "ulaw", "gsm"} allow="alaw;ulaw;gsm" Agent's SIP codecs. + * @apiParam (Body) {Number} internal Agent's internal number. + * @apiParam (Body) {String} [phone] Agent's phone. + * @apiParam (Body) {String} [mobile] Agent's mobile phone. + * @apiParam (Body) {String} [address] Agent's address. + * @apiParam (Body) {String} [zipcode] Agent's zipcode. + * @apiParam (Body) {String} [city] Agent's city. + * @apiParam (Body) {String} [country] Agent's country. + * + * @apiVersion 0.0.143 + * @apiName CreateAgent + * @apiGroup Agents + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 201 Created + * { + * "id": 1 + * "name": "john.doe", + * "email": "john.doe@xcally.com", + * "internal": 1001, + * "fullname": "John Doe", + * ... + * } + */ +router.post('/', auth.isAuthenticated(), auth.hasModule([4], ['admin']), controller.create); + +/** + * @api {post} /api/agents/bulk Bulk Create agent's profile. + * @apiParam (Body) {String} name Agent's prefix username. It's followed by index + * @apiParam (Body) {String} fullname Agent's prefix fullname. It's followed by index + * @apiParam (Body) {String} email Agent's email. The local part is followed by the index + * @apiParam (Body) {String} password Agent's password. It's the same for all agents + * @apiParam (Body) {Number} internal Agent's starting internal number. + * @apiParam (Body) {String} context="from-sip" Agent's SIP context. It's the same for all agents + * @apiParam (Body) {String="tcp", "udp", "tcp,udp"} transport="udp" Agent's SIP transport. It's the same for all agents + * @apiParam (Body) {String="alaw", "ulaw", "gsm"} allow="alaw;ulaw;gsm" Agent's SIP codecs. It's the same for all agents + * @apiParam (Body) {Number} amount=2 Number of new agents. + * @apiParam (Body) {Number} startIndex=0 Start index. + * + * @apiVersion 0.0.143 + * @apiName BulkCreateAgent + * @apiGroup Agents + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 201 Created + */ +router.post('/bulk', auth.isAuthenticated(), auth.hasModule([4], ['admin']), controller.bulkCreate); + +/** + * @api {update} /api/agents/:id Update agent's profile. + * + * @apiParam (Params) {Number} id Agent's unique ID. + * @apiParam (Body) {String} fullname Agent's fullname. + * @apiParam (Body) {String} email Agent's email. + * @apiParam (Body) {String} context="from-sip" Agent's SIP context. + * @apiParam (Body) {String} password Agent's password. + * @apiParam (Body) {Number} internal Agent's internal number. + * @apiParam (Body) {String="tcp", "udp", "tcp,udp"} transport="udp" Agent's SIP transport. + * @apiParam (Body) {String="alaw", "ulaw", "gsm"} allow="alaw;ulaw;gsm" Agent's SIP codecs. + * @apiParam (Body) {Number} internal Agent's internal number. + * @apiParam (Body) {String} [phone] Agent's phone. + * @apiParam (Body) {String} [mobile] Agent's mobile phone. + * @apiParam (Body) {String} [address] Agent's address. + * @apiParam (Body) {String} [zipcode] Agent's zipcode. + * @apiParam (Body) {String} [city] Agent's city. + * @apiParam (Body) {String} [country] Agent's country. + * + * @apiVersion 0.0.143 + * @apiName UpdateAgent + * @apiGroup Agents + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "john.doe", + * "email": "john.doe@xcally.com", + * "internal": 1001, + * "fullname": "John Doe", + * ... + * } + */ +router.put('/:id', auth.isAuthenticated(), auth.hasModule([4], ['admin']), controller.update); + +/** + * @api {delete} /api/agents/ Bulk Delete agents' profile. + * + * @apiParam (Query) {Number[]} ids Agents' unique ID array. + * + * @apiVersion 0.0.143 + * @apiName BulkDeleteAgents + * @apiGroup Agents + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/', auth.isAuthenticated(), auth.hasModule([4], ['admin']), controller.bulkDestroy); + +/** + * @api {delete} /api/agents/:id Delete agent's profile. + * + * @apiParam {Number} id Agent's unique ID. + * + * @apiVersion 0.0.143 + * @apiName DeleteAgent + * @apiGroup Agents + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([4], ['admin']), controller.destroy); + +/** + * @api {put} /api/agents/password Update agent's password. + * + * @apiParam (Body) {String} oldPassword Old agent's password. + * @apiParam (Body) {String} newPassword New agent's password. + * + * @apiVersion 0.0.143 + * @apiName UpdateAgentPassword + * @apiGroup Agents + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + */ +// router.put('/password', auth.isAuthenticated(), auth.hasModule([4], ['admin']), controller.changePassword); + +/** + * @api {put} /api/agents/:id/password Reset agent's password. + * + * @apiParam (Params) {Number} id Agent's unique ID. + * @apiParam (Body) {String} newPassword New agent's password. + * + * @apiPermission admin + * + * @apiVersion 0.0.143 + * @apiName ResetAgentPassword + * @apiGroup Agents + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + */ +// router.put('/:id/password', auth.isAuthenticated(), auth.hasModule([4], ['admin']), controller.resetPassword); + +router.get('/:id/voice/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.showVoiceQueues); +router.get('/:id/chat/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.showChatQueues); +router.get('/:id/mail/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.showMailQueues); +router.get('/:id/fax/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.showFaxQueues); +router.get('/:id/sms/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.showSmsQueues); +router.get('/:id/openchannel/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.showOpenchannelQueues); +router.post('/:id/:channel/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.addQueues); +router.delete('/:id/:channel/queues', auth.isAuthenticated(), auth.hasModule([4], ['admin', 'agent']), controller.removeQueues); + + +module.exports = router; diff --git a/server/api/ami/ami.ami.js b/server/api/ami/ami.ami.js index c2bb530..1282301 100644 --- a/server/api/ami/ami.ami.js +++ b/server/api/ami/ami.ami.js @@ -1 +1,36 @@ -var _0x1797=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x41\x6D\x69","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x6C\x6F\x64\x61\x73\x68","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x6D\x69","\x61\x63\x74\x69\x6F\x6E","\x69\x73\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x6D\x65\x72\x67\x65","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65","\x41\x73\x74\x65\x72\x69\x73\x6B\x20\x4D\x61\x6E\x61\x67\x65\x72\x20\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x2E\x2E"];_0x1797[0];var Ami=require(_0x1797[2])[_0x1797[1]];var _=require(_0x1797[3]);var ami=null;exports[_0x1797[4]]= function(ami){this[_0x1797[5]]= ami};exports[_0x1797[6]]= function(_0xe9ddx4,_0xe9ddx5){if(this[_0x1797[5]]&& this[_0x1797[5]][_0x1797[7]]()){this[_0x1797[5]][_0x1797[6]](_0xe9ddx4,function(_0xe9ddx6,_0xe9ddx7){if(_0xe9ddx6){_0xe9ddx5(_0xe9ddx6)};var _0xe9ddx8=_[_0x1797[8]](_0xe9ddx7,_0xe9ddx4);Ami[_0x1797[11]](_0xe9ddx8)[_0x1797[10]](function(ami){_0xe9ddx5(null,ami)})[_0x1797[9]](function(_0xe9ddx6){return _0xe9ddx5(_0xe9ddx6)})})}else {_0xe9ddx5( new Error(_0x1797[12]))}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +var Ami = require('../../models').Ami; +var _ = require('lodash'); + +var ami = null; + +exports.register = function(ami) { + this.ami = ami; +} + +exports.action = function(action, cb) { + if (this.ami && this.ami.isConnected()) { + this.ami.action(action, function(err, res) { + if (err) { + cb(err); + } + var data = _.merge(res, action); + Ami + .create(data) + .then(function(ami) { + cb(null, ami) + }) + .catch(function(err) { + return cb(err); + }); + + }); + } else { + cb(new Error('Asterisk Manager disconnected..')); + } +} diff --git a/server/api/ami/ami.controller.js b/server/api/ami/ami.controller.js index 4a1f3d0..9b00f54 100644 --- a/server/api/ami/ami.controller.js +++ b/server/api/ami/ami.controller.js @@ -1 +1,37 @@ -var _0x26ee=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x41\x6D\x69","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x63\x72\x65\x61\x74\x65","\x64\x61\x74\x61","\x62\x6F\x64\x79","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x55\x73\x65\x72\x49\x64","\x69\x64","\x75\x73\x65\x72","\x61\x63\x74\x69\x6F\x6E","\x2E\x2F\x61\x6D\x69\x2E\x61\x6D\x69"];_0x26ee[0];var _=require(_0x26ee[1]);var Ami=require(_0x26ee[3])[_0x26ee[2]];var Util=require(_0x26ee[4]);exports[_0x26ee[5]]= function(_0x4468x4,_0x4468x5,_0x4468x6){return Ami[_0x26ee[12]](Util[_0x26ee[11]](_0x4468x4[_0x26ee[10]]))[_0x26ee[9]](function(_0x4468x8){return _0x4468x5[_0x26ee[8]](200)[_0x26ee[7]](_0x4468x8)})[_0x26ee[6]](function(_0x4468x7){return handleError(_0x4468x5,_0x4468x7)})};exports[_0x26ee[13]]= function(_0x4468x4,_0x4468x5){_0x4468x4[_0x26ee[15]][_0x26ee[14]]= JSON[_0x26ee[16]](_0x4468x4[_0x26ee[15]]);_0x4468x4[_0x26ee[15]][_0x26ee[17]]= _0x4468x4[_0x26ee[19]][_0x26ee[18]];require(_0x26ee[21])[_0x26ee[20]](_0x4468x4[_0x26ee[15]],function(_0x4468x7,_0x4468x8){if(_0x4468x7){handleError(_0x4468x5,_0x4468x7)}else {return _0x4468x5[_0x26ee[8]](201)[_0x26ee[7]](_0x4468x8)}})};function handleError(_0x4468x5,_0x4468x7){return _0x4468x5[_0x26ee[8]](500)[_0x26ee[7]](_0x4468x7)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Ami = require('../../models').Ami; +var Util = require('../../config/util'); + +// Get list of amis +exports.index = function(req, res, next) { + return Ami + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new ami in the DB. +exports.create = function(req, res) { + + req.body.data = JSON.stringify(req.body); + req.body.UserId = req.user.id; + + require('./ami.ami').action(req.body, function(err, result) { + if (err) { + handleError(res, err); + } else { + return res.status(201).send(result); + } + }); + +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/ami/ami.events.js b/server/api/ami/ami.events.js index 0f1570f..69ed024 100644 --- a/server/api/ami/ami.events.js +++ b/server/api/ami/ami.events.js @@ -1 +1,36 @@ -var _0xddb1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x41\x6D\x69","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xddb1[0];const EventEmitter=require(_0xddb1[1]);const Ami=require(_0xddb1[3])[_0xddb1[2]];var AmiEvents= new EventEmitter();AmiEvents[_0xddb1[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xddb1[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xddb1[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xddb1[6]};for(var e in events){var event=events[e];Ami[_0xddb1[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xfa9ex8,_0xfa9ex9,_0xfa9exa){AmiEvents[_0xddb1[10]](event+ _0xddb1[8]+ _0xfa9ex8[_0xddb1[9]],_0xfa9ex8);AmiEvents[_0xddb1[10]](event,_0xfa9ex8);_0xfa9exa(null)}}module[_0xddb1[11]]= AmiEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Ami = require('../../models').Ami; + +var AmiEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +AmiEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Ami.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + AmiEvents.emit(event + ':' + doc._id, doc); + AmiEvents.emit(event, doc); + done(null); + } +} + +module.exports = AmiEvents; diff --git a/server/api/ami/ami.socket.js b/server/api/ami/ami.socket.js index e7155a7..b1ba530 100644 --- a/server/api/ami/ami.socket.js +++ b/server/api/ami/ami.socket.js @@ -1 +1,32 @@ -var _0x8012=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x61\x6D\x69\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x61\x6D\x69\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x8012[0];const AmiEvents=require(_0x8012[1]);var events=[_0x8012[2],_0x8012[3]];exports[_0x8012[4]]= function(_0x2980x3){for(var _0x2980x4=0,_0x2980x5=events[_0x8012[5]];_0x2980x4< _0x2980x5;_0x2980x4++){var _0x2980x6=events[_0x2980x4];var _0x2980x7=createListener(_0x8012[6]+ _0x2980x6,_0x2980x3);AmiEvents[_0x8012[7]](_0x2980x6,_0x2980x7);_0x2980x3[_0x8012[7]](_0x8012[8],removeListener(_0x2980x6,_0x2980x7))}};function createListener(_0x2980x6,_0x2980x3){return function(_0x2980x9){_0x2980x3[_0x8012[9]](_0x2980x6,_0x2980x9)}}function removeListener(_0x2980x6,_0x2980x7){return function(){AmiEvents[_0x8012[10]](_0x2980x6,_0x2980x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const AmiEvents = require('./ami.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('ami:' + event, socket); + + AmiEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + AmiEvents.removeListener(event, listener); + }; +} diff --git a/server/api/ami/index.js b/server/api/ami/index.js index f2cca64..ae0b77c 100644 --- a/server/api/ami/index.js +++ b/server/api/ami/index.js @@ -1 +1,12 @@ -var _0x5cee=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x61\x6D\x69\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x5cee[0];var express=require(_0x5cee[1]);var controller=require(_0x5cee[2]);var auth=require(_0x5cee[3]);var router=express.Router();router[_0x5cee[7]](_0x5cee[4],auth[_0x5cee[5]](),controller[_0x5cee[6]]);router[_0x5cee[9]](_0x5cee[4],auth[_0x5cee[5]](),controller[_0x5cee[8]]);module[_0x5cee[10]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./ami.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); +router.post('/', auth.isAuthenticated(), controller.create); + +module.exports = router; diff --git a/server/api/automation/automation.controller.js b/server/api/automation/automation.controller.js index 5fdc2a8..169fca5 100644 --- a/server/api/automation/automation.controller.js +++ b/server/api/automation/automation.controller.js @@ -1 +1,205 @@ -var _0x595b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x54\x6F\x6F\x6C\x73\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x54\x6F\x6F\x6C\x73\x41\x63\x74\x69\x6F\x6E","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\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","\x61\x6C\x6C","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x41\x6C\x6C","\x41\x6E\x79","\x41\x63\x74\x69\x6F\x6E\x73","\x75\x70\x64\x61\x74\x65","\x6C\x6F\x67","\x73\x61\x76\x65","\x69\x73\x41\x72\x72\x61\x79","\x6C\x65\x6E\x67\x74\x68","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x49\x64","\x66\x6F\x72\x45\x61\x63\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x41\x6C\x6C\x49\x64","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x41\x6E\x79\x49\x64","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x595b[0];var _=require(_0x595b[1]);var util=require(_0x595b[2]);var Util=require(_0x595b[3]);var sequelize=require(_0x595b[5])[_0x595b[4]];var Automation=require(_0x595b[5])[_0x595b[6]];var ToolsCondition=require(_0x595b[5])[_0x595b[7]];var ToolsAction=require(_0x595b[5])[_0x595b[8]];exports[_0x595b[9]]= function(_0x8f8cx8,_0x8f8cx9,_0x8f8cxa){return Automation[_0x595b[19]](_0x595b[18])[_0x595b[17]](_[_0x595b[16]](Util[_0x595b[15]](_0x8f8cx8[_0x595b[14]]),{distinct:true}))[_0x595b[13]](function(_0x8f8cxc){_0x8f8cx9[_0x595b[12]](200)[_0x595b[11]](_0x8f8cxc)})[_0x595b[10]](function(_0x8f8cxb){return handleError(_0x8f8cx9,_0x8f8cxb)})};exports[_0x595b[20]]= function(_0x8f8cx8,_0x8f8cx9){return Automation[_0x595b[19]](_0x595b[18])[_0x595b[24]](_0x8f8cx8[_0x595b[23]][_0x595b[22]])[_0x595b[13]](function(Automation){if(!Automation){return _0x8f8cx9[_0x595b[21]](404)};return _0x8f8cx9[_0x595b[11]](Automation)})[_0x595b[10]](function(_0x8f8cxb){return handleError(_0x8f8cx9,_0x8f8cxb)})};exports[_0x595b[25]]= function(_0x8f8cx8,_0x8f8cx9,_0x8f8cxa){return Automation[_0x595b[25]](_0x8f8cx8[_0x595b[26]],{include:[{model:ToolsCondition,as:_0x595b[27]},{model:ToolsCondition,as:_0x595b[28]},{model:ToolsAction,as:_0x595b[29]}]})[_0x595b[13]](function(){return _0x8f8cx9[_0x595b[21]](201)})[_0x595b[10]](function(_0x8f8cxb){return handleError(_0x8f8cx9,_0x8f8cxb)})};exports[_0x595b[30]]= function(_0x8f8cx8,_0x8f8cx9,_0x8f8cxa){var _0x8f8cxd;if(_0x8f8cx8[_0x595b[26]][_0x595b[22]]){delete _0x8f8cx8[_0x595b[26]][_0x595b[22]]};return sequelize[_0x595b[41]](function(_0x8f8cxe){return Automation[_0x595b[24]](_0x8f8cx8[_0x595b[23]][_0x595b[22]])[_0x595b[13]](function(_0x8f8cx11){if(!_0x8f8cx11){return _0x8f8cx9[_0x595b[21]](404)};_0x8f8cxd= _0x8f8cx11;if(_0x8f8cx8[_0x595b[26]][_0x595b[28]]){return ToolsCondition[_0x595b[38]]({where:{AutomationAnyId:_0x8f8cx8[_0x595b[23]][_0x595b[22]]},transaction:_0x8f8cxe})}})[_0x595b[13]](function(){if(_0x8f8cx8[_0x595b[26]][_0x595b[28]]&& Array[_0x595b[33]](_0x8f8cx8[_0x595b[26]].Any)&& _0x8f8cx8[_0x595b[26]][_0x595b[28]][_0x595b[34]]){_[_0x595b[36]](_0x8f8cx8[_0x595b[26]].Any,function(_0x8f8cx10){_0x8f8cx10[_0x595b[40]]= _0x8f8cx8[_0x595b[23]][_0x595b[22]]});return ToolsCondition[_0x595b[37]](_0x8f8cx8[_0x595b[26]].Any,{transaction:_0x8f8cxe})};return})[_0x595b[13]](function(){if(_0x8f8cx8[_0x595b[26]][_0x595b[27]]){return ToolsCondition[_0x595b[38]]({where:{AutomationAllId:_0x8f8cx8[_0x595b[23]][_0x595b[22]]},transaction:_0x8f8cxe})}})[_0x595b[13]](function(){if(_0x8f8cx8[_0x595b[26]][_0x595b[27]]&& Array[_0x595b[33]](_0x8f8cx8[_0x595b[26]].All)&& _0x8f8cx8[_0x595b[26]][_0x595b[27]][_0x595b[34]]){_[_0x595b[36]](_0x8f8cx8[_0x595b[26]].All,function(_0x8f8cx10){_0x8f8cx10[_0x595b[39]]= _0x8f8cx8[_0x595b[23]][_0x595b[22]]});return ToolsCondition[_0x595b[37]](_0x8f8cx8[_0x595b[26]].All,{transaction:_0x8f8cxe})};return})[_0x595b[13]](function(){if(_0x8f8cx8[_0x595b[26]][_0x595b[29]]){return ToolsAction[_0x595b[38]]({where:{AutomationId:_0x8f8cx8[_0x595b[23]][_0x595b[22]]},transaction:_0x8f8cxe})}})[_0x595b[13]](function(){if(_0x8f8cx8[_0x595b[26]][_0x595b[29]]&& Array[_0x595b[33]](_0x8f8cx8[_0x595b[26]].Actions)&& _0x8f8cx8[_0x595b[26]][_0x595b[29]][_0x595b[34]]){_[_0x595b[36]](_0x8f8cx8[_0x595b[26]].Actions,function(_0x8f8cx10){_0x8f8cx10[_0x595b[35]]= _0x8f8cx8[_0x595b[23]][_0x595b[22]]});return ToolsAction[_0x595b[37]](_0x8f8cx8[_0x595b[26]].Actions,{transaction:_0x8f8cxe})};return})[_0x595b[13]](function(){var _0x8f8cxf=_[_0x595b[16]](_0x8f8cxd,_0x8f8cx8[_0x595b[26]]);return _0x8f8cxf[_0x595b[32]]({transaction:_0x8f8cxe})})})[_0x595b[13]](function(){return _0x8f8cx9[_0x595b[21]](200)})[_0x595b[10]](function(_0x8f8cxb){console[_0x595b[31]](_0x8f8cxb);return handleError(_0x8f8cx9,_0x8f8cxb)})};exports[_0x595b[38]]= function(_0x8f8cx8,_0x8f8cx9){return Automation[_0x595b[24]](_0x8f8cx8[_0x595b[23]][_0x595b[22]])[_0x595b[13]](function(Automation){if(!Automation){return _0x8f8cx9[_0x595b[21]](404)};Automation[_0x595b[38]]()[_0x595b[13]](function(){return _0x8f8cx9[_0x595b[21]](204)})[_0x595b[10]](function(_0x8f8cxb){return handleError(_0x8f8cx9,_0x8f8cxb)})})[_0x595b[10]](function(_0x8f8cxb){return handleError(_0x8f8cx9,_0x8f8cxb)})};exports[_0x595b[42]]= function(_0x8f8cx8,_0x8f8cx9){return Automation[_0x595b[38]]({where:{id:_0x8f8cx8[_0x595b[14]][_0x595b[43]]},individualHooks:true})[_0x595b[13]](function(){return _0x8f8cx9[_0x595b[21]](204)})[_0x595b[10]](function(_0x8f8cxb){return handleError(_0x8f8cx9,_0x8f8cxb)})};function handleError(_0x8f8cx9,_0x8f8cxb){return _0x8f8cx9[_0x595b[12]](500)[_0x595b[11]](_0x8f8cxb)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var Util = require('../../config/util'); +var sequelize = require('../../models').sequelize; + +var Automation = require('../../models').Automation; +var ToolsCondition = require('../../models').ToolsCondition; +var ToolsAction = require('../../models').ToolsAction; + +// Get list of agents +exports.index = function(req, res, next) { + return Automation + .scope('all') + .findAndCountAll(_.merge(Util.getQuery(req.query), { + distinct: true + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single Automation +exports.show = function(req, res) { + return Automation + .scope('all') + .findById(req.params.id) + .then(function(Automation) { + if (!Automation) { + return res.sendStatus(404); + } + return res.send(Automation); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new Automation in the DB. +exports.create = function(req, res, next) { + return Automation + .create(req.body, { + include: [{ + model: ToolsCondition, + as: 'All' + }, { + model: ToolsCondition, + as: 'Any' + }, { + model: ToolsAction, + as: 'Actions' + }] + }) + .then(function() { + return res.sendStatus(201); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing Automation in the DB. +exports.update = function(req, res, next) { + var _automation; + if (req.body.id) { + delete req.body.id; + } + return sequelize.transaction(function(t) { + return Automation + .findById(req.params.id) + .then(function(automation) { + if (!automation) { + return res.sendStatus(404); + } + _automation = automation; + if (req.body.Any) { + return ToolsCondition + .destroy({ + where: { + AutomationAnyId: req.params.id + }, + transaction: t + }); + } + }) + .then(function() { + if (req.body.Any && Array.isArray(req.body.Any) && req.body.Any.length) { + _.forEach(req.body.Any, function(elem) { + elem.AutomationAnyId = req.params.id; + }); + return ToolsCondition + .bulkCreate(req.body.Any, { + transaction: t + }); + } + return; + }) + .then(function() { + if (req.body.All) { + return ToolsCondition + .destroy({ + where: { + AutomationAllId: req.params.id + }, + transaction: t + }); + } + }) + .then(function() { + if (req.body.All && Array.isArray(req.body.All) && req.body.All.length) { + _.forEach(req.body.All, function(elem) { + elem.AutomationAllId = req.params.id; + }); + return ToolsCondition + .bulkCreate(req.body.All, { + transaction: t + }); + } + return; + }) + .then(function() { + if (req.body.Actions) { + return ToolsAction + .destroy({ + where: { + AutomationId: req.params.id + }, + transaction: t + }); + } + }) + .then(function() { + if (req.body.Actions && Array.isArray(req.body.Actions) && req.body.Actions.length) { + _.forEach(req.body.Actions, function(elem) { + elem.AutomationId = req.params.id; + }); + return ToolsAction + .bulkCreate(req.body.Actions, { + transaction: t + }); + } + return; + }) + .then(function() { + var updated = _.merge(_automation, req.body); + return updated + .save({ + transaction: t + }); + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + + +// Deletes a Automation from the DB. +exports.destroy = function(req, res) { + return Automation + .findById(req.params.id) + .then(function(Automation) { + if (!Automation) { + return res.sendStatus(404); + } + Automation.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.bulkDestroy = function(req, res) { + return Automation + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/automation/automation.events.js b/server/api/automation/automation.events.js index 779237d..c0aaffc 100644 --- a/server/api/automation/automation.events.js +++ b/server/api/automation/automation.events.js @@ -1 +1,36 @@ -var _0xf5be=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xf5be[0];const EventEmitter=require(_0xf5be[1]);const Automation=require(_0xf5be[3])[_0xf5be[2]];var AutomationEvents= new EventEmitter();AutomationEvents[_0xf5be[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xf5be[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xf5be[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xf5be[6]};for(var e in events){var event=events[e];Automation[_0xf5be[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xb032x8,_0xb032x9,_0xb032xa){AutomationEvents[_0xf5be[10]](event+ _0xf5be[8]+ _0xb032x8[_0xf5be[9]],_0xb032x8);AutomationEvents[_0xf5be[10]](event,_0xb032x8);_0xb032xa(null)}}module[_0xf5be[11]]= AutomationEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Automation = require('../../models').Automation; + +var AutomationEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +AutomationEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Automation.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + AutomationEvents.emit(event + ':' + doc._id, doc); + AutomationEvents.emit(event, doc); + done(null); + } +} + +module.exports = AutomationEvents; diff --git a/server/api/automation/automation.socket.js b/server/api/automation/automation.socket.js index b37ef4a..c767335 100644 --- a/server/api/automation/automation.socket.js +++ b/server/api/automation/automation.socket.js @@ -1 +1,28 @@ -var _0x5c7e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x5c7e[0];const AutomationEvents=require(_0x5c7e[1]);var events=[_0x5c7e[2],_0x5c7e[3]];exports[_0x5c7e[4]]= function(_0x7bc9x3){for(var _0x7bc9x4=0,_0x7bc9x5=events[_0x5c7e[5]];_0x7bc9x4< _0x7bc9x5;_0x7bc9x4++){var _0x7bc9x6=events[_0x7bc9x4];var _0x7bc9x7=createListener(_0x5c7e[6]+ _0x7bc9x6,_0x7bc9x3);AutomationEvents[_0x5c7e[7]](_0x7bc9x6,_0x7bc9x7);_0x7bc9x3[_0x5c7e[7]](_0x5c7e[8],removeListener(_0x7bc9x6,_0x7bc9x7))}};function createListener(_0x7bc9x6,_0x7bc9x3){return function(_0x7bc9x9){_0x7bc9x3[_0x5c7e[9]](_0x7bc9x6,_0x7bc9x9)}}function removeListener(_0x7bc9x6,_0x7bc9x7){return function(){AutomationEvents[_0x5c7e[10]](_0x7bc9x6,_0x7bc9x7)}} \ No newline at end of file +'use strict'; + +const AutomationEvents = require('./automation.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('automation:' + event, socket); + + AutomationEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + AutomationEvents.removeListener(event, listener); + }; +} diff --git a/server/api/automation/index.js b/server/api/automation/index.js index 50c8d72..654a7c9 100644 --- a/server/api/automation/index.js +++ b/server/api/automation/index.js @@ -1 +1,16 @@ -var _0xaf88=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xaf88[0];var express=require(_0xaf88[1]);var controller=require(_0xaf88[2]);var auth=require(_0xaf88[3]);var router=express.Router();router[_0xaf88[9]](_0xaf88[4],auth[_0xaf88[5]](),auth[_0xaf88[7]]([13],[_0xaf88[6]]),controller[_0xaf88[8]]);router[_0xaf88[9]](_0xaf88[10],auth[_0xaf88[5]](),auth[_0xaf88[7]]([13],[_0xaf88[6]]),controller[_0xaf88[11]]);router[_0xaf88[13]](_0xaf88[4],auth[_0xaf88[5]](),auth[_0xaf88[7]]([13],[_0xaf88[6]]),controller[_0xaf88[12]]);router[_0xaf88[15]](_0xaf88[10],auth[_0xaf88[5]](),auth[_0xaf88[7]]([13],[_0xaf88[6]]),controller[_0xaf88[14]]);router[_0xaf88[17]](_0xaf88[10],auth[_0xaf88[5]](),auth[_0xaf88[7]]([13],[_0xaf88[6]]),controller[_0xaf88[16]]);router[_0xaf88[17]](_0xaf88[4],auth[_0xaf88[5]](),auth[_0xaf88[7]]([13],[_0xaf88[6]]),controller[_0xaf88[18]]);module[_0xaf88[19]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./automation.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.update); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.destroy); +router.delete('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.bulkDestroy); + +module.exports = router; diff --git a/server/api/canned_answer/canned_answer.controller.js b/server/api/canned_answer/canned_answer.controller.js index 4c70c36..dfda955 100644 --- a/server/api/canned_answer/canned_answer.controller.js +++ b/server/api/canned_answer/canned_answer.controller.js @@ -1 +1,131 @@ -var _0x533a=["\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","\x43\x61\x6E\x6E\x65\x64\x41\x6E\x73\x77\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64\x73"];_0x533a[0];var _=require(_0x533a[1]);var Util=require(_0x533a[2]);var CannedAnswer=require(_0x533a[4])[_0x533a[3]];function handleError(_0x7379x5,_0x7379x6){_0x7379x6= _0x7379x6|| 500;return function(_0x7379x7){_0x7379x5[_0x533a[6]](_0x7379x6)[_0x533a[5]](_0x7379x7)}}function responseWithResult(_0x7379x5,_0x7379x6){_0x7379x6= _0x7379x6|| 200;return function(_0x7379x9){if(_0x7379x9){_0x7379x5[_0x533a[6]](_0x7379x6)[_0x533a[7]](_0x7379x9)}}}function handleEntityNotFound(_0x7379x5){return function(_0x7379x9){if(!_0x7379x9){_0x7379x5[_0x533a[6]](404)[_0x533a[8]]();return null};return _0x7379x9}}function saveUpdates(_0x7379xc){return function(_0x7379x9){return _0x7379x9[_0x533a[10]](_0x7379xc)[_0x533a[9]](function(_0x7379xd){return _0x7379xd})}}function removeEntity(_0x7379x5){return function(_0x7379x9){if(_0x7379x9){return _0x7379x9[_0x533a[11]]()[_0x533a[9]](function(){_0x7379x5[_0x533a[6]](204)[_0x533a[8]]()})}}}exports[_0x533a[12]]= function(_0x7379xf,_0x7379x5,_0x7379x10){return CannedAnswer[_0x533a[17]](Util[_0x533a[16]](_0x7379xf[_0x533a[15]]))[_0x533a[9]](function(_0x7379x11){_0x7379x5[_0x533a[6]](200)[_0x533a[5]](_0x7379x11)})[_0x533a[14]](function(_0x7379x7){console[_0x533a[13]](_0x7379x7);return handleError(_0x7379x5,_0x7379x7)})};exports[_0x533a[18]]= function(_0x7379xf,_0x7379x5){return CannedAnswer[_0x533a[21]](_0x7379xf[_0x533a[20]][_0x533a[19]])[_0x533a[9]](handleEntityNotFound(_0x7379x5))[_0x533a[9]](responseWithResult(_0x7379x5))[_0x533a[14]](handleError(_0x7379x5))};exports[_0x533a[22]]= function(_0x7379xf,_0x7379x5){CannedAnswer[_0x533a[22]](_0x7379xf[_0x533a[23]])[_0x533a[9]](responseWithResult(_0x7379x5,201))[_0x533a[14]](handleError(_0x7379x5))};exports[_0x533a[24]]= function(_0x7379xf,_0x7379x5){if(_0x7379xf[_0x533a[23]][_0x533a[19]]){delete _0x7379xf[_0x533a[23]][_0x533a[19]]};return CannedAnswer[_0x533a[21]](_0x7379xf[_0x533a[20]][_0x533a[19]])[_0x533a[9]](handleEntityNotFound(_0x7379x5))[_0x533a[9]](saveUpdates(_0x7379xf[_0x533a[23]]))[_0x533a[9]](responseWithResult(_0x7379x5))[_0x533a[14]](handleError(_0x7379x5))};exports[_0x533a[11]]= function(_0x7379xf,_0x7379x5){return CannedAnswer[_0x533a[21]](_0x7379xf[_0x533a[20]][_0x533a[19]])[_0x533a[9]](handleEntityNotFound(_0x7379x5))[_0x533a[9]](removeEntity(_0x7379x5))[_0x533a[14]](handleError(_0x7379x5))};exports[_0x533a[25]]= function(_0x7379xf,_0x7379x5){return CannedAnswer[_0x533a[11]]({where:{id:_0x7379xf[_0x533a[15]][_0x533a[27]]},individualHooks:true})[_0x533a[9]](function(){return _0x7379x5[_0x533a[26]](204)})[_0x533a[14]](function(_0x7379x7){return handleError(_0x7379x5,_0x7379x7)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/answers -> index + * POST /api/answers -> create + * GET /api/answers/:id -> show + * PUT /api/answers/:id -> update + * DELETE /api/answers/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var CannedAnswer = require('../../models').CannedAnswer; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Get list of agents +exports.index = function(req, res, next) { + return CannedAnswer + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Gets a single CannedAnswer from the DB +exports.show = function(req, res) { + return CannedAnswer + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new CannedAnswer in the DB +exports.create = function(req, res) { + CannedAnswer.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing CannedAnswer in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return CannedAnswer + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a CannedAnswer from the DB +exports.destroy = function(req, res) { + return CannedAnswer + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +// Deletes a agent from the DB. +exports.bulkDestroy = function(req, res) { + return CannedAnswer + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; diff --git a/server/api/canned_answer/canned_answer.events.js b/server/api/canned_answer/canned_answer.events.js index 5abb169..cc2c85e 100644 --- a/server/api/canned_answer/canned_answer.events.js +++ b/server/api/canned_answer/canned_answer.events.js @@ -1 +1,36 @@ -var _0x9c88=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x61\x6E\x6E\x65\x64\x41\x6E\x73\x77\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x9c88[0];const EventEmitter=require(_0x9c88[1]);const CannedAnswer=require(_0x9c88[3])[_0x9c88[2]];var CannedAnswerEvents= new EventEmitter();CannedAnswerEvents[_0x9c88[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x9c88[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x9c88[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x9c88[6]};for(var e in events){var event=events[e];CannedAnswer[_0x9c88[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x5efbx8,_0x5efbx9,_0x5efbxa){CannedAnswerEvents[_0x9c88[10]](event+ _0x9c88[8]+ _0x5efbx8[_0x9c88[9]],_0x5efbx8);CannedAnswerEvents[_0x9c88[10]](event,_0x5efbx8);_0x5efbxa(null)}}module[_0x9c88[11]]= CannedAnswerEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const CannedAnswer = require('../../models').CannedAnswer; + +var CannedAnswerEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +CannedAnswerEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + CannedAnswer.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + CannedAnswerEvents.emit(event + ':' + doc._id, doc); + CannedAnswerEvents.emit(event, doc); + done(null); + } +} + +module.exports = CannedAnswerEvents; diff --git a/server/api/canned_answer/canned_answer.socket.js b/server/api/canned_answer/canned_answer.socket.js index 888488c..ce308fc 100644 --- a/server/api/canned_answer/canned_answer.socket.js +++ b/server/api/canned_answer/canned_answer.socket.js @@ -1 +1,28 @@ -var _0x34a6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x61\x6E\x6E\x65\x64\x5F\x61\x6E\x73\x77\x65\x72\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x61\x6E\x6E\x65\x64\x5F\x61\x6E\x73\x77\x65\x72\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x34a6[0];const CannedAnswerEvents=require(_0x34a6[1]);var events=[_0x34a6[2],_0x34a6[3]];exports[_0x34a6[4]]= function(_0x5fbbx3){for(var _0x5fbbx4=0,_0x5fbbx5=events[_0x34a6[5]];_0x5fbbx4< _0x5fbbx5;_0x5fbbx4++){var _0x5fbbx6=events[_0x5fbbx4];var _0x5fbbx7=createListener(_0x34a6[6]+ _0x5fbbx6,_0x5fbbx3);CannedAnswerEvents[_0x34a6[7]](_0x5fbbx6,_0x5fbbx7);_0x5fbbx3[_0x34a6[7]](_0x34a6[8],removeListener(_0x5fbbx6,_0x5fbbx7))}};function createListener(_0x5fbbx6,_0x5fbbx3){return function(_0x5fbbx9){_0x5fbbx3[_0x34a6[9]](_0x5fbbx6,_0x5fbbx9)}}function removeListener(_0x5fbbx6,_0x5fbbx7){return function(){CannedAnswerEvents[_0x34a6[10]](_0x5fbbx6,_0x5fbbx7)}} \ No newline at end of file +'use strict'; + +const CannedAnswerEvents = require('./canned_answer.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('canned_answer:' + event, socket); + + CannedAnswerEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + CannedAnswerEvents.removeListener(event, listener); + }; +} diff --git a/server/api/canned_answer/index.js b/server/api/canned_answer/index.js index 1e65399..e01ee26 100644 --- a/server/api/canned_answer/index.js +++ b/server/api/canned_answer/index.js @@ -1 +1,16 @@ -var _0x5582=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x63\x61\x6E\x6E\x65\x64\x5F\x61\x6E\x73\x77\x65\x72\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x5582[0];var express=require(_0x5582[1]);var auth=require(_0x5582[2]);var controller=require(_0x5582[3]);var router=express.Router();router[_0x5582[10]](_0x5582[4],auth[_0x5582[5]](),auth[_0x5582[8]]([13],[_0x5582[6],_0x5582[7]]),controller[_0x5582[9]]);router[_0x5582[10]](_0x5582[11],auth[_0x5582[5]](),auth[_0x5582[8]]([13],[_0x5582[6]]),controller[_0x5582[12]]);router[_0x5582[14]](_0x5582[4],auth[_0x5582[5]](),auth[_0x5582[8]]([13],[_0x5582[6]]),controller[_0x5582[13]]);router[_0x5582[16]](_0x5582[11],auth[_0x5582[5]](),auth[_0x5582[8]]([13],[_0x5582[6]]),controller[_0x5582[15]]);router[_0x5582[18]](_0x5582[4],auth[_0x5582[5]](),auth[_0x5582[8]]([13],[_0x5582[6]]),controller[_0x5582[17]]);router[_0x5582[18]](_0x5582[11],auth[_0x5582[5]](),auth[_0x5582[8]]([13],[_0x5582[6]]),controller[_0x5582[19]]);module[_0x5582[20]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./canned_answer.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([13], ['admin', 'agent']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/chanspy/chanspy.controller.js b/server/api/chanspy/chanspy.controller.js index 7ebb800..e3dafb3 100644 --- a/server/api/chanspy/chanspy.controller.js +++ b/server/api/chanspy/chanspy.controller.js @@ -1 +1,107 @@ -var _0xc9ae=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x43\x68\x61\x6E\x53\x70\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0xc9ae[0];var _=require(_0xc9ae[1]);var ChanSpy=require(_0xc9ae[3])[_0xc9ae[2]];var Util=require(_0xc9ae[4]);exports[_0xc9ae[5]]= function(_0xc21fx4,_0xc21fx5,_0xc21fx6){return ChanSpy[_0xc9ae[13]](Util[_0xc9ae[12]](_0xc21fx4[_0xc9ae[11]]))[_0xc9ae[10]](function(_0xc21fx8){_0xc21fx5[_0xc9ae[9]](200)[_0xc9ae[8]](_0xc21fx8)})[_0xc9ae[7]](function(_0xc21fx7){console[_0xc9ae[6]](_0xc21fx7);return handleError(_0xc21fx5,_0xc21fx7)})};exports[_0xc9ae[14]]= function(_0xc21fx4,_0xc21fx5){return ChanSpy[_0xc9ae[18]](_0xc21fx4[_0xc9ae[17]][_0xc9ae[16]])[_0xc9ae[10]](function(_0xc21fx9){if(!_0xc21fx9){return _0xc21fx5[_0xc9ae[15]](404)};return _0xc21fx5[_0xc9ae[8]](_0xc21fx9)})[_0xc9ae[7]](function(_0xc21fx7){return handleError(_0xc21fx5,_0xc21fx7)})};exports[_0xc9ae[19]]= function(_0xc21fx4,_0xc21fx5){return ChanSpy[_0xc9ae[19]](_0xc21fx4[_0xc9ae[20]])[_0xc9ae[10]](function(_0xc21fx9){return _0xc21fx5[_0xc9ae[9]](201)[_0xc9ae[8]](_0xc21fx9)})[_0xc9ae[7]](function(_0xc21fx7){return handleError(_0xc21fx5,_0xc21fx7)})};exports[_0xc9ae[21]]= function(_0xc21fx4,_0xc21fx5){if(_0xc21fx4[_0xc9ae[20]][_0xc9ae[16]]){delete _0xc21fx4[_0xc9ae[20]][_0xc9ae[16]]};return ChanSpy[_0xc9ae[18]](_0xc21fx4[_0xc9ae[17]][_0xc9ae[16]])[_0xc9ae[10]](function(_0xc21fx9){if(!_0xc21fx9){return _0xc21fx5[_0xc9ae[15]](404)};var _0xc21fxa=_[_0xc9ae[22]](_0xc21fx9,_0xc21fx4[_0xc9ae[20]]);return _0xc21fxa[_0xc9ae[23]]()})[_0xc9ae[10]](function(_0xc21fx9){return _0xc21fx5[_0xc9ae[9]](200)[_0xc9ae[8]](_0xc21fx9)})[_0xc9ae[7]](function(_0xc21fx7){return handleError(_0xc21fx5,_0xc21fx7)})};exports[_0xc9ae[24]]= function(_0xc21fx4,_0xc21fx5){return ChanSpy[_0xc9ae[18]](_0xc21fx4[_0xc9ae[17]][_0xc9ae[16]])[_0xc9ae[10]](function(_0xc21fx9){if(!_0xc21fx9){return _0xc21fx5[_0xc9ae[15]](404)};return _0xc21fx9[_0xc9ae[24]]()})[_0xc9ae[10]](function(){return _0xc21fx5[_0xc9ae[15]](204)})[_0xc9ae[7]](function(_0xc21fx7){return handleError(_0xc21fx5,_0xc21fx7)})};exports[_0xc9ae[25]]= function(_0xc21fx4,_0xc21fx5){return ChanSpy[_0xc9ae[24]]({where:{id:_0xc21fx4[_0xc9ae[11]][_0xc9ae[26]]},individualHooks:true})[_0xc9ae[10]](function(){return _0xc21fx5[_0xc9ae[15]](204)})[_0xc9ae[7]](function(_0xc21fx7){return handleError(_0xc21fx5,_0xc21fx7)})};function handleError(_0xc21fx5,_0xc21fx7){return _0xc21fx5[_0xc9ae[9]](500)[_0xc9ae[8]](_0xc21fx7)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var ChanSpy = require('../../models').ChanSpy; +var Util = require('../../config/util'); + +// Get list of chanspy +exports.index = function(req, res, next) { + return ChanSpy + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get a single chanspy +exports.show = function(req, res) { + return ChanSpy + .findById(req.params.id) + .then(function(chanspy) { + if (!chanspy) { + return res.sendStatus(404); + } + return res.send(chanspy); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new chanspy in the DB. +exports.create = function(req, res) { + return ChanSpy + .create(req.body) + .then(function(chanspy) { + return res.status(201).send(chanspy); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing chanspy in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return ChanSpy + .findById(req.params.id) + .then(function(chanspy) { + if (!chanspy) { + return res.sendStatus(404); + } + var updated = _.merge(chanspy, req.body); + return updated + .save(); + }) + .then(function(chanspy) { + return res.status(200).send(chanspy); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a chanspy from the DB. +exports.destroy = function(req, res) { + return ChanSpy + .findById(req.params.id) + .then(function(chanspy) { + if (!chanspy) { + return res.sendStatus(404); + } + return chanspy.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.bulkDestroy = function(req, res) { + return ChanSpy + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/chanspy/chanspy.events.js b/server/api/chanspy/chanspy.events.js index 4492f85..6310918 100644 --- a/server/api/chanspy/chanspy.events.js +++ b/server/api/chanspy/chanspy.events.js @@ -1 +1,36 @@ -var _0x5abd=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x68\x61\x6E\x53\x70\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x5abd[0];const EventEmitter=require(_0x5abd[1]);const ChanSpy=require(_0x5abd[3])[_0x5abd[2]];var ChanSpyEvents= new EventEmitter();ChanSpyEvents[_0x5abd[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x5abd[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x5abd[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x5abd[6]};for(var e in events){var event=events[e];ChanSpy[_0x5abd[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xf6a1x8,_0xf6a1x9,_0xf6a1xa){ChanSpyEvents[_0x5abd[10]](event+ _0x5abd[8]+ _0xf6a1x8[_0x5abd[9]],_0xf6a1x8);ChanSpyEvents[_0x5abd[10]](event,_0xf6a1x8);_0xf6a1xa(null)}}module[_0x5abd[11]]= ChanSpyEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ChanSpy = require('../../models').ChanSpy; + +var ChanSpyEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ChanSpyEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ChanSpy.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ChanSpyEvents.emit(event + ':' + doc._id, doc); + ChanSpyEvents.emit(event, doc); + done(null); + } +} + +module.exports = ChanSpyEvents; diff --git a/server/api/chanspy/chanspy.socket.js b/server/api/chanspy/chanspy.socket.js index 1cc7c9d..c0e03c0 100644 --- a/server/api/chanspy/chanspy.socket.js +++ b/server/api/chanspy/chanspy.socket.js @@ -1 +1,28 @@ -var _0x928c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x68\x61\x6E\x73\x70\x79\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x68\x61\x6E\x73\x70\x79\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x928c[0];const ChanSpyEvents=require(_0x928c[1]);var events=[_0x928c[2],_0x928c[3]];exports[_0x928c[4]]= function(_0x9618x3){for(var _0x9618x4=0,_0x9618x5=events[_0x928c[5]];_0x9618x4< _0x9618x5;_0x9618x4++){var _0x9618x6=events[_0x9618x4];var _0x9618x7=createListener(_0x928c[6]+ _0x9618x6,_0x9618x3);ChanSpyEvents[_0x928c[7]](_0x9618x6,_0x9618x7);_0x9618x3[_0x928c[7]](_0x928c[8],removeListener(_0x9618x6,_0x9618x7))}};function createListener(_0x9618x6,_0x9618x3){return function(_0x9618x9){_0x9618x3[_0x928c[9]](_0x9618x6,_0x9618x9)}}function removeListener(_0x9618x6,_0x9618x7){return function(){ChanSpyEvents[_0x928c[10]](_0x9618x6,_0x9618x7)}} \ No newline at end of file +'use strict'; + +const ChanSpyEvents = require('./chanspy.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('chanspy:' + event, socket); + + ChanSpyEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ChanSpyEvents.removeListener(event, listener); + }; +} diff --git a/server/api/chanspy/index.js b/server/api/chanspy/index.js index 69d1d76..597a004 100644 --- a/server/api/chanspy/index.js +++ b/server/api/chanspy/index.js @@ -1 +1,16 @@ -var _0xab0e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x68\x61\x6E\x73\x70\x79\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xab0e[0];var express=require(_0xab0e[1]);var controller=require(_0xab0e[2]);var auth=require(_0xab0e[3]);var router=express.Router();router[_0xab0e[9]](_0xab0e[4],auth[_0xab0e[5]](),auth[_0xab0e[7]]([7],[_0xab0e[6]]),controller[_0xab0e[8]]);router[_0xab0e[9]](_0xab0e[10],auth[_0xab0e[5]](),auth[_0xab0e[7]]([7],[_0xab0e[6]]),controller[_0xab0e[11]]);router[_0xab0e[13]](_0xab0e[4],auth[_0xab0e[5]](),auth[_0xab0e[7]]([7],[_0xab0e[6]]),controller[_0xab0e[12]]);router[_0xab0e[15]](_0xab0e[10],auth[_0xab0e[5]](),auth[_0xab0e[7]]([7],[_0xab0e[6]]),controller[_0xab0e[14]]);router[_0xab0e[17]](_0xab0e[4],auth[_0xab0e[5]](),auth[_0xab0e[7]]([7],[_0xab0e[6]]),controller[_0xab0e[16]]);router[_0xab0e[17]](_0xab0e[10],auth[_0xab0e[5]](),auth[_0xab0e[7]]([7],[_0xab0e[6]]),controller[_0xab0e[18]]);module[_0xab0e[19]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./chanspy.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/chat_application/chat_application.controller.js b/server/api/chat_application/chat_application.controller.js index 8bdff00..cc166a1 100644 --- a/server/api/chat_application/chat_application.controller.js +++ b/server/api/chat_application/chat_application.controller.js @@ -1 +1,97 @@ -var _0x1a46=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x70\x72\x69\x6F\x72\x69\x74\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x49\x64","\x6D\x61\x78","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x1a46[0];var _=require(_0x1a46[1]);var ChatApplication=require(_0x1a46[3])[_0x1a46[2]];exports[_0x1a46[4]]= function(_0xe4c6x3,_0xe4c6x4){return ChatApplication[_0x1a46[11]]({where:_0xe4c6x3[_0x1a46[9]],order:_0x1a46[10],include:[{all:true}]})[_0x1a46[8]](function(_0xe4c6x6){return _0xe4c6x4[_0x1a46[7]](200)[_0x1a46[6]](_0xe4c6x6)})[_0x1a46[5]](function(_0xe4c6x5){return handleError(_0xe4c6x4,_0xe4c6x5)})};exports[_0x1a46[12]]= function(_0xe4c6x3,_0xe4c6x4){return ChatApplication[_0x1a46[16]](_0xe4c6x3[_0x1a46[15]][_0x1a46[14]])[_0x1a46[8]](function(_0xe4c6x7){if(!_0xe4c6x7){return _0xe4c6x4[_0x1a46[13]](404)};return _0xe4c6x4[_0x1a46[6]](_0xe4c6x7)})[_0x1a46[5]](function(_0xe4c6x5){return handleError(_0xe4c6x4,_0xe4c6x5)})};exports[_0x1a46[17]]= function(_0xe4c6x3,_0xe4c6x4,_0xe4c6x8){return ChatApplication[_0x1a46[20]](_0x1a46[10],{where:{ChatWebsiteId:_0xe4c6x3[_0x1a46[18]][_0x1a46[19]]}})[_0x1a46[8]](function(_0xe4c6xa){_0xe4c6x3[_0x1a46[18]][_0x1a46[10]]= _0xe4c6xa?++_0xe4c6xa:1;return ChatApplication[_0x1a46[17]](_0xe4c6x3[_0x1a46[18]])})[_0x1a46[8]](function(_0xe4c6x9){return _0xe4c6x4[_0x1a46[7]](201)[_0x1a46[6]](_0xe4c6x9)})[_0x1a46[5]](function(_0xe4c6x5){_0xe4c6x8(_0xe4c6x5)})};exports[_0x1a46[21]]= function(_0xe4c6x3,_0xe4c6x4){if(_0xe4c6x3[_0x1a46[18]][_0x1a46[14]]){delete _0xe4c6x3[_0x1a46[18]][_0x1a46[14]]};return ChatApplication[_0x1a46[16]](_0xe4c6x3[_0x1a46[15]][_0x1a46[14]])[_0x1a46[8]](function(_0xe4c6x7){if(!_0xe4c6x7){return _0xe4c6x4[_0x1a46[13]](404)};var _0xe4c6xb=_[_0x1a46[22]](_0xe4c6x7,_0xe4c6x3[_0x1a46[18]]);return _0xe4c6xb[_0x1a46[23]]()})[_0x1a46[8]](function(_0xe4c6x7){return _0xe4c6x4[_0x1a46[7]](200)[_0x1a46[6]](_0xe4c6x7)})[_0x1a46[5]](function(_0xe4c6x5){return handleError(_0xe4c6x4,_0xe4c6x5)})};exports[_0x1a46[24]]= function(_0xe4c6x3,_0xe4c6x4){return ChatApplication[_0x1a46[16]](_0xe4c6x3[_0x1a46[15]][_0x1a46[14]])[_0x1a46[8]](function(_0xe4c6x7){if(!_0xe4c6x7){return _0xe4c6x4[_0x1a46[13]](404)};return _0xe4c6x7[_0x1a46[24]]()})[_0x1a46[8]](function(){return _0xe4c6x4[_0x1a46[13]](204)})[_0x1a46[5]](function(_0xe4c6x5){return handleError(_0xe4c6x4,_0xe4c6x5)})};function handleError(_0xe4c6x4,_0xe4c6x5){return _0xe4c6x4[_0x1a46[7]](500)[_0x1a46[6]](_0xe4c6x5)} \ No newline at end of file +'use strict'; +var _ = require('lodash'); +var ChatApplication = require('../../models').ChatApplication; +// Get list of chat_applications +exports.index = function(req, res) { + return ChatApplication + .findAll({ + where: req.query, + order: 'priority', + include: [{ + all: true + }] + }) + .then(function(chat_applications) { + return res.status(200).send(chat_applications); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Get a single chat_application +exports.show = function(req, res) { + return ChatApplication + .findById(req.params.id) + .then(function(chat_application) { + if (!chat_application) { + return res.sendStatus(404); + } + return res.send(chat_application); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Creates a new chat_application in the DB. +exports.create = function(req, res, next) { + return ChatApplication.max('priority', { + where: { + ChatWebsiteId: req.body.ChatWebsiteId + } + }).then(function(max) { + // SET PRIORITY + req.body.priority = max ? ++max : 1; + return ChatApplication + .create(req.body); + }) + .then(function(mailApplication) { + return res.status(201).send(mailApplication); + }) + .catch(function(err) { + next(err); + }); +}; +// Updates an existing chat_application in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return ChatApplication + .findById(req.params.id) + .then(function(chat_application) { + if (!chat_application) { + return res.sendStatus(404); + } + var updated = _.merge(chat_application, req.body); + return updated + .save(); + }) + .then(function(chat_application) { + return res.status(200).send(chat_application); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Deletes a chat_application from the DB. +exports.destroy = function(req, res) { + return ChatApplication + .findById(req.params.id) + .then(function(chat_application) { + if (!chat_application) { + return res.sendStatus(404); + } + return chat_application + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/chat_application/chat_application.events.js b/server/api/chat_application/chat_application.events.js index bb979e7..25f766a 100644 --- a/server/api/chat_application/chat_application.events.js +++ b/server/api/chat_application/chat_application.events.js @@ -1 +1,36 @@ -var _0xb5ee=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xb5ee[0];const EventEmitter=require(_0xb5ee[1]);const ChatApplication=require(_0xb5ee[3])[_0xb5ee[2]];var ChatApplicationEvents= new EventEmitter();ChatApplicationEvents[_0xb5ee[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xb5ee[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xb5ee[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xb5ee[6]};for(var e in events){var event=events[e];ChatApplication[_0xb5ee[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xe937x8,_0xe937x9,_0xe937xa){ChatApplicationEvents[_0xb5ee[10]](event+ _0xb5ee[8]+ _0xe937x8[_0xb5ee[9]],_0xe937x8);ChatApplicationEvents[_0xb5ee[10]](event,_0xe937x8);_0xe937xa(null)}}module[_0xb5ee[11]]= ChatApplicationEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ChatApplication = require('../../models').ChatApplication; + +var ChatApplicationEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ChatApplicationEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ChatApplication.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ChatApplicationEvents.emit(event + ':' + doc._id, doc); + ChatApplicationEvents.emit(event, doc); + done(null); + } +} + +module.exports = ChatApplicationEvents; diff --git a/server/api/chat_application/chat_application.socket.js b/server/api/chat_application/chat_application.socket.js index 6dee6c9..1e82b2e 100644 --- a/server/api/chat_application/chat_application.socket.js +++ b/server/api/chat_application/chat_application.socket.js @@ -1 +1,28 @@ -var _0x7fde=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x68\x61\x74\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x68\x61\x74\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x7fde[0];const ChatApplicationEvents=require(_0x7fde[1]);var events=[_0x7fde[2],_0x7fde[3]];exports[_0x7fde[4]]= function(_0xeb82x3){for(var _0xeb82x4=0,_0xeb82x5=events[_0x7fde[5]];_0xeb82x4< _0xeb82x5;_0xeb82x4++){var _0xeb82x6=events[_0xeb82x4];var _0xeb82x7=createListener(_0x7fde[6]+ _0xeb82x6,_0xeb82x3);ChatApplicationEvents[_0x7fde[7]](_0xeb82x6,_0xeb82x7);_0xeb82x3[_0x7fde[7]](_0x7fde[8],removeListener(_0xeb82x6,_0xeb82x7))}};function createListener(_0xeb82x6,_0xeb82x3){return function(_0xeb82x9){_0xeb82x3[_0x7fde[9]](_0xeb82x6,_0xeb82x9)}}function removeListener(_0xeb82x6,_0xeb82x7){return function(){ChatApplicationEvents[_0x7fde[10]](_0xeb82x6,_0xeb82x7)}} \ No newline at end of file +'use strict'; + +const ChatApplicationEvents = require('./chat_application.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('chat_application:' + event, socket); + + ChatApplicationEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ChatApplicationEvents.removeListener(event, listener); + }; +} diff --git a/server/api/chat_application/index.js b/server/api/chat_application/index.js index a6017a1..d72780d 100644 --- a/server/api/chat_application/index.js +++ b/server/api/chat_application/index.js @@ -1 +1,17 @@ -var _0x21f5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x68\x61\x74\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x21f5[0];var express=require(_0x21f5[1]);var controller=require(_0x21f5[2]);var license=require(_0x21f5[3]);var auth=require(_0x21f5[4]);var router=express.Router();router[_0x21f5[12]](_0x21f5[5],license[_0x21f5[6]](),license[_0x21f5[7]](),auth[_0x21f5[8]](),auth[_0x21f5[10]]([8],[_0x21f5[9]]),controller[_0x21f5[11]]);router[_0x21f5[12]](_0x21f5[13],license[_0x21f5[6]](),license[_0x21f5[7]](),auth[_0x21f5[8]](),auth[_0x21f5[10]]([8],[_0x21f5[9]]),controller[_0x21f5[14]]);router[_0x21f5[16]](_0x21f5[5],license[_0x21f5[6]](),license[_0x21f5[7]](),auth[_0x21f5[8]](),auth[_0x21f5[10]]([8],[_0x21f5[9]]),controller[_0x21f5[15]]);router[_0x21f5[18]](_0x21f5[13],license[_0x21f5[6]](),license[_0x21f5[7]](),auth[_0x21f5[8]](),auth[_0x21f5[10]]([8],[_0x21f5[9]]),controller[_0x21f5[17]]);router[_0x21f5[19]](_0x21f5[13],license[_0x21f5[6]](),license[_0x21f5[7]](),auth[_0x21f5[8]](),auth[_0x21f5[10]]([8],[_0x21f5[9]]),controller[_0x21f5[17]]);router[_0x21f5[21]](_0x21f5[13],license[_0x21f5[6]](),license[_0x21f5[7]](),auth[_0x21f5[8]](),auth[_0x21f5[10]]([8],[_0x21f5[9]]),controller[_0x21f5[20]]);module[_0x21f5[22]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./chat_application.controller'); +var license = require('../../config/license/license.service'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.index); +router.get('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.show); +router.post('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.create); +router.put('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.update); +router.patch('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.update); +router.delete('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/chat_disposition/chat_disposition.controller.js b/server/api/chat_disposition/chat_disposition.controller.js index 5709353..4902da1 100644 --- a/server/api/chat_disposition/chat_disposition.controller.js +++ b/server/api/chat_disposition/chat_disposition.controller.js @@ -1 +1,111 @@ -var _0xe604=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x43\x68\x61\x74\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0xe604[0];var _=require(_0xe604[1]);var ChatDisposition=require(_0xe604[3])[_0xe604[2]];function handleError(_0xf026x4,_0xf026x5){_0xf026x5= _0xf026x5|| 500;return function(_0xf026x6){_0xf026x4[_0xe604[5]](_0xf026x5)[_0xe604[4]](_0xf026x6)}}function responseWithResult(_0xf026x4,_0xf026x5){_0xf026x5= _0xf026x5|| 200;return function(_0xf026x8){if(_0xf026x8){_0xf026x4[_0xe604[5]](_0xf026x5)[_0xe604[6]](_0xf026x8)}}}function responseWithoutResult(_0xf026x4,_0xf026x5){_0xf026x5= _0xf026x5|| 200;return function(){_0xf026x4[_0xe604[7]](_0xf026x5)}}function handleEntityNotFound(_0xf026x4){return function(_0xf026x8){if(!_0xf026x8){_0xf026x4[_0xe604[5]](404)[_0xe604[8]]();return null};return _0xf026x8}}function saveUpdates(_0xf026xc){return function(_0xf026x8){return _0xf026x8[_0xe604[10]](_0xf026xc)[_0xe604[9]](function(_0xf026xd){return _0xf026xd})}}function removeEntity(_0xf026x4){return function(_0xf026x8){if(_0xf026x8){return _0xf026x8[_0xe604[11]]()[_0xe604[9]](function(){_0xf026x4[_0xe604[5]](204)[_0xe604[8]]()})}}}exports[_0xe604[12]]= function(_0xf026xf,_0xf026x4){ChatDisposition[_0xe604[14]]()[_0xe604[9]](responseWithResult(_0xf026x4))[_0xe604[13]](handleError(_0xf026x4))};exports[_0xe604[15]]= function(_0xf026xf,_0xf026x4){ChatDisposition[_0xe604[18]](_0xf026xf[_0xe604[17]][_0xe604[16]])[_0xe604[9]](handleEntityNotFound(_0xf026x4))[_0xe604[9]](responseWithResult(_0xf026x4))[_0xe604[13]](handleError(_0xf026x4))};exports[_0xe604[19]]= function(_0xf026xf,_0xf026x4){ChatDisposition[_0xe604[19]](_0xf026xf[_0xe604[20]])[_0xe604[9]](responseWithResult(_0xf026x4,201))[_0xe604[13]](handleError(_0xf026x4))};exports[_0xe604[21]]= function(_0xf026xf,_0xf026x4){if(_0xf026xf[_0xe604[20]][_0xe604[16]]){delete _0xf026xf[_0xe604[20]][_0xe604[16]]};ChatDisposition[_0xe604[18]](_0xf026xf[_0xe604[17]][_0xe604[16]])[_0xe604[9]](handleEntityNotFound(_0xf026x4))[_0xe604[9]](saveUpdates(_0xf026xf[_0xe604[20]]))[_0xe604[9]](responseWithResult(_0xf026x4))[_0xe604[13]](handleError(_0xf026x4))};exports[_0xe604[11]]= function(_0xf026xf,_0xf026x4){ChatDisposition[_0xe604[18]](_0xf026xf[_0xe604[17]][_0xe604[16]])[_0xe604[9]](handleEntityNotFound(_0xf026x4))[_0xe604[9]](removeEntity(_0xf026x4))[_0xe604[13]](handleError(_0xf026x4))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/chat/dispositions -> index + * POST /api/chat/dispositions -> create + * GET /api/chat/dispositions/:id -> show + * PUT /api/chat/dispositions/:id -> update + * DELETE /api/chat/dispositions/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); + +var ChatDisposition = require('../../models').ChatDisposition; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 200; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of ChatDispositions +exports.index = function(req, res) { + ChatDisposition.findAndCountAll() + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single ChatDisposition from the DB +exports.show = function(req, res) { + ChatDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new ChatDisposition in the DB +exports.create = function(req, res) { + ChatDisposition.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing ChatDisposition in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + ChatDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a ChatDisposition from the DB +exports.destroy = function(req, res) { + ChatDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} diff --git a/server/api/chat_disposition/chat_disposition.events.js b/server/api/chat_disposition/chat_disposition.events.js index b7eff4e..ec5fd9d 100644 --- a/server/api/chat_disposition/chat_disposition.events.js +++ b/server/api/chat_disposition/chat_disposition.events.js @@ -1 +1,36 @@ -var _0x9318=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x68\x61\x74\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x9318[0];const EventEmitter=require(_0x9318[1]);const ChatDisposition=require(_0x9318[3])[_0x9318[2]];var ChatDispositionEvents= new EventEmitter();ChatDispositionEvents[_0x9318[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x9318[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x9318[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x9318[6]};for(var e in events){var event=events[e];ChatDisposition[_0x9318[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x478cx8,_0x478cx9,_0x478cxa){ChatDispositionEvents[_0x9318[10]](event+ _0x9318[8]+ _0x478cx8[_0x9318[9]],_0x478cx8);ChatDispositionEvents[_0x9318[10]](event,_0x478cx8);_0x478cxa(null)}}module[_0x9318[11]]= ChatDispositionEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ChatDisposition = require('../../models').ChatDisposition; + +var ChatDispositionEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ChatDispositionEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ChatDisposition.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ChatDispositionEvents.emit(event + ':' + doc._id, doc); + ChatDispositionEvents.emit(event, doc); + done(null); + } +} + +module.exports = ChatDispositionEvents; diff --git a/server/api/chat_disposition/chat_disposition.socket.js b/server/api/chat_disposition/chat_disposition.socket.js index beeb64c..8788c23 100644 --- a/server/api/chat_disposition/chat_disposition.socket.js +++ b/server/api/chat_disposition/chat_disposition.socket.js @@ -1 +1,32 @@ -var _0xac83=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x68\x61\x74\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x68\x61\x74\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xac83[0];const ChatDispositionEvents=require(_0xac83[1]);var events=[_0xac83[2],_0xac83[3]];exports[_0xac83[4]]= function(_0xd2c2x3){for(var _0xd2c2x4=0,_0xd2c2x5=events[_0xac83[5]];_0xd2c2x4< _0xd2c2x5;_0xd2c2x4++){var _0xd2c2x6=events[_0xd2c2x4];var _0xd2c2x7=createListener(_0xac83[6]+ _0xd2c2x6,_0xd2c2x3);ChatDispositionEvents[_0xac83[7]](_0xd2c2x6,_0xd2c2x7);_0xd2c2x3[_0xac83[7]](_0xac83[8],removeListener(_0xd2c2x6,_0xd2c2x7))}};function createListener(_0xd2c2x6,_0xd2c2x3){return function(_0xd2c2x9){_0xd2c2x3[_0xac83[9]](_0xd2c2x6,_0xd2c2x9)}}function removeListener(_0xd2c2x6,_0xd2c2x7){return function(){ChatDispositionEvents[_0xac83[10]](_0xd2c2x6,_0xd2c2x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ChatDispositionEvents = require('./chat_disposition.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('chat_disposition:' + event, socket); + + ChatDispositionEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ChatDispositionEvents.removeListener(event, listener); + }; +} diff --git a/server/api/chat_disposition/index.js b/server/api/chat_disposition/index.js index 99629eb..aec3275 100644 --- a/server/api/chat_disposition/index.js +++ b/server/api/chat_disposition/index.js @@ -1 +1,18 @@ -var _0x69b2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x63\x68\x61\x74\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x69b2[0];var express=require(_0x69b2[1]);var auth=require(_0x69b2[2]);var controller=require(_0x69b2[3]);var license=require(_0x69b2[4]);var router=express.Router();router[_0x69b2[10]](_0x69b2[5],license[_0x69b2[6]](),license[_0x69b2[7]](),auth[_0x69b2[8]](),controller[_0x69b2[9]]);router[_0x69b2[10]](_0x69b2[11],license[_0x69b2[6]](),license[_0x69b2[7]](),auth[_0x69b2[8]](),controller[_0x69b2[12]]);router[_0x69b2[14]](_0x69b2[5],license[_0x69b2[6]](),license[_0x69b2[7]](),auth[_0x69b2[8]](),controller[_0x69b2[13]]);router[_0x69b2[16]](_0x69b2[11],license[_0x69b2[6]](),license[_0x69b2[7]](),auth[_0x69b2[8]](),controller[_0x69b2[15]]);router[_0x69b2[17]](_0x69b2[11],license[_0x69b2[6]](),license[_0x69b2[7]](),auth[_0x69b2[8]](),controller[_0x69b2[15]]);router[_0x69b2[19]](_0x69b2[11],license[_0x69b2[6]](),license[_0x69b2[7]](),auth[_0x69b2[8]](),controller[_0x69b2[18]]);module[_0x69b2[20]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./chat_disposition.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), controller.index); +router.get('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), controller.show); +router.post('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), controller.create); +router.put('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), controller.update); +router.patch('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), controller.update); +router.delete('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), controller.destroy); + + +module.exports = router; diff --git a/server/api/chat_enquiry/enquiry.controller.js b/server/api/chat_enquiry/enquiry.controller.js index 2c76191..0adc0f6 100644 --- a/server/api/chat_enquiry/enquiry.controller.js +++ b/server/api/chat_enquiry/enquiry.controller.js @@ -1 +1,123 @@ -var _0x995b=["\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","\x43\x68\x61\x74\x45\x6E\x71\x75\x69\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x4C\x69\x73\x74","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x69\x64","\x6E\x61\x6D\x65","\x6D\x65\x72\x67\x65","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x65\x72\x72\x6F\x72","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x70\x61\x72\x61\x6D\x73","\x4C\x69\x73\x74\x49\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x995b[0];var _=require(_0x995b[1]);var Util=require(_0x995b[2]);var ChatEnquiry=require(_0x995b[4])[_0x995b[3]];var ChatVisitor=require(_0x995b[4])[_0x995b[5]];var ChatWebsite=require(_0x995b[4])[_0x995b[6]];var List=require(_0x995b[4])[_0x995b[7]];exports[_0x995b[8]]= function(_0x56c0x7,_0x56c0x8,_0x56c0x9){return ChatEnquiry[_0x995b[18]](_[_0x995b[17]](Util[_0x995b[14]](_0x56c0x7[_0x995b[13]]),{include:[{model:ChatWebsite,attributes:[_0x995b[15],_0x995b[16]]}]}))[_0x995b[12]](function(_0x56c0xb){return _0x56c0x8[_0x995b[11]](200)[_0x995b[10]](_0x56c0xb)})[_0x995b[9]](function(_0x56c0xa){return handleError(_0x56c0x8,_0x56c0xa)})};exports[_0x995b[19]]= function(_0x56c0x7,_0x56c0x8){return ChatEnquiry[_0x995b[24]](_0x56c0x7[_0x995b[22]][_0x995b[15]],{include:[{model:ChatWebsite,attributes:[_0x995b[15],_0x995b[16],_0x995b[23]]},{model:ChatVisitor}]})[_0x995b[12]](function(_0x56c0xc){if(!_0x56c0xc){return _0x56c0x8[_0x995b[21]](404)};return _0x56c0x8[_0x995b[10]](_0x56c0xc)})[_0x995b[9]](function(_0x56c0xa){console[_0x995b[20]](_0x56c0xa);return handleError(_0x56c0x8,_0x56c0xa)})};exports[_0x995b[25]]= function(_0x56c0x7,_0x56c0x8){return ChatEnquiry[_0x995b[25]](_0x56c0x7[_0x995b[26]])[_0x995b[12]](function(_0x56c0xc){return _0x56c0x8[_0x995b[11]](201)[_0x995b[10]](_0x56c0xc)})[_0x995b[9]](function(_0x56c0xa){return handleError(_0x56c0x8,_0x56c0xa)})};exports[_0x995b[27]]= function(_0x56c0x7,_0x56c0x8){if(_0x56c0x7[_0x995b[26]][_0x995b[15]]){delete _0x56c0x7[_0x995b[26]][_0x995b[15]]};return ChatEnquiry[_0x995b[24]](_0x56c0x7[_0x995b[22]][_0x995b[15]])[_0x995b[12]](function(_0x56c0xc){if(!_0x56c0xc){return _0x56c0x8[_0x995b[21]](404)};var _0x56c0xd=_[_0x995b[17]](_0x56c0xc,_0x56c0x7[_0x995b[26]]);return _0x56c0xd[_0x995b[28]]()})[_0x995b[12]](function(_0x56c0xc){return _0x56c0x8[_0x995b[11]](200)[_0x995b[10]](_0x56c0xc)})[_0x995b[9]](function(_0x56c0xa){return handleError(_0x56c0x8,_0x56c0xa)})};exports[_0x995b[29]]= function(_0x56c0x7,_0x56c0x8){return ChatEnquiry[_0x995b[24]](_0x56c0x7[_0x995b[22]][_0x995b[15]])[_0x995b[12]](function(_0x56c0xc){if(!_0x56c0xc){return _0x56c0x8[_0x995b[21]](404)};return _0x56c0xc[_0x995b[29]]()})[_0x995b[12]](function(){return _0x56c0x8[_0x995b[21]](204)})[_0x995b[9]](function(_0x56c0xa){return handleError(_0x56c0x8,_0x56c0xa)})};exports[_0x995b[30]]= function(_0x56c0x7,_0x56c0x8){return ChatEnquiry[_0x995b[29]]({where:{id:_0x56c0x7[_0x995b[13]][_0x995b[31]]},individualHooks:true})[_0x995b[12]](function(){return _0x56c0x8[_0x995b[21]](204)})[_0x995b[9]](function(_0x56c0xa){return handleError(_0x56c0x8,_0x56c0xa)})};function handleError(_0x56c0x8,_0x56c0xa){return _0x56c0x8[_0x995b[11]](500)[_0x995b[10]](_0x56c0xa)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var ChatEnquiry = require('../../models').ChatEnquiry; +var ChatVisitor = require('../../models').ChatVisitor; +var ChatWebsite = require('../../models').ChatWebsite; +var List = require('../../models').List; + +// Get list of agents +exports.index = function(req, res, next) { + return ChatEnquiry + .findAndCountAll(_.merge(Util.getQuery(req.query), { + include: [{ + model: ChatWebsite, + attributes: ['id', 'name'] + }] + })) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single enquiry +exports.show = function(req, res) { + return ChatEnquiry + .findById(req.params.id, { + include: [{ + model: ChatWebsite, + attributes: ['id', 'name', 'ListId'], + }, { + model: ChatVisitor + }] + }) + .then(function(enquiry) { + if (!enquiry) { + return res.sendStatus(404); + } + return res.send(enquiry); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); +}; + +// Creates a new enquiry in the DB. +exports.create = function(req, res) { + return ChatEnquiry + .create(req.body) + .then(function(enquiry) { + return res.status(201).send(enquiry); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing enquiry in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return ChatEnquiry + .findById(req.params.id) + .then(function(enquiry) { + if (!enquiry) { + return res.sendStatus(404); + } + var updated = _.merge(enquiry, req.body); + return updated + .save(); + }) + .then(function(enquiry) { + return res.status(200).send(enquiry); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a enquiry from the DB. +exports.destroy = function(req, res) { + return ChatEnquiry + .findById(req.params.id) + .then(function(enquiry) { + if (!enquiry) { + return res.sendStatus(404); + } + return enquiry + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.bulkDestroy = function(req, res) { + return ChatEnquiry + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/chat_enquiry/enquiry.events.js b/server/api/chat_enquiry/enquiry.events.js index c0a515d..e818a2a 100644 --- a/server/api/chat_enquiry/enquiry.events.js +++ b/server/api/chat_enquiry/enquiry.events.js @@ -1 +1,36 @@ -var _0xf51d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x68\x61\x74\x45\x6E\x71\x75\x69\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xf51d[0];const EventEmitter=require(_0xf51d[1]);const Enquiry=require(_0xf51d[3])[_0xf51d[2]];var EnquiryEvents= new EventEmitter();EnquiryEvents[_0xf51d[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xf51d[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xf51d[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xf51d[6]};for(var e in events){var event=events[e];Enquiry[_0xf51d[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x87c0x8,_0x87c0x9,_0x87c0xa){EnquiryEvents[_0xf51d[10]](event+ _0xf51d[8]+ _0x87c0x8[_0xf51d[9]],_0x87c0x8);EnquiryEvents[_0xf51d[10]](event,_0x87c0x8);_0x87c0xa(null)}}module[_0xf51d[11]]= EnquiryEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Enquiry = require('../../models').ChatEnquiry; + +var EnquiryEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +EnquiryEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Enquiry.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + EnquiryEvents.emit(event + ':' + doc._id, doc); + EnquiryEvents.emit(event, doc); + done(null); + } +} + +module.exports = EnquiryEvents; diff --git a/server/api/chat_enquiry/enquiry.socket.js b/server/api/chat_enquiry/enquiry.socket.js index de1a6ee..686f9a1 100644 --- a/server/api/chat_enquiry/enquiry.socket.js +++ b/server/api/chat_enquiry/enquiry.socket.js @@ -1 +1,28 @@ -var _0xf91b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x65\x6E\x71\x75\x69\x72\x79\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x65\x6E\x71\x75\x69\x72\x79\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xf91b[0];const ChatEnquiryEvents=require(_0xf91b[1]);var events=[_0xf91b[2],_0xf91b[3]];exports[_0xf91b[4]]= function(_0x90a2x3){for(var _0x90a2x4=0,_0x90a2x5=events[_0xf91b[5]];_0x90a2x4< _0x90a2x5;_0x90a2x4++){var _0x90a2x6=events[_0x90a2x4];var _0x90a2x7=createListener(_0xf91b[6]+ _0x90a2x6,_0x90a2x3);ChatEnquiryEvents[_0xf91b[7]](_0x90a2x6,_0x90a2x7);_0x90a2x3[_0xf91b[7]](_0xf91b[8],removeListener(_0x90a2x6,_0x90a2x7))}};function createListener(_0x90a2x6,_0x90a2x3){return function(_0x90a2x9){_0x90a2x3[_0xf91b[9]](_0x90a2x6,_0x90a2x9)}}function removeListener(_0x90a2x6,_0x90a2x7){return function(){ChatEnquiryEvents[_0xf91b[10]](_0x90a2x6,_0x90a2x7)}} \ No newline at end of file +'use strict'; + +const ChatEnquiryEvents = require('./enquiry.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('enquiry:' + event, socket); + + ChatEnquiryEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ChatEnquiryEvents.removeListener(event, listener); + }; +} diff --git a/server/api/chat_enquiry/index.js b/server/api/chat_enquiry/index.js index 7bf9aea..0add885 100644 --- a/server/api/chat_enquiry/index.js +++ b/server/api/chat_enquiry/index.js @@ -1 +1,19 @@ -var _0xabc9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x65\x6E\x71\x75\x69\x72\x79\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xabc9[0];var express=require(_0xabc9[1]);var controller=require(_0xabc9[2]);var license=require(_0xabc9[3]);var auth=require(_0xabc9[4]);var router=express.Router();router[_0xabc9[12]](_0xabc9[5],license[_0xabc9[6]](),license[_0xabc9[7]](),auth[_0xabc9[8]](),auth[_0xabc9[10]]([8],[_0xabc9[9]]),controller[_0xabc9[11]]);router[_0xabc9[12]](_0xabc9[13],license[_0xabc9[6]](),license[_0xabc9[7]](),auth[_0xabc9[8]](),auth[_0xabc9[10]]([8],[_0xabc9[9]]),controller[_0xabc9[14]]);router[_0xabc9[16]](_0xabc9[5],license[_0xabc9[6]](),license[_0xabc9[7]](),auth[_0xabc9[8]](),auth[_0xabc9[10]]([8],[_0xabc9[9]]),controller[_0xabc9[15]]);router[_0xabc9[18]](_0xabc9[13],license[_0xabc9[6]](),license[_0xabc9[7]](),auth[_0xabc9[8]](),auth[_0xabc9[10]]([8],[_0xabc9[9]]),controller[_0xabc9[17]]);router[_0xabc9[19]](_0xabc9[13],license[_0xabc9[6]](),license[_0xabc9[7]](),auth[_0xabc9[8]](),auth[_0xabc9[10]]([8],[_0xabc9[9]]),controller[_0xabc9[17]]);router[_0xabc9[21]](_0xabc9[5],license[_0xabc9[6]](),license[_0xabc9[7]](),auth[_0xabc9[8]](),auth[_0xabc9[10]]([8],[_0xabc9[9]]),controller[_0xabc9[20]]);router[_0xabc9[21]](_0xabc9[13],license[_0xabc9[6]](),license[_0xabc9[7]](),auth[_0xabc9[8]](),auth[_0xabc9[10]]([8],[_0xabc9[9]]),controller[_0xabc9[22]]);module[_0xabc9[23]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./enquiry.controller'); +var license = require('../../config/license/license.service'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.index); +router.get('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.show); +router.post('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.create); +router.put('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.update); +router.patch('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.update); +router.delete('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.bulkDestroy); +router.delete('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/chat_message/chat_message.controller.js b/server/api/chat_message/chat_message.controller.js index fd69cd4..ac89444 100644 --- a/server/api/chat_message/chat_message.controller.js +++ b/server/api/chat_message/chat_message.controller.js @@ -1 +1,106 @@ -var _0x8975=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x64\x35","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x73\x65\x72","\x6D\x65\x72\x67\x65","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x8975[0];var _=require(_0x8975[1]);var md5=require(_0x8975[2]);var User=require(_0x8975[4])[_0x8975[3]];var ChatRoom=require(_0x8975[4])[_0x8975[5]];var ChatMessage=require(_0x8975[4])[_0x8975[6]];var ChatVisitor=require(_0x8975[4])[_0x8975[7]];exports[_0x8975[8]]= function(_0x7675x7,_0x7675x8){return ChatMessage[_0x8975[13]]()[_0x8975[12]](function(_0x7675xa){return _0x7675x8[_0x8975[11]](200)[_0x8975[10]](_0x7675xa)})[_0x8975[9]](function(_0x7675x9){return handleError(_0x7675x8,_0x7675x9)})};exports[_0x8975[14]]= function(_0x7675x7,_0x7675x8){return ChatMessage[_0x8975[14]]()[_0x8975[12]](function(_0x7675xb){return _0x7675x8[_0x8975[11]](200)[_0x8975[10]](_0x7675xb)})[_0x8975[9]](function(_0x7675x9){return handleError(_0x7675x8,_0x7675x9)})};exports[_0x8975[15]]= function(_0x7675x7,_0x7675x8){return ChatMessage[_0x8975[19]](_0x7675x7[_0x8975[18]][_0x8975[17]])[_0x8975[12]](function(_0x7675xc){if(!_0x7675xc){return _0x7675x8[_0x8975[16]](404)};return _0x7675x8[_0x8975[10]](_0x7675xc)})[_0x8975[9]](function(_0x7675x9){return handleError(_0x7675x8,_0x7675x9)})};exports[_0x8975[20]]= function(_0x7675x7,_0x7675x8,_0x7675xd){return ChatMessage[_0x8975[20]](_[_0x8975[23]](_0x7675x7[_0x8975[21]],{UserId:_0x7675x7[_0x8975[22]][_0x8975[17]]}))[_0x8975[12]](function(_0x7675xc){return _0x7675x8[_0x8975[11]](201)[_0x8975[10]](_0x7675xc)})[_0x8975[9]](function(_0x7675x9){return handleError(_0x7675x8,_0x7675x9)})};exports[_0x8975[24]]= function(_0x7675x7,_0x7675x8){if(_0x7675x7[_0x8975[21]][_0x8975[17]]){delete _0x7675x7[_0x8975[21]][_0x8975[17]]};return ChatMessage[_0x8975[19]](_0x7675x7[_0x8975[18]][_0x8975[17]])[_0x8975[12]](function(_0x7675xc){if(!_0x7675xc){return _0x7675x8[_0x8975[16]](404)};var _0x7675xe=_[_0x8975[23]](_0x7675xc,_0x7675x7[_0x8975[21]]);return _0x7675xe[_0x8975[25]]()})[_0x8975[12]](function(_0x7675xc){return _0x7675x8[_0x8975[11]](200)[_0x8975[10]](_0x7675xc)})[_0x8975[9]](function(_0x7675x9){return handleError(_0x7675x8,_0x7675x9)})};exports[_0x8975[26]]= function(_0x7675x7,_0x7675x8){return ChatMessage[_0x8975[19]](_0x7675x7[_0x8975[18]][_0x8975[17]])[_0x8975[12]](function(_0x7675xc){if(!_0x7675xc){return _0x7675x8[_0x8975[16]](404)};return _0x7675xc[_0x8975[26]]()})[_0x8975[12]](function(){return _0x7675x8[_0x8975[16]](204)})[_0x8975[9]](function(_0x7675x9){return handleError(_0x7675x8,_0x7675x9)})};function handleError(_0x7675x8,_0x7675x9){return _0x7675x8[_0x8975[11]](500)[_0x8975[10]](_0x7675x9)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var md5 = require('md5'); + +var User = require('../../models').User; +var ChatRoom = require('../../models').ChatRoom; +var ChatMessage = require('../../models').ChatMessage; +var ChatVisitor = require('../../models').ChatVisitor; + +// Get list of chat_messages +exports.index = function(req, res) { + return ChatMessage + .findAll() + .then(function(chat_messages) { + return res.status(200).send(chat_messages); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.describe = function(req, res) { + return ChatMessage + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single chatMessage +exports.show = function(req, res) { + return ChatMessage + .findById(req.params.id) + .then(function(chatMessage) { + if (!chatMessage) { + return res.sendStatus(404); + } + return res.send(chatMessage); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new chatMessage in the DB. +exports.create = function(req, res, next) { + return ChatMessage + .create(_.merge(req.body, { + UserId: req.user.id + })) + .then(function(chatMessage) { + return res.status(201).send(chatMessage); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing chatMessage in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return ChatMessage + .findById(req.params.id) + .then(function(chatMessage) { + if (!chatMessage) { + return res.sendStatus(404); + } + var updated = _.merge(chatMessage, req.body); + return updated.save(); + }) + .then(function(chatMessage) { + return res.status(200).send(chatMessage); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a chatMessage from the DB. +exports.destroy = function(req, res) { + return ChatMessage + .findById(req.params.id) + .then(function(chatMessage) { + if (!chatMessage) { + return res.sendStatus(404); + } + return chatMessage.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/chat_message/chat_message.events.js b/server/api/chat_message/chat_message.events.js index 21b8f06..64d8887 100644 --- a/server/api/chat_message/chat_message.events.js +++ b/server/api/chat_message/chat_message.events.js @@ -1 +1,36 @@ -var _0x6a10=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x6a10[0];const EventEmitter=require(_0x6a10[1]);const ChatMessage=require(_0x6a10[3])[_0x6a10[2]];var ChatMessageEvents= new EventEmitter();ChatMessageEvents[_0x6a10[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x6a10[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x6a10[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x6a10[6]};for(var e in events){var event=events[e];ChatMessage[_0x6a10[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x4f44x8,_0x4f44x9,_0x4f44xa){ChatMessageEvents[_0x6a10[10]](event+ _0x6a10[8]+ _0x4f44x8[_0x6a10[9]],_0x4f44x8);ChatMessageEvents[_0x6a10[10]](event,_0x4f44x8);_0x4f44xa(null)}}module[_0x6a10[11]]= ChatMessageEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ChatMessage = require('../../models').ChatMessage; + +var ChatMessageEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ChatMessageEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ChatMessage.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ChatMessageEvents.emit(event + ':' + doc._id, doc); + ChatMessageEvents.emit(event, doc); + done(null); + } +} + +module.exports = ChatMessageEvents; diff --git a/server/api/chat_message/chat_message.socket.js b/server/api/chat_message/chat_message.socket.js index f7c4200..df90ddc 100644 --- a/server/api/chat_message/chat_message.socket.js +++ b/server/api/chat_message/chat_message.socket.js @@ -1 +1,62 @@ -var _0x2b3e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2F\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x55\x73\x65\x72\x49\x64","\x66\x69\x6E\x64","\x75\x73\x65\x72\x49\x64","\x69\x64","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x6D\x65\x72\x67\x65","\x65\x6D\x69\x74","\x66\x6F\x72\x45\x61\x63\x68","\x73\x70\x72\x65\x61\x64","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x72\x6F\x6C\x65","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x75\x73\x65\x72\x70\x69\x63","\x67\x65\x74\x55\x73\x65\x72\x73","\x67\x65\x74\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x74\x68\x65\x6E","\x67\x65\x74\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x2b3e[0];const _=require(_0x2b3e[1]);const ChatMessage=require(_0x2b3e[3])[_0x2b3e[2]];const ChatMessageEvents=require(_0x2b3e[4]);var events=[_0x2b3e[5],_0x2b3e[6]];exports[_0x2b3e[7]]= function(_0x2d10x5){for(var _0x2d10x6=0,_0x2d10x7=events[_0x2b3e[8]];_0x2d10x6< _0x2d10x7;_0x2d10x6++){var _0x2d10x8=events[_0x2d10x6];var _0x2d10x9=createListener(_0x2b3e[9]+ _0x2d10x8,_0x2d10x5);ChatMessageEvents[_0x2b3e[10]](_0x2d10x8,_0x2d10x9);_0x2d10x5[_0x2b3e[10]](_0x2b3e[11],removeListener(_0x2d10x8,_0x2d10x9))}};function createListener(_0x2d10x8,_0x2d10x5){return function(_0x2d10xb){return _0x2d10xb[_0x2b3e[32]]()[_0x2b3e[31]](function(_0x2d10x11){return [_0x2d10x11[_0x2b3e[29]]({attributes:[_0x2b3e[17],_0x2b3e[23],_0x2b3e[24],_0x2b3e[25],_0x2b3e[26],_0x2b3e[27],_0x2b3e[28]],raw:true}),_0x2d10x11[_0x2b3e[30]]({attributes:[_0x2b3e[17],_0x2b3e[24],_0x2b3e[25]],raw:true})]})[_0x2b3e[22]](function(_0x2d10xd,_0x2d10xe){var _0x2d10xf=_[_0x2b3e[15]](_0x2d10xd,{id:_0x2d10xb[_0x2b3e[14]]});_0x2d10xd[_0x2b3e[21]](function(_0x2d10x10){if(_0x2d10x5[_0x2b3e[16]]== _0x2d10x10[_0x2b3e[17]]&& (_0x2d10xf|| _0x2d10xe)){_0x2d10x5[_0x2b3e[20]](_0x2d10x8,_[_0x2b3e[19]](_0x2d10xb[_0x2b3e[18]],{User:_0x2d10xf,ChatVisitor:_0x2d10xf?null:_0x2d10xe}))}})})[_0x2b3e[13]](function(_0x2d10xc){console[_0x2b3e[12]](_0x2d10xc)})}}function removeListener(_0x2d10x8,_0x2d10x9){return function(){ChatMessageEvents[_0x2b3e[33]](_0x2d10x8,_0x2d10x9)}} \ No newline at end of file +'use strict'; + +const _ = require('lodash'); + +const ChatMessage = require('../../models').ChatMessage; +const ChatMessageEvents = require('./chat_message.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('chat_message:' + event, socket); + + ChatMessageEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + return doc + .getChatRoom() + .then(function(chatRoom) { + return [chatRoom + .getUsers({ + attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal', 'userpic'], + raw: true + }), chatRoom + .getChatVisitor({ + attributes: ['id', 'fullname', 'email'], + raw: true + }) + ]; + }) + .spread(function(users, visitor) { + var sender = _.find(users, { + id: doc.UserId + }); + + users.forEach(function(user) { + // SOCKET FILTER + if (socket.userId == user.id && (sender || visitor)) { + socket.emit(event, _.merge(doc.dataValues, { + User: sender, // TODO modify to sender + ChatVisitor: sender ? null : visitor // TODO modify to visitor + })); + } + }); + }) + .catch(function(err) { + console.error(err); + }); + }; +} + +function removeListener(event, listener) { + return function() { + ChatMessageEvents.removeListener(event, listener); + }; +} diff --git a/server/api/chat_message/index.js b/server/api/chat_message/index.js index 97847f7..947b5a8 100644 --- a/server/api/chat_message/index.js +++ b/server/api/chat_message/index.js @@ -1 +1,18 @@ -var _0xa06d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xa06d[0];var express=require(_0xa06d[1]);var controller=require(_0xa06d[2]);var license=require(_0xa06d[3]);var auth=require(_0xa06d[4]);var router=express.Router();router[_0xa06d[13]](_0xa06d[5],license[_0xa06d[6]](),license[_0xa06d[7]](),auth[_0xa06d[8]](),auth[_0xa06d[11]]([8],[_0xa06d[9],_0xa06d[10]]),controller[_0xa06d[12]]);router[_0xa06d[13]](_0xa06d[14],license[_0xa06d[6]](),license[_0xa06d[7]](),auth[_0xa06d[8]](),auth[_0xa06d[11]]([8],[_0xa06d[9]]),controller[_0xa06d[15]]);router[_0xa06d[13]](_0xa06d[16],license[_0xa06d[6]](),license[_0xa06d[7]](),auth[_0xa06d[8]](),auth[_0xa06d[11]]([8],[_0xa06d[9],_0xa06d[10]]),controller[_0xa06d[17]]);router[_0xa06d[19]](_0xa06d[5],license[_0xa06d[6]](),license[_0xa06d[7]](),auth[_0xa06d[8]](),auth[_0xa06d[11]]([8],[_0xa06d[9],_0xa06d[10]]),controller[_0xa06d[18]]);router[_0xa06d[21]](_0xa06d[16],license[_0xa06d[6]](),license[_0xa06d[7]](),auth[_0xa06d[8]](),auth[_0xa06d[11]]([8],[_0xa06d[9]]),controller[_0xa06d[20]]);router[_0xa06d[23]](_0xa06d[16],license[_0xa06d[6]](),license[_0xa06d[7]](),auth[_0xa06d[8]](),auth[_0xa06d[11]]([8],[_0xa06d[9]]),controller[_0xa06d[22]]);module[_0xa06d[24]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./chat_message.controller'); +var license = require('../../config/license/license.service'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.index); +router.get('/describe', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.describe); +router.get('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.show); +router.post('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.create); +router.put('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.update); +router.delete('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/chat_proactive_action/chat_proactive_action.controller.js b/server/api/chat_proactive_action/chat_proactive_action.controller.js index 7bf4569..8e3b8ba 100644 --- a/server/api/chat_proactive_action/chat_proactive_action.controller.js +++ b/server/api/chat_proactive_action/chat_proactive_action.controller.js @@ -1 +1,112 @@ -var _0x1001=["\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","\x43\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0x1001[0];var _=require(_0x1001[1]);var Util=require(_0x1001[2]);var ChatProactiveAction=require(_0x1001[4])[_0x1001[3]];function handleError(_0xa6f3x5,_0xa6f3x6){_0xa6f3x6= _0xa6f3x6|| 500;return function(_0xa6f3x7){_0xa6f3x5[_0x1001[6]](_0xa6f3x6)[_0x1001[5]](_0xa6f3x7)}}function responseWithResult(_0xa6f3x5,_0xa6f3x6){_0xa6f3x6= _0xa6f3x6|| 200;return function(_0xa6f3x9){if(_0xa6f3x9){_0xa6f3x5[_0x1001[6]](_0xa6f3x6)[_0x1001[7]](_0xa6f3x9)}}}function responseWithoutResult(_0xa6f3x5,_0xa6f3x6){_0xa6f3x6= _0xa6f3x6|| 204;return function(){_0xa6f3x5[_0x1001[8]](_0xa6f3x6)}}function handleEntityNotFound(_0xa6f3x5){return function(_0xa6f3x9){if(!_0xa6f3x9){_0xa6f3x5[_0x1001[6]](404)[_0x1001[9]]();return null};return _0xa6f3x9}}function saveUpdates(_0xa6f3xd){return function(_0xa6f3x9){return _0xa6f3x9[_0x1001[11]](_0xa6f3xd)[_0x1001[10]](function(_0xa6f3xe){return _0xa6f3xe})}}function removeEntity(_0xa6f3x5){return function(_0xa6f3x9){if(_0xa6f3x9){return _0xa6f3x9[_0x1001[12]]()[_0x1001[10]](function(){_0xa6f3x5[_0x1001[6]](204)[_0x1001[9]]()})}}}exports[_0x1001[13]]= function(_0xa6f3x10,_0xa6f3x5){return ChatProactiveAction[_0x1001[17]](Util[_0x1001[16]](_0xa6f3x10[_0x1001[15]]))[_0x1001[10]](responseWithResult(_0xa6f3x5))[_0x1001[14]](handleError(_0xa6f3x5))};exports[_0x1001[18]]= function(_0xa6f3x10,_0xa6f3x5){return ChatProactiveAction[_0x1001[21]](_0xa6f3x10[_0x1001[20]][_0x1001[19]])[_0x1001[10]](handleEntityNotFound(_0xa6f3x5))[_0x1001[10]](responseWithResult(_0xa6f3x5))[_0x1001[14]](handleError(_0xa6f3x5))};exports[_0x1001[22]]= function(_0xa6f3x10,_0xa6f3x5){return ChatProactiveAction[_0x1001[22]](_0xa6f3x10[_0x1001[23]])[_0x1001[10]](responseWithResult(_0xa6f3x5,201))[_0x1001[14]](handleError(_0xa6f3x5))};exports[_0x1001[24]]= function(_0xa6f3x10,_0xa6f3x5){if(_0xa6f3x10[_0x1001[23]][_0x1001[19]]){delete _0xa6f3x10[_0x1001[23]][_0x1001[19]]};return ChatProactiveAction[_0x1001[21]](_0xa6f3x10[_0x1001[20]][_0x1001[19]])[_0x1001[10]](handleEntityNotFound(_0xa6f3x5))[_0x1001[10]](saveUpdates(_0xa6f3x10[_0x1001[23]]))[_0x1001[10]](responseWithResult(_0xa6f3x5))[_0x1001[14]](handleError(_0xa6f3x5))};exports[_0x1001[12]]= function(_0xa6f3x10,_0xa6f3x5){return ChatProactiveAction[_0x1001[21]](_0xa6f3x10[_0x1001[20]][_0x1001[19]])[_0x1001[10]](handleEntityNotFound(_0xa6f3x5))[_0x1001[10]](removeEntity(_0xa6f3x5))[_0x1001[14]](handleError(_0xa6f3x5))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/chat/proactives -> index + * POST /api/chat/proactives -> create + * GET /api/chat/proactives/:id -> show + * PUT /api/chat/proactives/:id -> update + * DELETE /api/chat/proactives/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var ChatProactiveAction = require('../../models').ChatProactiveAction; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 204; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of ChatProactiveActions +exports.index = function(req, res) { + return ChatProactiveAction.findAll(Util.getQuery(req.query)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single ChatProactiveAction from the DB +exports.show = function(req, res) { + return ChatProactiveAction.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new ChatProactiveAction in the DB +exports.create = function(req, res) { + return ChatProactiveAction.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing ChatProactiveAction in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return ChatProactiveAction.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a ChatProactiveAction from the DB +exports.destroy = function(req, res) { + return ChatProactiveAction.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} diff --git a/server/api/chat_proactive_action/chat_proactive_action.events.js b/server/api/chat_proactive_action/chat_proactive_action.events.js index b21d657..63b128a 100644 --- a/server/api/chat_proactive_action/chat_proactive_action.events.js +++ b/server/api/chat_proactive_action/chat_proactive_action.events.js @@ -1 +1,36 @@ -var _0xff4f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xff4f[0];const EventEmitter=require(_0xff4f[1]);const ChatProactiveAction=require(_0xff4f[3])[_0xff4f[2]];var ChatProactiveActionEvents= new EventEmitter();ChatProactiveActionEvents[_0xff4f[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xff4f[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xff4f[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xff4f[6]};for(var e in events){var event=events[e];ChatProactiveAction[_0xff4f[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x2b17x8,_0x2b17x9,_0x2b17xa){ChatProactiveActionEvents[_0xff4f[10]](event+ _0xff4f[8]+ _0x2b17x8[_0xff4f[9]],_0x2b17x8);ChatProactiveActionEvents[_0xff4f[10]](event,_0x2b17x8);_0x2b17xa(null)}}module[_0xff4f[11]]= ChatProactiveActionEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ChatProactiveAction = require('../../models').ChatProactiveAction; + +var ChatProactiveActionEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ChatProactiveActionEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ChatProactiveAction.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ChatProactiveActionEvents.emit(event + ':' + doc._id, doc); + ChatProactiveActionEvents.emit(event, doc); + done(null); + } +} + +module.exports = ChatProactiveActionEvents; diff --git a/server/api/chat_proactive_action/chat_proactive_action.socket.js b/server/api/chat_proactive_action/chat_proactive_action.socket.js index c1581f1..2e9d2a7 100644 --- a/server/api/chat_proactive_action/chat_proactive_action.socket.js +++ b/server/api/chat_proactive_action/chat_proactive_action.socket.js @@ -1 +1,28 @@ -var _0xb528=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x68\x61\x74\x5F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x5F\x61\x63\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x68\x61\x74\x5F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x5F\x61\x63\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xb528[0];const ChatProactiveActionEvents=require(_0xb528[1]);var events=[_0xb528[2],_0xb528[3]];exports[_0xb528[4]]= function(_0x613dx3){for(var _0x613dx4=0,_0x613dx5=events[_0xb528[5]];_0x613dx4< _0x613dx5;_0x613dx4++){var _0x613dx6=events[_0x613dx4];var _0x613dx7=createListener(_0xb528[6]+ _0x613dx6,_0x613dx3);ChatProactiveActionEvents[_0xb528[7]](_0x613dx6,_0x613dx7);_0x613dx3[_0xb528[7]](_0xb528[8],removeListener(_0x613dx6,_0x613dx7))}};function createListener(_0x613dx6,_0x613dx3){return function(_0x613dx9){_0x613dx3[_0xb528[9]](_0x613dx6,_0x613dx9)}}function removeListener(_0x613dx6,_0x613dx7){return function(){ChatProactiveActionEvents[_0xb528[10]](_0x613dx6,_0x613dx7)}} \ No newline at end of file +'use strict'; + +const ChatProactiveActionEvents = require('./chat_proactive_action.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('chat_proactive_action:' + event, socket); + + ChatProactiveActionEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ChatProactiveActionEvents.removeListener(event, listener); + }; +} diff --git a/server/api/chat_proactive_action/index.js b/server/api/chat_proactive_action/index.js index 9f1f794..e8e0ecf 100644 --- a/server/api/chat_proactive_action/index.js +++ b/server/api/chat_proactive_action/index.js @@ -1 +1,17 @@ -var _0x7e06=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x63\x68\x61\x74\x5F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x5F\x61\x63\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x7e06[0];var express=require(_0x7e06[1]);var auth=require(_0x7e06[2]);var controller=require(_0x7e06[3]);var license=require(_0x7e06[4]);var router=express.Router();router[_0x7e06[12]](_0x7e06[5],license[_0x7e06[6]](),license[_0x7e06[7]](),auth[_0x7e06[8]](),auth[_0x7e06[10]]([8],[_0x7e06[9]]),controller[_0x7e06[11]]);router[_0x7e06[12]](_0x7e06[13],license[_0x7e06[6]](),license[_0x7e06[7]](),auth[_0x7e06[8]](),auth[_0x7e06[10]]([8],[_0x7e06[9]]),controller[_0x7e06[14]]);router[_0x7e06[16]](_0x7e06[5],license[_0x7e06[6]](),license[_0x7e06[7]](),auth[_0x7e06[8]](),auth[_0x7e06[10]]([8],[_0x7e06[9]]),controller[_0x7e06[15]]);router[_0x7e06[18]](_0x7e06[13],license[_0x7e06[6]](),license[_0x7e06[7]](),auth[_0x7e06[8]](),auth[_0x7e06[10]]([8],[_0x7e06[9]]),controller[_0x7e06[17]]);router[_0x7e06[19]](_0x7e06[13],license[_0x7e06[6]](),license[_0x7e06[7]](),auth[_0x7e06[8]](),auth[_0x7e06[10]]([8],[_0x7e06[9]]),controller[_0x7e06[17]]);router[_0x7e06[21]](_0x7e06[13],license[_0x7e06[6]](),license[_0x7e06[7]](),auth[_0x7e06[8]](),auth[_0x7e06[10]]([8],[_0x7e06[9]]),controller[_0x7e06[20]]);module[_0x7e06[22]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./chat_proactive_action.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.index); +router.get('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.show); +router.post('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.create); +router.put('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.update); +router.patch('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.update); +router.delete('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/chat_queue/chat_queue.controller.js b/server/api/chat_queue/chat_queue.controller.js index 2c1dbe9..fa34821 100644 --- a/server/api/chat_queue/chat_queue.controller.js +++ b/server/api/chat_queue/chat_queue.controller.js @@ -1 +1,237 @@ -var _0xf445=["\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","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x43\x68\x61\x74\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","\x72\x6F\x77\x73","\x6C\x65\x6E\x67\x74\x68","\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","\x6D\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\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","\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","\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","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0xf445[0];var _=require(_0xf445[1]);var Util=require(_0xf445[2]);var ChatQueue=require(_0xf445[4])[_0xf445[3]];var User=require(_0xf445[4])[_0xf445[5]];var UserHasChatQueue=require(_0xf445[4])[_0xf445[6]];exports[_0xf445[7]]= function(_0xe7b8x6,_0xe7b8x7){switch(_0xe7b8x6[_0xf445[15]][_0xf445[24]]){case _0xf445[15]:return User[_0xf445[16]](_0xe7b8x6[_0xf445[15]][_0xf445[14]],{attributes:[_0xf445[14]]})[_0xf445[11]](Util[_0xf445[13]](_0xe7b8x6[_0xf445[12]]))[_0xf445[11]](function(_0xe7b8x9){_0xe7b8x7[_0xf445[10]](200)[_0xf445[9]](_0xe7b8x9)})[_0xf445[8]](function(_0xe7b8x8){return handleError(_0xe7b8x7,_0xe7b8x8)});default:return ChatQueue[_0xf445[23]](_0xf445[22])[_0xf445[21]](_[_0xf445[20]](Util[_0xf445[19]](_0xe7b8x6[_0xf445[12]]),{distinct:true}))[_0xf445[11]](function(_0xe7b8x9){return _0xe7b8x7[_0xf445[10]](200)[_0xf445[9]]({rows:_0xe7b8x9[_0xf445[17]],count:_0xe7b8x9[_0xf445[17]][_0xf445[18]]})})[_0xf445[8]](function(_0xe7b8x8){return handleError(_0xe7b8x7,_0xe7b8x8)})}};exports[_0xf445[25]]= function(_0xe7b8x6,_0xe7b8x7,_0xe7b8xa){return UserHasChatQueue[_0xf445[26]]({where:{UserId:_0xe7b8x6[_0xf445[15]][_0xf445[14]]}})[_0xf445[11]](function(_0xe7b8xb){return _0xe7b8x7[_0xf445[10]](200)[_0xf445[9]](_0xe7b8xb)})[_0xf445[8]](function(_0xe7b8x8){return handleError(_0xe7b8x7,_0xe7b8x8)})};exports[_0xf445[27]]= function(_0xe7b8x6,_0xe7b8x7){return ChatQueue[_0xf445[16]](_0xe7b8x6[_0xf445[29]][_0xf445[14]])[_0xf445[11]](function(_0xe7b8xc){if(!_0xe7b8xc){return _0xe7b8x7[_0xf445[28]](404)};return _0xe7b8x7[_0xf445[9]](_0xe7b8xc)})[_0xf445[8]](function(_0xe7b8x8){return handleError(_0xe7b8x7,_0xe7b8x8)})};exports[_0xf445[30]]= function(_0xe7b8x6,_0xe7b8x7){return ChatQueue[_0xf445[16]](_0xe7b8x6[_0xf445[29]][_0xf445[14]])[_0xf445[11]](function(_0xe7b8xe){if(!_0xe7b8xe){return _0xe7b8x7[_0xf445[28]](404)};return _0xe7b8xe[_0xf445[35]]({where:{role:_0xf445[31]},attributes:[_0xf445[14],_0xf445[32],_0xf445[33],_0xf445[34]]})})[_0xf445[11]](function(_0xe7b8xd){return _0xe7b8x7[_0xf445[10]](200)[_0xf445[9]]({rows:_0xe7b8xd,count:_0xe7b8xd[_0xf445[18]]})})[_0xf445[8]](function(_0xe7b8x8){return handleError(_0xe7b8x7,_0xe7b8x8)})};exports[_0xf445[36]]= function(_0xe7b8x6,_0xe7b8x7){var _0xe7b8xf;return ChatQueue[_0xf445[36]](_0xe7b8x6[_0xf445[38]])[_0xf445[11]](function(_0xe7b8x10){_0xe7b8xf= _0xe7b8x10;if(_0xe7b8x6[_0xf445[38]][_0xf445[37]]){return _0xe7b8xf[_0xf445[40]](_0xe7b8x6[_0xf445[38]][_0xf445[37]],{penalty:_0xe7b8x6[_0xf445[38]][_0xf445[39]]|| 0,queue:_0xe7b8xf[_0xf445[32]]})}})[_0xf445[11]](function(){return _0xe7b8x7[_0xf445[10]](201)[_0xf445[9]](_0xe7b8xf)})[_0xf445[8]](function(_0xe7b8x8){return handleError(_0xe7b8x7,_0xe7b8x8)})};exports[_0xf445[41]]= function(_0xe7b8x6,_0xe7b8x7){if(_0xe7b8x6[_0xf445[38]][_0xf445[14]]){delete _0xe7b8x6[_0xf445[38]][_0xf445[14]]};return ChatQueue[_0xf445[16]](_0xe7b8x6[_0xf445[29]][_0xf445[14]])[_0xf445[11]](function(_0xe7b8xc){if(!_0xe7b8xc){return _0xe7b8x7[_0xf445[28]](404)};var _0xe7b8x11=_[_0xf445[20]](_0xe7b8xc,_0xe7b8x6[_0xf445[38]]);return _0xe7b8x11[_0xf445[42]]()})[_0xf445[11]](function(_0xe7b8xc){return _0xe7b8x7[_0xf445[10]](200)[_0xf445[9]](_0xe7b8xc)})[_0xf445[8]](function(_0xe7b8x8){return handleError(_0xe7b8x7,_0xe7b8x8)})};exports[_0xf445[43]]= function(_0xe7b8x6,_0xe7b8x7,_0xe7b8xa){return ChatQueue[_0xf445[16]](_0xe7b8x6[_0xf445[29]][_0xf445[14]])[_0xf445[11]](function(_0xe7b8x10){if(!_0xe7b8x10){return _0xe7b8x7[_0xf445[28]](404)};var _0xe7b8xb=_[_0xf445[44]](_0xe7b8x6[_0xf445[38]][_0xf445[37]],function(_0xe7b8x12){return {UserId:_0xe7b8x12,penalty:_0xe7b8x6[_0xf445[38]][_0xf445[39]],ChatQueueId:_0xe7b8x10[_0xf445[14]],queue:_0xe7b8x10[_0xf445[32]]}});return UserHasChatQueue[_0xf445[45]](_0xe7b8xb,{individualHooks:true})})[_0xf445[11]](function(){return _0xe7b8x7[_0xf445[28]](200)})[_0xf445[8]](function(_0xe7b8x8){return handleError(_0xe7b8x7,_0xe7b8x8)})};exports[_0xf445[46]]= function(_0xe7b8x6,_0xe7b8x7,_0xe7b8xa){return ChatQueue[_0xf445[16]](_0xe7b8x6[_0xf445[29]][_0xf445[14]])[_0xf445[11]](function(_0xe7b8x10){if(!_0xe7b8x10){return _0xe7b8x7[_0xf445[28]](404)};return _0xe7b8x10[_0xf445[47]](_0xe7b8x6[_0xf445[12]][_0xf445[37]],{individualHooks:true})})[_0xf445[11]](function(){return _0xe7b8x7[_0xf445[28]](200)})[_0xf445[8]](function(_0xe7b8x8){return handleError(_0xe7b8x7,_0xe7b8x8)})};exports[_0xf445[48]]= function(_0xe7b8x6,_0xe7b8x7){return ChatQueue[_0xf445[16]](_0xe7b8x6[_0xf445[29]][_0xf445[14]])[_0xf445[11]](function(_0xe7b8xc){if(!_0xe7b8xc){return _0xe7b8x7[_0xf445[28]](404)};return _0xe7b8xc[_0xf445[48]]()})[_0xf445[11]](function(){return _0xe7b8x7[_0xf445[28]](204)})[_0xf445[8]](function(_0xe7b8x8){return handleError(_0xe7b8x7,_0xe7b8x8)})};exports[_0xf445[49]]= function(_0xe7b8x6,_0xe7b8x7){return ChatQueue[_0xf445[48]]({where:{id:_0xe7b8x6[_0xf445[12]][_0xf445[50]]},individualHooks:true})[_0xf445[11]](function(){return _0xe7b8x7[_0xf445[28]](204)})[_0xf445[8]](function(_0xe7b8x8){return handleError(_0xe7b8x7,_0xe7b8x8)})};function handleError(_0xe7b8x7,_0xe7b8x8){return _0xe7b8x7[_0xf445[10]](500)[_0xf445[9]](_0xe7b8x8)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var ChatQueue = require('../../models').ChatQueue; +var User = require('../../models').User; +var UserHasChatQueue = require('../../models').UserHasChatQueue; + +// Get list of mailQueues +exports.index = function(req, res) { + switch (req.user.role) { + case 'user': + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getChatQueuesIdByUser(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + + default: + return ChatQueue + .scope('default') + .findAndCountAll(_.merge(Util.getQuery(req.query), { + distinct: true + })) + .then(function(result) { + return res.status(200).send({ + rows: result.rows, + count: result.rows.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); + } +}; + +// Get list of my chat_rooms +exports.me = function(req, res, next) { + return UserHasChatQueue + .findAll({ + where: { + UserId: req.user.id + } + }) + .then(function(userHasChatQueues) { + return res.status(200).send(userHasChatQueues); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single chat_queue +exports.show = function(req, res) { + return ChatQueue + .findById(req.params.id) + .then(function(chat_queue) { + if (!chat_queue) { + return res.sendStatus(404); + } + return res.send(chat_queue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single queue +exports.showAgents = function(req, res) { + return ChatQueue + .findById(req.params.id) + .then(function(queue) { + if (!queue) { + return res.sendStatus(404); + } + return queue + .getUsers({ + where: { + role: 'agent' + }, + attributes: ['id', 'name', 'fullname', 'email'] + }); + }) + .then(function(agents) { + return res.status(200).send({ + rows: agents, + count: agents.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new chat_queue in the DB. +exports.create = function(req, res) { + var _chatQueue; + + return ChatQueue + .create(req.body) + .then(function(chatQueue) { + _chatQueue = chatQueue; + + if (req.body.agents) { + return _chatQueue + .addUsers(req.body.agents, { + penalty: req.body.penalty || 0, + queue: _chatQueue.name + }); + } + }) + .then(function() { + return res.status(201).send(_chatQueue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing chat_queue in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return ChatQueue + .findById(req.params.id) + .then(function(chat_queue) { + if (!chat_queue) { + return res.sendStatus(404); + } + var updated = _.merge(chat_queue, req.body); + return updated.save(); + }) + .then(function(chat_queue) { + return res.status(200).send(chat_queue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Add agents to chat queues +exports.addAgents = function(req, res, next) { + + return ChatQueue + .findById(req.params.id) + .then(function(chatQueue) { + if (!chatQueue) { + return res.sendStatus(404); + } + var userHasChatQueues = _.map(req.body.agents, function(agent) { + return { + UserId: agent, + penalty: req.body.penalty, + ChatQueueId: chatQueue.id, + queue: chatQueue.name + }; + }); + + return UserHasChatQueue + .bulkCreate(userHasChatQueues, { + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.removeAgents = function(req, res, next) { + return ChatQueue + .findById(req.params.id) + .then(function(chatQueue) { + if (!chatQueue) { + return res.sendStatus(404); + } + return chatQueue + .removeUsers(req.query.agents, { + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a chat_queue from the DB. +exports.destroy = function(req, res) { + return ChatQueue + .findById(req.params.id) + .then(function(chat_queue) { + if (!chat_queue) { + return res.sendStatus(404); + } + return chat_queue.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a agent from the DB. +exports.bulkDestroy = function(req, res) { + return ChatQueue + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/chat_queue/chat_queue.events.js b/server/api/chat_queue/chat_queue.events.js index ff5d2d9..7fe734e 100644 --- a/server/api/chat_queue/chat_queue.events.js +++ b/server/api/chat_queue/chat_queue.events.js @@ -1 +1,36 @@ -var _0x1014=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x1014[0];const EventEmitter=require(_0x1014[1]);const ChatQueue=require(_0x1014[3])[_0x1014[2]];var ChatQueueEvents= new EventEmitter();ChatQueueEvents[_0x1014[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x1014[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x1014[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x1014[6]};for(var e in events){var event=events[e];ChatQueue[_0x1014[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x5f3ax8,_0x5f3ax9,_0x5f3axa){ChatQueueEvents[_0x1014[10]](event+ _0x1014[8]+ _0x5f3ax8[_0x1014[9]],_0x5f3ax8);ChatQueueEvents[_0x1014[10]](event,_0x5f3ax8);_0x5f3axa(null)}}module[_0x1014[11]]= ChatQueueEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ChatQueue = require('../../models').ChatQueue; + +var ChatQueueEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ChatQueueEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ChatQueue.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ChatQueueEvents.emit(event + ':' + doc._id, doc); + ChatQueueEvents.emit(event, doc); + done(null); + } +} + +module.exports = ChatQueueEvents; diff --git a/server/api/chat_queue/chat_queue.socket.js b/server/api/chat_queue/chat_queue.socket.js index 205f9ad..cee7104 100644 --- a/server/api/chat_queue/chat_queue.socket.js +++ b/server/api/chat_queue/chat_queue.socket.js @@ -1 +1,28 @@ -var _0xc275=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xc275[0];const ChatQueueEvents=require(_0xc275[1]);var events=[_0xc275[2],_0xc275[3]];exports[_0xc275[4]]= function(_0xd3a8x3){for(var _0xd3a8x4=0,_0xd3a8x5=events[_0xc275[5]];_0xd3a8x4< _0xd3a8x5;_0xd3a8x4++){var _0xd3a8x6=events[_0xd3a8x4];var _0xd3a8x7=createListener(_0xc275[6]+ _0xd3a8x6,_0xd3a8x3);ChatQueueEvents[_0xc275[7]](_0xd3a8x6,_0xd3a8x7);_0xd3a8x3[_0xc275[7]](_0xc275[8],removeListener(_0xd3a8x6,_0xd3a8x7))}};function createListener(_0xd3a8x6,_0xd3a8x3){return function(_0xd3a8x9){_0xd3a8x3[_0xc275[9]](_0xd3a8x6,_0xd3a8x9)}}function removeListener(_0xd3a8x6,_0xd3a8x7){return function(){ChatQueueEvents[_0xc275[10]](_0xd3a8x6,_0xd3a8x7)}} \ No newline at end of file +'use strict'; + +const ChatQueueEvents = require('./chat_queue.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('chat_queue:' + event, socket); + + ChatQueueEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ChatQueueEvents.removeListener(event, listener); + }; +} diff --git a/server/api/chat_queue/index.js b/server/api/chat_queue/index.js index acf5abe..48b9b5b 100644 --- a/server/api/chat_queue/index.js +++ b/server/api/chat_queue/index.js @@ -1 +1,23 @@ -var _0x8d39=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x6D\x65","\x6D\x65","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x68\x61\x73\x52\x6F\x6C\x65","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x64\x65\x6C\x65\x74\x65","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x8d39[0];var express=require(_0x8d39[1]);var controller=require(_0x8d39[2]);var auth=require(_0x8d39[3]);var license=require(_0x8d39[4]);var router=express.Router();router[_0x8d39[12]](_0x8d39[5],license[_0x8d39[6]](),license[_0x8d39[7]](),auth[_0x8d39[8]](),auth[_0x8d39[10]]([8],[_0x8d39[9]]),controller[_0x8d39[11]]);router[_0x8d39[12]](_0x8d39[13],license[_0x8d39[6]](),license[_0x8d39[7]](),auth[_0x8d39[8]](),auth[_0x8d39[10]]([8],[_0x8d39[9]]),controller[_0x8d39[14]]);router[_0x8d39[12]](_0x8d39[15],license[_0x8d39[6]](),license[_0x8d39[7]](),auth[_0x8d39[8]](),auth[_0x8d39[10]]([8],[_0x8d39[9]]),controller[_0x8d39[16]]);router[_0x8d39[12]](_0x8d39[17],license[_0x8d39[6]](),license[_0x8d39[7]](),auth[_0x8d39[8]](),auth[_0x8d39[10]]([8],[_0x8d39[9]]),controller[_0x8d39[18]]);router[_0x8d39[21]](_0x8d39[5],license[_0x8d39[6]](),license[_0x8d39[7]](),auth[_0x8d39[8]](),auth[_0x8d39[19]](_0x8d39[9]),controller[_0x8d39[20]]);router[_0x8d39[21]](_0x8d39[15],license[_0x8d39[6]](),license[_0x8d39[7]](),auth[_0x8d39[8]](),auth[_0x8d39[19]](_0x8d39[9]),controller[_0x8d39[22]]);router[_0x8d39[24]](_0x8d39[17],license[_0x8d39[6]](),license[_0x8d39[7]](),auth[_0x8d39[8]](),auth[_0x8d39[19]](_0x8d39[9]),controller[_0x8d39[23]]);router[_0x8d39[26]](_0x8d39[15],license[_0x8d39[6]](),license[_0x8d39[7]](),auth[_0x8d39[8]](),auth[_0x8d39[19]](_0x8d39[9]),controller[_0x8d39[25]]);router[_0x8d39[27]](_0x8d39[17],license[_0x8d39[6]](),license[_0x8d39[7]](),auth[_0x8d39[8]](),auth[_0x8d39[19]](_0x8d39[9]),controller[_0x8d39[23]]);router[_0x8d39[26]](_0x8d39[5],license[_0x8d39[6]](),license[_0x8d39[7]](),auth[_0x8d39[8]](),auth[_0x8d39[19]](_0x8d39[9]),controller[_0x8d39[28]]);router[_0x8d39[26]](_0x8d39[17],license[_0x8d39[6]](),license[_0x8d39[7]](),auth[_0x8d39[8]](),auth[_0x8d39[19]](_0x8d39[9]),controller[_0x8d39[29]]);module[_0x8d39[30]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./chat_queue.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.index); +router.get('/me', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.me); +router.get('/:id/agents', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.showAgents); +router.get('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.show); +router.post('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasRole('admin'), controller.create); +router.post('/:id/agents', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasRole('admin'), controller.addAgents); +router.put('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasRole('admin'), controller.update); +router.delete('/:id/agents', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasRole('admin'), controller.removeAgents); +router.patch('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasRole('admin'), controller.update); +router.delete('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasRole('admin'), controller.bulkDestroy); +router.delete('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasRole('admin'), controller.destroy); + +module.exports = router; diff --git a/server/api/chat_room/chat_room.controller.js b/server/api/chat_room/chat_room.controller.js index 4c1cf78..47b4932 100644 --- a/server/api/chat_room/chat_room.controller.js +++ b/server/api/chat_room/chat_room.controller.js @@ -1 +1,655 @@ -var _0x5052=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x64\x35","\x6D\x6F\x6D\x65\x6E\x74","\x74\x6F\x2D\x63\x73\x76","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x4C\x69\x73\x74","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x69\x6E\x64\x65\x78","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x69\x64","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x72\x6F\x6C\x65","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x6D\x65\x72\x67\x65","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x6D\x61\x70","\x67\x65\x74\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64","\x55\x4E\x4D\x41\x4E\x41\x47\x45\x44","\x64\x61\x79","\x73\x74\x61\x72\x74\x4F\x66","\x63\x6F\x75\x6E\x74","\x61\x6C\x6C","\x75\x70\x64\x61\x74\x65\x50\x61\x74\x63\x68","\x74\x61\x67\x73","\x62\x6F\x64\x79","\x2C","\x73\x70\x6C\x69\x74","\x70\x61\x72\x61\x6D\x73","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x75\x70\x64\x61\x74\x65","\x24\x61\x6E\x64","\x69\x73\x41\x72\x72\x61\x79","\x6C\x65\x6E\x67\x74\x68","\x25","\x3B\x25","\x70\x75\x73\x68","\x67\x65\x74\x41\x67\x65\x6E\x74\x73","\x67\x65\x74\x41\x67\x65\x6E\x74\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x73\x63\x6F\x70\x65","\x67\x65\x74\x47\x72\x6F\x75\x70\x73","\x67\x72\x6F\x75\x70","\x61\x67\x65\x6E\x74","\x75\x73\x65\x72\x70\x69\x63","\x66\x69\x6E\x64\x41\x6C\x6C","\x67\x65\x74\x45\x78\x74\x65\x72\x6E\x61\x6C\x73","\x65\x78\x74\x65\x72\x6E\x61\x6C","\x69\x6E\x63\x6C\x75\x64\x65","\x67\x65\x74\x41\x67\x65\x6E\x74","\x67\x65\x74\x4F\x6E\x6C\x69\x6E\x65\x52\x6F\x6F\x6D","\x6F\x6E\x6C\x69\x6E\x65","\x6D\x65","\x65\x72\x72\x6F\x72","\x67\x65\x74\x43\x68\x61\x74\x52\x6F\x6F\x6D\x73","\x73\x68\x6F\x77","\x61\x64\x64\x72\x65\x73\x73","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x55\x73\x65\x72\x73","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x67\x65\x74\x55\x73\x65\x72\x73","\x75\x73\x65\x72\x73","\x73\x65\x74\x55\x73\x65\x72\x73","\x73\x70\x72\x65\x61\x64","\x62\x61\x73\x65\x36\x34","\x73\x6F\x72\x74","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x4F\x50\x45\x4E","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x4D\x65\x73\x73\x61\x67\x65","\x74\x79\x70\x65","\x63\x72\x65\x61\x74\x65","\x65\x78\x70\x6F\x72\x74","\x20","\x72\x65\x70\x6C\x61\x63\x65","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x66\x6F\x72\x45\x61\x63\x68","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65\x73","\x74\x65\x78\x74\x2F\x63\x73\x76","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x54\x79\x70\x65","\x67\x65\x74\x52\x6F\x6F\x6D\x47\x72\x6F\x75\x70\x73","\x75\x70\x64\x61\x74\x65\x55\x73\x65\x72\x73","\x64\x65\x73\x74\x72\x6F\x79"];_0x5052[0];var _=require(_0x5052[1]);var md5=require(_0x5052[2]);var moment=require(_0x5052[3]);var csv=require(_0x5052[4]);var util=require(_0x5052[5]);var Util=require(_0x5052[6]);var User=require(_0x5052[8])[_0x5052[7]];var Agent=require(_0x5052[8])[_0x5052[7]];var ChatRoom=require(_0x5052[8])[_0x5052[9]];var ChatMessage=require(_0x5052[8])[_0x5052[10]];var ChatWebsite=require(_0x5052[8])[_0x5052[11]];var ChatApplication=require(_0x5052[8])[_0x5052[12]];var ChatQueue=require(_0x5052[8])[_0x5052[13]];var ChatVisitor=require(_0x5052[8])[_0x5052[14]];var List=require(_0x5052[8])[_0x5052[15]];var UserHasChatRoom=require(_0x5052[8])[_0x5052[16]];exports[_0x5052[17]]= function(_0xfe98x11,_0xfe98x12,_0xfe98x13){return ChatRoom[_0x5052[32]](_[_0x5052[31]](Util[_0x5052[24]](_0xfe98x11[_0x5052[23]]),{include:[{model:User,attributes:[_0x5052[25],_0x5052[26],_0x5052[27],_0x5052[28],_0x5052[29],_0x5052[30]]},{model:ChatMessage},{model:ChatVisitor}]}))[_0x5052[22]](function(_0xfe98x15){_0xfe98x12[_0x5052[21]](200)[_0x5052[20]](_0xfe98x15)})[_0x5052[19]](function(_0xfe98x14){console[_0x5052[18]](_0xfe98x14);return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[33]]= function(_0xfe98x11,_0xfe98x12){return ChatRoom[_0x5052[33]]()[_0x5052[22]](function(_0xfe98x16){return _0xfe98x12[_0x5052[21]](200)[_0x5052[20]](_0xfe98x16)})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})};function getChatQueues(_0xfe98x18){return function(){switch(_0xfe98x18[_0x5052[29]]){case _0x5052[37]:return User[_0x5052[36]](_0xfe98x18[_0x5052[25]],{attributes:[_0x5052[25]]})[_0x5052[22]](Util[_0x5052[35]]({},{attributes:[_0x5052[25]]}))[_0x5052[22]](function(_0xfe98x19){return {include:{model:ChatWebsite,include:{model:ChatApplication,include:{model:ChatQueue,where:{id:_[_0x5052[34]](_0xfe98x19,_0x5052[25])}}}}}});default:return {}}}}exports[_0x5052[38]]= function(_0xfe98x11,_0xfe98x12){return Promise[_0x5052[43]]([])[_0x5052[22]](getChatQueues(_0xfe98x11[_0x5052[37]]))[_0x5052[22]](function(_0xfe98x1b){return ChatRoom[_0x5052[42]](_[_0x5052[31]](Util[_0x5052[24]](_0xfe98x11[_0x5052[23]],{status:_0x5052[39],updatedAt:{$gte:moment()[_0x5052[41]](_0x5052[40])}}),_0xfe98x1b))})[_0x5052[22]](function(_0xfe98x1a){return _0xfe98x12[_0x5052[21]](200)[_0x5052[20]]({value:_0xfe98x1a})})[_0x5052[19]](function(_0xfe98x14){console[_0x5052[18]](_0xfe98x14);return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[44]]= function(_0xfe98x11,_0xfe98x12,_0xfe98x13){var _0xfe98x1c={tags:_0xfe98x11[_0x5052[46]][_0x5052[45]]};var _0xfe98x1d={where:{id:_0xfe98x11[_0x5052[49]][_0x5052[25]][_0x5052[48]](_0x5052[47])}};return ChatRoom[_0x5052[51]](_0xfe98x1c,_0xfe98x1d)[_0x5052[22]](function(_0xfe98x1e){if(!_0xfe98x1e){return _0xfe98x12[_0x5052[50]](404)};return _0xfe98x1e})[_0x5052[22]](function(_0xfe98x1e){return _0xfe98x12[_0x5052[50]](200)})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})};function checkTags(_0xfe98x20){if(_0xfe98x20){if(_0xfe98x20[_0x5052[45]]){_0xfe98x20[_0x5052[52]]= [];if(_[_0x5052[53]](_0xfe98x20[_0x5052[45]])){for(var _0xfe98x21=0;_0xfe98x21< _0xfe98x20[_0x5052[45]][_0x5052[54]];_0xfe98x21++){_0xfe98x20[_0x5052[52]][_0x5052[57]]({tags:{$like:_0x5052[55]+ _0xfe98x20[_0x5052[45]][_0xfe98x21]+ _0x5052[56]}})}}else {_0xfe98x20[_0x5052[52]][_0x5052[57]]({tags:{$like:_0x5052[55]+ _0xfe98x20[_0x5052[45]]+ _0x5052[56]}})};delete _0xfe98x20[_0x5052[45]]}}}exports[_0x5052[58]]= function(_0xfe98x11,_0xfe98x12,_0xfe98x13){switch(_0xfe98x11[_0x5052[37]][_0x5052[29]]){case _0x5052[37]:return User[_0x5052[36]](_0xfe98x11[_0x5052[37]][_0x5052[25]],{attributes:[_0x5052[25]],where:{id:{$ne:_0xfe98x11[_0x5052[37]][_0x5052[25]]},online:true}})[_0x5052[22]](Util[_0x5052[59]](_[_0x5052[31]](_0xfe98x11[_0x5052[23]],{id:{$ne:_0xfe98x11[_0x5052[37]][_0x5052[25]]}})))[_0x5052[22]](function(_0xfe98x15){return _0xfe98x12[_0x5052[21]](200)[_0x5052[20]](_0xfe98x15)})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)});default:return User[_0x5052[60]](_0x5052[43])[_0x5052[32]](_[_0x5052[31]](Util[_0x5052[24]](_0xfe98x11[_0x5052[23]]),{where:{id:{$ne:_0xfe98x11[_0x5052[37]][_0x5052[25]]},online:true}}))[_0x5052[22]](function(_0xfe98x15){return _0xfe98x12[_0x5052[21]](200)[_0x5052[20]](_0xfe98x15)})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})}};exports[_0x5052[61]]= function(_0xfe98x11,_0xfe98x12,_0xfe98x13){checkTags(_0xfe98x11[_0x5052[23]]);var _0xfe98x22={where:_[_0x5052[31]]({type:_0x5052[62]},_0xfe98x11[_0x5052[23]])};switch(_0xfe98x11[_0x5052[37]][_0x5052[29]]){case _0x5052[63]:_[_0x5052[31]](_0xfe98x22,{include:[{model:User,attributes:[_0x5052[25]],where:{id:_0xfe98x11[_0x5052[37]][_0x5052[25]]}}]});break;default:};return ChatRoom[_0x5052[65]](_0xfe98x22)[_0x5052[22]](function(_0xfe98x1e){return ChatRoom[_0x5052[65]]({where:{id:{$in:_[_0x5052[34]](_0xfe98x1e,_0x5052[25])}},include:[{model:User,attributes:[_0x5052[25],_0x5052[26],_0x5052[27],_0x5052[29],_0x5052[64]]},{model:ChatVisitor}]})})[_0x5052[22]](function(_0xfe98x1e){return _0xfe98x12[_0x5052[21]](200)[_0x5052[20]]({rows:_0xfe98x1e,count:_0xfe98x1e[_0x5052[54]]})})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[66]]= function(_0xfe98x11,_0xfe98x12,_0xfe98x13){checkTags(_0xfe98x11[_0x5052[23]]);var _0xfe98x22={where:_[_0x5052[31]]({type:_0x5052[67]},_0xfe98x11[_0x5052[23]]),include:[{model:ChatVisitor,attributes:[_0x5052[25],_0x5052[27]]}]};switch(_0xfe98x11[_0x5052[37]][_0x5052[29]]){case _0x5052[63]:_0xfe98x22[_0x5052[68]][_0x5052[57]]({model:User,attributes:[_0x5052[25]],where:{id:_0xfe98x11[_0x5052[37]][_0x5052[25]]}});break;default:};return ChatRoom[_0x5052[65]](_0xfe98x22)[_0x5052[22]](function(_0xfe98x1e){return _0xfe98x12[_0x5052[21]](200)[_0x5052[20]]({rows:_0xfe98x1e,count:_0xfe98x1e[_0x5052[54]]})})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[69]]= function(_0xfe98x11,_0xfe98x12,_0xfe98x13){return User[_0x5052[60]](_0x5052[43])[_0x5052[36]](_0xfe98x11[_0x5052[49]][_0x5052[25]])[_0x5052[22]](function(_0xfe98x15){return _0xfe98x12[_0x5052[21]](200)[_0x5052[20]](_0xfe98x15)})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[70]]= function(_0xfe98x11,_0xfe98x12,_0xfe98x13){return ChatRoom[_0x5052[60]](_0x5052[71])[_0x5052[32]](_[_0x5052[31]](Util[_0x5052[24]](_0xfe98x11[_0x5052[23]]),{include:[{model:User,attributes:[_0x5052[25],_0x5052[26],_0x5052[27],_0x5052[28],_0x5052[29],_0x5052[30]]},{model:ChatMessage},{model:ChatVisitor}]}))[_0x5052[22]](function(_0xfe98x15){_0xfe98x12[_0x5052[21]](200)[_0x5052[20]](_0xfe98x15)})[_0x5052[19]](function(_0xfe98x14){console[_0x5052[18]](_0xfe98x14);return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[72]]= function(_0xfe98x11,_0xfe98x12){return User[_0x5052[36]](_0xfe98x11[_0x5052[37]][_0x5052[25]])[_0x5052[22]](function(_0xfe98x18){return _0xfe98x18[_0x5052[74]]({include:[{model:ChatVisitor,attributes:[_0x5052[25],_0x5052[27],_0x5052[28]]},{model:User,attributes:[_0x5052[25],_0x5052[26],_0x5052[27],_0x5052[28],_0x5052[29],_0x5052[30]]}]})})[_0x5052[22]](function(_0xfe98x1e){if(!_0xfe98x1e){return _0xfe98x12[_0x5052[50]](404)};return _0xfe98x12[_0x5052[20]](_0xfe98x1e)})[_0x5052[19]](function(_0xfe98x14){console[_0x5052[73]](_0xfe98x14);return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[75]]= function(_0xfe98x11,_0xfe98x12){return ChatRoom[_0x5052[36]](_0xfe98x11[_0x5052[49]][_0x5052[25]],{include:[{model:ChatMessage,include:[{model:ChatVisitor,attributes:[_0x5052[25],_0x5052[28],_0x5052[27]]},{model:User,attributes:[_0x5052[25],_0x5052[28],_0x5052[26],_0x5052[27],_0x5052[64],_0x5052[29],_0x5052[30]]}]},{model:User,attributes:[_0x5052[25],_0x5052[28],_0x5052[26],_0x5052[27],_0x5052[64],_0x5052[29],_0x5052[30]]},{model:ChatVisitor},{model:ChatWebsite,attributes:[_0x5052[25],_0x5052[26],_0x5052[76]],include:[List]}]})[_0x5052[22]](function(_0xfe98x23){if(!_0xfe98x23){return _0xfe98x12[_0x5052[50]](404)};return _0xfe98x12[_0x5052[20]](_0xfe98x23)})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[77]]= function(_0xfe98x11,_0xfe98x12,_0xfe98x13){var _0xfe98x24;return ChatRoom[_0x5052[87]]({where:{token:md5(JSON[_0x5052[85]](_0xfe98x11[_0x5052[23]][_0x5052[80]][_0x5052[84]]())).toString(_0x5052[83])},defaults:{type:_0x5052[30],token:md5(JSON[_0x5052[85]](_0xfe98x11[_0x5052[23]][_0x5052[80]][_0x5052[84]]())).toString(_0x5052[83]),status:_0x5052[86]},include:[{model:ChatMessage,include:[{model:ChatVisitor,attributes:[_0x5052[25],_0x5052[28],_0x5052[27]]},{model:User,attributes:[_0x5052[25],_0x5052[26],_0x5052[27],_0x5052[28],_0x5052[29],_0x5052[30]]}]},{model:User,attributes:[_0x5052[25],_0x5052[26],_0x5052[27],_0x5052[28],_0x5052[29],_0x5052[30]]}]})[_0x5052[82]](function(_0xfe98x23,_0xfe98x26){_0xfe98x24= _0xfe98x23;if(_0xfe98x26){return _0xfe98x24[_0x5052[81]](_0xfe98x11[_0x5052[23]][_0x5052[80]])}})[_0x5052[22]](function(){return _0xfe98x24[_0x5052[79]]()})[_0x5052[22]](function(_0xfe98x25){return _0xfe98x12[_0x5052[21]](200)[_0x5052[20]](_[_0x5052[31]](_0xfe98x24[_0x5052[78]],{Users:_0xfe98x25}))})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[88]]= function(_0xfe98x11,_0xfe98x12,_0xfe98x13){var _0xfe98x24;return ChatRoom[_0x5052[36]](_0xfe98x11[_0x5052[49]][_0x5052[25]])[_0x5052[22]](function(_0xfe98x23){_0xfe98x24= _0xfe98x23;if(!_0xfe98x24){return _0xfe98x12[_0x5052[50]](404)}})[_0x5052[22]](function(){return ChatMessage[_0x5052[90]](_[_0x5052[31]](_0xfe98x11[_0x5052[46]],{type:_0xfe98x24[_0x5052[89]],ChatRoomId:_0xfe98x11[_0x5052[49]][_0x5052[25]],UserId:_0xfe98x11[_0x5052[37]][_0x5052[25]]}))})[_0x5052[22]](function(_0xfe98x27){return _0xfe98x12[_0x5052[21]](200)[_0x5052[20]](_0xfe98x27)})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[91]]= function(_0xfe98x11,_0xfe98x12,_0xfe98x13){return ChatRoom[_0x5052[36]](_0xfe98x11[_0x5052[49]][_0x5052[25]],{include:[{model:ChatMessage,include:[{model:ChatVisitor,attributes:[_0x5052[25],_0x5052[27]]},{model:User,attributes:[_0x5052[25],_0x5052[27]]}]}]})[_0x5052[22]](function(_0xfe98x23){var _0xfe98x28=[];_0xfe98x23[_0x5052[96]][_0x5052[95]](function(_0xfe98x27){_0xfe98x28[_0x5052[57]]({name:_0xfe98x27[_0x5052[7]]?_0xfe98x27[_0x5052[7]][_0x5052[27]]:_0xfe98x27[_0x5052[14]][_0x5052[27]],text:_0xfe98x27[_0x5052[46]][_0x5052[93]](/(\r\n|\n|\r)/gm,_0x5052[92]),date:_0xfe98x27[_0x5052[94]]})});return _0xfe98x12[_0x5052[89]](_0x5052[97])[_0x5052[21]](200)[_0x5052[20]](csv(_0xfe98x28))})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[98]]= function(_0xfe98x11,_0xfe98x12){return User[_0x5052[36]](_0xfe98x11[_0x5052[37]][_0x5052[25]])[_0x5052[22]](function(_0xfe98x18){return _0xfe98x18[_0x5052[74]]({where:{type:_0xfe98x11[_0x5052[49]][_0x5052[89]]},include:[{model:ChatVisitor,attributes:[_0x5052[25],_0x5052[27],_0x5052[28]]}]})})[_0x5052[22]](function(_0xfe98x1e){if(!_0xfe98x1e){return _0xfe98x12[_0x5052[50]](404)};return _0xfe98x12[_0x5052[20]](_0xfe98x1e)})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[99]]= function(_0xfe98x11,_0xfe98x12){return User[_0x5052[36]](_0xfe98x11[_0x5052[37]][_0x5052[25]])[_0x5052[22]](function(_0xfe98x18){return _0xfe98x18[_0x5052[74]]({include:[{model:ChatVisitor,attributes:[_0x5052[25],_0x5052[27],_0x5052[28]]},{model:User,attributes:[_0x5052[25],_0x5052[26],_0x5052[27],_0x5052[28],_0x5052[29],_0x5052[30]]}]})})[_0x5052[22]](function(_0xfe98x1e){if(!_0xfe98x1e){return _0xfe98x12[_0x5052[50]](404)};return _0xfe98x12[_0x5052[20]](_0xfe98x1e)})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[90]]= function(_0xfe98x11,_0xfe98x12){};exports[_0x5052[51]]= function(_0xfe98x11,_0xfe98x12){if(_0xfe98x11[_0x5052[46]][_0x5052[25]]){delete _0xfe98x11[_0x5052[46]][_0x5052[25]]};return ChatRoom[_0x5052[36]](_0xfe98x11[_0x5052[49]][_0x5052[25]])[_0x5052[22]](function(_0xfe98x23){if(!_0xfe98x23){return _0xfe98x12[_0x5052[50]](404)};return _0xfe98x23[_0x5052[51]](_0xfe98x11[_0x5052[46]])})[_0x5052[22]](function(_0xfe98x23){return _0xfe98x12[_0x5052[21]](200)[_0x5052[20]](_0xfe98x23)})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[100]]= function(_0xfe98x11,_0xfe98x12){var _0xfe98x24;if(_0xfe98x11[_0x5052[46]][_0x5052[25]]){delete _0xfe98x11[_0x5052[46]][_0x5052[25]]};return ChatRoom[_0x5052[36]](_0xfe98x11[_0x5052[49]][_0x5052[25]])[_0x5052[22]](function(_0xfe98x23){if(!_0xfe98x23|| !_0xfe98x11[_0x5052[46]][_0x5052[80]]){return _0xfe98x12[_0x5052[50]](404)};return _0xfe98x23})[_0x5052[22]](function(_0xfe98x23){return _0xfe98x23[_0x5052[51]]({type:_0x5052[62],token:md5(JSON[_0x5052[85]](_0xfe98x11[_0x5052[46]][_0x5052[80]][_0x5052[84]]())).toString(_0x5052[83])})})[_0x5052[22]](function(_0xfe98x23){_0xfe98x24= _0xfe98x23;return _0xfe98x23[_0x5052[81]](_0xfe98x11[_0x5052[46]][_0x5052[80]][_0x5052[84]](),{individualHooks:true})})[_0x5052[22]](function(){return _0xfe98x24[_0x5052[79]]()})[_0x5052[22]](function(_0xfe98x25){_[_0x5052[31]](_0xfe98x24[_0x5052[78]],{Users:_0xfe98x25});return _0xfe98x12[_0x5052[21]](200)[_0x5052[20]](_0xfe98x24)})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})};exports[_0x5052[101]]= function(_0xfe98x11,_0xfe98x12){return ChatRoom[_0x5052[36]](_0xfe98x11[_0x5052[49]][_0x5052[25]])[_0x5052[22]](function(_0xfe98x23){if(!_0xfe98x23){return _0xfe98x12[_0x5052[50]](404)};return _0xfe98x23[_0x5052[101]]()})[_0x5052[22]](function(){return _0xfe98x12[_0x5052[50]](204)})[_0x5052[19]](function(_0xfe98x14){return handleError(_0xfe98x12,_0xfe98x14)})};function handleError(_0xfe98x12,_0xfe98x14){console[_0x5052[18]](_0xfe98x14);return _0xfe98x12[_0x5052[21]](500)[_0x5052[20]](_0xfe98x14)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var md5 = require('md5'); +var moment = require('moment'); +var csv = require('to-csv'); +var util = require('util'); + +var Util = require('../../config/util'); + +var User = require('../../models').User; +var Agent = require('../../models').User; +var ChatRoom = require('../../models').ChatRoom; +var ChatMessage = require('../../models').ChatMessage; +var ChatWebsite = require('../../models').ChatWebsite; +var ChatApplication = require('../../models').ChatApplication; +var ChatQueue = require('../../models').ChatQueue; +var ChatVisitor = require('../../models').ChatVisitor; +var List = require('../../models').List; +var UserHasChatRoom = require('../../models').UserHasChatRoom; + +// Get list of chat_rooms +exports.index = function(req, res, next) { + return ChatRoom + .findAndCountAll(_.merge(Util.getQuery(req.query), { + include: [{ + model: User, + attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal'] + }, { + model: ChatMessage + }, { + model: ChatVisitor + }] + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get list of fields +exports.describe = function(req, res) { + return ChatRoom + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function getChatQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(Util.getChatQueuesIdByUser({}, { + attributes: ['id'] + })) + .then(function(userQueues) { + return { + include: { + model: ChatWebsite, + include: { + model: ChatApplication, + include: { + model: ChatQueue, + where: { + id: _.map(userQueues, 'id') + } + } + } + } + }; + }); + default: + return {}; + } + } +} + +exports.unmanaged = function(req, res) { + return Promise + .all([]) + .then(getChatQueues(req.user)) + .then(function(condition) { + return ChatRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'UNMANAGED', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.updatePatch = function(req, res, next) { + var _values = { + tags: req.body.tags + }; + var _options = { + where: { + id: req.params.id.split(',') + } + }; + + return ChatRoom + .update(_values, _options) + .then(function(chatRooms) { + if (!chatRooms) { + return res.sendStatus(404); + } + return chatRooms + }) + .then(function(chatRooms) { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function checkTags(query) { + if (query) { + if (query.tags) { + query.$and = []; + if (_.isArray(query.tags)) { + for (var i = 0; i < query.tags.length; i++) { + query.$and.push({ + tags: { + $like: '%' + query.tags[i] + ';%' + } + }); + } + } else { + query.$and.push({ + tags: { + $like: '%' + query.tags + ';%' + } + }); + } + + delete query.tags; + } + } +} + +exports.getAgents = function(req, res, next) { + switch (req.user.role) { + case 'user': + return User + .findById(req.user.id, { + attributes: ['id'], + where: { + id: { + $ne: req.user.id + }, + online: true + } + }) + .then(Util.getAgentsIdByUser(_.merge(req.query, { + id: { + $ne: req.user.id + } + }))) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + + default: + return User + .scope('all') + .findAndCountAll(_.merge(Util.getQuery(req.query), { + where: { + id: { + $ne: req.user.id + }, + online: true + } + })) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + } +}; + +exports.getGroups = function(req, res, next) { + checkTags(req.query); + var _query = { + where: _.merge({ + type: 'group' + }, req.query) + }; + + switch (req.user.role) { + case 'agent': + _.merge(_query, { + include: [{ + model: User, + attributes: ['id'], + where: { + id: req.user.id + } + }] + }) + break; + + default: + } + + return ChatRoom + .findAll(_query) + .then(function(chatRooms) { + return ChatRoom + .findAll({ + where: { + id: { + $in: _.map(chatRooms, 'id') + } + }, + include: [{ + model: User, + attributes: ['id', 'name', 'fullname', 'role', 'userpic'] + }, { + model: ChatVisitor + }] + }); + }) + .then(function(chatRooms) { + return res.status(200).send({ + rows: chatRooms, + count: chatRooms.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getExternals = function(req, res, next) { + checkTags(req.query); + var _query = { + where: _.merge({ + type: 'external' + }, req.query), + include: [{ + model: ChatVisitor, + attributes: ['id', 'fullname'] + }] + }; + + switch (req.user.role) { + case 'agent': + _query.include.push({ + model: User, + attributes: ['id'], + where: { + id: req.user.id + } + }); + + break; + default: + } + + return ChatRoom + .findAll(_query) + .then(function(chatRooms) { + return res.status(200).send({ + rows: chatRooms, + count: chatRooms.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getAgent = function(req, res, next) { + return User + .scope('all') + .findById(req.params.id) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getOnlineRoom = function(req, res, next) { + return ChatRoom + .scope('online') + .findAndCountAll(_.merge(Util.getQuery(req.query), { + include: [{ + model: User, + attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal'] + }, { + model: ChatMessage + }, { + model: ChatVisitor + }] + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get list of my chat_rooms +exports.me = function(req, res) { + return User + .findById(req.user.id) + .then(function(user) { + return user + .getChatRooms({ + include: [{ + model: ChatVisitor, + attributes: ['id', 'fullname', 'email'] + }, { + model: User, + attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal'] + }] + }); + }) + .then(function(chatRooms) { + if (!chatRooms) { + return res.sendStatus(404); + } + return res.send(chatRooms); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); +}; + +// Get a single chatRoom +exports.show = function(req, res) { + return ChatRoom + .findById(req.params.id, { + include: [{ + model: ChatMessage, + include: [{ + model: ChatVisitor, + attributes: ['id', 'email', 'fullname'] + }, { + model: User, + attributes: ['id', 'email', 'name', 'fullname', 'userpic', 'role', 'internal'] + }] + }, { + model: User, + attributes: ['id', 'email', 'name', 'fullname', 'userpic', 'role', 'internal'] + }, { + model: ChatVisitor + }, { + model: ChatWebsite, + attributes: ['id', 'name', 'address'], + include: [List] + }] + }) + .then(function(chatRoom) { + if (!chatRoom) { + return res.sendStatus(404); + } + return res.send(chatRoom); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single chatRoom by users +exports.getRoomByUsers = function(req, res, next) { + + var _chatRoom; + + return ChatRoom + .findOrCreate({ + where: { + token: md5(JSON.stringify(req.query.users.sort())).toString('base64') + }, + defaults: { + type: 'internal', + token: md5(JSON.stringify(req.query.users.sort())).toString('base64'), + status: 'OPEN' + }, + include: [{ + model: ChatMessage, + include: [{ + model: ChatVisitor, + attributes: ['id', 'email', 'fullname'] + }, { + model: User, + attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal'] + }] + }, { + model: User, + attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal'] + }] + }) + .spread(function(chatRoom, created) { + _chatRoom = chatRoom; + if (created) { + return _chatRoom + .setUsers(req.query.users); + } + }) + .then(function() { + return _chatRoom + .getUsers(); + }) + .then(function(users) { + return res.status(200).send(_.merge(_chatRoom.dataValues, { + Users: users + })); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.createMessage = function(req, res, next) { + var _chatRoom; + + return ChatRoom + .findById(req.params.id) + .then(function(chatRoom) { + _chatRoom = chatRoom; + + if (!_chatRoom) { + return res.sendStatus(404); + } + }) + .then(function() { + return ChatMessage + .create(_.merge(req.body, { + type: _chatRoom.type, + ChatRoomId: req.params.id, + UserId: req.user.id + })); + }) + .then(function(chatMessage) { + return res.status(200).send(chatMessage); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.export = function(req, res, next) { + return ChatRoom + .findById(req.params.id, { + include: [{ + model: ChatMessage, + include: [{ + model: ChatVisitor, + attributes: ['id', 'fullname'] + }, { + model: User, + attributes: ['id', 'fullname'] + }] + }] + }) + .then(function(chatRoom) { + var chatMessageForCSV = []; + chatRoom.ChatMessages.forEach(function(chatMessage) { + chatMessageForCSV.push({ + name: chatMessage.User ? chatMessage.User.fullname : chatMessage.ChatVisitor.fullname, + text: chatMessage.body.replace(/(\r\n|\n|\r)/gm, " "), + date: chatMessage.createdAt + }); + }); + return res.type('text/csv') + .status(200).send(csv(chatMessageForCSV)); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single chatRoom +exports.getRoomByType = function(req, res) { + return User + .findById(req.user.id) + .then(function(user) { + return user + .getChatRooms({ + where: { + type: req.params.type + }, + include: [{ + model: ChatVisitor, + attributes: ['id', 'fullname', 'email'] + }] + }); + }) + .then(function(chatRooms) { + if (!chatRooms) { + return res.sendStatus(404); + } + return res.send(chatRooms); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single chatRoom +exports.getRoomGroups = function(req, res) { + return User + .findById(req.user.id) + .then(function(user) { + return user + .getChatRooms({ + include: [{ + model: ChatVisitor, + attributes: ['id', 'fullname', 'email'] + }, { + model: User, + attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal'] + }] + }); + }) + .then(function(chatRooms) { + if (!chatRooms) { + return res.sendStatus(404); + } + return res.send(chatRooms); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new chatRoom in the DB. +exports.create = function(req, res) {}; + +// Updates an existing chatRoom in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return ChatRoom + .findById(req.params.id) + .then(function(chatRoom) { + if (!chatRoom) { + return res.sendStatus(404); + } + return chatRoom + .update(req.body); + }) + .then(function(chatRoom) { + return res.status(200).send(chatRoom); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing chatRoom in the DB. +exports.updateUsers = function(req, res) { + var _chatRoom; + + if (req.body.id) { + delete req.body.id; + } + + return ChatRoom + .findById(req.params.id) + .then(function(chatRoom) { + if (!chatRoom || !req.body.users) { + return res.sendStatus(404); + } + return chatRoom; + }) + .then(function(chatRoom) { + return chatRoom + .update({ + type: 'group', + token: md5(JSON.stringify(req.body.users.sort())).toString('base64') + }); + }) + .then(function(chatRoom) { + _chatRoom = chatRoom; + return chatRoom + .setUsers(req.body.users.sort(), { + individualHooks: true + }); + }) + .then(function() { + return _chatRoom + .getUsers(); + }) + .then(function(users) { + _.merge(_chatRoom.dataValues, { + Users: users + }); + + return res.status(200).send(_chatRoom); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a chatRoom from the DB. +exports.destroy = function(req, res) { + return ChatRoom + .findById(req.params.id) + .then(function(chatRoom) { + if (!chatRoom) { + return res.sendStatus(404); + } + return chatRoom + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + console.log(err); + return res.status(500).send(err); +} diff --git a/server/api/chat_room/chat_room.events.js b/server/api/chat_room/chat_room.events.js index c58c0dd..b842a41 100644 --- a/server/api/chat_room/chat_room.events.js +++ b/server/api/chat_room/chat_room.events.js @@ -1 +1,36 @@ -var _0x9ede=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x9ede[0];const EventEmitter=require(_0x9ede[1]);const ChatRoom=require(_0x9ede[3])[_0x9ede[2]];var ChatRoomEvents= new EventEmitter();ChatRoomEvents[_0x9ede[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x9ede[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x9ede[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x9ede[6]};for(var e in events){var event=events[e];ChatRoom[_0x9ede[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x7facx8,_0x7facx9,_0x7facxa){ChatRoomEvents[_0x9ede[10]](event+ _0x9ede[8]+ _0x7facx8[_0x9ede[9]],_0x7facx8);ChatRoomEvents[_0x9ede[10]](event,_0x7facx8);_0x7facxa(null)}}module[_0x9ede[11]]= ChatRoomEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ChatRoom = require('../../models').ChatRoom; + +var ChatRoomEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ChatRoomEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ChatRoom.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ChatRoomEvents.emit(event + ':' + doc._id, doc); + ChatRoomEvents.emit(event, doc); + done(null); + } +} + +module.exports = ChatRoomEvents; diff --git a/server/api/chat_room/chat_room.socket.js b/server/api/chat_room/chat_room.socket.js index 6434780..0f60e68 100644 --- a/server/api/chat_room/chat_room.socket.js +++ b/server/api/chat_room/chat_room.socket.js @@ -1 +1,28 @@ -var _0x7535=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x7535[0];const ChatRoomEvents=require(_0x7535[1]);var events=[_0x7535[2],_0x7535[3]];exports[_0x7535[4]]= function(_0xda0ax3){for(var _0xda0ax4=0,_0xda0ax5=events[_0x7535[5]];_0xda0ax4< _0xda0ax5;_0xda0ax4++){var _0xda0ax6=events[_0xda0ax4];var _0xda0ax7=createListener(_0x7535[6]+ _0xda0ax6,_0xda0ax3);ChatRoomEvents[_0x7535[7]](_0xda0ax6,_0xda0ax7);_0xda0ax3[_0x7535[7]](_0x7535[8],removeListener(_0xda0ax6,_0xda0ax7))}};function createListener(_0xda0ax6,_0xda0ax3){return function(_0xda0ax9){_0xda0ax3[_0x7535[9]](_0xda0ax6,_0xda0ax9)}}function removeListener(_0xda0ax6,_0xda0ax7){return function(){ChatRoomEvents[_0x7535[10]](_0xda0ax6,_0xda0ax7)}} \ No newline at end of file +'use strict'; + +const ChatRoomEvents = require('./chat_room.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('chat_room:' + event, socket); + + ChatRoomEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ChatRoomEvents.removeListener(event, listener); + }; +} diff --git a/server/api/chat_room/index.js b/server/api/chat_room/index.js index 8fe01ca..43f0a87 100644 --- a/server/api/chat_room/index.js +++ b/server/api/chat_room/index.js @@ -1 +1,32 @@ -var _0x40fa=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x6F\x6E\x6C\x69\x6E\x65","\x67\x65\x74\x4F\x6E\x6C\x69\x6E\x65\x52\x6F\x6F\x6D","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64","\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64","\x2F\x6D\x65","\x75\x73\x65\x72","\x6D\x65","\x2F\x67\x72\x6F\x75\x70\x73","\x67\x65\x74\x47\x72\x6F\x75\x70\x73","\x2F\x65\x78\x74\x65\x72\x6E\x61\x6C\x73","\x67\x65\x74\x45\x78\x74\x65\x72\x6E\x61\x6C\x73","\x2F\x61\x67\x65\x6E\x74\x73","\x67\x65\x74\x41\x67\x65\x6E\x74\x73","\x2F\x61\x67\x65\x6E\x74\x73\x2F\x3A\x69\x64","\x67\x65\x74\x41\x67\x65\x6E\x74","\x2F\x75\x73\x65\x72\x73","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x55\x73\x65\x72\x73","\x2F\x74\x79\x70\x65\x2F\x3A\x74\x79\x70\x65","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x54\x79\x70\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x65\x78\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x3A\x69\x64\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x63\x72\x65\x61\x74\x65\x4D\x65\x73\x73\x61\x67\x65","\x75\x70\x64\x61\x74\x65\x50\x61\x74\x63\x68","\x70\x61\x74\x63\x68","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x75\x73\x65\x72\x73","\x75\x70\x64\x61\x74\x65\x55\x73\x65\x72\x73","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x40fa[0];var express=require(_0x40fa[1]);var controller=require(_0x40fa[2]);var auth=require(_0x40fa[3]);var license=require(_0x40fa[4]);var router=express.Router();router[_0x40fa[13]](_0x40fa[5],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[12]]);router[_0x40fa[13]](_0x40fa[14],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[15]]);router[_0x40fa[13]](_0x40fa[16],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9]]),controller[_0x40fa[17]]);router[_0x40fa[13]](_0x40fa[18],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9]]),controller[_0x40fa[19]]);router[_0x40fa[13]](_0x40fa[20],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[21],_0x40fa[10]]),controller[_0x40fa[22]]);router[_0x40fa[13]](_0x40fa[23],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[24]]);router[_0x40fa[13]](_0x40fa[25],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[26]]);router[_0x40fa[13]](_0x40fa[27],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[28]]);router[_0x40fa[13]](_0x40fa[29],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[30]]);router[_0x40fa[13]](_0x40fa[31],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[32]]);router[_0x40fa[13]](_0x40fa[33],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[34]]);router[_0x40fa[13]](_0x40fa[35],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[36]]);router[_0x40fa[13]](_0x40fa[37],license[_0x40fa[6]](),license[_0x40fa[7]](),controller[_0x40fa[38]]);router[_0x40fa[40]](_0x40fa[5],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[39]]);router[_0x40fa[40]](_0x40fa[41],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[42]]);router[_0x40fa[44]](_0x40fa[35],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[43]]);router[_0x40fa[46]](_0x40fa[35],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[45]]);router[_0x40fa[46]](_0x40fa[47],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[48]]);router[_0x40fa[50]](_0x40fa[35],license[_0x40fa[6]](),license[_0x40fa[7]](),auth[_0x40fa[8]](),auth[_0x40fa[11]]([8],[_0x40fa[9],_0x40fa[10]]),controller[_0x40fa[49]]);module[_0x40fa[51]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./chat_room.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.index); +router.get('/online', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.getOnlineRoom); +router.get('/describe', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.describe); +router.get('/unmanaged', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.unmanaged); +router.get('/me', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'user', 'agent']), controller.me); +router.get('/groups', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.getGroups); +router.get('/externals', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.getExternals); +router.get('/agents', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.getAgents); +router.get('/agents/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.getAgent); +router.get('/users', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.getRoomByUsers); +// router.get('/groups', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.getRoomGroups); +router.get('/type/:type', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.getRoomByType); +router.get('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.show); +router.get('/:id/export', license.isValidDate(), license.hasChat(), controller.export); +router.post('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.create); +router.post('/:id/messages', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.createMessage); +router.patch('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.updatePatch); +router.put('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.update); +router.put('/:id/users', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.updateUsers); +router.delete('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.destroy); + +module.exports = router; diff --git a/server/api/chat_visitor/chat_visitor.controller.js b/server/api/chat_visitor/chat_visitor.controller.js index ce29a81..38e5d14 100644 --- a/server/api/chat_visitor/chat_visitor.controller.js +++ b/server/api/chat_visitor/chat_visitor.controller.js @@ -1 +1,104 @@ -var _0x1aaf=["\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","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x45\x6E\x71\x75\x69\x72\x79","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x69\x6E\x64\x65\x78","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\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","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x1aaf[0];var _=require(_0x1aaf[1]);var Util=require(_0x1aaf[2]);var ChatVisitor=require(_0x1aaf[4])[_0x1aaf[3]];var ChatEnquiry=require(_0x1aaf[4])[_0x1aaf[5]];var ChatWebsite=require(_0x1aaf[4])[_0x1aaf[6]];exports[_0x1aaf[7]]= function(_0x8568x6,_0x8568x7,_0x8568x8){return ChatVisitor[_0x1aaf[16]](_[_0x1aaf[15]](Util[_0x1aaf[14]](_0x8568x6[_0x1aaf[13]]),{include:[{model:ChatWebsite}]}))[_0x1aaf[12]](function(_0x8568xa){_0x8568x7[_0x1aaf[11]](200)[_0x1aaf[10]](_0x8568xa)})[_0x1aaf[9]](function(_0x8568x9){console[_0x1aaf[8]](_0x8568x9);return handleError(_0x8568x7,_0x8568x9)})};exports[_0x1aaf[17]]= function(_0x8568x6,_0x8568x7){return ChatVisitor[_0x1aaf[21]](_0x8568x6[_0x1aaf[20]][_0x1aaf[19]],{include:[{model:ChatEnquiry},{model:ChatWebsite}]})[_0x1aaf[12]](function(_0x8568xb){if(!_0x8568xb){return _0x8568x7[_0x1aaf[18]](404)};return _0x8568x7[_0x1aaf[10]](_0x8568xb)})[_0x1aaf[9]](function(_0x8568x9){return handleError(_0x8568x7,_0x8568x9)})};exports[_0x1aaf[22]]= function(_0x8568x6,_0x8568x7){return ChatVisitor[_0x1aaf[22]](_0x8568x6[_0x1aaf[23]])[_0x1aaf[12]](function(_0x8568xb){return _0x8568x7[_0x1aaf[11]](201)[_0x1aaf[10]](_0x8568xb)})[_0x1aaf[9]](function(_0x8568x9){return handleError(_0x8568x7,_0x8568x9)})};exports[_0x1aaf[24]]= function(_0x8568x6,_0x8568x7){if(_0x8568x6[_0x1aaf[23]][_0x1aaf[19]]){delete _0x8568x6[_0x1aaf[23]][_0x1aaf[19]]};return ChatVisitor[_0x1aaf[21]](_0x8568x6[_0x1aaf[20]][_0x1aaf[19]])[_0x1aaf[12]](function(_0x8568xb){if(!_0x8568xb){return _0x8568x7[_0x1aaf[18]](404)};var _0x8568xc=_[_0x1aaf[15]](_0x8568xb,_0x8568x6[_0x1aaf[23]]);return _0x8568xc[_0x1aaf[25]]()})[_0x1aaf[12]](function(_0x8568xb){return _0x8568x7[_0x1aaf[11]](200)[_0x1aaf[10]](_0x8568xb)})[_0x1aaf[9]](function(_0x8568x9){return handleError(_0x8568x7,_0x8568x9)})};exports[_0x1aaf[26]]= function(_0x8568x6,_0x8568x7){return ChatVisitor[_0x1aaf[21]](_0x8568x6[_0x1aaf[20]][_0x1aaf[19]])[_0x1aaf[12]](function(_0x8568xb){if(!_0x8568xb){return _0x8568x7[_0x1aaf[18]](404)};return _0x8568xb[_0x1aaf[26]]()})[_0x1aaf[12]](function(){return _0x8568x7[_0x1aaf[18]](204)})[_0x1aaf[9]](function(_0x8568x9){return handleError(_0x8568x7,_0x8568x9)})};function handleError(_0x8568x7,_0x8568x9){return _0x8568x7[_0x1aaf[11]](500)[_0x1aaf[10]](_0x8568x9)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var ChatVisitor = require('../../models').ChatVisitor; +var ChatEnquiry = require('../../models').ChatEnquiry; +var ChatWebsite = require('../../models').ChatWebsite; + +// Get list of agents +exports.index = function(req, res, next) { + return ChatVisitor + .findAndCountAll(_.merge(Util.getQuery(req.query), { + include: [{ + model: ChatWebsite + }] + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); +}; + +// Get a single chatVisitor +exports.show = function(req, res) { + return ChatVisitor + .findById(req.params.id, { + include: [{ + model: ChatEnquiry + }, { + model: ChatWebsite + }] + }) + .then(function(chatVisitor) { + if (!chatVisitor) { + return res.sendStatus(404); + } + return res.send(chatVisitor); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new chatVisitor in the DB. +exports.create = function(req, res) { + return ChatVisitor + .create(req.body) + .then(function(chatVisitor) { + return res.status(201).send(chatVisitor); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing chatVisitor in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return ChatVisitor + .findById(req.params.id) + .then(function(chatVisitor) { + if (!chatVisitor) { + return res.sendStatus(404); + } + var updated = _.merge(chatVisitor, req.body); + return updated + .save(); + }) + .then(function(chatVisitor) { + return res.status(200).send(chatVisitor); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a chatVisitor from the DB. +exports.destroy = function(req, res) { + return ChatVisitor + .findById(req.params.id) + .then(function(chatVisitor) { + if (!chatVisitor) { + return res.sendStatus(404); + } + return chatVisitor + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/chat_visitor/chat_visitor.events.js b/server/api/chat_visitor/chat_visitor.events.js index 680076b..d4c36db 100644 --- a/server/api/chat_visitor/chat_visitor.events.js +++ b/server/api/chat_visitor/chat_visitor.events.js @@ -1 +1,36 @@ -var _0xe6c1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xe6c1[0];const EventEmitter=require(_0xe6c1[1]);const ChatVisitor=require(_0xe6c1[3])[_0xe6c1[2]];var ChatVisitorEvents= new EventEmitter();ChatVisitorEvents[_0xe6c1[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xe6c1[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xe6c1[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xe6c1[6]};for(var e in events){var event=events[e];ChatVisitor[_0xe6c1[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xb899x8,_0xb899x9,_0xb899xa){ChatVisitorEvents[_0xe6c1[10]](event+ _0xe6c1[8]+ _0xb899x8[_0xe6c1[9]],_0xb899x8);ChatVisitorEvents[_0xe6c1[10]](event,_0xb899x8);_0xb899xa(null)}}module[_0xe6c1[11]]= ChatVisitorEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ChatVisitor = require('../../models').ChatVisitor; + +var ChatVisitorEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ChatVisitorEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ChatVisitor.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ChatVisitorEvents.emit(event + ':' + doc._id, doc); + ChatVisitorEvents.emit(event, doc); + done(null); + } +} + +module.exports = ChatVisitorEvents; diff --git a/server/api/chat_visitor/chat_visitor.socket.js b/server/api/chat_visitor/chat_visitor.socket.js index 1b7fb34..3a627b1 100644 --- a/server/api/chat_visitor/chat_visitor.socket.js +++ b/server/api/chat_visitor/chat_visitor.socket.js @@ -1 +1,28 @@ -var _0x7a88=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x68\x61\x74\x5F\x76\x69\x73\x69\x74\x6F\x72\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x68\x61\x74\x5F\x76\x69\x73\x69\x74\x6F\x72\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x7a88[0];const ChatVisitorEvents=require(_0x7a88[1]);var events=[_0x7a88[2],_0x7a88[3]];exports[_0x7a88[4]]= function(_0xc4c1x3){for(var _0xc4c1x4=0,_0xc4c1x5=events[_0x7a88[5]];_0xc4c1x4< _0xc4c1x5;_0xc4c1x4++){var _0xc4c1x6=events[_0xc4c1x4];var _0xc4c1x7=createListener(_0x7a88[6]+ _0xc4c1x6,_0xc4c1x3);ChatVisitorEvents[_0x7a88[7]](_0xc4c1x6,_0xc4c1x7);_0xc4c1x3[_0x7a88[7]](_0x7a88[8],removeListener(_0xc4c1x6,_0xc4c1x7))}};function createListener(_0xc4c1x6,_0xc4c1x3){return function(_0xc4c1x9){_0xc4c1x3[_0x7a88[9]](_0xc4c1x6,_0xc4c1x9)}}function removeListener(_0xc4c1x6,_0xc4c1x7){return function(){ChatVisitorEvents[_0x7a88[10]](_0xc4c1x6,_0xc4c1x7)}} \ No newline at end of file +'use strict'; + +const ChatVisitorEvents = require('./chat_visitor.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('chat_visitor:' + event, socket); + + ChatVisitorEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ChatVisitorEvents.removeListener(event, listener); + }; +} diff --git a/server/api/chat_visitor/index.js b/server/api/chat_visitor/index.js index 8e1380b..829db71 100644 --- a/server/api/chat_visitor/index.js +++ b/server/api/chat_visitor/index.js @@ -1 +1,17 @@ -var _0xe2a7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x68\x61\x74\x5F\x76\x69\x73\x69\x74\x6F\x72\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xe2a7[0];var express=require(_0xe2a7[1]);var controller=require(_0xe2a7[2]);var auth=require(_0xe2a7[3]);var license=require(_0xe2a7[4]);var router=express.Router();router[_0xe2a7[12]](_0xe2a7[5],license[_0xe2a7[6]](),license[_0xe2a7[7]](),auth[_0xe2a7[8]](),auth[_0xe2a7[10]]([8],[_0xe2a7[9]]),controller[_0xe2a7[11]]);router[_0xe2a7[12]](_0xe2a7[13],license[_0xe2a7[6]](),license[_0xe2a7[7]](),auth[_0xe2a7[8]](),auth[_0xe2a7[10]]([8],[_0xe2a7[9]]),controller[_0xe2a7[14]]);router[_0xe2a7[16]](_0xe2a7[5],license[_0xe2a7[6]](),license[_0xe2a7[7]](),auth[_0xe2a7[8]](),auth[_0xe2a7[10]]([8],[_0xe2a7[9]]),controller[_0xe2a7[15]]);router[_0xe2a7[18]](_0xe2a7[13],license[_0xe2a7[6]](),license[_0xe2a7[7]](),auth[_0xe2a7[8]](),auth[_0xe2a7[10]]([8],[_0xe2a7[9]]),controller[_0xe2a7[17]]);router[_0xe2a7[20]](_0xe2a7[13],license[_0xe2a7[6]](),license[_0xe2a7[7]](),auth[_0xe2a7[8]](),auth[_0xe2a7[10]]([8],[_0xe2a7[9]]),controller[_0xe2a7[19]]);module[_0xe2a7[21]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./chat_visitor.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.index); +router.get('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.show); +router.post('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.create); +router.put('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.update); +router.delete('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/chat_website/chat_website.controller.js b/server/api/chat_website/chat_website.controller.js index 5b13aa5..bc93ce4 100644 --- a/server/api/chat_website/chat_website.controller.js +++ b/server/api/chat_website/chat_website.controller.js @@ -1 +1,579 @@ -var _0x94a4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x6D\x75\x73\x74\x61\x63\x68\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x55\x73\x65\x72","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64","\x43\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x43\x68\x61\x74\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x73\x6E\x69\x70\x70\x65\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73\x2F\x78\x63\x68\x61\x74\x74\x79","\x75\x70\x6C\x6F\x61\x64\x2D\x66\x69\x6C\x65","\x70\x61\x74\x68","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x68\x61\x6E\x67\x65\x4C\x6F\x67\x6F","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x69\x6D\x61\x67\x65\x73","\x6A\x6F\x69\x6E","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x65\x78\x74\x6E\x61\x6D\x65","\x4D\x61\x78\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x66\x69\x6C\x65\x73\x20\x75\x70\x6C\x6F\x61\x64\x20\x65\x78\x63\x65\x65\x64\x65\x64","\x4F\x6E\x6C\x79\x20\x6A\x70\x65\x67\x20\x61\x6E\x64\x20\x70\x6E\x67\x20\x66\x6F\x72\x6D\x61\x74\x20\x61\x63\x63\x65\x70\x74\x65\x64","\x49\x6E\x76\x61\x6C\x69\x64\x20\x72\x65\x71\x75\x65\x73\x74","\x65\x6E\x64","\x66\x69\x6C\x65","\x6C\x6F\x67\x6F","\x75\x70\x64\x61\x74\x65","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x6F\x6E","\x65\x72\x72\x6F\x72","\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x20\x55\x70\x6C\x6F\x61\x64\x20\x65\x72\x72\x6F\x72\x20\x3A","\x6C\x6F\x67","\x70\x61\x72\x73\x65","\x67\x65\x74\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x6C\x65\x6E\x67\x74\x68","\x67\x65\x74\x43\x68\x61\x74\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x49\x64","\x62\x6F\x64\x79","\x63\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x69\x73\x70\x49\x64","\x64\x65\x73\x74\x72\x6F\x79\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x6E\x61\x6D\x65","\x70\x72\x69\x6F\x72\x69\x74\x79\x20\x41\x53\x43","\x67\x65\x74\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x73","\x67\x65\x74\x43\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x73","\x67\x65\x74\x53\x6E\x69\x70\x70\x65\x74\x43\x6F\x64\x65","\x72\x65\x6D\x6F\x74\x65","\x72\x65\x6E\x64\x65\x72","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x70\x72\x69\x6F\x72\x69\x74\x79","\x66\x6F\x72\x45\x61\x63\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x77\x65\x62\x73\x69\x74\x65\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x69\x64\x73","\x64\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x61\x70\x70\x49\x64","\x67\x65\x74\x46\x6F\x72\x6D\x73","\x6A\x73\x6F\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x74\x79\x70\x65","\x73\x63\x6F\x70\x65","\x75\x70\x64\x61\x74\x65\x46\x6F\x72\x6D\x73","\x6F\x6E\x6C\x69\x6E\x65","\x4F\x6E\x6C\x69\x6E\x65\x49\x64","\x6F\x66\x66\x6C\x69\x6E\x65","\x4F\x66\x66\x6C\x69\x6E\x65\x49\x64","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x70\x61\x63\x74\x69\x6F\x6E\x49\x64","\x63\x72\x65\x61\x74\x65\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x6D\x61\x78","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E"];_0x94a4[0];var _=require(_0x94a4[1]);var util=require(_0x94a4[2]);var Mustache=require(_0x94a4[3]);var Util=require(_0x94a4[4]);var sequelize=require(_0x94a4[6])[_0x94a4[5]];var ChatWebsite=require(_0x94a4[6])[_0x94a4[7]];var ChatQueue=require(_0x94a4[6])[_0x94a4[8]];var User=require(_0x94a4[6])[_0x94a4[9]];var Interval=require(_0x94a4[6])[_0x94a4[10]];var ChatApplication=require(_0x94a4[6])[_0x94a4[11]];var ChatWebsitesField=require(_0x94a4[6])[_0x94a4[12]];var ChatProactiveAction=require(_0x94a4[6])[_0x94a4[13]];var ChatDisposition=require(_0x94a4[6])[_0x94a4[14]];var snippet=require(_0x94a4[16])[_0x94a4[15]];var UploadFile=require(_0x94a4[17]);var path=require(_0x94a4[18]);var sr=require(_0x94a4[19]);var config=require(_0x94a4[20]);exports[_0x94a4[21]]= function(_0x27ebx13,_0x27ebx14,_0x27ebx15){return ChatWebsite[_0x94a4[28]](Util[_0x94a4[27]](_0x27ebx13[_0x94a4[26]]))[_0x94a4[25]](function(_0x27ebx17){_0x27ebx14[_0x94a4[24]](200)[_0x94a4[23]](_0x27ebx17)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[29]]= function(_0x27ebx13,_0x27ebx14){return ChatWebsite[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[31]])[_0x94a4[25]](function(_0x27ebx18){if(!_0x27ebx18){return _0x27ebx14[_0x94a4[30]](404)};return _0x27ebx14[_0x94a4[23]](_0x27ebx18)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[34]]= function(_0x27ebx13,_0x27ebx14){var _0x27ebx19= new UploadFile({dest:path[_0x94a4[39]](config[_0x94a4[35]],_0x94a4[36],_0x94a4[37],_0x94a4[38]),maxNumberOfFiles:1,minNumberOfFiles:0,acceptFileTypes:/(\.|\/)(jpeg|png)$/i,rename:function(_0x27ebx1a,_0x27ebx1b){return sr()+ path[_0x94a4[41]](_0x27ebx1b[_0x94a4[40]])},messages:{maxNumberOfFiles:_0x94a4[42],acceptFileTypes:_0x94a4[43],invalidRequest:_0x94a4[44]}});_0x27ebx19[_0x94a4[50]](_0x94a4[45],function(_0x27ebx1c,_0x27ebx1d){if(!_0x27ebx1d[_0x94a4[46]][_0x94a4[40]]){return _0x27ebx14[_0x94a4[24]](500)[_0x94a4[23]](_0x27ebx19)};return sequelize[_0x94a4[49]](function(_0x27ebx1e){return ChatWebsite[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[31]])[_0x94a4[25]](function(_0x27ebx20){if(!_0x27ebx20){return _0x27ebx14[_0x94a4[30]](404)};var _0x27ebx21={};_0x27ebx21[_0x94a4[47]]= _0x27ebx1d[_0x94a4[46]][_0x94a4[40]];return _0x27ebx20[_0x94a4[48]](_0x27ebx21,{transaction:_0x27ebx1e})})[_0x94a4[25]](function(_0x27ebx1f){return _0x27ebx14[_0x94a4[24]](200)[_0x94a4[23]](_0x27ebx1f)})})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})});_0x27ebx19[_0x94a4[50]](_0x94a4[51],function(_0x27ebx16){console[_0x94a4[53]](_0x94a4[52],_0x27ebx16);return handleError(_0x27ebx14,_0x27ebx16)});_0x27ebx19[_0x94a4[54]](_0x27ebx13)};exports[_0x94a4[55]]= function(_0x27ebx13,_0x27ebx14,_0x27ebx15){return ChatWebsite[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[31]])[_0x94a4[25]](function(_0x27ebx18){if(!_0x27ebx18){return _0x27ebx14[_0x94a4[30]](404)};return _0x27ebx18[_0x94a4[57]]()})[_0x94a4[25]](function(_0x27ebx22){return _0x27ebx14[_0x94a4[24]](200)[_0x94a4[23]]({rows:_0x27ebx22,count:_0x27ebx22[_0x94a4[56]]})})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[58]]= function(_0x27ebx13,_0x27ebx14,_0x27ebx15){_0x27ebx13[_0x94a4[60]][_0x94a4[59]]= _0x27ebx13[_0x94a4[32]][_0x94a4[31]];return ChatDisposition[_0x94a4[61]](_0x27ebx13[_0x94a4[60]])[_0x94a4[25]](function(_0x27ebx23){return _0x27ebx14[_0x94a4[24]](201)[_0x94a4[23]](_0x27ebx23)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[62]]= function(_0x27ebx13,_0x27ebx14){if(_0x27ebx13[_0x94a4[60]][_0x94a4[31]]){delete _0x27ebx13[_0x94a4[60]][_0x94a4[31]]};return ChatDisposition[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[65]])[_0x94a4[25]](function(_0x27ebx23){if(!_0x27ebx23){return _0x27ebx14[_0x94a4[30]](404)};var _0x27ebx24=_[_0x94a4[63]](_0x27ebx23,_0x27ebx13[_0x94a4[60]]);return _0x27ebx24[_0x94a4[64]]()})[_0x94a4[25]](function(_0x27ebx18){return _0x27ebx14[_0x94a4[24]](200)[_0x94a4[23]](_0x27ebx18)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[66]]= function(_0x27ebx13,_0x27ebx14,_0x27ebx15){return ChatDisposition[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[65]])[_0x94a4[25]](function(_0x27ebx25){if(!_0x27ebx25){return _0x27ebx14[_0x94a4[30]](404)};return _0x27ebx25[_0x94a4[67]]()})[_0x94a4[25]](function(){return _0x27ebx14[_0x94a4[30]](204)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[68]]= function(_0x27ebx13,_0x27ebx14,_0x27ebx15){return ChatWebsite[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[31]])[_0x94a4[25]](function(_0x27ebx27){if(!_0x27ebx27){return _0x27ebx14[_0x94a4[30]](404)};return _0x27ebx27[_0x94a4[71]](_[_0x94a4[63]](Util[_0x94a4[27]](_0x27ebx13[_0x94a4[26]]),{include:[{model:ChatQueue,attributes:[_0x94a4[31],_0x94a4[69]]},{model:User,attributes:[_0x94a4[31],_0x94a4[69]]},{model:Interval,attributes:[_0x94a4[31],_0x94a4[69]]}],order:_0x94a4[70]}))})[_0x94a4[25]](function(_0x27ebx26){return _0x27ebx14[_0x94a4[23]]({count:_0x27ebx26[_0x94a4[56]],rows:_0x27ebx26})})[_0x94a4[22]](function(_0x27ebx16){console[_0x94a4[53]](_0x27ebx16);return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[72]]= function(_0x27ebx13,_0x27ebx14,_0x27ebx15){return ChatWebsite[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[31]])[_0x94a4[25]](function(_0x27ebx27){if(!_0x27ebx27){return _0x27ebx14[_0x94a4[30]](404)};return _0x27ebx27[_0x94a4[73]](Util[_0x94a4[27]](_0x27ebx13[_0x94a4[26]]))})[_0x94a4[25]](function(_0x27ebx28){return _0x27ebx14[_0x94a4[23]]({count:_0x27ebx28[_0x94a4[56]],rows:_0x27ebx28})})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[74]]= function(_0x27ebx13,_0x27ebx14){return ChatWebsite[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[31]])[_0x94a4[25]](function(_0x27ebx18){var _0x27ebx29={remote:_0x27ebx18[_0x94a4[75]],websiteId:_0x27ebx13[_0x94a4[32]][_0x94a4[31]]};var _0x27ebx2a=Mustache[_0x94a4[76]](snippet,_0x27ebx29);return _0x27ebx14[_0x94a4[24]](200)[_0x94a4[23]]({html:_0x27ebx2a})})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[61]]= function(_0x27ebx13,_0x27ebx14){return ChatWebsite[_0x94a4[61]](_0x27ebx13[_0x94a4[60]])[_0x94a4[25]](function(_0x27ebx18){return _0x27ebx14[_0x94a4[24]](201)[_0x94a4[23]](_0x27ebx18)})[_0x94a4[22]](function(_0x27ebx16){console[_0x94a4[53]](_0x27ebx16);return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[48]]= function(_0x27ebx13,_0x27ebx14){if(_0x27ebx13[_0x94a4[60]][_0x94a4[31]]){delete _0x27ebx13[_0x94a4[60]][_0x94a4[31]]};return ChatWebsite[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[31]])[_0x94a4[25]](function(_0x27ebx18){if(!_0x27ebx18){return _0x27ebx14[_0x94a4[30]](404)};return _0x27ebx18[_0x94a4[48]](_0x27ebx13[_0x94a4[60]])})[_0x94a4[25]](function(_0x27ebx18){return _0x27ebx14[_0x94a4[24]](200)[_0x94a4[23]](_0x27ebx18)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[77]]= function(_0x27ebx13,_0x27ebx14){var _0x27ebx2b=0;var _0x27ebx2c=_0x27ebx13[_0x94a4[60]];_0x27ebx2c[_0x94a4[81]](function(_0x27ebx2d){delete _0x27ebx2d[_0x94a4[31]];delete _0x27ebx2d[_0x94a4[78]];delete _0x27ebx2d[_0x94a4[79]];_0x27ebx2d[_0x94a4[80]]= ++_0x27ebx2b});return sequelize[_0x94a4[49]](function(_0x27ebx1e){return ChatApplication[_0x94a4[67]]({where:{ChatWebsiteId:_0x27ebx13[_0x94a4[32]][_0x94a4[31]]},individualHooks:true,transaction:_0x27ebx1e})[_0x94a4[25]](function(){return ChatApplication[_0x94a4[82]](_0x27ebx2c,{individualHooks:true,transaction:_0x27ebx1e})})})[_0x94a4[25]](function(_0x27ebx26){return _0x27ebx14[_0x94a4[24]](200)[_0x94a4[23]]({count:_0x27ebx26[_0x94a4[56]],rows:_0x27ebx26})})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[67]]= function(_0x27ebx13,_0x27ebx14){return ChatWebsite[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[31]])[_0x94a4[25]](function(_0x27ebx18){if(!_0x27ebx18){return _0x27ebx14[_0x94a4[30]](404)};return _0x27ebx18[_0x94a4[67]]()})[_0x94a4[25]](function(){return _0x27ebx14[_0x94a4[30]](204)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[83]]= function(_0x27ebx13,_0x27ebx14){return ChatWebsite[_0x94a4[67]]({where:{id:_0x27ebx13[_0x94a4[26]][_0x94a4[84]]},individualHooks:true})[_0x94a4[25]](function(){return _0x27ebx14[_0x94a4[30]](204)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[85]]= function(_0x27ebx13,_0x27ebx14){return ChatApplication[_0x94a4[67]]({where:{id:_0x27ebx13[_0x94a4[26]][_0x94a4[86]]},individualHooks:true})[_0x94a4[25]](function(){return _0x27ebx14[_0x94a4[30]](204)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[87]]= function(_0x27ebx13,_0x27ebx14,_0x27ebx15){return ChatApplication[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[88]])[_0x94a4[25]](function(_0x27ebx2e){if(!_0x27ebx2e){return _0x27ebx14[_0x94a4[30]](404)};return _0x27ebx2e[_0x94a4[67]]()})[_0x94a4[25]](function(){return _0x27ebx14[_0x94a4[30]](204)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[89]]= function(_0x27ebx13,_0x27ebx14){return ChatWebsitesField[_0x94a4[93]]({method:[_0x27ebx13[_0x94a4[32]][_0x94a4[92]],_0x27ebx13[_0x94a4[32]][_0x94a4[31]]]})[_0x94a4[91]]()[_0x94a4[25]](function(_0x27ebx2f){return _0x27ebx14[_0x94a4[24]](200)[_0x94a4[90]](_0x27ebx2f)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[94]]= function(_0x27ebx13,_0x27ebx14,_0x27ebx15){return ChatWebsitesField[_0x94a4[67]]({where:_0x27ebx13[_0x94a4[32]][_0x94a4[92]]=== _0x94a4[95]?{OnlineId:_0x27ebx13[_0x94a4[32]][_0x94a4[31]]}:{OfflineId:_0x27ebx13[_0x94a4[32]][_0x94a4[31]]}})[_0x94a4[25]](function(){_[_0x94a4[81]](_0x27ebx13[_0x94a4[60]],function(_0x27ebx30){if(_0x27ebx13[_0x94a4[32]][_0x94a4[92]]=== _0x94a4[95]){_0x27ebx30[_0x94a4[96]]= _0x27ebx13[_0x94a4[32]][_0x94a4[31]]}else {if(_0x27ebx13[_0x94a4[32]][_0x94a4[92]]=== _0x94a4[97]){_0x27ebx30[_0x94a4[98]]= _0x27ebx13[_0x94a4[32]][_0x94a4[31]]}}});return ChatWebsitesField[_0x94a4[82]](_0x27ebx13[_0x94a4[60]])})[_0x94a4[25]](function(_0x27ebx1c){_0x27ebx14[_0x94a4[24]](201)[_0x94a4[90]](_0x27ebx1c)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[99]]= function(_0x27ebx13,_0x27ebx14){return ChatProactiveAction[_0x94a4[67]]({where:{id:_0x27ebx13[_0x94a4[26]][_0x94a4[86]]},individualHooks:true})[_0x94a4[25]](function(){return _0x27ebx14[_0x94a4[30]](204)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[100]]= function(_0x27ebx13,_0x27ebx14,_0x27ebx15){return ChatProactiveAction[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[101]])[_0x94a4[25]](function(_0x27ebx31){if(!_0x27ebx31){return _0x27ebx14[_0x94a4[30]](404)};return _0x27ebx31[_0x94a4[67]]()})[_0x94a4[25]](function(){return _0x27ebx14[_0x94a4[30]](204)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[102]]= function(_0x27ebx13,_0x27ebx14,_0x27ebx15){return ChatWebsite[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[31]])[_0x94a4[25]](function(_0x27ebx27){if(!_0x27ebx27){return _0x27ebx14[_0x94a4[30]](404)};_0x27ebx13[_0x94a4[60]][_0x94a4[59]]= _0x27ebx27[_0x94a4[31]];return ChatProactiveAction[_0x94a4[61]](_0x27ebx13[_0x94a4[60]])})[_0x94a4[25]](function(_0x27ebx31){return _0x27ebx14[_0x94a4[24]](201)[_0x94a4[23]](_0x27ebx31)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[103]]= function(_0x27ebx13,_0x27ebx14){if(_0x27ebx13[_0x94a4[60]][_0x94a4[31]]){delete _0x27ebx13[_0x94a4[60]][_0x94a4[31]]};return ChatProactiveAction[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[101]])[_0x94a4[25]](function(_0x27ebx31){if(!_0x27ebx31){return _0x27ebx14[_0x94a4[30]](404)};return _0x27ebx31[_0x94a4[48]](_0x27ebx13[_0x94a4[60]])})[_0x94a4[25]](function(_0x27ebx31){return _0x27ebx14[_0x94a4[24]](200)[_0x94a4[23]](_0x27ebx31)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};function handleError(_0x27ebx14,_0x27ebx16){return _0x27ebx14[_0x94a4[24]](500)[_0x94a4[23]](_0x27ebx16)}exports[_0x94a4[104]]= function(_0x27ebx13,_0x27ebx14,_0x27ebx15){return ChatApplication[_0x94a4[105]](_0x94a4[80],{where:{ChatWebsiteId:_0x27ebx13[_0x94a4[32]][_0x94a4[31]]}})[_0x94a4[25]](function(_0x27ebx33){_0x27ebx13[_0x94a4[60]][_0x94a4[80]]= _0x27ebx33?++_0x27ebx33:1;_0x27ebx13[_0x94a4[60]][_0x94a4[59]]= _0x27ebx13[_0x94a4[32]][_0x94a4[31]];return ChatApplication[_0x94a4[61]](_0x27ebx13[_0x94a4[60]])})[_0x94a4[25]](function(_0x27ebx2e){return _0x27ebx14[_0x94a4[24]](201)[_0x94a4[23]](_0x27ebx2e)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[106]]= function(_0x27ebx13,_0x27ebx14){if(_0x27ebx13[_0x94a4[60]][_0x94a4[31]]){delete _0x27ebx13[_0x94a4[60]][_0x94a4[31]]};return ChatApplication[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[88]])[_0x94a4[25]](function(_0x27ebx2e){if(!_0x27ebx2e){return _0x27ebx14[_0x94a4[30]](404)};return _0x27ebx2e[_0x94a4[48]](_0x27ebx13[_0x94a4[60]])})[_0x94a4[25]](function(_0x27ebx2e){return _0x27ebx14[_0x94a4[24]](200)[_0x94a4[23]](_0x27ebx2e)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})};exports[_0x94a4[107]]= function(_0x27ebx13,_0x27ebx14){return ChatApplication[_0x94a4[33]](_0x27ebx13[_0x94a4[32]][_0x94a4[88]],{include:[{all:true}]})[_0x94a4[25]](function(_0x27ebx2e){if(!_0x27ebx2e){return _0x27ebx14[_0x94a4[30]](404)};return _0x27ebx14[_0x94a4[23]](_0x27ebx2e)})[_0x94a4[22]](function(_0x27ebx16){return handleError(_0x27ebx14,_0x27ebx16)})} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var Mustache = require('mustache'); +var Util = require('../../config/util'); + +var sequelize = require('../../models').sequelize; +var ChatWebsite = require('../../models').ChatWebsite; +var ChatQueue = require('../../models').ChatQueue; +var User = require('../../models').User; +var Interval = require('../../models').Interval; +var ChatApplication = require('../../models').ChatApplication; +var ChatWebsitesField = require('../../models').ChatWebsitesField; +var ChatProactiveAction = require('../../models').ChatProactiveAction; +var ChatDisposition = require('../../models').ChatDisposition; +var snippet = require('../../components/xchatty').snippet; +var UploadFile = require('upload-file'); +var path = require('path'); +var sr = require('simple-random'); +var config = require('../../config/environment'); + + +// Get list of agents +exports.index = function(req, res, next) { + return ChatWebsite + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Get a single chat_website +exports.show = function(req, res) { + return ChatWebsite + .findById(req.params.id) + .then(function(chat_website) { + if (!chat_website) { + return res.sendStatus(404); + } + return res.send(chat_website); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + + +exports.changeLogo = function(req, res) { + + var upload = new UploadFile({ + dest: path.join(config.root, 'server', 'files', 'images'), + maxNumberOfFiles: 1, + minNumberOfFiles: 0, + acceptFileTypes: /(\.|\/)(jpeg|png)$/i, + rename: function(name, file) { + return sr() + path.extname(file.filename); + }, + messages: { + maxNumberOfFiles: "Max number of files upload exceeded", + acceptFileTypes: "Only jpeg and png format accepted", + invalidRequest: "Invalid request" + } + }); + + upload.on('end', function(fields, files) { + if (!files.file.filename) { + return res.status(500).send(upload); + } + return sequelize.transaction(function(t) { + return ChatWebsite + .findById(req.params.id) + .then(function(website) { + if (!website) { + return res.sendStatus(404); + } + var body = {}; + body.logo = files.file.filename; + return website + .update(body, { + transaction: t + }); + }) + .then(function(user) { + return res.status(200).send(user); + }) + }) + .catch(function(err) { + return handleError(res, err); + }); + }); + + upload.on('error', function(err) { + console.log('********** Upload error :', err) + return handleError(res, err); + }); + + upload.parse(req); +} + +exports.getDispositions = function(req, res, next) { + return ChatWebsite + .findById(req.params.id) + .then(function(chat_website) { + if (!chat_website) { + return res.sendStatus(404); + } + + return chat_website + .getChatDispositions(); + }) + .then(function(chatDispositions) { + return res.status(200).send({ + rows: chatDispositions, + count: chatDispositions.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.createDisposition = function(req, res, next) { + req.body.ChatWebsiteId = req.params.id; + + return ChatDisposition + .create(req.body) + .then(function(chatDisposition) { + return res.status(201).send(chatDisposition); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.updateDisposition = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return ChatDisposition + .findById(req.params.dispId) + .then(function(chatDisposition) { + if (!chatDisposition) { + return res.sendStatus(404); + } + var updated = _.merge(chatDisposition, req.body); + return updated + .save(); + }) + .then(function(chat_website) { + return res.status(200).send(chat_website); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.destroyDisposition = function(req, res, next) { + return ChatDisposition + .findById(req.params.dispId) + .then(function(chatDiposition) { + if (!chatDiposition) { + return res.sendStatus(404); + } + + return chatDiposition + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.showApplications = function(req, res, next) { + return ChatWebsite + .findById(req.params.id) + .then(function(chatWebsite) { + if (!chatWebsite) { + return res.sendStatus(404); + } + return chatWebsite + .getChatApplications(_.merge(Util.getQuery(req.query), { + include: [{ + model: ChatQueue, + attributes: ['id', 'name'] + }, { + model: User, + attributes: ['id', 'name'] + }, { + model: Interval, + attributes: ['id', 'name'] + }], + order: 'priority ASC' + })); + }) + .then(function(chatApplications) { + return res.send({ + count: chatApplications.length, + rows: chatApplications + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.showProactiveActions = function(req, res, next) { + return ChatWebsite + .findById(req.params.id) + .then(function(chatWebsite) { + if (!chatWebsite) { + return res.sendStatus(404); + } + return chatWebsite + .getChatProactiveActions(Util.getQuery(req.query)); + }) + .then(function(chatProactiveActions) { + return res.send({ + count: chatProactiveActions.length, + rows: chatProactiveActions + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a snippet for chat_website +exports.getSnippetCode = function(req, res) { + return ChatWebsite + .findById(req.params.id) + .then(function(chat_website) { + var configSnippet = { + remote: chat_website.remote, + websiteId: req.params.id + }; + var html = Mustache.render(snippet, configSnippet); + return res.status(200).send({ + html: html + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new chat_website in the DB. +exports.create = function(req, res) { + return ChatWebsite + .create(req.body) + .then(function(chat_website) { + return res.status(201).send(chat_website); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Updates an existing chat_website in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return ChatWebsite + .findById(req.params.id) + .then(function(chat_website) { + if (!chat_website) { + return res.sendStatus(404); + } + + return chat_website + .update(req.body); + }) + .then(function(chat_website) { + return res.status(200).send(chat_website); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.updateApplications = function(req, res) { + + var priority = 0; + var apps = req.body; + + apps.forEach(function(app) { + delete app.id; + delete app.createdAt; + delete app.updatedAt; + + app.priority = ++priority; + }); + + return sequelize.transaction(function(t) { + return ChatApplication + .destroy({ + where: { + ChatWebsiteId: req.params.id + }, + individualHooks: true, + transaction: t + }).then(function() { + return ChatApplication + .bulkCreate(apps, { + individualHooks: true, + transaction: t + }); + }); + }).then(function(chatApplications) { + return res.status(200).send({ + count: chatApplications.length, + rows: chatApplications + }); + }).catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a chat_website from the DB. +exports.destroy = function(req, res) { + return ChatWebsite + .findById(req.params.id) + .then(function(chat_website) { + if (!chat_website) { + return res.sendStatus(404); + } + return chat_website + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a agent from the DB. +exports.bulkDestroy = function(req, res) { + return ChatWebsite + .destroy({ + where: { + id: req.query.websites + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a agent from the DB. +exports.bulkDestroyApplications = function(req, res) { + return ChatApplication + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a mailAccount from the DB. +exports.destroyApplication = function(req, res, next) { + return ChatApplication + .findById(req.params.appId) + .then(function(chatApplication) { + if (!chatApplication) { + return res.sendStatus(404); + } + + return chatApplication + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getForms = function(req, res) { + return ChatWebsitesField + .scope({ + method: [req.params.type, req.params.id] + }) + .findAll() + .then(function(data) { + return res.status(200).json(data); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.updateForms = function(req, res, next) { + return ChatWebsitesField + .destroy({ + where: req.params.type === 'online' ? { + OnlineId: req.params.id + } : { + OfflineId: req.params.id + } + }) + .then(function() { + _.forEach(req.body, function(value) { + if (req.params.type === 'online') { + value.OnlineId = req.params.id; + } else if (req.params.type === 'offline') { + value.OfflineId = req.params.id; + } + }); + return ChatWebsitesField.bulkCreate(req.body); + }) + .then(function(fields) { + res.status(201).json(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.bulkDestroyProactiveActions = function(req, res) { + return ChatProactiveAction + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.destroyProactiveAction = function(req, res, next) { + return ChatProactiveAction + .findById(req.params.pactionId) + .then(function(chatProactiveAction) { + if (!chatProactiveAction) { + return res.sendStatus(404); + } + return chatProactiveAction.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.createProactiveAction = function(req, res, next) { + return ChatWebsite + .findById(req.params.id) + .then(function(chatWebsite) { + if (!chatWebsite) { + return res.sendStatus(404); + } + req.body.ChatWebsiteId = chatWebsite.id; + return ChatProactiveAction.create(req.body); + }) + .then(function(chatProactiveAction) { + return res.status(201).send(chatProactiveAction); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.updateProactiveAction = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return ChatProactiveAction + .findById(req.params.pactionId) + .then(function(chatProactiveAction) { + if (!chatProactiveAction) { + return res.sendStatus(404); + } + + return chatProactiveAction + .update(req.body); + }) + .then(function(chatProactiveAction) { + return res.status(200).send(chatProactiveAction); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} + +exports.createApplication = function(req, res, next) { + return ChatApplication + .max('priority', { + where: { + ChatWebsiteId: req.params.id + } + }).then(function(max) { + // SET PRIORITY + req.body.priority = max ? ++max : 1; + req.body.ChatWebsiteId = req.params.id; + return ChatApplication + .create(req.body); + }) + .then(function(chatApplication) { + return res.status(201).send(chatApplication); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.updateApplication = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return ChatApplication.findById(req.params.appId) + .then(function(chatApplication) { + if (!chatApplication) { + return res.sendStatus(404); + } + + return chatApplication + .update(req.body); + }) + .then(function(chatApplication) { + return res.status(200).send(chatApplication); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.showApplication = function(req, res) { + return ChatApplication + .findById(req.params.appId, { + include: [{ + all: true + }] + }) + .then(function(chatApplication) { + if (!chatApplication) { + return res.sendStatus(404); + } + return res.send(chatApplication); + }) + .catch(function(err) { + return handleError(res, err); + }); +} diff --git a/server/api/chat_website/chat_website.events.js b/server/api/chat_website/chat_website.events.js index ecf648a..f910de1 100644 --- a/server/api/chat_website/chat_website.events.js +++ b/server/api/chat_website/chat_website.events.js @@ -1 +1,36 @@ -var _0x51a4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x51a4[0];const EventEmitter=require(_0x51a4[1]);const ChatWebsite=require(_0x51a4[3])[_0x51a4[2]];var ChatWebsiteEvents= new EventEmitter();ChatWebsiteEvents[_0x51a4[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x51a4[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x51a4[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x51a4[6]};for(var e in events){var event=events[e];ChatWebsite[_0x51a4[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x1ee2x8,_0x1ee2x9,_0x1ee2xa){ChatWebsiteEvents[_0x51a4[10]](event+ _0x51a4[8]+ _0x1ee2x8[_0x51a4[9]],_0x1ee2x8);ChatWebsiteEvents[_0x51a4[10]](event,_0x1ee2x8);_0x1ee2xa(null)}}module[_0x51a4[11]]= ChatWebsiteEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ChatWebsite = require('../../models').ChatWebsite; + +var ChatWebsiteEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ChatWebsiteEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ChatWebsite.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ChatWebsiteEvents.emit(event + ':' + doc._id, doc); + ChatWebsiteEvents.emit(event, doc); + done(null); + } +} + +module.exports = ChatWebsiteEvents; diff --git a/server/api/chat_website/chat_website.socket.js b/server/api/chat_website/chat_website.socket.js index f4860f1..5200183 100644 --- a/server/api/chat_website/chat_website.socket.js +++ b/server/api/chat_website/chat_website.socket.js @@ -1 +1,28 @@ -var _0x2383=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x2383[0];const ChatWebsiteEvents=require(_0x2383[1]);var events=[_0x2383[2],_0x2383[3]];exports[_0x2383[4]]= function(_0x6c7bx3){for(var _0x6c7bx4=0,_0x6c7bx5=events[_0x2383[5]];_0x6c7bx4< _0x6c7bx5;_0x6c7bx4++){var _0x6c7bx6=events[_0x6c7bx4];var _0x6c7bx7=createListener(_0x2383[6]+ _0x6c7bx6,_0x6c7bx3);ChatWebsiteEvents[_0x2383[7]](_0x6c7bx6,_0x6c7bx7);_0x6c7bx3[_0x2383[7]](_0x2383[8],removeListener(_0x6c7bx6,_0x6c7bx7))}};function createListener(_0x6c7bx6,_0x6c7bx3){return function(_0x6c7bx9){_0x6c7bx3[_0x2383[9]](_0x6c7bx6,_0x6c7bx9)}}function removeListener(_0x6c7bx6,_0x6c7bx7){return function(){ChatWebsiteEvents[_0x2383[10]](_0x6c7bx6,_0x6c7bx7)}} \ No newline at end of file +'use strict'; + +const ChatWebsiteEvents = require('./chat_website.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('chat_website:' + event, socket); + + ChatWebsiteEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ChatWebsiteEvents.removeListener(event, listener); + }; +} diff --git a/server/api/chat_website/index.js b/server/api/chat_website/index.js index f92bb8a..a197f8f 100644 --- a/server/api/chat_website/index.js +++ b/server/api/chat_website/index.js @@ -1 +1,40 @@ -var _0xdf42=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x61\x67\x65\x6E\x74","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x61\x70\x70\x49\x64","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x67\x65\x74\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x70\x72\x6F\x61\x63\x74\x69\x76\x65","\x73\x68\x6F\x77\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x74\x79\x70\x65","\x67\x65\x74\x46\x6F\x72\x6D\x73","\x2F\x3A\x69\x64\x2F\x73\x6E\x69\x70\x70\x65\x74","\x67\x65\x74\x53\x6E\x69\x70\x70\x65\x74\x43\x6F\x64\x65","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x6C\x6F\x67\x6F","\x63\x68\x61\x6E\x67\x65\x4C\x6F\x67\x6F","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73\x2F\x3A\x64\x69\x73\x70\x49\x64","\x75\x70\x64\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x2F\x3A\x70\x61\x63\x74\x69\x6F\x6E\x49\x64","\x75\x70\x64\x61\x74\x65\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65\x46\x6F\x72\x6D\x73","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];_0xdf42[0];var express=require(_0xdf42[1]);var controller=require(_0xdf42[2]);var auth=require(_0xdf42[3]);var license=require(_0xdf42[4]);var router=express.Router();router[_0xdf42[12]](_0xdf42[5],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[11]]);router[_0xdf42[12]](_0xdf42[13],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9],_0xdf42[14]]),controller[_0xdf42[15]]);router[_0xdf42[12]](_0xdf42[16],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[17]]);router[_0xdf42[12]](_0xdf42[18],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[19]]);router[_0xdf42[12]](_0xdf42[20],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9],_0xdf42[14]]),controller[_0xdf42[21]]);router[_0xdf42[12]](_0xdf42[22],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[23]]);router[_0xdf42[12]](_0xdf42[24],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[25]]);router[_0xdf42[12]](_0xdf42[26],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[27]]);router[_0xdf42[29]](_0xdf42[5],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[28]]);router[_0xdf42[29]](_0xdf42[16],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[30]]);router[_0xdf42[29]](_0xdf42[20],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[31]]);router[_0xdf42[29]](_0xdf42[22],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[32]]);router[_0xdf42[29]](_0xdf42[33],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[34]]);router[_0xdf42[36]](_0xdf42[13],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[35]]);router[_0xdf42[36]](_0xdf42[16],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[37]]);router[_0xdf42[36]](_0xdf42[18],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[38]]);router[_0xdf42[36]](_0xdf42[39],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[40]]);router[_0xdf42[36]](_0xdf42[41],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[42]]);router[_0xdf42[36]](_0xdf42[24],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[43]]);router[_0xdf42[44]](_0xdf42[13],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[35]]);router[_0xdf42[46]](_0xdf42[5],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[45]]);router[_0xdf42[46]](_0xdf42[13],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[47]]);router[_0xdf42[46]](_0xdf42[16],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[48]]);router[_0xdf42[46]](_0xdf42[22],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[49]]);router[_0xdf42[46]](_0xdf42[18],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[50]]);router[_0xdf42[46]](_0xdf42[41],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[51]]);router[_0xdf42[46]](_0xdf42[39],license[_0xdf42[6]](),license[_0xdf42[7]](),auth[_0xdf42[8]](),auth[_0xdf42[10]]([8],[_0xdf42[9]]),controller[_0xdf42[52]]);module[_0xdf42[53]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./chat_website.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.index); +router.get('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.show); +router.get('/:id/applications', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.showApplications); +router.get('/:id/applications/:appId', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.showApplication); +router.get('/:id/dispositions', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin', 'agent']), controller.getDispositions); +router.get('/:id/proactive', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.showProactiveActions); +router.get('/:id/fields/:type', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.getForms); +router.get('/:id/snippet', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.getSnippetCode); +router.post('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.create); +router.post('/:id/applications', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.createApplication); +router.post('/:id/dispositions', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.createDisposition); +router.post('/:id/proactive', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.createProactiveAction); +router.post('/:id/logo', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.changeLogo); +router.put('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.update); +router.put('/:id/applications', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.updateApplications); +router.put('/:id/applications/:appId', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.updateApplication); +router.put('/:id/dispositions/:dispId', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.updateDisposition); +router.put('/:id/proactive/:pactionId', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.updateProactiveAction); +router.put('/:id/fields/:type', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.updateForms); +router.patch('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.update); +router.delete('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.bulkDestroy); +router.delete('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.destroy); +router.delete('/:id/applications', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.bulkDestroyApplications); +router.delete('/:id/proactive', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.bulkDestroyProactiveActions); +router.delete('/:id/applications/:appId', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.destroyApplication); +router.delete('/:id/proactive/:pactionId', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.destroyProactiveAction); +router.delete('/:id/dispositions/:dispId', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.destroyDisposition); + + +module.exports = router; diff --git a/server/api/chat_websites_field/chat_websites_field.controller.js b/server/api/chat_websites_field/chat_websites_field.controller.js index 32c0609..78c9c47 100644 --- a/server/api/chat_websites_field/chat_websites_field.controller.js +++ b/server/api/chat_websites_field/chat_websites_field.controller.js @@ -1 +1,112 @@ -var _0x9cbf=["\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","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0x9cbf[0];var _=require(_0x9cbf[1]);var Util=require(_0x9cbf[2]);var ChatWebsitesField=require(_0x9cbf[4])[_0x9cbf[3]];function handleError(_0x7e6ex5,_0x7e6ex6){_0x7e6ex6= _0x7e6ex6|| 500;return function(_0x7e6ex7){_0x7e6ex5[_0x9cbf[6]](_0x7e6ex6)[_0x9cbf[5]](_0x7e6ex7)}}function responseWithResult(_0x7e6ex5,_0x7e6ex6){_0x7e6ex6= _0x7e6ex6|| 200;return function(_0x7e6ex9){if(_0x7e6ex9){_0x7e6ex5[_0x9cbf[6]](_0x7e6ex6)[_0x9cbf[7]](_0x7e6ex9)}}}function responseWithoutResult(_0x7e6ex5,_0x7e6ex6){_0x7e6ex6= _0x7e6ex6|| 204;return function(){_0x7e6ex5[_0x9cbf[8]](_0x7e6ex6)}}function handleEntityNotFound(_0x7e6ex5){return function(_0x7e6ex9){if(!_0x7e6ex9){_0x7e6ex5[_0x9cbf[6]](404)[_0x9cbf[9]]();return null};return _0x7e6ex9}}function saveUpdates(_0x7e6exd){return function(_0x7e6ex9){return _0x7e6ex9[_0x9cbf[11]](_0x7e6exd)[_0x9cbf[10]](function(_0x7e6exe){return _0x7e6exe})}}function removeEntity(_0x7e6ex5){return function(_0x7e6ex9){if(_0x7e6ex9){return _0x7e6ex9[_0x9cbf[12]]()[_0x9cbf[10]](function(){_0x7e6ex5[_0x9cbf[6]](204)[_0x9cbf[9]]()})}}}exports[_0x9cbf[13]]= function(_0x7e6ex10,_0x7e6ex5){return ChatWebsitesField[_0x9cbf[17]](Util[_0x9cbf[16]](_0x7e6ex10[_0x9cbf[15]]))[_0x9cbf[10]](responseWithResult(_0x7e6ex5))[_0x9cbf[14]](handleError(_0x7e6ex5))};exports[_0x9cbf[18]]= function(_0x7e6ex10,_0x7e6ex5){return ChatWebsitesField[_0x9cbf[21]](_0x7e6ex10[_0x9cbf[20]][_0x9cbf[19]])[_0x9cbf[10]](handleEntityNotFound(_0x7e6ex5))[_0x9cbf[10]](responseWithResult(_0x7e6ex5))[_0x9cbf[14]](handleError(_0x7e6ex5))};exports[_0x9cbf[22]]= function(_0x7e6ex10,_0x7e6ex5){return ChatWebsitesField[_0x9cbf[22]](_0x7e6ex10[_0x9cbf[23]])[_0x9cbf[10]](responseWithResult(_0x7e6ex5,201))[_0x9cbf[14]](handleError(_0x7e6ex5))};exports[_0x9cbf[24]]= function(_0x7e6ex10,_0x7e6ex5){if(_0x7e6ex10[_0x9cbf[23]][_0x9cbf[19]]){delete _0x7e6ex10[_0x9cbf[23]][_0x9cbf[19]]};return ChatWebsitesField[_0x9cbf[21]](_0x7e6ex10[_0x9cbf[20]][_0x9cbf[19]])[_0x9cbf[10]](handleEntityNotFound(_0x7e6ex5))[_0x9cbf[10]](saveUpdates(_0x7e6ex10[_0x9cbf[23]]))[_0x9cbf[10]](responseWithResult(_0x7e6ex5))[_0x9cbf[14]](handleError(_0x7e6ex5))};exports[_0x9cbf[12]]= function(_0x7e6ex10,_0x7e6ex5){return ChatWebsitesField[_0x9cbf[21]](_0x7e6ex10[_0x9cbf[20]][_0x9cbf[19]])[_0x9cbf[10]](handleEntityNotFound(_0x7e6ex5))[_0x9cbf[10]](removeEntity(_0x7e6ex5))[_0x9cbf[14]](handleError(_0x7e6ex5))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/chat/websites/fields -> index + * POST /api/chat/websites/fields -> create + * GET /api/chat/websites/fields/:id -> show + * PUT /api/chat/websites/fields/:id -> update + * DELETE /api/chat/websites/fields/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var ChatWebsitesField = require('../../models').ChatWebsitesField; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 204; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of ChatWebsitesFields +exports.index = function(req, res) { + return ChatWebsitesField.findAll(Util.getQuery(req.query)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single ChatWebsitesField from the DB +exports.show = function(req, res) { + return ChatWebsitesField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new ChatWebsitesField in the DB +exports.create = function(req, res) { + return ChatWebsitesField.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing ChatWebsitesField in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return ChatWebsitesField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a ChatWebsitesField from the DB +exports.destroy = function(req, res) { + return ChatWebsitesField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} diff --git a/server/api/chat_websites_field/chat_websites_field.events.js b/server/api/chat_websites_field/chat_websites_field.events.js index 64374c4..44c852c 100644 --- a/server/api/chat_websites_field/chat_websites_field.events.js +++ b/server/api/chat_websites_field/chat_websites_field.events.js @@ -1 +1,36 @@ -var _0x2c77=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x2c77[0];const EventEmitter=require(_0x2c77[1]);const ChatWebsitesField=require(_0x2c77[3])[_0x2c77[2]];var ChatWebsitesFieldEvents= new EventEmitter();ChatWebsitesFieldEvents[_0x2c77[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x2c77[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x2c77[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x2c77[6]};for(var e in events){var event=events[e];ChatWebsitesField[_0x2c77[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xb535x8,_0xb535x9,_0xb535xa){ChatWebsitesFieldEvents[_0x2c77[10]](event+ _0x2c77[8]+ _0xb535x8[_0x2c77[9]],_0xb535x8);ChatWebsitesFieldEvents[_0x2c77[10]](event,_0xb535x8);_0xb535xa(null)}}module[_0x2c77[11]]= ChatWebsitesFieldEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ChatWebsitesField = require('../../models').ChatWebsitesField; + +var ChatWebsitesFieldEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ChatWebsitesFieldEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ChatWebsitesField.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ChatWebsitesFieldEvents.emit(event + ':' + doc._id, doc); + ChatWebsitesFieldEvents.emit(event, doc); + done(null); + } +} + +module.exports = ChatWebsitesFieldEvents; diff --git a/server/api/chat_websites_field/chat_websites_field.socket.js b/server/api/chat_websites_field/chat_websites_field.socket.js index 1057113..8232b06 100644 --- a/server/api/chat_websites_field/chat_websites_field.socket.js +++ b/server/api/chat_websites_field/chat_websites_field.socket.js @@ -1 +1,28 @@ -var _0xedc5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73\x5F\x66\x69\x65\x6C\x64\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73\x5F\x66\x69\x65\x6C\x64\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xedc5[0];const ChatWebsitesFieldEvents=require(_0xedc5[1]);var events=[_0xedc5[2],_0xedc5[3]];exports[_0xedc5[4]]= function(_0x69f6x3){for(var _0x69f6x4=0,_0x69f6x5=events[_0xedc5[5]];_0x69f6x4< _0x69f6x5;_0x69f6x4++){var _0x69f6x6=events[_0x69f6x4];var _0x69f6x7=createListener(_0xedc5[6]+ _0x69f6x6,_0x69f6x3);ChatWebsitesFieldEvents[_0xedc5[7]](_0x69f6x6,_0x69f6x7);_0x69f6x3[_0xedc5[7]](_0xedc5[8],removeListener(_0x69f6x6,_0x69f6x7))}};function createListener(_0x69f6x6,_0x69f6x3){return function(_0x69f6x9){_0x69f6x3[_0xedc5[9]](_0x69f6x6,_0x69f6x9)}}function removeListener(_0x69f6x6,_0x69f6x7){return function(){ChatWebsitesFieldEvents[_0xedc5[10]](_0x69f6x6,_0x69f6x7)}} \ No newline at end of file +'use strict'; + +const ChatWebsitesFieldEvents = require('./chat_websites_field.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('chat_websites_field:' + event, socket); + + ChatWebsitesFieldEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ChatWebsitesFieldEvents.removeListener(event, listener); + }; +} diff --git a/server/api/chat_websites_field/index.js b/server/api/chat_websites_field/index.js index caff1d9..c525bbb 100644 --- a/server/api/chat_websites_field/index.js +++ b/server/api/chat_websites_field/index.js @@ -1 +1,18 @@ -var _0x8940=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x8940[0];var express=require(_0x8940[1]);var auth=require(_0x8940[2]);var controller=require(_0x8940[3]);var license=require(_0x8940[4]);var router=express.Router();router[_0x8940[12]](_0x8940[5],license[_0x8940[6]](),license[_0x8940[7]](),auth[_0x8940[8]](),auth[_0x8940[10]]([8],[_0x8940[9]]),controller[_0x8940[11]]);router[_0x8940[12]](_0x8940[13],license[_0x8940[6]](),license[_0x8940[7]](),auth[_0x8940[8]](),auth[_0x8940[10]]([8],[_0x8940[9]]),controller[_0x8940[14]]);router[_0x8940[16]](_0x8940[5],license[_0x8940[6]](),license[_0x8940[7]](),auth[_0x8940[8]](),auth[_0x8940[10]]([8],[_0x8940[9]]),controller[_0x8940[15]]);router[_0x8940[18]](_0x8940[13],license[_0x8940[6]](),license[_0x8940[7]](),auth[_0x8940[8]](),auth[_0x8940[10]]([8],[_0x8940[9]]),controller[_0x8940[17]]);router[_0x8940[19]](_0x8940[13],license[_0x8940[6]](),license[_0x8940[7]](),auth[_0x8940[8]](),auth[_0x8940[10]]([8],[_0x8940[9]]),controller[_0x8940[17]]);router[_0x8940[21]](_0x8940[13],license[_0x8940[6]](),license[_0x8940[7]](),auth[_0x8940[8]](),auth[_0x8940[10]]([8],[_0x8940[9]]),controller[_0x8940[20]]);module[_0x8940[22]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var auth = require('../../auth/auth.service'); +var controller = require('./chat_websites_field.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.index); +router.get('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.show); +router.post('/', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.create); +router.put('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.update); +router.patch('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.update); +router.delete('/:id', license.isValidDate(), license.hasChat(), auth.isAuthenticated(), auth.hasModule([8], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/company/company.controller.js b/server/api/company/company.controller.js index a6b3aeb..a20f981 100644 --- a/server/api/company/company.controller.js +++ b/server/api/company/company.controller.js @@ -1 +1,146 @@ -var _0x62cb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x43\x6F\x6D\x70\x61\x6E\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x63\x6F\x6D\x70\x61\x6E\x79\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x6E\x61\x6D\x65","\x62\x6F\x64\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x6C\x65\x6E\x67\x74\x68","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x43\x4F\x4D\x50\x41\x4E\x59","\x66\x69\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x62cb[0];var _=require(_0x62cb[1]);var Company=require(_0x62cb[3])[_0x62cb[2]];var util=require(_0x62cb[4]);var Util=require(_0x62cb[5]);exports[_0x62cb[6]]= function(_0x882ex5,_0x882ex6,_0x882ex7){return Company[_0x62cb[13]](Util[_0x62cb[12]](_0x882ex5[_0x62cb[11]]))[_0x62cb[10]](function(_0x882ex9){_0x882ex6[_0x62cb[9]](200)[_0x62cb[8]](_0x882ex9)})[_0x62cb[7]](function(_0x882ex8){return handleError(_0x882ex6,_0x882ex8)})};exports[_0x62cb[14]]= function(_0x882ex5,_0x882ex6){return Company[_0x62cb[18]]({where:{name:_0x882ex5[_0x62cb[17]][_0x62cb[16]]}})[_0x62cb[10]](function(_0x882exa){if(!_0x882exa){return _0x882ex6[_0x62cb[15]](404)};return _0x882ex6[_0x62cb[8]](_0x882exa)})[_0x62cb[7]](function(_0x882ex8){return handleError(_0x882ex6,_0x882ex8)})};exports[_0x62cb[19]]= function(_0x882ex5,_0x882ex6){return Company[_0x62cb[22]](_0x882ex5[_0x62cb[21]][_0x62cb[20]])[_0x62cb[10]](function(_0x882exb){if(!_0x882exb){return _0x882ex6[_0x62cb[15]](404)};return _0x882ex6[_0x62cb[8]](_0x882exb)})[_0x62cb[7]](function(_0x882ex8){return handleError(_0x882ex6,_0x882ex8)})};exports[_0x62cb[23]]= function(_0x882ex5,_0x882ex6){return Company[_0x62cb[23]](_0x882ex5[_0x62cb[17]])[_0x62cb[10]](function(_0x882exb){return _0x882ex6[_0x62cb[9]](201)[_0x62cb[8]](_0x882exb)})[_0x62cb[7]](function(_0x882ex8){return handleError(_0x882ex6,_0x882ex8)})};exports[_0x62cb[24]]= function(_0x882ex5,_0x882ex6){return Company[_0x62cb[18]]({where:{name:_0x882ex5[_0x62cb[17]][_0x62cb[16]],id:{$ne:_0x882ex5[_0x62cb[17]][_0x62cb[20]]}}})[_0x62cb[10]](function(_0x882exa){if(!_0x882exa){return _0x882ex6[_0x62cb[15]](404)};if(_0x882exa[_0x62cb[27]]> 0){return _0x882ex6[_0x62cb[9]](500)[_0x62cb[8]]({message:_0x62cb[28]})};if(_0x882ex5[_0x62cb[17]][_0x62cb[20]]){delete _0x882ex5[_0x62cb[17]][_0x62cb[20]]};return Company[_0x62cb[29]]({where:{id:_0x882ex5[_0x62cb[21]][_0x62cb[20]]}})})[_0x62cb[10]](function(_0x882exb){if(!_0x882exb){return _0x882ex6[_0x62cb[15]](404)};var _0x882exc=_[_0x62cb[25]](_0x882exb,_0x882ex5[_0x62cb[17]]);return _0x882exc[_0x62cb[26]]()})[_0x62cb[10]](function(_0x882exb){return _0x882ex6[_0x62cb[9]](200)[_0x62cb[8]](_0x882exb)})[_0x62cb[7]](function(_0x882ex8){return handleError(_0x882ex6,_0x882ex8)})};exports[_0x62cb[30]]= function(_0x882ex5,_0x882ex6){return Company[_0x62cb[22]](_0x882ex5[_0x62cb[21]][_0x62cb[20]])[_0x62cb[10]](function(_0x882exb){if(!_0x882exb){return _0x882ex6[_0x62cb[15]](404)};return _0x882exb[_0x62cb[30]]()})[_0x62cb[10]](function(){return _0x882ex6[_0x62cb[15]](204)})[_0x62cb[7]](function(_0x882ex8){return handleError(_0x882ex6,_0x882ex8)})};exports[_0x62cb[31]]= function(_0x882ex5,_0x882ex6){return Company[_0x62cb[30]]({where:{id:_0x882ex5[_0x62cb[11]][_0x62cb[32]]},individualHooks:true})[_0x62cb[10]](function(){return _0x882ex6[_0x62cb[15]](204)})[_0x62cb[7]](function(_0x882ex8){return handleError(_0x882ex6,_0x882ex8)})};function handleError(_0x882ex6,_0x882ex8){return _0x882ex6[_0x62cb[9]](500)[_0x62cb[8]](_0x882ex8)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Company = require('../../models').Company; +var util = require('util'); +var Util = require('../../config/util'); + +// Get list of companies +exports.index = function(req, res, next) { + return Company + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.companyValidation = function(req, res) { + return Company + .findAll({ + where: { + name: req.body.name + } + }) + .then(function(companies) { + if (!companies) { + return res.sendStatus(404); + } + return res.send(companies); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single company +exports.show = function(req, res) { + return Company + .findById(req.params.id) + .then(function(company) { + if (!company) { + return res.sendStatus(404); + } + return res.send(company); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new company in the DB. +exports.create = function(req, res) { + return Company + .create(req.body) + .then(function(company) { + return res.status(201).send(company); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing company in the DB. +exports.update = function(req, res) { + return Company + .findAll({ + where: { + name: req.body.name, + id: { + $ne: req.body.id + } + } + }) + .then(function(companies) { + if (!companies) { + return res.sendStatus(404); + } + if (companies.length > 0) { + return res.status(500).send({ + message: 'MESSAGE_EXIST_COMPANY' + }) + } + if (req.body.id) { + delete req.body.id; + } + return Company + .find({ + where: { + id: req.params.id + } + }); + }) + .then(function(company) { + if (!company) { + return res.sendStatus(404); + } + var updated = _.merge(company, req.body); + return updated.save(); + }) + .then(function(company) { + return res.status(200).send(company); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a company from the DB. +exports.destroy = function(req, res) { + return Company + .findById(req.params.id) + .then(function(company) { + if (!company) { + return res.sendStatus(404); + } + return company.destroy() + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.bulkDestroy = function(req, res) { + return Company + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/company/company.events.js b/server/api/company/company.events.js index 8f5ed0f..b232d0d 100644 --- a/server/api/company/company.events.js +++ b/server/api/company/company.events.js @@ -1 +1,36 @@ -var _0xc615=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x6F\x6D\x70\x61\x6E\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xc615[0];const EventEmitter=require(_0xc615[1]);const Company=require(_0xc615[3])[_0xc615[2]];var CompanyEvents= new EventEmitter();CompanyEvents[_0xc615[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xc615[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xc615[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xc615[6]};for(var e in events){var event=events[e];Company[_0xc615[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xd13ex8,_0xd13ex9,_0xd13exa){CompanyEvents[_0xc615[10]](event+ _0xc615[8]+ _0xd13ex8[_0xc615[9]],_0xd13ex8);CompanyEvents[_0xc615[10]](event,_0xd13ex8);_0xd13exa(null)}}module[_0xc615[11]]= CompanyEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Company = require('../../models').Company; + +var CompanyEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +CompanyEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Company.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + CompanyEvents.emit(event + ':' + doc._id, doc); + CompanyEvents.emit(event, doc); + done(null); + } +} + +module.exports = CompanyEvents; diff --git a/server/api/company/company.socket.js b/server/api/company/company.socket.js index f1f96f1..5fb7808 100644 --- a/server/api/company/company.socket.js +++ b/server/api/company/company.socket.js @@ -1 +1,28 @@ -var _0x7d78=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x6F\x6D\x70\x61\x6E\x79\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x6F\x6D\x70\x61\x6E\x79\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x7d78[0];const CompanyEvents=require(_0x7d78[1]);var events=[_0x7d78[2],_0x7d78[3]];exports[_0x7d78[4]]= function(_0x5f4fx3){for(var _0x5f4fx4=0,_0x5f4fx5=events[_0x7d78[5]];_0x5f4fx4< _0x5f4fx5;_0x5f4fx4++){var _0x5f4fx6=events[_0x5f4fx4];var _0x5f4fx7=createListener(_0x7d78[6]+ _0x5f4fx6,_0x5f4fx3);CompanyEvents[_0x7d78[7]](_0x5f4fx6,_0x5f4fx7);_0x5f4fx3[_0x7d78[7]](_0x7d78[8],removeListener(_0x5f4fx6,_0x5f4fx7))}};function createListener(_0x5f4fx6,_0x5f4fx3){return function(_0x5f4fx9){_0x5f4fx3[_0x7d78[9]](_0x5f4fx6,_0x5f4fx9)}}function removeListener(_0x5f4fx6,_0x5f4fx7){return function(){CompanyEvents[_0x7d78[10]](_0x5f4fx6,_0x5f4fx7)}} \ No newline at end of file +'use strict'; + +const CompanyEvents = require('./company.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('company:' + event, socket); + + CompanyEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + CompanyEvents.removeListener(event, listener); + }; +} diff --git a/server/api/company/index.js b/server/api/company/index.js index 620eb3e..af51e8c 100644 --- a/server/api/company/index.js +++ b/server/api/company/index.js @@ -1 +1,18 @@ -var _0xee07=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x6F\x6D\x70\x61\x6E\x79\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x43\x6D","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65","\x63\x6F\x6D\x70\x61\x6E\x79\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xee07[0];var express=require(_0xee07[1]);var controller=require(_0xee07[2]);var auth=require(_0xee07[3]);var license=require(_0xee07[4]);var router=express.Router();router[_0xee07[12]](_0xee07[5],auth[_0xee07[6]](),license[_0xee07[7]](),auth[_0xee07[10]]([5],[_0xee07[8],_0xee07[9]]),controller[_0xee07[11]]);router[_0xee07[12]](_0xee07[13],auth[_0xee07[6]](),license[_0xee07[7]](),auth[_0xee07[10]]([5],[_0xee07[8],_0xee07[9]]),controller[_0xee07[14]]);router[_0xee07[16]](_0xee07[5],auth[_0xee07[6]](),license[_0xee07[7]](),auth[_0xee07[10]]([5],[_0xee07[8]]),controller[_0xee07[15]]);router[_0xee07[16]](_0xee07[17],auth[_0xee07[6]](),license[_0xee07[7]](),auth[_0xee07[10]]([5],[_0xee07[8]]),controller[_0xee07[18]]);router[_0xee07[20]](_0xee07[13],auth[_0xee07[6]](),license[_0xee07[7]](),auth[_0xee07[10]]([5],[_0xee07[8]]),controller[_0xee07[19]]);router[_0xee07[22]](_0xee07[5],auth[_0xee07[6]](),license[_0xee07[7]](),auth[_0xee07[10]]([5],[_0xee07[8]]),controller[_0xee07[21]]);router[_0xee07[22]](_0xee07[13],auth[_0xee07[6]](),license[_0xee07[7]](),auth[_0xee07[10]]([5],[_0xee07[8]]),controller[_0xee07[23]]);module[_0xee07[24]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./company.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.index); +router.get('/:id', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.show); +router.post('/', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.create); +router.post('/validate', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.companyValidation); +router.put('/:id', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/contact_manager/contact_manager.controller.js b/server/api/contact_manager/contact_manager.controller.js index be36d09..bfee7d3 100644 --- a/server/api/contact_manager/contact_manager.controller.js +++ b/server/api/contact_manager/contact_manager.controller.js @@ -1 +1,714 @@ -var _0x597f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x43\x6F\x6E\x74\x61\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x43\x6F\x6E\x74\x61\x63\x74\x50\x68\x6F\x6E\x65","\x43\x6F\x6E\x74\x61\x63\x74\x45\x6D\x61\x69\x6C","\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x52\x6F\x6F\x6D\x48\x69\x73\x74\x6F\x72\x79","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x46\x61\x78\x52\x6F\x6F\x6D","\x53\x6D\x73\x52\x6F\x6F\x6D","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x4C\x69\x73\x74","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C\x48\x69\x73\x74\x6F\x72\x79","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x54\x61\x67","\x73\x74\x72\x65\x61\x6D","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x61\x73\x79\x6E\x63","\x69\x6E\x64\x65\x78","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x72\x6F\x77\x73","\x6D\x65\x72\x67\x65","\x6C\x65\x6E\x67\x74\x68","\x2C","\x6A\x6F\x69\x6E","\x6E\x61\x6D\x65","\x6D\x61\x70","\x53\x45\x4C\x45\x43\x54\x20\x69\x64\x2C\x25\x73\x20\x46\x52\x4F\x4D\x20\x63\x6D\x5F\x63\x6F\x6E\x74\x61\x63\x74\x73\x20\x57\x48\x45\x52\x45\x20\x69\x64\x20\x49\x4E\x20\x28\x27","\x27\x2C\x27","\x69\x64","\x27\x29","\x66\x6F\x72\x6D\x61\x74","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x71\x75\x65\x72\x79","\x6B\x65\x79\x73","\x63\x66\x5F","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x66\x69\x6C\x74\x65\x72","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x64\x65\x73\x63\x72\x69\x62\x65","\x43\x6F\x6D\x70\x61\x6E\x79\x49\x64","\x4C\x69\x73\x74\x49\x64","\x63\x6F\x6E\x63\x61\x74","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x6C\x69\x73\x74","\x63\x6F\x6D\x70\x61\x6E\x79","\x63\x6F\x6D\x70\x61\x6E\x79\x5F\x6C\x69\x73\x74\x5F\x66\x69\x6C\x74\x65\x72","\x73\x63\x6F\x70\x65","\x67\x65\x74\x4C\x69\x73\x74\x73","\x75\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x67\x65\x6E\x74","\x66\x69\x6E\x64","\x66\x6F\x72\x45\x61\x63\x68","\x63\x6F\x75\x6E\x74","\x72\x6F\x6C\x65","\x67\x65\x74\x4C\x6F\x67","\x64\x65\x74\x61\x69\x6C","\x67\x65\x6E\x65\x72\x61\x6C","\x73\x68\x6F\x77","\x70\x68\x6F\x6E\x65","\x6C\x6F\x67\x54\x79\x70\x65","\x6A\x6F\x75\x72\x6E\x61\x6C","\x74\x79\x70\x65","\x69\x6E\x62\x6F\x75\x6E\x64","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x64\x65\x73\x74\x69\x6E\x61\x74\x69\x6F\x6E","\x6D\x6F\x62\x69\x6C\x65","\x73\x6F\x75\x72\x63\x65","\x66\x72\x6F\x6D","\x65\x6D\x61\x69\x6C","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x64\x61\x79","\x73\x74\x61\x72\x74\x4F\x66","\x63\x6F\x6E\x74\x61\x63\x74","\x63\x68\x61\x74","\x66\x61\x78","\x73\x6D\x73","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x71\x75\x65\x75\x65","\x70\x61\x72\x61\x6D\x73","\x6E\x75\x6C\x6C","\x53\x45\x4C\x45\x43\x54\x20\x25\x73\x20\x46\x52\x4F\x4D\x20\x63\x6D\x5F\x63\x6F\x6E\x74\x61\x63\x74\x73\x20\x57\x48\x45\x52\x45\x20\x69\x64\x3D\x25\x73","\x67\x65\x74\x45\x76\x65\x6E\x74\x43\x6F\x6E\x74\x61\x63\x74\x73","\x76\x6F\x69\x63\x65","\x6D\x61\x69\x6C","\x65\x76\x65\x6E\x74\x43\x68\x61\x6E\x6E\x65\x6C","\x63\x72\x65\x61\x74\x65","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x62\x6F\x64\x79","\x25\x73\x3D\x27\x25\x73\x27","\x70\x75\x73\x68","\x55\x50\x44\x41\x54\x45\x20\x63\x6D\x5F\x63\x6F\x6E\x74\x61\x63\x74\x73\x20\x53\x45\x54\x20\x25\x73\x20\x57\x48\x45\x52\x45\x20\x69\x64\x3D\x25\x73","\x55\x73\x65\x72\x49\x64","\x61\x6C\x6C","\x74\x61\x67\x73","\x63\x6F\x70\x79","\x66\x6F\x72\x4F\x77\x6E","\x63\x6C\x6F\x6E\x65","\x3B","\x73\x70\x6C\x69\x74","\x70\x6F\x70","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x63\x6F\x6E\x74\x61\x63\x74\x73","\x6B\x6F","\x6F\x6B","\x66\x6F\x72\x45\x61\x63\x68\x4F\x66","\x75\x6E\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x6F\x6C\x64\x43\x6F\x6E\x74\x61\x63\x74","\x64\x65\x73\x74\x72\x6F\x79","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x597f[0];var _=require(_0x597f[1]);var moment=require(_0x597f[2]);var Contact=require(_0x597f[4])[_0x597f[3]];var User=require(_0x597f[4])[_0x597f[5]];var ContactPhone=require(_0x597f[4])[_0x597f[6]];var ContactEmail=require(_0x597f[4])[_0x597f[7]];var CustomField=require(_0x597f[4])[_0x597f[8]];var ReportCall=require(_0x597f[4])[_0x597f[9]];var ReportQueue=require(_0x597f[4])[_0x597f[10]];var ReportQueueHistory=require(_0x597f[4])[_0x597f[12]][_0x597f[11]];var ReportChatRoom=require(_0x597f[4])[_0x597f[13]];var ReportChatRoomHistory=require(_0x597f[4])[_0x597f[12]][_0x597f[14]];var ChatRoom=require(_0x597f[4])[_0x597f[15]];var FaxRoom=require(_0x597f[4])[_0x597f[16]];var SmsRoom=require(_0x597f[4])[_0x597f[17]];var ReportIntegration=require(_0x597f[4])[_0x597f[18]];var List=require(_0x597f[4])[_0x597f[19]];var ReportCallHistory=require(_0x597f[4])[_0x597f[12]][_0x597f[20]];var ReportMailSession=require(_0x597f[4])[_0x597f[21]];var MailRoom=require(_0x597f[4])[_0x597f[22]];var ReportMailSessionHistory=require(_0x597f[4])[_0x597f[12]][_0x597f[23]];var Tag=require(_0x597f[4])[_0x597f[24]];var stream=require(_0x597f[25]);var sequelize=require(_0x597f[4])[_0x597f[26]];var util=require(_0x597f[27]);var Util=require(_0x597f[28]);var Async=require(_0x597f[29]);exports[_0x597f[30]]= function(_0xe212x1c,_0xe212x1d,_0xe212x1e){var _0xe212x1f,_0xe212x20;switch(_0xe212x1c[_0x597f[68]][_0x597f[74]]){case _0x597f[70]:return User[_0x597f[69]](_0xe212x1c[_0x597f[68]][_0x597f[45]])[_0x597f[35]](function(_0xe212x2c){return _0xe212x2c[_0x597f[67]]()})[_0x597f[35]](function(_0xe212x2b){_0xe212x20= _[_0x597f[42]](_0xe212x2b,_0x597f[45]);return List[_0x597f[55]]({where:{defaultEntry:true},attributes:[_0x597f[45]]})})[_0x597f[35]](function(_0xe212x29){var _0xe212x2a={CompanyId:_0xe212x1c[_0x597f[50]][_0x597f[58]]|| null,ListId:_0xe212x1c[_0x597f[50]][_0x597f[59]]|| null};delete _0xe212x1c[_0x597f[50]][_0x597f[58]];delete _0xe212x1c[_0x597f[50]][_0x597f[59]];return Contact[_0x597f[66]](_0x597f[63],_0x597f[64],{method:[_0x597f[65],_0xe212x2a]})[_0x597f[62]](Util[_0x597f[61]](_0xe212x1c[_0x597f[50]],_0xe212x2a[_0x597f[59]]?{}:{ListId:{$in:_0xe212x20[_0x597f[60]](_[_0x597f[42]](_0xe212x29,_0x597f[45]))}}))})[_0x597f[35]](function(_0xe212x28){_0xe212x1f= {rows:_[_0x597f[42]](_0xe212x28[_0x597f[36]],_0x597f[56]),count:_0xe212x28[_0x597f[36]]};return Contact[_0x597f[57]]()})[_0x597f[35]](function(_0xe212x26){_0xe212x26= _[_0x597f[54]](_[_0x597f[51]](_0xe212x26),function(_0xe212x27){return _[_0x597f[53]](_0xe212x27,_0x597f[52])});return CustomField[_0x597f[55]]({where:{name:_0xe212x26}})})[_0x597f[35]](function(_0xe212x24){if(_0xe212x24[_0x597f[38]]){var _0xe212x25=_[_0x597f[42]](_0xe212x24,_0x597f[41])[_0x597f[40]](_0x597f[39]);return sequelize[_0x597f[50]](util[_0x597f[47]](_0x597f[43]+ _[_0x597f[42]](_0xe212x1f[_0x597f[36]],_0x597f[45])[_0x597f[40]](_0x597f[44])+ _0x597f[46],_0xe212x25),{type:sequelize[_0x597f[49]][_0x597f[48]]})}})[_0x597f[35]](function(_0xe212x23){_[_0x597f[37]](_0xe212x1f[_0x597f[36]],_0xe212x23);return _0xe212x1f})[_0x597f[35]](function(_0xe212x22){_0xe212x1d[_0x597f[34]](200)[_0x597f[33]](_0xe212x22)})[_0x597f[32]](function(_0xe212x21){console[_0x597f[31]](_0xe212x21);return handleError(_0xe212x1d,_0xe212x21)});default:var _0xe212x2a={CompanyId:_0xe212x1c[_0x597f[50]][_0x597f[58]]|| null,ListId:_0xe212x1c[_0x597f[50]][_0x597f[59]]|| null};delete _0xe212x1c[_0x597f[50]][_0x597f[58]];delete _0xe212x1c[_0x597f[50]][_0x597f[59]];return Contact[_0x597f[66]](_0x597f[63],_0x597f[64],{method:[_0x597f[65],_0xe212x2a]})[_0x597f[62]](Util[_0x597f[61]](_0xe212x1c[_0x597f[50]]))[_0x597f[35]](function(_0xe212x28){_0xe212x1f= {rows:_[_0x597f[42]](_0xe212x28[_0x597f[36]],_0x597f[56]),count:_0xe212x28[_0x597f[73]]};return Contact[_0x597f[57]]()})[_0x597f[35]](function(_0xe212x26){_0xe212x26= _[_0x597f[54]](_[_0x597f[51]](_0xe212x26),function(_0xe212x27){return _[_0x597f[53]](_0xe212x27,_0x597f[52])});return CustomField[_0x597f[55]]({where:{name:_0xe212x26}})})[_0x597f[35]](function(_0xe212x24){if(_0xe212x1f[_0x597f[36]][_0x597f[38]]&& _0xe212x24[_0x597f[38]]){var _0xe212x25=_[_0x597f[42]](_0xe212x24,_0x597f[41])[_0x597f[40]](_0x597f[39]);return sequelize[_0x597f[50]](util[_0x597f[47]](_0x597f[43]+ _[_0x597f[42]](_0xe212x1f[_0x597f[36]],_0x597f[45])[_0x597f[40]](_0x597f[44])+ _0x597f[46],_0xe212x25),{type:sequelize[_0x597f[49]][_0x597f[48]]})}})[_0x597f[35]](function(_0xe212x23){var _0xe212x2d;_[_0x597f[72]](_0xe212x1f[_0x597f[36]],function(_0xe212x2e){_0xe212x2d= _[_0x597f[71]](_0xe212x23,{id:_0xe212x2e[_0x597f[45]]});if(_0xe212x2d){_[_0x597f[37]](_0xe212x2e,_0xe212x2d)}});return _0xe212x1f})[_0x597f[35]](function(_0xe212x22){_0xe212x1d[_0x597f[34]](200)[_0x597f[33]](_0xe212x22)})[_0x597f[32]](function(_0xe212x21){console[_0x597f[31]](_0xe212x21);return handleError(_0xe212x1d,_0xe212x21)})}};exports[_0x597f[57]]= function(_0xe212x1c,_0xe212x1d){return Contact[_0x597f[57]]()[_0x597f[35]](function(_0xe212x26){return _0xe212x1d[_0x597f[34]](200)[_0x597f[33]](_0xe212x26)})[_0x597f[32]](function(_0xe212x21){return handleError(_0xe212x1d,_0xe212x21)})};exports[_0x597f[75]]= function(_0xe212x1c,_0xe212x1d,_0xe212x1e){_0xe212x1c[_0x597f[50]][_0x597f[76]]= _0xe212x1c[_0x597f[50]][_0x597f[76]]|| _0x597f[77];_0xe212x1c[_0x597f[50]][_0x597f[78]]= _0xe212x1c[_0x597f[50]][_0x597f[78]]|| _0x597f[79];_0xe212x1c[_0x597f[50]][_0x597f[80]]= _0xe212x1c[_0x597f[50]][_0x597f[80]]|| _0x597f[81];_0xe212x1c[_0x597f[50]][_0x597f[82]]= _0xe212x1c[_0x597f[50]][_0x597f[82]]|| _0x597f[83];var _0xe212x2f,_0xe212x30={};return Contact[_0x597f[69]](_0xe212x1c[_0x597f[100]][_0x597f[45]])[_0x597f[35]](function(_0xe212x31){if(!_0xe212x31){return _0xe212x1d[_0x597f[84]](404)};switch(_0xe212x1c[_0x597f[50]][_0x597f[76]]){case _0x597f[77]:switch(_0xe212x1c[_0x597f[50]][_0x597f[78]]){case _0x597f[79]:_0xe212x2f= (_0xe212x1c[_0x597f[50]][_0x597f[80]]=== _0x597f[12])?ReportCallHistory:ReportCall;if(_0xe212x1c[_0x597f[50]][_0x597f[82]]=== _0x597f[85]){_0xe212x30[_0x597f[86]]= [_0xe212x31[_0x597f[79]],_0xe212x31[_0x597f[87]]]}else {_0xe212x30[_0x597f[88]]= [_0xe212x31[_0x597f[79]],_0xe212x31[_0x597f[87]]]};break;case _0x597f[90]:_0xe212x2f= MailRoom;_0xe212x30[_0x597f[89]]= _0xe212x31[_0x597f[90]];if(_0xe212x1c[_0x597f[50]][_0x597f[80]]=== _0x597f[12]){_0xe212x30[_0x597f[91]]= {$lt:moment()[_0x597f[93]](_0x597f[92])}}else {_0xe212x30[_0x597f[91]]= {$gte:moment()[_0x597f[93]](_0x597f[92])}};break;case _0x597f[95]:_0xe212x2f= ChatRoom;_0xe212x30[_0x597f[94]]= _0xe212x31[_0x597f[90]];if(_0xe212x1c[_0x597f[50]][_0x597f[80]]=== _0x597f[12]){_0xe212x30[_0x597f[91]]= {$lt:moment()[_0x597f[93]](_0x597f[92])}}else {_0xe212x30[_0x597f[91]]= {$gte:moment()[_0x597f[93]](_0x597f[92])}};break;case _0x597f[96]:_0xe212x2f= FaxRoom;_0xe212x30[_0x597f[94]]= _0xe212x31[_0x597f[96]];if(_0xe212x1c[_0x597f[50]][_0x597f[80]]=== _0x597f[12]){_0xe212x30[_0x597f[91]]= {$lt:moment()[_0x597f[93]](_0x597f[92])}}else {_0xe212x30[_0x597f[91]]= {$gte:moment()[_0x597f[93]](_0x597f[92])}};break;case _0x597f[97]:_0xe212x2f= SmsRoom;_0xe212x30[_0x597f[94]]= [_0xe212x31[_0x597f[79]],_0xe212x31[_0x597f[87]]];if(_0xe212x1c[_0x597f[50]][_0x597f[80]]=== _0x597f[12]){_0xe212x30[_0x597f[91]]= {$lt:moment()[_0x597f[93]](_0x597f[92])}}else {_0xe212x30[_0x597f[91]]= {$gte:moment()[_0x597f[93]](_0x597f[92])}};break;default:_0xe212x2f= (_0xe212x1c[_0x597f[50]][_0x597f[80]]=== _0x597f[12])?ReportCallHistory:ReportCall};break;case _0x597f[99]:switch(_0xe212x1c[_0x597f[50]][_0x597f[78]]){case _0x597f[79]:_0xe212x2f= (_0xe212x1c[_0x597f[50]][_0x597f[80]]=== _0x597f[12])?ReportQueueHistory:ReportQueue;_0xe212x30[_0x597f[98]]= [_0xe212x31[_0x597f[79]],_0xe212x31[_0x597f[87]]];break;case _0x597f[90]:return _0xe212x1d[_0x597f[84]](404);default:_0xe212x2f= (_0xe212x1c[_0x597f[50]][_0x597f[80]]=== _0x597f[12])?ReportQueueHistory:ReportQueue};break;default:_0xe212x2f= ReportCall};delete _0xe212x1c[_0x597f[50]][_0x597f[76]];delete _0xe212x1c[_0x597f[50]][_0x597f[78]];delete _0xe212x1c[_0x597f[50]][_0x597f[80]];delete _0xe212x1c[_0x597f[50]][_0x597f[82]];return _0xe212x2f[_0x597f[62]](Util[_0x597f[61]](_0xe212x1c[_0x597f[50]],_0xe212x30))})[_0x597f[35]](function(_0xe212x22){_0xe212x1d[_0x597f[34]](200)[_0x597f[33]](_0xe212x22)})[_0x597f[32]](function(_0xe212x21){console[_0x597f[31]](_0xe212x21);return handleError(_0xe212x1d,_0xe212x21)})};exports[_0x597f[78]]= function(_0xe212x1c,_0xe212x1d){var _0xe212x32;return Contact[_0x597f[66]](_0x597f[63],_0x597f[68],_0x597f[64])[_0x597f[69]](_0xe212x1c[_0x597f[100]][_0x597f[45]])[_0x597f[35]](function(_0xe212x37){if(!_0xe212x37){return _0xe212x1d[_0x597f[84]](404)};_0xe212x32= _0xe212x37;return CustomField[_0x597f[55]]({where:{ListId:_0xe212x32[_0x597f[59]]}})})[_0x597f[35]](function(_0xe212x24){if(_0xe212x24[_0x597f[38]]){var _0xe212x25=_[_0x597f[42]](_0xe212x24,_0x597f[41])[_0x597f[40]](_0x597f[39]);return sequelize[_0x597f[50]](util[_0x597f[47]](_0x597f[102],_0xe212x25,_0xe212x1c[_0x597f[100]][_0x597f[45]]),{type:sequelize[_0x597f[49]][_0x597f[48]]})}})[_0x597f[35]](function(_0xe212x33){if(_0xe212x33){_[_0x597f[72]](_0xe212x33[0],function(_0xe212x34,_0xe212x35,_0xe212x36){if(_0xe212x34=== _0x597f[101]){_0xe212x36[_0xe212x35]= null}});_[_0x597f[37]](_0xe212x32[_0x597f[56]],_0xe212x33[0])}})[_0x597f[35]](function(){return _0xe212x1d[_0x597f[34]](200)[_0x597f[33]](_0xe212x32)})[_0x597f[32]](function(_0xe212x21){console[_0x597f[31]](_0xe212x21);return handleError(_0xe212x1d,_0xe212x21)})};exports[_0x597f[103]]= function(_0xe212x1c,_0xe212x1d){return ReportIntegration[_0x597f[69]](_0xe212x1c[_0x597f[100]][_0x597f[45]])[_0x597f[35]](function(_0xe212x38){var _0xe212x30={};switch(_0xe212x38[_0x597f[106]]){case _0x597f[104]:_0xe212x30= {$or:{phone:_0xe212x38[_0x597f[98]],mobile:_0xe212x38[_0x597f[98]]}};break;case _0x597f[105]:_0xe212x30= {email:_0xe212x38[_0x597f[89]]};break;default:_0xe212x30= {}};return Contact[_0x597f[62]]({where:_0xe212x30,include:[{model:List,where:{$or:{id:_[_0x597f[42]](_[_0x597f[42]](_0xe212x1c[_0x597f[68]].Lists,_0x597f[56]),_0x597f[45]),defaultEntry:true}}}]})})[_0x597f[35]](function(_0xe212x28){return _0xe212x1d[_0x597f[34]](200)[_0x597f[33]](_0xe212x28)})[_0x597f[32]](function(_0xe212x21){console[_0x597f[31]](_0xe212x21);return handleError(_0xe212x1d,_0xe212x21)})};exports[_0x597f[107]]= function(_0xe212x1c,_0xe212x1d,_0xe212x1e){var _0xe212x32;return Tag[_0x597f[55]]()[_0x597f[35]](function(_0xe212x39){var _0xe212x3a=[];var _0xe212x3b=_[_0x597f[42]](_[_0x597f[42]](_0xe212x39,_0x597f[56]),_0x597f[41]);if(_0xe212x1c[_0x597f[109]][_0x597f[115]]){_0xe212x1c[_0x597f[109]][_0x597f[115]][_0x597f[72]](function(_0xe212x27){if(!_[_0x597f[53]](_0xe212x3b,_0xe212x27)){_0xe212x3a[_0x597f[111]](Tag[_0x597f[107]]({name:_0xe212x27}))}})};return _0xe212x3a})[_0x597f[114]]()[_0x597f[35]](function(){_0xe212x1c[_0x597f[109]][_0x597f[113]]= _0xe212x1c[_0x597f[68]][_0x597f[45]];return Contact[_0x597f[107]](_0xe212x1c[_0x597f[109]])})[_0x597f[35]](function(_0xe212x31){_0xe212x32= _0xe212x31;return CustomField[_0x597f[55]]({where:{ListId:_0xe212x32[_0x597f[59]]}})})[_0x597f[35]](function(_0xe212x24){if(_0xe212x24[_0x597f[38]]){var _0xe212x25=[];_0xe212x24[_0x597f[72]](function(_0xe212x27){if(_0xe212x1c[_0x597f[109]][_0x597f[108]](_0xe212x27[_0x597f[41]])){_0xe212x25[_0x597f[111]](util[_0x597f[47]](_0x597f[110],_0xe212x27[_0x597f[41]],_0xe212x1c[_0x597f[109]][_0xe212x27[_0x597f[41]]]))}});if(_0xe212x25[_0x597f[38]]){_0xe212x25= _0xe212x25[_0x597f[40]](_0x597f[39]);return sequelize[_0x597f[50]](util[_0x597f[47]](_0x597f[112],_0xe212x25,_0xe212x32[_0x597f[45]]))}}})[_0x597f[35]](function(){return _0xe212x1d[_0x597f[34]](201)[_0x597f[33]](_0xe212x32)})[_0x597f[32]](function(_0xe212x21){console[_0x597f[31]](_0xe212x21);return _0xe212x1e(_0xe212x21)})};exports[_0x597f[116]]= function(_0xe212x1c,_0xe212x1d,_0xe212x1e){var _0xe212x32,_0xe212x3c;return Contact[_0x597f[69]](_0xe212x1c[_0x597f[100]][_0x597f[45]])[_0x597f[35]](function(_0xe212x31){_0xe212x32= _0xe212x31[_0x597f[56]];_0xe212x3c= _[_0x597f[118]](_0xe212x31[_0x597f[56]]);delete _0xe212x3c[_0x597f[45]];_0xe212x3c[_0x597f[113]]= _0xe212x1c[_0x597f[68]][_0x597f[45]];_0xe212x3c[_0x597f[59]]= _0xe212x1c[_0x597f[109]][_0x597f[59]];_0xe212x3c[_0x597f[115]]= _0xe212x3c[_0x597f[115]]?_0xe212x3c[_0x597f[115]][_0x597f[120]](_0x597f[119]):[];if(_0xe212x3c[_0x597f[115]][_0x597f[38]]> 1){_0xe212x3c[_0x597f[115]][_0x597f[121]]()};return Contact[_0x597f[107]](_0xe212x3c)})[_0x597f[35]](function(_0xe212x3d){_0xe212x3c= _0xe212x3d;if(_0xe212x32[_0x597f[59]]=== _0xe212x1c[_0x597f[109]][_0x597f[59]]){return CustomField[_0x597f[55]]({where:{ListId:_0xe212x32[_0x597f[59]]}})}})[_0x597f[35]](function(_0xe212x24){if(_0xe212x24&& _0xe212x24[_0x597f[38]]){var _0xe212x25=_[_0x597f[42]](_0xe212x24,_0x597f[41])[_0x597f[40]](_0x597f[39]);return sequelize[_0x597f[50]](util[_0x597f[47]](_0x597f[102],_0xe212x25,_0xe212x32[_0x597f[45]]),{type:sequelize[_0x597f[49]][_0x597f[48]]})}})[_0x597f[35]](function(_0xe212x33){if(_0xe212x33){var _0xe212x25=[];_[_0x597f[117]](_0xe212x33[0],function(_0xe212x34,_0xe212x35){_0xe212x25[_0x597f[111]](util[_0x597f[47]](_0x597f[110],_0xe212x35,_0xe212x34))});if(_0xe212x25[_0x597f[38]]){_0xe212x25= _0xe212x25[_0x597f[40]](_0x597f[39]);return sequelize[_0x597f[50]](util[_0x597f[47]](_0x597f[112],_0xe212x25,_0xe212x3c[_0x597f[45]]))}}})[_0x597f[35]](function(){return _0xe212x1d[_0x597f[34]](201)[_0x597f[33]](_0xe212x3c)})[_0x597f[32]](function(_0xe212x21){console[_0x597f[31]](_0xe212x21);return _0xe212x1e(_0xe212x21)})};exports[_0x597f[122]]= function(_0xe212x1c,_0xe212x1d,_0xe212x1e){var _0xe212x3e=[];var _0xe212x3f={ok:0,ko:0};return Tag[_0x597f[55]]()[_0x597f[35]](function(_0xe212x39){var _0xe212x3a=[],_0xe212x42=[];var _0xe212x3b=_[_0x597f[42]](_[_0x597f[42]](_0xe212x39,_0x597f[56]),_0x597f[41]);_0xe212x1c[_0x597f[109]][_0x597f[123]][_0x597f[72]](function(_0xe212x31){if(_0xe212x31[_0x597f[115]]){_0xe212x42= _[_0x597f[127]](_0xe212x42,_0xe212x31[_0x597f[115]])}});_0xe212x42[_0x597f[72]](function(_0xe212x27){if(!_[_0x597f[53]](_0xe212x3b,_0xe212x27)){_0xe212x3a[_0x597f[111]](Tag[_0x597f[107]]({name:_0xe212x27}))}});return _0xe212x3a})[_0x597f[114]]()[_0x597f[35]](function(){var _0xe212x41=[];Async[_0x597f[126]](_0xe212x1c[_0x597f[109]][_0x597f[123]],function(_0xe212x31){_0xe212x31[_0x597f[113]]= _0xe212x1c[_0x597f[68]][_0x597f[45]];_0xe212x41[_0x597f[111]](Contact[_0x597f[107]](_0xe212x31)[_0x597f[35]](function(_0xe212x31){_0xe212x3e[_0x597f[111]](_0xe212x31);_0xe212x3f[_0x597f[125]]++})[_0x597f[32]](function(_0xe212x21){_0xe212x3f[_0x597f[124]]++}))});return _0xe212x41})[_0x597f[114]]()[_0x597f[35]](function(){return CustomField[_0x597f[55]]({where:{ListId:{$in:_[_0x597f[42]](_0xe212x1c[_0x597f[109]][_0x597f[123]],_0x597f[59])}}})})[_0x597f[35]](function(_0xe212x24){var _0xe212x40=[];if(_0xe212x24[_0x597f[38]]){var _0xe212x25=[];_0xe212x3e[_0x597f[72]](function(_0xe212x31){_0xe212x25= [];_0xe212x24[_0x597f[72]](function(_0xe212x27){if(_0xe212x31[_0x597f[108]](_0xe212x27[_0x597f[41]])){_0xe212x25[_0x597f[111]](util[_0x597f[47]](_0x597f[110],_0xe212x27[_0x597f[41]],_0xe212x1c[_0x597f[109]][_0xe212x27[_0x597f[41]]]))}});if(_0xe212x25[_0x597f[38]]){_0xe212x25= _0xe212x25[_0x597f[40]](_0x597f[39]);_0xe212x40[_0x597f[111]](sequelize[_0x597f[50]](util[_0x597f[47]](_0x597f[112],_0xe212x25,_0xe212x31[_0x597f[45]])))}})};return _0xe212x40})[_0x597f[114]]()[_0x597f[35]](function(){return _0xe212x1d[_0x597f[34]](201)[_0x597f[33]](_0xe212x3f)})[_0x597f[32]](function(_0xe212x21){console[_0x597f[31]](_0xe212x21);return _0xe212x1e(_0xe212x21)})};exports[_0x597f[128]]= function(_0xe212x1c,_0xe212x1d,_0xe212x1e){return Promise[_0x597f[114]]([])[_0x597f[35]](updateContact(_0xe212x1c,_0xe212x1d))[_0x597f[35]](function(_0xe212x31){return _0xe212x1d[_0x597f[34]](200)[_0x597f[33]](_0xe212x31)})[_0x597f[32]](function(_0xe212x21){console[_0x597f[31]](_0xe212x21);return handleError(_0xe212x1d,_0xe212x21)})};exports[_0x597f[37]]= function(_0xe212x1c,_0xe212x1d,_0xe212x1e){var _0xe212x32;return Promise[_0x597f[114]]([])[_0x597f[35]](updateContact(_0xe212x1c,_0xe212x1d))[_0x597f[35]](function(_0xe212x31){_0xe212x32= _0xe212x31;if(_0xe212x1c[_0x597f[109]][_0x597f[129]]){return Contact[_0x597f[130]]({where:{id:_0xe212x1c[_0x597f[109]][_0x597f[129]]},individualHooks:true})}})[_0x597f[35]](function(){return _0xe212x1d[_0x597f[34]](200)[_0x597f[33]](_0xe212x32)})[_0x597f[32]](function(_0xe212x21){console[_0x597f[31]](_0xe212x21);return handleError(_0xe212x1d,_0xe212x21)})};function updateContact(_0xe212x1c,_0xe212x1d){return function(){var _0xe212x32;return Tag[_0x597f[55]]()[_0x597f[35]](function(_0xe212x39){var _0xe212x3a=[];var _0xe212x3b=_[_0x597f[42]](_[_0x597f[42]](_0xe212x39,_0x597f[56]),_0x597f[41]);if(_0xe212x1c[_0x597f[109]][_0x597f[115]]){_0xe212x1c[_0x597f[109]][_0x597f[115]][_0x597f[72]](function(_0xe212x27){if(!_[_0x597f[53]](_0xe212x3b,_0xe212x27)){_0xe212x3a[_0x597f[111]](Tag[_0x597f[107]]({name:_0xe212x27}))}})};return _0xe212x3a})[_0x597f[35]](function(){return Contact[_0x597f[69]](_0xe212x1c[_0x597f[100]][_0x597f[45]])})[_0x597f[35]](function(_0xe212x31){if(!_0xe212x31){return _0xe212x1d[_0x597f[84]](404)};delete _0xe212x1c[_0x597f[109]][_0x597f[45]];return _0xe212x31[_0x597f[131]](_0xe212x1c[_0x597f[109]])})[_0x597f[35]](function(_0xe212x31){_0xe212x32= _0xe212x31;return CustomField[_0x597f[55]]({where:{ListId:_0xe212x32[_0x597f[59]]}})})[_0x597f[35]](function(_0xe212x24){if(_0xe212x24[_0x597f[38]]){var _0xe212x25=[];_0xe212x24[_0x597f[72]](function(_0xe212x27){if(_0xe212x1c[_0x597f[109]][_0x597f[108]](_0xe212x27[_0x597f[41]])){_0xe212x25[_0x597f[111]](util[_0x597f[47]](_0x597f[110],_0xe212x27[_0x597f[41]],_0xe212x1c[_0x597f[109]][_0xe212x27[_0x597f[41]]]))}});if(_0xe212x25[_0x597f[38]]){_0xe212x25= _0xe212x25[_0x597f[40]](_0x597f[39]);return sequelize[_0x597f[50]](util[_0x597f[47]](_0x597f[112],_0xe212x25,_0xe212x32[_0x597f[45]]))}}})[_0x597f[35]](function(){return _0xe212x32})}}exports[_0x597f[130]]= function(_0xe212x1c,_0xe212x1d){return Contact[_0x597f[69]](_0xe212x1c[_0x597f[100]][_0x597f[45]])[_0x597f[35]](function(_0xe212x37){if(!_0xe212x37){return _0xe212x1d[_0x597f[84]](404)};return _0xe212x37[_0x597f[130]]()})[_0x597f[35]](function(){return _0xe212x1d[_0x597f[84]](204)})[_0x597f[32]](function(_0xe212x21){return handleError(_0xe212x1d,_0xe212x21)})};exports[_0x597f[132]]= function(_0xe212x1c,_0xe212x1d){return Contact[_0x597f[130]]({where:{id:_0xe212x1c[_0x597f[50]][_0x597f[133]]},individualHooks:true})[_0x597f[35]](function(){return _0xe212x1d[_0x597f[84]](204)})[_0x597f[32]](function(_0xe212x21){return handleError(_0xe212x1d,_0xe212x21)})};function handleError(_0xe212x1d,_0xe212x21){return _0xe212x1d[_0x597f[34]](500)[_0x597f[33]](_0xe212x21)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var moment = require('moment'); +var Contact = require('../../models').Contact; +var User = require('../../models').User; +var ContactPhone = require('../../models').ContactPhone; +var ContactEmail = require('../../models').ContactEmail; +var CustomField = require('../../models').CustomField; +var ReportCall = require('../../models').ReportCall; +var ReportQueue = require('../../models').ReportQueue; +var ReportQueueHistory = require('../../models').history.ReportQueueHistory; +var ReportChatRoom = require('../../models').ReportChatRoom; +var ReportChatRoomHistory = require('../../models').history.ReportChatRoomHistory; +var ChatRoom = require('../../models').ChatRoom; +var FaxRoom = require('../../models').FaxRoom; +var SmsRoom = require('../../models').SmsRoom; +var ReportIntegration = require('../../models').ReportIntegration; +var List = require('../../models').List; +var ReportCallHistory = require('../../models').history.ReportCallHistory; +var ReportMailSession = require('../../models').ReportMailSession; +var MailRoom = require('../../models').MailRoom; +var ReportMailSessionHistory = require('../../models').history.ReportMailSessionHistory; +var Tag = require('../../models').Tag; +var stream = require('stream'); +var sequelize = require('../../models').sequelize; +var util = require('util'); +var Util = require('../../config/util'); +var Async = require('async'); + +// Get list of contacts +exports.index = function(req, res, next) { + var results, _agentLists; + switch (req.user.role) { + case 'agent': + return User + .findById(req.user.id) + .then(function(agent) { + return agent.getLists(); + }) + .then(function(lists) { + _agentLists = _.map(lists, 'id'); + return List + .findAll({ + where: { + defaultEntry: true + }, + attributes: ['id'] + }); + }) + .then(function(defaultLists) { + var company_list_query = { + CompanyId: req.query.CompanyId || null, + ListId: req.query.ListId || null, + }; + delete req.query.CompanyId; + delete req.query.ListId; + return Contact + .scope('list', 'company', { + method: ['company_list_filter', company_list_query] + }) + .findAndCountAll(Util.getQuery(req.query, company_list_query.ListId ? {} : { + ListId: { + $in: _agentLists.concat(_.map(defaultLists, 'id')) + } + })); + }) + .then(function(contacts) { + results = { + rows: _.map(contacts.rows, 'dataValues'), + count: contacts.rows + }; + return Contact + .describe(); + }) + .then(function(fields) { + fields = _.filter(_.keys(fields), function(elem) { + return _.includes(elem, 'cf_'); + }); + return CustomField + .findAll({ + where: { + name: fields + } + }); + }) + .then(function(customFields) { + if (customFields.length) { + var cfs = _.map(customFields, 'name').join(','); + return sequelize.query(util.format('SELECT id,%s FROM cm_contacts WHERE id IN (\'' + _.map(results.rows, 'id').join("','") + '\')', cfs), { + type: sequelize.QueryTypes.SELECT + }); + } + }) + .then(function(contactsCf) { + _.merge(results.rows, contactsCf); + return results; + }) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + default: + var company_list_query = { + CompanyId: req.query.CompanyId || null, + ListId: req.query.ListId || null, + }; + delete req.query.CompanyId; + delete req.query.ListId; + return Contact + .scope('list', 'company', { + method: ['company_list_filter', company_list_query] + }) + .findAndCountAll(Util.getQuery(req.query)) + .then(function(contacts) { + results = { + rows: _.map(contacts.rows, 'dataValues'), + count: contacts.count + }; + return Contact + .describe(); + }) + .then(function(fields) { + fields = _.filter(_.keys(fields), function(elem) { + return _.includes(elem, 'cf_'); + }); + return CustomField + .findAll({ + where: { + name: fields + } + }); + }) + .then(function(customFields) { + if (results.rows.length && customFields.length) { + var cfs = _.map(customFields, 'name').join(','); + return sequelize.query(util.format('SELECT id,%s FROM cm_contacts WHERE id IN (\'' + _.map(results.rows, 'id').join("','") + '\')', cfs), { + type: sequelize.QueryTypes.SELECT + }); + } + }) + .then(function(contactsCf) { + var cfRow; + _.forEach(results.rows, function(row) { + cfRow = _.find(contactsCf, { + id: row.id + }); + if (cfRow) { + _.merge(row, cfRow); + } + }); + return results; + }) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + } +}; + +// Get list of fields +exports.describe = function(req, res) { + return Contact + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getLog = function(req, res, next) { + req.query.detail = req.query.detail || 'general'; + req.query.show = req.query.show || 'phone'; + req.query.logType = req.query.logType || 'journal'; + req.query.type = req.query.type || 'inbound'; + var Api, where = {}; + return Contact + .findById(req.params.id) + .then(function(contact) { + if (!contact) { + return res.sendStatus(404); + } + switch (req.query.detail) { + case 'general': + switch (req.query.show) { + case 'phone': + Api = (req.query.logType === 'history') ? ReportCallHistory : ReportCall; + if (req.query.type === 'outbound') { + where.destination = [contact.phone, contact.mobile]; + } else { + where.source = [contact.phone, contact.mobile]; + } + break; + case 'email': + Api = MailRoom; + where.from = contact.email; + if (req.query.logType === 'history') { + where.createdAt = { + $lt: moment().startOf('day') + } + } else { + where.createdAt = { + $gte: moment().startOf('day') + } + } + break; + case 'chat': + Api = ChatRoom; + where.contact = contact.email; + if (req.query.logType === 'history') { + where.createdAt = { + $lt: moment().startOf('day') + } + } else { + where.createdAt = { + $gte: moment().startOf('day') + } + } + break; + case 'fax': + Api = FaxRoom; + where.contact = contact.fax; + if (req.query.logType === 'history') { + where.createdAt = { + $lt: moment().startOf('day') + } + } else { + where.createdAt = { + $gte: moment().startOf('day') + } + } + break; + case 'sms': + Api = SmsRoom; + where.contact = [contact.phone, contact.mobile]; + if (req.query.logType === 'history') { + where.createdAt = { + $lt: moment().startOf('day') + } + } else { + where.createdAt = { + $gte: moment().startOf('day') + } + } + break; + default: + Api = (req.query.logType === 'history') ? ReportCallHistory : ReportCall; + } + break; + case 'queue': + switch (req.query.show) { + case 'phone': + Api = (req.query.logType === 'history') ? ReportQueueHistory : ReportQueue; + where.calleridnum = [contact.phone, contact.mobile]; + break; + case 'email': + return res.sendStatus(404); + default: + Api = (req.query.logType === 'history') ? ReportQueueHistory : ReportQueue; + } + break; + default: + Api = ReportCall; + } + delete req.query.detail; + delete req.query.show; + delete req.query.logType; + delete req.query.type; + return Api + .findAndCountAll(Util.getQuery(req.query, where)); + }) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + +}; + +// Get a single managed_contact +exports.show = function(req, res) { + var _contact; + return Contact + .scope('list', 'user', 'company') + .findById(req.params.id) + .then(function(managed_contact) { + if (!managed_contact) { + return res.sendStatus(404); + } + _contact = managed_contact; + return CustomField + .findAll({ + where: { + ListId: _contact.ListId + } + }); + }) + .then(function(customFields) { + if (customFields.length) { + var cfs = _.map(customFields, 'name').join(','); + return sequelize.query(util.format('SELECT %s FROM cm_contacts WHERE id=%s', cfs, req.params.id), { + type: sequelize.QueryTypes.SELECT + }); + } + }) + .then(function(cfValues) { + if (cfValues) { + _.forEach(cfValues[0], function(value, key, array) { + if (value === 'null') { + array[key] = null; + } + }); + _.merge(_contact.dataValues, cfValues[0]); + } + }) + .then(function() { + return res.status(200).send(_contact); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.getEventContacts = function(req, res) { + return ReportIntegration + .findById(req.params.id) + .then(function(event) { + var where = {}; + switch (event.eventChannel) { + case 'voice': + where = { + $or: { + phone: event.calleridnum, + mobile: event.calleridnum + } + }; + break; + case 'mail': + where = { + email: event.from + }; + break; + default: + where = {}; + } + return Contact.findAndCountAll({ + where: where, + include: [{ + model: List, + where: { + $or: { + id: _.map(_.map(req.user.Lists, 'dataValues'), 'id'), + defaultEntry: true + } + } + }] + }); + }) + .then(function(contacts) { + return res.status(200).send(contacts); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + +}; + +// Creates a new managed_contact in the DB. +exports.create = function(req, res, next) { + var _contact; + return Tag + .findAll() + .then(function(tags) { + var newTags = []; + var tagList = _.map(_.map(tags, 'dataValues'), 'name'); + if (req.body.tags) { + req.body.tags.forEach(function(elem) { + if (!_.includes(tagList, elem)) { + newTags.push(Tag.create({ + name: elem + })); + } + }); + } + return newTags; + }) + .all() + .then(function() { + req.body.UserId = req.user.id; + return Contact.create(req.body); + }) + .then(function(contact) { + _contact = contact; + + return CustomField + .findAll({ + where: { + ListId: _contact.ListId + } + }); + }) + .then(function(customFields) { + if (customFields.length) { + var cfs = []; + customFields.forEach(function(elem) { + if (req.body.hasOwnProperty(elem.name)) { + cfs.push(util.format('%s=\'%s\'', elem.name, req.body[elem.name])); + } + }); + if (cfs.length) { + cfs = cfs.join(','); + return sequelize.query(util.format('UPDATE cm_contacts SET %s WHERE id=%s', cfs, _contact.id)); + } + } + }) + .then(function() { + return res.status(201).send(_contact); + }) + .catch(function(err) { + console.log(err); + return next(err); + }); +}; + +exports.copy = function(req, res, next) { + var _contact, _newContact; + return Contact + .findById(req.params.id) + .then(function(contact) { + _contact = contact.dataValues; + _newContact = _.clone(contact.dataValues); + delete _newContact.id; + _newContact.UserId = req.user.id; + _newContact.ListId = req.body.ListId; + _newContact.tags = _newContact.tags ? _newContact.tags.split(';') : []; + if (_newContact.tags.length > 1) { + _newContact.tags.pop(); + } + return Contact + .create(_newContact); + }) + .then(function(newContact) { + _newContact = newContact; + if (_contact.ListId === req.body.ListId) { + return CustomField + .findAll({ + where: { + ListId: _contact.ListId + } + }); + } + }) + .then(function(customFields) { + if (customFields && customFields.length) { + var cfs = _.map(customFields, 'name').join(','); + return sequelize.query(util.format('SELECT %s FROM cm_contacts WHERE id=%s', cfs, _contact.id), { + type: sequelize.QueryTypes.SELECT + }); + } + }) + .then(function(cfValues) { + if (cfValues) { + var cfs = []; + _.forOwn(cfValues[0], function(value, key) { + cfs.push(util.format('%s=\'%s\'', key, value)); + }); + if (cfs.length) { + cfs = cfs.join(','); + return sequelize.query(util.format('UPDATE cm_contacts SET %s WHERE id=%s', cfs, _newContact.id)); + } + } + }) + .then(function() { + return res.status(201).send(_newContact); + }) + .catch(function(err) { + console.log(err); + return next(err); + }); +} + +// Creates a new managed_contact in the DB. +exports.bulkCreate = function(req, res, next) { + var _contacts = []; + var _result = { + ok: 0, + ko: 0 + }; + return Tag + .findAll() + .then(function(tags) { + var newTags = [], + contactTags = []; + var tagList = _.map(_.map(tags, 'dataValues'), 'name'); + req.body.contacts.forEach(function(contact) { + if (contact.tags) { + contactTags = _.union(contactTags, contact.tags); + } + }); + contactTags.forEach(function(elem) { + if (!_.includes(tagList, elem)) { + newTags.push(Tag.create({ + name: elem + })); + } + }); + return newTags; + }) + .all() + .then(function() { + var bulkCreate = []; + Async.forEachOf(req.body.contacts, function(contact) { + contact.UserId = req.user.id; + + bulkCreate.push(Contact.create(contact) + .then(function(contact) { + _contacts.push(contact); + _result.ok++; + }) + .catch(function(err) { + _result.ko++; + })); + }) + return bulkCreate; + }) + .all() + .then(function() { + return CustomField + .findAll({ + where: { + ListId: { + $in: _.map(req.body.contacts, 'ListId') + } + } + }); + }) + .then(function(customFields) { + var bulkFields = []; + if (customFields.length) { + var cfs = []; + _contacts.forEach(function(contact) { + cfs = []; + customFields.forEach(function(elem) { + if (contact.hasOwnProperty(elem.name)) { + cfs.push(util.format('%s=\'%s\'', elem.name, req.body[elem.name])); + } + }); + if (cfs.length) { + cfs = cfs.join(','); + bulkFields.push(sequelize.query(util.format('UPDATE cm_contacts SET %s WHERE id=%s', cfs, contact.id))); + } + }); + } + return bulkFields; + }) + .all() + .then(function() { + return res.status(201).send(_result); + }) + .catch(function(err) { + console.log(err); + return next(err); + }); +}; + +// Updates an existing managed_contact in the DB. +exports.update = function(req, res, next) { + return Promise + .all([]) + .then(updateContact(req, res)) + .then(function(contact) { + return res.status(200).send(contact); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.merge = function(req, res, next) { + var _contact; + return Promise + .all([]) + .then(updateContact(req, res)) + .then(function(contact) { + _contact = contact; + if (req.body.oldContact) { + return Contact + .destroy({ + where: { + id: req.body.oldContact + }, + individualHooks: true + }); + } + }) + .then(function() { + return res.status(200).send(_contact); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +function updateContact(req, res) { + return function() { + var _contact; + return Tag + .findAll() + .then(function(tags) { + var newTags = []; + var tagList = _.map(_.map(tags, 'dataValues'), 'name'); + if (req.body.tags) { + req.body.tags.forEach(function(elem) { + if (!_.includes(tagList, elem)) { + newTags.push(Tag.create({ + name: elem + })); + } + }); + } + return newTags; + }) + .then(function() { + return Contact.findById(req.params.id); + }) + .then(function(contact) { + if (!contact) { + return res.sendStatus(404); + } + delete req.body.id; + return contact.updateAttributes(req.body) + }) + .then(function(contact) { + _contact = contact; + + return CustomField + .findAll({ + where: { + ListId: _contact.ListId + } + }); + }) + .then(function(customFields) { + if (customFields.length) { + var cfs = []; + customFields.forEach(function(elem) { + if (req.body.hasOwnProperty(elem.name)) { + cfs.push(util.format('%s=\'%s\'', elem.name, req.body[elem.name])); + } + }); + if (cfs.length) { + cfs = cfs.join(','); + return sequelize.query(util.format('UPDATE cm_contacts SET %s WHERE id=%s', cfs, _contact.id)); + } + } + }) + .then(function() { + return _contact; + }) + } +} + +// Deletes a managed_contact from the DB. +exports.destroy = function(req, res) { + return Contact + .findById(req.params.id) + .then(function(managed_contact) { + if (!managed_contact) { + return res.sendStatus(404); + } + return managed_contact.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a managed_contact from the DB. +exports.bulkDestroy = function(req, res) { + return Contact + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/contact_manager/contact_manager.events.js b/server/api/contact_manager/contact_manager.events.js index 4295be6..dd5bf3e 100644 --- a/server/api/contact_manager/contact_manager.events.js +++ b/server/api/contact_manager/contact_manager.events.js @@ -1 +1,36 @@ -var _0xaedb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x6F\x6E\x74\x61\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xaedb[0];const EventEmitter=require(_0xaedb[1]);const Contact=require(_0xaedb[3])[_0xaedb[2]];var ContactEvents= new EventEmitter();ContactEvents[_0xaedb[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xaedb[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xaedb[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xaedb[6]};for(var e in events){var event=events[e];Contact[_0xaedb[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xc6dfx8,_0xc6dfx9,_0xc6dfxa){ContactEvents[_0xaedb[10]](event+ _0xaedb[8]+ _0xc6dfx8[_0xaedb[9]],_0xc6dfx8);ContactEvents[_0xaedb[10]](event,_0xc6dfx8);_0xc6dfxa(null)}}module[_0xaedb[11]]= ContactEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Contact = require('../../models').Contact; + +var ContactEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ContactEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Contact.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ContactEvents.emit(event + ':' + doc._id, doc); + ContactEvents.emit(event, doc); + done(null); + } +} + +module.exports = ContactEvents; diff --git a/server/api/contact_manager/contact_manager.socket.js b/server/api/contact_manager/contact_manager.socket.js index e9e6077..8432549 100644 --- a/server/api/contact_manager/contact_manager.socket.js +++ b/server/api/contact_manager/contact_manager.socket.js @@ -1 +1,28 @@ -var _0xa9ff=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x6F\x6E\x74\x61\x63\x74\x5F\x6D\x61\x6E\x61\x67\x65\x72\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x6F\x6E\x74\x61\x63\x74\x5F\x6D\x61\x6E\x61\x67\x65\x72\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xa9ff[0];const ContactManagerEvents=require(_0xa9ff[1]);var events=[_0xa9ff[2],_0xa9ff[3]];exports[_0xa9ff[4]]= function(_0xc484x3){for(var _0xc484x4=0,_0xc484x5=events[_0xa9ff[5]];_0xc484x4< _0xc484x5;_0xc484x4++){var _0xc484x6=events[_0xc484x4];var _0xc484x7=createListener(_0xa9ff[6]+ _0xc484x6,_0xc484x3);ContactManagerEvents[_0xa9ff[7]](_0xc484x6,_0xc484x7);_0xc484x3[_0xa9ff[7]](_0xa9ff[8],removeListener(_0xc484x6,_0xc484x7))}};function createListener(_0xc484x6,_0xc484x3){return function(_0xc484x9){_0xc484x3[_0xa9ff[9]](_0xc484x6,_0xc484x9)}}function removeListener(_0xc484x6,_0xc484x7){return function(){ContactManagerEvents[_0xa9ff[10]](_0xc484x6,_0xc484x7)}} \ No newline at end of file +'use strict'; + +const ContactManagerEvents = require('./contact_manager.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('contact_manager:' + event, socket); + + ContactManagerEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ContactManagerEvents.removeListener(event, listener); + }; +} diff --git a/server/api/contact_manager/index.js b/server/api/contact_manager/index.js index 1203c7b..a17e604 100644 --- a/server/api/contact_manager/index.js +++ b/server/api/contact_manager/index.js @@ -1 +1,23 @@ -var _0x1bd2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x6F\x6E\x74\x61\x63\x74\x5F\x6D\x61\x6E\x61\x67\x65\x72\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x43\x6D","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B\x65\x76\x65\x6E\x74","\x67\x65\x74\x45\x76\x65\x6E\x74\x43\x6F\x6E\x74\x61\x63\x74\x73","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x6C\x6F\x67","\x67\x65\x74\x4C\x6F\x67","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x3A\x69\x64\x2F\x63\x6F\x70\x79","\x63\x6F\x70\x79","\x2F\x3A\x69\x64\x2F\x6D\x65\x72\x67\x65","\x6D\x65\x72\x67\x65","\x2F\x62\x75\x6C\x6B","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x1bd2[0];var express=require(_0x1bd2[1]);var controller=require(_0x1bd2[2]);var auth=require(_0x1bd2[3]);var license=require(_0x1bd2[4]);var router=express.Router();router[_0x1bd2[12]](_0x1bd2[5],auth[_0x1bd2[6]](),license[_0x1bd2[7]](),auth[_0x1bd2[10]]([5],[_0x1bd2[8],_0x1bd2[9]]),controller[_0x1bd2[11]]);router[_0x1bd2[12]](_0x1bd2[13],auth[_0x1bd2[6]](),license[_0x1bd2[7]](),auth[_0x1bd2[10]]([5],[_0x1bd2[8]]),controller[_0x1bd2[14]]);router[_0x1bd2[12]](_0x1bd2[15],auth[_0x1bd2[6]](),license[_0x1bd2[7]](),auth[_0x1bd2[10]]([5],[_0x1bd2[8],_0x1bd2[9]]),controller[_0x1bd2[16]]);router[_0x1bd2[12]](_0x1bd2[17],auth[_0x1bd2[6]](),license[_0x1bd2[7]](),auth[_0x1bd2[10]]([5],[_0x1bd2[8],_0x1bd2[9]]),controller[_0x1bd2[18]]);router[_0x1bd2[12]](_0x1bd2[19],auth[_0x1bd2[6]](),license[_0x1bd2[7]](),auth[_0x1bd2[10]]([5],[_0x1bd2[8],_0x1bd2[9]]),controller[_0x1bd2[20]]);router[_0x1bd2[22]](_0x1bd2[5],auth[_0x1bd2[6]](),license[_0x1bd2[7]](),auth[_0x1bd2[10]]([5],[_0x1bd2[8],_0x1bd2[9]]),controller[_0x1bd2[21]]);router[_0x1bd2[22]](_0x1bd2[23],auth[_0x1bd2[6]](),license[_0x1bd2[7]](),auth[_0x1bd2[10]]([5],[_0x1bd2[8],_0x1bd2[9]]),controller[_0x1bd2[24]]);router[_0x1bd2[22]](_0x1bd2[25],auth[_0x1bd2[6]](),license[_0x1bd2[7]](),auth[_0x1bd2[10]]([5],[_0x1bd2[8],_0x1bd2[9]]),controller[_0x1bd2[26]]);router[_0x1bd2[22]](_0x1bd2[27],auth[_0x1bd2[6]](),license[_0x1bd2[7]](),auth[_0x1bd2[10]]([5],[_0x1bd2[8]]),controller[_0x1bd2[28]]);router[_0x1bd2[30]](_0x1bd2[17],auth[_0x1bd2[6]](),license[_0x1bd2[7]](),auth[_0x1bd2[10]]([5],[_0x1bd2[8],_0x1bd2[9]]),controller[_0x1bd2[29]]);router[_0x1bd2[32]](_0x1bd2[5],auth[_0x1bd2[6]](),license[_0x1bd2[7]](),auth[_0x1bd2[10]]([5],[_0x1bd2[8]]),controller[_0x1bd2[31]]);router[_0x1bd2[32]](_0x1bd2[17],auth[_0x1bd2[6]](),license[_0x1bd2[7]](),auth[_0x1bd2[10]]([5],[_0x1bd2[8]]),controller[_0x1bd2[33]]);module[_0x1bd2[34]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./contact_manager.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.index); +router.get('/describe', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.describe); +router.get('/:id/checkevent', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.getEventContacts); +router.get('/:id', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.show); +router.get('/:id/log', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.getLog); +router.post('/', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.create); +router.post('/:id/copy', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.copy); +router.post('/:id/merge', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.merge); +router.post('/bulk', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.bulkCreate); +router.put('/:id', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.update); +router.delete('/', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/custom_report/custom_report.controller.js b/server/api/custom_report/custom_report.controller.js index ed2088a..b0ead9a 100644 --- a/server/api/custom_report/custom_report.controller.js +++ b/server/api/custom_report/custom_report.controller.js @@ -1 +1,568 @@ -var _0x39ec=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74","\x52\x65\x70\x6F\x72\x74\x46\x69\x65\x6C\x64","\x4D\x65\x74\x72\x69\x63","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x65\x78\x74\x72\x61\x63\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x62\x75\x69\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x6D\x6F\x6D\x65\x6E\x74","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x52\x65\x70\x6F\x72\x74\x54\x72\x65\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x67\x65\x74\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x72\x79","\x45\x72\x72\x6F\x72\x20\x67\x65\x74\x74\x69\x6E\x67\x20\x71\x75\x65\x72\x79\x20\x66\x72\x6F\x6D\x20\x61\x70\x69\x3A","\x6C\x6F\x67","\x6E\x6F\x20\x73\x75\x66\x66\x69\x63\x69\x65\x6E\x74\x20\x71\x75\x65\x75\x65\x20\x70\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E\x73\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x75\x73\x65\x72","\x70\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E","\x61\x6C\x6C","\x62\x75\x69\x6C\x64\x51\x75\x65\x72\x79","\x73\x70\x72\x65\x61\x64","\x75\x73\x65\x72","\x62\x75\x69\x6C\x64\x46\x69\x6C\x74\x65\x72","\x66\x6F\x75\x6E\x64\x20\x72\x65\x70\x6F\x72\x74","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x64\x61\x69\x6C\x79","\x74\x72\x75\x65","\x73\x74\x61\x72\x74\x44\x61\x74\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44","\x66\x6F\x72\x6D\x61\x74","\x65\x6E\x64\x44\x61\x74\x65","\x74\x61\x62\x6C\x65","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x5F\x68\x69\x73\x74\x6F\x72\x79","","\x72\x65\x70\x6C\x61\x63\x65","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x66\x69\x65\x6C\x64\x73","\x73\x63\x6F\x70\x65","\x70\x72\x65\x76\x69\x65\x77","\x69\x73\x41\x72\x72\x61\x79","\x6C\x65\x6E\x67\x74\x68","\x6C\x69\x6D\x69\x74","\x76\x61\x6C\x75\x65","\x74\x61\x6B\x65","\x6F\x66\x66\x73\x65\x74","\x73\x6C\x69\x63\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x4F\x77\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x71\x75\x65\x72\x79\x20\x65\x72\x72\x6F\x72","\x63\x68\x65\x63\x6B\x51\x75\x65\x72\x79","\x65\x78\x74\x72\x61\x63\x74\x50\x64\x66","\x50\x44\x46","\x65\x78\x74\x72\x61\x63\x74\x43\x73\x76","\x43\x53\x56","\x64\x65\x73\x74\x72\x6F\x79\x4E\x6F\x64\x65\x52\x65\x70\x6F\x72\x74\x73","\x74\x72\x65\x65","\x70\x61\x72\x73\x65","\x66\x69\x6E\x64","\x4E\x6F\x64\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79","\x70\x75\x73\x68","\x66\x69\x6C\x74\x65\x72","\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x65\x78\x74\x72\x61\x63\x74\x69\x6F\x6E\x2E\x6A\x73","\x66\x6F\x72\x6B","\x65\x72\x72\x6F\x72","\x63\x68\x69\x6C\x64\x20\x65\x72\x72\x6F\x72","\x6F\x6E","\x63\x6C\x6F\x73\x65","\x63\x68\x69\x6C\x64\x20\x63\x6C\x6F\x73\x65","\x6D\x65\x73\x73\x61\x67\x65","\x63\x68\x69\x6C\x64\x20\x6D\x65\x73\x73\x61\x67\x65","\x6B\x69\x6C\x6C","\x70\x61\x72\x65\x6E\x74","\x6E\x61\x6D\x65","\x73\x74\x61\x72\x74\x54\x69\x6D\x65","\x20","\x30\x30\x3A\x30\x30","\x65\x6E\x64\x54\x69\x6D\x65","\x32\x33\x3A\x35\x39","\x63\x72\x65\x61\x74\x65","\x74\x65\x78\x74","\x2F\x20","\x23","\x73\x68\x6F\x77","\x65\x78\x70\x6F\x72\x74","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x46\x69\x65\x6C\x64\x73","\x63\x6F\x70\x79","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x62\x6F\x64\x79","\x6D\x61\x70","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x46\x69\x65\x6C\x64\x73","\x69\x6D\x70\x6F\x72\x74","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x67\x65\x74\x54\x61\x62\x6C\x65","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64","\x4D\x65\x74\x72\x69\x63\x49\x64","\x66\x69\x65\x6C\x64","\x6D\x65\x74\x72\x69\x63","\x54\x68\x65\x20\x6D\x65\x74\x72\x69\x63\x20\x77\x69\x74\x68\x20\x69\x64\x20","\x20\x79\x6F\x75\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x63\x75\x73\x74\x6F\x6D","\x54\x68\x65\x20\x66\x69\x65\x6C\x64\x20","\x20\x79\x6F\x75\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65","\x6B\x65\x79\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x59\x6F\x75\x20\x68\x61\x76\x65\x20\x6E\x6F\x74\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x6F\x72\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74","\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64","\x68\x61\x73","\x65\x76\x65\x72\x79","\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63","\x55\x6E\x73\x75\x70\x70\x6F\x72\x74\x65\x64\x20\x49\x6D\x70\x6F\x72\x74\x20\x66\x6F\x72\x6D\x61\x74\x20\x28\x4D\x65\x74\x72\x69\x63\x20\x74\x79\x70\x65\x20\x69\x6E\x20\x72\x65\x70\x6F\x72\x74\x20\x66\x69\x65\x6C\x64\x73\x20\x69\x73\x20\x6D\x69\x73\x73\x69\x6E\x67\x29","\x49\x64","\x67\x72\x6F\x75\x70\x42\x79","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x6E\x75\x6C\x6C","\x52\x65\x70\x6F\x72\x74\x46\x69\x65\x6C\x64\x73","\x5F","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x39ec[0];var _=require(_0x39ec[1]);var util=require(_0x39ec[2]);var sequelize=require(_0x39ec[4])[_0x39ec[3]];var CustomReport=require(_0x39ec[4])[_0x39ec[5]];var ReportField=require(_0x39ec[4])[_0x39ec[6]];var Metric=require(_0x39ec[4])[_0x39ec[7]];var ExtractedReport=require(_0x39ec[4])[_0x39ec[8]];var extractUtils=require(_0x39ec[9]);var reportBuildUtils=require(_0x39ec[10]);var Util=require(_0x39ec[11]);var sr=require(_0x39ec[12]);var moment=require(_0x39ec[13]);var cp=require(_0x39ec[14]);var ReportTree=require(_0x39ec[4])[_0x39ec[15]];exports[_0x39ec[16]]= function(_0xd6a3xf,_0xd6a3x10,_0xd6a3x11){return CustomReport[_0x39ec[23]](Util[_0x39ec[22]](_0xd6a3xf[_0x39ec[21]],{deletedAt:null}))[_0x39ec[20]](function(_0xd6a3x13){_0xd6a3x10[_0x39ec[19]](200)[_0x39ec[18]](_0xd6a3x13)})[_0x39ec[17]](function(_0xd6a3x12){return handleError(_0xd6a3x10,_0xd6a3x12)})};exports[_0x39ec[24]]= function(_0xd6a3xf,_0xd6a3x10){return Promise[_0x39ec[29]]([])[_0x39ec[20]](getQuery(_0xd6a3xf,_0xd6a3x10))[_0x39ec[20]](function(_0xd6a3x14){if(_0xd6a3x14){switch(_0xd6a3x14){case _0x39ec[28]:_0xd6a3x14= _0x39ec[27];break;default:}};_0xd6a3x10[_0x39ec[19]](200)[_0x39ec[18]]({query:_0xd6a3x14})})[_0x39ec[17]](function(_0xd6a3x12){console[_0x39ec[26]](_0x39ec[25],_0xd6a3x12)})};function getQuery(_0xd6a3xf,_0xd6a3x10){var _0xd6a3x16;return function(){return CustomReport[_0x39ec[51]](_0x39ec[50])[_0x39ec[49]](_0xd6a3xf[_0x39ec[48]][_0x39ec[47]])[_0x39ec[20]](function(_0xd6a3x18){console[_0x39ec[26]](_0x39ec[34]);if(!_0xd6a3x18){return _0xd6a3x10[_0x39ec[35]](404)};if(_0xd6a3xf[_0x39ec[21]][_0x39ec[36]]&& _0xd6a3xf[_0x39ec[21]][_0x39ec[36]]=== _0x39ec[37]){_0xd6a3xf[_0x39ec[21]][_0x39ec[38]]= moment()[_0x39ec[40]](_0x39ec[39]);_0xd6a3xf[_0x39ec[21]][_0x39ec[41]]= moment()[_0x39ec[40]](_0x39ec[39]);_0xd6a3x18[_0x39ec[43]][_0x39ec[42]]= _0xd6a3x18[_0x39ec[43]][_0x39ec[42]][_0x39ec[46]](_0x39ec[44],_0x39ec[45])};delete _0xd6a3xf[_0x39ec[21]][_0x39ec[36]];_0xd6a3x16= _0xd6a3x18[_0x39ec[43]];return _0xd6a3x16[_0x39ec[42]]})[_0x39ec[20]](reportBuildUtils[_0x39ec[33]](_0xd6a3xf[_0x39ec[32]]))[_0x39ec[20]](function(_0xd6a3x17){return [_0xd6a3x17,_0xd6a3x16]})[_0x39ec[31]](reportBuildUtils[_0x39ec[30]](_0xd6a3xf[_0x39ec[21]]))}}exports[_0x39ec[52]]= function(_0xd6a3xf,_0xd6a3x10){var _0xd6a3x19;return Promise[_0x39ec[29]]([])[_0x39ec[20]](getQuery(_0xd6a3xf,_0xd6a3x10))[_0x39ec[20]](reportBuildUtils[_0x39ec[64]]())[_0x39ec[20]](function(_0xd6a3x1a){if(_0xd6a3x1a&& _[_0x39ec[53]](_0xd6a3x1a)){_0xd6a3x19= _0xd6a3x1a[_0x39ec[54]];if(_0xd6a3xf[_0x39ec[21]][_0x39ec[55]]){_0xd6a3x1a= _(_0xd6a3x1a)[_0x39ec[59]](_0xd6a3xf[_0x39ec[21]][_0x39ec[58]]|| 0)[_0x39ec[57]](_0xd6a3xf[_0x39ec[21]][_0x39ec[55]])[_0x39ec[56]]()};_[_0x39ec[62]](_0xd6a3x1a,function(_0xd6a3x1b){_[_0x39ec[61]](_0xd6a3x1b,function(_0xd6a3x1c,_0xd6a3x1d){if(_0xd6a3x1c instanceof Date){_0xd6a3x1b[_0xd6a3x1d]= moment(_0xd6a3x1c)[_0x39ec[40]](_0x39ec[60]).toString()}})});_0xd6a3x10[_0x39ec[19]](200)[_0x39ec[18]]({rows:_0xd6a3x1a,count:_0xd6a3x19})}else {return handleError(_0xd6a3x10,{message:_0xd6a3x1a|| _0x39ec[63]})}})[_0x39ec[17]](function(_0xd6a3x12){console[_0x39ec[26]](_0xd6a3x12);return handleError(_0xd6a3x10,_0xd6a3x12)})};exports[_0x39ec[65]]= function(_0xd6a3xf,_0xd6a3x10){docExtract(_0xd6a3xf,_0xd6a3x10,_0x39ec[66])};exports[_0x39ec[67]]= function(_0xd6a3xf,_0xd6a3x10){docExtract(_0xd6a3xf,_0xd6a3x10,_0x39ec[68])};exports[_0x39ec[69]]= function(_0xd6a3xf,_0xd6a3x10){return ReportTree[_0x39ec[49]](2)[_0x39ec[20]](function(_0xd6a3x1e){_0xd6a3x1e= JSON[_0x39ec[71]](_0xd6a3x1e[_0x39ec[70]]);var _0xd6a3x1f=_[_0x39ec[72]](_0xd6a3x1e,{id:_0xd6a3xf[_0x39ec[48]][_0x39ec[47]]});if(!_0xd6a3x1f){throw new Error(_0x39ec[73])};var _0xd6a3x20=[];findSubNodes(_0xd6a3x1f,_0xd6a3x1e,_0xd6a3x20);return CustomReport[_0x39ec[74]]({where:{parent:_0xd6a3x20},individualHooks:true})})[_0x39ec[20]](function(){return _0xd6a3x10[_0x39ec[35]](200)})[_0x39ec[17]](function(_0xd6a3x12){console[_0x39ec[26]](_0xd6a3x12);return handleError(_0xd6a3x10,_0xd6a3x12)})};function findSubNodes(_0xd6a3x1f,_0xd6a3x1e,_0xd6a3x22){_0xd6a3x22[_0x39ec[75]](_0xd6a3x1f[_0x39ec[47]]);var _0xd6a3x23=_[_0x39ec[76]](_0xd6a3x1e,{parent:_0xd6a3x1f[_0x39ec[47]]});if(!_0xd6a3x23|| !_0xd6a3x23[_0x39ec[54]]){return};_[_0x39ec[62]](_0xd6a3x23,function(_0xd6a3x24){findSubNodes(_0xd6a3x24,_0xd6a3x1e,_0xd6a3x22)})}function docExtract(_0xd6a3xf,_0xd6a3x10,_0xd6a3x26){var _0xd6a3x18;CustomReport[_0x39ec[51]](_0x39ec[50])[_0x39ec[49]](_0xd6a3xf[_0x39ec[48]][_0x39ec[47]])[_0x39ec[20]](function(_0xd6a3x16){if(!_0xd6a3x16){return _0xd6a3x10[_0x39ec[35]](404)};_0xd6a3x18= _0xd6a3x16;return ReportTree[_0x39ec[49]](2)})[_0x39ec[20]](function(_0xd6a3x1e){_0xd6a3x1e= JSON[_0x39ec[71]](_0xd6a3x1e[_0x39ec[70]]);var _0xd6a3x2a=_[_0x39ec[72]](_0xd6a3x1e,{id:_0xd6a3x18[_0x39ec[87]]});var _0xd6a3x2b=getReportPath(_0xd6a3x2a,_0xd6a3x1e,_0xd6a3x18[_0x39ec[88]]);if(_0xd6a3xf[_0x39ec[21]][_0x39ec[36]]&& _0xd6a3xf[_0x39ec[21]][_0x39ec[36]]=== _0x39ec[37]){_0xd6a3xf[_0x39ec[21]][_0x39ec[38]]= moment()[_0x39ec[40]](_0x39ec[39]);_0xd6a3xf[_0x39ec[21]][_0x39ec[41]]= moment()[_0x39ec[40]](_0x39ec[39]);_0xd6a3x18[_0x39ec[43]][_0x39ec[42]]= _0xd6a3x18[_0x39ec[43]][_0x39ec[42]][_0x39ec[46]](_0x39ec[44],_0x39ec[45])};delete _0xd6a3xf[_0x39ec[21]][_0x39ec[36]];return [_0xd6a3x18,ExtractedReport[_0x39ec[94]]({name:_0xd6a3x2b,startDate:_0xd6a3xf[_0x39ec[21]][_0x39ec[38]]?_0xd6a3xf[_0x39ec[21]][_0x39ec[38]]+ (_0xd6a3xf[_0x39ec[21]][_0x39ec[89]]?_0x39ec[90]+ _0xd6a3xf[_0x39ec[21]][_0x39ec[89]]:_0x39ec[91]):null,endDate:_0xd6a3xf[_0x39ec[21]][_0x39ec[41]]?_0xd6a3xf[_0x39ec[21]][_0x39ec[41]]+ (_0xd6a3xf[_0x39ec[21]][_0x39ec[92]]?_0x39ec[90]+ _0xd6a3xf[_0x39ec[21]][_0x39ec[92]]:_0x39ec[93]):null,output:_0xd6a3x26,UserId:_0xd6a3xf[_0x39ec[32]][_0x39ec[47]]})]})[_0x39ec[31]](function(_0xd6a3x18,_0xd6a3x27){var _0xd6a3x28=cp[_0x39ec[78]](__dirname+ _0x39ec[77]);_0xd6a3x28[_0x39ec[81]](_0x39ec[84],function(_0xd6a3x29){console[_0x39ec[26]](_0x39ec[85],_0xd6a3x29);_0xd6a3x28[_0x39ec[86]]()})[_0x39ec[81]](_0x39ec[82],function(){console[_0x39ec[26]](_0x39ec[83])})[_0x39ec[81]](_0x39ec[79],function(_0xd6a3x12){console[_0x39ec[26]](_0x39ec[80],_0xd6a3x12)});_0xd6a3x28[_0x39ec[18]]({report:_0xd6a3x18,query:_0xd6a3xf[_0x39ec[21]],extractedId:_0xd6a3x27[_0x39ec[47]],user:_0xd6a3xf[_0x39ec[32]],type:_0xd6a3x26})})[_0x39ec[17]](function(_0xd6a3x12){console[_0x39ec[26]](_0xd6a3x12);return handleError(_0xd6a3x10,_0xd6a3x12)});return _0xd6a3x10[_0x39ec[35]](200)}function getReportPath(_0xd6a3x2a,_0xd6a3x1e,_0xd6a3x2b){_0xd6a3x2b= _0xd6a3x2a[_0x39ec[95]]+ _0x39ec[96]+ _0xd6a3x2b;if(_0xd6a3x2a[_0x39ec[87]]=== _0x39ec[97]){return _0xd6a3x2b}else {return getReportPath(_[_0x39ec[72]](_0xd6a3x1e,{id:_0xd6a3x2a[_0x39ec[87]]}),_0xd6a3x1e,_0xd6a3x2b)}}exports[_0x39ec[98]]= function(_0xd6a3xf,_0xd6a3x10){return CustomReport[_0x39ec[51]](_0x39ec[50])[_0x39ec[49]](_0xd6a3xf[_0x39ec[48]][_0x39ec[47]])[_0x39ec[20]](function(_0xd6a3x18){if(!_0xd6a3x18){return _0xd6a3x10[_0x39ec[35]](404)};return _0xd6a3x10[_0x39ec[18]](_0xd6a3x18)})[_0x39ec[17]](function(_0xd6a3x12){return handleError(_0xd6a3x10,_0xd6a3x12)})};exports[_0x39ec[99]]= function(_0xd6a3xf,_0xd6a3x10){return CustomReport[_0x39ec[51]]({method:[_0x39ec[102],{CustomReportId:_0xd6a3xf[_0x39ec[48]][_0x39ec[47]]}]})[_0x39ec[49]](_0xd6a3xf[_0x39ec[48]][_0x39ec[47]],{attributes:[_0x39ec[100],_0x39ec[101],_0x39ec[88],_0x39ec[87],_0x39ec[42]]})[_0x39ec[20]](function(_0xd6a3x18){if(!_0xd6a3x18){return _0xd6a3x10[_0x39ec[35]](404)};return _0xd6a3x10[_0x39ec[18]](_0xd6a3x18)})[_0x39ec[17]](function(_0xd6a3x12){return handleError(_0xd6a3x10,_0xd6a3x12)})};exports[_0x39ec[103]]= function(_0xd6a3xf,_0xd6a3x10){var _0xd6a3x2d;return sequelize[_0x39ec[108]](function(_0xd6a3x2e){return CustomReport[_0x39ec[51]](_0x39ec[50])[_0x39ec[49]](_0xd6a3xf[_0x39ec[48]][_0x39ec[47]])[_0x39ec[20]](function(_0xd6a3x18){if(!_0xd6a3x18){return _0xd6a3x10[_0x39ec[35]](404)};var _0xd6a3x2f=_0xd6a3x18[_0x39ec[43]];delete _0xd6a3x2f[_0x39ec[47]];delete _0xd6a3x2f[_0x39ec[104]];delete _0xd6a3x2f[_0x39ec[105]];_0xd6a3x2f[_0x39ec[87]]= _0xd6a3xf[_0x39ec[106]][_0x39ec[87]];_0xd6a3x2d= _[_0x39ec[107]](_0xd6a3x2f.Fields,_0x39ec[43]);return CustomReport[_0x39ec[94]](_0xd6a3x2f,{transaction:_0xd6a3x2e})})[_0x39ec[20]](function(_0xd6a3x18){return [_0xd6a3x18,_0xd6a3x2d]})[_0x39ec[31]](createFields(_0xd6a3x2e))})[_0x39ec[20]](function(){return _0xd6a3x10[_0x39ec[35]](201)})[_0x39ec[17]](function(_0xd6a3x12){console[_0x39ec[26]](_0xd6a3x12);return handleError(_0xd6a3x10,_0xd6a3x12)})};exports[_0x39ec[94]]= function(_0xd6a3xf,_0xd6a3x10){var _0xd6a3x16;return sequelize[_0x39ec[108]](function(_0xd6a3x2e){return CustomReport[_0x39ec[94]](_0xd6a3xf[_0x39ec[106]],{transaction:_0xd6a3x2e})[_0x39ec[20]](function(_0xd6a3x18){_0xd6a3x16= _0xd6a3x18;return [_0xd6a3x16,_0xd6a3xf[_0x39ec[106]][_0x39ec[109]]]})[_0x39ec[31]](createFields(_0xd6a3x2e))})[_0x39ec[20]](function(){return _0xd6a3x10[_0x39ec[19]](201)[_0x39ec[18]](_0xd6a3x16)})[_0x39ec[17]](function(_0xd6a3x12){console[_0x39ec[26]](_0xd6a3x12);return handleError(_0xd6a3x10,_0xd6a3x12)})};exports[_0x39ec[110]]= function(_0xd6a3xf,_0xd6a3x10){var _0xd6a3x16;return sequelize[_0x39ec[108]](function(_0xd6a3x2e){return CustomReport[_0x39ec[94]](_0xd6a3xf[_0x39ec[106]],{transaction:_0xd6a3x2e})[_0x39ec[20]](function(_0xd6a3x18){_0xd6a3x16= _0xd6a3x18;return [_0xd6a3x16,_0xd6a3xf[_0x39ec[106]][_0x39ec[109]]]})[_0x39ec[31]](createImportFields(_0xd6a3x2e))})[_0x39ec[20]](function(){return _0xd6a3x10[_0x39ec[19]](201)[_0x39ec[18]](_0xd6a3x16)})[_0x39ec[17]](function(_0xd6a3x12){console[_0x39ec[26]](_0xd6a3x12);return handleError(_0xd6a3x10,_0xd6a3x12)})};exports[_0x39ec[111]]= function(_0xd6a3xf,_0xd6a3x10,_0xd6a3x11){if(_0xd6a3xf[_0x39ec[106]][_0x39ec[47]]){delete _0xd6a3xf[_0x39ec[106]][_0x39ec[47]]};var _0xd6a3x16;return sequelize[_0x39ec[108]](function(_0xd6a3x2e){return CustomReport[_0x39ec[49]](_0xd6a3xf[_0x39ec[48]][_0x39ec[47]])[_0x39ec[20]](function(_0xd6a3x18){if(!_0xd6a3x18){return _0xd6a3x10[_0x39ec[35]](404)};var _0xd6a3x30=_[_0x39ec[112]](_0xd6a3x18,_0xd6a3xf[_0x39ec[106]]);return _0xd6a3x18[_0x39ec[113]]({transaction:_0xd6a3x2e})})[_0x39ec[20]](function(_0xd6a3x18){_0xd6a3x16= _0xd6a3x18;if(_0xd6a3xf[_0x39ec[106]][_0x39ec[109]]){return ReportField[_0x39ec[74]]({where:{CustomReportId:_0xd6a3xf[_0x39ec[48]][_0x39ec[47]]},transaction:_0xd6a3x2e})}})[_0x39ec[20]](function(){return [_0xd6a3x16,_0xd6a3xf[_0x39ec[106]][_0x39ec[109]]]})[_0x39ec[31]](createFields(_0xd6a3x2e))})[_0x39ec[20]](function(){return _0xd6a3x10[_0x39ec[35]](200)})[_0x39ec[17]](function(_0xd6a3x12){console[_0x39ec[26]](_0xd6a3x12);return handleError(_0xd6a3x10,_0xd6a3x12)})};function createFields(_0xd6a3x2e){return function(_0xd6a3x18,_0xd6a3x32){if(_0xd6a3x32&& Array[_0x39ec[53]](_0xd6a3x32)&& _0xd6a3x32[_0x39ec[54]]){var _0xd6a3x33=reportBuildUtils[_0x39ec[114]](_0xd6a3x18[_0x39ec[42]]);if(_0xd6a3x33){var _0xd6a3x34;return _0xd6a3x33[_0x39ec[127]]()[_0x39ec[20]](function(_0xd6a3x39){_0xd6a3x34= _[_0x39ec[125]](_0xd6a3x39);return Metric[_0x39ec[126]]()})[_0x39ec[20]](function(_0xd6a3x35){var _0xd6a3x36=[];_0xd6a3x35= _[_0x39ec[107]](_0xd6a3x35,_0x39ec[43]);_0xd6a3x32[_0x39ec[62]](function(_0xd6a3x37){_0xd6a3x37[_0x39ec[115]]= _0xd6a3x18[_0x39ec[47]];if(_0xd6a3x37[_0x39ec[116]]){var _0xd6a3x38=_[_0x39ec[72]](_0xd6a3x35,{id:_0xd6a3x37[_0x39ec[116]]});if(_0xd6a3x38){_0xd6a3x37[_0x39ec[117]]= _0xd6a3x38[_0x39ec[118]];_0xd6a3x36[_0x39ec[75]](ReportField[_0x39ec[94]](_0xd6a3x37,{transaction:_0xd6a3x2e}))}else {throw new sequelize.Error(_0x39ec[119]+ _0xd6a3x37[_0x39ec[116]]+ _0x39ec[120])}}else {if(_[_0x39ec[121]](_0xd6a3x34,_0xd6a3x37[_0x39ec[117]])|| _0xd6a3x37[_0x39ec[122]]){_0xd6a3x36[_0x39ec[75]](ReportField[_0x39ec[94]](_0xd6a3x37,{transaction:_0xd6a3x2e}))}else {throw new sequelize.Error(_0x39ec[123]+ _0xd6a3x37[_0x39ec[117]]+ _0x39ec[124])}}});return _0xd6a3x36})[_0x39ec[29]]()}else {throw new sequelize.Error(_0x39ec[128])}}}}function createImportFields(_0xd6a3x2e){return function(_0xd6a3x18,_0xd6a3x32){if(_0xd6a3x32&& Array[_0x39ec[53]](_0xd6a3x32)&& _0xd6a3x32[_0x39ec[54]]){var _0xd6a3x33=reportBuildUtils[_0x39ec[114]](_0xd6a3x18[_0x39ec[42]]);if(_0xd6a3x33){var _0xd6a3x34;return _0xd6a3x33[_0x39ec[127]]()[_0x39ec[20]](function(_0xd6a3x39){_0xd6a3x34= _[_0x39ec[125]](_0xd6a3x39);var _0xd6a3x36=[];var _0xd6a3x3b;if(_[_0x39ec[131]](_0xd6a3x32,function(_0xd6a3x37){return _[_0x39ec[130]](_0xd6a3x37,_0x39ec[129])})){_0xd6a3x3b= _0x39ec[132]}else {if(_[_0x39ec[131]](_0xd6a3x32,function(_0xd6a3x37){return _[_0x39ec[130]](_0xd6a3x37,_0x39ec[116])})){_0xd6a3x3b= _0x39ec[7]}else {throw new sequelize.Error(_0x39ec[133])}};var _0xd6a3x3c=_[_0x39ec[135]](_0xd6a3x32,_0xd6a3x3b+ _0x39ec[134]);_[_0x39ec[61]](_0xd6a3x3c,function(_0xd6a3x3d,_0xd6a3x1d){if(_0xd6a3x1d!== _0x39ec[136]&& _0xd6a3x1d!== _0x39ec[137]){_0xd6a3x3d[0][_0xd6a3x3b][_0x39ec[138]][_0x39ec[62]](function(_0xd6a3x37){_0xd6a3x37[_0x39ec[115]]= _0xd6a3x18[_0x39ec[47]]});_0xd6a3x3d[0][_0xd6a3x3b][_0x39ec[88]]+= _0x39ec[139]+ sr({length:5});_0xd6a3x36[_0x39ec[75]](Metric[_0x39ec[94]](_0xd6a3x3d[0][_0xd6a3x3b],{include:[{model:ReportField,as:_0x39ec[138]}],transaction:_0xd6a3x2e}))}else {_0xd6a3x3d[_0x39ec[62]](function(_0xd6a3x37){if(_[_0x39ec[121]](_0xd6a3x34,_0xd6a3x37[_0x39ec[117]])|| _0xd6a3x37[_0x39ec[122]]){_0xd6a3x37[_0x39ec[115]]= _0xd6a3x18[_0x39ec[47]];_0xd6a3x36[_0x39ec[75]](ReportField[_0x39ec[94]](_0xd6a3x37,{transaction:_0xd6a3x2e}))}else {throw new sequelize.Error(_0x39ec[123]+ _0xd6a3x37[_0x39ec[117]]+ _0x39ec[124])}})}});return _0xd6a3x36})[_0x39ec[29]]()}else {throw new sequelize.Error(_0x39ec[128])}}}}exports[_0x39ec[74]]= function(_0xd6a3xf,_0xd6a3x10){return CustomReport[_0x39ec[49]](_0xd6a3xf[_0x39ec[48]][_0x39ec[47]])[_0x39ec[20]](function(_0xd6a3x18){if(!_0xd6a3x18){return _0xd6a3x10[_0x39ec[35]](404)};return _0xd6a3x18[_0x39ec[74]]()})[_0x39ec[20]](function(){return _0xd6a3x10[_0x39ec[35]](204)})[_0x39ec[17]](function(_0xd6a3x12){return handleError(_0xd6a3x10,_0xd6a3x12)})};exports[_0x39ec[140]]= function(_0xd6a3xf,_0xd6a3x10){return CustomReport[_0x39ec[74]]({where:{id:_0xd6a3xf[_0x39ec[21]][_0x39ec[141]]},individualHooks:true})[_0x39ec[20]](function(){return _0xd6a3x10[_0x39ec[35]](204)})[_0x39ec[17]](function(_0xd6a3x12){return handleError(_0xd6a3x10,_0xd6a3x12)})};function handleError(_0xd6a3x10,_0xd6a3x12){return _0xd6a3x10[_0x39ec[19]](500)[_0x39ec[18]](_0xd6a3x12)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var sequelize = require('../../models').sequelize; +var CustomReport = require('../../models').CustomReport; +var ReportField = require('../../models').ReportField; +var Metric = require('../../models').Metric; +var ExtractedReport = require('../../models').ExtractedReport; +var extractUtils = require('../../utils/report_extraction'); +var reportBuildUtils = require('../../utils/report_build'); +var Util = require('../../config/util'); +var sr = require('simple-random'); +var moment = require('moment'); +var cp = require('child_process'); +var ReportTree = require('../../models').ReportTree; + +// Get list of agents +exports.index = function(req, res, next) { + return CustomReport + .findAndCountAll(Util.getQuery(req.query, { + deletedAt: null + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getReportQuery = function(req, res) { + return Promise + .all([]) + .then(getQuery(req, res)) + .then(function(query) { + if (query) { + switch (query) { + case 'permission': + query = 'no sufficient queue permissions for the user'; + break; + default: + } + } + res.status(200).send({ + query: query + }); + }) + .catch(function(err) { + console.log('Error getting query from api:', err); + }); +} + +function getQuery(req, res) { + var _report; + return function() { + return CustomReport + .scope('fields') + .findById(req.params.id) + .then(function(report) { + console.log('found report'); + if (!report) { + return res.sendStatus(404); + } + if (req.query.daily && req.query.daily === 'true') { + req.query.startDate = moment().format('YYYY-MM-DD'); + req.query.endDate = moment().format('YYYY-MM-DD'); + report.dataValues.table = report.dataValues.table.replace( + '_history', ''); + } + delete req.query.daily; + _report = report.dataValues; + return _report.table; + }) + .then(reportBuildUtils.buildFilter(req.user)) + .then(function(filter) { + return [filter, _report]; + }) + .spread(reportBuildUtils.buildQuery(req.query)) + } +} + +exports.preview = function(req, res) { + var _countAll; + return Promise + .all([]) + .then(getQuery(req, res)) + .then(reportBuildUtils.checkQuery()) + .then(function(results) { + if (results && _.isArray(results)) { + _countAll = results.length; + if (req.query.limit) { + results = _(results).slice(req.query.offset || 0).take(req.query.limit).value(); + } + _.forEach(results, function(row) { + _.forOwn(row, function(property, key) { + if (property instanceof Date) { + row[key] = moment(property).format("YYYY-MM-DD HH:mm:ss").toString(); + } + }); + }); + res.status(200).send({ + rows: results, + count: _countAll + }); + } else { + return handleError(res, { + message: results || 'query error' + }); + } + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.extractPdf = function(req, res) { + // console.log('extractPdf api function'); + docExtract(req, res, 'PDF') +}; + +exports.extractCsv = function(req, res) { + // console.log('extractCsv api function'); + docExtract(req, res, 'CSV'); +}; + +exports.destroyNodeReports = function(req, res) { + return ReportTree + .findById(2) + .then(function(tree) { + tree = JSON.parse(tree.tree); + var node = _.find(tree, { + id: req.params.id + }); + if (!node) { + throw new Error('Node not found'); + } + var nodes = []; + findSubNodes(node, tree, nodes); + return CustomReport + .destroy({ + where: { + parent: nodes + }, + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +function findSubNodes(node, tree, _nodes) { //receive a node, the tree containing the node and an array where to insert all the sub nodes found recursively, including the starting node + _nodes.push(node.id); + var subNodes = _.filter(tree, { + parent: node.id + }); + if (!subNodes || !subNodes.length) { + return; + } + _.forEach(subNodes, function(subNode) { + findSubNodes(subNode, tree, _nodes); + }); +} + +function docExtract(req, res, typeFunction) { + var report; + // console.log('common docExtract api function'); + CustomReport //DO NOT ADD RETURN CAUSE THE EXTRACTING FUNCTION WILL KEEP EXTRACTING AFTER THE API HAS RETURNED + .scope('fields') + .findById(req.params.id) + .then(function(_report) { + if (!_report) { + return res.sendStatus(404); + } + report = _report; + return ReportTree + .findById(2); + }) + .then(function(tree) { + tree = JSON.parse(tree.tree); + var folder = _.find(tree, { + id: report.parent + }); + var path = getReportPath(folder, tree, report.name); + // console.log('found the report, creating the new DB row for extracted reports..'); + //CREATE A DB ROW IN A TABLE WITH THE REPORT INFO, QUERY DATES, AND THE STATUS 'ELABORATING' + if (req.query.daily && req.query.daily === 'true') { + req.query.startDate = moment().format('YYYY-MM-DD'); + req.query.endDate = moment().format('YYYY-MM-DD'); + report.dataValues.table = report.dataValues.table.replace('_history', + ''); + } + delete req.query.daily; + return [report, ExtractedReport.create({ + name: path, + startDate: req.query.startDate ? req.query.startDate + (req.query.startTime ? ' ' + req.query.startTime : '00:00') : null, + endDate: req.query.endDate ? req.query.endDate + (req.query.endTime ? ' ' + req.query.endTime : '23:59') : null, + output: typeFunction, + UserId: req.user.id + })] + }) + .spread(function(report, extractedReport) { + // console.log('created new extracted reports db entry, calling external extraction function: ' + typeFunction); + var child = cp.fork(__dirname + '/../../utils/report_extraction.js'); + child.on('message', function(data) { + console.log('child message', data); + child.kill(); + }).on('close', function() { + console.log('child close'); + }).on('error', function(err) { + console.log('child error', err); + }); + child.send({ + report: report, + query: req.query, + extractedId: extractedReport.id, + user: req.user, + type: typeFunction + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + return res.sendStatus(200); +} + +function getReportPath(folder, tree, path) { + path = folder.text + '/ ' + path; + if (folder.parent === '#') { + return path; + } else { + return getReportPath(_.find(tree, { + id: folder.parent + }), tree, path); + } +} + +// Get a single report +exports.show = function(req, res) { + return CustomReport + .scope('fields') + .findById(req.params.id) + .then(function(report) { + if (!report) { + return res.sendStatus(404); + } + return res.send(report); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + + +// Get a single report +exports.export = function(req, res) { + return CustomReport + .scope({ + method: ['exportFields', { + CustomReportId: req.params.id + }] + }) //add where condition on customreport id + .findById(req.params.id, { + attributes: ['conditions', 'description', 'name', 'parent', 'table'] + }) + .then(function(report) { + if (!report) { + return res.sendStatus(404); + } + return res.send(report); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Copy a custom report +exports.copy = function(req, res) { + var _fields; + return sequelize.transaction(function(t) { + return CustomReport + .scope('fields') + .findById(req.params.id) + .then(function(report) { + if (!report) { + return res.sendStatus(404); + } + var newReport = report.dataValues; + delete newReport.id; + delete newReport.createdAt; + delete newReport.updatedAt; + newReport.parent = req.body.parent; + _fields = _.map(newReport.Fields, 'dataValues'); + return CustomReport + .create(newReport, { + transaction: t + }); + }) + .then(function(report) { + return [report, _fields]; + }) + .spread(createFields(t)); + }) + .then(function() { + return res.sendStatus(201); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Creates a new report in the DB. +exports.create = function(req, res) { + var _report; + return sequelize.transaction(function(t) { + return CustomReport + .create(req.body, { + transaction: t + }) + .then(function(report) { + _report = report; + return [_report, req.body.Fields]; + }) + .spread(createFields(t)); + }) + .then(function() { + return res.status(201).send(_report); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Import a report in the DB. +exports.import = function(req, res) { + var _report; + return sequelize.transaction(function(t) { + return CustomReport + .create(req.body, { + transaction: t + }) + .then(function(report) { + _report = report; + return [_report, req.body.Fields]; + }) + .spread(createImportFields(t)); + }) + .then(function() { + return res.status(201).send(_report); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.update = function(req, res, next) { + if (req.body.id) { + delete req.body.id; + } + var _report; + return sequelize.transaction(function(t) { + return CustomReport + .findById(req.params.id) + .then(function(report) { + if (!report) { + return res.sendStatus(404); + } + var updated = _.merge(report, req.body); + return report + .save({ + transaction: t + }); + }) + .then(function(report) { + _report = report; + if (req.body.Fields) { + return ReportField.destroy({ + where: { + CustomReportId: req.params.id + }, + transaction: t + }); + } + }) + .then(function() { + return [_report, req.body.Fields]; + }) + .spread(createFields(t)); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +} + +function createFields(t) { + return function(report, fields) { + if (fields && Array.isArray(fields) && fields.length) { + var tableModel = reportBuildUtils.getTable(report.table); + if (tableModel) { + var _tableFields; + return tableModel + .describe() + .then(function(tableFields) { + _tableFields = _.keys(tableFields); + return Metric + .findAll(); + }) + .then(function(metrics) { + var bulkFields = []; + metrics = _.map(metrics, 'dataValues'); + fields.forEach(function(elem) { + elem.CustomReportId = report.id; + if (elem.MetricId) { + var metric = _.find(metrics, { + id: elem.MetricId + }); + if (metric) { + elem.field = metric.metric; + bulkFields.push(ReportField + .create(elem, { + transaction: t + })); + } else { + throw new sequelize.Error("The metric with id " + + elem.MetricId + " you specified does not exist"); + } + } else { + if (_.includes(_tableFields, elem.field) || elem.custom) { + bulkFields.push(ReportField + .create(elem, { + transaction: t + })); + } else { + throw new sequelize.Error("The field " + elem.field + + " you specified does not exist in the table"); + } + } + }); + return bulkFields; + }) + .all(); + } else { + throw new sequelize.Error( + "You have not specified the table or the table does not exist"); + } + } + } +} + +function createImportFields(t) { + return function(report, fields) { + if (fields && Array.isArray(fields) && fields.length) { + var tableModel = reportBuildUtils.getTable(report.table); + if (tableModel) { + var _tableFields; + return tableModel + .describe() + .then(function(tableFields) { + _tableFields = _.keys(tableFields); + var bulkFields = []; + var type; + if (_.every(fields, function(elem) { + return _.has(elem, 'DefaultMetricId'); + })) { + type = 'DefaultMetric' + } else if (_.every(fields, function(elem) { + return _.has(elem, 'MetricId'); + })) { + type = 'Metric' + } else { + throw new sequelize.Error("Unsupported Import format (Metric type in report fields is missing)"); + } + var groupedFields = _.groupBy(fields, type + 'Id'); + _.forOwn(groupedFields, function(value, key) { + if (key !== 'undefined' && key !== 'null') { + value[0][type].ReportFields.forEach(function(elem) { + elem.CustomReportId = report.id; + }); + value[0][type].name += '_' + sr({ + length: 5 + }); + bulkFields.push(Metric + .create(value[0][type], { + include: [{ + model: ReportField, + as: 'ReportFields' + }], + transaction: t + })); + } else { + value.forEach(function(elem) { + if (_.includes(_tableFields, elem.field) || elem.custom) { + elem.CustomReportId = report.id; + bulkFields.push(ReportField + .create(elem, { + transaction: t + })); + } else { + throw new sequelize.Error("The field " + elem.field + + " you specified does not exist in the table" + ); + } + }); + } + }); + return bulkFields; + }) + .all(); + } else { + throw new sequelize.Error( + "You have not specified the table or the table does not exist"); + } + } + } +} + + +// Deletes a report from the DB. +exports.destroy = function(req, res) { + return CustomReport + .findById(req.params.id) + .then(function(report) { + if (!report) { + return res.sendStatus(404); + } + return report.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.bulkDestroy = function(req, res) { + return CustomReport + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/custom_report/custom_report.events.js b/server/api/custom_report/custom_report.events.js index 665693c..ac4b9d7 100644 --- a/server/api/custom_report/custom_report.events.js +++ b/server/api/custom_report/custom_report.events.js @@ -1 +1,36 @@ -var _0xf8f0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xf8f0[0];const EventEmitter=require(_0xf8f0[1]);const CustomReport=require(_0xf8f0[3])[_0xf8f0[2]];var CustomReportEvents= new EventEmitter();CustomReportEvents[_0xf8f0[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xf8f0[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xf8f0[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xf8f0[6]};for(var e in events){var event=events[e];CustomReport[_0xf8f0[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xdc09x8,_0xdc09x9,_0xdc09xa){CustomReportEvents[_0xf8f0[10]](event+ _0xf8f0[8]+ _0xdc09x8[_0xf8f0[9]],_0xdc09x8);CustomReportEvents[_0xf8f0[10]](event,_0xdc09x8);_0xdc09xa(null)}}module[_0xf8f0[11]]= CustomReportEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const CustomReport = require('../../models').CustomReport; + +var CustomReportEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +CustomReportEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + CustomReport.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + CustomReportEvents.emit(event + ':' + doc._id, doc); + CustomReportEvents.emit(event, doc); + done(null); + } +} + +module.exports = CustomReportEvents; diff --git a/server/api/custom_report/custom_report.socket.js b/server/api/custom_report/custom_report.socket.js index 81f1383..ab9086c 100644 --- a/server/api/custom_report/custom_report.socket.js +++ b/server/api/custom_report/custom_report.socket.js @@ -1 +1,28 @@ -var _0x121b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x75\x73\x74\x6F\x6D\x5F\x72\x65\x70\x6F\x72\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x63\x75\x73\x74\x6F\x6D\x5F\x72\x65\x70\x6F\x72\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x121b[0];const CustomReportEvents=require(_0x121b[1]);var events=[_0x121b[2],_0x121b[3]];exports[_0x121b[4]]= function(_0x870cx3){for(var _0x870cx4=0,_0x870cx5=events[_0x121b[5]];_0x870cx4< _0x870cx5;_0x870cx4++){var _0x870cx6=events[_0x870cx4];var _0x870cx7=createListener(_0x121b[6]+ _0x870cx6,_0x870cx3);CustomReportEvents[_0x121b[7]](_0x870cx6,_0x870cx7);_0x870cx3[_0x121b[7]](_0x121b[8],removeListener(_0x870cx6,_0x870cx7))}};function createListener(_0x870cx6,_0x870cx3){return function(_0x870cx9){_0x870cx3[_0x121b[9]](_0x870cx6,_0x870cx9)}}function removeListener(_0x870cx6,_0x870cx7){return function(){CustomReportEvents[_0x121b[10]](_0x870cx6,_0x870cx7)}} \ No newline at end of file +'use strict'; + +const CustomReportEvents = require('./custom_report.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('custom_report:' + event, socket); + + CustomReportEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + CustomReportEvents.removeListener(event, listener); + }; +} diff --git a/server/api/custom_report/index.js b/server/api/custom_report/index.js index da445dc..cf6aa62 100644 --- a/server/api/custom_report/index.js +++ b/server/api/custom_report/index.js @@ -1 +1,24 @@ -var _0x69bc=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x75\x73\x74\x6F\x6D\x5F\x72\x65\x70\x6F\x72\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x70\x72\x65\x76\x69\x65\x77","\x70\x72\x65\x76\x69\x65\x77","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x71\x75\x65\x72\x79","\x67\x65\x74\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x72\x79","\x2F\x3A\x69\x64\x2F\x65\x78\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x3A\x69\x64\x2F\x65\x78\x74\x72\x61\x63\x74\x2F\x70\x64\x66","\x65\x78\x74\x72\x61\x63\x74\x50\x64\x66","\x2F\x3A\x69\x64\x2F\x65\x78\x74\x72\x61\x63\x74\x2F\x63\x73\x76","\x65\x78\x74\x72\x61\x63\x74\x43\x73\x76","\x2F\x69\x6D\x70\x6F\x72\x74","\x69\x6D\x70\x6F\x72\x74","\x2F\x3A\x69\x64\x2F\x63\x6F\x70\x79","\x63\x6F\x70\x79","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x2F\x6E\x6F\x64\x65\x2F\x3A\x69\x64","\x64\x65\x73\x74\x72\x6F\x79\x4E\x6F\x64\x65\x52\x65\x70\x6F\x72\x74\x73","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x69bc[0];var express=require(_0x69bc[1]);var controller=require(_0x69bc[2]);var auth=require(_0x69bc[3]);var router=express.Router();router[_0x69bc[9]](_0x69bc[4],auth[_0x69bc[5]](),auth[_0x69bc[7]]([17],[_0x69bc[6]]),controller[_0x69bc[8]]);router[_0x69bc[9]](_0x69bc[10],auth[_0x69bc[5]](),auth[_0x69bc[7]]([17],[_0x69bc[6]]),controller[_0x69bc[11]]);router[_0x69bc[9]](_0x69bc[12],auth[_0x69bc[5]](),auth[_0x69bc[7]]([17],[_0x69bc[6]]),controller[_0x69bc[13]]);router[_0x69bc[9]](_0x69bc[14],auth[_0x69bc[5]](),auth[_0x69bc[7]]([17],[_0x69bc[6]]),controller[_0x69bc[15]]);router[_0x69bc[9]](_0x69bc[16],auth[_0x69bc[5]](),auth[_0x69bc[7]]([17],[_0x69bc[6]]),controller[_0x69bc[17]]);router[_0x69bc[19]](_0x69bc[4],auth[_0x69bc[5]](),auth[_0x69bc[7]]([17],[_0x69bc[6]]),controller[_0x69bc[18]]);router[_0x69bc[9]](_0x69bc[20],auth[_0x69bc[5]](),auth[_0x69bc[7]]([17],[_0x69bc[6]]),controller[_0x69bc[21]]);router[_0x69bc[9]](_0x69bc[22],auth[_0x69bc[5]](),auth[_0x69bc[7]]([17],[_0x69bc[6]]),controller[_0x69bc[23]]);router[_0x69bc[19]](_0x69bc[24],auth[_0x69bc[5]](),auth[_0x69bc[7]]([17],[_0x69bc[6]]),controller[_0x69bc[25]]);router[_0x69bc[19]](_0x69bc[26],auth[_0x69bc[5]](),auth[_0x69bc[7]]([17],[_0x69bc[6]]),controller[_0x69bc[27]]);router[_0x69bc[29]](_0x69bc[12],auth[_0x69bc[5]](),auth[_0x69bc[7]]([17],[_0x69bc[6]]),controller[_0x69bc[28]]);router[_0x69bc[31]](_0x69bc[4],auth[_0x69bc[5]](),auth[_0x69bc[7]]([17],[_0x69bc[6]]),controller[_0x69bc[30]]);router[_0x69bc[31]](_0x69bc[32],auth[_0x69bc[5]](),auth[_0x69bc[7]]([17],[_0x69bc[6]]),controller[_0x69bc[33]]);router[_0x69bc[31]](_0x69bc[12],auth[_0x69bc[5]](),auth[_0x69bc[7]]([17],[_0x69bc[6]]),controller[_0x69bc[34]]);module[_0x69bc[35]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./custom_report.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.index); +router.get('/:id/preview', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.preview); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.show); +router.get('/:id/query', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.getReportQuery); +router.get('/:id/export', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.export); +router.post('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.create); +router.get('/:id/extract/pdf', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.extractPdf); +router.get('/:id/extract/csv', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.extractCsv); +router.post('/import', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.import); +router.post('/:id/copy', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.copy); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.bulkDestroy); +router.delete('/node/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.destroyNodeReports); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/dashboard/dashboard.controller.js b/server/api/dashboard/dashboard.controller.js index 0d822d6..9a1998e 100644 --- a/server/api/dashboard/dashboard.controller.js +++ b/server/api/dashboard/dashboard.controller.js @@ -1 +1,320 @@ -var _0x35e0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x44\x61\x73\x68\x62\x6F\x61\x72\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x69\x6E\x69\x74","\x65\x72\x72\x6F\x72","\x61\x76\x67\x44\x75\x72\x61\x74\x69\x6F\x6E","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x61\x6E\x73\x77\x65\x72\x52\x61\x74\x65","\x61\x6E\x73\x77\x65\x72\x65\x64","\x67\x6C\x6F\x62\x61\x6C\x44\x75\x72\x61\x74\x69\x6F\x6E","\x53\x45\x4C\x45\x43\x54\x20\x41\x56\x47\x28\x64\x75\x72\x61\x74\x69\x6F\x6E\x29\x20\x61\x73\x20\x61\x76\x67\x44\x75\x72\x61\x74\x69\x6F\x6E\x20\x0A\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x20\x0A\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x74\x79\x70\x65\x3D\x22\x6F\x75\x74\x62\x6F\x75\x6E\x64\x22","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64","\x53\x45\x4C\x45\x43\x54\x20\x53\x55\x4D\x28\x64\x75\x72\x61\x74\x69\x6F\x6E\x29\x20\x61\x73\x20\x67\x6C\x6F\x62\x61\x6C\x44\x75\x72\x61\x74\x69\x6F\x6E\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x74\x79\x70\x65\x20\x3D\x20\x27\x6F\x75\x74\x62\x6F\x75\x6E\x64\x27\x3B","\x53\x45\x4C\x45\x43\x54\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x74\x79\x70\x65\x20\x3D\x20\x27\x6F\x75\x74\x62\x6F\x75\x6E\x64\x27\x3B","\x71\x75\x65\x75\x65","\x71\x75\x65\x75\x65\x73","\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64","\x66\x6F\x72\x45\x61\x63\x68","\x53\x45\x4C\x45\x43\x54\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x61\x6E\x73\x77\x65\x72\x65\x64\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x20\x3D\x20\x27\x41\x4E\x53\x57\x45\x52\x45\x44\x27\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x41\x4E\x44\x20\x74\x79\x70\x65\x20\x3D\x20\x27\x6F\x75\x74\x62\x6F\x75\x6E\x64\x27\x3B","\x74\x61\x6C\x6B\x74\x69\x6D\x65","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x2C\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x20\x3D\x20\x31\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65\x3B","\x68\x6F\x6C\x64\x74\x69\x6D\x65","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x2C\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x63\x61\x6C\x6C\x73\x2C\x20\x53\x55\x4D\x28\x74\x61\x6C\x6B\x74\x69\x6D\x65\x29\x20\x61\x73\x20\x74\x61\x6C\x6B\x74\x69\x6D\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x3D\x20\x31\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65\x3B","\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x2C\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x63\x61\x6C\x6C\x73\x2C\x20\x53\x55\x4D\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x29\x20\x61\x73\x20\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x3D\x20\x31\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65\x3B","\x61\x62\x61\x6E\x64\x6F\x6E","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x2C\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x3D\x20\x31\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65\x3B","\x61\x63\x74\x69\x76\x65","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x2C\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x61\x62\x61\x6E\x64\x6F\x6E\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x20\x3D\x20\x31\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65\x3B","\x77\x61\x69\x74\x69\x6E\x67","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x2C\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x61\x63\x74\x69\x76\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x20\x3D\x20\x30\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x20\x3D\x20\x30\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x3D\x20\x30\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x20\x49\x53\x20\x4E\x4F\x54\x20\x4E\x55\x4C\x4C\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65\x3B","\x6E\x61\x6D\x65","\x6B\x65\x79\x42\x79","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x2C\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x77\x61\x69\x74\x69\x6E\x67\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x20\x49\x53\x20\x4E\x55\x4C\x4C\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65\x3B","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x6C\x6C","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x63\x6C\x6F\x6E\x65","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x65\x64\x69\x74\x61\x62\x6C\x65","\x64\x65\x66\x61\x75\x6C\x74\x45\x6E\x74\x72\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x35e0[0];var _=require(_0x35e0[1]);var util=require(_0x35e0[2]);var Util=require(_0x35e0[3]);var Dashboard=require(_0x35e0[5])[_0x35e0[4]];var VoiceQueue=require(_0x35e0[5])[_0x35e0[6]];var sequelize=require(_0x35e0[5])[_0x35e0[7]];exports[_0x35e0[8]]= function(_0x483fx7,_0x483fx8,_0x483fx9){return Dashboard[_0x35e0[15]](Util[_0x35e0[14]](_0x483fx7[_0x35e0[13]]))[_0x35e0[12]](function(_0x483fxb){_0x483fx8[_0x35e0[11]](200)[_0x35e0[10]](_0x483fxb)})[_0x35e0[9]](function(_0x483fxa){return handleError(_0x483fx8,_0x483fxa)})};exports[_0x35e0[16]]= function(_0x483fx7,_0x483fx8,_0x483fx9){var _0x483fxc={queues:{},outbound:{}};return VoiceQueue[_0x35e0[49]]({attributes:[_0x35e0[46]],raw:true})[_0x35e0[12]](function(_0x483fxd){_0x483fxc[_0x35e0[30]]= _[_0x35e0[47]](_0x483fxd,_0x35e0[46]);return sequelize[_0x35e0[13]](_0x35e0[48],{type:sequelize[_0x35e0[25]][_0x35e0[24]]})})[_0x35e0[12]](function(_0x483fxd){_0x483fxd[_0x35e0[32]](function(_0x483fxe){if(_0x483fxc[_0x35e0[30]][_0x483fxe[_0x35e0[29]]]){_0x483fxc[_0x35e0[30]][_0x483fxe[_0x35e0[29]]][_0x35e0[44]]= _0x483fxe[_0x35e0[44]]}});return sequelize[_0x35e0[13]](_0x35e0[45],{type:sequelize[_0x35e0[25]][_0x35e0[24]]})})[_0x35e0[12]](function(_0x483fxd){_0x483fxd[_0x35e0[32]](function(_0x483fxe){if(_0x483fxc[_0x35e0[30]][_0x483fxe[_0x35e0[29]]]){_0x483fxc[_0x35e0[30]][_0x483fxe[_0x35e0[29]]][_0x35e0[42]]= _0x483fxe[_0x35e0[42]]}});return sequelize[_0x35e0[13]](_0x35e0[43],{type:sequelize[_0x35e0[25]][_0x35e0[24]]})})[_0x35e0[12]](function(_0x483fxd){_0x483fxd[_0x35e0[32]](function(_0x483fxe){if(_0x483fxc[_0x35e0[30]][_0x483fxe[_0x35e0[29]]]){_0x483fxc[_0x35e0[30]][_0x483fxe[_0x35e0[29]]][_0x35e0[40]]= _0x483fxe[_0x35e0[40]]}});return sequelize[_0x35e0[13]](_0x35e0[41],{type:sequelize[_0x35e0[25]][_0x35e0[24]]})})[_0x35e0[12]](function(_0x483fxd){_0x483fxd[_0x35e0[32]](function(_0x483fxe){if(_0x483fxc[_0x35e0[30]][_0x483fxe[_0x35e0[29]]]){_0x483fxc[_0x35e0[30]][_0x483fxe[_0x35e0[29]]][_0x35e0[38]]= _0x483fxe[_0x35e0[38]]}});return sequelize[_0x35e0[13]](_0x35e0[39],{type:sequelize[_0x35e0[25]][_0x35e0[24]]})})[_0x35e0[12]](function(_0x483fxd){_0x483fxd[_0x35e0[32]](function(_0x483fxe){if(_0x483fxc[_0x35e0[30]][_0x483fxe[_0x35e0[29]]]){_0x483fxc[_0x35e0[30]][_0x483fxe[_0x35e0[29]]][_0x35e0[36]]= _0x483fxe[_0x35e0[36]]}});return sequelize[_0x35e0[13]](_0x35e0[37],{type:sequelize[_0x35e0[25]][_0x35e0[24]]})})[_0x35e0[12]](function(_0x483fxd){_0x483fxd[_0x35e0[32]](function(_0x483fxe){if(_0x483fxc[_0x35e0[30]][_0x483fxe[_0x35e0[29]]]){_0x483fxc[_0x35e0[30]][_0x483fxe[_0x35e0[29]]][_0x35e0[34]]= _0x483fxe[_0x35e0[34]]}});return sequelize[_0x35e0[13]](_0x35e0[35],{type:sequelize[_0x35e0[25]][_0x35e0[24]]})})[_0x35e0[12]](function(_0x483fxd){_0x483fxd[_0x35e0[32]](function(_0x483fxe){if(_0x483fxc[_0x35e0[30]][_0x483fxe[_0x35e0[29]]]){_0x483fxc[_0x35e0[30]][_0x483fxe[_0x35e0[29]]][_0x35e0[31]]= _0x483fxe[_0x35e0[31]]}});return sequelize[_0x35e0[13]](_0x35e0[33],{type:sequelize[_0x35e0[25]][_0x35e0[24]]})})[_0x35e0[12]](function(_0x483fxd){_0x483fxc[_0x35e0[19]][_0x35e0[21]]= _0x483fxd[0][_0x35e0[21]];return sequelize[_0x35e0[13]](_0x35e0[28],{type:sequelize[_0x35e0[25]][_0x35e0[24]]})})[_0x35e0[12]](function(_0x483fxd){_0x483fxc[_0x35e0[19]][_0x35e0[26]]= _0x483fxd[0][_0x35e0[26]];return sequelize[_0x35e0[13]](_0x35e0[27],{type:sequelize[_0x35e0[25]][_0x35e0[24]]})})[_0x35e0[12]](function(_0x483fxd){_0x483fxc[_0x35e0[19]][_0x35e0[22]]= _0x483fxd[0][_0x35e0[22]]|| 0;return sequelize[_0x35e0[13]](_0x35e0[23],{type:sequelize[_0x35e0[25]][_0x35e0[24]]})})[_0x35e0[12]](function(_0x483fxd){_0x483fxc[_0x35e0[19]][_0x35e0[18]]= _0x483fxd[0][_0x35e0[18]]|| 0;_0x483fxc[_0x35e0[19]][_0x35e0[20]]= _0x483fxc[_0x35e0[19]][_0x35e0[18]]?((_0x483fxc[_0x35e0[19]][_0x35e0[21]]/ _0x483fxc[_0x35e0[19]][_0x35e0[22]])* 100):0;return _0x483fx8[_0x35e0[11]](200)[_0x35e0[10]](_0x483fxc)})[_0x35e0[9]](function(_0x483fxa){console[_0x35e0[17]](_0x483fxa)})};exports[_0x35e0[50]]= function(_0x483fx7,_0x483fx8){return Dashboard[_0x35e0[49]]()[_0x35e0[12]](function(_0x483fxf){if(!_0x483fxf){return _0x483fx8[_0x35e0[51]](404)};return _0x483fx8[_0x35e0[11]](200)[_0x35e0[10]](_0x483fxf)})[_0x35e0[9]](function(_0x483fxa){return handleError(_0x483fx8,_0x483fxa)})};exports[_0x35e0[52]]= function(_0x483fx7,_0x483fx8){return Dashboard[_0x35e0[55]](_0x483fx7[_0x35e0[54]][_0x35e0[53]])[_0x35e0[12]](function(_0x483fx10){if(!_0x483fx10){return _0x483fx8[_0x35e0[51]](404)};return _0x483fx8[_0x35e0[10]](_0x483fx10)})[_0x35e0[9]](function(_0x483fxa){return handleError(_0x483fx8,_0x483fxa)})};exports[_0x35e0[56]]= function(_0x483fx7,_0x483fx8){return Dashboard[_0x35e0[56]](_0x483fx7[_0x35e0[57]])[_0x35e0[12]](function(_0x483fx10){return _0x483fx8[_0x35e0[11]](201)[_0x35e0[10]](_0x483fx10)})[_0x35e0[9]](function(_0x483fxa){return handleError(_0x483fx8,_0x483fxa)})};exports[_0x35e0[58]]= function(_0x483fx7,_0x483fx8){return Dashboard[_0x35e0[55]](_0x483fx7[_0x35e0[54]][_0x35e0[53]])[_0x35e0[12]](function(_0x483fx10){var _0x483fx11=_0x483fx10[_0x35e0[59]];delete _0x483fx11[_0x35e0[53]];_0x483fx11[_0x35e0[60]]= true;_0x483fx11[_0x35e0[61]]= false;_0x483fx11[_0x35e0[46]]= _0x483fx7[_0x35e0[57]][_0x35e0[46]]|| _0x483fx11[_0x35e0[46]];return Dashboard[_0x35e0[56]](_0x483fx11)})[_0x35e0[12]](function(_0x483fx10){return _0x483fx8[_0x35e0[11]](201)[_0x35e0[10]](_0x483fx10)})[_0x35e0[9]](function(_0x483fxa){return handleError(_0x483fx8,_0x483fxa)})};exports[_0x35e0[62]]= function(_0x483fx7,_0x483fx8){if(_0x483fx7[_0x35e0[57]][_0x35e0[53]]){delete _0x483fx7[_0x35e0[57]][_0x35e0[53]]};return Dashboard[_0x35e0[55]](_0x483fx7[_0x35e0[54]][_0x35e0[53]])[_0x35e0[12]](function(_0x483fx10){if(!_0x483fx10){return _0x483fx8[_0x35e0[51]](404)};var _0x483fx12=_[_0x35e0[63]](_0x483fx10,_0x483fx7[_0x35e0[57]]);return _0x483fx12[_0x35e0[64]]()})[_0x35e0[12]](function(_0x483fx10){return _0x483fx8[_0x35e0[11]](200)[_0x35e0[10]](_0x483fx10)})[_0x35e0[9]](function(_0x483fxa){return handleError(_0x483fx8,_0x483fxa)})};exports[_0x35e0[65]]= function(_0x483fx7,_0x483fx8){return Dashboard[_0x35e0[55]](_0x483fx7[_0x35e0[54]][_0x35e0[53]])[_0x35e0[12]](function(_0x483fx10){if(!_0x483fx10){return _0x483fx8[_0x35e0[51]](404)};return _0x483fx10[_0x35e0[65]]()})[_0x35e0[12]](function(){return _0x483fx8[_0x35e0[51]](204)})[_0x35e0[9]](function(_0x483fxa){return handleError(_0x483fx8,_0x483fxa)})};exports[_0x35e0[66]]= function(_0x483fx7,_0x483fx8){return Dashboard[_0x35e0[65]]({where:{id:_0x483fx7[_0x35e0[13]][_0x35e0[67]]},individualHooks:true})[_0x35e0[12]](function(){return _0x483fx8[_0x35e0[51]](204)})[_0x35e0[9]](function(_0x483fxa){return handleError(_0x483fx8,_0x483fxa)})};function handleError(_0x483fx8,_0x483fxa){return _0x483fx8[_0x35e0[11]](500)[_0x35e0[10]](_0x483fxa)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var Util = require('../../config/util'); + +var Dashboard = require('../../models').Dashboard; +var VoiceQueue = require('../../models').VoiceQueue; +var sequelize = require('../../models').sequelize; + +// Get list of dashboards +exports.index = function(req, res, next) { + return Dashboard + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.init = function(req, res, next) { + + // QUEUE SET + var voice = { + queues: {}, + outbound: {} + }; + + return VoiceQueue + .findAll({ + attributes: ['name'], + raw: true + }) + .then(function(data) { + voice.queues = _.keyBy(data, 'name'); + + return sequelize + .query('SELECT queue, count(*) as waiting \ + FROM report_queue \ + WHERE queuecallerleaveAt IS NULL \ + GROUP BY queue;', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + data.forEach(function(elm) { + if (voice.queues[elm.queue]) { + voice.queues[elm.queue].waiting = elm.waiting; + } + }); + + return sequelize + .query( + 'SELECT queue, count(*) as active \ + FROM report_queue \ + WHERE queuecallerexit = 0 \ + AND queuecallerabandon = 0 \ + AND queuecallercomplete = 0 \ + AND queuecallerleaveAt IS NOT NULL \ + GROUP BY queue;', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + data.forEach(function(elm) { + if (voice.queues[elm.queue]) { + voice.queues[elm.queue].active = elm.active; + } + }); + + return sequelize + .query( + 'SELECT queue, count(*) as abandon \ + FROM report_queue \ + WHERE queuecallerabandon = 1 \ + GROUP BY queue;', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + data.forEach(function(elm) { + if (voice.queues[elm.queue]) { + voice.queues[elm.queue].abandon = elm.abandon; + } + }); + + return sequelize + .query( + 'SELECT queue, count(*) as complete \ + FROM report_queue \ + WHERE queuecallercomplete = 1 \ + GROUP BY queue;', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + data.forEach(function(elm) { + if (voice.queues[elm.queue]) { + voice.queues[elm.queue].complete = elm.complete; + } + }); + + return sequelize + .query('SELECT queue, count(*) as calls, SUM(holdtime) as holdtime \ + FROM report_agent \ + WHERE agentcomplete = 1 \ + GROUP BY queue;', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + data.forEach(function(elm) { + if (voice.queues[elm.queue]) { + voice.queues[elm.queue].holdtime = elm.holdtime; + } + }); + + return sequelize + .query('SELECT queue, count(*) as calls, SUM(talktime) as talktime \ + FROM report_agent \ + WHERE agentcomplete = 1 \ + GROUP BY queue;', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + data.forEach(function(elm) { + if (voice.queues[elm.queue]) { + voice.queues[elm.queue].talktime = elm.talktime; + } + }); + + return sequelize + .query('SELECT queue, count(*) as unmanaged \ + FROM report_queue \ + WHERE queuecallerexit = 1 \ + GROUP BY queue;', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + data.forEach(function(elm) { + if (voice.queues[elm.queue]) { + voice.queues[elm.queue].unmanaged = elm.unmanaged; + } + }); + + return sequelize + .query('SELECT count(*) as answered \ + FROM report_call \ + WHERE disposition = \'ANSWERED\' \ + AND type = \'outbound\';', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + voice.outbound.answered = data[0].answered; + + return sequelize + .query('SELECT count(*) as manualOutbound \ + FROM report_call \ + WHERE type = \'outbound\';', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + voice.outbound.manualOutbound = data[0].manualOutbound; + + return sequelize + .query('SELECT SUM(duration) as globalDuration \ + FROM report_call \ + WHERE type = \'outbound\';', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + voice.outbound.globalDuration = data[0].globalDuration || 0; + + return sequelize + .query('SELECT AVG(duration) as avgDuration \ + FROM report_call \ + WHERE type=\"outbound\"', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + voice.outbound.avgDuration = data[0].avgDuration || 0; + voice.outbound.answerRate = voice.outbound.avgDuration ? ((voice.outbound.answered / voice.outbound.globalDuration) * 100) : 0; + + return res.status(200).send(voice); + }) + .catch(function(err) { + console.error(err); + }); +}; + +// Get a single dashboard +exports.all = function(req, res) { + return Dashboard + .findAll() + .then(function(dashboards) { + if (!dashboards) { + return res.sendStatus(404); + } + return res.status(200).send(dashboards); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single dashboard +exports.show = function(req, res) { + return Dashboard + .findById(req.params.id) + .then(function(dashboard) { + if (!dashboard) { + return res.sendStatus(404); + } + return res.send(dashboard); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new dashboard in the DB. +exports.create = function(req, res) { + return Dashboard + .create(req.body) + .then(function(dashboard) { + return res.status(201).send(dashboard); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Clone a dashboard in the DB. +exports.clone = function(req, res) { + return Dashboard + .findById(req.params.id) + .then(function(dashboard) { + var newDashboard = dashboard.dataValues; + delete newDashboard.id; + newDashboard.editable = true; + newDashboard.defaultEntry = false; + newDashboard.name = req.body.name || newDashboard.name; + return Dashboard + .create(newDashboard); + }) + .then(function(dashboard) { + return res.status(201).send(dashboard); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing dashboard in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return Dashboard + .findById(req.params.id) + .then(function(dashboard) { + if (!dashboard) { + return res.sendStatus(404); + } + var updated = _.merge(dashboard, req.body); + return updated.save(); + }) + .then(function(dashboard) { + return res.status(200).send(dashboard); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a dashboard from the DB. +exports.destroy = function(req, res) { + return Dashboard + .findById(req.params.id) + .then(function(dashboard) { + if (!dashboard) { + return res.sendStatus(404); + } + return dashboard.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.bulkDestroy = function(req, res) { + return Dashboard + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/dashboard/dashboard.events.js b/server/api/dashboard/dashboard.events.js index 9e247e7..2097ae7 100644 --- a/server/api/dashboard/dashboard.events.js +++ b/server/api/dashboard/dashboard.events.js @@ -1 +1,36 @@ -var _0x4e83=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x44\x61\x73\x68\x62\x6F\x61\x72\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x4e83[0];const EventEmitter=require(_0x4e83[1]);const Dashboard=require(_0x4e83[3])[_0x4e83[2]];var DashboardEvents= new EventEmitter();DashboardEvents[_0x4e83[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x4e83[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x4e83[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x4e83[6]};for(var e in events){var event=events[e];Dashboard[_0x4e83[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x49a0x8,_0x49a0x9,_0x49a0xa){DashboardEvents[_0x4e83[10]](event+ _0x4e83[8]+ _0x49a0x8[_0x4e83[9]],_0x49a0x8);DashboardEvents[_0x4e83[10]](event,_0x49a0x8);_0x49a0xa(null)}}module[_0x4e83[11]]= DashboardEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Dashboard = require('../../models').Dashboard; + +var DashboardEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +DashboardEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Dashboard.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + DashboardEvents.emit(event + ':' + doc._id, doc); + DashboardEvents.emit(event, doc); + done(null); + } +} + +module.exports = DashboardEvents; diff --git a/server/api/dashboard/dashboard.socket.js b/server/api/dashboard/dashboard.socket.js index 06db920..f23e2a0 100644 --- a/server/api/dashboard/dashboard.socket.js +++ b/server/api/dashboard/dashboard.socket.js @@ -1 +1,28 @@ -var _0x5c3f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x5c3f[0];const DashboardEvents=require(_0x5c3f[1]);var events=[_0x5c3f[2],_0x5c3f[3]];exports[_0x5c3f[4]]= function(_0x91c0x3){for(var _0x91c0x4=0,_0x91c0x5=events[_0x5c3f[5]];_0x91c0x4< _0x91c0x5;_0x91c0x4++){var _0x91c0x6=events[_0x91c0x4];var _0x91c0x7=createListener(_0x5c3f[6]+ _0x91c0x6,_0x91c0x3);DashboardEvents[_0x5c3f[7]](_0x91c0x6,_0x91c0x7);_0x91c0x3[_0x5c3f[7]](_0x5c3f[8],removeListener(_0x91c0x6,_0x91c0x7))}};function createListener(_0x91c0x6,_0x91c0x3){return function(_0x91c0x9){_0x91c0x3[_0x5c3f[9]](_0x91c0x6,_0x91c0x9)}}function removeListener(_0x91c0x6,_0x91c0x7){return function(){DashboardEvents[_0x5c3f[10]](_0x91c0x6,_0x91c0x7)}} \ No newline at end of file +'use strict'; + +const DashboardEvents = require('./dashboard.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('dashboard:' + event, socket); + + DashboardEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + DashboardEvents.removeListener(event, listener); + }; +} diff --git a/server/api/dashboard/index.js b/server/api/dashboard/index.js index 0aa1d16..5938cba 100644 --- a/server/api/dashboard/index.js +++ b/server/api/dashboard/index.js @@ -1 +1,19 @@ -var _0xb439=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x61\x6C\x6C","\x61\x6C\x6C","\x2F\x76\x6F\x69\x63\x65\x2F\x69\x6E\x69\x74","\x69\x6E\x69\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x3A\x69\x64\x2F\x63\x6C\x6F\x6E\x65","\x63\x6C\x6F\x6E\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xb439[0];var express=require(_0xb439[1]);var controller=require(_0xb439[2]);var auth=require(_0xb439[3]);var router=express.Router();router[_0xb439[10]](_0xb439[4],auth[_0xb439[5]](),auth[_0xb439[8]]([2],[_0xb439[6],_0xb439[7]]),controller[_0xb439[9]]);router[_0xb439[10]](_0xb439[11],auth[_0xb439[5]](),auth[_0xb439[8]]([2],[_0xb439[6]]),controller[_0xb439[12]]);router[_0xb439[10]](_0xb439[13],auth[_0xb439[5]](),auth[_0xb439[8]]([2],[_0xb439[6],_0xb439[7]]),controller[_0xb439[14]]);router[_0xb439[10]](_0xb439[15],auth[_0xb439[5]](),auth[_0xb439[8]]([2],[_0xb439[6],_0xb439[7]]),controller[_0xb439[16]]);router[_0xb439[18]](_0xb439[4],auth[_0xb439[5]](),auth[_0xb439[8]]([2],[_0xb439[6]]),controller[_0xb439[17]]);router[_0xb439[18]](_0xb439[19],auth[_0xb439[5]](),auth[_0xb439[8]]([2],[_0xb439[6]]),controller[_0xb439[20]]);router[_0xb439[22]](_0xb439[15],auth[_0xb439[5]](),auth[_0xb439[8]]([2],[_0xb439[6]]),controller[_0xb439[21]]);router[_0xb439[24]](_0xb439[4],auth[_0xb439[5]](),auth[_0xb439[8]]([2],[_0xb439[6]]),controller[_0xb439[23]]);router[_0xb439[24]](_0xb439[15],auth[_0xb439[5]](),auth[_0xb439[8]]([2],[_0xb439[6]]),controller[_0xb439[25]]);module[_0xb439[26]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./dashboard.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([2], ['admin', 'agent']), controller.index); +router.get('/all', auth.isAuthenticated(), auth.hasModule([2], ['admin']), controller.all); +router.get('/voice/init', auth.isAuthenticated(), auth.hasModule([2], ['admin', 'agent']), controller.init); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([2], ['admin', 'agent']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([2], ['admin']), controller.create); +router.post('/:id/clone', auth.isAuthenticated(), auth.hasModule([2], ['admin']), controller.clone); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([2], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([2], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([2], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/default_metric/default_metric.controller.js b/server/api/default_metric/default_metric.controller.js index 50eec30..321849c 100644 --- a/server/api/default_metric/default_metric.controller.js +++ b/server/api/default_metric/default_metric.controller.js @@ -1 +1,158 @@ -var _0x60f3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x65\x74\x72\x69\x63","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x67\x65\x74\x4D\x65\x74\x72\x69\x63\x73\x42\x79\x54\x61\x62\x6C\x65","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x6C\x65\x6E\x67\x74\x68","\x74\x61\x62\x6C\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x6C\x6F\x6E\x65\x4D\x65\x74\x72\x69\x63","\x69\x64","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x6E\x61\x6D\x65","\x5F","\x63\x72\x65\x61\x74\x65","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64"];_0x60f3[0];var _=require(_0x60f3[1]);var DefaultMetric=require(_0x60f3[3])[_0x60f3[2]];var Metric=require(_0x60f3[3])[_0x60f3[4]];var util=require(_0x60f3[5]);var Util=require(_0x60f3[6]);var sequelize=require(_0x60f3[3])[_0x60f3[7]];var sr=require(_0x60f3[8]);exports[_0x60f3[9]]= function(_0x6261x8,_0x6261x9,_0x6261xa){return DefaultMetric[_0x60f3[16]](Util[_0x60f3[15]](_0x6261x8[_0x60f3[14]]))[_0x60f3[13]](function(_0x6261xc){return _0x6261x9[_0x60f3[12]](200)[_0x60f3[11]](_0x6261xc)})[_0x60f3[10]](function(_0x6261xb){return handleError(_0x6261x9,_0x6261xb)})};exports[_0x60f3[17]]= function(_0x6261x8,_0x6261x9){return DefaultMetric[_0x60f3[21]]({where:{table:_0x6261x8[_0x60f3[14]][_0x60f3[20]]}})[_0x60f3[13]](function(_0x6261xd){if(!_0x6261xd){return _0x6261x9[_0x60f3[18]](404)};return _0x6261x9[_0x60f3[12]](200)[_0x60f3[11]]({count:_0x6261xd[_0x60f3[19]],rows:_0x6261xd})})[_0x60f3[10]](function(_0x6261xb){return handleError(_0x6261x9,_0x6261xb)})};exports[_0x60f3[22]]= function(_0x6261x8,_0x6261x9){return DefaultMetric[_0x60f3[29]](_0x6261x8[_0x60f3[28]][_0x60f3[23]])[_0x60f3[13]](function(_0x6261xe){if(!_0x6261xe){return _0x6261x9[_0x60f3[18]](404)};delete _0x6261xe[_0x60f3[24]][_0x60f3[23]];_0x6261xe[_0x60f3[24]][_0x60f3[25]]+= _0x60f3[26]+ sr({length:5});return Metric[_0x60f3[27]](_0x6261xe[_0x60f3[24]])})[_0x60f3[13]](function(){return _0x6261x9[_0x60f3[18]](201)})[_0x60f3[10]](function(_0x6261xb){return handleError(_0x6261x9,_0x6261xb)})};function handleError(_0x6261x9,_0x6261xb){return _0x6261x9[_0x60f3[12]](500)[_0x60f3[11]](_0x6261xb)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var DefaultMetric = require('../../models').DefaultMetric; +var Metric = require('../../models').Metric; +var util = require('util'); +var Util = require('../../config/util'); +var sequelize = require('../../models').sequelize; +var sr = require('simple-random'); + +// Get list of metrics +exports.index = function(req, res, next) { + return DefaultMetric + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getMetricsByTable = function(req, res) { + return DefaultMetric + .findAll({ + where: { + table: req.query.table + } + }) + .then(function(metrics) { + if (!metrics) { + return res.sendStatus(404); + } + return res.status(200).send({ + count: metrics.length, + rows: metrics + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.cloneMetric = function(req, res) { + return DefaultMetric + .findById(req.params.id) + .then(function(metric) { + if (!metric) { + return res.sendStatus(404); + } + delete metric.dataValues.id; + metric.dataValues.name += '_' + sr({ + length: 5 + }) + return Metric.create(metric.dataValues); + }) + .then(function() { + return res.sendStatus(201); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// // Get a single metric +// exports.show = function(req, res) { +// return Metric +// .findById(req.params.id) +// .then(function(metric) { +// if (!metric) { +// return res.sendStatus(404); +// } +// return res.send(metric); +// }) +// .catch(function(err) { +// return handleError(res, err); +// }); +// }; +// +// // Creates a new metric in the DB. +// exports.create = function(req, res) { +// return Metric +// .create(req.body) +// .then(function(metric) { +// return res.status(201).send(metric); +// }) +// .catch(sequelize.UniqueConstraintError, function(err) { +// err.translatedMessage = 'MESSAGE_EXIST_METRIC'; +// err.message = 'A Metric with that name already exists'; +// return res.status(500).send(err); +// }) +// .catch(function(err) { +// return handleError(res, err); +// }); +// }; +// +// // Updates an existing metric in the DB. +// exports.update = function(req, res) { +// return Metric +// .findById(req.params.id) +// .then(function(metric) { +// if (!metric) { +// return res.sendStatus(404); +// } +// var updated = _.merge(metric, req.body); +// return updated.save(); +// }) +// .then(function() { +// return res.sendStatus(200); +// }) +// .catch(sequelize.UniqueConstraintError, function(err) { +// err.translatedMessage = 'MESSAGE_EXIST_METRIC'; +// err.message = 'A Metric with that name already exists'; +// return res.status(500).send(err); +// }) +// .catch(function(err) { +// console.log(err); +// return handleError(res, err); +// }); +// }; +// +// // Deletes a metric from the DB. +// exports.destroy = function(req, res) { +// return Metric +// .findById(req.params.id) +// .then(function(metric) { +// if (!metric) { +// return res.sendStatus(404); +// } +// return metric.destroy(); +// }) +// .then(function() { +// return res.sendStatus(204); +// }) +// .catch(function(err) { +// return handleError(res, err); +// }); +// }; +// +// exports.bulkDestroy = function(req, res) { +// return Metric +// .destroy({ +// where: { +// id: req.query.ids +// }, +// individualHooks: true +// }) +// .then(function() { +// return res.sendStatus(204); +// }) +// .catch(function(err) { +// return handleError(res, err); +// }); +// }; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/default_metric/index.js b/server/api/default_metric/index.js index 742beaa..4608ee8 100644 --- a/server/api/default_metric/index.js +++ b/server/api/default_metric/index.js @@ -1 +1,19 @@ -var _0xbe2f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x64\x65\x66\x61\x75\x6C\x74\x5F\x6D\x65\x74\x72\x69\x63\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x74\x61\x62\x6C\x65","\x67\x65\x74\x4D\x65\x74\x72\x69\x63\x73\x42\x79\x54\x61\x62\x6C\x65","\x2F\x3A\x69\x64\x2F\x63\x6C\x6F\x6E\x65","\x63\x6C\x6F\x6E\x65\x4D\x65\x74\x72\x69\x63","\x65\x78\x70\x6F\x72\x74\x73"];_0xbe2f[0];var express=require(_0xbe2f[1]);var controller=require(_0xbe2f[2]);var auth=require(_0xbe2f[3]);var router=express.Router();router[_0xbe2f[9]](_0xbe2f[4],auth[_0xbe2f[5]](),auth[_0xbe2f[7]]([17],[_0xbe2f[6]]),controller[_0xbe2f[8]]);router[_0xbe2f[9]](_0xbe2f[10],auth[_0xbe2f[5]](),auth[_0xbe2f[7]]([17],[_0xbe2f[6]]),controller[_0xbe2f[11]]);router[_0xbe2f[9]](_0xbe2f[12],auth[_0xbe2f[5]](),auth[_0xbe2f[7]]([17],[_0xbe2f[6]]),controller[_0xbe2f[13]]);module[_0xbe2f[14]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./default_metric.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.index); +router.get('/table', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.getMetricsByTable); +router.get('/:id/clone', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.cloneMetric); +// router.get('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.show); +// router.post('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.create); +// router.put('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.update); +// router.patch('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.update); +// router.delete('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.bulkDestroy); +// router.delete('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/default_report/default_report.controller.js b/server/api/default_report/default_report.controller.js index 06b4b22..ea51157 100644 --- a/server/api/default_report/default_report.controller.js +++ b/server/api/default_report/default_report.controller.js @@ -1 +1,392 @@ -var _0x9ef1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x46\x69\x65\x6C\x64","\x4D\x65\x74\x72\x69\x63","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x65\x78\x74\x72\x61\x63\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x62\x75\x69\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x52\x65\x70\x6F\x72\x74\x54\x72\x65\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x65\x78\x70\x6F\x72\x74","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x6E\x61\x6D\x65","\x70\x61\x72\x65\x6E\x74","\x74\x61\x62\x6C\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x65\x78\x70\x6F\x72\x74\x46\x69\x65\x6C\x64\x73","\x73\x63\x6F\x70\x65","\x67\x65\x74\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x72\x79","\x45\x72\x72\x6F\x72\x20\x67\x65\x74\x74\x69\x6E\x67\x20\x71\x75\x65\x72\x79\x20\x66\x72\x6F\x6D\x20\x61\x70\x69\x3A","\x6C\x6F\x67","\x6E\x6F\x20\x73\x75\x66\x66\x69\x63\x69\x65\x6E\x74\x20\x71\x75\x65\x75\x65\x20\x70\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E\x73\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x75\x73\x65\x72","\x70\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E","\x61\x6C\x6C","\x62\x75\x69\x6C\x64\x51\x75\x65\x72\x79","\x73\x70\x72\x65\x61\x64","\x75\x73\x65\x72","\x62\x75\x69\x6C\x64\x46\x69\x6C\x74\x65\x72","\x66\x6F\x75\x6E\x64\x20\x72\x65\x70\x6F\x72\x74","\x64\x61\x69\x6C\x79","\x74\x72\x75\x65","\x73\x74\x61\x72\x74\x44\x61\x74\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44","\x66\x6F\x72\x6D\x61\x74","\x65\x6E\x64\x44\x61\x74\x65","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x5F\x68\x69\x73\x74\x6F\x72\x79","","\x72\x65\x70\x6C\x61\x63\x65","\x66\x69\x65\x6C\x64\x73","\x70\x72\x65\x76\x69\x65\x77","\x69\x73\x41\x72\x72\x61\x79","\x6C\x65\x6E\x67\x74\x68","\x6C\x69\x6D\x69\x74","\x76\x61\x6C\x75\x65","\x74\x61\x6B\x65","\x6F\x66\x66\x73\x65\x74","\x73\x6C\x69\x63\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x4F\x77\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x71\x75\x65\x72\x79\x20\x65\x72\x72\x6F\x72","\x63\x68\x65\x63\x6B\x51\x75\x65\x72\x79","\x65\x78\x74\x72\x61\x63\x74\x50\x64\x66","\x50\x44\x46","\x65\x78\x74\x72\x61\x63\x74\x43\x73\x76","\x43\x53\x56","\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x65\x78\x74\x72\x61\x63\x74\x69\x6F\x6E\x2E\x6A\x73","\x66\x6F\x72\x6B","\x65\x72\x72\x6F\x72","\x63\x68\x69\x6C\x64\x20\x65\x72\x72\x6F\x72","\x6F\x6E","\x63\x6C\x6F\x73\x65","\x63\x68\x69\x6C\x64\x20\x63\x6C\x6F\x73\x65","\x6D\x65\x73\x73\x61\x67\x65","\x63\x68\x69\x6C\x64\x20\x6D\x65\x73\x73\x61\x67\x65","\x6B\x69\x6C\x6C","\x74\x72\x65\x65","\x70\x61\x72\x73\x65","\x66\x69\x6E\x64","\x73\x74\x61\x72\x74\x54\x69\x6D\x65","\x20","\x30\x30\x3A\x30\x30","\x65\x6E\x64\x54\x69\x6D\x65","\x32\x33\x3A\x35\x39","\x63\x72\x65\x61\x74\x65","\x74\x65\x78\x74","\x2F\x20","\x23","\x73\x68\x6F\x77","\x63\x6F\x70\x79","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x62\x6F\x64\x79","\x6D\x61\x70","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x67\x65\x74\x54\x61\x62\x6C\x65","\x6B\x65\x79\x73","\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64","\x67\x72\x6F\x75\x70\x42\x79","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x6E\x75\x6C\x6C","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64","\x52\x65\x70\x6F\x72\x74\x46\x69\x65\x6C\x64\x73","\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63","\x5F","\x70\x75\x73\x68","\x66\x69\x65\x6C\x64","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x63\x75\x73\x74\x6F\x6D","\x54\x68\x65\x20\x66\x69\x65\x6C\x64\x20","\x20\x79\x6F\x75\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74\x20\x69\x6E\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x59\x6F\x75\x20\x68\x61\x76\x65\x20\x6E\x6F\x74\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x6F\x72\x20\x74\x68\x65\x20\x74\x61\x62\x6C\x65\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x9ef1[0];var _=require(_0x9ef1[1]);var util=require(_0x9ef1[2]);var DefaultReport=require(_0x9ef1[4])[_0x9ef1[3]];var ReportField=require(_0x9ef1[4])[_0x9ef1[5]];var Metric=require(_0x9ef1[4])[_0x9ef1[6]];var sequelize=require(_0x9ef1[4])[_0x9ef1[7]];var CustomReport=require(_0x9ef1[4])[_0x9ef1[8]];var ExtractedReport=require(_0x9ef1[4])[_0x9ef1[9]];var extractUtils=require(_0x9ef1[10]);var reportBuildUtils=require(_0x9ef1[11]);var Util=require(_0x9ef1[12]);var moment=require(_0x9ef1[13]);var cp=require(_0x9ef1[14]);var sr=require(_0x9ef1[15]);var ReportTree=require(_0x9ef1[4])[_0x9ef1[16]];exports[_0x9ef1[17]]= function(_0x8ac5x10,_0x8ac5x11,_0x8ac5x12){return DefaultReport[_0x9ef1[24]](Util[_0x9ef1[23]](_0x8ac5x10[_0x9ef1[22]]))[_0x9ef1[21]](function(_0x8ac5x14){_0x8ac5x11[_0x9ef1[20]](200)[_0x9ef1[19]](_0x8ac5x14)})[_0x9ef1[18]](function(_0x8ac5x13){return handleError(_0x8ac5x11,_0x8ac5x13)})};exports[_0x9ef1[25]]= function(_0x8ac5x10,_0x8ac5x11){return DefaultReport[_0x9ef1[36]]({method:[_0x9ef1[35],{DefaultReportId:_0x8ac5x10[_0x9ef1[28]][_0x9ef1[27]]}]})[_0x9ef1[34]](_0x8ac5x10[_0x9ef1[28]][_0x9ef1[27]],{attributes:[_0x9ef1[29],_0x9ef1[30],_0x9ef1[31],_0x9ef1[32],_0x9ef1[33]]})[_0x9ef1[21]](function(_0x8ac5x15){if(!_0x8ac5x15){return _0x8ac5x11[_0x9ef1[26]](404)};return _0x8ac5x11[_0x9ef1[19]](_0x8ac5x15)})[_0x9ef1[18]](function(_0x8ac5x13){return handleError(_0x8ac5x11,_0x8ac5x13)})};exports[_0x9ef1[37]]= function(_0x8ac5x10,_0x8ac5x11){return Promise[_0x9ef1[42]]([])[_0x9ef1[21]](getQuery(_0x8ac5x10,_0x8ac5x11))[_0x9ef1[21]](function(_0x8ac5x16){if(_0x8ac5x16){switch(_0x8ac5x16){case _0x9ef1[41]:_0x8ac5x16= _0x9ef1[40];break;default:}};_0x8ac5x11[_0x9ef1[20]](200)[_0x9ef1[19]]({query:_0x8ac5x16})})[_0x9ef1[18]](function(_0x8ac5x13){console[_0x9ef1[39]](_0x9ef1[38],_0x8ac5x13)})};function getQuery(_0x8ac5x10,_0x8ac5x11){var _0x8ac5x18;return function(){return DefaultReport[_0x9ef1[36]](_0x9ef1[58])[_0x9ef1[34]](_0x8ac5x10[_0x9ef1[28]][_0x9ef1[27]])[_0x9ef1[21]](function(_0x8ac5x15){console[_0x9ef1[39]](_0x9ef1[47]);if(!_0x8ac5x15){return _0x8ac5x11[_0x9ef1[26]](404)};if(_0x8ac5x10[_0x9ef1[22]][_0x9ef1[48]]&& _0x8ac5x10[_0x9ef1[22]][_0x9ef1[48]]=== _0x9ef1[49]){_0x8ac5x10[_0x9ef1[22]][_0x9ef1[50]]= moment()[_0x9ef1[52]](_0x9ef1[51]);_0x8ac5x10[_0x9ef1[22]][_0x9ef1[53]]= moment()[_0x9ef1[52]](_0x9ef1[51]);_0x8ac5x15[_0x9ef1[54]][_0x9ef1[33]]= _0x8ac5x15[_0x9ef1[54]][_0x9ef1[33]][_0x9ef1[57]](_0x9ef1[55],_0x9ef1[56])};delete _0x8ac5x10[_0x9ef1[22]][_0x9ef1[48]];_0x8ac5x18= _0x8ac5x15[_0x9ef1[54]];return _0x8ac5x18[_0x9ef1[33]]})[_0x9ef1[21]](reportBuildUtils[_0x9ef1[46]](_0x8ac5x10[_0x9ef1[45]]))[_0x9ef1[21]](function(_0x8ac5x19){return [_0x8ac5x19,_0x8ac5x18]})[_0x9ef1[44]](reportBuildUtils[_0x9ef1[43]](_0x8ac5x10[_0x9ef1[22]]))}}exports[_0x9ef1[59]]= function(_0x8ac5x10,_0x8ac5x11){var _0x8ac5x1a;return Promise[_0x9ef1[42]]([])[_0x9ef1[21]](getQuery(_0x8ac5x10,_0x8ac5x11))[_0x9ef1[21]](reportBuildUtils[_0x9ef1[71]]())[_0x9ef1[21]](function(_0x8ac5x1b){if(_0x8ac5x1b&& _[_0x9ef1[60]](_0x8ac5x1b)){_0x8ac5x1a= _0x8ac5x1b[_0x9ef1[61]];if(_0x8ac5x10[_0x9ef1[22]][_0x9ef1[62]]){_0x8ac5x1b= _(_0x8ac5x1b)[_0x9ef1[66]](_0x8ac5x10[_0x9ef1[22]][_0x9ef1[65]]|| 0)[_0x9ef1[64]](_0x8ac5x10[_0x9ef1[22]][_0x9ef1[62]])[_0x9ef1[63]]()};_[_0x9ef1[69]](_0x8ac5x1b,function(_0x8ac5x1c){_[_0x9ef1[68]](_0x8ac5x1c,function(_0x8ac5x1d,_0x8ac5x1e){if(_0x8ac5x1d instanceof Date){_0x8ac5x1c[_0x8ac5x1e]= moment(_0x8ac5x1d)[_0x9ef1[52]](_0x9ef1[67]).toString()}})});_0x8ac5x11[_0x9ef1[20]](200)[_0x9ef1[19]]({rows:_0x8ac5x1b,count:_0x8ac5x1a})}else {return handleError(_0x8ac5x11,{message:_0x8ac5x1b|| _0x9ef1[70]})}})[_0x9ef1[18]](function(_0x8ac5x13){console[_0x9ef1[39]](_0x8ac5x13);return handleError(_0x8ac5x11,_0x8ac5x13)})};exports[_0x9ef1[72]]= function(_0x8ac5x10,_0x8ac5x11){docExtract(_0x8ac5x10,_0x8ac5x11,_0x9ef1[73])};exports[_0x9ef1[74]]= function(_0x8ac5x10,_0x8ac5x11){docExtract(_0x8ac5x10,_0x8ac5x11,_0x9ef1[75])};function docExtract(_0x8ac5x10,_0x8ac5x11,_0x8ac5x20){var _0x8ac5x15;DefaultReport[_0x9ef1[36]](_0x9ef1[58])[_0x9ef1[34]](_0x8ac5x10[_0x9ef1[28]][_0x9ef1[27]])[_0x9ef1[21]](function(_0x8ac5x18){if(!_0x8ac5x18){return _0x8ac5x11[_0x9ef1[26]](404)};_0x8ac5x15= _0x8ac5x18;return ReportTree[_0x9ef1[34]](1)})[_0x9ef1[21]](function(_0x8ac5x24){_0x8ac5x24= JSON[_0x9ef1[87]](_0x8ac5x24[_0x9ef1[86]]);var _0x8ac5x25=_[_0x9ef1[88]](_0x8ac5x24,{id:_0x8ac5x15[_0x9ef1[32]]});var _0x8ac5x26=getReportPath(_0x8ac5x25,_0x8ac5x24,_0x8ac5x15[_0x9ef1[31]]);if(_0x8ac5x10[_0x9ef1[22]][_0x9ef1[48]]&& _0x8ac5x10[_0x9ef1[22]][_0x9ef1[48]]=== _0x9ef1[49]){_0x8ac5x10[_0x9ef1[22]][_0x9ef1[50]]= moment()[_0x9ef1[52]](_0x9ef1[51]);_0x8ac5x10[_0x9ef1[22]][_0x9ef1[53]]= moment()[_0x9ef1[52]](_0x9ef1[51]);_0x8ac5x15[_0x9ef1[54]][_0x9ef1[33]]= _0x8ac5x15[_0x9ef1[54]][_0x9ef1[33]][_0x9ef1[57]](_0x9ef1[55],_0x9ef1[56])};delete _0x8ac5x10[_0x9ef1[22]][_0x9ef1[48]];return [_0x8ac5x15,ExtractedReport[_0x9ef1[94]]({name:_0x8ac5x26,startDate:_0x8ac5x10[_0x9ef1[22]][_0x9ef1[50]]?_0x8ac5x10[_0x9ef1[22]][_0x9ef1[50]]+ (_0x8ac5x10[_0x9ef1[22]][_0x9ef1[89]]?_0x9ef1[90]+ _0x8ac5x10[_0x9ef1[22]][_0x9ef1[89]]:_0x9ef1[91]):null,endDate:_0x8ac5x10[_0x9ef1[22]][_0x9ef1[53]]?_0x8ac5x10[_0x9ef1[22]][_0x9ef1[53]]+ (_0x8ac5x10[_0x9ef1[22]][_0x9ef1[92]]?_0x9ef1[90]+ _0x8ac5x10[_0x9ef1[22]][_0x9ef1[92]]:_0x9ef1[93]):null,output:_0x8ac5x20,UserId:_0x8ac5x10[_0x9ef1[45]][_0x9ef1[27]]})]})[_0x9ef1[44]](function(_0x8ac5x15,_0x8ac5x21){var _0x8ac5x22=cp[_0x9ef1[77]](__dirname+ _0x9ef1[76]);_0x8ac5x22[_0x9ef1[80]](_0x9ef1[83],function(_0x8ac5x23){console[_0x9ef1[39]](_0x9ef1[84],_0x8ac5x23);_0x8ac5x22[_0x9ef1[85]]()})[_0x9ef1[80]](_0x9ef1[81],function(){console[_0x9ef1[39]](_0x9ef1[82])})[_0x9ef1[80]](_0x9ef1[78],function(_0x8ac5x13){console[_0x9ef1[39]](_0x9ef1[79],_0x8ac5x13)});_0x8ac5x22[_0x9ef1[19]]({report:_0x8ac5x15,query:_0x8ac5x10[_0x9ef1[22]],extractedId:_0x8ac5x21[_0x9ef1[27]],user:_0x8ac5x10[_0x9ef1[45]],type:_0x8ac5x20})})[_0x9ef1[18]](function(_0x8ac5x13){console[_0x9ef1[39]](_0x8ac5x13);return handleError(_0x8ac5x11,_0x8ac5x13)});return _0x8ac5x11[_0x9ef1[26]](200)}function getReportPath(_0x8ac5x25,_0x8ac5x24,_0x8ac5x26){_0x8ac5x26= _0x8ac5x25[_0x9ef1[95]]+ _0x9ef1[96]+ _0x8ac5x26;if(_0x8ac5x25[_0x9ef1[32]]=== _0x9ef1[97]){return _0x8ac5x26}else {return getReportPath(_[_0x9ef1[88]](_0x8ac5x24,{id:_0x8ac5x25[_0x9ef1[32]]}),_0x8ac5x24,_0x8ac5x26)}}exports[_0x9ef1[98]]= function(_0x8ac5x10,_0x8ac5x11){return DefaultReport[_0x9ef1[34]](_0x8ac5x10[_0x9ef1[28]][_0x9ef1[27]],{include:[{all:true}]})[_0x9ef1[21]](function(_0x8ac5x15){if(!_0x8ac5x15){return _0x8ac5x11[_0x9ef1[26]](404)};return _0x8ac5x11[_0x9ef1[19]](_0x8ac5x15)})[_0x9ef1[18]](function(_0x8ac5x13){return handleError(_0x8ac5x11,_0x8ac5x13)})};exports[_0x9ef1[99]]= function(_0x8ac5x10,_0x8ac5x11){var _0x8ac5x28;return sequelize[_0x9ef1[104]](function(_0x8ac5x29){return DefaultReport[_0x9ef1[36]]({method:[_0x9ef1[35],{DefaultReportId:_0x8ac5x10[_0x9ef1[28]][_0x9ef1[27]]}]})[_0x9ef1[34]](_0x8ac5x10[_0x9ef1[28]][_0x9ef1[27]])[_0x9ef1[21]](function(_0x8ac5x15){if(!_0x8ac5x15){return _0x8ac5x11[_0x9ef1[26]](404)};var _0x8ac5x2a=_0x8ac5x15[_0x9ef1[54]];console[_0x9ef1[39]](_0x8ac5x2a);delete _0x8ac5x2a[_0x9ef1[27]];delete _0x8ac5x2a[_0x9ef1[100]];delete _0x8ac5x2a[_0x9ef1[101]];_0x8ac5x2a[_0x9ef1[32]]= _0x8ac5x10[_0x9ef1[102]][_0x9ef1[32]];_0x8ac5x28= _[_0x9ef1[103]](_0x8ac5x2a.Fields,_0x9ef1[54]);return CustomReport[_0x9ef1[94]](_0x8ac5x2a,{transaction:_0x8ac5x29})})[_0x9ef1[21]](function(_0x8ac5x15){return [_0x8ac5x15,_0x8ac5x28]})[_0x9ef1[44]](createCopyFields(_0x8ac5x29))})[_0x9ef1[21]](function(){return _0x8ac5x11[_0x9ef1[26]](201)})[_0x9ef1[18]](function(_0x8ac5x13){console[_0x9ef1[39]](_0x8ac5x13);return handleError(_0x8ac5x11,_0x8ac5x13)})};function createCopyFields(_0x8ac5x29){return function(_0x8ac5x15,_0x8ac5x2c){if(_0x8ac5x2c&& Array[_0x9ef1[60]](_0x8ac5x2c)&& _0x8ac5x2c[_0x9ef1[61]]){var _0x8ac5x2d=reportBuildUtils[_0x9ef1[105]](_0x8ac5x15[_0x9ef1[33]]);if(_0x8ac5x2d){var _0x8ac5x2e;return _0x8ac5x2d[_0x9ef1[121]]()[_0x9ef1[21]](function(_0x8ac5x2f){_0x8ac5x2e= _[_0x9ef1[106]](_0x8ac5x2f);var _0x8ac5x30=[];var _0x8ac5x31=_[_0x9ef1[108]](_0x8ac5x2c,_0x9ef1[107]);_[_0x9ef1[68]](_0x8ac5x31,function(_0x8ac5x32,_0x8ac5x1e){if(_0x8ac5x1e!== _0x9ef1[109]&& _0x8ac5x1e!== _0x9ef1[110]){_0x8ac5x32[0][_0x9ef1[113]][_0x9ef1[112]][_0x9ef1[69]](function(_0x8ac5x33){_0x8ac5x33[_0x9ef1[111]]= _0x8ac5x15[_0x9ef1[27]]});_0x8ac5x32[0][_0x9ef1[113]][_0x9ef1[31]]+= _0x9ef1[114]+ sr({length:5});_0x8ac5x30[_0x9ef1[115]](Metric[_0x9ef1[94]](_0x8ac5x32[0][_0x9ef1[113]][_0x9ef1[54]],{include:[{model:ReportField,as:_0x9ef1[112]}],transaction:_0x8ac5x29}))}else {_0x8ac5x32[_0x9ef1[69]](function(_0x8ac5x33){if(_[_0x9ef1[117]](_0x8ac5x2e,_0x8ac5x33[_0x9ef1[116]])|| _0x8ac5x33[_0x9ef1[118]]){_0x8ac5x33[_0x9ef1[111]]= _0x8ac5x15[_0x9ef1[27]];_0x8ac5x30[_0x9ef1[115]](ReportField[_0x9ef1[94]](_0x8ac5x33,{transaction:_0x8ac5x29}))}else {throw new sequelize.Error(_0x9ef1[119]+ _0x8ac5x33[_0x9ef1[116]]+ _0x9ef1[120])}})}});return _0x8ac5x30})[_0x9ef1[42]]()}else {throw new sequelize.Error(_0x9ef1[122])}}}}exports[_0x9ef1[94]]= function(_0x8ac5x10,_0x8ac5x11){return DefaultReport[_0x9ef1[94]](_0x8ac5x10[_0x9ef1[102]])[_0x9ef1[21]](function(_0x8ac5x15){return _0x8ac5x11[_0x9ef1[20]](201)[_0x9ef1[19]](_0x8ac5x15)})[_0x9ef1[18]](function(_0x8ac5x13){return handleError(_0x8ac5x11,_0x8ac5x13)})};exports[_0x9ef1[123]]= function(_0x8ac5x10,_0x8ac5x11){if(_0x8ac5x10[_0x9ef1[102]][_0x9ef1[27]]){delete _0x8ac5x10[_0x9ef1[102]][_0x9ef1[27]]};return DefaultReport[_0x9ef1[34]](_0x8ac5x10[_0x9ef1[28]][_0x9ef1[27]])[_0x9ef1[21]](function(_0x8ac5x15){if(!_0x8ac5x15){return _0x8ac5x11[_0x9ef1[26]](404)};var _0x8ac5x34=_[_0x9ef1[124]](_0x8ac5x15,_0x8ac5x10[_0x9ef1[102]]);return _0x8ac5x34[_0x9ef1[125]]()})[_0x9ef1[21]](function(_0x8ac5x15){return _0x8ac5x11[_0x9ef1[20]](200)[_0x9ef1[19]](_0x8ac5x15)})[_0x9ef1[18]](function(_0x8ac5x13){return handleError(_0x8ac5x11,_0x8ac5x13)})};exports[_0x9ef1[126]]= function(_0x8ac5x10,_0x8ac5x11){return DefaultReport[_0x9ef1[34]](_0x8ac5x10[_0x9ef1[28]][_0x9ef1[27]])[_0x9ef1[21]](function(_0x8ac5x15){if(!_0x8ac5x15){return _0x8ac5x11[_0x9ef1[26]](404)};return _0x8ac5x15[_0x9ef1[126]]()})[_0x9ef1[21]](function(){return _0x8ac5x11[_0x9ef1[26]](204)})[_0x9ef1[18]](function(_0x8ac5x13){return handleError(_0x8ac5x11,_0x8ac5x13)})};function handleError(_0x8ac5x11,_0x8ac5x13){return _0x8ac5x11[_0x9ef1[20]](500)[_0x9ef1[19]](_0x8ac5x13)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var DefaultReport = require('../../models').DefaultReport; +var ReportField = require('../../models').ReportField; +var Metric = require('../../models').Metric; +var sequelize = require('../../models').sequelize; +var CustomReport = require('../../models').CustomReport; +var ExtractedReport = require('../../models').ExtractedReport; +var extractUtils = require('../../utils/report_extraction'); +var reportBuildUtils = require('../../utils/report_build'); +var Util = require('../../config/util'); +var moment = require('moment'); +var cp = require('child_process'); +var sr = require('simple-random'); +var ReportTree = require('../../models').ReportTree; + +// Get list of agents +exports.index = function(req, res, next) { + return DefaultReport + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single report +exports.export = function(req, res) { + return DefaultReport + .scope({ + method: ['exportFields', { + DefaultReportId: req.params.id + }] + }) //add where condition on customreport id + .findById(req.params.id, { + attributes: ['conditions', 'description', 'name', 'parent', 'table'] + }) + .then(function(report) { + if (!report) { + return res.sendStatus(404); + } + return res.send(report); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + + +exports.getReportQuery = function(req, res) { + return Promise + .all([]) + .then(getQuery(req, res)) + .then(function(query) { + if (query) { + switch (query) { + case 'permission': + query = 'no sufficient queue permissions for the user'; + break; + default: + } + } + res.status(200).send({ + query: query + }); + }) + .catch(function(err) { + console.log('Error getting query from api:', err); + }); +} + +function getQuery(req, res) { + var _report; + return function() { + return DefaultReport + .scope('fields') + .findById(req.params.id) + .then(function(report) { + console.log('found report'); + if (!report) { + return res.sendStatus(404); + } + if (req.query.daily && req.query.daily === 'true') { + req.query.startDate = moment().format('YYYY-MM-DD'); + req.query.endDate = moment().format('YYYY-MM-DD'); + report.dataValues.table = report.dataValues.table.replace( + '_history', ''); + } + delete req.query.daily; + _report = report.dataValues; + return _report.table; + }) + .then(reportBuildUtils.buildFilter(req.user)) + .then(function(filter) { + return [filter, _report]; + }) + .spread(reportBuildUtils.buildQuery(req.query)) + } +} + +exports.preview = function(req, res) { + var _countAll; + return Promise + .all([]) + .then(getQuery(req, res)) + .then(reportBuildUtils.checkQuery()) + .then(function(results) { + if (results && _.isArray(results)) { + _countAll = results.length; + if (req.query.limit) { + results = _(results).slice(req.query.offset || 0).take(req.query.limit).value(); + } + _.forEach(results, function(row) { + _.forOwn(row, function(property, key) { + if (property instanceof Date) { + row[key] = moment(property).format("YYYY-MM-DD HH:mm:ss").toString(); + } + }); + }); + res.status(200).send({ + rows: results, + count: _countAll + }); + } else { + return handleError(res, { + message: results || 'query error' + }); + } + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.extractPdf = function(req, res) { + // console.log('extractPdf api function'); + docExtract(req, res, 'PDF') +}; + +exports.extractCsv = function(req, res) { + // console.log('extractCsv api function'); + docExtract(req, res, 'CSV'); +}; + +function docExtract(req, res, typeFunction) { + var report; + // console.log('common docExtract api function'); + DefaultReport //DO NOT ADD RETURN CAUSE THE EXTRACTING FUNCTION WILL KEEP EXTRACTING AFTER THE API HAS RETURNED + .scope('fields') + .findById(req.params.id) + .then(function(_report) { + if (!_report) { + return res.sendStatus(404); + } + report = _report; + return ReportTree + .findById(1); + }) + .then(function(tree) { + tree = JSON.parse(tree.tree); + var folder = _.find(tree, { + id: report.parent + }); + var path = getReportPath(folder, tree, report.name); + // console.log('found the report, creating the new DB row for extracted reports..'); + //CREATE A DB ROW IN A TABLE WITH THE REPORT INFO, QUERY DATES, AND THE STATUS 'ELABORATING' + if (req.query.daily && req.query.daily === 'true') { + req.query.startDate = moment().format('YYYY-MM-DD'); + req.query.endDate = moment().format('YYYY-MM-DD'); + report.dataValues.table = report.dataValues.table.replace('_history', ''); + } + delete req.query.daily; + return [report, ExtractedReport.create({ + name: path, + startDate: req.query.startDate ? req.query.startDate + (req.query.startTime ? ' ' + req.query.startTime : '00:00') : null, + endDate: req.query.endDate ? req.query.endDate + (req.query.endTime ? ' ' + req.query.endTime : '23:59') : null, + output: typeFunction, + UserId: req.user.id + })] + }) + .spread(function(report, extractedReport) { + // console.log('created new extracted reports db entry, calling external extraction function: ' + typeFunction); + var child = cp.fork(__dirname + '/../../utils/report_extraction.js'); + child.on('message', function(data) { + console.log('child message', data); + child.kill(); + }).on('close', function() { + console.log('child close'); + }).on('error', function(err) { + console.log('child error', err); + }); + child.send({ + report: report, + query: req.query, + extractedId: extractedReport.id, + user: req.user, + type: typeFunction + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + return res.sendStatus(200); +} + +function getReportPath(folder, tree, path) { + path = folder.text + '/ ' + path; + if (folder.parent === '#') { + return path; + } else { + return getReportPath(_.find(tree, { + id: folder.parent + }), tree, path); + } +} + +// Get a single report +exports.show = function(req, res) { + return DefaultReport + .findById(req.params.id, { + include: [{ + all: true + }] + }) + .then(function(report) { + if (!report) { + return res.sendStatus(404); + } + return res.send(report); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Copy a default report +exports.copy = function(req, res) { + var _fields; + return sequelize.transaction(function(t) { + return DefaultReport + .scope({ + method: ['exportFields', { + DefaultReportId: req.params.id + }] + }) + .findById(req.params.id) + .then(function(report) { + if (!report) { + return res.sendStatus(404); + } + var newReport = report.dataValues; + console.log(newReport); + delete newReport.id; + delete newReport.createdAt; + delete newReport.updatedAt; + newReport.parent = req.body.parent; + _fields = _.map(newReport.Fields, 'dataValues'); + return CustomReport.create(newReport, { + transaction: t + }) + }) + .then(function(report) { + return [report, _fields]; + }) + .spread(createCopyFields(t)); + }) + .then(function() { + return res.sendStatus(201); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +function createCopyFields(t) { + return function(report, fields) { + if (fields && Array.isArray(fields) && fields.length) { + var tableModel = reportBuildUtils.getTable(report.table); + if (tableModel) { + var _tableFields; + return tableModel + .describe() + .then(function(tableFields) { + _tableFields = _.keys(tableFields); + var bulkFields = []; + var groupedFields = _.groupBy(fields, 'DefaultMetricId'); + _.forOwn(groupedFields, function(value, key) { + if (key !== 'undefined' && key !== 'null') { + value[0].DefaultMetric.ReportFields.forEach(function(elem) { + elem.CustomReportId = report.id; + }); + value[0].DefaultMetric.name += '_' + sr({ + length: 5 + }); + bulkFields.push(Metric + .create(value[0].DefaultMetric.dataValues, { + include: [{ + model: ReportField, + as: 'ReportFields' + }], + transaction: t + })); + } else { + value.forEach(function(elem) { + if (_.includes(_tableFields, elem.field) || elem.custom) { + elem.CustomReportId = report.id; + bulkFields.push(ReportField + .create(elem, { + transaction: t + })); + } else { + throw new sequelize.Error("The field " + elem.field + + " you specified does not exist in the table" + ); + } + }); + } + }); + return bulkFields; + }) + .all(); + } else { + throw new sequelize.Error( + "You have not specified the table or the table does not exist"); + } + } + } +} + + +// Creates a new report in the DB. +exports.create = function(req, res) { + return DefaultReport + .create(req.body) + .then(function(report) { + return res.status(201).send(report); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing report in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return DefaultReport + .findById(req.params.id) + .then(function(report) { + if (!report) { + return res.sendStatus(404); + } + var updated = _.merge(report, req.body); + return updated.save(); + }) + .then(function(report) { + return res.status(200).send(report); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a report from the DB. +exports.destroy = function(req, res) { + return DefaultReport + .findById(req.params.id) + .then(function(report) { + if (!report) { + return res.sendStatus(404); + } + return report.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/default_report/default_report.events.js b/server/api/default_report/default_report.events.js index b524d3a..d10d898 100644 --- a/server/api/default_report/default_report.events.js +++ b/server/api/default_report/default_report.events.js @@ -1 +1,36 @@ -var _0xe94d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xe94d[0];const EventEmitter=require(_0xe94d[1]);const DefaultReport=require(_0xe94d[3])[_0xe94d[2]];var DefaultReportEvents= new EventEmitter();DefaultReportEvents[_0xe94d[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xe94d[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xe94d[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xe94d[6]};for(var e in events){var event=events[e];DefaultReport[_0xe94d[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xd70bx8,_0xd70bx9,_0xd70bxa){DefaultReportEvents[_0xe94d[10]](event+ _0xe94d[8]+ _0xd70bx8[_0xe94d[9]],_0xd70bx8);DefaultReportEvents[_0xe94d[10]](event,_0xd70bx8);_0xd70bxa(null)}}module[_0xe94d[11]]= DefaultReportEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const DefaultReport = require('../../models').DefaultReport; + +var DefaultReportEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +DefaultReportEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + DefaultReport.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + DefaultReportEvents.emit(event + ':' + doc._id, doc); + DefaultReportEvents.emit(event, doc); + done(null); + } +} + +module.exports = DefaultReportEvents; diff --git a/server/api/default_report/default_report.socket.js b/server/api/default_report/default_report.socket.js index 0667c37..db50575 100644 --- a/server/api/default_report/default_report.socket.js +++ b/server/api/default_report/default_report.socket.js @@ -1 +1,28 @@ -var _0x140c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x64\x65\x66\x61\x75\x6C\x74\x5F\x72\x65\x70\x6F\x72\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x66\x61\x75\x6C\x74\x5F\x72\x65\x70\x6F\x72\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x140c[0];const DefaultReportEvents=require(_0x140c[1]);var events=[_0x140c[2],_0x140c[3]];exports[_0x140c[4]]= function(_0x5795x3){for(var _0x5795x4=0,_0x5795x5=events[_0x140c[5]];_0x5795x4< _0x5795x5;_0x5795x4++){var _0x5795x6=events[_0x5795x4];var _0x5795x7=createListener(_0x140c[6]+ _0x5795x6,_0x5795x3);DefaultReportEvents[_0x140c[7]](_0x5795x6,_0x5795x7);_0x5795x3[_0x140c[7]](_0x140c[8],removeListener(_0x5795x6,_0x5795x7))}};function createListener(_0x5795x6,_0x5795x3){return function(_0x5795x9){_0x5795x3[_0x140c[9]](_0x5795x6,_0x5795x9)}}function removeListener(_0x5795x6,_0x5795x7){return function(){DefaultReportEvents[_0x140c[10]](_0x5795x6,_0x5795x7)}} \ No newline at end of file +'use strict'; + +const DefaultReportEvents = require('./default_report.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('default_report:' + event, socket); + + DefaultReportEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + DefaultReportEvents.removeListener(event, listener); + }; +} diff --git a/server/api/default_report/index.js b/server/api/default_report/index.js index 6aa52f9..019d6fb 100644 --- a/server/api/default_report/index.js +++ b/server/api/default_report/index.js @@ -1 +1,21 @@ -var _0xef2f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x64\x65\x66\x61\x75\x6C\x74\x5F\x72\x65\x70\x6F\x72\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x70\x72\x65\x76\x69\x65\x77","\x70\x72\x65\x76\x69\x65\x77","\x2F\x3A\x69\x64\x2F\x71\x75\x65\x72\x79","\x67\x65\x74\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x72\x79","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x65\x78\x70\x6F\x72\x74","\x65\x78\x70\x6F\x72\x74","\x2F\x3A\x69\x64\x2F\x65\x78\x74\x72\x61\x63\x74\x2F\x70\x64\x66","\x65\x78\x74\x72\x61\x63\x74\x50\x64\x66","\x2F\x3A\x69\x64\x2F\x65\x78\x74\x72\x61\x63\x74\x2F\x63\x73\x76","\x65\x78\x74\x72\x61\x63\x74\x43\x73\x76","\x2F\x3A\x69\x64\x2F\x63\x6F\x70\x79","\x63\x6F\x70\x79","\x70\x6F\x73\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xef2f[0];var express=require(_0xef2f[1]);var controller=require(_0xef2f[2]);var auth=require(_0xef2f[3]);var router=express.Router();router[_0xef2f[9]](_0xef2f[4],auth[_0xef2f[5]](),auth[_0xef2f[7]]([17],[_0xef2f[6]]),controller[_0xef2f[8]]);router[_0xef2f[9]](_0xef2f[10],auth[_0xef2f[5]](),auth[_0xef2f[7]]([17],[_0xef2f[6]]),controller[_0xef2f[11]]);router[_0xef2f[9]](_0xef2f[12],auth[_0xef2f[5]](),auth[_0xef2f[7]]([17],[_0xef2f[6]]),controller[_0xef2f[13]]);router[_0xef2f[9]](_0xef2f[14],auth[_0xef2f[5]](),auth[_0xef2f[7]]([17],[_0xef2f[6]]),controller[_0xef2f[15]]);router[_0xef2f[9]](_0xef2f[16],auth[_0xef2f[5]](),auth[_0xef2f[7]]([17],[_0xef2f[6]]),controller[_0xef2f[17]]);router[_0xef2f[9]](_0xef2f[18],auth[_0xef2f[5]](),auth[_0xef2f[7]]([17],[_0xef2f[6]]),controller[_0xef2f[19]]);router[_0xef2f[9]](_0xef2f[20],auth[_0xef2f[5]](),auth[_0xef2f[7]]([17],[_0xef2f[6]]),controller[_0xef2f[21]]);router[_0xef2f[24]](_0xef2f[22],auth[_0xef2f[5]](),auth[_0xef2f[7]]([17],[_0xef2f[6]]),controller[_0xef2f[23]]);module[_0xef2f[25]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./default_report.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.index); +router.get('/:id/preview', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.preview); +router.get('/:id/query', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.getReportQuery); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.show); +router.get('/:id/export', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.export); +// router.post('/', controller.create); +router.get('/:id/extract/pdf', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.extractPdf); +router.get('/:id/extract/csv', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.extractCsv); +router.post('/:id/copy', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.copy); +// router.put('/:id', controller.update); +// router.delete('/:id', controller.destroy); + +module.exports = router; diff --git a/server/api/desk_account/desk_account.controller.js b/server/api/desk_account/desk_account.controller.js index 089f83a..f65313b 100644 --- a/server/api/desk_account/desk_account.controller.js +++ b/server/api/desk_account/desk_account.controller.js @@ -1 +1,255 @@ -var _0xbd63=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x64\x65\x73\x6B\x2E\x6A\x73","\x44\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x6E\x61\x6D\x65","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x72\x65\x6D\x6F\x74\x65\x55\x72\x69","\x70\x65\x72\x5F\x70\x61\x67\x65","\x71\x75\x65\x72\x79","\x70\x61\x67\x65","\x6F\x72\x64\x65\x72","\x25\x73\x20\x25\x73","\x73\x6F\x72\x74\x5F\x62\x79","\x73\x6F\x72\x74\x5F\x6F\x72\x64\x65\x72","\x41\x53\x43","\x66\x6F\x72\x6D\x61\x74","\x24\x6F\x72","\x77\x68\x65\x72\x65","\x25","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x24","\x24\x6C\x69\x6B\x65","\x66\x6F\x72\x49\x6E","\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x62\x6C\x65\x77\x20\x75\x70\x21","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x63\x61\x74\x63\x68","\x63\x6F\x75\x6E\x74","\x63\x65\x69\x6C","\x6F\x66\x66\x73\x65\x74","\x25\x73\x3A\x2F\x2F\x25\x73\x25\x73\x3F\x70\x61\x67\x65\x3D\x25\x64","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x68\x6F\x73\x74","\x68\x65\x61\x64\x65\x72\x73","\x62\x61\x73\x65\x55\x72\x6C","\x72\x6F\x77\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x61\x75\x74\x68\x54\x79\x70\x65","\x62\x61\x73\x69\x63","\x70\x61\x73\x73\x77\x6F\x72\x64","\x6F\x61\x75\x74\x68","\x63\x6F\x6E\x73\x75\x6D\x65\x72\x4B\x65\x79","\x63\x6F\x6E\x73\x75\x6D\x65\x72\x53\x65\x63\x72\x65\x74","\x74\x6F\x6B\x65\x6E","\x74\x6F\x6B\x65\x6E\x53\x65\x63\x72\x65\x74","\x63\x72\x65\x61\x74\x65\x43\x6C\x69\x65\x6E\x74","\x2F\x61\x70\x69\x2F\x76\x32\x2F\x75\x73\x65\x72\x73\x2F\x6D\x65","\x67\x65\x74","\x64\x65\x73\x6B\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x2F\x61\x70\x69\x2F\x76\x32\x2F\x63\x75\x73\x74\x6F\x6D\x5F\x66\x69\x65\x6C\x64\x73","\x65\x6E\x74\x72\x69\x65\x73","\x5F\x65\x6D\x62\x65\x64\x64\x65\x64","\x6A\x73\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x73\x75\x62\x73\x74\x72","\x2F","\x6C\x65\x6E\x67\x74\x68"];_0xbd63[0];var _=require(_0xbd63[1]);var util=require(_0xbd63[2]);var desk=require(_0xbd63[3]);var DeskAccount=require(_0xbd63[5])[_0xbd63[4]];exports[_0xbd63[6]]= function(_0x8563x5,_0x8563x6){var _0x8563x7=[_0xbd63[7],_0xbd63[8],_0xbd63[9],_0xbd63[10]];var _0x8563x8=_0x8563x5[_0xbd63[12]][_0xbd63[11]]?parseInt(_0x8563x5[_0xbd63[12]][_0xbd63[11]],10):100;var _0x8563x9=_0x8563x5[_0xbd63[12]][_0xbd63[13]]?parseInt(_0x8563x5[_0xbd63[12]][_0xbd63[13]],10):0;var _0x8563xa={where:{},limit:_0x8563x8,offset:_0x8563x9* _0x8563x8};_[_0xbd63[27]](_0x8563x5[_0xbd63[12]],function(_0x8563xb,_0x8563xc){switch(_0x8563xc){case _0xbd63[11]:;case _0xbd63[13]:break;case _0xbd63[16]:_0x8563xa[_0xbd63[14]]= util[_0xbd63[19]](_0xbd63[15],_0x8563x5[_0xbd63[12]][_0xbd63[16]],_0x8563x5[_0xbd63[12]][_0xbd63[17]]|| _0xbd63[18])|| null;break;case _0xbd63[17]:break;case _0xbd63[25]:_0x8563xa[_0xbd63[21]][_0xbd63[20]]= [];_0x8563x7[_0xbd63[24]](function(_0x8563xd){var _0x8563xe={};_0x8563xe[_0x8563xd]= {$like:_0xbd63[22]+ _0x8563xb+ _0xbd63[22]};_0x8563xa[_0xbd63[21]][_0xbd63[20]][_0xbd63[23]](_0x8563xe)});break;default:_0x8563xa[_0xbd63[21]][_0x8563xc]= {$like:{}};_0x8563xa[_0xbd63[21]][_0x8563xc][_0xbd63[26]]= _0xbd63[22]+ _0x8563xb+ _0xbd63[22]}});return DeskAccount[_0xbd63[42]](_0x8563xa)[_0xbd63[41]](function(_0x8563x10){var _0x8563x11=Math[_0xbd63[33]](_0x8563x10[_0xbd63[32]]/ _0x8563x8);var _0x8563x12=_0x8563x11> (_0x8563xa[_0xbd63[34]]+ 1)?util[_0xbd63[19]](_0xbd63[35],_0x8563x5[_0xbd63[36]],_0x8563x5[_0xbd63[38]][_0xbd63[37]],_0x8563x5[_0xbd63[39]],_0x8563x9+ 1):null;var _0x8563x13=_0x8563x9> 0?util[_0xbd63[19]](_0xbd63[35],_0x8563x5[_0xbd63[36]],_0x8563x5[_0xbd63[38]][_0xbd63[37]],_0x8563x5[_0xbd63[39]],_0x8563x9- 1):null;return _0x8563x6[_0xbd63[30]](200)[_0xbd63[29]]({count:_0x8563x10[_0xbd63[32]],rows:_0x8563x10[_0xbd63[40]],next_page:_0x8563x12,previous_page:_0x8563x13,total_pages:_0x8563x11})})[_0xbd63[31]](function(_0x8563xf){return _0x8563x6[_0xbd63[30]](500)[_0xbd63[29]]({error:_0xbd63[28]})})};exports[_0xbd63[43]]= function(_0x8563x5,_0x8563x6){DeskAccount[_0xbd63[47]](_0x8563x5[_0xbd63[46]][_0xbd63[45]])[_0xbd63[41]](function(_0x8563x14){if(!_0x8563x14){return _0x8563x6[_0xbd63[44]](404)};return _0x8563x6[_0xbd63[29]](_0x8563x14)})[_0xbd63[31]](function(_0x8563xf){return handleError(_0x8563x6,_0x8563xf)})};exports[_0xbd63[48]]= function(_0x8563x5,_0x8563x6,_0x8563x15){DeskAccount[_0xbd63[48]](_0x8563x5[_0xbd63[49]])[_0xbd63[41]](function(_0x8563x14){return _0x8563x6[_0xbd63[30]](201)[_0xbd63[29]](_0x8563x14)})[_0xbd63[31]](function(_0x8563xf){return handleError(_0x8563x6,_0x8563xf)})};exports[_0xbd63[50]]= function(_0x8563x5,_0x8563x6){if(_0x8563x5[_0xbd63[49]][_0xbd63[45]]){delete _0x8563x5[_0xbd63[49]][_0xbd63[45]]};DeskAccount[_0xbd63[47]](_0x8563x5[_0xbd63[46]][_0xbd63[45]])[_0xbd63[41]](function(_0x8563x14){if(!_0x8563x14){return _0x8563x6[_0xbd63[44]](404)};var _0x8563x16=_[_0xbd63[51]](_0x8563x14,_0x8563x5[_0xbd63[49]]);_0x8563x16[_0xbd63[52]]()[_0xbd63[41]](function(){return _0x8563x6[_0xbd63[30]](200)[_0xbd63[29]](_0x8563x14)})[_0xbd63[31]](function(_0x8563xf){return handleError(_0x8563x6,_0x8563xf)})})[_0xbd63[31]](function(_0x8563xf){return handleError(_0x8563x6,_0x8563xf)})};exports[_0xbd63[53]]= function(_0x8563x5,_0x8563x6){DeskAccount[_0xbd63[47]](_0x8563x5[_0xbd63[46]][_0xbd63[45]])[_0xbd63[41]](function(_0x8563x14){if(!_0x8563x14){return _0x8563x6[_0xbd63[44]](404)};_0x8563x14[_0xbd63[53]]()[_0xbd63[41]](function(){return _0x8563x6[_0xbd63[44]](204)})[_0xbd63[31]](function(_0x8563xf){return handleError(_0x8563x6,_0x8563xf)})})[_0xbd63[31]](function(_0x8563xf){return handleError(_0x8563x6,_0x8563xf)})};exports[_0xbd63[54]]= function(_0x8563x5,_0x8563x6){DeskAccount[_0xbd63[47]](_0x8563x5[_0xbd63[46]][_0xbd63[45]])[_0xbd63[41]](function(_0x8563x17){var _0x8563x14={endpoint:stripTrailingSlash(_0x8563x17[_0xbd63[10]]),retry:false};if(_0x8563x17[_0xbd63[55]]=== _0xbd63[56]){_0x8563x14[_0xbd63[9]]= _0x8563x17[_0xbd63[9]];_0x8563x14[_0xbd63[57]]= _0x8563x17[_0xbd63[57]]}else {if(_0x8563x17[_0xbd63[55]]=== _0xbd63[58]){_0x8563x14[_0xbd63[59]]= _0x8563x17[_0xbd63[59]];_0x8563x14[_0xbd63[60]]= _0x8563x17[_0xbd63[60]];_0x8563x14[_0xbd63[61]]= _0x8563x17[_0xbd63[61]];_0x8563x14[_0xbd63[62]]= _0x8563x17[_0xbd63[62]]}};var _0x8563x18=desk[_0xbd63[63]](_0x8563x14);_0x8563x18[_0xbd63[65]](_0xbd63[64],function(_0x8563xf,_0x8563x19,_0x8563x1a){if(_0x8563xf){return handleError(_0x8563x6,_0x8563xf)};return _0x8563x6[_0xbd63[44]](200)})})[_0xbd63[31]](function(_0x8563xf){return handleError(_0x8563x6,_0x8563xf)})};exports[_0xbd63[66]]= function(_0x8563x5,_0x8563x6){var _0x8563x1b={};_0x8563x1b[_0x8563x5[_0xbd63[46]][_0xbd63[67]]]= _0x8563x5[_0xbd63[49]][_0xbd63[68]];DeskAccount[_0xbd63[42]]({where:_0x8563x1b})[_0xbd63[41]](function(_0x8563x10){if(_0x8563x10[_0xbd63[32]]){return _0x8563x6[_0xbd63[30]](200)[_0xbd63[29]]({isValid:false,value:_0x8563x5[_0xbd63[49]][_0xbd63[68]]})};return _0x8563x6[_0xbd63[30]](200)[_0xbd63[29]]({isValid:true,value:_0x8563x5[_0xbd63[49]][_0xbd63[68]]})})[_0xbd63[31]](function(_0x8563xf){return handleError(_0x8563x6,_0x8563xf)})};exports[_0xbd63[69]]= function(_0x8563x5,_0x8563x6){DeskAccount[_0xbd63[47]](_0x8563x5[_0xbd63[46]][_0xbd63[45]])[_0xbd63[41]](function(_0x8563x17){var _0x8563x14={endpoint:stripTrailingSlash(_0x8563x17[_0xbd63[10]]),retry:false};if(_0x8563x17[_0xbd63[55]]=== _0xbd63[56]){_0x8563x14[_0xbd63[9]]= _0x8563x17[_0xbd63[9]];_0x8563x14[_0xbd63[57]]= _0x8563x17[_0xbd63[57]]}else {if(_0x8563x17[_0xbd63[55]]=== _0xbd63[58]){_0x8563x14[_0xbd63[59]]= _0x8563x17[_0xbd63[59]];_0x8563x14[_0xbd63[60]]= _0x8563x17[_0xbd63[60]];_0x8563x14[_0xbd63[61]]= _0x8563x17[_0xbd63[61]];_0x8563x14[_0xbd63[62]]= _0x8563x17[_0xbd63[62]]}};var _0x8563x18=desk[_0xbd63[63]](_0x8563x14);_0x8563x18[_0xbd63[65]](_0xbd63[70],function(_0x8563xf,_0x8563x19,_0x8563x1a){if(_0x8563xf){return handleError(_0x8563x6,_0x8563xf)};return _0x8563x6[_0xbd63[30]](200)[_0xbd63[73]](_0x8563x19[_0xbd63[72]][_0xbd63[71]])})})[_0xbd63[31]](function(_0x8563xf){return handleError(_0x8563x6,_0x8563xf)})};exports[_0xbd63[74]]= function(_0x8563x5,_0x8563x6){DeskAccount[_0xbd63[53]]({where:{id:_0x8563x5[_0xbd63[12]][_0xbd63[45]]},individualHooks:true})[_0xbd63[41]](function(){return _0x8563x6[_0xbd63[44]](204)})[_0xbd63[31]](function(_0x8563xf){return handleError(_0x8563x6,_0x8563xf)})};function stripTrailingSlash(_0x8563x1d){if(_0x8563x1d[_0xbd63[75]](-1) === _0xbd63[76]){return _0x8563x1d[_0xbd63[75]](0,_0x8563x1d[_0xbd63[77]]- 1)};return _0x8563x1d}function handleError(_0x8563x6,_0x8563xf){return _0x8563x6[_0xbd63[30]](500)[_0xbd63[29]](_0x8563xf)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var desk = require('desk.js'); + +var DeskAccount = require('../../models').DeskAccount; + +// Get list of desk_accounts +exports.index = function(req, res) { + var attributes = ['description', 'name', 'username', 'remoteUri']; + var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100; + var page = req.query.page ? parseInt(req.query.page, 10) : 0; + + var query = { + where: {}, + limit: per_page, + offset: page * per_page + }; + + _.forIn(req.query, function(value, key) { + switch (key) { + case 'per_page': + case 'page': + break; + case 'sort_by': + query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null; + break; + case 'sort_order': + break; + case '$': + query.where.$or = []; + attributes.forEach(function(attribute) { + var tmp = {}; + tmp[attribute] = { + $like: '%' + value + '%' + }; + + query.where.$or.push(tmp); + }); + break; + default: + query.where[key] = { + $like: {} + }; + query.where[key].$like = '%' + value + '%'; + } + }); + + return DeskAccount + .findAndCountAll(query) + .then(function(result) { + + var total_pages = Math.ceil(result.count / per_page); + var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null; + var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null; + + return res.status(200).send({ + count: result.count, + rows: result.rows, + next_page: next_page, + previous_page: previous_page, + total_pages: total_pages + }); + }) + .catch(function(err) { + return res.status(500).send({ + error: 'Something blew up!' + }); + }); +}; + +// Get a single desk_account +exports.show = function(req, res) { + DeskAccount + .findById(req.params.id) + .then(function(desk_account) { + if (!desk_account) { + return res.sendStatus(404); + } + return res.send(desk_account); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new desk_account in the DB. +exports.create = function(req, res, next) { + DeskAccount + .create(req.body) + .then(function(desk_account) { + return res.status(201).send(desk_account); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing desk_account in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + DeskAccount + .findById(req.params.id) + .then(function(desk_account) { + if (!desk_account) { + return res.sendStatus(404); + } + var updated = _.merge(desk_account, req.body); + updated.save() + .then(function() { + return res.status(200).send(desk_account); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a desk_account from the DB. +exports.destroy = function(req, res) { + DeskAccount + .findById(req.params.id) + .then(function(desk_account) { + if (!desk_account) { + return res.sendStatus(404); + } + desk_account.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.checkAccount = function(req, res) { + DeskAccount + .findById(req.params.id) + .then(function(account) { + var desk_account = { + endpoint: stripTrailingSlash(account.remoteUri), + retry: false + }; + if (account.authType === 'basic') { + desk_account.username = account.username; + desk_account.password = account.password; + } else if (account.authType === 'oauth') { + desk_account.consumerKey = account.consumerKey; + desk_account.consumerSecret = account.consumerSecret; + desk_account.token = account.token; + desk_account.tokenSecret = account.tokenSecret; + } + var client = desk.createClient(desk_account); + client.get('/api/v2/users/me', function(err, body, response) { + if (err) { + return handleError(res, err); + } + return res.sendStatus(200); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.deskValidation = function(req, res) { + var where = {}; + where[req.params.field] = req.body.value; + DeskAccount + .findAndCountAll({ + where: where + }) + .then(function(result) { + if (result.count) { + return res.status(200).send({ + isValid: false, + value: req.body.value + }); + } + return res.status(200).send({ + isValid: true, + value: req.body.value + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getFields = function(req, res) { + DeskAccount + .findById(req.params.id) + .then(function(account) { + var desk_account = { + endpoint: stripTrailingSlash(account.remoteUri), + retry: false + }; + if (account.authType === 'basic') { + desk_account.username = account.username; + desk_account.password = account.password; + } else if (account.authType === 'oauth') { + desk_account.consumerKey = account.consumerKey; + desk_account.consumerSecret = account.consumerSecret; + desk_account.token = account.token; + desk_account.tokenSecret = account.tokenSecret; + } + var client = desk.createClient(desk_account); + client.get('/api/v2/custom_fields', function(err, body, response) { + if (err) { + return handleError(res, err); + } + return res.status(200).json(body._embedded.entries); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.bulkDestroy = function(req, res) { + DeskAccount + .destroy({ + where: { + id: req.query.id + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function stripTrailingSlash(str) { + if (str.substr(-1) === '/') { + return str.substr(0, str.length - 1); + } + return str; +} + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/desk_account/desk_account.events.js b/server/api/desk_account/desk_account.events.js index 3b3c9c8..3a0d697 100644 --- a/server/api/desk_account/desk_account.events.js +++ b/server/api/desk_account/desk_account.events.js @@ -1 +1,36 @@ -var _0xe276=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x44\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xe276[0];const EventEmitter=require(_0xe276[1]);const DeskAccount=require(_0xe276[3])[_0xe276[2]];var DeskAccountEvents= new EventEmitter();DeskAccountEvents[_0xe276[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xe276[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xe276[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xe276[6]};for(var e in events){var event=events[e];DeskAccount[_0xe276[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x7e1dx8,_0x7e1dx9,_0x7e1dxa){DeskAccountEvents[_0xe276[10]](event+ _0xe276[8]+ _0x7e1dx8[_0xe276[9]],_0x7e1dx8);DeskAccountEvents[_0xe276[10]](event,_0x7e1dx8);_0x7e1dxa(null)}}module[_0xe276[11]]= DeskAccountEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const DeskAccount = require('../../models').DeskAccount; + +var DeskAccountEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +DeskAccountEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + DeskAccount.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + DeskAccountEvents.emit(event + ':' + doc._id, doc); + DeskAccountEvents.emit(event, doc); + done(null); + } +} + +module.exports = DeskAccountEvents; diff --git a/server/api/desk_account/desk_account.socket.js b/server/api/desk_account/desk_account.socket.js index c4f5090..1d543a4 100644 --- a/server/api/desk_account/desk_account.socket.js +++ b/server/api/desk_account/desk_account.socket.js @@ -1 +1,28 @@ -var _0x6c09=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x6c09[0];const DeskAccountEvents=require(_0x6c09[1]);var events=[_0x6c09[2],_0x6c09[3]];exports[_0x6c09[4]]= function(_0x7ffdx3){for(var _0x7ffdx4=0,_0x7ffdx5=events[_0x6c09[5]];_0x7ffdx4< _0x7ffdx5;_0x7ffdx4++){var _0x7ffdx6=events[_0x7ffdx4];var _0x7ffdx7=createListener(_0x6c09[6]+ _0x7ffdx6,_0x7ffdx3);DeskAccountEvents[_0x6c09[7]](_0x7ffdx6,_0x7ffdx7);_0x7ffdx3[_0x6c09[7]](_0x6c09[8],removeListener(_0x7ffdx6,_0x7ffdx7))}};function createListener(_0x7ffdx6,_0x7ffdx3){return function(_0x7ffdx9){_0x7ffdx3[_0x6c09[9]](_0x7ffdx6,_0x7ffdx9)}}function removeListener(_0x7ffdx6,_0x7ffdx7){return function(){DeskAccountEvents[_0x6c09[10]](_0x7ffdx6,_0x7ffdx7)}} \ No newline at end of file +'use strict'; + +const DeskAccountEvents = require('./desk_account.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('desk_account:' + event, socket); + + DeskAccountEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + DeskAccountEvents.removeListener(event, listener); + }; +} diff --git a/server/api/desk_account/index.js b/server/api/desk_account/index.js index 39b635b..506e627 100644 --- a/server/api/desk_account/index.js +++ b/server/api/desk_account/index.js @@ -1 +1,18 @@ -var _0xf821=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2F\x3A\x69\x64\x2F\x66\x69\x65\x6C\x64\x73","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65\x2F\x3A\x66\x69\x65\x6C\x64","\x64\x65\x73\x6B\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xf821[0];var express=require(_0xf821[1]);var controller=require(_0xf821[2]);var auth=require(_0xf821[3]);var router=express.Router();router[_0xf821[9]](_0xf821[4],auth[_0xf821[5]](),auth[_0xf821[7]]([19,13],[_0xf821[6]]),controller[_0xf821[8]]);router[_0xf821[9]](_0xf821[10],auth[_0xf821[5]](),auth[_0xf821[7]]([19],[_0xf821[6]]),controller[_0xf821[11]]);router[_0xf821[9]](_0xf821[12],auth[_0xf821[5]](),auth[_0xf821[7]]([19],[_0xf821[6]]),controller[_0xf821[13]]);router[_0xf821[9]](_0xf821[14],auth[_0xf821[5]](),auth[_0xf821[7]]([19],[_0xf821[6]]),controller[_0xf821[15]]);router[_0xf821[18]](_0xf821[16],auth[_0xf821[5]](),auth[_0xf821[7]]([19],[_0xf821[6]]),controller[_0xf821[17]]);router[_0xf821[18]](_0xf821[4],auth[_0xf821[5]](),auth[_0xf821[7]]([19],[_0xf821[6]]),controller[_0xf821[19]]);router[_0xf821[21]](_0xf821[10],auth[_0xf821[5]](),auth[_0xf821[7]]([19],[_0xf821[6]]),controller[_0xf821[20]]);router[_0xf821[23]](_0xf821[4],auth[_0xf821[5]](),auth[_0xf821[7]]([19],[_0xf821[6]]),controller[_0xf821[22]]);router[_0xf821[23]](_0xf821[10],auth[_0xf821[5]](),auth[_0xf821[7]]([19],[_0xf821[6]]),controller[_0xf821[24]]);module[_0xf821[25]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./desk_account.controller'); +var auth = require('../../auth/auth.service'); +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([19, 13], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.show); +router.get('/:id/check', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.checkAccount); +router.get('/:id/fields', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.getFields); +router.post('/validate/:field', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.deskValidation); +router.post('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/desk_configuration/desk_configuration.controller.js b/server/api/desk_configuration/desk_configuration.controller.js index 78b30e6..3824ca1 100644 --- a/server/api/desk_configuration/desk_configuration.controller.js +++ b/server/api/desk_configuration/desk_configuration.controller.js @@ -1 +1,145 @@ -var _0x896e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x44\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x44\x65\x73\x6B\x46\x69\x65\x6C\x64","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x53\x75\x62\x6A\x65\x63\x74","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x46\x69\x65\x6C\x64","\x66\x69\x6E\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x73\x70\x72\x65\x61\x64","\x61\x64\x64\x53\x75\x62\x6A\x65\x63\x74","\x73\x75\x62\x6A\x65\x63\x74","\x61\x64\x64\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x61\x64\x64\x46\x69\x65\x6C\x64","\x66\x69\x65\x6C\x64","\x74\x79\x70\x65"];_0x896e[0];var _=require(_0x896e[1]);var DeskConfiguration=require(_0x896e[3])[_0x896e[2]];var DeskField=require(_0x896e[3])[_0x896e[4]];function handleError(_0xed95x5,_0xed95x6){_0xed95x6= _0xed95x6|| 500;return function(_0xed95x7){_0xed95x5[_0x896e[6]](_0xed95x6)[_0x896e[5]](_0xed95x7)}}function responseWithResult(_0xed95x5,_0xed95x6){_0xed95x6= _0xed95x6|| 200;return function(_0xed95x9){if(_0xed95x9){_0xed95x5[_0x896e[6]](_0xed95x6)[_0x896e[7]](_0xed95x9)}}}function handleEntityNotFound(_0xed95x5){return function(_0xed95x9){if(!_0xed95x9){_0xed95x5[_0x896e[6]](404)[_0x896e[8]]();return null};return _0xed95x9}}function saveUpdates(_0xed95xc){return function(_0xed95x9){return _0xed95x9[_0x896e[10]](_0xed95xc)[_0x896e[9]](function(_0xed95xd){return _0xed95xd})}}function removeEntity(_0xed95x5){return function(_0xed95x9){if(_0xed95x9){return _0xed95x9[_0x896e[11]]()[_0x896e[9]](function(){_0xed95x5[_0x896e[6]](204)[_0x896e[8]]()})}}}exports[_0x896e[12]]= function(_0xed95xf,_0xed95x5){DeskConfiguration[_0x896e[15]]({where:_0xed95xf[_0x896e[14]]})[_0x896e[9]](responseWithResult(_0xed95x5))[_0x896e[13]](handleError(_0xed95x5))};exports[_0x896e[16]]= function(_0xed95xf,_0xed95x5){DeskConfiguration[_0x896e[22]]({where:{id:_0xed95xf[_0x896e[18]][_0x896e[17]]},include:[{model:DeskField,as:_0x896e[19]},{model:DeskField,as:_0x896e[20]},{model:DeskField,as:_0x896e[21]}]})[_0x896e[9]](handleEntityNotFound(_0xed95x5))[_0x896e[9]](responseWithResult(_0xed95x5))[_0x896e[13]](handleError(_0xed95x5))};exports[_0x896e[23]]= function(_0xed95xf,_0xed95x5){DeskConfiguration[_0x896e[23]](_0xed95xf[_0x896e[24]])[_0x896e[9]](responseWithResult(_0xed95x5,201))[_0x896e[13]](handleError(_0xed95x5))};exports[_0x896e[25]]= function(_0xed95xf,_0xed95x5){if(_0xed95xf[_0x896e[24]][_0x896e[17]]){delete _0xed95xf[_0x896e[24]][_0x896e[17]]};DeskConfiguration[_0x896e[26]](_0xed95xf[_0x896e[18]][_0x896e[17]])[_0x896e[9]](handleEntityNotFound(_0xed95x5))[_0x896e[9]](saveUpdates(_0xed95xf[_0x896e[24]]))[_0x896e[9]](responseWithResult(_0xed95x5))[_0x896e[13]](handleError(_0xed95x5))};exports[_0x896e[11]]= function(_0xed95xf,_0xed95x5){DeskConfiguration[_0x896e[26]](_0xed95xf[_0x896e[18]][_0x896e[17]])[_0x896e[9]](handleEntityNotFound(_0xed95x5))[_0x896e[9]](removeEntity(_0xed95x5))[_0x896e[13]](handleError(_0xed95x5))};exports[_0x896e[27]]= function(_0xed95xf,_0xed95x5,_0xed95x10){var _0xed95x11;DeskConfiguration[_0x896e[26]](_0xed95xf[_0x896e[18]][_0x896e[17]])[_0x896e[9]](handleEntityNotFound(_0xed95x5))[_0x896e[9]](function(_0xed95x14){_0xed95x11= _0xed95x14;return DeskField[_0x896e[23]](_0xed95xf[_0x896e[24]])})[_0x896e[9]](function(_0xed95x13){switch(_0xed95xf[_0x896e[18]][_0x896e[35]]){case _0x896e[30]:return [_0xed95x11[_0x896e[29]](_0xed95x13),_0xed95x13];case _0x896e[32]:return [_0xed95x11[_0x896e[31]](_0xed95x13),_0xed95x13];case _0x896e[34]:return [_0xed95x11[_0x896e[33]](_0xed95x13),_0xed95x13]}})[_0x896e[28]](function(_0xed95x12,_0xed95x13){return _0xed95x5[_0x896e[6]](201)[_0x896e[7]](_0xed95x13)})[_0x896e[13]](handleError(_0xed95x5))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/desk/configurations -> index + * POST /api/desk/configurations -> create + * GET /api/desk/configurations/:id -> show + * PUT /api/desk/configurations/:id -> update + * DELETE /api/desk/configurations/:id -> destroy + */ + +'use strict'; + +var _ = require('lodash'); + +var DeskConfiguration = require('../../models').DeskConfiguration; +var DeskField = require('../../models').DeskField; + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of DeskConfigurations +exports.index = function(req, res) { + DeskConfiguration.findAll({ + where: req.query + }) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single DeskConfiguration from the DB +exports.show = function(req, res) { + DeskConfiguration.find({ + where: { + id: req.params.id + }, + include: [{ + model: DeskField, + as: 'Subject' + }, { + model: DeskField, + as: 'Description' + }, { + model: DeskField, + as: 'Field' + }] + }) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new DeskConfiguration in the DB +exports.create = function(req, res) { + DeskConfiguration.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing DeskConfiguration in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + DeskConfiguration.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a DeskConfiguration from the DB +exports.destroy = function(req, res) { + DeskConfiguration.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +exports.addConfigurationField = function(req, res, next) { + // console.log(req.params); + var deskConfiguration; + DeskConfiguration + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(desk_configuration) { + deskConfiguration = desk_configuration; + return DeskField.create(req.body) + }) + .then(function(deskField) { + switch (req.params.type) { + case 'subject': + return [deskConfiguration.addSubject(deskField), deskField]; + case 'description': + return [deskConfiguration.addDescription(deskField), deskField]; + case 'field': + return [deskConfiguration.addField(deskField), deskField]; + } + }) + .spread(function(data, deskField) { + return res.status(201).json(deskField); + }) + .catch(handleError(res)); +}; diff --git a/server/api/desk_configuration/desk_configuration.events.js b/server/api/desk_configuration/desk_configuration.events.js index cb9bd87..12fbc47 100644 --- a/server/api/desk_configuration/desk_configuration.events.js +++ b/server/api/desk_configuration/desk_configuration.events.js @@ -1 +1,36 @@ -var _0x1b54=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x44\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x1b54[0];const EventEmitter=require(_0x1b54[1]);const DeskConfiguration=require(_0x1b54[3])[_0x1b54[2]];var DeskConfigurationEvents= new EventEmitter();DeskConfigurationEvents[_0x1b54[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x1b54[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x1b54[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x1b54[6]};for(var e in events){var event=events[e];DeskConfiguration[_0x1b54[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xfca9x8,_0xfca9x9,_0xfca9xa){DeskConfigurationEvents[_0x1b54[10]](event+ _0x1b54[8]+ _0xfca9x8[_0x1b54[9]],_0xfca9x8);DeskConfigurationEvents[_0x1b54[10]](event,_0xfca9x8);_0xfca9xa(null)}}module[_0x1b54[11]]= DeskConfigurationEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const DeskConfiguration = require('../../models').DeskConfiguration; + +var DeskConfigurationEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +DeskConfigurationEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + DeskConfiguration.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + DeskConfigurationEvents.emit(event + ':' + doc._id, doc); + DeskConfigurationEvents.emit(event, doc); + done(null); + } +} + +module.exports = DeskConfigurationEvents; diff --git a/server/api/desk_configuration/desk_configuration.socket.js b/server/api/desk_configuration/desk_configuration.socket.js index acec37b..5bc3ca6 100644 --- a/server/api/desk_configuration/desk_configuration.socket.js +++ b/server/api/desk_configuration/desk_configuration.socket.js @@ -1 +1,28 @@ -var _0x1768=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x1768[0];const DeskConfigurationEvents=require(_0x1768[1]);var events=[_0x1768[2],_0x1768[3]];exports[_0x1768[4]]= function(_0x8430x3){for(var _0x8430x4=0,_0x8430x5=events[_0x1768[5]];_0x8430x4< _0x8430x5;_0x8430x4++){var _0x8430x6=events[_0x8430x4];var _0x8430x7=createListener(_0x1768[6]+ _0x8430x6,_0x8430x3);DeskConfigurationEvents[_0x1768[7]](_0x8430x6,_0x8430x7);_0x8430x3[_0x1768[7]](_0x1768[8],removeListener(_0x8430x6,_0x8430x7))}};function createListener(_0x8430x6,_0x8430x3){return function(_0x8430x9){_0x8430x3[_0x1768[9]](_0x8430x6,_0x8430x9)}}function removeListener(_0x8430x6,_0x8430x7){return function(){DeskConfigurationEvents[_0x1768[10]](_0x8430x6,_0x8430x7)}} \ No newline at end of file +'use strict'; + +const DeskConfigurationEvents = require('./desk_configuration.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('desk_configuration:' + event, socket); + + DeskConfigurationEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + DeskConfigurationEvents.removeListener(event, listener); + }; +} diff --git a/server/api/desk_configuration/index.js b/server/api/desk_configuration/index.js index db439ad..23cf463 100644 --- a/server/api/desk_configuration/index.js +++ b/server/api/desk_configuration/index.js @@ -1 +1,18 @@ -var _0xba0f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x3A\x74\x79\x70\x65","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xba0f[0];var express=require(_0xba0f[1]);var auth=require(_0xba0f[2]);var controller=require(_0xba0f[3]);var router=express.Router();router[_0xba0f[7]](_0xba0f[4],auth[_0xba0f[5]](),controller[_0xba0f[6]]);router[_0xba0f[7]](_0xba0f[8],auth[_0xba0f[5]](),auth[_0xba0f[10]]([19],[_0xba0f[9]]),controller[_0xba0f[11]]);router[_0xba0f[13]](_0xba0f[4],auth[_0xba0f[5]](),auth[_0xba0f[10]]([19],[_0xba0f[9]]),controller[_0xba0f[12]]);router[_0xba0f[15]](_0xba0f[8],auth[_0xba0f[5]](),auth[_0xba0f[10]]([19],[_0xba0f[9]]),controller[_0xba0f[14]]);router[_0xba0f[13]](_0xba0f[16],auth[_0xba0f[5]](),auth[_0xba0f[10]]([19],[_0xba0f[9]]),controller[_0xba0f[17]]);router[_0xba0f[19]](_0xba0f[8],auth[_0xba0f[5]](),auth[_0xba0f[10]]([19],[_0xba0f[9]]),controller[_0xba0f[18]]);module[_0xba0f[20]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./desk_configuration.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); + +router.get('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.update); +router.post('/:id/:type', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.addConfigurationField); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroy); + + +module.exports = router; diff --git a/server/api/desk_field/desk_field.controller.js b/server/api/desk_field/desk_field.controller.js index 70d2732..6b39f83 100644 --- a/server/api/desk_field/desk_field.controller.js +++ b/server/api/desk_field/desk_field.controller.js @@ -1 +1,104 @@ -var _0xde69=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x44\x65\x73\x6B\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0xde69[0];var _=require(_0xde69[1]);var DeskField=require(_0xde69[3])[_0xde69[2]];function handleError(_0x3618x4,_0x3618x5){_0x3618x5= _0x3618x5|| 500;return function(_0x3618x6){_0x3618x4[_0xde69[5]](_0x3618x5)[_0xde69[4]](_0x3618x6)}}function responseWithResult(_0x3618x4,_0x3618x5){_0x3618x5= _0x3618x5|| 200;return function(_0x3618x8){if(_0x3618x8){_0x3618x4[_0xde69[5]](_0x3618x5)[_0xde69[6]](_0x3618x8)}}}function handleEntityNotFound(_0x3618x4){return function(_0x3618x8){if(!_0x3618x8){_0x3618x4[_0xde69[5]](404)[_0xde69[7]]();return null};return _0x3618x8}}function saveUpdates(_0x3618xb){return function(_0x3618x8){return _0x3618x8[_0xde69[9]](_0x3618xb)[_0xde69[8]](function(_0x3618xc){return _0x3618xc})}}function removeEntity(_0x3618x4){return function(_0x3618x8){if(_0x3618x8){return _0x3618x8[_0xde69[10]]()[_0xde69[8]](function(){_0x3618x4[_0xde69[5]](204)[_0xde69[7]]()})}}}exports[_0xde69[11]]= function(_0x3618xe,_0x3618x4){DeskField[_0xde69[13]]()[_0xde69[8]](responseWithResult(_0x3618x4))[_0xde69[12]](handleError(_0x3618x4))};exports[_0xde69[14]]= function(_0x3618xe,_0x3618x4){DeskField[_0xde69[17]](_0x3618xe[_0xde69[16]][_0xde69[15]])[_0xde69[8]](handleEntityNotFound(_0x3618x4))[_0xde69[8]](responseWithResult(_0x3618x4))[_0xde69[12]](handleError(_0x3618x4))};exports[_0xde69[18]]= function(_0x3618xe,_0x3618x4){DeskField[_0xde69[18]](_0x3618xe[_0xde69[19]])[_0xde69[8]](responseWithResult(_0x3618x4,201))[_0xde69[12]](handleError(_0x3618x4))};exports[_0xde69[20]]= function(_0x3618xe,_0x3618x4){if(_0x3618xe[_0xde69[19]][_0xde69[15]]){delete _0x3618xe[_0xde69[19]][_0xde69[15]]};DeskField[_0xde69[17]](_0x3618xe[_0xde69[16]][_0xde69[15]])[_0xde69[8]](handleEntityNotFound(_0x3618x4))[_0xde69[8]](saveUpdates(_0x3618xe[_0xde69[19]]))[_0xde69[8]](responseWithResult(_0x3618x4))[_0xde69[12]](handleError(_0x3618x4))};exports[_0xde69[10]]= function(_0x3618xe,_0x3618x4){DeskField[_0xde69[17]](_0x3618xe[_0xde69[16]][_0xde69[15]])[_0xde69[8]](handleEntityNotFound(_0x3618x4))[_0xde69[8]](removeEntity(_0x3618x4))[_0xde69[12]](handleError(_0x3618x4))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/desk/fields -> index + * POST /api/desk/fields -> create + * GET /api/desk/fields/:id -> show + * PUT /api/desk/fields/:id -> update + * DELETE /api/desk/fields/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); + +var DeskField = require('../../models').DeskField; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of DeskFields +exports.index = function(req, res) { + DeskField.findAll() + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single DeskField from the DB +exports.show = function(req, res) { + DeskField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new DeskField in the DB +exports.create = function(req, res) { + DeskField.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing DeskField in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + DeskField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a DeskField from the DB +exports.destroy = function(req, res) { + DeskField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} diff --git a/server/api/desk_field/desk_field.events.js b/server/api/desk_field/desk_field.events.js index 7227faa..90e8c70 100644 --- a/server/api/desk_field/desk_field.events.js +++ b/server/api/desk_field/desk_field.events.js @@ -1 +1,36 @@ -var _0x8e83=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x44\x65\x73\x6B\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x8e83[0];const EventEmitter=require(_0x8e83[1]);const DeskField=require(_0x8e83[3])[_0x8e83[2]];var DeskFieldEvents= new EventEmitter();DeskFieldEvents[_0x8e83[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x8e83[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x8e83[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x8e83[6]};for(var e in events){var event=events[e];DeskField[_0x8e83[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x5d89x8,_0x5d89x9,_0x5d89xa){DeskFieldEvents[_0x8e83[10]](event+ _0x8e83[8]+ _0x5d89x8[_0x8e83[9]],_0x5d89x8);DeskFieldEvents[_0x8e83[10]](event,_0x5d89x8);_0x5d89xa(null)}}module[_0x8e83[11]]= DeskFieldEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const DeskField = require('../../models').DeskField; + +var DeskFieldEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +DeskFieldEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + DeskField.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + DeskFieldEvents.emit(event + ':' + doc._id, doc); + DeskFieldEvents.emit(event, doc); + done(null); + } +} + +module.exports = DeskFieldEvents; diff --git a/server/api/desk_field/desk_field.socket.js b/server/api/desk_field/desk_field.socket.js index 1d12b38..b8144e2 100644 --- a/server/api/desk_field/desk_field.socket.js +++ b/server/api/desk_field/desk_field.socket.js @@ -1 +1,28 @@ -var _0xa686=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xa686[0];const DeskFieldEvents=require(_0xa686[1]);var events=[_0xa686[2],_0xa686[3]];exports[_0xa686[4]]= function(_0x7f45x3){for(var _0x7f45x4=0,_0x7f45x5=events[_0xa686[5]];_0x7f45x4< _0x7f45x5;_0x7f45x4++){var _0x7f45x6=events[_0x7f45x4];var _0x7f45x7=createListener(_0xa686[6]+ _0x7f45x6,_0x7f45x3);DeskFieldEvents[_0xa686[7]](_0x7f45x6,_0x7f45x7);_0x7f45x3[_0xa686[7]](_0xa686[8],removeListener(_0x7f45x6,_0x7f45x7))}};function createListener(_0x7f45x6,_0x7f45x3){return function(_0x7f45x9){_0x7f45x3[_0xa686[9]](_0x7f45x6,_0x7f45x9)}}function removeListener(_0x7f45x6,_0x7f45x7){return function(){DeskFieldEvents[_0xa686[10]](_0x7f45x6,_0x7f45x7)}} \ No newline at end of file +'use strict'; + +const DeskFieldEvents = require('./desk_field.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('desk_field:' + event, socket); + + DeskFieldEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + DeskFieldEvents.removeListener(event, listener); + }; +} diff --git a/server/api/desk_field/index.js b/server/api/desk_field/index.js index c37f93a..37342d1 100644 --- a/server/api/desk_field/index.js +++ b/server/api/desk_field/index.js @@ -1 +1,16 @@ -var _0x90c2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x90c2[0];var express=require(_0x90c2[1]);var auth=require(_0x90c2[2]);var controller=require(_0x90c2[3]);var router=express.Router();router[_0x90c2[9]](_0x90c2[4],auth[_0x90c2[5]](),auth[_0x90c2[7]]([19],[_0x90c2[6]]),controller[_0x90c2[8]]);router[_0x90c2[9]](_0x90c2[10],auth[_0x90c2[5]](),auth[_0x90c2[7]]([19],[_0x90c2[6]]),controller[_0x90c2[11]]);router[_0x90c2[13]](_0x90c2[4],auth[_0x90c2[5]](),auth[_0x90c2[7]]([19],[_0x90c2[6]]),controller[_0x90c2[12]]);router[_0x90c2[15]](_0x90c2[10],auth[_0x90c2[5]](),auth[_0x90c2[7]]([19],[_0x90c2[6]]),controller[_0x90c2[14]]);router[_0x90c2[17]](_0x90c2[10],auth[_0x90c2[5]](),auth[_0x90c2[7]]([19],[_0x90c2[6]]),controller[_0x90c2[16]]);module[_0x90c2[18]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./desk_field.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.update); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroy); + + +module.exports = router; diff --git a/server/api/extracted_report/extracted_report.controller.js b/server/api/extracted_report/extracted_report.controller.js index 4dbf41b..454f170 100644 --- a/server/api/extracted_report/extracted_report.controller.js +++ b/server/api/extracted_report/extracted_report.controller.js @@ -1 +1,207 @@ -var _0x24f8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x6D\x6F\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x66\x69\x6C\x65\x2D\x62\x61\x73\x65\x36\x34","\x66\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x69\x64","\x75\x73\x65\x72","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x72\x6F\x6C\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x72\x65\x70\x6F\x72\x74\x73","\x73\x61\x76\x65\x6E\x61\x6D\x65","\x6A\x6F\x69\x6E","\x65\x6E\x63\x6F\x64\x65","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x6E\x61\x6D\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x65\x73\x74\x72\x6F\x79","\x52\x5F\x4F\x4B","\x57\x5F\x4F\x4B","\x46\x69\x6C\x65\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74\x20\x6F\x72\x20\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E\x20\x6E\x6F\x74\x20\x70\x65\x72\x6D\x69\x74\x74\x65\x64","\x65\x72\x72\x6F\x72","\x65\x72\x72\x6F\x72\x20\x64\x65\x6C\x65\x74\x69\x6E\x67\x20\x66\x69\x6C\x65\x20\x3A","\x66\x69\x6C\x65\x20\x64\x65\x6C\x65\x74\x65\x64","\x6C\x6F\x67","\x75\x6E\x6C\x69\x6E\x6B","\x61\x63\x63\x65\x73\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x66\x6F\x72\x45\x61\x63\x68","\x61\x6C\x6C","\x70\x75\x73\x68","\x69\x64\x73"];_0x24f8[0];var _=require(_0x24f8[1]);var ExtractedReport=require(_0x24f8[3])[_0x24f8[2]];var util=require(_0x24f8[4]);var path=require(_0x24f8[5]);var moment=require(_0x24f8[6]);var config=require(_0x24f8[7]);var base64=require(_0x24f8[8]);var fs=require(_0x24f8[9]);var Util=require(_0x24f8[10]);exports[_0x24f8[11]]= function(_0x6d9axa,_0x6d9axb,_0x6d9axc){switch(_0x6d9axa[_0x24f8[18]][_0x24f8[21]]){case _0x24f8[18]:return ExtractedReport[_0x24f8[20]](Util[_0x24f8[19]](_0x6d9axa[_0x24f8[16]],{UserId:_0x6d9axa[_0x24f8[18]][_0x24f8[17]]}))[_0x24f8[15]](function(_0x6d9axe){_0x6d9axb[_0x24f8[14]](200)[_0x24f8[13]](_0x6d9axe)})[_0x24f8[12]](function(_0x6d9axd){return handleError(_0x6d9axb,_0x6d9axd)});default:return ExtractedReport[_0x24f8[20]](Util[_0x24f8[19]](_0x6d9axa[_0x24f8[16]]))[_0x24f8[15]](function(_0x6d9axe){_0x6d9axb[_0x24f8[14]](200)[_0x24f8[13]](_0x6d9axe)})[_0x24f8[12]](function(_0x6d9axd){return handleError(_0x6d9axb,_0x6d9axd)})}};exports[_0x24f8[22]]= function(_0x6d9axa,_0x6d9axb){return ExtractedReport[_0x24f8[25]](_0x6d9axa[_0x24f8[24]][_0x24f8[17]])[_0x24f8[15]](function(_0x6d9axf){if(!_0x6d9axf){return _0x6d9axb[_0x24f8[23]](404)};return _0x6d9axb[_0x24f8[13]](_0x6d9axf)})[_0x24f8[12]](function(_0x6d9axd){return handleError(_0x6d9axb,_0x6d9axd)})};exports[_0x24f8[26]]= function(_0x6d9axa,_0x6d9axb){return ExtractedReport[_0x24f8[25]](_0x6d9axa[_0x24f8[24]][_0x24f8[17]])[_0x24f8[15]](function(_0x6d9ax10){if(!_0x6d9ax10){return _0x6d9axb[_0x24f8[14]](404)[_0x24f8[13]](_0x6d9ax10)};var _0x6d9ax11=path[_0x24f8[32]](config[_0x24f8[27]],_0x24f8[28],_0x24f8[29],_0x24f8[30],_0x6d9ax10[_0x24f8[31]]);base64[_0x24f8[33]](_0x6d9ax11,function(_0x6d9axd,_0x6d9ax12){if(_0x6d9axd){return handleError(_0x6d9axb,_0x6d9axd)}else {return _0x6d9axb[_0x24f8[14]](200)[_0x24f8[13]]({downloadString:_0x6d9ax12})}})})[_0x24f8[12]](function(_0x6d9axd){return handleError(_0x6d9axb,_0x6d9axd)})};exports[_0x24f8[34]]= function(_0x6d9axa,_0x6d9axb){return ExtractedReport[_0x24f8[34]](_0x6d9axa[_0x24f8[35]])[_0x24f8[15]](function(_0x6d9axf){return _0x6d9axb[_0x24f8[14]](201)[_0x24f8[13]](_0x6d9axf)})[_0x24f8[12]](function(_0x6d9axd){return handleError(_0x6d9axb,_0x6d9axd)})};exports[_0x24f8[36]]= function(_0x6d9axa,_0x6d9axb){return ExtractedReport[_0x24f8[40]]({where:{name:_0x6d9axa[_0x24f8[35]][_0x24f8[39]],id:{$ne:_0x6d9axa[_0x24f8[35]][_0x24f8[17]]}}})[_0x24f8[15]](function(_0x6d9ax14){if(!_0x6d9ax14){return _0x6d9axb[_0x24f8[23]](404)};if(_0x6d9axa[_0x24f8[35]][_0x24f8[17]]){delete _0x6d9axa[_0x24f8[35]][_0x24f8[17]]};return ExtractedReport[_0x24f8[25]](_0x6d9axa[_0x24f8[24]][_0x24f8[17]])})[_0x24f8[15]](function(_0x6d9axf){if(!_0x6d9axf){return _0x6d9axb[_0x24f8[23]](404)};var _0x6d9ax13=_[_0x24f8[37]](_0x6d9axf,_0x6d9axa[_0x24f8[35]]);return _0x6d9ax13[_0x24f8[38]]()})[_0x24f8[15]](function(_0x6d9axf){return _0x6d9axb[_0x24f8[14]](200)[_0x24f8[13]](_0x6d9axf)})[_0x24f8[12]](function(_0x6d9axd){return handleError(_0x6d9axb,_0x6d9axd)})};exports[_0x24f8[41]]= function(_0x6d9axa,_0x6d9axb){var _0x6d9ax15;return ExtractedReport[_0x24f8[25]](_0x6d9axa[_0x24f8[24]][_0x24f8[17]])[_0x24f8[15]](function(_0x6d9axf){_0x6d9ax15= _0x6d9axf;if(!_0x6d9axf){return _0x6d9axb[_0x24f8[23]](404)};return _0x6d9axf[_0x24f8[41]]()})[_0x24f8[15]](function(){if(_0x6d9ax15[_0x24f8[31]]){var _0x6d9ax11=path[_0x24f8[32]](config[_0x24f8[27]],_0x24f8[28],_0x24f8[29],_0x24f8[30],_0x6d9ax15[_0x24f8[31]]);fs[_0x24f8[50]](_0x6d9ax11,fs[_0x24f8[42]]| fs[_0x24f8[43]],function(_0x6d9axd){if(_0x6d9axd){console[_0x24f8[45]](_0x24f8[44])}else {fs[_0x24f8[49]](_0x6d9ax11,function(_0x6d9axd){if(_0x6d9axd){console[_0x24f8[45]](_0x24f8[46],_0x6d9axd)}else {console[_0x24f8[48]](_0x24f8[47])}})}})};return _0x6d9axb[_0x24f8[23]](204)})[_0x24f8[12]](function(_0x6d9axd){return handleError(_0x6d9axb,_0x6d9axd)})};exports[_0x24f8[51]]= function(_0x6d9axa,_0x6d9axb){var _0x6d9ax16;return ExtractedReport[_0x24f8[40]]({where:{id:_0x6d9axa[_0x24f8[16]][_0x24f8[55]]}})[_0x24f8[15]](function(_0x6d9ax17){_0x6d9ax16= _0x6d9ax17;var _0x6d9ax18=[];_0x6d9ax17[_0x24f8[52]](function(_0x6d9axf){_0x6d9ax18[_0x24f8[54]](_0x6d9axf[_0x24f8[41]]())});return _0x6d9ax18})[_0x24f8[53]]()[_0x24f8[15]](function(){_0x6d9ax16[_0x24f8[52]](function(_0x6d9axf){if(_0x6d9axf[_0x24f8[31]]){var _0x6d9ax11=path[_0x24f8[32]](config[_0x24f8[27]],_0x24f8[28],_0x24f8[29],_0x24f8[30],_0x6d9axf[_0x24f8[31]]);fs[_0x24f8[50]](_0x6d9ax11,fs[_0x24f8[42]]| fs[_0x24f8[43]],function(_0x6d9axd){if(_0x6d9axd){console[_0x24f8[45]](_0x24f8[44])}else {fs[_0x24f8[49]](_0x6d9ax11,function(_0x6d9axd){if(_0x6d9axd){console[_0x24f8[45]](_0x24f8[46],_0x6d9axd)}else {console[_0x24f8[48]](_0x24f8[47])}})}})}});return _0x6d9axb[_0x24f8[23]](204)})[_0x24f8[12]](function(_0x6d9axd){return handleError(_0x6d9axb,_0x6d9axd)})};function handleError(_0x6d9axb,_0x6d9axd){console[_0x24f8[48]](_0x6d9axd);return _0x6d9axb[_0x24f8[14]](500)[_0x24f8[13]](_0x6d9axd)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var ExtractedReport = require('../../models').ExtractedReport; +var util = require('util'); +var path = require('path'); +var moment = require('moment'); +var config = require('../../config/environment'); +var base64 = require('file-base64'); +var fs = require('fs'); +var Util = require('../../config/util'); + +// Get list of extracted_reports +exports.index = function(req, res, next) { + switch (req.user.role) { + case 'user': + return ExtractedReport + .findAndCountAll(Util.getQuery(req.query, { + UserId: req.user.id + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + default: + return ExtractedReport + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + } +}; + +// Get a single extracted_reports +exports.show = function(req, res) { + return ExtractedReport + .findById(req.params.id) + .then(function(extracted) { + if (!extracted) { + return res.sendStatus(404); + } + return res.send(extracted); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.download = function(req, res) { + return ExtractedReport + .findById(req.params.id) + .then(function(extract) { + if (!extract) { + return res.status(404).send(extract); + } + var filepath = path.join(config.root, 'server', 'files', 'reports', extract.savename); + base64.encode(filepath, function(err, base64String) { + if (err) { + return handleError(res, err); + } else { + return res.status(200).send({ + downloadString: base64String + }); + } + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new extracted_report in the DB. +exports.create = function(req, res) { + return ExtractedReport + .create(req.body) + .then(function(extracted) { + return res.status(201).send(extracted); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing extracted_report in the DB. +exports.update = function(req, res) { + return ExtractedReport + .findAll({ + where: { + name: req.body.name, + id: { + $ne: req.body.id + } + } + }) + .then(function(extracted_reports) { + if (!extracted_reports) { + return res.sendStatus(404); + } + if (req.body.id) { + delete req.body.id; + } + return ExtractedReport + .findById(req.params.id); + }) + .then(function(extracted) { + if (!extracted) { + return res.sendStatus(404); + } + var updated = _.merge(extracted, req.body); + return updated.save(); + }) + .then(function(extracted) { + return res.status(200).send(extracted); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes an extracted_report from the DB. +exports.destroy = function(req, res) { + var _extracted; + return ExtractedReport + .findById(req.params.id) + .then(function(extracted) { + _extracted = extracted; + if (!extracted) { + return res.sendStatus(404); + } + return extracted.destroy(); + }) + .then(function() { + if (_extracted.savename) { + var filepath = path.join(config.root, 'server', 'files', 'reports', _extracted.savename); + fs.access(filepath, fs.R_OK | fs.W_OK, function(err) { + if (err) { + console.error('File does not exist or operation not permitted'); + } else { + fs.unlink(filepath, function(err) { + if (err) { + console.error('error deleting file :', err); + } else { + console.log('file deleted'); + } + }) + } + }); + } + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.bulkDestroy = function(req, res) { + var _extracts; + return ExtractedReport + .findAll({ + where: { + id: req.query.ids + } + }) + .then(function(extracts) { + _extracts = extracts; + var bulkDelete = []; + extracts.forEach(function(extracted) { + bulkDelete.push(extracted.destroy()); + }); + return bulkDelete; + }) + .all() + .then(function() { + _extracts.forEach(function(extracted) { + if (extracted.savename) { + var filepath = path.join(config.root, 'server', 'files', 'reports', extracted.savename); + fs.access(filepath, fs.R_OK | fs.W_OK, function(err) { + if (err) { + console.error('File does not exist or operation not permitted'); + } else { + fs.unlink(filepath, function(err) { + if (err) { + console.error('error deleting file :', err); + } else { + console.log('file deleted'); + } + }) + } + }); + } + }); + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + console.log(err); + return res.status(500).send(err); +} diff --git a/server/api/extracted_report/extracted_report.events.js b/server/api/extracted_report/extracted_report.events.js index 5eac4bc..311b078 100644 --- a/server/api/extracted_report/extracted_report.events.js +++ b/server/api/extracted_report/extracted_report.events.js @@ -1 +1,36 @@ -var _0x726e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x726e[0];const EventEmitter=require(_0x726e[1]);const ExtractedReport=require(_0x726e[3])[_0x726e[2]];var ExtractedReportEvents= new EventEmitter();ExtractedReportEvents[_0x726e[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x726e[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x726e[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x726e[6]};for(var e in events){var event=events[e];ExtractedReport[_0x726e[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x8c76x8,_0x8c76x9,_0x8c76xa){ExtractedReportEvents[_0x726e[10]](event+ _0x726e[8]+ _0x8c76x8[_0x726e[9]],_0x8c76x8);ExtractedReportEvents[_0x726e[10]](event,_0x8c76x8);_0x8c76xa(null)}}module[_0x726e[11]]= ExtractedReportEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ExtractedReport = require('../../models').ExtractedReport; + +var ExtractedReportEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ExtractedReportEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ExtractedReport.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ExtractedReportEvents.emit(event + ':' + doc._id, doc); + ExtractedReportEvents.emit(event, doc); + done(null); + } +} + +module.exports = ExtractedReportEvents; diff --git a/server/api/extracted_report/extracted_report.socket.js b/server/api/extracted_report/extracted_report.socket.js index c08726d..684fc40 100644 --- a/server/api/extracted_report/extracted_report.socket.js +++ b/server/api/extracted_report/extracted_report.socket.js @@ -1 +1,28 @@ -var _0x16fd=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x65\x78\x74\x72\x61\x63\x74\x65\x64\x5F\x72\x65\x70\x6F\x72\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x65\x78\x74\x72\x61\x63\x74\x65\x64\x5F\x72\x65\x70\x6F\x72\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x16fd[0];const ExtractedReportEvents=require(_0x16fd[1]);var events=[_0x16fd[2],_0x16fd[3]];exports[_0x16fd[4]]= function(_0x5e6fx3){for(var _0x5e6fx4=0,_0x5e6fx5=events[_0x16fd[5]];_0x5e6fx4< _0x5e6fx5;_0x5e6fx4++){var _0x5e6fx6=events[_0x5e6fx4];var _0x5e6fx7=createListener(_0x16fd[6]+ _0x5e6fx6,_0x5e6fx3);ExtractedReportEvents[_0x16fd[7]](_0x5e6fx6,_0x5e6fx7);_0x5e6fx3[_0x16fd[7]](_0x16fd[8],removeListener(_0x5e6fx6,_0x5e6fx7))}};function createListener(_0x5e6fx6,_0x5e6fx3){return function(_0x5e6fx9){_0x5e6fx3[_0x16fd[9]](_0x5e6fx6,_0x5e6fx9)}}function removeListener(_0x5e6fx6,_0x5e6fx7){return function(){ExtractedReportEvents[_0x16fd[10]](_0x5e6fx6,_0x5e6fx7)}} \ No newline at end of file +'use strict'; + +const ExtractedReportEvents = require('./extracted_report.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('extracted_report:' + event, socket); + + ExtractedReportEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ExtractedReportEvents.removeListener(event, listener); + }; +} diff --git a/server/api/extracted_report/index.js b/server/api/extracted_report/index.js index 2966e44..ab71e52 100644 --- a/server/api/extracted_report/index.js +++ b/server/api/extracted_report/index.js @@ -1 +1,17 @@ -var _0x2b7f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x65\x78\x74\x72\x61\x63\x74\x65\x64\x5F\x72\x65\x70\x6F\x72\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x2b7f[0];var express=require(_0x2b7f[1]);var controller=require(_0x2b7f[2]);var auth=require(_0x2b7f[3]);var router=express.Router();router[_0x2b7f[9]](_0x2b7f[4],auth[_0x2b7f[5]](),auth[_0x2b7f[7]]([17],[_0x2b7f[6]]),controller[_0x2b7f[8]]);router[_0x2b7f[9]](_0x2b7f[10],auth[_0x2b7f[5]](),auth[_0x2b7f[7]]([17],[_0x2b7f[6]]),controller[_0x2b7f[11]]);router[_0x2b7f[9]](_0x2b7f[12],auth[_0x2b7f[5]](),auth[_0x2b7f[7]]([17],[_0x2b7f[6]]),controller[_0x2b7f[13]]);router[_0x2b7f[15]](_0x2b7f[4],auth[_0x2b7f[5]](),auth[_0x2b7f[7]]([17],[_0x2b7f[6]]),controller[_0x2b7f[14]]);router[_0x2b7f[17]](_0x2b7f[12],auth[_0x2b7f[5]](),auth[_0x2b7f[7]]([17],[_0x2b7f[6]]),controller[_0x2b7f[16]]);router[_0x2b7f[19]](_0x2b7f[4],auth[_0x2b7f[5]](),auth[_0x2b7f[7]]([17],[_0x2b7f[6]]),controller[_0x2b7f[18]]);router[_0x2b7f[19]](_0x2b7f[12],auth[_0x2b7f[5]](),auth[_0x2b7f[7]]([17],[_0x2b7f[6]]),controller[_0x2b7f[20]]);module[_0x2b7f[21]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./extracted_report.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.index); +router.get('/:id/download', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.download); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/fax_account/fax_account.controller.js b/server/api/fax_account/fax_account.controller.js index b75377a..fa28483 100644 --- a/server/api/fax_account/fax_account.controller.js +++ b/server/api/fax_account/fax_account.controller.js @@ -1 +1,475 @@ -var _0xbfcd=["\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","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x46\x61\x78\x52\x6F\x6F\x6D","\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x46\x61\x78\x51\x75\x65\x75\x65","\x46\x61\x78\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x46\x61\x78\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\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","\x6D\x65\x73\x73\x61\x67\x65","\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2F\x63\x6F\x6E\x74\x65\x78\x74\x20\x63\x6F\x6D\x62\x69\x6E\x61\x74\x69\x6F\x6E\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x65\x78\x69\x73\x74","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x52\x4F\x55\x54\x45","\x62\x6F\x64\x79","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x6C\x65\x6E\x67\x74\x68","\x6E\x61\x6D\x65","\x6F\x6E\x6C\x69\x6E\x65","\x70\x72\x69\x6F\x72\x69\x74\x79\x20\x41\x53\x43","\x6D\x65\x72\x67\x65","\x67\x65\x74\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x64\x65\x66\x61\x75\x6C\x74","\x73\x63\x6F\x70\x65","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x70\x72\x69\x6F\x72\x69\x74\x79","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x6D\x61\x78","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x61\x70\x70\x49\x64","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x66\x6F\x72\x45\x61\x63\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x67\x65\x74\x46\x61\x78\x52\x6F\x6F\x6D\x73","\x63\x6F\x6E\x74\x61\x63\x74","\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x74\x61\x67\x73","\x6C\x61\x73\x74\x45\x76\x65\x6E\x74","\x69\x73\x41\x72\x72\x61\x79","\x25","\x70\x75\x73\x68","\x24\x61\x6E\x64","\x77\x68\x65\x72\x65","\x69\x6E\x63\x6C\x75\x64\x65","\x65\x72\x72\x6F\x72","\x61\x67\x65\x6E\x74","\x66\x69\x6E\x64","\x55\x73\x65\x72\x49\x64","\x6D\x61\x70","\x71\x75\x65\x75\x65","\x46\x61\x78\x51\x75\x65\x75\x65\x49\x64","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E","\x75\x73\x65\x72","\x66\x69\x6E\x64\x41\x6C\x6C","\x67\x65\x74\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x72\x6F\x6C\x65","\x67\x65\x74\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x67\x65\x74\x46\x61\x78\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x73\x61\x76\x65","\x64\x69\x73\x70\x49\x64","\x64\x65\x73\x74\x72\x6F\x79\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65"];_0xbfcd[0];var _=require(_0xbfcd[1]);var Util=require(_0xbfcd[2]);var sequelize=require(_0xbfcd[4])[_0xbfcd[3]];var FaxAccount=require(_0xbfcd[4])[_0xbfcd[5]];var FaxRoom=require(_0xbfcd[4])[_0xbfcd[6]];var FaxApplication=require(_0xbfcd[4])[_0xbfcd[7]];var FaxQueue=require(_0xbfcd[4])[_0xbfcd[8]];var FaxDisposition=require(_0xbfcd[4])[_0xbfcd[9]];var FaxMessage=require(_0xbfcd[4])[_0xbfcd[10]];var FaxAttachment=require(_0xbfcd[4])[_0xbfcd[11]];var User=require(_0xbfcd[4])[_0xbfcd[12]];var Interval=require(_0xbfcd[4])[_0xbfcd[13]];function handleError(_0xec8exe,_0xec8exf){_0xec8exf= _0xec8exf|| 500;return function(_0xec8ex10){_0xec8exe[_0xbfcd[15]](_0xec8exf)[_0xbfcd[14]](_0xec8ex10)}}function responseWithResult(_0xec8exe,_0xec8exf){_0xec8exf= _0xec8exf|| 200;return function(_0xec8ex12){if(_0xec8ex12){_0xec8exe[_0xbfcd[15]](_0xec8exf)[_0xbfcd[16]](_0xec8ex12)}}}function responseWithoutResult(_0xec8exe,_0xec8exf){_0xec8exf= _0xec8exf|| 204;return function(){_0xec8exe[_0xbfcd[17]](_0xec8exf)}}function handleEntityNotFound(_0xec8exe){return function(_0xec8ex12){if(!_0xec8ex12){_0xec8exe[_0xbfcd[15]](404)[_0xbfcd[18]]();return null};return _0xec8ex12}}function saveUpdates(_0xec8ex16){return function(_0xec8ex12){return _0xec8ex12[_0xbfcd[20]](_0xec8ex16)[_0xbfcd[19]](function(_0xec8ex17){return _0xec8ex17})}}function removeEntity(_0xec8exe){return function(_0xec8ex12){if(_0xec8ex12){return _0xec8ex12[_0xbfcd[21]]()[_0xbfcd[19]](function(){_0xec8exe[_0xbfcd[15]](204)[_0xbfcd[18]]()})}}}exports[_0xbfcd[22]]= function(_0xec8ex19,_0xec8exe){return FaxAccount[_0xbfcd[26]](Util[_0xbfcd[25]](_0xec8ex19[_0xbfcd[24]]))[_0xbfcd[19]](responseWithResult(_0xec8exe))[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[27]]= function(_0xec8ex19,_0xec8exe){return FaxAccount[_0xbfcd[30]](_0xec8ex19[_0xbfcd[29]][_0xbfcd[28]])[_0xbfcd[19]](handleEntityNotFound(_0xec8exe))[_0xbfcd[19]](responseWithResult(_0xec8exe))[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[31]]= function(_0xec8ex19,_0xec8exe){return sequelize[_0xbfcd[39]](function(_0xec8ex1a){return FaxAccount[_0xbfcd[31]](_0xec8ex19[_0xbfcd[38]],{transaction:_0xec8ex1a})})[_0xbfcd[19]](responseWithoutResult(_0xec8exe,201))[_0xbfcd[23]](sequelize.ValidationError,function(_0xec8ex10){_0xec8ex10[_0xbfcd[34]]= _0xbfcd[35];_0xec8ex10[_0xbfcd[36]]= _0xbfcd[37];return _0xec8exe[_0xbfcd[15]](500)[_0xbfcd[14]](_0xec8ex10)})[_0xbfcd[23]](sequelize.UniqueConstraintError,function(_0xec8ex10){return Util[_0xbfcd[33]][_0xbfcd[32]](_0xec8exe,_0xec8ex10)})[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[40]]= function(_0xec8ex19,_0xec8exe){if(_0xec8ex19[_0xbfcd[38]][_0xbfcd[28]]){delete _0xec8ex19[_0xbfcd[38]][_0xbfcd[28]]};return sequelize[_0xbfcd[39]](function(_0xec8ex1a){return FaxAccount[_0xbfcd[30]](_0xec8ex19[_0xbfcd[29]][_0xbfcd[28]])[_0xbfcd[19]](handleEntityNotFound(_0xec8exe))[_0xbfcd[19]](function(_0xec8ex1b){return _0xec8ex1b[_0xbfcd[20]](_0xec8ex19[_0xbfcd[38]],{transaction:_0xec8ex1a})})})[_0xbfcd[19]](responseWithoutResult(_0xec8exe))[_0xbfcd[23]](sequelize.ValidationError,function(_0xec8ex10){_0xec8ex10[_0xbfcd[34]]= _0xbfcd[35];_0xec8ex10[_0xbfcd[36]]= _0xbfcd[37];return _0xec8exe[_0xbfcd[15]](500)[_0xbfcd[14]](_0xec8ex10)})[_0xbfcd[23]](sequelize.UniqueConstraintError,function(_0xec8ex10){return Util[_0xbfcd[33]][_0xbfcd[32]](_0xec8exe,_0xec8ex10)})[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[21]]= function(_0xec8ex19,_0xec8exe){return sequelize[_0xbfcd[39]](function(_0xec8ex1a){return FaxAccount[_0xbfcd[30]](_0xec8ex19[_0xbfcd[29]][_0xbfcd[28]])[_0xbfcd[19]](handleEntityNotFound(_0xec8exe))[_0xbfcd[19]](function(_0xec8ex1b){return _0xec8ex1b[_0xbfcd[21]]()})})[_0xbfcd[19]](function(){_0xec8exe[_0xbfcd[15]](204)[_0xbfcd[18]]()})[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[41]]= function(_0xec8ex19,_0xec8exe){return FaxAccount[_0xbfcd[21]]({where:{id:_0xec8ex19[_0xbfcd[24]][_0xbfcd[42]]},individualHooks:true})[_0xbfcd[19]](responseWithoutResult(_0xec8exe))[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[43]]= function(_0xec8ex19,_0xec8exe,_0xec8ex1c){return FaxAccount[_0xbfcd[51]](_0xbfcd[50])[_0xbfcd[30]](_0xec8ex19[_0xbfcd[29]][_0xbfcd[28]])[_0xbfcd[19]](handleEntityNotFound(_0xec8exe))[_0xbfcd[19]](function(_0xec8ex1b){return _0xec8ex1b[_0xbfcd[49]](_[_0xbfcd[48]](Util[_0xbfcd[25]](_0xec8ex19[_0xbfcd[24]]),{include:[{model:FaxQueue,attributes:[_0xbfcd[28],_0xbfcd[45]]},{model:User,attributes:[_0xbfcd[28],_0xbfcd[45],_0xbfcd[46]]},{model:Interval,attributes:[_0xbfcd[28],_0xbfcd[45]]}],order:_0xbfcd[47]}))})[_0xbfcd[19]](function(_0xec8ex1d){return _0xec8exe[_0xbfcd[14]]({count:_0xec8ex1d[_0xbfcd[44]],rows:_0xec8ex1d})})[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[52]]= function(_0xec8ex19,_0xec8exe,_0xec8ex1c){return FaxApplication[_0xbfcd[55]](_0xbfcd[53],{where:{FaxAccountId:_0xec8ex19[_0xbfcd[29]][_0xbfcd[28]]}})[_0xbfcd[19]](function(_0xec8ex1e){_0xec8ex19[_0xbfcd[38]][_0xbfcd[53]]= _0xec8ex1e?++_0xec8ex1e:1;_0xec8ex19[_0xbfcd[38]][_0xbfcd[54]]= _0xec8ex19[_0xbfcd[29]][_0xbfcd[28]];return FaxApplication[_0xbfcd[31]](_0xec8ex19[_0xbfcd[38]])})[_0xbfcd[19]](responseWithResult(_0xec8exe,201))[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[56]]= function(_0xec8ex19,_0xec8exe){return FaxApplication[_0xbfcd[21]]({where:{id:_0xec8ex19[_0xbfcd[24]][_0xbfcd[42]]},individualHooks:true})[_0xbfcd[19]](responseWithoutResult(_0xec8exe))[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[57]]= function(_0xec8ex19,_0xec8exe,_0xec8ex1c){return FaxApplication[_0xbfcd[30]](_0xec8ex19[_0xbfcd[29]][_0xbfcd[58]])[_0xbfcd[19]](handleEntityNotFound(_0xec8exe))[_0xbfcd[19]](removeEntity(_0xec8exe))[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[59]]= function(_0xec8ex19,_0xec8exe){var _0xec8ex1f=0;var _0xec8ex20=_0xec8ex19[_0xbfcd[38]];_0xec8ex20[_0xbfcd[62]](function(_0xec8ex21){delete _0xec8ex21[_0xbfcd[28]];delete _0xec8ex21[_0xbfcd[60]];delete _0xec8ex21[_0xbfcd[61]];_0xec8ex21[_0xbfcd[53]]= ++_0xec8ex1f});return sequelize[_0xbfcd[39]](function(_0xec8ex1a){return FaxApplication[_0xbfcd[21]]({where:{FaxAccountId:_0xec8ex19[_0xbfcd[29]][_0xbfcd[28]]},individualHooks:true,transaction:_0xec8ex1a})[_0xbfcd[19]](function(_0xec8ex22){return FaxApplication[_0xbfcd[63]](_0xec8ex20,{individualHooks:true,transaction:_0xec8ex1a})})})[_0xbfcd[19]](function(_0xec8ex1d){return _0xec8exe[_0xbfcd[15]](200)[_0xbfcd[14]]({count:_0xec8ex1d[_0xbfcd[44]],rows:_0xec8ex1d})})[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[64]]= function(_0xec8ex19,_0xec8exe){if(_0xec8ex19[_0xbfcd[38]][_0xbfcd[28]]){delete _0xec8ex19[_0xbfcd[38]][_0xbfcd[28]]};return FaxApplication[_0xbfcd[30]](_0xec8ex19[_0xbfcd[29]][_0xbfcd[58]])[_0xbfcd[19]](handleEntityNotFound(_0xec8exe))[_0xbfcd[19]](saveUpdates(_0xec8ex19[_0xbfcd[38]]))[_0xbfcd[19]](responseWithResult(_0xec8exe))[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[65]]= function(_0xec8ex19,_0xec8exe){return FaxApplication[_0xbfcd[30]](_0xec8ex19[_0xbfcd[29]][_0xbfcd[58]],{include:[{all:true}]})[_0xbfcd[19]](handleEntityNotFound(_0xec8exe))[_0xbfcd[19]](responseWithResult(_0xec8exe))[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[66]]= function(_0xec8ex19,_0xec8exe,_0xec8ex1c){var _0xec8ex23={where:{FaxAccountId:_0xec8ex19[_0xbfcd[29]][_0xbfcd[28]],$and:[]},include:[],attributes:[_0xbfcd[28],_0xbfcd[67],_0xbfcd[68],_0xbfcd[69],_0xbfcd[70],_0xbfcd[61]]};if(_0xec8ex19[_0xbfcd[24]]){if(_0xec8ex19[_0xbfcd[24]][_0xbfcd[69]]){if(_[_0xbfcd[71]](_0xec8ex19[_0xbfcd[24]][_0xbfcd[69]])){for(var _0xec8ex24=0;_0xec8ex24< _0xec8ex19[_0xbfcd[24]][_0xbfcd[69]][_0xbfcd[44]];_0xec8ex24++){_0xec8ex23[_0xbfcd[75]][_0xbfcd[74]][_0xbfcd[73]]({tags:{$like:_0xbfcd[72]+ _0xec8ex19[_0xbfcd[24]][_0xbfcd[69]][_0xec8ex24]+ _0xbfcd[72]}})}}else {_0xec8ex23[_0xbfcd[75]][_0xbfcd[74]][_0xbfcd[73]]({tags:{$like:_0xbfcd[72]+ _0xec8ex19[_0xbfcd[24]][_0xbfcd[69]]+ _0xbfcd[72]}})};delete _0xec8ex19[_0xbfcd[24]][_0xbfcd[69]]};_[_0xbfcd[48]](_0xec8ex23[_0xbfcd[75]],_0xec8ex19[_0xbfcd[24]])};switch(_0xec8ex19[_0xbfcd[85]][_0xbfcd[88]]){case _0xbfcd[78]:_0xec8ex23[_0xbfcd[76]][_0xbfcd[73]]({model:User,attributes:[_0xbfcd[28]]});var _0xec8ex25;var _0xec8ex26;var _0xec8ex27;return User[_0xbfcd[30]](_0xec8ex19[_0xbfcd[85]][_0xbfcd[28]])[_0xbfcd[19]](function(_0xec8ex2b){if(_0xec8ex2b){return _0xec8ex2b[_0xbfcd[87]]()}else {return []}})[_0xbfcd[19]](function(_0xec8ex2a){_0xec8ex26= _[_0xbfcd[81]](_0xec8ex2a,_0xbfcd[28]);return FaxAccount[_0xbfcd[30]](_0xec8ex19[_0xbfcd[29]][_0xbfcd[28]])})[_0xbfcd[19]](function(_0xec8ex29){return _0xec8ex29[_0xbfcd[49]]({where:{$or:[{app:_0xbfcd[82]},{app:_0xbfcd[78]}]}})})[_0xbfcd[19]](function(_0xec8ex20){_0xec8ex25= _[_0xbfcd[81]](_[_0xbfcd[79]](_0xec8ex20,{"\x61\x70\x70":_0xbfcd[78]}),_0xbfcd[80]);_0xec8ex27= _[_0xbfcd[81]](_[_0xbfcd[79]](_0xec8ex20,{"\x61\x70\x70":_0xbfcd[82]}),_0xbfcd[83]);if(_[_0xbfcd[84]](_0xec8ex26,_0xec8ex27)[_0xbfcd[44]]|| _[_0xbfcd[84]](_0xec8ex25,[_0xec8ex19[_0xbfcd[85]][_0xbfcd[28]]])[_0xbfcd[44]]){return FaxRoom[_0xbfcd[86]](_0xec8ex23)[_0xbfcd[19]](function(_0xec8ex28){return _0xec8exe[_0xbfcd[15]](200)[_0xbfcd[14]](_0xec8ex28)})[_0xbfcd[23]](function(_0xec8ex10){console[_0xbfcd[77]](_0xec8ex10);return handleError(_0xec8exe,_0xec8ex10)})}else {return _0xec8exe[_0xbfcd[15]](200)[_0xbfcd[14]]([])}})[_0xbfcd[23]](function(_0xec8ex10){console[_0xbfcd[77]](_0xec8ex10)});default:return FaxRoom[_0xbfcd[86]](_0xec8ex23)[_0xbfcd[19]](function(_0xec8ex28){return _0xec8exe[_0xbfcd[15]](200)[_0xbfcd[14]](_0xec8ex28)})[_0xbfcd[23]](handleError(_0xec8exe))}};exports[_0xbfcd[89]]= function(_0xec8ex19,_0xec8exe,_0xec8ex1c){return FaxAccount[_0xbfcd[30]](_0xec8ex19[_0xbfcd[29]][_0xbfcd[28]])[_0xbfcd[19]](handleEntityNotFound(_0xec8exe))[_0xbfcd[19]](function(_0xec8ex1b){return _0xec8ex1b[_0xbfcd[90]]()})[_0xbfcd[19]](function(_0xec8ex2c){return _0xec8exe[_0xbfcd[15]](200)[_0xbfcd[14]]({rows:_0xec8ex2c,count:_0xec8ex2c[_0xbfcd[44]]})})[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[91]]= function(_0xec8ex19,_0xec8exe,_0xec8ex1c){_0xec8ex19[_0xbfcd[38]][_0xbfcd[54]]= _0xec8ex19[_0xbfcd[29]][_0xbfcd[28]];return FaxDisposition[_0xbfcd[31]](_0xec8ex19[_0xbfcd[38]])[_0xbfcd[19]](responseWithResult(_0xec8exe,201))[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[92]]= function(_0xec8ex19,_0xec8exe){if(_0xec8ex19[_0xbfcd[38]][_0xbfcd[28]]){delete _0xec8ex19[_0xbfcd[38]][_0xbfcd[28]]};return FaxDisposition[_0xbfcd[30]](_0xec8ex19[_0xbfcd[29]][_0xbfcd[94]])[_0xbfcd[19]](handleEntityNotFound(_0xec8exe))[_0xbfcd[19]](function(_0xec8ex2d){var _0xec8ex17=_[_0xbfcd[48]](_0xec8ex2d,_0xec8ex19[_0xbfcd[38]]);return _0xec8ex17[_0xbfcd[93]]()})[_0xbfcd[19]](responseWithResult(_0xec8exe,200))[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[95]]= function(_0xec8ex19,_0xec8exe,_0xec8ex1c){return FaxDisposition[_0xbfcd[30]](_0xec8ex19[_0xbfcd[29]][_0xbfcd[94]])[_0xbfcd[19]](handleEntityNotFound(_0xec8exe))[_0xbfcd[19]](function(_0xec8ex2e){return _0xec8ex2e[_0xbfcd[21]]()})[_0xbfcd[19]](responseWithoutResult(_0xec8exe,204))[_0xbfcd[23]](handleError(_0xec8exe))};exports[_0xbfcd[96]]= function(_0xec8ex19,_0xec8exe,_0xec8ex1c){_0xec8ex19[_0xbfcd[38]][_0xbfcd[80]]= _0xec8ex19[_0xbfcd[85]][_0xbfcd[28]];return FaxMessage[_0xbfcd[31]](_0xec8ex19[_0xbfcd[38]],{include:[{model:FaxAttachment}],user:_0xec8ex19[_0xbfcd[85]]})[_0xbfcd[19]](responseWithResult(_0xec8exe,201))[_0xbfcd[23]](handleError(_0xec8exe))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/fax/accounts -> index + * POST /api/fax/accounts -> create + * GET /api/fax/accounts/:id -> show + * PUT /api/fax/accounts/:id -> update + * DELETE /api/fax/accounts/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var sequelize = require('../../models').sequelize; + +var FaxAccount = require('../../models').FaxAccount; +var FaxRoom = require('../../models').FaxRoom; +var FaxApplication = require('../../models').FaxApplication; +var FaxQueue = require('../../models').FaxQueue; +var FaxDisposition = require('../../models').FaxDisposition; +var FaxMessage = require('../../models').FaxMessage; +var FaxAttachment = require('../../models').FaxAttachment; +var User = require('../../models').User; +var Interval = require('../../models').Interval; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 204; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of FaxAccounts +exports.index = function(req, res) { + return FaxAccount + .findAndCountAll(Util.getQuery(req.query)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single FaxAccount from the DB +exports.show = function(req, res) { + return FaxAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new FaxAccount in the DB +exports.create = function(req, res) { + return sequelize.transaction(function(t) { + return FaxAccount.create(req.body, { + transaction: t + }); + }) + .then(responseWithoutResult(res, 201)) + .catch(sequelize.ValidationError, function(err) { + err.message = 'Extension/context combination already exist'; + err.translatedMessage = 'MESSAGE_EXIST_ROUTE' + return res.status(500).send(err); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(handleError(res)); +} + +// Updates an existing FaxAccount in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return sequelize.transaction(function(t) { + return FaxAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(faxAccount) { + return faxAccount.updateAttributes(req.body, { + transaction: t + }) + }) + }) + .then(responseWithoutResult(res)) + .catch(sequelize.ValidationError, function(err) { + err.message = 'Extension/context combination already exist'; + err.translatedMessage = 'MESSAGE_EXIST_ROUTE' + return res.status(500).send(err); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(handleError(res)); +} + +// Deletes a FaxAccount from the DB +exports.destroy = function(req, res) { + return sequelize.transaction(function(t) { + return FaxAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(faxAccount) { + return faxAccount.destroy(); + }); + }) + .then(function() { + res.status(204).end(); + }) + .catch(handleError(res)); +} + +exports.bulkDestroy = function(req, res) { + return FaxAccount + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(responseWithoutResult(res)) + .catch(handleError(res)); +}; + +exports.showApplications = function(req, res, next) { + return FaxAccount + .scope('default') + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(faxAccount) { + return faxAccount + .getFaxApplications(_.merge(Util.getQuery(req.query), { + include: [{ + model: FaxQueue, + attributes: ['id', 'name'] + }, { + model: User, + attributes: ['id', 'name', 'online'] + }, { + model: Interval, + attributes: ['id', 'name'] + }], + order: 'priority ASC' + })); + }) + .then(function(faxApplications) { + return res.send({ + count: faxApplications.length, + rows: faxApplications + }); + }) + .catch(handleError(res)); +}; + +exports.createApplication = function(req, res, next) { + return FaxApplication + .max('priority', { + where: { + FaxAccountId: req.params.id + } + }).then(function(max) { + // SET PRIORITY + req.body.priority = max ? ++max : 1; + req.body.FaxAccountId = req.params.id; + return FaxApplication + .create(req.body); + }) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +}; + +exports.bulkDestroyApplications = function(req, res) { + return FaxApplication + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(responseWithoutResult(res)) + .catch(handleError(res)); +}; + +exports.destroyApplication = function(req, res, next) { + return FaxApplication + .findById(req.params.appId) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +}; + +exports.updateApplications = function(req, res) { + + var priority = 0; + var apps = req.body; + + apps.forEach(function(app) { + delete app.id; + delete app.createdAt; + delete app.updatedAt; + + app.priority = ++priority; + }); + + return sequelize.transaction(function(t) { + return FaxApplication + .destroy({ + where: { + FaxAccountId: req.params.id + }, + individualHooks: true, + transaction: t + }) + .then(function(faxApplication) { + return FaxApplication + .bulkCreate(apps, { + individualHooks: true, + transaction: t + }); + }); + }) + .then(function(faxApplications) { + return res.status(200).send({ + count: faxApplications.length, + rows: faxApplications + }); + }) + .catch(handleError(res)); +}; + +exports.updateApplication = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return FaxApplication.findById(req.params.appId) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +exports.showApplication = function(req, res) { + return FaxApplication + .findById(req.params.appId, { + include: [{ + all: true + }] + }) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +exports.getFaxRooms = function(req, res, next) { + var _query = { + where: { + FaxAccountId: req.params.id, + $and: [] + }, + include: [], + attributes: ['id', 'contact', 'disposition', 'tags', 'lastEvent', 'updatedAt'] + }; + + // TO MOVE SOON INTO AN EXTENAL UTIL FILE + if (req.query) { + if (req.query.tags) { + if (_.isArray(req.query.tags)) { + for (var i = 0; i < req.query.tags.length; i++) { + _query.where.$and.push({ + tags: { + $like: '%' + req.query.tags[i] + '%' + } + }); + } + } else { + _query.where.$and.push({ + tags: { + $like: '%' + req.query.tags + '%' + } + }); + } + + delete req.query.tags; + } + + _.merge(_query.where, req.query); + } + + switch (req.user.role) { + case 'agent': + _query.include.push({ + model: User, + attributes: ['id'] + }); + + var _agents; + var _agentQueues; + var _accountQueues; + + return User + .findById(req.user.id) + .then(function(user) { + if (user) { + return user + .getFaxQueues(); + } else { + return []; + } + }) + .then(function(queues) { + _agentQueues = _.map(queues, 'id'); + return FaxAccount + .findById(req.params.id); + }) + .then(function(account) { + return account + .getFaxApplications({ + where: { + $or: [{ + app: 'queue' + }, { + app: 'agent' + }] + } + }); + }) + .then(function(apps) { + + _agents = _.map(_.find(apps, { + 'app': 'agent' + }), 'UserId'); + + _accountQueues = _.map(_.find(apps, { + 'app': 'queue' + }), 'FaxQueueId'); + + if (_.intersection(_agentQueues, _accountQueues).length || _.intersection(_agents, [req.user.id]).length) { + return FaxRoom + .findAll(_query) + .then(function(faxRooms) { + return res.status(200).send(faxRooms); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); + } else { + + return res.status(200).send([]); + } + }) + .catch(function(err) { + console.error(err); + }); + + default: + return FaxRoom + .findAll(_query) + .then(function(faxRooms) { + return res.status(200).send(faxRooms); + }) + .catch(handleError(res)); + } +}; + +exports.getDispositions = function(req, res, next) { + return FaxAccount + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(faxAccount) { + return faxAccount.getFaxDispositions(); + }) + .then(function(faxDispositions) { + return res.status(200).send({ + rows: faxDispositions, + count: faxDispositions.length + }); + }) + .catch(handleError(res)); +}; + +exports.createDisposition = function(req, res, next) { + req.body.FaxAccountId = req.params.id; + + return FaxDisposition + .create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +}; + +exports.updateDisposition = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return FaxDisposition + .findById(req.params.dispId) + .then(handleEntityNotFound(res)) + .then(function(faxDisposition) { + var updated = _.merge(faxDisposition, req.body); + return updated.save(); + }) + .then(responseWithResult(res, 200)) + .catch(handleError(res)); +}; + +exports.destroyDisposition = function(req, res, next) { + return FaxDisposition + .findById(req.params.dispId) + .then(handleEntityNotFound(res)) + .then(function(faxDiposition) { + return faxDiposition.destroy(); + }) + .then(responseWithoutResult(res, 204)) + .catch(handleError(res)); +}; + +exports.sendMessage = function(req, res, next) { + req.body.UserId = req.user.id; + + return FaxMessage + .create(req.body, { + include: [{ + model: FaxAttachment + }], + user: req.user + }) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +}; diff --git a/server/api/fax_account/fax_account.events.js b/server/api/fax_account/fax_account.events.js index 71281d2..076c9bc 100644 --- a/server/api/fax_account/fax_account.events.js +++ b/server/api/fax_account/fax_account.events.js @@ -1 +1,36 @@ -var _0x7454=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x7454[0];const EventEmitter=require(_0x7454[1]);const FaxAccount=require(_0x7454[3])[_0x7454[2]];var FaxAccountEvents= new EventEmitter();FaxAccountEvents[_0x7454[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x7454[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x7454[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x7454[6]};for(var e in events){var event=events[e];FaxAccount[_0x7454[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x6206x8,_0x6206x9,_0x6206xa){FaxAccountEvents[_0x7454[10]](event+ _0x7454[8]+ _0x6206x8[_0x7454[9]],_0x6206x8);FaxAccountEvents[_0x7454[10]](event,_0x6206x8);_0x6206xa(null)}}module[_0x7454[11]]= FaxAccountEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const FaxAccount = require('../../models').FaxAccount; + +var FaxAccountEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +FaxAccountEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + FaxAccount.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + FaxAccountEvents.emit(event + ':' + doc._id, doc); + FaxAccountEvents.emit(event, doc); + done(null); + } +} + +module.exports = FaxAccountEvents; diff --git a/server/api/fax_account/fax_account.socket.js b/server/api/fax_account/fax_account.socket.js index ce8c8aa..777c337 100644 --- a/server/api/fax_account/fax_account.socket.js +++ b/server/api/fax_account/fax_account.socket.js @@ -1 +1,28 @@ -var _0x1400=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x66\x61\x78\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x66\x61\x78\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x1400[0];const FaxAccountEvents=require(_0x1400[1]);var events=[_0x1400[2],_0x1400[3]];exports[_0x1400[4]]= function(_0x771bx3){for(var _0x771bx4=0,_0x771bx5=events[_0x1400[5]];_0x771bx4< _0x771bx5;_0x771bx4++){var _0x771bx6=events[_0x771bx4];var _0x771bx7=createListener(_0x1400[6]+ _0x771bx6,_0x771bx3);FaxAccountEvents[_0x1400[7]](_0x771bx6,_0x771bx7);_0x771bx3[_0x1400[7]](_0x1400[8],removeListener(_0x771bx6,_0x771bx7))}};function createListener(_0x771bx6,_0x771bx3){return function(_0x771bx9){_0x771bx3[_0x1400[9]](_0x771bx6,_0x771bx9)}}function removeListener(_0x771bx6,_0x771bx7){return function(){FaxAccountEvents[_0x1400[10]](_0x771bx6,_0x771bx7)}} \ No newline at end of file +'use strict'; + +const FaxAccountEvents = require('./fax_account.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('fax_account:' + event, socket); + + FaxAccountEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + FaxAccountEvents.removeListener(event, listener); + }; +} diff --git a/server/api/fax_account/index.js b/server/api/fax_account/index.js index 822f48b..52e34bf 100644 --- a/server/api/fax_account/index.js +++ b/server/api/fax_account/index.js @@ -1 +1,31 @@ -var _0xf770=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x66\x61\x78\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x46\x61\x78","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x61\x70\x70\x49\x64","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x72\x6F\x6F\x6D\x73","\x67\x65\x74\x46\x61\x78\x52\x6F\x6F\x6D\x73","\x2F\x3A\x69\x64\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x67\x65\x74\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x73\x65\x6E\x64","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73\x2F\x3A\x64\x69\x73\x70\x49\x64","\x75\x70\x64\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];_0xf770[0];var express=require(_0xf770[1]);var auth=require(_0xf770[2]);var controller=require(_0xf770[3]);var license=require(_0xf770[4]);var router=express.Router();router[_0xf770[13]](_0xf770[5],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9],_0xf770[10]]),controller[_0xf770[12]]);router[_0xf770[13]](_0xf770[14],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9],_0xf770[10]]),controller[_0xf770[15]]);router[_0xf770[13]](_0xf770[16],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9]]),controller[_0xf770[17]]);router[_0xf770[13]](_0xf770[18],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9]]),controller[_0xf770[19]]);router[_0xf770[13]](_0xf770[20],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9],_0xf770[10]]),controller[_0xf770[21]]);router[_0xf770[13]](_0xf770[22],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9],_0xf770[10]]),controller[_0xf770[23]]);router[_0xf770[25]](_0xf770[5],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9]]),controller[_0xf770[24]]);router[_0xf770[25]](_0xf770[16],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9]]),controller[_0xf770[26]]);router[_0xf770[25]](_0xf770[22],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9]]),controller[_0xf770[27]]);router[_0xf770[25]](_0xf770[28],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9],_0xf770[10]]),controller[_0xf770[29]]);router[_0xf770[31]](_0xf770[14],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9]]),controller[_0xf770[30]]);router[_0xf770[31]](_0xf770[16],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9]]),controller[_0xf770[32]]);router[_0xf770[31]](_0xf770[18],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9]]),controller[_0xf770[33]]);router[_0xf770[31]](_0xf770[34],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9]]),controller[_0xf770[35]]);router[_0xf770[37]](_0xf770[5],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9]]),controller[_0xf770[36]]);router[_0xf770[37]](_0xf770[14],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9]]),controller[_0xf770[38]]);router[_0xf770[37]](_0xf770[16],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9]]),controller[_0xf770[39]]);router[_0xf770[37]](_0xf770[18],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9]]),controller[_0xf770[40]]);router[_0xf770[37]](_0xf770[34],license[_0xf770[6]](),license[_0xf770[7]](),auth[_0xf770[8]](),auth[_0xf770[11]]([10],[_0xf770[9]]),controller[_0xf770[41]]);module[_0xf770[42]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var auth = require('../../auth/auth.service'); +var controller = require('./fax_account.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.index); +router.get('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.show); +router.get('/:id/applications', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.showApplications); +router.get('/:id/applications/:appId', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.showApplication); +router.get('/:id/rooms', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.getFaxRooms); +router.get('/:id/dispositions', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.getDispositions); +router.post('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.create); +router.post('/:id/applications', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.createApplication); +router.post('/:id/dispositions', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.createDisposition); +router.post('/:id/send', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.sendMessage); +router.put('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.update); +router.put('/:id/applications', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.updateApplications); +router.put('/:id/applications/:appId', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.updateApplication); +router.put('/:id/dispositions/:dispId', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.updateDisposition); +router.delete('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.bulkDestroy); +router.delete('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.destroy); +router.delete('/:id/applications', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.bulkDestroyApplications); +router.delete('/:id/applications/:appId', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.destroyApplication); +router.delete('/:id/dispositions/:dispId', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.destroyDisposition); + +module.exports = router; diff --git a/server/api/fax_application/fax_application.controller.js b/server/api/fax_application/fax_application.controller.js index 8bcf616..59b09cb 100644 --- a/server/api/fax_application/fax_application.controller.js +++ b/server/api/fax_application/fax_application.controller.js @@ -1 +1,94 @@ -var _0x49a2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x6C\x6F\x67","\x70\x72\x69\x6F\x72\x69\x74\x79","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x6D\x61\x78","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x66\x69\x6E\x64"];_0x49a2[0];var _=require(_0x49a2[1]);var FaxApplication=require(_0x49a2[3])[_0x49a2[2]];exports[_0x49a2[4]]= function(_0x1880x3,_0x1880x4){FaxApplication[_0x49a2[10]]({where:_0x1880x3[_0x49a2[9]]})[_0x49a2[8]](function(_0x1880x6){return _0x1880x4[_0x49a2[7]](200)[_0x49a2[6]](_0x1880x6)})[_0x49a2[5]](function(_0x1880x5){return handleError(_0x1880x4,_0x1880x5)})};exports[_0x49a2[11]]= function(_0x1880x3,_0x1880x4){FaxApplication[_0x49a2[15]](_0x1880x3[_0x49a2[14]][_0x49a2[13]])[_0x49a2[8]](function(_0x1880x7){if(!_0x1880x7){return _0x1880x4[_0x49a2[12]](404)};return _0x1880x4[_0x49a2[6]](_0x1880x7)})[_0x49a2[5]](function(_0x1880x5){return handleError(_0x1880x4,_0x1880x5)})};exports[_0x49a2[16]]= function(_0x1880x3,_0x1880x4,_0x1880x8){console[_0x49a2[18]](_0x1880x3[_0x49a2[17]]);FaxApplication[_0x49a2[21]](_0x49a2[19],{where:{FaxAccountId:_0x1880x3[_0x49a2[17]][_0x49a2[20]]}})[_0x49a2[8]](function(_0x1880x9){_0x1880x3[_0x49a2[17]][_0x49a2[19]]= _0x1880x9?++_0x1880x9:1;FaxApplication[_0x49a2[16]](_0x1880x3[_0x49a2[17]])[_0x49a2[8]](function(_0x1880xa){return _0x1880x4[_0x49a2[7]](201)[_0x49a2[6]](_0x1880xa)})[_0x49a2[5]](function(_0x1880x5){return _0x1880x8(_0x1880x5)});console[_0x49a2[18]](_0x1880x9)})[_0x49a2[5]](function(_0x1880x5){_0x1880x8(_0x1880x5)})};exports[_0x49a2[22]]= function(_0x1880x3,_0x1880x4){if(_0x1880x3[_0x49a2[17]][_0x49a2[13]]){delete _0x1880x3[_0x49a2[17]][_0x49a2[13]]};FaxApplication[_0x49a2[15]](_0x1880x3[_0x49a2[14]][_0x49a2[13]])[_0x49a2[8]](function(_0x1880x7){if(!_0x1880x7){return _0x1880x4[_0x49a2[12]](404)};var _0x1880xb=_[_0x49a2[23]](_0x1880x7,_0x1880x3[_0x49a2[17]]);_0x1880xb[_0x49a2[24]]()[_0x49a2[8]](function(){return _0x1880x4[_0x49a2[7]](200)[_0x49a2[6]](_0x1880x7)})[_0x49a2[5]](function(_0x1880x5){return handleError(_0x1880x4,_0x1880x5)})})[_0x49a2[5]](function(_0x1880x5){return handleError(_0x1880x4,_0x1880x5)})};exports[_0x49a2[25]]= function(_0x1880x3,_0x1880x4){FaxApplication[_0x49a2[26]]({where:{id:_0x1880x3[_0x49a2[14]][_0x49a2[13]]}})[_0x49a2[8]](function(_0x1880x7){if(!_0x1880x7){return _0x1880x4[_0x49a2[12]](404)};_0x1880x7[_0x49a2[25]]()[_0x49a2[8]](function(){return _0x1880x4[_0x49a2[12]](204)})[_0x49a2[5]](function(_0x1880x5){return handleError(_0x1880x4,_0x1880x5)})})[_0x49a2[5]](function(_0x1880x5){return handleError(_0x1880x4,_0x1880x5)})};function handleError(_0x1880x4,_0x1880x5){return _0x1880x4[_0x49a2[7]](500)[_0x49a2[6]](_0x1880x5)} \ No newline at end of file +'use strict'; +var _ = require('lodash'); +var FaxApplication = require('../../models').FaxApplication; +// Get list of fax_applications +exports.index = function(req, res) { + FaxApplication.findAll({ + where: req.query + }).then(function(fax_applications) { + return res.status(200).send(fax_applications); + }).catch(function(err) { + return handleError(res, err); + }); +}; +// Get a single fax_application +exports.show = function(req, res) { + FaxApplication.findById(req.params.id).then(function(fax_application) { + if (!fax_application) { + return res.sendStatus(404); + } + return res.send(fax_application); + }).catch(function(err) { + return handleError(res, err); + }); +}; +// Creates a new fax_application in the DB. +exports.create = function(req, res, next) { + console.log(req.body); + FaxApplication.max('priority', { + where: { + FaxAccountId: req.body.FaxAccountId + } + }).then(function(max) { + // SET PRIORITY + req.body.priority = max ? ++max : 1; + FaxApplication.create(req.body).then(function(faxApplication) { + return res.status(201).send(faxApplication); + }).catch(function(err) { + return next(err); + }); + console.log(max); + }).catch(function(err) { + next(err); + }); + // FaxApplication + // .create(req.body) + // .then(function(fax_application) { + // return res.status(201).send(fax_application); + // }) + // .catch(function(err) { + // return handleError(res, err); + // }); +}; +// Updates an existing fax_application in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + FaxApplication.findById(req.params.id).then(function(fax_application) { + if (!fax_application) { + return res.sendStatus(404); + } + var updated = _.merge(fax_application, req.body); + updated.save().then(function() { + return res.status(200).send(fax_application); + }).catch(function(err) { + return handleError(res, err); + }); + }).catch(function(err) { + return handleError(res, err); + }); +}; +// Deletes a fax_application from the DB. +exports.destroy = function(req, res) { + FaxApplication.find({ + where: { + id: req.params.id + } + }).then(function(fax_application) { + if (!fax_application) { + return res.sendStatus(404); + } + fax_application.destroy().then(function() { + return res.sendStatus(204); + }).catch(function(err) { + return handleError(res, err); + }); + }).catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/fax_application/fax_application.events.js b/server/api/fax_application/fax_application.events.js index a7d94bb..72f4dd0 100644 --- a/server/api/fax_application/fax_application.events.js +++ b/server/api/fax_application/fax_application.events.js @@ -1 +1,36 @@ -var _0xfedc=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xfedc[0];const EventEmitter=require(_0xfedc[1]);const FaxApplication=require(_0xfedc[3])[_0xfedc[2]];var FaxApplicationEvents= new EventEmitter();FaxApplicationEvents[_0xfedc[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xfedc[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xfedc[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xfedc[6]};for(var e in events){var event=events[e];FaxApplication[_0xfedc[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xf714x8,_0xf714x9,_0xf714xa){FaxApplicationEvents[_0xfedc[10]](event+ _0xfedc[8]+ _0xf714x8[_0xfedc[9]],_0xf714x8);FaxApplicationEvents[_0xfedc[10]](event,_0xf714x8);_0xf714xa(null)}}module[_0xfedc[11]]= FaxApplicationEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const FaxApplication = require('../../models').FaxApplication; + +var FaxApplicationEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +FaxApplicationEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + FaxApplication.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + FaxApplicationEvents.emit(event + ':' + doc._id, doc); + FaxApplicationEvents.emit(event, doc); + done(null); + } +} + +module.exports = FaxApplicationEvents; diff --git a/server/api/fax_application/fax_application.socket.js b/server/api/fax_application/fax_application.socket.js index 6bb218e..ce03f3d 100644 --- a/server/api/fax_application/fax_application.socket.js +++ b/server/api/fax_application/fax_application.socket.js @@ -1 +1,28 @@ -var _0x8068=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x66\x61\x78\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x66\x61\x78\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x8068[0];const FaxApplicationEvents=require(_0x8068[1]);var events=[_0x8068[2],_0x8068[3]];exports[_0x8068[4]]= function(_0x79dex3){for(var _0x79dex4=0,_0x79dex5=events[_0x8068[5]];_0x79dex4< _0x79dex5;_0x79dex4++){var _0x79dex6=events[_0x79dex4];var _0x79dex7=createListener(_0x8068[6]+ _0x79dex6,_0x79dex3);FaxApplicationEvents[_0x8068[7]](_0x79dex6,_0x79dex7);_0x79dex3[_0x8068[7]](_0x8068[8],removeListener(_0x79dex6,_0x79dex7))}};function createListener(_0x79dex6,_0x79dex3){return function(_0x79dex9){_0x79dex3[_0x8068[9]](_0x79dex6,_0x79dex9)}}function removeListener(_0x79dex6,_0x79dex7){return function(){FaxApplicationEvents[_0x8068[10]](_0x79dex6,_0x79dex7)}} \ No newline at end of file +'use strict'; + +const FaxApplicationEvents = require('./fax_application.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('fax_application:' + event, socket); + + FaxApplicationEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + FaxApplicationEvents.removeListener(event, listener); + }; +} diff --git a/server/api/fax_application/index.js b/server/api/fax_application/index.js index ad04ce7..91aae9d 100644 --- a/server/api/fax_application/index.js +++ b/server/api/fax_application/index.js @@ -1 +1,15 @@ -var _0x7c9e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x66\x61\x78\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x46\x61\x78","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x7c9e[0];var express=require(_0x7c9e[1]);var controller=require(_0x7c9e[2]);var auth=require(_0x7c9e[3]);var license=require(_0x7c9e[4]);var router=express.Router();router[_0x7c9e[12]](_0x7c9e[5],license[_0x7c9e[6]](),license[_0x7c9e[7]](),auth[_0x7c9e[8]](),auth[_0x7c9e[10]]([10],[_0x7c9e[9]]),controller[_0x7c9e[11]]);router[_0x7c9e[12]](_0x7c9e[13],license[_0x7c9e[6]](),license[_0x7c9e[7]](),auth[_0x7c9e[8]](),auth[_0x7c9e[10]]([10],[_0x7c9e[9]]),controller[_0x7c9e[14]]);router[_0x7c9e[16]](_0x7c9e[5],license[_0x7c9e[6]](),license[_0x7c9e[7]](),auth[_0x7c9e[8]](),auth[_0x7c9e[10]]([10],[_0x7c9e[9]]),controller[_0x7c9e[15]]);router[_0x7c9e[18]](_0x7c9e[13],license[_0x7c9e[6]](),license[_0x7c9e[7]](),auth[_0x7c9e[8]](),auth[_0x7c9e[10]]([10],[_0x7c9e[9]]),controller[_0x7c9e[17]]);router[_0x7c9e[20]](_0x7c9e[13],license[_0x7c9e[6]](),license[_0x7c9e[7]](),auth[_0x7c9e[8]](),auth[_0x7c9e[10]]([10],[_0x7c9e[9]]),controller[_0x7c9e[19]]);module[_0x7c9e[21]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./fax_application.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.index); +router.get('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.show); +router.post('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.create); +router.put('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.update); +router.delete('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.destroy); +module.exports = router; diff --git a/server/api/fax_attachment/fax_attachment.controller.js b/server/api/fax_attachment/fax_attachment.controller.js index 2793bce..39802ff 100644 --- a/server/api/fax_attachment/fax_attachment.controller.js +++ b/server/api/fax_attachment/fax_attachment.controller.js @@ -1 +1,140 @@ -var _0xa9de=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x66\x6F\x72\x6D\x69\x64\x61\x62\x6C\x65","\x62\x6C\x75\x65\x62\x69\x72\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x46\x61\x78\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x46\x69\x6C\x65","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x75\x70\x6C\x6F\x61\x64\x44\x69\x72","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x66\x61\x78","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x6F\x72\x69\x67\x69\x6E\x61\x6C","\x6A\x6F\x69\x6E","\x6B\x65\x65\x70\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x6D\x75\x6C\x74\x69\x70\x6C\x65\x73","\x68\x61\x73\x68","\x66\x69\x6C\x65","\x6E\x61\x6D\x65","\x62\x61\x73\x65\x6E\x61\x6D\x65","\x74\x79\x70\x65","\x70\x61\x72\x73\x65","\x75\x70\x64\x61\x74\x65","\x62\x6F\x64\x79","\x75\x6E\x6C\x69\x6E\x6B","\x66\x73","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79"];_0xa9de[0];var _=require(_0xa9de[1]);var path=require(_0xa9de[2]);var Util=require(_0xa9de[3]);var formidable=require(_0xa9de[4]);var Promise=require(_0xa9de[5]);var config=require(_0xa9de[6]);var FaxAttachment=require(_0xa9de[8])[_0xa9de[7]];function handleError(_0xcd09x9,_0xcd09xa){_0xcd09xa= _0xcd09xa|| 500;return function(_0xcd09xb){_0xcd09x9[_0xa9de[10]](_0xcd09xa)[_0xa9de[9]](_0xcd09xb)}}function responseWithResult(_0xcd09x9,_0xcd09xa){_0xcd09xa= _0xcd09xa|| 200;return function(_0xcd09xd){if(_0xcd09xd){_0xcd09x9[_0xa9de[10]](_0xcd09xa)[_0xa9de[11]](_0xcd09xd)}}}function responseWithoutResult(_0xcd09x9,_0xcd09xa){_0xcd09xa= _0xcd09xa|| 204;return function(){_0xcd09x9[_0xa9de[12]](_0xcd09xa)}}function handleEntityNotFound(_0xcd09x9){return function(_0xcd09xd){if(!_0xcd09xd){_0xcd09x9[_0xa9de[10]](404)[_0xa9de[13]]();return null};return _0xcd09xd}}function saveUpdates(_0xcd09x11){return function(_0xcd09xd){return _0xcd09xd[_0xa9de[15]](_0xcd09x11)[_0xa9de[14]](function(_0xcd09x12){return _0xcd09x12})}}function removeEntity(_0xcd09x9){return function(_0xcd09xd){if(_0xcd09xd){return _0xcd09xd[_0xa9de[16]]()[_0xa9de[14]](function(){_0xcd09x9[_0xa9de[10]](204)[_0xa9de[13]]()})}}}exports[_0xa9de[17]]= function(_0xcd09x14,_0xcd09x9){return FaxAttachment[_0xa9de[21]](Util[_0xa9de[20]](_0xcd09x14[_0xa9de[19]]))[_0xa9de[14]](responseWithResult(_0xcd09x9))[_0xa9de[18]](handleError(_0xcd09x9))};exports[_0xa9de[22]]= function(_0xcd09x14,_0xcd09x9){return FaxAttachment[_0xa9de[26]](_0xcd09x14[_0xa9de[25]][_0xa9de[24]])[_0xa9de[14]](handleEntityNotFound(_0xcd09x9))[_0xa9de[14]](function(_0xcd09x15){return _0xcd09x9[_0xa9de[23]](_0xcd09x15[_0xa9de[2]])})[_0xa9de[18]](handleError(_0xcd09x9))};exports[_0xa9de[27]]= function(_0xcd09x14,_0xcd09x9){var _0xcd09x16= new formidable.IncomingForm();_0xcd09x16[_0xa9de[28]]= path[_0xa9de[35]](config[_0xa9de[29]],_0xa9de[30],_0xa9de[31],_0xa9de[32],_0xa9de[33],_0xa9de[34]);_0xcd09x16[_0xa9de[36]]= true;_0xcd09x16[_0xa9de[37]]= true;_0xcd09x16[_0xa9de[38]]= true;_0xcd09x16[_0xa9de[43]](_0xcd09x14,function(_0xcd09xb,_0xcd09x16,_0xcd09x17){if(_0xcd09xb){return _0xcd09x9[_0xa9de[10]](500)[_0xa9de[9]](_0xcd09xb)};return _0xcd09x9[_0xa9de[10]](201)[_0xa9de[9]]({path:_0xcd09x17[_0xa9de[39]][_0xa9de[2]],name:_0xcd09x17[_0xa9de[39]][_0xa9de[40]],basename:path[_0xa9de[41]](_0xcd09x17[_0xa9de[39]][_0xa9de[2]]),type:_0xcd09x17[_0xa9de[39]][_0xa9de[42]]})})};exports[_0xa9de[44]]= function(_0xcd09x14,_0xcd09x9){if(_0xcd09x14[_0xa9de[45]][_0xa9de[24]]){delete _0xcd09x14[_0xa9de[45]][_0xa9de[24]]};return FaxAttachment[_0xa9de[26]](_0xcd09x14[_0xa9de[25]][_0xa9de[24]])[_0xa9de[14]](handleEntityNotFound(_0xcd09x9))[_0xa9de[14]](saveUpdates(_0xcd09x14[_0xa9de[45]]))[_0xa9de[14]](responseWithResult(_0xcd09x9))[_0xa9de[18]](handleError(_0xcd09x9))};exports[_0xa9de[16]]= function(_0xcd09x14,_0xcd09x9){var _0xcd09x18=Promise[_0xa9de[48]](require(_0xa9de[47])[_0xa9de[46]]);var _0xcd09x19=path[_0xa9de[35]](config[_0xa9de[29]],_0xa9de[30],_0xa9de[31],_0xa9de[32],_0xa9de[33],_0xa9de[34],_0xcd09x14[_0xa9de[25]][_0xa9de[24]]);return _0xcd09x18(_0xcd09x19)[_0xa9de[14]](function(){return _0xcd09x9[_0xa9de[12]](204)})[_0xa9de[18]](function(_0xcd09xb){return handleError(_0xcd09x9,_0xcd09xb)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/fax/attachments -> index + * POST /api/fax/attachments -> create + * GET /api/fax/attachments/:id -> show + * PUT /api/fax/attachments/:id -> update + * DELETE /api/fax/attachments/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var path = require('path'); +var Util = require('../../config/util'); +var formidable = require('formidable'); +var Promise = require('bluebird'); + +var config = require('../../config/environment'); +var FaxAttachment = require('../../models').FaxAttachment; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 204; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of FaxAttachments +exports.index = function(req, res) { + return FaxAttachment.findAll(Util.getQuery(req.query)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single FaxAttachment from the DB +exports.show = function(req, res) { + return FaxAttachment.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(faxAttachment) { + return res.sendFile(faxAttachment.path); + }) + .catch(handleError(res)); +} + +// Creates a new FaxAttachment in the DB +exports.create = function(req, res) { + + var form = new formidable.IncomingForm(); + form.uploadDir = path.join(config.root, 'server', 'files', 'fax', 'outbound', 'original'); + form.keepExtensions = true; + form.multiples = true; + form.hash = true; + + form.parse(req, function(err, form, wrap) { + if (err) { + return res.status(500).send(err); + } + return res.status(201).send({ + path: wrap.file.path, + name: wrap.file.name, + basename: path.basename(wrap.file.path), + type: wrap.file.type + }); + }); + +} + +// Updates an existing FaxAttachment in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return FaxAttachment.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a FaxAttachment from the DB +exports.destroy = function(req, res) { + var unlink = Promise.promisify(require("fs").unlink); + var _path = path.join(config.root, 'server', 'files', 'fax', 'outbound', 'original', req.params.id); + + return unlink(_path) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +} diff --git a/server/api/fax_attachment/fax_attachment.events.js b/server/api/fax_attachment/fax_attachment.events.js index a8a4f60..173e113 100644 --- a/server/api/fax_attachment/fax_attachment.events.js +++ b/server/api/fax_attachment/fax_attachment.events.js @@ -1 +1,36 @@ -var _0xfa8c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x46\x61\x78\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xfa8c[0];const EventEmitter=require(_0xfa8c[1]);const FaxAttachment=require(_0xfa8c[3])[_0xfa8c[2]];var FaxAttachmentEvents= new EventEmitter();FaxAttachmentEvents[_0xfa8c[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xfa8c[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xfa8c[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xfa8c[6]};for(var e in events){var event=events[e];FaxAttachment[_0xfa8c[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xfe7ax8,_0xfe7ax9,_0xfe7axa){FaxAttachmentEvents[_0xfa8c[10]](event+ _0xfa8c[8]+ _0xfe7ax8[_0xfa8c[9]],_0xfe7ax8);FaxAttachmentEvents[_0xfa8c[10]](event,_0xfe7ax8);_0xfe7axa(null)}}module[_0xfa8c[11]]= FaxAttachmentEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const FaxAttachment = require('../../models').FaxAttachment; + +var FaxAttachmentEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +FaxAttachmentEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + FaxAttachment.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + FaxAttachmentEvents.emit(event + ':' + doc._id, doc); + FaxAttachmentEvents.emit(event, doc); + done(null); + } +} + +module.exports = FaxAttachmentEvents; diff --git a/server/api/fax_attachment/fax_attachment.socket.js b/server/api/fax_attachment/fax_attachment.socket.js index e22abc5..ab07da6 100644 --- a/server/api/fax_attachment/fax_attachment.socket.js +++ b/server/api/fax_attachment/fax_attachment.socket.js @@ -1 +1,28 @@ -var _0x347e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x66\x61\x78\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x66\x61\x78\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x347e[0];const FaxAttachmentEvents=require(_0x347e[1]);var events=[_0x347e[2],_0x347e[3]];exports[_0x347e[4]]= function(_0x99e2x3){for(var _0x99e2x4=0,_0x99e2x5=events[_0x347e[5]];_0x99e2x4< _0x99e2x5;_0x99e2x4++){var _0x99e2x6=events[_0x99e2x4];var _0x99e2x7=createListener(_0x347e[6]+ _0x99e2x6,_0x99e2x3);FaxAttachmentEvents[_0x347e[7]](_0x99e2x6,_0x99e2x7);_0x99e2x3[_0x347e[7]](_0x347e[8],removeListener(_0x99e2x6,_0x99e2x7))}};function createListener(_0x99e2x6,_0x99e2x3){return function(_0x99e2x9){_0x99e2x3[_0x347e[9]](_0x99e2x6,_0x99e2x9)}}function removeListener(_0x99e2x6,_0x99e2x7){return function(){FaxAttachmentEvents[_0x347e[10]](_0x99e2x6,_0x99e2x7)}} \ No newline at end of file +'use strict'; + +const FaxAttachmentEvents = require('./fax_attachment.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('fax_attachment:' + event, socket); + + FaxAttachmentEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + FaxAttachmentEvents.removeListener(event, listener); + }; +} diff --git a/server/api/fax_attachment/index.js b/server/api/fax_attachment/index.js index b58e482..9dd6190 100644 --- a/server/api/fax_attachment/index.js +++ b/server/api/fax_attachment/index.js @@ -1 +1,16 @@ -var _0xdf87=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x66\x61\x78\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x46\x61\x78","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xdf87[0];var express=require(_0xdf87[1]);var auth=require(_0xdf87[2]);var controller=require(_0xdf87[3]);var license=require(_0xdf87[4]);var router=express.Router();router[_0xdf87[13]](_0xdf87[5],license[_0xdf87[6]](),license[_0xdf87[7]](),auth[_0xdf87[8]](),auth[_0xdf87[11]]([10],[_0xdf87[9],_0xdf87[10]]),controller[_0xdf87[12]]);router[_0xdf87[13]](_0xdf87[14],license[_0xdf87[6]](),license[_0xdf87[7]](),controller[_0xdf87[15]]);router[_0xdf87[17]](_0xdf87[5],license[_0xdf87[6]](),license[_0xdf87[7]](),auth[_0xdf87[8]](),auth[_0xdf87[11]]([10],[_0xdf87[9],_0xdf87[10]]),controller[_0xdf87[16]]);router[_0xdf87[19]](_0xdf87[14],license[_0xdf87[6]](),license[_0xdf87[7]](),auth[_0xdf87[8]](),auth[_0xdf87[11]]([10],[_0xdf87[9],_0xdf87[10]]),controller[_0xdf87[18]]);router[_0xdf87[21]](_0xdf87[14],license[_0xdf87[6]](),license[_0xdf87[7]](),auth[_0xdf87[8]](),auth[_0xdf87[11]]([10],[_0xdf87[9],_0xdf87[10]]),controller[_0xdf87[20]]);module[_0xdf87[22]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var auth = require('../../auth/auth.service'); +var controller = require('./fax_attachment.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.index); +router.get('/:id', license.isValidDate(), license.hasFax(), controller.show); +router.post('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.create); +router.put('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.update); +router.delete('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.destroy); +module.exports = router; diff --git a/server/api/fax_disposition/fax_disposition.controller.js b/server/api/fax_disposition/fax_disposition.controller.js index 01fa508..c3dcbb7 100644 --- a/server/api/fax_disposition/fax_disposition.controller.js +++ b/server/api/fax_disposition/fax_disposition.controller.js @@ -1 +1,112 @@ -var _0xc724=["\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","\x46\x61\x78\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0xc724[0];var _=require(_0xc724[1]);var Util=require(_0xc724[2]);var FaxDisposition=require(_0xc724[4])[_0xc724[3]];function handleError(_0xcc40x5,_0xcc40x6){_0xcc40x6= _0xcc40x6|| 500;return function(_0xcc40x7){_0xcc40x5[_0xc724[6]](_0xcc40x6)[_0xc724[5]](_0xcc40x7)}}function responseWithResult(_0xcc40x5,_0xcc40x6){_0xcc40x6= _0xcc40x6|| 200;return function(_0xcc40x9){if(_0xcc40x9){_0xcc40x5[_0xc724[6]](_0xcc40x6)[_0xc724[7]](_0xcc40x9)}}}function responseWithoutResult(_0xcc40x5,_0xcc40x6){_0xcc40x6= _0xcc40x6|| 204;return function(){_0xcc40x5[_0xc724[8]](_0xcc40x6)}}function handleEntityNotFound(_0xcc40x5){return function(_0xcc40x9){if(!_0xcc40x9){_0xcc40x5[_0xc724[6]](404)[_0xc724[9]]();return null};return _0xcc40x9}}function saveUpdates(_0xcc40xd){return function(_0xcc40x9){return _0xcc40x9[_0xc724[11]](_0xcc40xd)[_0xc724[10]](function(_0xcc40xe){return _0xcc40xe})}}function removeEntity(_0xcc40x5){return function(_0xcc40x9){if(_0xcc40x9){return _0xcc40x9[_0xc724[12]]()[_0xc724[10]](function(){_0xcc40x5[_0xc724[6]](204)[_0xc724[9]]()})}}}exports[_0xc724[13]]= function(_0xcc40x10,_0xcc40x5){return FaxDisposition[_0xc724[17]](Util[_0xc724[16]](_0xcc40x10[_0xc724[15]]))[_0xc724[10]](responseWithResult(_0xcc40x5))[_0xc724[14]](handleError(_0xcc40x5))};exports[_0xc724[18]]= function(_0xcc40x10,_0xcc40x5){return FaxDisposition[_0xc724[21]](_0xcc40x10[_0xc724[20]][_0xc724[19]])[_0xc724[10]](handleEntityNotFound(_0xcc40x5))[_0xc724[10]](responseWithResult(_0xcc40x5))[_0xc724[14]](handleError(_0xcc40x5))};exports[_0xc724[22]]= function(_0xcc40x10,_0xcc40x5){return FaxDisposition[_0xc724[22]](_0xcc40x10[_0xc724[23]])[_0xc724[10]](responseWithResult(_0xcc40x5,201))[_0xc724[14]](handleError(_0xcc40x5))};exports[_0xc724[24]]= function(_0xcc40x10,_0xcc40x5){if(_0xcc40x10[_0xc724[23]][_0xc724[19]]){delete _0xcc40x10[_0xc724[23]][_0xc724[19]]};return FaxDisposition[_0xc724[21]](_0xcc40x10[_0xc724[20]][_0xc724[19]])[_0xc724[10]](handleEntityNotFound(_0xcc40x5))[_0xc724[10]](saveUpdates(_0xcc40x10[_0xc724[23]]))[_0xc724[10]](responseWithResult(_0xcc40x5))[_0xc724[14]](handleError(_0xcc40x5))};exports[_0xc724[12]]= function(_0xcc40x10,_0xcc40x5){return FaxDisposition[_0xc724[21]](_0xcc40x10[_0xc724[20]][_0xc724[19]])[_0xc724[10]](handleEntityNotFound(_0xcc40x5))[_0xc724[10]](removeEntity(_0xcc40x5))[_0xc724[14]](handleError(_0xcc40x5))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/fax/dispositions -> index + * POST /api/fax/dispositions -> create + * GET /api/fax/dispositions/:id -> show + * PUT /api/fax/dispositions/:id -> update + * DELETE /api/fax/dispositions/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var FaxDisposition = require('../../models').FaxDisposition; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 204; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of FaxDispositions +exports.index = function(req, res) { + return FaxDisposition.findAll(Util.getQuery(req.query)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single FaxDisposition from the DB +exports.show = function(req, res) { + return FaxDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new FaxDisposition in the DB +exports.create = function(req, res) { + return FaxDisposition.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing FaxDisposition in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return FaxDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a FaxDisposition from the DB +exports.destroy = function(req, res) { + return FaxDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} diff --git a/server/api/fax_disposition/fax_disposition.events.js b/server/api/fax_disposition/fax_disposition.events.js index 18016f5..ea2756f 100644 --- a/server/api/fax_disposition/fax_disposition.events.js +++ b/server/api/fax_disposition/fax_disposition.events.js @@ -1 +1,36 @@ -var _0x835f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x46\x61\x78\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x835f[0];const EventEmitter=require(_0x835f[1]);const FaxDisposition=require(_0x835f[3])[_0x835f[2]];var FaxDispositionEvents= new EventEmitter();FaxDispositionEvents[_0x835f[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x835f[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x835f[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x835f[6]};for(var e in events){var event=events[e];FaxDisposition[_0x835f[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xb105x8,_0xb105x9,_0xb105xa){FaxDispositionEvents[_0x835f[10]](event+ _0x835f[8]+ _0xb105x8[_0x835f[9]],_0xb105x8);FaxDispositionEvents[_0x835f[10]](event,_0xb105x8);_0xb105xa(null)}}module[_0x835f[11]]= FaxDispositionEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const FaxDisposition = require('../../models').FaxDisposition; + +var FaxDispositionEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +FaxDispositionEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + FaxDisposition.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + FaxDispositionEvents.emit(event + ':' + doc._id, doc); + FaxDispositionEvents.emit(event, doc); + done(null); + } +} + +module.exports = FaxDispositionEvents; diff --git a/server/api/fax_disposition/fax_disposition.socket.js b/server/api/fax_disposition/fax_disposition.socket.js index 62c60eb..42f6297 100644 --- a/server/api/fax_disposition/fax_disposition.socket.js +++ b/server/api/fax_disposition/fax_disposition.socket.js @@ -1 +1,28 @@ -var _0x82f6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x66\x61\x78\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x66\x61\x78\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x82f6[0];const FaxDispositionEvents=require(_0x82f6[1]);var events=[_0x82f6[2],_0x82f6[3]];exports[_0x82f6[4]]= function(_0x289cx3){for(var _0x289cx4=0,_0x289cx5=events[_0x82f6[5]];_0x289cx4< _0x289cx5;_0x289cx4++){var _0x289cx6=events[_0x289cx4];var _0x289cx7=createListener(_0x82f6[6]+ _0x289cx6,_0x289cx3);FaxDispositionEvents[_0x82f6[7]](_0x289cx6,_0x289cx7);_0x289cx3[_0x82f6[7]](_0x82f6[8],removeListener(_0x289cx6,_0x289cx7))}};function createListener(_0x289cx6,_0x289cx3){return function(_0x289cx9){_0x289cx3[_0x82f6[9]](_0x289cx6,_0x289cx9)}}function removeListener(_0x289cx6,_0x289cx7){return function(){FaxDispositionEvents[_0x82f6[10]](_0x289cx6,_0x289cx7)}} \ No newline at end of file +'use strict'; + +const FaxDispositionEvents = require('./fax_disposition.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('fax_disposition:' + event, socket); + + FaxDispositionEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + FaxDispositionEvents.removeListener(event, listener); + }; +} diff --git a/server/api/fax_disposition/index.js b/server/api/fax_disposition/index.js index 2de2c28..2e61ead 100644 --- a/server/api/fax_disposition/index.js +++ b/server/api/fax_disposition/index.js @@ -1 +1,16 @@ -var _0x4da7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x66\x61\x78\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x4da7[0];var express=require(_0x4da7[1]);var auth=require(_0x4da7[2]);var controller=require(_0x4da7[3]);var router=express.Router();router[_0x4da7[7]](_0x4da7[4],auth[_0x4da7[5]](),controller[_0x4da7[6]]);router[_0x4da7[7]](_0x4da7[8],auth[_0x4da7[5]](),controller[_0x4da7[9]]);router[_0x4da7[11]](_0x4da7[4],auth[_0x4da7[5]](),controller[_0x4da7[10]]);router[_0x4da7[13]](_0x4da7[8],auth[_0x4da7[5]](),controller[_0x4da7[12]]);router[_0x4da7[14]](_0x4da7[8],auth[_0x4da7[5]](),controller[_0x4da7[12]]);router[_0x4da7[16]](_0x4da7[8],auth[_0x4da7[5]](),controller[_0x4da7[15]]);module[_0x4da7[17]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./fax_disposition.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); +router.get('/:id', auth.isAuthenticated(), controller.show); +router.post('/', auth.isAuthenticated(), controller.create); +router.put('/:id', auth.isAuthenticated(), controller.update); +router.patch('/:id', auth.isAuthenticated(), controller.update); +router.delete('/:id', auth.isAuthenticated(), controller.destroy); + +module.exports = router; diff --git a/server/api/fax_message/fax_message.ami.js b/server/api/fax_message/fax_message.ami.js index 0008d70..8bb89b2 100644 --- a/server/api/fax_message/fax_message.ami.js +++ b/server/api/fax_message/fax_message.ami.js @@ -1 +1,64 @@ -var _0xe5ba=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x72\x65\x67\x69\x73\x74\x65\x72","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65\x20\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x6C\x6F\x67","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x4E\x4F\x54\x20\x53\x45\x4E\x54","\x61\x63\x74\x69\x6F\x6E\x69\x64","\x62\x6F\x64\x79","\x70\x61\x72\x73\x65","\x66\x61\x78\x42\x6F\x64\x79","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x6F\x72\x69\x67\x69\x6E\x61\x74\x65","\x66\x72\x6F\x6D","\x25\x73\x2F\x25\x73\x40\x25\x73","\x74\x65\x63\x68\x6E\x6F\x6C\x6F\x67\x79","\x74\x6F","\x6E\x61\x6D\x65","\x66\x6F\x72\x6D\x61\x74","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x73","\x74\x72\x75\x65","\x6D\x61\x78\x72\x61\x74\x65","\x6D\x69\x6E\x72\x61\x74\x65","\x65\x63\x6D","\x79\x65\x73","\x6E\x6F","\x66\x61\x78\x5F\x6C\x6F\x63\x61\x6C\x69\x64","\x66\x61\x78\x5F\x66\x69\x6C\x65","\x66\x61\x78\x5F\x68\x65\x61\x64\x65\x72","\x75\x75\x69\x64","\x46\x41\x49\x4C\x45\x44","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x61\x63\x74\x69\x6F\x6E","\x74\x68\x65\x6E","\x69\x64","\x74\x72\x75\x6E\x6B","\x66\x69\x6E\x64\x42\x79\x49\x64"];_0xe5ba[0];var _=require(_0xe5ba[1]);var util=require(_0xe5ba[2]);var FaxMessage=require(_0xe5ba[4])[_0xe5ba[3]];var Trunk=require(_0xe5ba[4])[_0xe5ba[5]];exports[_0xe5ba[6]]= function(_0x8efbx5){FaxMessage[_0xe5ba[9]](function(_0x8efbx6){console[_0xe5ba[8]](_0xe5ba[7])})};function onSave(_0x8efbx5,_0x8efbx6,_0x8efbx8){if(_0x8efbx6[_0xe5ba[10]]=== _0xe5ba[11]&& !_0x8efbx6[_0xe5ba[12]]){var _0x8efbx9=JSON[_0xe5ba[14]](_0x8efbx6[_0xe5ba[13]]);console[_0xe5ba[8]](_0xe5ba[15],_0x8efbx9);Trunk[_0xe5ba[44]](_0x8efbx9[_0xe5ba[43]][_0xe5ba[42]])[_0xe5ba[41]](function(_0x8efbxb){var _0x8efbxc={Action:_0xe5ba[18],CallerID:_0x8efbx9[_0xe5ba[19]],Channel:util[_0xe5ba[24]](_0xe5ba[20],_0x8efbx9[_0xe5ba[21]],_0x8efbx9[_0xe5ba[22]],_0x8efbxb[_0xe5ba[23]]),Context:_0xe5ba[25],Exten:_0xe5ba[26],Priority:1,Async:_0xe5ba[27],Variable:{MAXRATE:_0x8efbx9[_0xe5ba[28]],MINRATE:_0x8efbx9[_0xe5ba[29]],ECM:_0x8efbx9[_0xe5ba[30]]?_0xe5ba[31]:_0xe5ba[32],LOCALID:_0x8efbx9[_0xe5ba[33]],FAXFILE:_0x8efbx9[_0xe5ba[34]],FAXHEADER:_0x8efbx9[_0xe5ba[35]],FAXUUID:_0x8efbx9[_0xe5ba[36]]}};_0x8efbx5[_0xe5ba[40]](_0x8efbxc,function(_0x8efbxa,_0x8efbxd){if(_0x8efbxa){_0x8efbx6[_0xe5ba[38]]({status:_0xe5ba[37]})}else {if(_0x8efbxd[_0xe5ba[39]]&& _0x8efbxd[_0xe5ba[12]]){_0x8efbx6[_0xe5ba[38]]({actionid:_0x8efbxd[_0xe5ba[12]]})}}})})[_0xe5ba[17]](function(_0x8efbxa){console[_0xe5ba[16]](_0x8efbxa)})}} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); + +var FaxMessage = require('../../models').FaxMessage; +var Trunk = require('../../models').User; + +exports.register = function(ami) { + + FaxMessage.afterCreate(function(doc) { + console.log('FaxMessage afterCreate'); + // onSave(ami, doc); + }); +}; + +function onSave(ami, doc, cb) { + if (doc.status === 'NOT SENT' && !doc.actionid) { + // I have to send the fax with the Originate + var faxBody = JSON.parse(doc.body); + console.log('faxBody', faxBody); + + Trunk + .findById(faxBody.trunk.id) + .then(function(trunk) { + var action = { + Action: 'originate', + CallerID: faxBody.from, + Channel: util.format('%s/%s@%s', faxBody.technology, faxBody.to, trunk.name), + Context: 'outbound-fax', + Exten: 's', + Priority: 1, + Async: 'true', + Variable: { + MAXRATE: faxBody.maxrate, + MINRATE: faxBody.minrate, + ECM: faxBody.ecm ? 'yes' : 'no', + LOCALID: faxBody.fax_localid, + FAXFILE: faxBody.fax_file, + // 'FAXFILE': 'test.tiff', // Scommentare se si fanno prove in locale! + FAXHEADER: faxBody.fax_header, + FAXUUID: faxBody.uuid + } + }; + + ami.action(action, function(err, res) { + if (err) { + doc.updateAttributes({ + status: 'FAILED' + }); + } else { + if (res.response && res.actionid) { + doc.updateAttributes({ + actionid: res.actionid + }); + } + } + }); + }) + .catch(function(err) { + console.error(err); + }); + } +} diff --git a/server/api/fax_message/fax_message.controller.js b/server/api/fax_message/fax_message.controller.js index 69a9ff0..39fa261 100644 --- a/server/api/fax_message/fax_message.controller.js +++ b/server/api/fax_message/fax_message.controller.js @@ -1 +1,175 @@ -var _0x23b1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x66\x73","\x70\x61\x74\x68","\x75\x70\x6C\x6F\x61\x64\x2D\x66\x69\x6C\x65","\x6E\x6F\x64\x65\x2D\x75\x75\x69\x64","\x68\x74\x6D\x6C\x2D\x70\x64\x66","\x66\x6F\x72\x6D\x69\x64\x61\x62\x6C\x65","\x65\x78\x65\x63","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x46\x61\x78\x52\x6F\x6F\x6D","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x55\x73\x65\x72","\x69\x6E\x64\x65\x78","\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x44\x45\x53\x43","\x77\x68\x65\x72\x65","\x71\x75\x65\x72\x79","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65","\x75\x73\x65\x72","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x55\x73\x65\x72\x49\x64","\x62\x6F\x64\x79","\x74\x65\x78\x74","\x75\x70\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x6C\x65\x74\x65","\x54\x52\x41\x53\x48","\x62\x75\x6C\x6B\x55\x70\x64\x61\x74\x65"];_0x23b1[0];var _=require(_0x23b1[1]);var fs=require(_0x23b1[2]);var path=require(_0x23b1[3]);var uploadFile=require(_0x23b1[4]);var uuidLib=require(_0x23b1[5]);var pdf=require(_0x23b1[6]);var formidable=require(_0x23b1[7]);var exec=require(_0x23b1[9])[_0x23b1[8]];var config=require(_0x23b1[10]);var FaxMessage=require(_0x23b1[12])[_0x23b1[11]];var FaxAttachment=require(_0x23b1[12])[_0x23b1[13]];var FaxRoom=require(_0x23b1[12])[_0x23b1[14]];var FaxAccount=require(_0x23b1[12])[_0x23b1[15]];var FaxAttachment=require(_0x23b1[12])[_0x23b1[13]];var User=require(_0x23b1[12])[_0x23b1[16]];exports[_0x23b1[17]]= function(_0x9363xf,_0x9363x10,_0x9363x11){var _0x9363x12={order:_0x23b1[18],include:[{all:true,include:[{all:true}]}]};switch(_0x9363xf[_0x23b1[24]][_0x23b1[23]]){case _0x23b1[21]:_0x9363x12[_0x23b1[19]]= _0x9363xf[_0x23b1[20]];break;case _0x23b1[22]:break;default:};return FaxMessage[_0x23b1[29]](_0x9363x12)[_0x23b1[28]](function(_0x9363x14){return _0x9363x10[_0x23b1[27]](200)[_0x23b1[26]](_0x9363x14)})[_0x23b1[25]](function(_0x9363x13){return handleError(_0x9363x10,_0x9363x13,_0x9363x11)})};exports[_0x23b1[30]]= function(_0x9363xf,_0x9363x10){return FaxMessage[_0x23b1[30]]()[_0x23b1[28]](function(_0x9363x15){return _0x9363x10[_0x23b1[27]](200)[_0x23b1[26]](_0x9363x15)})[_0x23b1[25]](function(_0x9363x13){return handleError(_0x9363x10,_0x9363x13)})};exports[_0x23b1[31]]= function(_0x9363xf,_0x9363x10,_0x9363x11){return FaxMessage[_0x23b1[38]](_0x9363xf[_0x23b1[34]][_0x23b1[33]],{include:[{model:FaxAttachment},{model:User,attributes:[_0x23b1[33],_0x23b1[35],_0x23b1[36],_0x23b1[37]]}]})[_0x23b1[28]](function(_0x9363x16){if(!_0x9363x16){return _0x9363x10[_0x23b1[32]](404)};return _0x9363x10[_0x23b1[26]](_0x9363x16)})[_0x23b1[25]](function(_0x9363x13){return handleError(_0x9363x10,_0x9363x13,_0x9363x11)})};exports[_0x23b1[39]]= function(_0x9363xf,_0x9363x10,_0x9363x11){_0x9363xf[_0x23b1[41]][_0x23b1[40]]= _0x9363xf[_0x23b1[24]][_0x23b1[33]];_0x9363xf[_0x23b1[41]][_0x23b1[42]]= _0x9363xf[_0x23b1[41]][_0x23b1[42]];return FaxMessage[_0x23b1[39]](_0x9363xf[_0x23b1[41]],{include:[{model:FaxAttachment}]})[_0x23b1[28]](function(_0x9363x16){return _0x9363x10[_0x23b1[27]](201)[_0x23b1[26]](_0x9363x16)})[_0x23b1[25]](function(_0x9363x13){return handleError(_0x9363x10,_0x9363x13)})};exports[_0x23b1[43]]= function(_0x9363xf,_0x9363x10,_0x9363x11){return FaxMessage[_0x23b1[38]](_0x9363xf[_0x23b1[34]][_0x23b1[33]],{include:[{all:true}]})[_0x23b1[28]](function(_0x9363x16){if(!_0x9363x16){return _0x9363x10[_0x23b1[32]](404)};return _0x9363x16[_0x23b1[44]](_0x9363xf[_0x23b1[41]],{user:_0x9363xf[_0x23b1[24]]})})[_0x23b1[28]](function(_0x9363x17){return _0x9363x10[_0x23b1[27]](200)[_0x23b1[26]](_0x9363x17)})[_0x23b1[25]](function(_0x9363x13){return handleError(_0x9363x10,_0x9363x13,_0x9363x11)})};exports[_0x23b1[45]]= function(_0x9363xf,_0x9363x10,_0x9363x11){return FaxMessage[_0x23b1[38]](_0x9363xf[_0x23b1[34]][_0x23b1[33]])[_0x23b1[28]](function(_0x9363x16){if(!_0x9363x16){return _0x9363x10[_0x23b1[32]](404)};return _0x9363x16[_0x23b1[45]]()})[_0x23b1[28]](function(){return _0x9363x10[_0x23b1[32]](204)})[_0x23b1[25]](function(_0x9363x13){return handleError(_0x9363x10,_0x9363x13,_0x9363x11)})};exports[_0x23b1[46]]= function(_0x9363xf,_0x9363x10,_0x9363x11){return FaxMessage[_0x23b1[48]]({where:{id:{$in:_0x9363xf[_0x23b1[41]][_0x23b1[33]]}},attributes:{directory:_0x23b1[47]}})[_0x23b1[28]](function(_0x9363x16){if(!_0x9363x16){return _0x9363x10[_0x23b1[32]](404)};return _0x9363x16[_0x23b1[45]]()})[_0x23b1[28]](function(){return _0x9363x10[_0x23b1[32]](204)})[_0x23b1[25]](function(_0x9363x13){return handleError(_0x9363x10,_0x9363x13,_0x9363x11)})};function handleError(_0x9363x10,_0x9363x13,_0x9363x11){return _0x9363x10[_0x23b1[27]](500)[_0x23b1[26]](_0x9363x13)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var fs = require('fs'); +var path = require('path'); +var uploadFile = require('upload-file'); +var uuidLib = require('node-uuid'); +var pdf = require('html-pdf'); +// var spindrift = require('spindrift'); +var formidable = require('formidable'); +var exec = require('child_process').exec; +var config = require('../../config/environment'); + +var FaxMessage = require('../../models').FaxMessage; +var FaxAttachment = require('../../models').FaxAttachment; +var FaxRoom = require('../../models').FaxRoom; +var FaxAccount = require('../../models').FaxAccount; +var FaxAttachment = require('../../models').FaxAttachment; +var User = require('../../models').User; + +// Get list of fax_message +exports.index = function(req, res, next) { + var params = { + order: 'createdAt DESC', + include: [{ + all: true, + include: [{ + all: true + }] + }] + }; + + switch (req.user.role) { + case 'admin': + params.where = req.query; + break; + case 'agent': + break; + default: + } + + return FaxMessage + .findAll(params) + .then(function(fax_message) { + return res.status(200).send(fax_message); + }) + .catch(function(err) { + return handleError(res, err, next); + }); +}; + +exports.describe = function(req, res) { + return FaxMessage + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single faxMessage +exports.show = function(req, res, next) { + return FaxMessage + .findById(req.params.id, { + include: [{ + model: FaxAttachment + }, { + model: User, + attributes: ['id', 'name', 'fullname', 'email'] + }] + }) + .then(function(faxMessage) { + if (!faxMessage) { + return res.sendStatus(404); + } + return res.send(faxMessage); + }) + .catch(function(err) { + return handleError(res, err, next); + }); +}; + +// Creates a new faxMessage in the DB. +exports.create = function(req, res, next) { + req.body.UserId = req.user.id; + req.body.text = req.body.text; + + return FaxMessage + .create(req.body, { + include: [{ + model: FaxAttachment + }] + }) + .then(function(faxMessage) { + return res.status(201).send(faxMessage); + }).catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing faxMessage in the DB. +exports.update = function(req, res, next) { + return FaxMessage + .findById(req.params.id, { + include: [{ + all: true + }] + }) + .then(function(faxMessage) { + if (!faxMessage) { + return res.sendStatus(404); + } + return faxMessage.updateAttributes(req.body, { + user: req.user + }); + }) + .then(function(updated) { + return res.status(200).send(updated); + }) + .catch(function(err) { + return handleError(res, err, next); + }); +}; + +// Deletes a faxMessage from the DB. +exports.destroy = function(req, res, next) { + return FaxMessage + .findById(req.params.id) + .then(function(faxMessage) { + if (!faxMessage) { + return res.sendStatus(404); + } + return faxMessage + .destroy(); + }).then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err, next); + }); +}; + +// Deletes a faxMessage from the DB. +exports.bulkDelete = function(req, res, next) { + return FaxMessage + .bulkUpdate({ + where: { + id: { + $in: req.body.id + } + }, + attributes: { + directory: 'TRASH' + } + }) + .then(function(faxMessage) { + if (!faxMessage) { + return res.sendStatus(404); + } + return faxMessage + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err, next); + }); +}; + +function handleError(res, err, next) { + return res.status(500).send(err); +} diff --git a/server/api/fax_message/fax_message.events.js b/server/api/fax_message/fax_message.events.js index 4a05c65..ca98ec2 100644 --- a/server/api/fax_message/fax_message.events.js +++ b/server/api/fax_message/fax_message.events.js @@ -1 +1,36 @@ -var _0x3501=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x3501[0];const EventEmitter=require(_0x3501[1]);const FaxMessage=require(_0x3501[3])[_0x3501[2]];var FaxMessageEvents= new EventEmitter();FaxMessageEvents[_0x3501[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x3501[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x3501[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x3501[6]};for(var e in events){var event=events[e];FaxMessage[_0x3501[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xd0f7x8,_0xd0f7x9,_0xd0f7xa){FaxMessageEvents[_0x3501[10]](event+ _0x3501[8]+ _0xd0f7x8[_0x3501[9]],_0xd0f7x8);FaxMessageEvents[_0x3501[10]](event,_0xd0f7x8);_0xd0f7xa(null)}}module[_0x3501[11]]= FaxMessageEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const FaxMessage = require('../../models').FaxMessage; + +var FaxMessageEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +FaxMessageEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + FaxMessage.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + FaxMessageEvents.emit(event + ':' + doc._id, doc); + FaxMessageEvents.emit(event, doc); + done(null); + } +} + +module.exports = FaxMessageEvents; diff --git a/server/api/fax_message/fax_message.socket.js b/server/api/fax_message/fax_message.socket.js index 6b57160..fc70af3 100644 --- a/server/api/fax_message/fax_message.socket.js +++ b/server/api/fax_message/fax_message.socket.js @@ -1 +1,28 @@ -var _0x327c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x327c[0];const FaxMessageEvents=require(_0x327c[1]);var events=[_0x327c[2],_0x327c[3]];exports[_0x327c[4]]= function(_0x6f4ax3){for(var _0x6f4ax4=0,_0x6f4ax5=events[_0x327c[5]];_0x6f4ax4< _0x6f4ax5;_0x6f4ax4++){var _0x6f4ax6=events[_0x6f4ax4];var _0x6f4ax7=createListener(_0x327c[6]+ _0x6f4ax6,_0x6f4ax3);FaxMessageEvents[_0x327c[7]](_0x6f4ax6,_0x6f4ax7);_0x6f4ax3[_0x327c[7]](_0x327c[8],removeListener(_0x6f4ax6,_0x6f4ax7))}};function createListener(_0x6f4ax6,_0x6f4ax3){return function(_0x6f4ax9){_0x6f4ax3[_0x327c[9]](_0x6f4ax6,_0x6f4ax9)}}function removeListener(_0x6f4ax6,_0x6f4ax7){return function(){FaxMessageEvents[_0x327c[10]](_0x6f4ax6,_0x6f4ax7)}} \ No newline at end of file +'use strict'; + +const FaxMessageEvents = require('./fax_message.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('fax_message:' + event, socket); + + FaxMessageEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + FaxMessageEvents.removeListener(event, listener); + }; +} diff --git a/server/api/fax_message/index.js b/server/api/fax_message/index.js index 7281918..60e36a1 100644 --- a/server/api/fax_message/index.js +++ b/server/api/fax_message/index.js @@ -1 +1,30 @@ -var _0xe292=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x46\x61\x78","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x64\x65\x6C\x65\x74\x65\x2F\x62\x75\x6C\x6B","\x62\x75\x6C\x6B\x44\x65\x6C\x65\x74\x65","\x2F\x64\x65\x6C\x65\x74\x65\x2F\x3A\x69\x64","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xe292[0];var express=require(_0xe292[1]);var controller=require(_0xe292[2]);var auth=require(_0xe292[3]);var license=require(_0xe292[4]);var router=express.Router();router[_0xe292[13]](_0xe292[5],license[_0xe292[6]](),license[_0xe292[7]](),auth[_0xe292[8]](),auth[_0xe292[11]]([10],[_0xe292[9],_0xe292[10]]),controller[_0xe292[12]]);router[_0xe292[13]](_0xe292[14],license[_0xe292[6]](),license[_0xe292[7]](),auth[_0xe292[8]](),auth[_0xe292[11]]([10],[_0xe292[9]]),controller[_0xe292[15]]);router[_0xe292[13]](_0xe292[16],license[_0xe292[6]](),license[_0xe292[7]](),auth[_0xe292[8]](),auth[_0xe292[11]]([10],[_0xe292[9],_0xe292[10]]),controller[_0xe292[17]]);router[_0xe292[19]](_0xe292[5],license[_0xe292[6]](),license[_0xe292[7]](),auth[_0xe292[8]](),auth[_0xe292[11]]([10],[_0xe292[9],_0xe292[10]]),controller[_0xe292[18]]);router[_0xe292[21]](_0xe292[5],license[_0xe292[6]](),license[_0xe292[7]](),auth[_0xe292[8]](),auth[_0xe292[11]]([10],[_0xe292[9],_0xe292[10]]),controller[_0xe292[20]]);router[_0xe292[21]](_0xe292[22],license[_0xe292[6]](),license[_0xe292[7]](),auth[_0xe292[8]](),auth[_0xe292[11]]([10],[_0xe292[9]]),controller[_0xe292[23]]);router[_0xe292[21]](_0xe292[24],license[_0xe292[6]](),license[_0xe292[7]](),auth[_0xe292[8]](),auth[_0xe292[11]]([10],[_0xe292[9]]),controller[_0xe292[20]]);router[_0xe292[21]](_0xe292[16],license[_0xe292[6]](),license[_0xe292[7]](),auth[_0xe292[8]](),auth[_0xe292[11]]([10],[_0xe292[9],_0xe292[10]]),controller[_0xe292[20]]);router[_0xe292[26]](_0xe292[16],license[_0xe292[6]](),license[_0xe292[7]](),auth[_0xe292[8]](),auth[_0xe292[11]]([10],[_0xe292[9]]),controller[_0xe292[25]]);module[_0xe292[27]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./fax_message.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +// router.get('/', controller.index); +// router.get('/:id/content', controller.getContentFromMessage); +// router.get('/:id', controller.show); +// router.post('/', controller.create); +// router.put('/:id', controller.update); +// router.patch('/:id', controller.update); +// router.delete('/:id', controller.destroy); + +router.get('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.index); +router.get('/describe', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.describe); +router.get('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.show); +router.post('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.create); +router.put('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.update); +router.put('/delete/bulk', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.bulkDelete); +router.put('/delete/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.update); +router.put('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.update); +router.delete('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.destroy); + + +module.exports = router; diff --git a/server/api/fax_queue/fax_queue.controller.js b/server/api/fax_queue/fax_queue.controller.js index eb6b5de..682bc1f 100644 --- a/server/api/fax_queue/fax_queue.controller.js +++ b/server/api/fax_queue/fax_queue.controller.js @@ -1 +1,213 @@ -var _0x9874=["\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","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x46\x61\x78\x51\x75\x65\x75\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x46\x61\x78\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","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x72\x6F\x6C\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x70\x61\x72\x61\x6D\x73","\x63\x72\x65\x61\x74\x65","\x61\x67\x65\x6E\x74\x73","\x62\x6F\x64\x79","\x70\x65\x6E\x61\x6C\x74\x79","\x6E\x61\x6D\x65","\x61\x64\x64\x55\x73\x65\x72\x73","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x6D\x61\x70","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x6C\x65\x6E\x67\x74\x68","\x61\x67\x65\x6E\x74","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x55\x73\x65\x72\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x9874[0];var _=require(_0x9874[1]);var Util=require(_0x9874[2]);var User=require(_0x9874[4])[_0x9874[3]];var FaxQueue=require(_0x9874[4])[_0x9874[5]];var UserHasFaxQueue=require(_0x9874[4])[_0x9874[6]];exports[_0x9874[7]]= function(_0x5775x6,_0x5775x7){switch(_0x5775x6[_0x9874[15]][_0x9874[19]]){case _0x9874[15]:return User[_0x9874[16]](_0x5775x6[_0x9874[15]][_0x9874[14]],{attributes:[_0x9874[14]]})[_0x9874[11]](Util[_0x9874[13]](_0x5775x6[_0x9874[12]]))[_0x9874[11]](function(_0x5775x9){_0x5775x7[_0x9874[10]](200)[_0x9874[9]](_0x5775x9)})[_0x9874[8]](function(_0x5775x8){return handleError(_0x5775x7,_0x5775x8)});default:return FaxQueue[_0x9874[18]](Util[_0x9874[17]](_0x5775x6[_0x9874[12]]))[_0x9874[11]](function(_0x5775x9){_0x5775x7[_0x9874[10]](200)[_0x9874[9]](_0x5775x9)})[_0x9874[8]](function(_0x5775x8){return handleError(_0x5775x7,_0x5775x8)})}};exports[_0x9874[20]]= function(_0x5775x6,_0x5775x7){return FaxQueue[_0x9874[16]](_0x5775x6[_0x9874[22]][_0x9874[14]])[_0x9874[11]](function(_0x5775xa){if(!_0x5775xa){return _0x5775x7[_0x9874[21]](404)};return _0x5775x7[_0x9874[9]](_0x5775xa)})[_0x9874[8]](function(_0x5775x8){return handleError(_0x5775x7,_0x5775x8)})};exports[_0x9874[23]]= function(_0x5775x6,_0x5775x7){var _0x5775xb;return FaxQueue[_0x9874[23]](_0x5775x6[_0x9874[25]])[_0x9874[11]](function(_0x5775xc){_0x5775xb= _0x5775xc;if(_0x5775x6[_0x9874[25]][_0x9874[24]]){return _0x5775xb[_0x9874[28]](_0x5775x6[_0x9874[25]][_0x9874[24]],{penalty:_0x5775x6[_0x9874[25]][_0x9874[26]]|| 0,queue:_0x5775xb[_0x9874[27]]})}})[_0x9874[11]](function(){return _0x5775x7[_0x9874[10]](201)[_0x9874[9]](_0x5775xb)})[_0x9874[8]](function(_0x5775x8){return handleError(_0x5775x7,_0x5775x8)})};exports[_0x9874[29]]= function(_0x5775x6,_0x5775x7){if(_0x5775x6[_0x9874[25]][_0x9874[14]]){delete _0x5775x6[_0x9874[25]][_0x9874[14]]};return FaxQueue[_0x9874[16]](_0x5775x6[_0x9874[22]][_0x9874[14]])[_0x9874[11]](function(_0x5775xa){if(!_0x5775xa){return _0x5775x7[_0x9874[21]](404)};var _0x5775xd=_[_0x9874[30]](_0x5775xa,_0x5775x6[_0x9874[25]]);return _0x5775xd[_0x9874[31]]()})[_0x9874[11]](function(_0x5775xa){return _0x5775x7[_0x9874[10]](200)[_0x9874[9]](_0x5775xa)})[_0x9874[8]](function(_0x5775x8){return handleError(_0x5775x7,_0x5775x8)})};exports[_0x9874[32]]= function(_0x5775x6,_0x5775x7){return FaxQueue[_0x9874[16]](_0x5775x6[_0x9874[22]][_0x9874[14]])[_0x9874[11]](function(_0x5775xa){if(!_0x5775xa){return _0x5775x7[_0x9874[21]](404)};return _0x5775xa[_0x9874[32]]()})[_0x9874[11]](function(){return _0x5775x7[_0x9874[21]](204)})[_0x9874[8]](function(_0x5775x8){return handleError(_0x5775x7,_0x5775x8)})};exports[_0x9874[33]]= function(_0x5775x6,_0x5775x7,_0x5775xe){return FaxQueue[_0x9874[16]](_0x5775x6[_0x9874[22]][_0x9874[14]])[_0x9874[11]](function(_0x5775xc){if(!_0x5775xc){return _0x5775x7[_0x9874[21]](404)};var _0x5775xf=_[_0x9874[34]](_0x5775x6[_0x9874[25]][_0x9874[24]],function(_0x5775x10){return {UserId:_0x5775x10,penalty:_0x5775x6[_0x9874[25]][_0x9874[26]],FaxQueueId:_0x5775xc[_0x9874[14]],queue:_0x5775xc[_0x9874[27]]}});return UserHasFaxQueue[_0x9874[35]](_0x5775xf,{individualHooks:true})})[_0x9874[11]](function(){return _0x5775x7[_0x9874[21]](200)})[_0x9874[8]](function(_0x5775x8){return handleError(_0x5775x7,_0x5775x8)})};exports[_0x9874[36]]= function(_0x5775x6,_0x5775x7){return FaxQueue[_0x9874[16]](_0x5775x6[_0x9874[22]][_0x9874[14]])[_0x9874[11]](function(_0x5775x12){if(!_0x5775x12){return _0x5775x7[_0x9874[21]](404)};return _0x5775x12[_0x9874[41]]({where:{role:_0x9874[38]},attributes:[_0x9874[14],_0x9874[27],_0x9874[39],_0x9874[40]]})})[_0x9874[11]](function(_0x5775x11){return _0x5775x7[_0x9874[10]](200)[_0x9874[9]]({rows:_0x5775x11,count:_0x5775x11[_0x9874[37]]})})[_0x9874[8]](function(_0x5775x8){return handleError(_0x5775x7,_0x5775x8)})};exports[_0x9874[42]]= function(_0x5775x6,_0x5775x7,_0x5775xe){return FaxQueue[_0x9874[16]](_0x5775x6[_0x9874[22]][_0x9874[14]])[_0x9874[11]](function(_0x5775x12){if(!_0x5775x12){return _0x5775x7[_0x9874[21]](404)};return _0x5775x12[_0x9874[43]](_0x5775x6[_0x9874[12]][_0x9874[24]],{individualHooks:true})})[_0x9874[11]](function(){return _0x5775x7[_0x9874[21]](202)})[_0x9874[8]](function(_0x5775x8){return _0x5775xe(_0x5775x8)})};exports[_0x9874[44]]= function(_0x5775x6,_0x5775x7){return FaxQueue[_0x9874[32]]({where:{id:_0x5775x6[_0x9874[12]][_0x9874[45]]},individualHooks:true})[_0x9874[11]](function(){return _0x5775x7[_0x9874[21]](204)})[_0x9874[8]](function(_0x5775x8){return handleError(_0x5775x7,_0x5775x8)})};function handleError(_0x5775x7,_0x5775x8){return _0x5775x7[_0x9874[10]](500)[_0x9874[9]](_0x5775x8)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var User = require('../../models').User; +var FaxQueue = require('../../models').FaxQueue; +var UserHasFaxQueue = require('../../models').UserHasFaxQueue; + +// Get list of fax_queues +exports.index = function(req, res) { + switch (req.user.role) { + case 'user': + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getFaxQueuesIdByUser(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + + default: + return FaxQueue + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + } +}; + +// Get a single fax_queue +exports.show = function(req, res) { + return FaxQueue + .findById(req.params.id) + .then(function(fax_queue) { + if (!fax_queue) { + return res.sendStatus(404); + } + return res.send(fax_queue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new fax_queue in the DB. +exports.create = function(req, res) { + var _faxQueue; + + return FaxQueue + .create(req.body) + .then(function(faxQueue) { + _faxQueue = faxQueue; + + if (req.body.agents) { + return _faxQueue + .addUsers(req.body.agents, { + penalty: req.body.penalty || 0, + queue: _faxQueue.name + }); + } + }) + .then(function() { + return res.status(201).send(_faxQueue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing fax_queue in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return FaxQueue + .findById(req.params.id) + .then(function(fax_queue) { + if (!fax_queue) { + return res.sendStatus(404); + } + var updated = _.merge(fax_queue, req.body); + return updated.save(); + }) + .then(function(fax_queue) { + return res.status(200).send(fax_queue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a fax_queue from the DB. +exports.destroy = function(req, res) { + return FaxQueue + .findById(req.params.id) + .then(function(fax_queue) { + if (!fax_queue) { + return res.sendStatus(404); + } + return fax_queue.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.addAgents = function(req, res, next) { + + return FaxQueue + .findById(req.params.id) + .then(function(faxQueue) { + if (!faxQueue) { + return res.sendStatus(404); + } + var userHasFaxQueues = _.map(req.body.agents, function(agent) { + return { + UserId: agent, + penalty: req.body.penalty, + FaxQueueId: faxQueue.id, + queue: faxQueue.name + }; + }); + + return UserHasFaxQueue + .bulkCreate(userHasFaxQueues, { + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.showAgents = function(req, res) { + return FaxQueue + .findById(req.params.id) + .then(function(queue) { + if (!queue) { + return res.sendStatus(404); + } + return queue + .getUsers({ + where: { + role: 'agent' + }, + attributes: ['id', 'name', 'fullname', 'email'] + }); + }) + .then(function(agents) { + return res.status(200).send({ + rows: agents, + count: agents.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.removeAgents = function(req, res, next) { + return FaxQueue + .findById(req.params.id) + .then(function(queue) { + if (!queue) { + return res.sendStatus(404); + } + return queue + .removeUsers(req.query.agents, { + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(202); + }) + .catch(function(err) { + return next(err); + }); +}; + +// Deletes a agent from the DB. +exports.bulkDestroy = function(req, res) { + return FaxQueue + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/fax_queue/fax_queue.events.js b/server/api/fax_queue/fax_queue.events.js index 92efbbd..a65c990 100644 --- a/server/api/fax_queue/fax_queue.events.js +++ b/server/api/fax_queue/fax_queue.events.js @@ -1 +1,36 @@ -var _0x310b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x46\x61\x78\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x310b[0];const EventEmitter=require(_0x310b[1]);const FaxQueue=require(_0x310b[3])[_0x310b[2]];var FaxQueueEvents= new EventEmitter();FaxQueueEvents[_0x310b[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x310b[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x310b[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x310b[6]};for(var e in events){var event=events[e];FaxQueue[_0x310b[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xb21cx8,_0xb21cx9,_0xb21cxa){FaxQueueEvents[_0x310b[10]](event+ _0x310b[8]+ _0xb21cx8[_0x310b[9]],_0xb21cx8);FaxQueueEvents[_0x310b[10]](event,_0xb21cx8);_0xb21cxa(null)}}module[_0x310b[11]]= FaxQueueEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const FaxQueue = require('../../models').FaxQueue; + +var FaxQueueEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +FaxQueueEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + FaxQueue.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + FaxQueueEvents.emit(event + ':' + doc._id, doc); + FaxQueueEvents.emit(event, doc); + done(null); + } +} + +module.exports = FaxQueueEvents; diff --git a/server/api/fax_queue/fax_queue.socket.js b/server/api/fax_queue/fax_queue.socket.js index 5a20330..8d589ab 100644 --- a/server/api/fax_queue/fax_queue.socket.js +++ b/server/api/fax_queue/fax_queue.socket.js @@ -1 +1,28 @@ -var _0xf317=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xf317[0];const FaxQueueEvents=require(_0xf317[1]);var events=[_0xf317[2],_0xf317[3]];exports[_0xf317[4]]= function(_0x1f42x3){for(var _0x1f42x4=0,_0x1f42x5=events[_0xf317[5]];_0x1f42x4< _0x1f42x5;_0x1f42x4++){var _0x1f42x6=events[_0x1f42x4];var _0x1f42x7=createListener(_0xf317[6]+ _0x1f42x6,_0x1f42x3);FaxQueueEvents[_0xf317[7]](_0x1f42x6,_0x1f42x7);_0x1f42x3[_0xf317[7]](_0xf317[8],removeListener(_0x1f42x6,_0x1f42x7))}};function createListener(_0x1f42x6,_0x1f42x3){return function(_0x1f42x9){_0x1f42x3[_0xf317[9]](_0x1f42x6,_0x1f42x9)}}function removeListener(_0x1f42x6,_0x1f42x7){return function(){FaxQueueEvents[_0xf317[10]](_0x1f42x6,_0x1f42x7)}} \ No newline at end of file +'use strict'; + +const FaxQueueEvents = require('./fax_queue.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('fax_queue:' + event, socket); + + FaxQueueEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + FaxQueueEvents.removeListener(event, listener); + }; +} diff --git a/server/api/fax_queue/index.js b/server/api/fax_queue/index.js index 62a758f..0e5f100 100644 --- a/server/api/fax_queue/index.js +++ b/server/api/fax_queue/index.js @@ -1 +1,21 @@ -var _0x4bb9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x46\x61\x78","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x68\x61\x73\x52\x6F\x6C\x65","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0x4bb9[0];var express=require(_0x4bb9[1]);var controller=require(_0x4bb9[2]);var auth=require(_0x4bb9[3]);var license=require(_0x4bb9[4]);var router=express.Router();router[_0x4bb9[12]](_0x4bb9[5],license[_0x4bb9[6]](),license[_0x4bb9[7]](),auth[_0x4bb9[8]](),auth[_0x4bb9[10]]([10],[_0x4bb9[9]]),controller[_0x4bb9[11]]);router[_0x4bb9[12]](_0x4bb9[13],license[_0x4bb9[6]](),license[_0x4bb9[7]](),auth[_0x4bb9[8]](),auth[_0x4bb9[10]]([10],[_0x4bb9[9]]),controller[_0x4bb9[14]]);router[_0x4bb9[12]](_0x4bb9[15],license[_0x4bb9[6]](),license[_0x4bb9[7]](),auth[_0x4bb9[8]](),auth[_0x4bb9[10]]([10],[_0x4bb9[9]]),controller[_0x4bb9[16]]);router[_0x4bb9[19]](_0x4bb9[5],license[_0x4bb9[6]](),license[_0x4bb9[7]](),auth[_0x4bb9[8]](),auth[_0x4bb9[17]](_0x4bb9[9]),controller[_0x4bb9[18]]);router[_0x4bb9[19]](_0x4bb9[15],license[_0x4bb9[6]](),license[_0x4bb9[7]](),auth[_0x4bb9[8]](),auth[_0x4bb9[17]](_0x4bb9[9]),controller[_0x4bb9[20]]);router[_0x4bb9[22]](_0x4bb9[13],license[_0x4bb9[6]](),license[_0x4bb9[7]](),auth[_0x4bb9[8]](),auth[_0x4bb9[17]](_0x4bb9[9]),controller[_0x4bb9[21]]);router[_0x4bb9[23]](_0x4bb9[13],license[_0x4bb9[6]](),license[_0x4bb9[7]](),auth[_0x4bb9[8]](),auth[_0x4bb9[17]](_0x4bb9[9]),controller[_0x4bb9[21]]);router[_0x4bb9[25]](_0x4bb9[5],license[_0x4bb9[6]](),license[_0x4bb9[7]](),auth[_0x4bb9[8]](),auth[_0x4bb9[17]](_0x4bb9[9]),controller[_0x4bb9[24]]);router[_0x4bb9[25]](_0x4bb9[13],license[_0x4bb9[6]](),license[_0x4bb9[7]](),auth[_0x4bb9[8]](),auth[_0x4bb9[17]](_0x4bb9[9]),controller[_0x4bb9[26]]);router[_0x4bb9[25]](_0x4bb9[15],license[_0x4bb9[6]](),license[_0x4bb9[7]](),auth[_0x4bb9[8]](),auth[_0x4bb9[17]](_0x4bb9[9]),controller[_0x4bb9[27]]);module[_0x4bb9[28]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./fax_queue.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.index); +router.get('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.show); +router.get('/:id/agents', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.showAgents); +router.post('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasRole('admin'), controller.create); +router.post('/:id/agents', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasRole('admin'), controller.addAgents); +router.put('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasRole('admin'), controller.update); +router.patch('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasRole('admin'), controller.update); +router.delete('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasRole('admin'), controller.bulkDestroy); +router.delete('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasRole('admin'), controller.destroy); +router.delete('/:id/agents', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasRole('admin'), controller.removeAgents); + +module.exports = router; diff --git a/server/api/fax_room/fax_room.controller.js b/server/api/fax_room/fax_room.controller.js index 022e65f..ab316a3 100644 --- a/server/api/fax_room/fax_room.controller.js +++ b/server/api/fax_room/fax_room.controller.js @@ -1 +1,474 @@ -var _0x73fa=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x43\x6F\x6E\x74\x61\x63\x74","\x46\x61\x78\x52\x6F\x6F\x6D","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x46\x61\x78\x51\x75\x65\x75\x65","\x46\x61\x78\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\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","\x64\x65\x73\x63\x72\x69\x62\x65","\x69\x64","\x6D\x61\x70","\x67\x65\x74\x46\x61\x78\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x72\x6F\x6C\x65","\x70\x65\x6E\x64\x69\x6E\x67","\x6C\x6F\x67","\x50\x45\x4E\x44\x49\x4E\x47","\x64\x61\x79","\x73\x74\x61\x72\x74\x4F\x66","\x6D\x65\x72\x67\x65","\x63\x6F\x75\x6E\x74","\x61\x6C\x6C","\x6E\x65\x77","\x4E\x45\x57","\x6F\x70\x65\x6E","\x4F\x50\x45\x4E","\x63\x6C\x6F\x73\x65\x64","\x43\x4C\x4F\x53\x45\x44","\x69\x6E\x62\x6F\x78","\x65\x72\x72\x6F\x72","\x53\x45\x4C\x45\x43\x54\x20\x60\x46\x61\x78\x52\x6F\x6F\x6D\x60\x2E\x60\x69\x64\x60\x2C\x20\x60\x46\x61\x78\x52\x6F\x6F\x6D\x60\x2E\x60\x66\x72\x6F\x6D\x60\x2C\x20\x60\x46\x61\x78\x52\x6F\x6F\x6D\x60\x2E\x60\x61\x63\x63\x6F\x75\x6E\x74\x60\x2C\x20\x60\x46\x61\x78\x52\x6F\x6F\x6D\x60\x2E\x60\x73\x74\x61\x74\x75\x73\x60\x2C\x20\x60\x46\x61\x78\x52\x6F\x6F\x6D\x60\x2E\x60\x6C\x61\x73\x74\x45\x76\x65\x6E\x74\x60\x2C\x20\x60\x46\x61\x78\x52\x6F\x6F\x6D\x60\x2E\x60\x75\x70\x64\x61\x74\x65\x64\x41\x74\x60\x20\x46\x52\x4F\x4D\x20\x60\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x73\x60\x20\x41\x53\x20\x60\x46\x61\x78\x52\x6F\x6F\x6D\x60\x20\x4C\x45\x46\x54\x20\x4F\x55\x54\x45\x52\x20\x4A\x4F\x49\x4E\x20\x28\x60\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x73\x60\x20\x41\x53\x20\x60\x55\x73\x65\x72\x73\x2E\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x73\x60\x20\x49\x4E\x4E\x45\x52\x20\x4A\x4F\x49\x4E\x20\x60\x75\x73\x65\x72\x73\x60\x20\x41\x53\x20\x60\x55\x73\x65\x72\x73\x60\x20\x4F\x4E\x20\x60\x55\x73\x65\x72\x73\x60\x2E\x60\x69\x64\x60\x20\x3D\x20\x60\x55\x73\x65\x72\x73\x2E\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x73\x60\x2E\x60\x55\x73\x65\x72\x49\x64\x60\x29\x20\x4F\x4E\x20\x60\x46\x61\x78\x52\x6F\x6F\x6D\x60\x2E\x60\x69\x64\x60\x20\x3D\x20\x60\x55\x73\x65\x72\x73\x2E\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x73\x60\x2E\x60\x46\x61\x78\x52\x6F\x6F\x6D\x49\x64\x60\x20\x57\x48\x45\x52\x45\x20\x28\x60\x46\x61\x78\x52\x6F\x6F\x6D\x60\x2E\x60\x64\x65\x6C\x65\x74\x65\x64\x41\x74\x60\x20\x49\x53\x20\x4E\x55\x4C\x4C\x20\x41\x4E\x44\x20\x28\x60\x46\x61\x78\x52\x6F\x6F\x6D\x60\x2E\x60\x73\x74\x61\x74\x75\x73\x60\x20\x3D\x20\x3A\x73\x74\x61\x74\x75\x73\x20\x4F\x52\x20\x60\x55\x73\x65\x72\x73\x60\x2E\x60\x69\x64\x60\x20\x3D\x20\x3A\x69\x64\x29\x29","\x55\x4E\x4D\x41\x4E\x41\x47\x45\x44","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x61\x67\x65\x6E\x74","\x53\x45\x4C\x45\x43\x54\x20\x60\x69\x64\x60\x2C\x20\x60\x66\x72\x6F\x6D\x60\x2C\x20\x60\x61\x63\x63\x6F\x75\x6E\x74\x60\x2C\x20\x60\x73\x74\x61\x74\x75\x73\x60\x2C\x20\x60\x6C\x61\x73\x74\x45\x76\x65\x6E\x74\x60\x20\x2C\x60\x75\x70\x64\x61\x74\x65\x64\x41\x74\x60\x20\x46\x52\x4F\x4D\x20\x60\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x73\x60\x20\x57\x48\x45\x52\x45\x20\x60\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x73\x60\x2E\x60\x64\x65\x6C\x65\x74\x65\x64\x41\x74\x60\x20\x49\x53\x20\x4E\x55\x4C\x4C","\x61\x67\x65\x6E\x74\x49\x6E\x64\x65\x78","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x6F\x70\x65\x6E\x52\x6F\x6F\x6D","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x61\x64\x64\x55\x73\x65\x72","\x75\x70\x64\x61\x74\x65","\x73\x68\x6F\x77","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x63\x72\x65\x61\x74\x65\x4D\x65\x73\x73\x61\x67\x65","\x55\x73\x65\x72\x49\x64","\x46\x61\x78\x52\x6F\x6F\x6D\x49\x64","\x74\x65\x78\x74","\x6A\x6F\x62\x49\x64","\x46\x61\x78\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x61\x73\x73\x69\x67\x6E\x65\x64","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74\x73","\x73\x65\x74\x55\x73\x65\x72\x73","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x75\x70\x64\x61\x74\x65\x50\x61\x74\x63\x68","\x2C","\x73\x70\x6C\x69\x74","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x4D\x65\x73\x73\x61\x67\x65","\x67\x65\x74\x46\x61\x78\x52\x6F\x6F\x6D"];_0x73fa[0];var _=require(_0x73fa[1]);var util=require(_0x73fa[2]);var Util=require(_0x73fa[3]);var moment=require(_0x73fa[4]);var sequelize=require(_0x73fa[6])[_0x73fa[5]];var User=require(_0x73fa[6])[_0x73fa[7]];var Agent=require(_0x73fa[6])[_0x73fa[7]];var Contact=require(_0x73fa[6])[_0x73fa[8]];var FaxRoom=require(_0x73fa[6])[_0x73fa[9]];var FaxMessage=require(_0x73fa[6])[_0x73fa[10]];var FaxAccount=require(_0x73fa[6])[_0x73fa[11]];var FaxApplication=require(_0x73fa[6])[_0x73fa[12]];var FaxQueue=require(_0x73fa[6])[_0x73fa[13]];var FaxAttachment=require(_0x73fa[6])[_0x73fa[14]];exports[_0x73fa[15]]= function(_0x1290xf,_0x1290x10,_0x1290x11){return FaxRoom[_0x73fa[24]](_0x73fa[23])[_0x73fa[22]](Util[_0x73fa[21]](_0x1290xf[_0x73fa[20]]))[_0x73fa[19]](function(_0x1290x13){return _0x1290x10[_0x73fa[18]](200)[_0x73fa[17]](_0x1290x13)})[_0x73fa[16]](function(_0x1290x12){return handleError(_0x1290x10,_0x1290x12)})};exports[_0x73fa[25]]= function(_0x1290xf,_0x1290x10){return FaxRoom[_0x73fa[25]]()[_0x73fa[19]](function(_0x1290x14){return _0x1290x10[_0x73fa[18]](200)[_0x73fa[17]](_0x1290x14)})[_0x73fa[16]](function(_0x1290x12){return handleError(_0x1290x10,_0x1290x12)})};function getFaxQueues(_0x1290x16){return function(){switch(_0x1290x16[_0x73fa[31]]){case _0x73fa[30]:return User[_0x73fa[29]](_0x1290x16[_0x73fa[26]],{attributes:[_0x73fa[26]]})[_0x73fa[19]](Util[_0x73fa[28]]({},{attributes:[_0x73fa[26]]}))[_0x73fa[19]](function(_0x1290x17){return {include:{model:FaxAccount,include:{model:FaxApplication,include:{model:FaxQueue,where:{id:_[_0x73fa[27]](_0x1290x17,_0x73fa[26])}}}}}});default:return {}}}}exports[_0x73fa[32]]= function(_0x1290xf,_0x1290x10){return Promise[_0x73fa[39]]([])[_0x73fa[19]](getFaxQueues(_0x1290xf[_0x73fa[30]]))[_0x73fa[19]](function(_0x1290x19){return FaxRoom[_0x73fa[38]](_[_0x73fa[37]](Util[_0x73fa[21]](_0x1290xf[_0x73fa[20]],{status:_0x73fa[34],updatedAt:{$gte:moment()[_0x73fa[36]](_0x73fa[35])}}),_0x1290x19))})[_0x73fa[19]](function(_0x1290x18){return _0x1290x10[_0x73fa[18]](200)[_0x73fa[17]]({value:_0x1290x18})})[_0x73fa[16]](function(_0x1290x12){console[_0x73fa[33]](_0x1290x12);return handleError(_0x1290x10,_0x1290x12)})};exports[_0x73fa[40]]= function(_0x1290xf,_0x1290x10){return Promise[_0x73fa[39]]([])[_0x73fa[19]](getFaxQueues(_0x1290xf[_0x73fa[30]]))[_0x73fa[19]](function(_0x1290x19){return FaxRoom[_0x73fa[38]](_[_0x73fa[37]](Util[_0x73fa[21]](_0x1290xf[_0x73fa[20]],{status:_0x73fa[41],updatedAt:{$gte:moment()[_0x73fa[36]](_0x73fa[35])}}),_0x1290x19))})[_0x73fa[19]](function(_0x1290x18){return _0x1290x10[_0x73fa[18]](200)[_0x73fa[17]]({value:_0x1290x18})})[_0x73fa[16]](function(_0x1290x12){console[_0x73fa[33]](_0x1290x12);return handleError(_0x1290x10,_0x1290x12)})};exports[_0x73fa[42]]= function(_0x1290xf,_0x1290x10){return Promise[_0x73fa[39]]([])[_0x73fa[19]](getFaxQueues(_0x1290xf[_0x73fa[30]]))[_0x73fa[19]](function(_0x1290x19){return FaxRoom[_0x73fa[38]](_[_0x73fa[37]](Util[_0x73fa[21]](_0x1290xf[_0x73fa[20]],{status:_0x73fa[43],updatedAt:{$gte:moment()[_0x73fa[36]](_0x73fa[35])}}),_0x1290x19))})[_0x73fa[19]](function(_0x1290x18){return _0x1290x10[_0x73fa[18]](200)[_0x73fa[17]]({value:_0x1290x18})})[_0x73fa[16]](function(_0x1290x12){console[_0x73fa[33]](_0x1290x12);return handleError(_0x1290x10,_0x1290x12)})};exports[_0x73fa[44]]= function(_0x1290xf,_0x1290x10){return Promise[_0x73fa[39]]([])[_0x73fa[19]](getFaxQueues(_0x1290xf[_0x73fa[30]]))[_0x73fa[19]](function(_0x1290x19){return FaxRoom[_0x73fa[38]](_[_0x73fa[37]](Util[_0x73fa[21]](_0x1290xf[_0x73fa[20]],{status:_0x73fa[45],updatedAt:{$gte:moment()[_0x73fa[36]](_0x73fa[35])}}),_0x1290x19))})[_0x73fa[19]](function(_0x1290x18){return _0x1290x10[_0x73fa[18]](200)[_0x73fa[17]]({value:_0x1290x18})})[_0x73fa[16]](function(_0x1290x12){console[_0x73fa[33]](_0x1290x12);return handleError(_0x1290x10,_0x1290x12)})};exports[_0x73fa[46]]= function(_0x1290xf,_0x1290x10,_0x1290x11){switch(_0x1290xf[_0x73fa[30]][_0x73fa[31]]){case _0x73fa[52]:return sequelize[_0x73fa[20]](_0x73fa[48],{replacements:{status:_0x73fa[49],id:_0x1290xf[_0x73fa[30]][_0x73fa[26]]},type:sequelize[_0x73fa[51]][_0x73fa[50]]})[_0x73fa[19]](function(_0x1290x13){return _0x1290x10[_0x73fa[18]](200)[_0x73fa[17]](_0x1290x13)})[_0x73fa[16]](function(_0x1290x12){console[_0x73fa[47]](_0x1290x12);return handleError(_0x1290x10,_0x1290x12)});default:return sequelize[_0x73fa[20]](_0x73fa[53],{replacements:{status:_0x73fa[49],id:_0x1290xf[_0x73fa[30]][_0x73fa[26]]},type:sequelize[_0x73fa[51]][_0x73fa[50]]})[_0x73fa[19]](function(_0x1290x13){return _0x1290x10[_0x73fa[18]](200)[_0x73fa[17]](_0x1290x13)})[_0x73fa[16]](function(_0x1290x12){return handleError(_0x1290x10,_0x1290x12)})}};exports[_0x73fa[54]]= function(_0x1290xf,_0x1290x10,_0x1290x11){return FaxRoom[_0x73fa[56]]({where:{UserId:_0x1290xf[_0x73fa[55]][_0x73fa[26]]},include:[{all:true}]})[_0x73fa[19]](function(_0x1290x1a){return _0x1290x10[_0x73fa[18]](200)[_0x73fa[17]](_0x1290x1a)})[_0x73fa[16]](function(_0x1290x12){return handleError(_0x1290x10,_0x1290x12)})};exports[_0x73fa[57]]= function(_0x1290xf,_0x1290x10,_0x1290x11){var _0x1290x1b;if(_0x1290xf[_0x73fa[30]][_0x73fa[31]]=== _0x73fa[52]){return FaxRoom[_0x73fa[29]](_0x1290xf[_0x73fa[55]][_0x73fa[26]])[_0x73fa[19]](function(_0x1290x1c){_0x1290x1b= _0x1290x1c;if(!_0x1290x1b){return _0x1290x10[_0x73fa[58]](404)};return _0x1290x1b[_0x73fa[60]]({status:_0x73fa[43]},{userId:_0x1290xf[_0x73fa[30]][_0x73fa[26]]})})[_0x73fa[19]](function(){return _0x1290x1b[_0x73fa[59]](_0x1290xf[_0x73fa[30]][_0x73fa[26]])})[_0x73fa[19]](function(){return _0x1290x10[_0x73fa[58]](200)})[_0x73fa[16]](function(_0x1290x12){return handleError(_0x1290x10,_0x1290x12)})}};exports[_0x73fa[61]]= function(_0x1290xf,_0x1290x10,_0x1290x11){return FaxRoom[_0x73fa[24]](_0x73fa[23])[_0x73fa[29]](_0x1290xf[_0x73fa[55]][_0x73fa[26]])[_0x73fa[19]](function(_0x1290x1c){if(!_0x1290x1c){return _0x1290x10[_0x73fa[58]](404)};return _0x1290x10[_0x73fa[17]](_0x1290x1c)})[_0x73fa[16]](function(_0x1290x12){console[_0x73fa[47]](_0x1290x12);return handleError(_0x1290x10,_0x1290x12)})};exports[_0x73fa[62]]= function(_0x1290xf,_0x1290x10,_0x1290x11){return FaxRoom[_0x73fa[29]](_0x1290xf[_0x73fa[55]][_0x73fa[26]])[_0x73fa[19]](function(_0x1290x1c){if(!_0x1290x1c){return _0x1290x10[_0x73fa[58]](404)};return _0x1290x1c[_0x73fa[67]]({attributes:[_0x73fa[26],_0x73fa[63],_0x73fa[64],_0x73fa[65],_0x73fa[31],_0x73fa[66]]})})[_0x73fa[19]](function(_0x1290x1d){return _0x1290x10[_0x73fa[17]](_0x1290x1d)})[_0x73fa[16]](function(_0x1290x12){return handleError(_0x1290x10,_0x1290x12)})};exports[_0x73fa[68]]= function(_0x1290xf,_0x1290x10,_0x1290x11){return FaxRoom[_0x73fa[68]](_0x1290xf[_0x73fa[69]])[_0x73fa[19]](function(_0x1290x1c){return _0x1290x10[_0x73fa[18]](201)[_0x73fa[17]](_0x1290x1c)})[_0x73fa[16]](function(_0x1290x12){return handleError(_0x1290x10,_0x1290x12)})};exports[_0x73fa[70]]= function(_0x1290xf,_0x1290x10,_0x1290x11){_0x1290xf[_0x73fa[69]][_0x73fa[71]]= _0x1290xf[_0x73fa[30]][_0x73fa[26]];_0x1290xf[_0x73fa[69]][_0x73fa[72]]= _0x1290xf[_0x73fa[55]][_0x73fa[26]];_0x1290xf[_0x73fa[69]][_0x73fa[73]]= _0x1290xf[_0x73fa[69]][_0x73fa[73]];return FaxMessage[_0x73fa[68]](_0x1290xf[_0x73fa[69]],{include:[{model:FaxAttachment}],user:_0x1290xf[_0x73fa[30]]})[_0x73fa[19]](function(_0x1290x1e){return _0x1290x10[_0x73fa[18]](201)[_0x73fa[17]](_0x1290x1e)})[_0x73fa[16]](function(_0x1290x12){return handleError(_0x1290x10,_0x1290x12)})};exports[_0x73fa[60]]= function(_0x1290xf,_0x1290x10,_0x1290x11){return FaxRoom[_0x73fa[29]](_0x1290xf[_0x73fa[55]][_0x73fa[26]])[_0x73fa[19]](function(_0x1290x1c){if(!_0x1290x1c){return _0x1290x10[_0x73fa[58]](404)};if(_0x1290x1c[_0x73fa[74]]){throw new Error(_0x73fa[75])};var _0x1290x1f=_[_0x73fa[37]](_0x1290x1c,_0x1290xf[_0x73fa[69]]);return _0x1290x1f[_0x73fa[76]]()})[_0x73fa[19]](function(_0x1290x1c){return _0x1290x10[_0x73fa[18]](200)[_0x73fa[17]](_0x1290x1c)})[_0x73fa[16]](function(_0x1290x12){return handleError(_0x1290x10,_0x1290x12)})};exports[_0x73fa[77]]= function(_0x1290xf,_0x1290x10,_0x1290x11){return FaxRoom[_0x73fa[29]](_0x1290xf[_0x73fa[55]][_0x73fa[26]])[_0x73fa[19]](function(_0x1290x1c){if(!_0x1290x1c){return _0x1290x10[_0x73fa[58]](404)};return _0x1290x1c[_0x73fa[79]](_0x1290xf[_0x73fa[69]][_0x73fa[78]],{individualHooks:true})})[_0x73fa[19]](function(){return _0x1290x10[_0x73fa[58]](200)})[_0x73fa[16]](function(_0x1290x12){return handleError(_0x1290x10,_0x1290x12)})};exports[_0x73fa[80]]= function(_0x1290xf,_0x1290x10,_0x1290x11){return FaxRoom[_0x73fa[29]](_0x1290xf[_0x73fa[55]][_0x73fa[26]])[_0x73fa[19]](function(_0x1290x1c){if(!_0x1290x1c){return _0x1290x10[_0x73fa[58]](404)};return _0x1290x1c[_0x73fa[80]]()})[_0x73fa[19]](function(){return _0x1290x10[_0x73fa[58]](204)})[_0x73fa[16]](function(_0x1290x12){return handleError(_0x1290x10,_0x1290x12)})};exports[_0x73fa[81]]= function(_0x1290xf,_0x1290x10){return FaxRoom[_0x73fa[80]]({where:{id:_0x1290xf[_0x73fa[20]][_0x73fa[82]]},individualHooks:true})[_0x73fa[19]](function(){return _0x1290x10[_0x73fa[58]](200)})[_0x73fa[16]](function(_0x1290x12){return handleError(_0x1290x10,_0x1290x12)})};function handleError(_0x1290x10,_0x1290x12){return _0x1290x10[_0x73fa[18]](500)[_0x73fa[17]](_0x1290x12)}exports[_0x73fa[83]]= function(_0x1290xf,_0x1290x10,_0x1290x11){var _0x1290x21={where:{id:_0x1290xf[_0x73fa[55]][_0x73fa[26]][_0x73fa[85]](_0x73fa[84])},user:_0x1290xf[_0x73fa[30]],individualHooks:true};return FaxRoom[_0x73fa[60]](_0x1290xf[_0x73fa[69]],_0x1290x21)[_0x73fa[19]](function(_0x1290x22){if(!_0x1290x22){return _0x1290x10[_0x73fa[58]](404)};return _0x1290x22})[_0x73fa[19]](function(_0x1290x22){return _0x1290x10[_0x73fa[58]](200)})[_0x73fa[16]](function(_0x1290x12){return handleError(_0x1290x10,_0x1290x12)})};exports[_0x73fa[86]]= function(_0x1290xf,_0x1290x10,_0x1290x11){return FaxMessage[_0x73fa[29]](_0x1290xf[_0x73fa[55]][_0x73fa[26]])[_0x73fa[19]](function(_0x1290x1e){return _0x1290x1e[_0x73fa[87]]({include:[{model:FaxAccount},{model:FaxMessage,include:[{model:FaxAttachment},{model:User,attributes:[_0x73fa[26],_0x73fa[63],_0x73fa[64],_0x73fa[65]]}]},{model:User,attributes:[_0x73fa[26],_0x73fa[63],_0x73fa[64],_0x73fa[65]]}]})})[_0x73fa[19]](function(_0x1290x1c){return _0x1290x10[_0x73fa[17]](_0x1290x1c)})[_0x73fa[16]](function(_0x1290x12){return handleError(_0x1290x10,_0x1290x12)})} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); + +var Util = require('../../config/util'); +var moment = require('moment'); + +var sequelize = require('../../models').sequelize; +var User = require('../../models').User; +var Agent = require('../../models').User; +var Contact = require('../../models').Contact; +var FaxRoom = require('../../models').FaxRoom; +var FaxMessage = require('../../models').FaxMessage; +var FaxAccount = require('../../models').FaxAccount; +var FaxApplication = require('../../models').FaxApplication; +var FaxQueue = require('../../models').FaxQueue; +var FaxAttachment = require('../../models').FaxAttachment; + +// Get list of faxRooms +exports.index = function(req, res, next) { + return FaxRoom + .scope('default') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get list of fields +exports.describe = function(req, res) { + return FaxRoom + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function getFaxQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(Util.getFaxQueuesIdByUser({}, { + attributes: ['id'] + })) + .then(function(userQueues) { + return { + include: { + model: FaxAccount, + include: { + model: FaxApplication, + include: { + model: FaxQueue, + where: { + id: _.map(userQueues, 'id') + } + } + } + } + }; + }); + default: + return {}; + } + } +} + +exports.pending = function(req, res) { + return Promise + .all([]) + .then(getFaxQueues(req.user)) + .then(function(condition) { + return FaxRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'PENDING', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.new = function(req, res) { + return Promise + .all([]) + .then(getFaxQueues(req.user)) + .then(function(condition) { + return FaxRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'NEW', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.open = function(req, res) { + return Promise + .all([]) + .then(getFaxQueues(req.user)) + .then(function(condition) { + return FaxRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'OPEN', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.closed = function(req, res) { + return Promise + .all([]) + .then(getFaxQueues(req.user)) + .then(function(condition) { + return FaxRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'CLOSED', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.inbox = function(req, res, next) { + switch (req.user.role) { + case 'agent': + + return sequelize.query( + 'SELECT `FaxRoom`.`id`, `FaxRoom`.`from`, `FaxRoom`.`account`, `FaxRoom`.`status`, `FaxRoom`.`lastEvent`, `FaxRoom`.`updatedAt` FROM `fax_rooms` AS `FaxRoom` LEFT OUTER JOIN (`user_has_fax_rooms` AS `Users.user_has_fax_rooms` INNER JOIN `users` AS `Users` ON `Users`.`id` = `Users.user_has_fax_rooms`.`UserId`) ON `FaxRoom`.`id` = `Users.user_has_fax_rooms`.`FaxRoomId` WHERE (`FaxRoom`.`deletedAt` IS NULL AND (`FaxRoom`.`status` = :status OR `Users`.`id` = :id))', { + replacements: { + status: 'UNMANAGED', + id: req.user.id + }, + type: sequelize.QueryTypes.SELECT + }) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); + + default: + + return sequelize.query( + 'SELECT `id`, `from`, `account`, `status`, `lastEvent` ,`updatedAt` FROM `fax_rooms` WHERE `fax_rooms`.`deletedAt` IS NULL', { + replacements: { + status: 'UNMANAGED', + id: req.user.id + }, + type: sequelize.QueryTypes.SELECT + }) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + } +}; + +// Get list of agent faxRooms +exports.agentIndex = function(req, res, next) { + return FaxRoom + .findAll({ + where: { + UserId: req.params.id + }, + include: [{ + all: true + }] + }) + .then(function(faxRooms) { + return res.status(200).send(faxRooms); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get list of agent faxRooms +exports.openRoom = function(req, res, next) { + var _faxRoom; + + if (req.user.role === 'agent') { + return FaxRoom + .findById(req.params.id) + .then(function(faxRoom) { + _faxRoom = faxRoom; + if (!_faxRoom) { + return res.sendStatus(404); + } + + return _faxRoom + .update({ + status: 'OPEN' + }, { + userId: req.user.id + }); + }) + .then(function() { + return _faxRoom + .addUser(req.user.id); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); + } +}; + +// Get a single faxRoom +exports.show = function(req, res, next) { + return FaxRoom + .scope('default') + .findById(req.params.id) + .then(function(faxRoom) { + if (!faxRoom) { + return res.sendStatus(404); + } + return res.send(faxRoom); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); +}; + +// Get a single faxRoom +exports.showAgents = function(req, res, next) { + return FaxRoom + .findById(req.params.id) + .then(function(faxRoom) { + if (!faxRoom) { + return res.sendStatus(404); + } + + return faxRoom + .getUsers({ + attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal'] + }); + }) + .then(function(users) { + return res.send(users); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new faxRoom in the DB. +exports.create = function(req, res, next) { + return FaxRoom + .create(req.body) + .then(function(faxRoom) { + return res.status(201).send(faxRoom); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new mailMessage in the DB. +exports.createMessage = function(req, res, next) { + req.body.UserId = req.user.id; + req.body.FaxRoomId = req.params.id; + req.body.text = req.body.text; + + return FaxMessage + .create(req.body, { + include: [{ + model: FaxAttachment + }], + user: req.user + }).then(function(faxMessage) { + return res.status(201).send(faxMessage); + }).catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing faxRoom in the DB. +exports.update = function(req, res, next) { + return FaxRoom + .findById(req.params.id) + .then(function(faxRoom) { + if (!faxRoom) { + return res.sendStatus(404); + } + // CHECK IF FAX IS ALREADY ASSIGNED + if (faxRoom.jobId) { + throw new Error('Fax already assigned'); + } + var updated = _.merge(faxRoom, req.body); + + return updated + .save(); + }) + .then(function(faxRoom) { + return res.status(200).send(faxRoom); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single faxRoom +exports.updateAgents = function(req, res, next) { + return FaxRoom + .findById(req.params.id) + .then(function(faxRoom) { + if (!faxRoom) { + return res.sendStatus(404); + } + + return faxRoom + .setUsers(req.body.agents, { + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a faxRoom from the DB. +exports.destroy = function(req, res, next) { + return FaxRoom + .findById(req.params.id) + .then(function(faxRoom) { + if (!faxRoom) { + return res.sendStatus(404); + } + return faxRoom.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a agent from the DB. +exports.bulkDestroy = function(req, res) { + return FaxRoom + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} + +exports.updatePatch = function(req, res, next) { + var _options = { + where: { + id: req.params.id.split(',') + }, + user: req.user, + individualHooks: true + }; + + return FaxRoom + .update(req.body, _options) + .then(function(mailRooms) { + if (!mailRooms) { + return res.sendStatus(404); + } + return mailRooms + }) + .then(function(mailRooms) { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getRoomByMessage = function(req, res, next) { + return FaxMessage + .findById(req.params.id) + .then(function(faxMessage) { + return faxMessage + .getFaxRoom({ + include: [{ + model: FaxAccount + }, { + model: FaxMessage, + include: [{ + model: FaxAttachment + }, { + model: User, + attributes: ['id', 'name', 'fullname', 'email'] + }] + }, { + model: User, + attributes: ['id', 'name', 'fullname', 'email'] + }] + }); + }) + .then(function(faxRoom) { + return res.send(faxRoom); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; diff --git a/server/api/fax_room/fax_room.events.js b/server/api/fax_room/fax_room.events.js index c851f85..0ed0d8a 100644 --- a/server/api/fax_room/fax_room.events.js +++ b/server/api/fax_room/fax_room.events.js @@ -1 +1,36 @@ -var _0x5988=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x46\x61\x78\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x5988[0];const EventEmitter=require(_0x5988[1]);const FaxRoom=require(_0x5988[3])[_0x5988[2]];var FaxRoomEvents= new EventEmitter();FaxRoomEvents[_0x5988[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x5988[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x5988[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x5988[6]};for(var e in events){var event=events[e];FaxRoom[_0x5988[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xdaaax8,_0xdaaax9,_0xdaaaxa){FaxRoomEvents[_0x5988[10]](event+ _0x5988[8]+ _0xdaaax8[_0x5988[9]],_0xdaaax8);FaxRoomEvents[_0x5988[10]](event,_0xdaaax8);_0xdaaaxa(null)}}module[_0x5988[11]]= FaxRoomEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const FaxRoom = require('../../models').FaxRoom; + +var FaxRoomEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +FaxRoomEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + FaxRoom.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + FaxRoomEvents.emit(event + ':' + doc._id, doc); + FaxRoomEvents.emit(event, doc); + done(null); + } +} + +module.exports = FaxRoomEvents; diff --git a/server/api/fax_room/fax_room.socket.js b/server/api/fax_room/fax_room.socket.js index bd55100..80b8f06 100644 --- a/server/api/fax_room/fax_room.socket.js +++ b/server/api/fax_room/fax_room.socket.js @@ -1 +1,69 @@ -var _0x19b2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x19b2[0];const FaxRoomEvents=require(_0x19b2[1]);var events=[_0x19b2[2],_0x19b2[3]];exports[_0x19b2[4]]= function(_0x6c6ax3){for(var _0x6c6ax4=0,_0x6c6ax5=events[_0x19b2[5]];_0x6c6ax4< _0x6c6ax5;_0x6c6ax4++){var _0x6c6ax6=events[_0x6c6ax4];var _0x6c6ax7=createListener(_0x19b2[6]+ _0x6c6ax6,_0x6c6ax3);FaxRoomEvents[_0x19b2[7]](_0x6c6ax6,_0x6c6ax7);_0x6c6ax3[_0x19b2[7]](_0x19b2[8],removeListener(_0x6c6ax6,_0x6c6ax7))}};function createListener(_0x6c6ax6,_0x6c6ax3){return function(_0x6c6ax9,_0x6c6axa){_0x6c6ax3[_0x19b2[9]](_0x6c6ax6,_0x6c6ax9)}}function removeListener(_0x6c6ax6,_0x6c6ax7){return function(){FaxRoomEvents[_0x19b2[10]](_0x6c6ax6,_0x6c6ax7)}} \ No newline at end of file +// /** +// * Broadcast updates to client when the model changes +// */ +// +// 'use strict'; +// +// var FaxRoom = require('../../models').FaxRoom; +// +// exports.register = function(socket) { +// FaxRoom.afterCreate(function(doc, options) { +// if (socket.role !== 'agent') { +// // ADMIN OR USER +// onSave(socket, doc.dataValues); +// } else { +// // AGENT +// switch (doc.status) { +// case 'OPEN': +// if (socket.userId == options.userId) +// onSave(socket, doc.dataValues); +// break; +// +// default: +// } +// } +// }); +// FaxRoom.afterUpdate(function(doc, options) { +// onSave(socket, doc.dataValues); +// }); +// FaxRoom.afterDestroy(function(doc) { +// onRemove(socket, doc); +// }); +// } +// +// function onSave(socket, doc, cb) { +// socket.emit('fax_room:save', doc); +// } +// +// function onRemove(socket, doc, cb) { +// socket.emit('fax_room:remove', doc); +// } + +'use strict'; + +const FaxRoomEvents = require('./fax_room.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('fax_room:' + event, socket); + + FaxRoomEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc, options) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + FaxRoomEvents.removeListener(event, listener); + }; +} diff --git a/server/api/fax_room/index.js b/server/api/fax_room/index.js index d1414c5..e2652dd 100644 --- a/server/api/fax_room/index.js +++ b/server/api/fax_room/index.js @@ -1 +1,31 @@ -var _0x5c60=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x46\x61\x78","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x69\x6E\x62\x6F\x78","\x61\x67\x65\x6E\x74","\x69\x6E\x62\x6F\x78","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x70\x65\x6E\x64\x69\x6E\x67","\x70\x65\x6E\x64\x69\x6E\x67","\x2F\x6E\x65\x77","\x6E\x65\x77","\x2F\x6F\x70\x65\x6E","\x6F\x70\x65\x6E","\x2F\x63\x6C\x6F\x73\x65\x64","\x63\x6C\x6F\x73\x65\x64","\x2F\x61\x67\x65\x6E\x74\x2F\x3A\x69\x64","\x61\x67\x65\x6E\x74\x49\x6E\x64\x65\x78","\x2F\x6D\x65\x73\x73\x61\x67\x65\x73\x2F\x3A\x69\x64","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x4D\x65\x73\x73\x61\x67\x65","\x2F\x3A\x69\x64","\x75\x73\x65\x72","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x3A\x69\x64\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x63\x72\x65\x61\x74\x65\x4D\x65\x73\x73\x61\x67\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x75\x70\x64\x61\x74\x65\x50\x61\x74\x63\x68","\x70\x61\x74\x63\x68","\x75\x70\x64\x61\x74\x65\x41\x67\x65\x6E\x74\x73","\x2F\x3A\x69\x64\x2F\x6F\x70\x65\x6E","\x6F\x70\x65\x6E\x52\x6F\x6F\x6D","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x5c60[0];var express=require(_0x5c60[1]);var controller=require(_0x5c60[2]);var auth=require(_0x5c60[3]);var license=require(_0x5c60[4]);var router=express.Router();router[_0x5c60[12]](_0x5c60[5],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[9]]),controller[_0x5c60[11]]);router[_0x5c60[12]](_0x5c60[13],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[9],_0x5c60[14]]),controller[_0x5c60[15]]);router[_0x5c60[12]](_0x5c60[16],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[9]]),controller[_0x5c60[17]]);router[_0x5c60[12]](_0x5c60[18],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10,17],[_0x5c60[9]]),controller[_0x5c60[19]]);router[_0x5c60[12]](_0x5c60[20],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10,17],[_0x5c60[9]]),controller[_0x5c60[21]]);router[_0x5c60[12]](_0x5c60[22],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10,17],[_0x5c60[9]]),controller[_0x5c60[23]]);router[_0x5c60[12]](_0x5c60[24],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10,17],[_0x5c60[9]]),controller[_0x5c60[25]]);router[_0x5c60[12]](_0x5c60[26],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[9]]),controller[_0x5c60[27]]);router[_0x5c60[12]](_0x5c60[28],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[9],_0x5c60[14]]),controller[_0x5c60[29]]);router[_0x5c60[12]](_0x5c60[30],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[9],_0x5c60[31],_0x5c60[14]]),controller[_0x5c60[32]]);router[_0x5c60[12]](_0x5c60[33],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[9],_0x5c60[14]]),controller[_0x5c60[34]]);router[_0x5c60[36]](_0x5c60[5],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[9]]),controller[_0x5c60[35]]);router[_0x5c60[36]](_0x5c60[37],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[9],_0x5c60[31],_0x5c60[14]]),controller[_0x5c60[38]]);router[_0x5c60[40]](_0x5c60[30],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[9],_0x5c60[14]]),controller[_0x5c60[39]]);router[_0x5c60[42]](_0x5c60[30],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[9],_0x5c60[14]]),controller[_0x5c60[41]]);router[_0x5c60[40]](_0x5c60[33],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[9],_0x5c60[14]]),controller[_0x5c60[43]]);router[_0x5c60[40]](_0x5c60[44],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[14]]),controller[_0x5c60[45]]);router[_0x5c60[47]](_0x5c60[5],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[9]]),controller[_0x5c60[46]]);router[_0x5c60[47]](_0x5c60[30],license[_0x5c60[6]](),license[_0x5c60[7]](),auth[_0x5c60[8]](),auth[_0x5c60[10]]([10],[_0x5c60[9]]),controller[_0x5c60[48]]);module[_0x5c60[49]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./fax_room.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.index); +router.get('/inbox', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.inbox); +router.get('/describe', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.describe); +router.get('/pending', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10, 17], ['admin']), controller.pending); +router.get('/new', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10, 17], ['admin']), controller.new); +router.get('/open', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10, 17], ['admin']), controller.open); +router.get('/closed', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10, 17], ['admin']), controller.closed); +router.get('/agent/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.agentIndex); +router.get('/messages/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.getRoomByMessage); +router.get('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'user', 'agent']), controller.show); +router.get('/:id/agents', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.showAgents); +router.post('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.create); +router.post('/:id/messages', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'user', 'agent']), controller.createMessage); +router.put('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.update); +router.patch('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.updatePatch); +router.put('/:id/agents', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin', 'agent']), controller.updateAgents); +router.put('/:id/open', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['agent']), controller.openRoom); +router.delete('/', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.bulkDestroy); +router.delete('/:id', license.isValidDate(), license.hasFax(), auth.isAuthenticated(), auth.hasModule([10], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/freshdesk_account/freshdesk_account.controller.js b/server/api/freshdesk_account/freshdesk_account.controller.js index 8f83543..ae9ab8a 100644 --- a/server/api/freshdesk_account/freshdesk_account.controller.js +++ b/server/api/freshdesk_account/freshdesk_account.controller.js @@ -1 +1,239 @@ -var _0x7281=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x66\x72\x65\x73\x68\x64\x65\x73\x6B","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x6E\x61\x6D\x65","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x72\x65\x6D\x6F\x74\x65\x55\x72\x69","\x70\x65\x72\x5F\x70\x61\x67\x65","\x71\x75\x65\x72\x79","\x70\x61\x67\x65","\x6F\x72\x64\x65\x72","\x25\x73\x20\x25\x73","\x73\x6F\x72\x74\x5F\x62\x79","\x73\x6F\x72\x74\x5F\x6F\x72\x64\x65\x72","\x41\x53\x43","\x66\x6F\x72\x6D\x61\x74","\x24\x6F\x72","\x77\x68\x65\x72\x65","\x25","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x24","\x24\x6C\x69\x6B\x65","\x66\x6F\x72\x49\x6E","\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x62\x6C\x65\x77\x20\x75\x70\x21","\x63\x61\x74\x63\x68","\x63\x6F\x75\x6E\x74","\x63\x65\x69\x6C","\x6F\x66\x66\x73\x65\x74","\x25\x73\x3A\x2F\x2F\x25\x73\x25\x73\x3F\x70\x61\x67\x65\x3D\x25\x64","\x70\x72\x6F\x74\x6F\x63\x6F\x6C","\x68\x6F\x73\x74","\x68\x65\x61\x64\x65\x72\x73","\x62\x61\x73\x65\x55\x72\x6C","\x72\x6F\x77\x73","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x61\x70\x69\x4B\x65\x79","\x70\x61\x72\x73\x65","\x72\x65\x71\x75\x69\x72\x65\x5F\x6C\x6F\x67\x69\x6E","\x6C\x69\x73\x74\x54\x69\x63\x6B\x65\x74\x73","\x61\x63\x63\x6F\x75\x6E\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x2F\x74\x69\x63\x6B\x65\x74\x5F\x66\x69\x65\x6C\x64\x73\x2E\x6A\x73\x6F\x6E","\x67\x65\x74"];_0x7281[0];var _=require(_0x7281[1]);var util=require(_0x7281[2]);var _fd=require(_0x7281[3]);var FreshdeskAccount=require(_0x7281[5])[_0x7281[4]];function handleError(_0x25d7x6,_0x25d7x7){_0x25d7x7= _0x25d7x7|| 500;return function(_0x25d7x8){_0x25d7x6[_0x7281[7]](_0x25d7x7)[_0x7281[6]](_0x25d7x8)}}function responseWithResult(_0x25d7x6,_0x25d7x7){_0x25d7x7= _0x25d7x7|| 200;return function(_0x25d7xa){if(_0x25d7xa){_0x25d7x6[_0x7281[7]](_0x25d7x7)[_0x7281[8]](_0x25d7xa)}}}function handleEntityNotFound(_0x25d7x6){return function(_0x25d7xa){if(!_0x25d7xa){_0x25d7x6[_0x7281[7]](404)[_0x7281[9]]();return null};return _0x25d7xa}}function saveUpdates(_0x25d7xd){return function(_0x25d7xa){return _0x25d7xa[_0x7281[11]](_0x25d7xd)[_0x7281[10]](function(_0x25d7xe){return _0x25d7xe})}}function removeEntity(_0x25d7x6){return function(_0x25d7xa){if(_0x25d7xa){return _0x25d7xa[_0x7281[12]]()[_0x7281[10]](function(){_0x25d7x6[_0x7281[7]](204)[_0x7281[9]]()})}}}exports[_0x7281[13]]= function(_0x25d7x10,_0x25d7x6){var _0x25d7x11=[_0x7281[14],_0x7281[15],_0x7281[16],_0x7281[17]];var _0x25d7x12=_0x25d7x10[_0x7281[19]][_0x7281[18]]?parseInt(_0x25d7x10[_0x7281[19]][_0x7281[18]],10):100;var _0x25d7x13=_0x25d7x10[_0x7281[19]][_0x7281[20]]?parseInt(_0x25d7x10[_0x7281[19]][_0x7281[20]],10):0;var _0x25d7x14={where:{},limit:_0x25d7x12,offset:_0x25d7x13* _0x25d7x12};_[_0x7281[34]](_0x25d7x10[_0x7281[19]],function(_0x25d7x15,_0x25d7x16){switch(_0x25d7x16){case _0x7281[18]:;case _0x7281[20]:break;case _0x7281[23]:_0x25d7x14[_0x7281[21]]= util[_0x7281[26]](_0x7281[22],_0x25d7x10[_0x7281[19]][_0x7281[23]],_0x25d7x10[_0x7281[19]][_0x7281[24]]|| _0x7281[25])|| null;break;case _0x7281[24]:break;case _0x7281[32]:_0x25d7x14[_0x7281[28]][_0x7281[27]]= [];_0x25d7x11[_0x7281[31]](function(_0x25d7x17){var _0x25d7x18={};_0x25d7x18[_0x25d7x17]= {$like:_0x7281[29]+ _0x25d7x15+ _0x7281[29]};_0x25d7x14[_0x7281[28]][_0x7281[27]][_0x7281[30]](_0x25d7x18)});break;default:_0x25d7x14[_0x7281[28]][_0x25d7x16]= {$like:{}};_0x25d7x14[_0x7281[28]][_0x25d7x16][_0x7281[33]]= _0x7281[29]+ _0x25d7x15+ _0x7281[29]}});FreshdeskAccount[_0x7281[46]](_0x25d7x14)[_0x7281[10]](function(_0x25d7x19){var _0x25d7x1a=Math[_0x7281[38]](_0x25d7x19[_0x7281[37]]/ _0x25d7x12);var _0x25d7x1b=_0x25d7x1a> (_0x25d7x14[_0x7281[39]]+ 1)?util[_0x7281[26]](_0x7281[40],_0x25d7x10[_0x7281[41]],_0x25d7x10[_0x7281[43]][_0x7281[42]],_0x25d7x10[_0x7281[44]],_0x25d7x13+ 1):null;var _0x25d7x1c=_0x25d7x13> 0?util[_0x7281[26]](_0x7281[40],_0x25d7x10[_0x7281[41]],_0x25d7x10[_0x7281[43]][_0x7281[42]],_0x25d7x10[_0x7281[44]],_0x25d7x13- 1):null;return _0x25d7x6[_0x7281[7]](200)[_0x7281[6]]({count:_0x25d7x19[_0x7281[37]],rows:_0x25d7x19[_0x7281[45]],next_page:_0x25d7x1b,previous_page:_0x25d7x1c,total_pages:_0x25d7x1a})})[_0x7281[36]](function(_0x25d7x8){return _0x25d7x6[_0x7281[7]](500)[_0x7281[6]]({error:_0x7281[35]})})};exports[_0x7281[47]]= function(_0x25d7x10,_0x25d7x6){FreshdeskAccount[_0x7281[50]](_0x25d7x10[_0x7281[49]][_0x7281[48]])[_0x7281[10]](handleEntityNotFound(_0x25d7x6))[_0x7281[10]](responseWithResult(_0x25d7x6))[_0x7281[36]](handleError(_0x25d7x6))};exports[_0x7281[51]]= function(_0x25d7x10,_0x25d7x6){FreshdeskAccount[_0x7281[51]](_0x25d7x10[_0x7281[52]])[_0x7281[10]](responseWithResult(_0x25d7x6,201))[_0x7281[36]](handleError(_0x25d7x6))};exports[_0x7281[53]]= function(_0x25d7x10,_0x25d7x6){if(_0x25d7x10[_0x7281[52]][_0x7281[48]]){delete _0x25d7x10[_0x7281[52]][_0x7281[48]]};FreshdeskAccount[_0x7281[50]](_0x25d7x10[_0x7281[49]][_0x7281[48]])[_0x7281[10]](handleEntityNotFound(_0x25d7x6))[_0x7281[10]](saveUpdates(_0x25d7x10[_0x7281[52]]))[_0x7281[10]](responseWithResult(_0x25d7x6))[_0x7281[36]](handleError(_0x25d7x6))};exports[_0x7281[12]]= function(_0x25d7x10,_0x25d7x6){FreshdeskAccount[_0x7281[50]](_0x25d7x10[_0x7281[49]][_0x7281[48]])[_0x7281[10]](handleEntityNotFound(_0x25d7x6))[_0x7281[10]](removeEntity(_0x25d7x6))[_0x7281[36]](handleError(_0x25d7x6))};exports[_0x7281[54]]= function(_0x25d7x10,_0x25d7x6){FreshdeskAccount[_0x7281[12]]({where:{id:_0x25d7x10[_0x7281[19]][_0x7281[48]]},individualHooks:true})[_0x7281[10]](function(){return _0x25d7x6[_0x7281[55]](204)})[_0x7281[36]](function(_0x25d7x8){return handleError(_0x25d7x6,_0x25d7x8)})};exports[_0x7281[56]]= function(_0x25d7x10,_0x25d7x6){FreshdeskAccount[_0x7281[50]](_0x25d7x10[_0x7281[49]][_0x7281[48]])[_0x7281[10]](handleEntityNotFound(_0x25d7x6))[_0x7281[10]](function(_0x25d7x1d){var _0x25d7x1e= new _fd(_0x25d7x1d[_0x7281[17]],_0x25d7x1d[_0x7281[57]]);_0x25d7x1e[_0x7281[60]](function(_0x25d7x8,_0x25d7x1f,_0x25d7x20){if(_0x25d7x8){return _0x25d7x6[_0x7281[55]](400)};_0x25d7x20= JSON[_0x7281[58]](_0x25d7x20);if(_0x25d7x20[_0x7281[59]]){return _0x25d7x6[_0x7281[55]](400)};return _0x25d7x6[_0x7281[55]](200)})})[_0x7281[36]](handleError(_0x25d7x6))};exports[_0x7281[61]]= function(_0x25d7x10,_0x25d7x6){var _0x25d7x21={};_0x25d7x21[_0x25d7x10[_0x7281[49]][_0x7281[62]]]= _0x25d7x10[_0x7281[52]][_0x7281[63]];FreshdeskAccount[_0x7281[46]]({where:_0x25d7x21})[_0x7281[10]](function(_0x25d7x19){if(_0x25d7x19[_0x7281[37]]){return _0x25d7x6[_0x7281[7]](200)[_0x7281[6]]({isValid:false,value:_0x25d7x10[_0x7281[52]][_0x7281[63]]})};return _0x25d7x6[_0x7281[7]](200)[_0x7281[6]]({isValid:true,value:_0x25d7x10[_0x7281[52]][_0x7281[63]]})})[_0x7281[36]](function(_0x25d7x8){return handleError(_0x25d7x6,_0x25d7x8)})};exports[_0x7281[64]]= function(_0x25d7x10,_0x25d7x6,_0x25d7x22){FreshdeskAccount[_0x7281[50]](_0x25d7x10[_0x7281[49]][_0x7281[48]])[_0x7281[10]](handleEntityNotFound(_0x25d7x6))[_0x7281[10]](function(_0x25d7x1d){var _0x25d7x23= new _fd(_0x25d7x1d[_0x7281[17]],_0x25d7x1d[_0x7281[57]]);_0x25d7x23[_0x7281[66]](_0x7281[65],function(_0x25d7x8,_0x25d7x1f,_0x25d7x20){if(_0x25d7x8){return _0x25d7x22(_0x25d7x8)};_0x25d7x20= JSON[_0x7281[58]](_0x25d7x20);return _0x25d7x6[_0x7281[7]](200)[_0x7281[6]](_0x25d7x20)})})[_0x7281[36]](handleError(_0x25d7x6))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/freshdesk/accounts -> index + * POST /api/freshdesk/accounts -> create + * GET /api/freshdesk/accounts/:id -> show + * PUT /api/freshdesk/accounts/:id -> update + * DELETE /api/freshdesk/accounts/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var util = require('util'); +var _fd = require('freshdesk'); + +var FreshdeskAccount = require('../../models').FreshdeskAccount; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of FreshdeskAccounts +exports.index = function(req, res) { + var attributes = ['description', 'name', 'username', 'remoteUri']; + var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100; + var page = req.query.page ? parseInt(req.query.page, 10) : 0; + + var query = { + where: {}, + limit: per_page, + offset: page * per_page + }; + + _.forIn(req.query, function(value, key) { + switch (key) { + case 'per_page': + case 'page': + break; + case 'sort_by': + query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null; + break; + case 'sort_order': + break; + case '$': + query.where.$or = []; + attributes.forEach(function(attribute) { + var tmp = {}; + tmp[attribute] = { + $like: '%' + value + '%' + }; + + query.where.$or.push(tmp); + }); + break; + default: + query.where[key] = { + $like: {} + }; + query.where[key].$like = '%' + value + '%'; + } + }); + + FreshdeskAccount + .findAndCountAll(query) + .then(function(result) { + + var total_pages = Math.ceil(result.count / per_page); + var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null; + var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null; + + return res.status(200).send({ + count: result.count, + rows: result.rows, + next_page: next_page, + previous_page: previous_page, + total_pages: total_pages + }); + + }) + .catch(function(err) { + return res.status(500).send({ + error: 'Something blew up!' + }); + }); +} + +// Gets a single FreshdeskAccount from the DB +exports.show = function(req, res) { + FreshdeskAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new FreshdeskAccount in the DB +exports.create = function(req, res) { + FreshdeskAccount.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing FreshdeskAccount in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + FreshdeskAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a FreshdeskAccount from the DB +exports.destroy = function(req, res) { + FreshdeskAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +exports.bulkDestroy = function(req, res) { + FreshdeskAccount + .destroy({ + where: { + id: req.query.id + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.checkAccount = function(req, res) { + FreshdeskAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(account) { + var freshdesk = new _fd(account.remoteUri, account.apiKey); + freshdesk.listTickets(function(err, response, body) { + if (err) { + return res.sendStatus(400); + } + body = JSON.parse(body); + if (body.require_login) { + return res.sendStatus(400); + } + return res.sendStatus(200); + }) + }) + .catch(handleError(res)); +} + +exports.accountValidation = function(req, res) { + var where = {}; + where[req.params.field] = req.body.value; + FreshdeskAccount + .findAndCountAll({ + where: where + }) + .then(function(result) { + if (result.count) { + return res.status(200).send({ + isValid: false, + value: req.body.value + }); + } + return res.status(200).send({ + isValid: true, + value: req.body.value + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getFields = function(req, res, next) { + FreshdeskAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(account) { + var Freshdesk = new _fd(account.remoteUri, account.apiKey); + Freshdesk.get('/ticket_fields.json', function(err, response, body) { + if (err) { + return next(err); + } + body = JSON.parse(body); + return res.status(200).send(body); + }); + }) + .catch(handleError(res)); +}; diff --git a/server/api/freshdesk_account/freshdesk_account.events.js b/server/api/freshdesk_account/freshdesk_account.events.js index 8046eb4..0b71e73 100644 --- a/server/api/freshdesk_account/freshdesk_account.events.js +++ b/server/api/freshdesk_account/freshdesk_account.events.js @@ -1 +1,36 @@ -var _0x1f05=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x1f05[0];const EventEmitter=require(_0x1f05[1]);const FreshdeskAccount=require(_0x1f05[3])[_0x1f05[2]];var FreshdeskAccountEvents= new EventEmitter();FreshdeskAccountEvents[_0x1f05[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x1f05[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x1f05[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x1f05[6]};for(var e in events){var event=events[e];FreshdeskAccount[_0x1f05[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x4d40x8,_0x4d40x9,_0x4d40xa){FreshdeskAccountEvents[_0x1f05[10]](event+ _0x1f05[8]+ _0x4d40x8[_0x1f05[9]],_0x4d40x8);FreshdeskAccountEvents[_0x1f05[10]](event,_0x4d40x8);_0x4d40xa(null)}}module[_0x1f05[11]]= FreshdeskAccountEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const FreshdeskAccount = require('../../models').FreshdeskAccount; + +var FreshdeskAccountEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +FreshdeskAccountEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + FreshdeskAccount.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + FreshdeskAccountEvents.emit(event + ':' + doc._id, doc); + FreshdeskAccountEvents.emit(event, doc); + done(null); + } +} + +module.exports = FreshdeskAccountEvents; diff --git a/server/api/freshdesk_account/freshdesk_account.socket.js b/server/api/freshdesk_account/freshdesk_account.socket.js index a734c5a..c41142d 100644 --- a/server/api/freshdesk_account/freshdesk_account.socket.js +++ b/server/api/freshdesk_account/freshdesk_account.socket.js @@ -1 +1,28 @@ -var _0x111c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x111c[0];const FreshdeskAccountEvents=require(_0x111c[1]);var events=[_0x111c[2],_0x111c[3]];exports[_0x111c[4]]= function(_0xe500x3){for(var _0xe500x4=0,_0xe500x5=events[_0x111c[5]];_0xe500x4< _0xe500x5;_0xe500x4++){var _0xe500x6=events[_0xe500x4];var _0xe500x7=createListener(_0x111c[6]+ _0xe500x6,_0xe500x3);FreshdeskAccountEvents[_0x111c[7]](_0xe500x6,_0xe500x7);_0xe500x3[_0x111c[7]](_0x111c[8],removeListener(_0xe500x6,_0xe500x7))}};function createListener(_0xe500x6,_0xe500x3){return function(_0xe500x9){_0xe500x3[_0x111c[9]](_0xe500x6,_0xe500x9)}}function removeListener(_0xe500x6,_0xe500x7){return function(){FreshdeskAccountEvents[_0x111c[10]](_0xe500x6,_0xe500x7)}} \ No newline at end of file +'use strict'; + +const FreshdeskAccountEvents = require('./freshdesk_account.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('freshdesk_account:' + event, socket); + + FreshdeskAccountEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + FreshdeskAccountEvents.removeListener(event, listener); + }; +} diff --git a/server/api/freshdesk_account/index.js b/server/api/freshdesk_account/index.js index b6839e7..a7385b7 100644 --- a/server/api/freshdesk_account/index.js +++ b/server/api/freshdesk_account/index.js @@ -1 +1,21 @@ -var _0xce8e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x66\x69\x65\x6C\x64\x73","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65\x2F\x3A\x66\x69\x65\x6C\x64","\x61\x63\x63\x6F\x75\x6E\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xce8e[0];var express=require(_0xce8e[1]);var auth=require(_0xce8e[2]);var controller=require(_0xce8e[3]);var router=express.Router();router[_0xce8e[7]](_0xce8e[4],auth[_0xce8e[5]](),controller[_0xce8e[6]]);router[_0xce8e[7]](_0xce8e[8],auth[_0xce8e[5]](),controller[_0xce8e[9]]);router[_0xce8e[7]](_0xce8e[10],auth[_0xce8e[5]](),controller[_0xce8e[11]]);router[_0xce8e[7]](_0xce8e[12],auth[_0xce8e[5]](),controller[_0xce8e[13]]);router[_0xce8e[16]](_0xce8e[14],auth[_0xce8e[5]](),controller[_0xce8e[15]]);router[_0xce8e[16]](_0xce8e[4],auth[_0xce8e[5]](),controller[_0xce8e[17]]);router[_0xce8e[19]](_0xce8e[8],auth[_0xce8e[5]](),controller[_0xce8e[18]]);router[_0xce8e[20]](_0xce8e[8],auth[_0xce8e[5]](),controller[_0xce8e[18]]);router[_0xce8e[22]](_0xce8e[4],auth[_0xce8e[5]](),controller[_0xce8e[21]]);router[_0xce8e[22]](_0xce8e[8],auth[_0xce8e[5]](),controller[_0xce8e[23]]);module[_0xce8e[24]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./freshdesk_account.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); +router.get('/:id', auth.isAuthenticated(), controller.show); +router.get('/:id/fields', auth.isAuthenticated(), controller.getFields); +router.get('/:id/check', auth.isAuthenticated(), controller.checkAccount); +router.post('/validate/:field', auth.isAuthenticated(), controller.accountValidation); +router.post('/', auth.isAuthenticated(), controller.create); +router.put('/:id', auth.isAuthenticated(), controller.update); +router.patch('/:id', auth.isAuthenticated(), controller.update); +router.delete('/', auth.isAuthenticated(), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), controller.destroy); + + +module.exports = router; diff --git a/server/api/freshdesk_configuration/freshdesk_configuration.controller.js b/server/api/freshdesk_configuration/freshdesk_configuration.controller.js index 635dc40..4c3d44d 100644 --- a/server/api/freshdesk_configuration/freshdesk_configuration.controller.js +++ b/server/api/freshdesk_configuration/freshdesk_configuration.controller.js @@ -1 +1,146 @@ -var _0x94aa=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x53\x75\x62\x6A\x65\x63\x74","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x46\x69\x65\x6C\x64","\x66\x69\x6E\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x73\x70\x72\x65\x61\x64","\x61\x64\x64\x53\x75\x62\x6A\x65\x63\x74","\x73\x75\x62\x6A\x65\x63\x74","\x61\x64\x64\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x61\x64\x64\x46\x69\x65\x6C\x64","\x66\x69\x65\x6C\x64","\x74\x79\x70\x65"];_0x94aa[0];var _=require(_0x94aa[1]);var FreshdeskConfiguration=require(_0x94aa[3])[_0x94aa[2]];var FreshdeskField=require(_0x94aa[3])[_0x94aa[4]];function handleError(_0xac2dx5,_0xac2dx6){_0xac2dx6= _0xac2dx6|| 500;return function(_0xac2dx7){_0xac2dx5[_0x94aa[6]](_0xac2dx6)[_0x94aa[5]](_0xac2dx7)}}function responseWithResult(_0xac2dx5,_0xac2dx6){_0xac2dx6= _0xac2dx6|| 200;return function(_0xac2dx9){if(_0xac2dx9){_0xac2dx5[_0x94aa[6]](_0xac2dx6)[_0x94aa[7]](_0xac2dx9)}}}function handleEntityNotFound(_0xac2dx5){return function(_0xac2dx9){if(!_0xac2dx9){_0xac2dx5[_0x94aa[6]](404)[_0x94aa[8]]();return null};return _0xac2dx9}}function saveUpdates(_0xac2dxc){return function(_0xac2dx9){return _0xac2dx9[_0x94aa[10]](_0xac2dxc)[_0x94aa[9]](function(_0xac2dxd){return _0xac2dxd})}}function removeEntity(_0xac2dx5){return function(_0xac2dx9){if(_0xac2dx9){return _0xac2dx9[_0x94aa[11]]()[_0x94aa[9]](function(){_0xac2dx5[_0x94aa[6]](204)[_0x94aa[8]]()})}}}exports[_0x94aa[12]]= function(_0xac2dxf,_0xac2dx5){FreshdeskConfiguration[_0x94aa[15]]({where:_0xac2dxf[_0x94aa[14]]})[_0x94aa[9]](responseWithResult(_0xac2dx5))[_0x94aa[13]](handleError(_0xac2dx5))};exports[_0x94aa[16]]= function(_0xac2dxf,_0xac2dx5){FreshdeskConfiguration[_0x94aa[22]]({where:{id:_0xac2dxf[_0x94aa[18]][_0x94aa[17]]},include:[{model:FreshdeskField,as:_0x94aa[19]},{model:FreshdeskField,as:_0x94aa[20]},{model:FreshdeskField,as:_0x94aa[21]}]})[_0x94aa[9]](handleEntityNotFound(_0xac2dx5))[_0x94aa[9]](responseWithResult(_0xac2dx5))[_0x94aa[13]](handleError(_0xac2dx5))};exports[_0x94aa[23]]= function(_0xac2dxf,_0xac2dx5){FreshdeskConfiguration[_0x94aa[23]](_0xac2dxf[_0x94aa[24]])[_0x94aa[9]](responseWithResult(_0xac2dx5,201))[_0x94aa[13]](handleError(_0xac2dx5))};exports[_0x94aa[25]]= function(_0xac2dxf,_0xac2dx5){if(_0xac2dxf[_0x94aa[24]][_0x94aa[17]]){delete _0xac2dxf[_0x94aa[24]][_0x94aa[17]]};FreshdeskConfiguration[_0x94aa[26]](_0xac2dxf[_0x94aa[18]][_0x94aa[17]])[_0x94aa[9]](handleEntityNotFound(_0xac2dx5))[_0x94aa[9]](saveUpdates(_0xac2dxf[_0x94aa[24]]))[_0x94aa[9]](responseWithResult(_0xac2dx5))[_0x94aa[13]](handleError(_0xac2dx5))};exports[_0x94aa[11]]= function(_0xac2dxf,_0xac2dx5){FreshdeskConfiguration[_0x94aa[26]](_0xac2dxf[_0x94aa[18]][_0x94aa[17]])[_0x94aa[9]](handleEntityNotFound(_0xac2dx5))[_0x94aa[9]](removeEntity(_0xac2dx5))[_0x94aa[13]](handleError(_0xac2dx5))};exports[_0x94aa[27]]= function(_0xac2dxf,_0xac2dx5,_0xac2dx10){var _0xac2dx11;FreshdeskConfiguration[_0x94aa[26]](_0xac2dxf[_0x94aa[18]][_0x94aa[17]])[_0x94aa[9]](handleEntityNotFound(_0xac2dx5))[_0x94aa[9]](function(_0xac2dx14){_0xac2dx11= _0xac2dx14;return FreshdeskField[_0x94aa[23]](_0xac2dxf[_0x94aa[24]])})[_0x94aa[9]](function(_0xac2dx13){switch(_0xac2dxf[_0x94aa[18]][_0x94aa[35]]){case _0x94aa[30]:return [_0xac2dx11[_0x94aa[29]](_0xac2dx13),_0xac2dx13];case _0x94aa[32]:return [_0xac2dx11[_0x94aa[31]](_0xac2dx13),_0xac2dx13];case _0x94aa[34]:return [_0xac2dx11[_0x94aa[33]](_0xac2dx13),_0xac2dx13]}})[_0x94aa[28]](function(_0xac2dx12,_0xac2dx13){return _0xac2dx5[_0x94aa[6]](201)[_0x94aa[7]](_0xac2dx13)})[_0x94aa[13]](handleError(_0xac2dx5))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/freshdesk/configurations -> index + * POST /api/freshdesk/configurations -> create + * GET /api/freshdesk/configurations/:id -> show + * PUT /api/freshdesk/configurations/:id -> update + * DELETE /api/freshdesk/configurations/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); + +var FreshdeskConfiguration = require('../../models').FreshdeskConfiguration; +var FreshdeskField = require('../../models').FreshdeskField; + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of FreshdeskConfigurations +exports.index = function(req, res) { + FreshdeskConfiguration.findAll({ + where: req.query + }) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single FreshdeskConfiguration from the DB +exports.show = function(req, res) { + FreshdeskConfiguration.find({ + where: { + id: req.params.id + }, + include: [{ + model: FreshdeskField, + as: 'Subject' + }, { + model: FreshdeskField, + as: 'Description' + }, { + model: FreshdeskField, + as: 'Field' + }] + }) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new FreshdeskConfiguration in the DB +exports.create = function(req, res) { + FreshdeskConfiguration.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing FreshdeskConfiguration in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + FreshdeskConfiguration.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a FreshdeskConfiguration from the DB +exports.destroy = function(req, res) { + FreshdeskConfiguration.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +exports.addConfigurationField = function(req, res, next) { + // console.log(req.params); + var freshdeskConfiguration; + FreshdeskConfiguration + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(salesforce_configuration) { + freshdeskConfiguration = salesforce_configuration; + return FreshdeskField.create(req.body) + }) + .then(function(freshdeskField) { + switch (req.params.type) { + case 'subject': + return [freshdeskConfiguration.addSubject(freshdeskField), freshdeskField]; + case 'description': + return [freshdeskConfiguration.addDescription(freshdeskField), freshdeskField]; + case 'field': + return [freshdeskConfiguration.addField(freshdeskField), freshdeskField]; + } + }) + .spread(function(data, freshdeskField) { + return res.status(201).json(freshdeskField); + }) + .catch(handleError(res)); +}; diff --git a/server/api/freshdesk_configuration/freshdesk_configuration.events.js b/server/api/freshdesk_configuration/freshdesk_configuration.events.js index 9e23299..f36d5f5 100644 --- a/server/api/freshdesk_configuration/freshdesk_configuration.events.js +++ b/server/api/freshdesk_configuration/freshdesk_configuration.events.js @@ -1 +1,36 @@ -var _0x9838=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x9838[0];const EventEmitter=require(_0x9838[1]);const FreshdeskConfiguration=require(_0x9838[3])[_0x9838[2]];var FreshdeskConfigurationEvents= new EventEmitter();FreshdeskConfigurationEvents[_0x9838[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x9838[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x9838[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x9838[6]};for(var e in events){var event=events[e];FreshdeskConfiguration[_0x9838[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xd7c9x8,_0xd7c9x9,_0xd7c9xa){FreshdeskConfigurationEvents[_0x9838[10]](event+ _0x9838[8]+ _0xd7c9x8[_0x9838[9]],_0xd7c9x8);FreshdeskConfigurationEvents[_0x9838[10]](event,_0xd7c9x8);_0xd7c9xa(null)}}module[_0x9838[11]]= FreshdeskConfigurationEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const FreshdeskConfiguration = require('../../models').FreshdeskConfiguration; + +var FreshdeskConfigurationEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +FreshdeskConfigurationEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + FreshdeskConfiguration.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + FreshdeskConfigurationEvents.emit(event + ':' + doc._id, doc); + FreshdeskConfigurationEvents.emit(event, doc); + done(null); + } +} + +module.exports = FreshdeskConfigurationEvents; diff --git a/server/api/freshdesk_configuration/freshdesk_configuration.socket.js b/server/api/freshdesk_configuration/freshdesk_configuration.socket.js index 48acdf2..9c77498 100644 --- a/server/api/freshdesk_configuration/freshdesk_configuration.socket.js +++ b/server/api/freshdesk_configuration/freshdesk_configuration.socket.js @@ -1 +1,28 @@ -var _0xb12b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xb12b[0];const FreshdeskConfigurationEvents=require(_0xb12b[1]);var events=[_0xb12b[2],_0xb12b[3]];exports[_0xb12b[4]]= function(_0xdea9x3){for(var _0xdea9x4=0,_0xdea9x5=events[_0xb12b[5]];_0xdea9x4< _0xdea9x5;_0xdea9x4++){var _0xdea9x6=events[_0xdea9x4];var _0xdea9x7=createListener(_0xb12b[6]+ _0xdea9x6,_0xdea9x3);FreshdeskConfigurationEvents[_0xb12b[7]](_0xdea9x6,_0xdea9x7);_0xdea9x3[_0xb12b[7]](_0xb12b[8],removeListener(_0xdea9x6,_0xdea9x7))}};function createListener(_0xdea9x6,_0xdea9x3){return function(_0xdea9x9){_0xdea9x3[_0xb12b[9]](_0xdea9x6,_0xdea9x9)}}function removeListener(_0xdea9x6,_0xdea9x7){return function(){FreshdeskConfigurationEvents[_0xb12b[10]](_0xdea9x6,_0xdea9x7)}} \ No newline at end of file +'use strict'; + +const FreshdeskConfigurationEvents = require('./freshdesk_configuration.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('freshdesk_configuration:' + event, socket); + + FreshdeskConfigurationEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + FreshdeskConfigurationEvents.removeListener(event, listener); + }; +} diff --git a/server/api/freshdesk_configuration/index.js b/server/api/freshdesk_configuration/index.js index 392c2d9..e08945f 100644 --- a/server/api/freshdesk_configuration/index.js +++ b/server/api/freshdesk_configuration/index.js @@ -1 +1,19 @@ -var _0xe36a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x3A\x74\x79\x70\x65","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xe36a[0];var express=require(_0xe36a[1]);var auth=require(_0xe36a[2]);var controller=require(_0xe36a[3]);var router=express.Router();router[_0xe36a[7]](_0xe36a[4],auth[_0xe36a[5]](),controller[_0xe36a[6]]);router[_0xe36a[7]](_0xe36a[8],auth[_0xe36a[5]](),controller[_0xe36a[9]]);router[_0xe36a[11]](_0xe36a[4],auth[_0xe36a[5]](),controller[_0xe36a[10]]);router[_0xe36a[13]](_0xe36a[8],auth[_0xe36a[5]](),controller[_0xe36a[12]]);router[_0xe36a[11]](_0xe36a[14],auth[_0xe36a[5]](),controller[_0xe36a[15]]);router[_0xe36a[16]](_0xe36a[8],auth[_0xe36a[5]](),controller[_0xe36a[12]]);router[_0xe36a[18]](_0xe36a[8],auth[_0xe36a[5]](),controller[_0xe36a[17]]);module[_0xe36a[19]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./freshdesk_configuration.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); + +router.get('/:id', auth.isAuthenticated(), controller.show); +router.post('/', auth.isAuthenticated(), controller.create); +router.put('/:id', auth.isAuthenticated(), controller.update); +router.post('/:id/:type', auth.isAuthenticated(), controller.addConfigurationField); +router.patch('/:id', auth.isAuthenticated(), controller.update); +router.delete('/:id', auth.isAuthenticated(), controller.destroy); + + +module.exports = router; diff --git a/server/api/freshdesk_field/freshdesk_field.controller.js b/server/api/freshdesk_field/freshdesk_field.controller.js index 1dac4d2..4a35db8 100644 --- a/server/api/freshdesk_field/freshdesk_field.controller.js +++ b/server/api/freshdesk_field/freshdesk_field.controller.js @@ -1 +1,104 @@ -var _0xcc3c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0xcc3c[0];var _=require(_0xcc3c[1]);var FreshdeskField=require(_0xcc3c[3])[_0xcc3c[2]];function handleError(_0xc267x4,_0xc267x5){_0xc267x5= _0xc267x5|| 500;return function(_0xc267x6){_0xc267x4[_0xcc3c[5]](_0xc267x5)[_0xcc3c[4]](_0xc267x6)}}function responseWithResult(_0xc267x4,_0xc267x5){_0xc267x5= _0xc267x5|| 200;return function(_0xc267x8){if(_0xc267x8){_0xc267x4[_0xcc3c[5]](_0xc267x5)[_0xcc3c[6]](_0xc267x8)}}}function handleEntityNotFound(_0xc267x4){return function(_0xc267x8){if(!_0xc267x8){_0xc267x4[_0xcc3c[5]](404)[_0xcc3c[7]]();return null};return _0xc267x8}}function saveUpdates(_0xc267xb){return function(_0xc267x8){return _0xc267x8[_0xcc3c[9]](_0xc267xb)[_0xcc3c[8]](function(_0xc267xc){return _0xc267xc})}}function removeEntity(_0xc267x4){return function(_0xc267x8){if(_0xc267x8){return _0xc267x8[_0xcc3c[10]]()[_0xcc3c[8]](function(){_0xc267x4[_0xcc3c[5]](204)[_0xcc3c[7]]()})}}}exports[_0xcc3c[11]]= function(_0xc267xe,_0xc267x4){FreshdeskField[_0xcc3c[13]]()[_0xcc3c[8]](responseWithResult(_0xc267x4))[_0xcc3c[12]](handleError(_0xc267x4))};exports[_0xcc3c[14]]= function(_0xc267xe,_0xc267x4){FreshdeskField[_0xcc3c[17]](_0xc267xe[_0xcc3c[16]][_0xcc3c[15]])[_0xcc3c[8]](handleEntityNotFound(_0xc267x4))[_0xcc3c[8]](responseWithResult(_0xc267x4))[_0xcc3c[12]](handleError(_0xc267x4))};exports[_0xcc3c[18]]= function(_0xc267xe,_0xc267x4){FreshdeskField[_0xcc3c[18]](_0xc267xe[_0xcc3c[19]])[_0xcc3c[8]](responseWithResult(_0xc267x4,201))[_0xcc3c[12]](handleError(_0xc267x4))};exports[_0xcc3c[20]]= function(_0xc267xe,_0xc267x4){if(_0xc267xe[_0xcc3c[19]][_0xcc3c[15]]){delete _0xc267xe[_0xcc3c[19]][_0xcc3c[15]]};FreshdeskField[_0xcc3c[17]](_0xc267xe[_0xcc3c[16]][_0xcc3c[15]])[_0xcc3c[8]](handleEntityNotFound(_0xc267x4))[_0xcc3c[8]](saveUpdates(_0xc267xe[_0xcc3c[19]]))[_0xcc3c[8]](responseWithResult(_0xc267x4))[_0xcc3c[12]](handleError(_0xc267x4))};exports[_0xcc3c[10]]= function(_0xc267xe,_0xc267x4){FreshdeskField[_0xcc3c[17]](_0xc267xe[_0xcc3c[16]][_0xcc3c[15]])[_0xcc3c[8]](handleEntityNotFound(_0xc267x4))[_0xcc3c[8]](removeEntity(_0xc267x4))[_0xcc3c[12]](handleError(_0xc267x4))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/freshdesk/fields -> index + * POST /api/freshdesk/fields -> create + * GET /api/freshdesk/fields/:id -> show + * PUT /api/freshdesk/fields/:id -> update + * DELETE /api/freshdesk/fields/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); + +var FreshdeskField = require('../../models').FreshdeskField; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of FreshdeskFields +exports.index = function(req, res) { + FreshdeskField.findAll() + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single FreshdeskField from the DB +exports.show = function(req, res) { + FreshdeskField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new FreshdeskField in the DB +exports.create = function(req, res) { + FreshdeskField.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing FreshdeskField in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + FreshdeskField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a FreshdeskField from the DB +exports.destroy = function(req, res) { + FreshdeskField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} diff --git a/server/api/freshdesk_field/freshdesk_field.events.js b/server/api/freshdesk_field/freshdesk_field.events.js index 00c985e..dcadf5c 100644 --- a/server/api/freshdesk_field/freshdesk_field.events.js +++ b/server/api/freshdesk_field/freshdesk_field.events.js @@ -1 +1,36 @@ -var _0x1182=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x1182[0];const EventEmitter=require(_0x1182[1]);const FreshdeskField=require(_0x1182[3])[_0x1182[2]];var FreshdeskFieldEvents= new EventEmitter();FreshdeskFieldEvents[_0x1182[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x1182[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x1182[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x1182[6]};for(var e in events){var event=events[e];FreshdeskField[_0x1182[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x3139x8,_0x3139x9,_0x3139xa){FreshdeskFieldEvents[_0x1182[10]](event+ _0x1182[8]+ _0x3139x8[_0x1182[9]],_0x3139x8);FreshdeskFieldEvents[_0x1182[10]](event,_0x3139x8);_0x3139xa(null)}}module[_0x1182[11]]= FreshdeskFieldEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const FreshdeskField = require('../../models').FreshdeskField; + +var FreshdeskFieldEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +FreshdeskFieldEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + FreshdeskField.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + FreshdeskFieldEvents.emit(event + ':' + doc._id, doc); + FreshdeskFieldEvents.emit(event, doc); + done(null); + } +} + +module.exports = FreshdeskFieldEvents; diff --git a/server/api/freshdesk_field/freshdesk_field.socket.js b/server/api/freshdesk_field/freshdesk_field.socket.js index 900a455..41eae7a 100644 --- a/server/api/freshdesk_field/freshdesk_field.socket.js +++ b/server/api/freshdesk_field/freshdesk_field.socket.js @@ -1 +1,28 @@ -var _0x20b3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x20b3[0];const FreshdeskFieldEvents=require(_0x20b3[1]);var events=[_0x20b3[2],_0x20b3[3]];exports[_0x20b3[4]]= function(_0x8c05x3){for(var _0x8c05x4=0,_0x8c05x5=events[_0x20b3[5]];_0x8c05x4< _0x8c05x5;_0x8c05x4++){var _0x8c05x6=events[_0x8c05x4];var _0x8c05x7=createListener(_0x20b3[6]+ _0x8c05x6,_0x8c05x3);FreshdeskFieldEvents[_0x20b3[7]](_0x8c05x6,_0x8c05x7);_0x8c05x3[_0x20b3[7]](_0x20b3[8],removeListener(_0x8c05x6,_0x8c05x7))}};function createListener(_0x8c05x6,_0x8c05x3){return function(_0x8c05x9){_0x8c05x3[_0x20b3[9]](_0x8c05x6,_0x8c05x9)}}function removeListener(_0x8c05x6,_0x8c05x7){return function(){FreshdeskFieldEvents[_0x20b3[10]](_0x8c05x6,_0x8c05x7)}} \ No newline at end of file +'use strict'; + +const FreshdeskFieldEvents = require('./freshdesk_field.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('freshdesk_field:' + event, socket); + + FreshdeskFieldEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + FreshdeskFieldEvents.removeListener(event, listener); + }; +} diff --git a/server/api/freshdesk_field/index.js b/server/api/freshdesk_field/index.js index b862d3e..d17268f 100644 --- a/server/api/freshdesk_field/index.js +++ b/server/api/freshdesk_field/index.js @@ -1 +1,18 @@ -var _0xb346=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xb346[0];var express=require(_0xb346[1]);var auth=require(_0xb346[2]);var controller=require(_0xb346[3]);var router=express.Router();router[_0xb346[7]](_0xb346[4],auth[_0xb346[5]](),controller[_0xb346[6]]);router[_0xb346[7]](_0xb346[8],auth[_0xb346[5]](),controller[_0xb346[9]]);router[_0xb346[11]](_0xb346[4],auth[_0xb346[5]](),controller[_0xb346[10]]);router[_0xb346[13]](_0xb346[8],auth[_0xb346[5]](),controller[_0xb346[12]]);router[_0xb346[14]](_0xb346[8],auth[_0xb346[5]](),controller[_0xb346[12]]);router[_0xb346[16]](_0xb346[8],auth[_0xb346[5]](),controller[_0xb346[15]]);module[_0xb346[17]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./freshdesk_field.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); + +router.get('/:id', auth.isAuthenticated(), controller.show); +router.post('/', auth.isAuthenticated(), controller.create); +router.put('/:id', auth.isAuthenticated(), controller.update); +router.patch('/:id', auth.isAuthenticated(), controller.update); +router.delete('/:id', auth.isAuthenticated(), controller.destroy); + + +module.exports = router; diff --git a/server/api/integration/index.js b/server/api/integration/index.js index 337f726..74118a8 100644 --- a/server/api/integration/index.js +++ b/server/api/integration/index.js @@ -1 +1,15 @@ -var _0xfd58=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x68\x61\x73\x52\x6F\x6C\x65","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xfd58[0];var express=require(_0xfd58[1]);var controller=require(_0xfd58[2]);var auth=require(_0xfd58[3]);var router=express.Router();router[_0xfd58[10]](_0xfd58[4],auth[_0xfd58[5]](),auth[_0xfd58[8]]([19],[_0xfd58[6],_0xfd58[7]]),controller[_0xfd58[9]]);router[_0xfd58[10]](_0xfd58[11],auth[_0xfd58[5]](),auth[_0xfd58[12]](_0xfd58[6]),controller[_0xfd58[13]]);router[_0xfd58[15]](_0xfd58[4],auth[_0xfd58[5]](),auth[_0xfd58[12]](_0xfd58[6]),controller[_0xfd58[14]]);router[_0xfd58[17]](_0xfd58[11],auth[_0xfd58[5]](),auth[_0xfd58[12]](_0xfd58[6]),controller[_0xfd58[16]]);router[_0xfd58[19]](_0xfd58[11],auth[_0xfd58[5]](),auth[_0xfd58[12]](_0xfd58[6]),controller[_0xfd58[18]]);module[_0xfd58[20]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./integration.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([19], ['admin', 'agent']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.update); +router.delete('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.destroy); + +module.exports = router; diff --git a/server/api/integration/integration.controller.js b/server/api/integration/integration.controller.js index b3ae4bc..d99521f 100644 --- a/server/api/integration/integration.controller.js +++ b/server/api/integration/integration.controller.js @@ -1 +1,168 @@ -var _0x9a36=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x70\x6C\x6F\x61\x64\x2D\x66\x69\x6C\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x70\x61\x74\x68","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x61\x64\x6D\x2D\x7A\x69\x70","\x73\x74\x72\x69\x6E\x67\x2D\x74\x6F\x2D\x6A\x73\x6F\x6E","\x66\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x6A\x6F\x69\x6E","\x4D\x61\x78\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x66\x69\x6C\x65\x73\x20\x75\x70\x6C\x6F\x61\x64\x20\x65\x78\x63\x65\x65\x64\x65\x64","\x4F\x6E\x6C\x79\x20\x7A\x69\x70\x20\x66\x6F\x72\x6D\x61\x74\x20\x61\x63\x63\x65\x70\x74\x65\x64","\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x66\x69\x6C\x65\x20\x73\x69\x7A\x65\x20\x69\x73\x20\x35\x20\x4D\x62","\x49\x6E\x76\x61\x6C\x69\x64\x20\x72\x65\x71\x75\x65\x73\x74","\x65\x6E\x64","\x66\x69\x6C\x65","\x67\x65\x74\x45\x6E\x74\x72\x69\x65\x73","\x6E\x61\x6D\x65","\x6D\x61\x6E\x69\x66\x65\x73\x74\x2E\x6A\x73\x6F\x6E","\x75\x74\x66\x38","\x67\x65\x74\x44\x61\x74\x61","\x75\x70\x6C\x6F\x61\x64\x5A\x69\x70","\x6C\x6F\x67","\x70\x61\x72\x73\x65","\x65\x78\x74\x72\x61\x63\x74\x41\x6C\x6C\x54\x6F","\x6D\x65\x72\x67\x65","\x6A\x73\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x75\x6E\x6C\x69\x6E\x6B\x53\x79\x6E\x63","\x6D\x61\x6E\x69\x66\x65\x73\x74","\x6D\x61\x6E\x69\x66\x65\x73\x74\x2E\x6A\x73\x6F\x6E\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x6F\x6E","\x65\x72\x72\x6F\x72","\x75\x70\x6C\x6F\x61\x64","\x75\x70\x64\x61\x74\x65","\x62\x6F\x64\x79","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x66\x69\x6E\x64"];_0x9a36[0];var _=require(_0x9a36[1]);var uploadFile=require(_0x9a36[2]);var config=require(_0x9a36[3]);var path=require(_0x9a36[4]);var sr=require(_0x9a36[5]);var admZip=require(_0x9a36[6]);var str2json=require(_0x9a36[7]);var fs=require(_0x9a36[8]);var Util=require(_0x9a36[9]);var Integration=require(_0x9a36[11])[_0x9a36[10]];exports[_0x9a36[12]]= function(_0x1777xb,_0x1777xc,_0x1777xd){return Integration[_0x9a36[19]](Util[_0x9a36[18]](_0x1777xb[_0x9a36[17]]))[_0x9a36[16]](function(_0x1777xf){_0x1777xc[_0x9a36[15]](200)[_0x9a36[14]](_0x1777xf)})[_0x9a36[13]](function(_0x1777xe){return handleError(_0x1777xc,_0x1777xe)})};exports[_0x9a36[20]]= function(_0x1777xb,_0x1777xc){return Integration[_0x9a36[24]](_0x1777xb[_0x9a36[23]][_0x9a36[22]])[_0x9a36[16]](function(_0x1777x10){if(!_0x1777x10){return _0x1777xc[_0x9a36[21]](404)};return _0x1777xc[_0x9a36[14]](_0x1777x10)})[_0x9a36[13]](function(_0x1777xe){return handleError(_0x1777xc,_0x1777xe)})};exports[_0x9a36[25]]= function(_0x1777xb,_0x1777xc){var _0x1777x11= new uploadFile({dest:path[_0x9a36[28]](config[_0x9a36[26]],_0x9a36[27]),maxFileSize:5* 1000000,maxNumberOfFiles:1,minNumberOfFiles:1,acceptFileTypes:/(\.|\/)(zip)$/i,messages:{maxNumberOfFiles:_0x9a36[29],acceptFileTypes:_0x9a36[30],maxFileSize:_0x9a36[31],invalidRequest:_0x9a36[32]}});_0x1777x11[_0x9a36[50]](_0x9a36[33],function(_0x1777x12,_0x1777x13){var _0x1777x14= new admZip(_0x1777x13[_0x9a36[34]][_0x9a36[4]]);var _0x1777x15=false;var _0x1777x16=_0x1777x14[_0x9a36[35]]();_0x1777x16[_0x9a36[46]](function(_0x1777x17){if(_0x1777x17[_0x9a36[36]]=== _0x9a36[37]){var _0x1777x18=_0x1777x17[_0x9a36[39]]().toString(_0x9a36[38]);console[_0x9a36[41]](_0x9a36[40],_0x1777x18);try{_0x1777x15= JSON[_0x9a36[42]](_0x1777x18);console[_0x9a36[41]](_0x9a36[40],_0x1777x15);Integration[_0x9a36[25]](_[_0x9a36[44]](_0x1777x13[_0x9a36[34]],_0x1777x15))[_0x9a36[16]](function(_0x1777x10){_0x1777x14[_0x9a36[43]](path[_0x9a36[28]](config[_0x9a36[26]],_0x9a36[27]),true);return _0x1777xc[_0x9a36[15]](201)[_0x9a36[14]](_0x1777x10)})[_0x9a36[13]](function(_0x1777xe){return handleError(_0x1777xc,_0x1777xe)})}catch(e){console[_0x9a36[41]](e);var _0x1777xe={errors:[{type:_0x9a36[45],message:e}]};return handleError(_0x1777xc,_0x1777xe)}}});fs[_0x9a36[47]](_0x1777x13[_0x9a36[34]][_0x9a36[4]]);if(!_0x1777x15){var _0x1777xe={errors:[{type:_0x9a36[48],message:_0x9a36[49]}]};return handleError(_0x1777xc,_0x1777xe)}});_0x1777x11[_0x9a36[50]](_0x9a36[51],function(_0x1777x19){var _0x1777xe={errors:[{type:_0x9a36[52],message:_0x1777x19}]};return handleError(_0x1777xc,_0x1777xe)});_0x1777x11[_0x9a36[42]](_0x1777xb)};exports[_0x9a36[53]]= function(_0x1777xb,_0x1777xc){if(_0x1777xb[_0x9a36[54]][_0x9a36[22]]){delete _0x1777xb[_0x9a36[54]][_0x9a36[22]]};return Integration[_0x9a36[24]](_0x1777xb[_0x9a36[23]][_0x9a36[22]])[_0x9a36[16]](function(_0x1777x10){if(!_0x1777x10){return _0x1777xc[_0x9a36[21]](404)};var _0x1777x1a=_[_0x9a36[44]](_0x1777x10,_0x1777xb[_0x9a36[54]]);return _0x1777x1a[_0x9a36[55]]()})[_0x9a36[16]](function(_0x1777x10){return _0x1777xc[_0x9a36[15]](200)[_0x9a36[14]](_0x1777x10)})[_0x9a36[13]](function(_0x1777xe){return handleError(_0x1777xc,_0x1777xe)})};exports[_0x9a36[56]]= function(_0x1777xb,_0x1777xc){return Integration[_0x9a36[57]]({where:{id:_0x1777xb[_0x9a36[23]][_0x9a36[22]]}})[_0x9a36[16]](function(_0x1777x10){if(!_0x1777x10){return _0x1777xc[_0x9a36[21]](404)};return _0x1777x10[_0x9a36[56]]()})[_0x9a36[16]](function(){return _0x1777xc[_0x9a36[21]](204)})[_0x9a36[13]](function(_0x1777xe){return handleError(_0x1777xc,_0x1777xe)})};function handleError(_0x1777xc,_0x1777xe){return _0x1777xc[_0x9a36[15]](500)[_0x9a36[14]](_0x1777xe)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var uploadFile = require('upload-file'); +var config = require('../../config/environment'); +var path = require('path'); +var sr = require('simple-random'); +var admZip = require('adm-zip'); +var str2json = require('string-to-json'); +var fs = require('fs'); +var Util = require('../../config/util'); + +var Integration = require('../../models').Integration; + +// Get list of Integration +exports.index = function(req, res, next) { + return Integration + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single integration +exports.show = function(req, res) { + return Integration + .findById(req.params.id) + .then(function(integration) { + if (!integration) { + return res.sendStatus(404); + } + return res.send(integration); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new integration in the DB. +exports.create = function(req, res) { + var upload = new uploadFile({ + dest: path.join(config.root, 'server/files/integrations'), + maxFileSize: 5 * 1000000, + maxNumberOfFiles: 1, + minNumberOfFiles: 1, + acceptFileTypes: /(\.|\/)(zip)$/i, + messages: { + maxNumberOfFiles: "Max number of files upload exceeded", + acceptFileTypes: "Only zip format accepted", + maxFileSize: "The maximum file size is 5 Mb", + invalidRequest: "Invalid request" + } + }); + + upload.on('end', function(fields, files) { + var zip = new admZip(files.file.path); + + var manifest = false; + var zipEntries = zip.getEntries(); + zipEntries.forEach(function(zipEntry) { + if (zipEntry.name === 'manifest.json') { + var str = zipEntry.getData().toString('utf8'); + console.log('uploadZip', str); + try { + manifest = JSON.parse(str); + console.log('uploadZip', manifest); + Integration + .create(_.merge(files.file, manifest)) + .then(function(integration) { + + // Extract All Zip and overwrite old directory + zip.extractAllTo(path.join(config.root, + 'server/files/integrations'), true); + + return res.status(201).send(integration); + }) + .catch(function(err) { + return handleError(res, err); + }); + } catch (e) { + console.log(e); + var err = { + errors: [{ + type: 'json', + message: e + }] + }; + return handleError(res, err); + } + } + }); + + fs.unlinkSync(files.file.path); + + if (!manifest) { + var err = { + errors: [{ + type: 'manifest', + message: 'manifest.json not found' + }] + }; + return handleError(res, err); + } + }); + + upload.on('error', function(e) { + var err = { + errors: [{ + type: 'upload', + message: e + }] + }; + return handleError(res, err); + }); + + upload.parse(req); +}; + +// Updates an existing integration in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return Integration + .findById(req.params.id) + .then(function(integration) { + if (!integration) { + return res.sendStatus(404); + } + var updated = _.merge(integration, req.body); + return updated.save(); + }) + .then(function(integration) { + return res.status(200).send(integration); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a integration from the DB. +exports.destroy = function(req, res) { + return Integration + .find({ + where: { + id: req.params.id + } + }) + .then(function(integration) { + if (!integration) { + return res.sendStatus(404); + } + return integration.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/integration/integration.events.js b/server/api/integration/integration.events.js index 07bcf78..6c9a2bf 100644 --- a/server/api/integration/integration.events.js +++ b/server/api/integration/integration.events.js @@ -1 +1,36 @@ -var _0x63a7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x63a7[0];const EventEmitter=require(_0x63a7[1]);const Integration=require(_0x63a7[3])[_0x63a7[2]];var IntegrationEvents= new EventEmitter();IntegrationEvents[_0x63a7[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x63a7[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x63a7[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x63a7[6]};for(var e in events){var event=events[e];Integration[_0x63a7[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x4fcex8,_0x4fcex9,_0x4fcexa){IntegrationEvents[_0x63a7[10]](event+ _0x63a7[8]+ _0x4fcex8[_0x63a7[9]],_0x4fcex8);IntegrationEvents[_0x63a7[10]](event,_0x4fcex8);_0x4fcexa(null)}}module[_0x63a7[11]]= IntegrationEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Integration = require('../../models').Integration; + +var IntegrationEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +IntegrationEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Integration.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + IntegrationEvents.emit(event + ':' + doc._id, doc); + IntegrationEvents.emit(event, doc); + done(null); + } +} + +module.exports = IntegrationEvents; diff --git a/server/api/integration/integration.socket.js b/server/api/integration/integration.socket.js index 87d5299..849c2ef 100644 --- a/server/api/integration/integration.socket.js +++ b/server/api/integration/integration.socket.js @@ -1 +1,28 @@ -var _0x614c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x614c[0];const IntegrationEvents=require(_0x614c[1]);var events=[_0x614c[2],_0x614c[3]];exports[_0x614c[4]]= function(_0x6cc2x3){for(var _0x6cc2x4=0,_0x6cc2x5=events[_0x614c[5]];_0x6cc2x4< _0x6cc2x5;_0x6cc2x4++){var _0x6cc2x6=events[_0x6cc2x4];var _0x6cc2x7=createListener(_0x614c[6]+ _0x6cc2x6,_0x6cc2x3);IntegrationEvents[_0x614c[7]](_0x6cc2x6,_0x6cc2x7);_0x6cc2x3[_0x614c[7]](_0x614c[8],removeListener(_0x6cc2x6,_0x6cc2x7))}};function createListener(_0x6cc2x6,_0x6cc2x3){return function(_0x6cc2x9){_0x6cc2x3[_0x614c[9]](_0x6cc2x6,_0x6cc2x9)}}function removeListener(_0x6cc2x6,_0x6cc2x7){return function(){IntegrationEvents[_0x614c[10]](_0x6cc2x6,_0x6cc2x7)}} \ No newline at end of file +'use strict'; + +const IntegrationEvents = require('./integration.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('integration:' + event, socket); + + IntegrationEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + IntegrationEvents.removeListener(event, listener); + }; +} diff --git a/server/api/interval/index.js b/server/api/interval/index.js index fd73458..9df181a 100644 --- a/server/api/interval/index.js +++ b/server/api/interval/index.js @@ -1 +1,201 @@ -var _0x1936=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x1936[0];var express=require(_0x1936[1]);var controller=require(_0x1936[2]);var auth=require(_0x1936[3]);var router=express.Router();router[_0x1936[9]](_0x1936[4],auth[_0x1936[5]](),auth[_0x1936[7]]([13,7,8,9,10,11],[_0x1936[6]]),controller[_0x1936[8]]);router[_0x1936[9]](_0x1936[10],auth[_0x1936[5]](),auth[_0x1936[7]]([13],[_0x1936[6]]),controller[_0x1936[11]]);router[_0x1936[13]](_0x1936[4],auth[_0x1936[5]](),auth[_0x1936[7]]([13],[_0x1936[6]]),controller[_0x1936[12]]);router[_0x1936[15]](_0x1936[10],auth[_0x1936[5]](),auth[_0x1936[7]]([13],[_0x1936[6]]),controller[_0x1936[14]]);router[_0x1936[17]](_0x1936[4],auth[_0x1936[5]](),auth[_0x1936[7]]([13],[_0x1936[6]]),controller[_0x1936[16]]);router[_0x1936[17]](_0x1936[10],auth[_0x1936[5]](),auth[_0x1936[7]]([13],[_0x1936[6]]),controller[_0x1936[18]]);module[_0x1936[19]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./interval.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +/** + * @api {get} /api/intervals/ Get intervals' list. + * + * @apiParam (Query) {Number} [offset] Pagination offset. + * @apiParam (Query) {Number} [limit] Pagination limit. + * + * @apiVersion 0.0.143 + * @apiName GetIntervals + * @apiGroup Intervals + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Number} count Number of intervals. + * @apiSuccess {Object[]} rows Get intervals' list. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "count": 1, + * "rows": [{ + * "id": 1 + * "name": "I1", + * "description": "Interval mon-fri", + * "SubIntervals": [{ + * "name": "SI1" + * "interval": "9:00-17:00,mon-fri,*,*" + * }] + * }] + * } + */ +router.get('/', auth.isAuthenticated(), auth.hasModule([13, 7, 8, 9, 10, 11], ['admin']), controller.index); + +/** + * @api {get} /api/intervals/:id Get interval's details. + * @apiParam {Number} id Interval's unique ID. + * @apiVersion 0.0.143 + * @apiName GetInterval + * @apiGroup Intervals + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Object} Get interval's details. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "I1", + * "description": "Interval mon-fri", + * "SubIntervals": [{ + * "name": "SI1" + * "interval": "9:00-17:00,mon-fri,*,*" + * }] + * } + */ +router.get('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.show); + +/** + * @api {post} /api/intervals/ Create interval. + * + * @apiParamExample {json} Request-Example: + * { + * "name": "I1", + * "description": "Interval mon-fri", + * "SubIntervals": [{ + * "name": "SI1" + * "interval": "9:00-17:00,mon-fri,*,*" + * }] + * } + * + * @apiParam (Body) {String} name Interval's name. + * @apiParam (Body) {Object[]} [SubIntervals] SubIntervals' array. + * @apiParam (Body) {String} [description] Interval's description. + * + * @apiVersion 0.0.143 + * @apiName CreateInterval + * @apiGroup Intervals + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 201 Created + * { + * "id": 1 + * "name": "john.doe", + * "email": "john.doe@xcally.com", + * "internal": 1001, + * "fullname": "John Doe", + * ... + * } + */ +router.post('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.create); + +/** + * @api {put} /api/intervals/:id Update interval. + * + * @apiParamExample {json} Request-Example: + * { + * "name": "I1", + * "description": "Interval mon-fri", + * "SubIntervals": [{ + * "name": "SI1" + * "interval": "9:00-17:00,mon-fri,*,*" + * }] + * } + * + * @apiParam (Params) {Number} id Interval's unique ID. + * @apiParam (Body) {String} name Interval's name. + * @apiParam (Body) {Object[]} [SubIntervals] SubIntervals' array. + * @apiParam (Body) {String} [description] Interval's description. + * + * @apiVersion 0.0.143 + * @apiName UpdateInterval + * @apiGroup Intervals + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "john.doe", + * "email": "john.doe@xcally.com", + * "internal": 1001, + * "fullname": "John Doe", + * ... + * } + */ +router.put('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.update); + +/** + * @api {delete} /api/intervals/ Bulk Delete intervals' details. + * + * @apiParam (Query) {Number[]} ids Intervals' unique ID array. + * + * @apiVersion 0.0.143 + * @apiName BulkDeleteIntervals + * @apiGroup Intervals + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.bulkDestroy); + +/** + * @api {delete} /api/intervals/:id Delete interval's details. + * + * @apiParam {Number} id Interval's unique ID. + * + * @apiVersion 0.0.143 + * @apiName DeleteInterval + * @apiGroup Intervals + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/interval/interval.controller.js b/server/api/interval/interval.controller.js index 7a7b0ca..8276adb 100644 --- a/server/api/interval/interval.controller.js +++ b/server/api/interval/interval.controller.js @@ -1 +1,197 @@ -var _0xc783=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x62\x6C\x75\x65\x62\x69\x72\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\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","\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x73\x75\x62\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x6C\x6F\x67","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x53\x75\x62\x49\x6E\x74\x65\x72\x76\x61\x6C\x73","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x73\x74\x72\x6F\x79","\x63\x6C\x6F\x6E\x65","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x61\x6C\x6C","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x6D\x61\x70","\x66\x69\x6E\x64","\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64","\x70\x75\x73\x68","\x72\x65\x6D\x6F\x76\x65","\x66\x6F\x72\x45\x61\x63\x68","\x6D\x65\x73\x73\x61\x67\x65","\x54\x68\x65\x20\x49\x6E\x74\x65\x72\x76\x61\x6C\x20\x69\x73\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\x6F\x6E\x65\x20\x6F\x72\x20\x6D\x6F\x72\x65\x20\x72\x6F\x75\x74\x65\x73\x2C\x20\x64\x65\x6C\x65\x74\x65\x20\x74\x68\x65\x6D\x20\x66\x69\x72\x73\x74","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x49\x4E\x54\x45\x52\x56\x41\x4C\x5F\x52\x4F\x55\x54\x45\x5F\x41\x53\x53\x4F\x43\x49\x41\x54\x45\x44","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0xc783[0];var _=require(_0xc783[1]);var Interval=require(_0xc783[3])[_0xc783[2]];var VoiceExtension=require(_0xc783[3])[_0xc783[4]];var sequelize=require(_0xc783[3])[_0xc783[5]];var Promise=require(_0xc783[6]);var Util=require(_0xc783[7]);exports[_0xc783[8]]= function(_0xbe73x7,_0xbe73x8,_0xbe73x9){return Interval[_0xc783[19]](_0xc783[17],_0xc783[18])[_0xc783[16]](_[_0xc783[15]](Util[_0xc783[14]](_0xbe73x7[_0xc783[13]]),{distinct:true}))[_0xc783[12]](function(_0xbe73xb){_0xbe73x8[_0xc783[11]](200)[_0xc783[10]](_0xbe73xb)})[_0xc783[9]](function(_0xbe73xa){return handleError(_0xbe73x8,_0xbe73xa)})};exports[_0xc783[20]]= function(_0xbe73x7,_0xbe73x8){return Interval[_0xc783[19]](_0xc783[18])[_0xc783[24]](_0xbe73x7[_0xc783[23]][_0xc783[22]])[_0xc783[12]](function(_0xbe73xc){if(!_0xbe73xc){return _0xbe73x8[_0xc783[21]](404)};return _0xbe73x8[_0xc783[10]](_0xbe73xc)})[_0xc783[9]](function(_0xbe73xa){return handleError(_0xbe73x8,_0xbe73xa)})};exports[_0xc783[25]]= function(_0xbe73x7,_0xbe73x8){return Interval[_0xc783[19]](_0xc783[18])[_0xc783[25]](_0xbe73x7[_0xc783[27]])[_0xc783[12]](function(_0xbe73xc){return _0xbe73x8[_0xc783[11]](201)[_0xc783[10]](_0xbe73xc)})[_0xc783[9]](function(_0xbe73xa){console[_0xc783[26]](_0xbe73xa);return handleError(_0xbe73x8,_0xbe73xa)})};exports[_0xc783[28]]= function(_0xbe73x7,_0xbe73x8){var _0xbe73xd;return sequelize[_0xc783[34]](function(_0xbe73xe){if(_0xbe73x7[_0xc783[27]][_0xc783[22]]){delete _0xbe73x7[_0xc783[27]][_0xc783[22]]};return Interval[_0xc783[19]](_0xc783[18])[_0xc783[24]](_0xbe73x7[_0xc783[23]][_0xc783[22]])[_0xc783[12]](function(_0xbe73xc){if(!_0xbe73xc){return _0xbe73x8[_0xc783[21]](404)};_0xbe73xd= _[_0xc783[32]](_0xbe73xc);return _0xbe73xc[_0xc783[33]](_0xbe73x7[_0xc783[27]],{transaction:_0xbe73xe})})[_0xc783[12]](function(){if(_0xbe73x7[_0xc783[27]][_0xc783[29]]&& !_0xbe73x7[_0xc783[27]][_0xc783[29]][_0xc783[30]]){return Interval[_0xc783[31]]({where:{IntervalId:_0xbe73x7[_0xc783[23]][_0xc783[22]]},individualHooks:true,transaction:_0xbe73xe})}else {if(_0xbe73x7[_0xc783[27]][_0xc783[29]]&& _0xbe73x7[_0xc783[27]][_0xc783[29]][_0xc783[30]]){return bulkCreateSubIntervals(_0xbe73x7[_0xc783[27]].SubIntervals,_0xbe73xd,_0xbe73xe)}}})})[_0xc783[12]](function(){return _0xbe73x8[_0xc783[21]](200)})[_0xc783[9]](function(_0xbe73xa){console[_0xc783[26]](_0xbe73xa);return handleError(_0xbe73x8,_0xbe73xa)})};function bulkCreateSubIntervals(_0xbe73x10,_0xbe73xd,_0xbe73xe){return Promise[_0xc783[35]]([])[_0xc783[12]](function(){var _0xbe73x11=[];var _0xbe73x12=_[_0xc783[37]](_0xbe73xd.SubIntervals,_0xc783[36]);var _0xbe73x13;_[_0xc783[42]](_0xbe73x12,function(_0xbe73x14,_0xbe73x15){_0xbe73x13= _[_0xc783[38]](_0xbe73x10,{id:_0xbe73x14[_0xc783[22]]});if(_0xbe73x13){_0xbe73x13[_0xc783[39]]= _0xbe73xd[_0xc783[22]];_0xbe73x11[_0xc783[40]](Interval[_0xc783[28]](_[_0xc783[32]](_0xbe73x13),{where:{id:_0xbe73x14[_0xc783[22]]},transaction:_0xbe73xe,individualHooks:true}));_[_0xc783[41]](_0xbe73x10,{id:_0xbe73x14[_0xc783[22]]})}else {_0xbe73x11[_0xc783[40]](Interval[_0xc783[31]]({where:{id:_0xbe73x14[_0xc783[22]]},individualHooks:true,transaction:_0xbe73xe}))}});_[_0xc783[42]](_0xbe73x10,function(_0xbe73x14){_0xbe73x14[_0xc783[39]]= _0xbe73xd[_0xc783[22]];_0xbe73x11[_0xc783[40]](Interval[_0xc783[25]](_0xbe73x14,{transaction:_0xbe73xe}))});return _0xbe73x11})[_0xc783[35]]()}exports[_0xc783[31]]= function(_0xbe73x7,_0xbe73x8){return sequelize[_0xc783[34]](function(_0xbe73xe){return Interval[_0xc783[31]]({where:{id:_0xbe73x7[_0xc783[23]][_0xc783[22]]},individualHooks:true,transaction:_0xbe73xe})})[_0xc783[12]](function(){return _0xbe73x8[_0xc783[21]](204)})[_0xc783[9]](sequelize.ForeignKeyConstraintError,function(_0xbe73xa){_0xbe73xa[_0xc783[43]]= _0xc783[44];_0xbe73xa[_0xc783[45]]= _0xc783[46];return handleError(_0xbe73x8,_0xbe73xa)})[_0xc783[9]](function(_0xbe73xa){return handleError(_0xbe73x8,_0xbe73xa)})};exports[_0xc783[47]]= function(_0xbe73x7,_0xbe73x8){return sequelize[_0xc783[34]](function(_0xbe73xe){return Interval[_0xc783[31]]({where:{id:_0xbe73x7[_0xc783[13]][_0xc783[48]]},individualHooks:true,transaction:_0xbe73xe})})[_0xc783[12]](function(){return _0xbe73x8[_0xc783[21]](204)})[_0xc783[9]](sequelize.ForeignKeyConstraintError,function(_0xbe73xa){_0xbe73xa[_0xc783[43]]= _0xc783[44];_0xbe73xa[_0xc783[45]]= _0xc783[46];return handleError(_0xbe73x8,_0xbe73xa)})[_0xc783[9]](function(_0xbe73xa){return handleError(_0xbe73x8,_0xbe73xa)})};function handleError(_0xbe73x8,_0xbe73xa){return _0xbe73x8[_0xc783[11]](500)[_0xc783[10]](_0xbe73xa)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Interval = require('../../models').Interval; +var VoiceExtension = require('../../models').VoiceExtension; +var sequelize = require('../../models').sequelize; +var Promise = require('bluebird'); + +var Util = require('../../config/util'); + +// Get list of interval +exports.index = function(req, res, next) { + return Interval + .scope('intervals', 'subintervals') + .findAndCountAll(_.merge(Util.getQuery(req.query), { + distinct: true + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single interval +exports.show = function(req, res) { + return Interval + .scope('subintervals') + .findById(req.params.id) + .then(function(interval) { + if (!interval) { + return res.sendStatus(404); + } + return res.send(interval); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new interval in the DB. +exports.create = function(req, res) { + return Interval + .scope('subintervals') + .create(req.body) + .then(function(interval) { + return res.status(201).send(interval); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Updates an existing interval in the DB. +exports.update = function(req, res) { + var _interval; + return sequelize.transaction(function(t) { + if (req.body.id) { + delete req.body.id; + } + return Interval + .scope('subintervals') + .findById(req.params.id) + .then(function(interval) { + if (!interval) { + return res.sendStatus(404); + } + _interval = _.clone(interval); + return interval + .updateAttributes(req.body, { + transaction: t + }); + }) + .then(function() { + if (req.body.SubIntervals && !req.body.SubIntervals.length) { //if I pass an empty subintervals object it means I want to delete all the sub-intervals + return Interval + .destroy({ + where: { + IntervalId: req.params.id + }, + individualHooks: true, + transaction: t + }); + } else if (req.body.SubIntervals && req.body.SubIntervals.length) { //otherwise i update, add or delete sub-intervals depending on the object content + return bulkCreateSubIntervals(req.body.SubIntervals, _interval, t) + } + }) + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +function bulkCreateSubIntervals(subIntervals, _interval, t) { + return Promise + .all([]) + .then(function() { + var bulkSubInts = []; + var oldSubIntervals = _.map(_interval.SubIntervals, 'dataValues'); + var newInterval; + _.forEach(oldSubIntervals, function(element, index) { + newInterval = _.find(subIntervals, { + id: element.id + }); + if (newInterval) { + newInterval.IntervalId = _interval.id; + bulkSubInts.push(Interval.update(_.clone(newInterval), { + where: { + id: element.id + }, + transaction: t, + individualHooks: true + })); + _.remove(subIntervals, { + id: element.id + }); + } else { + bulkSubInts.push(Interval + .destroy({ + where: { + id: element.id + }, + individualHooks: true, + transaction: t + })); + } + }); + _.forEach(subIntervals, function(element) { + element.IntervalId = _interval.id; + bulkSubInts.push(Interval.create(element, { + transaction: t + })); + }); + return bulkSubInts; + }) + .all(); +} + +// Deletes a interval from the DB. +exports.destroy = function(req, res) { + return sequelize.transaction(function(t) { + return Interval + .destroy({ + where: { + id: req.params.id + }, + individualHooks: true, + transaction: t + }); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(sequelize.ForeignKeyConstraintError, function(err) { + err.message = 'The Interval is associated with one or more routes, delete them first'; + err.translatedMessage = 'MESSAGE_INTERVAL_ROUTE_ASSOCIATED' + return handleError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes multiple intervals from the DB. +exports.bulkDestroy = function(req, res) { + return sequelize.transaction(function(t) { + return Interval + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true, + transaction: t + }); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(sequelize.ForeignKeyConstraintError, function(err) { + err.message = 'The Interval is associated with one or more routes, delete them first'; + err.translatedMessage = 'MESSAGE_INTERVAL_ROUTE_ASSOCIATED' + return handleError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/interval/interval.events.js b/server/api/interval/interval.events.js index 14f5a50..cd38713 100644 --- a/server/api/interval/interval.events.js +++ b/server/api/interval/interval.events.js @@ -1 +1,36 @@ -var _0x191a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x191a[0];const EventEmitter=require(_0x191a[1]);const Interval=require(_0x191a[3])[_0x191a[2]];var IntervalEvents= new EventEmitter();IntervalEvents[_0x191a[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x191a[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x191a[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x191a[6]};for(var e in events){var event=events[e];Interval[_0x191a[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x87a8x8,_0x87a8x9,_0x87a8xa){IntervalEvents[_0x191a[10]](event+ _0x191a[8]+ _0x87a8x8[_0x191a[9]],_0x87a8x8);IntervalEvents[_0x191a[10]](event,_0x87a8x8);_0x87a8xa(null)}}module[_0x191a[11]]= IntervalEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Interval = require('../../models').Interval; + +var IntervalEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +IntervalEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Interval.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + IntervalEvents.emit(event + ':' + doc._id, doc); + IntervalEvents.emit(event, doc); + done(null); + } +} + +module.exports = IntervalEvents; diff --git a/server/api/interval/interval.socket.js b/server/api/interval/interval.socket.js index 635de17..8d62dce 100644 --- a/server/api/interval/interval.socket.js +++ b/server/api/interval/interval.socket.js @@ -1 +1,28 @@ -var _0x4441=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x69\x6E\x74\x65\x72\x76\x61\x6C\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x4441[0];const IntervalEvents=require(_0x4441[1]);var events=[_0x4441[2],_0x4441[3]];exports[_0x4441[4]]= function(_0xedccx3){for(var _0xedccx4=0,_0xedccx5=events[_0x4441[5]];_0xedccx4< _0xedccx5;_0xedccx4++){var _0xedccx6=events[_0xedccx4];var _0xedccx7=createListener(_0x4441[6]+ _0xedccx6,_0xedccx3);IntervalEvents[_0x4441[7]](_0xedccx6,_0xedccx7);_0xedccx3[_0x4441[7]](_0x4441[8],removeListener(_0xedccx6,_0xedccx7))}};function createListener(_0xedccx6,_0xedccx3){return function(_0xedccx9){_0xedccx3[_0x4441[9]](_0xedccx6,_0xedccx9)}}function removeListener(_0xedccx6,_0xedccx7){return function(){IntervalEvents[_0x4441[10]](_0xedccx6,_0xedccx7)}} \ No newline at end of file +'use strict'; + +const IntervalEvents = require('./interval.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('interval:' + event, socket); + + IntervalEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + IntervalEvents.removeListener(event, listener); + }; +} diff --git a/server/api/jscripty_project/index.js b/server/api/jscripty_project/index.js index d05c781..dba0e5b 100644 --- a/server/api/jscripty_project/index.js +++ b/server/api/jscripty_project/index.js @@ -1 +1,33 @@ -var _0x2857=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x4A\x73\x63\x72\x69\x70\x74\x79","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x2F\x3A\x69\x64\x2F\x73\x65\x73\x73\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x53\x65\x73\x73\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x73\x65\x73\x73\x69\x6F\x6E\x73\x2F\x3A\x73\x65\x73\x73\x69\x6F\x6E\x49\x64","\x73\x68\x6F\x77\x53\x65\x73\x73\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x71\x75\x65\x73\x74\x69\x6F\x6E\x73\x2F\x3A\x71\x75\x65\x73\x74\x69\x6F\x6E\x49\x64\x2F\x64\x65\x74\x61\x69\x6C","\x73\x68\x6F\x77\x51\x75\x65\x73\x74\x69\x6F\x6E\x44\x65\x74\x61\x69\x6C","\x2F\x3A\x69\x64\x2F\x71\x75\x65\x73\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x51\x75\x65\x73\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x71\x75\x65\x73\x74\x69\x6F\x6E\x73\x2F\x73\x75\x6D\x6D\x61\x72\x79","\x73\x68\x6F\x77\x53\x75\x6D\x6D\x61\x72\x79","\x2F\x3A\x69\x64\x2F\x69\x6E\x70\x75\x74\x73","\x73\x68\x6F\x77\x49\x6E\x70\x75\x74\x73","\x2F\x3A\x69\x64\x2F\x71\x75\x65\x73\x74\x69\x6F\x6E\x73\x2F\x64\x65\x74\x61\x69\x6C","\x73\x68\x6F\x77\x44\x65\x74\x61\x69\x6C","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65\x53\x65\x73\x73\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x73\x65\x73\x73\x69\x6F\x6E\x73\x2F\x3A\x73\x65\x73\x73\x69\x6F\x6E\x49\x64\x2F\x71\x75\x65\x73\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65\x51\x75\x65\x73\x74\x69\x6F\x6E\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x75\x70\x64\x61\x74\x65\x53\x65\x73\x73\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79\x53\x65\x73\x73\x69\x6F\x6E","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x2857[0];var express=require(_0x2857[1]);var auth=require(_0x2857[2]);var controller=require(_0x2857[3]);var license=require(_0x2857[4]);var router=express.Router();router[_0x2857[13]](_0x2857[5],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9],_0x2857[10]]),controller[_0x2857[12]]);router[_0x2857[13]](_0x2857[14],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9]]),controller[_0x2857[15]]);router[_0x2857[13]](_0x2857[16],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9],_0x2857[10]]),controller[_0x2857[17]]);router[_0x2857[13]](_0x2857[18],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9]]),controller[_0x2857[19]]);router[_0x2857[13]](_0x2857[20],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9]]),controller[_0x2857[21]]);router[_0x2857[13]](_0x2857[22],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9]]),controller[_0x2857[23]]);router[_0x2857[13]](_0x2857[24],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9]]),controller[_0x2857[25]]);router[_0x2857[13]](_0x2857[26],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9]]),controller[_0x2857[27]]);router[_0x2857[13]](_0x2857[28],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9]]),controller[_0x2857[29]]);router[_0x2857[13]](_0x2857[30],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9]]),controller[_0x2857[31]]);router[_0x2857[33]](_0x2857[5],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9]]),controller[_0x2857[32]]);router[_0x2857[33]](_0x2857[18],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9],_0x2857[10]]),controller[_0x2857[34]]);router[_0x2857[33]](_0x2857[35],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9],_0x2857[10]]),controller[_0x2857[36]]);router[_0x2857[38]](_0x2857[14],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9]]),controller[_0x2857[37]]);router[_0x2857[38]](_0x2857[20],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9],_0x2857[10]]),controller[_0x2857[39]]);router[_0x2857[41]](_0x2857[20],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9]]),controller[_0x2857[40]]);router[_0x2857[41]](_0x2857[5],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9]]),controller[_0x2857[42]]);router[_0x2857[41]](_0x2857[14],license[_0x2857[6]](),license[_0x2857[7]](),auth[_0x2857[8]](),auth[_0x2857[11]]([15],[_0x2857[9]]),controller[_0x2857[43]]);module[_0x2857[44]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./jscripty_project.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + + +router.get('/', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin', 'agent']), controller.index); +router.get('/:id', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin']), controller.show); +router.get('/:id/download', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin', 'agent']), controller.download); +router.get('/:id/sessions', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin']), controller.showSessions); +router.get('/:id/sessions/:sessionId', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin']), controller.showSession); +router.get('/:id/questions/:questionId/detail', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin']), controller.showQuestionDetail); +router.get('/:id/questions', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin']), controller.showQuestions); +router.get('/:id/questions/summary', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin']), controller.showSummary); +router.get('/:id/inputs', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin']), controller.showInputs); +// router.get('/:id/questions/:questionId/otherOption', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin']), controller.showOther); +router.get('/:id/questions/detail', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin']), controller.showDetail); +router.post('/', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin']), controller.create); +router.post('/:id/sessions', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin', 'agent']), controller.createSession); +router.post('/:id/sessions/:sessionId/questions', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin', 'agent']), controller.createQuestions); +router.put('/:id', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin']), controller.update); +router.put('/:id/sessions/:sessionId', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin', 'agent']), controller.updateSession); +router.delete('/:id/sessions/:sessionId', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin']), controller.destroySession); +router.delete('/', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin']), controller.bulkDestroy); +router.delete('/:id', license.isValidDate(), license.hasJscripty(), auth.isAuthenticated(), auth.hasModule([15], ['admin']), controller.destroy); + + + +module.exports = router; diff --git a/server/api/jscripty_project/jscripty_project.controller.js b/server/api/jscripty_project/jscripty_project.controller.js index 4841dae..662f2f9 100644 --- a/server/api/jscripty_project/jscripty_project.controller.js +++ b/server/api/jscripty_project/jscripty_project.controller.js @@ -1 +1,1026 @@ -var _0x1615=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x78\x6D\x6C\x32\x6A\x73","\x6C\x6F\x64\x61\x73\x68","\x4A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x52\x65\x70\x6F\x72\x74\x4A\x73\x63\x72\x69\x70\x74\x79\x53\x65\x73\x73\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x4A\x73\x63\x72\x69\x70\x74\x79\x51\x75\x65\x73\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x4A\x73\x63\x72\x69\x70\x74\x79\x49\x6E\x70\x75\x74","\x62\x6C\x75\x65\x62\x69\x72\x64","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x73\x68\x6F\x77\x53\x65\x73\x73\x69\x6F\x6E\x73","\x6C\x6F\x67","\x73\x65\x73\x73\x69\x6F\x6E\x73","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77\x53\x65\x73\x73\x69\x6F\x6E","\x73\x65\x73\x73\x69\x6F\x6E\x49\x64","\x66\x69\x6E\x64","\x73\x68\x6F\x77\x49\x6E\x70\x75\x74\x73","\x72\x6F\x77\x73","\x73\x65\x73\x73\x69\x6F\x6E\x5F\x69\x64","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x69\x64","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x74\x79\x70\x65","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x6C\x61\x62\x65\x6C","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x74\x65\x78\x74","\x69\x6E\x70\x75\x74\x5F\x6C\x61\x62\x65\x6C","\x69\x6E\x70\x75\x74\x5F\x76\x61\x6C\x75\x65","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x63\x6F\x75\x6E\x74","\x6C\x65\x6E\x67\x74\x68","\x69\x6E\x70\x75\x74\x73","\x73\x68\x6F\x77\x51\x75\x65\x73\x74\x69\x6F\x6E\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77\x53\x75\x6D\x6D\x61\x72\x79","\x73\x75\x6D\x6D\x61\x72\x79","\x73\x68\x6F\x77\x51\x75\x65\x73\x74\x69\x6F\x6E\x44\x65\x74\x61\x69\x6C","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x69\x6E\x70\x75\x74","\x67\x72\x6F\x75\x70\x42\x79","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x6C\x61\x73\x74","\x6B\x65\x79\x73","\x6C\x61\x62\x65\x6C\x73","\x63\x68\x6F\x69\x63\x65\x73","\x67\x72\x61\x70\x68\x44\x61\x74\x61","\x67\x72\x61\x70\x68\x4C\x61\x62\x65\x6C\x73","\x62\x61\x72","\x52\x65\x70\x6F\x72\x74\x4A\x73\x63\x72\x69\x70\x74\x79\x49\x6E\x70\x75\x74\x73","\x76\x61\x6C\x75\x65","\x70\x65\x72\x63\x65\x6E\x74\x61\x67\x65","\x71\x75\x65\x73\x74\x69\x6F\x6E\x49\x64","\x63\x6F\x6C","\x66\x6E","\x63\x68\x65\x63\x6B\x62\x6F\x78","\x31","\x69\x6E\x70\x75\x74\x5F\x74\x79\x70\x65","\x71\x75\x65\x73\x74\x69\x6F\x6E","\x70\x69\x65","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x61\x6E\x73\x77\x65\x72","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x6F\x74\x68\x65\x72\x5F\x61\x6E\x73\x77\x65\x72","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x6F\x74\x68\x65\x72\x5F\x6C\x61\x62\x65\x6C","\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x6F\x70\x74\x69\x6F\x6E\x73","\x70\x61\x72\x73\x65","\x6F\x70\x74\x69\x6F\x6E\x73","\x6F\x74\x68\x65\x72\x5F\x6F\x70\x74\x69\x6F\x6E","\x71\x75\x65\x73\x74\x69\x6F\x6E\x20\x74\x79\x70\x65\x20\x6E\x6F\x74\x20\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x64","\x73\x68\x6F\x77\x44\x65\x74\x61\x69\x6C","\x63\x72\x65\x61\x74\x65","\x6E\x61\x6D\x65","\x66\x69\x65\x6C\x64\x73","\x6D\x65\x73\x73\x61\x67\x65","\x50\x72\x6F\x6A\x65\x63\x74\x20\x6E\x61\x6D\x65\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x65\x78\x69\x73\x74\x73","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x50\x52\x4F\x4A\x45\x43\x54","\x62\x6F\x64\x79","\x63\x72\x65\x61\x74\x65\x53\x65\x73\x73\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x51\x75\x65\x73\x74\x69\x6F\x6E\x73","\x61\x6C\x6C","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65\x53\x65\x73\x73\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79\x53\x65\x73\x73\x69\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x3B\x20\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3D\x22","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x2E\x78\x6D\x6C\x22","\x74\x78\x74\x2F\x78\x6D\x6C","\x73\x65\x74","\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E"];_0x1615[0];var xml=require(_0x1615[1]);var _=require(_0x1615[2]);var JscriptyProject=require(_0x1615[4])[_0x1615[3]];var Util=require(_0x1615[5]);var sequelize=require(_0x1615[4])[_0x1615[6]];var ReportJscriptySession=require(_0x1615[4])[_0x1615[7]];var ReportJscriptyQuestion=require(_0x1615[4])[_0x1615[8]];var ReportJscriptyInput=require(_0x1615[4])[_0x1615[9]];var Promise=require(_0x1615[10]);function handleError(_0x8fa8xb,_0x8fa8xc){return _0x8fa8xb[_0x1615[12]](500)[_0x1615[11]](_0x8fa8xc)}function responseWithResult(_0x8fa8xb,_0x8fa8xe){_0x8fa8xe= _0x8fa8xe|| 200;return function(_0x8fa8xf){if(_0x8fa8xf){_0x8fa8xb[_0x1615[12]](_0x8fa8xe)[_0x1615[13]](_0x8fa8xf)}}}function handleEntityNotFound(_0x8fa8xb){return function(_0x8fa8xf){if(!_0x8fa8xf){_0x8fa8xb[_0x1615[12]](404)[_0x1615[14]]();return null};return _0x8fa8xf}}function saveUpdates(_0x8fa8x12){return function(_0x8fa8xf){return _0x8fa8xf[_0x1615[16]](_0x8fa8x12)[_0x1615[15]](function(_0x8fa8x13){return _0x8fa8x13})}}function removeEntity(_0x8fa8xb){return function(_0x8fa8xf){if(_0x8fa8xf){return _0x8fa8xf[_0x1615[17]]()[_0x1615[15]](function(){_0x8fa8xb[_0x1615[12]](204)[_0x1615[14]]()})}}}exports[_0x1615[18]]= function(_0x8fa8x15,_0x8fa8xb,_0x8fa8x16){return JscriptyProject[_0x1615[22]](Util[_0x1615[21]](_0x8fa8x15[_0x1615[20]]))[_0x1615[15]](function(_0x8fa8x17){_0x8fa8xb[_0x1615[12]](200)[_0x1615[11]](_0x8fa8x17)})[_0x1615[19]](function(_0x8fa8xc){return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[23]]= function(_0x8fa8x15,_0x8fa8xb){return JscriptyProject[_0x1615[27]](_0x8fa8x15[_0x1615[26]][_0x1615[25]])[_0x1615[15]](function(_0x8fa8x18){if(!_0x8fa8x18){return _0x8fa8xb[_0x1615[24]](404)};return _0x8fa8xb[_0x1615[11]](_0x8fa8x18)})[_0x1615[19]](function(_0x8fa8xc){return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[28]]= function(_0x8fa8x15,_0x8fa8xb){return ReportJscriptySession[_0x1615[31]]({method:[_0x1615[30],_0x8fa8x15[_0x1615[26]][_0x1615[25]]]})[_0x1615[22]](Util[_0x1615[21]](_0x8fa8x15[_0x1615[20]]))[_0x1615[15]](handleEntityNotFound(_0x8fa8xb))[_0x1615[15]](responseWithResult(_0x8fa8xb))[_0x1615[19]](function(_0x8fa8xc){console[_0x1615[29]](_0x8fa8xc);return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[32]]= function(_0x8fa8x15,_0x8fa8xb){return ReportJscriptySession[_0x1615[34]]({where:{projectId:_0x8fa8x15[_0x1615[26]][_0x1615[25]],session_id:_0x8fa8x15[_0x1615[26]][_0x1615[33]]},include:[{model:ReportJscriptyQuestion,include:[{model:ReportJscriptyInput}]}]})[_0x1615[15]](handleEntityNotFound(_0x8fa8xb))[_0x1615[15]](responseWithResult(_0x8fa8xb))[_0x1615[19]](function(_0x8fa8xc){console[_0x1615[29]](_0x8fa8xc);return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[35]]= function(_0x8fa8x15,_0x8fa8xb){var _0x8fa8x19={count:0,rows:[]};return ReportJscriptySession[_0x1615[31]]({method:[_0x1615[48],_0x8fa8x15[_0x1615[26]][_0x1615[25]]]})[_0x1615[22]](Util[_0x1615[21]](_0x8fa8x15[_0x1615[20]]))[_0x1615[15]](function(_0x8fa8x1a){_[_0x1615[45]](_0x8fa8x1a[_0x1615[36]],function(_0x8fa8x1b){var _0x8fa8x1c=_0x8fa8x1b[_0x1615[37]];_[_0x1615[45]](_0x8fa8x1b.ReportJscriptyQuestions,function(_0x8fa8x1d){var _0x8fa8x1e=_0x8fa8x1d[_0x1615[38]];var _0x8fa8x1f=_0x8fa8x1d[_0x1615[39]];var _0x8fa8x20=_0x8fa8x1d[_0x1615[40]];var _0x8fa8x21=_0x8fa8x1d[_0x1615[41]];_[_0x1615[45]](_0x8fa8x1d.ReportJscriptyInputs,function(_0x8fa8x22){_0x8fa8x19[_0x1615[36]][_0x1615[44]]({session_id:_0x8fa8x1c,question_type:_0x8fa8x1f,question_id:_0x8fa8x1e,question_label:_0x8fa8x20,question_text:_0x8fa8x21,input_label:_0x8fa8x22[_0x1615[42]],input_value:_0x8fa8x22[_0x1615[43]]})})})});_0x8fa8x19[_0x1615[46]]= _0x8fa8x19[_0x1615[36]][_0x1615[47]];return _0x8fa8x19})[_0x1615[15]](handleEntityNotFound(_0x8fa8xb))[_0x1615[15]](responseWithResult(_0x8fa8xb))[_0x1615[19]](function(_0x8fa8xc){console[_0x1615[29]](_0x8fa8xc);return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[49]]= function(_0x8fa8x15,_0x8fa8xb){return ReportJscriptyQuestion[_0x1615[50]]({where:{projectId:_0x8fa8x15[_0x1615[26]][_0x1615[25]]},include:[{model:ReportJscriptyInput}]})[_0x1615[15]](function(_0x8fa8x23){if(!_0x8fa8x23){return _0x8fa8xb[_0x1615[24]](404)};return _0x8fa8xb[_0x1615[12]](200)[_0x1615[11]](_0x8fa8x23)})[_0x1615[15]](handleEntityNotFound(_0x8fa8xb))[_0x1615[19]](function(_0x8fa8xc){console[_0x1615[29]](_0x8fa8xc);return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[51]]= function(_0x8fa8x15,_0x8fa8xb){return ReportJscriptyQuestion[_0x1615[31]]({method:[_0x1615[52],_0x8fa8x15[_0x1615[26]][_0x1615[25]]]})[_0x1615[22]](Util[_0x1615[21]](_0x8fa8x15[_0x1615[20]]))[_0x1615[15]](handleEntityNotFound(_0x8fa8xb))[_0x1615[15]](function(_0x8fa8x24){return _0x8fa8xb[_0x1615[12]](200)[_0x1615[11]](_0x8fa8x24)})[_0x1615[19]](function(_0x8fa8xc){console[_0x1615[29]](_0x8fa8xc);return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[53]]= function(_0x8fa8x15,_0x8fa8xb){var _0x8fa8x25={};var _0x8fa8x23;var _0x8fa8x26=0;return ReportJscriptyQuestion[_0x1615[34]]({where:{projectId:_0x8fa8x15[_0x1615[26]][_0x1615[25]],question_id:_0x8fa8x15[_0x1615[26]][_0x1615[69]]},attributes:[_0x1615[39]]})[_0x1615[15]](function(_0x8fa8x27){if(!_0x8fa8x27){return _0x8fa8xb[_0x1615[24]](404)};if(_0x8fa8x27[_0x1615[54]][_0x1615[39]]== _0x1615[55]){return ReportJscriptyQuestion[_0x1615[50]]({where:{projectId:_0x8fa8x15[_0x1615[26]][_0x1615[25]],question_id:_0x8fa8x15[_0x1615[26]][_0x1615[69]]},attributes:[_0x1615[39],_0x1615[38],_0x1615[40],_0x1615[41]],include:[{model:ReportJscriptyInput,where:{$or:[{input_type:_0x1615[72],input_value:_0x1615[73]},{input_type:{$ne:_0x1615[72]},input_value:{$ne:null}}]},attributes:[_0x1615[42],_0x1615[43],_0x1615[74],[sequelize[_0x1615[71]](_0x1615[46],sequelize[_0x1615[70]](_0x1615[42])),_0x1615[46]]]}],group:[_0x1615[38],_0x1615[42]]})[_0x1615[15]](function(_0x8fa8x27){_0x8fa8x23= _0x8fa8x27;return ReportJscriptyQuestion[_0x1615[50]]({where:{projectId:_0x8fa8x15[_0x1615[26]][_0x1615[25]],question_id:_0x8fa8x15[_0x1615[26]][_0x1615[69]],question_type:_0x1615[55]},attributes:[_0x1615[38],[sequelize[_0x1615[71]](_0x1615[46],sequelize[_0x1615[70]](_0x1615[38])),_0x1615[46]]],group:[_0x1615[38]]})})[_0x1615[15]](function(_0x8fa8x34){_0x8fa8x26= _0x8fa8x34[0][_0x1615[54]][_0x1615[46]];if(_0x8fa8x23){var _0x8fa8x29=_[_0x1615[56]](_0x8fa8x23,_0x1615[38]);_[_0x1615[45]](_0x8fa8x29,function(_0x8fa8x35,_0x8fa8x2a){var _0x8fa8x30=[];var _0x8fa8x31=[];var _0x8fa8x33=[];var _0x8fa8x36=_0x1615[65];_[_0x1615[45]](_0x8fa8x35,function(_0x8fa8x2d){if(_0x8fa8x2d[_0x1615[66]]){_[_0x1615[45]](_0x8fa8x2d.ReportJscriptyInputs,function(_0x8fa8x22){_0x8fa8x30[_0x1615[44]]({checkbox:true,value:_0x8fa8x22[_0x1615[42]],count:_0x8fa8x22[_0x1615[54]][_0x1615[46]]})})}});var _0x8fa8x32=[];for(var _0x8fa8x37=0;_0x8fa8x37< _0x8fa8x30[_0x1615[47]];_0x8fa8x37++){_0x8fa8x32[_0x8fa8x37]= _0x8fa8x30[_0x8fa8x37][_0x1615[46]];_0x8fa8x33[_0x8fa8x37]= _0x8fa8x30[_0x8fa8x37][_0x1615[67]];_0x8fa8x30[_0x8fa8x37][_0x1615[68]]= _0x8fa8x26?(_0x8fa8x30[_0x8fa8x37][_0x1615[46]]/ _0x8fa8x26)* 100:0};_0x8fa8x31[0]= _0x8fa8x32;_0x8fa8x25= {total:_0x8fa8x26,question_type:_[_0x1615[59]](_0x8fa8x35)[_0x1615[39]],question_id:_[_0x1615[59]](_0x8fa8x35)[_0x1615[38]],question_label:_[_0x1615[59]](_0x8fa8x35)[_0x1615[40]],question_text:_[_0x1615[59]](_0x8fa8x35)[_0x1615[41]],choices:_0x8fa8x30,graphData:_0x8fa8x31,graphLabels:_0x8fa8x33,graphType:_0x8fa8x36}})};return ReportJscriptyQuestion[_0x1615[50]]({where:{projectId:_0x8fa8x15[_0x1615[26]][_0x1615[25]],question_id:_0x8fa8x15[_0x1615[26]][_0x1615[69]],question_type:_0x1615[55]},attributes:[_0x1615[39],_0x1615[38],_0x1615[40],_0x1615[41]],include:[{model:ReportJscriptyInput,attributes:[_0x1615[42]]}]})})[_0x1615[15]](function(_0x8fa8x19){var _0x8fa8x28=[];if(_0x8fa8x19){var _0x8fa8x29=_[_0x1615[56]](_0x8fa8x19,_0x1615[38]);_[_0x1615[45]](_0x8fa8x29,function(_0x8fa8x1d,_0x8fa8x2a){var _0x8fa8x2b=[];_[_0x1615[45]](_0x8fa8x1d,function(_0x8fa8x2c){_0x8fa8x2b= _[_0x1615[58]](_0x8fa8x2b,_[_0x1615[57]](_0x8fa8x2c.ReportJscriptyInputs,_0x1615[42]))});_0x8fa8x28[_0x1615[44]]({question_id:_[_0x1615[59]](_0x8fa8x1d)[_0x1615[38]],labels:_0x8fa8x2b})});_[_0x1615[45]](_0x8fa8x28,function(_0x8fa8x2d){if(Object[_0x1615[60]](_0x8fa8x25)[_0x1615[47]]){_[_0x1615[45]](_0x8fa8x2d[_0x1615[61]],function(_0x8fa8x2e){var _0x8fa8x2f=_[_0x1615[34]](_0x8fa8x25[_0x1615[62]],{value:_0x8fa8x2e});if(!_0x8fa8x2f){_0x8fa8x25[_0x1615[62]][_0x1615[44]]({value:_0x8fa8x2e,count:0,percentage:0});_0x8fa8x25[_0x1615[63]][0][_0x1615[44]](0);_0x8fa8x25[_0x1615[64]][_0x1615[44]](_0x8fa8x2e)}})}else {var _0x8fa8x30=[];var _0x8fa8x31=[];var _0x8fa8x32=[];var _0x8fa8x33=[];_[_0x1615[45]](_0x8fa8x2d[_0x1615[61]],function(_0x8fa8x2e){_0x8fa8x30[_0x1615[44]]({value:_0x8fa8x2e,count:0,percentage:0});_0x8fa8x32[_0x1615[44]](0);_0x8fa8x33[_0x1615[44]](_0x8fa8x2e)});_0x8fa8x31[_0x1615[44]](_0x8fa8x32);var _0x8fa8x22=_0x8fa8x19[0];_0x8fa8x25= {total:_0x8fa8x26,question_type:_0x8fa8x22[_0x1615[39]],question_id:_0x8fa8x22[_0x1615[38]],question_label:_0x8fa8x22[_0x1615[40]],question_text:_0x8fa8x22[_0x1615[41]],choices:_0x8fa8x30,graphType:_0x1615[65],graphData:_0x8fa8x31,graphLabels:_0x8fa8x33}}})};return _0x8fa8xb[_0x1615[12]](201)[_0x1615[11]](_0x8fa8x25)})}else {if(_0x8fa8x27[_0x1615[54]][_0x1615[39]]== _0x1615[75]){return ReportJscriptyQuestion[_0x1615[50]]({where:{projectId:_0x8fa8x15[_0x1615[26]][_0x1615[25]],question_id:_0x8fa8x15[_0x1615[26]][_0x1615[69]]},attributes:[_0x1615[39],_0x1615[38],_0x1615[40],_0x1615[41],_0x1615[80],_0x1615[77],[sequelize[_0x1615[71]](_0x1615[46],sequelize[_0x1615[70]](_0x1615[77])),_0x1615[46]]],group:[_0x1615[38],_0x1615[77]]})[_0x1615[15]](function(_0x8fa8x27){_0x8fa8x23= _0x8fa8x27;return ReportJscriptyQuestion[_0x1615[50]]({where:{projectId:_0x8fa8x15[_0x1615[26]][_0x1615[25]],question_id:_0x8fa8x15[_0x1615[26]][_0x1615[69]],question_type:_0x1615[75],question_other_answer:{$ne:null}},attributes:[_0x1615[39],_0x1615[38],_0x1615[40],_0x1615[80],_0x1615[41],_0x1615[78],_0x1615[79],[sequelize[_0x1615[71]](_0x1615[46],sequelize[_0x1615[70]](_0x1615[79])),_0x1615[46]]],group:[_0x1615[38],_0x1615[79]]})})[_0x1615[15]](function(_0x8fa8x1a){if(_0x8fa8x1a){_[_0x1615[45]](_0x8fa8x1a,function(_0x8fa8x2d){_0x8fa8x23[_0x1615[44]](_0x8fa8x2d)})};var _0x8fa8x29=_[_0x1615[56]](_0x8fa8x23,_0x1615[38]);_[_0x1615[45]](_0x8fa8x29,function(_0x8fa8x35,_0x8fa8x2a){var _0x8fa8x30=[];var _0x8fa8x26=0;var _0x8fa8x31=[];var _0x8fa8x33=[];var _0x8fa8x36=_0x1615[76];_[_0x1615[45]](_0x8fa8x35,function(_0x8fa8x2d){if(_0x8fa8x2d[_0x1615[77]]){_0x8fa8x30[_0x1615[44]]({value:_0x8fa8x2d[_0x1615[77]],count:_0x8fa8x2d[_0x1615[54]][_0x1615[46]]});_0x8fa8x26= _0x8fa8x26+ _0x8fa8x2d[_0x1615[54]][_0x1615[46]]};if(_0x8fa8x2d[_0x1615[78]]){_0x8fa8x30[_0x1615[44]]({other_option:true,value:_0x8fa8x2d[_0x1615[79]],count:_0x8fa8x2d[_0x1615[54]][_0x1615[46]]})}});var _0x8fa8x38=_[_0x1615[59]](_0x8fa8x35)[_0x1615[80]]?JSON[_0x1615[81]](_[_0x1615[59]](_0x8fa8x35)[_0x1615[80]]):null;if(_0x8fa8x38){_[_0x1615[45]](_0x8fa8x38[_0x1615[82]],function(_0x8fa8x39){var _0x8fa8x3a=_[_0x1615[34]](_0x8fa8x30,{value:_0x8fa8x39});if(!_0x8fa8x3a){_0x8fa8x30[_0x1615[44]]({value:_0x8fa8x39,count:0,percentage:0})}})};var _0x8fa8x32=[];var _0x8fa8x3b=false;for(var _0x8fa8x37=0;_0x8fa8x37< _0x8fa8x30[_0x1615[47]];_0x8fa8x37++){if(!_0x8fa8x30[_0x8fa8x37][_0x1615[83]]){_0x8fa8x31[_0x8fa8x37]= _0x8fa8x30[_0x8fa8x37][_0x1615[46]];_0x8fa8x33[_0x8fa8x37]= _0x8fa8x30[_0x8fa8x37][_0x1615[67]];_0x8fa8x30[_0x8fa8x37][_0x1615[68]]= _0x8fa8x26?(_0x8fa8x30[_0x8fa8x37][_0x1615[46]]/ _0x8fa8x26)* 100:0}};_0x8fa8x25= {total:_0x8fa8x26,question_type:_[_0x1615[59]](_0x8fa8x35)[_0x1615[39]],question_id:_[_0x1615[59]](_0x8fa8x35)[_0x1615[38]],question_label:_[_0x1615[59]](_0x8fa8x35)[_0x1615[40]],question_text:_[_0x1615[59]](_0x8fa8x35)[_0x1615[41]],choices:_0x8fa8x30,graphData:_0x8fa8x31,graphLabels:_0x8fa8x33,graphType:_0x8fa8x36}});return _0x8fa8xb[_0x1615[12]](201)[_0x1615[11]](_0x8fa8x25)})}else {console[_0x1615[29]](_0x1615[84]);return _0x8fa8xb[_0x1615[24]](404)}}})[_0x1615[19]](function(_0x8fa8xc){console[_0x1615[29]](_0x8fa8xc);return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[85]]= function(_0x8fa8x15,_0x8fa8xb){var _0x8fa8x3c;var _0x8fa8x23;var _0x8fa8x3d;var _0x8fa8x34;return ReportJscriptyQuestion[_0x1615[50]]({where:{projectId:_0x8fa8x15[_0x1615[26]][_0x1615[25]],question_type:_0x1615[75]},attributes:[_0x1615[39],_0x1615[38],_0x1615[40],_0x1615[41],_0x1615[77],_0x1615[80],_0x1615[79],[sequelize[_0x1615[71]](_0x1615[46],sequelize[_0x1615[70]](_0x1615[77])),_0x1615[46]]],group:[_0x1615[38],_0x1615[77]]})[_0x1615[15]](function(_0x8fa8x1a){_0x8fa8x23= _0x8fa8x1a;return ReportJscriptyQuestion[_0x1615[50]]({where:{projectId:_0x8fa8x15[_0x1615[26]][_0x1615[25]],question_type:_0x1615[75],question_other_answer:{$ne:null}},attributes:[_0x1615[39],_0x1615[38],_0x1615[40],_0x1615[41],_0x1615[78],_0x1615[79],_0x1615[80],[sequelize[_0x1615[71]](_0x1615[46],sequelize[_0x1615[70]](_0x1615[78])),_0x1615[46]]],group:[_0x1615[38],_0x1615[78]]})})[_0x1615[15]](function(_0x8fa8x1a){_[_0x1615[45]](_0x8fa8x1a,function(_0x8fa8x2d){_0x8fa8x23[_0x1615[44]](_0x8fa8x2d)});var _0x8fa8x25=[];var _0x8fa8x36=_0x1615[76];var _0x8fa8x29=_[_0x1615[56]](_0x8fa8x23,_0x1615[38]);_[_0x1615[45]](_0x8fa8x29,function(_0x8fa8x35,_0x8fa8x2a){var _0x8fa8x26=0;var _0x8fa8x31=[];var _0x8fa8x33=[];var _0x8fa8x30=[];_[_0x1615[45]](_0x8fa8x35,function(_0x8fa8x2d){if(_0x8fa8x2d[_0x1615[77]]){_0x8fa8x30[_0x1615[44]]({value:_0x8fa8x2d[_0x1615[77]],count:_0x8fa8x2d[_0x1615[54]][_0x1615[46]]});_0x8fa8x26= _0x8fa8x26+ _0x8fa8x2d[_0x1615[54]][_0x1615[46]]};if(_0x8fa8x2d[_0x1615[78]]){_0x8fa8x30[_0x1615[44]]({other_option:true,value:_0x8fa8x2d[_0x1615[78]],count:_0x8fa8x2d[_0x1615[54]][_0x1615[46]]})}});var _0x8fa8x38=JSON[_0x1615[81]](_[_0x1615[59]](_0x8fa8x35)[_0x1615[80]]);if(_0x8fa8x38){_[_0x1615[45]](_0x8fa8x38[_0x1615[82]],function(_0x8fa8x39){var _0x8fa8x3a=_[_0x1615[34]](_0x8fa8x30,{value:_0x8fa8x39});if(!_0x8fa8x3a){_0x8fa8x30[_0x1615[44]]({value:_0x8fa8x39,count:0,percentage:0})}})};for(var _0x8fa8x37=0;_0x8fa8x37< _0x8fa8x30[_0x1615[47]];_0x8fa8x37++){if(!_0x8fa8x30[_0x8fa8x37][_0x1615[83]]&& (_0x8fa8x26!= 0)){_0x8fa8x30[_0x8fa8x37][_0x1615[68]]= (_0x8fa8x30[_0x8fa8x37][_0x1615[46]]/ _0x8fa8x26)* 100;_0x8fa8x31[_0x1615[44]](_0x8fa8x30[_0x8fa8x37][_0x1615[46]]);_0x8fa8x33[_0x1615[44]](_0x8fa8x30[_0x8fa8x37][_0x1615[67]])}};_0x8fa8x25[_0x1615[44]]({total:_0x8fa8x26,question_type:_[_0x1615[59]](_0x8fa8x35)[_0x1615[39]],question_id:_[_0x1615[59]](_0x8fa8x35)[_0x1615[38]],question_label:_[_0x1615[59]](_0x8fa8x35)[_0x1615[40]],question_other_label:_[_0x1615[59]](_0x8fa8x35)[_0x1615[79]],question_text:_[_0x1615[59]](_0x8fa8x35)[_0x1615[41]],choices:_0x8fa8x30,graphData:_0x8fa8x31,graphLabels:_0x8fa8x33,graphType:_0x8fa8x36})});_0x8fa8x3c= _0x8fa8x25;return ReportJscriptyQuestion[_0x1615[50]]({where:{projectId:_0x8fa8x15[_0x1615[26]][_0x1615[25]],question_type:_0x1615[55]},attributes:[_0x1615[25],_0x1615[39],_0x1615[38],_0x1615[40],_0x1615[41],_0x1615[77]],include:[{model:ReportJscriptyInput,where:{$or:[{input_type:_0x1615[72],input_value:_0x1615[73]},{input_type:{$ne:_0x1615[72]},input_value:{$ne:null}}]},attributes:[_0x1615[42],_0x1615[43],_0x1615[74],[sequelize[_0x1615[71]](_0x1615[46],sequelize[_0x1615[70]](_0x1615[42])),_0x1615[46]]]}],group:[_0x1615[38],_0x1615[42]]})})[_0x1615[15]](function(_0x8fa8x27){_0x8fa8x23= _0x8fa8x27;return ReportJscriptyQuestion[_0x1615[50]]({where:{projectId:_0x8fa8x15[_0x1615[26]][_0x1615[25]],question_type:_0x1615[55]},attributes:[_0x1615[38],[sequelize[_0x1615[71]](_0x1615[46],sequelize[_0x1615[70]](_0x1615[38])),_0x1615[46]]],group:[_0x1615[38]]})})[_0x1615[15]](function(_0x8fa8x1d){_0x8fa8x34= _0x8fa8x1d;var _0x8fa8x25=[];var _0x8fa8x29=_[_0x1615[56]](_0x8fa8x23,_0x1615[38]);_[_0x1615[45]](_0x8fa8x29,function(_0x8fa8x35,_0x8fa8x2a){var _0x8fa8x30=[];var _0x8fa8x26=0;_0x8fa8x26= _[_0x1615[34]](_0x8fa8x34,function(_0x8fa8x1d){return _0x8fa8x1d[_0x1615[38]]== _[_0x1615[59]](_0x8fa8x35)[_0x1615[38]]})[_0x1615[54]][_0x1615[46]];var _0x8fa8x31=[];var _0x8fa8x3f=[];var _0x8fa8x33=[];var _0x8fa8x36=_0x1615[65];_[_0x1615[45]](_0x8fa8x35,function(_0x8fa8x2d){var _0x8fa8x40=_0x8fa8x2d;_[_0x1615[45]](_0x8fa8x40.ReportJscriptyInputs,function(_0x8fa8x22){_0x8fa8x30[_0x1615[44]]({checkbox:true,value:_0x8fa8x22[_0x1615[42]],count:_0x8fa8x22[_0x1615[54]][_0x1615[46]]})})});var _0x8fa8x32=[];for(var _0x8fa8x37=0;_0x8fa8x37< _0x8fa8x30[_0x1615[47]];_0x8fa8x37++){_0x8fa8x32[_0x8fa8x37]= _0x8fa8x30[_0x8fa8x37][_0x1615[46]];_0x8fa8x30[_0x8fa8x37][_0x1615[68]]= (_0x8fa8x30[_0x8fa8x37][_0x1615[46]]/ _0x8fa8x26)* 100;_0x8fa8x33[_0x8fa8x37]= _0x8fa8x30[_0x8fa8x37][_0x1615[67]]};_0x8fa8x31[0]= _0x8fa8x32;_0x8fa8x3c[_0x1615[44]]({total:_0x8fa8x26,question_type:_[_0x1615[59]](_0x8fa8x35)[_0x1615[39]],question_id:_[_0x1615[59]](_0x8fa8x35)[_0x1615[38]],question_label:_[_0x1615[59]](_0x8fa8x35)[_0x1615[40]],question_text:_[_0x1615[59]](_0x8fa8x35)[_0x1615[41]],choices:_0x8fa8x30,graphData:_0x8fa8x31,graphLabels:_0x8fa8x33,graphType:_0x8fa8x36})});return ReportJscriptyQuestion[_0x1615[50]]({where:{projectId:_0x8fa8x15[_0x1615[26]][_0x1615[25]],question_type:_0x1615[55]},attributes:[_0x1615[25],_0x1615[38],_0x1615[40],_0x1615[41],_0x1615[39]],include:[{model:ReportJscriptyInput,attributes:[_0x1615[42]]}]})})[_0x1615[15]](function(_0x8fa8x19){var _0x8fa8x29=_[_0x1615[56]](_0x8fa8x19,_0x1615[38]);var _0x8fa8x3e=[];_[_0x1615[45]](_0x8fa8x29,function(_0x8fa8x1d,_0x8fa8x2a){var _0x8fa8x2b=[];_[_0x1615[45]](_0x8fa8x1d,function(_0x8fa8x2c){_0x8fa8x2b= _[_0x1615[58]](_0x8fa8x2b,_[_0x1615[57]](_0x8fa8x2c.ReportJscriptyInputs,_0x1615[42]))});_0x8fa8x3e[_0x1615[44]]({question_text:_[_0x1615[59]](_0x8fa8x1d)[_0x1615[41]],question_type:_[_0x1615[59]](_0x8fa8x1d)[_0x1615[39]],question_label:_[_0x1615[59]](_0x8fa8x1d)[_0x1615[40]],question_id:_[_0x1615[59]](_0x8fa8x1d)[_0x1615[38]],labels:_0x8fa8x2b})});_[_0x1615[45]](_0x8fa8x3e,function(_0x8fa8x2d){var _0x8fa8x1d=_[_0x1615[34]](_0x8fa8x3c,{"\x71\x75\x65\x73\x74\x69\x6F\x6E\x5F\x69\x64":_0x8fa8x2d[_0x1615[38]]});if(_0x8fa8x1d){_[_0x1615[45]](_0x8fa8x2d[_0x1615[61]],function(_0x8fa8x2e){var _0x8fa8x2f=_[_0x1615[34]](_0x8fa8x1d[_0x1615[62]],{value:_0x8fa8x2e});if(!_0x8fa8x2f){_0x8fa8x1d[_0x1615[62]][_0x1615[44]]({value:_0x8fa8x2e,count:0,percentage:0});_0x8fa8x1d[_0x1615[63]][0][_0x1615[44]](0);_0x8fa8x1d[_0x1615[64]][_0x1615[44]](_0x8fa8x2e)}})}else {var _0x8fa8x30=[];var _0x8fa8x31=[];var _0x8fa8x32=[];var _0x8fa8x33=[];_[_0x1615[45]](_0x8fa8x2d[_0x1615[61]],function(_0x8fa8x2e){_0x8fa8x30[_0x1615[44]]({value:_0x8fa8x2e,count:0,percentage:0})});var _0x8fa8x26=_[_0x1615[34]](_0x8fa8x34,function(_0x8fa8x1d){return _0x8fa8x1d[_0x1615[38]]== _0x8fa8x2d[_0x1615[38]]})[_0x1615[54]][_0x1615[46]];_0x8fa8x3c[_0x1615[44]]({total:_0x8fa8x26,question_type:_0x8fa8x2d[_0x1615[39]],question_id:_0x8fa8x2d[_0x1615[38]],question_label:_0x8fa8x2d[_0x1615[40]],question_text:_0x8fa8x2d[_0x1615[41]],choices:_0x8fa8x30,graphType:_0x1615[65],graphData:_0x8fa8x31,graphLabels:_0x8fa8x33})}});return _0x8fa8xb[_0x1615[12]](201)[_0x1615[11]](_0x8fa8x3c)})[_0x1615[19]](function(_0x8fa8xc){console[_0x1615[29]](_0x8fa8xc);return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[86]]= function(_0x8fa8x15,_0x8fa8xb){return JscriptyProject[_0x1615[86]](_0x8fa8x15[_0x1615[93]])[_0x1615[15]](function(_0x8fa8x18){return _0x8fa8xb[_0x1615[12]](201)[_0x1615[11]](_0x8fa8x18)})[_0x1615[19]](sequelize.UniqueConstraintError,function(_0x8fa8xc){if(_0x8fa8xc[_0x1615[88]][_0x1615[87]]){_0x8fa8xc[_0x1615[89]]= _0x1615[90];_0x8fa8xc[_0x1615[91]]= _0x1615[92]};return handleError(_0x8fa8xb,_0x8fa8xc)})[_0x1615[19]](function(_0x8fa8xc){return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[94]]= function(_0x8fa8x15,_0x8fa8xb){return ReportJscriptySession[_0x1615[86]](_0x8fa8x15[_0x1615[93]])[_0x1615[15]](function(_0x8fa8x41){return _0x8fa8xb[_0x1615[12]](201)[_0x1615[11]](_0x8fa8x41)})[_0x1615[19]](function(_0x8fa8xc){return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[95]]= function(_0x8fa8x15,_0x8fa8xb){return ReportJscriptyQuestion[_0x1615[17]]({where:{sessionId:_0x8fa8x15[_0x1615[26]][_0x1615[33]]}})[_0x1615[15]](function(){var _0x8fa8x42=[];for(var _0x8fa8x37=0;_0x8fa8x37< _0x8fa8x15[_0x1615[93]][_0x1615[47]];_0x8fa8x37++){_0x8fa8x42[_0x8fa8x37]= ReportJscriptyQuestion[_0x1615[86]](_0x8fa8x15[_0x1615[93]][_0x8fa8x37],{include:[{model:ReportJscriptyInput}]})};return Promise[_0x1615[96]](_0x8fa8x42)})[_0x1615[15]](function(_0x8fa8x27){return _0x8fa8xb[_0x1615[24]](201)})[_0x1615[19]](function(_0x8fa8xc){return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[97]]= function(_0x8fa8x15,_0x8fa8xb){if(_0x8fa8x15[_0x1615[93]][_0x1615[25]]){delete _0x8fa8x15[_0x1615[93]][_0x1615[25]]};return JscriptyProject[_0x1615[27]](_0x8fa8x15[_0x1615[26]][_0x1615[25]])[_0x1615[15]](function(_0x8fa8x18){if(!_0x8fa8x18){return _0x8fa8xb[_0x1615[24]](404)};var _0x8fa8x13=_[_0x1615[98]](_0x8fa8x18,_0x8fa8x15[_0x1615[93]]);return _0x8fa8x13[_0x1615[99]]()})[_0x1615[15]](function(_0x8fa8x18){return _0x8fa8xb[_0x1615[12]](200)[_0x1615[11]](_0x8fa8x18)})[_0x1615[19]](function(_0x8fa8xc){return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[100]]= function(_0x8fa8x15,_0x8fa8xb){return ReportJscriptySession[_0x1615[27]](_0x8fa8x15[_0x1615[26]][_0x1615[33]])[_0x1615[15]](function(_0x8fa8x1b){if(!_0x8fa8x1b){return _0x8fa8xb[_0x1615[24]](404)};var _0x8fa8x13=_[_0x1615[98]](_0x8fa8x1b,_0x8fa8x15[_0x1615[93]]);return _0x8fa8x13[_0x1615[99]]()})[_0x1615[15]](function(_0x8fa8x41){return _0x8fa8xb[_0x1615[12]](200)[_0x1615[11]](_0x8fa8x41)})[_0x1615[19]](function(_0x8fa8xc){return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[17]]= function(_0x8fa8x15,_0x8fa8xb){return JscriptyProject[_0x1615[27]](_0x8fa8x15[_0x1615[26]][_0x1615[25]])[_0x1615[15]](function(_0x8fa8x18){if(!_0x8fa8x18){return _0x8fa8xb[_0x1615[24]](404)};return _0x8fa8x18[_0x1615[17]]()})[_0x1615[15]](function(){return _0x8fa8xb[_0x1615[24]](204)})[_0x1615[19]](function(_0x8fa8xc){return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[101]]= function(_0x8fa8x15,_0x8fa8xb){return ReportJscriptySession[_0x1615[34]]({where:{session_id:_0x8fa8x15[_0x1615[26]][_0x1615[33]]}})[_0x1615[15]](function(_0x8fa8x1b){if(!_0x8fa8x1b){return _0x8fa8xb[_0x1615[24]](404)};return _0x8fa8x1b[_0x1615[17]]()})[_0x1615[15]](function(){return _0x8fa8xb[_0x1615[24]](204)})[_0x1615[19]](function(_0x8fa8xc){return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[102]]= function(_0x8fa8x15,_0x8fa8xb){return JscriptyProject[_0x1615[17]]({where:{id:_0x8fa8x15[_0x1615[20]][_0x1615[103]]},individualHooks:true})[_0x1615[15]](function(){return _0x8fa8xb[_0x1615[24]](204)})[_0x1615[19]](function(_0x8fa8xc){return handleError(_0x8fa8xb,_0x8fa8xc)})};exports[_0x1615[104]]= function(_0x8fa8x15,_0x8fa8xb,_0x8fa8x16){return JscriptyProject[_0x1615[27]](_0x8fa8x15[_0x1615[26]][_0x1615[25]])[_0x1615[15]](function(_0x8fa8x18){if(!_0x8fa8x18){return _0x8fa8xb[_0x1615[24]](404)};_0x8fa8xb[_0x1615[109]]({"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E":_0x1615[105]+ _0x8fa8x15[_0x1615[20]][_0x1615[106]]+ _0x1615[107],"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65":_0x1615[108]});return _0x8fa8xb[_0x1615[11]](_0x8fa8x18[_0x1615[110]])})[_0x1615[19]](function(_0x8fa8xc){return handleError(_0x8fa8xb,_0x8fa8xc)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/jscripty/projects -> index + * POST /api/jscripty/projects -> create + * GET /api/jscripty/projects/:id -> show + * PUT /api/jscripty/projects/:id -> update + * DELETE /api/jscripty/projects/:id -> destroy + */ + +'use strict'; +var xml = require('xml2js'); + +var _ = require('lodash'); + +var JscriptyProject = require('../../models').JscriptyProject; +var Util = require('../../config/util'); +var sequelize = require('../../models').sequelize; +var ReportJscriptySession = require('../../models').ReportJscriptySession; +var ReportJscriptyQuestion = require('../../models').ReportJscriptyQuestion; +var ReportJscriptyInput = require('../../models').ReportJscriptyInput; +var Promise = require('bluebird'); + +function handleError(res, err) { + return res.status(500).send(err); +} + + + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of JscriptyProjects + +exports.index = function(req, res, next) { + return JscriptyProject + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.show = function(req, res) { + return JscriptyProject + .findById(req.params.id) + .then(function(jscripty_project) { + if (!jscripty_project) { + return res.sendStatus(404); + } + return res.send(jscripty_project); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Gets a all ReportJscriptySession from the DB +exports.showSessions = function(req, res) { + return ReportJscriptySession + .scope({ + method: ['sessions', req.params.id] + }) + .findAndCountAll(Util.getQuery(req.query)) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + } + // Gets a one ReportJscriptySession from the DB +exports.showSession = function(req, res) { + return ReportJscriptySession + .find({ + where: { + projectId: req.params.id, + session_id: req.params.sessionId + }, + include: [{ + model: ReportJscriptyQuestion, + include: [{ + model: ReportJscriptyInput + }] + }] + + }) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + } + // exports.showOther = function(req, res) { + // return ReportJscriptyQuestion + // .scope({ + // method: ['otherOption', req.params.id, req.params.questionId] + // }) + // .findAndCountAll(Util.getQuery(req.query)) + // .then(handleEntityNotFound(res)) + // .then(responseWithResult(res)) + // .catch(function(err) { + // console.log(err); + // return handleError(res, err); + // }); + // } +exports.showInputs = function(req, res) { + var inputs = { + count: 0, + rows: [] + }; + return ReportJscriptySession + .scope({ + method: ['inputs', req.params.id] + }) + .findAndCountAll(Util.getQuery(req.query)) + .then(function(response) { + _.forEach(response.rows, function(session) { + var session_id = session.session_id; + _.forEach(session.ReportJscriptyQuestions, function(question) { + var question_id = question.question_id; + var question_type = question.question_type; + var question_label = question.question_label; + var question_text = question.question_text; + _.forEach(question.ReportJscriptyInputs, function(input) { + inputs.rows.push({ + session_id: session_id, + question_type: question_type, + question_id: question_id, + question_label: question_label, + question_text: question_text, + input_label: input.input_label, + input_value: input.input_value + }) + }) + }) + }) + inputs.count = inputs.rows.length; + return inputs; + }) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +} + +// Gets a all ReportJscriptyQuestion from the DB +exports.showQuestions = function(req, res) { + return ReportJscriptyQuestion + .findAll({ + where: { + projectId: req.params.id + }, + include: [{ + model: ReportJscriptyInput + }], + + }) + .then(function(jscripty_questions) { + if (!jscripty_questions) { + return res.sendStatus(404); + } + return res.status(200).send(jscripty_questions); + }) + .then(handleEntityNotFound(res)) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +} + + +// Gets summary of ReportJscriptyQuestion from the DB + +exports.showSummary = function(req, res) { + return ReportJscriptyQuestion + .scope({ + method: ['summary', req.params.id] + }) + .findAndCountAll(Util.getQuery(req.query)) + .then(handleEntityNotFound(res)) + .then(function(jscripty_summary) { + return res.status(200).send(jscripty_summary); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + +} + +exports.showQuestionDetail = function(req, res) { + var temp = {}; + var jscripty_questions; + var total = 0; + return ReportJscriptyQuestion + .find({ + where: { + projectId: req.params.id, + question_id: req.params.questionId + }, + attributes: ['question_type'] + }) + .then(function(jscripty_question) { + if (!jscripty_question) { + return res.sendStatus(404); + } + // jscripty_questions = jscripty_question; + if (jscripty_question.dataValues.question_type == 'input') { + return ReportJscriptyQuestion + .findAll({ + where: { + projectId: req.params.id, + question_id: req.params.questionId + }, + attributes: ['question_type', 'question_id', 'question_label', 'question_text'], + include: [{ + model: ReportJscriptyInput, + where: { + $or: [{ + input_type: 'checkbox', + input_value: '1' + }, { + input_type: { + $ne: 'checkbox' + }, + input_value: { + $ne: null + } + }] + }, + attributes: ['input_label', 'input_value', 'input_type', [sequelize.fn('count', sequelize.col('input_label')), + 'count' + ]] + }], + group: ['question_id', 'input_label'] + + }) + .then(function(jscripty_question) { + jscripty_questions = jscripty_question; + return ReportJscriptyQuestion + .findAll({ + where: { + projectId: req.params.id, + question_id: req.params.questionId, + question_type: 'input' + }, + attributes: ['question_id', [sequelize.fn('count', sequelize.col('question_id')), + 'count' + ]], + group: ['question_id'] + }) + }) + + .then(function(question_count) { + total = question_count[0].dataValues.count; + + if (jscripty_questions) { + var grouped = _.groupBy(jscripty_questions, 'question_id'); + _.forEach(grouped, function(value, id) { + var answers_count = []; + var graphData = []; + var graphLabels = []; + var graphType = 'bar'; + _.forEach(value, function(element) { + if (element.ReportJscriptyInputs) { + _.forEach(element.ReportJscriptyInputs, function(input) { + answers_count.push({ + checkbox: true, + value: input.input_label, + count: input.dataValues.count + }) + + }) + } + }); + var tempGraphdata = []; + for (var i = 0; i < answers_count.length; i++) { + tempGraphdata[i] = answers_count[i].count; + graphLabels[i] = answers_count[i].value; + answers_count[i].percentage = total ? (answers_count[i].count / total) * 100 : 0; + } + graphData[0] = tempGraphdata; + temp = { + total: total, + question_type: _.last(value).question_type, + question_id: _.last(value).question_id, + question_label: _.last(value).question_label, + question_text: _.last(value).question_text, + choices: answers_count, + graphData: graphData, + graphLabels: graphLabels, + graphType: graphType + }; + }); + } + + return ReportJscriptyQuestion + .findAll({ + where: { + projectId: req.params.id, + question_id: req.params.questionId, + question_type: 'input' + }, + attributes: ['question_type', 'question_id', 'question_label', 'question_text'], + include: [{ + model: ReportJscriptyInput, + attributes: ['input_label'] + }] + }) + + }) + .then(function(inputs) { + var input_labels = []; + if (inputs) { + var grouped = _.groupBy(inputs, 'question_id'); + _.forEach(grouped, function(question, id) { + var allLabels = []; + _.forEach(question, function(item) { + allLabels = _.union(allLabels, _.map(item.ReportJscriptyInputs, 'input_label')); + }); + input_labels.push({ + question_id: _.last(question).question_id, + labels: allLabels + }); + }) + _.forEach(input_labels, function(element) { + if (Object.keys(temp).length) { + _.forEach(element.labels, function(label) { + var input_label = _.find(temp.choices, { + value: label + }); + if (!input_label) { + temp.choices.push({ + value: label, + count: 0, + percentage: 0 + }) + temp.graphData[0].push(0); + temp.graphLabels.push(label); + } + }); + } else { + var answers_count = []; + var graphData = []; + var tempGraphdata = []; + var graphLabels = []; + _.forEach(element.labels, function(label) { + answers_count.push({ + value: label, + count: 0, + percentage: 0 + }) + tempGraphdata.push(0); + graphLabels.push(label); + + }); + graphData.push(tempGraphdata); + var input = inputs[0]; + temp = { + total: total, + question_type: input.question_type, + question_id: input.question_id, + question_label: input.question_label, + question_text: input.question_text, + choices: answers_count, + graphType: 'bar', + graphData: graphData, + graphLabels: graphLabels + + }; + } + }) + } + return res.status(201).send(temp); + + }) + + } else if (jscripty_question.dataValues.question_type == 'question') { + + return ReportJscriptyQuestion + .findAll({ + where: { + projectId: req.params.id, + question_id: req.params.questionId + }, + attributes: ['question_type', 'question_id', 'question_label', 'question_text', 'question_options', 'question_answer', [sequelize.fn('count', sequelize.col('question_answer')), + 'count' + ]], + group: ['question_id', 'question_answer'] + + }) + .then(function(jscripty_question) { + + jscripty_questions = jscripty_question; + return ReportJscriptyQuestion + .findAll({ + where: { + projectId: req.params.id, + question_id: req.params.questionId, + question_type: 'question', + question_other_answer: { + $ne: null + } + }, + attributes: ['question_type', 'question_id', 'question_label', 'question_options', 'question_text', 'question_other_answer', 'question_other_label', [sequelize.fn('count', + sequelize.col( + 'question_other_label')), + 'count' + ]], + group: ['question_id', 'question_other_label'] + + }) + }) + .then(function(response) { + if (response) { + _.forEach(response, function(element) { + jscripty_questions.push(element); + }) + } + + var grouped = _.groupBy(jscripty_questions, 'question_id'); + _.forEach(grouped, function(value, id) { + var answers_count = []; + var total = 0; + var graphData = []; + var graphLabels = []; + var graphType = 'pie'; + _.forEach(value, function(element) { + + if (element.question_answer) { + answers_count.push({ + value: element.question_answer, + count: element.dataValues.count + }) + total = total + element.dataValues.count; + + } + if (element.question_other_answer) { + answers_count.push({ + other_option: true, + value: element.question_other_label, + count: element.dataValues.count + }) + } + + }); + var question_options = _.last(value).question_options ? JSON.parse(_.last(value).question_options) : null; + if (question_options) { + _.forEach(question_options.options, function(option) { + var edge_label = _.find(answers_count, { + value: option + }); + + if (!edge_label) { + answers_count.push({ + value: option, + count: 0, + percentage: 0 + }); + + } + }); + } + var tempGraphdata = []; + var input_type = false + for (var i = 0; i < answers_count.length; i++) { + if (!answers_count[i].other_option) { + graphData[i] = answers_count[i].count; + graphLabels[i] = answers_count[i].value; + answers_count[i].percentage = total ? (answers_count[i].count / total) * 100 : 0; + } + } + + temp = { + total: total, + question_type: _.last(value).question_type, + question_id: _.last(value).question_id, + question_label: _.last(value).question_label, + question_text: _.last(value).question_text, + choices: answers_count, + graphData: graphData, + graphLabels: graphLabels, + graphType: graphType + }; + }); + return res.status(201).send(temp); + }) + } else { + console.log('question type not recognized'); + return res.sendStatus(404); + } + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +} + +// Gets detail of ReportJscriptyQuestion from the DB +exports.showDetail = function(req, res) { + var temp_questions; + var jscripty_questions; + var temp_inputs; + var question_count; + + return ReportJscriptyQuestion + .findAll({ + + where: { + projectId: req.params.id, + question_type: 'question' + }, + attributes: ['question_type', 'question_id', 'question_label', 'question_text', 'question_answer', 'question_options', 'question_other_label', [sequelize.fn('count', sequelize.col( + 'question_answer')), + 'count' + ]], + group: ['question_id', 'question_answer'] + + }) + .then(function(response) { + jscripty_questions = response; + return ReportJscriptyQuestion + .findAll({ + where: { + projectId: req.params.id, + question_type: 'question', + question_other_answer: { + $ne: null + } + }, + attributes: ['question_type', 'question_id', 'question_label', 'question_text', 'question_other_answer', 'question_other_label', 'question_options', [sequelize.fn('count', sequelize.col( + 'question_other_answer')), + 'count' + ]], + group: ['question_id', 'question_other_answer'] + + // attributes: ['question_type', 'question_id', 'question_label', 'question_text', 'question_other_answer', 'question_other_label', 'question_options', [sequelize.fn('count', sequelize.col( + // 'question_other_label')), + // 'count' + // ]], + // group: ['question_id', 'question_other_label'] + + }) + }) + .then(function(response) { + _.forEach(response, function(element) { + jscripty_questions.push(element); + }) + var temp = []; + var graphType = 'pie'; + + var grouped = _.groupBy(jscripty_questions, 'question_id'); + _.forEach(grouped, function(value, id) { + var total = 0; + var graphData = []; + var graphLabels = []; + var answers_count = []; + + _.forEach(value, function(element) { + if (element.question_answer) { + answers_count.push({ + value: element.question_answer, + count: element.dataValues.count + }) + total = total + element.dataValues.count; + } + if (element.question_other_answer) { + answers_count.push({ + other_option: true, + value: element.question_other_answer, + count: element.dataValues.count + }) + } + + }); + var question_options = JSON.parse(_.last(value).question_options); + if (question_options) { + _.forEach(question_options.options, function(option) { + var edge_label = _.find(answers_count, { + value: option + }); + if (!edge_label) { + answers_count.push({ + value: option, + count: 0, + percentage: 0 + }); + } + }); + } + for (var i = 0; i < answers_count.length; i++) { + + if (!answers_count[i].other_option && (total != 0)) { + answers_count[i].percentage = (answers_count[i].count / total) * 100; + graphData.push(answers_count[i].count); + graphLabels.push(answers_count[i].value); + } + + } + + temp.push({ + total: total, + question_type: _.last(value).question_type, + question_id: _.last(value).question_id, + question_label: _.last(value).question_label, + question_other_label: _.last(value).question_other_label, + question_text: _.last(value).question_text, + choices: answers_count, + graphData: graphData, + graphLabels: graphLabels, + graphType: graphType + }) + + }); + temp_questions = temp; + return ReportJscriptyQuestion + .findAll({ + where: { + projectId: req.params.id, + question_type: 'input' + }, + attributes: ['id', 'question_type', 'question_id', 'question_label', 'question_text', 'question_answer'], + include: [{ + model: ReportJscriptyInput, + where: { + $or: [{ + input_type: 'checkbox', + input_value: '1' + }, { + input_type: { + $ne: 'checkbox' + }, + input_value: { + $ne: null + } + }] + + }, + attributes: ['input_label', 'input_value', 'input_type', [sequelize.fn('count', sequelize.col('input_label')), + 'count' + ]] + }], + group: ['question_id', 'input_label'] + }) + + }) + .then(function(jscripty_question) { + jscripty_questions = jscripty_question; + return ReportJscriptyQuestion + .findAll({ + where: { + projectId: req.params.id, + question_type: 'input' + }, + attributes: ['question_id', [sequelize.fn('count', sequelize.col('question_id')), + 'count' + ]], + group: ['question_id'] + }) + }) + .then(function(question) { + question_count = question; + var temp = []; + var grouped = _.groupBy(jscripty_questions, 'question_id'); + _.forEach(grouped, function(value, id) { + var answers_count = []; + var total = 0; + total = _.find(question_count, function(question) { + return question.question_id == _.last(value).question_id; + }).dataValues.count; + var graphData = []; + var graphData2 = []; + var graphLabels = []; + var graphType = 'bar'; + _.forEach(value, function(element) { + var elemt = element; + _.forEach(elemt.ReportJscriptyInputs, function(input) { + answers_count.push({ + checkbox: true, + value: input.input_label, + count: input.dataValues.count + }) + }) + }); + var tempGraphdata = []; + for (var i = 0; i < answers_count.length; i++) { + tempGraphdata[i] = answers_count[i].count; + answers_count[i].percentage = (answers_count[i].count / total) * 100; + graphLabels[i] = answers_count[i].value; + } + graphData[0] = tempGraphdata; + temp_questions.push({ + total: total, + question_type: _.last(value).question_type, + question_id: _.last(value).question_id, + question_label: _.last(value).question_label, + question_text: _.last(value).question_text, + choices: answers_count, + graphData: graphData, + graphLabels: graphLabels, + graphType: graphType + }) + }); + return ReportJscriptyQuestion + .findAll({ + where: { + projectId: req.params.id, + question_type: 'input' + }, + attributes: ['id', 'question_id', 'question_label', 'question_text', 'question_type'], + include: [{ + model: ReportJscriptyInput, + attributes: ['input_label'] + }], + }) + }) + .then(function(inputs) { + var grouped = _.groupBy(inputs, 'question_id'); + var labels = []; + _.forEach(grouped, function(question, id) { + var allLabels = []; + _.forEach(question, function(item) { + allLabels = _.union(allLabels, _.map(item.ReportJscriptyInputs, 'input_label')); + }); + labels.push({ + question_text: _.last(question).question_text, + question_type: _.last(question).question_type, + question_label: _.last(question).question_label, + question_id: _.last(question).question_id, + labels: allLabels + }); + }) + + _.forEach(labels, function(element) { + var question = _.find(temp_questions, { + 'question_id': element.question_id + }); + if (question) { + _.forEach(element.labels, function(label) { + var input_label = _.find(question.choices, { + value: label + }); + if (!input_label) { + question.choices.push({ + value: label, + count: 0, + percentage: 0 + }); + question.graphData[0].push(0); + question.graphLabels.push(label); + } + }); + } else { + var answers_count = []; + var graphData = []; + var tempGraphdata = []; + var graphLabels = []; + _.forEach(element.labels, function(label) { + answers_count.push({ + value: label, + count: 0, + percentage: 0 + }) + // tempGraphdata.push(0); + // graphLabels.push(label); + }); + // graphData.push(tempGraphdata); + var total = _.find(question_count, function(question) { + return question.question_id == element.question_id; + }).dataValues.count; + temp_questions.push({ + total: total, + question_type: element.question_type, + question_id: element.question_id, + question_label: element.question_label, + question_text: element.question_text, + choices: answers_count, + graphType: 'bar', + graphData: graphData, + graphLabels: graphLabels + }) + } + }) + return res.status(201).send(temp_questions); + }) + + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + // }) + + } + // Creates a new JscriptyProject in the DB +exports.create = function(req, res) { + return JscriptyProject + .create(req.body) + .then(function(jscripty_project) { + return res.status(201).send(jscripty_project); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + if (err.fields.name) { + err.message = 'Project name already exists'; + err.translatedMessage = 'MESSAGE_EXIST_PROJECT' + } + return handleError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new ReportJscriptySession in the DB +exports.createSession = function(req, res) { + return ReportJscriptySession + .create(req.body) + .then(function(jscripty_session) { + return res.status(201).send(jscripty_session); + }) + .catch(function(err) { + return handleError(res, err); + }); + + } + // Creates a new ReportJscriptyQuestions in the DB +exports.createQuestions = function(req, res) { + return ReportJscriptyQuestion + .destroy({ + where: { + sessionId: req.params.sessionId + } + }) + .then(function() { + var _promises = []; + for (var i = 0; i < req.body.length; i++) { + _promises[i] = ReportJscriptyQuestion.create(req.body[i], { + include: [{ + model: ReportJscriptyInput + }] + }) + } + return Promise + .all(_promises); + }) + .then(function(jscripty_question) { + return res.sendStatus(201); + }) + .catch(function(err) { + return handleError(res, err); + }); + } + // Updates an existing JscriptyProject in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return JscriptyProject + .findById(req.params.id) + .then(function(jscripty_project) { + if (!jscripty_project) { + return res.sendStatus(404); + } + var updated = _.merge(jscripty_project, req.body); + return updated.save(); + }) + .then(function(jscripty_project) { + return res.status(200).send(jscripty_project); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Updates an existing ReportJscriptySession in the DB +exports.updateSession = function(req, res) { + return ReportJscriptySession + .findById(req.params.sessionId) + .then(function(session) { + if (!session) { + return res.sendStatus(404); + } + var updated = _.merge(session, req.body); + return updated.save(); + }) + .then(function(jscripty_session) { + return res.status(200).send(jscripty_session); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Deletes a JscriptyProject from the DB +exports.destroy = function(req, res) { + return JscriptyProject + .findById(req.params.id) + .then(function(jscripty_project) { + if (!jscripty_project) { + return res.sendStatus(404); + } + return jscripty_project.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +exports.destroySession = function(req, res) { + return ReportJscriptySession + .find({ + where: { + session_id: req.params.sessionId + } + }) + .then(function(session) { + if (!session) { + return res.sendStatus(404); + } + return session.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a jscripty_project from the DB. +exports.bulkDestroy = function(req, res) { + return JscriptyProject + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +exports.download = function(req, res, next) { + return JscriptyProject + .findById(req.params.id) + .then(function(jscripty_project) { + if (!jscripty_project) { + return res.sendStatus(404); + } + // console.log(req.query.filename); + res.set({ + "Content-Disposition": "attachment; filename=\"" + req.query.filename + + ".xml\"", + "Content-Type": "txt/xml" + }); + return res.send(jscripty_project.production); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// exports.projectJson = function(req, res, next) { +// JscriptyProject +// .findById(req.params.id) +// .then(function(jscripty_project) { +// if (!jscripty_project) { +// return res.sendStatus(404); +// } +// +// xml.parseString(jscripty_project.production, { +// normalizeTags: true, +// explicitArray: false +// }, function(err, result) { +// console.log(result); +// return res.status(200).send(result); +// +// }); +// }) +// .catch(function(err) { +// return handleError(res, err); +// }); +// }; diff --git a/server/api/jscripty_project/jscripty_project.events.js b/server/api/jscripty_project/jscripty_project.events.js index bae5c6f..fe91bd8 100644 --- a/server/api/jscripty_project/jscripty_project.events.js +++ b/server/api/jscripty_project/jscripty_project.events.js @@ -1 +1,36 @@ -var _0x8401=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4A\x73\x63\x72\x69\x70\x74\x79\x50\x72\x6F\x6A\x65\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x8401[0];const EventEmitter=require(_0x8401[1]);const JscriptyProject=require(_0x8401[3])[_0x8401[2]];var JscriptyProjectEvents= new EventEmitter();JscriptyProjectEvents[_0x8401[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x8401[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x8401[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x8401[6]};for(var e in events){var event=events[e];JscriptyProject[_0x8401[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xed64x8,_0xed64x9,_0xed64xa){JscriptyProjectEvents[_0x8401[10]](event+ _0x8401[8]+ _0xed64x8[_0x8401[9]],_0xed64x8);JscriptyProjectEvents[_0x8401[10]](event,_0xed64x8);_0xed64xa(null)}}module[_0x8401[11]]= JscriptyProjectEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const JscriptyProject = require('../../models').JscriptyProject; + +var JscriptyProjectEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +JscriptyProjectEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + JscriptyProject.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + JscriptyProjectEvents.emit(event + ':' + doc._id, doc); + JscriptyProjectEvents.emit(event, doc); + done(null); + } +} + +module.exports = JscriptyProjectEvents; diff --git a/server/api/jscripty_project/jscripty_project.socket.js b/server/api/jscripty_project/jscripty_project.socket.js index 1929dc0..9911b1a 100644 --- a/server/api/jscripty_project/jscripty_project.socket.js +++ b/server/api/jscripty_project/jscripty_project.socket.js @@ -1 +1,28 @@ -var _0x91d4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x70\x72\x6F\x6A\x65\x63\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x91d4[0];const JscriptyProjectEvents=require(_0x91d4[1]);var events=[_0x91d4[2],_0x91d4[3]];exports[_0x91d4[4]]= function(_0x74d6x3){for(var _0x74d6x4=0,_0x74d6x5=events[_0x91d4[5]];_0x74d6x4< _0x74d6x5;_0x74d6x4++){var _0x74d6x6=events[_0x74d6x4];var _0x74d6x7=createListener(_0x91d4[6]+ _0x74d6x6,_0x74d6x3);JscriptyProjectEvents[_0x91d4[7]](_0x74d6x6,_0x74d6x7);_0x74d6x3[_0x91d4[7]](_0x91d4[8],removeListener(_0x74d6x6,_0x74d6x7))}};function createListener(_0x74d6x6,_0x74d6x3){return function(_0x74d6x9){_0x74d6x3[_0x91d4[9]](_0x74d6x6,_0x74d6x9)}}function removeListener(_0x74d6x6,_0x74d6x7){return function(){JscriptyProjectEvents[_0x91d4[10]](_0x74d6x6,_0x74d6x7)}} \ No newline at end of file +'use strict'; + +const JscriptyProjectEvents = require('./jscripty_project.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('jscripty_project:' + event, socket); + + JscriptyProjectEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + JscriptyProjectEvents.removeListener(event, listener); + }; +} diff --git a/server/api/license/index.js b/server/api/license/index.js index bf97b86..f0a2983 100644 --- a/server/api/license/index.js +++ b/server/api/license/index.js @@ -1 +1,12 @@ -var _0x787b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x72\x65\x71\x75\x65\x73\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x72\x65\x71\x75\x65\x73\x74","\x70\x6F\x73\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x787b[0];var express=require(_0x787b[1]);var auth=require(_0x787b[2]);var controller=require(_0x787b[3]);var router=express.Router();router[_0x787b[6]](_0x787b[4],controller[_0x787b[5]]);router[_0x787b[10]](_0x787b[7],auth[_0x787b[8]](),controller[_0x787b[9]]);module[_0x787b[11]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./license.controller'); + +var router = express.Router(); + +router.get('/', controller.index); +router.post('/request', auth.isAuthenticated(), controller.request); + +module.exports = router; diff --git a/server/api/license/license.controller.js b/server/api/license/license.controller.js index e301236..a5d47ec 100644 --- a/server/api/license/license.controller.js +++ b/server/api/license/license.controller.js @@ -1 +1,135 @@ -var _0x147b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x63\x72\x79\x70\x74\x6F","\x6D\x6F\x6D\x65\x6E\x74","\x72\x65\x71\x75\x65\x73\x74\x2D\x70\x72\x6F\x6D\x69\x73\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x4C\x69\x63\x65\x6E\x73\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x65\x74\x74\x69\x6E\x67","\x6C\x6F\x67","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x64\x65\x6D\x6F\x4C\x69\x63\x65\x6E\x73\x65","\x74\x6F\x6B\x65\x6E","\x6C\x69\x63\x65\x6E\x73\x65","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x67\x65\x74\x55\x75\x69\x64","\x6A\x73\x6F\x6E","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x65\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x64\x61\x74\x61\x31","\x64\x65\x63\x72\x79\x70\x74","\x70\x61\x72\x73\x65","\x64\x65\x63\x72\x79\x70\x74\x20\x65\x72\x72\x6F\x72","\x64\x61\x74\x61\x32","\x61\x65\x73\x2D\x32\x35\x36\x2D\x63\x74\x72","\x73\x65\x63\x72\x65\x74","\x73\x65\x73\x73\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x44\x65\x63\x69\x70\x68\x65\x72","\x62\x61\x73\x65\x36\x34","\x75\x74\x66\x38","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x61\x6C","\x65\x78\x70\x69\x72\x61\x74\x69\x6F\x6E\x54\x69\x6D\x65","\x64\x61\x79\x73","\x64\x69\x66\x66","\x74\x6F\x6B\x65\x6E\x32","\x6D\x65\x72\x67\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x72\x65\x71\x75\x65\x73\x74","\x73\x74\x61\x74\x75\x73\x43\x6F\x64\x65","\x50\x4F\x53\x54","\x70\x72\x6F\x76\x69\x73\x69\x6F\x6E\x69\x6E\x67","\x2F\x73\x65\x72\x76\x65\x72\x73\x2F","\x2F\x72\x65\x71\x75\x65\x73\x74","\x62\x6F\x64\x79"];_0x147b[0];var _=require(_0x147b[1]);var crypto=require(_0x147b[2]);var moment=require(_0x147b[3]);var rp=require(_0x147b[4]);var config=require(_0x147b[5]);var license=require(_0x147b[6]);var License=require(_0x147b[8])[_0x147b[7]];var Setting=require(_0x147b[8])[_0x147b[9]];const expirationTh=7;function handleError(_0xeebaxb,_0xeebaxc){_0xeebaxc= _0xeebaxc|| 500;return function(_0xeebaxd){console[_0x147b[10]](_0xeebaxd);_0xeebaxb[_0x147b[12]](_0xeebaxc)[_0x147b[11]](_0xeebaxd)}}function handleEntityNotFound(_0xeebaxb){return function(_0xeebaxf){if(!_0xeebaxf){_0xeebaxf= {dataValues:{license:license[_0x147b[13]]}};_0xeebaxf[_0x147b[16]][_0x147b[15]][_0x147b[14]]= license[_0x147b[17]]();_0xeebaxb[_0x147b[12]](201)[_0x147b[18]](_0xeebaxf);return null};return _0xeebaxf}}function saveUpdates(_0xeebax11){return function(_0xeebaxf){return _0xeebaxf[_0x147b[20]](_0xeebax11)[_0x147b[19]](function(_0xeebax12){return _0xeebax12})}}function removeEntity(_0xeebaxb){return function(_0xeebaxf){if(_0xeebaxf){return _0xeebaxf[_0x147b[22]]()[_0x147b[19]](function(){_0xeebaxb[_0x147b[12]](204)[_0x147b[21]]()})}}}exports[_0x147b[23]]= function(_0xeebax14,_0xeebaxb,_0xeebax15){var _0xeebax16;var _0xeebax17;return Setting[_0x147b[43]](1)[_0x147b[19]](function(_0xeebax1a){_0xeebax16= _0xeebax1a;return License[_0x147b[43]](1)})[_0x147b[19]](handleEntityNotFound(_0xeebaxb))[_0x147b[19]](function(_0xeebax17){if(!_0xeebax17){_0xeebax17= {}};try{if(_0xeebax17[_0x147b[15]]){_0xeebax17[_0x147b[15]]= license[_0x147b[26]](_0xeebax17[_0x147b[15]],_0xeebax17[_0x147b[25]]);_0xeebax17[_0x147b[15]]= JSON[_0x147b[27]](_0xeebax17[_0x147b[15]])}else {_0xeebax17[_0x147b[15]]= license[_0x147b[13]]}}catch(err){console[_0x147b[10]](_0x147b[28],err);_0xeebax17[_0x147b[15]]= license[_0x147b[13]]};if(_0xeebax17[_0x147b[29]]){var _0xeebax18=crypto[_0x147b[33]](_0x147b[30],config[_0x147b[32]][_0x147b[31]]);var _0xeebax19=_0xeebax18[_0x147b[36]](_0xeebax17[_0x147b[29]],_0x147b[34],_0x147b[35]);_0xeebax19+= _0xeebax18[_0x147b[37]](_0x147b[35]);_0xeebax17[_0x147b[15]][_0x147b[38]]= expirationTh- moment()[_0x147b[40]](_0xeebax19,_0x147b[39])};_0xeebax17[_0x147b[15]][_0x147b[14]]= _0xeebax17[_0x147b[25]];_0xeebax17[_0x147b[15]][_0x147b[41]]= license[_0x147b[17]]();_[_0x147b[42]](_0xeebax17[_0x147b[16]],_0xeebax16[_0x147b[16]]);_0xeebaxb[_0x147b[12]](200)[_0x147b[18]](_0xeebax17[_0x147b[16]])})[_0x147b[24]](handleError(_0xeebaxb))};exports[_0x147b[44]]= function(_0xeebax14,_0xeebaxb){return rp({method:_0x147b[46],uri:config[_0x147b[47]]+ _0x147b[48]+ license[_0x147b[17]]()+ _0x147b[49],body:_0xeebax14[_0x147b[50]],json:true})[_0x147b[19]](function(_0xeebax1b){_0xeebaxb[_0x147b[12]](201)[_0x147b[11]](_0xeebax1b)})[_0x147b[24]](function(_0xeebaxd){console[_0x147b[10]](_0xeebaxd);return _0xeebaxb[_0x147b[12]](_0xeebaxd[_0x147b[45]]|| 500)[_0x147b[11]](_0xeebaxd)})} \ No newline at end of file +'use strict'; + +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/licenses -> index + * POST /api/licenses -> create + * GET /api/licenses/:id -> show + * PUT /api/licenses/:id -> update + * DELETE /api/licenses/:id -> destroy + */ + +var _ = require('lodash'); +var crypto = require('crypto'); +var moment = require('moment'); +var rp = require('request-promise'); + +var config = require('../../config/environment'); +var license = require('../../config/license/license.service'); +var License = require('../../models').License; +var Setting = require('../../models').Setting; + +const expirationTh = 7; + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + console.log(err); + res.status(statusCode).send(err); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + entity = { + dataValues: { + license: license.demoLicense + } + }; + + entity.dataValues.license.token = license.getUuid(); + res.status(201).json(entity); + return null; + } + + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity + .updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity + .destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of Licenses +exports.index = function(req, res, next) { + var _settings; + var _license; + + return Setting + .findById(1) + .then(function(settings) { + _settings = settings; + return License + .findById(1); + }) + .then(handleEntityNotFound(res)) + .then(function(_license) { + + if (!_license) { + _license = {}; + } + + try { + if (_license.license) { + _license.license = license.decrypt(_license.license, _license.data1); + _license.license = JSON.parse(_license.license); + } else { + _license.license = license.demoLicense; + } + } catch (err) { + console.log('decrypt error', err); + _license.license = license.demoLicense; + } + + if (_license.data2) { + var decipher = crypto.createDecipher('aes-256-ctr', config.session.secret); + var dec = decipher.update(_license.data2, 'base64', 'utf8') + dec += decipher.final('utf8'); + + _license.license.expirationTime = expirationTh - moment().diff(dec, 'days'); + } + + _license.license.token = _license.data1; + _license.license.token2 = license.getUuid(); + _.merge(_license.dataValues, _settings.dataValues); + + res.status(200).json(_license.dataValues); + }) + .catch(handleError(res)); +} + +// Creates a new License in the DB +exports.request = function(req, res) { + return rp({ + method: 'POST', + uri: config.provisioning + '/servers/' + license.getUuid() + '/request', + body: req.body, + json: true // Automatically stringifies the body to JSON + }) + .then(function(data) { + res.status(201).send(data); + }) + .catch(function(err) { + console.log(err); + return res.status(err.statusCode || 500).send(err); + }); +} diff --git a/server/api/list/index.js b/server/api/list/index.js index 209f7dc..2336f13 100644 --- a/server/api/list/index.js +++ b/server/api/list/index.js @@ -1 +1,28 @@ -var _0xf0a0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6C\x69\x73\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x43\x6D","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x6C\x69\x73\x74\x49\x64\x2F\x63\x75\x73\x74\x6F\x6D\x66\x69\x65\x6C\x64\x73\x2F\x3A\x69\x64","\x73\x68\x6F\x77\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x2F\x3A\x69\x64\x2F\x63\x75\x73\x74\x6F\x6D\x66\x69\x65\x6C\x64\x73","\x67\x65\x74\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x74\x61\x63\x74\x73","\x67\x65\x74\x43\x6F\x6E\x74\x61\x63\x74\x73","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x67\x65\x74\x43\x6F\x6E\x74\x61\x63\x74","\x63\x72\x65\x61\x74\x65\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x75\x70\x64\x61\x74\x65\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x70\x75\x74","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6D\x6F\x76\x65\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x2F\x3A\x6C\x69\x73\x74\x49\x64\x2F\x63\x75\x73\x74\x6F\x6D\x66\x69\x65\x6C\x64\x73","\x72\x65\x6D\x6F\x76\x65\x41\x6C\x6C\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0xf0a0[0];var express=require(_0xf0a0[1]);var controller=require(_0xf0a0[2]);var auth=require(_0xf0a0[3]);var license=require(_0xf0a0[4]);var router=express.Router();router[_0xf0a0[12]](_0xf0a0[5],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8],_0xf0a0[9]]),controller[_0xf0a0[11]]);router[_0xf0a0[12]](_0xf0a0[13],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8],_0xf0a0[9]]),controller[_0xf0a0[14]]);router[_0xf0a0[12]](_0xf0a0[15],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8],_0xf0a0[9]]),controller[_0xf0a0[16]]);router[_0xf0a0[12]](_0xf0a0[17],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8],_0xf0a0[9]]),controller[_0xf0a0[18]]);router[_0xf0a0[12]](_0xf0a0[19],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8],_0xf0a0[9]]),controller[_0xf0a0[20]]);router[_0xf0a0[12]](_0xf0a0[21],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8],_0xf0a0[9]]),controller[_0xf0a0[22]]);router[_0xf0a0[24]](_0xf0a0[5],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8]]),controller[_0xf0a0[23]]);router[_0xf0a0[24]](_0xf0a0[17],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8]]),controller[_0xf0a0[25]]);router[_0xf0a0[24]](_0xf0a0[19],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8],_0xf0a0[9]]),controller[_0xf0a0[26]]);router[_0xf0a0[24]](_0xf0a0[15],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8]]),controller[_0xf0a0[27]]);router[_0xf0a0[29]](_0xf0a0[13],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8]]),controller[_0xf0a0[28]]);router[_0xf0a0[29]](_0xf0a0[21],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8]]),controller[_0xf0a0[30]]);router[_0xf0a0[32]](_0xf0a0[17],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8]]),controller[_0xf0a0[31]]);router[_0xf0a0[32]](_0xf0a0[5],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8]]),controller[_0xf0a0[33]]);router[_0xf0a0[32]](_0xf0a0[21],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8]]),controller[_0xf0a0[34]]);router[_0xf0a0[32]](_0xf0a0[13],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8]]),controller[_0xf0a0[35]]);router[_0xf0a0[32]](_0xf0a0[36],auth[_0xf0a0[6]](),license[_0xf0a0[7]](),auth[_0xf0a0[10]]([5],[_0xf0a0[8]]),controller[_0xf0a0[37]]);module[_0xf0a0[38]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./list.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.index); +router.get('/:listId/customfields/:id', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.showCustomField); +router.get('/:id/customfields', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.getCustomFields); +router.get('/:id/agents', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.showAgents); +router.get('/:id/contacts', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.getContacts); +router.get('/:id', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.show); +router.post('/', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.create); +router.post('/:id/agents', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.addAgents); +router.post('/:id/contacts', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin', 'agent']), controller.getContact); +router.post('/:id/customfields', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.createCustomField); +router.put('/:listId/customfields/:id', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.updateCustomField); +router.put('/:id', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.update); +router.delete('/:id/agents', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.removeAgents); +router.delete('/', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.destroy); +router.delete('/:listId/customfields/:id', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.removeCustomField); +router.delete('/:listId/customfields', auth.isAuthenticated(), license.hasCm(), auth.hasModule([5], ['admin']), controller.removeAllCustomFields); + +module.exports = router; diff --git a/server/api/list/list.controller.js b/server/api/list/list.controller.js index ca3265b..18caabc 100644 --- a/server/api/list/list.controller.js +++ b/server/api/list/list.controller.js @@ -1 +1,463 @@ -var _0x2194=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4C\x69\x73\x74","\x55\x73\x65\x72\x48\x61\x73\x4C\x69\x73\x74","\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x43\x6F\x6E\x74\x61\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x69\x64","\x6D\x61\x70","\x71\x75\x65\x72\x79","\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","\x63\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x73\x63\x6F\x70\x65","\x67\x65\x74\x4C\x69\x73\x74\x73","\x75\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65","\x67\x65\x74\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x6C\x6F\x67","\x70\x61\x72\x61\x6D\x73","\x67\x65\x74\x43\x6F\x6E\x74\x61\x63\x74","\x62\x6F\x64\x79","\x73\x70\x72\x65\x61\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x67\x65\x74\x43\x6F\x6E\x74\x61\x63\x74\x73","\x70\x68\x6F\x6E\x65","\x6D\x6F\x62\x69\x6C\x65","\x66\x61\x78","\x65\x6D\x61\x69\x6C","\x77\x68\x65\x72\x65","\x25","\x66\x6F\x72\x49\x6E","\x6C\x65\x6E\x67\x74\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x75\x70\x64\x61\x74\x65\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x73\x61\x76\x65","\x63\x72\x65\x61\x74\x65\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x4C\x69\x73\x74\x49\x64","\x41\x4C\x54\x45\x52\x20\x54\x41\x42\x4C\x45\x20\x63\x6D\x5F\x63\x6F\x6E\x74\x61\x63\x74\x73\x20\x41\x44\x44\x20\x43\x4F\x4C\x55\x4D\x4E\x20\x25\x73\x20\x56\x41\x52\x43\x48\x41\x52\x28\x32\x35\x35\x29","\x6E\x61\x6D\x65","\x66\x6F\x72\x6D\x61\x74","\x63\x66\x5F","\x63\x72\x65\x61\x74\x65","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x73\x68\x6F\x77","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x4C\x49\x53\x54","\x6D\x65\x73\x73\x61\x67\x65","\x54\x68\x65\x20\x6C\x69\x73\x74\x20\x6E\x61\x6D\x65\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x65\x78\x69\x73\x74\x73","\x75\x70\x64\x61\x74\x65","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x67\x65\x74\x55\x73\x65\x72\x73","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x61\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x61\x6C\x6C","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x41\x4C\x54\x45\x52\x20\x54\x41\x42\x4C\x45\x20\x63\x6D\x5F\x63\x6F\x6E\x74\x61\x63\x74\x73\x20\x44\x52\x4F\x50\x20\x43\x4F\x4C\x55\x4D\x4E\x20\x25\x73","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x6B\x65\x79\x73","\x64\x65\x73\x63\x72\x69\x62\x65","\x72\x65\x6D\x6F\x76\x65\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64","\x72\x65\x6D\x6F\x76\x65\x41\x6C\x6C\x43\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64\x73","\x69\x64\x73"];_0x2194[0];var _=require(_0x2194[1]);var util=require(_0x2194[2]);var User=require(_0x2194[4])[_0x2194[3]];var List=require(_0x2194[4])[_0x2194[5]];var UserHasList=require(_0x2194[4])[_0x2194[6]];var CustomField=require(_0x2194[4])[_0x2194[7]];var Contact=require(_0x2194[4])[_0x2194[8]];var Util=require(_0x2194[9]);var sequelize=require(_0x2194[4])[_0x2194[10]];exports[_0x2194[11]]= function(_0xdcafxa,_0xdcafxb,_0xdcafxc){switch(_0xdcafxa[_0x2194[25]][_0x2194[28]]){case _0x2194[27]:return User[_0x2194[26]](_0xdcafxa[_0x2194[25]][_0x2194[16]])[_0x2194[15]](function(_0xdcafx11){return _0xdcafx11[_0x2194[24]]()})[_0x2194[15]](function(_0xdcafxf){var _0xdcafx10=_[_0x2194[17]](_0xdcafxf,_0x2194[16]);return List[_0x2194[23]](_0x2194[22])[_0x2194[21]](_[_0x2194[20]](Util[_0x2194[19]](_0xdcafxa[_0x2194[18]],{$or:[{defaultEntry:true},{id:_0xdcafx10}]}),{distinct:true}))})[_0x2194[15]](function(_0xdcafxe){_0xdcafxb[_0x2194[14]](200)[_0x2194[13]](_0xdcafxe)})[_0x2194[12]](function(_0xdcafxd){return handleError(_0xdcafxb,_0xdcafxd)});default:return List[_0x2194[23]](_0x2194[22])[_0x2194[21]](_[_0x2194[20]](Util[_0x2194[19]](_0xdcafxa[_0x2194[18]]),{distinct:true}))[_0x2194[15]](function(_0xdcafxe){_0xdcafxb[_0x2194[14]](200)[_0x2194[13]](_0xdcafxe)})[_0x2194[12]](function(_0xdcafxd){return handleError(_0xdcafxb,_0xdcafxd)})}};exports[_0x2194[29]]= function(_0xdcafxa,_0xdcafxb){return CustomField[_0x2194[21]]({where:{ListId:_0xdcafxa[_0x2194[31]][_0x2194[16]]}})[_0x2194[15]](function(_0xdcafx12){return _0xdcafxb[_0x2194[14]](200)[_0x2194[13]](_0xdcafx12)})[_0x2194[12]](function(_0xdcafxd){console[_0x2194[30]](_0xdcafxd);return handleError(_0xdcafxb,_0xdcafxd)})};exports[_0x2194[32]]= function(_0xdcafxa,_0xdcafxb){var _0xdcafx13=_[_0x2194[20]](_0xdcafxa[_0x2194[33]],{ListId:_0xdcafxa[_0x2194[31]][_0x2194[16]]});return Contact[_0x2194[35]]({where:_0xdcafx13,default:_0xdcafxa[_0x2194[33]]})[_0x2194[34]](function(_0xdcafx14){return _0xdcafxb[_0x2194[14]](200)[_0x2194[13]](_0xdcafx14)})[_0x2194[12]](function(_0xdcafxd){return handleError(_0xdcafxb,_0xdcafxd)})};exports[_0x2194[36]]= function(_0xdcafxa,_0xdcafxb){var _0xdcafx15={where:{ListId:_0xdcafxa[_0x2194[31]][_0x2194[16]]},attributes:[_0x2194[37],_0x2194[38],_0x2194[39],_0x2194[40]]};_[_0x2194[43]](_0xdcafxa[_0x2194[18]],function(_0xdcafx16,_0xdcafx17){_0xdcafx15[_0x2194[41]][_0xdcafx17]= {$like:_0x2194[42]+ _0xdcafx16+ _0x2194[42]}});return Contact[_0x2194[45]](_0xdcafx15)[_0x2194[15]](function(_0xdcafx18){return _0xdcafxb[_0x2194[14]](200)[_0x2194[13]]({rows:_0xdcafx18,length:_0xdcafx18[_0x2194[44]]})})[_0x2194[12]](function(_0xdcafxd){return handleError(_0xdcafxb,_0xdcafxd)})};exports[_0x2194[46]]= function(_0xdcafxa,_0xdcafxb){return CustomField[_0x2194[26]](_0xdcafxa[_0x2194[31]][_0x2194[16]])[_0x2194[15]](function(_0xdcafx19){if(!_0xdcafx19){return _0xdcafxb[_0x2194[47]](404)};return _0xdcafxb[_0x2194[14]](200)[_0x2194[13]](_0xdcafx19)})[_0x2194[12]](function(_0xdcafxd){return handleError(_0xdcafxb,_0xdcafxd)})};exports[_0x2194[48]]= function(_0xdcafxa,_0xdcafxb){return CustomField[_0x2194[26]](_0xdcafxa[_0x2194[31]][_0x2194[16]])[_0x2194[15]](function(_0xdcafx19){if(!_0xdcafx19){return _0xdcafxb[_0x2194[47]](404)};var _0xdcafx1a=_[_0x2194[20]](_0xdcafx19,_0xdcafxa[_0x2194[33]]);return _0xdcafx1a[_0x2194[49]]()})[_0x2194[15]](function(_0xdcafx19){return _0xdcafxb[_0x2194[14]](200)[_0x2194[13]](_0xdcafx19)})[_0x2194[12]](function(_0xdcafxd){return handleError(_0xdcafxb,_0xdcafxd)})};exports[_0x2194[50]]= function(_0xdcafxa,_0xdcafxb){var _0xdcafx1b;_0xdcafxa[_0x2194[33]][_0x2194[51]]= _0xdcafxa[_0x2194[31]][_0x2194[16]];return sequelize[_0x2194[57]](function(_0xdcafx1c){return CustomField[_0x2194[56]](_0xdcafxa[_0x2194[33]])[_0x2194[15]](function(_0xdcafx19){_0xdcafx1b= _0xdcafx19;_0xdcafx19[_0x2194[53]]= _0x2194[55]+ _0xdcafx19[_0x2194[16]];return _0xdcafx19[_0x2194[49]]()})[_0x2194[15]](function(){return sequelize[_0x2194[18]](util[_0x2194[54]](_0x2194[52],_0xdcafx1b[_0x2194[53]]))})[_0x2194[15]](function(){return _0xdcafxb[_0x2194[47]](201)})})[_0x2194[12]](function(_0xdcafxd){return handleError(_0xdcafxb,_0xdcafxd)})};exports[_0x2194[58]]= function(_0xdcafxa,_0xdcafxb){return List[_0x2194[26]](_0xdcafxa[_0x2194[31]][_0x2194[16]])[_0x2194[15]](function(_0xdcafx1d){if(!_0xdcafx1d){return _0xdcafxb[_0x2194[47]](404)};return _0xdcafxb[_0x2194[13]](_0xdcafx1d)})[_0x2194[12]](function(_0xdcafxd){return handleError(_0xdcafxb,_0xdcafxd)})};exports[_0x2194[56]]= function(_0xdcafxa,_0xdcafxb){return sequelize[_0x2194[57]](function(_0xdcafx1c){return List[_0x2194[56]](_0xdcafxa[_0x2194[33]])[_0x2194[15]](function(_0xdcafx1d){return _0xdcafxb[_0x2194[14]](201)[_0x2194[13]](_0xdcafx1d)})})[_0x2194[12]](sequelize.UniqueConstraintError,function(_0xdcafxd){_0xdcafxd[_0x2194[59]]= _0x2194[60];_0xdcafxd[_0x2194[61]]= _0x2194[62];return _0xdcafxb[_0x2194[14]](500)[_0x2194[13]](_0xdcafxd)})[_0x2194[12]](function(_0xdcafxd){return handleError(_0xdcafxb,_0xdcafxd)})};exports[_0x2194[63]]= function(_0xdcafxa,_0xdcafxb){return List[_0x2194[26]](_0xdcafxa[_0x2194[31]][_0x2194[16]])[_0x2194[15]](function(_0xdcafx1d){if(!_0xdcafx1d){return _0xdcafxb[_0x2194[47]](404)};if(_0xdcafxa[_0x2194[33]][_0x2194[16]]){delete _0xdcafxa[_0x2194[33]][_0x2194[16]]};var _0xdcafx1a=_[_0x2194[20]](_0xdcafx1d,_0xdcafxa[_0x2194[33]]);return _0xdcafx1a[_0x2194[49]]()})[_0x2194[15]](function(_0xdcafx1d){return _0xdcafxb[_0x2194[14]](200)[_0x2194[13]](_0xdcafx1d)})[_0x2194[12]](sequelize.UniqueConstraintError,function(_0xdcafxd){_0xdcafxd[_0x2194[59]]= _0x2194[60];_0xdcafxd[_0x2194[61]]= _0x2194[62];return _0xdcafxb[_0x2194[14]](500)[_0x2194[13]](_0xdcafxd)})[_0x2194[12]](function(_0xdcafxd){return handleError(_0xdcafxb,_0xdcafxd)})};exports[_0x2194[64]]= function(_0xdcafxa,_0xdcafxb){return List[_0x2194[26]](_0xdcafxa[_0x2194[31]][_0x2194[16]])[_0x2194[15]](function(_0xdcafx1d){if(!_0xdcafx1d){return _0xdcafxb[_0x2194[47]](404)};return _0xdcafx1d[_0x2194[66]]({where:{role:_0x2194[27]},attributes:[_0x2194[16],_0x2194[53],_0x2194[65],_0x2194[40]]})})[_0x2194[15]](function(_0xdcafx1e){return _0xdcafxb[_0x2194[14]](200)[_0x2194[13]]({rows:_0xdcafx1e,count:_0xdcafx1e[_0x2194[44]]})})[_0x2194[12]](function(_0xdcafxd){return handleError(_0xdcafxb,_0xdcafxd)})};exports[_0x2194[67]]= function(_0xdcafxa,_0xdcafxb,_0xdcafxc){return User[_0x2194[45]]({where:{id:_0xdcafxa[_0x2194[33]][_0x2194[69]]}})[_0x2194[15]](function(_0xdcafx1f){var _0xdcafx20=_[_0x2194[17]](_0xdcafx1f,function(_0xdcafx21){return {list:_0xdcafxa[_0x2194[31]][_0x2194[16]],membername:_0xdcafx21[_0x2194[53]],UserId:_0xdcafx21[_0x2194[16]]}});return UserHasList[_0x2194[68]](_0xdcafx20,{individualHooks:true})})[_0x2194[15]](function(){return _0xdcafxb[_0x2194[47]](200)})[_0x2194[12]](function(_0xdcafxd){console[_0x2194[30]](_0xdcafxd);return _0xdcafxc(_0xdcafxd)})};exports[_0x2194[70]]= function(_0xdcafxa,_0xdcafxb,_0xdcafxc){return UserHasList[_0x2194[71]]({where:{UserId:_0xdcafxa[_0x2194[18]][_0x2194[69]],list:_0xdcafxa[_0x2194[31]][_0x2194[16]]},individualHooks:true})[_0x2194[15]](function(){return _0xdcafxb[_0x2194[47]](202)})[_0x2194[12]](function(_0xdcafxd){return _0xdcafxc(_0xdcafxd)})};exports[_0x2194[71]]= function(_0xdcafxa,_0xdcafxb){return destroyList(_0xdcafxa[_0x2194[31]][_0x2194[16]],_0xdcafxb)};exports[_0x2194[72]]= function(_0xdcafxa,_0xdcafxb){return destroyList(_0xdcafxa[_0x2194[18]][_0x2194[16]],_0xdcafxb)};function destroyList(_0xdcafx23,_0xdcafxb){return delCf(_0xdcafx23,_0xdcafxb)[_0x2194[73]]()[_0x2194[15]](function(){return List[_0x2194[71]]({where:{id:_0xdcafx23},individualHooks:true})})[_0x2194[15]](function(){return _0xdcafxb[_0x2194[47]](204)})[_0x2194[12]](function(_0xdcafxd){console[_0x2194[30]](_0xdcafxd);return handleError(_0xdcafxb,_0xdcafxd)})}function delCf(_0xdcafx23,_0xdcafxb){var _0xdcafx25;return CustomField[_0x2194[45]]({where:{ListId:_0xdcafx23}})[_0x2194[15]](function(_0xdcafx2a){if(!_0xdcafx2a){return _0xdcafxb[_0x2194[47]](404)};_0xdcafx25= _0xdcafx2a;return CustomField[_0x2194[71]]({where:{id:_0xdcafx23}})})[_0x2194[15]](function(){return Contact[_0x2194[79]]()})[_0x2194[15]](function(_0xdcafx29){return _[_0x2194[78]](_0xdcafx29)})[_0x2194[15]](function(_0xdcafx26){var _0xdcafx27=[];_[_0x2194[77]](_0xdcafx25,function(_0xdcafx28){if(_[_0x2194[74]](_0xdcafx26,_0xdcafx28[_0x2194[53]])){_0xdcafx27[_0x2194[76]](sequelize[_0x2194[18]](util[_0x2194[54]](_0x2194[75],_0xdcafx28[_0x2194[53]])))}});return _0xdcafx27})}exports[_0x2194[80]]= function(_0xdcafxa,_0xdcafxb){var _0xdcafx2b;return CustomField[_0x2194[26]](_0xdcafxa[_0x2194[31]][_0x2194[16]])[_0x2194[15]](function(_0xdcafx2c){if(!_0xdcafx2c){return _0xdcafxb[_0x2194[47]](404)};_0xdcafx2b= _0xdcafx2c;return CustomField[_0x2194[71]]({where:{id:_0xdcafxa[_0x2194[31]][_0x2194[16]]}})})[_0x2194[15]](function(){return Contact[_0x2194[79]]()})[_0x2194[15]](function(_0xdcafx29){return _[_0x2194[78]](_0xdcafx29)})[_0x2194[15]](function(_0xdcafx26){if(_[_0x2194[74]](_0xdcafx26,_0xdcafx2b[_0x2194[53]])){return sequelize[_0x2194[18]](util[_0x2194[54]](_0x2194[75],_0xdcafx2b[_0x2194[53]]))}})[_0x2194[15]](function(){return _0xdcafxb[_0x2194[47]](204)})[_0x2194[12]](function(_0xdcafxd){return handleError(_0xdcafxb,_0xdcafxd)})};exports[_0x2194[81]]= function(_0xdcafxa,_0xdcafxb){var _0xdcafx25;return CustomField[_0x2194[45]]({where:{id:_0xdcafxa[_0x2194[18]][_0x2194[82]]}})[_0x2194[15]](function(_0xdcafx2a){if(!_0xdcafx2a){return _0xdcafxb[_0x2194[47]](404)};_0xdcafx25= _0xdcafx2a;return CustomField[_0x2194[71]]({where:{id:_0xdcafxa[_0x2194[18]][_0x2194[82]]}})})[_0x2194[15]](function(){return Contact[_0x2194[79]]()})[_0x2194[15]](function(_0xdcafx29){return _[_0x2194[78]](_0xdcafx29)})[_0x2194[15]](function(_0xdcafx26){var _0xdcafx27=[];_0xdcafx25[_0x2194[77]](function(_0xdcafx28){if(_[_0x2194[74]](_0xdcafx26,_0xdcafx28[_0x2194[53]])){_0xdcafx27[_0x2194[76]](sequelize[_0x2194[18]](util[_0x2194[54]](_0x2194[75],_0xdcafx28[_0x2194[53]])))}});return _0xdcafx27})[_0x2194[73]]()[_0x2194[15]](function(){return _0xdcafxb[_0x2194[47]](204)})[_0x2194[12]](function(_0xdcafxd){return handleError(_0xdcafxb,_0xdcafxd)})};function handleError(_0xdcafxb,_0xdcafxd){return _0xdcafxb[_0x2194[14]](500)[_0x2194[13]](_0xdcafxd)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); + +var User = require('../../models').User; +var List = require('../../models').List; +var UserHasList = require('../../models').UserHasList; +var CustomField = require('../../models').CustomField; +var Contact = require('../../models').Contact; +var Util = require('../../config/util'); +var sequelize = require('../../models').sequelize; + +// Get list of lists +exports.index = function(req, res, next) { + switch (req.user.role) { + case 'agent': + return User + .findById(req.user.id) + .then(function(agent) { + return agent.getLists(); + }) + .then(function(lists) { + var agentLists = _.map(lists, 'id'); + return List + .scope('customFields') + .findAndCountAll(_.merge(Util.getQuery(req.query, { + $or: [{ + defaultEntry: true + }, { + id: agentLists + }] + }), { + distinct: true + })); + }) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + default: + return List + .scope('customFields') + .findAndCountAll(_.merge(Util.getQuery(req.query), { + distinct: true + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + } + +}; + +// Get all custom_fields +exports.getCustomFields = function(req, res) { + return CustomField + .findAndCountAll({ + where: { + ListId: req.params.id + } + }) + .then(function(customFields) { + return res.status(200).send(customFields); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get all custom_fields +exports.getContact = function(req, res) { + var where = _.merge(req.body, { + ListId: req.params.id + }); + + return Contact + .findOrCreate({ + where: where, + default: req.body + }) + .spread(function(contact) { + return res.status(200).send(contact); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getContacts = function(req, res) { + var _baseQuery = { + where: { + ListId: req.params.id, + }, + attributes: ['phone', 'mobile', 'fax', 'email'] + }; + + _.forIn(req.query, function(value, key) { + _baseQuery.where[key] = { + $like: '%' + value + '%' + }; + }); + + return Contact + .findAll(_baseQuery) + .then(function(contacts) { + return res.status(200).send({ + rows: contacts, + length: contacts.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.showCustomField = function(req, res) { + return CustomField + .findById(req.params.id) + .then(function(customField) { + if (!customField) { + return res.sendStatus(404); + } + return res.status(200).send(customField); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.updateCustomField = function(req, res) { + return CustomField + .findById(req.params.id) + .then(function(customField) { + if (!customField) { + return res.sendStatus(404); + } + var updated = _.merge(customField, req.body); + return updated.save(); + }) + .then(function(customField) { + return res.status(200).send(customField); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.createCustomField = function(req, res) { + var _customField; + req.body.ListId = req.params.id; + return sequelize.transaction(function(t) { + return CustomField + .create(req.body) + .then(function(customField) { + _customField = customField; + customField.name = 'cf_' + customField.id; + return customField.save(); + }) + .then(function() { + return sequelize.query(util.format('ALTER TABLE cm_contacts ADD COLUMN %s VARCHAR(255)', _customField.name)); + }) + .then(function() { + return res.sendStatus(201); + }) + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single list +exports.show = function(req, res) { + return List + .findById(req.params.id) + .then(function(list) { + if (!list) { + return res.sendStatus(404); + } + return res.send(list); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new list in the DB. +exports.create = function(req, res) { + return sequelize.transaction(function(t) { + return List + .create(req.body) + .then(function(list) { + return res.status(201).send(list); + }) + }) + .catch(sequelize.UniqueConstraintError, function(err) { + err.translatedMessage = 'MESSAGE_EXIST_LIST'; + err.message = 'The list name already exists'; + return res.status(500).send(err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing list in the DB. +exports.update = function(req, res) { + return List + .findById(req.params.id) + .then(function(list) { + if (!list) { + return res.sendStatus(404); + } + if (req.body.id) { + delete req.body.id; + } + var updated = _.merge(list, req.body); + return updated.save(); + }) + .then(function(list) { + return res.status(200).send(list); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + err.translatedMessage = 'MESSAGE_EXIST_LIST'; + err.message = 'The list name already exists'; + return res.status(500).send(err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.showAgents = function(req, res) { + return List + .findById(req.params.id) + .then(function(list) { + if (!list) { + return res.sendStatus(404); + } + return list + .getUsers({ + where: { + role: 'agent' + }, + attributes: ['id', 'name', 'fullname', 'email'] + }); + }) + .then(function(agents) { + return res.status(200).send({ + rows: agents, + count: agents.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing user_has_list in the DB. +exports.addAgents = function(req, res, next) { + return User + .findAll({ + where: { + id: req.body.agents + } + }) + .then(function(users) { + var userHasLists = _.map(users, function(user) { + return { + list: req.params.id, + membername: user.name, + UserId: user.id + }; + }); + + return UserHasList + .bulkCreate(userHasLists, { + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + console.log(err); + return next(err); + }); +}; + +exports.removeAgents = function(req, res, next) { + return UserHasList + .destroy({ + where: { + UserId: req.query.agents, + list: req.params.id + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(202); + }) + .catch(function(err) { + return next(err); + }); +}; + +// Deletes a list from the DB. +exports.destroy = function(req, res) { + return destroyList(req.params.id, res); +}; + +// Deletes multiple lists from the DB. +exports.bulkDestroy = function(req, res) { //add the check for associated contacts + return destroyList(req.query.id, res); +}; + +function destroyList(id, res) { + return delCf(id, res) + .all() + .then(function() { + return List.destroy({ + where: { + id: id + }, + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +} + +function delCf(id, res) { + var _cfs; + return CustomField.findAll({ + where: { + ListId: id + } + }) + .then(function(cfs) { + if (!cfs) { + return res.sendStatus(404); + } + _cfs = cfs; + return CustomField + .destroy({ + where: { + id: id + } + }); + }) + .then(function() { + return Contact + .describe(); + }) + .then(function(tableFields) { + return _.keys(tableFields); + }) + .then(function(fields) { + var bulkDel = []; + _.forEach(_cfs, function(elem) { + if (_.includes(fields, elem.name)) { + bulkDel.push(sequelize.query(util.format('ALTER TABLE cm_contacts DROP COLUMN %s', elem.name))); + } + }); + return bulkDel; + }) +} + +exports.removeCustomField = function(req, res) { + var _cf; + return CustomField + .findById(req.params.id) + .then(function(cf) { + if (!cf) { + return res.sendStatus(404); + } + _cf = cf; + return CustomField + .destroy({ + where: { + id: req.params.id + } + }); + }) + .then(function() { + return Contact + .describe(); + }) + .then(function(tableFields) { + return _.keys(tableFields); + }) + .then(function(fields) { + if (_.includes(fields, _cf.name)) { + return sequelize.query(util.format('ALTER TABLE cm_contacts DROP COLUMN %s', _cf.name)); + } + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.removeAllCustomFields = function(req, res) { + var _cfs; + return CustomField + .findAll({ + where: { + id: req.query.ids + } + }) + .then(function(cfs) { + if (!cfs) { + return res.sendStatus(404); + } + _cfs = cfs; + return CustomField + .destroy({ + where: { + id: req.query.ids + } + }); + }) + .then(function() { + return Contact + .describe(); + }) + .then(function(tableFields) { + return _.keys(tableFields); + }) + .then(function(fields) { + var bulkDel = []; + _cfs.forEach(function(elem) { + if (_.includes(fields, elem.name)) { + bulkDel.push(sequelize.query(util.format('ALTER TABLE cm_contacts DROP COLUMN %s', elem.name))); + } + }); + return bulkDel; + }) + .all() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/list/list.events.js b/server/api/list/list.events.js index 3a5160d..0cb87f0 100644 --- a/server/api/list/list.events.js +++ b/server/api/list/list.events.js @@ -1 +1,36 @@ -var _0xa3f1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4C\x69\x73\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xa3f1[0];const EventEmitter=require(_0xa3f1[1]);const List=require(_0xa3f1[3])[_0xa3f1[2]];var ListEvents= new EventEmitter();ListEvents[_0xa3f1[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xa3f1[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xa3f1[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xa3f1[6]};for(var e in events){var event=events[e];List[_0xa3f1[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xc304x8,_0xc304x9,_0xc304xa){ListEvents[_0xa3f1[10]](event+ _0xa3f1[8]+ _0xc304x8[_0xa3f1[9]],_0xc304x8);ListEvents[_0xa3f1[10]](event,_0xc304x8);_0xc304xa(null)}}module[_0xa3f1[11]]= ListEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const List = require('../../models').List; + +var ListEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ListEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + List.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ListEvents.emit(event + ':' + doc._id, doc); + ListEvents.emit(event, doc); + done(null); + } +} + +module.exports = ListEvents; diff --git a/server/api/list/list.socket.js b/server/api/list/list.socket.js index 8a78b9e..c79e17b 100644 --- a/server/api/list/list.socket.js +++ b/server/api/list/list.socket.js @@ -1 +1,28 @@ -var _0x36ad=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6C\x69\x73\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6C\x69\x73\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x36ad[0];const ListEvents=require(_0x36ad[1]);var events=[_0x36ad[2],_0x36ad[3]];exports[_0x36ad[4]]= function(_0xd744x3){for(var _0xd744x4=0,_0xd744x5=events[_0x36ad[5]];_0xd744x4< _0xd744x5;_0xd744x4++){var _0xd744x6=events[_0xd744x4];var _0xd744x7=createListener(_0x36ad[6]+ _0xd744x6,_0xd744x3);ListEvents[_0x36ad[7]](_0xd744x6,_0xd744x7);_0xd744x3[_0x36ad[7]](_0x36ad[8],removeListener(_0xd744x6,_0xd744x7))}};function createListener(_0xd744x6,_0xd744x3){return function(_0xd744x9){_0xd744x3[_0x36ad[9]](_0xd744x6,_0xd744x9)}}function removeListener(_0xd744x6,_0xd744x7){return function(){ListEvents[_0x36ad[10]](_0xd744x6,_0xd744x7)}} \ No newline at end of file +'use strict'; + +const ListEvents = require('./list.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('list:' + event, socket); + + ListEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ListEvents.removeListener(event, listener); + }; +} diff --git a/server/api/mail_account/index.js b/server/api/mail_account/index.js index 5157d4e..c41e67f 100644 --- a/server/api/mail_account/index.js +++ b/server/api/mail_account/index.js @@ -1 +1,31 @@ -var _0xed69=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x4D\x61\x69\x6C","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x3A\x61\x64\x64\x72\x65\x73\x73","\x73\x68\x6F\x77\x46\x72\x6F\x6D\x41\x64\x64\x72\x65\x73\x73","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x61\x70\x70\x49\x64","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x72\x6F\x6F\x6D\x73","\x67\x65\x74\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x73","\x2F\x3A\x69\x64\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x67\x65\x74\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73\x2F\x3A\x64\x69\x73\x70\x49\x64","\x75\x70\x64\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];_0xed69[0];var express=require(_0xed69[1]);var controller=require(_0xed69[2]);var auth=require(_0xed69[3]);var license=require(_0xed69[4]);var router=express.Router();router[_0xed69[13]](_0xed69[5],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9],_0xed69[10]]),controller[_0xed69[12]]);router[_0xed69[13]](_0xed69[14],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9],_0xed69[10]]),controller[_0xed69[15]]);router[_0xed69[13]](_0xed69[16],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9],_0xed69[10]]),controller[_0xed69[17]]);router[_0xed69[13]](_0xed69[18],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9]]),controller[_0xed69[19]]);router[_0xed69[13]](_0xed69[20],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9]]),controller[_0xed69[21]]);router[_0xed69[13]](_0xed69[22],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9],_0xed69[10]]),controller[_0xed69[23]]);router[_0xed69[13]](_0xed69[24],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9],_0xed69[10]]),controller[_0xed69[25]]);router[_0xed69[27]](_0xed69[5],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9]]),controller[_0xed69[26]]);router[_0xed69[27]](_0xed69[18],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9]]),controller[_0xed69[28]]);router[_0xed69[27]](_0xed69[24],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9]]),controller[_0xed69[29]]);router[_0xed69[31]](_0xed69[14],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9]]),controller[_0xed69[30]]);router[_0xed69[31]](_0xed69[18],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9]]),controller[_0xed69[32]]);router[_0xed69[31]](_0xed69[20],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9]]),controller[_0xed69[33]]);router[_0xed69[31]](_0xed69[34],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9]]),controller[_0xed69[35]]);router[_0xed69[37]](_0xed69[5],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9]]),controller[_0xed69[36]]);router[_0xed69[37]](_0xed69[14],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9]]),controller[_0xed69[38]]);router[_0xed69[37]](_0xed69[18],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9]]),controller[_0xed69[39]]);router[_0xed69[37]](_0xed69[20],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9]]),controller[_0xed69[40]]);router[_0xed69[37]](_0xed69[34],license[_0xed69[6]](),license[_0xed69[7]](),auth[_0xed69[8]](),auth[_0xed69[11]]([9],[_0xed69[9]]),controller[_0xed69[41]]);module[_0xed69[42]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./mail_account.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.index); +router.get('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.show); +router.get('/account/:address', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.showFromAddress); +router.get('/:id/applications', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.showApplications); +router.get('/:id/applications/:appId', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.showApplication); +router.get('/:id/rooms', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.getMailRooms); +router.get('/:id/dispositions', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.getDispositions); +router.post('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.create); +router.post('/:id/applications', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.createApplication); +router.post('/:id/dispositions', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.createDisposition); +router.put('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.update); +router.put('/:id/applications', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.updateApplications); +router.put('/:id/applications/:appId', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.updateApplication); +router.put('/:id/dispositions/:dispId', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.updateDisposition); +router.delete('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.bulkDestroy); +router.delete('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.destroy); +router.delete('/:id/applications', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.bulkDestroyApplications); +router.delete('/:id/applications/:appId', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.destroyApplication); +router.delete('/:id/dispositions/:dispId', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.destroyDisposition); + +module.exports = router; diff --git a/server/api/mail_account/mail_account.controller.js b/server/api/mail_account/mail_account.controller.js index 404d3f4..d69c9bb 100644 --- a/server/api/mail_account/mail_account.controller.js +++ b/server/api/mail_account/mail_account.controller.js @@ -1 +1,528 @@ -var _0x57e1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x61\x73\x79\x6E\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x4D\x61\x69\x6C\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\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","\x67\x65\x74\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x73\x75\x62\x6A\x65\x63\x74","\x66\x72\x6F\x6D","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x74\x61\x67\x73","\x77\x61\x69\x74\x69\x6E\x67","\x6C\x61\x73\x74\x45\x76\x65\x6E\x74","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x69\x73\x41\x72\x72\x61\x79","\x6C\x65\x6E\x67\x74\x68","\x25","\x3B\x25","\x70\x75\x73\x68","\x24\x61\x6E\x64","\x77\x68\x65\x72\x65","\x6D\x65\x72\x67\x65","\x69\x6E\x63\x6C\x75\x64\x65","\x65\x72\x72\x6F\x72","\x61\x67\x65\x6E\x74","\x66\x69\x6E\x64","\x55\x73\x65\x72\x49\x64","\x6D\x61\x70","\x71\x75\x65\x75\x65","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x49\x64","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E","\x75\x73\x65\x72","\x66\x69\x6E\x64\x41\x6C\x6C","\x67\x65\x74\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x72\x6F\x6C\x65","\x67\x65\x74\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x67\x65\x74\x4D\x61\x69\x6C\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77","\x73\x68\x6F\x77\x46\x72\x6F\x6D\x41\x64\x64\x72\x65\x73\x73","\x61\x64\x64\x72\x65\x73\x73","\x66\x69\x6E\x64\x4F\x6E\x65","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x6E\x61\x6D\x65","\x6F\x6E\x6C\x69\x6E\x65","\x70\x72\x69\x6F\x72\x69\x74\x79\x20\x41\x53\x43","\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","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x70\x72\x69\x6F\x72\x69\x74\x79","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x6D\x61\x78","\x63\x72\x65\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x64\x69\x73\x70\x49\x64","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x66\x6F\x72\x45\x61\x63\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x61\x70\x70\x49\x64","\x64\x65\x73\x74\x72\x6F\x79\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x6C\x6F\x67"];_0x57e1[0];var _=require(_0x57e1[1]);var util=require(_0x57e1[2]);var async=require(_0x57e1[3]);var Util=require(_0x57e1[4]);var sequelize=require(_0x57e1[6])[_0x57e1[5]];var User=require(_0x57e1[6])[_0x57e1[7]];var MailAttachment=require(_0x57e1[6])[_0x57e1[8]];var MailQueue=require(_0x57e1[6])[_0x57e1[9]];var MailRoom=require(_0x57e1[6])[_0x57e1[10]];var MailAccount=require(_0x57e1[6])[_0x57e1[11]];var MailServerIn=require(_0x57e1[6])[_0x57e1[12]];var MailServerOut=require(_0x57e1[6])[_0x57e1[13]];var MailApplication=require(_0x57e1[6])[_0x57e1[14]];var MailDisposition=require(_0x57e1[6])[_0x57e1[15]];var Interval=require(_0x57e1[6])[_0x57e1[16]];exports[_0x57e1[17]]= function(_0x776fx10,_0x776fx11){return MailAccount[_0x57e1[26]](_0x57e1[25])[_0x57e1[24]](Util[_0x57e1[23]](_0x776fx10[_0x57e1[22]]))[_0x57e1[21]](function(_0x776fx13){_0x776fx11[_0x57e1[20]](200)[_0x57e1[19]](_0x776fx13)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[27]]= function(_0x776fx10,_0x776fx11,_0x776fx14){var _0x776fx15={include:[],where:{MailAccountId:_0x776fx10[_0x57e1[29]][_0x57e1[28]],$and:[]},attributes:[_0x57e1[28],_0x57e1[30],_0x57e1[31],_0x57e1[32],_0x57e1[33],_0x57e1[34],_0x57e1[35],_0x57e1[36],_0x57e1[37]]};if(_0x776fx10[_0x57e1[22]]){if(_0x776fx10[_0x57e1[22]][_0x57e1[34]]){if(_[_0x57e1[38]](_0x776fx10[_0x57e1[22]][_0x57e1[34]])){for(var _0x776fx16=0;_0x776fx16< _0x776fx10[_0x57e1[22]][_0x57e1[34]][_0x57e1[39]];_0x776fx16++){_0x776fx15[_0x57e1[44]][_0x57e1[43]][_0x57e1[42]]({tags:{$like:_0x57e1[40]+ _0x776fx10[_0x57e1[22]][_0x57e1[34]][_0x776fx16]+ _0x57e1[41]}})}}else {_0x776fx15[_0x57e1[44]][_0x57e1[43]][_0x57e1[42]]({tags:{$like:_0x57e1[40]+ _0x776fx10[_0x57e1[22]][_0x57e1[34]]+ _0x57e1[41]}})};delete _0x776fx10[_0x57e1[22]][_0x57e1[34]]};_[_0x57e1[45]](_0x776fx15[_0x57e1[44]],_0x776fx10[_0x57e1[22]])};switch(_0x776fx10[_0x57e1[55]][_0x57e1[60]]){case _0x57e1[48]:_0x776fx15[_0x57e1[46]][_0x57e1[42]]({model:User,attributes:[_0x57e1[28]]});var _0x776fx17;var _0x776fx18;var _0x776fx19;return User[_0x57e1[58]](_0x776fx10[_0x57e1[55]][_0x57e1[28]])[_0x57e1[21]](function(_0x776fx1e){if(_0x776fx1e){return _0x776fx1e[_0x57e1[59]]()}else {return []}})[_0x57e1[21]](function(_0x776fx1d){_0x776fx18= _[_0x57e1[51]](_0x776fx1d,_0x57e1[28]);return MailAccount[_0x57e1[58]](_0x776fx10[_0x57e1[29]][_0x57e1[28]])})[_0x57e1[21]](function(_0x776fx1c){return _0x776fx1c[_0x57e1[57]]({where:{$or:[{app:_0x57e1[52]},{app:_0x57e1[48]}]}})})[_0x57e1[21]](function(_0x776fx1a){_0x776fx17= _[_0x57e1[51]](_[_0x57e1[49]](_0x776fx1a,{"\x61\x70\x70":_0x57e1[48]}),_0x57e1[50]);_0x776fx19= _[_0x57e1[51]](_[_0x57e1[49]](_0x776fx1a,{"\x61\x70\x70":_0x57e1[52]}),_0x57e1[53]);if(_[_0x57e1[54]](_0x776fx18,_0x776fx19)[_0x57e1[39]]|| _[_0x57e1[54]](_0x776fx17,[_0x776fx10[_0x57e1[55]][_0x57e1[28]]])[_0x57e1[39]]){return MailRoom[_0x57e1[56]](_0x776fx15)[_0x57e1[21]](function(_0x776fx1b){return _0x776fx11[_0x57e1[20]](200)[_0x57e1[19]](_0x776fx1b)})[_0x57e1[18]](function(_0x776fx12){console[_0x57e1[47]](_0x776fx12);return handleError(_0x776fx11,_0x776fx12)})}else {return _0x776fx11[_0x57e1[20]](200)[_0x57e1[19]]([])}})[_0x57e1[18]](function(_0x776fx12){console[_0x57e1[47]](_0x776fx12)});default:return MailRoom[_0x57e1[56]](_0x776fx15)[_0x57e1[21]](function(_0x776fx1b){return _0x776fx11[_0x57e1[20]](200)[_0x57e1[19]](_0x776fx1b)})[_0x57e1[18]](function(_0x776fx12){console[_0x57e1[47]](_0x776fx12);return handleError(_0x776fx11,_0x776fx12)})}};exports[_0x57e1[61]]= function(_0x776fx10,_0x776fx11,_0x776fx14){return MailAccount[_0x57e1[58]](_0x776fx10[_0x57e1[29]][_0x57e1[28]])[_0x57e1[21]](function(_0x776fx20){if(!_0x776fx20){return _0x776fx11[_0x57e1[62]](404)};return _0x776fx20[_0x57e1[63]]()})[_0x57e1[21]](function(_0x776fx1f){return _0x776fx11[_0x57e1[20]](200)[_0x57e1[19]]({rows:_0x776fx1f,count:_0x776fx1f[_0x57e1[39]]})})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[64]]= function(_0x776fx10,_0x776fx11,_0x776fx14){return MailAccount[_0x57e1[26]](_0x57e1[25])[_0x57e1[58]](_0x776fx10[_0x57e1[29]][_0x57e1[28]])[_0x57e1[21]](function(_0x776fx20){if(!_0x776fx20){return _0x776fx11[_0x57e1[62]](404)};return _0x776fx11[_0x57e1[19]](_0x776fx20)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[65]]= function(_0x776fx10,_0x776fx11,_0x776fx14){return MailAccount[_0x57e1[67]]({where:{address:_0x776fx10[_0x57e1[29]][_0x57e1[66]]}})[_0x57e1[21]](function(_0x776fx20){if(!_0x776fx20){return _0x776fx11[_0x57e1[62]](404)};return _0x776fx11[_0x57e1[19]](_0x776fx20)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[68]]= function(_0x776fx10,_0x776fx11,_0x776fx14){return MailAccount[_0x57e1[26]](_0x57e1[25])[_0x57e1[58]](_0x776fx10[_0x57e1[29]][_0x57e1[28]])[_0x57e1[21]](function(_0x776fx20){if(!_0x776fx20){return _0x776fx11[_0x57e1[62]](404)};return _0x776fx20[_0x57e1[57]](_[_0x57e1[45]](Util[_0x57e1[23]](_0x776fx10[_0x57e1[22]]),{include:[{model:MailQueue,attributes:[_0x57e1[28],_0x57e1[69]]},{model:User,attributes:[_0x57e1[28],_0x57e1[69],_0x57e1[70]]},{model:Interval,attributes:[_0x57e1[28],_0x57e1[69]]}],order:_0x57e1[71]}))})[_0x57e1[21]](function(_0x776fx21){return _0x776fx11[_0x57e1[19]]({count:_0x776fx21[_0x57e1[39]],rows:_0x776fx21})})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[72]]= function(_0x776fx10,_0x776fx11,_0x776fx14){return sequelize[_0x57e1[76]](function(_0x776fx22){return MailAccount[_0x57e1[72]](_0x776fx10[_0x57e1[75]],{include:[{model:MailServerIn},{model:MailServerOut}],transaction:_0x776fx22})})[_0x57e1[21]](function(_0x776fx20){return _0x776fx11[_0x57e1[20]](201)[_0x57e1[19]](_0x776fx20)})[_0x57e1[18]](sequelize.UniqueConstraintError,function(_0x776fx12){return Util[_0x57e1[74]][_0x57e1[73]](_0x776fx11,_0x776fx12)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[77]]= function(_0x776fx10,_0x776fx11,_0x776fx14){return MailApplication[_0x57e1[80]](_0x57e1[78],{where:{MailAccountId:_0x776fx10[_0x57e1[29]][_0x57e1[28]]}})[_0x57e1[21]](function(_0x776fx24){_0x776fx10[_0x57e1[75]][_0x57e1[78]]= _0x776fx24?++_0x776fx24:1;_0x776fx10[_0x57e1[75]][_0x57e1[79]]= _0x776fx10[_0x57e1[29]][_0x57e1[28]];return MailApplication[_0x57e1[72]](_0x776fx10[_0x57e1[75]])})[_0x57e1[21]](function(_0x776fx23){return _0x776fx11[_0x57e1[20]](201)[_0x57e1[19]](_0x776fx23)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[81]]= function(_0x776fx10,_0x776fx11,_0x776fx14){_0x776fx10[_0x57e1[75]][_0x57e1[79]]= _0x776fx10[_0x57e1[29]][_0x57e1[28]];return MailDisposition[_0x57e1[72]](_0x776fx10[_0x57e1[75]])[_0x57e1[21]](function(_0x776fx25){return _0x776fx11[_0x57e1[20]](201)[_0x57e1[19]](_0x776fx25)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[82]]= function(_0x776fx10,_0x776fx11){if(_0x776fx10[_0x57e1[75]][_0x57e1[28]]){delete _0x776fx10[_0x57e1[75]][_0x57e1[28]]};return MailAccount[_0x57e1[58]](_0x776fx10[_0x57e1[29]][_0x57e1[28]])[_0x57e1[21]](function(_0x776fx20){if(!_0x776fx20){return _0x776fx11[_0x57e1[62]](404)};var _0x776fx26=_[_0x57e1[45]](_0x776fx20,_0x776fx10[_0x57e1[75]]);return _0x776fx26[_0x57e1[83]]()})[_0x57e1[21]](function(_0x776fx20){return _0x776fx11[_0x57e1[20]](200)[_0x57e1[19]](_0x776fx20)})[_0x57e1[18]](sequelize.UniqueConstraintError,function(_0x776fx12){return Util[_0x57e1[74]][_0x57e1[73]](_0x776fx11,_0x776fx12)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[84]]= function(_0x776fx10,_0x776fx11){if(_0x776fx10[_0x57e1[75]][_0x57e1[28]]){delete _0x776fx10[_0x57e1[75]][_0x57e1[28]]};return MailDisposition[_0x57e1[58]](_0x776fx10[_0x57e1[29]][_0x57e1[85]])[_0x57e1[21]](function(_0x776fx27){if(!_0x776fx27){return _0x776fx11[_0x57e1[62]](404)};var _0x776fx26=_[_0x57e1[45]](_0x776fx27,_0x776fx10[_0x57e1[75]]);return _0x776fx26[_0x57e1[83]]()})[_0x57e1[21]](function(_0x776fx20){return _0x776fx11[_0x57e1[20]](200)[_0x57e1[19]](_0x776fx20)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[86]]= function(_0x776fx10,_0x776fx11){var _0x776fx28=0;var _0x776fx1a=_0x776fx10[_0x57e1[75]];_0x776fx1a[_0x57e1[88]](function(_0x776fx29){delete _0x776fx29[_0x57e1[28]];delete _0x776fx29[_0x57e1[87]];delete _0x776fx29[_0x57e1[37]];_0x776fx29[_0x57e1[78]]= ++_0x776fx28});return sequelize[_0x57e1[76]](function(_0x776fx22){return MailApplication[_0x57e1[90]]({where:{MailAccountId:_0x776fx10[_0x57e1[29]][_0x57e1[28]]},individualHooks:true,transaction:_0x776fx22})[_0x57e1[21]](function(_0x776fx23){return MailApplication[_0x57e1[89]](_0x776fx1a,{individualHooks:true,transaction:_0x776fx22})})})[_0x57e1[21]](function(_0x776fx2a){return _0x776fx11[_0x57e1[20]](200)[_0x57e1[19]]({count:_0x776fx2a[_0x57e1[39]],rows:_0x776fx2a})})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[90]]= function(_0x776fx10,_0x776fx11,_0x776fx14){return MailAccount[_0x57e1[58]](_0x776fx10[_0x57e1[29]][_0x57e1[28]])[_0x57e1[21]](function(_0x776fx20){if(!_0x776fx20){return _0x776fx11[_0x57e1[62]](404)};return _0x776fx20[_0x57e1[90]]()})[_0x57e1[21]](function(){return _0x776fx11[_0x57e1[62]](204)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[91]]= function(_0x776fx10,_0x776fx11,_0x776fx14){return MailApplication[_0x57e1[58]](_0x776fx10[_0x57e1[29]][_0x57e1[92]])[_0x57e1[21]](function(_0x776fx23){if(!_0x776fx23){return _0x776fx11[_0x57e1[62]](404)};return _0x776fx23[_0x57e1[90]]()})[_0x57e1[21]](function(){return _0x776fx11[_0x57e1[62]](204)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[93]]= function(_0x776fx10,_0x776fx11,_0x776fx14){return MailDisposition[_0x57e1[58]](_0x776fx10[_0x57e1[29]][_0x57e1[85]])[_0x57e1[21]](function(_0x776fx25){if(!_0x776fx25){return _0x776fx11[_0x57e1[62]](404)};return _0x776fx25[_0x57e1[90]]()})[_0x57e1[21]](function(){return _0x776fx11[_0x57e1[62]](204)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[94]]= function(_0x776fx10,_0x776fx11){return MailAccount[_0x57e1[90]]({where:{id:_0x776fx10[_0x57e1[22]][_0x57e1[95]]},individualHooks:true})[_0x57e1[21]](function(){return _0x776fx11[_0x57e1[62]](204)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[96]]= function(_0x776fx10,_0x776fx11){return MailApplication[_0x57e1[90]]({where:{id:_0x776fx10[_0x57e1[22]][_0x57e1[95]]},individualHooks:true})[_0x57e1[21]](function(){return _0x776fx11[_0x57e1[62]](204)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[97]]= function(_0x776fx10,_0x776fx11){return MailApplication[_0x57e1[58]](_0x776fx10[_0x57e1[29]][_0x57e1[92]],{include:[{all:true}]})[_0x57e1[21]](function(_0x776fx23){if(!_0x776fx23){return _0x776fx11[_0x57e1[62]](404)};return _0x776fx11[_0x57e1[19]](_0x776fx23)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};exports[_0x57e1[98]]= function(_0x776fx10,_0x776fx11){if(_0x776fx10[_0x57e1[75]][_0x57e1[28]]){delete _0x776fx10[_0x57e1[75]][_0x57e1[28]]};return MailApplication[_0x57e1[58]](_0x776fx10[_0x57e1[29]][_0x57e1[92]])[_0x57e1[21]](function(_0x776fx23){if(!_0x776fx23){return _0x776fx11[_0x57e1[62]](404)};var _0x776fx26=_[_0x57e1[45]](_0x776fx23,_0x776fx10[_0x57e1[75]]);return _0x776fx26[_0x57e1[83]]()})[_0x57e1[21]](function(_0x776fx23){return _0x776fx11[_0x57e1[20]](200)[_0x57e1[19]](_0x776fx23)})[_0x57e1[18]](function(_0x776fx12){return handleError(_0x776fx11,_0x776fx12)})};function handleError(_0x776fx11,_0x776fx12){console[_0x57e1[99]](_0x776fx12);return _0x776fx11[_0x57e1[20]](500)[_0x57e1[19]](_0x776fx12)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var async = require('async'); + +var Util = require('../../config/util'); + +var sequelize = require('../../models').sequelize; +var User = require('../../models').User; +var MailAttachment = require('../../models').MailAttachment; +var MailQueue = require('../../models').MailQueue; +var MailRoom = require('../../models').MailRoom; +var MailAccount = require('../../models').MailAccount; +var MailServerIn = require('../../models').MailServerIn; +var MailServerOut = require('../../models').MailServerOut; +var MailApplication = require('../../models').MailApplication; +var MailDisposition = require('../../models').MailDisposition; +var Interval = require('../../models').Interval; + +// Get list of mailAccounts +exports.index = function(req, res) { + return MailAccount + .scope('default') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getMailRooms = function(req, res, next) { + var _query = { + include: [], + where: { + MailAccountId: req.params.id, + $and: [] + }, + attributes: ['id', 'subject', 'from', 'attachment', 'disposition', 'tags', 'waiting', 'lastEvent', 'updatedAt'] + }; + + // TO MOVE SOON INTO AN EXTENAL UTIL FILE + if (req.query) { + if (req.query.tags) { + if (_.isArray(req.query.tags)) { + for (var i = 0; i < req.query.tags.length; i++) { + _query.where.$and.push({ + tags: { + $like: '%' + req.query.tags[i] + ';%' + } + }); + } + } else { + _query.where.$and.push({ + tags: { + $like: '%' + req.query.tags + ';%' + } + }); + } + delete req.query.tags; + } + _.merge(_query.where, req.query); + } + + switch (req.user.role) { + case 'agent': + _query.include.push({ + model: User, + attributes: ['id'] + }); + + var _agents; + var _agentQueues; + var _accountQueues; + + return User + .findById(req.user.id) + .then(function(user) { + if (user) { + return user + .getMailQueues(); + } else { + return []; + } + }) + .then(function(queues) { + _agentQueues = _.map(queues, 'id'); + + return MailAccount + .findById(req.params.id); + }) + .then(function(account) { + return account + .getMailApplications({ + where: { + $or: [{ + app: 'queue' + }, { + app: 'agent' + }] + } + }); + }) + .then(function(apps) { + _agents = _.map(_.find(apps, { + 'app': 'agent' + }), 'UserId'); + + _accountQueues = _.map(_.find(apps, { + 'app': 'queue' + }), 'MailQueueId'); + + if (_.intersection(_agentQueues, _accountQueues).length || _.intersection(_agents, [req.user.id]).length) { + return MailRoom + .findAll(_query) + .then(function(mailRooms) { + return res.status(200).send(mailRooms); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); + } else { + + return res.status(200).send([]); + } + }) + .catch(function(err) { + console.error(err); + }); + + default: + + return MailRoom + .findAll(_query) + .then(function(mailRooms) { + return res.status(200).send(mailRooms); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); + } +}; + +exports.getDispositions = function(req, res, next) { + return MailAccount + .findById(req.params.id) + .then(function(mailAccount) { + if (!mailAccount) { + return res.sendStatus(404); + } + + return mailAccount + .getMailDispositions(); + }) + .then(function(mailDispositions) { + return res.status(200).send({ + rows: mailDispositions, + count: mailDispositions.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single mailAccount +exports.show = function(req, res, next) { + return MailAccount + .scope('default') + .findById(req.params.id) + .then(function(mailAccount) { + if (!mailAccount) { + return res.sendStatus(404); + } + return res.send(mailAccount); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.showFromAddress = function(req, res, next) { + return MailAccount + .findOne({ + where: { + address: req.params.address + } + }) + .then(function(mailAccount) { + if (!mailAccount) { + return res.sendStatus(404); + } + return res.send(mailAccount); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single mailAccount +exports.showApplications = function(req, res, next) { + return MailAccount + .scope('default') + .findById(req.params.id) + .then(function(mailAccount) { + if (!mailAccount) { + return res.sendStatus(404); + } + return mailAccount + .getMailApplications(_.merge(Util.getQuery(req.query), { + include: [{ + model: MailQueue, + attributes: ['id', 'name'] + }, { + model: User, + attributes: ['id', 'name', 'online'] + }, { + model: Interval, + attributes: ['id', 'name'] + }], + order: 'priority ASC' + })); + }) + .then(function(mailApplications) { + return res.send({ + count: mailApplications.length, + rows: mailApplications + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new mailAccount in the DB. +exports.create = function(req, res, next) { + return sequelize.transaction(function(t) { + return MailAccount + .create(req.body, { + include: [{ + model: MailServerIn + }, { + model: MailServerOut + }], + transaction: t + }); + }).then(function(mailAccount) { + return res.status(201).send(mailAccount); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new mailApplication in the DB. +exports.createApplication = function(req, res, next) { + + return MailApplication + .max('priority', { + where: { + MailAccountId: req.params.id + } + }).then(function(max) { + // SET PRIORITY + req.body.priority = max ? ++max : 1; + req.body.MailAccountId = req.params.id; + + return MailApplication + .create(req.body); + }) + .then(function(mailApplication) { + return res.status(201).send(mailApplication); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new mailAccount in the DB. +exports.createDisposition = function(req, res, next) { + req.body.MailAccountId = req.params.id; + + return MailDisposition + .create(req.body) + .then(function(mailDiposition) { + return res.status(201).send(mailDiposition); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + + +// Updates an existing mailAccount in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return MailAccount + .findById(req.params.id) + .then(function(mailAccount) { + if (!mailAccount) { + return res.sendStatus(404); + } + var updated = _.merge(mailAccount, req.body); + return updated + .save(); + }) + .then(function(mailAccount) { + return res.status(200).send(mailAccount); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing mailAccount in the DB. +exports.updateDisposition = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return MailDisposition + .findById(req.params.dispId) + .then(function(mailDisposition) { + if (!mailDisposition) { + return res.sendStatus(404); + } + var updated = _.merge(mailDisposition, req.body); + return updated + .save(); + }) + .then(function(mailAccount) { + return res.status(200).send(mailAccount); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing mailAccount in the DB. +exports.updateApplications = function(req, res) { + + var priority = 0; + var apps = req.body; + + apps.forEach(function(app) { + delete app.id; + delete app.createdAt; + delete app.updatedAt; + + app.priority = ++priority; + }); + + return sequelize.transaction(function(t) { + return MailApplication + .destroy({ + where: { + MailAccountId: req.params.id + }, + individualHooks: true, + transaction: t + }).then(function(mailApplication) { + return MailApplication + .bulkCreate(apps, { + individualHooks: true, + transaction: t + }); + }); + }).then(function(mailAccounts) { + return res.status(200).send({ + count: mailAccounts.length, + rows: mailAccounts + }); + }).catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a mailAccount from the DB. +exports.destroy = function(req, res, next) { + return MailAccount + .findById(req.params.id) + .then(function(mailAccount) { + if (!mailAccount) { + return res.sendStatus(404); + } + + return mailAccount + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a mailAccount from the DB. +exports.destroyApplication = function(req, res, next) { + return MailApplication + .findById(req.params.appId) + .then(function(mailApplication) { + if (!mailApplication) { + return res.sendStatus(404); + } + + return mailApplication + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a mailAccount from the DB. +exports.destroyDisposition = function(req, res, next) { + return MailDisposition + .findById(req.params.dispId) + .then(function(mailDiposition) { + if (!mailDiposition) { + return res.sendStatus(404); + } + + return mailDiposition + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a agent from the DB. +exports.bulkDestroy = function(req, res) { + return MailAccount + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a agent from the DB. +exports.bulkDestroyApplications = function(req, res) { + return MailApplication + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.showApplication = function(req, res) { + return MailApplication + .findById(req.params.appId, { + include: [{ + all: true + }] + }) + .then(function(mailApplication) { + if (!mailApplication) { + return res.sendStatus(404); + } + return res.send(mailApplication); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.updateApplication = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return MailApplication + .findById(req.params.appId) + .then(function(mailApplication) { + if (!mailApplication) { + return res.sendStatus(404); + } + var updated = _.merge(mailApplication, req.body); + return updated + .save(); + }) + .then(function(mailApplication) { + return res.status(200).send(mailApplication); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +function handleError(res, err) { + console.log(err); + return res.status(500).send(err); +} diff --git a/server/api/mail_account/mail_account.events.js b/server/api/mail_account/mail_account.events.js index aee58cd..b5d3ffa 100644 --- a/server/api/mail_account/mail_account.events.js +++ b/server/api/mail_account/mail_account.events.js @@ -1 +1,36 @@ -var _0x1687=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x1687[0];const EventEmitter=require(_0x1687[1]);const MailAccount=require(_0x1687[3])[_0x1687[2]];var MailAccountEvents= new EventEmitter();MailAccountEvents[_0x1687[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x1687[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x1687[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x1687[6]};for(var e in events){var event=events[e];MailAccount[_0x1687[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x76e1x8,_0x76e1x9,_0x76e1xa){MailAccountEvents[_0x1687[10]](event+ _0x1687[8]+ _0x76e1x8[_0x1687[9]],_0x76e1x8);MailAccountEvents[_0x1687[10]](event,_0x76e1x8);_0x76e1xa(null)}}module[_0x1687[11]]= MailAccountEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const MailAccount = require('../../models').MailAccount; + +var MailAccountEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +MailAccountEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + MailAccount.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + MailAccountEvents.emit(event + ':' + doc._id, doc); + MailAccountEvents.emit(event, doc); + done(null); + } +} + +module.exports = MailAccountEvents; diff --git a/server/api/mail_account/mail_account.socket.js b/server/api/mail_account/mail_account.socket.js index d09dff7..64b2c78 100644 --- a/server/api/mail_account/mail_account.socket.js +++ b/server/api/mail_account/mail_account.socket.js @@ -1 +1,28 @@ -var _0xf28c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6D\x61\x69\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6D\x61\x69\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xf28c[0];const MailAccountEvents=require(_0xf28c[1]);var events=[_0xf28c[2],_0xf28c[3]];exports[_0xf28c[4]]= function(_0xd2dbx3){for(var _0xd2dbx4=0,_0xd2dbx5=events[_0xf28c[5]];_0xd2dbx4< _0xd2dbx5;_0xd2dbx4++){var _0xd2dbx6=events[_0xd2dbx4];var _0xd2dbx7=createListener(_0xf28c[6]+ _0xd2dbx6,_0xd2dbx3);MailAccountEvents[_0xf28c[7]](_0xd2dbx6,_0xd2dbx7);_0xd2dbx3[_0xf28c[7]](_0xf28c[8],removeListener(_0xd2dbx6,_0xd2dbx7))}};function createListener(_0xd2dbx6,_0xd2dbx3){return function(_0xd2dbx9){_0xd2dbx3[_0xf28c[9]](_0xd2dbx6,_0xd2dbx9)}}function removeListener(_0xd2dbx6,_0xd2dbx7){return function(){MailAccountEvents[_0xf28c[10]](_0xd2dbx6,_0xd2dbx7)}} \ No newline at end of file +'use strict'; + +const MailAccountEvents = require('./mail_account.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('mail_account:' + event, socket); + + MailAccountEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + MailAccountEvents.removeListener(event, listener); + }; +} diff --git a/server/api/mail_application/index.js b/server/api/mail_application/index.js index 75bf33e..7f53439 100644 --- a/server/api/mail_application/index.js +++ b/server/api/mail_application/index.js @@ -1 +1,17 @@ -var _0x1739=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x4D\x61\x69\x6C","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x1739[0];var express=require(_0x1739[1]);var controller=require(_0x1739[2]);var auth=require(_0x1739[3]);var license=require(_0x1739[4]);var router=express.Router();router[_0x1739[12]](_0x1739[5],license[_0x1739[6]](),license[_0x1739[7]](),auth[_0x1739[8]](),auth[_0x1739[10]]([9],[_0x1739[9]]),controller[_0x1739[11]]);router[_0x1739[12]](_0x1739[13],license[_0x1739[6]](),license[_0x1739[7]](),auth[_0x1739[8]](),auth[_0x1739[10]]([9],[_0x1739[9]]),controller[_0x1739[14]]);router[_0x1739[16]](_0x1739[5],license[_0x1739[6]](),license[_0x1739[7]](),auth[_0x1739[8]](),auth[_0x1739[10]]([9],[_0x1739[9]]),controller[_0x1739[15]]);router[_0x1739[18]](_0x1739[13],license[_0x1739[6]](),license[_0x1739[7]](),auth[_0x1739[8]](),auth[_0x1739[10]]([9],[_0x1739[9]]),controller[_0x1739[17]]);router[_0x1739[20]](_0x1739[13],license[_0x1739[6]](),license[_0x1739[7]](),auth[_0x1739[8]](),auth[_0x1739[10]]([9],[_0x1739[9]]),controller[_0x1739[19]]);module[_0x1739[21]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./mail_application.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.index); +router.get('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.show); +router.post('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.create); +router.put('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.update); +router.delete('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/mail_application/mail_application.controller.js b/server/api/mail_application/mail_application.controller.js index 50c341d..0a75c15 100644 --- a/server/api/mail_application/mail_application.controller.js +++ b/server/api/mail_application/mail_application.controller.js @@ -1 +1,102 @@ -var _0xda49=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x70\x72\x69\x6F\x72\x69\x74\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x6D\x61\x78","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xda49[0];var _=require(_0xda49[1]);var MailApplication=require(_0xda49[3])[_0xda49[2]];exports[_0xda49[4]]= function(_0xe043x3,_0xe043x4,_0xe043x5){return MailApplication[_0xda49[11]]({where:_0xe043x3[_0xda49[9]],order:_0xda49[10],include:[{all:true}]})[_0xda49[8]](function(_0xe043x7){return _0xe043x4[_0xda49[7]](200)[_0xda49[6]](_0xe043x7)})[_0xda49[5]](function(_0xe043x6){return handleError(_0xe043x4,_0xe043x6)})};exports[_0xda49[12]]= function(_0xe043x3,_0xe043x4,_0xe043x5){return MailApplication[_0xda49[16]](_0xe043x3[_0xda49[15]][_0xda49[14]],{include:[{all:true}]})[_0xda49[8]](function(_0xe043x8){if(!_0xe043x8){return _0xe043x4[_0xda49[13]](404)};return _0xe043x4[_0xda49[6]](_0xe043x8)})[_0xda49[5]](function(_0xe043x6){return handleError(_0xe043x4,_0xe043x6)})};exports[_0xda49[17]]= function(_0xe043x3,_0xe043x4,_0xe043x5){return MailApplication[_0xda49[20]](_0xda49[10],{where:{MailAccountId:_0xe043x3[_0xda49[18]][_0xda49[19]]}})[_0xda49[8]](function(_0xe043x9){_0xe043x3[_0xda49[18]][_0xda49[10]]= _0xe043x9?++_0xe043x9:1;return MailApplication[_0xda49[17]](_0xe043x3[_0xda49[18]])})[_0xda49[8]](function(_0xe043x8){return _0xe043x4[_0xda49[7]](201)[_0xda49[6]](_0xe043x8)})[_0xda49[5]](function(_0xe043x6){return handleError(_0xe043x4,_0xe043x6)})};exports[_0xda49[21]]= function(_0xe043x3,_0xe043x4,_0xe043x5){if(_0xe043x3[_0xda49[18]][_0xda49[14]]){delete _0xe043x3[_0xda49[18]][_0xda49[14]]};return MailApplication[_0xda49[16]](_0xe043x3[_0xda49[15]][_0xda49[14]])[_0xda49[8]](function(_0xe043x8){if(!_0xe043x8){return _0xe043x4[_0xda49[13]](404)};var _0xe043xa=_[_0xda49[22]](_0xe043x8,_0xe043x3[_0xda49[18]]);return _0xe043xa[_0xda49[23]]()})[_0xda49[8]](function(_0xe043x8){return _0xe043x4[_0xda49[7]](200)[_0xda49[6]](_0xe043x8)})[_0xda49[5]](function(_0xe043x6){return handleError(_0xe043x4,_0xe043x6)})};exports[_0xda49[24]]= function(_0xe043x3,_0xe043x4,_0xe043x5){return MailApplication[_0xda49[16]](_0xe043x3[_0xda49[15]][_0xda49[14]])[_0xda49[8]](function(_0xe043x8){if(!_0xe043x8){return _0xe043x4[_0xda49[13]](404)};return _0xe043x8[_0xda49[24]]()})[_0xda49[8]](function(){return _0xe043x4[_0xda49[13]](204)})[_0xda49[5]](function(_0xe043x6){return handleError(_0xe043x4,_0xe043x6)})};function handleError(_0xe043x4,_0xe043x6){return _0xe043x4[_0xda49[7]](500)[_0xda49[6]](_0xe043x6)} \ No newline at end of file +'use strict'; +var _ = require('lodash'); +var MailApplication = require('../../models').MailApplication; +// Get list of mailApplications +exports.index = function(req, res, next) { + return MailApplication + .findAll({ + where: req.query, + order: 'priority', + include: [{ + all: true + }] + }) + .then(function(mailApplications) { + return res.status(200).send(mailApplications); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Get a single mailApplication +exports.show = function(req, res, next) { + return MailApplication + .findById(req.params.id, { + include: [{ + all: true + }] + }) + .then(function(mailApplication) { + if (!mailApplication) { + return res.sendStatus(404); + } + return res.send(mailApplication); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Creates a new mailApplication in the DB. +exports.create = function(req, res, next) { + return MailApplication + .max('priority', { + where: { + MailAccountId: req.body.MailAccountId + } + }).then(function(max) { + // SET PRIORITY + req.body.priority = max ? ++max : 1; + return MailApplication + .create(req.body); + }) + .then(function(mailApplication) { + return res.status(201).send(mailApplication); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Updates an existing mailApplication in the DB. +exports.update = function(req, res, next) { + if (req.body.id) { + delete req.body.id; + } + return MailApplication + .findById(req.params.id) + .then(function(mailApplication) { + if (!mailApplication) { + return res.sendStatus(404); + } + var updated = _.merge(mailApplication, req.body); + return updated + .save(); + }) + .then(function(mailApplication) { + return res.status(200).send(mailApplication); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Deletes a mailApplication from the DB. +exports.destroy = function(req, res, next) { + return MailApplication + .findById(req.params.id) + .then(function(mailApplication) { + if (!mailApplication) { + return res.sendStatus(404); + } + return mailApplication + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/mail_application/mail_application.events.js b/server/api/mail_application/mail_application.events.js index 7e075e3..99d6421 100644 --- a/server/api/mail_application/mail_application.events.js +++ b/server/api/mail_application/mail_application.events.js @@ -1 +1,36 @@ -var _0x7766=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x7766[0];const EventEmitter=require(_0x7766[1]);const MailApplication=require(_0x7766[3])[_0x7766[2]];var MailApplicationEvents= new EventEmitter();MailApplicationEvents[_0x7766[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x7766[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x7766[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x7766[6]};for(var e in events){var event=events[e];MailApplication[_0x7766[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xe3f4x8,_0xe3f4x9,_0xe3f4xa){MailApplicationEvents[_0x7766[10]](event+ _0x7766[8]+ _0xe3f4x8[_0x7766[9]],_0xe3f4x8);MailApplicationEvents[_0x7766[10]](event,_0xe3f4x8);_0xe3f4xa(null)}}module[_0x7766[11]]= MailApplicationEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const MailApplication = require('../../models').MailApplication; + +var MailApplicationEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +MailApplicationEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + MailApplication.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + MailApplicationEvents.emit(event + ':' + doc._id, doc); + MailApplicationEvents.emit(event, doc); + done(null); + } +} + +module.exports = MailApplicationEvents; diff --git a/server/api/mail_application/mail_application.socket.js b/server/api/mail_application/mail_application.socket.js index 67da0a5..4243448 100644 --- a/server/api/mail_application/mail_application.socket.js +++ b/server/api/mail_application/mail_application.socket.js @@ -1 +1,28 @@ -var _0x847a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6D\x61\x69\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6D\x61\x69\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x847a[0];const MailApplicationEvents=require(_0x847a[1]);var events=[_0x847a[2],_0x847a[3]];exports[_0x847a[4]]= function(_0x9cd7x3){for(var _0x9cd7x4=0,_0x9cd7x5=events[_0x847a[5]];_0x9cd7x4< _0x9cd7x5;_0x9cd7x4++){var _0x9cd7x6=events[_0x9cd7x4];var _0x9cd7x7=createListener(_0x847a[6]+ _0x9cd7x6,_0x9cd7x3);MailApplicationEvents[_0x847a[7]](_0x9cd7x6,_0x9cd7x7);_0x9cd7x3[_0x847a[7]](_0x847a[8],removeListener(_0x9cd7x6,_0x9cd7x7))}};function createListener(_0x9cd7x6,_0x9cd7x3){return function(_0x9cd7x9){_0x9cd7x3[_0x847a[9]](_0x9cd7x6,_0x9cd7x9)}}function removeListener(_0x9cd7x6,_0x9cd7x7){return function(){MailApplicationEvents[_0x847a[10]](_0x9cd7x6,_0x9cd7x7)}} \ No newline at end of file +'use strict'; + +const MailApplicationEvents = require('./mail_application.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('mail_application:' + event, socket); + + MailApplicationEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + MailApplicationEvents.removeListener(event, listener); + }; +} diff --git a/server/api/mail_attachment/index.js b/server/api/mail_attachment/index.js index e0f1346..8118efb 100644 --- a/server/api/mail_attachment/index.js +++ b/server/api/mail_attachment/index.js @@ -1 +1,17 @@ -var _0x180c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x4D\x61\x69\x6C","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x180c[0];var express=require(_0x180c[1]);var controller=require(_0x180c[2]);var auth=require(_0x180c[3]);var license=require(_0x180c[4]);var router=express.Router();router[_0x180c[13]](_0x180c[5],license[_0x180c[6]](),license[_0x180c[7]](),auth[_0x180c[8]](),auth[_0x180c[11]]([9],[_0x180c[9],_0x180c[10]]),controller[_0x180c[12]]);router[_0x180c[13]](_0x180c[14],license[_0x180c[6]](),license[_0x180c[7]](),controller[_0x180c[15]]);router[_0x180c[17]](_0x180c[5],license[_0x180c[6]](),license[_0x180c[7]](),auth[_0x180c[8]](),auth[_0x180c[11]]([9],[_0x180c[9],_0x180c[10]]),controller[_0x180c[16]]);router[_0x180c[19]](_0x180c[14],license[_0x180c[6]](),license[_0x180c[7]](),auth[_0x180c[8]](),auth[_0x180c[11]]([9],[_0x180c[9],_0x180c[10]]),controller[_0x180c[18]]);router[_0x180c[21]](_0x180c[14],license[_0x180c[6]](),license[_0x180c[7]](),auth[_0x180c[8]](),auth[_0x180c[11]]([9],[_0x180c[9],_0x180c[10]]),controller[_0x180c[20]]);module[_0x180c[22]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./mail_attachment.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.index); +router.get('/:id', license.isValidDate(), license.hasMail(), controller.show); +router.post('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.create); +router.put('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.update); +router.delete('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.destroy); + +module.exports = router; diff --git a/server/api/mail_attachment/mail_attachment.controller.js b/server/api/mail_attachment/mail_attachment.controller.js index 19c5279..2d24f24 100644 --- a/server/api/mail_attachment/mail_attachment.controller.js +++ b/server/api/mail_attachment/mail_attachment.controller.js @@ -1 +1,97 @@ -var _0x3e74=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x70\x61\x74\x68","\x66\x73","\x66\x6F\x72\x6D\x69\x64\x61\x62\x6C\x65","\x62\x6C\x75\x65\x62\x69\x72\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x46\x69\x6C\x65","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x6C\x6F\x67","\x75\x70\x6C\x6F\x61\x64\x44\x69\x72","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x6A\x6F\x69\x6E","\x6B\x65\x65\x70\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x6D\x75\x6C\x74\x69\x70\x6C\x65\x73","\x68\x61\x73\x68","\x73\x69\x7A\x65","\x66\x69\x6C\x65","\x6E\x61\x6D\x65","\x74\x79\x70\x65","\x62\x61\x73\x65\x6E\x61\x6D\x65","\x70\x61\x72\x73\x65","\x75\x70\x64\x61\x74\x65","\x62\x6F\x64\x79","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x75\x6E\x6C\x69\x6E\x6B","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79"];_0x3e74[0];var _=require(_0x3e74[1]);var path=require(_0x3e74[2]);var fs=require(_0x3e74[3]);var formidable=require(_0x3e74[4]);var Promise=require(_0x3e74[5]);var config=require(_0x3e74[6]);var MailAttachment=require(_0x3e74[8])[_0x3e74[7]];exports[_0x3e74[9]]= function(_0x9f80x8,_0x9f80x9,_0x9f80xa){return MailAttachment[_0x3e74[14]]()[_0x3e74[13]](function(_0x9f80xc){return _0x9f80x9[_0x3e74[12]](200)[_0x3e74[11]](_0x9f80xc)})[_0x3e74[10]](function(_0x9f80xb){return handleError(_0x9f80x9,_0x9f80xb)})};exports[_0x3e74[15]]= function(_0x9f80x8,_0x9f80x9,_0x9f80xa){return MailAttachment[_0x3e74[19]](_0x9f80x8[_0x3e74[18]][_0x3e74[17]])[_0x3e74[13]](function(_0x9f80xd){return _0x9f80x9[_0x3e74[16]](_0x9f80xd[_0x3e74[2]])})[_0x3e74[10]](function(_0x9f80xb){return handleError(_0x9f80x9,_0x9f80xb)})};exports[_0x3e74[20]]= function(_0x9f80x8,_0x9f80x9,_0x9f80xa){console[_0x3e74[21]](_0x9f80x8);var _0x9f80xe= new formidable.IncomingForm();_0x9f80xe[_0x3e74[22]]= path[_0x3e74[27]](config[_0x3e74[23]],_0x3e74[24],_0x3e74[25],_0x3e74[26]);_0x9f80xe[_0x3e74[28]]= true;_0x9f80xe[_0x3e74[29]]= true;_0x9f80xe[_0x3e74[30]]= true;_0x9f80xe[_0x3e74[36]](_0x9f80x8,function(_0x9f80xb,_0x9f80xe,_0x9f80xf){if(_0x9f80xb){return _0x9f80x9[_0x3e74[12]](500)[_0x3e74[11]](_0x9f80xb)};return _0x9f80x9[_0x3e74[12]](201)[_0x3e74[11]]({size:_0x9f80xf[_0x3e74[32]][_0x3e74[31]],path:_0x9f80xf[_0x3e74[32]][_0x3e74[2]],name:_0x9f80xf[_0x3e74[32]][_0x3e74[33]],type:_0x9f80xf[_0x3e74[32]][_0x3e74[34]],basename:path[_0x3e74[35]](_0x9f80xf[_0x3e74[32]][_0x3e74[2]])})})};exports[_0x3e74[37]]= function(_0x9f80x8,_0x9f80x9,_0x9f80xa){if(_0x9f80x8[_0x3e74[38]][_0x3e74[17]]){delete _0x9f80x8[_0x3e74[38]][_0x3e74[17]]};return MailAttachment[_0x3e74[19]](_0x9f80x8[_0x3e74[18]][_0x3e74[17]])[_0x3e74[13]](function(_0x9f80xd){if(!_0x9f80xd){return _0x9f80x9[_0x3e74[39]](404)};var _0x9f80x10=_[_0x3e74[40]](_0x9f80xd,_0x9f80x8[_0x3e74[38]]);return _0x9f80x10[_0x3e74[41]]()})[_0x3e74[13]](function(_0x9f80xd){return _0x9f80x9[_0x3e74[12]](200)[_0x3e74[11]](_0x9f80xd)})[_0x3e74[10]](function(_0x9f80xb){return handleError(_0x9f80x9,_0x9f80xb)})};exports[_0x3e74[42]]= function(_0x9f80x8,_0x9f80x9,_0x9f80xa){var _0x9f80x11=Promise[_0x3e74[44]](require(_0x3e74[3])[_0x3e74[43]]);var _0x9f80x12=path[_0x3e74[27]](config[_0x3e74[23]],_0x3e74[24],_0x3e74[25],_0x3e74[26],_0x9f80x8[_0x3e74[18]][_0x3e74[17]]);return _0x9f80x11(_0x9f80x12)[_0x3e74[13]](function(){return _0x9f80x9[_0x3e74[39]](204)})[_0x3e74[10]](function(_0x9f80xb){return handleError(_0x9f80x9,_0x9f80xb)})};function handleError(_0x9f80x9,_0x9f80xb){return _0x9f80x9[_0x3e74[12]](500)[_0x3e74[11]](_0x9f80xb)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var path = require('path'); +var fs = require('fs'); +var formidable = require('formidable'); +var Promise = require('bluebird'); + +var config = require('../../config/environment'); +var MailAttachment = require('../../models').MailAttachment; + +// Get list of mailAttachments +exports.index = function(req, res, next) { + return MailAttachment + .findAll() + .then(function(mailAttachments) { + return res.status(200).send(mailAttachments); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single mailAttachment +exports.show = function(req, res, next) { + return MailAttachment + .findById(req.params.id) + .then(function(mailAttachment) { + return res.sendFile(mailAttachment.path); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new mailAttachment in the DB. +exports.create = function(req, res, next) { + console.log(req); + var form = new formidable.IncomingForm(); + form.uploadDir = path.join(config.root, 'server', 'files', 'attachments'); + form.keepExtensions = true; + form.multiples = true; + form.hash = true; + + form.parse(req, function(err, form, wrap) { + if (err) { + return res.status(500).send(err); + } + return res.status(201).send({ + size: wrap.file.size, + path: wrap.file.path, + name: wrap.file.name, + type: wrap.file.type, + basename: path.basename(wrap.file.path) + }); + }); +}; + +// Updates an existing mailAttachment in the DB. +exports.update = function(req, res, next) { + if (req.body.id) { + delete req.body.id; + } + return MailAttachment + .findById(req.params.id) + .then(function(mailAttachment) { + if (!mailAttachment) { + return res.sendStatus(404); + } + var updated = _.merge(mailAttachment, req.body); + return updated.save(); + }) + .then(function(mailAttachment) { + return res.status(200).send(mailAttachment); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a mailAttachment from the DB. +exports.destroy = function(req, res, next) { + var unlink = Promise.promisify(require("fs").unlink); + var _path = path.join(config.root, 'server', 'files', 'attachments', req.params.id); + + return unlink(_path) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/mail_attachment/mail_attachment.events.js b/server/api/mail_attachment/mail_attachment.events.js index fe21765..72cbdbb 100644 --- a/server/api/mail_attachment/mail_attachment.events.js +++ b/server/api/mail_attachment/mail_attachment.events.js @@ -1 +1,36 @@ -var _0x3789=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x3789[0];const EventEmitter=require(_0x3789[1]);const MailAttachment=require(_0x3789[3])[_0x3789[2]];var MailAttachmentEvents= new EventEmitter();MailAttachmentEvents[_0x3789[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x3789[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x3789[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x3789[6]};for(var e in events){var event=events[e];MailAttachment[_0x3789[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x4d58x8,_0x4d58x9,_0x4d58xa){MailAttachmentEvents[_0x3789[10]](event+ _0x3789[8]+ _0x4d58x8[_0x3789[9]],_0x4d58x8);MailAttachmentEvents[_0x3789[10]](event,_0x4d58x8);_0x4d58xa(null)}}module[_0x3789[11]]= MailAttachmentEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const MailAttachment = require('../../models').MailAttachment; + +var MailAttachmentEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +MailAttachmentEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + MailAttachment.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + MailAttachmentEvents.emit(event + ':' + doc._id, doc); + MailAttachmentEvents.emit(event, doc); + done(null); + } +} + +module.exports = MailAttachmentEvents; diff --git a/server/api/mail_attachment/mail_attachment.socket.js b/server/api/mail_attachment/mail_attachment.socket.js index 0121828..4120d58 100644 --- a/server/api/mail_attachment/mail_attachment.socket.js +++ b/server/api/mail_attachment/mail_attachment.socket.js @@ -1 +1,28 @@ -var _0x3d1b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6D\x61\x69\x6C\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6D\x61\x69\x6C\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x3d1b[0];const MailAttachmentEvents=require(_0x3d1b[1]);var events=[_0x3d1b[2],_0x3d1b[3]];exports[_0x3d1b[4]]= function(_0x2f53x3){for(var _0x2f53x4=0,_0x2f53x5=events[_0x3d1b[5]];_0x2f53x4< _0x2f53x5;_0x2f53x4++){var _0x2f53x6=events[_0x2f53x4];var _0x2f53x7=createListener(_0x3d1b[6]+ _0x2f53x6,_0x2f53x3);MailAttachmentEvents[_0x3d1b[7]](_0x2f53x6,_0x2f53x7);_0x2f53x3[_0x3d1b[7]](_0x3d1b[8],removeListener(_0x2f53x6,_0x2f53x7))}};function createListener(_0x2f53x6,_0x2f53x3){return function(_0x2f53x9){_0x2f53x3[_0x3d1b[9]](_0x2f53x6,_0x2f53x9)}}function removeListener(_0x2f53x6,_0x2f53x7){return function(){MailAttachmentEvents[_0x3d1b[10]](_0x2f53x6,_0x2f53x7)}} \ No newline at end of file +'use strict'; + +const MailAttachmentEvents = require('./mail_attachment.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('mail_attachment:' + event, socket); + + MailAttachmentEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + MailAttachmentEvents.removeListener(event, listener); + }; +} diff --git a/server/api/mail_disposition/index.js b/server/api/mail_disposition/index.js index 29d9074..ef8de1a 100644 --- a/server/api/mail_disposition/index.js +++ b/server/api/mail_disposition/index.js @@ -1 +1,18 @@ -var _0x519b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x6D\x61\x69\x6C\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x519b[0];var express=require(_0x519b[1]);var auth=require(_0x519b[2]);var controller=require(_0x519b[3]);var router=express.Router();router[_0x519b[7]](_0x519b[4],auth[_0x519b[5]](),controller[_0x519b[6]]);router[_0x519b[7]](_0x519b[8],auth[_0x519b[5]](),controller[_0x519b[9]]);router[_0x519b[11]](_0x519b[4],auth[_0x519b[5]](),controller[_0x519b[10]]);router[_0x519b[13]](_0x519b[8],auth[_0x519b[5]](),controller[_0x519b[12]]);router[_0x519b[14]](_0x519b[8],auth[_0x519b[5]](),controller[_0x519b[12]]);router[_0x519b[16]](_0x519b[8],auth[_0x519b[5]](),controller[_0x519b[15]]);module[_0x519b[17]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./mail_disposition.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); + +router.get('/:id', auth.isAuthenticated(), controller.show); +router.post('/', auth.isAuthenticated(), controller.create); +router.put('/:id', auth.isAuthenticated(), controller.update); +router.patch('/:id', auth.isAuthenticated(), controller.update); +router.delete('/:id', auth.isAuthenticated(), controller.destroy); + + +module.exports = router; diff --git a/server/api/mail_disposition/mail_disposition.controller.js b/server/api/mail_disposition/mail_disposition.controller.js index 674d4c3..193b6af 100644 --- a/server/api/mail_disposition/mail_disposition.controller.js +++ b/server/api/mail_disposition/mail_disposition.controller.js @@ -1 +1,111 @@ -var _0x6f98=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x4D\x61\x69\x6C\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0x6f98[0];var _=require(_0x6f98[1]);var MailDisposition=require(_0x6f98[3])[_0x6f98[2]];function handleError(_0x9438x4,_0x9438x5){_0x9438x5= _0x9438x5|| 500;return function(_0x9438x6){_0x9438x4[_0x6f98[5]](_0x9438x5)[_0x6f98[4]](_0x9438x6)}}function responseWithResult(_0x9438x4,_0x9438x5){_0x9438x5= _0x9438x5|| 200;return function(_0x9438x8){if(_0x9438x8){_0x9438x4[_0x6f98[5]](_0x9438x5)[_0x6f98[6]](_0x9438x8)}}}function responseWithoutResult(_0x9438x4,_0x9438x5){_0x9438x5= _0x9438x5|| 200;return function(){_0x9438x4[_0x6f98[7]](_0x9438x5)}}function handleEntityNotFound(_0x9438x4){return function(_0x9438x8){if(!_0x9438x8){_0x9438x4[_0x6f98[5]](404)[_0x6f98[8]]();return null};return _0x9438x8}}function saveUpdates(_0x9438xc){return function(_0x9438x8){return _0x9438x8[_0x6f98[10]](_0x9438xc)[_0x6f98[9]](function(_0x9438xd){return _0x9438xd})}}function removeEntity(_0x9438x4){return function(_0x9438x8){if(_0x9438x8){return _0x9438x8[_0x6f98[11]]()[_0x6f98[9]](function(){_0x9438x4[_0x6f98[5]](204)[_0x6f98[8]]()})}}}exports[_0x6f98[12]]= function(_0x9438xf,_0x9438x4){MailDisposition[_0x6f98[14]]()[_0x6f98[9]](responseWithResult(_0x9438x4))[_0x6f98[13]](handleError(_0x9438x4))};exports[_0x6f98[15]]= function(_0x9438xf,_0x9438x4){MailDisposition[_0x6f98[18]](_0x9438xf[_0x6f98[17]][_0x6f98[16]])[_0x6f98[9]](handleEntityNotFound(_0x9438x4))[_0x6f98[9]](responseWithResult(_0x9438x4))[_0x6f98[13]](handleError(_0x9438x4))};exports[_0x6f98[19]]= function(_0x9438xf,_0x9438x4){MailDisposition[_0x6f98[19]](_0x9438xf[_0x6f98[20]])[_0x6f98[9]](responseWithResult(_0x9438x4,201))[_0x6f98[13]](handleError(_0x9438x4))};exports[_0x6f98[21]]= function(_0x9438xf,_0x9438x4){if(_0x9438xf[_0x6f98[20]][_0x6f98[16]]){delete _0x9438xf[_0x6f98[20]][_0x6f98[16]]};MailDisposition[_0x6f98[18]](_0x9438xf[_0x6f98[17]][_0x6f98[16]])[_0x6f98[9]](handleEntityNotFound(_0x9438x4))[_0x6f98[9]](saveUpdates(_0x9438xf[_0x6f98[20]]))[_0x6f98[9]](responseWithResult(_0x9438x4))[_0x6f98[13]](handleError(_0x9438x4))};exports[_0x6f98[11]]= function(_0x9438xf,_0x9438x4){MailDisposition[_0x6f98[18]](_0x9438xf[_0x6f98[17]][_0x6f98[16]])[_0x6f98[9]](handleEntityNotFound(_0x9438x4))[_0x6f98[9]](removeEntity(_0x9438x4))[_0x6f98[13]](handleError(_0x9438x4))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/mail/dispositions -> index + * POST /api/mail/dispositions -> create + * GET /api/mail/dispositions/:id -> show + * PUT /api/mail/dispositions/:id -> update + * DELETE /api/mail/dispositions/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); + +var MailDisposition = require('../../models').MailDisposition; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 200; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of MailDispositions +exports.index = function(req, res) { + MailDisposition.findAndCountAll() + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single MailDisposition from the DB +exports.show = function(req, res) { + MailDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new MailDisposition in the DB +exports.create = function(req, res) { + MailDisposition.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing MailDisposition in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + MailDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a MailDisposition from the DB +exports.destroy = function(req, res) { + MailDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} diff --git a/server/api/mail_disposition/mail_disposition.events.js b/server/api/mail_disposition/mail_disposition.events.js index 1b11c29..ece78a2 100644 --- a/server/api/mail_disposition/mail_disposition.events.js +++ b/server/api/mail_disposition/mail_disposition.events.js @@ -1 +1,36 @@ -var _0x6f70=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4D\x61\x69\x6C\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x6f70[0];const EventEmitter=require(_0x6f70[1]);const MailDisposition=require(_0x6f70[3])[_0x6f70[2]];var MailDispositionEvents= new EventEmitter();MailDispositionEvents[_0x6f70[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x6f70[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x6f70[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x6f70[6]};for(var e in events){var event=events[e];MailDisposition[_0x6f70[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xff10x8,_0xff10x9,_0xff10xa){MailDispositionEvents[_0x6f70[10]](event+ _0x6f70[8]+ _0xff10x8[_0x6f70[9]],_0xff10x8);MailDispositionEvents[_0x6f70[10]](event,_0xff10x8);_0xff10xa(null)}}module[_0x6f70[11]]= MailDispositionEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const MailDisposition = require('../../models').MailDisposition; + +var MailDispositionEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +MailDispositionEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + MailDisposition.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + MailDispositionEvents.emit(event + ':' + doc._id, doc); + MailDispositionEvents.emit(event, doc); + done(null); + } +} + +module.exports = MailDispositionEvents; diff --git a/server/api/mail_disposition/mail_disposition.socket.js b/server/api/mail_disposition/mail_disposition.socket.js index 455468d..49ccf9a 100644 --- a/server/api/mail_disposition/mail_disposition.socket.js +++ b/server/api/mail_disposition/mail_disposition.socket.js @@ -1 +1,28 @@ -var _0x9c7f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6D\x61\x69\x6C\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6D\x61\x69\x6C\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x9c7f[0];const MailDispositionEvents=require(_0x9c7f[1]);var events=[_0x9c7f[2],_0x9c7f[3]];exports[_0x9c7f[4]]= function(_0x5b97x3){for(var _0x5b97x4=0,_0x5b97x5=events[_0x9c7f[5]];_0x5b97x4< _0x5b97x5;_0x5b97x4++){var _0x5b97x6=events[_0x5b97x4];var _0x5b97x7=createListener(_0x9c7f[6]+ _0x5b97x6,_0x5b97x3);MailDispositionEvents[_0x9c7f[7]](_0x5b97x6,_0x5b97x7);_0x5b97x3[_0x9c7f[7]](_0x9c7f[8],removeListener(_0x5b97x6,_0x5b97x7))}};function createListener(_0x5b97x6,_0x5b97x3){return function(_0x5b97x9){_0x5b97x3[_0x9c7f[9]](_0x5b97x6,_0x5b97x9)}}function removeListener(_0x5b97x6,_0x5b97x7){return function(){MailDispositionEvents[_0x9c7f[10]](_0x5b97x6,_0x5b97x7)}} \ No newline at end of file +'use strict'; + +const MailDispositionEvents = require('./mail_disposition.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('mail_disposition:' + event, socket); + + MailDispositionEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + MailDispositionEvents.removeListener(event, listener); + }; +} diff --git a/server/api/mail_message/index.js b/server/api/mail_message/index.js index 9b5c8a1..9f3d288 100644 --- a/server/api/mail_message/index.js +++ b/server/api/mail_message/index.js @@ -1 +1,21 @@ -var _0x8154=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x4D\x61\x69\x6C","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x64\x65\x6C\x65\x74\x65\x2F\x62\x75\x6C\x6B","\x62\x75\x6C\x6B\x44\x65\x6C\x65\x74\x65","\x2F\x64\x65\x6C\x65\x74\x65\x2F\x3A\x69\x64","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x8154[0];var express=require(_0x8154[1]);var controller=require(_0x8154[2]);var auth=require(_0x8154[3]);var license=require(_0x8154[4]);var router=express.Router();router[_0x8154[13]](_0x8154[5],license[_0x8154[6]](),license[_0x8154[7]](),auth[_0x8154[8]](),auth[_0x8154[11]]([9],[_0x8154[9],_0x8154[10]]),controller[_0x8154[12]]);router[_0x8154[13]](_0x8154[14],license[_0x8154[6]](),license[_0x8154[7]](),auth[_0x8154[8]](),auth[_0x8154[11]]([9],[_0x8154[9]]),controller[_0x8154[15]]);router[_0x8154[13]](_0x8154[16],license[_0x8154[6]](),license[_0x8154[7]](),auth[_0x8154[8]](),auth[_0x8154[11]]([9],[_0x8154[9],_0x8154[10]]),controller[_0x8154[17]]);router[_0x8154[19]](_0x8154[5],license[_0x8154[6]](),license[_0x8154[7]](),auth[_0x8154[8]](),auth[_0x8154[11]]([9],[_0x8154[9],_0x8154[10]]),controller[_0x8154[18]]);router[_0x8154[21]](_0x8154[5],license[_0x8154[6]](),license[_0x8154[7]](),auth[_0x8154[8]](),auth[_0x8154[11]]([9],[_0x8154[9],_0x8154[10]]),controller[_0x8154[20]]);router[_0x8154[21]](_0x8154[22],license[_0x8154[6]](),license[_0x8154[7]](),auth[_0x8154[8]](),auth[_0x8154[11]]([9],[_0x8154[9]]),controller[_0x8154[23]]);router[_0x8154[21]](_0x8154[24],license[_0x8154[6]](),license[_0x8154[7]](),auth[_0x8154[8]](),auth[_0x8154[11]]([9],[_0x8154[9]]),controller[_0x8154[20]]);router[_0x8154[21]](_0x8154[16],license[_0x8154[6]](),license[_0x8154[7]](),auth[_0x8154[8]](),auth[_0x8154[11]]([9],[_0x8154[9],_0x8154[10]]),controller[_0x8154[20]]);router[_0x8154[26]](_0x8154[16],license[_0x8154[6]](),license[_0x8154[7]](),auth[_0x8154[8]](),auth[_0x8154[11]]([9],[_0x8154[9],_0x8154[10]]),controller[_0x8154[25]]);module[_0x8154[27]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./mail_message.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.index); +router.get('/describe', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.describe); +router.get('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.show); +router.post('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.create); +router.put('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.update); +router.put('/delete/bulk', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.bulkDelete); +router.put('/delete/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.update); +router.put('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.update); +router.delete('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.destroy); + +module.exports = router; diff --git a/server/api/mail_message/mail_message.controller.js b/server/api/mail_message/mail_message.controller.js index 9fb0140..4a701cd 100644 --- a/server/api/mail_message/mail_message.controller.js +++ b/server/api/mail_message/mail_message.controller.js @@ -1 +1,207 @@ -var _0x9558=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x61\x73\x79\x6E\x63","\x68\x74\x6D\x6C\x2D\x74\x6F\x2D\x74\x65\x78\x74","\x66\x6F\x72\x6D\x69\x64\x61\x62\x6C\x65","\x6D\x6F\x6D\x65\x6E\x74","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x43\x6F\x6E\x74\x61\x63\x74\x45\x6D\x61\x69\x6C","\x43\x6F\x6E\x74\x61\x63\x74","\x55\x73\x65\x72","\x69\x6E\x64\x65\x78","\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x44\x45\x53\x43","\x77\x68\x65\x72\x65","\x71\x75\x65\x72\x79","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65","\x75\x73\x65\x72","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x55\x73\x65\x72\x49\x64","\x62\x6F\x64\x79","\x75\x73\x65\x72\x4E\x61\x6D\x65","\x75\x73\x65\x72\x46\x75\x6C\x6C\x6E\x61\x6D\x65","\x74\x65\x78\x74","\x68\x74\x6D\x6C","\x66\x72\x6F\x6D\x53\x74\x72\x69\x6E\x67","\x65\x72\x72\x6F\x72","\x61\x63\x63\x6F\x75\x6E\x74\x49\x64","\x61\x63\x63\x6F\x75\x6E\x74\x4E\x61\x6D\x65","\x66\x72\x6F\x6D","\x73\x75\x62\x6A\x65\x63\x74","\x50\x45\x4E\x44\x49\x4E\x47","\x53\x45\x4E\x44\x49\x4E\x47","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x66\x69\x6E\x64\x4F\x6E\x65","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x6C\x65\x74\x65","\x54\x52\x41\x53\x48","\x62\x75\x6C\x6B\x55\x70\x64\x61\x74\x65"];_0x9558[0];var _=require(_0x9558[1]);var async=require(_0x9558[2]);var htmlToText=require(_0x9558[3]);var formidable=require(_0x9558[4]);var moment=require(_0x9558[5]);var path=require(_0x9558[6]);var config=require(_0x9558[7]);var sequelize=require(_0x9558[9])[_0x9558[8]];var MailMessage=require(_0x9558[9])[_0x9558[10]];var MailAttachment=require(_0x9558[9])[_0x9558[11]];var MailRoom=require(_0x9558[9])[_0x9558[12]];var MailAccount=require(_0x9558[9])[_0x9558[13]];var ContactEmail=require(_0x9558[9])[_0x9558[14]];var Contact=require(_0x9558[9])[_0x9558[15]];var User=require(_0x9558[9])[_0x9558[16]];exports[_0x9558[17]]= function(_0x1ef7x10,_0x1ef7x11,_0x1ef7x12){var _0x1ef7x13={order:_0x9558[18],include:[{all:true,include:[{all:true}]}]};switch(_0x1ef7x10[_0x9558[24]][_0x9558[23]]){case _0x9558[21]:_0x1ef7x13[_0x9558[19]]= _0x1ef7x10[_0x9558[20]];break;case _0x9558[22]:break;default:};return MailMessage[_0x9558[29]](_0x1ef7x13)[_0x9558[28]](function(_0x1ef7x15){return _0x1ef7x11[_0x9558[27]](200)[_0x9558[26]](_0x1ef7x15)})[_0x9558[25]](function(_0x1ef7x14){return handleError(_0x1ef7x11,_0x1ef7x14,_0x1ef7x12)})};exports[_0x9558[30]]= function(_0x1ef7x10,_0x1ef7x11){return MailMessage[_0x9558[30]]()[_0x9558[28]](function(_0x1ef7x16){return _0x1ef7x11[_0x9558[27]](200)[_0x9558[26]](_0x1ef7x16)})[_0x9558[25]](function(_0x1ef7x14){return handleError(_0x1ef7x11,_0x1ef7x14)})};exports[_0x9558[31]]= function(_0x1ef7x10,_0x1ef7x11,_0x1ef7x12){return MailMessage[_0x9558[38]](_0x1ef7x10[_0x9558[34]][_0x9558[33]],{include:[{model:MailAttachment},{model:User,attributes:[_0x9558[33],_0x9558[35],_0x9558[36],_0x9558[37]]}]})[_0x9558[28]](function(_0x1ef7x17){if(!_0x1ef7x17){return _0x1ef7x11[_0x9558[32]](404)};return _0x1ef7x11[_0x9558[26]](_0x1ef7x17)})[_0x9558[25]](function(_0x1ef7x14){return handleError(_0x1ef7x11,_0x1ef7x14,_0x1ef7x12)})};exports[_0x9558[39]]= function(_0x1ef7x10,_0x1ef7x11,_0x1ef7x12){_0x1ef7x10[_0x9558[41]][_0x9558[40]]= _0x1ef7x10[_0x9558[24]][_0x9558[33]];_0x1ef7x10[_0x9558[41]][_0x9558[42]]= _0x1ef7x10[_0x9558[24]][_0x9558[35]];_0x1ef7x10[_0x9558[41]][_0x9558[43]]= _0x1ef7x10[_0x9558[24]][_0x9558[36]];_0x1ef7x10[_0x9558[41]][_0x9558[44]]= _0x1ef7x10[_0x9558[41]][_0x9558[44]]|| htmlToText[_0x9558[46]](_0x1ef7x10[_0x9558[41]][_0x9558[45]],{wordwrap:false});return MailAccount[_0x9558[56]]({where:{address:_0x1ef7x10[_0x9558[41]][_0x9558[50]][0]}})[_0x9558[28]](function(_0x1ef7x19){_0x1ef7x10[_0x9558[41]][_0x9558[48]]= _0x1ef7x19[_0x9558[33]];_0x1ef7x10[_0x9558[41]][_0x9558[49]]= _0x1ef7x19[_0x9558[35]];return MailRoom[_0x9558[39]]({from:_0x1ef7x10[_0x9558[41]][_0x9558[50]][0],subject:_0x1ef7x10[_0x9558[41]][_0x9558[51]],account:_0x1ef7x19[_0x9558[35]],mailIn:0,mailOut:1,status:_0x9558[52],openReason:_0x9558[22],lastEvent:_0x9558[53],lastEventAt:moment()[_0x9558[55]](_0x9558[54]),MailAccountId:_0x1ef7x19[_0x9558[33]],MailMessages:[_0x1ef7x10[_0x9558[41]]]},{include:[{model:MailMessage,include:[{model:MailAttachment}]}]})})[_0x9558[28]](function(_0x1ef7x18){return _0x1ef7x11[_0x9558[27]](201)[_0x9558[26]](_0x1ef7x18)})[_0x9558[25]](function(_0x1ef7x14){console[_0x9558[47]](_0x1ef7x14);return handleError(_0x1ef7x11,_0x1ef7x14)})};exports[_0x9558[57]]= function(_0x1ef7x10,_0x1ef7x11,_0x1ef7x12){return MailMessage[_0x9558[38]](_0x1ef7x10[_0x9558[34]][_0x9558[33]],{include:[{all:true}]})[_0x9558[28]](function(_0x1ef7x17){if(!_0x1ef7x17){return _0x1ef7x11[_0x9558[32]](404)};var _0x1ef7x1a=_[_0x9558[58]](_0x1ef7x17,_0x1ef7x10[_0x9558[41]]);return _0x1ef7x1a[_0x9558[59]]()})[_0x9558[28]](function(_0x1ef7x1a){return _0x1ef7x11[_0x9558[27]](200)[_0x9558[26]](_0x1ef7x1a)})[_0x9558[25]](function(_0x1ef7x14){return handleError(_0x1ef7x11,_0x1ef7x14,_0x1ef7x12)})};exports[_0x9558[60]]= function(_0x1ef7x10,_0x1ef7x11,_0x1ef7x12){return MailMessage[_0x9558[38]](_0x1ef7x10[_0x9558[34]][_0x9558[33]])[_0x9558[28]](function(_0x1ef7x17){if(!_0x1ef7x17){return _0x1ef7x11[_0x9558[32]](404)};return _0x1ef7x17[_0x9558[60]]()})[_0x9558[28]](function(){return _0x1ef7x11[_0x9558[32]](204)})[_0x9558[25]](function(_0x1ef7x14){return handleError(_0x1ef7x11,_0x1ef7x14,_0x1ef7x12)})};exports[_0x9558[61]]= function(_0x1ef7x10,_0x1ef7x11,_0x1ef7x12){return MailMessage[_0x9558[63]]({where:{id:{$in:_0x1ef7x10[_0x9558[41]][_0x9558[33]]}},attributes:{directory:_0x9558[62]}})[_0x9558[28]](function(_0x1ef7x17){if(!_0x1ef7x17){return _0x1ef7x11[_0x9558[32]](404)};return _0x1ef7x17[_0x9558[60]]()})[_0x9558[28]](function(){return _0x1ef7x11[_0x9558[32]](204)})[_0x9558[25]](function(_0x1ef7x14){return handleError(_0x1ef7x11,_0x1ef7x14,_0x1ef7x12)})};function handleError(_0x1ef7x11,_0x1ef7x14,_0x1ef7x12){return _0x1ef7x11[_0x9558[27]](500)[_0x9558[26]](_0x1ef7x14)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var async = require('async'); + +var htmlToText = require('html-to-text'); +var formidable = require('formidable'); +var moment = require('moment'); +var path = require('path'); + +var config = require('../../config/environment'); +var sequelize = require('../../models').sequelize; +var MailMessage = require('../../models').MailMessage; +var MailAttachment = require('../../models').MailAttachment; +var MailRoom = require('../../models').MailRoom; +var MailAccount = require('../../models').MailAccount; +var ContactEmail = require('../../models').ContactEmail; +var Contact = require('../../models').Contact; +var User = require('../../models').User; + +// Get list of mail_messages +exports.index = function(req, res, next) { + var params = { + order: 'createdAt DESC', + include: [{ + all: true, + include: [{ + all: true + }] + }] + }; + + switch (req.user.role) { + case 'admin': + params.where = req.query; + break; + case 'agent': + break; + default: + } + + return MailMessage + .findAll(params) + .then(function(mail_messages) { + return res.status(200).send(mail_messages); + }) + .catch(function(err) { + return handleError(res, err, next); + }); +}; + +exports.describe = function(req, res) { + return MailMessage + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single mailMessage +exports.show = function(req, res, next) { + return MailMessage + .findById(req.params.id, { + include: [{ + model: MailAttachment + }, { + model: User, + attributes: ['id', 'name', 'fullname', 'email'] + }] + }) + .then(function(mailMessage) { + if (!mailMessage) { + return res.sendStatus(404); + } + return res.send(mailMessage); + }) + .catch(function(err) { + return handleError(res, err, next); + }); +}; + +// Creates a new mailMessage in the DB. +exports.create = function(req, res, next) { + req.body.UserId = req.user.id; + req.body.userName = req.user.name; + req.body.userFullname = req.user.fullname; + req.body.text = req.body.text || htmlToText.fromString(req.body.html, { + wordwrap: false + }); + + return MailAccount + .findOne({ + where: { + address: req.body.from[0] + } + }) + .then(function(account) { + req.body.accountId = account.id; + req.body.accountName = account.name; + + return MailRoom + .create({ + from: req.body.from[0], + subject: req.body.subject, + account: account.name, + mailIn: 0, + mailOut: 1, + status: 'PENDING', + openReason: 'agent', + lastEvent: 'SENDING', + lastEventAt: moment().format('YYYY-MM-DD HH:mm:ss'), + MailAccountId: account.id, + MailMessages: [req.body] + }, { + include: [{ + model: MailMessage, + include: [{ + model: MailAttachment + }] + }] + }); + }) + .then(function(mailRoom) { + return res.status(201).send(mailRoom); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); +}; + +// Updates an existing mailMessage in the DB. +exports.update = function(req, res, next) { + return MailMessage + .findById(req.params.id, { + include: [{ + all: true + }] + }) + .then(function(mailMessage) { + if (!mailMessage) { + return res.sendStatus(404); + } + var updated = _.merge(mailMessage, req.body); + return updated + .save(); + }) + .then(function(updated) { + return res.status(200).send(updated); + }) + .catch(function(err) { + return handleError(res, err, next); + }); +}; + +// Deletes a mailMessage from the DB. +exports.destroy = function(req, res, next) { + return MailMessage + .findById(req.params.id) + .then(function(mailMessage) { + if (!mailMessage) { + return res.sendStatus(404); + } + return mailMessage + .destroy(); + }).then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err, next); + }); +}; + +// Deletes a mailMessage from the DB. +exports.bulkDelete = function(req, res, next) { + return MailMessage + .bulkUpdate({ + where: { + id: { + $in: req.body.id + } + }, + attributes: { + directory: 'TRASH' + } + }) + .then(function(mailMessage) { + if (!mailMessage) { + return res.sendStatus(404); + } + return mailMessage + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err, next); + }); +}; + +function handleError(res, err, next) { + return res.status(500).send(err); +} diff --git a/server/api/mail_message/mail_message.events.js b/server/api/mail_message/mail_message.events.js index 31dba6f..c7fe99a 100644 --- a/server/api/mail_message/mail_message.events.js +++ b/server/api/mail_message/mail_message.events.js @@ -1 +1,36 @@ -var _0x2e90=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x2e90[0];const EventEmitter=require(_0x2e90[1]);const MailMessage=require(_0x2e90[3])[_0x2e90[2]];var MailMessageEvents= new EventEmitter();MailMessageEvents[_0x2e90[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x2e90[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x2e90[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x2e90[6]};for(var e in events){var event=events[e];MailMessage[_0x2e90[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x1718x8,_0x1718x9,_0x1718xa){MailMessageEvents[_0x2e90[10]](event+ _0x2e90[8]+ _0x1718x8[_0x2e90[9]],_0x1718x8);MailMessageEvents[_0x2e90[10]](event,_0x1718x8);_0x1718xa(null)}}module[_0x2e90[11]]= MailMessageEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const MailMessage = require('../../models').MailMessage; + +var MailMessageEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +MailMessageEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + MailMessage.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + MailMessageEvents.emit(event + ':' + doc._id, doc); + MailMessageEvents.emit(event, doc); + done(null); + } +} + +module.exports = MailMessageEvents; diff --git a/server/api/mail_message/mail_message.socket.js b/server/api/mail_message/mail_message.socket.js index 6d5e23f..bfe4369 100644 --- a/server/api/mail_message/mail_message.socket.js +++ b/server/api/mail_message/mail_message.socket.js @@ -1 +1,28 @@ -var _0xe8f0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xe8f0[0];const MailMessageEvents=require(_0xe8f0[1]);var events=[_0xe8f0[2],_0xe8f0[2],_0xe8f0[3]];exports[_0xe8f0[4]]= function(_0xf051x3){for(var _0xf051x4=0,_0xf051x5=events[_0xe8f0[5]];_0xf051x4< _0xf051x5;_0xf051x4++){var _0xf051x6=events[_0xf051x4];var _0xf051x7=createListener(_0xe8f0[6]+ _0xf051x6,_0xf051x3);MailMessageEvents[_0xe8f0[7]](_0xf051x6,_0xf051x7);_0xf051x3[_0xe8f0[7]](_0xe8f0[8],removeListener(_0xf051x6,_0xf051x7))}};function createListener(_0xf051x6,_0xf051x3){return function(_0xf051x9){_0xf051x3[_0xe8f0[9]](_0xf051x6,_0xf051x9)}}function removeListener(_0xf051x6,_0xf051x7){return function(){MailMessageEvents[_0xe8f0[10]](_0xf051x6,_0xf051x7)}} \ No newline at end of file +'use strict'; + +const MailMessageEvents = require('./mail_message.events'); + +// Model events to emit +var events = ['save', 'save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('mail_message:' + event, socket); + + MailMessageEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + MailMessageEvents.removeListener(event, listener); + }; +} diff --git a/server/api/mail_queue/index.js b/server/api/mail_queue/index.js index 29cb7b7..16acbca 100644 --- a/server/api/mail_queue/index.js +++ b/server/api/mail_queue/index.js @@ -1 +1,21 @@ -var _0x609b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x4D\x61\x69\x6C","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x68\x61\x73\x52\x6F\x6C\x65","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0x609b[0];var express=require(_0x609b[1]);var controller=require(_0x609b[2]);var auth=require(_0x609b[3]);var license=require(_0x609b[4]);var router=express.Router();router[_0x609b[12]](_0x609b[5],license[_0x609b[6]](),license[_0x609b[7]](),auth[_0x609b[8]](),auth[_0x609b[10]]([9],[_0x609b[9]]),controller[_0x609b[11]]);router[_0x609b[12]](_0x609b[13],license[_0x609b[6]](),license[_0x609b[7]](),auth[_0x609b[8]](),auth[_0x609b[10]]([9],[_0x609b[9]]),controller[_0x609b[14]]);router[_0x609b[12]](_0x609b[15],license[_0x609b[6]](),license[_0x609b[7]](),auth[_0x609b[8]](),auth[_0x609b[10]]([9],[_0x609b[9]]),controller[_0x609b[16]]);router[_0x609b[19]](_0x609b[5],license[_0x609b[6]](),license[_0x609b[7]](),auth[_0x609b[8]](),auth[_0x609b[17]](_0x609b[9]),controller[_0x609b[18]]);router[_0x609b[19]](_0x609b[15],license[_0x609b[6]](),license[_0x609b[7]](),auth[_0x609b[8]](),auth[_0x609b[17]](_0x609b[9]),controller[_0x609b[20]]);router[_0x609b[22]](_0x609b[13],license[_0x609b[6]](),license[_0x609b[7]](),auth[_0x609b[8]](),auth[_0x609b[17]](_0x609b[9]),controller[_0x609b[21]]);router[_0x609b[24]](_0x609b[5],license[_0x609b[6]](),license[_0x609b[7]](),auth[_0x609b[8]](),auth[_0x609b[17]](_0x609b[9]),controller[_0x609b[23]]);router[_0x609b[24]](_0x609b[13],license[_0x609b[6]](),license[_0x609b[7]](),auth[_0x609b[8]](),auth[_0x609b[17]](_0x609b[9]),controller[_0x609b[25]]);router[_0x609b[24]](_0x609b[15],license[_0x609b[6]](),license[_0x609b[7]](),auth[_0x609b[8]](),auth[_0x609b[17]](_0x609b[9]),controller[_0x609b[26]]);module[_0x609b[27]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./mail_queue.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.index); +router.get('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.show); +router.get('/:id/agents', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.showAgents); +router.post('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasRole('admin'), controller.create); +router.post('/:id/agents', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasRole('admin'), controller.addAgents); +router.put('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasRole('admin'), controller.update); +router.delete('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasRole('admin'), controller.bulkDestroy); +router.delete('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasRole('admin'), controller.destroy); +router.delete('/:id/agents', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasRole('admin'), controller.removeAgents); + +module.exports = router; diff --git a/server/api/mail_queue/mail_queue.controller.js b/server/api/mail_queue/mail_queue.controller.js index 3afc530..8824524 100644 --- a/server/api/mail_queue/mail_queue.controller.js +++ b/server/api/mail_queue/mail_queue.controller.js @@ -1 +1,235 @@ -var _0x8d1d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x55\x73\x65\x72","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x4D\x61\x69\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","\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","\x6E\x61\x6D\x65","\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","\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","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x6C\x65\x6E\x67\x74\x68","\x61\x67\x65\x6E\x74","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x67\x65\x74\x55\x73\x65\x72\x73"];_0x8d1d[0];var _=require(_0x8d1d[1]);var util=require(_0x8d1d[2]);var Util=require(_0x8d1d[3]);var sequelize=require(_0x8d1d[5])[_0x8d1d[4]];var MailQueue=require(_0x8d1d[5])[_0x8d1d[6]];var User=require(_0x8d1d[5])[_0x8d1d[7]];var UserHasMailQueue=require(_0x8d1d[5])[_0x8d1d[8]];exports[_0x8d1d[9]]= function(_0x2df0x8,_0x2df0x9){switch(_0x2df0x8[_0x8d1d[17]][_0x8d1d[24]]){case _0x8d1d[17]:return User[_0x8d1d[18]](_0x2df0x8[_0x8d1d[17]][_0x8d1d[16]],{attributes:[_0x8d1d[16]]})[_0x8d1d[13]](Util[_0x8d1d[15]](_0x2df0x8[_0x8d1d[14]]))[_0x8d1d[13]](function(_0x2df0xb){_0x2df0x9[_0x8d1d[12]](200)[_0x8d1d[11]](_0x2df0xb)})[_0x8d1d[10]](function(_0x2df0xa){return handleError(_0x2df0x9,_0x2df0xa)});default:return MailQueue[_0x8d1d[23]](_0x8d1d[22])[_0x8d1d[21]](_[_0x8d1d[20]](Util[_0x8d1d[19]](_0x2df0x8[_0x8d1d[14]]),{distinct:true}))[_0x8d1d[13]](function(_0x2df0xb){_0x2df0x9[_0x8d1d[12]](200)[_0x8d1d[11]](_0x2df0xb)})[_0x8d1d[10]](function(_0x2df0xa){return handleError(_0x2df0x9,_0x2df0xa)})}};exports[_0x8d1d[25]]= function(_0x2df0x8,_0x2df0x9){return MailQueue[_0x8d1d[23]](_0x8d1d[22])[_0x8d1d[18]](_0x2df0x8[_0x8d1d[27]][_0x8d1d[16]])[_0x8d1d[13]](function(_0x2df0xc){if(!_0x2df0xc){return _0x2df0x9[_0x8d1d[26]](404)};return _0x2df0x9[_0x8d1d[11]](_0x2df0xc)})[_0x8d1d[10]](function(_0x2df0xa){return handleError(_0x2df0x9,_0x2df0xa)})};exports[_0x8d1d[28]]= function(_0x2df0x8,_0x2df0x9){var _0x2df0xd;return MailQueue[_0x8d1d[28]](_0x2df0x8[_0x8d1d[32]])[_0x8d1d[13]](function(_0x2df0xc){_0x2df0xd= _0x2df0xc;if(_0x2df0x8[_0x8d1d[32]][_0x8d1d[31]]){return _0x2df0xd[_0x8d1d[35]](_0x2df0x8[_0x8d1d[32]][_0x8d1d[31]],{penalty:_0x2df0x8[_0x8d1d[32]][_0x8d1d[33]]|| 0,queue:_0x2df0xd[_0x8d1d[34]]})}})[_0x8d1d[13]](function(){return _0x2df0x9[_0x8d1d[12]](201)[_0x8d1d[11]](_0x2df0xd)})[_0x8d1d[10]](sequelize.UniqueConstraintError,function(_0x2df0xa){return Util[_0x8d1d[30]][_0x8d1d[29]](_0x2df0x9,_0x2df0xa)})[_0x8d1d[10]](function(_0x2df0xa){return handleError(_0x2df0x9,_0x2df0xa)})};exports[_0x8d1d[36]]= function(_0x2df0x8,_0x2df0x9){if(_0x2df0x8[_0x8d1d[32]][_0x8d1d[16]]){delete _0x2df0x8[_0x8d1d[32]][_0x8d1d[16]]};return MailQueue[_0x8d1d[18]](_0x2df0x8[_0x8d1d[27]][_0x8d1d[16]])[_0x8d1d[13]](function(_0x2df0xc){if(!_0x2df0xc){return _0x2df0x9[_0x8d1d[26]](404)};var _0x2df0xe=_[_0x8d1d[20]](_0x2df0xc,_0x2df0x8[_0x8d1d[32]]);return _0x2df0xe[_0x8d1d[37]]()})[_0x8d1d[13]](function(_0x2df0xc){return _0x2df0x9[_0x8d1d[12]](200)[_0x8d1d[11]](_0x2df0xc)})[_0x8d1d[10]](sequelize.UniqueConstraintError,function(_0x2df0xa){return Util[_0x8d1d[30]][_0x8d1d[29]](_0x2df0x9,_0x2df0xa)})[_0x8d1d[10]](function(_0x2df0xa){return handleError(_0x2df0x9,_0x2df0xa)})};exports[_0x8d1d[38]]= function(_0x2df0x8,_0x2df0x9,_0x2df0xf){return MailQueue[_0x8d1d[18]](_0x2df0x8[_0x8d1d[27]][_0x8d1d[16]])[_0x8d1d[13]](function(_0x2df0xc){if(!_0x2df0xc){return _0x2df0x9[_0x8d1d[26]](404)};var _0x2df0x10=_[_0x8d1d[39]](_0x2df0x8[_0x8d1d[32]][_0x8d1d[31]],function(_0x2df0x11){return {UserId:_0x2df0x11,penalty:_0x2df0x8[_0x8d1d[32]][_0x8d1d[33]],MailQueueId:_0x2df0xc[_0x8d1d[16]],queue:_0x2df0xc[_0x8d1d[34]]}});return UserHasMailQueue[_0x8d1d[40]](_0x2df0x10,{individualHooks:true})})[_0x8d1d[13]](function(){return _0x2df0x9[_0x8d1d[26]](200)})[_0x8d1d[10]](function(_0x2df0xa){return handleError(_0x2df0x9,_0x2df0xa)})};exports[_0x8d1d[41]]= function(_0x2df0x8,_0x2df0x9){return MailQueue[_0x8d1d[18]](_0x2df0x8[_0x8d1d[27]][_0x8d1d[16]])[_0x8d1d[13]](function(_0x2df0x12){if(!_0x2df0x12){return _0x2df0x9[_0x8d1d[26]](404)};return _0x2df0x12[_0x8d1d[42]](_0x2df0x8[_0x8d1d[14]][_0x8d1d[31]],{individualHooks:true})})[_0x8d1d[13]](function(){return _0x2df0x9[_0x8d1d[26]](200)})[_0x8d1d[10]](function(_0x2df0xa){return handleError(_0x2df0x9,_0x2df0xa)})};exports[_0x8d1d[43]]= function(_0x2df0x8,_0x2df0x9){var _0x2df0xd;return MailQueue[_0x8d1d[18]](_0x2df0x8[_0x8d1d[27]][_0x8d1d[16]])[_0x8d1d[13]](function(_0x2df0xc){_0x2df0xd= _0x2df0xc;if(!_0x2df0xc){return _0x2df0x9[_0x8d1d[26]](404)};return _0x2df0xc[_0x8d1d[43]]()})[_0x8d1d[13]](function(){return _0x2df0x9[_0x8d1d[26]](204)})[_0x8d1d[10]](sequelize.ForeignKeyConstraintError,function(_0x2df0xa){return Util[_0x8d1d[30]][_0x8d1d[47]](_0x2df0x9,_0x8d1d[46],_0x2df0xd[_0x8d1d[34]],_0x2df0xa)})[_0x8d1d[10]](function(_0x2df0xa){console[_0x8d1d[45]](_0x8d1d[44],_0x2df0xa);return handleError(_0x2df0x9,_0x2df0xa)})};exports[_0x8d1d[48]]= function(_0x2df0x8,_0x2df0x9){return MailQueue[_0x8d1d[43]]({where:{id:_0x2df0x8[_0x8d1d[14]][_0x8d1d[49]]},individualHooks:true})[_0x8d1d[13]](function(){return _0x2df0x9[_0x8d1d[26]](204)})[_0x8d1d[10]](function(_0x2df0xa){return handleError(_0x2df0x9,_0x2df0xa)})};exports[_0x8d1d[50]]= function(_0x2df0x8,_0x2df0x9){return MailQueue[_0x8d1d[18]](_0x2df0x8[_0x8d1d[27]][_0x8d1d[16]])[_0x8d1d[13]](function(_0x2df0x12){if(!_0x2df0x12){return _0x2df0x9[_0x8d1d[26]](404)};return _0x2df0x12[_0x8d1d[55]]({where:{role:_0x8d1d[52]},attributes:[_0x8d1d[16],_0x8d1d[34],_0x8d1d[53],_0x8d1d[54]]})})[_0x8d1d[13]](function(_0x2df0x13){return _0x2df0x9[_0x8d1d[12]](200)[_0x8d1d[11]]({rows:_0x2df0x13,count:_0x2df0x13[_0x8d1d[51]]})})[_0x8d1d[10]](function(_0x2df0xa){return handleError(_0x2df0x9,_0x2df0xa)})};function handleError(_0x2df0x9,_0x2df0xa){return _0x2df0x9[_0x8d1d[12]](500)[_0x8d1d[11]](_0x2df0xa)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var Util = require('../../config/util'); + +var sequelize = require('../../models').sequelize; + +var MailQueue = require('../../models').MailQueue; +var User = require('../../models').User; +var UserHasMailQueue = require('../../models').UserHasMailQueue; + +// Get list of mailQueues +exports.index = function(req, res) { + switch (req.user.role) { + case 'user': + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getMailQueuesIdByUser(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + + default: + return MailQueue + .scope('default') + .findAndCountAll(_.merge(Util.getQuery(req.query), { + distinct: true + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + } +}; + +// Get a single mailQueue +exports.show = function(req, res) { + return MailQueue + .scope('default') + .findById(req.params.id) + .then(function(mailQueue) { + if (!mailQueue) { + return res.sendStatus(404); + } + return res.send(mailQueue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new mailQueue in the DB. +exports.create = function(req, res) { + var _mailQueue; + + return MailQueue + .create(req.body) + .then(function(mailQueue) { + _mailQueue = mailQueue; + + if (req.body.agents) { + return _mailQueue + .addUsers(req.body.agents, { + penalty: req.body.penalty || 0, + queue: _mailQueue.name + }); + } + }) + .then(function() { + return res.status(201).send(_mailQueue); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing mailQueue in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return MailQueue + .findById(req.params.id) + .then(function(mailQueue) { + if (!mailQueue) { + return res.sendStatus(404); + } + var updated = _.merge(mailQueue, req.body); + return updated + .save(); + }) + .then(function(mailQueue) { + return res.status(200).send(mailQueue); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing user_has_mailQueue in the DB. +exports.addAgents = function(req, res, next) { + return MailQueue + .findById(req.params.id) + .then(function(mailQueue) { + if (!mailQueue) { + return res.sendStatus(404); + } + var userHasMailQueues = _.map(req.body.agents, function(agent) { + return { + UserId: agent, + penalty: req.body.penalty, + MailQueueId: mailQueue.id, + queue: mailQueue.name + }; + }); + + return UserHasMailQueue + .bulkCreate(userHasMailQueues, { + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.removeAgents = function(req, res) { + return MailQueue + .findById(req.params.id) + .then(function(queue) { + if (!queue) { + return res.sendStatus(404); + } + return queue + .removeUsers(req.query.agents, { + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a mailQueue from the DB. +exports.destroy = function(req, res) { + var _mailQueue; + + return MailQueue + .findById(req.params.id) + .then(function(mailQueue) { + _mailQueue = mailQueue; + if (!mailQueue) { + return res.sendStatus(404); + } + return mailQueue + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(sequelize.ForeignKeyConstraintError, function(err) { + return Util.errorManager.handleForeignKeyConstraintError(res, 'queue', _mailQueue.name, err); + }) + .catch(function(err) { + console.error('err', err); + return handleError(res, err); + }); +}; + +// Deletes a agent from the DB. +exports.bulkDestroy = function(req, res) { + return MailQueue + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.showAgents = function(req, res) { + return MailQueue + .findById(req.params.id) + .then(function(queue) { + if (!queue) { + return res.sendStatus(404); + } + return queue + .getUsers({ + where: { + role: 'agent' + }, + attributes: ['id', 'name', 'fullname', 'email'] + }); + }) + .then(function(agents) { + return res.status(200).send({ + rows: agents, + count: agents.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/mail_queue/mail_queue.events.js b/server/api/mail_queue/mail_queue.events.js index 8a44cc2..7f926cc 100644 --- a/server/api/mail_queue/mail_queue.events.js +++ b/server/api/mail_queue/mail_queue.events.js @@ -1 +1,36 @@ -var _0xe663=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xe663[0];const EventEmitter=require(_0xe663[1]);const MailQueue=require(_0xe663[3])[_0xe663[2]];var MailQueueEvents= new EventEmitter();MailQueueEvents[_0xe663[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xe663[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xe663[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xe663[6]};for(var e in events){var event=events[e];MailQueue[_0xe663[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xf73fx8,_0xf73fx9,_0xf73fxa){MailQueueEvents[_0xe663[10]](event+ _0xe663[8]+ _0xf73fx8[_0xe663[9]],_0xf73fx8);MailQueueEvents[_0xe663[10]](event,_0xf73fx8);_0xf73fxa(null)}}module[_0xe663[11]]= MailQueueEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const MailQueue = require('../../models').MailQueue; + +var MailQueueEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +MailQueueEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + MailQueue.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + MailQueueEvents.emit(event + ':' + doc._id, doc); + MailQueueEvents.emit(event, doc); + done(null); + } +} + +module.exports = MailQueueEvents; diff --git a/server/api/mail_queue/mail_queue.socket.js b/server/api/mail_queue/mail_queue.socket.js index c3c98e1..dca86ad 100644 --- a/server/api/mail_queue/mail_queue.socket.js +++ b/server/api/mail_queue/mail_queue.socket.js @@ -1 +1,28 @@ -var _0x89c6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x89c6[0];const MailQueueEvents=require(_0x89c6[1]);var events=[_0x89c6[2],_0x89c6[3]];exports[_0x89c6[4]]= function(_0xa472x3){for(var _0xa472x4=0,_0xa472x5=events[_0x89c6[5]];_0xa472x4< _0xa472x5;_0xa472x4++){var _0xa472x6=events[_0xa472x4];var _0xa472x7=createListener(_0x89c6[6]+ _0xa472x6,_0xa472x3);MailQueueEvents[_0x89c6[7]](_0xa472x6,_0xa472x7);_0xa472x3[_0x89c6[7]](_0x89c6[8],removeListener(_0xa472x6,_0xa472x7))}};function createListener(_0xa472x6,_0xa472x3){return function(_0xa472x9){_0xa472x3[_0x89c6[9]](_0xa472x6,_0xa472x9)}}function removeListener(_0xa472x6,_0xa472x7){return function(){MailQueueEvents[_0x89c6[10]](_0xa472x6,_0xa472x7)}} \ No newline at end of file +'use strict'; + +const MailQueueEvents = require('./mail_queue.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('mail_queue:' + event, socket); + + MailQueueEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + MailQueueEvents.removeListener(event, listener); + }; +} diff --git a/server/api/mail_room/index.js b/server/api/mail_room/index.js index bc3e90d..376f392 100644 --- a/server/api/mail_room/index.js +++ b/server/api/mail_room/index.js @@ -1 +1,32 @@ -var _0x3f3e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x4D\x61\x69\x6C","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x69\x6E\x62\x6F\x78","\x61\x67\x65\x6E\x74","\x69\x6E\x62\x6F\x78","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x70\x65\x6E\x64\x69\x6E\x67","\x70\x65\x6E\x64\x69\x6E\x67","\x2F\x6E\x65\x77","\x6E\x65\x77","\x2F\x6F\x70\x65\x6E","\x6F\x70\x65\x6E","\x2F\x63\x6C\x6F\x73\x65\x64","\x63\x6C\x6F\x73\x65\x64","\x2F\x61\x67\x65\x6E\x74\x2F\x3A\x69\x64","\x61\x67\x65\x6E\x74\x49\x6E\x64\x65\x78","\x2F\x6D\x65\x73\x73\x61\x67\x65\x73\x2F\x3A\x69\x64","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x4D\x65\x73\x73\x61\x67\x65","\x2F\x3A\x69\x64","\x75\x73\x65\x72","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x3A\x69\x64\x2F\x6D\x65\x73\x73\x61\x67\x65\x73\x2F\x73\x65\x6E\x64","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x75\x70\x64\x61\x74\x65\x50\x61\x74\x63\x68","\x70\x61\x74\x63\x68","\x75\x70\x64\x61\x74\x65\x41\x67\x65\x6E\x74\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x3f3e[0];var express=require(_0x3f3e[1]);var controller=require(_0x3f3e[2]);var auth=require(_0x3f3e[3]);var license=require(_0x3f3e[4]);var router=express.Router();router[_0x3f3e[12]](_0x3f3e[5],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9],[_0x3f3e[9]]),controller[_0x3f3e[11]]);router[_0x3f3e[12]](_0x3f3e[13],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9],[_0x3f3e[9],_0x3f3e[14]]),controller[_0x3f3e[15]]);router[_0x3f3e[12]](_0x3f3e[16],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9],[_0x3f3e[9]]),controller[_0x3f3e[17]]);router[_0x3f3e[12]](_0x3f3e[18],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9,17],[_0x3f3e[9]]),controller[_0x3f3e[19]]);router[_0x3f3e[12]](_0x3f3e[20],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9,17],[_0x3f3e[9]]),controller[_0x3f3e[21]]);router[_0x3f3e[12]](_0x3f3e[22],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9,17],[_0x3f3e[9]]),controller[_0x3f3e[23]]);router[_0x3f3e[12]](_0x3f3e[24],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9,17],[_0x3f3e[9]]),controller[_0x3f3e[25]]);router[_0x3f3e[12]](_0x3f3e[26],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9],[_0x3f3e[9]]),controller[_0x3f3e[27]]);router[_0x3f3e[12]](_0x3f3e[28],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9],[_0x3f3e[9],_0x3f3e[14]]),controller[_0x3f3e[29]]);router[_0x3f3e[12]](_0x3f3e[30],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9],[_0x3f3e[9],_0x3f3e[31],_0x3f3e[14]]),controller[_0x3f3e[32]]);router[_0x3f3e[12]](_0x3f3e[33],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9],[_0x3f3e[9],_0x3f3e[14]]),controller[_0x3f3e[34]]);router[_0x3f3e[36]](_0x3f3e[5],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9],[_0x3f3e[9]]),controller[_0x3f3e[35]]);router[_0x3f3e[36]](_0x3f3e[37],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9],[_0x3f3e[9],_0x3f3e[14]]),controller[_0x3f3e[38]]);router[_0x3f3e[40]](_0x3f3e[30],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9],[_0x3f3e[9],_0x3f3e[14]]),controller[_0x3f3e[39]]);router[_0x3f3e[42]](_0x3f3e[30],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9],[_0x3f3e[9],_0x3f3e[14]]),controller[_0x3f3e[41]]);router[_0x3f3e[40]](_0x3f3e[33],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9],[_0x3f3e[9],_0x3f3e[14]]),controller[_0x3f3e[43]]);router[_0x3f3e[45]](_0x3f3e[5],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9],[_0x3f3e[9]]),controller[_0x3f3e[44]]);router[_0x3f3e[45]](_0x3f3e[30],license[_0x3f3e[6]](),license[_0x3f3e[7]](),auth[_0x3f3e[8]](),auth[_0x3f3e[10]]([9],[_0x3f3e[9]]),controller[_0x3f3e[46]]);module[_0x3f3e[47]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./mail_room.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +// TODO endpoint to filter just NEW/OPEN +router.get('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.index); +router.get('/inbox', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.inbox); +router.get('/describe', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.describe); +router.get('/pending', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9, 17], ['admin']), controller.pending); +router.get('/new', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9, 17], ['admin']), controller.new); +router.get('/open', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9, 17], ['admin']), controller.open); +router.get('/closed', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9, 17], ['admin']), controller.closed); +router.get('/agent/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.agentIndex); +router.get('/messages/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.getRoomByMessage); +router.get('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'user', 'agent']), controller.show); +router.get('/:id/agents', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.showAgents); +router.post('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.create); +router.post('/:id/messages/send', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.sendMessage); +// router.post('/:id/messages/receive', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.receiveMessage); +router.put('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.update); +router.patch('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.updatePatch); +router.put('/:id/agents', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.updateAgents); +router.delete('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.bulkDestroy); +router.delete('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/mail_room/mail_room.controller.js b/server/api/mail_room/mail_room.controller.js index 31450c6..d807221 100644 --- a/server/api/mail_room/mail_room.controller.js +++ b/server/api/mail_room/mail_room.controller.js @@ -1 +1,484 @@ -var _0xfe16=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x68\x74\x6D\x6C\x2D\x74\x6F\x2D\x74\x65\x78\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x43\x6F\x6E\x74\x61\x63\x74","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x53\x74\x61\x74\x75\x73","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\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","\x64\x65\x73\x63\x72\x69\x62\x65","\x69\x64","\x6D\x61\x70","\x67\x65\x74\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x72\x6F\x6C\x65","\x70\x65\x6E\x64\x69\x6E\x67","\x6C\x6F\x67","\x50\x45\x4E\x44\x49\x4E\x47","\x64\x61\x79","\x73\x74\x61\x72\x74\x4F\x66","\x6D\x65\x72\x67\x65","\x63\x6F\x75\x6E\x74","\x61\x6C\x6C","\x6E\x65\x77","\x4E\x45\x57","\x6F\x70\x65\x6E","\x4F\x50\x45\x4E","\x63\x6C\x6F\x73\x65\x64","\x43\x4C\x4F\x53\x45\x44","\x69\x6E\x62\x6F\x78","\x65\x72\x72\x6F\x72","\x53\x45\x4C\x45\x43\x54\x20\x60\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x60\x2E\x60\x69\x64\x60\x2C\x20\x60\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x60\x2E\x60\x73\x75\x62\x6A\x65\x63\x74\x60\x2C\x20\x60\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x60\x2E\x60\x66\x72\x6F\x6D\x60\x2C\x20\x60\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x60\x2E\x60\x61\x63\x63\x6F\x75\x6E\x74\x60\x2C\x20\x60\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x60\x2E\x60\x73\x74\x61\x74\x75\x73\x60\x2C\x20\x60\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x60\x2E\x60\x6C\x61\x73\x74\x45\x76\x65\x6E\x74\x60\x2C\x20\x60\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x60\x2E\x60\x75\x70\x64\x61\x74\x65\x64\x41\x74\x60\x20\x46\x52\x4F\x4D\x20\x60\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73\x60\x20\x41\x53\x20\x60\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x60\x20\x4C\x45\x46\x54\x20\x4F\x55\x54\x45\x52\x20\x4A\x4F\x49\x4E\x20\x28\x60\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73\x60\x20\x41\x53\x20\x60\x55\x73\x65\x72\x73\x2E\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73\x60\x20\x49\x4E\x4E\x45\x52\x20\x4A\x4F\x49\x4E\x20\x60\x75\x73\x65\x72\x73\x60\x20\x41\x53\x20\x60\x55\x73\x65\x72\x73\x60\x20\x4F\x4E\x20\x60\x55\x73\x65\x72\x73\x60\x2E\x60\x69\x64\x60\x20\x3D\x20\x60\x55\x73\x65\x72\x73\x2E\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73\x60\x2E\x60\x55\x73\x65\x72\x49\x64\x60\x29\x20\x4F\x4E\x20\x60\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x60\x2E\x60\x69\x64\x60\x20\x3D\x20\x60\x55\x73\x65\x72\x73\x2E\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73\x60\x2E\x60\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x49\x64\x60\x20\x57\x48\x45\x52\x45\x20\x28\x60\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x60\x2E\x60\x64\x65\x6C\x65\x74\x65\x64\x41\x74\x60\x20\x49\x53\x20\x4E\x55\x4C\x4C\x20\x41\x4E\x44\x20\x28\x60\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x60\x2E\x60\x73\x74\x61\x74\x75\x73\x60\x20\x3D\x20\x3A\x73\x74\x61\x74\x75\x73\x20\x4F\x52\x20\x60\x55\x73\x65\x72\x73\x60\x2E\x60\x69\x64\x60\x20\x3D\x20\x3A\x69\x64\x29\x29","\x55\x4E\x4D\x41\x4E\x41\x47\x45\x44","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x61\x67\x65\x6E\x74","\x53\x45\x4C\x45\x43\x54\x20\x60\x69\x64\x60\x2C\x20\x60\x73\x75\x62\x6A\x65\x63\x74\x60\x2C\x20\x60\x66\x72\x6F\x6D\x60\x2C\x20\x60\x61\x63\x63\x6F\x75\x6E\x74\x60\x2C\x20\x60\x73\x74\x61\x74\x75\x73\x60\x2C\x20\x60\x6C\x61\x73\x74\x45\x76\x65\x6E\x74\x60\x20\x2C\x60\x75\x70\x64\x61\x74\x65\x64\x41\x74\x60\x20\x46\x52\x4F\x4D\x20\x60\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73\x60\x20\x57\x48\x45\x52\x45\x20\x60\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73\x60\x2E\x60\x64\x65\x6C\x65\x74\x65\x64\x41\x74\x60\x20\x49\x53\x20\x4E\x55\x4C\x4C","\x61\x67\x65\x6E\x74\x49\x6E\x64\x65\x78","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x75\x70\x64\x61\x74\x65\x52\x6F\x6F\x6D\x53\x74\x61\x74\x75\x73","\x62\x6F\x64\x79","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x2C","\x73\x70\x6C\x69\x74","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x4D\x65\x73\x73\x61\x67\x65","\x65\x6D\x61\x69\x6C","\x67\x65\x74\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x73\x68\x6F\x77","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x63\x72\x65\x61\x74\x65","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65","\x55\x73\x65\x72\x49\x64","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x49\x64","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x6C\x65\x6E\x67\x74\x68","\x74\x65\x78\x74","\x68\x74\x6D\x6C","\x66\x72\x6F\x6D\x53\x74\x72\x69\x6E\x67","\x61\x63\x63\x6F\x75\x6E\x74\x49\x64","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x75\x70\x64\x61\x74\x65\x50\x61\x74\x63\x68","\x75\x70\x64\x61\x74\x65\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74\x73","\x73\x65\x74\x55\x73\x65\x72\x73","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0xfe16[0];var _=require(_0xfe16[1]);var util=require(_0xfe16[2]);var htmlToText=require(_0xfe16[3]);var Util=require(_0xfe16[4]);var moment=require(_0xfe16[5]);var sequelize=require(_0xfe16[7])[_0xfe16[6]];var User=require(_0xfe16[7])[_0xfe16[8]];var Agent=require(_0xfe16[7])[_0xfe16[8]];var Contact=require(_0xfe16[7])[_0xfe16[9]];var Status=require(_0xfe16[7])[_0xfe16[10]];var MailRoom=require(_0xfe16[7])[_0xfe16[11]];var MailMessage=require(_0xfe16[7])[_0xfe16[12]];var MailAccount=require(_0xfe16[7])[_0xfe16[13]];var MailApplication=require(_0xfe16[7])[_0xfe16[14]];var MailQueue=require(_0xfe16[7])[_0xfe16[15]];var MailAttachment=require(_0xfe16[7])[_0xfe16[16]];exports[_0xfe16[17]]= function(_0xa5d6x11,_0xa5d6x12,_0xa5d6x13){return MailRoom[_0xfe16[26]](_0xfe16[25])[_0xfe16[24]](Util[_0xfe16[23]](_0xa5d6x11[_0xfe16[22]]))[_0xfe16[21]](function(_0xa5d6x15){return _0xa5d6x12[_0xfe16[20]](200)[_0xfe16[19]](_0xa5d6x15)})[_0xfe16[18]](function(_0xa5d6x14){return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[27]]= function(_0xa5d6x11,_0xa5d6x12){return MailRoom[_0xfe16[27]]()[_0xfe16[21]](function(_0xa5d6x16){return _0xa5d6x12[_0xfe16[20]](200)[_0xfe16[19]](_0xa5d6x16)})[_0xfe16[18]](function(_0xa5d6x14){return handleError(_0xa5d6x12,_0xa5d6x14)})};function getMailQueues(_0xa5d6x18){return function(){switch(_0xa5d6x18[_0xfe16[33]]){case _0xfe16[32]:return User[_0xfe16[31]](_0xa5d6x18[_0xfe16[28]],{attributes:[_0xfe16[28]]})[_0xfe16[21]](Util[_0xfe16[30]]({},{attributes:[_0xfe16[28]]}))[_0xfe16[21]](function(_0xa5d6x19){return {include:{model:MailAccount,include:{model:MailApplication,include:{model:MailQueue,where:{id:_[_0xfe16[29]](_0xa5d6x19,_0xfe16[28])}}}}}});default:return {}}}}exports[_0xfe16[34]]= function(_0xa5d6x11,_0xa5d6x12){return Promise[_0xfe16[41]]([])[_0xfe16[21]](getMailQueues(_0xa5d6x11[_0xfe16[32]]))[_0xfe16[21]](function(_0xa5d6x1b){return MailRoom[_0xfe16[40]](_[_0xfe16[39]](Util[_0xfe16[23]](_0xa5d6x11[_0xfe16[22]],{status:_0xfe16[36],updatedAt:{$gte:moment()[_0xfe16[38]](_0xfe16[37])}}),_0xa5d6x1b))})[_0xfe16[21]](function(_0xa5d6x1a){return _0xa5d6x12[_0xfe16[20]](200)[_0xfe16[19]]({value:_0xa5d6x1a})})[_0xfe16[18]](function(_0xa5d6x14){console[_0xfe16[35]](_0xa5d6x14);return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[42]]= function(_0xa5d6x11,_0xa5d6x12){return Promise[_0xfe16[41]]([])[_0xfe16[21]](getMailQueues(_0xa5d6x11[_0xfe16[32]]))[_0xfe16[21]](function(_0xa5d6x1b){return MailRoom[_0xfe16[40]](_[_0xfe16[39]](Util[_0xfe16[23]](_0xa5d6x11[_0xfe16[22]],{status:_0xfe16[43],updatedAt:{$gte:moment()[_0xfe16[38]](_0xfe16[37])}}),_0xa5d6x1b))})[_0xfe16[21]](function(_0xa5d6x1a){return _0xa5d6x12[_0xfe16[20]](200)[_0xfe16[19]]({value:_0xa5d6x1a})})[_0xfe16[18]](function(_0xa5d6x14){console[_0xfe16[35]](_0xa5d6x14);return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[44]]= function(_0xa5d6x11,_0xa5d6x12){return Promise[_0xfe16[41]]([])[_0xfe16[21]](getMailQueues(_0xa5d6x11[_0xfe16[32]]))[_0xfe16[21]](function(_0xa5d6x1b){return MailRoom[_0xfe16[40]](_[_0xfe16[39]](Util[_0xfe16[23]](_0xa5d6x11[_0xfe16[22]],{status:_0xfe16[45],updatedAt:{$gte:moment()[_0xfe16[38]](_0xfe16[37])}}),_0xa5d6x1b))})[_0xfe16[21]](function(_0xa5d6x1a){return _0xa5d6x12[_0xfe16[20]](200)[_0xfe16[19]]({value:_0xa5d6x1a})})[_0xfe16[18]](function(_0xa5d6x14){console[_0xfe16[35]](_0xa5d6x14);return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[46]]= function(_0xa5d6x11,_0xa5d6x12){return Promise[_0xfe16[41]]([])[_0xfe16[21]](getMailQueues(_0xa5d6x11[_0xfe16[32]]))[_0xfe16[21]](function(_0xa5d6x1b){return MailRoom[_0xfe16[40]](_[_0xfe16[39]](Util[_0xfe16[23]](_0xa5d6x11[_0xfe16[22]],{status:_0xfe16[47],updatedAt:{$gte:moment()[_0xfe16[38]](_0xfe16[37])}}),_0xa5d6x1b))})[_0xfe16[21]](function(_0xa5d6x1a){return _0xa5d6x12[_0xfe16[20]](200)[_0xfe16[19]]({value:_0xa5d6x1a})})[_0xfe16[18]](function(_0xa5d6x14){console[_0xfe16[35]](_0xa5d6x14);return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[48]]= function(_0xa5d6x11,_0xa5d6x12,_0xa5d6x13){switch(_0xa5d6x11[_0xfe16[32]][_0xfe16[33]]){case _0xfe16[54]:return sequelize[_0xfe16[22]](_0xfe16[50],{replacements:{status:_0xfe16[51],id:_0xa5d6x11[_0xfe16[32]][_0xfe16[28]]},type:sequelize[_0xfe16[53]][_0xfe16[52]]})[_0xfe16[21]](function(_0xa5d6x15){return _0xa5d6x12[_0xfe16[20]](200)[_0xfe16[19]](_0xa5d6x15)})[_0xfe16[18]](function(_0xa5d6x14){console[_0xfe16[49]](_0xa5d6x14);return handleError(_0xa5d6x12,_0xa5d6x14)});default:return sequelize[_0xfe16[22]](_0xfe16[55],{replacements:{status:_0xfe16[51],id:_0xa5d6x11[_0xfe16[32]][_0xfe16[28]]},type:sequelize[_0xfe16[53]][_0xfe16[52]]})[_0xfe16[21]](function(_0xa5d6x15){return _0xa5d6x12[_0xfe16[20]](200)[_0xfe16[19]](_0xa5d6x15)})[_0xfe16[18]](function(_0xa5d6x14){return handleError(_0xa5d6x12,_0xa5d6x14)})}};exports[_0xfe16[56]]= function(_0xa5d6x11,_0xa5d6x12,_0xa5d6x13){return MailRoom[_0xfe16[58]]({where:{UserId:_0xa5d6x11[_0xfe16[57]][_0xfe16[28]]},include:[{all:true}]})[_0xfe16[21]](function(_0xa5d6x1c){return _0xa5d6x12[_0xfe16[20]](200)[_0xfe16[19]](_0xa5d6x1c)})[_0xfe16[18]](function(_0xa5d6x14){return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[59]]= function(_0xa5d6x11,_0xa5d6x12,_0xa5d6x13){var _0xa5d6x1d;var _0xa5d6x1e=[];console[_0xfe16[35]](_0xa5d6x11[_0xfe16[60]]);console[_0xfe16[35]](_0xa5d6x11[_0xfe16[57]]);return MailRoom[_0xfe16[67]](_0xa5d6x11[_0xfe16[60]],{where:{id:_0xa5d6x11[_0xfe16[57]][_0xfe16[28]][_0xfe16[63]](_0xfe16[62])},individualHooks:true})[_0xfe16[21]](function(){return Status[_0xfe16[66]](_[_0xfe16[29]](_0xa5d6x11[_0xfe16[57]][_0xfe16[28]][_0xfe16[63]](_0xfe16[62]),function(_0xa5d6x1f){return {status:_0xa5d6x11[_0xfe16[60]][_0xfe16[20]],data1:_0xa5d6x11[_0xfe16[32]][_0xfe16[64]],data2:_0xa5d6x11[_0xfe16[32]][_0xfe16[65]],MailRoomId:_0xa5d6x1f,UserId:_0xa5d6x11[_0xfe16[32]][_0xfe16[28]]}}))})[_0xfe16[21]](function(_0xa5d6x1c){return _0xa5d6x12[_0xfe16[61]](200)})[_0xfe16[18]](function(_0xa5d6x14){return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[68]]= function(_0xa5d6x11,_0xa5d6x12,_0xa5d6x13){return MailMessage[_0xfe16[31]](_0xa5d6x11[_0xfe16[57]][_0xfe16[28]])[_0xfe16[21]](function(_0xa5d6x21){return _0xa5d6x21[_0xfe16[70]]({include:[{model:MailAccount},{model:MailMessage,include:[{model:MailAttachment},{model:User,attributes:[_0xfe16[28],_0xfe16[64],_0xfe16[65],_0xfe16[69]]}]},{model:User,attributes:[_0xfe16[28],_0xfe16[64],_0xfe16[65],_0xfe16[69]]}]})})[_0xfe16[21]](function(_0xa5d6x20){return _0xa5d6x12[_0xfe16[19]](_0xa5d6x20)})[_0xfe16[18]](function(_0xa5d6x14){return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[71]]= function(_0xa5d6x11,_0xa5d6x12,_0xa5d6x13){return MailRoom[_0xfe16[26]](_0xfe16[25])[_0xfe16[31]](_0xa5d6x11[_0xfe16[57]][_0xfe16[28]])[_0xfe16[21]](function(_0xa5d6x20){if(!_0xa5d6x20){return _0xa5d6x12[_0xfe16[61]](404)};return _0xa5d6x12[_0xfe16[19]](_0xa5d6x20)})[_0xfe16[18]](function(_0xa5d6x14){console[_0xfe16[49]](_0xa5d6x14);return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[72]]= function(_0xa5d6x11,_0xa5d6x12,_0xa5d6x13){return MailRoom[_0xfe16[31]](_0xa5d6x11[_0xfe16[57]][_0xfe16[28]])[_0xfe16[21]](function(_0xa5d6x20){if(!_0xa5d6x20){return _0xa5d6x12[_0xfe16[61]](404)};return _0xa5d6x20[_0xfe16[74]]({attributes:[_0xfe16[28],_0xfe16[64],_0xfe16[65],_0xfe16[69],_0xfe16[33],_0xfe16[73]]})})[_0xfe16[21]](function(_0xa5d6x22){return _0xa5d6x12[_0xfe16[19]](_0xa5d6x22)})[_0xfe16[18]](function(_0xa5d6x14){return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[75]]= function(_0xa5d6x11,_0xa5d6x12,_0xa5d6x13){return MailRoom[_0xfe16[75]](_0xa5d6x11[_0xfe16[60]])[_0xfe16[21]](function(_0xa5d6x20){return _0xa5d6x12[_0xfe16[20]](201)[_0xfe16[19]](_0xa5d6x20)})[_0xfe16[18]](function(_0xa5d6x14){return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[76]]= function(_0xa5d6x11,_0xa5d6x12,_0xa5d6x13){_0xa5d6x11[_0xfe16[60]][_0xfe16[77]]= _0xa5d6x11[_0xfe16[32]][_0xfe16[28]];_0xa5d6x11[_0xfe16[60]][_0xfe16[78]]= _0xa5d6x11[_0xfe16[57]][_0xfe16[28]];_0xa5d6x11[_0xfe16[60]][_0xfe16[79]]= (_0xa5d6x11[_0xfe16[60]][_0xfe16[80]]&& _0xa5d6x11[_0xfe16[60]][_0xfe16[80]][_0xfe16[81]])?true:false;_0xa5d6x11[_0xfe16[60]][_0xfe16[82]]= _0xa5d6x11[_0xfe16[60]][_0xfe16[82]]|| htmlToText[_0xfe16[84]](_0xa5d6x11[_0xfe16[60]][_0xfe16[83]],{wordwrap:false});return MailRoom[_0xfe16[31]](_0xa5d6x11[_0xfe16[57]][_0xfe16[28]])[_0xfe16[21]](function(_0xa5d6x20){_0xa5d6x11[_0xfe16[60]][_0xfe16[85]]= _0xa5d6x20[_0xfe16[86]];return MailMessage[_0xfe16[75]](_0xa5d6x11[_0xfe16[60]],{include:[{model:MailAttachment}],user:_0xa5d6x11[_0xfe16[32]]})})[_0xfe16[21]](function(_0xa5d6x21){return _0xa5d6x12[_0xfe16[20]](201)[_0xfe16[19]](_0xa5d6x21)})[_0xfe16[18]](function(_0xa5d6x14){return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[67]]= function(_0xa5d6x11,_0xa5d6x12,_0xa5d6x13){return MailRoom[_0xfe16[31]](_0xa5d6x11[_0xfe16[57]][_0xfe16[28]])[_0xfe16[21]](function(_0xa5d6x20){if(!_0xa5d6x20){return _0xa5d6x12[_0xfe16[61]](404)};return _0xa5d6x20[_0xfe16[67]](_0xa5d6x11[_0xfe16[60]])})[_0xfe16[21]](function(_0xa5d6x20){return _0xa5d6x12[_0xfe16[20]](200)[_0xfe16[19]](_0xa5d6x20)})[_0xfe16[18]](function(_0xa5d6x14){return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[87]]= function(_0xa5d6x11,_0xa5d6x12,_0xa5d6x13){var _0xa5d6x23={where:{id:_0xa5d6x11[_0xfe16[57]][_0xfe16[28]][_0xfe16[63]](_0xfe16[62])},user:_0xa5d6x11[_0xfe16[32]],individualHooks:true};return MailRoom[_0xfe16[67]](_0xa5d6x11[_0xfe16[60]],_0xa5d6x23)[_0xfe16[21]](function(_0xa5d6x1c){if(!_0xa5d6x1c){return _0xa5d6x12[_0xfe16[61]](404)};return _0xa5d6x1c})[_0xfe16[21]](function(_0xa5d6x1c){return _0xa5d6x12[_0xfe16[61]](200)})[_0xfe16[18]](function(_0xa5d6x14){return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[88]]= function(_0xa5d6x11,_0xa5d6x12,_0xa5d6x13){return MailRoom[_0xfe16[31]](_0xa5d6x11[_0xfe16[57]][_0xfe16[28]])[_0xfe16[21]](function(_0xa5d6x20){if(!_0xa5d6x20){return _0xa5d6x12[_0xfe16[61]](404)};return _0xa5d6x20[_0xfe16[90]](_0xa5d6x11[_0xfe16[60]][_0xfe16[89]],{individualHooks:true})})[_0xfe16[21]](function(){return _0xa5d6x12[_0xfe16[61]](200)})[_0xfe16[18]](function(_0xa5d6x14){return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[91]]= function(_0xa5d6x11,_0xa5d6x12,_0xa5d6x13){return MailRoom[_0xfe16[31]](_0xa5d6x11[_0xfe16[57]][_0xfe16[28]])[_0xfe16[21]](function(_0xa5d6x20){if(!_0xa5d6x20){return _0xa5d6x12[_0xfe16[61]](404)};return _0xa5d6x20[_0xfe16[91]]()})[_0xfe16[21]](function(){return _0xa5d6x12[_0xfe16[61]](204)})[_0xfe16[18]](function(_0xa5d6x14){return handleError(_0xa5d6x12,_0xa5d6x14)})};exports[_0xfe16[92]]= function(_0xa5d6x11,_0xa5d6x12){return MailRoom[_0xfe16[91]]({where:{id:_0xa5d6x11[_0xfe16[22]][_0xfe16[93]]},individualHooks:true})[_0xfe16[21]](function(){return _0xa5d6x12[_0xfe16[61]](200)})[_0xfe16[18]](function(_0xa5d6x14){return handleError(_0xa5d6x12,_0xa5d6x14)})};function handleError(_0xa5d6x12,_0xa5d6x14){return _0xa5d6x12[_0xfe16[20]](500)[_0xfe16[19]](_0xa5d6x14)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var htmlToText = require('html-to-text'); + +var Util = require('../../config/util'); +var moment = require('moment'); + +var sequelize = require('../../models').sequelize; +var User = require('../../models').User; +var Agent = require('../../models').User; +var Contact = require('../../models').Contact; +var Status = require('../../models').MailRoomStatus; +var MailRoom = require('../../models').MailRoom; +var MailMessage = require('../../models').MailMessage; +var MailAccount = require('../../models').MailAccount; +var MailApplication = require('../../models').MailApplication; +var MailQueue = require('../../models').MailQueue; +var MailAttachment = require('../../models').MailAttachment; + +// Get list of mailRooms +exports.index = function(req, res, next) { + return MailRoom + .scope('default') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get list of fields +exports.describe = function(req, res) { + return MailRoom + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function getMailQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(Util.getMailQueuesIdByUser({}, { + attributes: ['id'] + })) + .then(function(userQueues) { + return { + include: { + model: MailAccount, + include: { + model: MailApplication, + include: { + model: MailQueue, + where: { + id: _.map(userQueues, 'id') + } + } + } + } + }; + }); + default: + return {}; + } + } +} + +exports.pending = function(req, res) { + return Promise + .all([]) + .then(getMailQueues(req.user)) + .then(function(condition) { + return MailRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'PENDING', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.new = function(req, res) { + return Promise + .all([]) + .then(getMailQueues(req.user)) + .then(function(condition) { + return MailRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'NEW', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.open = function(req, res) { + return Promise + .all([]) + .then(getMailQueues(req.user)) + .then(function(condition) { + return MailRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'OPEN', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.closed = function(req, res) { + return Promise + .all([]) + .then(getMailQueues(req.user)) + .then(function(condition) { + return MailRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'CLOSED', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.inbox = function(req, res, next) { + switch (req.user.role) { + case 'agent': + + return sequelize.query( + 'SELECT `MailRoom`.`id`, `MailRoom`.`subject`, `MailRoom`.`from`, `MailRoom`.`account`, `MailRoom`.`status`, `MailRoom`.`lastEvent`, `MailRoom`.`updatedAt` FROM `mail_rooms` AS `MailRoom` LEFT OUTER JOIN (`user_has_mail_rooms` AS `Users.user_has_mail_rooms` INNER JOIN `users` AS `Users` ON `Users`.`id` = `Users.user_has_mail_rooms`.`UserId`) ON `MailRoom`.`id` = `Users.user_has_mail_rooms`.`MailRoomId` WHERE (`MailRoom`.`deletedAt` IS NULL AND (`MailRoom`.`status` = :status OR `Users`.`id` = :id))', { + replacements: { + status: 'UNMANAGED', + id: req.user.id + }, + type: sequelize.QueryTypes.SELECT + }) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); + + default: + + return sequelize.query( + 'SELECT `id`, `subject`, `from`, `account`, `status`, `lastEvent` ,`updatedAt` FROM `mail_rooms` WHERE `mail_rooms`.`deletedAt` IS NULL', { + replacements: { + status: 'UNMANAGED', + id: req.user.id + }, + type: sequelize.QueryTypes.SELECT + }) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + } +}; + +// Get list of agent mailRooms +exports.agentIndex = function(req, res, next) { + return MailRoom + .findAll({ + where: { + UserId: req.params.id + }, + include: [{ + all: true + }] + }) + .then(function(mailRooms) { + return res.status(200).send(mailRooms); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get list of agent mailRooms +exports.updateRoomStatus = function(req, res, next) { + var _mailRoom; + var _promises = []; + + console.log(req.body); + console.log(req.params); + + return MailRoom + .update(req.body, { + where: { + id: req.params.id.split(',') + }, + individualHooks: true + }) + .then(function() { + return Status + .bulkCreate(_.map(req.params.id.split(','), function(id) { + return { + status: req.body.status, + data1: req.user.name, + data2: req.user.fullname, + MailRoomId: id, + UserId: req.user.id + } + })); + }) + .then(function(mailRooms) { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getRoomByMessage = function(req, res, next) { + return MailMessage + .findById(req.params.id) + .then(function(mailMessage) { + return mailMessage + .getMailRoom({ + include: [{ + model: MailAccount + }, { + model: MailMessage, + include: [{ + model: MailAttachment + }, { + model: User, + attributes: ['id', 'name', 'fullname', 'email'] + }] + }, { + model: User, + attributes: ['id', 'name', 'fullname', 'email'] + }] + }); + }) + .then(function(mailRoom) { + return res.send(mailRoom); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single mailRoom +exports.show = function(req, res, next) { + return MailRoom + .scope('default') + .findById(req.params.id) + .then(function(mailRoom) { + if (!mailRoom) { + return res.sendStatus(404); + } + return res.send(mailRoom); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); +}; + +// Get a single mailRoom +exports.showAgents = function(req, res, next) { + return MailRoom + .findById(req.params.id) + .then(function(mailRoom) { + if (!mailRoom) { + return res.sendStatus(404); + } + + return mailRoom + .getUsers({ + attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal'] + }); + }) + .then(function(users) { + return res.send(users); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new mailRoom in the DB. +exports.create = function(req, res, next) { + return MailRoom + .create(req.body) + .then(function(mailRoom) { + return res.status(201).send(mailRoom); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new mailMessage in the DB. +exports.sendMessage = function(req, res, next) { + req.body.UserId = req.user.id; + req.body.MailRoomId = req.params.id; + req.body.attachment = (req.body.MailAttachments && req.body.MailAttachments.length) ? true : false; + req.body.text = req.body.text || htmlToText.fromString(req.body.html, { + wordwrap: false + }); + return MailRoom + .findById(req.params.id) + .then(function(mailRoom) { + req.body.accountId = mailRoom.MailAccountId; + return MailMessage + .create(req.body, { + include: [{ + model: MailAttachment + }], + user: req.user + }); + }) + .then(function(mailMessage) { + return res.status(201).send(mailMessage); + + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing mailRoom in the DB. +exports.update = function(req, res, next) { + return MailRoom + .findById(req.params.id) + .then(function(mailRoom) { + if (!mailRoom) { + return res.sendStatus(404); + } + + return mailRoom + .update(req.body); + }) + .then(function(mailRoom) { + return res.status(200).send(mailRoom); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing mailRoom in the DB. +exports.updatePatch = function(req, res, next) { + var _options = { + where: { + id: req.params.id.split(',') + }, + user: req.user, + individualHooks: true + }; + + return MailRoom + .update(req.body, _options) + .then(function(mailRooms) { + if (!mailRooms) { + return res.sendStatus(404); + } + return mailRooms + }) + .then(function(mailRooms) { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single mailRoom +exports.updateAgents = function(req, res, next) { + return MailRoom + .findById(req.params.id) + .then(function(mailRoom) { + if (!mailRoom) { + return res.sendStatus(404); + } + + return mailRoom + .setUsers(req.body.agents, { + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a mailRoom from the DB. +exports.destroy = function(req, res, next) { + return MailRoom + .findById(req.params.id) + .then(function(mailRoom) { + if (!mailRoom) { + return res.sendStatus(404); + } + return mailRoom.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a agent from the DB. +exports.bulkDestroy = function(req, res) { + return MailRoom + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/mail_room/mail_room.events.js b/server/api/mail_room/mail_room.events.js index becf910..b0fc25b 100644 --- a/server/api/mail_room/mail_room.events.js +++ b/server/api/mail_room/mail_room.events.js @@ -1 +1,36 @@ -var _0x3830=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x3830[0];const EventEmitter=require(_0x3830[1]);const MailRoom=require(_0x3830[3])[_0x3830[2]];var MailRoomEvents= new EventEmitter();MailRoomEvents[_0x3830[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x3830[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x3830[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x3830[6]};for(var e in events){var event=events[e];MailRoom[_0x3830[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x37a0x8,_0x37a0x9,_0x37a0xa){MailRoomEvents[_0x3830[10]](event+ _0x3830[8]+ _0x37a0x8[_0x3830[9]],_0x37a0x8);MailRoomEvents[_0x3830[10]](event,_0x37a0x8);_0x37a0xa(null)}}module[_0x3830[11]]= MailRoomEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const MailRoom = require('../../models').MailRoom; + +var MailRoomEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +MailRoomEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + MailRoom.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + MailRoomEvents.emit(event + ':' + doc._id, doc); + MailRoomEvents.emit(event, doc); + done(null); + } +} + +module.exports = MailRoomEvents; diff --git a/server/api/mail_room/mail_room.socket.js b/server/api/mail_room/mail_room.socket.js index 27e1adb..9d2aefc 100644 --- a/server/api/mail_room/mail_room.socket.js +++ b/server/api/mail_room/mail_room.socket.js @@ -1 +1,28 @@ -var _0x387b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x387b[0];const MailRoomEvents=require(_0x387b[1]);var events=[_0x387b[2],_0x387b[2],_0x387b[3]];exports[_0x387b[4]]= function(_0x9350x3){for(var _0x9350x4=0,_0x9350x5=events[_0x387b[5]];_0x9350x4< _0x9350x5;_0x9350x4++){var _0x9350x6=events[_0x9350x4];var _0x9350x7=createListener(_0x387b[6]+ _0x9350x6,_0x9350x3);MailRoomEvents[_0x387b[7]](_0x9350x6,_0x9350x7);_0x9350x3[_0x387b[7]](_0x387b[8],removeListener(_0x9350x6,_0x9350x7))}};function createListener(_0x9350x6,_0x9350x3){return function(_0x9350x9){_0x9350x3[_0x387b[9]](_0x9350x6,_0x9350x9)}}function removeListener(_0x9350x6,_0x9350x7){return function(){MailRoomEvents[_0x387b[10]](_0x9350x6,_0x9350x7)}} \ No newline at end of file +'use strict'; + +const MailRoomEvents = require('./mail_room.events'); + +// Model events to emit +var events = ['save', 'save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('mail_room:' + event, socket); + + MailRoomEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + MailRoomEvents.removeListener(event, listener); + }; +} diff --git a/server/api/mail_server_in/index.js b/server/api/mail_server_in/index.js index 4e46ca2..58902a3 100644 --- a/server/api/mail_server_in/index.js +++ b/server/api/mail_server_in/index.js @@ -1 +1,17 @@ -var _0x8140=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x4D\x61\x69\x6C","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x8140[0];var express=require(_0x8140[1]);var controller=require(_0x8140[2]);var auth=require(_0x8140[3]);var license=require(_0x8140[4]);var router=express.Router();router[_0x8140[12]](_0x8140[5],license[_0x8140[6]](),license[_0x8140[7]](),auth[_0x8140[8]](),auth[_0x8140[10]]([9],[_0x8140[9]]),controller[_0x8140[11]]);router[_0x8140[12]](_0x8140[13],license[_0x8140[6]](),license[_0x8140[7]](),auth[_0x8140[8]](),auth[_0x8140[10]]([9],[_0x8140[9]]),controller[_0x8140[14]]);router[_0x8140[16]](_0x8140[5],license[_0x8140[6]](),license[_0x8140[7]](),auth[_0x8140[8]](),auth[_0x8140[10]]([9],[_0x8140[9]]),controller[_0x8140[15]]);router[_0x8140[18]](_0x8140[13],license[_0x8140[6]](),license[_0x8140[7]](),auth[_0x8140[8]](),auth[_0x8140[10]]([9],[_0x8140[9]]),controller[_0x8140[17]]);router[_0x8140[20]](_0x8140[13],license[_0x8140[6]](),license[_0x8140[7]](),auth[_0x8140[8]](),auth[_0x8140[10]]([9],[_0x8140[9]]),controller[_0x8140[19]]);module[_0x8140[21]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./mail_server_in.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.index); +router.get('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.show); +router.post('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.create); +router.put('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.update); +router.delete('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/mail_server_in/mail_server_in.controller.js b/server/api/mail_server_in/mail_server_in.controller.js index b996cd7..27fda21 100644 --- a/server/api/mail_server_in/mail_server_in.controller.js +++ b/server/api/mail_server_in/mail_server_in.controller.js @@ -1 +1,96 @@ -var _0x58db=["\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","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\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","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x58db[0];var _=require(_0x58db[1]);var Util=require(_0x58db[2]);var sequelize=require(_0x58db[4])[_0x58db[3]];var MailServerIn=require(_0x58db[4])[_0x58db[5]];exports[_0x58db[6]]= function(_0xa626x5,_0xa626x6){return MailServerIn[_0x58db[11]]()[_0x58db[10]](function(_0xa626x8){return _0xa626x6[_0x58db[9]](200)[_0x58db[8]](_0xa626x8)})[_0x58db[7]](function(_0xa626x7){return handleError(_0xa626x6,_0xa626x7)})};exports[_0x58db[12]]= function(_0xa626x5,_0xa626x6){return MailServerIn[_0x58db[16]](_0xa626x5[_0x58db[15]][_0x58db[14]])[_0x58db[10]](function(_0xa626x9){if(!_0xa626x9){return _0xa626x6[_0x58db[13]](404)};return _0xa626x6[_0x58db[8]](_0xa626x9)})[_0x58db[7]](function(_0xa626x7){return handleError(_0xa626x6,_0xa626x7)})};exports[_0x58db[17]]= function(_0xa626x5,_0xa626x6){return MailServerIn[_0x58db[17]](_0xa626x5[_0x58db[20]])[_0x58db[10]](function(_0xa626x9){return _0xa626x6[_0x58db[9]](201)[_0x58db[8]](_0xa626x9)})[_0x58db[7]](sequelize.UniqueConstraintError,function(_0xa626x7){return Util[_0x58db[19]][_0x58db[18]](_0xa626x6,_0xa626x7)})[_0x58db[7]](function(_0xa626x7){return handleError(_0xa626x6,_0xa626x7)})};exports[_0x58db[21]]= function(_0xa626x5,_0xa626x6){if(_0xa626x5[_0x58db[20]][_0x58db[14]]){delete _0xa626x5[_0x58db[20]][_0x58db[14]]};return MailServerIn[_0x58db[16]](_0xa626x5[_0x58db[15]][_0x58db[14]])[_0x58db[10]](function(_0xa626x9){if(!_0xa626x9){return _0xa626x6[_0x58db[13]](404)};var _0xa626xa=_[_0x58db[22]](_0xa626x9,_0xa626x5[_0x58db[20]]);return _0xa626xa[_0x58db[23]]()})[_0x58db[10]](function(_0xa626x9){return _0xa626x6[_0x58db[9]](200)[_0x58db[8]](_0xa626x9)})[_0x58db[7]](sequelize.UniqueConstraintError,function(_0xa626x7){return Util[_0x58db[19]][_0x58db[18]](_0xa626x6,_0xa626x7)})[_0x58db[7]](function(_0xa626x7){return handleError(_0xa626x6,_0xa626x7)})};exports[_0x58db[24]]= function(_0xa626x5,_0xa626x6){return MailServerIn[_0x58db[16]](_0xa626x5[_0x58db[15]][_0x58db[14]])[_0x58db[10]](function(_0xa626x9){if(!_0xa626x9){return _0xa626x6[_0x58db[13]](404)};return _0xa626x9[_0x58db[24]]()})[_0x58db[7]](function(_0xa626x7){return handleError(_0xa626x6,_0xa626x7)})};function handleError(_0xa626x6,_0xa626x7){return _0xa626x6[_0x58db[9]](500)[_0x58db[8]](_0xa626x7)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var sequelize = require('../../models').sequelize; +var MailServerIn = require('../../models').MailServerIn; + +// Get list of mail_server_ins +exports.index = function(req, res) { + return MailServerIn + .findAll() + .then(function(mail_server_ins) { + return res.status(200).send(mail_server_ins); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single mailServerIn +exports.show = function(req, res) { + return MailServerIn + .findById(req.params.id) + .then(function(mailServerIn) { + if (!mailServerIn) { + return res.sendStatus(404); + } + return res.send(mailServerIn); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new mailServerIn in the DB. +exports.create = function(req, res) { + return MailServerIn + .create(req.body) + .then(function(mailServerIn) { + return res.status(201).send(mailServerIn); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing mailServerIn in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return MailServerIn + .findById(req.params.id) + .then(function(mailServerIn) { + if (!mailServerIn) { + return res.sendStatus(404); + } + var updated = _.merge(mailServerIn, req.body); + return updated + .save(); + }) + .then(function(mailServerIn) { + return res.status(200).send(mailServerIn); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a mailServerIn from the DB. +exports.destroy = function(req, res) { + return MailServerIn + .findById(req.params.id) + .then(function(mailServerIn) { + if (!mailServerIn) { + return res.sendStatus(404); + } + return mailServerIn + .destroy(); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/mail_server_in/mail_server_in.events.js b/server/api/mail_server_in/mail_server_in.events.js index 8d3e201..540e207 100644 --- a/server/api/mail_server_in/mail_server_in.events.js +++ b/server/api/mail_server_in/mail_server_in.events.js @@ -1 +1,36 @@ -var _0x49fe=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x49fe[0];const EventEmitter=require(_0x49fe[1]);const MailServerIn=require(_0x49fe[3])[_0x49fe[2]];var MailServerInEvents= new EventEmitter();MailServerInEvents[_0x49fe[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x49fe[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x49fe[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x49fe[6]};for(var e in events){var event=events[e];MailServerIn[_0x49fe[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xaeb1x8,_0xaeb1x9,_0xaeb1xa){MailServerInEvents[_0x49fe[10]](event+ _0x49fe[8]+ _0xaeb1x8[_0x49fe[9]],_0xaeb1x8);MailServerInEvents[_0x49fe[10]](event,_0xaeb1x8);_0xaeb1xa(null)}}module[_0x49fe[11]]= MailServerInEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const MailServerIn = require('../../models').MailServerIn; + +var MailServerInEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +MailServerInEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + MailServerIn.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + MailServerInEvents.emit(event + ':' + doc._id, doc); + MailServerInEvents.emit(event, doc); + done(null); + } +} + +module.exports = MailServerInEvents; diff --git a/server/api/mail_server_in/mail_server_in.socket.js b/server/api/mail_server_in/mail_server_in.socket.js index 7b816cb..b6bcc34 100644 --- a/server/api/mail_server_in/mail_server_in.socket.js +++ b/server/api/mail_server_in/mail_server_in.socket.js @@ -1 +1,42 @@ -var _0x79da=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x73\x74\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x3A\x73\x74\x61\x74\x65","\x65\x6D\x69\x74","\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x3A\x73\x61\x76\x65","\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x79da[0];const MailServerInEvents=require(_0x79da[1]);var events=[_0x79da[2],_0x79da[3]];exports[_0x79da[4]]= function(_0xb285x3){for(var _0xb285x4=0,_0xb285x5=events[_0x79da[5]];_0xb285x4< _0xb285x5;_0xb285x4++){var _0xb285x6=events[_0xb285x4];var _0xb285x7=createListener(_0x79da[6]+ _0xb285x6,_0xb285x3);MailServerInEvents[_0x79da[7]](_0xb285x6,_0xb285x7);_0xb285x3[_0x79da[7]](_0x79da[8],removeListener(_0xb285x6,_0xb285x7))}};function createListener(_0xb285x6,_0xb285x3){return function(_0xb285x9){switch(_0xb285x6){case _0x79da[13]:if(_0xb285x9[_0x79da[10]](_0x79da[9])){_0xb285x3[_0x79da[12]](_0x79da[11],_0xb285x9)}else {_0xb285x3[_0x79da[12]](_0x79da[13],_0xb285x9)};break;case _0x79da[14]:_0xb285x3[_0x79da[12]](_0xb285x6,_0xb285x9);break;default:}}}function removeListener(_0xb285x6,_0xb285x7){return function(){MailServerInEvents[_0x79da[15]](_0xb285x6,_0xb285x7)}} \ No newline at end of file +'use strict'; + +const MailServerInEvents = require('./mail_server_in.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('mail_server_in:' + event, socket); + + MailServerInEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'mail_server_in:save': + if (doc.changed('state')) { + socket.emit('mail_server_in:state', doc); + } else { + socket.emit('mail_server_in:save', doc); + } + break; + + case 'mail_server_in:remove': + socket.emit(event, doc); + break; + + default: + } + }; +} + +function removeListener(event, listener) { + return function() { + MailServerInEvents.removeListener(event, listener); + }; +} diff --git a/server/api/mail_server_out/index.js b/server/api/mail_server_out/index.js index b08fff6..323abb4 100644 --- a/server/api/mail_server_out/index.js +++ b/server/api/mail_server_out/index.js @@ -1 +1,19 @@ -var _0x1daa=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x6F\x75\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x4D\x61\x69\x6C","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x73\x65\x72\x76\x69\x63\x65","\x69\x6E\x64\x65\x78\x53\x65\x72\x76\x69\x63\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x74\x65\x73\x74","\x74\x65\x73\x74","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x1daa[0];var express=require(_0x1daa[1]);var controller=require(_0x1daa[2]);var auth=require(_0x1daa[3]);var license=require(_0x1daa[4]);var router=express.Router();router[_0x1daa[12]](_0x1daa[5],license[_0x1daa[6]](),license[_0x1daa[7]](),auth[_0x1daa[8]](),auth[_0x1daa[10]]([9],[_0x1daa[9]]),controller[_0x1daa[11]]);router[_0x1daa[12]](_0x1daa[13],license[_0x1daa[6]](),license[_0x1daa[7]](),auth[_0x1daa[8]](),auth[_0x1daa[10]]([9],[_0x1daa[9]]),controller[_0x1daa[14]]);router[_0x1daa[12]](_0x1daa[15],license[_0x1daa[6]](),license[_0x1daa[7]](),auth[_0x1daa[8]](),auth[_0x1daa[10]]([9],[_0x1daa[9]]),controller[_0x1daa[16]]);router[_0x1daa[12]](_0x1daa[17],license[_0x1daa[6]](),license[_0x1daa[7]](),auth[_0x1daa[8]](),auth[_0x1daa[10]]([9],[_0x1daa[9]]),controller[_0x1daa[18]]);router[_0x1daa[20]](_0x1daa[5],license[_0x1daa[6]](),license[_0x1daa[7]](),auth[_0x1daa[8]](),auth[_0x1daa[10]]([9],[_0x1daa[9]]),controller[_0x1daa[19]]);router[_0x1daa[22]](_0x1daa[15],license[_0x1daa[6]](),license[_0x1daa[7]](),auth[_0x1daa[8]](),auth[_0x1daa[10]]([9],[_0x1daa[9]]),controller[_0x1daa[21]]);router[_0x1daa[24]](_0x1daa[15],license[_0x1daa[6]](),license[_0x1daa[7]](),auth[_0x1daa[8]](),auth[_0x1daa[10]]([9],[_0x1daa[9]]),controller[_0x1daa[23]]);module[_0x1daa[25]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); + +var controller = require('./mail_server_out.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.index); +router.get('/service', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.indexService); +router.get('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.show); +router.get('/:id/test', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.test); +router.post('/', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.create); +router.put('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.update); +router.delete('/:id', license.isValidDate(), license.hasMail(), auth.isAuthenticated(), auth.hasModule([9], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/mail_server_out/mail_server_out.controller.js b/server/api/mail_server_out/mail_server_out.controller.js index 000925a..00117cf 100644 --- a/server/api/mail_server_out/mail_server_out.controller.js +++ b/server/api/mail_server_out/mail_server_out.controller.js @@ -1 +1,157 @@ -var _0xd86c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x69\x6E\x64\x65\x78\x53\x65\x72\x76\x69\x63\x65","\x6D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x20\x73\x65\x72\x76\x69\x63\x65\x20\x61\x63\x63\x6F\x75\x6E\x74\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x2E","\x66\x69\x6E\x64\x4F\x6E\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x73\x68\x6F\x77\x43\x75\x73\x74\x6F\x6D","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x73\x74\x61\x74\x65","\x43\x4F\x4E\x4E\x45\x43\x54\x49\x4E\x47","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x74\x65\x73\x74"];_0xd86c[0];var _=require(_0xd86c[1]);var MailServerOut=require(_0xd86c[3])[_0xd86c[2]];var MailMessage=require(_0xd86c[3])[_0xd86c[4]];var MailAccount=require(_0xd86c[3])[_0xd86c[5]];var sequelize=require(_0xd86c[3])[_0xd86c[6]];var Util=require(_0xd86c[7]);exports[_0xd86c[8]]= function(_0x9d42x7,_0x9d42x8,_0x9d42x9){return MailServerOut[_0xd86c[15]](Util[_0xd86c[14]](_0x9d42x7[_0xd86c[13]]))[_0xd86c[12]](function(_0x9d42xb){return _0x9d42x8[_0xd86c[11]](200)[_0xd86c[10]](_0x9d42xb)})[_0xd86c[9]](function(_0x9d42xa){return handleError(_0x9d42x8,_0x9d42xa)})};exports[_0xd86c[16]]= function(_0x9d42x7,_0x9d42x8){return MailServerOut[_0xd86c[19]]({where:{service:true}})[_0xd86c[12]](function(_0x9d42xc){if(!_0x9d42xc){throw new Error(_0xd86c[18])};return _0x9d42x8[_0xd86c[11]](200)[_0xd86c[10]](_0x9d42xc)})[_0xd86c[9]](function(_0x9d42xa){return handleError(_0x9d42x8,{message:_0x9d42xa[_0xd86c[17]]})})};exports[_0xd86c[20]]= function(_0x9d42x7,_0x9d42x8){return MailServerOut[_0xd86c[24]](_0x9d42x7[_0xd86c[23]][_0xd86c[22]])[_0xd86c[12]](function(_0x9d42xc){if(!_0x9d42xc){return _0x9d42x8[_0xd86c[21]](404)};return _0x9d42x8[_0xd86c[10]](_0x9d42xc)})[_0xd86c[9]](function(_0x9d42xa){return handleError(_0x9d42x8,_0x9d42xa)})};exports[_0xd86c[25]]= function(_0x9d42x7,_0x9d42x8,_0x9d42x9){return MailAccount[_0xd86c[19]]({where:{custom:true}})[_0xd86c[12]](function(_0x9d42xd){if(!_0x9d42xd){return _0x9d42x8[_0xd86c[21]](404)};return _0x9d42x8[_0xd86c[10]](_0x9d42xd)})[_0xd86c[9]](function(_0x9d42xa){return handleError(_0x9d42x8,_0x9d42xa)})};exports[_0xd86c[26]]= function(_0x9d42x7,_0x9d42x8){return MailServerOut[_0xd86c[26]](_0x9d42x7[_0xd86c[27]])[_0xd86c[12]](function(_0x9d42xc){return _0x9d42x8[_0xd86c[11]](201)[_0xd86c[10]](_0x9d42xc)})[_0xd86c[9]](function(_0x9d42xa){return handleError(_0x9d42x8,_0x9d42xa)})};exports[_0xd86c[28]]= function(_0x9d42x7,_0x9d42x8){if(_0x9d42x7[_0xd86c[27]][_0xd86c[22]]){delete _0x9d42x7[_0xd86c[27]][_0xd86c[22]]};_0x9d42x7[_0xd86c[27]][_0xd86c[29]]= _0xd86c[30];return MailServerOut[_0xd86c[24]](_0x9d42x7[_0xd86c[23]][_0xd86c[22]])[_0xd86c[12]](function(_0x9d42xc){if(!_0x9d42xc){return _0x9d42x8[_0xd86c[21]](404)};var _0x9d42xe=_[_0xd86c[31]](_0x9d42xc,_0x9d42x7[_0xd86c[27]]);return _0x9d42xe[_0xd86c[32]]()})[_0xd86c[12]](function(_0x9d42xc){return _0x9d42x8[_0xd86c[11]](200)[_0xd86c[10]](_0x9d42xc)})[_0xd86c[9]](function(_0x9d42xa){return handleError(_0x9d42x8,_0x9d42xa)})};exports[_0xd86c[33]]= function(_0x9d42x7,_0x9d42x8){return MailServerOut[_0xd86c[24]](_0x9d42x7[_0xd86c[23]][_0xd86c[22]])[_0xd86c[12]](function(_0x9d42xc){if(!_0x9d42xc){return _0x9d42x8[_0xd86c[21]](404)};return _0x9d42xc[_0xd86c[33]]()})[_0xd86c[12]](function(){return _0x9d42x8[_0xd86c[21]](204)})[_0xd86c[9]](function(_0x9d42xa){return handleError(_0x9d42x8,_0x9d42xa)})};exports[_0xd86c[34]]= function(_0x9d42x7,_0x9d42x8){var _0x9d42xf;var _0x9d42x10;return MailServerOut[_0xd86c[24]](_0x9d42x7[_0xd86c[23]][_0xd86c[22]])[_0xd86c[12]](function(_0x9d42xc){if(!_0x9d42xc){return _0x9d42x8[_0xd86c[21]](404)};return _0x9d42xc[_0xd86c[28]]({state:_0xd86c[30]})})[_0xd86c[12]](function(){return _0x9d42x8[_0xd86c[11]](201)[_0xd86c[10]](_0x9d42x10)})};function handleError(_0x9d42x8,_0x9d42xa){return _0x9d42x8[_0xd86c[11]](500)[_0xd86c[10]](_0x9d42xa)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var MailServerOut = require('../../models').MailServerOut; +var MailMessage = require('../../models').MailMessage; +var MailAccount = require('../../models').MailAccount; +var sequelize = require('../../models').sequelize; +var Util = require('../../config/util'); + +// Get list of mailServerOuts +exports.index = function(req, res, next) { + return MailServerOut + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.indexService = function(req, res) { + return MailServerOut + .findOne({ + where: { + service: true + } + }) + .then(function(mailServerOut) { + if (!mailServerOut) { + throw new Error("Mail service account not found."); + } + + return res.status(200).send(mailServerOut); + }) + .catch(function(err) { + return handleError(res, { + message: err.message + }); + }); +}; + +// Get a single mailServerOut +exports.show = function(req, res) { + return MailServerOut + .findById(req.params.id) + .then(function(mailServerOut) { + if (!mailServerOut) { + return res.sendStatus(404); + } + return res.send(mailServerOut); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single mailAccount +exports.showCustom = function(req, res, next) { + return MailAccount + .findOne({ + where: { + custom: true + } + }) + .then(function(mailAccount) { + if (!mailAccount) { + return res.sendStatus(404); + } + return res.send(mailAccount); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new mailServerOut in the DB. +exports.create = function(req, res) { + return MailServerOut + .create(req.body) + .then(function(mailServerOut) { + return res.status(201).send(mailServerOut); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing mailServerOut in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + req.body.state = 'CONNECTING'; + + return MailServerOut + .findById(req.params.id) + .then(function(mailServerOut) { + if (!mailServerOut) { + return res.sendStatus(404); + } + var updated = _.merge(mailServerOut, req.body); + return updated + .save(); + }) + .then(function(mailServerOut) { + return res.status(200).send(mailServerOut); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a mailServerOut from the DB. +exports.destroy = function(req, res) { + return MailServerOut + .findById(req.params.id) + .then(function(mailServerOut) { + if (!mailServerOut) { + return res.sendStatus(404); + } + + return mailServerOut + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.test = function(req, res) { + var _mailServerOut; + var _mailMessage; + + return MailServerOut + .findById(req.params.id) + .then(function(mailServerOut) { + if (!mailServerOut) { + return res.sendStatus(404); + } + return mailServerOut + .update({ + state: 'CONNECTING', + }); + }) + .then(function() { + return res.status(201).send(_mailMessage); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/mail_server_out/mail_server_out.events.js b/server/api/mail_server_out/mail_server_out.events.js index c4a185a..997dd0f 100644 --- a/server/api/mail_server_out/mail_server_out.events.js +++ b/server/api/mail_server_out/mail_server_out.events.js @@ -1 +1,36 @@ -var _0xe976=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xe976[0];const EventEmitter=require(_0xe976[1]);const MailServerOut=require(_0xe976[3])[_0xe976[2]];var MailServerOutEvents= new EventEmitter();MailServerOutEvents[_0xe976[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xe976[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xe976[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xe976[6]};for(var e in events){var event=events[e];MailServerOut[_0xe976[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xd428x8,_0xd428x9,_0xd428xa){MailServerOutEvents[_0xe976[10]](event+ _0xe976[8]+ _0xd428x8[_0xe976[9]],_0xd428x8);MailServerOutEvents[_0xe976[10]](event,_0xd428x8);_0xd428xa(null)}}module[_0xe976[11]]= MailServerOutEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const MailServerOut = require('../../models').MailServerOut; + +var MailServerOutEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +MailServerOutEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + MailServerOut.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + MailServerOutEvents.emit(event + ':' + doc._id, doc); + MailServerOutEvents.emit(event, doc); + done(null); + } +} + +module.exports = MailServerOutEvents; diff --git a/server/api/mail_server_out/mail_server_out.socket.js b/server/api/mail_server_out/mail_server_out.socket.js index db13a9e..4b7bf76 100644 --- a/server/api/mail_server_out/mail_server_out.socket.js +++ b/server/api/mail_server_out/mail_server_out.socket.js @@ -1 +1,42 @@ -var _0x9662=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x6F\x75\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x6F\x75\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x73\x74\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x6F\x75\x74\x3A\x73\x74\x61\x74\x65","\x65\x6D\x69\x74","\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x6F\x75\x74\x3A\x73\x61\x76\x65","\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x6F\x75\x74\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x9662[0];const MailServerOutEvents=require(_0x9662[1]);var events=[_0x9662[2],_0x9662[3]];exports[_0x9662[4]]= function(_0x9dabx3){for(var _0x9dabx4=0,_0x9dabx5=events[_0x9662[5]];_0x9dabx4< _0x9dabx5;_0x9dabx4++){var _0x9dabx6=events[_0x9dabx4];var _0x9dabx7=createListener(_0x9662[6]+ _0x9dabx6,_0x9dabx3);MailServerOutEvents[_0x9662[7]](_0x9dabx6,_0x9dabx7);_0x9dabx3[_0x9662[7]](_0x9662[8],removeListener(_0x9dabx6,_0x9dabx7))}};function createListener(_0x9dabx6,_0x9dabx3){return function(_0x9dabx9){switch(_0x9dabx6){case _0x9662[13]:if(_0x9dabx9[_0x9662[10]](_0x9662[9])){_0x9dabx3[_0x9662[12]](_0x9662[11],_0x9dabx9)}else {_0x9dabx3[_0x9662[12]](_0x9662[13],_0x9dabx9)};break;case _0x9662[14]:_0x9dabx3[_0x9662[12]](_0x9dabx6,_0x9dabx9);break;default:}}}function removeListener(_0x9dabx6,_0x9dabx7){return function(){MailServerOutEvents[_0x9662[15]](_0x9dabx6,_0x9dabx7)}} \ No newline at end of file +'use strict'; + +const MailServerOutEvents = require('./mail_server_out.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('mail_server_out:' + event, socket); + + MailServerOutEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'mail_server_out:save': + if (doc.changed('state')) { + socket.emit('mail_server_out:state', doc); + } else { + socket.emit('mail_server_out:save', doc); + } + break; + + case 'mail_server_out:remove': + socket.emit(event, doc); + break; + + default: + } + }; +} + +function removeListener(event, listener) { + return function() { + MailServerOutEvents.removeListener(event, listener); + }; +} diff --git a/server/api/metric/index.js b/server/api/metric/index.js index 61f4d31..b802bb1 100644 --- a/server/api/metric/index.js +++ b/server/api/metric/index.js @@ -1 +1,18 @@ -var _0x3fa3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x65\x74\x72\x69\x63\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x74\x61\x62\x6C\x65","\x67\x65\x74\x4D\x65\x74\x72\x69\x63\x73\x42\x79\x54\x61\x62\x6C\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x3fa3[0];var express=require(_0x3fa3[1]);var controller=require(_0x3fa3[2]);var auth=require(_0x3fa3[3]);var router=express.Router();router[_0x3fa3[9]](_0x3fa3[4],auth[_0x3fa3[5]](),auth[_0x3fa3[7]]([17],[_0x3fa3[6]]),controller[_0x3fa3[8]]);router[_0x3fa3[9]](_0x3fa3[10],auth[_0x3fa3[5]](),auth[_0x3fa3[7]]([17],[_0x3fa3[6]]),controller[_0x3fa3[11]]);router[_0x3fa3[9]](_0x3fa3[12],auth[_0x3fa3[5]](),auth[_0x3fa3[7]]([17],[_0x3fa3[6]]),controller[_0x3fa3[13]]);router[_0x3fa3[15]](_0x3fa3[4],auth[_0x3fa3[5]](),auth[_0x3fa3[7]]([17],[_0x3fa3[6]]),controller[_0x3fa3[14]]);router[_0x3fa3[17]](_0x3fa3[12],auth[_0x3fa3[5]](),auth[_0x3fa3[7]]([17],[_0x3fa3[6]]),controller[_0x3fa3[16]]);router[_0x3fa3[18]](_0x3fa3[12],auth[_0x3fa3[5]](),auth[_0x3fa3[7]]([17],[_0x3fa3[6]]),controller[_0x3fa3[16]]);router[_0x3fa3[20]](_0x3fa3[4],auth[_0x3fa3[5]](),auth[_0x3fa3[7]]([17],[_0x3fa3[6]]),controller[_0x3fa3[19]]);router[_0x3fa3[20]](_0x3fa3[12],auth[_0x3fa3[5]](),auth[_0x3fa3[7]]([17],[_0x3fa3[6]]),controller[_0x3fa3[21]]);module[_0x3fa3[22]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./metric.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.index); +router.get('/table', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.getMetricsByTable); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.update); +router.patch('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/metric/metric.controller.js b/server/api/metric/metric.controller.js index 1ec3262..0b82a6a 100644 --- a/server/api/metric/metric.controller.js +++ b/server/api/metric/metric.controller.js @@ -1 +1,135 @@ -var _0x2019=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x4D\x65\x74\x72\x69\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x67\x65\x74\x4D\x65\x74\x72\x69\x63\x73\x42\x79\x54\x61\x62\x6C\x65","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x6C\x65\x6E\x67\x74\x68","\x74\x61\x62\x6C\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x4D\x45\x54\x52\x49\x43","\x6D\x65\x73\x73\x61\x67\x65","\x41\x20\x4D\x65\x74\x72\x69\x63\x20\x77\x69\x74\x68\x20\x74\x68\x61\x74\x20\x6E\x61\x6D\x65\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x65\x78\x69\x73\x74\x73","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6C\x6F\x67","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x2019[0];var _=require(_0x2019[1]);var Metric=require(_0x2019[3])[_0x2019[2]];var util=require(_0x2019[4]);var Util=require(_0x2019[5]);var sequelize=require(_0x2019[3])[_0x2019[6]];exports[_0x2019[7]]= function(_0xf27fx6,_0xf27fx7,_0xf27fx8){return Metric[_0x2019[14]](Util[_0x2019[13]](_0xf27fx6[_0x2019[12]]))[_0x2019[11]](function(_0xf27fxa){return _0xf27fx7[_0x2019[10]](200)[_0x2019[9]](_0xf27fxa)})[_0x2019[8]](function(_0xf27fx9){return handleError(_0xf27fx7,_0xf27fx9)})};exports[_0x2019[15]]= function(_0xf27fx6,_0xf27fx7){return Metric[_0x2019[19]]({where:{table:_0xf27fx6[_0x2019[12]][_0x2019[18]]}})[_0x2019[11]](function(_0xf27fxb){if(!_0xf27fxb){return _0xf27fx7[_0x2019[16]](404)};return _0xf27fx7[_0x2019[10]](200)[_0x2019[9]]({count:_0xf27fxb[_0x2019[17]],rows:_0xf27fxb})})[_0x2019[8]](function(_0xf27fx9){return handleError(_0xf27fx7,_0xf27fx9)})};exports[_0x2019[20]]= function(_0xf27fx6,_0xf27fx7){return Metric[_0x2019[23]](_0xf27fx6[_0x2019[22]][_0x2019[21]])[_0x2019[11]](function(_0xf27fxc){if(!_0xf27fxc){return _0xf27fx7[_0x2019[16]](404)};return _0xf27fx7[_0x2019[9]](_0xf27fxc)})[_0x2019[8]](function(_0xf27fx9){return handleError(_0xf27fx7,_0xf27fx9)})};exports[_0x2019[24]]= function(_0xf27fx6,_0xf27fx7){return Metric[_0x2019[24]](_0xf27fx6[_0x2019[29]])[_0x2019[11]](function(_0xf27fxc){return _0xf27fx7[_0x2019[10]](201)[_0x2019[9]](_0xf27fxc)})[_0x2019[8]](sequelize.UniqueConstraintError,function(_0xf27fx9){_0xf27fx9[_0x2019[25]]= _0x2019[26];_0xf27fx9[_0x2019[27]]= _0x2019[28];return _0xf27fx7[_0x2019[10]](500)[_0x2019[9]](_0xf27fx9)})[_0x2019[8]](function(_0xf27fx9){return handleError(_0xf27fx7,_0xf27fx9)})};exports[_0x2019[30]]= function(_0xf27fx6,_0xf27fx7){return Metric[_0x2019[23]](_0xf27fx6[_0x2019[22]][_0x2019[21]])[_0x2019[11]](function(_0xf27fxc){if(!_0xf27fxc){return _0xf27fx7[_0x2019[16]](404)};var _0xf27fxd=_[_0x2019[32]](_0xf27fxc,_0xf27fx6[_0x2019[29]]);return _0xf27fxd[_0x2019[33]]()})[_0x2019[11]](function(){return _0xf27fx7[_0x2019[16]](200)})[_0x2019[8]](sequelize.UniqueConstraintError,function(_0xf27fx9){_0xf27fx9[_0x2019[25]]= _0x2019[26];_0xf27fx9[_0x2019[27]]= _0x2019[28];return _0xf27fx7[_0x2019[10]](500)[_0x2019[9]](_0xf27fx9)})[_0x2019[8]](function(_0xf27fx9){console[_0x2019[31]](_0xf27fx9);return handleError(_0xf27fx7,_0xf27fx9)})};exports[_0x2019[34]]= function(_0xf27fx6,_0xf27fx7){return Metric[_0x2019[23]](_0xf27fx6[_0x2019[22]][_0x2019[21]])[_0x2019[11]](function(_0xf27fxc){if(!_0xf27fxc){return _0xf27fx7[_0x2019[16]](404)};return _0xf27fxc[_0x2019[34]]()})[_0x2019[11]](function(){return _0xf27fx7[_0x2019[16]](204)})[_0x2019[8]](function(_0xf27fx9){return handleError(_0xf27fx7,_0xf27fx9)})};exports[_0x2019[35]]= function(_0xf27fx6,_0xf27fx7){return Metric[_0x2019[34]]({where:{id:_0xf27fx6[_0x2019[12]][_0x2019[36]]},individualHooks:true})[_0x2019[11]](function(){return _0xf27fx7[_0x2019[16]](204)})[_0x2019[8]](function(_0xf27fx9){return handleError(_0xf27fx7,_0xf27fx9)})};function handleError(_0xf27fx7,_0xf27fx9){return _0xf27fx7[_0x2019[10]](500)[_0x2019[9]](_0xf27fx9)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Metric = require('../../models').Metric; +var util = require('util'); +var Util = require('../../config/util'); +var sequelize = require('../../models').sequelize; + +// Get list of metrics +exports.index = function(req, res, next) { + return Metric + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getMetricsByTable = function(req, res) { + return Metric + .findAll({ + where: { + table: req.query.table + } + }) + .then(function(metrics) { + if (!metrics) { + return res.sendStatus(404); + } + return res.status(200).send({ + count: metrics.length, + rows: metrics + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single metric +exports.show = function(req, res) { + return Metric + .findById(req.params.id) + .then(function(metric) { + if (!metric) { + return res.sendStatus(404); + } + return res.send(metric); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new metric in the DB. +exports.create = function(req, res) { + return Metric + .create(req.body) + .then(function(metric) { + return res.status(201).send(metric); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + err.translatedMessage = 'MESSAGE_EXIST_METRIC'; + err.message = 'A Metric with that name already exists'; + return res.status(500).send(err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing metric in the DB. +exports.update = function(req, res) { + return Metric + .findById(req.params.id) + .then(function(metric) { + if (!metric) { + return res.sendStatus(404); + } + var updated = _.merge(metric, req.body); + return updated.save(); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + err.translatedMessage = 'MESSAGE_EXIST_METRIC'; + err.message = 'A Metric with that name already exists'; + return res.status(500).send(err); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Deletes a metric from the DB. +exports.destroy = function(req, res) { + return Metric + .findById(req.params.id) + .then(function(metric) { + if (!metric) { + return res.sendStatus(404); + } + return metric.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.bulkDestroy = function(req, res) { + return Metric + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/metric/metric.events.js b/server/api/metric/metric.events.js index a2b1355..6aa5669 100644 --- a/server/api/metric/metric.events.js +++ b/server/api/metric/metric.events.js @@ -1 +1,36 @@ -var _0x1d1e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4D\x65\x74\x72\x69\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x1d1e[0];const EventEmitter=require(_0x1d1e[1]);const Metric=require(_0x1d1e[3])[_0x1d1e[2]];var MetricEvents= new EventEmitter();MetricEvents[_0x1d1e[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x1d1e[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x1d1e[6],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x1d1e[7]};for(var e in events){var event=events[e];Metric[_0x1d1e[8]](e,emitEvent(event))};function emitEvent(event){return function(_0xb2fbx8,_0xb2fbx9,_0xb2fbxa){MetricEvents[_0x1d1e[11]](event+ _0x1d1e[9]+ _0xb2fbx8[_0x1d1e[10]],_0xb2fbx8);MetricEvents[_0x1d1e[11]](event,_0xb2fbx8);_0xb2fbxa(null)}}module[_0x1d1e[12]]= MetricEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Metric = require('../../models').Metric; + +var MetricEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +MetricEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'update', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Metric.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + MetricEvents.emit(event + ':' + doc._id, doc); + MetricEvents.emit(event, doc); + done(null); + } +} + +module.exports = MetricEvents; diff --git a/server/api/metric/metric.socket.js b/server/api/metric/metric.socket.js index 94258b9..80e152f 100644 --- a/server/api/metric/metric.socket.js +++ b/server/api/metric/metric.socket.js @@ -1 +1,54 @@ -var _0xbec3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6D\x65\x74\x72\x69\x63\x2E\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6D\x65\x74\x72\x69\x63\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x6D\x65\x74\x72\x69\x63\x3A\x73\x61\x76\x65","\x6D\x65\x74\x72\x69\x63\x3A\x75\x70\x64\x61\x74\x65","\x6D\x65\x74\x72\x69\x63\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x6D\x65\x74\x72\x69\x63","\x69\x64","\x75\x70\x64\x61\x74\x65"];_0xbec3[0];const MetricEvents=require(_0xbec3[1]);const ReportField=require(_0xbec3[3])[_0xbec3[2]];var events=[_0xbec3[4],_0xbec3[5]];exports[_0xbec3[6]]= function(_0xaccdx4){for(var _0xaccdx5=0,_0xaccdx6=events[_0xbec3[7]];_0xaccdx5< _0xaccdx6;_0xaccdx5++){var _0xaccdx7=events[_0xaccdx5];var _0xaccdx8=createListener(_0xbec3[8]+ _0xaccdx7,_0xaccdx4);MetricEvents[_0xbec3[9]](_0xaccdx7,_0xaccdx8);_0xaccdx4[_0xbec3[9]](_0xbec3[10],removeListener(_0xaccdx7,_0xaccdx8))}};function createListener(_0xaccdx7,_0xaccdx4){return function(_0xaccdxa){switch(_0xaccdx7){case _0xbec3[12]:_0xaccdx4[_0xbec3[11]](_0xaccdx7,_0xaccdxa);break;case _0xbec3[13]:updateFields(_0xaccdxa);break;case _0xbec3[14]:_0xaccdx4[_0xbec3[11]](_0xaccdx7,_0xaccdxa);break;default:}}}function removeListener(_0xaccdx7,_0xaccdx8){return function(){MetricEvents[_0xbec3[15]](_0xaccdx7,_0xaccdx8)}}function updateFields(_0xaccdxa){return ReportField[_0xbec3[20]]({field:_0xaccdxa[_0xbec3[18]]},{where:{MetricId:_0xaccdxa[_0xbec3[19]]}})[_0xbec3[17]](function(_0xaccdxd){console[_0xbec3[16]](_0xaccdxd)})} \ No newline at end of file +'use strict'; + +const MetricEvents = require('./metric.events'); +const ReportField = require('../../models').ReportField; + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('metric:' + event, socket); + + MetricEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'metric:save': + socket.emit(event, doc); + break; + case 'metric:update': + updateFields(doc); + break; + case 'metric:remove': + socket.emit(event, doc); + break; + + default: + } + }; +} + +function removeListener(event, listener) { + return function() { + MetricEvents.removeListener(event, listener); + }; +} + +function updateFields(doc) { + return ReportField.update({ + field: doc.metric + }, { + where: { + MetricId: doc.id + } + }) + .catch(function(err) { + console.log(err); + }); +} diff --git a/server/api/module/index.js b/server/api/module/index.js index 5c477d6..b57548b 100644 --- a/server/api/module/index.js +++ b/server/api/module/index.js @@ -1 +1,11 @@ -var _0xc9a2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x6F\x64\x75\x6C\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x52\x6F\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xc9a2[0];var express=require(_0xc9a2[1]);var controller=require(_0xc9a2[2]);var auth=require(_0xc9a2[3]);var router=express.Router();router[_0xc9a2[9]](_0xc9a2[4],auth[_0xc9a2[5]](),auth[_0xc9a2[7]](_0xc9a2[6]),controller[_0xc9a2[8]]);module[_0xc9a2[10]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./module.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.index); + +module.exports = router; diff --git a/server/api/module/module.controller.js b/server/api/module/module.controller.js index 427976d..d27796a 100644 --- a/server/api/module/module.controller.js +++ b/server/api/module/module.controller.js @@ -1 +1,25 @@ -var _0x9224=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x4D\x6F\x64\x75\x6C\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x75\x62\x6D\x6F\x64\x75\x6C\x65\x73","\x73\x63\x6F\x70\x65"];_0x9224[0];var _=require(_0x9224[1]);var Module=require(_0x9224[3])[_0x9224[2]];var util=require(_0x9224[4]);var Util=require(_0x9224[5]);var sequelize=require(_0x9224[3])[_0x9224[6]];exports[_0x9224[7]]= function(_0xcdf6x6,_0xcdf6x7,_0xcdf6x8){return Module[_0x9224[14]](_0x9224[13])[_0x9224[12]]()[_0x9224[11]](function(_0xcdf6xa){return _0xcdf6x7[_0x9224[10]](200)[_0x9224[9]](_0xcdf6xa)})[_0x9224[8]](function(_0xcdf6x9){return handleError(_0xcdf6x7,_0xcdf6x9)})};function handleError(_0xcdf6x7,_0xcdf6x9){return _0xcdf6x7[_0x9224[10]](500)[_0x9224[9]](_0xcdf6x9)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Module = require('../../models').Module; +var util = require('util'); +var Util = require('../../config/util'); +var sequelize = require('../../models').sequelize; + +// Get list of modules +exports.index = function(req, res, next) { + return Module + // .findAndCountAll(Util.getQuery(req.query)) + .scope('submodules') + .findAndCountAll() + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/module/module.events.js b/server/api/module/module.events.js index fbfb95c..2dbb456 100644 --- a/server/api/module/module.events.js +++ b/server/api/module/module.events.js @@ -1 +1,36 @@ -var _0x2356=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4D\x6F\x64\x75\x6C\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x2356[0];const EventEmitter=require(_0x2356[1]);const Module=require(_0x2356[3])[_0x2356[2]];var ModuleEvents= new EventEmitter();ModuleEvents[_0x2356[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x2356[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x2356[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x2356[6]};for(var e in events){var event=events[e];Module[_0x2356[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xbb44x8,_0xbb44x9,_0xbb44xa){ModuleEvents[_0x2356[10]](event+ _0x2356[8]+ _0xbb44x8[_0x2356[9]],_0xbb44x8);ModuleEvents[_0x2356[10]](event,_0xbb44x8);_0xbb44xa(null)}}module[_0x2356[11]]= ModuleEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Module = require('../../models').Module; + +var ModuleEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ModuleEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Module.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ModuleEvents.emit(event + ':' + doc._id, doc); + ModuleEvents.emit(event, doc); + done(null); + } +} + +module.exports = ModuleEvents; diff --git a/server/api/module/module.socket.js b/server/api/module/module.socket.js index 6883d56..ebccd0c 100644 --- a/server/api/module/module.socket.js +++ b/server/api/module/module.socket.js @@ -1 +1,28 @@ -var _0xe162=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6D\x6F\x64\x75\x6C\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6D\x6F\x64\x75\x6C\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xe162[0];const ModuleEvents=require(_0xe162[1]);var events=[_0xe162[2],_0xe162[3]];exports[_0xe162[4]]= function(_0xb40ex3){for(var _0xb40ex4=0,_0xb40ex5=events[_0xe162[5]];_0xb40ex4< _0xb40ex5;_0xb40ex4++){var _0xb40ex6=events[_0xb40ex4];var _0xb40ex7=createListener(_0xe162[6]+ _0xb40ex6,_0xb40ex3);ModuleEvents[_0xe162[7]](_0xb40ex6,_0xb40ex7);_0xb40ex3[_0xe162[7]](_0xe162[8],removeListener(_0xb40ex6,_0xb40ex7))}};function createListener(_0xb40ex6,_0xb40ex3){return function(_0xb40ex9){_0xb40ex3[_0xe162[9]](_0xb40ex6,_0xb40ex9)}}function removeListener(_0xb40ex6,_0xb40ex7){return function(){ModuleEvents[_0xe162[10]](_0xb40ex6,_0xb40ex7)}} \ No newline at end of file +'use strict'; + +const ModuleEvents = require('./module.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('module:' + event, socket); + + ModuleEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ModuleEvents.removeListener(event, listener); + }; +} diff --git a/server/api/motionbar/index.js b/server/api/motionbar/index.js index a3f034a..fd9d420 100644 --- a/server/api/motionbar/index.js +++ b/server/api/motionbar/index.js @@ -1 +1,11 @@ -var _0xe301=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F\x3A\x61\x63\x74\x69\x6F\x6E\x2F\x3A\x73\x74\x61\x74\x65","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x63\x74\x69\x6F\x6E","\x67\x65\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xe301[0];var express=require(_0xe301[1]);var controller=require(_0xe301[2]);var auth=require(_0xe301[3]);var router=express.Router();router[_0xe301[7]](_0xe301[4],auth[_0xe301[5]](),controller[_0xe301[6]]);module[_0xe301[8]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./motionbar.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/:action/:state', auth.isAuthenticated(), controller.action); + +module.exports = router; diff --git a/server/api/motionbar/motionbar.controller.js b/server/api/motionbar/motionbar.controller.js index 8e7e60d..275d338 100644 --- a/server/api/motionbar/motionbar.controller.js +++ b/server/api/motionbar/motionbar.controller.js @@ -1 +1,32 @@ -var _0xe580=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x61\x63\x74\x69\x6F\x6E","\x75\x73\x65\x72\x49\x64","\x71\x75\x65\x72\x79","\x55\x73\x65\x20\x75\x73\x65\x72\x49\x64","\x55\x73\x65\x72\x49\x64","\x62\x6F\x64\x79","\x70\x61\x72\x61\x6D\x73","\x73\x74\x61\x74\x65","\x41\x64\x6D\x69\x6E\x49\x64","\x69\x64","\x75\x73\x65\x72","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65"];_0xe580[0];var _=require(_0xe580[1]);var Motionbar=require(_0xe580[3])[_0xe580[2]];exports[_0xe580[4]]= function(_0x44c9x3,_0x44c9x4){if(!_0x44c9x3[_0xe580[6]][_0xe580[5]]){return handleError(_0x44c9x4,{message:_0xe580[7]})};_0x44c9x3[_0xe580[9]][_0xe580[8]]= parseInt(_0x44c9x3[_0xe580[6]][_0xe580[5]],10);_0x44c9x3[_0xe580[9]][_0xe580[4]]= _0x44c9x3[_0xe580[10]][_0xe580[4]];_0x44c9x3[_0xe580[9]][_0xe580[11]]= _0x44c9x3[_0xe580[10]][_0xe580[11]];_0x44c9x3[_0xe580[9]][_0xe580[12]]= _0x44c9x3[_0xe580[14]][_0xe580[13]];return Motionbar[_0xe580[19]](_0x44c9x3[_0xe580[9]])[_0xe580[18]](function(_0x44c9x6){return _0x44c9x4[_0xe580[17]](201)[_0xe580[16]](_0x44c9x6)})[_0xe580[15]](function(_0x44c9x5){return handleError(_0x44c9x4,_0x44c9x5)})};function handleError(_0x44c9x4,_0x44c9x5){return _0x44c9x4[_0xe580[17]](500)[_0xe580[16]](_0x44c9x5)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Motionbar = require('../../models').Motionbar; + +// Get list of motionbars +exports.action = function(req, res) { + + if (!req.query.userId) { + return handleError(res, { + message: 'Use userId' + }); + } + + req.body.UserId = parseInt(req.query.userId, 10); + req.body.action = req.params.action; + req.body.state = req.params.state; + req.body.AdminId = req.user.id; + + return Motionbar + .create(req.body) + .then(function(action) { + return res.status(201).send(action); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/motionbar/motionbar.events.js b/server/api/motionbar/motionbar.events.js index 709a39c..f84fb17 100644 --- a/server/api/motionbar/motionbar.events.js +++ b/server/api/motionbar/motionbar.events.js @@ -1 +1,36 @@ -var _0x7e49=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x7e49[0];const EventEmitter=require(_0x7e49[1]);const Motionbar=require(_0x7e49[3])[_0x7e49[2]];var MotionbarEvents= new EventEmitter();MotionbarEvents[_0x7e49[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x7e49[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x7e49[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x7e49[6]};for(var e in events){var event=events[e];Motionbar[_0x7e49[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x1053x8,_0x1053x9,_0x1053xa){MotionbarEvents[_0x7e49[10]](event+ _0x7e49[8]+ _0x1053x8[_0x7e49[9]],_0x1053x8);MotionbarEvents[_0x7e49[10]](event,_0x1053x8);_0x1053xa(null)}}module[_0x7e49[11]]= MotionbarEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Motionbar = require('../../models').Motionbar; + +var MotionbarEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +MotionbarEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Motionbar.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + MotionbarEvents.emit(event + ':' + doc._id, doc); + MotionbarEvents.emit(event, doc); + done(null); + } +} + +module.exports = MotionbarEvents; diff --git a/server/api/motionbar/motionbar.socket.js b/server/api/motionbar/motionbar.socket.js index 842c11a..cf3aa56 100644 --- a/server/api/motionbar/motionbar.socket.js +++ b/server/api/motionbar/motionbar.socket.js @@ -1 +1,30 @@ -var _0x528a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x75\x73\x65\x72\x49\x64","\x55\x73\x65\x72\x49\x64","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x528a[0];const MotionbarEvents=require(_0x528a[1]);var events=[_0x528a[2],_0x528a[3]];exports[_0x528a[4]]= function(_0xaa3fx3){for(var _0xaa3fx4=0,_0xaa3fx5=events[_0x528a[5]];_0xaa3fx4< _0xaa3fx5;_0xaa3fx4++){var _0xaa3fx6=events[_0xaa3fx4];var _0xaa3fx7=createListener(_0x528a[6]+ _0xaa3fx6,_0xaa3fx3);MotionbarEvents[_0x528a[7]](_0xaa3fx6,_0xaa3fx7);_0xaa3fx3[_0x528a[7]](_0x528a[8],removeListener(_0xaa3fx6,_0xaa3fx7))}};function createListener(_0xaa3fx6,_0xaa3fx3){return function(_0xaa3fx9){if(_0xaa3fx3[_0x528a[9]]== _0xaa3fx9[_0x528a[10]]){_0xaa3fx3[_0x528a[11]](_0xaa3fx6,_0xaa3fx9)}}}function removeListener(_0xaa3fx6,_0xaa3fx7){return function(){MotionbarEvents[_0x528a[12]](_0xaa3fx6,_0xaa3fx7)}} \ No newline at end of file +'use strict'; + +const MotionbarEvents = require('./motionbar.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('motionbar:' + event, socket); + + MotionbarEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + if (socket.userId == doc.UserId) { + socket.emit(event, doc); + } + }; +} + +function removeListener(event, listener) { + return function() { + MotionbarEvents.removeListener(event, listener); + }; +} diff --git a/server/api/network_externip/index.js b/server/api/network_externip/index.js index c49137f..c9daa97 100644 --- a/server/api/network_externip/index.js +++ b/server/api/network_externip/index.js @@ -1 +1,16 @@ -var _0x4375=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x5F\x65\x78\x74\x65\x72\x6E\x69\x70\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x52\x6F\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x4375[0];var express=require(_0x4375[1]);var auth=require(_0x4375[2]);var controller=require(_0x4375[3]);var router=express.Router();router[_0x4375[9]](_0x4375[4],auth[_0x4375[5]](),auth[_0x4375[7]](_0x4375[6]),controller[_0x4375[8]]);router[_0x4375[9]](_0x4375[10],auth[_0x4375[5]](),auth[_0x4375[7]](_0x4375[6]),controller[_0x4375[11]]);router[_0x4375[13]](_0x4375[4],auth[_0x4375[5]](),auth[_0x4375[7]](_0x4375[6]),controller[_0x4375[12]]);router[_0x4375[15]](_0x4375[10],auth[_0x4375[5]](),auth[_0x4375[7]](_0x4375[6]),controller[_0x4375[14]]);router[_0x4375[17]](_0x4375[4],auth[_0x4375[5]](),auth[_0x4375[7]](_0x4375[6]),controller[_0x4375[16]]);router[_0x4375[17]](_0x4375[10],auth[_0x4375[5]](),auth[_0x4375[7]](_0x4375[6]),controller[_0x4375[18]]);module[_0x4375[19]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./network_externip.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.destroy); + +module.exports = router; diff --git a/server/api/network_externip/network_externip.controller.js b/server/api/network_externip/network_externip.controller.js index 1d4f5c9..ecde7da 100644 --- a/server/api/network_externip/network_externip.controller.js +++ b/server/api/network_externip/network_externip.controller.js @@ -1 +1,131 @@ -var _0x3d8a=["\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","\x4E\x65\x74\x77\x6F\x72\x6B","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x65\x78\x74\x65\x72\x6E\x69\x70","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x74\x79\x70\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x3d8a[0];var _=require(_0x3d8a[1]);var Util=require(_0x3d8a[2]);var NetworkExternip=require(_0x3d8a[4])[_0x3d8a[3]];function handleError(_0x92c0x5,_0x92c0x6){_0x92c0x6= _0x92c0x6|| 500;return function(_0x92c0x7){_0x92c0x5[_0x3d8a[6]](_0x92c0x6)[_0x3d8a[5]](_0x92c0x7)}}function responseWithResult(_0x92c0x5,_0x92c0x6){_0x92c0x6= _0x92c0x6|| 200;return function(_0x92c0x9){if(_0x92c0x9){_0x92c0x5[_0x3d8a[6]](_0x92c0x6)[_0x3d8a[7]](_0x92c0x9)}}}function responseWithoutResult(_0x92c0x5,_0x92c0x6){_0x92c0x6= _0x92c0x6|| 204;return function(){_0x92c0x5[_0x3d8a[8]](_0x92c0x6)}}function handleEntityNotFound(_0x92c0x5){return function(_0x92c0x9){if(!_0x92c0x9){_0x92c0x5[_0x3d8a[6]](404)[_0x3d8a[9]]();return null};return _0x92c0x9}}function saveUpdates(_0x92c0xd){return function(_0x92c0x9){return _0x92c0x9[_0x3d8a[11]](_0x92c0xd)[_0x3d8a[10]](function(_0x92c0xe){return _0x92c0xe})}}function removeEntity(_0x92c0x5){return function(_0x92c0x9){if(_0x92c0x9){return _0x92c0x9[_0x3d8a[12]]()[_0x3d8a[10]](function(){_0x92c0x5[_0x3d8a[6]](204)[_0x3d8a[9]]()})}}}exports[_0x3d8a[13]]= function(_0x92c0x10,_0x92c0x5){return NetworkExternip[_0x3d8a[19]](_0x3d8a[18])[_0x3d8a[17]](Util[_0x3d8a[16]](_0x92c0x10[_0x3d8a[15]]))[_0x3d8a[10]](responseWithResult(_0x92c0x5))[_0x3d8a[14]](handleError(_0x92c0x5))};exports[_0x3d8a[20]]= function(_0x92c0x10,_0x92c0x5){return NetworkExternip[_0x3d8a[23]](_0x92c0x10[_0x3d8a[22]][_0x3d8a[21]])[_0x3d8a[10]](handleEntityNotFound(_0x92c0x5))[_0x3d8a[10]](responseWithResult(_0x92c0x5))[_0x3d8a[14]](handleError(_0x92c0x5))};exports[_0x3d8a[24]]= function(_0x92c0x10,_0x92c0x5){_0x92c0x10[_0x3d8a[26]][_0x3d8a[25]]= _0x3d8a[18];return NetworkExternip[_0x3d8a[24]](_0x92c0x10[_0x3d8a[26]])[_0x3d8a[10]](responseWithResult(_0x92c0x5,201))[_0x3d8a[14]](handleError(_0x92c0x5))};exports[_0x3d8a[27]]= function(_0x92c0x10,_0x92c0x5){if(_0x92c0x10[_0x3d8a[26]][_0x3d8a[21]]){delete _0x92c0x10[_0x3d8a[26]][_0x3d8a[21]]};return NetworkExternip[_0x3d8a[23]](_0x92c0x10[_0x3d8a[22]][_0x3d8a[21]])[_0x3d8a[10]](handleEntityNotFound(_0x92c0x5))[_0x3d8a[10]](saveUpdates(_0x92c0x10[_0x3d8a[26]]))[_0x3d8a[10]](responseWithResult(_0x92c0x5))[_0x3d8a[14]](handleError(_0x92c0x5))};exports[_0x3d8a[12]]= function(_0x92c0x10,_0x92c0x5){return NetworkExternip[_0x3d8a[23]](_0x92c0x10[_0x3d8a[22]][_0x3d8a[21]])[_0x3d8a[10]](handleEntityNotFound(_0x92c0x5))[_0x3d8a[10]](removeEntity(_0x92c0x5))[_0x3d8a[14]](handleError(_0x92c0x5))};exports[_0x3d8a[28]]= function(_0x92c0x10,_0x92c0x5){return NetworkExternip[_0x3d8a[12]]({where:{id:_0x92c0x10[_0x3d8a[15]][_0x3d8a[29]]},individualHooks:true})[_0x3d8a[10]](responseWithoutResult(_0x92c0x5))[_0x3d8a[14]](handleError(_0x92c0x5))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/network/externips -> index + * POST /api/network/externips -> create + * GET /api/network/externips/:id -> show + * PUT /api/network/externips/:id -> update + * DELETE /api/network/externips/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var NetworkExternip = require('../../models').Network; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 204; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of NetworkExternips +exports.index = function(req, res) { + return NetworkExternip + .scope('externip') + .findAndCountAll(Util.getQuery(req.query)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single NetworkExternip from the DB +exports.show = function(req, res) { + return NetworkExternip + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new NetworkExternip in the DB +exports.create = function(req, res) { + req.body.type = 'externip'; + return NetworkExternip + .create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing NetworkExternip in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return NetworkExternip + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a NetworkExternip from the DB +exports.destroy = function(req, res) { + return NetworkExternip + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +exports.bulkDestroy = function(req, res) { + return NetworkExternip + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(responseWithoutResult(res)) + .catch(handleError(res)); +}; diff --git a/server/api/network_externip/network_externip.events.js b/server/api/network_externip/network_externip.events.js index c09ae59..c5f5cbe 100644 --- a/server/api/network_externip/network_externip.events.js +++ b/server/api/network_externip/network_externip.events.js @@ -1 +1,36 @@ -var _0xdf03=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4E\x65\x74\x77\x6F\x72\x6B","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xdf03[0];const EventEmitter=require(_0xdf03[1]);const Network=require(_0xdf03[3])[_0xdf03[2]];var NetworkEvents= new EventEmitter();NetworkEvents[_0xdf03[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xdf03[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xdf03[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xdf03[6]};for(var e in events){var event=events[e];Network[_0xdf03[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xe6b1x8,_0xe6b1x9,_0xe6b1xa){NetworkEvents[_0xdf03[10]](event+ _0xdf03[8]+ _0xe6b1x8[_0xdf03[9]],_0xe6b1x8);NetworkEvents[_0xdf03[10]](event,_0xe6b1x8);_0xe6b1xa(null)}}module[_0xdf03[11]]= NetworkEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Network = require('../../models').Network; + +var NetworkEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +NetworkEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Network.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + NetworkEvents.emit(event + ':' + doc._id, doc); + NetworkEvents.emit(event, doc); + done(null); + } +} + +module.exports = NetworkEvents; diff --git a/server/api/network_externip/network_externip.socket.js b/server/api/network_externip/network_externip.socket.js index b19c82c..9903ad0 100644 --- a/server/api/network_externip/network_externip.socket.js +++ b/server/api/network_externip/network_externip.socket.js @@ -1 +1,28 @@ -var _0xbf65=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x5F\x65\x78\x74\x65\x72\x6E\x69\x70\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6E\x65\x74\x77\x6F\x72\x6B\x5F\x65\x78\x74\x65\x72\x6E\x69\x70\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xbf65[0];const NetworkExternipEvents=require(_0xbf65[1]);var events=[_0xbf65[2],_0xbf65[3]];exports[_0xbf65[4]]= function(_0x42dax3){for(var _0x42dax4=0,_0x42dax5=events[_0xbf65[5]];_0x42dax4< _0x42dax5;_0x42dax4++){var _0x42dax6=events[_0x42dax4];var _0x42dax7=createListener(_0xbf65[6]+ _0x42dax6,_0x42dax3);NetworkExternipEvents[_0xbf65[7]](_0x42dax6,_0x42dax7);_0x42dax3[_0xbf65[7]](_0xbf65[8],removeListener(_0x42dax6,_0x42dax7))}};function createListener(_0x42dax6,_0x42dax3){return function(_0x42dax9){_0x42dax3[_0xbf65[9]](_0x42dax6,_0x42dax9)}}function removeListener(_0x42dax6,_0x42dax7){return function(){NetworkExternipEvents[_0xbf65[10]](_0x42dax6,_0x42dax7)}} \ No newline at end of file +'use strict'; + +const NetworkExternipEvents = require('./network_externip.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('network_externip:' + event, socket); + + NetworkExternipEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + NetworkExternipEvents.removeListener(event, listener); + }; +} diff --git a/server/api/network_localnet/index.js b/server/api/network_localnet/index.js index f9d47c6..d372448 100644 --- a/server/api/network_localnet/index.js +++ b/server/api/network_localnet/index.js @@ -1 +1,16 @@ -var _0x62bc=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x5F\x6C\x6F\x63\x61\x6C\x6E\x65\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x52\x6F\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x62bc[0];var express=require(_0x62bc[1]);var auth=require(_0x62bc[2]);var controller=require(_0x62bc[3]);var router=express.Router();router[_0x62bc[9]](_0x62bc[4],auth[_0x62bc[5]](),auth[_0x62bc[7]](_0x62bc[6]),controller[_0x62bc[8]]);router[_0x62bc[9]](_0x62bc[10],auth[_0x62bc[5]](),auth[_0x62bc[7]](_0x62bc[6]),controller[_0x62bc[11]]);router[_0x62bc[13]](_0x62bc[4],auth[_0x62bc[5]](),auth[_0x62bc[7]](_0x62bc[6]),controller[_0x62bc[12]]);router[_0x62bc[15]](_0x62bc[10],auth[_0x62bc[5]](),auth[_0x62bc[7]](_0x62bc[6]),controller[_0x62bc[14]]);router[_0x62bc[17]](_0x62bc[4],auth[_0x62bc[5]](),auth[_0x62bc[7]](_0x62bc[6]),controller[_0x62bc[16]]);router[_0x62bc[17]](_0x62bc[10],auth[_0x62bc[5]](),auth[_0x62bc[7]](_0x62bc[6]),controller[_0x62bc[18]]);module[_0x62bc[19]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./network_localnet.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.destroy); + +module.exports = router; diff --git a/server/api/network_localnet/network_localnet.controller.js b/server/api/network_localnet/network_localnet.controller.js index 232f2d7..85e3150 100644 --- a/server/api/network_localnet/network_localnet.controller.js +++ b/server/api/network_localnet/network_localnet.controller.js @@ -1 +1,128 @@ -var _0x16b3=["\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","\x4E\x65\x74\x77\x6F\x72\x6B","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x6C\x6F\x63\x61\x6C\x6E\x65\x74","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x74\x79\x70\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x16b3[0];var _=require(_0x16b3[1]);var Util=require(_0x16b3[2]);var NetworkLocalnet=require(_0x16b3[4])[_0x16b3[3]];function handleError(_0xa74ex5,_0xa74ex6){_0xa74ex6= _0xa74ex6|| 500;return function(_0xa74ex7){_0xa74ex5[_0x16b3[6]](_0xa74ex6)[_0x16b3[5]](_0xa74ex7)}}function responseWithResult(_0xa74ex5,_0xa74ex6){_0xa74ex6= _0xa74ex6|| 200;return function(_0xa74ex9){if(_0xa74ex9){_0xa74ex5[_0x16b3[6]](_0xa74ex6)[_0x16b3[7]](_0xa74ex9)}}}function responseWithoutResult(_0xa74ex5,_0xa74ex6){_0xa74ex6= _0xa74ex6|| 204;return function(){_0xa74ex5[_0x16b3[8]](_0xa74ex6)}}function handleEntityNotFound(_0xa74ex5){return function(_0xa74ex9){if(!_0xa74ex9){_0xa74ex5[_0x16b3[6]](404)[_0x16b3[9]]();return null};return _0xa74ex9}}function saveUpdates(_0xa74exd){return function(_0xa74ex9){return _0xa74ex9[_0x16b3[11]](_0xa74exd)[_0x16b3[10]](function(_0xa74exe){return _0xa74exe})}}function removeEntity(_0xa74ex5){return function(_0xa74ex9){if(_0xa74ex9){return _0xa74ex9[_0x16b3[12]]()[_0x16b3[10]](function(){_0xa74ex5[_0x16b3[6]](204)[_0x16b3[9]]()})}}}exports[_0x16b3[13]]= function(_0xa74ex10,_0xa74ex5){return NetworkLocalnet[_0x16b3[19]](_0x16b3[18])[_0x16b3[17]](Util[_0x16b3[16]](_0xa74ex10[_0x16b3[15]]))[_0x16b3[10]](responseWithResult(_0xa74ex5))[_0x16b3[14]](handleError(_0xa74ex5))};exports[_0x16b3[20]]= function(_0xa74ex10,_0xa74ex5){return NetworkLocalnet[_0x16b3[23]](_0xa74ex10[_0x16b3[22]][_0x16b3[21]])[_0x16b3[10]](handleEntityNotFound(_0xa74ex5))[_0x16b3[10]](responseWithResult(_0xa74ex5))[_0x16b3[14]](handleError(_0xa74ex5))};exports[_0x16b3[24]]= function(_0xa74ex10,_0xa74ex5){_0xa74ex10[_0x16b3[26]][_0x16b3[25]]= _0x16b3[18];return NetworkLocalnet[_0x16b3[24]](_0xa74ex10[_0x16b3[26]])[_0x16b3[10]](responseWithResult(_0xa74ex5,201))[_0x16b3[14]](handleError(_0xa74ex5))};exports[_0x16b3[27]]= function(_0xa74ex10,_0xa74ex5){if(_0xa74ex10[_0x16b3[26]][_0x16b3[21]]){delete _0xa74ex10[_0x16b3[26]][_0x16b3[21]]};return NetworkLocalnet[_0x16b3[23]](_0xa74ex10[_0x16b3[22]][_0x16b3[21]])[_0x16b3[10]](handleEntityNotFound(_0xa74ex5))[_0x16b3[10]](saveUpdates(_0xa74ex10[_0x16b3[26]]))[_0x16b3[10]](responseWithResult(_0xa74ex5))[_0x16b3[14]](handleError(_0xa74ex5))};exports[_0x16b3[12]]= function(_0xa74ex10,_0xa74ex5){return NetworkLocalnet[_0x16b3[23]](_0xa74ex10[_0x16b3[22]][_0x16b3[21]])[_0x16b3[10]](handleEntityNotFound(_0xa74ex5))[_0x16b3[10]](removeEntity(_0xa74ex5))[_0x16b3[14]](handleError(_0xa74ex5))};exports[_0x16b3[28]]= function(_0xa74ex10,_0xa74ex5){return NetworkLocalnet[_0x16b3[12]]({where:{id:_0xa74ex10[_0x16b3[15]][_0x16b3[29]]},individualHooks:true})[_0x16b3[10]](responseWithoutResult(_0xa74ex5))[_0x16b3[14]](handleError(_0xa74ex5))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/network/localnets -> index + * POST /api/network/localnets -> create + * GET /api/network/localnets/:id -> show + * PUT /api/network/localnets/:id -> update + * DELETE /api/network/localnets/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var NetworkLocalnet = require('../../models').Network; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 204; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of NetworkLocalnets +exports.index = function(req, res) { + return NetworkLocalnet + .scope('localnet') + .findAndCountAll(Util.getQuery(req.query)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single NetworkLocalnet from the DB +exports.show = function(req, res) { + return NetworkLocalnet.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new NetworkLocalnet in the DB +exports.create = function(req, res) { + req.body.type = 'localnet'; + return NetworkLocalnet.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing NetworkLocalnet in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return NetworkLocalnet.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a NetworkLocalnet from the DB +exports.destroy = function(req, res) { + return NetworkLocalnet + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +exports.bulkDestroy = function(req, res) { + return NetworkLocalnet + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(responseWithoutResult(res)) + .catch(handleError(res)); +}; diff --git a/server/api/network_localnet/network_localnet.events.js b/server/api/network_localnet/network_localnet.events.js index 698ae19..c5f5cbe 100644 --- a/server/api/network_localnet/network_localnet.events.js +++ b/server/api/network_localnet/network_localnet.events.js @@ -1 +1,36 @@ -var _0x4b3c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4E\x65\x74\x77\x6F\x72\x6B","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x4b3c[0];const EventEmitter=require(_0x4b3c[1]);const Network=require(_0x4b3c[3])[_0x4b3c[2]];var NetworkEvents= new EventEmitter();NetworkEvents[_0x4b3c[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x4b3c[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x4b3c[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x4b3c[6]};for(var e in events){var event=events[e];Network[_0x4b3c[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x3aacx8,_0x3aacx9,_0x3aacxa){NetworkEvents[_0x4b3c[10]](event+ _0x4b3c[8]+ _0x3aacx8[_0x4b3c[9]],_0x3aacx8);NetworkEvents[_0x4b3c[10]](event,_0x3aacx8);_0x3aacxa(null)}}module[_0x4b3c[11]]= NetworkEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Network = require('../../models').Network; + +var NetworkEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +NetworkEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Network.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + NetworkEvents.emit(event + ':' + doc._id, doc); + NetworkEvents.emit(event, doc); + done(null); + } +} + +module.exports = NetworkEvents; diff --git a/server/api/network_localnet/network_localnet.socket.js b/server/api/network_localnet/network_localnet.socket.js index 063d79f..ccc151b 100644 --- a/server/api/network_localnet/network_localnet.socket.js +++ b/server/api/network_localnet/network_localnet.socket.js @@ -1 +1,28 @@ -var _0xe58d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x5F\x6C\x6F\x63\x61\x6C\x6E\x65\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6E\x65\x74\x77\x6F\x72\x6B\x5F\x6C\x6F\x63\x61\x6C\x6E\x65\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xe58d[0];const NetworkLocalnetEvents=require(_0xe58d[1]);var events=[_0xe58d[2],_0xe58d[3]];exports[_0xe58d[4]]= function(_0xa8c6x3){for(var _0xa8c6x4=0,_0xa8c6x5=events[_0xe58d[5]];_0xa8c6x4< _0xa8c6x5;_0xa8c6x4++){var _0xa8c6x6=events[_0xa8c6x4];var _0xa8c6x7=createListener(_0xe58d[6]+ _0xa8c6x6,_0xa8c6x3);NetworkLocalnetEvents[_0xe58d[7]](_0xa8c6x6,_0xa8c6x7);_0xa8c6x3[_0xe58d[7]](_0xe58d[8],removeListener(_0xa8c6x6,_0xa8c6x7))}};function createListener(_0xa8c6x6,_0xa8c6x3){return function(_0xa8c6x9){_0xa8c6x3[_0xe58d[9]](_0xa8c6x6,_0xa8c6x9)}}function removeListener(_0xa8c6x6,_0xa8c6x7){return function(){NetworkLocalnetEvents[_0xe58d[10]](_0xa8c6x6,_0xa8c6x7)}} \ No newline at end of file +'use strict'; + +const NetworkLocalnetEvents = require('./network_localnet.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('network_localnet:' + event, socket); + + NetworkLocalnetEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + NetworkLocalnetEvents.removeListener(event, listener); + }; +} diff --git a/server/api/openchannel_account/index.js b/server/api/openchannel_account/index.js index e57f8fa..f23c23c 100644 --- a/server/api/openchannel_account/index.js +++ b/server/api/openchannel_account/index.js @@ -1 +1,30 @@ -var _0x736a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x72\x6F\x6F\x6D\x73","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D\x73","\x2F\x3A\x69\x64\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x67\x65\x74\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x73\x65\x6E\x64","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65","\x2F\x3A\x69\x64\x2F\x72\x65\x63\x65\x69\x76\x65","\x72\x65\x63\x65\x69\x76\x65\x4D\x65\x73\x73\x61\x67\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x61\x70\x70\x49\x64","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73\x2F\x3A\x64\x69\x73\x70\x49\x64","\x75\x70\x64\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];_0x736a[0];var express=require(_0x736a[1]);var auth=require(_0x736a[2]);var controller=require(_0x736a[3]);var license=require(_0x736a[4]);var router=express.Router();router[_0x736a[13]](_0x736a[5],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9],_0x736a[10]]),controller[_0x736a[12]]);router[_0x736a[13]](_0x736a[14],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9]]),controller[_0x736a[15]]);router[_0x736a[13]](_0x736a[16],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9]]),controller[_0x736a[17]]);router[_0x736a[13]](_0x736a[18],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9],_0x736a[10]]),controller[_0x736a[19]]);router[_0x736a[13]](_0x736a[20],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9],_0x736a[10]]),controller[_0x736a[21]]);router[_0x736a[23]](_0x736a[5],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9]]),controller[_0x736a[22]]);router[_0x736a[23]](_0x736a[16],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9]]),controller[_0x736a[24]]);router[_0x736a[23]](_0x736a[20],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9]]),controller[_0x736a[25]]);router[_0x736a[23]](_0x736a[26],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9],_0x736a[10]]),controller[_0x736a[27]]);router[_0x736a[23]](_0x736a[28],license[_0x736a[6]](),controller[_0x736a[29]]);router[_0x736a[31]](_0x736a[14],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9]]),controller[_0x736a[30]]);router[_0x736a[31]](_0x736a[16],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9]]),controller[_0x736a[32]]);router[_0x736a[31]](_0x736a[33],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9]]),controller[_0x736a[34]]);router[_0x736a[31]](_0x736a[35],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9]]),controller[_0x736a[36]]);router[_0x736a[38]](_0x736a[14],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9]]),auth[_0x736a[11]]([20],[_0x736a[9]]),controller[_0x736a[37]]);router[_0x736a[38]](_0x736a[16],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9]]),controller[_0x736a[39]]);router[_0x736a[38]](_0x736a[33],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9]]),controller[_0x736a[40]]);router[_0x736a[38]](_0x736a[35],license[_0x736a[6]](),license[_0x736a[7]](),auth[_0x736a[8]](),auth[_0x736a[11]]([20],[_0x736a[9]]),controller[_0x736a[41]]);module[_0x736a[42]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./openchannel_account.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + + +router.get('/', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin', 'agent']), controller.index); +router.get('/:id', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.show); +router.get('/:id/applications', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.showApplications); +router.get('/:id/rooms', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin', 'agent']), controller.getOpenchannelRooms); +router.get('/:id/dispositions', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin', 'agent']), controller.getDispositions); +router.post('/', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.create); +router.post('/:id/applications', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.createApplication); +router.post('/:id/dispositions', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.createDisposition); +router.post('/:id/send', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin', 'agent']), controller.sendMessage); +router.post('/:id/receive', license.isValidDate(), controller.receiveMessage); +router.put('/:id', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.update); +router.put('/:id/applications', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.updateApplications); +router.put('/:id/applications/:appId', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.updateApplication); +router.put('/:id/dispositions/:dispId', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.updateDisposition); +router.delete('/:id', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), auth.hasModule([20], ['admin']), controller.destroy); +router.delete('/:id/applications', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.bulkDestroyApplications); +router.delete('/:id/applications/:appId', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.destroyApplication); +router.delete('/:id/dispositions/:dispId', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.destroyDisposition); + +module.exports = router; diff --git a/server/api/openchannel_account/openchannel_account.controller.js b/server/api/openchannel_account/openchannel_account.controller.js index 78795e4..cb31ac8 100644 --- a/server/api/openchannel_account/openchannel_account.controller.js +++ b/server/api/openchannel_account/openchannel_account.controller.js @@ -1 +1,552 @@ -var _0xc4d9=["\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\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x55\x73\x65\x72","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x43\x6F\x6E\x74\x61\x63\x74","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x62\x6C\x75\x65\x62\x69\x72\x64","\x6D\x6F\x6D\x65\x6E\x74","\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\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x6C\x65\x6E\x67\x74\x68","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x6E\x61\x6D\x65","\x6F\x6E\x6C\x69\x6E\x65","\x70\x72\x69\x6F\x72\x69\x74\x79\x20\x41\x53\x43","\x6D\x65\x72\x67\x65","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x64\x65\x66\x61\x75\x6C\x74","\x73\x63\x6F\x70\x65","\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","\x63\x72\x65\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65","\x55\x73\x65\x72\x49\x64","\x75\x73\x65\x72","\x72\x65\x63\x65\x69\x76\x65\x4D\x65\x73\x73\x61\x67\x65","\x6C\x6F\x67","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D\x49\x64","\x52\x45\x43\x45\x49\x56\x45\x44","\x43\x4C\x4F\x53\x45\x44","\x66\x72\x6F\x6D","\x4E\x45\x57","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x4F\x50\x45\x4E","\x73\x79\x73\x74\x65\x6D","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x49\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x41\x63\x63\x6F\x75\x6E\x74\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x52\x65\x63\x65\x69\x76\x65\x64\x20\x6D\x65\x73\x73\x61\x67\x65\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x63\x6F\x6E\x74\x61\x69\x6E\x20\x73\x65\x6E\x64\x65\x72\x20\x49\x64","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x44\x45\x53\x43","\x66\x69\x6E\x64\x41\x6C\x6C","\x75\x70\x64\x61\x74\x65","\x20\x20\x20\x65\x72\x72","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x64\x69\x73\x70\x49\x64","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x70\x72\x69\x6F\x72\x69\x74\x79","\x66\x6F\x72\x45\x61\x63\x68","\x72\x65\x71\x20\x61\x70\x70","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x61\x70\x70\x49\x64","\x64\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x69\x64\x73","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D\x73","\x63\x6F\x6E\x74\x61\x63\x74","\x74\x61\x67\x73","\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x6C\x61\x73\x74\x45\x76\x65\x6E\x74","\x69\x73\x41\x72\x72\x61\x79","\x25","\x70\x75\x73\x68","\x24\x61\x6E\x64","\x77\x68\x65\x72\x65","\x69\x6E\x63\x6C\x75\x64\x65","\x65\x72\x72\x6F\x72","\x61\x67\x65\x6E\x74","\x66\x69\x6E\x64","\x6D\x61\x70","\x71\x75\x65\x75\x65","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x49\x64","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x72\x6F\x6C\x65","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x65\x72\x72","\x6D\x61\x78"];_0xc4d9[0];var _=require(_0xc4d9[1]);var Util=require(_0xc4d9[2]);var OpenchannelAccount=require(_0xc4d9[4])[_0xc4d9[3]];var sequelize=require(_0xc4d9[4])[_0xc4d9[5]];var User=require(_0xc4d9[4])[_0xc4d9[6]];var OpenchannelQueue=require(_0xc4d9[4])[_0xc4d9[7]];var OpenchannelApplication=require(_0xc4d9[4])[_0xc4d9[8]];var OpenchannelMessage=require(_0xc4d9[4])[_0xc4d9[9]];var OpenchannelRoom=require(_0xc4d9[4])[_0xc4d9[10]];var OpenchannelDisposition=require(_0xc4d9[4])[_0xc4d9[11]];var OpenchannelAccount=require(_0xc4d9[4])[_0xc4d9[3]];var Contact=require(_0xc4d9[4])[_0xc4d9[12]];var Interval=require(_0xc4d9[4])[_0xc4d9[13]];var Promise=require(_0xc4d9[14]);var moment=require(_0xc4d9[15]);function handleError(_0x8488x10,_0x8488x11){return _0x8488x10[_0xc4d9[17]](500)[_0xc4d9[16]](_0x8488x11)}exports[_0xc4d9[18]]= function(_0x8488x12,_0x8488x10){return OpenchannelAccount[_0xc4d9[23]](Util[_0xc4d9[22]](_0x8488x12[_0xc4d9[21]]))[_0xc4d9[20]](function(_0x8488x13){_0x8488x10[_0xc4d9[17]](200)[_0xc4d9[16]](_0x8488x13)})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[24]]= function(_0x8488x12,_0x8488x10){return OpenchannelAccount[_0xc4d9[28]](_0x8488x12[_0xc4d9[27]][_0xc4d9[26]])[_0xc4d9[20]](function(_0x8488x14){if(!_0x8488x14){return _0x8488x10[_0xc4d9[25]](404)};return _0x8488x10[_0xc4d9[16]](_0x8488x14)})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[29]]= function(_0x8488x12,_0x8488x10,_0x8488x15){return OpenchannelAccount[_0xc4d9[28]](_0x8488x12[_0xc4d9[27]][_0xc4d9[26]])[_0xc4d9[20]](function(_0x8488x14){if(!_0x8488x14){return _0x8488x10[_0xc4d9[25]](404)};return _0x8488x14[_0xc4d9[31]]()})[_0xc4d9[20]](function(_0x8488x16){return _0x8488x10[_0xc4d9[17]](200)[_0xc4d9[16]]({rows:_0x8488x16,count:_0x8488x16[_0xc4d9[30]]})})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[32]]= function(_0x8488x12,_0x8488x10,_0x8488x15){return OpenchannelAccount[_0xc4d9[39]](_0xc4d9[38])[_0xc4d9[28]](_0x8488x12[_0xc4d9[27]][_0xc4d9[26]])[_0xc4d9[20]](function(_0x8488x14){if(!_0x8488x14){return _0x8488x10[_0xc4d9[25]](404)};return _0x8488x14[_0xc4d9[37]](_[_0xc4d9[36]](Util[_0xc4d9[22]](_0x8488x12[_0xc4d9[21]]),{include:[{model:OpenchannelQueue,attributes:[_0xc4d9[26],_0xc4d9[33]]},{model:User,attributes:[_0xc4d9[26],_0xc4d9[33],_0xc4d9[34]]},{model:Interval,attributes:[_0xc4d9[26],_0xc4d9[33]]}],order:_0xc4d9[35]}))})[_0xc4d9[20]](function(_0x8488x17){return _0x8488x10[_0xc4d9[16]]({count:_0x8488x17[_0xc4d9[30]],rows:_0x8488x17})})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[40]]= function(_0x8488x12,_0x8488x10){return OpenchannelAccount[_0xc4d9[40]](_0x8488x12[_0xc4d9[43]])[_0xc4d9[20]](function(_0x8488x14){return _0x8488x10[_0xc4d9[17]](201)[_0xc4d9[16]](_0x8488x14)})[_0xc4d9[19]](sequelize.UniqueConstraintError,function(_0x8488x11){return Util[_0xc4d9[42]][_0xc4d9[41]](_0x8488x10,_0x8488x11)})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[44]]= function(_0x8488x12,_0x8488x10,_0x8488x15){_0x8488x12[_0xc4d9[43]][_0xc4d9[45]]= _0x8488x12[_0xc4d9[27]][_0xc4d9[26]];return OpenchannelDisposition[_0xc4d9[40]](_0x8488x12[_0xc4d9[43]])[_0xc4d9[20]](function(_0x8488x18){return _0x8488x10[_0xc4d9[17]](201)[_0xc4d9[16]](_0x8488x18)})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[46]]= function(_0x8488x12,_0x8488x10,_0x8488x15){_0x8488x12[_0xc4d9[43]][_0xc4d9[45]]= _0x8488x12[_0xc4d9[27]][_0xc4d9[26]];_0x8488x12[_0xc4d9[43]][_0xc4d9[47]]= _0x8488x12[_0xc4d9[48]][_0xc4d9[26]];return OpenchannelMessage[_0xc4d9[40]](_0x8488x12[_0xc4d9[43]],{user:_0x8488x12[_0xc4d9[48]]})[_0xc4d9[20]](function(_0x8488x19){return _0x8488x10[_0xc4d9[17]](201)[_0xc4d9[16]](_0x8488x19)})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[49]]= function(_0x8488x12,_0x8488x10,_0x8488x15){if(_0x8488x12[_0xc4d9[43]][_0xc4d9[26]]){delete _0x8488x12[_0xc4d9[43]][_0xc4d9[26]]};var _0x8488x1a=_0x8488x12[_0xc4d9[43]];var _0x8488x1b;return OpenchannelAccount[_0xc4d9[28]](_0x8488x12[_0xc4d9[27]][_0xc4d9[26]])[_0xc4d9[20]](function(_0x8488x14){if(!_0x8488x14){throw new Error(_0xc4d9[62])};_0x8488x1b= _0x8488x14;console[_0xc4d9[50]](_0x8488x1a);if(!_0x8488x1a[_0xc4d9[54]]){throw new Error(_0xc4d9[63])};return OpenchannelRoom[_0xc4d9[66]]({limit:1,where:{contact:_0x8488x1a[_0xc4d9[54]],OpenchannelAccountId:_0x8488x1b[_0xc4d9[26]]},order:[[_0xc4d9[64],_0xc4d9[65]]]})})[_0xc4d9[20]](function(_0x8488x1e){var _0x8488x1d=_0x8488x1e[0];if(!_0x8488x1d|| _0x8488x1d[_0xc4d9[17]]== _0xc4d9[53]){var _0x8488x1f=_0x8488x1d?_0x8488x1d[_0xc4d9[26]]:null;return OpenchannelRoom[_0xc4d9[40]]({contact:_0x8488x1a[_0xc4d9[54]],OpenchannelAccountId:_0x8488x1b[_0xc4d9[26]],status:_0xc4d9[55],ParentId:_0x8488x1f,lastEvent:_0xc4d9[52],lastEventAt:moment()[_0xc4d9[57]](_0xc4d9[56]),openchannelIn:1})}else {return _0x8488x1d[_0xc4d9[61]]({lastEvent:_0xc4d9[52],lastEventAt:moment()[_0xc4d9[57]](_0xc4d9[56]),status:_0xc4d9[58],openReason:_0xc4d9[59],openchannelIn:++_0x8488x1d[_0xc4d9[60]]})}})[_0xc4d9[20]](function(_0x8488x1d){_0x8488x1a[_0xc4d9[45]]= _0x8488x1b[_0xc4d9[26]];_0x8488x1a[_0xc4d9[51]]= _0x8488x1d[_0xc4d9[26]];_0x8488x1a[_0xc4d9[17]]= _0xc4d9[52];return OpenchannelMessage[_0xc4d9[40]](_0x8488x1a)})[_0xc4d9[20]](function(_0x8488x1c){return _0x8488x10[_0xc4d9[17]](201)[_0xc4d9[16]](_0x8488x1c)})[_0xc4d9[19]](function(_0x8488x11){console[_0xc4d9[50]](_0x8488x11);return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[67]]= function(_0x8488x12,_0x8488x10){if(_0x8488x12[_0xc4d9[43]][_0xc4d9[26]]){delete _0x8488x12[_0xc4d9[43]][_0xc4d9[26]]};return OpenchannelAccount[_0xc4d9[28]](_0x8488x12[_0xc4d9[27]][_0xc4d9[26]])[_0xc4d9[20]](function(_0x8488x14){if(!_0x8488x14){return _0x8488x10[_0xc4d9[25]](404)};var _0x8488x20=_[_0xc4d9[36]](_0x8488x14,_0x8488x12[_0xc4d9[43]]);return _0x8488x20[_0xc4d9[69]]()})[_0xc4d9[20]](function(_0x8488x14){return _0x8488x10[_0xc4d9[17]](200)[_0xc4d9[16]](_0x8488x14)})[_0xc4d9[19]](sequelize.UniqueConstraintError,function(_0x8488x11){return Util[_0xc4d9[42]][_0xc4d9[41]](_0x8488x10,_0x8488x11)})[_0xc4d9[19]](function(_0x8488x11){console[_0xc4d9[50]](_0xc4d9[68],_0x8488x11);return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[70]]= function(_0x8488x12,_0x8488x10){if(_0x8488x12[_0xc4d9[43]][_0xc4d9[26]]){delete _0x8488x12[_0xc4d9[43]][_0xc4d9[26]]};return OpenchannelDisposition[_0xc4d9[28]](_0x8488x12[_0xc4d9[27]][_0xc4d9[71]])[_0xc4d9[20]](function(_0x8488x21){if(!_0x8488x21){return _0x8488x10[_0xc4d9[25]](404)};var _0x8488x20=_[_0xc4d9[36]](_0x8488x21,_0x8488x12[_0xc4d9[43]]);return _0x8488x20[_0xc4d9[69]]()})[_0xc4d9[20]](function(_0x8488x21){return _0x8488x10[_0xc4d9[17]](200)[_0xc4d9[16]](_0x8488x21)})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[72]]= function(_0x8488x12,_0x8488x10){var _0x8488x22=0;var _0x8488x23=_0x8488x12[_0xc4d9[43]];_0x8488x23[_0xc4d9[75]](function(_0x8488x24){delete _0x8488x24[_0xc4d9[26]];delete _0x8488x24[_0xc4d9[64]];delete _0x8488x24[_0xc4d9[73]];_0x8488x24[_0xc4d9[74]]= ++_0x8488x22});console[_0xc4d9[50]](_0xc4d9[76],_0x8488x12[_0xc4d9[43]]);return sequelize[_0xc4d9[79]](function(_0x8488x26){return OpenchannelApplication[_0xc4d9[78]]({where:{OpenchannelAccountId:_0x8488x12[_0xc4d9[27]][_0xc4d9[26]]},individualHooks:true,transaction:_0x8488x26})[_0xc4d9[20]](function(_0x8488x27){return OpenchannelApplication[_0xc4d9[77]](_0x8488x23,{individualHooks:true,transaction:_0x8488x26})})})[_0xc4d9[20]](function(_0x8488x25){return _0x8488x10[_0xc4d9[17]](200)[_0xc4d9[16]]({count:_0x8488x25[_0xc4d9[30]],rows:_0x8488x25})})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[80]]= function(_0x8488x12,_0x8488x10){if(_0x8488x12[_0xc4d9[43]][_0xc4d9[26]]){delete _0x8488x12[_0xc4d9[43]][_0xc4d9[26]]};return OpenchannelApplication[_0xc4d9[28]](_0x8488x12[_0xc4d9[27]][_0xc4d9[81]])[_0xc4d9[20]](function(_0x8488x27){if(!_0x8488x27){return _0x8488x10[_0xc4d9[25]](404)};var _0x8488x20=_[_0xc4d9[36]](_0x8488x27,_0x8488x12[_0xc4d9[43]]);return _0x8488x20[_0xc4d9[69]]()})[_0xc4d9[20]](function(_0x8488x27){return _0x8488x10[_0xc4d9[17]](200)[_0xc4d9[16]](_0x8488x27)})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[78]]= function(_0x8488x12,_0x8488x10){return OpenchannelAccount[_0xc4d9[28]](_0x8488x12[_0xc4d9[27]][_0xc4d9[26]])[_0xc4d9[20]](function(_0x8488x14){if(!_0x8488x14){return _0x8488x10[_0xc4d9[25]](404)};return _0x8488x14[_0xc4d9[78]]()})[_0xc4d9[20]](function(){return _0x8488x10[_0xc4d9[25]](204)})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[82]]= function(_0x8488x12,_0x8488x10,_0x8488x15){return OpenchannelApplication[_0xc4d9[28]](_0x8488x12[_0xc4d9[27]][_0xc4d9[81]])[_0xc4d9[20]](function(_0x8488x27){if(!_0x8488x27){return _0x8488x10[_0xc4d9[25]](404)};return _0x8488x27[_0xc4d9[78]]()})[_0xc4d9[20]](function(){return _0x8488x10[_0xc4d9[25]](204)})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[83]]= function(_0x8488x12,_0x8488x10,_0x8488x15){return OpenchannelDisposition[_0xc4d9[28]](_0x8488x12[_0xc4d9[27]][_0xc4d9[71]])[_0xc4d9[20]](function(_0x8488x18){if(!_0x8488x18){return _0x8488x10[_0xc4d9[25]](404)};return _0x8488x18[_0xc4d9[78]]()})[_0xc4d9[20]](function(){return _0x8488x10[_0xc4d9[25]](204)})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[84]]= function(_0x8488x12,_0x8488x10){return OpenchannelApplication[_0xc4d9[78]]({where:{id:_0x8488x12[_0xc4d9[21]][_0xc4d9[85]]},individualHooks:true})[_0xc4d9[20]](function(){return _0x8488x10[_0xc4d9[25]](204)})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})};exports[_0xc4d9[86]]= function(_0x8488x12,_0x8488x10,_0x8488x15){var _0x8488x28={where:{OpenchannelAccountId:_0x8488x12[_0xc4d9[27]][_0xc4d9[26]],$and:[]},attributes:[_0xc4d9[26],_0xc4d9[87],_0xc4d9[73],_0xc4d9[88],_0xc4d9[89],_0xc4d9[90]],include:[]};if(_0x8488x12[_0xc4d9[21]]){if(_0x8488x12[_0xc4d9[21]][_0xc4d9[88]]){if(_[_0xc4d9[91]](_0x8488x12[_0xc4d9[21]][_0xc4d9[88]])){for(var _0x8488x29=0;_0x8488x29< _0x8488x12[_0xc4d9[21]][_0xc4d9[88]][_0xc4d9[30]];_0x8488x29++){_0x8488x28[_0xc4d9[95]][_0xc4d9[94]][_0xc4d9[93]]({tags:{$like:_0xc4d9[92]+ _0x8488x12[_0xc4d9[21]][_0xc4d9[88]][_0x8488x29]+ _0xc4d9[92]}})}}else {_0x8488x28[_0xc4d9[95]][_0xc4d9[94]][_0xc4d9[93]]({tags:{$like:_0xc4d9[92]+ _0x8488x12[_0xc4d9[21]][_0xc4d9[88]]+ _0xc4d9[92]}})};delete _0x8488x12[_0xc4d9[21]][_0xc4d9[88]]};_[_0xc4d9[36]](_0x8488x28[_0xc4d9[95]],_0x8488x12[_0xc4d9[21]])};switch(_0x8488x12[_0xc4d9[48]][_0xc4d9[105]]){case _0xc4d9[98]:_0x8488x28[_0xc4d9[96]][_0xc4d9[93]]({model:User,attributes:[_0xc4d9[26]]});var _0x8488x2a;var _0x8488x2b;var _0x8488x2c;return User[_0xc4d9[28]](_0x8488x12[_0xc4d9[48]][_0xc4d9[26]])[_0xc4d9[20]](function(_0x8488x2f){if(_0x8488x2f){return _0x8488x2f[_0xc4d9[104]]()}else {return []}})[_0xc4d9[20]](function(_0x8488x2e){_0x8488x2b= _[_0xc4d9[100]](_0x8488x2e,_0xc4d9[26]);return OpenchannelAccount[_0xc4d9[28]](_0x8488x12[_0xc4d9[27]][_0xc4d9[26]])})[_0xc4d9[20]](function(_0x8488x13){return _0x8488x13[_0xc4d9[37]]({where:{$or:[{app:_0xc4d9[101]},{app:_0xc4d9[98]}]}})})[_0xc4d9[20]](function(_0x8488x23){_0x8488x2a= _[_0xc4d9[100]](_[_0xc4d9[99]](_0x8488x23,{"\x61\x70\x70":_0xc4d9[98]}),_0xc4d9[47]);_0x8488x2c= _[_0xc4d9[100]](_[_0xc4d9[99]](_0x8488x23,{"\x61\x70\x70":_0xc4d9[101]}),_0xc4d9[102]);if(_[_0xc4d9[103]](_0x8488x2b,_0x8488x2c)[_0xc4d9[30]]|| _[_0xc4d9[103]](_0x8488x2a,[_0x8488x12[_0xc4d9[48]][_0xc4d9[26]]])[_0xc4d9[30]]){return OpenchannelRoom[_0xc4d9[66]](_0x8488x28)[_0xc4d9[20]](function(_0x8488x2d){return _0x8488x10[_0xc4d9[17]](200)[_0xc4d9[16]](_0x8488x2d)})[_0xc4d9[19]](function(_0x8488x11){console[_0xc4d9[97]](_0x8488x11);return handleError(_0x8488x10,_0x8488x11)})}else {return _0x8488x10[_0xc4d9[17]](200)[_0xc4d9[16]]([])}})[_0xc4d9[19]](function(_0x8488x11){console[_0xc4d9[97]](_0x8488x11)});default:return OpenchannelRoom[_0xc4d9[66]](_0x8488x28)[_0xc4d9[20]](function(_0x8488x2d){return _0x8488x10[_0xc4d9[17]](200)[_0xc4d9[16]](_0x8488x2d)})[_0xc4d9[19]](function(_0x8488x11){return handleError(_0x8488x10,_0x8488x11)})}};exports[_0xc4d9[106]]= function(_0x8488x12,_0x8488x10,_0x8488x15){return OpenchannelApplication[_0xc4d9[108]](_0xc4d9[74],{where:{OpenchannelAccountId:_0x8488x12[_0xc4d9[27]][_0xc4d9[26]]}})[_0xc4d9[20]](function(_0x8488x31){_0x8488x12[_0xc4d9[43]][_0xc4d9[74]]= _0x8488x31?++_0x8488x31:1;_0x8488x12[_0xc4d9[43]][_0xc4d9[45]]= _0x8488x12[_0xc4d9[27]][_0xc4d9[26]];return OpenchannelApplication[_0xc4d9[40]](_0x8488x12[_0xc4d9[43]])})[_0xc4d9[20]](function(_0x8488x30){return _0x8488x10[_0xc4d9[17]](201)[_0xc4d9[16]](_0x8488x30)})[_0xc4d9[19]](function(_0x8488x11){console[_0xc4d9[50]](_0xc4d9[107],_0x8488x11);return handleError(_0x8488x10,_0x8488x11)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/openchannel/accounts -> index + * POST /api/openchannel/accounts -> create + * GET /api/openchannel/accounts/:id -> show + * PUT /api/openchannel/accounts/:id -> update + * DELETE /api/openchannel/accounts/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var OpenchannelAccount = require('../../models').OpenchannelAccount; +var sequelize = require('../../models').sequelize; +var User = require('../../models').User; +var OpenchannelQueue = require('../../models').OpenchannelQueue; +var OpenchannelApplication = require('../../models').OpenchannelApplication; +var OpenchannelMessage = require('../../models').OpenchannelMessage; +var OpenchannelRoom = require('../../models').OpenchannelRoom; +var OpenchannelDisposition = require('../../models').OpenchannelDisposition; +var OpenchannelAccount = require('../../models').OpenchannelAccount; +var Contact = require('../../models').Contact; +var Interval = require('../../models').Interval; +var Promise = require('bluebird'); +var moment = require('moment'); + + + +function handleError(res, err) { + return res.status(500).send(err); +} + +// Gets a list of OpenchannelAccount +exports.index = function(req, res) { + return OpenchannelAccount + .findAndCountAll(Util.getQuery(req.query)) + .then(function(account) { + res.status(200).send(account); + }) + .catch(function(err) { + return handleError(res, err); + }); + +} + +// Gets a single OpenchannelAccount from the DB +exports.show = function(req, res) { + return OpenchannelAccount + .findById(req.params.id) + .then(function(Account) { + if (!Account) { + return res.sendStatus(404); + } + return res.send(Account); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.getDispositions = function(req, res, next) { + return OpenchannelAccount + .findById(req.params.id) + .then(function(Account) { + if (!Account) { + return res.sendStatus(404); + } + + return Account + .getOpenchannelDispositions(); + }) + .then(function(Dispositions) { + return res.status(200).send({ + rows: Dispositions, + count: Dispositions.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Get Applications +exports.showApplications = function(req, res, next) { + return OpenchannelAccount + .scope('default') + .findById(req.params.id) + .then(function(Account) { + if (!Account) { + return res.sendStatus(404); + } + + return Account + .getOpenchannelApplications(_.merge(Util.getQuery(req.query), { + include: [{ + model: OpenchannelQueue, + attributes: ['id', 'name'] + }, { + model: User, + attributes: ['id', 'name', 'online'] + }, { + model: Interval, + attributes: ['id', 'name'] + }], + order: 'priority ASC' + })); + }) + .then(function(Applications) { + return res.send({ + count: Applications.length, + rows: Applications + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Creates a new OpenchannelAccount in the DB +exports.create = function(req, res) { + return OpenchannelAccount + .create(req.body) + .then(function(Account) { + return res.status(201).send(Account); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); + +} + +exports.createDisposition = function(req, res, next) { + req.body.OpenchannelAccountId = req.params.id; + + return OpenchannelDisposition + .create(req.body) + .then(function(Diposition) { + return res.status(201).send(Diposition); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a send Message in the DB. +exports.sendMessage = function(req, res, next) { + req.body.OpenchannelAccountId = req.params.id; + req.body.UserId = req.user.id; + return OpenchannelMessage + .create(req.body, { + user: req.user + }) + .then(function(message) { + return res.status(201).send(message); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Creates a receive Message in the DB. +exports.receiveMessage = function(req, res, next) { + if (req.body.id) { + delete req.body.id; + } + var _message = req.body; + var _account; + + return OpenchannelAccount + .findById(req.params.id) + .then(function(Account) { + if (!Account) { + throw new Error('Account not found'); + } + _account = Account + console.log(_message); + if (!_message.from) { + throw new Error('Received message does not contain sender Id'); + } + return OpenchannelRoom + .findAll({ + limit: 1, + where: { + contact: _message.from, + OpenchannelAccountId: _account.id + }, + order: [ + ['createdAt', 'DESC'] + ] + }) + }) + .then(function(smsroom) { + var room = smsroom[0]; + if (!room || room.status == 'CLOSED') { + var parentID = room ? room.id : null; + return OpenchannelRoom + .create({ + contact: _message.from, + OpenchannelAccountId: _account.id, + status: 'NEW', + ParentId: parentID, + lastEvent: 'RECEIVED', + lastEventAt: moment().format('YYYY-MM-DD HH:mm:ss'), + openchannelIn: 1 + }) + } else { + return room + .updateAttributes({ + lastEvent: 'RECEIVED', + lastEventAt: moment().format('YYYY-MM-DD HH:mm:ss'), + status: 'OPEN', + openReason: 'system', + openchannelIn: ++room.openchannelIn + }); + } + + }) + .then(function(room) { + _message.OpenchannelAccountId = _account.id; + _message.OpenchannelRoomId = room.id; + _message.status = 'RECEIVED'; + return OpenchannelMessage + .create(_message) + + }) + .then(function(Message) { + return res.status(201).send(Message); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; +// Updates an existing OpenchannelAccount in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return OpenchannelAccount.findById(req.params.id) + .then(function(Account) { + if (!Account) { + return res.sendStatus(404); + } + + var updated = _.merge(Account, req.body); + return updated + .save(); + }) + .then(function(Account) { + return res.status(200).send(Account); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + console.log(' err', err); + return handleError(res, err); + }); + +} + +exports.updateDisposition = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return OpenchannelDisposition + .findById(req.params.dispId) + .then(function(Disposition) { + if (!Disposition) { + return res.sendStatus(404); + } + var updated = _.merge(Disposition, req.body); + return updated + .save(); + }) + .then(function(Disposition) { + return res.status(200).send(Disposition); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + + +// Updates aapplications +exports.updateApplications = function(req, res) { + + var priority = 0; + var apps = req.body; + apps.forEach(function(app) { + delete app.id; + delete app.createdAt; + delete app.updatedAt; + + app.priority = ++priority; + }); + console.log('req app', req.body); + return sequelize.transaction(function(t) { + return OpenchannelApplication + .destroy({ + where: { + OpenchannelAccountId: req.params.id + }, + individualHooks: true, + transaction: t + }).then(function(Application) { + return OpenchannelApplication + .bulkCreate(apps, { + individualHooks: true, + transaction: t + }); + }); + }).then(function(Accounts) { + return res.status(200).send({ + count: Accounts.length, + rows: Accounts + }); + }).catch(function(err) { + return handleError(res, err); + }); +}; +exports.updateApplication = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return OpenchannelApplication + .findById(req.params.appId) + .then(function(Application) { + if (!Application) { + return res.sendStatus(404); + } + var updated = _.merge(Application, req.body); + return updated.save(); + }) + .then(function(Application) { + return res.status(200).send(Application); + }) + .catch(function(err) { + return handleError(res, err); + }); + } + // Deletes a OpenchannelAccount from the DB +exports.destroy = function(req, res) { + return OpenchannelAccount.findById(req.params.id) + .then(function(Account) { + if (!Account) { + return res.sendStatus(404); + } + + return Account + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +} +exports.destroyApplication = function(req, res, next) { + return OpenchannelApplication + .findById(req.params.appId) + .then(function(Application) { + if (!Application) { + return res.sendStatus(404); + } + + return Application + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.destroyDisposition = function(req, res, next) { + return OpenchannelDisposition + .findById(req.params.dispId) + .then(function(Diposition) { + if (!Diposition) { + return res.sendStatus(404); + } + return Diposition + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.bulkDestroyApplications = function(req, res) { + return OpenchannelApplication + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + + +exports.getOpenchannelRooms = function(req, res, next) { + var _query = { + where: { + OpenchannelAccountId: req.params.id, + $and: [] + }, + attributes: ['id', 'contact', 'updatedAt', 'tags', 'disposition', 'lastEvent'], + include: [] + }; + + // TO MOVE SOON INTO AN EXTENAL UTIL FILE + if (req.query) { + if (req.query.tags) { + if (_.isArray(req.query.tags)) { + for (var i = 0; i < req.query.tags.length; i++) { + _query.where.$and.push({ + tags: { + $like: '%' + req.query.tags[i] + '%' + } + }); + } + } else { + _query.where.$and.push({ + tags: { + $like: '%' + req.query.tags + '%' + } + }); + } + + delete req.query.tags; + } + + _.merge(_query.where, req.query); + } + + switch (req.user.role) { + case 'agent': + _query.include.push({ + model: User, + attributes: ['id'] + }); + var _agents; + var _agentQueues; + var _accountQueues; + + return User + .findById(req.user.id) + .then(function(user) { + // console.log('user'); + if (user) { + return user + .getOpenchannelQueues(); + } else { + return []; + } + }) + .then(function(queues) { + // console.log(queues); + _agentQueues = _.map(queues, 'id'); + return OpenchannelAccount + .findById(req.params.id); + }) + .then(function(account) { + return account + .getOpenchannelApplications({ + where: { + $or: [{ + app: 'queue' + }, { + app: 'agent' + }] + } + }); + }) + .then(function(apps) { + _agents = _.map(_.find(apps, { + 'app': 'agent' + }), 'UserId'); + _accountQueues = _.map(_.find(apps, { + 'app': 'queue' + }), 'OpenchannelQueueId'); + if (_.intersection(_agentQueues, _accountQueues).length || _.intersection(_agents, [req.user.id]).length) { + return OpenchannelRoom + .findAll(_query) + .then(function(Rooms) { + return res.status(200).send(Rooms); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); + } else { + return res.status(200).send([]); + } + }) + .catch(function(err) { + console.error(err); + }); + + default: + + return OpenchannelRoom + .findAll(_query) + .then(function(Rooms) { + return res.status(200).send(Rooms); + }) + .catch(function(err) { + return handleError(res, err); + }); + } + +}; + +exports.createApplication = function(req, res, next) { + + return OpenchannelApplication + .max('priority', { + where: { + OpenchannelAccountId: req.params.id + } + }).then(function(max) { + // SET PRIORITY + req.body.priority = max ? ++max : 1; + req.body.OpenchannelAccountId = req.params.id; + + return OpenchannelApplication.create(req.body); + }) + .then(function(ocApplication) { + return res.status(201).send(ocApplication); + }) + .catch(function(err) { + console.log('err', err); + return handleError(res, err); + }); +}; diff --git a/server/api/openchannel_account/openchannel_account.events.js b/server/api/openchannel_account/openchannel_account.events.js index a370bf9..cc2ccdb 100644 --- a/server/api/openchannel_account/openchannel_account.events.js +++ b/server/api/openchannel_account/openchannel_account.events.js @@ -1 +1,36 @@ -var _0xf539=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xf539[0];const EventEmitter=require(_0xf539[1]);const OpenchannelAccount=require(_0xf539[3])[_0xf539[2]];var OpenchannelAccountEvents= new EventEmitter();OpenchannelAccountEvents[_0xf539[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xf539[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xf539[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xf539[6]};for(var e in events){var event=events[e];OpenchannelAccount[_0xf539[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xd1edx8,_0xd1edx9,_0xd1edxa){OpenchannelAccountEvents[_0xf539[10]](event+ _0xf539[8]+ _0xd1edx8[_0xf539[9]],_0xd1edx8);OpenchannelAccountEvents[_0xf539[10]](event,_0xd1edx8);_0xd1edxa(null)}}module[_0xf539[11]]= OpenchannelAccountEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const OpenchannelAccount = require('../../models').OpenchannelAccount; + +var OpenchannelAccountEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +OpenchannelAccountEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + OpenchannelAccount.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + OpenchannelAccountEvents.emit(event + ':' + doc._id, doc); + OpenchannelAccountEvents.emit(event, doc); + done(null); + } +} + +module.exports = OpenchannelAccountEvents; diff --git a/server/api/openchannel_account/openchannel_account.socket.js b/server/api/openchannel_account/openchannel_account.socket.js index 794441b..15f955e 100644 --- a/server/api/openchannel_account/openchannel_account.socket.js +++ b/server/api/openchannel_account/openchannel_account.socket.js @@ -1 +1,32 @@ -var _0x8885=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x8885[0];const OpenchannelAccountEvents=require(_0x8885[1]);var events=[_0x8885[2],_0x8885[3]];exports[_0x8885[4]]= function(_0x7760x3){for(var _0x7760x4=0,_0x7760x5=events[_0x8885[5]];_0x7760x4< _0x7760x5;_0x7760x4++){var _0x7760x6=events[_0x7760x4];var _0x7760x7=createListener(_0x8885[6]+ _0x7760x6,_0x7760x3);OpenchannelAccountEvents[_0x8885[7]](_0x7760x6,_0x7760x7);_0x7760x3[_0x8885[7]](_0x8885[8],removeListener(_0x7760x6,_0x7760x7))}};function createListener(_0x7760x6,_0x7760x3){return function(_0x7760x9){_0x7760x3[_0x8885[9]](_0x7760x6,_0x7760x9)}}function removeListener(_0x7760x6,_0x7760x7){return function(){OpenchannelAccountEvents[_0x8885[10]](_0x7760x6,_0x7760x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const OpenchannelAccountEvents = require('./openchannel_account.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('openchannel_account:' + event, socket); + + OpenchannelAccountEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + OpenchannelAccountEvents.removeListener(event, listener); + }; +} diff --git a/server/api/openchannel_application/index.js b/server/api/openchannel_application/index.js index 1d02447..de6d7b3 100644 --- a/server/api/openchannel_application/index.js +++ b/server/api/openchannel_application/index.js @@ -1 +1,15 @@ -var _0xbd92=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xbd92[0];var express=require(_0xbd92[1]);var auth=require(_0xbd92[2]);var controller=require(_0xbd92[3]);var license=require(_0xbd92[4]);var router=express.Router();router[_0xbd92[11]](_0xbd92[5],auth[_0xbd92[6]](),license[_0xbd92[7]](),auth[_0xbd92[9]]([20],[_0xbd92[8]]),controller[_0xbd92[10]]);router[_0xbd92[11]](_0xbd92[12],auth[_0xbd92[6]](),license[_0xbd92[7]](),auth[_0xbd92[9]]([20],[_0xbd92[8]]),controller[_0xbd92[13]]);router[_0xbd92[15]](_0xbd92[5],auth[_0xbd92[6]](),license[_0xbd92[7]](),auth[_0xbd92[9]]([20],[_0xbd92[8]]),controller[_0xbd92[14]]);router[_0xbd92[17]](_0xbd92[12],auth[_0xbd92[6]](),license[_0xbd92[7]](),auth[_0xbd92[9]]([20],[_0xbd92[8]]),controller[_0xbd92[16]]);router[_0xbd92[19]](_0xbd92[12],auth[_0xbd92[6]](),license[_0xbd92[7]](),auth[_0xbd92[9]]([20],[_0xbd92[8]]),controller[_0xbd92[18]]);module[_0xbd92[20]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./openchannel_application.controller'); +var license = require('../../config/license/license.service'); +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.update); +router.delete('/:id', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/openchannel_application/openchannel_application.controller.js b/server/api/openchannel_application/openchannel_application.controller.js index 84ad811..c47b66b 100644 --- a/server/api/openchannel_application/openchannel_application.controller.js +++ b/server/api/openchannel_application/openchannel_application.controller.js @@ -1 +1,129 @@ -var _0x9e2f=["\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\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\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","\x70\x72\x69\x6F\x72\x69\x74\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x6D\x61\x78","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x9e2f[0];var _=require(_0x9e2f[1]);var Util=require(_0x9e2f[2]);var OpenchannelApplication=require(_0x9e2f[4])[_0x9e2f[3]];function handleError(_0x207ax5,_0x207ax6){return _0x207ax5[_0x9e2f[6]](500)[_0x9e2f[5]](_0x207ax6)}exports[_0x9e2f[7]]= function(_0x207ax7,_0x207ax5){return OpenchannelApplication[_0x9e2f[12]]({where:_0x207ax7[_0x9e2f[10]],order:_0x9e2f[11],include:[{all:true}]})[_0x9e2f[9]](function(_0x207ax8){return _0x207ax5[_0x9e2f[6]](200)[_0x9e2f[5]](_0x207ax8)})[_0x9e2f[8]](function(_0x207ax6){return handleError(_0x207ax5,_0x207ax6)})};exports[_0x9e2f[13]]= function(_0x207ax7,_0x207ax5){return OpenchannelApplication[_0x9e2f[17]](_0x207ax7[_0x9e2f[16]][_0x9e2f[15]],{include:[{all:true}]})[_0x9e2f[9]](function(_0x207ax9){if(!_0x207ax9){return _0x207ax5[_0x9e2f[14]](404)};return _0x207ax5[_0x9e2f[5]](_0x207ax9)})[_0x9e2f[8]](function(_0x207ax6){return handleError(_0x207ax5,_0x207ax6)})};exports[_0x9e2f[18]]= function(_0x207ax7,_0x207ax5){return OpenchannelApplication[_0x9e2f[21]](_0x9e2f[11],{where:{OpenchannelAccountId:_0x207ax7[_0x9e2f[19]][_0x9e2f[20]]}})[_0x9e2f[9]](function(_0x207axa){_0x207ax7[_0x9e2f[19]][_0x9e2f[11]]= _0x207axa?++_0x207axa:1;return OpenchannelApplication[_0x9e2f[18]](_0x207ax7[_0x9e2f[19]])})[_0x9e2f[9]](function(_0x207ax9){return _0x207ax5[_0x9e2f[6]](201)[_0x9e2f[5]](_0x207ax9)})[_0x9e2f[8]](function(_0x207ax6){return handleError(_0x207ax5,_0x207ax6)})};exports[_0x9e2f[22]]= function(_0x207ax7,_0x207ax5){if(_0x207ax7[_0x9e2f[19]][_0x9e2f[15]]){delete _0x207ax7[_0x9e2f[19]][_0x9e2f[15]]};return OpenchannelApplication[_0x9e2f[17]](_0x207ax7[_0x9e2f[16]][_0x9e2f[15]])[_0x9e2f[9]](function(_0x207ax9){if(!_0x207ax9){return _0x207ax5[_0x9e2f[14]](404)};var _0x207axb=_[_0x9e2f[23]](_0x207ax9,_0x207ax7[_0x9e2f[19]]);return _0x207axb[_0x9e2f[24]]()})[_0x9e2f[9]](function(_0x207ax9){return _0x207ax5[_0x9e2f[6]](200)[_0x9e2f[5]](_0x207ax9)})[_0x9e2f[8]](function(_0x207ax6){return handleError(_0x207ax5,_0x207ax6)})};exports[_0x9e2f[25]]= function(_0x207ax7,_0x207ax5){return OpenchannelApplication[_0x9e2f[17]](_0x207ax7[_0x9e2f[16]][_0x9e2f[15]])[_0x9e2f[9]](function(_0x207ax9){if(!_0x207ax9){return _0x207ax5[_0x9e2f[14]](404)};return _0x207ax9[_0x9e2f[25]]()})[_0x9e2f[9]](function(){return _0x207ax5[_0x9e2f[14]](204)})[_0x9e2f[8]](function(_0x207ax6){return handleError(_0x207ax5,_0x207ax6)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/openchannel/applications -> index + * POST /api/openchannel/applications -> create + * GET /api/openchannel/applications/:id -> show + * PUT /api/openchannel/applications/:id -> update + * DELETE /api/openchannel/applications/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var OpenchannelApplication = require('../../models').OpenchannelApplication; + +function handleError(res, err) { + return res.status(500).send(err); +} + +// Gets a list of OpenchannelApplication +exports.index = function(req, res) { + return OpenchannelApplication + .findAll({ + where: req.query, + order: 'priority', + include: [{ + all: true + }] + }) + .then(function(Applications) { + return res.status(200).send(Applications); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Gets a single OpenchannelApplication from the DB +exports.show = function(req, res) { + return OpenchannelApplication + .findById(req.params.id, { + include: [{ + all: true + }] + }) + .then(function(Application) { + if (!Application) { + return res.sendStatus(404); + } + return res.send(Application); + }) + .catch(function(err) { + return handleError(res, err); + }); + +} + +// Creates a new OpenchannelApplication in the DB +exports.create = function(req, res) { + + return OpenchannelApplication + .max('priority', { + where: { + OpenchannelAccountId: req.body.OpenchannelAccountId + } + }) + .then(function(max) { + // SET PRIORITY + req.body.priority = max ? ++max : 1; + return OpenchannelApplication + .create(req.body) + }) + .then(function(Application) { + return res.status(201).send(Application); + }) + .catch(function(err) { + return handleError(res, err); + }); + + +} + +// Updates an existing OpenchannelApplication in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return OpenchannelApplication + .findById(req.params.id) + .then(function(Application) { + if (!Application) { + return res.sendStatus(404); + } + var updated = _.merge(Application, req.body); + return updated + .save() + + }) + .then(function(Application) { + return res.status(200).send(Application); + }) + .catch(function(err) { + return handleError(res, err); + }); + +} + + +// Deletes a OpenchannelApplication from the DB +exports.destroy = function(req, res) { + return OpenchannelApplication + .findById(req.params.id) + .then(function(Application) { + if (!Application) { + return res.sendStatus(404); + } + return Application + .destroy() + + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +} diff --git a/server/api/openchannel_application/openchannel_application.events.js b/server/api/openchannel_application/openchannel_application.events.js index c93d0b5..13b8c25 100644 --- a/server/api/openchannel_application/openchannel_application.events.js +++ b/server/api/openchannel_application/openchannel_application.events.js @@ -1 +1,36 @@ -var _0xa025=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xa025[0];const EventEmitter=require(_0xa025[1]);const OpenchannelApplication=require(_0xa025[3])[_0xa025[2]];var OpenchannelApplicationEvents= new EventEmitter();OpenchannelApplicationEvents[_0xa025[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xa025[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xa025[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xa025[6]};for(var e in events){var event=events[e];OpenchannelApplication[_0xa025[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x3f30x8,_0x3f30x9,_0x3f30xa){OpenchannelApplicationEvents[_0xa025[10]](event+ _0xa025[8]+ _0x3f30x8[_0xa025[9]],_0x3f30x8);OpenchannelApplicationEvents[_0xa025[10]](event,_0x3f30x8);_0x3f30xa(null)}}module[_0xa025[11]]= OpenchannelApplicationEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const OpenchannelApplication = require('../../models').OpenchannelApplication; + +var OpenchannelApplicationEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +OpenchannelApplicationEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + OpenchannelApplication.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + OpenchannelApplicationEvents.emit(event + ':' + doc._id, doc); + OpenchannelApplicationEvents.emit(event, doc); + done(null); + } +} + +module.exports = OpenchannelApplicationEvents; diff --git a/server/api/openchannel_application/openchannel_application.socket.js b/server/api/openchannel_application/openchannel_application.socket.js index 53bc9f6..d8ab577 100644 --- a/server/api/openchannel_application/openchannel_application.socket.js +++ b/server/api/openchannel_application/openchannel_application.socket.js @@ -1 +1,32 @@ -var _0x30be=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x30be[0];const OpenchannelApplicationEvents=require(_0x30be[1]);var events=[_0x30be[2],_0x30be[3]];exports[_0x30be[4]]= function(_0x67eex3){for(var _0x67eex4=0,_0x67eex5=events[_0x30be[5]];_0x67eex4< _0x67eex5;_0x67eex4++){var _0x67eex6=events[_0x67eex4];var _0x67eex7=createListener(_0x30be[6]+ _0x67eex6,_0x67eex3);OpenchannelApplicationEvents[_0x30be[7]](_0x67eex6,_0x67eex7);_0x67eex3[_0x30be[7]](_0x30be[8],removeListener(_0x67eex6,_0x67eex7))}};function createListener(_0x67eex6,_0x67eex3){return function(_0x67eex9){_0x67eex3[_0x30be[9]](_0x67eex6,_0x67eex9)}}function removeListener(_0x67eex6,_0x67eex7){return function(){OpenchannelApplicationEvents[_0x30be[10]](_0x67eex6,_0x67eex7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const OpenchannelApplicationEvents = require('./openchannel_application.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('openchannel_application:' + event, socket); + + OpenchannelApplicationEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + OpenchannelApplicationEvents.removeListener(event, listener); + }; +} diff --git a/server/api/openchannel_disposition/index.js b/server/api/openchannel_disposition/index.js index e111d57..b10f1c8 100644 --- a/server/api/openchannel_disposition/index.js +++ b/server/api/openchannel_disposition/index.js @@ -1 +1,16 @@ -var _0xe25a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xe25a[0];var express=require(_0xe25a[1]);var controller=require(_0xe25a[2]);var auth=require(_0xe25a[3]);var router=express.Router();router[_0xe25a[7]](_0xe25a[4],auth[_0xe25a[5]](),controller[_0xe25a[6]]);router[_0xe25a[7]](_0xe25a[8],auth[_0xe25a[5]](),controller[_0xe25a[9]]);router[_0xe25a[11]](_0xe25a[4],auth[_0xe25a[5]](),controller[_0xe25a[10]]);router[_0xe25a[13]](_0xe25a[8],auth[_0xe25a[5]](),controller[_0xe25a[12]]);router[_0xe25a[14]](_0xe25a[8],auth[_0xe25a[5]](),controller[_0xe25a[12]]);router[_0xe25a[16]](_0xe25a[8],auth[_0xe25a[5]](),controller[_0xe25a[15]]);module[_0xe25a[17]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./openchannel_disposition.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); +router.get('/:id', auth.isAuthenticated(), controller.show); +router.post('/', auth.isAuthenticated(), controller.create); +router.put('/:id', auth.isAuthenticated(), controller.update); +router.patch('/:id', auth.isAuthenticated(), controller.update); +router.delete('/:id', auth.isAuthenticated(), controller.destroy); + +module.exports = router; diff --git a/server/api/openchannel_disposition/openchannel_disposition.controller.js b/server/api/openchannel_disposition/openchannel_disposition.controller.js index 4b615b9..fb1250f 100644 --- a/server/api/openchannel_disposition/openchannel_disposition.controller.js +++ b/server/api/openchannel_disposition/openchannel_disposition.controller.js @@ -1 +1,110 @@ -var _0x2a37=["\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\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0x2a37[0];var _=require(_0x2a37[1]);var Util=require(_0x2a37[2]);var OpenchannelDisposition=require(_0x2a37[4])[_0x2a37[3]];function handleError(_0x504fx5,_0x504fx6){_0x504fx6= _0x504fx6|| 500;return function(_0x504fx7){_0x504fx5[_0x2a37[6]](_0x504fx6)[_0x2a37[5]](_0x504fx7)}}function responseWithResult(_0x504fx5,_0x504fx6){_0x504fx6= _0x504fx6|| 200;return function(_0x504fx9){if(_0x504fx9){_0x504fx5[_0x2a37[6]](_0x504fx6)[_0x2a37[7]](_0x504fx9)}}}function handleEntityNotFound(_0x504fx5){return function(_0x504fx9){if(!_0x504fx9){_0x504fx5[_0x2a37[6]](404)[_0x2a37[8]]();return null};return _0x504fx9}}function saveUpdates(_0x504fxc){return function(_0x504fx9){return _0x504fx9[_0x2a37[10]](_0x504fxc)[_0x2a37[9]](function(_0x504fxd){return _0x504fxd})}}function removeEntity(_0x504fx5){return function(_0x504fx9){if(_0x504fx9){return _0x504fx9[_0x2a37[11]]()[_0x2a37[9]](function(){_0x504fx5[_0x2a37[6]](204)[_0x2a37[8]]()})}}}exports[_0x2a37[12]]= function(_0x504fxf,_0x504fx5){OpenchannelDisposition[_0x2a37[14]]()[_0x2a37[9]](responseWithResult(_0x504fx5))[_0x2a37[13]](handleError(_0x504fx5))};exports[_0x2a37[15]]= function(_0x504fxf,_0x504fx5){OpenchannelDisposition[_0x2a37[18]](_0x504fxf[_0x2a37[17]][_0x2a37[16]])[_0x2a37[9]](handleEntityNotFound(_0x504fx5))[_0x2a37[9]](responseWithResult(_0x504fx5))[_0x2a37[13]](handleError(_0x504fx5))};exports[_0x2a37[19]]= function(_0x504fxf,_0x504fx5){OpenchannelDisposition[_0x2a37[19]](_0x504fxf[_0x2a37[20]])[_0x2a37[9]](responseWithResult(_0x504fx5,201))[_0x2a37[13]](handleError(_0x504fx5))};exports[_0x2a37[21]]= function(_0x504fxf,_0x504fx5){if(_0x504fxf[_0x2a37[20]][_0x2a37[16]]){delete _0x504fxf[_0x2a37[20]][_0x2a37[16]]};OpenchannelDisposition[_0x2a37[18]](_0x504fxf[_0x2a37[17]][_0x2a37[16]])[_0x2a37[9]](handleEntityNotFound(_0x504fx5))[_0x2a37[9]](saveUpdates(_0x504fxf[_0x2a37[20]]))[_0x2a37[9]](responseWithResult(_0x504fx5))[_0x2a37[13]](handleError(_0x504fx5))};exports[_0x2a37[11]]= function(_0x504fxf,_0x504fx5){OpenchannelDisposition[_0x2a37[18]](_0x504fxf[_0x2a37[17]][_0x2a37[16]])[_0x2a37[9]](handleEntityNotFound(_0x504fx5))[_0x2a37[9]](removeEntity(_0x504fx5))[_0x2a37[13]](handleError(_0x504fx5))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/openchannel/disposition -> index + * POST /api/openchannel/disposition -> create + * GET /api/openchannel/disposition/:id -> show + * PUT /api/openchannel/disposition/:id -> update + * DELETE /api/openchannel/disposition/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var OpenchannelDisposition = require('../../models').OpenchannelDisposition; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }) + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }) + } + }; +} + +// Gets a list of OpenchannelDisposition +exports.index = function(req, res) { + OpenchannelDisposition + .findAndCountAll() + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single OpenchannelDisposition from the DB +exports.show = function(req, res) { + OpenchannelDisposition + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new OpenchannelDisposition in the DB +exports.create = function(req, res) { + OpenchannelDisposition + .create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing OpenchannelDisposition in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + OpenchannelDisposition + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a OpenchannelDisposition from the DB +exports.destroy = function(req, res) { + OpenchannelDisposition + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} diff --git a/server/api/openchannel_disposition/openchannel_disposition.events.js b/server/api/openchannel_disposition/openchannel_disposition.events.js index f51d0be..178c511 100644 --- a/server/api/openchannel_disposition/openchannel_disposition.events.js +++ b/server/api/openchannel_disposition/openchannel_disposition.events.js @@ -1 +1,36 @@ -var _0xc388=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xc388[0];const EventEmitter=require(_0xc388[1]);const OpenchannelDisposition=require(_0xc388[3])[_0xc388[2]];var OpenchannelDispositionEvents= new EventEmitter();OpenchannelDispositionEvents[_0xc388[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xc388[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xc388[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xc388[6]};for(var e in events){var event=events[e];OpenchannelDisposition[_0xc388[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x1ea4x8,_0x1ea4x9,_0x1ea4xa){OpenchannelDispositionEvents[_0xc388[10]](event+ _0xc388[8]+ _0x1ea4x8[_0xc388[9]],_0x1ea4x8);OpenchannelDispositionEvents[_0xc388[10]](event,_0x1ea4x8);_0x1ea4xa(null)}}module[_0xc388[11]]= OpenchannelDispositionEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const OpenchannelDisposition = require('../../models').OpenchannelDisposition; + +var OpenchannelDispositionEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +OpenchannelDispositionEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + OpenchannelDisposition.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + OpenchannelDispositionEvents.emit(event + ':' + doc._id, doc); + OpenchannelDispositionEvents.emit(event, doc); + done(null); + } +} + +module.exports = OpenchannelDispositionEvents; diff --git a/server/api/openchannel_disposition/openchannel_disposition.socket.js b/server/api/openchannel_disposition/openchannel_disposition.socket.js index 3219355..960c110 100644 --- a/server/api/openchannel_disposition/openchannel_disposition.socket.js +++ b/server/api/openchannel_disposition/openchannel_disposition.socket.js @@ -1 +1,32 @@ -var _0x10b7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x10b7[0];const OpenchannelDispositionEvents=require(_0x10b7[1]);var events=[_0x10b7[2],_0x10b7[3]];exports[_0x10b7[4]]= function(_0xc4abx3){for(var _0xc4abx4=0,_0xc4abx5=events[_0x10b7[5]];_0xc4abx4< _0xc4abx5;_0xc4abx4++){var _0xc4abx6=events[_0xc4abx4];var _0xc4abx7=createListener(_0x10b7[6]+ _0xc4abx6,_0xc4abx3);OpenchannelDispositionEvents[_0x10b7[7]](_0xc4abx6,_0xc4abx7);_0xc4abx3[_0x10b7[7]](_0x10b7[8],removeListener(_0xc4abx6,_0xc4abx7))}};function createListener(_0xc4abx6,_0xc4abx3){return function(_0xc4abx9){_0xc4abx3[_0x10b7[9]](_0xc4abx6,_0xc4abx9)}}function removeListener(_0xc4abx6,_0xc4abx7){return function(){OpenchannelDispositionEvents[_0x10b7[10]](_0xc4abx6,_0xc4abx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const OpenchannelDispositionEvents = require('./openchannel_disposition.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('openchannel_disposition:' + event, socket); + + OpenchannelDispositionEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + OpenchannelDispositionEvents.removeListener(event, listener); + }; +} diff --git a/server/api/openchannel_message/index.js b/server/api/openchannel_message/index.js index c8a48b4..fb26cb8 100644 --- a/server/api/openchannel_message/index.js +++ b/server/api/openchannel_message/index.js @@ -1 +1,18 @@ -var _0x9c68=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x3A\x69\x64","\x61\x67\x65\x6E\x74","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x9c68[0];var express=require(_0x9c68[1]);var auth=require(_0x9c68[2]);var controller=require(_0x9c68[3]);var license=require(_0x9c68[4]);var router=express.Router();router[_0x9c68[11]](_0x9c68[5],auth[_0x9c68[6]](),license[_0x9c68[7]](),auth[_0x9c68[9]]([20],[_0x9c68[8]]),controller[_0x9c68[10]]);router[_0x9c68[11]](_0x9c68[12],auth[_0x9c68[6]](),license[_0x9c68[7]](),auth[_0x9c68[9]]([20],[_0x9c68[8]]),controller[_0x9c68[13]]);router[_0x9c68[11]](_0x9c68[14],auth[_0x9c68[6]](),license[_0x9c68[7]](),auth[_0x9c68[9]]([20],[_0x9c68[8],_0x9c68[15]]),controller[_0x9c68[16]]);router[_0x9c68[18]](_0x9c68[5],auth[_0x9c68[6]](),license[_0x9c68[7]](),auth[_0x9c68[9]]([20],[_0x9c68[8]]),controller[_0x9c68[17]]);router[_0x9c68[20]](_0x9c68[14],auth[_0x9c68[6]](),license[_0x9c68[7]](),auth[_0x9c68[9]]([20],[_0x9c68[8]]),controller[_0x9c68[19]]);router[_0x9c68[22]](_0x9c68[14],auth[_0x9c68[6]](),license[_0x9c68[7]](),auth[_0x9c68[9]]([20],[_0x9c68[8]]),controller[_0x9c68[21]]);router[_0x9c68[22]](_0x9c68[5],auth[_0x9c68[6]](),license[_0x9c68[7]](),auth[_0x9c68[9]]([20],[_0x9c68[8]]),controller[_0x9c68[23]]);module[_0x9c68[24]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./openchannel_message.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.index); +router.get('/describe', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.describe); +router.get('/:id', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin', 'agent']), controller.show); +router.post('/', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.update); +router.delete('/:id', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.destroy); +router.delete('/', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.bulkDelete); + +module.exports = router; diff --git a/server/api/openchannel_message/openchannel_message.controller.js b/server/api/openchannel_message/openchannel_message.controller.js index 024b265..17f68b9 100644 --- a/server/api/openchannel_message/openchannel_message.controller.js +++ b/server/api/openchannel_message/openchannel_message.controller.js @@ -1 +1,170 @@ -var _0xbec3=["\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\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D","\x55\x73\x65\x72","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x69\x6E\x64\x65\x78","\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x44\x45\x53\x43","\x77\x68\x65\x72\x65","\x71\x75\x65\x72\x79","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65","\x75\x73\x65\x72","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x55\x73\x65\x72\x49\x64","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x6C\x65\x74\x65","\x54\x52\x41\x53\x48","\x62\x75\x6C\x6B\x55\x70\x64\x61\x74\x65"];_0xbec3[0];var _=require(_0xbec3[1]);var Util=require(_0xbec3[2]);var OpenchannelMessage=require(_0xbec3[4])[_0xbec3[3]];var OpenchannelRoom=require(_0xbec3[4])[_0xbec3[5]];var User=require(_0xbec3[4])[_0xbec3[6]];function handleError(_0xba66x7,_0xba66x8){return _0xba66x7[_0xbec3[8]](500)[_0xbec3[7]](_0xba66x8)}exports[_0xbec3[9]]= function(_0xba66x9,_0xba66x7){var _0xba66xa={order:_0xbec3[10],include:[{all:true,include:[{all:true}]}]};switch(_0xba66x9[_0xbec3[16]][_0xbec3[15]]){case _0xbec3[13]:_0xba66xa[_0xbec3[11]]= _0xba66x9[_0xbec3[12]];break;case _0xbec3[14]:break;default:};return OpenchannelMessage[_0xbec3[19]](_0xba66xa)[_0xbec3[18]](function(_0xba66xb){return _0xba66x7[_0xbec3[8]](200)[_0xbec3[7]](_0xba66xb)})[_0xbec3[17]](function(_0xba66x8){return handleError(_0xba66x7,_0xba66x8)})};exports[_0xbec3[20]]= function(_0xba66x9,_0xba66x7){return OpenchannelMessage[_0xbec3[20]]()[_0xbec3[18]](function(_0xba66xc){return _0xba66x7[_0xbec3[8]](200)[_0xbec3[7]](_0xba66xc)})[_0xbec3[17]](function(_0xba66x8){return handleError(_0xba66x7,_0xba66x8)})};exports[_0xbec3[21]]= function(_0xba66x9,_0xba66x7){return OpenchannelMessage[_0xbec3[28]](_0xba66x9[_0xbec3[24]][_0xbec3[23]],{include:[{model:User,attributes:[_0xbec3[23],_0xbec3[25],_0xbec3[26],_0xbec3[27]]}]})[_0xbec3[18]](function(_0xba66xd){if(!_0xba66xd){return _0xba66x7[_0xbec3[22]](404)};return _0xba66x7[_0xbec3[7]](_0xba66xd)})[_0xbec3[17]](function(_0xba66x8){return handleError(_0xba66x7,_0xba66x8)})};exports[_0xbec3[29]]= function(_0xba66x9,_0xba66x7){_0xba66x9[_0xbec3[31]][_0xbec3[30]]= _0xba66x9[_0xbec3[16]][_0xbec3[23]];return OpenchannelMessage[_0xbec3[29]](_0xba66x9[_0xbec3[31]])[_0xbec3[18]](function(_0xba66xd){return _0xba66x7[_0xbec3[8]](201)[_0xbec3[7]](_0xba66xd)})[_0xbec3[17]](function(_0xba66x8){return handleError(_0xba66x7,_0xba66x8)})};exports[_0xbec3[32]]= function(_0xba66x9,_0xba66x7){if(_0xba66x9[_0xbec3[31]][_0xbec3[23]]){delete _0xba66x9[_0xbec3[31]][_0xbec3[23]]};return OpenchannelMessage[_0xbec3[28]](_0xba66x9[_0xbec3[24]][_0xbec3[23]],{include:[{all:true}]})[_0xbec3[18]](function(_0xba66xd){if(!_0xba66xd){return _0xba66x7[_0xbec3[22]](404)};var _0xba66xe=_[_0xbec3[33]](_0xba66xd,_0xba66x9[_0xbec3[31]]);return _0xba66xe[_0xbec3[34]]()})[_0xbec3[18]](function(_0xba66xe){return _0xba66x7[_0xbec3[8]](200)[_0xbec3[7]](_0xba66xe)})[_0xbec3[17]](function(_0xba66x8){return handleError(_0xba66x7,_0xba66x8)})};exports[_0xbec3[35]]= function(_0xba66x9,_0xba66x7){return OpenchannelMessage[_0xbec3[28]](_0xba66x9[_0xbec3[24]][_0xbec3[23]])[_0xbec3[18]](function(_0xba66xd){if(!_0xba66xd){return _0xba66x7[_0xbec3[22]](404)};return _0xba66xd[_0xbec3[35]]()})[_0xbec3[18]](function(){return _0xba66x7[_0xbec3[22]](204)})[_0xbec3[17]](function(_0xba66x8){return handleError(_0xba66x7,_0xba66x8)})};exports[_0xbec3[36]]= function(_0xba66x9,_0xba66x7){return OpenchannelMessage[_0xbec3[38]]({where:{id:{$in:_0xba66x9[_0xbec3[31]][_0xbec3[23]]}},attributes:{directory:_0xbec3[37]}})[_0xbec3[18]](function(_0xba66xd){if(!_0xba66xd){return _0xba66x7[_0xbec3[22]](404)};return _0xba66xd[_0xbec3[35]]()})[_0xbec3[18]](function(){return _0xba66x7[_0xbec3[22]](204)})[_0xbec3[17]](function(_0xba66x8){return handleError(_0xba66x7,_0xba66x8)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/openchannel/messages -> index + * POST /api/openchannel/messages -> create + * GET /api/openchannel/messages/:id -> show + * PUT /api/openchannel/messages/:id -> update + * DELETE /api/openchannel/messages/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var OpenchannelMessage = require('../../models').OpenchannelMessage; +var OpenchannelRoom = require('../../models').OpenchannelRoom; +var User = require('../../models').User; + + +function handleError(res, err) { + return res.status(500).send(err); +} + +// Gets a list of OpenchannelMessage +exports.index = function(req, res) { + var params = { + order: 'createdAt DESC', + include: [{ + all: true, + include: [{ + all: true + }] + }] + }; + + switch (req.user.role) { + case 'admin': + params.where = req.query; + break; + case 'agent': + break; + default: + } + + return OpenchannelMessage + .findAll(params) + .then(function(messages) { + return res.status(200).send(messages); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.describe = function(req, res) { + return OpenchannelMessage + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Gets a single OpenchannelMessage from the DB +exports.show = function(req, res) { + return OpenchannelMessage + .findById(req.params.id, { + include: [{ + model: User, + attributes: ['id', 'name', 'fullname', 'email'] + }] + }) + .then(function(Message) { + if (!Message) { + return res.sendStatus(404); + } + return res.send(Message); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Creates a new OpenchannelMessage in the DB +exports.create = function(req, res) { + req.body.UserId = req.user.id; + return OpenchannelMessage + .create(req.body) + .then(function(Message) { + return res.status(201).send(Message); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Updates an existing OpenchannelMessage in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return OpenchannelMessage + .findById(req.params.id, { + include: [{ + all: true + }] + }) + .then(function(Message) { + if (!Message) { + return res.sendStatus(404); + } + var updated = _.merge(Message, req.body); + return updated + .save(); + }) + .then(function(updated) { + return res.status(200).send(updated); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Deletes a OpenchannelMessage from the DB +exports.destroy = function(req, res) { + return OpenchannelMessage + .findById(req.params.id) + .then(function(Message) { + if (!Message) { + return res.sendStatus(404); + } + return Message + .destroy(); + }).then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.bulkDelete = function(req, res) { + return OpenchannelMessage + .bulkUpdate({ + where: { + id: { + $in: req.body.id + } + }, + attributes: { + directory: 'TRASH' + } + }) + .then(function(Message) { + if (!Message) { + return res.sendStatus(404); + } + return Message + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; diff --git a/server/api/openchannel_message/openchannel_message.events.js b/server/api/openchannel_message/openchannel_message.events.js index a790565..5095912 100644 --- a/server/api/openchannel_message/openchannel_message.events.js +++ b/server/api/openchannel_message/openchannel_message.events.js @@ -1 +1,36 @@ -var _0xb42c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xb42c[0];const EventEmitter=require(_0xb42c[1]);const OpenchannelMessage=require(_0xb42c[3])[_0xb42c[2]];var OpenchannelMessageEvents= new EventEmitter();OpenchannelMessageEvents[_0xb42c[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xb42c[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xb42c[6],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xb42c[7]};for(var e in events){var event=events[e];OpenchannelMessage[_0xb42c[8]](e,emitEvent(event))};function emitEvent(event){return function(_0xb770x8,_0xb770x9,_0xb770xa){OpenchannelMessageEvents[_0xb42c[11]](event+ _0xb42c[9]+ _0xb770x8[_0xb42c[10]],_0xb770x8);OpenchannelMessageEvents[_0xb42c[11]](event,_0xb770x8);_0xb770xa(null)}}module[_0xb42c[12]]= OpenchannelMessageEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const OpenchannelMessage = require('../../models').OpenchannelMessage; + +var OpenchannelMessageEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +OpenchannelMessageEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'update', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + OpenchannelMessage.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + OpenchannelMessageEvents.emit(event + ':' + doc._id, doc); + OpenchannelMessageEvents.emit(event, doc); + done(null); + } +} + +module.exports = OpenchannelMessageEvents; diff --git a/server/api/openchannel_message/openchannel_message.socket.js b/server/api/openchannel_message/openchannel_message.socket.js index 8f593e0..0f942a5 100644 --- a/server/api/openchannel_message/openchannel_message.socket.js +++ b/server/api/openchannel_message/openchannel_message.socket.js @@ -1 +1,47 @@ -var _0xc411=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A\x73\x61\x76\x65","\x73\x74\x61\x74\x75\x73","\x63\x68\x61\x6E\x67\x65\x64","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A\x75\x70\x64\x61\x74\x65","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xc411[0];const OpenchannelMessageEvents=require(_0xc411[1]);var events=[_0xc411[2],_0xc411[3],_0xc411[4]];exports[_0xc411[5]]= function(_0xd55dx3){for(var _0xd55dx4=0,_0xd55dx5=events[_0xc411[6]];_0xd55dx4< _0xd55dx5;_0xd55dx4++){var _0xd55dx6=events[_0xd55dx4];var _0xd55dx7=createListener(_0xc411[7]+ _0xd55dx6,_0xd55dx3);OpenchannelMessageEvents[_0xc411[8]](_0xd55dx6,_0xd55dx7);_0xd55dx3[_0xc411[8]](_0xc411[9],removeListener(_0xd55dx6,_0xd55dx7))}};function createListener(_0xd55dx6,_0xd55dx3){return function(_0xd55dx9){switch(_0xd55dx6){case _0xc411[11]:_0xd55dx3[_0xc411[10]](_0xd55dx6,_0xd55dx9);break;case _0xc411[14]:if(_0xd55dx9[_0xc411[13]](_0xc411[12])){_0xd55dx3[_0xc411[10]](_0xd55dx6,_0xd55dx9)};break;case _0xc411[15]:_0xd55dx3[_0xc411[10]](_0xd55dx6,_0xd55dx9);break;default:}}}function removeListener(_0xd55dx6,_0xd55dx7){return function(){OpenchannelMessageEvents[_0xc411[16]](_0xd55dx6,_0xd55dx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const OpenchannelMessageEvents = require('./openchannel_message.events'); + +// Model events to emit +var events = ['save', 'update', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('openchannel_message:' + event, socket); + + OpenchannelMessageEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'openchannel_message:save': + socket.emit(event, doc); + break; + case 'openchannel_message:update': + if (doc.changed('status')) { + socket.emit(event, doc); + } + break; + case 'openchannel_message:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + OpenchannelMessageEvents.removeListener(event, listener); + }; +} diff --git a/server/api/openchannel_queue/index.js b/server/api/openchannel_queue/index.js index 4726203..a85e598 100644 --- a/server/api/openchannel_queue/index.js +++ b/server/api/openchannel_queue/index.js @@ -1 +1,22 @@ -var _0x39e1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x68\x61\x73\x52\x6F\x6C\x65","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x39e1[0];var express=require(_0x39e1[1]);var auth=require(_0x39e1[2]);var controller=require(_0x39e1[3]);var license=require(_0x39e1[4]);var router=express.Router();router[_0x39e1[12]](_0x39e1[5],license[_0x39e1[6]](),auth[_0x39e1[7]](),license[_0x39e1[8]](),auth[_0x39e1[10]]([20],[_0x39e1[9]]),controller[_0x39e1[11]]);router[_0x39e1[12]](_0x39e1[13],license[_0x39e1[6]](),auth[_0x39e1[7]](),license[_0x39e1[8]](),auth[_0x39e1[10]]([20],[_0x39e1[9]]),controller[_0x39e1[14]]);router[_0x39e1[12]](_0x39e1[15],license[_0x39e1[6]](),auth[_0x39e1[7]](),license[_0x39e1[8]](),auth[_0x39e1[10]]([20],[_0x39e1[9]]),controller[_0x39e1[16]]);router[_0x39e1[19]](_0x39e1[5],license[_0x39e1[6]](),auth[_0x39e1[7]](),license[_0x39e1[8]](),auth[_0x39e1[17]](_0x39e1[9]),controller[_0x39e1[18]]);router[_0x39e1[19]](_0x39e1[15],license[_0x39e1[6]](),auth[_0x39e1[7]](),license[_0x39e1[8]](),auth[_0x39e1[17]](_0x39e1[9]),controller[_0x39e1[20]]);router[_0x39e1[22]](_0x39e1[13],license[_0x39e1[6]](),auth[_0x39e1[7]](),license[_0x39e1[8]](),auth[_0x39e1[17]](_0x39e1[9]),controller[_0x39e1[21]]);router[_0x39e1[23]](_0x39e1[13],license[_0x39e1[6]](),auth[_0x39e1[7]](),license[_0x39e1[8]](),auth[_0x39e1[17]](_0x39e1[9]),controller[_0x39e1[21]]);router[_0x39e1[25]](_0x39e1[13],license[_0x39e1[6]](),auth[_0x39e1[7]](),license[_0x39e1[8]](),auth[_0x39e1[17]](_0x39e1[9]),controller[_0x39e1[24]]);router[_0x39e1[25]](_0x39e1[15],license[_0x39e1[6]](),auth[_0x39e1[7]](),license[_0x39e1[8]](),auth[_0x39e1[17]](_0x39e1[9]),controller[_0x39e1[26]]);router[_0x39e1[25]](_0x39e1[5],license[_0x39e1[6]](),auth[_0x39e1[7]](),license[_0x39e1[8]](),auth[_0x39e1[17]](_0x39e1[9]),controller[_0x39e1[27]]);module[_0x39e1[28]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./openchannel_queue.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +// router.get('/', auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.index); +router.get('/', license.isValidDate(), auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.index); +router.get('/:id', license.isValidDate(), auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.show); +router.get('/:id/agents', license.isValidDate(), auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.showAgents); +router.post('/', license.isValidDate(), auth.isAuthenticated(), license.hasOpenchannel(), auth.hasRole('admin'), controller.create); +router.post('/:id/agents', license.isValidDate(), auth.isAuthenticated(), license.hasOpenchannel(), auth.hasRole('admin'), controller.addAgents); +router.put('/:id', license.isValidDate(), auth.isAuthenticated(), license.hasOpenchannel(), auth.hasRole('admin'), controller.update); +router.patch('/:id', license.isValidDate(), auth.isAuthenticated(), license.hasOpenchannel(), auth.hasRole('admin'), controller.update); +router.delete('/:id', license.isValidDate(), auth.isAuthenticated(), license.hasOpenchannel(), auth.hasRole('admin'), controller.destroy); +router.delete('/:id/agents', license.isValidDate(), auth.isAuthenticated(), license.hasOpenchannel(), auth.hasRole('admin'), controller.removeAgents); +router.delete('/', license.isValidDate(), auth.isAuthenticated(), license.hasOpenchannel(), auth.hasRole('admin'), controller.bulkDestroy); + +module.exports = router; diff --git a/server/api/openchannel_queue/openchannel_queue.controller.js b/server/api/openchannel_queue/openchannel_queue.controller.js index 066c001..dde6c2b 100644 --- a/server/api/openchannel_queue/openchannel_queue.controller.js +++ b/server/api/openchannel_queue/openchannel_queue.controller.js @@ -1 +1,246 @@ -var _0x5405=["\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"];_0x5405[0];var _=require(_0x5405[1]);var Util=require(_0x5405[2]);var OpenchannelQueue=require(_0x5405[4])[_0x5405[3]];var User=require(_0x5405[4])[_0x5405[5]];var sequelize=require(_0x5405[4])[_0x5405[6]];var UserHasOpenchannelQueue=require(_0x5405[4])[_0x5405[7]];function handleError(_0x281fx8,_0x281fx9){return _0x281fx8[_0x5405[9]](500)[_0x5405[8]](_0x281fx9)}exports[_0x5405[10]]= function(_0x281fxa,_0x281fx8){switch(_0x281fxa[_0x5405[16]][_0x5405[23]]){case _0x5405[16]:return User[_0x5405[17]](_0x281fxa[_0x5405[16]][_0x5405[15]],{attributes:[_0x5405[15]]})[_0x5405[12]](Util[_0x5405[14]](_0x281fxa[_0x5405[13]]))[_0x5405[12]](function(_0x281fxb){_0x281fx8[_0x5405[9]](200)[_0x5405[8]](_0x281fxb)})[_0x5405[11]](function(_0x281fx9){return handleError(_0x281fx8,_0x281fx9)});default:return OpenchannelQueue[_0x5405[22]](_0x5405[21])[_0x5405[20]](_[_0x5405[19]](Util[_0x5405[18]](_0x281fxa[_0x5405[13]]),{distinct:true}))[_0x5405[12]](function(_0x281fxb){_0x281fx8[_0x5405[9]](200)[_0x5405[8]](_0x281fxb)})[_0x5405[11]](function(_0x281fx9){return handleError(_0x281fx8,_0x281fx9)})}};exports[_0x5405[24]]= function(_0x281fxa,_0x281fx8){return OpenchannelQueue[_0x5405[22]](_0x5405[21])[_0x5405[17]](_0x281fxa[_0x5405[26]][_0x5405[15]])[_0x5405[12]](function(_0x281fxc){if(!_0x281fxc){return _0x281fx8[_0x5405[25]](404)};return _0x281fx8[_0x5405[8]](_0x281fxc)})[_0x5405[11]](function(_0x281fx9){return handleError(_0x281fx8,_0x281fx9)})};exports[_0x5405[27]]= function(_0x281fxa,_0x281fx8){return OpenchannelQueue[_0x5405[17]](_0x281fxa[_0x5405[26]][_0x5405[15]])[_0x5405[12]](function(_0x281fxe){if(!_0x281fxe){return _0x281fx8[_0x5405[25]](404)};return _0x281fxe[_0x5405[33]]({where:{role:_0x5405[29]},attributes:[_0x5405[15],_0x5405[30],_0x5405[31],_0x5405[32]]})})[_0x5405[12]](function(_0x281fxd){return _0x281fx8[_0x5405[9]](200)[_0x5405[8]]({rows:_0x281fxd,count:_0x281fxd[_0x5405[28]]})})[_0x5405[11]](function(_0x281fx9){return handleError(_0x281fx8,_0x281fx9)})};exports[_0x5405[34]]= function(_0x281fxa,_0x281fx8){var _0x281fxf;return OpenchannelQueue[_0x5405[34]](_0x281fxa[_0x5405[38]])[_0x5405[12]](function(_0x281fx10){_0x281fxf= _0x281fx10;if(_0x281fxa[_0x5405[38]][_0x5405[37]]){return _0x281fxf[_0x5405[40]](_0x281fxa[_0x5405[38]][_0x5405[37]],{penalty:_0x281fxa[_0x5405[38]][_0x5405[39]]|| 0,queue:_0x281fxf[_0x5405[30]]})}})[_0x5405[12]](function(){return _0x281fx8[_0x5405[9]](201)[_0x5405[8]](_0x281fxf)})[_0x5405[11]](sequelize.UniqueConstraintError,function(_0x281fx9){return Util[_0x5405[36]][_0x5405[35]](_0x281fx8,_0x281fx9)})[_0x5405[11]](function(_0x281fx9){return handleError(_0x281fx8,_0x281fx9)})};exports[_0x5405[41]]= function(_0x281fxa,_0x281fx8){if(_0x281fxa[_0x5405[38]][_0x5405[15]]){delete _0x281fxa[_0x5405[38]][_0x5405[15]]};return OpenchannelQueue[_0x5405[17]](_0x281fxa[_0x5405[26]][_0x5405[15]])[_0x5405[12]](function(_0x281fxc){if(!_0x281fxc){return _0x281fx8[_0x5405[25]](404)};var _0x281fx11=_[_0x5405[19]](_0x281fxc,_0x281fxa[_0x5405[38]]);return _0x281fx11[_0x5405[42]]()})[_0x5405[12]](function(_0x281fxc){return _0x281fx8[_0x5405[9]](200)[_0x5405[8]](_0x281fxc)})[_0x5405[11]](sequelize.UniqueConstraintError,function(_0x281fx9){return Util[_0x5405[36]][_0x5405[35]](_0x281fx8,_0x281fx9)})[_0x5405[11]](function(_0x281fx9){return handleError(_0x281fx8,_0x281fx9)})};exports[_0x5405[43]]= function(_0x281fxa,_0x281fx8,_0x281fx12){return OpenchannelQueue[_0x5405[17]](_0x281fxa[_0x5405[26]][_0x5405[15]])[_0x5405[12]](function(_0x281fxc){if(!_0x281fxc){return _0x281fx8[_0x5405[25]](404)};var _0x281fx13=_[_0x5405[44]](_0x281fxa[_0x5405[38]][_0x5405[37]],function(_0x281fx14){return {UserId:_0x281fx14,penalty:_0x281fxa[_0x5405[38]][_0x5405[39]],OpenchannelQueueId:_0x281fxc[_0x5405[15]],queue:_0x281fxc[_0x5405[30]]}});return UserHasOpenchannelQueue[_0x5405[45]](_0x281fx13,{individualHooks:true})})[_0x5405[12]](function(){return _0x281fx8[_0x5405[25]](200)})[_0x5405[11]](function(_0x281fx9){return handleError(_0x281fx8,_0x281fx9)})};exports[_0x5405[46]]= function(_0x281fxa,_0x281fx8){return OpenchannelQueue[_0x5405[17]](_0x281fxa[_0x5405[26]][_0x5405[15]])[_0x5405[12]](function(_0x281fxc){if(_0x281fxc){return _0x281fxc[_0x5405[47]](_0x281fxa[_0x5405[13]][_0x5405[37]],{individualHooks:true})}else {throw new Error(_0x5405[48])}})[_0x5405[12]](function(){return _0x281fx8[_0x5405[25]](202)})[_0x5405[11]](function(_0x281fx9){return handleError(_0x281fx8,_0x281fx9)})};exports[_0x5405[49]]= function(_0x281fxa,_0x281fx8){var _0x281fx15;return OpenchannelQueue[_0x5405[17]](_0x281fxa[_0x5405[26]][_0x5405[15]])[_0x5405[12]](function(_0x281fxc){_0x281fx15= _0x281fxc;if(!_0x281fxc){return _0x281fx8[_0x5405[25]](404)};return _0x281fxc[_0x5405[49]]()})[_0x5405[12]](function(){return _0x281fx8[_0x5405[25]](204)})[_0x5405[11]](sequelize.ForeignKeyConstraintError,function(_0x281fx9){return Util[_0x5405[36]][_0x5405[53]](_0x281fx8,_0x5405[52],_0x281fx15[_0x5405[30]],_0x281fx9)})[_0x5405[11]](function(_0x281fx9){console[_0x5405[51]](_0x5405[50],_0x281fx9);return handleError(_0x281fx8,_0x281fx9)})};exports[_0x5405[54]]= function(_0x281fxa,_0x281fx8){return OpenchannelQueue[_0x5405[49]]({where:{id:_0x281fxa[_0x5405[13]][_0x5405[55]]},individualHooks:true})[_0x5405[12]](function(){return _0x281fx8[_0x5405[25]](204)})[_0x5405[11]](function(_0x281fx9){return handleError(_0x281fx8,_0x281fx9)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/openchannel/queues -> index + * POST /api/openchannel/queues -> create + * GET /api/openchannel/queues/:id -> show + * PUT /api/openchannel/queues/:id -> update + * DELETE /api/openchannel/queues/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var OpenchannelQueue = require('../../models').OpenchannelQueue; +var User = require('../../models').User; +var sequelize = require('../../models').sequelize; +var UserHasOpenchannelQueue = require('../../models').UserHasOpenchannelQueue; + +function handleError(res, err) { + return res.status(500).send(err); +} + + +// Gets a list of openchannelQueues +exports.index = function(req, res) { + + switch (req.user.role) { + case 'user': + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getOpenchannelQueuesIdByUser(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + + default: + return OpenchannelQueue + .scope('default') + .findAndCountAll(_.merge(Util.getQuery(req.query), { + distinct: true + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + } + + + +} + +// Gets a single OpenchannelQueue from the DB +exports.show = function(req, res) { + return OpenchannelQueue + .scope('default') + .findById(req.params.id) + .then(function(Queue) { + if (!Queue) { + return res.sendStatus(404); + } + return res.send(Queue); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.showAgents = function(req, res) { + return OpenchannelQueue + .findById(req.params.id) + .then(function(queue) { + if (!queue) { + return res.sendStatus(404); + } + return queue + .getUsers({ + where: { + role: 'agent' + }, + attributes: ['id', 'name', 'fullname', 'email'] + }); + }) + .then(function(agents) { + // console.log(agents); + return res.status(200).send({ + rows: agents, + count: agents.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Creates a new OpenchannelQueue in the DB +exports.create = function(req, res) { + var _openchannelQueue; + + return OpenchannelQueue + .create(req.body) + .then(function(openchannelQueue) { + _openchannelQueue = openchannelQueue; + + if (req.body.agents) { + return _openchannelQueue + .addUsers(req.body.agents, { + penalty: req.body.penalty || 0, + queue: _openchannelQueue.name + }); + } + }) + .then(function() { + return res.status(201).send(_openchannelQueue); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Updates an existing OpenchannelQueue in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return OpenchannelQueue + .findById(req.params.id) + .then(function(Queue) { + if (!Queue) { + return res.sendStatus(404); + } + var updated = _.merge(Queue, req.body); + return updated + .save(); + }) + .then(function(Queue) { + return res.status(200).send(Queue); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); + } + // Updates an existing OpenchannelQueue in the DB. +exports.addAgents = function(req, res, next) { + return OpenchannelQueue + .findById(req.params.id) + .then(function(Queue) { + if (!Queue) { + return res.sendStatus(404); + } + var userHasOpenchannelQueues = _.map(req.body.agents, function(agent) { + return { + UserId: agent, + penalty: req.body.penalty, + OpenchannelQueueId: Queue.id, + queue: Queue.name + }; + }); + + return UserHasOpenchannelQueue + .bulkCreate(userHasOpenchannelQueues, { + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.removeAgents = function(req, res) { + return OpenchannelQueue + .findById(req.params.id) + .then(function(Queue) { + if (Queue) { + return Queue + .removeUsers(req.query.agents, { + individualHooks: true + }); + } else { + throw new Error('Openchannel Queue not found'); + } + }) + .then(function() { + return res.sendStatus(202); + }) + .catch(function(err) { + return handleError(res, err); + }); + +}; + +// Deletes a OpenchannelQueue from the DB +exports.destroy = function(req, res) { + var _OpenchannelQueue; + return OpenchannelQueue + .findById(req.params.id) + .then(function(Queue) { + _OpenchannelQueue = Queue; + if (!Queue) { + return res.sendStatus(404); + } + return Queue + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(sequelize.ForeignKeyConstraintError, function(err) { + return Util.errorManager.handleForeignKeyConstraintError(res, 'queue', _OpenchannelQueue.name, err); + }) + .catch(function(err) { + console.error('err', err); + return handleError(res, err); + }); +} +exports.bulkDestroy = function(req, res) { + return OpenchannelQueue + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; diff --git a/server/api/openchannel_queue/openchannel_queue.events.js b/server/api/openchannel_queue/openchannel_queue.events.js index 2847afc..a1ca116 100644 --- a/server/api/openchannel_queue/openchannel_queue.events.js +++ b/server/api/openchannel_queue/openchannel_queue.events.js @@ -1 +1,36 @@ -var _0xee74=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\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","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xee74[0];const EventEmitter=require(_0xee74[1]);const OpenchannelQueue=require(_0xee74[3])[_0xee74[2]];var OpenchannelQueueEvents= new EventEmitter();OpenchannelQueueEvents[_0xee74[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xee74[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xee74[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xee74[6]};for(var e in events){var event=events[e];OpenchannelQueue[_0xee74[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x812fx8,_0x812fx9,_0x812fxa){OpenchannelQueueEvents[_0xee74[10]](event+ _0xee74[8]+ _0x812fx8[_0xee74[9]],_0x812fx8);OpenchannelQueueEvents[_0xee74[10]](event,_0x812fx8);_0x812fxa(null)}}module[_0xee74[11]]= OpenchannelQueueEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const OpenchannelQueue = require('../../models').OpenchannelQueue; + +var OpenchannelQueueEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +OpenchannelQueueEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + OpenchannelQueue.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + OpenchannelQueueEvents.emit(event + ':' + doc._id, doc); + OpenchannelQueueEvents.emit(event, doc); + done(null); + } +} + +module.exports = OpenchannelQueueEvents; diff --git a/server/api/openchannel_queue/openchannel_queue.socket.js b/server/api/openchannel_queue/openchannel_queue.socket.js index 066520d..2ef4161 100644 --- a/server/api/openchannel_queue/openchannel_queue.socket.js +++ b/server/api/openchannel_queue/openchannel_queue.socket.js @@ -1 +1,32 @@ -var _0x362d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x362d[0];const OpenchannelQueueEvents=require(_0x362d[1]);var events=[_0x362d[2],_0x362d[3]];exports[_0x362d[4]]= function(_0x9444x3){for(var _0x9444x4=0,_0x9444x5=events[_0x362d[5]];_0x9444x4< _0x9444x5;_0x9444x4++){var _0x9444x6=events[_0x9444x4];var _0x9444x7=createListener(_0x362d[6]+ _0x9444x6,_0x9444x3);OpenchannelQueueEvents[_0x362d[7]](_0x9444x6,_0x9444x7);_0x9444x3[_0x362d[7]](_0x362d[8],removeListener(_0x9444x6,_0x9444x7))}};function createListener(_0x9444x6,_0x9444x3){return function(_0x9444x9){_0x9444x3[_0x362d[9]](_0x9444x6,_0x9444x9)}}function removeListener(_0x9444x6,_0x9444x7){return function(){OpenchannelQueueEvents[_0x362d[10]](_0x9444x6,_0x9444x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const OpenchannelQueueEvents = require('./openchannel_queue.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('openchannel_queue:' + event, socket); + + OpenchannelQueueEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + OpenchannelQueueEvents.removeListener(event, listener); + }; +} diff --git a/server/api/openchannel_room/index.js b/server/api/openchannel_room/index.js index b3af021..3466839 100644 --- a/server/api/openchannel_room/index.js +++ b/server/api/openchannel_room/index.js @@ -1 +1,25 @@ -var _0x3fca=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x72\x6F\x6F\x6D\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x70\x65\x6E\x64\x69\x6E\x67","\x68\x61\x73\x53\x6D\x73","\x70\x65\x6E\x64\x69\x6E\x67","\x2F\x6E\x65\x77","\x6E\x65\x77","\x2F\x6F\x70\x65\x6E","\x6F\x70\x65\x6E","\x2F\x63\x6C\x6F\x73\x65\x64","\x63\x6C\x6F\x73\x65\x64","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x2F\x6D\x65\x73\x73\x61\x67\x65\x73\x2F\x3A\x69\x64","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x4D\x65\x73\x73\x61\x67\x65","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x3A\x69\x64\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x63\x72\x65\x61\x74\x65\x4D\x65\x73\x73\x61\x67\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x75\x70\x64\x61\x74\x65\x41\x67\x65\x6E\x74\x73","\x75\x70\x64\x61\x74\x65\x50\x61\x74\x63\x68","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x3fca[0];var express=require(_0x3fca[1]);var auth=require(_0x3fca[2]);var controller=require(_0x3fca[3]);var license=require(_0x3fca[4]);var router=express.Router();router[_0x3fca[13]](_0x3fca[5],license[_0x3fca[6]](),license[_0x3fca[7]](),auth[_0x3fca[8]](),auth[_0x3fca[11]]([20],[_0x3fca[9],_0x3fca[10]]),controller[_0x3fca[12]]);router[_0x3fca[13]](_0x3fca[14],auth[_0x3fca[8]](),license[_0x3fca[6]](),license[_0x3fca[15]](),auth[_0x3fca[11]]([20,17],[_0x3fca[9]]),controller[_0x3fca[16]]);router[_0x3fca[13]](_0x3fca[17],auth[_0x3fca[8]](),license[_0x3fca[6]](),license[_0x3fca[15]](),auth[_0x3fca[11]]([20,17],[_0x3fca[9]]),controller[_0x3fca[18]]);router[_0x3fca[13]](_0x3fca[19],auth[_0x3fca[8]](),license[_0x3fca[6]](),license[_0x3fca[15]](),auth[_0x3fca[11]]([20,17],[_0x3fca[9]]),controller[_0x3fca[20]]);router[_0x3fca[13]](_0x3fca[21],auth[_0x3fca[8]](),license[_0x3fca[6]](),license[_0x3fca[15]](),auth[_0x3fca[11]]([20,17],[_0x3fca[9]]),controller[_0x3fca[22]]);router[_0x3fca[13]](_0x3fca[23],license[_0x3fca[6]](),license[_0x3fca[7]](),auth[_0x3fca[8]](),auth[_0x3fca[11]]([20],[_0x3fca[9],_0x3fca[10]]),controller[_0x3fca[24]]);router[_0x3fca[13]](_0x3fca[25],license[_0x3fca[6]](),license[_0x3fca[7]](),auth[_0x3fca[8]](),auth[_0x3fca[11]]([20],[_0x3fca[9]]),controller[_0x3fca[26]]);router[_0x3fca[13]](_0x3fca[27],license[_0x3fca[6]](),license[_0x3fca[7]](),auth[_0x3fca[8]](),auth[_0x3fca[11]]([20],[_0x3fca[9],_0x3fca[10]]),controller[_0x3fca[28]]);router[_0x3fca[13]](_0x3fca[29],license[_0x3fca[6]](),license[_0x3fca[7]](),auth[_0x3fca[8]](),auth[_0x3fca[11]]([20],[_0x3fca[9],_0x3fca[10]]),controller[_0x3fca[30]]);router[_0x3fca[32]](_0x3fca[5],license[_0x3fca[6]](),license[_0x3fca[7]](),auth[_0x3fca[8]](),auth[_0x3fca[11]]([20],[_0x3fca[9]]),controller[_0x3fca[31]]);router[_0x3fca[32]](_0x3fca[33],license[_0x3fca[6]](),license[_0x3fca[7]](),auth[_0x3fca[8]](),auth[_0x3fca[11]]([20],[_0x3fca[9]]),controller[_0x3fca[34]]);router[_0x3fca[36]](_0x3fca[23],license[_0x3fca[6]](),license[_0x3fca[7]](),auth[_0x3fca[8]](),auth[_0x3fca[11]]([20],[_0x3fca[9],_0x3fca[10]]),controller[_0x3fca[35]]);router[_0x3fca[36]](_0x3fca[27],license[_0x3fca[6]](),license[_0x3fca[7]](),auth[_0x3fca[8]](),auth[_0x3fca[11]]([20],[_0x3fca[9],_0x3fca[10]]),controller[_0x3fca[37]]);router[_0x3fca[39]](_0x3fca[23],license[_0x3fca[6]](),license[_0x3fca[7]](),auth[_0x3fca[8]](),auth[_0x3fca[11]]([20],[_0x3fca[9],_0x3fca[10]]),controller[_0x3fca[38]]);router[_0x3fca[41]](_0x3fca[23],license[_0x3fca[6]](),license[_0x3fca[7]](),auth[_0x3fca[8]](),auth[_0x3fca[11]]([20],[_0x3fca[9]]),controller[_0x3fca[40]]);router[_0x3fca[41]](_0x3fca[5],license[_0x3fca[6]](),license[_0x3fca[7]](),auth[_0x3fca[8]](),auth[_0x3fca[11]]([20],[_0x3fca[9]]),controller[_0x3fca[42]]);module[_0x3fca[43]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./openchannel_room.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); +router.get('/', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin', 'agent']), controller.index); +router.get('/pending', auth.isAuthenticated(), license.isValidDate(), license.hasSms(), auth.hasModule([20, 17], ['admin']), controller.pending); +router.get('/new', auth.isAuthenticated(), license.isValidDate(), license.hasSms(), auth.hasModule([20, 17], ['admin']), controller.new); +router.get('/open', auth.isAuthenticated(), license.isValidDate(), license.hasSms(), auth.hasModule([20, 17], ['admin']), controller.open); +router.get('/closed', auth.isAuthenticated(), license.isValidDate(), license.hasSms(), auth.hasModule([20, 17], ['admin']), controller.closed); +router.get('/:id', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin', 'agent']), controller.show); +router.get('/describe', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.describe); +router.get('/:id/agents', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin', 'agent']), controller.showAgents); +router.get('/messages/:id', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin', 'agent']), controller.getRoomByMessage); +router.post('/', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.create); +router.post('/:id/messages', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.createMessage); +router.put('/:id', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin', 'agent']), controller.update); +router.put('/:id/agents', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin', 'agent']), controller.updateAgents); +router.patch('/:id', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin', 'agent']), controller.updatePatch); +router.delete('/:id', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.destroy); +router.delete('/', license.isValidDate(), license.hasOpenchannel(), auth.isAuthenticated(), auth.hasModule([20], ['admin']), controller.bulkDestroy); +module.exports = router; diff --git a/server/api/openchannel_room/openchannel_room.controller.js b/server/api/openchannel_room/openchannel_room.controller.js index 0447498..05ee965 100644 --- a/server/api/openchannel_room/openchannel_room.controller.js +++ b/server/api/openchannel_room/openchannel_room.controller.js @@ -1 +1,399 @@ -var _0xe35a=["\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","\x6D\x6F\x6D\x65\x6E\x74","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x55\x73\x65\x72","\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\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x66\x61\x75\x6C\x74","\x61\x67\x65\x6E\x74","\x69\x64","\x75\x73\x65\x72","\x73\x63\x6F\x70\x65","\x72\x6F\x6C\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x6D\x61\x70","\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","\x66\x69\x6E\x64\x42\x79\x49\x64","\x70\x65\x6E\x64\x69\x6E\x67","\x6C\x6F\x67","\x50\x45\x4E\x44\x49\x4E\x47","\x64\x61\x79","\x73\x74\x61\x72\x74\x4F\x66","\x6D\x65\x72\x67\x65","\x63\x6F\x75\x6E\x74","\x61\x6C\x6C","\x6E\x65\x77","\x4E\x45\x57","\x6F\x70\x65\x6E","\x4F\x50\x45\x4E","\x63\x6C\x6F\x73\x65\x64","\x43\x4C\x4F\x53\x45\x44","\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","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x4D\x65\x73\x73\x61\x67\x65","\x65\x72\x72","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x63\x72\x65\x61\x74\x65\x4D\x65\x73\x73\x61\x67\x65","\x55\x73\x65\x72\x49\x64","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D\x49\x64","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74\x73","\x73\x65\x74\x55\x73\x65\x72\x73","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x75\x70\x64\x61\x74\x65\x50\x61\x74\x63\x68","\x2C","\x73\x70\x6C\x69\x74"];_0xe35a[0];var _=require(_0xe35a[1]);var Util=require(_0xe35a[2]);var moment=require(_0xe35a[3]);var OpenchannelRoom=require(_0xe35a[5])[_0xe35a[4]];var OpenchannelMessage=require(_0xe35a[5])[_0xe35a[6]];var OpenchannelAccount=require(_0xe35a[5])[_0xe35a[7]];var OpenchannelQueue=require(_0xe35a[5])[_0xe35a[8]];var OpenchannelApplication=require(_0xe35a[5])[_0xe35a[9]];var User=require(_0xe35a[5])[_0xe35a[10]];function handleError(_0xa8a6xb,_0xa8a6xc){return _0xa8a6xb[_0xe35a[12]](500)[_0xe35a[11]](_0xa8a6xc)}exports[_0xe35a[13]]= function(_0xa8a6xd,_0xa8a6xb){switch(_0xa8a6xd[_0xe35a[22]][_0xe35a[24]]){case _0xe35a[20]:return OpenchannelRoom[_0xe35a[23]](_0xe35a[19],{method:[_0xe35a[20],_0xa8a6xd[_0xe35a[22]][_0xe35a[21]]]})[_0xe35a[18]](Util[_0xe35a[17]](_0xa8a6xd[_0xe35a[16]]))[_0xe35a[15]](function(_0xa8a6xe){return _0xa8a6xb[_0xe35a[12]](200)[_0xe35a[11]](_0xa8a6xe)})[_0xe35a[14]](function(_0xa8a6xc){return handleError(_0xa8a6xb,_0xa8a6xc)});default:return OpenchannelRoom[_0xe35a[23]](_0xe35a[19])[_0xe35a[18]](Util[_0xe35a[17]](_0xa8a6xd[_0xe35a[16]]))[_0xe35a[15]](function(_0xa8a6xe){return _0xa8a6xb[_0xe35a[12]](200)[_0xe35a[11]](_0xa8a6xe)})[_0xe35a[14]](function(_0xa8a6xc){return handleError(_0xa8a6xb,_0xa8a6xc)})}};exports[_0xe35a[25]]= function(_0xa8a6xd,_0xa8a6xb){return OpenchannelRoom[_0xe35a[25]]()[_0xe35a[15]](function(_0xa8a6xf){return _0xa8a6xb[_0xe35a[12]](200)[_0xe35a[11]](_0xa8a6xf)})[_0xe35a[14]](function(_0xa8a6xc){return handleError(_0xa8a6xb,_0xa8a6xc)})};function getOpenchannelQueues(_0xa8a6x11){return function(){switch(_0xa8a6x11[_0xe35a[24]]){case _0xe35a[22]:return User[_0xe35a[28]](_0xa8a6x11[_0xe35a[21]],{attributes:[_0xe35a[21]]})[_0xe35a[15]](Util[_0xe35a[27]]({},{attributes:[_0xe35a[21]],include:[{raw:true,model:User,attributes:[_0xe35a[21]]}]}))[_0xe35a[15]](function(_0xa8a6x12){return {include:{model:OpenchannelAccount,include:{model:OpenchannelApplication,include:{model:OpenchannelQueue,where:{id:_[_0xe35a[26]](_0xa8a6x12,_0xe35a[21])}}}}}});default:return {}}}}exports[_0xe35a[29]]= function(_0xa8a6xd,_0xa8a6xb){return Promise[_0xe35a[36]]([])[_0xe35a[15]](getOpenchannelQueues(_0xa8a6xd[_0xe35a[22]]))[_0xe35a[15]](function(_0xa8a6x14){return OpenchannelRoom[_0xe35a[35]](_[_0xe35a[34]](Util[_0xe35a[17]](_0xa8a6xd[_0xe35a[16]],{status:_0xe35a[31],updatedAt:{$gte:moment()[_0xe35a[33]](_0xe35a[32])}}),_0xa8a6x14))})[_0xe35a[15]](function(_0xa8a6x13){return _0xa8a6xb[_0xe35a[12]](200)[_0xe35a[11]]({value:_0xa8a6x13})})[_0xe35a[14]](function(_0xa8a6xc){console[_0xe35a[30]](_0xa8a6xc);return handleError(_0xa8a6xb,_0xa8a6xc)})};exports[_0xe35a[37]]= function(_0xa8a6xd,_0xa8a6xb){return Promise[_0xe35a[36]]([])[_0xe35a[15]](getOpenchannelQueues(_0xa8a6xd[_0xe35a[22]]))[_0xe35a[15]](function(_0xa8a6x14){return OpenchannelRoom[_0xe35a[35]](_[_0xe35a[34]](Util[_0xe35a[17]](_0xa8a6xd[_0xe35a[16]],{status:_0xe35a[38],updatedAt:{$gte:moment()[_0xe35a[33]](_0xe35a[32])}}),_0xa8a6x14))})[_0xe35a[15]](function(_0xa8a6x13){return _0xa8a6xb[_0xe35a[12]](200)[_0xe35a[11]]({value:_0xa8a6x13})})[_0xe35a[14]](function(_0xa8a6xc){console[_0xe35a[30]](_0xa8a6xc);return handleError(_0xa8a6xb,_0xa8a6xc)})};exports[_0xe35a[39]]= function(_0xa8a6xd,_0xa8a6xb){return Promise[_0xe35a[36]]([])[_0xe35a[15]](getOpenchannelQueues(_0xa8a6xd[_0xe35a[22]]))[_0xe35a[15]](function(_0xa8a6x14){return OpenchannelRoom[_0xe35a[35]](_[_0xe35a[34]](Util[_0xe35a[17]](_0xa8a6xd[_0xe35a[16]],{status:_0xe35a[40],updatedAt:{$gte:moment()[_0xe35a[33]](_0xe35a[32])}}),_0xa8a6x14))})[_0xe35a[15]](function(_0xa8a6x13){return _0xa8a6xb[_0xe35a[12]](200)[_0xe35a[11]]({value:_0xa8a6x13})})[_0xe35a[14]](function(_0xa8a6xc){console[_0xe35a[30]](_0xa8a6xc);return handleError(_0xa8a6xb,_0xa8a6xc)})};exports[_0xe35a[41]]= function(_0xa8a6xd,_0xa8a6xb){return Promise[_0xe35a[36]]([])[_0xe35a[15]](getOpenchannelQueues(_0xa8a6xd[_0xe35a[22]]))[_0xe35a[15]](function(_0xa8a6x14){return OpenchannelRoom[_0xe35a[35]](_[_0xe35a[34]](Util[_0xe35a[17]](_0xa8a6xd[_0xe35a[16]],{status:_0xe35a[42],updatedAt:{$gte:moment()[_0xe35a[33]](_0xe35a[32])}}),_0xa8a6x14))})[_0xe35a[15]](function(_0xa8a6x13){return _0xa8a6xb[_0xe35a[12]](200)[_0xe35a[11]]({value:_0xa8a6x13})})[_0xe35a[14]](function(_0xa8a6xc){console[_0xe35a[30]](_0xa8a6xc);return handleError(_0xa8a6xb,_0xa8a6xc)})};exports[_0xe35a[43]]= function(_0xa8a6xd,_0xa8a6xb){return OpenchannelRoom[_0xe35a[23]](_0xe35a[19])[_0xe35a[28]](_0xa8a6xd[_0xe35a[45]][_0xe35a[21]])[_0xe35a[15]](function(_0xa8a6x15){if(!_0xa8a6x15){return _0xa8a6xb[_0xe35a[44]](404)};return _0xa8a6xb[_0xe35a[11]](_0xa8a6x15)})[_0xe35a[14]](function(_0xa8a6xc){return handleError(_0xa8a6xb,_0xa8a6xc)})};exports[_0xe35a[46]]= function(_0xa8a6xd,_0xa8a6xb,_0xa8a6x16){return OpenchannelRoom[_0xe35a[28]](_0xa8a6xd[_0xe35a[45]][_0xe35a[21]])[_0xe35a[15]](function(_0xa8a6x15){if(!_0xa8a6x15){return _0xa8a6xb[_0xe35a[44]](404)};return _0xa8a6x15[_0xe35a[51]]({attributes:[_0xe35a[21],_0xe35a[47],_0xe35a[48],_0xe35a[49],_0xe35a[24],_0xe35a[50]]})})[_0xe35a[15]](function(_0xa8a6x17){return _0xa8a6xb[_0xe35a[11]](_0xa8a6x17)})[_0xe35a[14]](function(_0xa8a6xc){return handleError(_0xa8a6xb,_0xa8a6xc)})};exports[_0xe35a[52]]= function(_0xa8a6xd,_0xa8a6xb,_0xa8a6x16){return OpenchannelMessage[_0xe35a[28]](_0xa8a6xd[_0xe35a[45]][_0xe35a[21]])[_0xe35a[15]](function(_0xa8a6x18){return _0xa8a6x18[_0xe35a[54]]({include:[{model:OpenchannelAccount},{model:OpenchannelMessage,include:[{model:User,attributes:[_0xe35a[21],_0xe35a[47],_0xe35a[48],_0xe35a[49]]}]},{model:User,attributes:[_0xe35a[21],_0xe35a[47],_0xe35a[48],_0xe35a[49]]}]})})[_0xe35a[15]](function(_0xa8a6x15){return _0xa8a6xb[_0xe35a[11]](_0xa8a6x15)})[_0xe35a[14]](function(_0xa8a6xc){console[_0xe35a[30]](_0xe35a[53],_0xa8a6xc);return handleError(_0xa8a6xb,_0xa8a6xc)})};exports[_0xe35a[55]]= function(_0xa8a6xd,_0xa8a6xb){return OpenchannelRoom[_0xe35a[55]](_0xa8a6xd[_0xe35a[56]])[_0xe35a[15]](function(_0xa8a6x18){return _0xa8a6xb[_0xe35a[12]](201)[_0xe35a[11]](_0xa8a6x18)})[_0xe35a[14]](function(_0xa8a6xc){return handleError(_0xa8a6xb,_0xa8a6xc)})};exports[_0xe35a[57]]= function(_0xa8a6xd,_0xa8a6xb,_0xa8a6x16){_0xa8a6xd[_0xe35a[56]][_0xe35a[58]]= _0xa8a6xd[_0xe35a[22]][_0xe35a[21]];_0xa8a6xd[_0xe35a[56]][_0xe35a[59]]= _0xa8a6xd[_0xe35a[45]][_0xe35a[21]];return OpenchannelMessage[_0xe35a[55]](_0xa8a6xd[_0xe35a[56]])[_0xe35a[15]](function(_0xa8a6x18){return _0xa8a6xb[_0xe35a[12]](201)[_0xe35a[11]](_0xa8a6x18)})[_0xe35a[14]](function(_0xa8a6xc){return handleError(_0xa8a6xb,_0xa8a6xc)})};exports[_0xe35a[60]]= function(_0xa8a6xd,_0xa8a6xb){if(_0xa8a6xd[_0xe35a[56]][_0xe35a[21]]){delete _0xa8a6xd[_0xe35a[56]][_0xe35a[21]]};return OpenchannelRoom[_0xe35a[28]](_0xa8a6xd[_0xe35a[45]][_0xe35a[21]])[_0xe35a[15]](function(_0xa8a6x15){if(!_0xa8a6x15){return _0xa8a6xb[_0xe35a[44]](404)};var _0xa8a6x19=_[_0xe35a[34]](_0xa8a6x15,_0xa8a6xd[_0xe35a[56]]);return _0xa8a6x19[_0xe35a[61]]()})[_0xe35a[15]](function(_0xa8a6x15){return _0xa8a6xb[_0xe35a[12]](200)[_0xe35a[11]](_0xa8a6x15)})[_0xe35a[14]](function(_0xa8a6xc){return handleError(_0xa8a6xb,_0xa8a6xc)})};exports[_0xe35a[62]]= function(_0xa8a6xd,_0xa8a6xb,_0xa8a6x16){return OpenchannelRoom[_0xe35a[28]](_0xa8a6xd[_0xe35a[45]][_0xe35a[21]])[_0xe35a[15]](function(_0xa8a6x15){if(!_0xa8a6x15){return _0xa8a6xb[_0xe35a[44]](404)};return _0xa8a6x15[_0xe35a[64]](_0xa8a6xd[_0xe35a[56]][_0xe35a[63]],{individualHooks:true})})[_0xe35a[15]](function(){return _0xa8a6xb[_0xe35a[44]](200)})[_0xe35a[14]](function(_0xa8a6xc){return handleError(_0xa8a6xb,_0xa8a6xc)})};exports[_0xe35a[65]]= function(_0xa8a6xd,_0xa8a6xb){return OpenchannelRoom[_0xe35a[28]](_0xa8a6xd[_0xe35a[45]][_0xe35a[21]])[_0xe35a[15]](function(_0xa8a6x15){if(!_0xa8a6x15){return _0xa8a6xb[_0xe35a[44]](404)};return _0xa8a6x15[_0xe35a[65]]()})[_0xe35a[15]](function(){return _0xa8a6xb[_0xe35a[44]](204)})[_0xe35a[14]](function(_0xa8a6xc){return handleError(_0xa8a6xb,_0xa8a6xc)})};exports[_0xe35a[66]]= function(_0xa8a6xd,_0xa8a6xb){return OpenchannelRoom[_0xe35a[65]]({where:{id:_0xa8a6xd[_0xe35a[16]][_0xe35a[67]]},individualHooks:true})[_0xe35a[15]](function(){return _0xa8a6xb[_0xe35a[44]](200)})[_0xe35a[14]](function(_0xa8a6xc){return handleError(_0xa8a6xb,_0xa8a6xc)})};exports[_0xe35a[68]]= function(_0xa8a6xd,_0xa8a6xb,_0xa8a6x16){var _0xa8a6x1a={where:{id:_0xa8a6xd[_0xe35a[45]][_0xe35a[21]][_0xe35a[70]](_0xe35a[69])},user:_0xa8a6xd[_0xe35a[22]],individualHooks:true};return OpenchannelRoom[_0xe35a[60]](_0xa8a6xd[_0xe35a[56]],_0xa8a6x1a)[_0xe35a[15]](function(_0xa8a6x1b){if(!_0xa8a6x1b){return _0xa8a6xb[_0xe35a[44]](404)};return _0xa8a6x1b})[_0xe35a[15]](function(_0xa8a6x1b){return _0xa8a6xb[_0xe35a[44]](200)})[_0xe35a[14]](function(_0xa8a6xc){return handleError(_0xa8a6xb,_0xa8a6xc)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/openchannel/rooms -> index + * POST /api/openchannel/rooms -> create + * GET /api/openchannel/rooms/:id -> show + * PUT /api/openchannel/rooms/:id -> update + * DELETE /api/openchannel/rooms/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); +var moment = require('moment'); + +var OpenchannelRoom = require('../../models').OpenchannelRoom; +var OpenchannelMessage = require('../../models').OpenchannelMessage; +var OpenchannelAccount = require('../../models').OpenchannelAccount; +var OpenchannelQueue = require('../../models').OpenchannelQueue; +var OpenchannelApplication = require('../../models').OpenchannelApplication; +var User = require('../../models').User; + + +function handleError(res, err) { + return res.status(500).send(err); +} + + + +// Gets a list of OpenchannelRooms +exports.index = function(req, res) { + switch (req.user.role) { + case 'agent': + return OpenchannelRoom + .scope('default', { + method: ['agent', req.user.id] + }) + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + + default: + return OpenchannelRoom + .scope('default') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + } + +} + +// Get list of fields +exports.describe = function(req, res) { + return OpenchannelRoom + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function getOpenchannelQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(Util.getOpenchannelQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + return { + include: { + model: OpenchannelAccount, + include: { + model: OpenchannelApplication, + include: { + model: OpenchannelQueue, + where: { + id: _.map(userQueues, 'id') + } + } + } + } + }; + }); + default: + return {}; + } + } +} + +exports.pending = function(req, res) { + return Promise + .all([]) + .then(getOpenchannelQueues(req.user)) + .then(function(condition) { + return OpenchannelRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'PENDING', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.new = function(req, res) { + return Promise + .all([]) + .then(getOpenchannelQueues(req.user)) + .then(function(condition) { + return OpenchannelRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'NEW', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.open = function(req, res) { + return Promise + .all([]) + .then(getOpenchannelQueues(req.user)) + .then(function(condition) { + return OpenchannelRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'OPEN', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.closed = function(req, res) { + return Promise + .all([]) + .then(getOpenchannelQueues(req.user)) + .then(function(condition) { + return OpenchannelRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'CLOSED', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + + + +// Gets a single OpenchannelRoom from the DB +exports.show = function(req, res) { + return OpenchannelRoom + .scope('default') + .findById(req.params.id) + .then(function(Room) { + if (!Room) { + return res.sendStatus(404); + } + return res.send(Room); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +exports.showAgents = function(req, res, next) { + return OpenchannelRoom + .findById(req.params.id) + .then(function(Room) { + if (!Room) { + return res.sendStatus(404); + } + return Room + .getUsers({ + attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal'] + }); + }) + .then(function(users) { + return res.send(users); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getRoomByMessage = function(req, res, next) { + return OpenchannelMessage + .findById(req.params.id) + .then(function(Message) { + return Message + .getOpenchannelRoom({ + include: [{ + model: OpenchannelAccount + }, { + model: OpenchannelMessage, + include: [{ + model: User, + attributes: ['id', 'name', 'fullname', 'email'] + }] + }, { + model: User, + attributes: ['id', 'name', 'fullname', 'email'] + }] + }); + }) + .then(function(Room) { + return res.send(Room); + }) + .catch(function(err) { + console.log('err', err); + return handleError(res, err); + }); +}; +// Creates a new OpenchannelRoom in the DB +exports.create = function(req, res) { + + return OpenchannelRoom + .create(req.body) + .then(function(Message) { + return res.status(201).send(Message); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + + +// Creates a new Message in the DB. +exports.createMessage = function(req, res, next) { + req.body.UserId = req.user.id; + req.body.OpenchannelRoomId = req.params.id; + return OpenchannelMessage + .create(req.body) + .then(function(Message) { + return res.status(201).send(Message); + }).catch(function(err) { + return handleError(res, err); + }); +}; +// Updates an existing OpenchannelRoom in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return OpenchannelRoom + .findById(req.params.id) + .then(function(Room) { + if (!Room) { + return res.sendStatus(404); + } + + var updated = _.merge(Room, req.body); + + return updated + .save(); + }) + .then(function(Room) { + return res.status(200).send(Room); + }) + .catch(function(err) { + return handleError(res, err); + }); +} +exports.updateAgents = function(req, res, next) { + return OpenchannelRoom + .findById(req.params.id) + .then(function(Room) { + if (!Room) { + return res.sendStatus(404); + } + + return Room + .setUsers(req.body.agents, { + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a OpenchannelRoom from the DB +exports.destroy = function(req, res) { + return OpenchannelRoom + .findById(req.params.id) + .then(function(Room) { + if (!Room) { + return res.sendStatus(404); + } + return Room.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.bulkDestroy = function(req, res) { + return OpenchannelRoom + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +exports.updatePatch = function(req, res, next) { + + var _options = { + where: { + id: req.params.id.split(',') + }, + user: req.user, + individualHooks: true + }; + return OpenchannelRoom + .update(req.body, _options) + .then(function(Rooms) { + if (!Rooms) { + return res.sendStatus(404); + } + return Rooms + }) + .then(function(Rooms) { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; diff --git a/server/api/openchannel_room/openchannel_room.events.js b/server/api/openchannel_room/openchannel_room.events.js index b5c1ef0..1bea005 100644 --- a/server/api/openchannel_room/openchannel_room.events.js +++ b/server/api/openchannel_room/openchannel_room.events.js @@ -1 +1,36 @@ -var _0xf2e3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xf2e3[0];const EventEmitter=require(_0xf2e3[1]);const OpenchannelRoom=require(_0xf2e3[3])[_0xf2e3[2]];var OpenchannelRoomEvents= new EventEmitter();OpenchannelRoomEvents[_0xf2e3[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xf2e3[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xf2e3[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xf2e3[6]};for(var e in events){var event=events[e];OpenchannelRoom[_0xf2e3[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x2ecfx8,_0x2ecfx9,_0x2ecfxa){OpenchannelRoomEvents[_0xf2e3[10]](event+ _0xf2e3[8]+ _0x2ecfx8[_0xf2e3[9]],_0x2ecfx8);OpenchannelRoomEvents[_0xf2e3[10]](event,_0x2ecfx8);_0x2ecfxa(null)}}module[_0xf2e3[11]]= OpenchannelRoomEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const OpenchannelRoom = require('../../models').OpenchannelRoom; + +var OpenchannelRoomEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +OpenchannelRoomEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + OpenchannelRoom.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + OpenchannelRoomEvents.emit(event + ':' + doc._id, doc); + OpenchannelRoomEvents.emit(event, doc); + done(null); + } +} + +module.exports = OpenchannelRoomEvents; diff --git a/server/api/openchannel_room/openchannel_room.socket.js b/server/api/openchannel_room/openchannel_room.socket.js index 41f9f22..0868959 100644 --- a/server/api/openchannel_room/openchannel_room.socket.js +++ b/server/api/openchannel_room/openchannel_room.socket.js @@ -1 +1,33 @@ -var _0x2b6b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x72\x6F\x6F\x6D\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x72\x6F\x6F\x6D\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x2b6b[0];const OpenchannelRoomEvents=require(_0x2b6b[1]);var events=[_0x2b6b[2],_0x2b6b[2],_0x2b6b[3]];exports[_0x2b6b[4]]= function(_0x63bcx3){for(var _0x63bcx4=0,_0x63bcx5=events[_0x2b6b[5]];_0x63bcx4< _0x63bcx5;_0x63bcx4++){var _0x63bcx6=events[_0x63bcx4];var _0x63bcx7=createListener(_0x2b6b[6]+ _0x63bcx6,_0x63bcx3);OpenchannelRoomEvents[_0x2b6b[7]](_0x63bcx6,_0x63bcx7);_0x63bcx3[_0x2b6b[7]](_0x2b6b[8],removeListener(_0x63bcx6,_0x63bcx7))}};function createListener(_0x63bcx6,_0x63bcx3){return function(_0x63bcx9){_0x63bcx3[_0x2b6b[9]](_0x63bcx6,_0x63bcx9)}}function removeListener(_0x63bcx6,_0x63bcx7){return function(){OpenchannelRoomEvents[_0x2b6b[10]](_0x63bcx6,_0x63bcx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const OpenchannelRoomEvents = require('./openchannel_room.events'); + +// Model events to emit +var events = ['save', 'save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('openchannel_room:' + event, socket); + + OpenchannelRoomEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + + +function removeListener(event, listener) { + return function() { + OpenchannelRoomEvents.removeListener(event, listener); + }; +} diff --git a/server/api/pause/index.js b/server/api/pause/index.js index cd32dbb..97ab245 100644 --- a/server/api/pause/index.js +++ b/server/api/pause/index.js @@ -1 +1,162 @@ -var _0x6785=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x70\x61\x75\x73\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x6785[0];var express=require(_0x6785[1]);var auth=require(_0x6785[2]);var controller=require(_0x6785[3]);var router=express.Router();router[_0x6785[10]](_0x6785[4],auth[_0x6785[5]](),auth[_0x6785[8]]([6,13],[_0x6785[6],_0x6785[7]]),controller[_0x6785[9]]);router[_0x6785[10]](_0x6785[11],auth[_0x6785[5]](),auth[_0x6785[8]]([13],[_0x6785[6]]),controller[_0x6785[12]]);router[_0x6785[14]](_0x6785[4],auth[_0x6785[5]](),auth[_0x6785[8]]([13],[_0x6785[6]]),controller[_0x6785[13]]);router[_0x6785[16]](_0x6785[11],auth[_0x6785[5]](),auth[_0x6785[8]]([13],[_0x6785[6]]),controller[_0x6785[15]]);router[_0x6785[18]](_0x6785[4],auth[_0x6785[5]](),auth[_0x6785[8]]([13],[_0x6785[6]]),controller[_0x6785[17]]);router[_0x6785[18]](_0x6785[11],auth[_0x6785[5]](),auth[_0x6785[8]]([13],[_0x6785[6]]),controller[_0x6785[19]]);module[_0x6785[20]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./pause.controller'); + +var router = express.Router(); + +/** + * @api {get} /api/pauses/ Get pauses list. + * + * @apiParam (Query) {Number} [offset] Pagination offset. + * @apiParam (Query) {Number} [limit] Pagination limit. + * + * @apiVersion 0.0.143 + * @apiName GetPauses + * @apiGroup Pauses + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Number} count Number of pauses. + * @apiSuccess {Object[]} rows Pauses list. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "count": 1, + * "rows": [{ + * "id": 1 + * "name": "BACKOFFICE" + * "description": "BACKOFFICE Pause" + * }] + * } + */ +router.get('/', auth.isAuthenticated(), auth.hasModule([6, 13], ['admin', 'agent']), controller.index); + +/** + * @api {get} /api/pauses/:id Get pause. + * @apiParam {Number} id Pause unique ID. + * @apiVersion 0.0.143 + * @apiName GetPause + * @apiGroup Pauses + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "BACKOFFICE" + * "description": "BACKOFFICE Pause" + * } + */ +router.get('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.show); + +/** + * @api {post} /api/users/ Create pause. + * @apiParam (Body) {String} name Pause name. + * @apiParam (Body) {String} [description] Pause description. + * + * @apiVersion 0.0.143 + * @apiName CreatePause + * @apiGroup Pauses + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 201 Created + * { + * "id": 1 + * "name": "BACKOFFICE" + * "description": "BACKOFFICE Pause" + * } + */ +router.post('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.create); + +/** + * @api {delete} /api/users/:id Update pause details. + * + * @apiParam (Params) {Number} id Pause unique ID. + * @apiParam (Body) {String} name Pause name. + * @apiParam (Body) {String} [description] Pause description. + * + * @apiVersion 0.0.143 + * @apiName UpdatePause + * @apiGroup Pauses + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "BACKOFFICE" + * "description": "BACKOFFICE Pause" + * } + */ +router.put('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.update); + +/** + * @api {delete} /api/pauses/ Bulk Delete pauses. + * + * @apiParam (Query) {Number[]} ids Pauses unique ID array. + * + * @apiVersion 0.0.143 + * @apiName BulkDeletePauses + * @apiGroup Pauses + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.bulkDestroy); + +/** + * @api {delete} /api/telephones/:id Delete pause. + * + * @apiParam {Number} id Pause unique ID. + * + * @apiVersion 0.0.143 + * @apiName DeletePause + * @apiGroup Pauses + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/pause/pause.controller.js b/server/api/pause/pause.controller.js index 6d9d33c..d33093a 100644 --- a/server/api/pause/pause.controller.js +++ b/server/api/pause/pause.controller.js @@ -1 +1,150 @@ -var _0x5a81=["\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","\x50\x61\x75\x73\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64\x73","\x6C\x69\x6D\x69\x74","\x6F\x66\x66\x73\x65\x74","\x6F\x72\x64\x65\x72","\x77\x68\x65\x72\x65","\x25","\x66\x6F\x72\x45\x61\x63\x68"];_0x5a81[0];var _=require(_0x5a81[1]);var Util=require(_0x5a81[2]);var Pause=require(_0x5a81[4])[_0x5a81[3]];function handleError(_0xf5bbx5,_0xf5bbx6){_0xf5bbx6= _0xf5bbx6|| 500;return function(_0xf5bbx7){_0xf5bbx5[_0x5a81[6]](_0xf5bbx6)[_0x5a81[5]](_0xf5bbx7)}}function responseWithResult(_0xf5bbx5,_0xf5bbx6){_0xf5bbx6= _0xf5bbx6|| 200;return function(_0xf5bbx9){if(_0xf5bbx9){_0xf5bbx5[_0x5a81[6]](_0xf5bbx6)[_0x5a81[7]](_0xf5bbx9)}}}function handleEntityNotFound(_0xf5bbx5){return function(_0xf5bbx9){if(!_0xf5bbx9){_0xf5bbx5[_0x5a81[6]](404)[_0x5a81[8]]();return null};return _0xf5bbx9}}function saveUpdates(_0xf5bbxc){return function(_0xf5bbx9){return _0xf5bbx9[_0x5a81[10]](_0xf5bbxc)[_0x5a81[9]](function(_0xf5bbxd){return _0xf5bbxd})}}function removeEntity(_0xf5bbx5){return function(_0xf5bbx9){if(_0xf5bbx9){return _0xf5bbx9[_0x5a81[11]]()[_0x5a81[9]](function(){_0xf5bbx5[_0x5a81[6]](204)[_0x5a81[8]]()})}}}exports[_0x5a81[12]]= function(_0xf5bbxf,_0xf5bbx5){return Pause[_0x5a81[16]](Util[_0x5a81[15]](_0xf5bbxf[_0x5a81[14]]))[_0x5a81[9]](function(_0xf5bbx10){_0xf5bbx5[_0x5a81[6]](200)[_0x5a81[5]](_0xf5bbx10)})[_0x5a81[13]](function(_0xf5bbx7){return handleError(_0xf5bbx5,_0xf5bbx7)})};exports[_0x5a81[17]]= function(_0xf5bbxf,_0xf5bbx5){return Pause[_0x5a81[20]](_0xf5bbxf[_0x5a81[19]][_0x5a81[18]])[_0x5a81[9]](handleEntityNotFound(_0xf5bbx5))[_0x5a81[9]](responseWithResult(_0xf5bbx5))[_0x5a81[13]](handleError(_0xf5bbx5))};exports[_0x5a81[21]]= function(_0xf5bbxf,_0xf5bbx5){return Pause[_0x5a81[21]](_0xf5bbxf[_0x5a81[22]])[_0x5a81[9]](responseWithResult(_0xf5bbx5,201))[_0x5a81[13]](handleError(_0xf5bbx5))};exports[_0x5a81[23]]= function(_0xf5bbxf,_0xf5bbx5){if(_0xf5bbxf[_0x5a81[22]][_0x5a81[18]]){delete _0xf5bbxf[_0x5a81[22]][_0x5a81[18]]};return Pause[_0x5a81[20]](_0xf5bbxf[_0x5a81[19]][_0x5a81[18]])[_0x5a81[9]](handleEntityNotFound(_0xf5bbx5))[_0x5a81[9]](saveUpdates(_0xf5bbxf[_0x5a81[22]]))[_0x5a81[9]](responseWithResult(_0xf5bbx5))[_0x5a81[13]](handleError(_0xf5bbx5))};exports[_0x5a81[11]]= function(_0xf5bbxf,_0xf5bbx5){return Pause[_0x5a81[20]](_0xf5bbxf[_0x5a81[19]][_0x5a81[18]])[_0x5a81[9]](handleEntityNotFound(_0xf5bbx5))[_0x5a81[9]](removeEntity(_0xf5bbx5))[_0x5a81[13]](handleError(_0xf5bbx5))};exports[_0x5a81[24]]= function(_0xf5bbxf,_0xf5bbx5){return Pause[_0x5a81[11]]({where:{id:_0xf5bbxf[_0x5a81[14]][_0x5a81[26]]},individualHooks:true})[_0x5a81[9]](function(){return _0xf5bbx5[_0x5a81[25]](204)})[_0x5a81[13]](function(_0xf5bbx7){return handleError(_0xf5bbx5,_0xf5bbx7)})};function getQuery(_0xf5bbx12){var _0xf5bbx13={where:{}};_[_0x5a81[32]](_0xf5bbx12,function(_0xf5bbx14,_0xf5bbx15){switch(_0xf5bbx15){case _0x5a81[27]:;case _0x5a81[28]:;case _0x5a81[29]:_0xf5bbx13[_0xf5bbx15]= _0xf5bbx14;break;default:_0xf5bbx13[_0x5a81[30]][_0xf5bbx15]= {$like:_0x5a81[31]+ _0xf5bbx14+ _0x5a81[31]}}});return _0xf5bbx13} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/pauses -> index + * POST /api/pauses -> create + * GET /api/pauses/:id -> show + * PUT /api/pauses/:id -> update + * DELETE /api/pauses/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var Pause = require('../../models').Pause; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of Pauses +exports.index = function(req, res) { + return Pause + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Gets a single Pause from the DB +exports.show = function(req, res) { + return Pause.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new Pause in the DB +exports.create = function(req, res) { + return Pause.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing Pause in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return Pause.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a Pause from the DB +exports.destroy = function(req, res) { + return Pause.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +// Deletes a agent from the DB. +exports.bulkDestroy = function(req, res) { + + return Pause + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function getQuery(query) { + var _query = { + where: {} + }; + + _.forEach(query, function(value, key) { + switch (key) { + case 'limit': + case 'offset': + case 'order': + _query[key] = value; + break; + default: + _query.where[key] = { + $like: '%' + value + '%' + }; + } + }); + + return _query; +} diff --git a/server/api/pause/pause.events.js b/server/api/pause/pause.events.js index f8a30f7..034b226 100644 --- a/server/api/pause/pause.events.js +++ b/server/api/pause/pause.events.js @@ -1 +1,36 @@ -var _0x3fc2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x50\x61\x75\x73\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x3fc2[0];const EventEmitter=require(_0x3fc2[1]);const Pause=require(_0x3fc2[3])[_0x3fc2[2]];var PauseEvents= new EventEmitter();PauseEvents[_0x3fc2[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x3fc2[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x3fc2[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x3fc2[6]};for(var e in events){var event=events[e];Pause[_0x3fc2[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x12adx8,_0x12adx9,_0x12adxa){PauseEvents[_0x3fc2[10]](event+ _0x3fc2[8]+ _0x12adx8[_0x3fc2[9]],_0x12adx8);PauseEvents[_0x3fc2[10]](event,_0x12adx8);_0x12adxa(null)}}module[_0x3fc2[11]]= PauseEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Pause = require('../../models').Pause; + +var PauseEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +PauseEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Pause.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + PauseEvents.emit(event + ':' + doc._id, doc); + PauseEvents.emit(event, doc); + done(null); + } +} + +module.exports = PauseEvents; diff --git a/server/api/pause/pause.socket.js b/server/api/pause/pause.socket.js index 21c60b3..c01be0c 100644 --- a/server/api/pause/pause.socket.js +++ b/server/api/pause/pause.socket.js @@ -1 +1,28 @@ -var _0xf9b8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x70\x61\x75\x73\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x70\x61\x75\x73\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xf9b8[0];const PauseEvents=require(_0xf9b8[1]);var events=[_0xf9b8[2],_0xf9b8[3]];exports[_0xf9b8[4]]= function(_0x5835x3){for(var _0x5835x4=0,_0x5835x5=events[_0xf9b8[5]];_0x5835x4< _0x5835x5;_0x5835x4++){var _0x5835x6=events[_0x5835x4];var _0x5835x7=createListener(_0xf9b8[6]+ _0x5835x6,_0x5835x3);PauseEvents[_0xf9b8[7]](_0x5835x6,_0x5835x7);_0x5835x3[_0xf9b8[7]](_0xf9b8[8],removeListener(_0x5835x6,_0x5835x7))}};function createListener(_0x5835x6,_0x5835x3){return function(_0x5835x9){_0x5835x3[_0xf9b8[9]](_0x5835x6,_0x5835x9)}}function removeListener(_0x5835x6,_0x5835x7){return function(){PauseEvents[_0xf9b8[10]](_0x5835x6,_0x5835x7)}} \ No newline at end of file +'use strict'; + +const PauseEvents = require('./pause.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('pause:' + event, socket); + + PauseEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + PauseEvents.removeListener(event, listener); + }; +} diff --git a/server/api/report_agent/index.js b/server/api/report_agent/index.js index 889a0b5..c0ded72 100644 --- a/server/api/report_agent/index.js +++ b/server/api/report_agent/index.js @@ -1 +1,13 @@ -var _0x9fe9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x61\x63\x74\x69\x76\x65\x2F\x63\x61\x6C\x6C\x73","\x61\x63\x74\x69\x76\x65\x43\x61\x6C\x6C\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0x9fe9[0];var express=require(_0x9fe9[1]);var controller=require(_0x9fe9[2]);var auth=require(_0x9fe9[3]);var router=express.Router();router[_0x9fe9[10]](_0x9fe9[4],auth[_0x9fe9[5]](),auth[_0x9fe9[8]]([17],[_0x9fe9[6],_0x9fe9[7]]),controller[_0x9fe9[9]]);router[_0x9fe9[10]](_0x9fe9[11],auth[_0x9fe9[5]](),auth[_0x9fe9[8]]([17],[_0x9fe9[6]]),controller[_0x9fe9[12]]);router[_0x9fe9[10]](_0x9fe9[13],auth[_0x9fe9[5]](),auth[_0x9fe9[8]]([17],[_0x9fe9[6],_0x9fe9[7]]),controller[_0x9fe9[14]]);module[_0x9fe9[15]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_agent.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([17], ['admin', 'agent']), controller.index); +router.get('/describe', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.describe); +router.get('/active/calls', auth.isAuthenticated(), auth.hasModule([17], ['admin', 'agent']), controller.activeCalls); + +module.exports = router; diff --git a/server/api/report_agent/report_agent.controller.js b/server/api/report_agent/report_agent.controller.js index 112ee67..4f27797 100644 --- a/server/api/report_agent/report_agent.controller.js +++ b/server/api/report_agent/report_agent.controller.js @@ -1 +1,107 @@ -var _0x221c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x72\x6F\x6C\x65","\x75\x73\x65\x72","\x61\x67\x65\x6E\x74","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x6E\x61\x6D\x65","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x72\x6F\x77\x73","\x6D\x61\x70","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x63\x74\x69\x76\x65\x43\x61\x6C\x6C\x73","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x6C\x65\x6E\x67\x74\x68","\x6D\x65\x72\x67\x65","\x61\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65"];_0x221c[0];var _=require(_0x221c[1]);var ReportAgent=require(_0x221c[3])[_0x221c[2]];var User=require(_0x221c[3])[_0x221c[4]];var VoiceQueue=require(_0x221c[3])[_0x221c[5]];var ReportAgentHistory=require(_0x221c[3])[_0x221c[7]][_0x221c[6]];var Util=require(_0x221c[8]);exports[_0x221c[9]]= function(_0x9732x7,_0x9732x8,_0x9732x9){var _0x9732xa={};if(_0x9732x7[_0x221c[11]][_0x221c[10]]=== _0x221c[12]){_0x9732xa[_0x221c[13]]= _0x9732x7[_0x221c[11]][_0x221c[14]]};return ReportAgent[_0x221c[21]](Util[_0x221c[20]](_0x9732x7[_0x221c[19]],_0x9732xa))[_0x221c[18]](function(_0x9732xc){return _0x9732x8[_0x221c[17]](200)[_0x221c[16]](_0x9732xc)})[_0x221c[15]](function(_0x9732xb){return handleError(_0x9732x8,_0x9732xb)})};function getVoiceQueues(_0x9732xe){return function(){switch(_0x9732xe[_0x221c[10]]){case _0x221c[11]:return User[_0x221c[26]](_0x9732xe[_0x221c[25]],{attributes:[_0x221c[25]]})[_0x221c[18]](Util[_0x221c[24]]())[_0x221c[18]](function(_0x9732xf){return _[_0x221c[23]](_0x9732xf[_0x221c[22]],_0x221c[14])});case _0x221c[12]:return User[_0x221c[26]](_0x9732xe[_0x221c[25]])[_0x221c[18]](function(_0x9732x10){return _0x9732x10[_0x221c[27]]({attributes:[_0x221c[14]]})})[_0x221c[18]](function(_0x9732xf){return _[_0x221c[23]](_0x9732xf,_0x221c[14])});default:return VoiceQueue[_0x221c[28]]()[_0x221c[18]](function(_0x9732x11){return {rows:_0x9732x11}})[_0x221c[18]](function(_0x9732xf){return _[_0x221c[23]](_0x9732xf[_0x221c[22]],_0x221c[14])})}}}exports[_0x221c[29]]= function(_0x9732x7,_0x9732x8){var _0x9732xa={};if(_0x9732x7[_0x221c[11]][_0x221c[10]]=== _0x221c[12]){_0x9732xa[_0x221c[13]]= _0x9732x7[_0x221c[11]][_0x221c[30]]};return Promise[_0x221c[33]]([])[_0x221c[18]](getVoiceQueues(_0x9732x7[_0x221c[11]]))[_0x221c[18]](function(_0x9732xf){return ReportAgent[_0x221c[28]](Util[_0x221c[20]](_0x9732x7[_0x221c[19]],_[_0x221c[32]](_0x9732xa,{agentcomplete:false,agentringnoanswer:false,agentdump:false})))})[_0x221c[18]](function(_0x9732x12){return _0x9732x8[_0x221c[17]](200)[_0x221c[16]]({rows:_0x9732x12,count:_0x9732x12[_0x221c[31]]})})[_0x221c[15]](function(_0x9732xb){return handleError(_0x9732x8,_0x9732xb)})};exports[_0x221c[34]]= function(_0x9732x7,_0x9732x8){return ReportAgentHistory[_0x221c[34]]()[_0x221c[18]](function(_0x9732x13){return _0x9732x8[_0x221c[17]](200)[_0x221c[16]](_0x9732x13)})[_0x221c[15]](function(_0x9732xb){return handleError(_0x9732x8,_0x9732xb)})};function handleError(_0x9732x8,_0x9732xb){return _0x9732x8[_0x221c[17]](500)[_0x221c[16]](_0x9732xb)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var ReportAgent = require('../../models').ReportAgent; +var User = require('../../models').User; +var VoiceQueue = require('../../models').VoiceQueue; +var ReportAgentHistory = require('../../models').history.ReportAgentHistory; +var Util = require('../../config/util'); + +// Get list of report_agents +exports.index = function(req, res, next) { + var where = {}; + if (req.user.role === 'agent') { + where.membername = req.user.name; + } + return ReportAgent + .findAndCountAll(Util.getQuery(req.query, where)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function getVoiceQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(Util.getVoiceQueuesIdByUser()) + .then(function(userQueues) { + return _.map(userQueues.rows, 'name'); + }); + case 'agent': + return User + .findById(user.id) + .then(function(agent) { + return agent + .getVoiceQueues({ + attributes: ['name'] + }); + }) + .then(function(userQueues) { + return _.map(userQueues, 'name'); + }); + default: + return VoiceQueue + .findAll() + .then(function(queues) { + return { + rows: queues + }; + }) + .then(function(userQueues) { + return _.map(userQueues.rows, 'name'); + }); + } + } +} + +// Get active Calls +exports.activeCalls = function(req, res) { + var where = {}; + if (req.user.role === 'agent') { + where.membername = req.user.fullname; + } + return Promise + .all([]) + .then(getVoiceQueues(req.user)) + .then(function(userQueues) { + return ReportAgent + .findAll(Util.getQuery(req.query, _.merge(where, { + agentcomplete: false, + agentringnoanswer: false, + agentdump: false + }))); + }) + .then(function(data) { + return res.status(200).send({ + rows: data, + count: data.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get list of fields +exports.describe = function(req, res) { + return ReportAgentHistory + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/report_agent/report_agent.events.js b/server/api/report_agent/report_agent.events.js index 8ff2e87..4a38996 100644 --- a/server/api/report_agent/report_agent.events.js +++ b/server/api/report_agent/report_agent.events.js @@ -1 +1,36 @@ -var _0xbe17=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xbe17[0];const EventEmitter=require(_0xbe17[1]);const ReportAgent=require(_0xbe17[3])[_0xbe17[2]];var ReportAgentEvents= new EventEmitter();ReportAgentEvents[_0xbe17[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xbe17[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xbe17[6],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xbe17[7]};for(var e in events){var event=events[e];ReportAgent[_0xbe17[8]](e,emitEvent(event))};function emitEvent(event){return function(_0x9729x8,_0x9729x9,_0x9729xa){ReportAgentEvents[_0xbe17[11]](event+ _0xbe17[9]+ _0x9729x8[_0xbe17[10]],_0x9729x8);ReportAgentEvents[_0xbe17[11]](event,_0x9729x8);_0x9729xa(null)}}module[_0xbe17[12]]= ReportAgentEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportAgent = require('../../models').ReportAgent; + +var ReportAgentEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportAgentEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'update', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportAgent.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportAgentEvents.emit(event + ':' + doc._id, doc); + ReportAgentEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportAgentEvents; diff --git a/server/api/report_agent/report_agent.socket.js b/server/api/report_agent/report_agent.socket.js index 99c0911..27b95f5 100644 --- a/server/api/report_agent/report_agent.socket.js +++ b/server/api/report_agent/report_agent.socket.js @@ -1 +1,30 @@ -var _0xb708=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x6E\x61\x6D\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xb708[0];const ReportAgentEvents=require(_0xb708[1]);var events=[_0xb708[2],_0xb708[3],_0xb708[4]];exports[_0xb708[5]]= function(_0x6f2ax3){for(var _0x6f2ax4=0,_0x6f2ax5=events[_0xb708[6]];_0x6f2ax4< _0x6f2ax5;_0x6f2ax4++){var _0x6f2ax6=events[_0x6f2ax4];var _0x6f2ax7=createListener(_0xb708[7]+ _0x6f2ax6,_0x6f2ax3);ReportAgentEvents[_0xb708[8]](_0x6f2ax6,_0x6f2ax7);_0x6f2ax3[_0xb708[8]](_0xb708[9],removeListener(_0x6f2ax6,_0x6f2ax7))}};function createListener(_0x6f2ax6,_0x6f2ax3){return function(_0x6f2ax9){if(_0x6f2ax3[_0xb708[10]]=== _0x6f2ax9[_0xb708[11]]|| _0x6f2ax3[_0xb708[12]]=== _0xb708[13]){_0x6f2ax3[_0xb708[14]](_0x6f2ax6,_0x6f2ax9)}}}function removeListener(_0x6f2ax6,_0x6f2ax7){return function(){ReportAgentEvents[_0xb708[15]](_0x6f2ax6,_0x6f2ax7)}} \ No newline at end of file +'use strict'; + +const ReportAgentEvents = require('./report_agent.events'); + +// Model events to emit +var events = ['save', 'update', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_agent:' + event, socket); + + ReportAgentEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + if (socket.name === doc.membername || socket.role === 'admin') { + socket.emit(event, doc); + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportAgentEvents.removeListener(event, listener); + }; +} diff --git a/server/api/report_call/index.js b/server/api/report_call/index.js index 55c4a2b..65350f2 100644 --- a/server/api/report_call/index.js +++ b/server/api/report_call/index.js @@ -1 +1,19 @@ -var _0x69ac=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x6D\x61\x6E\x75\x61\x6C\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x61\x67\x65\x6E\x74","\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64","\x2F\x6D\x61\x6E\x75\x61\x6C\x6F\x75\x74\x62\x6F\x75\x6E\x64\x67\x6C\x6F\x62\x61\x6C\x64\x75\x72\x61\x74\x69\x6F\x6E","\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64\x47\x6C\x6F\x62\x61\x6C\x44\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x6D\x61\x6E\x75\x61\x6C\x6F\x75\x74\x62\x6F\x75\x6E\x64\x61\x76\x67\x64\x75\x72\x61\x74\x69\x6F\x6E","\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64\x41\x76\x67\x44\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x6D\x61\x6E\x75\x61\x6C\x6F\x75\x74\x62\x6F\x75\x6E\x64\x61\x6E\x73\x77\x65\x72\x65\x64","\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64\x41\x6E\x73\x77\x65\x72\x65\x64","\x2F\x6D\x61\x6E\x75\x61\x6C\x6F\x75\x74\x62\x6F\x75\x6E\x64\x61\x6E\x73\x77\x65\x72\x72\x61\x74\x65","\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64\x41\x6E\x73\x77\x65\x72\x52\x61\x74\x65","\x2F\x3A\x75\x6E\x69\x71\x75\x65\x69\x64","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x69ac[0];var express=require(_0x69ac[1]);var auth=require(_0x69ac[2]);var controller=require(_0x69ac[3]);var router=express.Router();router[_0x69ac[9]](_0x69ac[4],auth[_0x69ac[5]](),auth[_0x69ac[7]]([17],[_0x69ac[6]]),controller[_0x69ac[8]]);router[_0x69ac[9]](_0x69ac[10],auth[_0x69ac[5]](),auth[_0x69ac[7]]([17],[_0x69ac[6]]),controller[_0x69ac[11]]);router[_0x69ac[9]](_0x69ac[12],auth[_0x69ac[5]](),auth[_0x69ac[7]]([1],[_0x69ac[6],_0x69ac[13]]),controller[_0x69ac[14]]);router[_0x69ac[9]](_0x69ac[15],auth[_0x69ac[5]](),auth[_0x69ac[7]]([1],[_0x69ac[6],_0x69ac[13]]),controller[_0x69ac[16]]);router[_0x69ac[9]](_0x69ac[17],auth[_0x69ac[5]](),auth[_0x69ac[7]]([1],[_0x69ac[6],_0x69ac[13]]),controller[_0x69ac[18]]);router[_0x69ac[9]](_0x69ac[19],auth[_0x69ac[5]](),auth[_0x69ac[7]]([1],[_0x69ac[6],_0x69ac[13]]),controller[_0x69ac[20]]);router[_0x69ac[9]](_0x69ac[21],auth[_0x69ac[5]](),auth[_0x69ac[7]]([1],[_0x69ac[6],_0x69ac[13]]),controller[_0x69ac[22]]);router[_0x69ac[25]](_0x69ac[23],auth[_0x69ac[5]](),auth[_0x69ac[7]]([1],[_0x69ac[6],_0x69ac[13]]),controller[_0x69ac[24]]);module[_0x69ac[26]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./report_call.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.index); +router.get('/describe', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.describe); +router.get('/manualoutbound', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.manualOutbound); +router.get('/manualoutboundglobalduration', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.manualOutboundGlobalDuration); +router.get('/manualoutboundavgduration', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.manualOutboundAvgDuration); +router.get('/manualoutboundanswered', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.manualOutboundAnswered); +router.get('/manualoutboundanswerrate', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.manualOutboundAnswerRate); +router.put('/:uniqueid', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.update); + + +module.exports = router; diff --git a/server/api/report_call/report_call.controller.js b/server/api/report_call/report_call.controller.js index a67a4ee..9ba5632 100644 --- a/server/api/report_call/report_call.controller.js +++ b/server/api/report_call/report_call.controller.js @@ -1 +1,176 @@ -var _0x4f3a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6C\x6F\x67","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x75\x70\x64\x61\x74\x65","\x69\x64","\x62\x6F\x64\x79","\x75\x6E\x69\x71\x75\x65\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x4F\x6E\x65","\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x63\x6F\x75\x6E\x74","\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64\x47\x6C\x6F\x62\x61\x6C\x44\x75\x72\x61\x74\x69\x6F\x6E","\x76\x61\x6C\x75\x65","\x53\x45\x4C\x45\x43\x54\x20\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x53\x55\x4D\x28\x64\x75\x72\x61\x74\x69\x6F\x6E\x29\x29\x20\x61\x73\x20\x76\x61\x6C\x75\x65\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x20\x57\x48\x45\x52\x45\x20\x74\x79\x70\x65\x3D\x22\x6F\x75\x74\x62\x6F\x75\x6E\x64\x22","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64\x41\x76\x67\x44\x75\x72\x61\x74\x69\x6F\x6E","\x53\x45\x4C\x45\x43\x54\x20\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x64\x75\x72\x61\x74\x69\x6F\x6E\x29\x2C\x20\x30\x29\x29\x20\x61\x73\x20\x76\x61\x6C\x75\x65\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x20\x57\x48\x45\x52\x45\x20\x74\x79\x70\x65\x3D\x22\x6F\x75\x74\x62\x6F\x75\x6E\x64\x22","\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64\x41\x6E\x73\x77\x65\x72\x65\x64","\x41\x4E\x53\x57\x45\x52\x45\x44","\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64\x41\x6E\x73\x77\x65\x72\x52\x61\x74\x65","\x53\x45\x4C\x45\x43\x54\x20\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x49\x46\x28\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3D\x22\x41\x4E\x53\x57\x45\x52\x45\x44\x22\x2C\x20\x31\x2C\x20\x30\x29\x29\x20\x2F\x20\x43\x4F\x55\x4E\x54\x28\x2A\x29\x20\x2A\x20\x31\x30\x30\x2C\x20\x31\x29\x20\x61\x73\x20\x76\x61\x6C\x75\x65\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x20\x57\x48\x45\x52\x45\x20\x74\x79\x70\x65\x3D\x22\x6F\x75\x74\x62\x6F\x75\x6E\x64\x22","\x64\x65\x73\x63\x72\x69\x62\x65"];_0x4f3a[0];var _=require(_0x4f3a[1]);var sequelize=require(_0x4f3a[3])[_0x4f3a[2]];var ReportCall=require(_0x4f3a[3])[_0x4f3a[4]];var ReportCallHistory=require(_0x4f3a[3])[_0x4f3a[6]][_0x4f3a[5]];var Util=require(_0x4f3a[7]);function handleError(_0xc74ex7,_0xc74ex8){_0xc74ex8= _0xc74ex8|| 500;return function(_0xc74ex9){console[_0x4f3a[8]](_0xc74ex9);_0xc74ex7[_0x4f3a[10]](_0xc74ex8)[_0x4f3a[9]](_0xc74ex9)}}function responseWithResult(_0xc74ex7,_0xc74ex8){_0xc74ex8= _0xc74ex8|| 200;return function(_0xc74exb){if(_0xc74exb){_0xc74ex7[_0x4f3a[10]](_0xc74ex8)[_0x4f3a[11]](_0xc74exb)}}}function handleEntityNotFound(_0xc74ex7){return function(_0xc74exb){if(!_0xc74exb){_0xc74ex7[_0x4f3a[10]](404)[_0x4f3a[12]]();return null};return _0xc74exb}}function saveUpdates(_0xc74exe){return function(_0xc74exb){return _0xc74exb[_0x4f3a[14]](_0xc74exe)[_0x4f3a[13]](function(_0xc74exf){return _0xc74exf})}}function removeEntity(_0xc74ex7){return function(_0xc74exb){if(_0xc74exb){return _0xc74exb[_0x4f3a[15]]()[_0x4f3a[13]](function(){_0xc74ex7[_0x4f3a[10]](204)[_0x4f3a[12]]()})}}}exports[_0x4f3a[16]]= function(_0xc74ex11,_0xc74ex7,_0xc74ex12){return ReportCall[_0x4f3a[20]](Util[_0x4f3a[19]](_0xc74ex11[_0x4f3a[18]]))[_0x4f3a[13]](function(_0xc74ex13){return _0xc74ex7[_0x4f3a[10]](200)[_0x4f3a[9]](_0xc74ex13)})[_0x4f3a[17]](handleError(_0xc74ex7))};exports[_0x4f3a[21]]= function(_0xc74ex11,_0xc74ex7){if(_0xc74ex11[_0x4f3a[23]][_0x4f3a[22]]){delete _0xc74ex11[_0x4f3a[23]][_0x4f3a[22]]};return ReportCall[_0x4f3a[26]]({where:{uniqueid:_0xc74ex11[_0x4f3a[25]][_0x4f3a[24]]}})[_0x4f3a[13]](handleEntityNotFound(_0xc74ex7))[_0x4f3a[13]](saveUpdates(_0xc74ex11[_0x4f3a[23]]))[_0x4f3a[13]](responseWithResult(_0xc74ex7))[_0x4f3a[17]](handleError(_0xc74ex7))};exports[_0x4f3a[27]]= function(_0xc74ex11,_0xc74ex7){return ReportCall[_0x4f3a[29]]({where:{type:_0x4f3a[28]}})[_0x4f3a[13]](function(_0xc74ex14){return _0xc74ex7[_0x4f3a[10]](200)[_0x4f3a[9]]({value:_0xc74ex14})})[_0x4f3a[17]](handleError(_0xc74ex7))};exports[_0x4f3a[30]]= function(_0xc74ex11,_0xc74ex7){return sequelize[_0x4f3a[18]](_0x4f3a[32],{type:sequelize[_0x4f3a[34]][_0x4f3a[33]]})[_0x4f3a[13]](function(_0xc74ex14){return _0xc74ex7[_0x4f3a[10]](200)[_0x4f3a[9]]({value:_0xc74ex14[0][_0x4f3a[31]]})})[_0x4f3a[17]](handleError(_0xc74ex7))};exports[_0x4f3a[35]]= function(_0xc74ex11,_0xc74ex7){return sequelize[_0x4f3a[18]](_0x4f3a[36],{type:sequelize[_0x4f3a[34]][_0x4f3a[33]]})[_0x4f3a[13]](function(_0xc74ex14){return _0xc74ex7[_0x4f3a[10]](200)[_0x4f3a[9]]({value:_0xc74ex14[0][_0x4f3a[31]]})})[_0x4f3a[17]](handleError(_0xc74ex7))};exports[_0x4f3a[37]]= function(_0xc74ex11,_0xc74ex7){return ReportCall[_0x4f3a[29]]({where:{disposition:_0x4f3a[38],type:_0x4f3a[28]}})[_0x4f3a[13]](function(_0xc74ex14){return _0xc74ex7[_0x4f3a[10]](200)[_0x4f3a[9]]({value:_0xc74ex14})})[_0x4f3a[17]](handleError(_0xc74ex7))};exports[_0x4f3a[39]]= function(_0xc74ex11,_0xc74ex7){return sequelize[_0x4f3a[18]](_0x4f3a[40],{type:sequelize[_0x4f3a[34]][_0x4f3a[33]]})[_0x4f3a[13]](function(_0xc74ex14){return _0xc74ex7[_0x4f3a[10]](200)[_0x4f3a[9]]({value:_0xc74ex14[0][_0x4f3a[31]]})})[_0x4f3a[17]](handleError(_0xc74ex7))};exports[_0x4f3a[41]]= function(_0xc74ex11,_0xc74ex7){return ReportCallHistory[_0x4f3a[41]]()[_0x4f3a[13]](function(_0xc74ex15){return _0xc74ex7[_0x4f3a[10]](200)[_0x4f3a[9]](_0xc74ex15)})[_0x4f3a[17]](handleError(_0xc74ex7))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/report/calls -> index + * POST /api/report/calls -> create + * GET /api/report/calls/:id -> show + * PUT /api/report/calls/:id -> update + * DELETE /api/report/calls/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); + +var sequelize = require('../../models').sequelize; +var ReportCall = require('../../models').ReportCall; +var ReportCallHistory = require('../../models').history.ReportCallHistory; +var Util = require('../../config/util'); + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + console.log(err); + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity + .destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of ReportCalls +exports.index = function(req, res, next) { + return ReportCall + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(handleError(res)); +}; + +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return ReportCall.findOne({ + where: { + uniqueid: req.params.uniqueid + } + }) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Get Answered Calls +exports.manualOutbound = function(req, res) { + return ReportCall + .count({ + where: { + type: 'outbound' + } + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(handleError(res)); +}; + +// Get Answered Calls +exports.manualOutboundGlobalDuration = function(req, res) { + return sequelize + .query('SELECT SEC_TO_TIME(SUM(duration)) as value FROM report_call WHERE type=\"outbound\"', { + type: sequelize.QueryTypes.SELECT + }) + .then(function(data) { + return res.status(200).send({ + value: data[0].value + }); + }) + .catch(handleError(res)); +}; + +// Get Answered Calls +exports.manualOutboundAvgDuration = function(req, res) { + return sequelize + .query('SELECT SEC_TO_TIME(ROUND(AVG(duration), 0)) as value FROM report_call WHERE type=\"outbound\"', { + type: sequelize.QueryTypes.SELECT + }) + .then(function(data) { + return res.status(200).send({ + value: data[0].value + }); + }) + .catch(handleError(res)); +}; + +// Get Answered Calls +exports.manualOutboundAnswered = function(req, res) { + return ReportCall + .count({ + where: { + disposition: 'ANSWERED', + type: 'outbound' + } + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(handleError(res)); +}; + +// Get Answered Calls +exports.manualOutboundAnswerRate = function(req, res) { + return sequelize + .query('SELECT ROUND(SUM(IF(disposition=\"ANSWERED\", 1, 0)) / COUNT(*) * 100, 1) as value FROM report_call WHERE type=\"outbound\"', { + type: sequelize.QueryTypes.SELECT + }) + .then(function(data) { + return res.status(200).send({ + value: data[0].value + }); + }) + .catch(handleError(res)); +}; + +// Get list of fields +exports.describe = function(req, res) { + return ReportCallHistory + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(handleError(res)); +}; diff --git a/server/api/report_call/report_call.events.js b/server/api/report_call/report_call.events.js index 4ec1af8..6ee64f5 100644 --- a/server/api/report_call/report_call.events.js +++ b/server/api/report_call/report_call.events.js @@ -1 +1,36 @@ -var _0x68a5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x68a5[0];const EventEmitter=require(_0x68a5[1]);const ReportCall=require(_0x68a5[3])[_0x68a5[2]];var ReportCallEvents= new EventEmitter();ReportCallEvents[_0x68a5[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x68a5[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x68a5[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x68a5[6]};for(var e in events){var event=events[e];ReportCall[_0x68a5[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x5c6dx8,_0x5c6dx9,_0x5c6dxa){ReportCallEvents[_0x68a5[10]](event+ _0x68a5[8]+ _0x5c6dx8[_0x68a5[9]],_0x5c6dx8);ReportCallEvents[_0x68a5[10]](event,_0x5c6dx8);_0x5c6dxa(null)}}module[_0x68a5[11]]= ReportCallEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportCall = require('../../models').ReportCall; + +var ReportCallEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportCallEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportCall.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportCallEvents.emit(event + ':' + doc._id, doc); + ReportCallEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportCallEvents; diff --git a/server/api/report_call/report_call.socket.js b/server/api/report_call/report_call.socket.js index 2b05a53..b76cd89 100644 --- a/server/api/report_call/report_call.socket.js +++ b/server/api/report_call/report_call.socket.js @@ -1 +1,28 @@ -var _0xb25a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xb25a[0];const ReportCallEvents=require(_0xb25a[1]);var events=[_0xb25a[2],_0xb25a[3]];exports[_0xb25a[4]]= function(_0x32c8x3){for(var _0x32c8x4=0,_0x32c8x5=events[_0xb25a[5]];_0x32c8x4< _0x32c8x5;_0x32c8x4++){var _0x32c8x6=events[_0x32c8x4];var _0x32c8x7=createListener(_0xb25a[6]+ _0x32c8x6,_0x32c8x3);ReportCallEvents[_0xb25a[7]](_0x32c8x6,_0x32c8x7);_0x32c8x3[_0xb25a[7]](_0xb25a[8],removeListener(_0x32c8x6,_0x32c8x7))}};function createListener(_0x32c8x6,_0x32c8x3){return function(_0x32c8x9){_0x32c8x3[_0xb25a[9]](_0x32c8x6,_0x32c8x9)}}function removeListener(_0x32c8x6,_0x32c8x7){return function(){ReportCallEvents[_0xb25a[10]](_0x32c8x6,_0x32c8x7)}} \ No newline at end of file +'use strict'; + +const ReportCallEvents = require('./report_call.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_call:' + event, socket); + + ReportCallEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ReportCallEvents.removeListener(event, listener); + }; +} diff --git a/server/api/report_chat/index.js b/server/api/report_chat/index.js index 3edcb63..b49820f 100644 --- a/server/api/report_chat/index.js +++ b/server/api/report_chat/index.js @@ -1 +1,14 @@ -var _0xf229=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x43\x68\x61\x74","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x61\x63\x63\x65\x70\x74\x2F\x3A\x75\x6E\x69\x71\x75\x65\x69\x64","\x68\x61\x73\x52\x6F\x6C\x65","\x61\x63\x63\x65\x70\x74","\x2F\x3A\x69\x64\x2F\x72\x65\x6A\x65\x63\x74","\x72\x65\x6A\x65\x63\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xf229[0];var express=require(_0xf229[1]);var controller=require(_0xf229[2]);var auth=require(_0xf229[3]);var license=require(_0xf229[4]);var router=express.Router();router[_0xf229[12]](_0xf229[5],auth[_0xf229[6]](),license[_0xf229[7]](),auth[_0xf229[10]]([17],[_0xf229[8],_0xf229[9]]),controller[_0xf229[11]]);router[_0xf229[12]](_0xf229[13],auth[_0xf229[6]](),license[_0xf229[7]](),auth[_0xf229[14]](_0xf229[9]),controller[_0xf229[15]]);router[_0xf229[12]](_0xf229[16],auth[_0xf229[6]](),license[_0xf229[7]](),auth[_0xf229[14]](_0xf229[9]),controller[_0xf229[17]]);module[_0xf229[18]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_chat.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasChat(), auth.hasModule([17], ['admin', 'agent']), controller.index); +router.get('/:id/accept/:uniqueid', auth.isAuthenticated(), license.hasChat(), auth.hasRole('agent'), controller.accept); +router.get('/:id/reject', auth.isAuthenticated(), license.hasChat(), auth.hasRole('agent'), controller.reject); + +module.exports = router; diff --git a/server/api/report_chat/report_chat.controller.js b/server/api/report_chat/report_chat.controller.js index c54f12b..f45b278 100644 --- a/server/api/report_chat/report_chat.controller.js +++ b/server/api/report_chat/report_chat.controller.js @@ -1 +1,163 @@ -var _0x2666=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x64\x35","\x6D\x6F\x6D\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x55\x73\x65\x72","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x61\x63\x63\x65\x70\x74","\x2E","\x73\x70\x6C\x69\x74","\x75\x6E\x69\x71\x75\x65\x69\x64","\x70\x61\x72\x61\x6D\x73","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x61\x63\x63\x65\x70\x74\x65\x64","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x62\x61\x73\x65\x36\x34","\x69\x64","\x75\x73\x65\x72","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x4F\x50\x45\x4E","\x75\x70\x64\x61\x74\x65","\x61\x64\x64\x55\x73\x65\x72","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6A\x65\x63\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74"];_0x2666[0];var _=require(_0x2666[1]);var md5=require(_0x2666[2]);var moment=require(_0x2666[3]);var ReportChat=require(_0x2666[5])[_0x2666[4]];var ChatRoom=require(_0x2666[5])[_0x2666[6]];var ChatVisitor=require(_0x2666[5])[_0x2666[7]];var Agent=require(_0x2666[5])[_0x2666[8]];var sequelize=require(_0x2666[5])[_0x2666[9]];var Util=require(_0x2666[10]);exports[_0x2666[11]]= function(_0x3d10xa,_0x3d10xb,_0x3d10xc){return ReportChat[_0x2666[18]](Util[_0x2666[17]](_0x3d10xa[_0x2666[16]]))[_0x2666[15]](function(_0x3d10xe){_0x3d10xb[_0x2666[14]](200)[_0x2666[13]](_0x3d10xe)})[_0x2666[12]](function(_0x3d10xd){return handleError(_0x3d10xb,_0x3d10xd)})};exports[_0x2666[19]]= function(_0x3d10xa,_0x3d10xb){var _0x3d10xf=_0x3d10xa[_0x2666[23]][_0x2666[22]][_0x2666[21]](_0x2666[20])[1];var _0x3d10x10;return ReportChat[_0x2666[28]](_0x3d10xa[_0x2666[23]][_0x2666[30]])[_0x2666[15]](function(_0x3d10x14){if(!_0x3d10x14){return _0x3d10xb[_0x2666[24]](404)};var _0x3d10x12=_[_0x2666[26]](_0x3d10x14,{connectid:_0x3d10xa[_0x2666[23]][_0x2666[22]]});return _0x3d10x12[_0x2666[27]]()})[_0x2666[15]](function(){return ChatRoom[_0x2666[28]](_0x3d10xf)})[_0x2666[15]](function(_0x3d10x13){_0x3d10x10= _0x3d10x13;return _0x3d10x10[_0x2666[35]](_0x3d10xa[_0x2666[31]][_0x2666[30]],{individualHooks:true})})[_0x2666[15]](function(){return _0x3d10x10[_0x2666[34]]({token:md5(JSON[_0x2666[32]]([_0x3d10xa[_0x2666[31]][_0x2666[30]]])).toString(_0x2666[29]),status:_0x2666[33]})})[_0x2666[15]](function(){return ChatVisitor[_0x2666[28]](_0x3d10x10.ChatVisitorId)})[_0x2666[15]](function(_0x3d10x11){if(!_0x3d10x11){return _0x3d10xb[_0x2666[24]](404)};var _0x3d10x12=_[_0x2666[26]](_0x3d10x11,{status:_0x2666[25]});return _0x3d10x12[_0x2666[27]]()})[_0x2666[15]](function(){return _0x3d10xb[_0x2666[24]](200)})[_0x2666[12]](sequelize.UniqueConstraintError,function(_0x3d10xd){return _0x3d10xb[_0x2666[24]](504)})[_0x2666[12]](function(_0x3d10xd){return handleError(_0x3d10xb,_0x3d10xd)})};exports[_0x2666[36]]= function(_0x3d10xa,_0x3d10xb){return ReportChat[_0x2666[36]](_0x3d10xa[_0x2666[37]])[_0x2666[15]](function(_0x3d10x14){return _0x3d10xb[_0x2666[14]](201)[_0x2666[13]](_0x3d10x14)})[_0x2666[12]](function(_0x3d10xd){return handleError(_0x3d10xb,_0x3d10xd)})};exports[_0x2666[34]]= function(_0x3d10xa,_0x3d10xb,_0x3d10xc){if(_0x3d10xa[_0x2666[37]][_0x2666[30]]){delete _0x3d10xa[_0x2666[37]][_0x2666[30]]};return ReportChat[_0x2666[28]](_0x3d10xa[_0x2666[23]][_0x2666[30]])[_0x2666[15]](function(_0x3d10x14){if(!_0x3d10x14){return _0x3d10xb[_0x2666[24]](404)};var _0x3d10x12=_[_0x2666[26]](_0x3d10x14,_0x3d10xa[_0x2666[37]]);return _0x3d10x12[_0x2666[27]]()})[_0x2666[15]](function(_0x3d10x14){return _0x3d10xb[_0x2666[14]](200)[_0x2666[13]](_0x3d10x14)})[_0x2666[12]](sequelize.ValidationError,function(_0x3d10xd){return handleError(_0x3d10xb,_0x3d10xd)})[_0x2666[12]](function(_0x3d10xd){return handleError(_0x3d10xb,_0x3d10xd)})};exports[_0x2666[38]]= function(_0x3d10xa,_0x3d10xb){return ReportChat[_0x2666[28]](_0x3d10xa[_0x2666[23]][_0x2666[30]])[_0x2666[15]](function(_0x3d10x14){if(!_0x3d10x14){return _0x3d10xb[_0x2666[24]](404)};return _0x3d10x14[_0x2666[38]]()})[_0x2666[15]](function(){return _0x3d10xb[_0x2666[24]](204)})[_0x2666[12]](function(_0x3d10xd){return handleError(_0x3d10xb,_0x3d10xd)})};exports[_0x2666[39]]= function(_0x3d10xa,_0x3d10xb){return ReportChat[_0x2666[28]](_0x3d10xa[_0x2666[23]][_0x2666[30]])[_0x2666[15]](function(_0x3d10x14){if(!_0x3d10x14){return _0x3d10xb[_0x2666[24]](404)};var _0x3d10x12=_[_0x2666[26]](_0x3d10x14,{rejectedAt:moment()[_0x2666[41]](_0x2666[40])});return _0x3d10x12[_0x2666[27]]()})[_0x2666[15]](function(){return _0x3d10xb[_0x2666[24]](200)})[_0x2666[12]](function(_0x3d10xd){return handleError(_0x3d10xb,_0x3d10xd)})};function handleError(_0x3d10xb,_0x3d10xd){return _0x3d10xb[_0x2666[14]](500)[_0x2666[13]](_0x3d10xd)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var md5 = require('md5'); +var moment = require('moment'); + +var ReportChat = require('../../models').ReportChat; +var ChatRoom = require('../../models').ChatRoom; +var ChatVisitor = require('../../models').ChatVisitor; +var Agent = require('../../models').User; +var sequelize = require('../../models').sequelize; + +var Util = require('../../config/util'); + +// Get list of agents +exports.index = function(req, res, next) { + return ReportChat + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single reportMail +exports.accept = function(req, res) { + var _roomid = req.params.uniqueid.split('.')[1]; + var _chatRoom; + + return ReportChat + .findById(req.params.id) + .then(function(reportChat) { + if (!reportChat) { + return res.sendStatus(404); + } + var updated = _.merge(reportChat, { + connectid: req.params.uniqueid + }); + return updated.save(); + }) + .then(function() { + return ChatRoom + .findById(_roomid); + }) + .then(function(chatRoom) { + _chatRoom = chatRoom; + return _chatRoom + .addUser(req.user.id, { + individualHooks: true + }); + }) + .then(function() { + return _chatRoom + .update({ + token: md5(JSON.stringify([req.user.id])).toString('base64'), + status: 'OPEN' + }) + }) + .then(function() { + return ChatVisitor.findById(_chatRoom.ChatVisitorId); + }) + .then(function(chatVisitor) { + if (!chatVisitor) { + return res.sendStatus(404); + } + var updated = _.merge(chatVisitor, { + status: 'accepted' + }); + return updated.save(); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return res.sendStatus(504); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new reportChat in the DB. +exports.create = function(req, res) { + return ReportChat + .create(req.body) + .then(function(reportChat) { + return res.status(201).send(reportChat); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing reportChat in the DB. +exports.update = function(req, res, next) { + if (req.body.id) { + delete req.body.id; + } + + return ReportChat + .findById(req.params.id) + .then(function(reportChat) { + if (!reportChat) { + return res.sendStatus(404); + } + var updated = _.merge(reportChat, req.body); + return updated + .save(); + }) + .then(function(reportChat) { + return res.status(200).send(reportChat); + }) + .catch(sequelize.ValidationError, function(err) { + return handleError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a reportChat from the DB. +exports.destroy = function(req, res) { + return ReportChat + .findById(req.params.id) + .then(function(reportChat) { + if (!reportChat) { + return res.sendStatus(404); + } + return reportChat.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.reject = function(req, res) { + return ReportChat + .findById(req.params.id) + .then(function(reportChat) { + if (!reportChat) { + return res.sendStatus(404); + } + var updated = _.merge(reportChat, { + rejectedAt: moment().format("YYYY-MM-DD HH:mm:ss") + }); + return updated.save(); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/report_chat/report_chat.events.js b/server/api/report_chat/report_chat.events.js index 76c3951..dd23889 100644 --- a/server/api/report_chat/report_chat.events.js +++ b/server/api/report_chat/report_chat.events.js @@ -1 +1,36 @@ -var _0x5be4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x5be4[0];const EventEmitter=require(_0x5be4[1]);const ReportChat=require(_0x5be4[3])[_0x5be4[2]];var ReportChatEvents= new EventEmitter();ReportChatEvents[_0x5be4[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x5be4[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x5be4[6],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x5be4[7]};for(var e in events){var event=events[e];ReportChat[_0x5be4[8]](e,emitEvent(event))};function emitEvent(event){return function(_0x7b6bx8,_0x7b6bx9,_0x7b6bxa){ReportChatEvents[_0x5be4[11]](event+ _0x5be4[9]+ _0x7b6bx8[_0x5be4[10]],_0x7b6bx8);ReportChatEvents[_0x5be4[11]](event,_0x7b6bx8);_0x7b6bxa(null)}}module[_0x5be4[12]]= ReportChatEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportChat = require('../../models').ReportChat; + +var ReportChatEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportChatEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'update', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportChat.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportChatEvents.emit(event + ':' + doc._id, doc); + ReportChatEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportChatEvents; diff --git a/server/api/report_chat/report_chat.socket.js b/server/api/report_chat/report_chat.socket.js index d188ec1..092868e 100644 --- a/server/api/report_chat/report_chat.socket.js +++ b/server/api/report_chat/report_chat.socket.js @@ -1 +1,42 @@ -var _0x99cf=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x3A\x73\x61\x76\x65","\x6E\x61\x6D\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x3A\x75\x70\x64\x61\x74\x65","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x99cf[0];const ReportChatEvents=require(_0x99cf[1]);var events=[_0x99cf[2],_0x99cf[3]];exports[_0x99cf[4]]= function(_0xd9c3x3){for(var _0xd9c3x4=0,_0xd9c3x5=events[_0x99cf[5]];_0xd9c3x4< _0xd9c3x5;_0xd9c3x4++){var _0xd9c3x6=events[_0xd9c3x4];var _0xd9c3x7=createListener(_0x99cf[6]+ _0xd9c3x6,_0xd9c3x3);ReportChatEvents[_0x99cf[7]](_0xd9c3x6,_0xd9c3x7);_0xd9c3x3[_0x99cf[7]](_0x99cf[8],removeListener(_0xd9c3x6,_0xd9c3x7))}};function createListener(_0xd9c3x6,_0xd9c3x3){return function(_0xd9c3x9){switch(_0xd9c3x6){case _0x99cf[9]:;case _0x99cf[15]:if(_0xd9c3x3[_0x99cf[10]]=== _0xd9c3x9[_0x99cf[11]]|| _0xd9c3x3[_0x99cf[12]]=== _0x99cf[13]){_0xd9c3x3[_0x99cf[14]](_0xd9c3x6,_0xd9c3x9)};break;case _0x99cf[16]:_0xd9c3x3[_0x99cf[14]](_0xd9c3x6,_0xd9c3x9);break;default:}}}function removeListener(_0xd9c3x6,_0xd9c3x7){return function(){ReportChatEvents[_0x99cf[17]](_0xd9c3x6,_0xd9c3x7)}} \ No newline at end of file +'use strict'; + +const ReportChatEvents = require('./report_chat.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_chat:' + event, socket); + + ReportChatEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'report_chat:save': + case 'report_chat:update': + if (socket.name === doc.membername || socket.role === 'admin') { + socket.emit(event, doc); + } + break; + + case 'report_chat:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportChatEvents.removeListener(event, listener); + }; +} diff --git a/server/api/report_chat_session/index.js b/server/api/report_chat_session/index.js index e148684..a90e04c 100644 --- a/server/api/report_chat_session/index.js +++ b/server/api/report_chat_session/index.js @@ -1 +1,19 @@ -var _0xce95=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x43\x68\x61\x74","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x6F\x70\x65\x6E","\x6F\x70\x65\x6E","\x2F\x63\x6C\x6F\x73\x65\x64","\x63\x6C\x6F\x73\x65\x64","\x2F\x74\x69\x6D\x65\x6F\x75\x74","\x74\x69\x6D\x65\x6F\x75\x74","\x2F\x77\x61\x69\x74\x69\x6E\x67","\x77\x61\x69\x74\x69\x6E\x67","\x2F\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64","\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64","\x2F\x77\x61\x69\x74\x69\x6E\x67\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x61\x67\x65\x6E\x74","\x77\x61\x69\x74\x69\x6E\x67\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0xce95[0];var express=require(_0xce95[1]);var controller=require(_0xce95[2]);var auth=require(_0xce95[3]);var license=require(_0xce95[4]);var router=express.Router();router[_0xce95[12]](_0xce95[5],license[_0xce95[6]](),auth[_0xce95[7]](),license[_0xce95[8]](),auth[_0xce95[10]]([17],[_0xce95[9]]),controller[_0xce95[11]]);router[_0xce95[12]](_0xce95[13],license[_0xce95[6]](),auth[_0xce95[7]](),license[_0xce95[8]](),auth[_0xce95[10]]([17],[_0xce95[9]]),controller[_0xce95[14]]);router[_0xce95[12]](_0xce95[15],license[_0xce95[6]](),auth[_0xce95[7]](),license[_0xce95[8]](),auth[_0xce95[10]]([17],[_0xce95[9]]),controller[_0xce95[16]]);router[_0xce95[12]](_0xce95[17],license[_0xce95[6]](),auth[_0xce95[7]](),license[_0xce95[8]](),auth[_0xce95[10]]([17],[_0xce95[9]]),controller[_0xce95[18]]);router[_0xce95[12]](_0xce95[19],license[_0xce95[6]](),auth[_0xce95[7]](),license[_0xce95[8]](),auth[_0xce95[10]]([17],[_0xce95[9]]),controller[_0xce95[20]]);router[_0xce95[12]](_0xce95[21],license[_0xce95[6]](),auth[_0xce95[7]](),license[_0xce95[8]](),auth[_0xce95[10]]([17],[_0xce95[9]]),controller[_0xce95[22]]);router[_0xce95[12]](_0xce95[23],license[_0xce95[6]](),auth[_0xce95[7]](),license[_0xce95[8]](),auth[_0xce95[10]]([17],[_0xce95[9]]),controller[_0xce95[24]]);router[_0xce95[12]](_0xce95[25],license[_0xce95[6]](),auth[_0xce95[7]](),license[_0xce95[8]](),auth[_0xce95[10]]([8],[_0xce95[9],_0xce95[26]]),controller[_0xce95[27]]);module[_0xce95[28]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_chat_session.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), auth.isAuthenticated(), license.hasChat(), auth.hasModule([17], ['admin']), controller.index); +router.get('/describe', license.isValidDate(), auth.isAuthenticated(), license.hasChat(), auth.hasModule([17], ['admin']), controller.describe); +router.get('/open', license.isValidDate(), auth.isAuthenticated(), license.hasChat(), auth.hasModule([17], ['admin']), controller.open); +router.get('/closed', license.isValidDate(), auth.isAuthenticated(), license.hasChat(), auth.hasModule([17], ['admin']), controller.closed); +router.get('/timeout', license.isValidDate(), auth.isAuthenticated(), license.hasChat(), auth.hasModule([17], ['admin']), controller.timeout); +router.get('/waiting', license.isValidDate(), auth.isAuthenticated(), license.hasChat(), auth.hasModule([17], ['admin']), controller.waiting); +router.get('/abandoned', license.isValidDate(), auth.isAuthenticated(), license.hasChat(), auth.hasModule([17], ['admin']), controller.abandoned); +router.get('/waiting/applications', license.isValidDate(), auth.isAuthenticated(), license.hasChat(), auth.hasModule([8], ['admin', 'agent']), controller.waitingApplications); + +module.exports = router; diff --git a/server/api/report_chat_session/report_chat_session.controller.js b/server/api/report_chat_session/report_chat_session.controller.js index 076c2dc..74b5dde 100644 --- a/server/api/report_chat_session/report_chat_session.controller.js +++ b/server/api/report_chat_session/report_chat_session.controller.js @@ -1 +1,225 @@ -var _0xc077=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x62\x6C\x75\x65\x62\x69\x72\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x69\x64","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x6F\x77\x73","\x67\x65\x74\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x67\x65\x74\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65","\x77\x61\x69\x74\x69\x6E\x67\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x6C\x6F\x67","\x6D\x65\x72\x67\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x6C\x6C","\x6F\x70\x65\x6E","\x63\x6F\x75\x6E\x74","\x77\x61\x69\x74\x69\x6E\x67","\x63\x6C\x6F\x73\x65\x64","\x74\x69\x6D\x65\x6F\x75\x74","\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64"];_0xc077[0];var _=require(_0xc077[1]);var ReportChatSession=require(_0xc077[3])[_0xc077[2]];var User=require(_0xc077[3])[_0xc077[4]];var ReportChatSessionHistory=require(_0xc077[3])[_0xc077[6]][_0xc077[5]];var Promise=require(_0xc077[7]);var Util=require(_0xc077[8]);exports[_0xc077[9]]= function(_0xfbb7x7,_0xfbb7x8,_0xfbb7x9){return ReportChatSession[_0xc077[16]](Util[_0xc077[15]](_0xfbb7x7[_0xc077[14]]))[_0xc077[13]](function(_0xfbb7xb){_0xfbb7x8[_0xc077[12]](200)[_0xc077[11]](_0xfbb7xb)})[_0xc077[10]](function(_0xfbb7xa){return handleError(_0xfbb7x8,_0xfbb7xa)})};exports[_0xc077[17]]= function(_0xfbb7x7,_0xfbb7x8){return ReportChatSessionHistory[_0xc077[17]]()[_0xc077[13]](function(_0xfbb7xc){return _0xfbb7x8[_0xc077[12]](200)[_0xc077[11]](_0xfbb7xc)})[_0xc077[10]](function(_0xfbb7xa){return handleError(_0xfbb7x8,_0xfbb7xa)})};function getChatQueues(_0xfbb7xe){return function(){switch(_0xfbb7xe[_0xc077[28]]){case _0xc077[25]:return User[_0xc077[24]](_0xfbb7xe[_0xc077[18]],{attributes:[_0xc077[18]]})[_0xc077[13]](Util[_0xc077[23]]({},{attributes:[_0xc077[18]],include:[{raw:true,model:User,attributes:[_0xc077[18]]}]}))[_0xc077[13]](function(_0xfbb7xf){var _0xfbb7x10=[];_0xfbb7xf[_0xc077[22]][_0xc077[21]](function(_0xfbb7x11){_0xfbb7x10= _[_0xc077[20]](_0xfbb7x10,_[_0xc077[19]](_0xfbb7x11.Users,_0xc077[18]))});return {$or:{queue:_[_0xc077[19]](_0xfbb7xf[_0xc077[22]],_0xc077[18]),memberid:_0xfbb7x10}}});case _0xc077[27]:return User[_0xc077[24]](_0xfbb7xe[_0xc077[18]],{attributes:[_0xc077[18]]})[_0xc077[13]](function(_0xfbb7x12){return _0xfbb7x12[_0xc077[26]]({attributes:[_0xc077[18]]})})[_0xc077[13]](function(_0xfbb7xf){return {$or:{queue:_[_0xc077[19]](_0xfbb7xf,_0xc077[18]),memberid:_0xfbb7xe[_0xc077[18]]}}});default:return {}}}}exports[_0xc077[29]]= function(_0xfbb7x7,_0xfbb7x8){return Promise[_0xc077[33]]([])[_0xc077[13]](getChatQueues(_0xfbb7x7[_0xc077[25]]))[_0xc077[13]](function(_0xfbb7x14){return ReportChatSession[_0xc077[32]](Util[_0xc077[15]](_0xfbb7x7[_0xc077[14]],_[_0xc077[31]]({leaveAt:null},_0xfbb7x14)))})[_0xc077[13]](function(_0xfbb7x13){return _0xfbb7x8[_0xc077[12]](200)[_0xc077[11]]({rows:_0xfbb7x13})})[_0xc077[10]](function(_0xfbb7xa){console[_0xc077[30]](_0xfbb7xa);return handleError(_0xfbb7x8,_0xfbb7xa)})};exports[_0xc077[34]]= function(_0xfbb7x7,_0xfbb7x8){return Promise[_0xc077[33]]([])[_0xc077[13]](getChatQueues(_0xfbb7x7[_0xc077[25]]))[_0xc077[13]](function(_0xfbb7x14){return ReportChatSession[_0xc077[35]](Util[_0xc077[15]](_0xfbb7x7[_0xc077[14]],_[_0xc077[31]]({leaveAt:{$ne:null},complete:null,abandon:null,timeout:null},_0xfbb7x14)))})[_0xc077[13]](function(_0xfbb7x13){return _0xfbb7x8[_0xc077[12]](200)[_0xc077[11]]({value:_0xfbb7x13})})[_0xc077[10]](function(_0xfbb7xa){console[_0xc077[30]](_0xfbb7xa);return handleError(_0xfbb7x8,_0xfbb7xa)})};exports[_0xc077[36]]= function(_0xfbb7x7,_0xfbb7x8){return Promise[_0xc077[33]]([])[_0xc077[13]](getChatQueues(_0xfbb7x7[_0xc077[25]]))[_0xc077[13]](function(_0xfbb7x14){return ReportChatSession[_0xc077[35]](Util[_0xc077[15]](_0xfbb7x7[_0xc077[14]],_[_0xc077[31]]({leaveAt:null},_0xfbb7x14)))})[_0xc077[13]](function(_0xfbb7x13){return _0xfbb7x8[_0xc077[12]](200)[_0xc077[11]]({value:_0xfbb7x13})})[_0xc077[10]](function(_0xfbb7xa){console[_0xc077[30]](_0xfbb7xa);return handleError(_0xfbb7x8,_0xfbb7xa)})};exports[_0xc077[37]]= function(_0xfbb7x7,_0xfbb7x8){return Promise[_0xc077[33]]([])[_0xc077[13]](getChatQueues(_0xfbb7x7[_0xc077[25]]))[_0xc077[13]](function(_0xfbb7x14){return ReportChatSession[_0xc077[35]](Util[_0xc077[15]](_0xfbb7x7[_0xc077[14]],_[_0xc077[31]]({complete:true},_0xfbb7x14)))})[_0xc077[13]](function(_0xfbb7x13){return _0xfbb7x8[_0xc077[12]](200)[_0xc077[11]]({value:_0xfbb7x13})})[_0xc077[10]](function(_0xfbb7xa){console[_0xc077[30]](_0xfbb7xa);return handleError(_0xfbb7x8,_0xfbb7xa)})};exports[_0xc077[38]]= function(_0xfbb7x7,_0xfbb7x8){return Promise[_0xc077[33]]([])[_0xc077[13]](getChatQueues(_0xfbb7x7[_0xc077[25]]))[_0xc077[13]](function(_0xfbb7x14){return ReportChatSession[_0xc077[35]](Util[_0xc077[15]](_0xfbb7x7[_0xc077[14]],_[_0xc077[31]]({timeout:true},_0xfbb7x14)))})[_0xc077[13]](function(_0xfbb7x13){return _0xfbb7x8[_0xc077[12]](200)[_0xc077[11]]({value:_0xfbb7x13})})[_0xc077[10]](function(_0xfbb7xa){console[_0xc077[30]](_0xfbb7xa);return handleError(_0xfbb7x8,_0xfbb7xa)})};exports[_0xc077[39]]= function(_0xfbb7x7,_0xfbb7x8){return Promise[_0xc077[33]]([])[_0xc077[13]](getChatQueues(_0xfbb7x7[_0xc077[25]]))[_0xc077[13]](function(_0xfbb7x14){return ReportChatSession[_0xc077[35]](Util[_0xc077[15]](_0xfbb7x7[_0xc077[14]],_[_0xc077[31]]({abandon:true},_0xfbb7x14)))})[_0xc077[13]](function(_0xfbb7x13){return _0xfbb7x8[_0xc077[12]](200)[_0xc077[11]]({value:_0xfbb7x13})})[_0xc077[10]](function(_0xfbb7xa){console[_0xc077[30]](_0xfbb7xa);return handleError(_0xfbb7x8,_0xfbb7xa)})};function handleError(_0xfbb7x8,_0xfbb7xa){return _0xfbb7x8[_0xc077[12]](500)[_0xc077[11]](_0xfbb7xa)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var ReportChatSession = require('../../models').ReportChatSession; +var User = require('../../models').User; +var ReportChatSessionHistory = require('../../models').history.ReportChatSessionHistory; +var Promise = require('bluebird'); + +var Util = require('../../config/util'); + +// Get list of agents +exports.index = function(req, res, next) { + return ReportChatSession + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Get list of fields +exports.describe = function(req, res) { + return ReportChatSessionHistory + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function getChatQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(Util.getChatQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + $or: { + queue: _.map(userQueues.rows, 'id'), + memberid: users + } + }; + }); + case 'agent': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getChatQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + $or: { + queue: _.map(userQueues, 'id'), + memberid: user.id + } + }; + }); + default: + return {}; + } + } +} + +// Get Waiting apps +exports.waitingApplications = function(req, res) { + return Promise + .all([]) + .then(getChatQueues(req.user)) + .then(function(condition) { + return ReportChatSession + .findAll(Util.getQuery(req.query, _.merge({ + leaveAt: null + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + rows: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get open apps +exports.open = function(req, res) { + return Promise + .all([]) + .then(getChatQueues(req.user)) + .then(function(condition) { + return ReportChatSession + .count(Util.getQuery(req.query, _.merge({ + leaveAt: { + $ne: null + }, + complete: null, + abandon: null, + timeout: null + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.waiting = function(req, res) { + return Promise + .all([]) + .then(getChatQueues(req.user)) + .then(function(condition) { + return ReportChatSession + .count(Util.getQuery(req.query, _.merge({ + leaveAt: null + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get closed apps +exports.closed = function(req, res) { + return Promise + .all([]) + .then(getChatQueues(req.user)) + .then(function(condition) { + return ReportChatSession + .count(Util.getQuery(req.query, _.merge({ + complete: true + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get timeout apps +exports.timeout = function(req, res) { + return Promise + .all([]) + .then(getChatQueues(req.user)) + .then(function(condition) { + return ReportChatSession + .count(Util.getQuery(req.query, _.merge({ + timeout: true + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get abandoned apps +exports.abandoned = function(req, res) { + return Promise + .all([]) + .then(getChatQueues(req.user)) + .then(function(condition) { + return ReportChatSession + .count(Util.getQuery(req.query, _.merge({ + abandon: true + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/report_chat_session/report_chat_session.events.js b/server/api/report_chat_session/report_chat_session.events.js index 50702f3..5ae9bac 100644 --- a/server/api/report_chat_session/report_chat_session.events.js +++ b/server/api/report_chat_session/report_chat_session.events.js @@ -1 +1,36 @@ -var _0xda23=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xda23[0];const EventEmitter=require(_0xda23[1]);const ReportChatSession=require(_0xda23[3])[_0xda23[2]];var ReportChatSessionEvents= new EventEmitter();ReportChatSessionEvents[_0xda23[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xda23[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xda23[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xda23[6]};for(var e in events){var event=events[e];ReportChatSession[_0xda23[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xb617x8,_0xb617x9,_0xb617xa){ReportChatSessionEvents[_0xda23[10]](event+ _0xda23[8]+ _0xb617x8[_0xda23[9]],_0xb617x8);ReportChatSessionEvents[_0xda23[10]](event,_0xb617x8);_0xb617xa(null)}}module[_0xda23[11]]= ReportChatSessionEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportChatSession = require('../../models').ReportChatSession; + +var ReportChatSessionEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportChatSessionEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportChatSession.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportChatSessionEvents.emit(event + ':' + doc._id, doc); + ReportChatSessionEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportChatSessionEvents; diff --git a/server/api/report_chat_session/report_chat_session.socket.js b/server/api/report_chat_session/report_chat_session.socket.js index 46f43bb..f9b1796 100644 --- a/server/api/report_chat_session/report_chat_session.socket.js +++ b/server/api/report_chat_session/report_chat_session.socket.js @@ -1 +1,102 @@ -var _0x2a43=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6C\x6F\x64\x61\x73\x68","\x62\x6C\x75\x65\x62\x69\x72\x64","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x69\x64","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x6F\x77\x73","\x74\x68\x65\x6E","\x67\x65\x74\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x75\x73\x65\x72\x49\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x67\x65\x74\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65","\x45\x72\x72\x6F\x72\x20\x66\x69\x6C\x74\x65\x72\x69\x6E\x67\x20\x72\x65\x70\x6F\x72\x74\x20\x63\x68\x61\x74\x20\x73\x65\x73\x73\x69\x6F\x6E\x73\x20\x61\x66\x74\x65\x72\x20\x73\x61\x76\x65","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x61\x64\x6D\x69\x6E","\x6D\x65\x6D\x62\x65\x72\x69\x64","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x71\x75\x65\x75\x65","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x61\x6C\x6C","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0x2a43[0];const ReportChatSessionEvents=require(_0x2a43[1]);const ReportChatSession=require(_0x2a43[3])[_0x2a43[2]];const User=require(_0x2a43[3])[_0x2a43[4]];const Util=require(_0x2a43[5]);const _=require(_0x2a43[6]);const Promise=require(_0x2a43[7]);var events=[_0x2a43[8],_0x2a43[9]];exports[_0x2a43[10]]= function(_0x1ae6x8){for(var _0x1ae6x9=0,_0x1ae6xa=events[_0x2a43[11]];_0x1ae6x9< _0x1ae6xa;_0x1ae6x9++){var _0x1ae6xb=events[_0x1ae6x9];var _0x1ae6xc=createListener(_0x2a43[12]+ _0x1ae6xb,_0x1ae6x8);ReportChatSessionEvents[_0x2a43[13]](_0x1ae6xb,_0x1ae6xc);_0x1ae6x8[_0x2a43[13]](_0x2a43[14],removeListener(_0x1ae6xb,_0x1ae6xc))}};function createListener(_0x1ae6xb,_0x1ae6x8){return function(_0x1ae6xe){onSave(_0x1ae6x8,_0x1ae6xe)}}function removeListener(_0x1ae6xb,_0x1ae6xc){return function(){ReportChatSessionEvents[_0x2a43[15]](_0x1ae6xb,_0x1ae6xc)}}function getChatQueues(_0x1ae6x11){return function(){switch(_0x1ae6x11[_0x2a43[28]]){case _0x2a43[25]:return User[_0x2a43[24]](_0x1ae6x11[_0x2a43[23]],{attributes:[_0x2a43[16]]})[_0x2a43[21]](Util[_0x2a43[22]]({},{attributes:[_0x2a43[16]],include:[{raw:true,model:User,attributes:[_0x2a43[16]]}]}))[_0x2a43[21]](function(_0x1ae6x12){var _0x1ae6x13=[];_0x1ae6x12[_0x2a43[20]][_0x2a43[19]](function(_0x1ae6x14){_0x1ae6x13= _[_0x2a43[18]](_0x1ae6x13,_[_0x2a43[17]](_0x1ae6x14.Users,_0x2a43[16]))});return {queue:_[_0x2a43[17]](_0x1ae6x12[_0x2a43[20]],_0x2a43[16]),memberid:_0x1ae6x13}});case _0x2a43[27]:return User[_0x2a43[24]](_0x1ae6x11[_0x2a43[23]],{attributes:[_0x2a43[16]]})[_0x2a43[21]](function(_0x1ae6x15){return _0x1ae6x15[_0x2a43[26]]({attributes:[_0x2a43[16]]})})[_0x2a43[21]](function(_0x1ae6x12){return {queue:_[_0x2a43[17]](_0x1ae6x12,_0x2a43[16]),memberid:_0x1ae6x11[_0x2a43[23]]}});default:return {}}}}function onSave(_0x1ae6x8,_0x1ae6xe,_0x1ae6x17){return Promise[_0x2a43[38]]([])[_0x2a43[21]](getChatQueues(_0x1ae6x8))[_0x2a43[21]](function(_0x1ae6x19){if(_0x1ae6x8[_0x2a43[28]]=== _0x2a43[32]|| _[_0x2a43[34]](_0x1ae6x19[_0x2a43[33]],_0x1ae6xe[_0x2a43[33]])|| _[_0x2a43[34]](_0x1ae6x19[_0x2a43[35]],_0x1ae6xe[_0x2a43[35]])){_0x1ae6x8[_0x2a43[37]](_0x2a43[36],_0x1ae6xe)}})[_0x2a43[31]](function(_0x1ae6x18){console[_0x2a43[30]](_0x2a43[29],_0x1ae6x18)})}function onRemove(_0x1ae6x8,_0x1ae6xe,_0x1ae6x17){_0x1ae6x8[_0x2a43[37]](_0x2a43[39],_0x1ae6xe)} \ No newline at end of file +'use strict'; + +const ReportChatSessionEvents = require('./report_chat_session.events'); +const ReportChatSession = require('../../models').ReportChatSession; +const User = require('../../models').User; +const Util = require('../../config/util'); + +const _ = require('lodash'); +const Promise = require('bluebird'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_chat_session:' + event, socket); + + ReportChatSessionEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + onSave(socket, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ReportChatSessionEvents.removeListener(event, listener); + }; +} + + +function getChatQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.userId, { + attributes: ['id'] + }) + .then(Util.getChatQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + queue: _.map(userQueues.rows, 'id'), + memberid: users + }; + }); + case 'agent': + return User + .findById(user.userId, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getChatQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + queue: _.map(userQueues, 'id'), + memberid: user.userId + }; + }); + default: + return {}; + } + } +} + +function onSave(socket, doc, cb) { + return Promise + .all([]) + .then(getChatQueues(socket)) + .then(function(condition) { + if (socket.role === 'admin' || _.includes(condition.memberid, doc.memberid) || _.includes(condition.queue, doc.queue)) { + socket.emit('report_chat_session:save', doc); + } + }) + .catch(function(err) { + console.log('Error filtering report chat sessions after save', err); + }); +} + +function onRemove(socket, doc, cb) { + socket.emit('report_chat_session:remove', doc); +} diff --git a/server/api/report_dial/index.js b/server/api/report_dial/index.js index 8e0ecb4..ea59483 100644 --- a/server/api/report_dial/index.js +++ b/server/api/report_dial/index.js @@ -1 +1,14 @@ -var _0xd016=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x64\x69\x61\x6C\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x61\x63\x74\x69\x76\x65\x2F\x63\x61\x6C\x6C\x73","\x61\x63\x74\x69\x76\x65\x43\x61\x6C\x6C\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0xd016[0];var express=require(_0xd016[1]);var auth=require(_0xd016[2]);var controller=require(_0xd016[3]);var router=express.Router();router[_0xd016[10]](_0xd016[4],auth[_0xd016[5]](),auth[_0xd016[8]]([17],[_0xd016[6],_0xd016[7]]),controller[_0xd016[9]]);router[_0xd016[10]](_0xd016[11],auth[_0xd016[5]](),auth[_0xd016[8]]([17],[_0xd016[6]]),controller[_0xd016[12]]);router[_0xd016[10]](_0xd016[13],auth[_0xd016[5]](),auth[_0xd016[8]]([7],[_0xd016[6],_0xd016[7]]),controller[_0xd016[14]]);module[_0xd016[15]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./report_dial.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([17], ['admin', 'agent']), controller.index); +router.get('/describe', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.describe); +router.get('/active/calls', auth.isAuthenticated(), auth.hasModule([7], ['admin', 'agent']), controller.activeCalls); + + +module.exports = router; diff --git a/server/api/report_dial/report_dial.controller.js b/server/api/report_dial/report_dial.controller.js index 7af5672..5db39fb 100644 --- a/server/api/report_dial/report_dial.controller.js +++ b/server/api/report_dial/report_dial.controller.js @@ -1 +1,116 @@ -var _0x3026=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x44\x69\x61\x6C","\x52\x65\x70\x6F\x72\x74\x44\x69\x61\x6C\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6C\x6F\x67","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x72\x6F\x6C\x65","\x75\x73\x65\x72","\x61\x67\x65\x6E\x74","\x72\x6F\x77\x73","\x63\x68\x61\x6E\x6E\x65\x6C","\x73\x70\x6C\x69\x74","\x6E\x61\x6D\x65","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x6C\x65\x6E\x67\x74\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x61\x63\x74\x69\x76\x65\x43\x61\x6C\x6C\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65"];_0x3026[0];var _=require(_0x3026[1]);var sequelize=require(_0x3026[3])[_0x3026[2]];var ReportDial=require(_0x3026[3])[_0x3026[4]];var ReportDialHistory=require(_0x3026[3])[_0x3026[6]][_0x3026[5]];var Util=require(_0x3026[7]);function handleError(_0x9d12x7,_0x9d12x8){_0x9d12x8= _0x9d12x8|| 500;return function(_0x9d12x9){console[_0x3026[8]](_0x9d12x9);_0x9d12x7[_0x3026[10]](_0x9d12x8)[_0x3026[9]](_0x9d12x9)}}function responseWithResult(_0x9d12x7,_0x9d12x8){_0x9d12x8= _0x9d12x8|| 200;return function(_0x9d12xb){if(_0x9d12xb){_0x9d12x7[_0x3026[10]](_0x9d12x8)[_0x3026[11]](_0x9d12xb)}}}function handleEntityNotFound(_0x9d12x7){return function(_0x9d12xb){if(!_0x9d12xb){_0x9d12x7[_0x3026[10]](404)[_0x3026[12]]();return null};return _0x9d12xb}}function saveUpdates(_0x9d12xe){return function(_0x9d12xb){return _0x9d12xb[_0x3026[14]](_0x9d12xe)[_0x3026[13]](function(_0x9d12xf){return _0x9d12xf})}}function removeEntity(_0x9d12x7){return function(_0x9d12xb){if(_0x9d12xb){return _0x9d12xb[_0x3026[15]]()[_0x3026[13]](function(){_0x9d12x7[_0x3026[10]](204)[_0x3026[12]]()})}}}exports[_0x3026[16]]= function(_0x9d12x11,_0x9d12x7,_0x9d12x12){return ReportDial[_0x3026[30]](Util[_0x3026[29]](_0x9d12x11[_0x3026[28]]))[_0x3026[13]](function(_0x9d12x13){if(_0x9d12x11[_0x3026[19]][_0x3026[18]]=== _0x3026[20]){var _0x9d12x14=[];_[_0x3026[26]](_0x9d12x13[_0x3026[21]],function(_0x9d12x15){if(_0x9d12x15[_0x3026[22]]&& _0x9d12x15[_0x3026[22]][_0x3026[23]](/\/|-/)[1]=== _0x9d12x11[_0x3026[19]][_0x3026[24]]){_0x9d12x14[_0x3026[25]](_0x9d12x15)}});return {rows:_0x9d12x14,count:_0x9d12x14[_0x3026[27]]}};return _0x9d12x13})[_0x3026[13]](function(_0x9d12x13){return _0x9d12x7[_0x3026[10]](200)[_0x3026[9]](_0x9d12x13)})[_0x3026[17]](handleError(_0x9d12x7))};exports[_0x3026[31]]= function(_0x9d12x11,_0x9d12x7){return ReportDial[_0x3026[32]](Util[_0x3026[29]](_0x9d12x11[_0x3026[28]],{endtime:null}))[_0x3026[13]](function(_0x9d12x13){return _0x9d12x7[_0x3026[10]](200)[_0x3026[9]]({rows:_0x9d12x13,count:_0x9d12x13[_0x3026[27]]})})[_0x3026[17]](handleError(_0x9d12x7))};exports[_0x3026[33]]= function(_0x9d12x11,_0x9d12x7){return ReportDialHistory[_0x3026[33]]()[_0x3026[13]](function(_0x9d12x16){return _0x9d12x7[_0x3026[10]](200)[_0x3026[9]](_0x9d12x16)})[_0x3026[17]](handleError(_0x9d12x7))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/report/dials -> index + * POST /api/report/dials -> create + * GET /api/report/dials/:id -> show + * PUT /api/report/dials/:id -> update + * DELETE /api/report/dials/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); + +var sequelize = require('../../models').sequelize; +var ReportDial = require('../../models').ReportDial; +var ReportDialHistory = require('../../models').history.ReportDialHistory; +var Util = require('../../config/util'); + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + console.log(err); + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity + .destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of ReportDials +exports.index = function(req, res, next) { + return ReportDial + .findAndCountAll(Util.getQuery(req.query)) + .then(function(data) { + if (req.user.role === 'agent') { + var filteredData = []; + _.forEach(data.rows, function(elem) { + if (elem.channel && elem.channel.split(/\/|-/)[1] === req.user.name) { + filteredData.push(elem); + } + }); + return { + rows: filteredData, + count: filteredData.length + }; + } + return data; + }) + .then(function(data) { + return res.status(200).send(data); + }) + .catch(handleError(res)); +}; + +// Get Active Calls +exports.activeCalls = function(req, res) { + return ReportDial + .findAll(Util.getQuery(req.query, { + endtime: null + })) + .then(function(data) { + return res.status(200).send({ + rows: data, + count: data.length + }); + }) + .catch(handleError(res)); +}; + +// Get list of fields +exports.describe = function(req, res) { + return ReportDialHistory + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(handleError(res)); +}; diff --git a/server/api/report_dial/report_dial.events.js b/server/api/report_dial/report_dial.events.js index b5ac75d..385b3cf 100644 --- a/server/api/report_dial/report_dial.events.js +++ b/server/api/report_dial/report_dial.events.js @@ -1 +1,36 @@ -var _0x279b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x44\x69\x61\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x279b[0];const EventEmitter=require(_0x279b[1]);const ReportDial=require(_0x279b[3])[_0x279b[2]];var ReportDialEvents= new EventEmitter();ReportDialEvents[_0x279b[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x279b[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x279b[6],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x279b[7]};for(var e in events){var event=events[e];ReportDial[_0x279b[8]](e,emitEvent(event))};function emitEvent(event){return function(_0x7472x8,_0x7472x9,_0x7472xa){ReportDialEvents[_0x279b[11]](event+ _0x279b[9]+ _0x7472x8[_0x279b[10]],_0x7472x8);ReportDialEvents[_0x279b[11]](event,_0x7472x8);_0x7472xa(null)}}module[_0x279b[12]]= ReportDialEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportDial = require('../../models').ReportDial; + +var ReportDialEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportDialEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'update', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportDial.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportDialEvents.emit(event + ':' + doc._id, doc); + ReportDialEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportDialEvents; diff --git a/server/api/report_dial/report_dial.socket.js b/server/api/report_dial/report_dial.socket.js index 6bce385..7d9498d 100644 --- a/server/api/report_dial/report_dial.socket.js +++ b/server/api/report_dial/report_dial.socket.js @@ -1 +1,30 @@ -var _0x76f7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x64\x69\x61\x6C\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x64\x69\x61\x6C\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x63\x68\x61\x6E\x6E\x65\x6C","\x73\x70\x6C\x69\x74","\x6E\x61\x6D\x65","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x76f7[0];const ReportDialEvents=require(_0x76f7[1]);var events=[_0x76f7[2],_0x76f7[3],_0x76f7[4]];exports[_0x76f7[5]]= function(_0x30c6x3){for(var _0x30c6x4=0,_0x30c6x5=events[_0x76f7[6]];_0x30c6x4< _0x30c6x5;_0x30c6x4++){var _0x30c6x6=events[_0x30c6x4];var _0x30c6x7=createListener(_0x76f7[7]+ _0x30c6x6,_0x30c6x3);ReportDialEvents[_0x76f7[8]](_0x30c6x6,_0x30c6x7);_0x30c6x3[_0x76f7[8]](_0x76f7[9],removeListener(_0x30c6x6,_0x30c6x7))}};function createListener(_0x30c6x6,_0x30c6x3){return function(_0x30c6x9){if(_0x30c6x3[_0x76f7[10]]=== _0x76f7[11]|| (_0x30c6x9[_0x76f7[12]]&& _0x30c6x9[_0x76f7[12]][_0x76f7[13]](/\/|-/)[1]=== _0x30c6x3[_0x76f7[14]])){_0x30c6x3[_0x76f7[15]](_0x30c6x6,_0x30c6x9)}}}function removeListener(_0x30c6x6,_0x30c6x7){return function(){ReportDialEvents[_0x76f7[16]](_0x30c6x6,_0x30c6x7)}} \ No newline at end of file +'use strict'; + +const ReportDialEvents = require('./report_dial.events'); + +// Model events to emit +var events = ['save', 'update', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_dial:' + event, socket); + + ReportDialEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + if (socket.role === 'admin' || (doc.channel && doc.channel.split(/\/|-/)[1] === socket.name)) { + socket.emit(event, doc); + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportDialEvents.removeListener(event, listener); + }; +} diff --git a/server/api/report_fax/index.js b/server/api/report_fax/index.js index 2662916..e19c074 100644 --- a/server/api/report_fax/index.js +++ b/server/api/report_fax/index.js @@ -1 +1,13 @@ -var _0xdfdc=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x46\x61\x78","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x61\x63\x63\x65\x70\x74\x2F\x3A\x75\x6E\x69\x71\x75\x65\x69\x64","\x68\x61\x73\x52\x6F\x6C\x65","\x61\x63\x63\x65\x70\x74","\x2F\x3A\x69\x64\x2F\x72\x65\x6A\x65\x63\x74","\x72\x65\x6A\x65\x63\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xdfdc[0];var express=require(_0xdfdc[1]);var controller=require(_0xdfdc[2]);var auth=require(_0xdfdc[3]);var license=require(_0xdfdc[4]);var router=express.Router();router[_0xdfdc[12]](_0xdfdc[5],auth[_0xdfdc[6]](),license[_0xdfdc[7]](),auth[_0xdfdc[10]]([17],[_0xdfdc[8],_0xdfdc[9]]),controller[_0xdfdc[11]]);router[_0xdfdc[12]](_0xdfdc[13],auth[_0xdfdc[6]](),license[_0xdfdc[7]](),auth[_0xdfdc[14]](_0xdfdc[9]),controller[_0xdfdc[15]]);router[_0xdfdc[12]](_0xdfdc[16],auth[_0xdfdc[6]](),license[_0xdfdc[7]](),auth[_0xdfdc[14]](_0xdfdc[9]),controller[_0xdfdc[17]]);module[_0xdfdc[18]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_fax.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasFax(), auth.hasModule([17], ['admin', 'agent']), controller.index); +router.get('/:id/accept/:uniqueid', auth.isAuthenticated(), license.hasFax(), auth.hasRole('agent'), controller.accept); +router.get('/:id/reject', auth.isAuthenticated(), license.hasFax(), auth.hasRole('agent'), controller.reject); +module.exports = router; diff --git a/server/api/report_fax/report_fax.controller.js b/server/api/report_fax/report_fax.controller.js index 68d27d5..de99a65 100644 --- a/server/api/report_fax/report_fax.controller.js +++ b/server/api/report_fax/report_fax.controller.js @@ -1 +1,105 @@ -var _0x3e19=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x46\x61\x78\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x52\x6F\x6F\x6D\x53\x74\x61\x74\x75\x73","\x52\x65\x70\x6F\x72\x74\x46\x61\x78","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x61\x63\x63\x65\x70\x74","\x2E","\x73\x70\x6C\x69\x74","\x75\x6E\x69\x71\x75\x65\x69\x64","\x70\x61\x72\x61\x6D\x73","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x4F\x50\x45\x4E","\x61\x67\x65\x6E\x74","\x75\x73\x65\x72","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x72\x65\x6A\x65\x63\x74","\x52\x45\x4A\x45\x43\x54","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x72\x6F\x6F\x6D\x69\x64","\x63\x72\x65\x61\x74\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74"];_0x3e19[0];var _=require(_0x3e19[1]);var moment=require(_0x3e19[2]);var FaxRoom=require(_0x3e19[4])[_0x3e19[3]];var FaxRoomStatus=require(_0x3e19[4])[_0x3e19[5]];var ReportFax=require(_0x3e19[4])[_0x3e19[6]];var sequelize=require(_0x3e19[4])[_0x3e19[7]];var Agent=require(_0x3e19[4])[_0x3e19[8]];var Util=require(_0x3e19[9]);exports[_0x3e19[10]]= function(_0xf6b6x9,_0xf6b6xa,_0xf6b6xb){return ReportFax[_0x3e19[17]](Util[_0x3e19[16]](_0xf6b6x9[_0x3e19[15]]))[_0x3e19[14]](function(_0xf6b6xd){_0xf6b6xa[_0x3e19[13]](200)[_0x3e19[12]](_0xf6b6xd)})[_0x3e19[11]](function(_0xf6b6xc){return handleError(_0xf6b6xa,_0xf6b6xc)})};exports[_0x3e19[18]]= function(_0xf6b6x9,_0xf6b6xa){var _0xf6b6xe=_0xf6b6x9[_0x3e19[22]][_0x3e19[21]][_0x3e19[20]](_0x3e19[19])[1];return ReportFax[_0x3e19[31]](_0xf6b6x9[_0x3e19[22]][_0x3e19[30]])[_0x3e19[14]](function(_0xf6b6xf){if(!_0xf6b6xf){return _0xf6b6xa[_0x3e19[23]](404)};var _0xf6b6x10=_[_0x3e19[28]](_0xf6b6xf,{connectid:_0xf6b6x9[_0x3e19[22]][_0x3e19[21]]});return _0xf6b6x10[_0x3e19[29]]()})[_0x3e19[14]](function(){return FaxRoom[_0x3e19[27]]({status:_0x3e19[24],openReason:_0x3e19[25]},{where:{id:_0xf6b6xe},user:_0xf6b6x9[_0x3e19[26]],individualHooks:true})})[_0x3e19[14]](function(){return _0xf6b6xa[_0x3e19[23]](200)})[_0x3e19[11]](sequelize.UniqueConstraintError,function(_0xf6b6xc){return _0xf6b6xa[_0x3e19[23]](504)})[_0x3e19[11]](function(_0xf6b6xc){return handleError(_0xf6b6xa,_0xf6b6xc)})};exports[_0x3e19[32]]= function(_0xf6b6x9,_0xf6b6xa){var _0xf6b6x11;return ReportFax[_0x3e19[31]](_0xf6b6x9[_0x3e19[22]][_0x3e19[30]])[_0x3e19[14]](function(_0xf6b6x12){_0xf6b6x11= _0xf6b6x12;if(!_0xf6b6x12){return _0xf6b6xa[_0x3e19[23]](404)};var _0xf6b6x10=_[_0x3e19[28]](_0xf6b6x12,{rejectedAt:moment()[_0x3e19[39]](_0x3e19[38])});return _0xf6b6x10[_0x3e19[29]]()})[_0x3e19[14]](function(){return FaxRoomStatus[_0x3e19[37]]({status:_0x3e19[33],data1:_0xf6b6x9[_0x3e19[26]][_0x3e19[34]],data2:_0xf6b6x9[_0x3e19[26]][_0x3e19[35]],UserId:_0xf6b6x9[_0x3e19[26]][_0x3e19[30]],MailRoomId:_0xf6b6x11[_0x3e19[36]]})})[_0x3e19[14]](function(){return _0xf6b6xa[_0x3e19[23]](200)})[_0x3e19[11]](function(_0xf6b6xc){return handleError(_0xf6b6xa,_0xf6b6xc)})};function handleError(_0xf6b6xa,_0xf6b6xc){return _0xf6b6xa[_0x3e19[13]](500)[_0x3e19[12]](_0xf6b6xc)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var moment = require('moment'); + +var FaxRoom = require('../../models').FaxRoom; +var FaxRoomStatus = require('../../models').FaxRoomStatus; +var ReportFax = require('../../models').ReportFax; +var sequelize = require('../../models').sequelize; +var Agent = require('../../models').User; + +var Util = require('../../config/util'); + +// Get list of agents +exports.index = function(req, res, next) { + return ReportFax + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single reportMail +exports.accept = function(req, res) { + var _roomid = req.params.uniqueid.split('.')[1]; + + return ReportFax + .findById(req.params.id) + .then(function(reportMail) { + if (!reportMail) { + return res.sendStatus(404); + } + + var updated = _.merge(reportMail, { + connectid: req.params.uniqueid + }); + + return updated + .save(); + }) + .then(function() { + return FaxRoom + .update({ + status: 'OPEN', + openReason: 'agent' + }, { + where: { + id: _roomid + }, + user: req.user, + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return res.sendStatus(504); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single reportMail +exports.reject = function(req, res) { + var _report; + + return ReportFax + .findById(req.params.id) + .then(function(reportFax) { + _report = reportFax; + if (!reportFax) { + return res.sendStatus(404); + } + var updated = _.merge(reportFax, { + rejectedAt: moment().format("YYYY-MM-DD HH:mm:ss") + }); + return updated + .save(); + }) + .then(function() { + return FaxRoomStatus + .create({ + status: 'REJECT', + data1: req.user.name, + data2: req.user.fullname, + UserId: req.user.id, + MailRoomId: _report.roomid + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/report_fax/report_fax.events.js b/server/api/report_fax/report_fax.events.js index cea33cc..f0e5f3e 100644 --- a/server/api/report_fax/report_fax.events.js +++ b/server/api/report_fax/report_fax.events.js @@ -1 +1,36 @@ -var _0x1a65=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x46\x61\x78","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x1a65[0];const EventEmitter=require(_0x1a65[1]);const ReportFax=require(_0x1a65[3])[_0x1a65[2]];var ReportFaxEvents= new EventEmitter();ReportFaxEvents[_0x1a65[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x1a65[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x1a65[6],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x1a65[7]};for(var e in events){var event=events[e];ReportFax[_0x1a65[8]](e,emitEvent(event))};function emitEvent(event){return function(_0x3e9fx8,_0x3e9fx9,_0x3e9fxa){ReportFaxEvents[_0x1a65[11]](event+ _0x1a65[9]+ _0x3e9fx8[_0x1a65[10]],_0x3e9fx8);ReportFaxEvents[_0x1a65[11]](event,_0x3e9fx8);_0x3e9fxa(null)}}module[_0x1a65[12]]= ReportFaxEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportFax = require('../../models').ReportFax; + +var ReportFaxEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportFaxEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'update', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportFax.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportFaxEvents.emit(event + ':' + doc._id, doc); + ReportFaxEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportFaxEvents; diff --git a/server/api/report_fax/report_fax.socket.js b/server/api/report_fax/report_fax.socket.js index a4ac33b..7d32de9 100644 --- a/server/api/report_fax/report_fax.socket.js +++ b/server/api/report_fax/report_fax.socket.js @@ -1 +1,44 @@ -var _0xe895=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x3A\x73\x61\x76\x65","\x6E\x61\x6D\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x3A\x75\x70\x64\x61\x74\x65","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xe895[0];const ReportFaxEvents=require(_0xe895[1]);var events=[_0xe895[2],_0xe895[3],_0xe895[4]];exports[_0xe895[5]]= function(_0x5702x3){for(var _0x5702x4=0,_0x5702x5=events[_0xe895[6]];_0x5702x4< _0x5702x5;_0x5702x4++){var _0x5702x6=events[_0x5702x4];var _0x5702x7=createListener(_0xe895[7]+ _0x5702x6,_0x5702x3);ReportFaxEvents[_0xe895[8]](_0x5702x6,_0x5702x7);_0x5702x3[_0xe895[8]](_0xe895[9],removeListener(_0x5702x6,_0x5702x7))}};function createListener(_0x5702x6,_0x5702x3){return function(_0x5702x9){switch(_0x5702x6){case _0xe895[10]:;case _0xe895[16]:if(_0x5702x3[_0xe895[11]]=== _0x5702x9[_0xe895[12]]|| _0x5702x3[_0xe895[13]]=== _0xe895[14]){_0x5702x3[_0xe895[15]](_0x5702x6,_0x5702x9)};break;case _0xe895[17]:_0x5702x3[_0xe895[15]](_0x5702x6,_0x5702x9);break;default:}}}function removeListener(_0x5702x6,_0x5702x7){return function(){ReportFaxEvents[_0xe895[18]](_0x5702x6,_0x5702x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ReportFaxEvents = require('./report_fax.events'); + +// Model events to emit +var events = ['save', 'update', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_fax:' + event, socket); + + ReportFaxEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'report_fax:save': + case 'report_fax:update': + if (socket.name === doc.membername || socket.role === 'admin') { + socket.emit(event, doc); + } + break; + case 'report_fax:remove': + socket.emit(event, doc); + break; + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportFaxEvents.removeListener(event, listener); + }; +} diff --git a/server/api/report_fax_session/index.js b/server/api/report_fax_session/index.js index 66f0e39..14bf55c 100644 --- a/server/api/report_fax_session/index.js +++ b/server/api/report_fax_session/index.js @@ -1 +1,15 @@ -var _0x9644=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x46\x61\x78","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x74\x69\x6D\x65\x6F\x75\x74","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x74\x69\x6D\x65\x6F\x75\x74","\x2F\x77\x61\x69\x74\x69\x6E\x67","\x77\x61\x69\x74\x69\x6E\x67","\x2F\x77\x61\x69\x74\x69\x6E\x67\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x61\x67\x65\x6E\x74","\x77\x61\x69\x74\x69\x6E\x67\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0x9644[0];var express=require(_0x9644[1]);var auth=require(_0x9644[2]);var controller=require(_0x9644[3]);var license=require(_0x9644[4]);var router=express.Router();router[_0x9644[11]](_0x9644[5],auth[_0x9644[6]](),license[_0x9644[7]](),auth[_0x9644[9]]([17],[_0x9644[8]]),controller[_0x9644[10]]);router[_0x9644[11]](_0x9644[12],auth[_0x9644[6]](),license[_0x9644[7]](),auth[_0x9644[9]]([17],[_0x9644[8]]),controller[_0x9644[13]]);router[_0x9644[11]](_0x9644[14],license[_0x9644[15]](),auth[_0x9644[6]](),license[_0x9644[7]](),auth[_0x9644[9]]([17],[_0x9644[8]]),controller[_0x9644[16]]);router[_0x9644[11]](_0x9644[17],license[_0x9644[15]](),auth[_0x9644[6]](),license[_0x9644[7]](),auth[_0x9644[9]]([17],[_0x9644[8]]),controller[_0x9644[18]]);router[_0x9644[11]](_0x9644[19],auth[_0x9644[6]](),license[_0x9644[7]](),auth[_0x9644[9]]([10],[_0x9644[8],_0x9644[20]]),controller[_0x9644[21]]);module[_0x9644[22]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./report_fax_session.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasFax(), auth.hasModule([17], ['admin']), controller.index); +router.get('/describe', auth.isAuthenticated(), license.hasFax(), auth.hasModule([17], ['admin']), controller.describe); +router.get('/timeout', license.isValidDate(), auth.isAuthenticated(), license.hasFax(), auth.hasModule([17], ['admin']), controller.timeout); +router.get('/waiting', license.isValidDate(), auth.isAuthenticated(), license.hasFax(), auth.hasModule([17], ['admin']), controller.waiting); +router.get('/waiting/applications', auth.isAuthenticated(), license.hasFax(), auth.hasModule([10], ['admin', 'agent']), controller.waitingApplications); +module.exports = router; diff --git a/server/api/report_fax_session/report_fax_session.controller.js b/server/api/report_fax_session/report_fax_session.controller.js index 460e492..29bf8ba 100644 --- a/server/api/report_fax_session/report_fax_session.controller.js +++ b/server/api/report_fax_session/report_fax_session.controller.js @@ -1 +1,238 @@ -var _0xb7fd=["\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","\x52\x65\x70\x6F\x72\x74\x46\x61\x78\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x46\x61\x78\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x55\x73\x65\x72","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x74\x69\x6D\x65\x6F\x75\x74","\x6C\x6F\x67","\x6D\x65\x72\x67\x65","\x63\x6F\x75\x6E\x74","\x75\x73\x65\x72","\x61\x6C\x6C","\x77\x61\x69\x74\x69\x6E\x67","\x77\x61\x69\x74\x69\x6E\x67\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x6F\x77\x73","\x67\x65\x74\x46\x61\x78\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x67\x65\x74\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65"];_0xb7fd[0];var _=require(_0xb7fd[1]);var Util=require(_0xb7fd[2]);var ReportFaxSession=require(_0xb7fd[4])[_0xb7fd[3]];var ReportFaxSessionHistory=require(_0xb7fd[4])[_0xb7fd[6]][_0xb7fd[5]];var User=require(_0xb7fd[4])[_0xb7fd[7]];function handleError(_0xcc9ex7,_0xcc9ex8){_0xcc9ex8= _0xcc9ex8|| 500;return function(_0xcc9ex9){_0xcc9ex7[_0xb7fd[9]](_0xcc9ex8)[_0xb7fd[8]](_0xcc9ex9)}}function responseWithResult(_0xcc9ex7,_0xcc9ex8){_0xcc9ex8= _0xcc9ex8|| 200;return function(_0xcc9exb){if(_0xcc9exb){_0xcc9ex7[_0xb7fd[9]](_0xcc9ex8)[_0xb7fd[10]](_0xcc9exb)}}}function responseWithoutResult(_0xcc9ex7,_0xcc9ex8){_0xcc9ex8= _0xcc9ex8|| 204;return function(){_0xcc9ex7[_0xb7fd[11]](_0xcc9ex8)}}function handleEntityNotFound(_0xcc9ex7){return function(_0xcc9exb){if(!_0xcc9exb){_0xcc9ex7[_0xb7fd[9]](404)[_0xb7fd[12]]();return null};return _0xcc9exb}}function saveUpdates(_0xcc9exf){return function(_0xcc9exb){return _0xcc9exb[_0xb7fd[14]](_0xcc9exf)[_0xb7fd[13]](function(_0xcc9ex10){return _0xcc9ex10})}}function removeEntity(_0xcc9ex7){return function(_0xcc9exb){if(_0xcc9exb){return _0xcc9exb[_0xb7fd[15]]()[_0xb7fd[13]](function(){_0xcc9ex7[_0xb7fd[9]](204)[_0xb7fd[12]]()})}}}exports[_0xb7fd[16]]= function(_0xcc9ex12,_0xcc9ex7){return ReportFaxSession[_0xb7fd[20]](Util[_0xb7fd[19]](_0xcc9ex12[_0xb7fd[18]]))[_0xb7fd[13]](responseWithResult(_0xcc9ex7))[_0xb7fd[17]](handleError(_0xcc9ex7))};exports[_0xb7fd[21]]= function(_0xcc9ex12,_0xcc9ex7){return ReportFaxSession[_0xb7fd[24]](_0xcc9ex12[_0xb7fd[23]][_0xb7fd[22]])[_0xb7fd[13]](handleEntityNotFound(_0xcc9ex7))[_0xb7fd[13]](responseWithResult(_0xcc9ex7))[_0xb7fd[17]](handleError(_0xcc9ex7))};exports[_0xb7fd[25]]= function(_0xcc9ex12,_0xcc9ex7){return ReportFaxSession[_0xb7fd[25]](_0xcc9ex12[_0xb7fd[26]])[_0xb7fd[13]](responseWithResult(_0xcc9ex7,201))[_0xb7fd[17]](handleError(_0xcc9ex7))};exports[_0xb7fd[27]]= function(_0xcc9ex12,_0xcc9ex7){if(_0xcc9ex12[_0xb7fd[26]][_0xb7fd[22]]){delete _0xcc9ex12[_0xb7fd[26]][_0xb7fd[22]]};return ReportFaxSession[_0xb7fd[24]](_0xcc9ex12[_0xb7fd[23]][_0xb7fd[22]])[_0xb7fd[13]](handleEntityNotFound(_0xcc9ex7))[_0xb7fd[13]](saveUpdates(_0xcc9ex12[_0xb7fd[26]]))[_0xb7fd[13]](responseWithResult(_0xcc9ex7))[_0xb7fd[17]](handleError(_0xcc9ex7))};exports[_0xb7fd[15]]= function(_0xcc9ex12,_0xcc9ex7){return ReportFaxSession[_0xb7fd[24]](_0xcc9ex12[_0xb7fd[23]][_0xb7fd[22]])[_0xb7fd[13]](handleEntityNotFound(_0xcc9ex7))[_0xb7fd[13]](removeEntity(_0xcc9ex7))[_0xb7fd[17]](handleError(_0xcc9ex7))};exports[_0xb7fd[28]]= function(_0xcc9ex12,_0xcc9ex7){return ReportFaxSessionHistory[_0xb7fd[28]]()[_0xb7fd[13]](function(_0xcc9ex13){return _0xcc9ex7[_0xb7fd[9]](200)[_0xb7fd[8]](_0xcc9ex13)})[_0xb7fd[17]](handleError(_0xcc9ex7))};exports[_0xb7fd[29]]= function(_0xcc9ex12,_0xcc9ex7){return Promise[_0xb7fd[34]]([])[_0xb7fd[13]](getFaxQueues(_0xcc9ex12[_0xb7fd[33]]))[_0xb7fd[13]](function(_0xcc9ex15){return ReportFaxSession[_0xb7fd[32]](Util[_0xb7fd[19]](_0xcc9ex12[_0xb7fd[18]],_[_0xb7fd[31]]({timeout:true},_0xcc9ex15)))})[_0xb7fd[13]](function(_0xcc9ex14){return _0xcc9ex7[_0xb7fd[9]](200)[_0xb7fd[8]]({value:_0xcc9ex14})})[_0xb7fd[17]](function(_0xcc9ex9){console[_0xb7fd[30]](_0xcc9ex9);return handleError(_0xcc9ex7,_0xcc9ex9)})};exports[_0xb7fd[35]]= function(_0xcc9ex12,_0xcc9ex7){return Promise[_0xb7fd[34]]([])[_0xb7fd[13]](getFaxQueues(_0xcc9ex12[_0xb7fd[33]]))[_0xb7fd[13]](function(_0xcc9ex15){return ReportFaxSession[_0xb7fd[32]](Util[_0xb7fd[19]](_0xcc9ex12[_0xb7fd[18]],_[_0xb7fd[31]]({leaveAt:null},_0xcc9ex15)))})[_0xb7fd[13]](function(_0xcc9ex14){return _0xcc9ex7[_0xb7fd[9]](200)[_0xb7fd[8]]({value:_0xcc9ex14})})[_0xb7fd[17]](function(_0xcc9ex9){console[_0xb7fd[30]](_0xcc9ex9);return handleError(_0xcc9ex7,_0xcc9ex9)})};exports[_0xb7fd[36]]= function(_0xcc9ex12,_0xcc9ex7){return Promise[_0xb7fd[34]]([])[_0xb7fd[13]](getFaxQueues(_0xcc9ex12[_0xb7fd[33]]))[_0xb7fd[13]](function(_0xcc9ex15){return ReportFaxSession[_0xb7fd[20]](Util[_0xb7fd[19]](_0xcc9ex12[_0xb7fd[18]],_[_0xb7fd[31]]({leaveAt:null},_0xcc9ex15)))})[_0xb7fd[13]](function(_0xcc9ex14){return _0xcc9ex7[_0xb7fd[9]](200)[_0xb7fd[8]]({rows:_0xcc9ex14})})[_0xb7fd[17]](handleError(_0xcc9ex7))};function getFaxQueues(_0xcc9ex17){return function(){switch(_0xcc9ex17[_0xb7fd[44]]){case _0xb7fd[33]:return User[_0xb7fd[24]](_0xcc9ex17[_0xb7fd[22]],{attributes:[_0xb7fd[22]]})[_0xb7fd[13]](Util[_0xb7fd[41]]({},{attributes:[_0xb7fd[22]],include:[{raw:true,model:User,attributes:[_0xb7fd[22]]}]}))[_0xb7fd[13]](function(_0xcc9ex18){var _0xcc9ex19=[];_0xcc9ex18[_0xb7fd[40]][_0xb7fd[39]](function(_0xcc9ex1a){_0xcc9ex19= _[_0xb7fd[38]](_0xcc9ex19,_[_0xb7fd[37]](_0xcc9ex1a.Users,_0xb7fd[22]))});return {$or:{queue:_[_0xb7fd[37]](_0xcc9ex18[_0xb7fd[40]],_0xb7fd[22]),memberid:_0xcc9ex19}}});case _0xb7fd[43]:return User[_0xb7fd[24]](_0xcc9ex17[_0xb7fd[22]],{attributes:[_0xb7fd[22]]})[_0xb7fd[13]](function(_0xcc9ex1b){return _0xcc9ex1b[_0xb7fd[42]]({attributes:[_0xb7fd[22]]})})[_0xb7fd[13]](function(_0xcc9ex18){return {$or:{queue:_[_0xb7fd[37]](_0xcc9ex18,_0xb7fd[22]),memberid:_0xcc9ex17[_0xb7fd[22]]}}});default:return {}}}} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/report/fax/sessions -> index + * POST /api/report/fax/sessions -> create + * GET /api/report/fax/sessions/:id -> show + * PUT /api/report/fax/sessions/:id -> update + * DELETE /api/report/fax/sessions/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var ReportFaxSession = require('../../models').ReportFaxSession; +var ReportFaxSessionHistory = require('../../models').history.ReportFaxSessionHistory; +var User = require('../../models').User; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 204; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of ReportFaxSessions +exports.index = function(req, res) { + return ReportFaxSession.findAll(Util.getQuery(req.query)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single ReportFaxSession from the DB +exports.show = function(req, res) { + return ReportFaxSession.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new ReportFaxSession in the DB +exports.create = function(req, res) { + return ReportFaxSession.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing ReportFaxSession in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return ReportFaxSession.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a ReportFaxSession from the DB +exports.destroy = function(req, res) { + return ReportFaxSession.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +exports.describe = function(req, res) { + return ReportFaxSessionHistory + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(handleError(res)); +}; + +// Get timeout apps +exports.timeout = function(req, res) { + return Promise + .all([]) + .then(getFaxQueues(req.user)) + .then(function(condition) { + return ReportFaxSession + .count(Util.getQuery(req.query, _.merge({ + timeout: true + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get waiting apps +exports.waiting = function(req, res) { + return Promise + .all([]) + .then(getFaxQueues(req.user)) + .then(function(condition) { + return ReportFaxSession + .count(Util.getQuery(req.query, _.merge({ + leaveAt: null + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.waitingApplications = function(req, res) { + return Promise + .all([]) + .then(getFaxQueues(req.user)) + .then(function(condition) { + return ReportFaxSession + .findAll(Util.getQuery(req.query, _.merge({ + leaveAt: null + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + rows: data + }); + }) + .catch(handleError(res)); +}; + +function getFaxQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(Util.getFaxQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + $or: { + queue: _.map(userQueues.rows, 'id'), + memberid: users + } + }; + }); + case 'agent': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getFaxQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + $or: { + queue: _.map(userQueues, 'id'), + memberid: user.id + } + }; + }); + default: + return {}; + } + } +} diff --git a/server/api/report_fax_session/report_fax_session.events.js b/server/api/report_fax_session/report_fax_session.events.js index bc83cd9..6d9b5cc 100644 --- a/server/api/report_fax_session/report_fax_session.events.js +++ b/server/api/report_fax_session/report_fax_session.events.js @@ -1 +1,36 @@ -var _0x635d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x46\x61\x78\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x635d[0];const EventEmitter=require(_0x635d[1]);const ReportFaxSession=require(_0x635d[3])[_0x635d[2]];var ReportFaxSessionEvents= new EventEmitter();ReportFaxSessionEvents[_0x635d[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x635d[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x635d[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x635d[6]};for(var e in events){var event=events[e];ReportFaxSession[_0x635d[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xde15x8,_0xde15x9,_0xde15xa){ReportFaxSessionEvents[_0x635d[10]](event+ _0x635d[8]+ _0xde15x8[_0x635d[9]],_0xde15x8);ReportFaxSessionEvents[_0x635d[10]](event,_0xde15x8);_0xde15xa(null)}}module[_0x635d[11]]= ReportFaxSessionEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportFaxSession = require('../../models').ReportFaxSession; + +var ReportFaxSessionEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportFaxSessionEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportFaxSession.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportFaxSessionEvents.emit(event + ':' + doc._id, doc); + ReportFaxSessionEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportFaxSessionEvents; diff --git a/server/api/report_fax_session/report_fax_session.socket.js b/server/api/report_fax_session/report_fax_session.socket.js index ec36376..53585b9 100644 --- a/server/api/report_fax_session/report_fax_session.socket.js +++ b/server/api/report_fax_session/report_fax_session.socket.js @@ -1 +1,104 @@ -var _0xe3fa=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6C\x6F\x64\x61\x73\x68","\x62\x6C\x75\x65\x62\x69\x72\x64","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x45\x72\x72\x6F\x72\x20\x66\x69\x6C\x74\x65\x72\x69\x6E\x67\x20\x72\x65\x70\x6F\x72\x74\x20\x66\x61\x78\x20\x73\x65\x73\x73\x69\x6F\x6E\x73\x20\x61\x66\x74\x65\x72\x20\x73\x61\x76\x65","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x6D\x65\x6D\x62\x65\x72\x69\x64","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x71\x75\x65\x75\x65","\x65\x6D\x69\x74","\x74\x68\x65\x6E","\x61\x6C\x6C","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x69\x64","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x6F\x77\x73","\x67\x65\x74\x46\x61\x78\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x75\x73\x65\x72\x49\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x67\x65\x74\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x61\x67\x65\x6E\x74"];_0xe3fa[0];const ReportFaxSession=require(_0xe3fa[1]);const User=require(_0xe3fa[3])[_0xe3fa[2]];const Util=require(_0xe3fa[4]);const _=require(_0xe3fa[5]);const Promise=require(_0xe3fa[6]);var events=[_0xe3fa[7],_0xe3fa[8]];exports[_0xe3fa[9]]= function(_0xea87x7){for(var _0xea87x8=0,_0xea87x9=events[_0xe3fa[10]];_0xea87x8< _0xea87x9;_0xea87x8++){var _0xea87xa=events[_0xea87x8];var _0xea87xb=createListener(_0xe3fa[11]+ _0xea87xa,_0xea87x7);ReportFaxSession[_0xe3fa[12]](_0xea87xa,_0xea87xb);_0xea87x7[_0xe3fa[12]](_0xe3fa[13],removeListener(_0xea87xa,_0xea87xb))}};function createListener(_0xea87xa,_0xea87x7){return function(_0xea87xd){switch(_0xea87xa){case _0xe3fa[25]:return Promise[_0xe3fa[24]]([])[_0xe3fa[23]](getFaxQueues(_0xea87x7))[_0xe3fa[23]](function(_0xea87xf){if(_0xea87x7[_0xe3fa[17]]=== _0xe3fa[18]|| _[_0xe3fa[20]](_0xea87xf[_0xe3fa[19]],_0xea87xd[_0xe3fa[19]])|| _[_0xe3fa[20]](_0xea87xf[_0xe3fa[21]],_0xea87xd[_0xe3fa[21]])){_0xea87x7[_0xe3fa[22]](_0xea87xa,_0xea87xd)}})[_0xe3fa[16]](function(_0xea87xe){console[_0xe3fa[15]](_0xe3fa[14],_0xea87xe)});case _0xe3fa[26]:_0xea87x7[_0xe3fa[22]](_0xea87xa,_0xea87xd);break;default:}}}function removeListener(_0xea87xa,_0xea87xb){return function(){ReportFaxSession[_0xe3fa[27]](_0xea87xa,_0xea87xb)}}function getFaxQueues(_0xea87x12){return function(){switch(_0xea87x12[_0xe3fa[17]]){case _0xe3fa[36]:return User[_0xe3fa[35]](_0xea87x12[_0xe3fa[34]],{attributes:[_0xe3fa[28]]})[_0xe3fa[23]](Util[_0xe3fa[33]]({},{attributes:[_0xe3fa[28]],include:[{raw:true,model:User,attributes:[_0xe3fa[28]]}]}))[_0xe3fa[23]](function(_0xea87x13){var _0xea87x14=[];_0xea87x13[_0xe3fa[32]][_0xe3fa[31]](function(_0xea87x15){_0xea87x14= _[_0xe3fa[30]](_0xea87x14,_[_0xe3fa[29]](_0xea87x15.Users,_0xe3fa[28]))});return {queue:_[_0xe3fa[29]](_0xea87x13[_0xe3fa[32]],_0xe3fa[28]),memberid:_0xea87x14}});case _0xe3fa[38]:return User[_0xe3fa[35]](_0xea87x12[_0xe3fa[34]],{attributes:[_0xe3fa[28]]})[_0xe3fa[23]](function(_0xea87x16){return _0xea87x16[_0xe3fa[37]]({attributes:[_0xe3fa[28]]})})[_0xe3fa[23]](function(_0xea87x13){return {queue:_[_0xe3fa[29]](_0xea87x13,_0xe3fa[28]),memberid:_0xea87x12[_0xe3fa[34]]}});default:return {}}}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ReportFaxSession = require('./report_fax_session.events'); +const User = require('../../models').User; +const Util = require('../../config/util'); +const _ = require('lodash'); +const Promise = require('bluebird'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_fax_session:' + event, socket); + + ReportFaxSession.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'report_fax_session:save': + return Promise + .all([]) + .then(getFaxQueues(socket)) + .then(function(condition) { + if (socket.role === 'admin' || _.includes(condition.memberid, doc.memberid) || _.includes(condition.queue, doc.queue)) { + socket.emit(event, doc); + } + }) + .catch(function(err) { + console.log('Error filtering report fax sessions after save', err); + }); + case 'report_fax_session:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportFaxSession.removeListener(event, listener); + }; +} + +function getFaxQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.userId, { + attributes: ['id'] + }) + .then(Util.getFaxQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + queue: _.map(userQueues.rows, 'id'), + memberid: users + }; + }); + case 'agent': + return User + .findById(user.userId, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getFaxQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + queue: _.map(userQueues, 'id'), + memberid: user.userId + }; + }); + default: + return {}; + } + } +} diff --git a/server/api/report_integration/index.js b/server/api/report_integration/index.js index 56384fa..1b62e8a 100644 --- a/server/api/report_integration/index.js +++ b/server/api/report_integration/index.js @@ -1 +1,14 @@ -var _0xcb21=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x3A\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];_0xcb21[0];var express=require(_0xcb21[1]);var controller=require(_0xcb21[2]);var auth=require(_0xcb21[3]);var router=express.Router();router[_0xcb21[9]](_0xcb21[4],auth[_0xcb21[5]](),auth[_0xcb21[7]]([17],[_0xcb21[6]]),controller[_0xcb21[8]]);router[_0xcb21[9]](_0xcb21[10],auth[_0xcb21[5]](),auth[_0xcb21[7]]([17],[_0xcb21[6]]),controller[_0xcb21[11]]);router[_0xcb21[13]](_0xcb21[4],controller[_0xcb21[12]]);router[_0xcb21[13]](_0xcb21[14],controller[_0xcb21[12]]);module[_0xcb21[15]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_integration.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.index); +router.get('/describe', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.describe); +router.post('/', controller.create); +router.post('/:integration', controller.create); + +module.exports = router; diff --git a/server/api/report_integration/report_integration.controller.js b/server/api/report_integration/report_integration.controller.js index ba22e4b..b63b7a6 100644 --- a/server/api/report_integration/report_integration.controller.js +++ b/server/api/report_integration/report_integration.controller.js @@ -1 +1,61 @@ -var _0x8115=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x63\x72\x65\x61\x74\x65","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x70\x61\x72\x61\x6D\x73","\x62\x6F\x64\x79","\x74\x69\x63\x6B\x65\x74\x49\x64","\x69\x64\x5F\x73\x70\x6F\x6F\x6C\x65\x72","\x65\x76\x65\x6E\x74\x43\x68\x61\x6E\x6E\x65\x6C","\x76\x6F\x69\x63\x65","\x64\x65\x73\x74\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x6E\x75\x6D\x62\x65\x72","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x6C\x69\x6E\x6B\x65\x64\x5F\x63\x68\x61\x6E\x6E\x65\x6C","\x73\x70\x6C\x69\x74","\x61\x67\x65\x6E\x74\x63\x6F\x6E\x6E\x65\x63\x74\x41\x74","\x74\x69\x6D\x65\x73\x74\x61\x6D\x70","\x74\x64\x44\x69\x73\x70\x6F\x73\x61\x6C","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73"];_0x8115[0];var _=require(_0x8115[1]);var ReportIntegration=require(_0x8115[3])[_0x8115[2]];var ReportIntegrationHistory=require(_0x8115[3])[_0x8115[5]][_0x8115[4]];var Util=require(_0x8115[6]);const moment=require(_0x8115[7]);exports[_0x8115[8]]= function(_0xfc66x6,_0xfc66x7,_0xfc66x8){return ReportIntegration[_0x8115[15]](Util[_0x8115[14]](_0xfc66x6[_0x8115[13]]))[_0x8115[12]](function(_0xfc66xa){return _0xfc66x7[_0x8115[11]](200)[_0x8115[10]](_0xfc66xa)})[_0x8115[9]](function(_0xfc66x9){return handleError(_0xfc66x7,_0xfc66x9)})};exports[_0x8115[16]]= function(_0xfc66x6,_0xfc66x7){return ReportIntegrationHistory[_0x8115[16]]()[_0x8115[12]](function(_0xfc66xb){return _0xfc66x7[_0x8115[11]](200)[_0x8115[10]](_0xfc66xb)})[_0x8115[9]](function(_0xfc66x9){return handleError(_0xfc66x7,_0xfc66x9)})};exports[_0x8115[17]]= function(_0xfc66x6,_0xfc66x7){if(_0xfc66x6[_0x8115[19]][_0x8115[18]]){_0xfc66x6[_0x8115[20]][_0x8115[18]]= _0xfc66x6[_0x8115[19]][_0x8115[18]];switch(_0xfc66x6[_0x8115[19]][_0x8115[18]]){case _0x8115[32]:_0xfc66x6[_0x8115[20]][_0x8115[21]]= _0xfc66x6[_0x8115[20]][_0x8115[22]];_0xfc66x6[_0x8115[20]][_0x8115[23]]= _0x8115[24];_0xfc66x6[_0x8115[20]][_0x8115[25]]= _0xfc66x6[_0x8115[20]][_0x8115[26]];_0xfc66x6[_0x8115[20]][_0x8115[27]]= _0xfc66x6[_0x8115[20]][_0x8115[28]]?_0xfc66x6[_0x8115[20]][_0x8115[28]][_0x8115[29]](/\/|-/)[1]:null;_0xfc66x6[_0x8115[20]][_0x8115[30]]= moment(_0xfc66x6[_0x8115[20]][_0x8115[31]]);break;default:return _0xfc66x7[_0x8115[33]](404)}};return ReportIntegration[_0x8115[17]](_0xfc66x6[_0x8115[20]])[_0x8115[12]](function(_0xfc66xc){return _0xfc66x7[_0x8115[11]](201)[_0x8115[10]](_0xfc66xc)})[_0x8115[9]](function(_0xfc66x9){return handleError(_0xfc66x7,_0xfc66x9)})};function handleError(_0xfc66x7,_0xfc66x9){return _0xfc66x7[_0x8115[11]](500)[_0x8115[10]](_0xfc66x9)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var ReportIntegration = require('../../models').ReportIntegration; +var ReportIntegrationHistory = require('../../models').history.ReportIntegrationHistory; +var Util = require('../../config/util'); +const moment = require('moment'); + +// Get list of report_integrations +exports.index = function(req, res, next) { + return ReportIntegration + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get list of fields +exports.describe = function(req, res) { + return ReportIntegrationHistory + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new report_integration in the DB. +exports.create = function(req, res) { + if (req.params.integration) { + req.body.integration = req.params.integration; + switch (req.params.integration) { + case 'tdDisposal': + req.body.ticketId = req.body.id_spooler; + req.body.eventChannel = 'voice'; + req.body.destcalleridnum = req.body.number; + req.body.membername = req.body.linked_channel ? req.body.linked_channel.split(/\/|-/)[1] : null; + req.body.agentconnectAt = moment(req.body.timestamp); + break; + default: + return res.sendStatus(404); + } + } + return ReportIntegration + .create(req.body) + .then(function(report_integration) { + return res.status(201).send(report_integration); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/report_integration/report_integration.events.js b/server/api/report_integration/report_integration.events.js index 4b9d6ad..ea294b9 100644 --- a/server/api/report_integration/report_integration.events.js +++ b/server/api/report_integration/report_integration.events.js @@ -1 +1,34 @@ -var _0xdd77=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xdd77[0];const EventEmitter=require(_0xdd77[1]);const ReportIntegration=require(_0xdd77[3])[_0xdd77[2]];var ReportIntegrationEvents= new EventEmitter();ReportIntegrationEvents[_0xdd77[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xdd77[5]};for(var e in events){var event=events[e];ReportIntegration[_0xdd77[6]](e,emitEvent(event))};function emitEvent(event){return function(_0x59d8x8,_0x59d8x9,_0x59d8xa){ReportIntegrationEvents[_0xdd77[9]](event+ _0xdd77[7]+ _0x59d8x8[_0xdd77[8]],_0x59d8x8);ReportIntegrationEvents[_0xdd77[9]](event,_0x59d8x8);_0x59d8xa(null)}}module[_0xdd77[10]]= ReportIntegrationEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportIntegration = require('../../models').ReportIntegration; + +var ReportIntegrationEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportIntegrationEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportIntegration.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportIntegrationEvents.emit(event + ':' + doc._id, doc); + ReportIntegrationEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportIntegrationEvents; diff --git a/server/api/report_integration/report_integration.socket.js b/server/api/report_integration/report_integration.socket.js index 38c5f27..78f2dea 100644 --- a/server/api/report_integration/report_integration.socket.js +++ b/server/api/report_integration/report_integration.socket.js @@ -1 +1,41 @@ -var _0x83f8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x75\x74\x69\x6C","\x73\x61\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x6E\x61\x6D\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x3A\x25\x73","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x66\x6F\x72\x6D\x61\x74","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x83f8[0];const ReportIntegrationEvents=require(_0x83f8[1]);const util=require(_0x83f8[2]);var events=[_0x83f8[3]];exports[_0x83f8[4]]= function(_0xf68dx4){for(var _0xf68dx5=0,_0xf68dx6=events[_0x83f8[5]];_0xf68dx5< _0xf68dx6;_0xf68dx5++){var _0xf68dx7=events[_0xf68dx5];var _0xf68dx8=createListener(_0x83f8[6]+ _0xf68dx7,_0xf68dx4);ReportIntegrationEvents[_0x83f8[7]](_0xf68dx7,_0xf68dx8);_0xf68dx4[_0x83f8[7]](_0x83f8[8],removeListener(_0xf68dx7,_0xf68dx8))}};function createListener(_0xf68dx7,_0xf68dx4){return function(_0xf68dxa){switch(_0xf68dx7){case _0x83f8[15]:if(_0xf68dx4[_0x83f8[9]]=== _0xf68dxa[_0x83f8[10]]){_0xf68dx4[_0x83f8[14]](util[_0x83f8[13]](_0x83f8[11],_0xf68dxa[_0x83f8[12]]),_0xf68dxa)};break;default:}}}function removeListener(_0xf68dx7,_0xf68dx8){return function(){ReportIntegrationEvents[_0x83f8[16]](_0xf68dx7,_0xf68dx8)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ReportIntegrationEvents = require('./report_integration.events'); +const util = require('util'); + +// Model events to emit +var events = ['save']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_integration:' + event, socket); + + ReportIntegrationEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'report_integration:save': + if (socket.name === doc.membername) { + socket.emit(util.format('report_integration:%s', doc.integration), doc); + } + break; + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportIntegrationEvents.removeListener(event, listener); + }; +} diff --git a/server/api/report_mail/index.js b/server/api/report_mail/index.js index babfad2..9256f76 100644 --- a/server/api/report_mail/index.js +++ b/server/api/report_mail/index.js @@ -1 +1,14 @@ -var _0xd210=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x4D\x61\x69\x6C","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x61\x63\x63\x65\x70\x74\x2F\x3A\x75\x6E\x69\x71\x75\x65\x69\x64","\x68\x61\x73\x52\x6F\x6C\x65","\x61\x63\x63\x65\x70\x74","\x2F\x3A\x69\x64\x2F\x72\x65\x6A\x65\x63\x74","\x72\x65\x6A\x65\x63\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xd210[0];var express=require(_0xd210[1]);var controller=require(_0xd210[2]);var auth=require(_0xd210[3]);var license=require(_0xd210[4]);var router=express.Router();router[_0xd210[12]](_0xd210[5],auth[_0xd210[6]](),license[_0xd210[7]](),auth[_0xd210[10]]([17],[_0xd210[8],_0xd210[9]]),controller[_0xd210[11]]);router[_0xd210[12]](_0xd210[13],auth[_0xd210[6]](),license[_0xd210[7]](),auth[_0xd210[14]](_0xd210[9]),controller[_0xd210[15]]);router[_0xd210[12]](_0xd210[16],auth[_0xd210[6]](),license[_0xd210[7]](),auth[_0xd210[14]](_0xd210[9]),controller[_0xd210[17]]);module[_0xd210[18]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_mail.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasMail(), auth.hasModule([17], ['admin', 'agent']), controller.index); +router.get('/:id/accept/:uniqueid', auth.isAuthenticated(), license.hasMail(), auth.hasRole('agent'), controller.accept); +router.get('/:id/reject', auth.isAuthenticated(), license.hasMail(), auth.hasRole('agent'), controller.reject); + +module.exports = router; diff --git a/server/api/report_mail/report_mail.controller.js b/server/api/report_mail/report_mail.controller.js index 7621105..c0a5cde 100644 --- a/server/api/report_mail/report_mail.controller.js +++ b/server/api/report_mail/report_mail.controller.js @@ -1 +1,113 @@ -var _0xf7b7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x53\x74\x61\x74\x75\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x72\x6F\x6C\x65","\x75\x73\x65\x72","\x61\x67\x65\x6E\x74","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x6E\x61\x6D\x65","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x61\x63\x63\x65\x70\x74","\x2E","\x73\x70\x6C\x69\x74","\x75\x6E\x69\x71\x75\x65\x69\x64","\x70\x61\x72\x61\x6D\x73","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x4F\x50\x45\x4E","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x72\x65\x6A\x65\x63\x74","\x52\x45\x4A\x45\x43\x54","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x72\x6F\x6F\x6D\x69\x64","\x63\x72\x65\x61\x74\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x6C\x6F\x67"];_0xf7b7[0];var _=require(_0xf7b7[1]);var moment=require(_0xf7b7[2]);var Report=require(_0xf7b7[4])[_0xf7b7[3]];var Room=require(_0xf7b7[4])[_0xf7b7[5]];var Status=require(_0xf7b7[4])[_0xf7b7[6]];var sequelize=require(_0xf7b7[4])[_0xf7b7[7]];var Util=require(_0xf7b7[8]);exports[_0xf7b7[9]]= function(_0xa4c4x8,_0xa4c4x9,_0xa4c4xa){var _0xa4c4xb={};if(_0xa4c4x8[_0xf7b7[11]][_0xf7b7[10]]=== _0xf7b7[12]){_0xa4c4xb[_0xf7b7[13]]= _0xa4c4x8[_0xf7b7[11]][_0xf7b7[14]]};return Report[_0xf7b7[21]](Util[_0xf7b7[20]](_0xa4c4x8[_0xf7b7[19]],_0xa4c4xb))[_0xf7b7[18]](function(_0xa4c4xd){_0xa4c4x9[_0xf7b7[17]](200)[_0xf7b7[16]](_0xa4c4xd)})[_0xf7b7[15]](function(_0xa4c4xc){return handleError(_0xa4c4x9,_0xa4c4xc)})};exports[_0xf7b7[22]]= function(_0xa4c4x8,_0xa4c4x9){var _0xa4c4xe=_0xa4c4x8[_0xf7b7[26]][_0xf7b7[25]][_0xf7b7[24]](_0xf7b7[23])[1];return Report[_0xf7b7[33]](_0xa4c4x8[_0xf7b7[26]][_0xf7b7[32]])[_0xf7b7[18]](function(_0xa4c4xf){if(!_0xa4c4xf){return _0xa4c4x9[_0xf7b7[27]](404)};var _0xa4c4x10=_[_0xf7b7[30]](_0xa4c4xf,{connectid:_0xa4c4x8[_0xf7b7[26]][_0xf7b7[25]]});return _0xa4c4x10[_0xf7b7[31]]()})[_0xf7b7[18]](function(){return Room[_0xf7b7[29]]({status:_0xf7b7[28],openReason:_0xf7b7[12]},{where:{id:_0xa4c4xe},user:_0xa4c4x8[_0xf7b7[11]],individualHooks:true})})[_0xf7b7[18]](function(){return _0xa4c4x9[_0xf7b7[27]](200)})[_0xf7b7[15]](sequelize.UniqueConstraintError,function(_0xa4c4xc){return _0xa4c4x9[_0xf7b7[27]](504)})[_0xf7b7[15]](function(_0xa4c4xc){return handleError(_0xa4c4x9,_0xa4c4xc)})};exports[_0xf7b7[34]]= function(_0xa4c4x8,_0xa4c4x9){var _0xa4c4x11;return Report[_0xf7b7[33]](_0xa4c4x8[_0xf7b7[26]][_0xf7b7[32]])[_0xf7b7[18]](function(_0xa4c4x12){_0xa4c4x11= _0xa4c4x12;if(!_0xa4c4x11){return _0xa4c4x9[_0xf7b7[27]](404)};var _0xa4c4x10=_[_0xf7b7[30]](_0xa4c4x12,{rejectedAt:moment()[_0xf7b7[40]](_0xf7b7[39])});return _0xa4c4x10[_0xf7b7[31]]()})[_0xf7b7[18]](function(){return Status[_0xf7b7[38]]({status:_0xf7b7[35],data1:_0xa4c4x8[_0xf7b7[11]][_0xf7b7[14]],data2:_0xa4c4x8[_0xf7b7[11]][_0xf7b7[36]],UserId:_0xa4c4x8[_0xf7b7[11]][_0xf7b7[32]],MailRoomId:_0xa4c4x11[_0xf7b7[37]]})})[_0xf7b7[18]](function(){return _0xa4c4x9[_0xf7b7[27]](200)})[_0xf7b7[15]](function(_0xa4c4xc){return handleError(_0xa4c4x9,_0xa4c4xc)})};function handleError(_0xa4c4x9,_0xa4c4xc){console[_0xf7b7[41]](_0xa4c4xc);return _0xa4c4x9[_0xf7b7[17]](500)[_0xf7b7[16]](_0xa4c4xc)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var moment = require('moment'); + +var Report = require('../../models').ReportMail; +var Room = require('../../models').MailRoom; +var Status = require('../../models').MailRoomStatus; + +var sequelize = require('../../models').sequelize; + +var Util = require('../../config/util'); + +// Get list of agents +exports.index = function(req, res, next) { + var where = {}; + if (req.user.role === 'agent') { + where.membername = req.user.name; + } + return Report + .findAndCountAll(Util.getQuery(req.query, where)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single reportMail +exports.accept = function(req, res) { + var _roomid = req.params.uniqueid.split('.')[1]; + + return Report + .findById(req.params.id) + .then(function(reportMail) { + if (!reportMail) { + return res.sendStatus(404); + } + + var updated = _.merge(reportMail, { + connectid: req.params.uniqueid + }); + + return updated + .save(); + }) + .then(function() { + return Room + .update({ + status: 'OPEN', + openReason: 'agent' + }, { + where: { + id: _roomid + }, + user: req.user, + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return res.sendStatus(504); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single reportMail +exports.reject = function(req, res) { + var _report; + + return Report + .findById(req.params.id) + .then(function(report) { + _report = report; + + if (!_report) { + return res.sendStatus(404); + } + + var updated = _.merge(report, { + rejectedAt: moment().format("YYYY-MM-DD HH:mm:ss") + }); + + return updated + .save(); + }) + .then(function() { + return Status + .create({ + status: 'REJECT', + data1: req.user.name, + data2: req.user.fullname, + UserId: req.user.id, + MailRoomId: _report.roomid + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + console.log(err); + return res.status(500).send(err); +} diff --git a/server/api/report_mail/report_mail.events.js b/server/api/report_mail/report_mail.events.js index 170d310..4a48caa 100644 --- a/server/api/report_mail/report_mail.events.js +++ b/server/api/report_mail/report_mail.events.js @@ -1 +1,36 @@ -var _0x52c1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x52c1[0];const EventEmitter=require(_0x52c1[1]);const ReportMail=require(_0x52c1[3])[_0x52c1[2]];var ReportMailEvents= new EventEmitter();ReportMailEvents[_0x52c1[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x52c1[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x52c1[6],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x52c1[7]};for(var e in events){var event=events[e];ReportMail[_0x52c1[8]](e,emitEvent(event))};function emitEvent(event){return function(_0xe509x8,_0xe509x9,_0xe509xa){ReportMailEvents[_0x52c1[11]](event+ _0x52c1[9]+ _0xe509x8[_0x52c1[10]],_0xe509x8);ReportMailEvents[_0x52c1[11]](event,_0xe509x8);_0xe509xa(null)}}module[_0x52c1[12]]= ReportMailEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportMail = require('../../models').ReportMail; + +var ReportMailEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportMailEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'update', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportMail.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportMailEvents.emit(event + ':' + doc._id, doc); + ReportMailEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportMailEvents; diff --git a/server/api/report_mail/report_mail.socket.js b/server/api/report_mail/report_mail.socket.js index 8b9c838..0b9cab3 100644 --- a/server/api/report_mail/report_mail.socket.js +++ b/server/api/report_mail/report_mail.socket.js @@ -1 +1,46 @@ -var _0x8d44=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x3A\x73\x61\x76\x65","\x6E\x61\x6D\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x3A\x75\x70\x64\x61\x74\x65","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x8d44[0];const ReportMailEvents=require(_0x8d44[1]);var events=[_0x8d44[2],_0x8d44[3],_0x8d44[4]];exports[_0x8d44[5]]= function(_0x5e9ax3){for(var _0x5e9ax4=0,_0x5e9ax5=events[_0x8d44[6]];_0x5e9ax4< _0x5e9ax5;_0x5e9ax4++){var _0x5e9ax6=events[_0x5e9ax4];var _0x5e9ax7=createListener(_0x8d44[7]+ _0x5e9ax6,_0x5e9ax3);ReportMailEvents[_0x8d44[8]](_0x5e9ax6,_0x5e9ax7);_0x5e9ax3[_0x8d44[8]](_0x8d44[9],removeListener(_0x5e9ax6,_0x5e9ax7))}};function createListener(_0x5e9ax6,_0x5e9ax3){return function(_0x5e9ax9){switch(_0x5e9ax6){case _0x8d44[10]:;case _0x8d44[16]:if(_0x5e9ax3[_0x8d44[11]]=== _0x5e9ax9[_0x8d44[12]]|| _0x5e9ax3[_0x8d44[13]]=== _0x8d44[14]){_0x5e9ax3[_0x8d44[15]](_0x5e9ax6,_0x5e9ax9)};break;case _0x8d44[17]:_0x5e9ax3[_0x8d44[15]](_0x5e9ax6,_0x5e9ax9);break;default:}}}function removeListener(_0x5e9ax6,_0x5e9ax7){return function(){ReportMailEvents[_0x8d44[18]](_0x5e9ax6,_0x5e9ax7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ReportMailEvents = require('./report_mail.events'); + +// Model events to emit +var events = ['save', 'update', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_mail:' + event, socket); + + ReportMailEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'report_mail:save': + case 'report_mail:update': + if (socket.name === doc.membername || socket.role === 'admin') { + socket.emit(event, doc); + } + break; + + case 'report_mail:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportMailEvents.removeListener(event, listener); + }; +} diff --git a/server/api/report_mail_session/index.js b/server/api/report_mail_session/index.js index cc81961..3e04193 100644 --- a/server/api/report_mail_session/index.js +++ b/server/api/report_mail_session/index.js @@ -1 +1,16 @@ -var _0xf57f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x4D\x61\x69\x6C","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x74\x69\x6D\x65\x6F\x75\x74","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x74\x69\x6D\x65\x6F\x75\x74","\x2F\x77\x61\x69\x74\x69\x6E\x67","\x77\x61\x69\x74\x69\x6E\x67","\x2F\x77\x61\x69\x74\x69\x6E\x67\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x61\x67\x65\x6E\x74","\x77\x61\x69\x74\x69\x6E\x67\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0xf57f[0];var express=require(_0xf57f[1]);var controller=require(_0xf57f[2]);var auth=require(_0xf57f[3]);var license=require(_0xf57f[4]);var router=express.Router();router[_0xf57f[11]](_0xf57f[5],auth[_0xf57f[6]](),license[_0xf57f[7]](),auth[_0xf57f[9]]([17],[_0xf57f[8]]),controller[_0xf57f[10]]);router[_0xf57f[11]](_0xf57f[12],auth[_0xf57f[6]](),license[_0xf57f[7]](),auth[_0xf57f[9]]([17],[_0xf57f[8]]),controller[_0xf57f[13]]);router[_0xf57f[11]](_0xf57f[14],license[_0xf57f[15]](),auth[_0xf57f[6]](),license[_0xf57f[7]](),auth[_0xf57f[9]]([17],[_0xf57f[8]]),controller[_0xf57f[16]]);router[_0xf57f[11]](_0xf57f[17],license[_0xf57f[15]](),auth[_0xf57f[6]](),license[_0xf57f[7]](),auth[_0xf57f[9]]([17],[_0xf57f[8]]),controller[_0xf57f[18]]);router[_0xf57f[11]](_0xf57f[19],auth[_0xf57f[6]](),license[_0xf57f[7]](),auth[_0xf57f[9]]([9],[_0xf57f[8],_0xf57f[20]]),controller[_0xf57f[21]]);module[_0xf57f[22]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_mail_session.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasMail(), auth.hasModule([17], ['admin']), controller.index); +router.get('/describe', auth.isAuthenticated(), license.hasMail(), auth.hasModule([17], ['admin']), controller.describe); +router.get('/timeout', license.isValidDate(), auth.isAuthenticated(), license.hasMail(), auth.hasModule([17], ['admin']), controller.timeout); +router.get('/waiting', license.isValidDate(), auth.isAuthenticated(), license.hasMail(), auth.hasModule([17], ['admin']), controller.waiting); +router.get('/waiting/applications', auth.isAuthenticated(), license.hasMail(), auth.hasModule([9], ['admin', 'agent']), controller.waitingApplications); + +module.exports = router; diff --git a/server/api/report_mail_session/report_mail_session.controller.js b/server/api/report_mail_session/report_mail_session.controller.js index 8e05454..1764001 100644 --- a/server/api/report_mail_session/report_mail_session.controller.js +++ b/server/api/report_mail_session/report_mail_session.controller.js @@ -1 +1,155 @@ -var _0x297a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x55\x73\x65\x72","\x62\x6C\x75\x65\x62\x69\x72\x64","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x69\x64","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x6F\x77\x73","\x67\x65\x74\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x67\x65\x74\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65","\x74\x69\x6D\x65\x6F\x75\x74","\x6C\x6F\x67","\x6D\x65\x72\x67\x65","\x63\x6F\x75\x6E\x74","\x61\x6C\x6C","\x77\x61\x69\x74\x69\x6E\x67","\x77\x61\x69\x74\x69\x6E\x67\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x66\x69\x6E\x64\x41\x6C\x6C"];_0x297a[0];var _=require(_0x297a[1]);var ReportMailSession=require(_0x297a[3])[_0x297a[2]];var ReportMailSessionHistory=require(_0x297a[3])[_0x297a[5]][_0x297a[4]];var Util=require(_0x297a[6]);var User=require(_0x297a[3])[_0x297a[7]];var Promise=require(_0x297a[8]);exports[_0x297a[9]]= function(_0xed80x7,_0xed80x8,_0xed80x9){return ReportMailSession[_0x297a[16]](Util[_0x297a[15]](_0xed80x7[_0x297a[14]]))[_0x297a[13]](function(_0xed80xb){_0xed80x8[_0x297a[12]](200)[_0x297a[11]](_0xed80xb)})[_0x297a[10]](function(_0xed80xa){return handleError(_0xed80x8,_0xed80xa)})};exports[_0x297a[17]]= function(_0xed80x7,_0xed80x8){return ReportMailSession[_0x297a[17]]()[_0x297a[13]](function(_0xed80xc){return _0xed80x8[_0x297a[12]](200)[_0x297a[11]](_0xed80xc)})[_0x297a[10]](function(_0xed80xa){return handleError(_0xed80x8,_0xed80xa)})};function getMailQueues(_0xed80xe){return function(){switch(_0xed80xe[_0x297a[28]]){case _0x297a[25]:return User[_0x297a[24]](_0xed80xe[_0x297a[18]],{attributes:[_0x297a[18]]})[_0x297a[13]](Util[_0x297a[23]]({},{attributes:[_0x297a[18]],include:[{raw:true,model:User,attributes:[_0x297a[18]]}]}))[_0x297a[13]](function(_0xed80xf){var _0xed80x10=[];_0xed80xf[_0x297a[22]][_0x297a[21]](function(_0xed80x11){_0xed80x10= _[_0x297a[20]](_0xed80x10,_[_0x297a[19]](_0xed80x11.Users,_0x297a[18]))});return {$or:{queue:_[_0x297a[19]](_0xed80xf[_0x297a[22]],_0x297a[18]),memberid:_0xed80x10}}});case _0x297a[27]:return User[_0x297a[24]](_0xed80xe[_0x297a[18]],{attributes:[_0x297a[18]]})[_0x297a[13]](function(_0xed80x12){return _0xed80x12[_0x297a[26]]({attributes:[_0x297a[18]]})})[_0x297a[13]](function(_0xed80xf){return {$or:{queue:_[_0x297a[19]](_0xed80xf,_0x297a[18]),memberid:_0xed80xe[_0x297a[18]]}}});default:return {}}}}exports[_0x297a[29]]= function(_0xed80x7,_0xed80x8){return Promise[_0x297a[33]]([])[_0x297a[13]](getMailQueues(_0xed80x7[_0x297a[25]]))[_0x297a[13]](function(_0xed80x14){return ReportMailSession[_0x297a[32]](Util[_0x297a[15]](_0xed80x7[_0x297a[14]],_[_0x297a[31]]({timeout:true},_0xed80x14)))})[_0x297a[13]](function(_0xed80x13){return _0xed80x8[_0x297a[12]](200)[_0x297a[11]]({value:_0xed80x13})})[_0x297a[10]](function(_0xed80xa){console[_0x297a[30]](_0xed80xa);return handleError(_0xed80x8,_0xed80xa)})};exports[_0x297a[34]]= function(_0xed80x7,_0xed80x8){return Promise[_0x297a[33]]([])[_0x297a[13]](getMailQueues(_0xed80x7[_0x297a[25]]))[_0x297a[13]](function(_0xed80x14){return ReportMailSession[_0x297a[32]](Util[_0x297a[15]](_0xed80x7[_0x297a[14]],_[_0x297a[31]]({leaveAt:null},_0xed80x14)))})[_0x297a[13]](function(_0xed80x13){return _0xed80x8[_0x297a[12]](200)[_0x297a[11]]({value:_0xed80x13})})[_0x297a[10]](function(_0xed80xa){console[_0x297a[30]](_0xed80xa);return handleError(_0xed80x8,_0xed80xa)})};exports[_0x297a[35]]= function(_0xed80x7,_0xed80x8){return Promise[_0x297a[33]]([])[_0x297a[13]](getMailQueues(_0xed80x7[_0x297a[25]]))[_0x297a[13]](function(_0xed80x14){return ReportMailSession[_0x297a[36]](Util[_0x297a[15]](_0xed80x7[_0x297a[14]],_[_0x297a[31]]({leaveAt:null},_0xed80x14)))})[_0x297a[13]](function(_0xed80x13){return _0xed80x8[_0x297a[12]](200)[_0x297a[11]]({rows:_0xed80x13})})[_0x297a[10]](function(_0xed80xa){console[_0x297a[30]](_0xed80xa);return handleError(_0xed80x8,_0xed80xa)})};function handleError(_0xed80x8,_0xed80xa){return _0xed80x8[_0x297a[12]](500)[_0x297a[11]](_0xed80xa)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var ReportMailSession = require('../../models').ReportMailSession; +var ReportMailSessionHistory = require('../../models').history.ReportMailSessionHistory; + +var Util = require('../../config/util'); +var User = require('../../models').User; +var Promise = require('bluebird'); + +// Get list of agents +exports.index = function(req, res, next) { + return ReportMailSession + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get list of fields +exports.describe = function(req, res) { + return ReportMailSession + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function getMailQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(Util.getMailQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + $or: { + queue: _.map(userQueues.rows, 'id'), + memberid: users + } + }; + }); + case 'agent': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getMailQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + $or: { + queue: _.map(userQueues, 'id'), + memberid: user.id + } + }; + }); + default: + return {}; + } + } +} + +// Get timeout apps +exports.timeout = function(req, res) { + return Promise + .all([]) + .then(getMailQueues(req.user)) + .then(function(condition) { + return ReportMailSession + .count(Util.getQuery(req.query, _.merge({ + timeout: true + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get waiting apps +exports.waiting = function(req, res) { + return Promise + .all([]) + .then(getMailQueues(req.user)) + .then(function(condition) { + return ReportMailSession + .count(Util.getQuery(req.query, _.merge({ + leaveAt: null + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.waitingApplications = function(req, res) { + return Promise + .all([]) + .then(getMailQueues(req.user)) + .then(function(condition) { + return ReportMailSession + .findAll(Util.getQuery(req.query, _.merge({ + leaveAt: null + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + rows: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/report_mail_session/report_mail_session.events.js b/server/api/report_mail_session/report_mail_session.events.js index 97992ba..95c4a4e 100644 --- a/server/api/report_mail_session/report_mail_session.events.js +++ b/server/api/report_mail_session/report_mail_session.events.js @@ -1 +1,36 @@ -var _0xf5d6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xf5d6[0];const EventEmitter=require(_0xf5d6[1]);const ReportMailSession=require(_0xf5d6[3])[_0xf5d6[2]];var ReportMailSessionEvents= new EventEmitter();ReportMailSessionEvents[_0xf5d6[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xf5d6[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xf5d6[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xf5d6[6]};for(var e in events){var event=events[e];ReportMailSession[_0xf5d6[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x67c1x8,_0x67c1x9,_0x67c1xa){ReportMailSessionEvents[_0xf5d6[10]](event+ _0xf5d6[8]+ _0x67c1x8[_0xf5d6[9]],_0x67c1x8);ReportMailSessionEvents[_0xf5d6[10]](event,_0x67c1x8);_0x67c1xa(null)}}module[_0xf5d6[11]]= ReportMailSessionEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportMailSession = require('../../models').ReportMailSession; + +var ReportMailSessionEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportMailSessionEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportMailSession.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportMailSessionEvents.emit(event + ':' + doc._id, doc); + ReportMailSessionEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportMailSessionEvents; diff --git a/server/api/report_mail_session/report_mail_session.socket.js b/server/api/report_mail_session/report_mail_session.socket.js index bee963c..5014a50 100644 --- a/server/api/report_mail_session/report_mail_session.socket.js +++ b/server/api/report_mail_session/report_mail_session.socket.js @@ -1 +1,104 @@ -var _0x689b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6C\x6F\x64\x61\x73\x68","\x62\x6C\x75\x65\x62\x69\x72\x64","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x45\x72\x72\x6F\x72\x20\x66\x69\x6C\x74\x65\x72\x69\x6E\x67\x20\x72\x65\x70\x6F\x72\x74\x20\x6D\x61\x69\x6C\x20\x73\x65\x73\x73\x69\x6F\x6E\x73\x20\x61\x66\x74\x65\x72\x20\x73\x61\x76\x65","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x6D\x65\x6D\x62\x65\x72\x69\x64","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x71\x75\x65\x75\x65","\x65\x6D\x69\x74","\x74\x68\x65\x6E","\x61\x6C\x6C","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x69\x64","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x6F\x77\x73","\x67\x65\x74\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x75\x73\x65\x72\x49\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x67\x65\x74\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x61\x67\x65\x6E\x74"];_0x689b[0];const ReportMailSessionEvents=require(_0x689b[1]);const User=require(_0x689b[3])[_0x689b[2]];const Util=require(_0x689b[4]);const _=require(_0x689b[5]);const Promise=require(_0x689b[6]);var events=[_0x689b[7],_0x689b[8]];exports[_0x689b[9]]= function(_0x1900x7){for(var _0x1900x8=0,_0x1900x9=events[_0x689b[10]];_0x1900x8< _0x1900x9;_0x1900x8++){var _0x1900xa=events[_0x1900x8];var _0x1900xb=createListener(_0x689b[11]+ _0x1900xa,_0x1900x7);ReportMailSessionEvents[_0x689b[12]](_0x1900xa,_0x1900xb);_0x1900x7[_0x689b[12]](_0x689b[13],removeListener(_0x1900xa,_0x1900xb))}};function createListener(_0x1900xa,_0x1900x7){return function(_0x1900xd){switch(_0x1900xa){case _0x689b[25]:return Promise[_0x689b[24]]([])[_0x689b[23]](getMailQueues(_0x1900x7))[_0x689b[23]](function(_0x1900xf){if(_0x1900x7[_0x689b[17]]=== _0x689b[18]|| _[_0x689b[20]](_0x1900xf[_0x689b[19]],_0x1900xd[_0x689b[19]])|| _[_0x689b[20]](_0x1900xf[_0x689b[21]],_0x1900xd[_0x689b[21]])){_0x1900x7[_0x689b[22]](_0x1900xa,_0x1900xd)}})[_0x689b[16]](function(_0x1900xe){console[_0x689b[15]](_0x689b[14],_0x1900xe)});case _0x689b[26]:_0x1900x7[_0x689b[22]](_0x1900xa,_0x1900xd);break;default:}}}function removeListener(_0x1900xa,_0x1900xb){return function(){ReportMailSessionEvents[_0x689b[27]](_0x1900xa,_0x1900xb)}}function getMailQueues(_0x1900x12){return function(){switch(_0x1900x12[_0x689b[17]]){case _0x689b[36]:return User[_0x689b[35]](_0x1900x12[_0x689b[34]],{attributes:[_0x689b[28]]})[_0x689b[23]](Util[_0x689b[33]]({},{attributes:[_0x689b[28]],include:[{raw:true,model:User,attributes:[_0x689b[28]]}]}))[_0x689b[23]](function(_0x1900x13){var _0x1900x14=[];_0x1900x13[_0x689b[32]][_0x689b[31]](function(_0x1900x15){_0x1900x14= _[_0x689b[30]](_0x1900x14,_[_0x689b[29]](_0x1900x15.Users,_0x689b[28]))});return {queue:_[_0x689b[29]](_0x1900x13[_0x689b[32]],_0x689b[28]),memberid:_0x1900x14}});case _0x689b[38]:return User[_0x689b[35]](_0x1900x12[_0x689b[34]],{attributes:[_0x689b[28]]})[_0x689b[23]](function(_0x1900x16){return _0x1900x16[_0x689b[37]]({attributes:[_0x689b[28]]})})[_0x689b[23]](function(_0x1900x13){return {queue:_[_0x689b[29]](_0x1900x13,_0x689b[28]),memberid:_0x1900x12[_0x689b[34]]}});default:return {}}}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ReportMailSessionEvents = require('./report_mail_session.events'); +const User = require('../../models').User; +const Util = require('../../config/util'); +const _ = require('lodash'); +const Promise = require('bluebird'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_mail_session:' + event, socket); + + ReportMailSessionEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'report_mail_session:save': + return Promise + .all([]) + .then(getMailQueues(socket)) + .then(function(condition) { + if (socket.role === 'admin' || _.includes(condition.memberid, doc.memberid) || _.includes(condition.queue, doc.queue)) { + socket.emit(event, doc); + } + }) + .catch(function(err) { + console.log('Error filtering report mail sessions after save', err); + }); + case 'report_mail_session:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportMailSessionEvents.removeListener(event, listener); + }; +} + +function getMailQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.userId, { + attributes: ['id'] + }) + .then(Util.getMailQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + queue: _.map(userQueues.rows, 'id'), + memberid: users + }; + }); + case 'agent': + return User + .findById(user.userId, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getMailQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + queue: _.map(userQueues, 'id'), + memberid: user.userId + }; + }); + default: + return {}; + } + } +} diff --git a/server/api/report_member/index.js b/server/api/report_member/index.js index 7ef4338..0afbd74 100644 --- a/server/api/report_member/index.js +++ b/server/api/report_member/index.js @@ -1 +1,12 @@ -var _0x96e2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x96e2[0];var express=require(_0x96e2[1]);var controller=require(_0x96e2[2]);var auth=require(_0x96e2[3]);var router=express.Router();router[_0x96e2[9]](_0x96e2[4],auth[_0x96e2[5]](),auth[_0x96e2[7]]([17],[_0x96e2[6]]),controller[_0x96e2[8]]);router[_0x96e2[9]](_0x96e2[10],auth[_0x96e2[5]](),auth[_0x96e2[7]]([17],[_0x96e2[6]]),controller[_0x96e2[11]]);module[_0x96e2[12]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_member.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.index); +router.get('/describe', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.describe); + +module.exports = router; diff --git a/server/api/report_member/report_member.controller.js b/server/api/report_member/report_member.controller.js index 2363055..6864b80 100644 --- a/server/api/report_member/report_member.controller.js +++ b/server/api/report_member/report_member.controller.js @@ -1 +1,34 @@ -var _0x9980=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65"];_0x9980[0];var _=require(_0x9980[1]);var ReportMember=require(_0x9980[3])[_0x9980[2]];var ReportMemberHistory=require(_0x9980[3])[_0x9980[5]][_0x9980[4]];var Util=require(_0x9980[6]);exports[_0x9980[7]]= function(_0xd25bx5,_0xd25bx6,_0xd25bx7){return ReportMember[_0x9980[14]](Util[_0x9980[13]](_0xd25bx5[_0x9980[12]]))[_0x9980[11]](function(_0xd25bx9){return _0xd25bx6[_0x9980[10]](200)[_0x9980[9]](_0xd25bx9)})[_0x9980[8]](function(_0xd25bx8){return handleError(_0xd25bx6,_0xd25bx8)})};exports[_0x9980[15]]= function(_0xd25bx5,_0xd25bx6){return ReportMemberHistory[_0x9980[15]]()[_0x9980[11]](function(_0xd25bxa){return _0xd25bx6[_0x9980[10]](200)[_0x9980[9]](_0xd25bxa)})[_0x9980[8]](function(_0xd25bx8){return handleError(_0xd25bx6,_0xd25bx8)})};function handleError(_0xd25bx6,_0xd25bx8){return _0xd25bx6[_0x9980[10]](500)[_0x9980[9]](_0xd25bx8)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var ReportMember = require('../../models').ReportMember; +var ReportMemberHistory = require('../../models').history.ReportMemberHistory; +var Util = require('../../config/util'); + +// Get list of report_members +exports.index = function(req, res, next) { + return ReportMember + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get list of fields +exports.describe = function(req, res) { + return ReportMemberHistory + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/report_member/report_member.events.js b/server/api/report_member/report_member.events.js index eb6c784..d42092f 100644 --- a/server/api/report_member/report_member.events.js +++ b/server/api/report_member/report_member.events.js @@ -1 +1,36 @@ -var _0x11d9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x11d9[0];const EventEmitter=require(_0x11d9[1]);const ReportMember=require(_0x11d9[3])[_0x11d9[2]];var ReportMemberEvents= new EventEmitter();ReportMemberEvents[_0x11d9[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x11d9[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x11d9[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x11d9[6]};for(var e in events){var event=events[e];ReportMember[_0x11d9[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xe24ax8,_0xe24ax9,_0xe24axa){ReportMemberEvents[_0x11d9[10]](event+ _0x11d9[8]+ _0xe24ax8[_0x11d9[9]],_0xe24ax8);ReportMemberEvents[_0x11d9[10]](event,_0xe24ax8);_0xe24axa(null)}}module[_0x11d9[11]]= ReportMemberEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportMember = require('../../models').ReportMember; + +var ReportMemberEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportMemberEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportMember.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportMemberEvents.emit(event + ':' + doc._id, doc); + ReportMemberEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportMemberEvents; diff --git a/server/api/report_member/report_member.socket.js b/server/api/report_member/report_member.socket.js index 08ca090..d0b7de2 100644 --- a/server/api/report_member/report_member.socket.js +++ b/server/api/report_member/report_member.socket.js @@ -1 +1,45 @@ -var _0x172a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x6E\x61\x6D\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72\x3A\x73\x61\x76\x65","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x172a[0];const ReportMemberEvents=require(_0x172a[1]);var events=[_0x172a[2],_0x172a[3]];exports[_0x172a[4]]= function(_0x68f4x3){for(var _0x68f4x4=0,_0x68f4x5=events[_0x172a[5]];_0x68f4x4< _0x68f4x5;_0x68f4x4++){var _0x68f4x6=events[_0x68f4x4];var _0x68f4x7=createListener(_0x172a[6]+ _0x68f4x6,_0x68f4x3);ReportMemberEvents[_0x172a[7]](_0x68f4x6,_0x68f4x7);_0x68f4x3[_0x172a[7]](_0x172a[8],removeListener(_0x68f4x6,_0x68f4x7))}};function createListener(_0x68f4x6,_0x68f4x3){return function(_0x68f4x9){switch(_0x68f4x6){case _0x172a[14]:if(_0x68f4x3[_0x172a[9]]=== _0x68f4x9[_0x172a[10]]|| _0x68f4x3[_0x172a[11]]=== _0x172a[12]){_0x68f4x3[_0x172a[13]](_0x68f4x6,_0x68f4x9)};break;case _0x172a[15]:_0x68f4x3[_0x172a[13]](_0x68f4x6,_0x68f4x9);break;default:}}}function removeListener(_0x68f4x6,_0x68f4x7){return function(){ReportMemberEvents[_0x172a[16]](_0x68f4x6,_0x68f4x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ReportMemberEvents = require('./report_member.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_member:' + event, socket); + + ReportMemberEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'report_member:save': + if (socket.name === doc.membername || socket.role === 'admin') { + socket.emit(event, doc); + } + break; + + case 'report_member:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportMemberEvents.removeListener(event, listener); + }; +} diff --git a/server/api/report_openchannel/index.js b/server/api/report_openchannel/index.js index 449fd12..3703020 100644 --- a/server/api/report_openchannel/index.js +++ b/server/api/report_openchannel/index.js @@ -1 +1,14 @@ -var _0xe041=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x61\x63\x63\x65\x70\x74\x2F\x3A\x75\x6E\x69\x71\x75\x65\x69\x64","\x68\x61\x73\x52\x6F\x6C\x65","\x61\x63\x63\x65\x70\x74","\x2F\x3A\x69\x64\x2F\x72\x65\x6A\x65\x63\x74","\x72\x65\x6A\x65\x63\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xe041[0];var express=require(_0xe041[1]);var controller=require(_0xe041[2]);var auth=require(_0xe041[3]);var license=require(_0xe041[4]);var router=express.Router();router[_0xe041[12]](_0xe041[5],auth[_0xe041[6]](),license[_0xe041[7]](),auth[_0xe041[10]]([17],[_0xe041[8],_0xe041[9]]),controller[_0xe041[11]]);router[_0xe041[12]](_0xe041[13],auth[_0xe041[6]](),license[_0xe041[7]](),auth[_0xe041[14]](_0xe041[9]),controller[_0xe041[15]]);router[_0xe041[12]](_0xe041[16],auth[_0xe041[6]](),license[_0xe041[7]](),auth[_0xe041[14]](_0xe041[9]),controller[_0xe041[17]]);module[_0xe041[18]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_openchannel.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([17], ['admin', 'agent']), controller.index); +router.get('/:id/accept/:uniqueid', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasRole('agent'), controller.accept); +router.get('/:id/reject', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasRole('agent'), controller.reject); + +module.exports = router; diff --git a/server/api/report_openchannel/report_openchannel.controller.js b/server/api/report_openchannel/report_openchannel.controller.js index 168ee02..8dd23a3 100644 --- a/server/api/report_openchannel/report_openchannel.controller.js +++ b/server/api/report_openchannel/report_openchannel.controller.js @@ -1 +1,117 @@ -var _0x2e00=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\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\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x61\x63\x63\x65\x70\x74","\x2E","\x73\x70\x6C\x69\x74","\x75\x6E\x69\x71\x75\x65\x69\x64","\x70\x61\x72\x61\x6D\x73","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x4F\x50\x45\x4E","\x61\x67\x65\x6E\x74","\x75\x73\x65\x72","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x43\x4C\x4F\x53\x45\x44","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D\x73","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x43\x61\x70\x61\x63\x69\x74\x79","\x72\x65\x6A\x65\x63\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74"];_0x2e00[0];var _=require(_0x2e00[1]);var ReportOpenchannel=require(_0x2e00[3])[_0x2e00[2]];var OpenchannelRoom=require(_0x2e00[3])[_0x2e00[4]];var sequelize=require(_0x2e00[3])[_0x2e00[5]];var Agent=require(_0x2e00[3])[_0x2e00[6]];var Util=require(_0x2e00[7]);var moment=require(_0x2e00[8]);function handleError(_0x3fe3x9,_0x3fe3xa){return _0x3fe3x9[_0x2e00[10]](500)[_0x2e00[9]](_0x3fe3xa)}exports[_0x2e00[11]]= function(_0x3fe3xb,_0x3fe3x9){return ReportOpenchannel[_0x2e00[16]](Util[_0x2e00[15]](_0x3fe3xb[_0x2e00[14]]))[_0x2e00[13]](function(_0x3fe3xc){_0x3fe3x9[_0x2e00[10]](200)[_0x2e00[9]](_0x3fe3xc)})[_0x2e00[12]](function(_0x3fe3xa){return handleError(_0x3fe3x9,_0x3fe3xa)})};exports[_0x2e00[17]]= function(_0x3fe3xb,_0x3fe3x9){var _0x3fe3xd;var _0x3fe3xe=_0x3fe3xb[_0x2e00[21]][_0x2e00[20]][_0x2e00[19]](_0x2e00[18])[1];return Agent[_0x2e00[30]](_0x3fe3xb[_0x2e00[25]][_0x2e00[29]],{attributes:[_0x2e00[29],_0x2e00[33]]})[_0x2e00[13]](function(_0x3fe3x12){_0x3fe3xd= _0x3fe3x12;return _0x3fe3x12[_0x2e00[32]]({where:{status:{$ne:_0x2e00[31]},id:{$ne:_0x3fe3xe}},attributes:[_0x2e00[29]]})})[_0x2e00[13]](function(_0x3fe3x11){return ReportOpenchannel[_0x2e00[30]](_0x3fe3xb[_0x2e00[21]][_0x2e00[29]])})[_0x2e00[13]](function(_0x3fe3xf){if(!_0x3fe3xf){return _0x3fe3x9[_0x2e00[22]](404)};var _0x3fe3x10=_[_0x2e00[27]](_0x3fe3xf,{connectid:_0x3fe3xb[_0x2e00[21]][_0x2e00[20]]});return _0x3fe3x10[_0x2e00[28]]()})[_0x2e00[13]](function(){return OpenchannelRoom[_0x2e00[26]]({status:_0x2e00[23],openReason:_0x2e00[24]},{where:{id:_0x3fe3xe},user:_0x3fe3xb[_0x2e00[25]],individualHooks:true})})[_0x2e00[13]](function(){return _0x3fe3x9[_0x2e00[22]](200)})[_0x2e00[12]](sequelize.UniqueConstraintError,function(_0x3fe3xa){return _0x3fe3x9[_0x2e00[22]](504)})[_0x2e00[12]](function(_0x3fe3xa){return handleError(_0x3fe3x9,_0x3fe3xa)})};exports[_0x2e00[34]]= function(_0x3fe3xb,_0x3fe3x9){return ReportOpenchannel[_0x2e00[30]](_0x3fe3xb[_0x2e00[21]][_0x2e00[29]])[_0x2e00[13]](function(_0x3fe3xf){if(!_0x3fe3xf){return _0x3fe3x9[_0x2e00[22]](404)};var _0x3fe3x10=_[_0x2e00[27]](_0x3fe3xf,{rejectedAt:moment()[_0x2e00[36]](_0x2e00[35])});return _0x3fe3x10[_0x2e00[28]]()})[_0x2e00[13]](function(){return _0x3fe3x9[_0x2e00[22]](200)})[_0x2e00[12]](function(_0x3fe3xa){return handleError(_0x3fe3x9,_0x3fe3xa)})} \ No newline at end of file +'use strict'; +var _ = require('lodash'); +var ReportOpenchannel = require('../../models').ReportOpenchannel; +var OpenchannelRoom = require('../../models').OpenchannelRoom; +var sequelize = require('../../models').sequelize; +var Agent = require('../../models').User; +var Util = require('../../config/util'); +var moment = require('moment'); + + + +function handleError(res, err) { + return res.status(500).send(err); +} + +// Gets a list of Report + + + +exports.index = function(req, res) { + return ReportOpenchannel + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + + +// Get a single report +exports.accept = function(req, res) { + var _agent; + var _roomid = req.params.uniqueid.split('.')[1]; + + return Agent + .findById(req.user.id, { + attributes: ['id', 'openchannelCapacity'] + }) + .then(function(agent) { + _agent = agent; + return agent + .getOpenchannelRooms({ + where: { + status: { + $ne: 'CLOSED' + }, + id: { + $ne: _roomid + } + }, + attributes: ['id'] + }); + }) + .then(function(Rooms) { + return ReportOpenchannel + .findById(req.params.id); + }) + .then(function(report) { + if (!report) { + return res.sendStatus(404); + } + + var updated = _.merge(report, { + connectid: req.params.uniqueid + }); + + return updated + .save(); + }) + .then(function() { + return OpenchannelRoom + .update({ + status: 'OPEN', + openReason: 'agent' + }, { + where: { + id: _roomid + }, + user: req.user, + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return res.sendStatus(504); + }) + .catch(function(err) { + return handleError(res, err); + }); + +}; + +// Get a single report +exports.reject = function(req, res) { + return ReportOpenchannel + .findById(req.params.id) + .then(function(report) { + if (!report) { + return res.sendStatus(404); + } + var updated = _.merge(report, { + rejectedAt: moment().format("YYYY-MM-DD HH:mm:ss") + }); + return updated + .save(); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; diff --git a/server/api/report_openchannel/report_openchannel.events.js b/server/api/report_openchannel/report_openchannel.events.js index b9bfc52..e0277fc 100644 --- a/server/api/report_openchannel/report_openchannel.events.js +++ b/server/api/report_openchannel/report_openchannel.events.js @@ -1 +1,36 @@ -var _0x47f5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x47f5[0];const EventEmitter=require(_0x47f5[1]);const ReportOpenchannel=require(_0x47f5[3])[_0x47f5[2]];var ReportOpenchannelEvents= new EventEmitter();ReportOpenchannelEvents[_0x47f5[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x47f5[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x47f5[6],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x47f5[7]};for(var e in events){var event=events[e];ReportOpenchannel[_0x47f5[8]](e,emitEvent(event))};function emitEvent(event){return function(_0xb7b2x8,_0xb7b2x9,_0xb7b2xa){ReportOpenchannelEvents[_0x47f5[11]](event+ _0x47f5[9]+ _0xb7b2x8[_0x47f5[10]],_0xb7b2x8);ReportOpenchannelEvents[_0x47f5[11]](event,_0xb7b2x8);_0xb7b2xa(null)}}module[_0x47f5[12]]= ReportOpenchannelEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportOpenchannel = require('../../models').ReportOpenchannel; + +var ReportOpenchannelEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportOpenchannelEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'update', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportOpenchannel.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportOpenchannelEvents.emit(event + ':' + doc._id, doc); + ReportOpenchannelEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportOpenchannelEvents; diff --git a/server/api/report_openchannel/report_openchannel.socket.js b/server/api/report_openchannel/report_openchannel.socket.js index 4d137c2..994bcd8 100644 --- a/server/api/report_openchannel/report_openchannel.socket.js +++ b/server/api/report_openchannel/report_openchannel.socket.js @@ -1 +1,45 @@ -var _0x3d69=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x3A\x73\x61\x76\x65","\x6E\x61\x6D\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x3A\x75\x70\x64\x61\x74\x65","\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x3d69[0];const ReportOpenchannelEvents=require(_0x3d69[1]);var events=[_0x3d69[2],_0x3d69[3],_0x3d69[4]];exports[_0x3d69[5]]= function(_0x862ax3){for(var _0x862ax4=0,_0x862ax5=events[_0x3d69[6]];_0x862ax4< _0x862ax5;_0x862ax4++){var _0x862ax6=events[_0x862ax4];var _0x862ax7=createListener(_0x3d69[7]+ _0x862ax6,_0x862ax3);ReportOpenchannelEvents[_0x3d69[8]](_0x862ax6,_0x862ax7);_0x862ax3[_0x3d69[8]](_0x3d69[9],removeListener(_0x862ax6,_0x862ax7))}};function createListener(_0x862ax6,_0x862ax3){return function(_0x862ax9){switch(_0x862ax6){case _0x3d69[10]:;case _0x3d69[16]:if(_0x862ax3[_0x3d69[11]]=== _0x862ax9[_0x3d69[12]]|| _0x862ax3[_0x3d69[13]]=== _0x3d69[14]){_0x862ax3[_0x3d69[15]](_0x862ax6,_0x862ax9)};break;case _0x3d69[17]:_0x862ax3[_0x3d69[15]](_0x862ax6,_0x862ax9);break;default:}}}function removeListener(_0x862ax6,_0x862ax7){return function(){ReportOpenchannelEvents[_0x3d69[18]](_0x862ax6,_0x862ax7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ +// +'use strict'; +// +const ReportOpenchannelEvents = require('./report_openchannel.events'); + +// Model events to emit +var events = ['save', 'update', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_openchannel:' + event, socket); + + ReportOpenchannelEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'report_openchannel:save': + case 'report_openchannel:update': + if (socket.name === doc.membername || socket.role === 'admin') { + socket.emit(event, doc); + } + break; + case 'report_openchannel:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportOpenchannelEvents.removeListener(event, listener); + }; +} diff --git a/server/api/report_openchannel_session/index.js b/server/api/report_openchannel_session/index.js index e8e018b..832ba1c 100644 --- a/server/api/report_openchannel_session/index.js +++ b/server/api/report_openchannel_session/index.js @@ -1 +1,16 @@ -var _0xdd35=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x74\x69\x6D\x65\x6F\x75\x74","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x74\x69\x6D\x65\x6F\x75\x74","\x2F\x77\x61\x69\x74\x69\x6E\x67","\x77\x61\x69\x74\x69\x6E\x67","\x2F\x77\x61\x69\x74\x69\x6E\x67\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x77\x61\x69\x74\x69\x6E\x67\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0xdd35[0];var express=require(_0xdd35[1]);var controller=require(_0xdd35[2]);var auth=require(_0xdd35[3]);var license=require(_0xdd35[4]);var router=express.Router();router[_0xdd35[11]](_0xdd35[5],auth[_0xdd35[6]](),license[_0xdd35[7]](),auth[_0xdd35[9]]([20],[_0xdd35[8]]),controller[_0xdd35[10]]);router[_0xdd35[11]](_0xdd35[12],auth[_0xdd35[6]](),license[_0xdd35[7]](),auth[_0xdd35[9]]([20],[_0xdd35[8]]),controller[_0xdd35[13]]);router[_0xdd35[11]](_0xdd35[14],license[_0xdd35[15]](),auth[_0xdd35[6]](),license[_0xdd35[7]](),auth[_0xdd35[9]]([20],[_0xdd35[8]]),controller[_0xdd35[16]]);router[_0xdd35[11]](_0xdd35[17],license[_0xdd35[15]](),auth[_0xdd35[6]](),license[_0xdd35[7]](),auth[_0xdd35[9]]([20],[_0xdd35[8]]),controller[_0xdd35[18]]);router[_0xdd35[11]](_0xdd35[19],auth[_0xdd35[6]](),license[_0xdd35[7]](),controller[_0xdd35[20]]);module[_0xdd35[21]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_openchannel_session.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.index); +router.get('/describe', auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.describe); +router.get('/timeout', license.isValidDate(), auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.timeout); +router.get('/waiting', license.isValidDate(), auth.isAuthenticated(), license.hasOpenchannel(), auth.hasModule([20], ['admin']), controller.waiting); +router.get('/waiting/applications', auth.isAuthenticated(), license.hasOpenchannel(), controller.waitingApplications); +// , auth.hasModule([11], ['admin', 'agent']) +module.exports = router; diff --git a/server/api/report_openchannel_session/report_openchannel_session.controller.js b/server/api/report_openchannel_session/report_openchannel_session.controller.js index c385a1a..e6a814a 100644 --- a/server/api/report_openchannel_session/report_openchannel_session.controller.js +++ b/server/api/report_openchannel_session/report_openchannel_session.controller.js @@ -1 +1,155 @@ -var _0x8998=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x55\x73\x65\x72","\x62\x6C\x75\x65\x62\x69\x72\x64","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x69\x64","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x6F\x77\x73","\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","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65","\x74\x69\x6D\x65\x6F\x75\x74","\x6C\x6F\x67","\x6D\x65\x72\x67\x65","\x63\x6F\x75\x6E\x74","\x61\x6C\x6C","\x77\x61\x69\x74\x69\x6E\x67","\x77\x61\x69\x74\x69\x6E\x67\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x66\x69\x6E\x64\x41\x6C\x6C"];_0x8998[0];var _=require(_0x8998[1]);var ReportOpenchannelSession=require(_0x8998[3])[_0x8998[2]];var ReportOpenchannelSessionHistory=require(_0x8998[3])[_0x8998[5]][_0x8998[4]];var Util=require(_0x8998[6]);var User=require(_0x8998[3])[_0x8998[7]];var Promise=require(_0x8998[8]);exports[_0x8998[9]]= function(_0xe90dx7,_0xe90dx8,_0xe90dx9){return ReportOpenchannelSession[_0x8998[16]](Util[_0x8998[15]](_0xe90dx7[_0x8998[14]]))[_0x8998[13]](function(_0xe90dxb){_0xe90dx8[_0x8998[12]](200)[_0x8998[11]](_0xe90dxb)})[_0x8998[10]](function(_0xe90dxa){return handleError(_0xe90dx8,_0xe90dxa)})};exports[_0x8998[17]]= function(_0xe90dx7,_0xe90dx8){return ReportOpenchannelSessionHistory[_0x8998[17]]()[_0x8998[13]](function(_0xe90dxc){return _0xe90dx8[_0x8998[12]](200)[_0x8998[11]](_0xe90dxc)})[_0x8998[10]](function(_0xe90dxa){return handleError(_0xe90dx8,_0xe90dxa)})};function getOpenchannelQueues(_0xe90dxe){return function(){switch(_0xe90dxe[_0x8998[28]]){case _0x8998[25]:return User[_0x8998[24]](_0xe90dxe[_0x8998[18]],{attributes:[_0x8998[18]]})[_0x8998[13]](Util[_0x8998[23]]({},{attributes:[_0x8998[18]],include:[{raw:true,model:User,attributes:[_0x8998[18]]}]}))[_0x8998[13]](function(_0xe90dxf){var _0xe90dx10=[];_0xe90dxf[_0x8998[22]][_0x8998[21]](function(_0xe90dx11){_0xe90dx10= _[_0x8998[20]](_0xe90dx10,_[_0x8998[19]](_0xe90dx11.Users,_0x8998[18]))});return {$or:{queue:_[_0x8998[19]](_0xe90dxf[_0x8998[22]],_0x8998[18]),memberid:_0xe90dx10}}});case _0x8998[27]:return User[_0x8998[24]](_0xe90dxe[_0x8998[18]],{attributes:[_0x8998[18]]})[_0x8998[13]](function(_0xe90dx12){return _0xe90dx12[_0x8998[26]]({attributes:[_0x8998[18]]})})[_0x8998[13]](function(_0xe90dxf){return {$or:{queue:_[_0x8998[19]](_0xe90dxf,_0x8998[18]),memberid:_0xe90dxe[_0x8998[18]]}}});default:return {}}}}exports[_0x8998[29]]= function(_0xe90dx7,_0xe90dx8){return Promise[_0x8998[33]]([])[_0x8998[13]](getOpenchannelQueues(_0xe90dx7[_0x8998[25]]))[_0x8998[13]](function(_0xe90dx14){return ReportOpenchannelSession[_0x8998[32]](Util[_0x8998[15]](_0xe90dx7[_0x8998[14]],_[_0x8998[31]]({timeout:true},_0xe90dx14)))})[_0x8998[13]](function(_0xe90dx13){return _0xe90dx8[_0x8998[12]](200)[_0x8998[11]]({value:_0xe90dx13})})[_0x8998[10]](function(_0xe90dxa){console[_0x8998[30]](_0xe90dxa);return handleError(_0xe90dx8,_0xe90dxa)})};exports[_0x8998[34]]= function(_0xe90dx7,_0xe90dx8){return Promise[_0x8998[33]]([])[_0x8998[13]](getOpenchannelQueues(_0xe90dx7[_0x8998[25]]))[_0x8998[13]](function(_0xe90dx14){return ReportOpenchannelSession[_0x8998[32]](Util[_0x8998[15]](_0xe90dx7[_0x8998[14]],_[_0x8998[31]]({leaveAt:null},_0xe90dx14)))})[_0x8998[13]](function(_0xe90dx13){return _0xe90dx8[_0x8998[12]](200)[_0x8998[11]]({value:_0xe90dx13})})[_0x8998[10]](function(_0xe90dxa){console[_0x8998[30]](_0xe90dxa);return handleError(_0xe90dx8,_0xe90dxa)})};exports[_0x8998[35]]= function(_0xe90dx7,_0xe90dx8){return Promise[_0x8998[33]]([])[_0x8998[13]](getOpenchannelQueues(_0xe90dx7[_0x8998[25]]))[_0x8998[13]](function(_0xe90dx14){return ReportOpenchannelSession[_0x8998[36]](Util[_0x8998[15]](_0xe90dx7[_0x8998[14]],_[_0x8998[31]]({leaveAt:null},_0xe90dx14)))})[_0x8998[13]](function(_0xe90dx13){return _0xe90dx8[_0x8998[12]](200)[_0x8998[11]]({rows:_0xe90dx13})})[_0x8998[10]](function(_0xe90dxa){console[_0x8998[30]](_0xe90dxa);return handleError(_0xe90dx8,_0xe90dxa)})};function handleError(_0xe90dx8,_0xe90dxa){return _0xe90dx8[_0x8998[12]](500)[_0x8998[11]](_0xe90dxa)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var ReportOpenchannelSession = require('../../models').ReportOpenchannelSession; +var ReportOpenchannelSessionHistory = require('../../models').history.ReportOpenchannelSessionHistory; + +var Util = require('../../config/util'); +var User = require('../../models').User; +var Promise = require('bluebird'); + +// Get list of agents +exports.index = function(req, res, next) { + return ReportOpenchannelSession + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get list of fields +exports.describe = function(req, res) { + return ReportOpenchannelSessionHistory + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function getOpenchannelQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(Util.getOpenchannelQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + $or: { + queue: _.map(userQueues.rows, 'id'), + memberid: users + } + }; + }); + case 'agent': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getOpenchannelQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + $or: { + queue: _.map(userQueues, 'id'), + memberid: user.id + } + }; + }); + default: + return {}; + } + } +} + +// Get timeout apps +exports.timeout = function(req, res) { + return Promise + .all([]) + .then(getOpenchannelQueues(req.user)) + .then(function(condition) { + return ReportOpenchannelSession + .count(Util.getQuery(req.query, _.merge({ + timeout: true + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get waiting apps +exports.waiting = function(req, res) { + return Promise + .all([]) + .then(getOpenchannelQueues(req.user)) + .then(function(condition) { + return ReportOpenchannelSession + .count(Util.getQuery(req.query, _.merge({ + leaveAt: null + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.waitingApplications = function(req, res) { + return Promise + .all([]) + .then(getOpenchannelQueues(req.user)) + .then(function(condition) { + return ReportOpenchannelSession + .findAll(Util.getQuery(req.query, _.merge({ + leaveAt: null + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + rows: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/report_openchannel_session/report_openchannel_session.events.js b/server/api/report_openchannel_session/report_openchannel_session.events.js index cec47ab..0c9e3ff 100644 --- a/server/api/report_openchannel_session/report_openchannel_session.events.js +++ b/server/api/report_openchannel_session/report_openchannel_session.events.js @@ -1 +1,36 @@ -var _0xf95b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xf95b[0];const EventEmitter=require(_0xf95b[1]);const ReportOpenchannelSession=require(_0xf95b[3])[_0xf95b[2]];var ReportOpenchannelSessionEvents= new EventEmitter();ReportOpenchannelSessionEvents[_0xf95b[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xf95b[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xf95b[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xf95b[6]};for(var e in events){var event=events[e];ReportOpenchannelSession[_0xf95b[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xe742x8,_0xe742x9,_0xe742xa){ReportOpenchannelSessionEvents[_0xf95b[10]](event+ _0xf95b[8]+ _0xe742x8[_0xf95b[9]],_0xe742x8);ReportOpenchannelSessionEvents[_0xf95b[10]](event,_0xe742x8);_0xe742xa(null)}}module[_0xf95b[11]]= ReportOpenchannelSessionEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportOpenchannelSession = require('../../models').ReportOpenchannelSession; + +var ReportOpenchannelSessionEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportOpenchannelSessionEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportOpenchannelSession.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportOpenchannelSessionEvents.emit(event + ':' + doc._id, doc); + ReportOpenchannelSessionEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportOpenchannelSessionEvents; diff --git a/server/api/report_openchannel_session/report_openchannel_session.socket.js b/server/api/report_openchannel_session/report_openchannel_session.socket.js index 1c9c1b0..36ca924 100644 --- a/server/api/report_openchannel_session/report_openchannel_session.socket.js +++ b/server/api/report_openchannel_session/report_openchannel_session.socket.js @@ -1 +1,90 @@ -var _0xb9f4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x52\x65\x70\x6F\x72\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6C\x6F\x64\x61\x73\x68","\x62\x6C\x75\x65\x62\x69\x72\x64","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x69\x64","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x6F\x77\x73","\x74\x68\x65\x6E","\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","\x75\x73\x65\x72\x49\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65","\x45\x72\x72\x6F\x72\x20\x66\x69\x6C\x74\x65\x72\x69\x6E\x67\x20\x72\x65\x70\x6F\x72\x74\x20\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x20\x73\x65\x73\x73\x69\x6F\x6E\x73\x20\x61\x66\x74\x65\x72\x20\x73\x61\x76\x65","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x61\x64\x6D\x69\x6E","\x6D\x65\x6D\x62\x65\x72\x69\x64","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x71\x75\x65\x75\x65","\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x61\x6C\x6C","\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65"];_0xb9f4[0];var ReportOpenchannelSession=require(_0xb9f4[2])[_0xb9f4[1]];var User=require(_0xb9f4[2])[_0xb9f4[3]];var Util=require(_0xb9f4[4]);var _=require(_0xb9f4[5]);var Promise=require(_0xb9f4[6]);exports[_0xb9f4[7]]= function(_0x1de2x6){ReportOpenchannelSession[_0xb9f4[8]](function(_0x1de2x7){onSave(_0x1de2x6,_0x1de2x7)});ReportOpenchannelSession[_0xb9f4[9]](function(_0x1de2x7){onSave(_0x1de2x6,_0x1de2x7)});ReportOpenchannelSession[_0xb9f4[10]](function(_0x1de2x7){onRemove(_0x1de2x6,_0x1de2x7)})};function getOpenchannelQueues(_0x1de2x9){return function(){switch(_0x1de2x9[_0xb9f4[23]]){case _0xb9f4[20]:return User[_0xb9f4[19]](_0x1de2x9[_0xb9f4[18]],{attributes:[_0xb9f4[11]]})[_0xb9f4[16]](Util[_0xb9f4[17]]({},{attributes:[_0xb9f4[11]],include:[{raw:true,model:User,attributes:[_0xb9f4[11]]}]}))[_0xb9f4[16]](function(_0x1de2xa){var _0x1de2xb=[];_0x1de2xa[_0xb9f4[15]][_0xb9f4[14]](function(_0x1de2xc){_0x1de2xb= _[_0xb9f4[13]](_0x1de2xb,_[_0xb9f4[12]](_0x1de2xc.Users,_0xb9f4[11]))});return {queue:_[_0xb9f4[12]](_0x1de2xa[_0xb9f4[15]],_0xb9f4[11]),memberid:_0x1de2xb}});case _0xb9f4[22]:return User[_0xb9f4[19]](_0x1de2x9[_0xb9f4[18]],{attributes:[_0xb9f4[11]]})[_0xb9f4[16]](function(_0x1de2xd){return _0x1de2xd[_0xb9f4[21]]({attributes:[_0xb9f4[11]]})})[_0xb9f4[16]](function(_0x1de2xa){return {queue:_[_0xb9f4[12]](_0x1de2xa,_0xb9f4[11]),memberid:_0x1de2x9[_0xb9f4[18]]}});default:return {}}}}function onSave(_0x1de2x6,_0x1de2x7,_0x1de2xf){return Promise[_0xb9f4[33]]([])[_0xb9f4[16]](getOpenchannelQueues(_0x1de2x6))[_0xb9f4[16]](function(_0x1de2x11){if(_0x1de2x6[_0xb9f4[23]]=== _0xb9f4[27]|| _[_0xb9f4[29]](_0x1de2x11[_0xb9f4[28]],_0x1de2x7[_0xb9f4[28]])|| _[_0xb9f4[29]](_0x1de2x11[_0xb9f4[30]],_0x1de2x7[_0xb9f4[30]])){_0x1de2x6[_0xb9f4[32]](_0xb9f4[31],_0x1de2x7)}})[_0xb9f4[26]](function(_0x1de2x10){console[_0xb9f4[25]](_0xb9f4[24],_0x1de2x10)})}function onRemove(_0x1de2x6,_0x1de2x7,_0x1de2xf){_0x1de2x6[_0xb9f4[32]](_0xb9f4[34],_0x1de2x7)} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +var ReportOpenchannelSession = require('../../models').ReportOpenchannelSession; +var User = require('../../models').User; +var Util = require('../../config/util'); +var _ = require('lodash'); +var Promise = require('bluebird'); + +exports.register = function(socket) { + ReportOpenchannelSession.afterCreate(function(doc) { + onSave(socket, doc); + }); + ReportOpenchannelSession.afterUpdate(function(doc) { + onSave(socket, doc); + }); + ReportOpenchannelSession.afterDestroy(function(doc) { + onRemove(socket, doc); + }); +} + +function getOpenchannelQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.userId, { + attributes: ['id'] + }) + .then(Util.getOpenchannelQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + queue: _.map(userQueues.rows, 'id'), + memberid: users + }; + }); + case 'agent': + return User + .findById(user.userId, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getOpenchannelQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + queue: _.map(userQueues, 'id'), + memberid: user.userId + }; + }); + default: + return {}; + } + } +} + +function onSave(socket, doc, cb) { + return Promise + .all([]) + .then(getOpenchannelQueues(socket)) + .then(function(condition) { + if (socket.role === 'admin' || _.includes(condition.memberid, doc.memberid) || _.includes(condition.queue, doc.queue)) { + socket.emit('report_openchannel_session:save', doc); + } + }) + .catch(function(err) { + console.log('Error filtering report Openchannel sessions after save', err); + }); +} + +function onRemove(socket, doc, cb) { + socket.emit('report_openchannel_session:remove', doc); +} diff --git a/server/api/report_queue/index.js b/server/api/report_queue/index.js index 8642f22..2a28045 100644 --- a/server/api/report_queue/index.js +++ b/server/api/report_queue/index.js @@ -1 +1,27 @@ -var _0x1a79=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x77\x61\x69\x74\x69\x6E\x67","\x61\x67\x65\x6E\x74","\x77\x61\x69\x74\x69\x6E\x67","\x2F\x70\x61\x72\x61\x6D\x65\x74\x65\x72\x73","\x71\x75\x65\x75\x65\x50\x61\x72\x61\x6D\x65\x74\x65\x72\x73","\x2F\x77\x61\x69\x74\x69\x6E\x67\x2F\x63\x61\x6C\x6C\x73","\x77\x61\x69\x74\x69\x6E\x67\x43\x61\x6C\x6C\x73","\x2F\x61\x63\x74\x69\x76\x65","\x61\x63\x74\x69\x76\x65","\x2F\x61\x6E\x73\x77\x65\x72\x65\x64","\x61\x6E\x73\x77\x65\x72\x65\x64","\x2F\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64","\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64","\x2F\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64\x2F\x61\x6C\x6C","\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64\x41\x6C\x6C","\x2F\x61\x76\x67\x61\x6E\x73\x77\x65\x72\x74\x69\x6D\x65","\x61\x76\x67\x61\x6E\x73\x77\x65\x72\x74\x69\x6D\x65","\x2F\x61\x76\x67\x74\x61\x6C\x6B\x74\x69\x6D\x65","\x61\x76\x67\x74\x61\x6C\x6B\x74\x69\x6D\x65","\x2F\x61\x6E\x73\x77\x65\x72\x72\x61\x74\x65","\x61\x6E\x73\x77\x65\x72\x72\x61\x74\x65","\x2F\x61\x62\x61\x6E\x64\x6F\x6E\x72\x61\x74\x65","\x61\x62\x61\x6E\x64\x6F\x6E\x72\x61\x74\x65","\x2F\x74\x6F\x74\x61\x6C\x6F\x66\x66\x65\x72\x65\x64","\x74\x6F\x74\x61\x6C\x6F\x66\x66\x65\x72\x65\x64","\x2F\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64","\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64","\x2F\x3A\x71\x75\x65\x75\x65","\x73\x68\x6F\x77","\x2F\x3A\x69\x64","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x1a79[0];var express=require(_0x1a79[1]);var controller=require(_0x1a79[2]);var auth=require(_0x1a79[3]);var router=express.Router();router[_0x1a79[9]](_0x1a79[4],auth[_0x1a79[5]](),auth[_0x1a79[7]]([17],[_0x1a79[6]]),controller[_0x1a79[8]]);router[_0x1a79[9]](_0x1a79[10],auth[_0x1a79[5]](),auth[_0x1a79[7]]([17],[_0x1a79[6]]),controller[_0x1a79[11]]);router[_0x1a79[9]](_0x1a79[12],auth[_0x1a79[5]](),auth[_0x1a79[7]]([1],[_0x1a79[6],_0x1a79[13]]),controller[_0x1a79[14]]);router[_0x1a79[9]](_0x1a79[15],auth[_0x1a79[5]](),auth[_0x1a79[7]]([1],[_0x1a79[6]]),controller[_0x1a79[16]]);router[_0x1a79[9]](_0x1a79[17],auth[_0x1a79[5]](),auth[_0x1a79[7]]([7],[_0x1a79[6],_0x1a79[13]]),controller[_0x1a79[18]]);router[_0x1a79[9]](_0x1a79[19],auth[_0x1a79[5]](),auth[_0x1a79[7]]([1],[_0x1a79[6],_0x1a79[13]]),controller[_0x1a79[20]]);router[_0x1a79[9]](_0x1a79[21],auth[_0x1a79[5]](),auth[_0x1a79[7]]([1],[_0x1a79[6],_0x1a79[13]]),controller[_0x1a79[22]]);router[_0x1a79[9]](_0x1a79[23],auth[_0x1a79[5]](),auth[_0x1a79[7]]([1],[_0x1a79[6],_0x1a79[13]]),controller[_0x1a79[24]]);router[_0x1a79[9]](_0x1a79[25],auth[_0x1a79[5]](),auth[_0x1a79[7]]([7],[_0x1a79[6],_0x1a79[13]]),controller[_0x1a79[26]]);router[_0x1a79[9]](_0x1a79[27],auth[_0x1a79[5]](),auth[_0x1a79[7]]([1],[_0x1a79[6],_0x1a79[13]]),controller[_0x1a79[28]]);router[_0x1a79[9]](_0x1a79[29],auth[_0x1a79[5]](),auth[_0x1a79[7]]([1],[_0x1a79[6],_0x1a79[13]]),controller[_0x1a79[30]]);router[_0x1a79[9]](_0x1a79[31],auth[_0x1a79[5]](),auth[_0x1a79[7]]([1],[_0x1a79[6],_0x1a79[13]]),controller[_0x1a79[32]]);router[_0x1a79[9]](_0x1a79[33],auth[_0x1a79[5]](),auth[_0x1a79[7]]([1],[_0x1a79[6],_0x1a79[13]]),controller[_0x1a79[34]]);router[_0x1a79[9]](_0x1a79[35],auth[_0x1a79[5]](),auth[_0x1a79[7]]([1],[_0x1a79[6],_0x1a79[13]]),controller[_0x1a79[36]]);router[_0x1a79[9]](_0x1a79[37],auth[_0x1a79[5]](),auth[_0x1a79[7]]([1],[_0x1a79[6],_0x1a79[13]]),controller[_0x1a79[38]]);router[_0x1a79[9]](_0x1a79[39],auth[_0x1a79[5]](),controller[_0x1a79[40]]);router[_0x1a79[43]](_0x1a79[41],auth[_0x1a79[5]](),controller[_0x1a79[42]]);module[_0x1a79[44]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_queue.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.index); +router.get('/describe', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.describe); +router.get('/waiting', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.waiting); +router.get('/parameters', auth.isAuthenticated(), auth.hasModule([1], ['admin']), controller.queueParameters); +router.get('/waiting/calls', auth.isAuthenticated(), auth.hasModule([7], ['admin', 'agent']), controller.waitingCalls); +router.get('/active', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.active); +router.get('/answered', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.answered); +router.get('/abandoned', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.abandoned); +router.get('/abandoned/all', auth.isAuthenticated(), auth.hasModule([7], ['admin', 'agent']), controller.abandonedAll); +router.get('/avganswertime', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.avganswertime); +router.get('/avgtalktime', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.avgtalktime); +router.get('/answerrate', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.answerrate); +router.get('/abandonrate', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.abandonrate); +router.get('/totaloffered', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.totaloffered); +router.get('/unmanaged', auth.isAuthenticated(), auth.hasModule([1], ['admin', 'agent']), controller.unmanaged); +router.get('/:queue', auth.isAuthenticated(), controller.show); +router.put('/:id', auth.isAuthenticated(), controller.update); + +module.exports = router; diff --git a/server/api/report_queue/report_queue.controller.js b/server/api/report_queue/report_queue.controller.js index 0571453..e590c29 100644 --- a/server/api/report_queue/report_queue.controller.js +++ b/server/api/report_queue/report_queue.controller.js @@ -1 +1,623 @@ -var _0xd75c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x62\x6C\x75\x65\x62\x69\x72\x64","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x75\x70\x64\x61\x74\x65","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x62\x6F\x64\x79","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x64\x65\x73\x63\x72\x69\x62\x65","\x77\x61\x69\x74\x69\x6E\x67","\x63\x6F\x75\x6E\x74","\x75\x73\x65\x72","\x61\x6C\x6C","\x72\x6F\x77\x73","\x6E\x61\x6D\x65","\x6D\x61\x70","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x61\x67\x65\x6E\x74","\x66\x69\x6E\x64\x41\x6C\x6C","\x72\x6F\x6C\x65","\x71\x75\x65\x75\x65\x50\x61\x72\x61\x6D\x65\x74\x65\x72\x73","\x6C\x69\x6D\x69\x74","\x6F\x66\x66\x73\x65\x74","\x61\x6E\x73\x77\x65\x72\x65\x64\x5F\x75\x69\x46\x72\x6F\x6D","\x61\x6E\x73\x77\x65\x72\x65\x64\x5F\x75\x69\x54\x6F","\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64\x5F\x75\x69\x46\x72\x6F\x6D","\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64\x5F\x75\x69\x54\x6F","\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64\x5F\x75\x69\x46\x72\x6F\x6D","\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64\x5F\x75\x69\x54\x6F","\x6C\x6F\x67","\x73\x70\x72\x65\x61\x64","\x66\x69\x6E\x64","\x74\x6F\x74\x61\x6C\x63\x61\x6C\x6C\x73","\x66\x6F\x72\x45\x61\x63\x68","\x5F\x61\x6E\x73\x77\x65\x72\x65\x64\x46\x72\x6F\x6D","\x61\x6E\x73\x77\x65\x72\x65\x64","\x5F\x61\x6E\x73\x77\x65\x72\x65\x64\x54\x6F","\x5F\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64\x46\x72\x6F\x6D","\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64","\x5F\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64\x54\x6F","\x5F\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64\x46\x72\x6F\x6D","\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64","\x5F\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64\x54\x6F","\x5F\x6E\x61\x6D\x65","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x72\x65\x64\x75\x63\x65","\x66\x69\x6C\x74\x65\x72","\x5F\x6C\x69\x6D\x69\x74","\x76\x61\x6C\x75\x65","\x74\x61\x6B\x65","\x73\x6C\x69\x63\x65","\x6C\x65\x6E\x67\x74\x68","\x74\x61\x6C\x6B\x74\x69\x6D\x65","\x30\x30\x3A\x30\x30\x3A\x30\x30","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x20\x41\x53\x20\x27\x6E\x61\x6D\x65\x27\x2C\x43\x4F\x55\x4E\x54\x28\x64\x69\x73\x74\x69\x6E\x63\x74\x20\x75\x6E\x69\x71\x75\x65\x69\x64\x29\x20\x61\x73\x20\x74\x6F\x74\x61\x6C\x63\x61\x6C\x6C\x73\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x20\x49\x4E\x20\x28\x27","\x27\x2C\x27","\x6A\x6F\x69\x6E","\x27\x29\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x68\x6F\x6C\x64\x74\x69\x6D\x65","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x20\x41\x53\x20\x27\x6E\x61\x6D\x65\x27\x2C\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x74\x61\x6C\x6B\x74\x69\x6D\x65\x29\x2C\x20\x30\x29\x29\x20\x61\x73\x20\x74\x61\x6C\x6B\x74\x69\x6D\x65\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x20\x57\x48\x45\x52\x45\x20\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x3D\x20\x31\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x20\x49\x4E\x20\x28\x27","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x20\x41\x53\x20\x27\x6E\x61\x6D\x65\x27\x2C\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x29\x2C\x20\x30\x29\x29\x20\x61\x73\x20\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x20\x57\x48\x45\x52\x45\x20\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x3D\x20\x31\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x20\x49\x4E\x20\x28\x27","\x71\x75\x65\x75\x65","\x43\x4F\x55\x4E\x54","\x63\x6F\x6C","\x66\x6E","\x61\x63\x74\x69\x76\x65","\x77\x61\x69\x74\x69\x6E\x67\x43\x61\x6C\x6C\x73","\x71\x75\x65\x75\x65\x46\x69\x6C\x74\x65\x72","\x73\x63\x6F\x70\x65","\x61\x76\x67\x61\x6E\x73\x77\x65\x72\x74\x69\x6D\x65","\x53\x45\x4C\x45\x43\x54\x20\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x29\x2C\x20\x30\x29\x29\x20\x61\x73\x20\x76\x61\x6C\x75\x65\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x20\x57\x48\x45\x52\x45\x20\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x3D\x20\x31\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x20\x49\x4E\x20\x28\x27","\x27\x29","\x61\x76\x67\x74\x61\x6C\x6B\x74\x69\x6D\x65","\x53\x45\x4C\x45\x43\x54\x20\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x74\x61\x6C\x6B\x74\x69\x6D\x65\x29\x2C\x20\x30\x29\x29\x20\x61\x73\x20\x76\x61\x6C\x75\x65\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x20\x57\x48\x45\x52\x45\x20\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x3D\x20\x31\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x20\x49\x4E\x20\x28\x27","\x61\x6E\x73\x77\x65\x72\x72\x61\x74\x65","\x53\x45\x4C\x45\x43\x54\x20\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x20\x2F\x20\x28\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x20\x2B\x20\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x29\x29\x20\x2A\x20\x31\x30\x30\x2C\x20\x31\x29\x20\x61\x73\x20\x76\x61\x6C\x75\x65\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x20\x49\x4E\x20\x28\x27","\x61\x62\x61\x6E\x64\x6F\x6E\x72\x61\x74\x65","\x53\x45\x4C\x45\x43\x54\x20\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x29\x20\x2F\x20\x28\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x20\x2B\x20\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x29\x29\x20\x2A\x20\x31\x30\x30\x2C\x20\x31\x29\x20\x61\x73\x20\x76\x61\x6C\x75\x65\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x20\x49\x4E\x20\x28\x27","\x74\x6F\x74\x61\x6C\x6F\x66\x66\x65\x72\x65\x64","\x53\x45\x4C\x45\x43\x54\x20\x43\x4F\x55\x4E\x54\x28\x64\x69\x73\x74\x69\x6E\x63\x74\x20\x75\x6E\x69\x71\x75\x65\x69\x64\x29\x20\x61\x73\x20\x76\x61\x6C\x75\x65\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x20\x49\x4E\x20\x28\x27","\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64\x41\x6C\x6C","\x73\x68\x6F\x77"];_0xd75c[0];var _=require(_0xd75c[1]);var sequelize=require(_0xd75c[3])[_0xd75c[2]];var Agent=require(_0xd75c[3])[_0xd75c[4]];var ReportQueue=require(_0xd75c[3])[_0xd75c[5]];var VoiceQueue=require(_0xd75c[3])[_0xd75c[6]];var ReportQueueHistory=require(_0xd75c[3])[_0xd75c[8]][_0xd75c[7]];var Util=require(_0xd75c[9]);var Promise=require(_0xd75c[10]);exports[_0xd75c[11]]= function(_0x8d17x9,_0x8d17xa,_0x8d17xb){return ReportQueue[_0xd75c[18]](Util[_0xd75c[17]](_0x8d17x9[_0xd75c[16]]))[_0xd75c[15]](function(_0x8d17xd){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]](_0x8d17xd)})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[19]]= function(_0x8d17x9,_0x8d17xa){return ReportQueue[_0xd75c[26]](_0x8d17x9[_0xd75c[25]][_0xd75c[24]])[_0xd75c[15]](function(_0x8d17xe){if(!_0x8d17xe){return _0x8d17xa[_0xd75c[20]](404)};var _0x8d17xf=_[_0xd75c[22]](_0x8d17xe,_0x8d17x9[_0xd75c[21]]);return _0x8d17xf[_0xd75c[23]]()})[_0xd75c[15]](function(_0x8d17xe){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]](_0x8d17xe)})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[27]]= function(_0x8d17x9,_0x8d17xa){return ReportQueueHistory[_0xd75c[27]]()[_0xd75c[15]](function(_0x8d17x10){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]](_0x8d17x10)})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[28]]= function(_0x8d17x9,_0x8d17xa){return Promise[_0xd75c[31]]([])[_0xd75c[15]](getVoiceQueues(_0x8d17x9[_0xd75c[30]]))[_0xd75c[15]](function(_0x8d17x12){return ReportQueue[_0xd75c[29]]({where:{queuecallerleaveAt:null,queue:_0x8d17x12}})})[_0xd75c[15]](function(_0x8d17x11){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]]({value:_0x8d17x11})})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};function getVoiceQueues(_0x8d17x14){return function(){switch(_0x8d17x14[_0xd75c[39]]){case _0xd75c[30]:return Agent[_0xd75c[26]](_0x8d17x14[_0xd75c[24]],{attributes:[_0xd75c[24]]})[_0xd75c[15]](Util[_0xd75c[35]]())[_0xd75c[15]](function(_0x8d17x12){return _[_0xd75c[34]](_0x8d17x12[_0xd75c[32]],_0xd75c[33])});case _0xd75c[37]:return Agent[_0xd75c[26]](_0x8d17x14[_0xd75c[24]])[_0xd75c[15]](function(_0x8d17x15){return _0x8d17x15[_0xd75c[36]]({attributes:[_0xd75c[33]]})})[_0xd75c[15]](function(_0x8d17x12){return _[_0xd75c[34]](_0x8d17x12,_0xd75c[33])});default:return VoiceQueue[_0xd75c[38]]()[_0xd75c[15]](function(_0x8d17x16){return {rows:_0x8d17x16}})[_0xd75c[15]](function(_0x8d17x12){return _[_0xd75c[34]](_0x8d17x12[_0xd75c[32]],_0xd75c[33])})}}}exports[_0xd75c[40]]= function(_0x8d17x9,_0x8d17xa){var _0x8d17x17={_limit:_0x8d17x9[_0xd75c[16]][_0xd75c[41]]?_0x8d17x9[_0xd75c[16]][_0xd75c[41]]:null,_offset:_0x8d17x9[_0xd75c[16]][_0xd75c[42]]?_0x8d17x9[_0xd75c[16]][_0xd75c[42]]:0,_name:_0x8d17x9[_0xd75c[16]][_0xd75c[33]]|| undefined,_answeredFrom:_0x8d17x9[_0xd75c[16]][_0xd75c[43]]|| _0x8d17x9[_0xd75c[16]][_0xd75c[43]]=== 0?_0x8d17x9[_0xd75c[16]][_0xd75c[43]]:undefined,_answeredTo:_0x8d17x9[_0xd75c[16]][_0xd75c[44]]|| _0x8d17x9[_0xd75c[16]][_0xd75c[44]]=== 0?_0x8d17x9[_0xd75c[16]][_0xd75c[44]]:undefined,_abandonedFrom:_0x8d17x9[_0xd75c[16]][_0xd75c[45]]|| _0x8d17x9[_0xd75c[16]][_0xd75c[45]]=== 0?_0x8d17x9[_0xd75c[16]][_0xd75c[45]]:undefined,_abandonedTo:_0x8d17x9[_0xd75c[16]][_0xd75c[46]]|| _0x8d17x9[_0xd75c[16]][_0xd75c[46]]=== 0?_0x8d17x9[_0xd75c[16]][_0xd75c[46]]:undefined,_unmanagedFrom:_0x8d17x9[_0xd75c[16]][_0xd75c[47]]|| _0x8d17x9[_0xd75c[16]][_0xd75c[47]]=== 0?_0x8d17x9[_0xd75c[16]][_0xd75c[47]]:undefined,_unmanagedTo:_0x8d17x9[_0xd75c[16]][_0xd75c[48]]|| _0x8d17x9[_0xd75c[16]][_0xd75c[48]]=== 0?_0x8d17x9[_0xd75c[16]][_0xd75c[48]]:undefined};console[_0xd75c[49]](_0x8d17x17);var _0x8d17x18,_0x8d17x19,_0x8d17x1a,_0x8d17x1b;delete _0x8d17x9[_0xd75c[16]][_0xd75c[41]];delete _0x8d17x9[_0xd75c[16]][_0xd75c[42]];delete _0x8d17x9[_0xd75c[16]][_0xd75c[43]];delete _0x8d17x9[_0xd75c[16]][_0xd75c[44]];delete _0x8d17x9[_0xd75c[16]][_0xd75c[45]];delete _0x8d17x9[_0xd75c[16]][_0xd75c[46]];delete _0x8d17x9[_0xd75c[16]][_0xd75c[47]];delete _0x8d17x9[_0xd75c[16]][_0xd75c[48]];return Promise[_0xd75c[31]]([])[_0xd75c[15]](getVoiceQueues(_0x8d17x9[_0xd75c[30]]))[_0xd75c[15]](function(_0x8d17x12){_0x8d17x19= _0x8d17x12;_0x8d17x18= _[_0xd75c[34]](_0x8d17x12,function(_0x8d17x1f){return {name:_0x8d17x1f}});return ReportQueue[_0xd75c[38]]({where:{queuecallerleaveAt:null,queue:_0x8d17x19},group:_0xd75c[84],attributes:[[_0xd75c[84],_0xd75c[33]],[sequelize[_0xd75c[87]](_0xd75c[85],sequelize[_0xd75c[86]](_0xd75c[24])),_0xd75c[28]]]})})[_0xd75c[15]](function(_0x8d17x31){_0x8d17x31= _[_0xd75c[34]](_0x8d17x31,_0xd75c[82]);_0x8d17x18[_0xd75c[53]](function(_0x8d17x1f,_0x8d17x32){var _0x8d17x20=_[_0xd75c[51]](_0x8d17x31,{name:_0x8d17x1f[_0xd75c[33]]});_0x8d17x1f[_0xd75c[28]]= _0x8d17x20?_0x8d17x20[_0xd75c[28]]:0});return ReportQueue[_0xd75c[38]]({where:{queuecallerexit:false,queuecallerabandon:false,queuecallercomplete:false,queuecallerleaveAt:{$ne:null},queue:_0x8d17x19},group:_0xd75c[84],attributes:[[_0xd75c[84],_0xd75c[33]],[sequelize[_0xd75c[87]](_0xd75c[85],sequelize[_0xd75c[86]](_0xd75c[24])),_0xd75c[88]]]})})[_0xd75c[15]](function(_0x8d17x30){_0x8d17x30= _[_0xd75c[34]](_0x8d17x30,_0xd75c[82]);_0x8d17x18[_0xd75c[53]](function(_0x8d17x1f){var _0x8d17x20=_[_0xd75c[51]](_0x8d17x30,{name:_0x8d17x1f[_0xd75c[33]]});_0x8d17x1f[_0xd75c[88]]= _0x8d17x20?_0x8d17x20[_0xd75c[88]]:0});return ReportQueue[_0xd75c[38]]({where:{queuecallercomplete:true,queue:_0x8d17x19},group:_0xd75c[84],attributes:[[_0xd75c[84],_0xd75c[33]],[sequelize[_0xd75c[87]](_0xd75c[85],sequelize[_0xd75c[86]](_0xd75c[24])),_0xd75c[55]]]})})[_0xd75c[15]](function(_0x8d17x2f){_0x8d17x2f= _[_0xd75c[34]](_0x8d17x2f,_0xd75c[82]);_0x8d17x18[_0xd75c[53]](function(_0x8d17x1f){var _0x8d17x20=_[_0xd75c[51]](_0x8d17x2f,{name:_0x8d17x1f[_0xd75c[33]]});_0x8d17x1f[_0xd75c[55]]= _0x8d17x20?_0x8d17x20[_0xd75c[55]]:0});return ReportQueue[_0xd75c[38]]({where:{queuecallerabandon:true,queue:_0x8d17x19},group:_0xd75c[84],attributes:[[_0xd75c[84],_0xd75c[33]],[sequelize[_0xd75c[87]](_0xd75c[85],sequelize[_0xd75c[86]](_0xd75c[24])),_0xd75c[58]]]})})[_0xd75c[15]](function(_0x8d17x2e){_0x8d17x2e= _[_0xd75c[34]](_0x8d17x2e,_0xd75c[82]);_0x8d17x18[_0xd75c[53]](function(_0x8d17x1f){var _0x8d17x20=_[_0xd75c[51]](_0x8d17x2e,{name:_0x8d17x1f[_0xd75c[33]]});_0x8d17x1f[_0xd75c[58]]= _0x8d17x20?_0x8d17x20[_0xd75c[58]]:0});return ReportQueue[_0xd75c[38]]({where:{queuecallerexit:true,queue:_0x8d17x19},group:_0xd75c[84],attributes:[[_0xd75c[84],_0xd75c[33]],[sequelize[_0xd75c[87]](_0xd75c[85],sequelize[_0xd75c[86]](_0xd75c[24])),_0xd75c[61]]]})})[_0xd75c[15]](function(_0x8d17x2d){_0x8d17x2d= _[_0xd75c[34]](_0x8d17x2d,_0xd75c[82]);_0x8d17x18[_0xd75c[53]](function(_0x8d17x1f){var _0x8d17x20=_[_0xd75c[51]](_0x8d17x2d,{name:_0x8d17x1f[_0xd75c[33]]});_0x8d17x1f[_0xd75c[61]]= _0x8d17x20?_0x8d17x20[_0xd75c[61]]:0});return sequelize[_0xd75c[16]](_0xd75c[83]+ _0x8d17x19[_0xd75c[76]](_0xd75c[75])+ _0xd75c[77],{type:sequelize[_0xd75c[79]][_0xd75c[78]]})})[_0xd75c[15]](function(_0x8d17x2c){_0x8d17x18[_0xd75c[53]](function(_0x8d17x1f){var _0x8d17x20=_[_0xd75c[51]](_0x8d17x2c,{name:_0x8d17x1f[_0xd75c[33]]});_0x8d17x1f[_0xd75c[80]]= _0x8d17x20?_0x8d17x20[_0xd75c[80]]:_0xd75c[73]});return sequelize[_0xd75c[16]](_0xd75c[81]+ _0x8d17x19[_0xd75c[76]](_0xd75c[75])+ _0xd75c[77],{type:sequelize[_0xd75c[79]][_0xd75c[78]]})})[_0xd75c[15]](function(_0x8d17x2b){_0x8d17x18[_0xd75c[53]](function(_0x8d17x1f){var _0x8d17x20=_[_0xd75c[51]](_0x8d17x2b,{name:_0x8d17x1f[_0xd75c[33]]});_0x8d17x1f[_0xd75c[72]]= _0x8d17x20?_0x8d17x20[_0xd75c[72]]:_0xd75c[73]});return sequelize[_0xd75c[16]](_0xd75c[74]+ _0x8d17x19[_0xd75c[76]](_0xd75c[75])+ _0xd75c[77],{type:sequelize[_0xd75c[79]][_0xd75c[78]]})})[_0xd75c[15]](function(_0x8d17x1e){_0x8d17x18[_0xd75c[53]](function(_0x8d17x1f){var _0x8d17x20=_[_0xd75c[51]](_0x8d17x1e,{name:_0x8d17x1f[_0xd75c[33]]});_0x8d17x1f[_0xd75c[52]]= _0x8d17x20?_0x8d17x20[_0xd75c[52]]:0});var _0x8d17x21=_(_[_0xd75c[66]](_0x8d17x18,function(_0x8d17x1f){var _0x8d17x22=_0x8d17x17[_0xd75c[54]]?(_0x8d17x1f[_0xd75c[55]]>= Number(_0x8d17x17._answeredFrom)):true;var _0x8d17x23=_0x8d17x17[_0xd75c[56]]?(_0x8d17x1f[_0xd75c[55]]<= Number(_0x8d17x17._answeredTo)):true;var _0x8d17x24=_0x8d17x17[_0xd75c[57]]?(_0x8d17x1f[_0xd75c[58]]>= Number(_0x8d17x17._abandonedFrom)):true;var _0x8d17x25=_0x8d17x17[_0xd75c[59]]?(_0x8d17x1f[_0xd75c[58]]<= Number(_0x8d17x17._abandonedTo)):true;var _0x8d17x26=_0x8d17x17[_0xd75c[60]]?(_0x8d17x1f[_0xd75c[61]]>= Number(_0x8d17x17._unmanagedFrom)):true;var _0x8d17x27=_0x8d17x17[_0xd75c[62]]?(_0x8d17x1f[_0xd75c[61]]<= Number(_0x8d17x17._unmanagedTo)):true;var _0x8d17x28=_0x8d17x17[_0xd75c[63]]?_[_0xd75c[64]](_0x8d17x1f[_0xd75c[33]],_0x8d17x17._name):true;return _[_0xd75c[65]]([_0x8d17x22,_0x8d17x23,_0x8d17x24,_0x8d17x25,_0x8d17x26,_0x8d17x27,_0x8d17x28],function(_0x8d17x29,_0x8d17x2a){return _0x8d17x29&& _0x8d17x2a})}));if(_0x8d17x17[_0xd75c[67]]){_0x8d17x21= _0x8d17x21[_0xd75c[70]](_0x8d17x17._offset)[_0xd75c[69]](_0x8d17x17._limit)[_0xd75c[68]]()};return [_0x8d17x18[_0xd75c[71]],_0x8d17x21]})[_0xd75c[50]](function(_0x8d17x1c,_0x8d17x1d){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]]({rows:_0x8d17x1d,count:_0x8d17x1c})})[_0xd75c[12]](function(_0x8d17xc){console[_0xd75c[49]](_0x8d17xc);return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[89]]= function(_0x8d17x9,_0x8d17xa){var _0x8d17x33={};return Promise[_0xd75c[31]]([])[_0xd75c[15]](getVoiceQueues(_0x8d17x9[_0xd75c[30]]))[_0xd75c[15]](function(_0x8d17x12){return ReportQueue[_0xd75c[91]](_0xd75c[28],{method:[_0xd75c[90],_0x8d17x12]})[_0xd75c[38]](Util[_0xd75c[17]](_0x8d17x9[_0xd75c[16]],_0x8d17x33))})[_0xd75c[15]](function(_0x8d17x11){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]]({rows:_0x8d17x11,count:_0x8d17x11[_0xd75c[71]]})})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[88]]= function(_0x8d17x9,_0x8d17xa){return Promise[_0xd75c[31]]([])[_0xd75c[15]](getVoiceQueues(_0x8d17x9[_0xd75c[30]]))[_0xd75c[15]](function(_0x8d17x12){return ReportQueue[_0xd75c[29]]({where:{queuecallerexit:false,queuecallerabandon:false,queuecallercomplete:false,queuecallerleaveAt:{$ne:null},queue:_0x8d17x12}})})[_0xd75c[15]](function(_0x8d17x11){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]]({value:_0x8d17x11})})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[55]]= function(_0x8d17x9,_0x8d17xa){return Promise[_0xd75c[31]]([])[_0xd75c[15]](getVoiceQueues(_0x8d17x9[_0xd75c[30]]))[_0xd75c[15]](function(_0x8d17x12){return ReportQueue[_0xd75c[29]]({where:{queuecallercomplete:true,queue:_0x8d17x12}})})[_0xd75c[15]](function(_0x8d17x11){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]]({value:_0x8d17x11})})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[58]]= function(_0x8d17x9,_0x8d17xa){return Promise[_0xd75c[31]]([])[_0xd75c[15]](getVoiceQueues(_0x8d17x9[_0xd75c[30]]))[_0xd75c[15]](function(_0x8d17x12){return ReportQueue[_0xd75c[29]]({where:{queuecallerabandon:true,queue:_0x8d17x12}})})[_0xd75c[15]](function(_0x8d17x11){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]]({value:_0x8d17x11})})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[92]]= function(_0x8d17x9,_0x8d17xa){return Promise[_0xd75c[31]]([])[_0xd75c[15]](getVoiceQueues(_0x8d17x9[_0xd75c[30]]))[_0xd75c[15]](function(_0x8d17x12){return sequelize[_0xd75c[16]](_0xd75c[93]+ _0x8d17x12[_0xd75c[76]](_0xd75c[75])+ _0xd75c[94],{type:sequelize[_0xd75c[79]][_0xd75c[78]]})})[_0xd75c[15]](function(_0x8d17x11){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]]({value:_0x8d17x11[0][_0xd75c[68]]})})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[95]]= function(_0x8d17x9,_0x8d17xa){return Promise[_0xd75c[31]]([])[_0xd75c[15]](getVoiceQueues(_0x8d17x9[_0xd75c[30]]))[_0xd75c[15]](function(_0x8d17x12){return sequelize[_0xd75c[16]](_0xd75c[96]+ _0x8d17x12[_0xd75c[76]](_0xd75c[75])+ _0xd75c[94],{type:sequelize[_0xd75c[79]][_0xd75c[78]]})})[_0xd75c[15]](function(_0x8d17x11){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]]({value:_0x8d17x11[0][_0xd75c[68]]})})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[97]]= function(_0x8d17x9,_0x8d17xa){return Promise[_0xd75c[31]]([])[_0xd75c[15]](getVoiceQueues(_0x8d17x9[_0xd75c[30]]))[_0xd75c[15]](function(_0x8d17x12){return sequelize[_0xd75c[16]](_0xd75c[98]+ _0x8d17x12[_0xd75c[76]](_0xd75c[75])+ _0xd75c[94],{type:sequelize[_0xd75c[79]][_0xd75c[78]]})})[_0xd75c[15]](function(_0x8d17x11){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]]({value:_0x8d17x11[0][_0xd75c[68]]})})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[99]]= function(_0x8d17x9,_0x8d17xa){return Promise[_0xd75c[31]]([])[_0xd75c[15]](getVoiceQueues(_0x8d17x9[_0xd75c[30]]))[_0xd75c[15]](function(_0x8d17x12){return sequelize[_0xd75c[16]](_0xd75c[100]+ _0x8d17x12[_0xd75c[76]](_0xd75c[75])+ _0xd75c[94],{type:sequelize[_0xd75c[79]][_0xd75c[78]]})})[_0xd75c[15]](function(_0x8d17x11){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]]({value:_0x8d17x11[0][_0xd75c[68]]})})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[101]]= function(_0x8d17x9,_0x8d17xa){return Promise[_0xd75c[31]]([])[_0xd75c[15]](getVoiceQueues(_0x8d17x9[_0xd75c[30]]))[_0xd75c[15]](function(_0x8d17x12){return sequelize[_0xd75c[16]](_0xd75c[102]+ _0x8d17x12[_0xd75c[76]](_0xd75c[75])+ _0xd75c[94],{type:sequelize[_0xd75c[79]][_0xd75c[78]]})})[_0xd75c[15]](function(_0x8d17x11){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]]({value:_0x8d17x11[0][_0xd75c[68]]})})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[61]]= function(_0x8d17x9,_0x8d17xa){return Promise[_0xd75c[31]]([])[_0xd75c[15]](getVoiceQueues(_0x8d17x9[_0xd75c[30]]))[_0xd75c[15]](function(_0x8d17x12){return ReportQueue[_0xd75c[29]]({where:{queuecallerexit:true,queue:_0x8d17x12}})})[_0xd75c[15]](function(_0x8d17x11){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]]({value:_0x8d17x11})})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[103]]= function(_0x8d17x9,_0x8d17xa){return Promise[_0xd75c[31]]([])[_0xd75c[15]](getVoiceQueues(_0x8d17x9[_0xd75c[30]]))[_0xd75c[15]](function(_0x8d17x12){return ReportQueue[_0xd75c[18]]({where:{queuecallerabandon:true,queue:_0x8d17x12}})})[_0xd75c[15]](function(_0x8d17x11){return _0x8d17xa[_0xd75c[14]](200)[_0xd75c[13]](_0x8d17x11)})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};exports[_0xd75c[104]]= function(_0x8d17x9,_0x8d17xa){return ReportQueue[_0xd75c[38]]({where:{queue:_0x8d17x9[_0xd75c[25]][_0xd75c[84]]}})[_0xd75c[15]](function(_0x8d17x34){if(!_0x8d17x34){return _0x8d17xa[_0xd75c[20]](404)};return _0x8d17xa[_0xd75c[13]]({count:_0x8d17x34[_0xd75c[71]],rows:_0x8d17x34})})[_0xd75c[12]](function(_0x8d17xc){return handleError(_0x8d17xa,_0x8d17xc)})};function handleError(_0x8d17xa,_0x8d17xc){return _0x8d17xa[_0xd75c[14]](500)[_0xd75c[13]](_0x8d17xc)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var sequelize = require('../../models').sequelize; +var Agent = require('../../models').User; +var ReportQueue = require('../../models').ReportQueue; +var VoiceQueue = require('../../models').VoiceQueue; +var ReportQueueHistory = require('../../models').history.ReportQueueHistory; +var Util = require('../../config/util'); +var Promise = require('bluebird'); + +// Get list of reportQueues +exports.index = function(req, res, next) { + return ReportQueue + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.update = function(req, res) { + return ReportQueue + .findById(req.params.id) + .then(function(queue) { + if (!queue) { + return res.sendStatus(404); + } + var updated = _.merge(queue, req.body); + return updated.save(); + }) + .then(function(queue) { + return res.status(200).send(queue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get list of fields +exports.describe = function(req, res) { + return ReportQueueHistory + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get Waiting Calls +exports.waiting = function(req, res) { + return Promise + .all([]) + .then(getVoiceQueues(req.user)) + .then(function(userQueues) { + return ReportQueue + .count({ + where: { + queuecallerleaveAt: null, + queue: userQueues + } + }); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function getVoiceQueues(user) { + return function() { + switch (user.role) { + case 'user': + return Agent //also User model + .findById(user.id, { + attributes: ['id'] + }) + .then(Util.getVoiceQueuesIdByUser()) + .then(function(userQueues) { + return _.map(userQueues.rows, 'name'); + }); + case 'agent': + return Agent + .findById(user.id) + .then(function(agent) { + return agent + .getVoiceQueues({ + attributes: ['name'] + }); + }) + .then(function(userQueues) { + return _.map(userQueues, 'name'); + }); + default: + return VoiceQueue + .findAll() + .then(function(queues) { + return { + rows: queues + }; + }) + .then(function(userQueues) { + return _.map(userQueues.rows, 'name'); + }); + } + } +} + +exports.queueParameters = function(req, res) { + var query = { + _limit: req.query.limit ? req.query.limit : null, + _offset: req.query.offset ? req.query.offset : 0, + _name: req.query.name || undefined, + _answeredFrom: req.query.answered_uiFrom || req.query.answered_uiFrom === 0 ? req.query.answered_uiFrom : undefined, + _answeredTo: req.query.answered_uiTo || req.query.answered_uiTo === 0 ? req.query.answered_uiTo : undefined, + _abandonedFrom: req.query.abandoned_uiFrom || req.query.abandoned_uiFrom === 0 ? req.query.abandoned_uiFrom : undefined, + _abandonedTo: req.query.abandoned_uiTo || req.query.abandoned_uiTo === 0 ? req.query.abandoned_uiTo : undefined, + _unmanagedFrom: req.query.unmanaged_uiFrom || req.query.unmanaged_uiFrom === 0 ? req.query.unmanaged_uiFrom : undefined, + _unmanagedTo: req.query.unmanaged_uiTo || req.query.unmanaged_uiTo === 0 ? req.query.unmanaged_uiTo : undefined, + } + console.log(query); + var _parameters, _userQueues, _limit, _offset; + delete req.query.limit; + delete req.query.offset; + delete req.query.answered_uiFrom; + delete req.query.answered_uiTo; + delete req.query.abandoned_uiFrom; + delete req.query.abandoned_uiTo; + delete req.query.unmanaged_uiFrom; + delete req.query.unmanaged_uiTo; + + return Promise + .all([]) + .then(getVoiceQueues(req.user)) + .then(function(userQueues) { + _userQueues = userQueues; + _parameters = _.map(userQueues, function(element) { + return { + name: element + }; + }); + //waiting + return ReportQueue + .findAll({ + where: { + queuecallerleaveAt: null, + queue: _userQueues + }, + group: 'queue', + attributes: [ + ['queue', 'name'], + [sequelize.fn('COUNT', sequelize.col('id')), 'waiting'] + ] + }); + }) + .then(function(waiting) { + waiting = _.map(waiting, 'dataValues'); + _parameters.forEach(function(element, key) { + var value = _.find(waiting, { + name: element.name + }); + element.waiting = value ? value.waiting : 0; + }); + // console.log('WAITING', _parameters); + //active + return ReportQueue + .findAll({ + where: { + queuecallerexit: false, + queuecallerabandon: false, + queuecallercomplete: false, + queuecallerleaveAt: { + $ne: null + }, + queue: _userQueues + }, + group: 'queue', + attributes: [ + ['queue', 'name'], + [sequelize.fn('COUNT', sequelize.col('id')), 'active'] + ] + }); + }) + .then(function(active) { + active = _.map(active, 'dataValues'); + _parameters.forEach(function(element) { + var value = _.find(active, { + name: element.name + }); + element.active = value ? value.active : 0; + }); + // console.log('ACTIVE', _parameters); + //answered + return ReportQueue + .findAll({ + where: { + queuecallercomplete: true, + queue: _userQueues + }, + group: 'queue', + attributes: [ + ['queue', 'name'], + [sequelize.fn('COUNT', sequelize.col('id')), 'answered'] + ] + }); + }) + .then(function(answered) { + answered = _.map(answered, 'dataValues'); + // console.log('beforeAnswered', _.map(answered, 'dataValues')); + _parameters.forEach(function(element) { + var value = _.find(answered, { + name: element.name + }); + element.answered = value ? value.answered : 0; + }); + // console.log('ANSWERED', _parameters); + //abandoned + return ReportQueue + .findAll({ + where: { + queuecallerabandon: true, + queue: _userQueues + }, + group: 'queue', + attributes: [ + ['queue', 'name'], + [sequelize.fn('COUNT', sequelize.col('id')), 'abandoned'] + ] + }); + }) + .then(function(abandoned) { + abandoned = _.map(abandoned, 'dataValues'); + _parameters.forEach(function(element) { + var value = _.find(abandoned, { + name: element.name + }); + element.abandoned = value ? value.abandoned : 0; + }); + // console.log('ABANDONED', _parameters); + //unmanaged + return ReportQueue + .findAll({ + where: { + queuecallerexit: true, + queue: _userQueues + }, + group: 'queue', + attributes: [ + ['queue', 'name'], + [sequelize.fn('COUNT', sequelize.col('id')), 'unmanaged'] + ] + }); + }) + .then(function(unmanaged) { + unmanaged = _.map(unmanaged, 'dataValues'); + _parameters.forEach(function(element) { + var value = _.find(unmanaged, { + name: element.name + }); + element.unmanaged = value ? value.unmanaged : 0; + }); + // console.log('UNMANAGED', _parameters); + //holdtime + return sequelize + .query('SELECT queue AS \'name\',SEC_TO_TIME(ROUND(AVG(holdtime), 0)) as holdtime FROM report_agent WHERE agentcomplete = 1 AND queue IN (\'' + _userQueues.join("','") + + '\') GROUP BY queue', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(holdtime) { + _parameters.forEach(function(element) { + var value = _.find(holdtime, { + name: element.name + }); + element.holdtime = value ? value.holdtime : '00:00:00'; + }); + // console.log('HOLDTIME', _parameters); + //talktime + return sequelize + .query('SELECT queue AS \'name\',SEC_TO_TIME(ROUND(AVG(talktime), 0)) as talktime FROM report_agent WHERE agentcomplete = 1 AND queue IN (\'' + _userQueues.join("','") + + '\') GROUP BY queue', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(talktime) { + _parameters.forEach(function(element) { + var value = _.find(talktime, { + name: element.name + }); + element.talktime = value ? value.talktime : '00:00:00'; + }); + // console.log('TALKTIME', _parameters); + //totalcalls + return sequelize + .query('SELECT queue AS \'name\',COUNT(distinct uniqueid) as totalcalls FROM report_queue WHERE queue IN (\'' + _userQueues.join("','") + '\') GROUP BY queue', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(totalcalls) { + _parameters.forEach(function(element) { + var value = _.find(totalcalls, { + name: element.name + }); + element.totalcalls = value ? value.totalcalls : 0; + }); + // console.log('TOTALCALLS', _parameters); + var results = _(_.filter(_parameters, function(element) { + var answeredFrom = query._answeredFrom ? (element.answered >= Number(query._answeredFrom)) : true; + var answeredTo = query._answeredTo ? (element.answered <= Number(query._answeredTo)) : true; + var abandonedFrom = query._abandonedFrom ? (element.abandoned >= Number(query._abandonedFrom)) : true; + var abandonedto = query._abandonedTo ? (element.abandoned <= Number(query._abandonedTo)) : true; + var unmanagedFrom = query._unmanagedFrom ? (element.unmanaged >= Number(query._unmanagedFrom)) : true; + var unmanagedTo = query._unmanagedTo ? (element.unmanaged <= Number(query._unmanagedTo)) : true; + var name = query._name ? _.includes(element.name, query._name) : true; + return _.reduce([answeredFrom, answeredTo, abandonedFrom, abandonedto, unmanagedFrom, unmanagedTo, name], function(total, n) { + return total && n; + }); + })); + if (query._limit) { + results = results.slice(query._offset).take(query._limit).value(); + } + return [_parameters.length, results]; + }) + .spread(function(count, rows) { + // console.log('RETURN', rows); + return res.status(200).send({ + rows: rows, + count: count + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get Waiting Calls +exports.waitingCalls = function(req, res) { + var where = {}; + return Promise + .all([]) + .then(getVoiceQueues(req.user)) + .then(function(userQueues) { + return ReportQueue + .scope('waiting', { + method: ['queueFilter', userQueues] + }) + .findAll(Util.getQuery(req.query, where)); + }) + .then(function(data) { + return res.status(200).send({ + rows: data, + count: data.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get Waiting Calls +exports.active = function(req, res) { + return Promise + .all([]) + .then(getVoiceQueues(req.user)) + .then(function(userQueues) { + return ReportQueue + .count({ + where: { + queuecallerexit: false, + queuecallerabandon: false, + queuecallercomplete: false, + queuecallerleaveAt: { + $ne: null + }, + queue: userQueues + } + }); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get Answered Calls +exports.answered = function(req, res) { + return Promise + .all([]) + .then(getVoiceQueues(req.user)) + .then(function(userQueues) { + return ReportQueue + .count({ + where: { + queuecallercomplete: true, + queue: userQueues + } + }); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get Abandoned Calls +exports.abandoned = function(req, res) { + return Promise + .all([]) + .then(getVoiceQueues(req.user)) + .then(function(userQueues) { + return ReportQueue + .count({ + where: { + queuecallerabandon: true, + queue: userQueues + } + }); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get Answered Calls +exports.avganswertime = function(req, res) { + return Promise + .all([]) + .then(getVoiceQueues(req.user)) + .then(function(userQueues) { + return sequelize + .query('SELECT SEC_TO_TIME(ROUND(AVG(holdtime), 0)) as value FROM report_agent WHERE agentcomplete = 1 AND queue IN (\'' + userQueues.join("','") + '\')', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + return res.status(200).send({ + value: data[0].value + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get Answered Calls +exports.avgtalktime = function(req, res) { + return Promise + .all([]) + .then(getVoiceQueues(req.user)) + .then(function(userQueues) { + return sequelize + .query('SELECT SEC_TO_TIME(ROUND(AVG(talktime), 0)) as value FROM report_agent WHERE agentcomplete = 1 AND queue IN (\'' + userQueues.join("','") + '\')', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + return res.status(200).send({ + value: data[0].value + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get Answered Calls +exports.answerrate = function(req, res) { + return Promise + .all([]) + .then(getVoiceQueues(req.user)) + .then(function(userQueues) { + return sequelize + .query('SELECT ROUND(SUM(queuecallercomplete) / (SUM(queuecallercomplete) + SUM(queuecallerabandon)) * 100, 1) as value FROM report_queue WHERE queue IN (\'' + userQueues.join("','") + + '\')', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + return res.status(200).send({ + value: data[0].value + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get Answered Calls +exports.abandonrate = function(req, res) { + return Promise + .all([]) + .then(getVoiceQueues(req.user)) + .then(function(userQueues) { + return sequelize + .query('SELECT ROUND(SUM(queuecallerabandon) / (SUM(queuecallercomplete) + SUM(queuecallerabandon)) * 100, 1) as value FROM report_queue WHERE queue IN (\'' + userQueues.join("','") + + '\')', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + return res.status(200).send({ + value: data[0].value + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get Answered Calls +exports.totaloffered = function(req, res) { + return Promise + .all([]) + .then(getVoiceQueues(req.user)) + .then(function(userQueues) { + return sequelize + .query('SELECT COUNT(distinct uniqueid) as value FROM report_queue WHERE queue IN (\'' + userQueues.join("','") + '\')', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + return res.status(200).send({ + value: data[0].value + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get Unmanaged Calls +exports.unmanaged = function(req, res) { + return Promise + .all([]) + .then(getVoiceQueues(req.user)) + .then(function(userQueues) { + return ReportQueue + .count({ + where: { + queuecallerexit: true, + queue: userQueues + } + }); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get Unmanaged Calls +exports.abandonedAll = function(req, res) { + return Promise + .all([]) + .then(getVoiceQueues(req.user)) + .then(function(userQueues) { + return ReportQueue + .findAndCountAll({ + where: { + queuecallerabandon: true, + queue: userQueues + } + }); + }) + .then(function(data) { + return res.status(200).send(data); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single reportQueue +exports.show = function(req, res) { + return ReportQueue + .findAll({ + where: { + queue: req.params.queue + } + }) + .then(function(reportQueue) { + if (!reportQueue) { + return res.sendStatus(404); + } + return res.send({ + count: reportQueue.length, + rows: reportQueue + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/report_queue/report_queue.events.js b/server/api/report_queue/report_queue.events.js index e69245d..29eace5 100644 --- a/server/api/report_queue/report_queue.events.js +++ b/server/api/report_queue/report_queue.events.js @@ -1 +1,36 @@ -var _0x6ae0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x6ae0[0];const EventEmitter=require(_0x6ae0[1]);const ReportQueue=require(_0x6ae0[3])[_0x6ae0[2]];var ReportQueueEvents= new EventEmitter();ReportQueueEvents[_0x6ae0[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x6ae0[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x6ae0[6],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x6ae0[7]};for(var e in events){var event=events[e];ReportQueue[_0x6ae0[8]](e,emitEvent(event))};function emitEvent(event){return function(_0xc084x8,_0xc084x9,_0xc084xa){ReportQueueEvents[_0x6ae0[11]](event+ _0x6ae0[9]+ _0xc084x8[_0x6ae0[10]],_0xc084x8);ReportQueueEvents[_0x6ae0[11]](event,_0xc084x8);_0xc084xa(null)}}module[_0x6ae0[12]]= ReportQueueEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportQueue = require('../../models').ReportQueue; + +var ReportQueueEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportQueueEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'update', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportQueue.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportQueueEvents.emit(event + ':' + doc._id, doc); + ReportQueueEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportQueueEvents; diff --git a/server/api/report_queue/report_queue.socket.js b/server/api/report_queue/report_queue.socket.js index 5b8dc98..3c27c94 100644 --- a/server/api/report_queue/report_queue.socket.js +++ b/server/api/report_queue/report_queue.socket.js @@ -1 +1,93 @@ -var _0x8166=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x2E\x65\x76\x65\x6E\x74\x73","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6C\x6F\x64\x61\x73\x68","\x62\x6C\x75\x65\x62\x69\x72\x64","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x3A\x73\x61\x76\x65","\x45\x72\x72\x6F\x72\x20\x66\x69\x6C\x74\x65\x72\x69\x6E\x67\x20\x71\x75\x65\x75\x65\x73\x20\x61\x66\x74\x65\x72\x20\x71\x75\x65\x75\x65\x20\x73\x61\x76\x65","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x71\x75\x65\x75\x65","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x65\x6D\x69\x74","\x74\x68\x65\x6E","\x61\x6C\x6C","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x3A\x75\x70\x64\x61\x74\x65","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x72\x6F\x77\x73","\x6E\x61\x6D\x65","\x6D\x61\x70","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x75\x73\x65\x72\x49\x64","\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x61\x67\x65\x6E\x74","\x73\x63\x6F\x70\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x72\x6F\x6C\x65"];_0x8166[0];const ReportQueueEvents=require(_0x8166[1]);const VoiceQueue=require(_0x8166[3])[_0x8166[2]];const User=require(_0x8166[3])[_0x8166[4]];const Util=require(_0x8166[5]);const _=require(_0x8166[6]);const Promise=require(_0x8166[7]);var events=[_0x8166[8],_0x8166[9],_0x8166[10]];exports[_0x8166[11]]= function(_0xfc50x8){for(var _0xfc50x9=0,_0xfc50xa=events[_0x8166[12]];_0xfc50x9< _0xfc50xa;_0xfc50x9++){var _0xfc50xb=events[_0xfc50x9];var _0xfc50xc=createListener(_0x8166[13]+ _0xfc50xb,_0xfc50x8);ReportQueueEvents[_0x8166[14]](_0xfc50xb,_0xfc50xc);_0xfc50x8[_0x8166[14]](_0x8166[15],removeListener(_0xfc50xb,_0xfc50xc))}};function createListener(_0xfc50xb,_0xfc50x8){return function(_0xfc50xe){switch(_0xfc50xb){case _0x8166[16]:;case _0x8166[25]:return Promise[_0x8166[24]]([])[_0x8166[23]](getVoiceQueues(_0xfc50x8))[_0x8166[23]](function(_0xfc50x10){if(_[_0x8166[21]](_0xfc50x10,_0xfc50xe[_0x8166[20]])){_0xfc50x8[_0x8166[22]](_0xfc50xb,_0xfc50xe)}})[_0x8166[19]](function(_0xfc50xf){console[_0x8166[18]](_0x8166[17],_0xfc50xf)});case _0x8166[26]:_0xfc50x8[_0x8166[22]](_0xfc50xb,_0xfc50xe);break;default:}}}function removeListener(_0xfc50xb,_0xfc50xc){return function(){ReportQueueEvents[_0x8166[27]](_0xfc50xb,_0xfc50xc)}}function getVoiceQueues(_0xfc50x13){return function(){switch(_0xfc50x13[_0x8166[40]]){case _0x8166[35]:return User[_0x8166[34]](_0xfc50x13[_0x8166[32]],{attributes:[_0x8166[33]]})[_0x8166[23]](Util[_0x8166[31]]())[_0x8166[23]](function(_0xfc50x10){return _[_0x8166[30]](_0xfc50x10[_0x8166[28]],_0x8166[29])});case _0x8166[37]:return User[_0x8166[38]](_0x8166[37])[_0x8166[34]](_0xfc50x13[_0x8166[32]])[_0x8166[23]](function(_0xfc50x15){return _0xfc50x15[_0x8166[36]]({attributes:[_0x8166[29]]})})[_0x8166[23]](function(_0xfc50x14){return _[_0x8166[30]](_0xfc50x14,_0x8166[29])});default:return VoiceQueue[_0x8166[39]]()[_0x8166[23]](function(_0xfc50x10){return _[_0x8166[30]](_0xfc50x10,_0x8166[29])})}}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ReportQueueEvents = require('./report_queue.events'); +const VoiceQueue = require('../../models').VoiceQueue; +const User = require('../../models').User; +const Util = require('../../config/util'); +const _ = require('lodash'); +const Promise = require('bluebird'); + +// Model events to emit +var events = ['save', 'update', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_queue:' + event, socket); + + ReportQueueEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'report_queue:save': + case 'report_queue:update': + return Promise + .all([]) + .then(getVoiceQueues(socket)) + .then(function(userQueues) { + if (_.includes(userQueues, doc.queue)) { + socket.emit(event, doc); + } + }) + .catch(function(err) { + console.log('Error filtering queues after queue save', err); + }) + + case 'report_queue:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportQueueEvents.removeListener(event, listener); + }; +} + +function getVoiceQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.userId, { + attributes: ['id'] + }) + .then(Util.getVoiceQueuesIdByUser()) + .then(function(userQueues) { + return _.map(userQueues.rows, 'name'); + }); + case 'agent': + return User + .scope('agent') + .findById(user.userId) + .then(function(agent) { + return agent + .getVoiceQueues({ + attributes: ['name'] + }); + }) + .then(function(agentQueues) { + return _.map(agentQueues, 'name'); + }); + default: + return VoiceQueue //the queue has to exist in my motion queues, otherwise is not manageable from the interface (prbably an error didn' t delete the queue from asterisk) + .findAll() + .then(function(userQueues) { + return _.map(userQueues, 'name'); + }); + } + } +} diff --git a/server/api/report_sms/index.js b/server/api/report_sms/index.js index be342a0..93dc165 100644 --- a/server/api/report_sms/index.js +++ b/server/api/report_sms/index.js @@ -1 +1,16 @@ -var _0xd00c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x53\x6D\x73","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x61\x63\x63\x65\x70\x74\x2F\x3A\x75\x6E\x69\x71\x75\x65\x69\x64","\x68\x61\x73\x52\x6F\x6C\x65","\x61\x63\x63\x65\x70\x74","\x2F\x3A\x69\x64\x2F\x72\x65\x6A\x65\x63\x74","\x72\x65\x6A\x65\x63\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xd00c[0];var express=require(_0xd00c[1]);var controller=require(_0xd00c[2]);var auth=require(_0xd00c[3]);var license=require(_0xd00c[4]);var router=express.Router();router[_0xd00c[12]](_0xd00c[5],auth[_0xd00c[6]](),license[_0xd00c[7]](),auth[_0xd00c[10]]([17],[_0xd00c[8],_0xd00c[9]]),controller[_0xd00c[11]]);router[_0xd00c[12]](_0xd00c[13],auth[_0xd00c[6]](),license[_0xd00c[7]](),auth[_0xd00c[14]](_0xd00c[9]),controller[_0xd00c[15]]);router[_0xd00c[12]](_0xd00c[16],auth[_0xd00c[6]](),license[_0xd00c[7]](),auth[_0xd00c[14]](_0xd00c[9]),controller[_0xd00c[17]]);module[_0xd00c[18]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_sms.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasSms(), auth.hasModule([17], ['admin', 'agent']), controller.index); +router.get('/:id/accept/:uniqueid', auth.isAuthenticated(), license.hasSms(), auth.hasRole('agent'), controller.accept); +router.get('/:id/reject', auth.isAuthenticated(), license.hasSms(), auth.hasRole('agent'), controller.reject); + + + +module.exports = router; diff --git a/server/api/report_sms/report_sms.controller.js b/server/api/report_sms/report_sms.controller.js index 3e62407..20e4240 100644 --- a/server/api/report_sms/report_sms.controller.js +++ b/server/api/report_sms/report_sms.controller.js @@ -1 +1,179 @@ -var _0x9cb5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x53\x6D\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x6D\x73\x52\x6F\x6F\x6D","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\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\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x61\x63\x63\x65\x70\x74","\x2E","\x73\x70\x6C\x69\x74","\x75\x6E\x69\x71\x75\x65\x69\x64","\x70\x61\x72\x61\x6D\x73","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x4F\x50\x45\x4E","\x61\x67\x65\x6E\x74","\x75\x73\x65\x72","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x43\x4C\x4F\x53\x45\x44","\x67\x65\x74\x53\x6D\x73\x52\x6F\x6F\x6D\x73","\x73\x6D\x73\x43\x61\x70\x61\x63\x69\x74\x79","\x72\x65\x6A\x65\x63\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74"];_0x9cb5[0];var _=require(_0x9cb5[1]);var ReportSms=require(_0x9cb5[3])[_0x9cb5[2]];var SmsRoom=require(_0x9cb5[3])[_0x9cb5[4]];var sequelize=require(_0x9cb5[3])[_0x9cb5[5]];var Agent=require(_0x9cb5[3])[_0x9cb5[6]];var Util=require(_0x9cb5[7]);var moment=require(_0x9cb5[8]);function handleError(_0xc5adx9,_0xc5adxa){return _0xc5adx9[_0x9cb5[10]](500)[_0x9cb5[9]](_0xc5adxa)}exports[_0x9cb5[11]]= function(_0xc5adxb,_0xc5adx9){return ReportSms[_0x9cb5[16]](Util[_0x9cb5[15]](_0xc5adxb[_0x9cb5[14]]))[_0x9cb5[13]](function(_0xc5adxc){_0xc5adx9[_0x9cb5[10]](200)[_0x9cb5[9]](_0xc5adxc)})[_0x9cb5[12]](function(_0xc5adxa){return handleError(_0xc5adx9,_0xc5adxa)})};exports[_0x9cb5[17]]= function(_0xc5adxb,_0xc5adx9){var _0xc5adxd;var _0xc5adxe=_0xc5adxb[_0x9cb5[21]][_0x9cb5[20]][_0x9cb5[19]](_0x9cb5[18])[1];return Agent[_0x9cb5[30]](_0xc5adxb[_0x9cb5[25]][_0x9cb5[29]],{attributes:[_0x9cb5[29],_0x9cb5[33]]})[_0x9cb5[13]](function(_0xc5adx12){_0xc5adxd= _0xc5adx12;return _0xc5adx12[_0x9cb5[32]]({where:{status:{$ne:_0x9cb5[31]},id:{$ne:_0xc5adxe}},attributes:[_0x9cb5[29]]})})[_0x9cb5[13]](function(_0xc5adx11){return ReportSms[_0x9cb5[30]](_0xc5adxb[_0x9cb5[21]][_0x9cb5[29]])})[_0x9cb5[13]](function(_0xc5adxf){if(!_0xc5adxf){return _0xc5adx9[_0x9cb5[22]](404)};var _0xc5adx10=_[_0x9cb5[27]](_0xc5adxf,{connectid:_0xc5adxb[_0x9cb5[21]][_0x9cb5[20]]});return _0xc5adx10[_0x9cb5[28]]()})[_0x9cb5[13]](function(){return SmsRoom[_0x9cb5[26]]({status:_0x9cb5[23],openReason:_0x9cb5[24]},{where:{id:_0xc5adxe},user:_0xc5adxb[_0x9cb5[25]],individualHooks:true})})[_0x9cb5[13]](function(){return _0xc5adx9[_0x9cb5[22]](200)})[_0x9cb5[12]](sequelize.UniqueConstraintError,function(_0xc5adxa){return _0xc5adx9[_0x9cb5[22]](504)})[_0x9cb5[12]](function(_0xc5adxa){return handleError(_0xc5adx9,_0xc5adxa)})};exports[_0x9cb5[34]]= function(_0xc5adxb,_0xc5adx9){return ReportSms[_0x9cb5[30]](_0xc5adxb[_0x9cb5[21]][_0x9cb5[29]])[_0x9cb5[13]](function(_0xc5adxf){if(!_0xc5adxf){return _0xc5adx9[_0x9cb5[22]](404)};var _0xc5adx10=_[_0x9cb5[27]](_0xc5adxf,{rejectedAt:moment()[_0x9cb5[36]](_0x9cb5[35])});return _0xc5adx10[_0x9cb5[28]]()})[_0x9cb5[13]](function(){return _0xc5adx9[_0x9cb5[22]](200)})[_0x9cb5[12]](function(_0xc5adxa){return handleError(_0xc5adx9,_0xc5adxa)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/report/sms -> index + * POST /api/report/sms -> create + * GET /api/report/sms/:id -> show + * PUT /api/report/sms/:id -> update + * DELETE /api/report/sms/:id -> destroy + */ + +'use strict'; +var _ = require('lodash'); +var ReportSms = require('../../models').ReportSms; +var SmsRoom = require('../../models').SmsRoom; +var sequelize = require('../../models').sequelize; +var Agent = require('../../models').User; +var Util = require('../../config/util'); +var moment = require('moment'); + + + +function handleError(res, err) { + return res.status(500).send(err); +} + +// Gets a list of ReportSmss + + + +exports.index = function(req, res) { + return ReportSms + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + + +// Get a single reportSMS +exports.accept = function(req, res) { + var _agent; + var _roomid = req.params.uniqueid.split('.')[1]; + + return Agent + .findById(req.user.id, { + attributes: ['id', 'smsCapacity'] + }) + .then(function(agent) { + _agent = agent; + return agent + .getSmsRooms({ + where: { + status: { + $ne: 'CLOSED' + }, + id: { + $ne: _roomid + } + }, + attributes: ['id'] + }); + }) + .then(function(smsRooms) { + return ReportSms + .findById(req.params.id); + }) + .then(function(reportSms) { + if (!reportSms) { + return res.sendStatus(404); + } + + var updated = _.merge(reportSms, { + connectid: req.params.uniqueid + }); + + return updated + .save(); + }) + .then(function() { + return SmsRoom + .update({ + status: 'OPEN', + openReason: 'agent' + }, { + where: { + id: _roomid + }, + user: req.user, + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return res.sendStatus(504); + }) + .catch(function(err) { + return handleError(res, err); + }); + +}; + +// Get a single reportMail +exports.reject = function(req, res) { + return ReportSms + .findById(req.params.id) + .then(function(reportSms) { + if (!reportSms) { + return res.sendStatus(404); + } + var updated = _.merge(reportSms, { + rejectedAt: moment().format("YYYY-MM-DD HH:mm:ss") + }); + return updated + .save(); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Creates a new ReportSms in the DB +// exports.create = function(req, res) { +// return ReportSms +// .create(req.body) +// .then(function(reportSms) { +// return res.status(201).send(reportSms); +// }) +// .catch(function(err) { +// return handleError(res, err); +// }); +// } + +// Updates an existing ReportSms in the DB +// exports.update = function(req, res) { +// if (req.body._id) { +// delete req.body._id; +// } +// return ReportSms +// .findById(req.params.id) +// .then(function(reportSms) { +// if (!reportSms) { +// return res.sendStatus(404); +// } +// var updated = _.merge(reportSms, req.body); +// return updated +// .save(); +// }) +// .then(function(reportSms) { +// return res.status(200).send(reportSms); +// }) +// .catch(function(err) { +// return handleError(res, err); +// }); +// } +// +// Deletes a ReportSms from the DB +// exports.destroy = function(req, res) { +// return ReportSms +// .findById(req.params.id) +// .then(function(reportSms) { +// if (!reportSms) { +// return res.sendStatus(404); +// } +// return reportSms +// .destroy(); +// }) +// .then(function() { +// return res.sendStatus(204); +// }) +// .catch(function(err) { +// return handleError(res, err); +// }); +// } diff --git a/server/api/report_sms/report_sms.events.js b/server/api/report_sms/report_sms.events.js index 4606c4d..85c8624 100644 --- a/server/api/report_sms/report_sms.events.js +++ b/server/api/report_sms/report_sms.events.js @@ -1 +1,36 @@ -var _0x5aa6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x53\x6D\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x5aa6[0];const EventEmitter=require(_0x5aa6[1]);const ReportSms=require(_0x5aa6[3])[_0x5aa6[2]];var ReportSmsEvents= new EventEmitter();ReportSmsEvents[_0x5aa6[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x5aa6[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x5aa6[6],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x5aa6[7]};for(var e in events){var event=events[e];ReportSms[_0x5aa6[8]](e,emitEvent(event))};function emitEvent(event){return function(_0x993bx8,_0x993bx9,_0x993bxa){ReportSmsEvents[_0x5aa6[11]](event+ _0x5aa6[9]+ _0x993bx8[_0x5aa6[10]],_0x993bx8);ReportSmsEvents[_0x5aa6[11]](event,_0x993bx8);_0x993bxa(null)}}module[_0x5aa6[12]]= ReportSmsEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportSms = require('../../models').ReportSms; + +var ReportSmsEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportSmsEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'update', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportSms.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportSmsEvents.emit(event + ':' + doc._id, doc); + ReportSmsEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportSmsEvents; diff --git a/server/api/report_sms/report_sms.socket.js b/server/api/report_sms/report_sms.socket.js index edc5765..f63cd11 100644 --- a/server/api/report_sms/report_sms.socket.js +++ b/server/api/report_sms/report_sms.socket.js @@ -1 +1,46 @@ -var _0x7061=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x3A\x73\x61\x76\x65","\x6E\x61\x6D\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x3A\x75\x70\x64\x61\x74\x65","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x7061[0];const ReportSmsEvents=require(_0x7061[1]);var events=[_0x7061[2],_0x7061[3],_0x7061[4]];exports[_0x7061[5]]= function(_0xd21fx3){for(var _0xd21fx4=0,_0xd21fx5=events[_0x7061[6]];_0xd21fx4< _0xd21fx5;_0xd21fx4++){var _0xd21fx6=events[_0xd21fx4];var _0xd21fx7=createListener(_0x7061[7]+ _0xd21fx6,_0xd21fx3);ReportSmsEvents[_0x7061[8]](_0xd21fx6,_0xd21fx7);_0xd21fx3[_0x7061[8]](_0x7061[9],removeListener(_0xd21fx6,_0xd21fx7))}};function createListener(_0xd21fx6,_0xd21fx3){return function(_0xd21fx9){switch(_0xd21fx6){case _0x7061[10]:;case _0x7061[16]:if(_0xd21fx3[_0x7061[11]]=== _0xd21fx9[_0x7061[12]]|| _0xd21fx3[_0x7061[13]]=== _0x7061[14]){_0xd21fx3[_0x7061[15]](_0xd21fx6,_0xd21fx9)};break;case _0x7061[17]:_0xd21fx3[_0x7061[15]](_0xd21fx6,_0xd21fx9);break;default:}}}function removeListener(_0xd21fx6,_0xd21fx7){return function(){ReportSmsEvents[_0x7061[18]](_0xd21fx6,_0xd21fx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ReportSmsEvents = require('./report_sms.events'); + +// Model events to emit +var events = ['save', 'update', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_sms:' + event, socket); + + ReportSmsEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'report_sms:save': + case 'report_sms:update': + if (socket.name === doc.membername || socket.role === 'admin') { + socket.emit(event, doc); + } + break; + + case 'report_sms:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportSmsEvents.removeListener(event, listener); + }; +} diff --git a/server/api/report_sms_session/index.js b/server/api/report_sms_session/index.js index 8d863a1..eba420d 100644 --- a/server/api/report_sms_session/index.js +++ b/server/api/report_sms_session/index.js @@ -1 +1,16 @@ -var _0x9063=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x53\x6D\x73","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x74\x69\x6D\x65\x6F\x75\x74","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x74\x69\x6D\x65\x6F\x75\x74","\x2F\x77\x61\x69\x74\x69\x6E\x67","\x77\x61\x69\x74\x69\x6E\x67","\x2F\x77\x61\x69\x74\x69\x6E\x67\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x61\x67\x65\x6E\x74","\x77\x61\x69\x74\x69\x6E\x67\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0x9063[0];var express=require(_0x9063[1]);var controller=require(_0x9063[2]);var auth=require(_0x9063[3]);var license=require(_0x9063[4]);var router=express.Router();router[_0x9063[11]](_0x9063[5],auth[_0x9063[6]](),license[_0x9063[7]](),auth[_0x9063[9]]([17],[_0x9063[8]]),controller[_0x9063[10]]);router[_0x9063[11]](_0x9063[12],auth[_0x9063[6]](),license[_0x9063[7]](),auth[_0x9063[9]]([17],[_0x9063[8]]),controller[_0x9063[13]]);router[_0x9063[11]](_0x9063[14],license[_0x9063[15]](),auth[_0x9063[6]](),license[_0x9063[7]](),auth[_0x9063[9]]([17],[_0x9063[8]]),controller[_0x9063[16]]);router[_0x9063[11]](_0x9063[17],license[_0x9063[15]](),auth[_0x9063[6]](),license[_0x9063[7]](),auth[_0x9063[9]]([17],[_0x9063[8]]),controller[_0x9063[18]]);router[_0x9063[11]](_0x9063[19],auth[_0x9063[6]](),license[_0x9063[7]](),auth[_0x9063[9]]([11],[_0x9063[8],_0x9063[20]]),controller[_0x9063[21]]);module[_0x9063[22]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_sms_session.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasSms(), auth.hasModule([17], ['admin']), controller.index); +router.get('/describe', auth.isAuthenticated(), license.hasSms(), auth.hasModule([17], ['admin']), controller.describe); +router.get('/timeout', license.isValidDate(), auth.isAuthenticated(), license.hasSms(), auth.hasModule([17], ['admin']), controller.timeout); +router.get('/waiting', license.isValidDate(), auth.isAuthenticated(), license.hasSms(), auth.hasModule([17], ['admin']), controller.waiting); +router.get('/waiting/applications', auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin', 'agent']), controller.waitingApplications); + +module.exports = router; diff --git a/server/api/report_sms_session/report_sms_session.controller.js b/server/api/report_sms_session/report_sms_session.controller.js index 9f40547..0b240ac 100644 --- a/server/api/report_sms_session/report_sms_session.controller.js +++ b/server/api/report_sms_session/report_sms_session.controller.js @@ -1 +1,155 @@ -var _0xa090=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x53\x6D\x73\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x53\x6D\x73\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x55\x73\x65\x72","\x62\x6C\x75\x65\x62\x69\x72\x64","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x69\x64","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x6F\x77\x73","\x67\x65\x74\x53\x6D\x73\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x67\x65\x74\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65","\x74\x69\x6D\x65\x6F\x75\x74","\x6C\x6F\x67","\x6D\x65\x72\x67\x65","\x63\x6F\x75\x6E\x74","\x61\x6C\x6C","\x77\x61\x69\x74\x69\x6E\x67","\x77\x61\x69\x74\x69\x6E\x67\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x66\x69\x6E\x64\x41\x6C\x6C"];_0xa090[0];var _=require(_0xa090[1]);var ReportSmsSession=require(_0xa090[3])[_0xa090[2]];var ReportSmsSessionHistory=require(_0xa090[3])[_0xa090[5]][_0xa090[4]];var Util=require(_0xa090[6]);var User=require(_0xa090[3])[_0xa090[7]];var Promise=require(_0xa090[8]);exports[_0xa090[9]]= function(_0x79bbx7,_0x79bbx8,_0x79bbx9){return ReportSmsSession[_0xa090[16]](Util[_0xa090[15]](_0x79bbx7[_0xa090[14]]))[_0xa090[13]](function(_0x79bbxb){_0x79bbx8[_0xa090[12]](200)[_0xa090[11]](_0x79bbxb)})[_0xa090[10]](function(_0x79bbxa){return handleError(_0x79bbx8,_0x79bbxa)})};exports[_0xa090[17]]= function(_0x79bbx7,_0x79bbx8){return ReportSmsSessionHistory[_0xa090[17]]()[_0xa090[13]](function(_0x79bbxc){return _0x79bbx8[_0xa090[12]](200)[_0xa090[11]](_0x79bbxc)})[_0xa090[10]](function(_0x79bbxa){return handleError(_0x79bbx8,_0x79bbxa)})};function getSmsQueues(_0x79bbxe){return function(){switch(_0x79bbxe[_0xa090[28]]){case _0xa090[25]:return User[_0xa090[24]](_0x79bbxe[_0xa090[18]],{attributes:[_0xa090[18]]})[_0xa090[13]](Util[_0xa090[23]]({},{attributes:[_0xa090[18]],include:[{raw:true,model:User,attributes:[_0xa090[18]]}]}))[_0xa090[13]](function(_0x79bbxf){var _0x79bbx10=[];_0x79bbxf[_0xa090[22]][_0xa090[21]](function(_0x79bbx11){_0x79bbx10= _[_0xa090[20]](_0x79bbx10,_[_0xa090[19]](_0x79bbx11.Users,_0xa090[18]))});return {$or:{queue:_[_0xa090[19]](_0x79bbxf[_0xa090[22]],_0xa090[18]),memberid:_0x79bbx10}}});case _0xa090[27]:return User[_0xa090[24]](_0x79bbxe[_0xa090[18]],{attributes:[_0xa090[18]]})[_0xa090[13]](function(_0x79bbx12){return _0x79bbx12[_0xa090[26]]({attributes:[_0xa090[18]]})})[_0xa090[13]](function(_0x79bbxf){return {$or:{queue:_[_0xa090[19]](_0x79bbxf,_0xa090[18]),memberid:_0x79bbxe[_0xa090[18]]}}});default:return {}}}}exports[_0xa090[29]]= function(_0x79bbx7,_0x79bbx8){return Promise[_0xa090[33]]([])[_0xa090[13]](getSmsQueues(_0x79bbx7[_0xa090[25]]))[_0xa090[13]](function(_0x79bbx14){return ReportSmsSession[_0xa090[32]](Util[_0xa090[15]](_0x79bbx7[_0xa090[14]],_[_0xa090[31]]({timeout:true},_0x79bbx14)))})[_0xa090[13]](function(_0x79bbx13){return _0x79bbx8[_0xa090[12]](200)[_0xa090[11]]({value:_0x79bbx13})})[_0xa090[10]](function(_0x79bbxa){console[_0xa090[30]](_0x79bbxa);return handleError(_0x79bbx8,_0x79bbxa)})};exports[_0xa090[34]]= function(_0x79bbx7,_0x79bbx8){return Promise[_0xa090[33]]([])[_0xa090[13]](getSmsQueues(_0x79bbx7[_0xa090[25]]))[_0xa090[13]](function(_0x79bbx14){return ReportSmsSession[_0xa090[32]](Util[_0xa090[15]](_0x79bbx7[_0xa090[14]],_[_0xa090[31]]({leaveAt:null},_0x79bbx14)))})[_0xa090[13]](function(_0x79bbx13){return _0x79bbx8[_0xa090[12]](200)[_0xa090[11]]({value:_0x79bbx13})})[_0xa090[10]](function(_0x79bbxa){console[_0xa090[30]](_0x79bbxa);return handleError(_0x79bbx8,_0x79bbxa)})};exports[_0xa090[35]]= function(_0x79bbx7,_0x79bbx8){return Promise[_0xa090[33]]([])[_0xa090[13]](getSmsQueues(_0x79bbx7[_0xa090[25]]))[_0xa090[13]](function(_0x79bbx14){return ReportSmsSession[_0xa090[36]](Util[_0xa090[15]](_0x79bbx7[_0xa090[14]],_[_0xa090[31]]({leaveAt:null},_0x79bbx14)))})[_0xa090[13]](function(_0x79bbx13){return _0x79bbx8[_0xa090[12]](200)[_0xa090[11]]({rows:_0x79bbx13})})[_0xa090[10]](function(_0x79bbxa){console[_0xa090[30]](_0x79bbxa);return handleError(_0x79bbx8,_0x79bbxa)})};function handleError(_0x79bbx8,_0x79bbxa){return _0x79bbx8[_0xa090[12]](500)[_0xa090[11]](_0x79bbxa)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var ReportSmsSession = require('../../models').ReportSmsSession; +var ReportSmsSessionHistory = require('../../models').history.ReportSmsSessionHistory; + +var Util = require('../../config/util'); +var User = require('../../models').User; +var Promise = require('bluebird'); + +// Get list of agents +exports.index = function(req, res, next) { + return ReportSmsSession + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get list of fields +exports.describe = function(req, res) { + return ReportSmsSessionHistory + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function getSmsQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(Util.getSmsQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + $or: { + queue: _.map(userQueues.rows, 'id'), + memberid: users + } + }; + }); + case 'agent': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getSmsQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + $or: { + queue: _.map(userQueues, 'id'), + memberid: user.id + } + }; + }); + default: + return {}; + } + } +} + +// Get timeout apps +exports.timeout = function(req, res) { + return Promise + .all([]) + .then(getSmsQueues(req.user)) + .then(function(condition) { + return ReportSmsSession + .count(Util.getQuery(req.query, _.merge({ + timeout: true + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get waiting apps +exports.waiting = function(req, res) { + return Promise + .all([]) + .then(getSmsQueues(req.user)) + .then(function(condition) { + return ReportSmsSession + .count(Util.getQuery(req.query, _.merge({ + leaveAt: null + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.waitingApplications = function(req, res) { + return Promise + .all([]) + .then(getSmsQueues(req.user)) + .then(function(condition) { + return ReportSmsSession + .findAll(Util.getQuery(req.query, _.merge({ + leaveAt: null + }, condition))); + }) + .then(function(data) { + return res.status(200).send({ + rows: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/report_sms_session/report_sms_session.events.js b/server/api/report_sms_session/report_sms_session.events.js index cb1e595..6617408 100644 --- a/server/api/report_sms_session/report_sms_session.events.js +++ b/server/api/report_sms_session/report_sms_session.events.js @@ -1 +1,36 @@ -var _0x95b5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x53\x6D\x73\x53\x65\x73\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x95b5[0];const EventEmitter=require(_0x95b5[1]);const ReportSmsSession=require(_0x95b5[3])[_0x95b5[2]];var ReportSmsSessionEvents= new EventEmitter();ReportSmsSessionEvents[_0x95b5[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x95b5[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x95b5[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x95b5[6]};for(var e in events){var event=events[e];ReportSmsSession[_0x95b5[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x5a15x8,_0x5a15x9,_0x5a15xa){ReportSmsSessionEvents[_0x95b5[10]](event+ _0x95b5[8]+ _0x5a15x8[_0x95b5[9]],_0x5a15x8);ReportSmsSessionEvents[_0x95b5[10]](event,_0x5a15x8);_0x5a15xa(null)}}module[_0x95b5[11]]= ReportSmsSessionEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportSmsSession = require('../../models').ReportSmsSession; + +var ReportSmsSessionEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportSmsSessionEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportSmsSession.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportSmsSessionEvents.emit(event + ':' + doc._id, doc); + ReportSmsSessionEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportSmsSessionEvents; diff --git a/server/api/report_sms_session/report_sms_session.socket.js b/server/api/report_sms_session/report_sms_session.socket.js index 563a9c5..ef20c19 100644 --- a/server/api/report_sms_session/report_sms_session.socket.js +++ b/server/api/report_sms_session/report_sms_session.socket.js @@ -1 +1,104 @@ -var _0x8248=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6C\x6F\x64\x61\x73\x68","\x62\x6C\x75\x65\x62\x69\x72\x64","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x45\x72\x72\x6F\x72\x20\x66\x69\x6C\x74\x65\x72\x69\x6E\x67\x20\x72\x65\x70\x6F\x72\x74\x20\x73\x6D\x73\x20\x73\x65\x73\x73\x69\x6F\x6E\x73\x20\x61\x66\x74\x65\x72\x20\x73\x61\x76\x65","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x72\x6F\x6C\x65","\x61\x64\x6D\x69\x6E","\x6D\x65\x6D\x62\x65\x72\x69\x64","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x71\x75\x65\x75\x65","\x65\x6D\x69\x74","\x74\x68\x65\x6E","\x61\x6C\x6C","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A\x73\x61\x76\x65","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x73\x65\x73\x73\x69\x6F\x6E\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x69\x64","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x6F\x77\x73","\x67\x65\x74\x53\x6D\x73\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x75\x73\x65\x72\x49\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x67\x65\x74\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x61\x67\x65\x6E\x74"];_0x8248[0];const ReportSmsSessionEvents=require(_0x8248[1]);const User=require(_0x8248[3])[_0x8248[2]];const Util=require(_0x8248[4]);const _=require(_0x8248[5]);const Promise=require(_0x8248[6]);var events=[_0x8248[7],_0x8248[8]];exports[_0x8248[9]]= function(_0x2733x7){for(var _0x2733x8=0,_0x2733x9=events[_0x8248[10]];_0x2733x8< _0x2733x9;_0x2733x8++){var _0x2733xa=events[_0x2733x8];var _0x2733xb=createListener(_0x8248[11]+ _0x2733xa,_0x2733x7);ReportSmsSessionEvents[_0x8248[12]](_0x2733xa,_0x2733xb);_0x2733x7[_0x8248[12]](_0x8248[13],removeListener(_0x2733xa,_0x2733xb))}};function createListener(_0x2733xa,_0x2733x7){return function(_0x2733xd){switch(_0x2733xa){case _0x8248[25]:return Promise[_0x8248[24]]([])[_0x8248[23]](getSmsQueues(_0x2733x7))[_0x8248[23]](function(_0x2733xf){if(_0x2733x7[_0x8248[17]]=== _0x8248[18]|| _[_0x8248[20]](_0x2733xf[_0x8248[19]],_0x2733xd[_0x8248[19]])|| _[_0x8248[20]](_0x2733xf[_0x8248[21]],_0x2733xd[_0x8248[21]])){_0x2733x7[_0x8248[22]](_0x2733xa,_0x2733xd)}})[_0x8248[16]](function(_0x2733xe){console[_0x8248[15]](_0x8248[14],_0x2733xe)});case _0x8248[26]:_0x2733x7[_0x8248[22]](_0x2733xa,_0x2733xd);break;default:}}}function removeListener(_0x2733xa,_0x2733xb){return function(){ReportSmsSessionEvents[_0x8248[27]](_0x2733xa,_0x2733xb)}}function getSmsQueues(_0x2733x12){return function(){switch(_0x2733x12[_0x8248[17]]){case _0x8248[36]:return User[_0x8248[35]](_0x2733x12[_0x8248[34]],{attributes:[_0x8248[28]]})[_0x8248[23]](Util[_0x8248[33]]({},{attributes:[_0x8248[28]],include:[{raw:true,model:User,attributes:[_0x8248[28]]}]}))[_0x8248[23]](function(_0x2733x13){var _0x2733x14=[];_0x2733x13[_0x8248[32]][_0x8248[31]](function(_0x2733x15){_0x2733x14= _[_0x8248[30]](_0x2733x14,_[_0x8248[29]](_0x2733x15.Users,_0x8248[28]))});return {queue:_[_0x8248[29]](_0x2733x13[_0x8248[32]],_0x8248[28]),memberid:_0x2733x14}});case _0x8248[38]:return User[_0x8248[35]](_0x2733x12[_0x8248[34]],{attributes:[_0x8248[28]]})[_0x8248[23]](function(_0x2733x16){return _0x2733x16[_0x8248[37]]({attributes:[_0x8248[28]]})})[_0x8248[23]](function(_0x2733x13){return {queue:_[_0x8248[29]](_0x2733x13,_0x8248[28]),memberid:_0x2733x12[_0x8248[34]]}});default:return {}}}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ReportSmsSessionEvents = require('./report_sms_session.events'); +const User = require('../../models').User; +const Util = require('../../config/util'); +const _ = require('lodash'); +const Promise = require('bluebird'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_sms_session:' + event, socket); + + ReportSmsSessionEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'report_sms_session:save': + return Promise + .all([]) + .then(getSmsQueues(socket)) + .then(function(condition) { + if (socket.role === 'admin' || _.includes(condition.memberid, doc.memberid) || _.includes(condition.queue, doc.queue)) { + socket.emit(event, doc); + } + }) + .catch(function(err) { + console.log('Error filtering report sms sessions after save', err); + }); + case 'report_sms_session:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportSmsSessionEvents.removeListener(event, listener); + }; +} + +function getSmsQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.userId, { + attributes: ['id'] + }) + .then(Util.getSmsQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + queue: _.map(userQueues.rows, 'id'), + memberid: users + }; + }); + case 'agent': + return User + .findById(user.userId, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getSmsQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + queue: _.map(userQueues, 'id'), + memberid: user.userId + }; + }); + default: + return {}; + } + } +} diff --git a/server/api/report_square/index.js b/server/api/report_square/index.js index 2f423dc..ecde7a2 100644 --- a/server/api/report_square/index.js +++ b/server/api/report_square/index.js @@ -1 +1,14 @@ -var _0x6994=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65","\x72\x65\x61\x6C\x74\x69\x6D\x65","\x2F\x73\x68\x6F\x77","\x61\x67\x65\x6E\x74","\x73\x68\x6F\x77","\x65\x78\x70\x6F\x72\x74\x73"];_0x6994[0];var express=require(_0x6994[1]);var controller=require(_0x6994[2]);var auth=require(_0x6994[3]);var router=express.Router();router[_0x6994[9]](_0x6994[4],auth[_0x6994[5]](),auth[_0x6994[7]]([14],[_0x6994[6]]),controller[_0x6994[8]]);router[_0x6994[9]](_0x6994[10],auth[_0x6994[5]](),auth[_0x6994[7]]([14],[_0x6994[6]]),controller[_0x6994[11]]);router[_0x6994[9]](_0x6994[12],auth[_0x6994[5]](),auth[_0x6994[7]]([14],[_0x6994[6]]),controller[_0x6994[13]]);router[_0x6994[9]](_0x6994[14],auth[_0x6994[5]](),auth[_0x6994[7]]([14],[_0x6994[6],_0x6994[15]]),controller[_0x6994[16]]);module[_0x6994[17]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_square.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.index); +router.get('/describe', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.describe); +router.get('/realtime', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.realtime); +router.get('/show', auth.isAuthenticated(), auth.hasModule([14], ['admin', 'agent']), controller.show); + +module.exports = router; diff --git a/server/api/report_square/report_square.controller.js b/server/api/report_square/report_square.controller.js index 0cad02e..b32d3b6 100644 --- a/server/api/report_square/report_square.controller.js +++ b/server/api/report_square/report_square.controller.js @@ -1 +1,72 @@ -var _0x1c70=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x72\x65\x61\x6C\x74\x69\x6D\x65","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x75\x6E\x69\x71\x75\x65\x69\x64","\x66\x69\x6E\x64\x4F\x6E\x65"];_0x1c70[0];var _=require(_0x1c70[1]);var ReportSquare=require(_0x1c70[3])[_0x1c70[2]];var ReportSquareHistory=require(_0x1c70[3])[_0x1c70[5]][_0x1c70[4]];var Util=require(_0x1c70[6]);exports[_0x1c70[7]]= function(_0x376ax5,_0x376ax6,_0x376ax7){return generalIndex(_0x376ax5,_0x376ax6,_0x376ax7)};exports[_0x1c70[8]]= function(_0x376ax5,_0x376ax6,_0x376ax7){return generalIndex(_0x376ax5,_0x376ax6,_0x376ax7,{leaveAt:null})};function generalIndex(_0x376ax5,_0x376ax6,_0x376ax7,_0x376ax9){return ReportSquare[_0x1c70[15]](Util[_0x1c70[14]](_0x376ax5[_0x1c70[13]],_0x376ax9|| {}))[_0x1c70[12]](function(_0x376axb){return _0x376ax6[_0x1c70[11]](200)[_0x1c70[10]](_0x376axb)})[_0x1c70[9]](function(_0x376axa){return handleError(_0x376ax6,_0x376axa)})}exports[_0x1c70[16]]= function(_0x376ax5,_0x376ax6){return ReportSquareHistory[_0x1c70[16]]()[_0x1c70[12]](function(_0x376axc){return _0x376ax6[_0x1c70[11]](200)[_0x1c70[10]](_0x376axc)})[_0x1c70[9]](function(_0x376axa){return handleError(_0x376ax6,_0x376axa)})};exports[_0x1c70[17]]= function(_0x376ax5,_0x376ax6){return ReportSquare[_0x1c70[20]]({where:{uniqueid:_0x376ax5[_0x1c70[13]][_0x1c70[19]]}})[_0x1c70[12]](function(_0x376axd){if(_0x376axd){return _0x376axd};return ReportSquareHistory[_0x1c70[20]]({where:{uniqueid:_0x376ax5[_0x1c70[13]][_0x1c70[19]]}})})[_0x1c70[12]](function(_0x376axd){if(!_0x376axd){return _0x376ax6[_0x1c70[18]](404)};return _0x376ax6[_0x1c70[11]](200)[_0x1c70[10]](_0x376axd)})[_0x1c70[9]](function(_0x376axa){return handleError(_0x376ax6,_0x376axa)})};function handleError(_0x376ax6,_0x376axa){return _0x376ax6[_0x1c70[11]](500)[_0x1c70[10]](_0x376axa)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var ReportSquare = require('../../models').ReportSquare; +var ReportSquareHistory = require('../../models').history.ReportSquareHistory; +var Util = require('../../config/util'); + +// Get list of report_square +exports.index = function(req, res, next) { + return generalIndex(req, res, next); +}; + +exports.realtime = function(req, res, next) { + return generalIndex(req, res, next, { + leaveAt: null + }); +}; + +function generalIndex(req, res, next, extraWhere) { + return ReportSquare + .findAndCountAll(Util.getQuery(req.query, extraWhere || {})) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Get list of fields +exports.describe = function(req, res) { + return ReportSquareHistory + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +exports.show = function(req, res) { + return ReportSquare + .findOne({ + where: { + uniqueid: req.query.uniqueid + } + }) + .then(function(report) { + if (report) { + return report; + } + return ReportSquareHistory + .findOne({ + where: { + uniqueid: req.query.uniqueid + } + }) + }) + .then(function(report) { + if (!report) { + return res.sendStatus(404); + } + return res.status(200).send(report); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/report_square/report_square.events.js b/server/api/report_square/report_square.events.js index d829266..6dd24aa 100644 --- a/server/api/report_square/report_square.events.js +++ b/server/api/report_square/report_square.events.js @@ -1 +1,36 @@ -var _0xebff=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xebff[0];const EventEmitter=require(_0xebff[1]);const ReportSquare=require(_0xebff[3])[_0xebff[2]];var ReportSquareEvents= new EventEmitter();ReportSquareEvents[_0xebff[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xebff[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xebff[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xebff[6]};for(var e in events){var event=events[e];ReportSquare[_0xebff[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x80b7x8,_0x80b7x9,_0x80b7xa){ReportSquareEvents[_0xebff[10]](event+ _0xebff[8]+ _0x80b7x8[_0xebff[9]],_0x80b7x8);ReportSquareEvents[_0xebff[10]](event,_0x80b7x8);_0x80b7xa(null)}}module[_0xebff[11]]= ReportSquareEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportSquare = require('../../models').ReportSquare; + +var ReportSquareEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportSquareEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportSquare.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportSquareEvents.emit(event + ':' + doc._id, doc); + ReportSquareEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportSquareEvents; diff --git a/server/api/report_square/report_square.socket.js b/server/api/report_square/report_square.socket.js index abafcd7..c919775 100644 --- a/server/api/report_square/report_square.socket.js +++ b/server/api/report_square/report_square.socket.js @@ -1 +1,44 @@ -var _0x741b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x72\x6F\x6C\x65","\x61\x67\x65\x6E\x74","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x3A\x73\x61\x76\x65","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x741b[0];const ReportSquareEvents=require(_0x741b[1]);var events=[_0x741b[2],_0x741b[3]];exports[_0x741b[4]]= function(_0xc3a9x3){for(var _0xc3a9x4=0,_0xc3a9x5=events[_0x741b[5]];_0xc3a9x4< _0xc3a9x5;_0xc3a9x4++){var _0xc3a9x6=events[_0xc3a9x4];var _0xc3a9x7=createListener(_0x741b[6]+ _0xc3a9x6,_0xc3a9x3);ReportSquareEvents[_0x741b[7]](_0xc3a9x6,_0xc3a9x7);_0xc3a9x3[_0x741b[7]](_0x741b[8],removeListener(_0xc3a9x6,_0xc3a9x7))}};function createListener(_0xc3a9x6,_0xc3a9x3){return function(_0xc3a9x9){switch(_0xc3a9x6){case _0x741b[12]:if(_0xc3a9x3[_0x741b[9]]!== _0x741b[10]){_0xc3a9x3[_0x741b[11]](_0xc3a9x6,_0xc3a9x9)};break;case _0x741b[13]:_0xc3a9x3[_0x741b[11]](_0xc3a9x6,_0xc3a9x9);break;default:}}}function removeListener(_0xc3a9x6,_0xc3a9x7){return function(){ReportSquareEvents[_0x741b[14]](_0xc3a9x6,_0xc3a9x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ReportSquareEvents = require('./report_square.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_square:' + event, socket); + + ReportSquareEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'report_square:save': + if (socket.role !== 'agent') { + socket.emit(event, doc); + } + break; + case 'report_square:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportSquareEvents.removeListener(event, listener); + }; +} diff --git a/server/api/report_square_detail/index.js b/server/api/report_square_detail/index.js index 6ef8f8f..58f916c 100644 --- a/server/api/report_square_detail/index.js +++ b/server/api/report_square_detail/index.js @@ -1 +1,13 @@ -var _0x4475=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x64\x65\x74\x61\x69\x6C\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65","\x72\x65\x61\x6C\x74\x69\x6D\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x4475[0];var express=require(_0x4475[1]);var controller=require(_0x4475[2]);var auth=require(_0x4475[3]);var router=express.Router();router[_0x4475[9]](_0x4475[4],auth[_0x4475[5]](),auth[_0x4475[7]]([14],[_0x4475[6]]),controller[_0x4475[8]]);router[_0x4475[9]](_0x4475[10],auth[_0x4475[5]](),auth[_0x4475[7]]([14],[_0x4475[6]]),controller[_0x4475[11]]);router[_0x4475[9]](_0x4475[12],auth[_0x4475[5]](),auth[_0x4475[7]]([14],[_0x4475[6]]),controller[_0x4475[13]]);module[_0x4475[14]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_square_detail.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.index); +router.get('/describe', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.describe); +router.get('/realtime', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.realtime); + +module.exports = router; diff --git a/server/api/report_square_detail/report_square_detail.controller.js b/server/api/report_square_detail/report_square_detail.controller.js index 3f5d12a..c903f0f 100644 --- a/server/api/report_square_detail/report_square_detail.controller.js +++ b/server/api/report_square_detail/report_square_detail.controller.js @@ -1 +1,44 @@ -var _0xf15b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65\x44\x65\x74\x61\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65\x44\x65\x74\x61\x69\x6C\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x72\x65\x61\x6C\x74\x69\x6D\x65","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65"];_0xf15b[0];var _=require(_0xf15b[1]);var ReportSquareDetail=require(_0xf15b[3])[_0xf15b[2]];var ReportSquareDetailHistory=require(_0xf15b[3])[_0xf15b[5]][_0xf15b[4]];var Util=require(_0xf15b[6]);exports[_0xf15b[7]]= function(_0x98bbx5,_0x98bbx6,_0x98bbx7){return generalIndex(_0x98bbx5,_0x98bbx6,_0x98bbx7)};exports[_0xf15b[8]]= function(_0x98bbx5,_0x98bbx6,_0x98bbx7){return generalIndex(_0x98bbx5,_0x98bbx6,_0x98bbx7,{leaveAt:null})};function generalIndex(_0x98bbx5,_0x98bbx6,_0x98bbx7,_0x98bbx9){return ReportSquareDetail[_0xf15b[15]](Util[_0xf15b[14]](_0x98bbx5[_0xf15b[13]],_0x98bbx9|| {}))[_0xf15b[12]](function(_0x98bbxb){return _0x98bbx6[_0xf15b[11]](200)[_0xf15b[10]](_0x98bbxb)})[_0xf15b[9]](function(_0x98bbxa){return handleError(_0x98bbx6,_0x98bbxa)})}exports[_0xf15b[16]]= function(_0x98bbx5,_0x98bbx6){return ReportSquareDetailHistory[_0xf15b[16]]()[_0xf15b[12]](function(_0x98bbxc){return _0x98bbx6[_0xf15b[11]](200)[_0xf15b[10]](_0x98bbxc)})[_0xf15b[9]](function(_0x98bbxa){return handleError(_0x98bbx6,_0x98bbxa)})};function handleError(_0x98bbx6,_0x98bbxa){return _0x98bbx6[_0xf15b[11]](500)[_0xf15b[10]](_0x98bbxa)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var ReportSquareDetail = require('../../models').ReportSquareDetail; +var ReportSquareDetailHistory = require('../../models').history.ReportSquareDetailHistory; +var Util = require('../../config/util'); + +// Get list of report_square +exports.index = function(req, res, next) { + return generalIndex(req, res, next); +}; + +exports.realtime = function(req, res, next) { + return generalIndex(req, res, next, { + leaveAt: null + }); +}; + +function generalIndex(req, res, next, extraWhere) { + return ReportSquareDetail + .findAndCountAll(Util.getQuery(req.query, extraWhere || {})) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Get list of fields +exports.describe = function(req, res) { + return ReportSquareDetailHistory + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/report_square_detail/report_square_detail.events.js b/server/api/report_square_detail/report_square_detail.events.js index 49d4496..f5cbed4 100644 --- a/server/api/report_square_detail/report_square_detail.events.js +++ b/server/api/report_square_detail/report_square_detail.events.js @@ -1 +1,36 @@ -var _0x2d32=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65\x44\x65\x74\x61\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x2d32[0];const EventEmitter=require(_0x2d32[1]);const ReportSquareDetail=require(_0x2d32[3])[_0x2d32[2]];var ReportSquareDetailEvents= new EventEmitter();ReportSquareDetailEvents[_0x2d32[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x2d32[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x2d32[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x2d32[6]};for(var e in events){var event=events[e];ReportSquareDetail[_0x2d32[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x80fdx8,_0x80fdx9,_0x80fdxa){ReportSquareDetailEvents[_0x2d32[10]](event+ _0x2d32[8]+ _0x80fdx8[_0x2d32[9]],_0x80fdx8);ReportSquareDetailEvents[_0x2d32[10]](event,_0x80fdx8);_0x80fdxa(null)}}module[_0x2d32[11]]= ReportSquareDetailEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportSquareDetail = require('../../models').ReportSquareDetail; + +var ReportSquareDetailEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportSquareDetailEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportSquareDetail.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportSquareDetailEvents.emit(event + ':' + doc._id, doc); + ReportSquareDetailEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportSquareDetailEvents; diff --git a/server/api/report_square_detail/report_square_detail.socket.js b/server/api/report_square_detail/report_square_detail.socket.js index 398e0c4..ba3a758 100644 --- a/server/api/report_square_detail/report_square_detail.socket.js +++ b/server/api/report_square_detail/report_square_detail.socket.js @@ -1 +1,45 @@ -var _0xb360=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x64\x65\x74\x61\x69\x6C\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x64\x65\x74\x61\x69\x6C\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x72\x6F\x6C\x65","\x61\x67\x65\x6E\x74","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x64\x65\x74\x61\x69\x6C\x3A\x73\x61\x76\x65","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x64\x65\x74\x61\x69\x6C\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xb360[0];const ReportSquareDetailEvents=require(_0xb360[1]);var events=[_0xb360[2],_0xb360[3]];exports[_0xb360[4]]= function(_0xee07x3){for(var _0xee07x4=0,_0xee07x5=events[_0xb360[5]];_0xee07x4< _0xee07x5;_0xee07x4++){var _0xee07x6=events[_0xee07x4];var _0xee07x7=createListener(_0xb360[6]+ _0xee07x6,_0xee07x3);ReportSquareDetailEvents[_0xb360[7]](_0xee07x6,_0xee07x7);_0xee07x3[_0xb360[7]](_0xb360[8],removeListener(_0xee07x6,_0xee07x7))}};function createListener(_0xee07x6,_0xee07x3){return function(_0xee07x9){switch(_0xee07x6){case _0xb360[12]:if(_0xee07x3[_0xb360[9]]!== _0xb360[10]){_0xee07x3[_0xb360[11]](_0xee07x6,_0xee07x9)};break;case _0xb360[13]:_0xee07x3[_0xb360[11]](_0xee07x6,_0xee07x9);break;default:}}}function removeListener(_0xee07x6,_0xee07x7){return function(){ReportSquareDetailEvents[_0xb360[14]](_0xee07x6,_0xee07x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ReportSquareDetailEvents = require('./report_square_detail.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_square_detail:' + event, socket); + + ReportSquareDetailEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'report_square_detail:save': + if (socket.role !== 'agent') { + socket.emit(event, doc); + } + break; + + case 'report_square_detail:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportSquareDetailEvents.removeListener(event, listener); + }; +} diff --git a/server/api/report_tiger_dial/index.js b/server/api/report_tiger_dial/index.js index 488ab81..23cc1b0 100644 --- a/server/api/report_tiger_dial/index.js +++ b/server/api/report_tiger_dial/index.js @@ -1 +1,12 @@ -var _0x7d3e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x74\x69\x67\x65\x72\x5F\x64\x69\x61\x6C\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x7d3e[0];var express=require(_0x7d3e[1]);var controller=require(_0x7d3e[2]);var auth=require(_0x7d3e[3]);var router=express.Router();router[_0x7d3e[9]](_0x7d3e[4],auth[_0x7d3e[5]](),auth[_0x7d3e[7]]([16],[_0x7d3e[6]]),controller[_0x7d3e[8]]);router[_0x7d3e[9]](_0x7d3e[10],auth[_0x7d3e[5]](),auth[_0x7d3e[7]]([16],[_0x7d3e[6]]),controller[_0x7d3e[11]]);module[_0x7d3e[12]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_tiger_dial.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([16], ['admin']), controller.index); +router.get('/describe', auth.isAuthenticated(), auth.hasModule([16], ['admin']), controller.describe); + +module.exports = router; diff --git a/server/api/report_tiger_dial/report_tiger_dial.controller.js b/server/api/report_tiger_dial/report_tiger_dial.controller.js index 435613c..848ba0e 100644 --- a/server/api/report_tiger_dial/report_tiger_dial.controller.js +++ b/server/api/report_tiger_dial/report_tiger_dial.controller.js @@ -1 +1,39 @@ -var _0xb877=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x54\x69\x67\x65\x72\x44\x69\x61\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65"];_0xb877[0];var _=require(_0xb877[1]);var ReportTigerDial=require(_0xb877[3])[_0xb877[2]];var Util=require(_0xb877[4]);exports[_0xb877[5]]= function(_0x4e34x4,_0x4e34x5,_0x4e34x6){return generalIndex(_0x4e34x4,_0x4e34x5,_0x4e34x6)};function generalIndex(_0x4e34x4,_0x4e34x5,_0x4e34x6,_0x4e34x8){return ReportTigerDial[_0xb877[12]](Util[_0xb877[11]](_0x4e34x4[_0xb877[10]],_0x4e34x8|| {}))[_0xb877[9]](function(_0x4e34xa){return _0x4e34x5[_0xb877[8]](200)[_0xb877[7]](_0x4e34xa)})[_0xb877[6]](function(_0x4e34x9){return handleError(_0x4e34x5,_0x4e34x9)})}exports[_0xb877[13]]= function(_0x4e34x4,_0x4e34x5){return ReportTigerDial[_0xb877[13]]()[_0xb877[9]](function(_0x4e34xb){return _0x4e34x5[_0xb877[8]](200)[_0xb877[7]](_0x4e34xb)})[_0xb877[6]](function(_0x4e34x9){return handleError(_0x4e34x5,_0x4e34x9)})};function handleError(_0x4e34x5,_0x4e34x9){return _0x4e34x5[_0xb877[8]](500)[_0xb877[7]](_0x4e34x9)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var ReportTigerDial = require('../../models').ReportTigerDial; +// var ReportTigerDialHistory = require('../../models').history.ReportTigerDialHistory; +var Util = require('../../config/util'); + +// Get list of report_tiger_dial +exports.index = function(req, res, next) { + return generalIndex(req, res, next); +}; + + +function generalIndex(req, res, next, extraWhere) { + return ReportTigerDial + .findAndCountAll(Util.getQuery(req.query, extraWhere || {})) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Get list of fields +exports.describe = function(req, res) { + return ReportTigerDial + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/report_tiger_dial/report_tiger_dial.events.js b/server/api/report_tiger_dial/report_tiger_dial.events.js index 22db940..dac1842 100644 --- a/server/api/report_tiger_dial/report_tiger_dial.events.js +++ b/server/api/report_tiger_dial/report_tiger_dial.events.js @@ -1 +1,36 @@ -var _0x8352=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x54\x69\x67\x65\x72\x44\x69\x61\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x8352[0];const EventEmitter=require(_0x8352[1]);const ReportTigerDial=require(_0x8352[3])[_0x8352[2]];var ReportTigerDialEvents= new EventEmitter();ReportTigerDialEvents[_0x8352[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x8352[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x8352[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x8352[6]};for(var e in events){var event=events[e];ReportTigerDial[_0x8352[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xde52x8,_0xde52x9,_0xde52xa){ReportTigerDialEvents[_0x8352[10]](event+ _0x8352[8]+ _0xde52x8[_0x8352[9]],_0xde52x8);ReportTigerDialEvents[_0x8352[10]](event,_0xde52x8);_0xde52xa(null)}}module[_0x8352[11]]= ReportTigerDialEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportTigerDial = require('../../models').ReportTigerDial; + +var ReportTigerDialEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportTigerDialEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportTigerDial.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportTigerDialEvents.emit(event + ':' + doc._id, doc); + ReportTigerDialEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportTigerDialEvents; diff --git a/server/api/report_tiger_dial/report_tiger_dial.socket.js b/server/api/report_tiger_dial/report_tiger_dial.socket.js index e96b71c..24b7f2f 100644 --- a/server/api/report_tiger_dial/report_tiger_dial.socket.js +++ b/server/api/report_tiger_dial/report_tiger_dial.socket.js @@ -1 +1,45 @@ -var _0x4044=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x74\x69\x67\x65\x72\x5F\x64\x69\x61\x6C\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x74\x69\x67\x65\x72\x5F\x64\x69\x61\x6C\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x72\x6F\x6C\x65","\x61\x67\x65\x6E\x74","\x65\x6D\x69\x74","\x72\x65\x70\x6F\x72\x74\x5F\x74\x69\x67\x65\x72\x5F\x64\x69\x61\x6C\x3A\x73\x61\x76\x65","\x72\x65\x70\x6F\x72\x74\x5F\x74\x69\x67\x65\x72\x5F\x64\x69\x61\x6C\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x4044[0];const ReportTigerDialEvents=require(_0x4044[1]);var events=[_0x4044[2],_0x4044[3]];exports[_0x4044[4]]= function(_0xd694x3){for(var _0xd694x4=0,_0xd694x5=events[_0x4044[5]];_0xd694x4< _0xd694x5;_0xd694x4++){var _0xd694x6=events[_0xd694x4];var _0xd694x7=createListener(_0x4044[6]+ _0xd694x6,_0xd694x3);ReportTigerDialEvents[_0x4044[7]](_0xd694x6,_0xd694x7);_0xd694x3[_0x4044[7]](_0x4044[8],removeListener(_0xd694x6,_0xd694x7))}};function createListener(_0xd694x6,_0xd694x3){return function(_0xd694x9){switch(_0xd694x6){case _0x4044[12]:if(_0xd694x3[_0x4044[9]]!== _0x4044[10]){_0xd694x3[_0x4044[11]](_0xd694x6,_0xd694x9)};break;case _0x4044[13]:_0xd694x3[_0x4044[11]](_0xd694x6,_0xd694x9);break;default:}}}function removeListener(_0xd694x6,_0xd694x7){return function(){ReportTigerDialEvents[_0x4044[14]](_0xd694x6,_0xd694x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ReportTigerDialEvents = require('./report_tiger_dial.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_tiger_dial:' + event, socket); + + ReportTigerDialEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'report_tiger_dial:save': + if (socket.role !== 'agent') { + socket.emit(event, doc); + } + break; + + case 'report_tiger_dial:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + ReportTigerDialEvents.removeListener(event, listener); + }; +} diff --git a/server/api/report_tree/index.js b/server/api/report_tree/index.js index d74e418..419796c 100644 --- a/server/api/report_tree/index.js +++ b/server/api/report_tree/index.js @@ -1 +1,12 @@ -var _0x8ea7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x8ea7[0];var express=require(_0x8ea7[1]);var controller=require(_0x8ea7[2]);var auth=require(_0x8ea7[3]);var router=express.Router();router[_0x8ea7[9]](_0x8ea7[4],auth[_0x8ea7[5]](),auth[_0x8ea7[7]]([17],[_0x8ea7[6]]),controller[_0x8ea7[8]]);router[_0x8ea7[12]](_0x8ea7[10],auth[_0x8ea7[5]](),auth[_0x8ea7[7]]([17],[_0x8ea7[6]]),controller[_0x8ea7[11]]);module[_0x8ea7[13]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./report_tree.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.index); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.update); + +module.exports = router; diff --git a/server/api/report_tree/report_tree.controller.js b/server/api/report_tree/report_tree.controller.js index a349eae..e1f947e 100644 --- a/server/api/report_tree/report_tree.controller.js +++ b/server/api/report_tree/report_tree.controller.js @@ -1 +1,43 @@ -var _0x5eba=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x52\x65\x70\x6F\x72\x74\x54\x72\x65\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x75\x70\x64\x61\x74\x65","\x62\x6F\x64\x79","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64"];_0x5eba[0];var _=require(_0x5eba[1]);var util=require(_0x5eba[2]);var ReportTree=require(_0x5eba[4])[_0x5eba[3]];exports[_0x5eba[5]]= function(_0xa169x4,_0xa169x5){return ReportTree[_0x5eba[11]]()[_0x5eba[10]](function(_0xa169x7){if(!_0xa169x7){return _0xa169x5[_0x5eba[7]](404)};return _0xa169x5[_0x5eba[9]](200)[_0x5eba[8]](_0xa169x7)})[_0x5eba[6]](function(_0xa169x6){return handleError(_0xa169x5,_0xa169x6)})};exports[_0x5eba[12]]= function(_0xa169x4,_0xa169x5){return ReportTree[_0x5eba[18]](_0xa169x4[_0x5eba[17]][_0x5eba[16]])[_0x5eba[10]](function(_0xa169x8){if(!_0xa169x8){return _0xa169x5[_0x5eba[7]](404)};var _0xa169x9=_[_0x5eba[14]](_0xa169x8,_0xa169x4[_0x5eba[13]]);return _0xa169x9[_0x5eba[15]]()})[_0x5eba[10]](function(_0xa169x8){return _0xa169x5[_0x5eba[9]](200)[_0x5eba[8]](_0xa169x8)})[_0x5eba[6]](function(_0xa169x6){return handleError(_0xa169x5,_0xa169x6)})};function handleError(_0xa169x5,_0xa169x6){return _0xa169x5[_0x5eba[9]](500)[_0x5eba[8]](_0xa169x6)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var ReportTree = require('../../models').ReportTree; + +// Get the reports trees +exports.index = function(req, res) { + return ReportTree + .findAll() + .then(function(trees) { + if (!trees) { + return res.sendStatus(404); + } + return res.status(200).send(trees); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing report in the DB. +exports.update = function(req, res) { + return ReportTree + .findById(req.params.id) + .then(function(tree) { + if (!tree) { + return res.sendStatus(404); + } + var updated = _.merge(tree, req.body); + return updated.save(); + }) + .then(function(tree) { + return res.status(200).send(tree); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/report_tree/report_tree.events.js b/server/api/report_tree/report_tree.events.js index 93b2cdb..650282c 100644 --- a/server/api/report_tree/report_tree.events.js +++ b/server/api/report_tree/report_tree.events.js @@ -1 +1,36 @@ -var _0x7072=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x52\x65\x70\x6F\x72\x74\x54\x72\x65\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x7072[0];const EventEmitter=require(_0x7072[1]);const ReportTree=require(_0x7072[3])[_0x7072[2]];var ReportTreeEvents= new EventEmitter();ReportTreeEvents[_0x7072[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x7072[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x7072[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x7072[6]};for(var e in events){var event=events[e];ReportTree[_0x7072[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xff71x8,_0xff71x9,_0xff71xa){ReportTreeEvents[_0x7072[10]](event+ _0x7072[8]+ _0xff71x8[_0x7072[9]],_0xff71x8);ReportTreeEvents[_0x7072[10]](event,_0xff71x8);_0xff71xa(null)}}module[_0x7072[11]]= ReportTreeEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ReportTree = require('../../models').ReportTree; + +var ReportTreeEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ReportTreeEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ReportTree.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ReportTreeEvents.emit(event + ':' + doc._id, doc); + ReportTreeEvents.emit(event, doc); + done(null); + } +} + +module.exports = ReportTreeEvents; diff --git a/server/api/report_tree/report_tree.socket.js b/server/api/report_tree/report_tree.socket.js index 54b00cc..0209c1a 100644 --- a/server/api/report_tree/report_tree.socket.js +++ b/server/api/report_tree/report_tree.socket.js @@ -1 +1,32 @@ -var _0xd59b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xd59b[0];const ReportTreeEvents=require(_0xd59b[1]);var events=[_0xd59b[2],_0xd59b[3]];exports[_0xd59b[4]]= function(_0xbeccx3){for(var _0xbeccx4=0,_0xbeccx5=events[_0xd59b[5]];_0xbeccx4< _0xbeccx5;_0xbeccx4++){var _0xbeccx6=events[_0xbeccx4];var _0xbeccx7=createListener(_0xd59b[6]+ _0xbeccx6,_0xbeccx3);ReportTreeEvents[_0xd59b[7]](_0xbeccx6,_0xbeccx7);_0xbeccx3[_0xd59b[7]](_0xd59b[8],removeListener(_0xbeccx6,_0xbeccx7))}};function createListener(_0xbeccx6,_0xbeccx3){return function(_0xbeccx9){_0xbeccx3[_0xd59b[9]](_0xbeccx6,_0xbeccx9)}}function removeListener(_0xbeccx6,_0xbeccx7){return function(){ReportTreeEvents[_0xd59b[10]](_0xbeccx6,_0xbeccx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ReportTreeEvents = require('./report_tree.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('report_tree:' + event, socket); + + ReportTreeEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ReportTreeEvents.removeListener(event, listener); + }; +} diff --git a/server/api/salesforce_account/index.js b/server/api/salesforce_account/index.js index 9f54ac3..ec28594 100644 --- a/server/api/salesforce_account/index.js +++ b/server/api/salesforce_account/index.js @@ -1 +1,28 @@ -var _0xe833=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2F\x3A\x69\x64\x2F\x66\x69\x65\x6C\x64\x73","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x67\x65\x74\x41\x63\x63\x6F\x75\x6E\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x63\x69\x64","\x67\x65\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65\x2F\x3A\x66\x69\x65\x6C\x64","\x61\x63\x63\x6F\x75\x6E\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x63\x69\x64\x2F\x3A\x74\x79\x70\x65","\x63\x72\x65\x61\x74\x65\x46\x69\x65\x6C\x64","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x63\x69\x64\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x66\x69\x64","\x75\x70\x64\x61\x74\x65\x46\x69\x65\x6C\x64","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79\x46\x69\x65\x6C\x64","\x65\x78\x70\x6F\x72\x74\x73"];_0xe833[0];var express=require(_0xe833[1]);var auth=require(_0xe833[2]);var controller=require(_0xe833[3]);var router=express.Router();router[_0xe833[9]](_0xe833[4],auth[_0xe833[5]](),auth[_0xe833[7]]([19,13],[_0xe833[6]]),controller[_0xe833[8]]);router[_0xe833[9]](_0xe833[10],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[11]]);router[_0xe833[9]](_0xe833[12],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[13]]);router[_0xe833[9]](_0xe833[14],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[15]]);router[_0xe833[9]](_0xe833[16],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[17]]);router[_0xe833[9]](_0xe833[18],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[19]]);router[_0xe833[22]](_0xe833[20],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[21]]);router[_0xe833[22]](_0xe833[4],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[23]]);router[_0xe833[22]](_0xe833[16],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[24]]);router[_0xe833[22]](_0xe833[25],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[26]]);router[_0xe833[28]](_0xe833[10],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[27]]);router[_0xe833[28]](_0xe833[29],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[30]]);router[_0xe833[32]](_0xe833[4],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[31]]);router[_0xe833[32]](_0xe833[10],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[33]]);router[_0xe833[32]](_0xe833[16],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[34]]);router[_0xe833[32]](_0xe833[18],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[35]]);router[_0xe833[32]](_0xe833[29],auth[_0xe833[5]](),auth[_0xe833[7]]([19],[_0xe833[6]]),controller[_0xe833[36]]);module[_0xe833[37]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./salesforce_account.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([19, 13], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.show); +router.get('/:id/check', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.checkAccount); +router.get('/:id/fields', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.getFields); +router.get('/:id/configurations', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.getAccountConfigurations); +router.get('/:id/configurations/:cid', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.getConfiguration); +router.post('/validate/:field', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.accountValidation); +router.post('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.create); +router.post('/:id/configurations', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.createConfiguration); +router.post('/:id/configurations/:cid/:type', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.createField); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.update); +router.put('/:id/configurations/:cid/fields/:fid', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.updateField); +router.delete('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroy); +router.delete('/:id/configurations', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.bulkDestroyConfigurations); +router.delete('/:id/configurations/:cid', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroyConfiguration); +router.delete('/:id/configurations/:cid/fields/:fid', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroyField); + + +module.exports = router; diff --git a/server/api/salesforce_account/salesforce_account.controller.js b/server/api/salesforce_account/salesforce_account.controller.js index dc5c635..008c8f1 100644 --- a/server/api/salesforce_account/salesforce_account.controller.js +++ b/server/api/salesforce_account/salesforce_account.controller.js @@ -1 +1,519 @@ -var _0x96b3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x6A\x73\x66\x6F\x72\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\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","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x72\x65\x6D\x6F\x74\x65\x55\x72\x69","\x63\x6C\x69\x65\x6E\x74\x49\x64","\x63\x6C\x69\x65\x6E\x74\x53\x65\x63\x72\x65\x74","\x73\x65\x63\x75\x72\x69\x74\x79\x54\x6F\x6B\x65\x6E","\x63\x6F\x6E\x63\x61\x74","\x70\x61\x73\x73\x77\x6F\x72\x64","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x6C\x6F\x67\x69\x6E","\x61\x63\x63\x6F\x75\x6E\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x63\x6F\x75\x6E\x74","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x66\x69\x65\x6C\x64\x73","\x64\x65\x73\x63\x72\x69\x62\x65","\x54\x61\x73\x6B","\x73\x6F\x62\x6A\x65\x63\x74","\x67\x65\x74\x41\x63\x63\x6F\x75\x6E\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x61\x63\x63\x6F\x75\x6E\x74","\x67\x65\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x63\x69\x64","\x64\x65\x73\x74\x72\x6F\x79\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x74\x79\x70\x65","\x51\x75\x65\x75\x65","\x53\x75\x62\x6A\x65\x63\x74","\x73\x74\x72\x69\x6E\x67","\x5B\x78\x43\x41\x4C\x4C\x59\x20\x54\x69\x63\x6B\x65\x74\x5D","\x76\x61\x72\x69\x61\x62\x6C\x65","","\x71\x75\x65\x75\x65","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x2A\x2A\x2A\x20\x43\x61\x6C\x6C\x20\x49\x6E\x66\x6F\x20\x2A\x2A\x2A","\x6B\x65\x79\x56\x61\x6C\x75\x65","\x43\x61\x6C\x6C\x65\x72\x20\x4E\x75\x6D\x62\x65\x72","\x43\x61\x6C\x6C\x65\x72\x20\x4E\x61\x6D\x65","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x43\x61\x6C\x6C\x20\x54\x6F","\x64\x65\x73\x74\x65\x78\x74\x65\x6E","\x55\x6E\x69\x71\x75\x65\x49\x64","\x75\x6E\x69\x71\x75\x65\x69\x64","\x44\x61\x74\x65","\x61\x67\x65\x6E\x74\x63\x61\x6C\x6C\x65\x64\x41\x74","\x2A\x2A\x2A\x20\x41\x67\x65\x6E\x74\x20\x49\x6E\x66\x6F\x20\x2A\x2A\x2A","\x41\x67\x65\x6E\x74\x20\x4E\x61\x6D\x65","\x64\x65\x73\x74\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x41\x67\x65\x6E\x74\x20\x4E\x75\x6D\x62\x65\x72","\x64\x65\x73\x74\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x2A\x2A\x2A\x20\x54\x69\x6D\x65\x20\x49\x6E\x66\x6F\x20\x2A\x2A\x2A","\x41\x67\x65\x6E\x74\x20\x52\x69\x6E\x67","\x41\x67\x65\x6E\x74\x20\x43\x6F\x6E\x6E\x65\x63\x74","\x61\x67\x65\x6E\x74\x63\x6F\x6E\x6E\x65\x63\x74\x41\x74","\x41\x67\x65\x6E\x74\x20\x43\x6F\x6D\x70\x6C\x65\x74\x65","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x48\x6F\x6C\x64\x20\x54\x69\x6D\x65","\x68\x6F\x6C\x64\x74\x69\x6D\x65","\x54\x61\x6C\x6B\x20\x54\x69\x6D\x65","\x74\x61\x6C\x6B\x74\x69\x6D\x65","\x4F\x75\x74\x62\x6F\x75\x6E\x64","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x20\x43\x61\x6C\x6C","\x43\x61\x6C\x6C\x65\x64\x20\x4E\x75\x6D\x62\x65\x72","\x4D\x65\x6D\x62\x65\x72\x20\x4E\x61\x6D\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x73\x74\x61\x72\x74\x74\x69\x6D\x65","\x41\x6E\x73\x77\x65\x72\x20\x54\x69\x6D\x65","\x61\x6E\x73\x77\x65\x72\x74\x69\x6D\x65","\x43\x6F\x6D\x70\x6C\x65\x74\x65\x20\x54\x69\x6D\x65","\x65\x6E\x64\x74\x69\x6D\x65","\x76\x6F\x69\x63\x65","\x43\x68\x61\x6E\x6E\x65\x6C\x20\x6E\x6F\x74\x20\x61\x76\x61\x69\x6C\x61\x62\x6C\x65\x3A","\x63\x68\x61\x6E\x6E\x65\x6C","\x6C\x6F\x67","\x63\x72\x65\x61\x74\x65\x46\x69\x65\x6C\x64","\x53\x75\x62\x6A\x65\x63\x74\x49\x64","\x73\x75\x62\x6A\x65\x63\x74","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x49\x64","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x46\x69\x65\x6C\x64\x49\x64","\x75\x70\x64\x61\x74\x65\x46\x69\x65\x6C\x64","\x66\x69\x64","\x64\x65\x73\x74\x72\x6F\x79\x46\x69\x65\x6C\x64","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x54\x61\x67\x73","\x65\x72\x72\x6F\x72","\x73\x65\x74\x54\x61\x67\x73"];_0x96b3[0];var _=require(_0x96b3[1]);var util=require(_0x96b3[2]);var jsforce=require(_0x96b3[3]);var Util=require(_0x96b3[4]);var SalesforceAccount=require(_0x96b3[6])[_0x96b3[5]];var SalesforceConfiguration=require(_0x96b3[6])[_0x96b3[7]];var SalesforceField=require(_0x96b3[6])[_0x96b3[8]];function handleError(_0xa1a8x9,_0xa1a8xa){_0xa1a8xa= _0xa1a8xa|| 500;return function(_0xa1a8xb){_0xa1a8x9[_0x96b3[10]](_0xa1a8xa)[_0x96b3[9]](_0xa1a8xb)}}function responseWithResult(_0xa1a8x9,_0xa1a8xa){_0xa1a8xa= _0xa1a8xa|| 200;return function(_0xa1a8xd){if(_0xa1a8xd){_0xa1a8x9[_0x96b3[10]](_0xa1a8xa)[_0x96b3[11]](_0xa1a8xd)}}}function responseWithoutResult(_0xa1a8x9,_0xa1a8xa){_0xa1a8xa= _0xa1a8xa|| 200;return function(){_0xa1a8x9[_0x96b3[12]](_0xa1a8xa)}}function handleEntityNotFound(_0xa1a8x9){return function(_0xa1a8xd){if(!_0xa1a8xd){_0xa1a8x9[_0x96b3[10]](404)[_0x96b3[13]]();return null};return _0xa1a8xd}}function saveUpdates(_0xa1a8x11){return function(_0xa1a8xd){return _0xa1a8xd[_0x96b3[15]](_0xa1a8x11)[_0x96b3[14]](function(_0xa1a8x12){return _0xa1a8x12})}}function removeEntity(_0xa1a8x9){return function(_0xa1a8xd){if(_0xa1a8xd){return _0xa1a8xd[_0x96b3[16]]()[_0x96b3[14]](function(){_0xa1a8x9[_0x96b3[10]](204)[_0x96b3[13]]()})}}}exports[_0x96b3[17]]= function(_0xa1a8x14,_0xa1a8x9,_0xa1a8x15){return SalesforceAccount[_0x96b3[24]](_0x96b3[23])[_0x96b3[22]](_[_0x96b3[21]](Util[_0x96b3[20]](_0xa1a8x14[_0x96b3[19]]),{distinct:true}))[_0x96b3[14]](responseWithResult(_0xa1a8x9))[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[25]]= function(_0xa1a8x14,_0xa1a8x9){return SalesforceAccount[_0x96b3[28]](_0xa1a8x14[_0x96b3[27]][_0x96b3[26]])[_0x96b3[14]](handleEntityNotFound(_0xa1a8x9))[_0x96b3[14]](responseWithResult(_0xa1a8x9))[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[29]]= function(_0xa1a8x14,_0xa1a8x9){return SalesforceAccount[_0x96b3[29]](_0xa1a8x14[_0x96b3[30]])[_0x96b3[14]](responseWithResult(_0xa1a8x9,201))[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[31]]= function(_0xa1a8x14,_0xa1a8x9){if(_0xa1a8x14[_0x96b3[30]][_0x96b3[26]]){delete _0xa1a8x14[_0x96b3[30]][_0x96b3[26]]};return SalesforceAccount[_0x96b3[28]](_0xa1a8x14[_0x96b3[27]][_0x96b3[26]])[_0x96b3[14]](handleEntityNotFound(_0xa1a8x9))[_0x96b3[14]](saveUpdates(_0xa1a8x14[_0x96b3[30]]))[_0x96b3[14]](responseWithResult(_0xa1a8x9))[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[16]]= function(_0xa1a8x14,_0xa1a8x9){return SalesforceAccount[_0x96b3[28]](_0xa1a8x14[_0x96b3[27]][_0x96b3[26]])[_0x96b3[14]](handleEntityNotFound(_0xa1a8x9))[_0x96b3[14]](removeEntity(_0xa1a8x9))[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[32]]= function(_0xa1a8x14,_0xa1a8x9){return SalesforceAccount[_0x96b3[16]]({where:{id:_0xa1a8x14[_0x96b3[19]][_0x96b3[33]]},individualHooks:true})[_0x96b3[14]](responseWithResult(_0xa1a8x9,204))[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[34]]= function(_0xa1a8x14,_0xa1a8x9){return SalesforceAccount[_0x96b3[28]](_0xa1a8x14[_0x96b3[27]][_0x96b3[26]])[_0x96b3[14]](handleEntityNotFound(_0xa1a8x9))[_0x96b3[14]](function(_0xa1a8x16){var _0xa1a8x17= new jsforce.Connection({oauth2:{loginUrl:_0xa1a8x16[_0x96b3[35]],clientId:_0xa1a8x16[_0x96b3[36]],clientSecret:_0xa1a8x16[_0x96b3[37]]}});var _0xa1a8x18=_0xa1a8x16[_0x96b3[40]][_0x96b3[39]](_0xa1a8x16[_0x96b3[38]]);_0xa1a8x17[_0x96b3[42]](_0xa1a8x16[_0x96b3[41]],_0xa1a8x18,function(_0xa1a8xb,_0xa1a8x19){if(_0xa1a8xb){return _0xa1a8x9[_0x96b3[10]](400)[_0x96b3[9]](_0xa1a8xb)};return _0xa1a8x9[_0x96b3[12]](200)})})[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[43]]= function(_0xa1a8x14,_0xa1a8x9){var _0xa1a8x1a={};_0xa1a8x1a[_0xa1a8x14[_0x96b3[27]][_0x96b3[44]]]= _0xa1a8x14[_0x96b3[30]][_0x96b3[45]];return SalesforceAccount[_0x96b3[22]]({where:_0xa1a8x1a})[_0x96b3[14]](function(_0xa1a8x1b){if(_0xa1a8x1b[_0x96b3[46]]){return _0xa1a8x9[_0x96b3[10]](200)[_0x96b3[9]]({isValid:false,value:_0xa1a8x14[_0x96b3[30]][_0x96b3[45]]})};return _0xa1a8x9[_0x96b3[10]](200)[_0x96b3[9]]({isValid:true,value:_0xa1a8x14[_0x96b3[30]][_0x96b3[45]]})})[_0x96b3[18]](function(_0xa1a8xb){return handleError(_0xa1a8x9,_0xa1a8xb)})};exports[_0x96b3[47]]= function(_0xa1a8x14,_0xa1a8x9){return SalesforceAccount[_0x96b3[28]](_0xa1a8x14[_0x96b3[27]][_0x96b3[26]])[_0x96b3[14]](handleEntityNotFound(_0xa1a8x9))[_0x96b3[14]](function(_0xa1a8x16){var _0xa1a8x17= new jsforce.Connection({oauth2:{loginUrl:_0xa1a8x16[_0x96b3[35]],clientId:_0xa1a8x16[_0x96b3[36]],clientSecret:_0xa1a8x16[_0x96b3[37]]}});var _0xa1a8x18=_0xa1a8x16[_0x96b3[40]][_0x96b3[39]](_0xa1a8x16[_0x96b3[38]]);_0xa1a8x17[_0x96b3[42]](_0xa1a8x16[_0x96b3[41]],_0xa1a8x18,function(_0xa1a8xb,_0xa1a8x19){if(_0xa1a8xb){return _0xa1a8x9[_0x96b3[10]](400)[_0x96b3[9]](_0xa1a8xb)};_0xa1a8x17[_0x96b3[51]](_0x96b3[50])[_0x96b3[49]](function(_0xa1a8xb,_0xa1a8x1c){if(_0xa1a8xb){return _0xa1a8x9[_0x96b3[10]](400)[_0x96b3[9]](_0xa1a8xb)};return _0xa1a8x9[_0x96b3[10]](200)[_0x96b3[9]](_0xa1a8x1c[_0x96b3[48]])})})})[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[52]]= function(_0xa1a8x14,_0xa1a8x9){return SalesforceConfiguration[_0x96b3[24]]({method:[_0x96b3[53],_0xa1a8x14[_0x96b3[27]][_0x96b3[26]]]})[_0x96b3[22]](_[_0x96b3[21]](Util[_0x96b3[20]](_0xa1a8x14[_0x96b3[19]]),{distinct:true}))[_0x96b3[14]](responseWithResult(_0xa1a8x9))[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[54]]= function(_0xa1a8x14,_0xa1a8x9){return SalesforceConfiguration[_0x96b3[24]]({method:[_0x96b3[53],_0xa1a8x14[_0x96b3[27]][_0x96b3[26]]]})[_0x96b3[28]](_0xa1a8x14[_0x96b3[27]][_0x96b3[55]])[_0x96b3[14]](handleEntityNotFound(_0xa1a8x9))[_0x96b3[14]](responseWithResult(_0xa1a8x9))[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[56]]= function(_0xa1a8x14,_0xa1a8x9){return SalesforceConfiguration[_0x96b3[24]]({method:[_0x96b3[53],_0xa1a8x14[_0x96b3[27]][_0x96b3[26]]]})[_0x96b3[28]](_0xa1a8x14[_0x96b3[27]][_0x96b3[55]])[_0x96b3[14]](handleEntityNotFound(_0xa1a8x9))[_0x96b3[14]](removeEntity(_0xa1a8x9))[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[57]]= function(_0xa1a8x14,_0xa1a8x9){return SalesforceConfiguration[_0x96b3[16]]({where:{id:_0xa1a8x14[_0x96b3[19]][_0x96b3[33]]},individualHooks:true})[_0x96b3[14]](responseWithResult(_0xa1a8x9,204))[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[58]]= function(_0xa1a8x14,_0xa1a8x9){_0xa1a8x14[_0x96b3[30]][_0x96b3[59]]= _0xa1a8x14[_0x96b3[27]][_0x96b3[26]];switch(_0xa1a8x14[_0x96b3[30]][_0x96b3[108]]){case _0x96b3[106]:if(_0xa1a8x14[_0x96b3[30]][_0x96b3[60]]=== _0x96b3[61]){_0xa1a8x14[_0x96b3[30]][_0x96b3[62]]= [{"\x74\x79\x70\x65":_0x96b3[63],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":null},{"\x74\x79\x70\x65":_0x96b3[65],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[67]},{"\x74\x79\x70\x65":_0x96b3[65],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[68]}];_0xa1a8x14[_0x96b3[30]][_0x96b3[69]]= [{"\x74\x79\x70\x65":_0x96b3[63],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[70],"\x6B\x65\x79":null,"\x6B\x65\x79\x54\x79\x70\x65":null,"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":null},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[72],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[68]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[73],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[74]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[75],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[76]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[61],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[67]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[77],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[78]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[79],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[80]},{"\x74\x79\x70\x65":_0x96b3[63],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[81],"\x6B\x65\x79":null,"\x6B\x65\x79\x54\x79\x70\x65":null,"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":null},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[82],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[83]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[84],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[85]},{"\x74\x79\x70\x65":_0x96b3[63],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[86],"\x6B\x65\x79":null,"\x6B\x65\x79\x54\x79\x70\x65":null,"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":null},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[87],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[80]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[88],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[89]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[90],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[91]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[92],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[93]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[94],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[95]}]}else {if(_0xa1a8x14[_0x96b3[30]][_0x96b3[60]]=== _0x96b3[96]){_0xa1a8x14[_0x96b3[30]][_0x96b3[62]]= [{"\x74\x79\x70\x65":_0x96b3[63],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":null},{"\x74\x79\x70\x65":_0x96b3[63],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[97],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":null},{"\x74\x79\x70\x65":_0x96b3[65],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[85]}];_0xa1a8x14[_0x96b3[30]][_0x96b3[69]]= [{"\x74\x79\x70\x65":_0x96b3[63],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[70],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":null},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[98],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[85]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[99],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[100]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[77],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[78]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[79],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[101]},{"\x74\x79\x70\x65":_0x96b3[63],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[86]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[102],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[103]},{"\x74\x79\x70\x65":_0x96b3[71],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x6B\x65\x79":_0x96b3[104],"\x6B\x65\x79\x54\x79\x70\x65":_0x96b3[65],"\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74":_0x96b3[66],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x96b3[105]}]}};break;default:console[_0x96b3[109]](_0x96b3[107],_0xa1a8x14[_0x96b3[30]][_0x96b3[108]])};delete _0xa1a8x14[_0x96b3[30]][_0x96b3[108]];delete _0xa1a8x14[_0x96b3[30]][_0x96b3[60]];return SalesforceConfiguration[_0x96b3[29]](_0xa1a8x14[_0x96b3[30]],{include:[{model:SalesforceField,as:_0x96b3[62]},{model:SalesforceField,as:_0x96b3[69]}]})[_0x96b3[14]](responseWithResult(_0xa1a8x9,201))[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[110]]= function(_0xa1a8x14,_0xa1a8x9){return SalesforceConfiguration[_0x96b3[24]]({method:[_0x96b3[53],_0xa1a8x14[_0x96b3[27]][_0x96b3[26]]]})[_0x96b3[28]](_0xa1a8x14[_0x96b3[27]][_0x96b3[55]])[_0x96b3[14]](handleEntityNotFound(_0xa1a8x9))[_0x96b3[14]](function(_0xa1a8x1d){switch(_0xa1a8x14[_0x96b3[27]][_0x96b3[60]]){case _0x96b3[112]:_0xa1a8x14[_0x96b3[30]][_0x96b3[111]]= _0xa1a8x14[_0x96b3[27]][_0x96b3[55]];break;case _0x96b3[114]:_0xa1a8x14[_0x96b3[30]][_0x96b3[113]]= _0xa1a8x14[_0x96b3[27]][_0x96b3[55]];break;case _0x96b3[44]:_0xa1a8x14[_0x96b3[30]][_0x96b3[115]]= _0xa1a8x14[_0x96b3[27]][_0x96b3[55]];break};return SalesforceField[_0x96b3[29]](_0xa1a8x14[_0x96b3[30]])})[_0x96b3[14]](responseWithResult(_0xa1a8x9,201))[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[116]]= function(_0xa1a8x14,_0xa1a8x9){if(_0xa1a8x14[_0x96b3[30]][_0x96b3[26]]){delete _0xa1a8x14[_0x96b3[30]][_0x96b3[26]]};return SalesforceField[_0x96b3[28]](_0xa1a8x14[_0x96b3[27]][_0x96b3[117]])[_0x96b3[14]](handleEntityNotFound(_0xa1a8x9))[_0x96b3[14]](saveUpdates(_0xa1a8x14[_0x96b3[30]]))[_0x96b3[14]](responseWithResult(_0xa1a8x9))[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[118]]= function(_0xa1a8x14,_0xa1a8x9){return SalesforceField[_0x96b3[28]](_0xa1a8x14[_0x96b3[27]][_0x96b3[117]])[_0x96b3[14]](handleEntityNotFound(_0xa1a8x9))[_0x96b3[14]](removeEntity(_0xa1a8x9))[_0x96b3[18]](handleError(_0xa1a8x9))};exports[_0x96b3[119]]= function(_0xa1a8x14,_0xa1a8x9,_0xa1a8x15){return SalesforceConfiguration[_0x96b3[28]](_0xa1a8x14[_0x96b3[27]][_0x96b3[55]])[_0x96b3[14]](handleEntityNotFound(_0xa1a8x9))[_0x96b3[14]](function(_0xa1a8x1d){return _0xa1a8x1d[_0x96b3[121]](_0xa1a8x14[_0x96b3[30]])})[_0x96b3[14]](responseWithoutResult(_0xa1a8x9,200))[_0x96b3[18]](function(_0xa1a8xb){console[_0x96b3[120]](_0xa1a8xb);return handleError(_0xa1a8x9,_0xa1a8xb)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/salesforce/accounts -> index + * POST /api/salesforce/accounts -> create + * GET /api/salesforce/accounts/:id -> show + * PUT /api/salesforce/accounts/:id -> update + * DELETE /api/salesforce/accounts/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var util = require('util'); +var jsforce = require('jsforce'); +var Util = require('../../config/util'); + +var SalesforceAccount = require('../../models').SalesforceAccount; +var SalesforceConfiguration = require('../../models').SalesforceConfiguration; +var SalesforceField = require('../../models').SalesforceField; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 200; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of SalesforceAccounts +exports.index = function(req, res, next) { + return SalesforceAccount + .scope('configurations') + .findAndCountAll(_.merge(Util.getQuery(req.query), { + distinct: true + })) + .then(responseWithResult(res)) + .catch(handleError(res)); +}; + +// Gets a single SalesforceAccount from the DB +exports.show = function(req, res) { + return SalesforceAccount + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new SalesforceAccount in the DB +exports.create = function(req, res) { + return SalesforceAccount + .create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing SalesforceAccount in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return SalesforceAccount + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a SalesforceAccount from the DB +exports.destroy = function(req, res) { + return SalesforceAccount + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +exports.bulkDestroy = function(req, res) { + return SalesforceAccount + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(responseWithResult(res, 204)) + .catch(handleError(res)); +}; + +exports.checkAccount = function(req, res) { + return SalesforceAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(account) { + var conn = new jsforce.Connection({ + oauth2: { + loginUrl: account.remoteUri, + clientId: account.clientId, + clientSecret: account.clientSecret, + } + }); + var pwd = account.password.concat(account.securityToken); + conn.login(account.username, pwd, function(err, userInfo) { + if (err) { + return res.status(400).send(err); + } + return res.sendStatus(200); + }); + }) + .catch(handleError(res)); +} + +exports.accountValidation = function(req, res) { + var where = {}; + where[req.params.field] = req.body.value; + return SalesforceAccount + .findAndCountAll({ + where: where + }) + .then(function(result) { + if (result.count) { + return res.status(200).send({ + isValid: false, + value: req.body.value + }); + } + return res.status(200).send({ + isValid: true, + value: req.body.value + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getFields = function(req, res) { + return SalesforceAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(account) { + var conn = new jsforce.Connection({ + oauth2: { + loginUrl: account.remoteUri, + clientId: account.clientId, + clientSecret: account.clientSecret, + } + }); + var pwd = account.password.concat(account.securityToken); + conn.login(account.username, pwd, function(err, userInfo) { + if (err) { + return res.status(400).send(err); + } + conn.sobject("Task").describe(function(err, meta) { + if (err) { + return res.status(400).send(err); + } + return res.status(200).send(meta.fields); + }); + }); + }) + .catch(handleError(res)); +}; + +exports.getAccountConfigurations = function(req, res) { + return SalesforceConfiguration + .scope({ + method: ['account', req.params.id] + }) + .findAndCountAll(_.merge(Util.getQuery(req.query), { + distinct: true + })) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +exports.getConfiguration = function(req, res) { + + return SalesforceConfiguration + .scope({ + method: ['account', req.params.id] + }) + .findById(req.params.cid) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +exports.destroyConfiguration = function(req, res) { + return SalesforceConfiguration + .scope({ + method: ['account', req.params.id] + }) + .findById(req.params.cid) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +}; + +exports.bulkDestroyConfigurations = function(req, res) { + return SalesforceConfiguration + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(responseWithResult(res, 204)) + .catch(handleError(res)); +}; + +exports.createConfiguration = function(req, res) { + req.body['AccountId'] = req.params.id; + + switch (req.body.channel) { + case 'voice': + + if (req.body.type === 'Queue') { + req.body.Subject = [{ + "type": "string", + "content": "[xCALLY Ticket]", + "variableName": null + }, { + "type": "variable", + "content": "", + "variableName": "queue" + }, { + "type": "variable", + "content": "", + "variableName": "calleridnum" + }]; + req.body.Description = [{ + "type": "string", + "content": "*** Call Info ***", + "key": null, + "keyType": null, + "variableName": null + }, { + "type": "keyValue", + "content": "", + "key": "Caller Number", + "keyType": "variable", + "variableName": "calleridnum" + }, { + "type": "keyValue", + "content": "", + "key": "Caller Name", + "keyType": "variable", + "variableName": "calleridname" + }, { + "type": "keyValue", + "content": "", + "key": "Call To", + "keyType": "variable", + "variableName": "destexten" + }, { + "type": "keyValue", + "content": "", + "key": "Queue", + "keyType": "variable", + "variableName": "queue" + }, { + "type": "keyValue", + "content": "", + "key": "UniqueId", + "keyType": "variable", + "variableName": "uniqueid" + }, { + "type": "keyValue", + "content": "", + "key": "Date", + "keyType": "variable", + "variableName": "agentcalledAt" + }, { + "type": "string", + "content": "*** Agent Info ***", + "key": null, + "keyType": null, + "variableName": null + }, { + "type": "keyValue", + "content": "", + "key": "Agent Name", + "keyType": "variable", + "variableName": "destcalleridname" + }, { + "type": "keyValue", + "content": "", + "key": "Agent Number", + "keyType": "variable", + "variableName": "destcalleridnum" + }, { + "type": "string", + "content": "*** Time Info ***", + "key": null, + "keyType": null, + "variableName": null + }, { + "type": "keyValue", + "content": "", + "key": "Agent Ring", + "keyType": "variable", + "variableName": "agentcalledAt" + }, { + "type": "keyValue", + "content": "", + "key": "Agent Connect", + "keyType": "variable", + "variableName": "agentconnectAt" + }, { + "type": "keyValue", + "content": "", + "key": "Agent Complete", + "keyType": "variable", + "variableName": "agentcompleteAt" + }, { + "type": "keyValue", + "content": "", + "key": "Hold Time", + "keyType": "variable", + "variableName": "holdtime" + }, { + "type": "keyValue", + "content": "", + "key": "Talk Time", + "keyType": "variable", + "variableName": "talktime" + }]; + } else if (req.body.type === 'Outbound') { + req.body.Subject = [{ + "type": "string", + "content": "[xCALLY Ticket]", + "variableName": null + }, { + "type": "string", + "content": "Outbound Call", + "variableName": null + }, { + "type": "variable", + "content": "", + "variableName": "destcalleridnum" + }]; + req.body.Description = [{ + "type": "string", + "content": "*** Call Info ***", + "variableName": null + }, { + "type": "keyValue", + "content": "", + "key": "Called Number", + "keyType": "variable", + "keyContent": "", + "variableName": "destcalleridnum" + }, { + "type": "keyValue", + "content": "", + "key": "Member Name", + "keyType": "variable", + "keyContent": "", + "variableName": "membername" + }, { + "type": "keyValue", + "content": "", + "key": "UniqueId", + "keyType": "variable", + "keyContent": "", + "variableName": "uniqueid" + }, { + "type": "keyValue", + "content": "", + "key": "Date", + "keyType": "variable", + "keyContent": "", + "variableName": "starttime" + }, { + "type": "string", + "content": "*** Time Info ***", + }, { + "type": "keyValue", + "content": "", + "key": "Answer Time", + "keyType": "variable", + "keyContent": "", + "variableName": "answertime" + }, { + "type": "keyValue", + "content": "", + "key": "Complete Time", + "keyType": "variable", + "keyContent": "", + "variableName": "endtime" + }]; + } + break; + default: + console.log('Channel not available:', req.body.channel); + } + + delete req.body.channel; + delete req.body.type; + + return SalesforceConfiguration + .create(req.body, { + include: [{ + model: SalesforceField, + as: 'Subject' + }, { + model: SalesforceField, + as: 'Description' + }] + }) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +}; + +exports.createField = function(req, res) { + return SalesforceConfiguration + .scope({ + method: ['account', req.params.id] + }) + .findById(req.params.cid) + .then(handleEntityNotFound(res)) + .then(function(configuration) { + switch (req.params.type) { + case 'subject': + req.body['SubjectId'] = req.params.cid; + break; + case 'description': + req.body['DescriptionId'] = req.params.cid; + break; + case 'field': + req.body['FieldId'] = req.params.cid; + break; + } + return SalesforceField.create(req.body); + }) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +}; + +exports.updateField = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return SalesforceField + .findById(req.params.fid) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +}; + +exports.destroyField = function(req, res) { + return SalesforceField + .findById(req.params.fid) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +}; + +exports.addConfigurationTags = function(req, res, next) { + return SalesforceConfiguration + .findById(req.params.cid) + .then(handleEntityNotFound(res)) + .then(function(configuration) { + return configuration.setTags(req.body); + }) + .then(responseWithoutResult(res, 200)) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); +}; diff --git a/server/api/salesforce_account/salesforce_account.events.js b/server/api/salesforce_account/salesforce_account.events.js index 1c21131..13ee57f 100644 --- a/server/api/salesforce_account/salesforce_account.events.js +++ b/server/api/salesforce_account/salesforce_account.events.js @@ -1 +1,36 @@ -var _0x8dda=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x8dda[0];const EventEmitter=require(_0x8dda[1]);const SalesforceAccount=require(_0x8dda[3])[_0x8dda[2]];var SalesforceAccountEvents= new EventEmitter();SalesforceAccountEvents[_0x8dda[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x8dda[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x8dda[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x8dda[6]};for(var e in events){var event=events[e];SalesforceAccount[_0x8dda[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x53dcx8,_0x53dcx9,_0x53dcxa){SalesforceAccountEvents[_0x8dda[10]](event+ _0x8dda[8]+ _0x53dcx8[_0x8dda[9]],_0x53dcx8);SalesforceAccountEvents[_0x8dda[10]](event,_0x53dcx8);_0x53dcxa(null)}}module[_0x8dda[11]]= SalesforceAccountEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SalesforceAccount = require('../../models').SalesforceAccount; + +var SalesforceAccountEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SalesforceAccountEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SalesforceAccount.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SalesforceAccountEvents.emit(event + ':' + doc._id, doc); + SalesforceAccountEvents.emit(event, doc); + done(null); + } +} + +module.exports = SalesforceAccountEvents; diff --git a/server/api/salesforce_account/salesforce_account.socket.js b/server/api/salesforce_account/salesforce_account.socket.js index be1de56..3ee49f7 100644 --- a/server/api/salesforce_account/salesforce_account.socket.js +++ b/server/api/salesforce_account/salesforce_account.socket.js @@ -1 +1,32 @@ -var _0xf029=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xf029[0];const SalesforceAccountEvents=require(_0xf029[1]);var events=[_0xf029[2],_0xf029[3]];exports[_0xf029[4]]= function(_0xa856x3){for(var _0xa856x4=0,_0xa856x5=events[_0xf029[5]];_0xa856x4< _0xa856x5;_0xa856x4++){var _0xa856x6=events[_0xa856x4];var _0xa856x7=createListener(_0xf029[6]+ _0xa856x6,_0xa856x3);SalesforceAccountEvents[_0xf029[7]](_0xa856x6,_0xa856x7);_0xa856x3[_0xf029[7]](_0xf029[8],removeListener(_0xa856x6,_0xa856x7))}};function createListener(_0xa856x6,_0xa856x3){return function(_0xa856x9){_0xa856x3[_0xf029[9]](_0xa856x6,_0xa856x9)}}function removeListener(_0xa856x6,_0xa856x7){return function(){SalesforceAccountEvents[_0xf029[10]](_0xa856x6,_0xa856x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SalesforceAccountEvents = require('./salesforce_account.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('salesforce_account:' + event, socket); + + SalesforceAccountEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SalesforceAccountEvents.removeListener(event, listener); + }; +} diff --git a/server/api/salesforce_configuration/index.js b/server/api/salesforce_configuration/index.js index a2dbc15..e0f8ff7 100644 --- a/server/api/salesforce_configuration/index.js +++ b/server/api/salesforce_configuration/index.js @@ -1 +1,17 @@ -var _0x1c3a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x3A\x74\x79\x70\x65","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x1c3a[0];var express=require(_0x1c3a[1]);var auth=require(_0x1c3a[2]);var controller=require(_0x1c3a[3]);var router=express.Router();router[_0x1c3a[7]](_0x1c3a[4],auth[_0x1c3a[5]](),controller[_0x1c3a[6]]);router[_0x1c3a[7]](_0x1c3a[8],auth[_0x1c3a[5]](),auth[_0x1c3a[10]]([19],[_0x1c3a[9]]),controller[_0x1c3a[11]]);router[_0x1c3a[13]](_0x1c3a[4],auth[_0x1c3a[5]](),auth[_0x1c3a[10]]([19],[_0x1c3a[9]]),controller[_0x1c3a[12]]);router[_0x1c3a[15]](_0x1c3a[8],auth[_0x1c3a[5]](),auth[_0x1c3a[10]]([19],[_0x1c3a[9]]),controller[_0x1c3a[14]]);router[_0x1c3a[13]](_0x1c3a[16],auth[_0x1c3a[5]](),auth[_0x1c3a[10]]([19],[_0x1c3a[9]]),controller[_0x1c3a[17]]);router[_0x1c3a[19]](_0x1c3a[8],auth[_0x1c3a[5]](),auth[_0x1c3a[10]]([19],[_0x1c3a[9]]),controller[_0x1c3a[18]]);module[_0x1c3a[20]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./salesforce_configuration.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); + +router.get('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.update); +router.post('/:id/:type', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.addConfigurationField); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/salesforce_configuration/salesforce_configuration.controller.js b/server/api/salesforce_configuration/salesforce_configuration.controller.js index 79c8bf0..523aef6 100644 --- a/server/api/salesforce_configuration/salesforce_configuration.controller.js +++ b/server/api/salesforce_configuration/salesforce_configuration.controller.js @@ -1 +1,147 @@ -var _0x3cb4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x53\x75\x62\x6A\x65\x63\x74","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x46\x69\x65\x6C\x64","\x66\x69\x6E\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x73\x70\x72\x65\x61\x64","\x61\x64\x64\x53\x75\x62\x6A\x65\x63\x74","\x73\x75\x62\x6A\x65\x63\x74","\x61\x64\x64\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x61\x64\x64\x46\x69\x65\x6C\x64","\x66\x69\x65\x6C\x64","\x74\x79\x70\x65"];_0x3cb4[0];var _=require(_0x3cb4[1]);var SalesforceConfiguration=require(_0x3cb4[3])[_0x3cb4[2]];var SalesforceField=require(_0x3cb4[3])[_0x3cb4[4]];function handleError(_0x69c6x5,_0x69c6x6){_0x69c6x6= _0x69c6x6|| 500;return function(_0x69c6x7){_0x69c6x5[_0x3cb4[6]](_0x69c6x6)[_0x3cb4[5]](_0x69c6x7)}}function responseWithResult(_0x69c6x5,_0x69c6x6){_0x69c6x6= _0x69c6x6|| 200;return function(_0x69c6x9){if(_0x69c6x9){_0x69c6x5[_0x3cb4[6]](_0x69c6x6)[_0x3cb4[7]](_0x69c6x9)}}}function handleEntityNotFound(_0x69c6x5){return function(_0x69c6x9){if(!_0x69c6x9){_0x69c6x5[_0x3cb4[6]](404)[_0x3cb4[8]]();return null};return _0x69c6x9}}function saveUpdates(_0x69c6xc){return function(_0x69c6x9){return _0x69c6x9[_0x3cb4[10]](_0x69c6xc)[_0x3cb4[9]](function(_0x69c6xd){return _0x69c6xd})}}function removeEntity(_0x69c6x5){return function(_0x69c6x9){if(_0x69c6x9){return _0x69c6x9[_0x3cb4[11]]()[_0x3cb4[9]](function(){_0x69c6x5[_0x3cb4[6]](204)[_0x3cb4[8]]()})}}}exports[_0x3cb4[12]]= function(_0x69c6xf,_0x69c6x5){SalesforceConfiguration[_0x3cb4[15]]({where:_0x69c6xf[_0x3cb4[14]]})[_0x3cb4[9]](responseWithResult(_0x69c6x5))[_0x3cb4[13]](handleError(_0x69c6x5))};exports[_0x3cb4[16]]= function(_0x69c6xf,_0x69c6x5){SalesforceConfiguration[_0x3cb4[22]]({where:{id:_0x69c6xf[_0x3cb4[18]][_0x3cb4[17]]},include:[{model:SalesforceField,as:_0x3cb4[19]},{model:SalesforceField,as:_0x3cb4[20]},{model:SalesforceField,as:_0x3cb4[21]}]})[_0x3cb4[9]](handleEntityNotFound(_0x69c6x5))[_0x3cb4[9]](responseWithResult(_0x69c6x5))[_0x3cb4[13]](handleError(_0x69c6x5))};exports[_0x3cb4[23]]= function(_0x69c6xf,_0x69c6x5){SalesforceConfiguration[_0x3cb4[23]](_0x69c6xf[_0x3cb4[24]])[_0x3cb4[9]](responseWithResult(_0x69c6x5,201))[_0x3cb4[13]](handleError(_0x69c6x5))};exports[_0x3cb4[25]]= function(_0x69c6xf,_0x69c6x5){if(_0x69c6xf[_0x3cb4[24]][_0x3cb4[17]]){delete _0x69c6xf[_0x3cb4[24]][_0x3cb4[17]]};SalesforceConfiguration[_0x3cb4[26]](_0x69c6xf[_0x3cb4[18]][_0x3cb4[17]])[_0x3cb4[9]](handleEntityNotFound(_0x69c6x5))[_0x3cb4[9]](saveUpdates(_0x69c6xf[_0x3cb4[24]]))[_0x3cb4[9]](responseWithResult(_0x69c6x5))[_0x3cb4[13]](handleError(_0x69c6x5))};exports[_0x3cb4[11]]= function(_0x69c6xf,_0x69c6x5){SalesforceConfiguration[_0x3cb4[26]](_0x69c6xf[_0x3cb4[18]][_0x3cb4[17]])[_0x3cb4[9]](handleEntityNotFound(_0x69c6x5))[_0x3cb4[9]](removeEntity(_0x69c6x5))[_0x3cb4[13]](handleError(_0x69c6x5))};exports[_0x3cb4[27]]= function(_0x69c6xf,_0x69c6x5,_0x69c6x10){var _0x69c6x11;SalesforceConfiguration[_0x3cb4[26]](_0x69c6xf[_0x3cb4[18]][_0x3cb4[17]])[_0x3cb4[9]](handleEntityNotFound(_0x69c6x5))[_0x3cb4[9]](function(_0x69c6x14){_0x69c6x11= _0x69c6x14;return SalesforceField[_0x3cb4[23]](_0x69c6xf[_0x3cb4[24]])})[_0x3cb4[9]](function(_0x69c6x13){switch(_0x69c6xf[_0x3cb4[18]][_0x3cb4[35]]){case _0x3cb4[30]:return [_0x69c6x11[_0x3cb4[29]](_0x69c6x13),_0x69c6x13];case _0x3cb4[32]:return [_0x69c6x11[_0x3cb4[31]](_0x69c6x13),_0x69c6x13];case _0x3cb4[34]:return [_0x69c6x11[_0x3cb4[33]](_0x69c6x13),_0x69c6x13]}})[_0x3cb4[28]](function(_0x69c6x12,_0x69c6x13){return _0x69c6x5[_0x3cb4[6]](201)[_0x3cb4[7]](_0x69c6x13)})[_0x3cb4[13]](handleError(_0x69c6x5))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/salesforce/configurations -> index + * POST /api/salesforce/configurations -> create + * GET /api/salesforce/configurations/:id -> show + * PUT /api/salesforce/configurations/:id -> update + * DELETE /api/salesforce/configurations/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); + +var SalesforceConfiguration = require('../../models').SalesforceConfiguration; +var SalesforceField = require('../../models').SalesforceField; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of SalesforceConfigurations +exports.index = function(req, res) { + SalesforceConfiguration.findAll({ + where: req.query + }) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single SalesforceConfiguration from the DB +exports.show = function(req, res) { + SalesforceConfiguration.find({ + where: { + id: req.params.id + }, + include: [{ + model: SalesforceField, + as: 'Subject' + }, { + model: SalesforceField, + as: 'Description' + }, { + model: SalesforceField, + as: 'Field' + }] + }) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new SalesforceConfiguration in the DB +exports.create = function(req, res) { + SalesforceConfiguration.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing SalesforceConfiguration in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + SalesforceConfiguration.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a SalesforceConfiguration from the DB +exports.destroy = function(req, res) { + SalesforceConfiguration.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +exports.addConfigurationField = function(req, res, next) { + // console.log(req.params); + var salesforceConfiguration; + SalesforceConfiguration + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(salesforce_configuration) { + salesforceConfiguration = salesforce_configuration; + return SalesforceField.create(req.body) + }) + .then(function(salesforceField) { + switch (req.params.type) { + case 'subject': + return [salesforceConfiguration.addSubject(salesforceField), salesforceField]; + case 'description': + return [salesforceConfiguration.addDescription(salesforceField), salesforceField]; + case 'field': + return [salesforceConfiguration.addField(salesforceField), salesforceField]; + } + }) + .spread(function(data, salesforceField) { + return res.status(201).json(salesforceField); + }) + .catch(handleError(res)); +}; diff --git a/server/api/salesforce_configuration/salesforce_configuration.events.js b/server/api/salesforce_configuration/salesforce_configuration.events.js index 6ad8aa6..0814fbf 100644 --- a/server/api/salesforce_configuration/salesforce_configuration.events.js +++ b/server/api/salesforce_configuration/salesforce_configuration.events.js @@ -1 +1,36 @@ -var _0x4a5e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x4a5e[0];const EventEmitter=require(_0x4a5e[1]);const SalesforceConfiguration=require(_0x4a5e[3])[_0x4a5e[2]];var SalesforceConfigurationEvents= new EventEmitter();SalesforceConfigurationEvents[_0x4a5e[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x4a5e[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x4a5e[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x4a5e[6]};for(var e in events){var event=events[e];SalesforceConfiguration[_0x4a5e[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x988dx8,_0x988dx9,_0x988dxa){SalesforceConfigurationEvents[_0x4a5e[10]](event+ _0x4a5e[8]+ _0x988dx8[_0x4a5e[9]],_0x988dx8);SalesforceConfigurationEvents[_0x4a5e[10]](event,_0x988dx8);_0x988dxa(null)}}module[_0x4a5e[11]]= SalesforceConfigurationEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SalesforceConfiguration = require('../../models').SalesforceConfiguration; + +var SalesforceConfigurationEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SalesforceConfigurationEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SalesforceConfiguration.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SalesforceConfigurationEvents.emit(event + ':' + doc._id, doc); + SalesforceConfigurationEvents.emit(event, doc); + done(null); + } +} + +module.exports = SalesforceConfigurationEvents; diff --git a/server/api/salesforce_configuration/salesforce_configuration.socket.js b/server/api/salesforce_configuration/salesforce_configuration.socket.js index d04400c..df21994 100644 --- a/server/api/salesforce_configuration/salesforce_configuration.socket.js +++ b/server/api/salesforce_configuration/salesforce_configuration.socket.js @@ -1 +1,32 @@ -var _0x4e95=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x4e95[0];const SalesforceConfigurationEvents=require(_0x4e95[1]);var events=[_0x4e95[2],_0x4e95[3]];exports[_0x4e95[4]]= function(_0x4161x3){for(var _0x4161x4=0,_0x4161x5=events[_0x4e95[5]];_0x4161x4< _0x4161x5;_0x4161x4++){var _0x4161x6=events[_0x4161x4];var _0x4161x7=createListener(_0x4e95[6]+ _0x4161x6,_0x4161x3);SalesforceConfigurationEvents[_0x4e95[7]](_0x4161x6,_0x4161x7);_0x4161x3[_0x4e95[7]](_0x4e95[8],removeListener(_0x4161x6,_0x4161x7))}};function createListener(_0x4161x6,_0x4161x3){return function(_0x4161x9){_0x4161x3[_0x4e95[9]](_0x4161x6,_0x4161x9)}}function removeListener(_0x4161x6,_0x4161x7){return function(){SalesforceConfigurationEvents[_0x4e95[10]](_0x4161x6,_0x4161x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SalesforceConfigurationEvents = require('./salesforce_configuration.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('salesforce_configuration:' + event, socket); + + SalesforceConfigurationEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SalesforceConfigurationEvents.removeListener(event, listener); + }; +} diff --git a/server/api/salesforce_field/index.js b/server/api/salesforce_field/index.js index 203c058..2dd2a9d 100644 --- a/server/api/salesforce_field/index.js +++ b/server/api/salesforce_field/index.js @@ -1 +1,17 @@ -var _0x95ed=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x95ed[0];var express=require(_0x95ed[1]);var auth=require(_0x95ed[2]);var controller=require(_0x95ed[3]);var router=express.Router();router[_0x95ed[7]](_0x95ed[4],auth[_0x95ed[5]](),controller[_0x95ed[6]]);router[_0x95ed[7]](_0x95ed[8],auth[_0x95ed[5]](),auth[_0x95ed[10]]([19],[_0x95ed[9]]),controller[_0x95ed[11]]);router[_0x95ed[13]](_0x95ed[4],auth[_0x95ed[5]](),auth[_0x95ed[10]]([19],[_0x95ed[9]]),controller[_0x95ed[12]]);router[_0x95ed[15]](_0x95ed[8],auth[_0x95ed[5]](),auth[_0x95ed[10]]([19],[_0x95ed[9]]),controller[_0x95ed[14]]);router[_0x95ed[17]](_0x95ed[8],auth[_0x95ed[5]](),auth[_0x95ed[10]]([19],[_0x95ed[9]]),controller[_0x95ed[16]]);module[_0x95ed[18]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./salesforce_field.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); + +router.get('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.update); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroy); + + +module.exports = router; diff --git a/server/api/salesforce_field/salesforce_field.controller.js b/server/api/salesforce_field/salesforce_field.controller.js index bf56b6b..bab61d7 100644 --- a/server/api/salesforce_field/salesforce_field.controller.js +++ b/server/api/salesforce_field/salesforce_field.controller.js @@ -1 +1,104 @@ -var _0xbee1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0xbee1[0];var _=require(_0xbee1[1]);var SalesforceField=require(_0xbee1[3])[_0xbee1[2]];function handleError(_0xc96ax4,_0xc96ax5){_0xc96ax5= _0xc96ax5|| 500;return function(_0xc96ax6){_0xc96ax4[_0xbee1[5]](_0xc96ax5)[_0xbee1[4]](_0xc96ax6)}}function responseWithResult(_0xc96ax4,_0xc96ax5){_0xc96ax5= _0xc96ax5|| 200;return function(_0xc96ax8){if(_0xc96ax8){_0xc96ax4[_0xbee1[5]](_0xc96ax5)[_0xbee1[6]](_0xc96ax8)}}}function handleEntityNotFound(_0xc96ax4){return function(_0xc96ax8){if(!_0xc96ax8){_0xc96ax4[_0xbee1[5]](404)[_0xbee1[7]]();return null};return _0xc96ax8}}function saveUpdates(_0xc96axb){return function(_0xc96ax8){return _0xc96ax8[_0xbee1[9]](_0xc96axb)[_0xbee1[8]](function(_0xc96axc){return _0xc96axc})}}function removeEntity(_0xc96ax4){return function(_0xc96ax8){if(_0xc96ax8){return _0xc96ax8[_0xbee1[10]]()[_0xbee1[8]](function(){_0xc96ax4[_0xbee1[5]](204)[_0xbee1[7]]()})}}}exports[_0xbee1[11]]= function(_0xc96axe,_0xc96ax4){SalesforceField[_0xbee1[13]]()[_0xbee1[8]](responseWithResult(_0xc96ax4))[_0xbee1[12]](handleError(_0xc96ax4))};exports[_0xbee1[14]]= function(_0xc96axe,_0xc96ax4){SalesforceField[_0xbee1[17]](_0xc96axe[_0xbee1[16]][_0xbee1[15]])[_0xbee1[8]](handleEntityNotFound(_0xc96ax4))[_0xbee1[8]](responseWithResult(_0xc96ax4))[_0xbee1[12]](handleError(_0xc96ax4))};exports[_0xbee1[18]]= function(_0xc96axe,_0xc96ax4){SalesforceField[_0xbee1[18]](_0xc96axe[_0xbee1[19]])[_0xbee1[8]](responseWithResult(_0xc96ax4,201))[_0xbee1[12]](handleError(_0xc96ax4))};exports[_0xbee1[20]]= function(_0xc96axe,_0xc96ax4){if(_0xc96axe[_0xbee1[19]][_0xbee1[15]]){delete _0xc96axe[_0xbee1[19]][_0xbee1[15]]};SalesforceField[_0xbee1[17]](_0xc96axe[_0xbee1[16]][_0xbee1[15]])[_0xbee1[8]](handleEntityNotFound(_0xc96ax4))[_0xbee1[8]](saveUpdates(_0xc96axe[_0xbee1[19]]))[_0xbee1[8]](responseWithResult(_0xc96ax4))[_0xbee1[12]](handleError(_0xc96ax4))};exports[_0xbee1[10]]= function(_0xc96axe,_0xc96ax4){SalesforceField[_0xbee1[17]](_0xc96axe[_0xbee1[16]][_0xbee1[15]])[_0xbee1[8]](handleEntityNotFound(_0xc96ax4))[_0xbee1[8]](removeEntity(_0xc96ax4))[_0xbee1[12]](handleError(_0xc96ax4))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/salesforce/fields -> index + * POST /api/salesforce/fields -> create + * GET /api/salesforce/fields/:id -> show + * PUT /api/salesforce/fields/:id -> update + * DELETE /api/salesforce/fields/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); + +var SalesforceField = require('../../models').SalesforceField; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of SalesforceFields +exports.index = function(req, res) { + SalesforceField.findAll() + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single SalesforceField from the DB +exports.show = function(req, res) { + SalesforceField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new SalesforceField in the DB +exports.create = function(req, res) { + SalesforceField.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing SalesforceField in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + SalesforceField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a SalesforceField from the DB +exports.destroy = function(req, res) { + SalesforceField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} diff --git a/server/api/salesforce_field/salesforce_field.events.js b/server/api/salesforce_field/salesforce_field.events.js index 3f3055b..44a66ad 100644 --- a/server/api/salesforce_field/salesforce_field.events.js +++ b/server/api/salesforce_field/salesforce_field.events.js @@ -1 +1,36 @@ -var _0x2d27=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x2d27[0];const EventEmitter=require(_0x2d27[1]);const SalesforceField=require(_0x2d27[3])[_0x2d27[2]];var SalesforceFieldEvents= new EventEmitter();SalesforceFieldEvents[_0x2d27[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x2d27[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x2d27[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x2d27[6]};for(var e in events){var event=events[e];SalesforceField[_0x2d27[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x73acx8,_0x73acx9,_0x73acxa){SalesforceFieldEvents[_0x2d27[10]](event+ _0x2d27[8]+ _0x73acx8[_0x2d27[9]],_0x73acx8);SalesforceFieldEvents[_0x2d27[10]](event,_0x73acx8);_0x73acxa(null)}}module[_0x2d27[11]]= SalesforceFieldEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SalesforceField = require('../../models').SalesforceField; + +var SalesforceFieldEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SalesforceFieldEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SalesforceField.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SalesforceFieldEvents.emit(event + ':' + doc._id, doc); + SalesforceFieldEvents.emit(event, doc); + done(null); + } +} + +module.exports = SalesforceFieldEvents; diff --git a/server/api/salesforce_field/salesforce_field.socket.js b/server/api/salesforce_field/salesforce_field.socket.js index 7dc8291..e394e5b 100644 --- a/server/api/salesforce_field/salesforce_field.socket.js +++ b/server/api/salesforce_field/salesforce_field.socket.js @@ -1 +1,32 @@ -var _0x7adb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x66\x69\x65\x6C\x64\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x66\x69\x65\x6C\x64\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x7adb[0];const SalesforceFieldEvents=require(_0x7adb[1]);var events=[_0x7adb[2],_0x7adb[3]];exports[_0x7adb[4]]= function(_0xbc3bx3){for(var _0xbc3bx4=0,_0xbc3bx5=events[_0x7adb[5]];_0xbc3bx4< _0xbc3bx5;_0xbc3bx4++){var _0xbc3bx6=events[_0xbc3bx4];var _0xbc3bx7=createListener(_0x7adb[6]+ _0xbc3bx6,_0xbc3bx3);SalesforceFieldEvents[_0x7adb[7]](_0xbc3bx6,_0xbc3bx7);_0xbc3bx3[_0x7adb[7]](_0x7adb[8],removeListener(_0xbc3bx6,_0xbc3bx7))}};function createListener(_0xbc3bx6,_0xbc3bx3){return function(_0xbc3bx9){_0xbc3bx3[_0x7adb[9]](_0xbc3bx6,_0xbc3bx9)}}function removeListener(_0xbc3bx6,_0xbc3bx7){return function(){SalesforceFieldEvents[_0x7adb[10]](_0xbc3bx6,_0xbc3bx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SalesforceFieldEvents = require('./salesforce_field.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('salesforce_field:' + event, socket); + + SalesforceFieldEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SalesforceFieldEvents.removeListener(event, listener); + }; +} diff --git a/server/api/scheduler/index.js b/server/api/scheduler/index.js index 7209478..7dd28ad 100644 --- a/server/api/scheduler/index.js +++ b/server/api/scheduler/index.js @@ -1 +1,19 @@ -var _0x38b3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x63\x68\x65\x64\x75\x6C\x65\x72\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x72\x75\x6E","\x72\x75\x6E\x53\x63\x68\x65\x64\x75\x6C\x65","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x38b3[0];var express=require(_0x38b3[1]);var auth=require(_0x38b3[2]);var controller=require(_0x38b3[3]);var router=express.Router();router[_0x38b3[7]](_0x38b3[4],auth[_0x38b3[5]](),controller[_0x38b3[6]]);router[_0x38b3[7]](_0x38b3[8],auth[_0x38b3[5]](),controller[_0x38b3[9]]);router[_0x38b3[7]](_0x38b3[10],auth[_0x38b3[5]](),controller[_0x38b3[11]]);router[_0x38b3[13]](_0x38b3[4],auth[_0x38b3[5]](),controller[_0x38b3[12]]);router[_0x38b3[15]](_0x38b3[8],auth[_0x38b3[5]](),controller[_0x38b3[14]]);router[_0x38b3[16]](_0x38b3[8],auth[_0x38b3[5]](),controller[_0x38b3[14]]);router[_0x38b3[18]](_0x38b3[8],auth[_0x38b3[5]](),controller[_0x38b3[17]]);module[_0x38b3[19]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./scheduler.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); + +router.get('/:id', auth.isAuthenticated(), controller.show); +router.get('/:id/run', auth.isAuthenticated(), controller.runSchedule); +router.post('/', auth.isAuthenticated(), controller.create); +router.put('/:id', auth.isAuthenticated(), controller.update); +router.patch('/:id', auth.isAuthenticated(), controller.update); +router.delete('/:id', auth.isAuthenticated(), controller.destroy); + + +module.exports = router; diff --git a/server/api/scheduler/scheduler.controller.js b/server/api/scheduler/scheduler.controller.js index 912c99c..f25aa6a 100644 --- a/server/api/scheduler/scheduler.controller.js +++ b/server/api/scheduler/scheduler.controller.js @@ -1 +1,130 @@ -var _0xf585=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x53\x63\x68\x65\x64\x75\x6C\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x73\x63\x68\x65\x64\x75\x6C\x65\x72\x2F\x72\x65\x70\x6F\x72\x74\x73","\x6C\x6F\x67","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x75\x73\x65\x72","\x65\x78\x74\x72\x61\x63\x74\x52\x65\x70\x6F\x72\x74","\x72\x65\x70\x6F\x72\x74","\x74\x79\x70\x65","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x72\x75\x6E\x53\x63\x68\x65\x64\x75\x6C\x65","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0xf585[0];var _=require(_0xf585[1]);var Schedule=require(_0xf585[3])[_0xf585[2]];var MailServerOut=require(_0xf585[3])[_0xf585[4]];var Reports=require(_0xf585[5]);function handleError(_0xfc79x6,_0xfc79x7){_0xfc79x7= _0xfc79x7|| 500;return function(_0xfc79x8){console[_0xf585[6]](_0xfc79x8);_0xfc79x6[_0xf585[8]](_0xfc79x7)[_0xf585[7]](_0xfc79x8)}}function responseWithResult(_0xfc79x6,_0xfc79x7){_0xfc79x7= _0xfc79x7|| 200;return function(_0xfc79xa){if(_0xfc79xa){_0xfc79x6[_0xf585[8]](_0xfc79x7)[_0xf585[9]](_0xfc79xa)}}}function responseWithoutResult(_0xfc79x6,_0xfc79x7){_0xfc79x7= _0xfc79x7|| 200;return function(){_0xfc79x6[_0xf585[10]](_0xfc79x7)}}function handleEntityNotFound(_0xfc79x6){return function(_0xfc79xa){if(!_0xfc79xa){_0xfc79x6[_0xf585[8]](404)[_0xf585[11]]();return null};return _0xfc79xa}}function saveUpdates(_0xfc79xe){return function(_0xfc79xa){return _0xfc79xa[_0xf585[13]](_0xfc79xe)[_0xf585[12]](function(_0xfc79xf){return _0xfc79xf})}}function removeEntity(_0xfc79x6){return function(_0xfc79xa){if(_0xfc79xa){return _0xfc79xa[_0xf585[14]]()[_0xf585[12]](function(){_0xfc79x6[_0xf585[8]](204)[_0xf585[11]]()})}}}function runSchedule(_0xfc79x12){return function(_0xfc79xa){if(_0xfc79xa){switch(_0xfc79xa[_0xf585[18]]){case _0xf585[17]:var _0xfc79x13= new Reports();_0xfc79x13[_0xf585[16]](_0xfc79xa,_0xfc79x12[_0xf585[15]]);break;default:}}}}exports[_0xf585[19]]= function(_0xfc79x12,_0xfc79x6){Schedule[_0xf585[21]]()[_0xf585[12]](responseWithResult(_0xfc79x6))[_0xf585[20]](handleError(_0xfc79x6))};exports[_0xf585[22]]= function(_0xfc79x12,_0xfc79x6){Schedule[_0xf585[25]](_0xfc79x12[_0xf585[24]][_0xf585[23]])[_0xf585[12]](handleEntityNotFound(_0xfc79x6))[_0xf585[12]](responseWithResult(_0xfc79x6))[_0xf585[20]](handleError(_0xfc79x6))};exports[_0xf585[26]]= function(_0xfc79x12,_0xfc79x6){Schedule[_0xf585[25]](_0xfc79x12[_0xf585[24]][_0xf585[23]],{include:[MailServerOut]})[_0xf585[12]](handleEntityNotFound(_0xfc79x6))[_0xf585[12]](runSchedule(_0xfc79x12))[_0xf585[12]](responseWithoutResult(_0xfc79x6))[_0xf585[20]](handleError(_0xfc79x6))};exports[_0xf585[27]]= function(_0xfc79x12,_0xfc79x6){Schedule[_0xf585[27]](_0xfc79x12[_0xf585[28]])[_0xf585[12]](responseWithResult(_0xfc79x6,201))[_0xf585[20]](handleError(_0xfc79x6))};exports[_0xf585[29]]= function(_0xfc79x12,_0xfc79x6){if(_0xfc79x12[_0xf585[28]][_0xf585[23]]){delete _0xfc79x12[_0xf585[28]][_0xf585[23]]};Schedule[_0xf585[25]](_0xfc79x12[_0xf585[24]][_0xf585[23]])[_0xf585[12]](handleEntityNotFound(_0xfc79x6))[_0xf585[12]](saveUpdates(_0xfc79x12[_0xf585[28]]))[_0xf585[12]](responseWithResult(_0xfc79x6))[_0xf585[20]](handleError(_0xfc79x6))};exports[_0xf585[14]]= function(_0xfc79x12,_0xfc79x6){Schedule[_0xf585[25]](_0xfc79x12[_0xf585[24]][_0xf585[23]])[_0xf585[12]](handleEntityNotFound(_0xfc79x6))[_0xf585[12]](removeEntity(_0xfc79x6))[_0xf585[20]](handleError(_0xfc79x6))} \ No newline at end of file +'use strict'; + + +var _ = require('lodash'); + +var Schedule = require('../../models').Schedule; +var MailServerOut = require('../../models').MailServerOut; +var Reports = require('../../config/scheduler/reports'); + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + console.log(err); + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 200; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +function runSchedule(req) { + return function(entity) { + if (entity) { + switch (entity.type) { + case 'report': + var scheduler = new Reports(); + scheduler.extractReport(entity, req.user) + break; + default: + } + } + } +} + +// Gets a list of Schedules +exports.index = function(req, res) { + Schedule.findAndCountAll() + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single Schedule from the DB +exports.show = function(req, res) { + Schedule.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Execute single Schedule from the DB +exports.runSchedule = function(req, res) { + Schedule.findById(req.params.id, { + include: [MailServerOut] + }) + .then(handleEntityNotFound(res)) + .then(runSchedule(req)) + .then(responseWithoutResult(res)) + .catch(handleError(res)); +} + +// Creates a new Schedule in the DB +exports.create = function(req, res) { + Schedule.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing Schedule in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + Schedule.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a Schedule from the DB +exports.destroy = function(req, res) { + Schedule.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} diff --git a/server/api/scheduler/scheduler.events.js b/server/api/scheduler/scheduler.events.js index 1e71ffd..7718bf6 100644 --- a/server/api/scheduler/scheduler.events.js +++ b/server/api/scheduler/scheduler.events.js @@ -1 +1,36 @@ -var _0xf698=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x63\x68\x65\x64\x75\x6C\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xf698[0];const EventEmitter=require(_0xf698[1]);const Schedule=require(_0xf698[3])[_0xf698[2]];var SchedulerEvents= new EventEmitter();SchedulerEvents[_0xf698[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xf698[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xf698[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xf698[6]};for(var e in events){var event=events[e];Schedule[_0xf698[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x2ce2x8,_0x2ce2x9,_0x2ce2xa){SchedulerEvents[_0xf698[10]](event+ _0xf698[8]+ _0x2ce2x8[_0xf698[9]],_0x2ce2x8);SchedulerEvents[_0xf698[10]](event,_0x2ce2x8);_0x2ce2xa(null)}}module[_0xf698[11]]= SchedulerEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Schedule = require('../../models').Schedule; + +var SchedulerEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SchedulerEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Schedule.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SchedulerEvents.emit(event + ':' + doc._id, doc); + SchedulerEvents.emit(event, doc); + done(null); + } +} + +module.exports = SchedulerEvents; diff --git a/server/api/scheduler/scheduler.socket.js b/server/api/scheduler/scheduler.socket.js index b1117ec..16264a4 100644 --- a/server/api/scheduler/scheduler.socket.js +++ b/server/api/scheduler/scheduler.socket.js @@ -1 +1,32 @@ -var _0xad4e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x63\x68\x65\x64\x75\x6C\x65\x72\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x63\x68\x65\x64\x75\x6C\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xad4e[0];const SchedulerEvents=require(_0xad4e[1]);var events=[_0xad4e[2],_0xad4e[3],_0xad4e[4]];exports[_0xad4e[5]]= function(_0x3184x3){for(var _0x3184x4=0,_0x3184x5=events[_0xad4e[6]];_0x3184x4< _0x3184x5;_0x3184x4++){var _0x3184x6=events[_0x3184x4];var _0x3184x7=createListener(_0xad4e[7]+ _0x3184x6,_0x3184x3);SchedulerEvents[_0xad4e[8]](_0x3184x6,_0x3184x7);_0x3184x3[_0xad4e[8]](_0xad4e[9],removeListener(_0x3184x6,_0x3184x7))}};function createListener(_0x3184x6,_0x3184x3){return function(_0x3184x9){_0x3184x3[_0xad4e[10]](_0x3184x6,_0x3184x9)}}function removeListener(_0x3184x6,_0x3184x7){return function(){SchedulerEvents[_0xad4e[11]](_0x3184x6,_0x3184x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SchedulerEvents = require('./scheduler.events'); + +// Model events to emit +var events = ['save', 'update', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('schedule:' + event, socket); + + SchedulerEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SchedulerEvents.removeListener(event, listener); + }; +} diff --git a/server/api/setting/index.js b/server/api/setting/index.js index 7a6cd56..cbca952 100644 --- a/server/api/setting/index.js +++ b/server/api/setting/index.js @@ -1 +1,28 @@ -var _0x9e48=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x73\x65\x74\x74\x69\x6E\x67\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x52\x6F\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x73\x6D\x74\x70","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x73\x68\x6F\x77\x43\x75\x73\x74\x6F\x6D","\x2F\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x67\x65\x74\x49\x6E\x74\x65\x72\x6E\x61\x6C","\x2F\x6D\x61\x69\x6C\x62\x6F\x78","\x67\x65\x74\x4D\x61\x69\x6C\x62\x6F\x78","\x2F\x6C\x6F\x67\x6F\x2F\x6D\x61\x69\x6E\x2F\x3A\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x67\x65\x74\x4C\x6F\x67\x6F","\x2F\x6C\x6F\x67\x6F\x2F\x6C\x6F\x67\x69\x6E\x2F\x3A\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x67\x65\x74\x4C\x6F\x67\x69\x6E\x4C\x6F\x67\x6F","\x2F\x73\x79\x73\x74\x65\x6D","\x73\x74\x61\x74\x73","\x2F\x6C\x6F\x67\x73","\x6C\x6F\x67\x73","\x2F\x69\x6E\x66\x6F","\x67\x65\x74\x49\x6E\x66\x6F","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x61\x73\x74\x65\x72\x69\x73\x6B","\x61\x73\x74\x65\x72\x69\x73\x6B\x43\x6F\x6D\x6D\x61\x6E\x64","\x2F\x6C\x6F\x67\x6F\x2F\x6D\x61\x69\x6E","\x63\x68\x61\x6E\x67\x65\x4C\x6F\x67\x6F","\x2F\x6C\x6F\x67\x6F\x2F\x6C\x6F\x67\x69\x6E","\x63\x68\x61\x6E\x67\x65\x4C\x6F\x67\x69\x6E\x4C\x6F\x67\x6F","\x63\x72\x65\x61\x74\x65\x53\x6D\x74\x70","\x2F\x73\x6D\x74\x70\x2F\x3A\x69\x64","\x75\x70\x64\x61\x74\x65\x53\x6D\x74\x70","\x70\x75\x74","\x75\x70\x64\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x9e48[0];var express=require(_0x9e48[1]);var controller=require(_0x9e48[2]);var auth=require(_0x9e48[3]);var router=express.Router();router[_0x9e48[9]](_0x9e48[4],auth[_0x9e48[5]](),auth[_0x9e48[7]](_0x9e48[6]),controller[_0x9e48[8]]);router[_0x9e48[9]](_0x9e48[10],auth[_0x9e48[5]](),auth[_0x9e48[12]]([9],[_0x9e48[6],_0x9e48[11]]),controller[_0x9e48[13]]);router[_0x9e48[9]](_0x9e48[14],auth[_0x9e48[5]](),auth[_0x9e48[7]](_0x9e48[6]),controller[_0x9e48[15]]);router[_0x9e48[9]](_0x9e48[16],auth[_0x9e48[5]](),auth[_0x9e48[7]](_0x9e48[6]),controller[_0x9e48[17]]);router[_0x9e48[9]](_0x9e48[18],controller[_0x9e48[19]]);router[_0x9e48[9]](_0x9e48[20],controller[_0x9e48[21]]);router[_0x9e48[9]](_0x9e48[22],auth[_0x9e48[5]](),auth[_0x9e48[7]](_0x9e48[6]),controller[_0x9e48[23]]);router[_0x9e48[9]](_0x9e48[24],auth[_0x9e48[5]](),auth[_0x9e48[7]](_0x9e48[6]),controller[_0x9e48[25]]);router[_0x9e48[9]](_0x9e48[26],controller[_0x9e48[27]]);router[_0x9e48[9]](_0x9e48[28],auth[_0x9e48[5]](),controller[_0x9e48[29]]);router[_0x9e48[31]](_0x9e48[4],auth[_0x9e48[5]](),auth[_0x9e48[7]](_0x9e48[6]),controller[_0x9e48[30]]);router[_0x9e48[31]](_0x9e48[32],auth[_0x9e48[5]](),auth[_0x9e48[7]](_0x9e48[6]),controller[_0x9e48[33]]);router[_0x9e48[31]](_0x9e48[34],auth[_0x9e48[5]](),auth[_0x9e48[7]](_0x9e48[6]),controller[_0x9e48[35]]);router[_0x9e48[31]](_0x9e48[36],auth[_0x9e48[5]](),auth[_0x9e48[7]](_0x9e48[6]),controller[_0x9e48[37]]);router[_0x9e48[31]](_0x9e48[10],auth[_0x9e48[5]](),auth[_0x9e48[7]](_0x9e48[6]),controller[_0x9e48[38]]);router[_0x9e48[41]](_0x9e48[39],auth[_0x9e48[5]](),auth[_0x9e48[7]](_0x9e48[6]),controller[_0x9e48[40]]);router[_0x9e48[41]](_0x9e48[28],auth[_0x9e48[5]](),auth[_0x9e48[7]](_0x9e48[6]),controller[_0x9e48[42]]);router[_0x9e48[44]](_0x9e48[28],auth[_0x9e48[5]](),auth[_0x9e48[7]](_0x9e48[6]),controller[_0x9e48[43]]);module[_0x9e48[45]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./setting.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.index); +router.get('/smtp', auth.isAuthenticated(), auth.hasModule([9], ['admin', 'agent']), controller.showCustom); +router.get('/internal', auth.isAuthenticated(), auth.hasRole('admin'), controller.getInternal); +router.get('/mailbox', auth.isAuthenticated(), auth.hasRole('admin'), controller.getMailbox); +router.get('/logo/main/:filename', controller.getLogo); +router.get('/logo/login/:filename', controller.getLoginLogo); +router.get('/system', auth.isAuthenticated(), auth.hasRole('admin'), controller.stats); +router.get('/logs', auth.isAuthenticated(), auth.hasRole('admin'), controller.logs); +router.get('/info', controller.getInfo); +router.get('/:id', auth.isAuthenticated(), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.create); +router.post('/asterisk', auth.isAuthenticated(), auth.hasRole('admin'), controller.asteriskCommand); +router.post('/logo/main', auth.isAuthenticated(), auth.hasRole('admin'), controller.changeLogo); +router.post('/logo/login', auth.isAuthenticated(), auth.hasRole('admin'), controller.changeLoginLogo); +router.post('/smtp', auth.isAuthenticated(), auth.hasRole('admin'), controller.createSmtp); +router.put('/smtp/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.updateSmtp); +router.put('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.update); +router.delete('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.destroy); + +module.exports = router; diff --git a/server/api/setting/setting.controller.js b/server/api/setting/setting.controller.js index f99f146..84f5d17 100644 --- a/server/api/setting/setting.controller.js +++ b/server/api/setting/setting.controller.js @@ -1 +1,417 @@ -var _0x7e3b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x53\x65\x74\x74\x69\x6E\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x74\x6F\x6F\x6C\x73\x2F\x73\x79\x73\x74\x65\x6D","\x55\x73\x65\x72","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x62\x6C\x75\x65\x62\x69\x72\x64","\x75\x70\x6C\x6F\x61\x64\x2D\x66\x69\x6C\x65","\x70\x61\x74\x68","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x66\x73","\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x74\x61\x74\x73","\x6C\x6F\x67","\x63\x68\x65\x63\x6B\x53\x74\x61\x74\x75\x73","\x61\x6C\x6C","\x61\x73\x74\x65\x72\x69\x73\x6B\x43\x6F\x6D\x6D\x61\x6E\x64","\x63\x6F\x6E\x73\x6F\x6C\x65","\x74\x72\x69\x6D","\x63\x6F\x6D\x6D\x61\x6E\x64","\x62\x6F\x64\x79","\x25\x73\x3A\x25\x73","\x72\x6F\x6C\x65","\x75\x73\x65\x72","\x6E\x61\x6D\x65","\x66\x6F\x72\x6D\x61\x74","\x61\x6D\x69","\x6C\x6F\x63\x61\x6C\x73","\x61\x70\x70","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x6C\x6F\x67\x73","","\x72\x65\x61\x64\x46\x69\x6C\x65","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x65\x78\x69\x73\x74\x73","\x6C\x6F\x67\x73\x20\x65\x72\x72\x6F\x72\x3A","\x6D\x65\x73\x73\x61\x67\x65","\x6F\x75\x74\x70\x75\x74","\x4E\x6F\x20\x6F\x75\x74\x70\x75\x74\x20\x6C\x6F\x67\x20\x66\x69\x6C\x65\x20\x66\x6F\x75\x6E\x64\x21","\x2F\x76\x61\x72\x2F\x6C\x6F\x67\x2F\x78\x63\x61\x6C\x6C\x79\x2F\x6D\x6F\x74\x69\x6F\x6E\x2D\x6F\x75\x74\x2E\x6C\x6F\x67","\x75\x74\x66\x38","\x65\x72\x72\x6F\x72\x73","\x4E\x6F\x20\x65\x72\x72\x6F\x72\x20\x6C\x6F\x67\x20\x66\x69\x6C\x65\x20\x66\x6F\x75\x6E\x64\x21","\x2F\x76\x61\x72\x2F\x6C\x6F\x67\x2F\x78\x63\x61\x6C\x6C\x79\x2F\x6D\x6F\x74\x69\x6F\x6E\x2D\x65\x72\x72\x2E\x6C\x6F\x67","\x63\x68\x61\x6E\x67\x65\x4C\x6F\x67\x6F","\x6C\x6F\x67\x6F","\x63\x68\x61\x6E\x67\x65\x4C\x6F\x67\x69\x6E\x4C\x6F\x67\x6F","\x6C\x6F\x67\x69\x6E\x4C\x6F\x67\x6F","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x69\x6D\x61\x67\x65\x73","\x6A\x6F\x69\x6E","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x65\x78\x74\x6E\x61\x6D\x65","\x4D\x61\x78\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x66\x69\x6C\x65\x73\x20\x75\x70\x6C\x6F\x61\x64\x20\x65\x78\x63\x65\x65\x64\x65\x64","\x4F\x6E\x6C\x79\x20\x6A\x70\x65\x67\x20\x61\x6E\x64\x20\x70\x6E\x67\x20\x66\x6F\x72\x6D\x61\x74\x20\x61\x63\x63\x65\x70\x74\x65\x64","\x49\x6E\x76\x61\x6C\x69\x64\x20\x72\x65\x71\x75\x65\x73\x74","\x65\x6E\x64","\x66\x69\x6C\x65","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x6F\x6E","\x65\x72\x72\x6F\x72","\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x20\x55\x70\x6C\x6F\x61\x64\x20\x65\x72\x72\x6F\x72\x20\x3A","\x70\x61\x72\x73\x65","\x67\x65\x74\x4C\x6F\x67\x6F","\x6C\x6F\x67\x6F\x2E\x70\x6E\x67","\x67\x65\x74\x4C\x6F\x67\x69\x6E\x4C\x6F\x67\x6F","\x6C\x6F\x67\x6F\x2D\x62\x69\x67\x2E\x70\x6E\x67","\x70\x61\x72\x61\x6D\x73","\x64\x65\x66\x61\x75\x6C\x74","\x73\x65\x6E\x64\x46\x69\x6C\x65","\x67\x65\x74\x49\x6E\x74\x65\x72\x6E\x61\x6C","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x6D\x61\x70","\x71\x75\x65\x72\x79","\x76\x61\x6C\x75\x65","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x73\x68\x69\x66\x74","\x66\x69\x6C\x74\x65\x72","\x72\x61\x6E\x67\x65","\x6D\x61\x78","\x6D\x69\x6E\x5F\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x67\x65\x74\x4D\x61\x69\x6C\x62\x6F\x78","\x6D\x61\x69\x6C\x62\x6F\x78","\x6D\x69\x6E\x5F\x6D\x61\x69\x6C\x62\x6F\x78","\x67\x65\x74\x49\x6E\x66\x6F","\x2E\x2E\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x70\x61\x63\x6B\x61\x67\x65\x2E\x6A\x73\x6F\x6E","\x76\x65\x72\x73\x69\x6F\x6E","\x65\x6E\x67\x69\x6E\x65\x73","\x73\x68\x6F\x77","\x69\x64","\x73\x68\x6F\x77\x43\x75\x73\x74\x6F\x6D","\x68\x6F\x73\x74","\x70\x6F\x72\x74","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x73\x73\x6C","\x73\x74\x61\x74\x65","\x73\x6F\x75\x72\x63\x65","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x66\x69\x6E\x64\x4F\x6E\x65","\x63\x72\x65\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x53\x6D\x74\x70","\x75\x70\x64\x61\x74\x65\x53\x6D\x74\x70","\x43\x4F\x4E\x4E\x45\x43\x54\x49\x4E\x47","\x61\x64\x64\x72\x65\x73\x73","\x73\x65\x72\x76\x69\x63\x65","\x73\x69\x67\x6E\x61\x74\x75\x72\x65","\x4C\x69\x73\x74\x49\x64","\x54\x65\x6D\x70\x6C\x61\x74\x65\x49\x64","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x7e3b[0];var _=require(_0x7e3b[1]);var Setting=require(_0x7e3b[3])[_0x7e3b[2]];var system=require(_0x7e3b[4]);var Agent=require(_0x7e3b[3])[_0x7e3b[5]];var VoiceMail=require(_0x7e3b[3])[_0x7e3b[6]];var MailAccount=require(_0x7e3b[3])[_0x7e3b[7]];var MailServerOut=require(_0x7e3b[3])[_0x7e3b[8]];var Promise=require(_0x7e3b[9]);var UploadFile=require(_0x7e3b[10]);var path=require(_0x7e3b[11]);var sequelize=require(_0x7e3b[3])[_0x7e3b[12]];var config=require(_0x7e3b[13]);var sr=require(_0x7e3b[14]);var fs=require(_0x7e3b[15]);var util=require(_0x7e3b[16]);exports[_0x7e3b[17]]= function(_0x189ex10,_0x189ex11){return Setting[_0x7e3b[22]]()[_0x7e3b[21]](function(_0x189ex13){return _0x189ex11[_0x7e3b[20]](200)[_0x7e3b[19]](_0x189ex13)})[_0x7e3b[18]](function(_0x189ex12){return handleError(_0x189ex11,_0x189ex12)})};exports[_0x7e3b[23]]= function(_0x189ex10,_0x189ex11){return Promise[_0x7e3b[26]]([])[_0x7e3b[21]](system[_0x7e3b[25]]())[_0x7e3b[21]](function(_0x189ex14){return _0x189ex11[_0x7e3b[20]](200)[_0x7e3b[19]](_0x189ex14)})[_0x7e3b[18]](function(_0x189ex12){console[_0x7e3b[24]](_0x189ex12);return handleError(_0x189ex11,_0x189ex12)})};exports[_0x7e3b[27]]= function(_0x189ex10,_0x189ex11){_0x189ex10[_0x7e3b[39]][_0x7e3b[38]][_0x7e3b[37]][_0x7e3b[19]]({evt:_0x7e3b[28],command:_0x189ex10[_0x7e3b[31]][_0x7e3b[30]][_0x7e3b[29]](),socket:util[_0x7e3b[36]](_0x7e3b[32],_0x189ex10[_0x7e3b[34]][_0x7e3b[33]],_0x189ex10[_0x7e3b[34]][_0x7e3b[35]])});return _0x189ex11[_0x7e3b[40]](200)};exports[_0x7e3b[41]]= function(_0x189ex10,_0x189ex11){var _0x189ex15={output:_0x7e3b[42],errors:_0x7e3b[42]};var _0x189ex16=Promise[_0x7e3b[44]](fs[_0x7e3b[43]]);var _0x189ex17=Promise[_0x7e3b[44]](fs[_0x7e3b[45]]);return _0x189ex16(_0x7e3b[54],_0x7e3b[51])[_0x7e3b[21]](function(_0x189ex1a){_0x189ex15[_0x7e3b[52]]= _0x189ex1a})[_0x7e3b[18]](function(_0x189ex12){_0x189ex15[_0x7e3b[52]]= _0x7e3b[53]})[_0x7e3b[21]](function(){return _0x189ex16(_0x7e3b[50],_0x7e3b[51])})[_0x7e3b[21]](function(_0x189ex19){_0x189ex15[_0x7e3b[48]]= _0x189ex19})[_0x7e3b[18]](function(_0x189ex12){_0x189ex15[_0x7e3b[48]]= _0x7e3b[49]})[_0x7e3b[21]](function(_0x189ex18){return _0x189ex11[_0x7e3b[20]](200)[_0x7e3b[19]](_0x189ex15)})[_0x7e3b[18]](function(_0x189ex12){console[_0x7e3b[24]](_0x7e3b[46],_0x189ex12[_0x7e3b[47]]);return handleError(_0x189ex11,_0x189ex12)})};exports[_0x7e3b[55]]= function(_0x189ex10,_0x189ex11){changeLogo(_0x189ex10,_0x189ex11,_0x7e3b[56])};exports[_0x7e3b[57]]= function(_0x189ex10,_0x189ex11){changeLogo(_0x189ex10,_0x189ex11,_0x7e3b[58])};function changeLogo(_0x189ex10,_0x189ex11,_0x189ex1c){var _0x189ex1d= new UploadFile({dest:path[_0x7e3b[63]](config[_0x7e3b[59]],_0x7e3b[60],_0x7e3b[61],_0x7e3b[62]),maxNumberOfFiles:1,minNumberOfFiles:0,acceptFileTypes:/(\.|\/)(jpeg|png)$/i,rename:function(_0x189ex1e,_0x189ex1f){return sr()+ path[_0x7e3b[65]](_0x189ex1f[_0x7e3b[64]])},messages:{maxNumberOfFiles:_0x7e3b[66],acceptFileTypes:_0x7e3b[67],invalidRequest:_0x7e3b[68]}});_0x189ex1d[_0x7e3b[74]](_0x7e3b[69],function(_0x189ex20,_0x189ex21){if(!_0x189ex21[_0x7e3b[70]][_0x7e3b[64]]){return _0x189ex11[_0x7e3b[20]](500)[_0x7e3b[19]](_0x189ex1d)};return sequelize[_0x7e3b[73]](function(_0x189ex22){return Setting[_0x7e3b[72]](1)[_0x7e3b[21]](function(_0x189ex13){if(!_0x189ex13){return _0x189ex11[_0x7e3b[40]](404)};var _0x189ex24={};_0x189ex24[_0x189ex1c]= _0x189ex21[_0x7e3b[70]][_0x7e3b[64]];return _0x189ex13[_0x7e3b[71]](_0x189ex24,{transaction:_0x189ex22})})[_0x7e3b[21]](function(_0x189ex23){return _0x189ex11[_0x7e3b[20]](200)[_0x7e3b[19]](_0x189ex23)})})[_0x7e3b[18]](function(_0x189ex12){return handleError(_0x189ex11,_0x189ex12)})});_0x189ex1d[_0x7e3b[74]](_0x7e3b[75],function(_0x189ex12){console[_0x7e3b[24]](_0x7e3b[76],_0x189ex12);return handleError(_0x189ex11,_0x189ex12)});_0x189ex1d[_0x7e3b[77]](_0x189ex10)}exports[_0x7e3b[78]]= function(_0x189ex10,_0x189ex11){getLogo(_0x189ex10,_0x189ex11,_0x7e3b[79])};exports[_0x7e3b[80]]= function(_0x189ex10,_0x189ex11){getLogo(_0x189ex10,_0x189ex11,_0x7e3b[81])};function getLogo(_0x189ex10,_0x189ex11,_0x189ex26){var _0x189ex27=path[_0x7e3b[63]](config[_0x7e3b[59]],_0x7e3b[60],_0x7e3b[61],_0x7e3b[62],_0x189ex10[_0x7e3b[82]][_0x7e3b[64]]);fs[_0x7e3b[45]](_0x189ex27,function(_0x189ex17){if(!_0x189ex17){_0x189ex27= path[_0x7e3b[63]](config[_0x7e3b[59]],_0x7e3b[60],_0x7e3b[61],_0x7e3b[62],_0x7e3b[83],_0x189ex26)};return _0x189ex11[_0x7e3b[84]](_0x189ex27)})}exports[_0x7e3b[85]]= function(_0x189ex10,_0x189ex11){var _0x189ex28;return Setting[_0x7e3b[72]](1)[_0x7e3b[21]](function(_0x189ex13){_0x189ex28= _0x189ex13;return Agent[_0x7e3b[22]]({attributes:[_0x7e3b[86]]})})[_0x7e3b[21]](function(_0x189ex29){var _0x189ex2a=_[_0x7e3b[87]](_0x189ex29,_0x7e3b[86]);var _0x189ex2b={value:0,range:0};var _0x189ex2c;if(_0x189ex10[_0x7e3b[88]][_0x7e3b[86]]){_0x189ex2b[_0x7e3b[89]]= Number(_0x189ex10[_0x7e3b[88]][_0x7e3b[86]]);while(_[_0x7e3b[90]](_0x189ex2a,_0x189ex2b[_0x7e3b[89]])){_0x189ex2b[_0x7e3b[89]]++};_0x189ex2c= _[_0x7e3b[92]](_0x189ex2a,function(_0x189ex2d){return _0x189ex2d> _0x189ex2b[_0x7e3b[89]]})[_0x7e3b[91]]();_0x189ex2b[_0x7e3b[93]]= _0x189ex2c- _0x189ex2b[_0x7e3b[89]]}else {var _0x189ex2e=_[_0x7e3b[94]](_0x189ex2a);_0x189ex2b[_0x7e3b[89]]= _0x189ex28[_0x7e3b[95]];if(_0x189ex2e&& _0x189ex2e>= _0x189ex28[_0x7e3b[95]]){while(_[_0x7e3b[90]](_0x189ex2a,_0x189ex2b[_0x7e3b[89]])){_0x189ex2b[_0x7e3b[89]]++};_0x189ex2c= _[_0x7e3b[92]](_0x189ex2a,function(_0x189ex2d){return _0x189ex2d> _0x189ex2b[_0x7e3b[89]]})[_0x7e3b[91]]();_0x189ex2b[_0x7e3b[93]]= _0x189ex2c- _0x189ex2b[_0x7e3b[89]]}};return _0x189ex11[_0x7e3b[20]](200)[_0x7e3b[19]](_0x189ex2b)})[_0x7e3b[18]](function(_0x189ex12){return handleError(_0x189ex11,_0x189ex12)})};exports[_0x7e3b[96]]= function(_0x189ex10,_0x189ex11){var _0x189ex28;return Setting[_0x7e3b[72]](1)[_0x7e3b[21]](function(_0x189ex13){_0x189ex28= _0x189ex13;return VoiceMail[_0x7e3b[22]]({attributes:[_0x7e3b[97]]})})[_0x7e3b[21]](function(_0x189ex2f){var _0x189ex30=_[_0x7e3b[87]](_0x189ex2f,function(_0x189ex2d){return Number(_0x189ex2d[_0x7e3b[97]])});var _0x189ex31={value:0,range:0};var _0x189ex2c;var _0x189ex32=_[_0x7e3b[94]](_0x189ex30);_0x189ex31[_0x7e3b[89]]= _0x189ex28[_0x7e3b[98]];if(_0x189ex32&& _0x189ex32>= _0x189ex28[_0x7e3b[98]]){while(_[_0x7e3b[90]](_0x189ex30,_0x189ex31[_0x7e3b[89]])){_0x189ex31[_0x7e3b[89]]++};_0x189ex2c= _[_0x7e3b[92]](_0x189ex30,function(_0x189ex2d){return _0x189ex2d> _0x189ex31[_0x7e3b[89]]})[_0x7e3b[91]]();_0x189ex31[_0x7e3b[93]]= _0x189ex2c- _0x189ex31[_0x7e3b[89]]};return _0x189ex11[_0x7e3b[20]](200)[_0x7e3b[19]](_0x189ex31)})[_0x7e3b[18]](function(_0x189ex12){console[_0x7e3b[24]](_0x189ex12);return handleError(_0x189ex11,_0x189ex12)})};exports[_0x7e3b[99]]= function(_0x189ex10,_0x189ex11){var _0x189ex33=require(_0x7e3b[100]);return _0x189ex11[_0x7e3b[20]](200)[_0x7e3b[19]]({name:_0x189ex33[_0x7e3b[35]],version:_0x189ex33[_0x7e3b[101]],engines:_0x189ex33[_0x7e3b[102]]})};exports[_0x7e3b[103]]= function(_0x189ex10,_0x189ex11){return Setting[_0x7e3b[72]](_0x189ex10[_0x7e3b[82]][_0x7e3b[104]])[_0x7e3b[21]](function(_0x189ex34){if(!_0x189ex34){return _0x189ex11[_0x7e3b[40]](404)};return _0x189ex11[_0x7e3b[19]](_0x189ex34)})[_0x7e3b[18]](function(_0x189ex12){return handleError(_0x189ex11,_0x189ex12)})};exports[_0x7e3b[105]]= function(_0x189ex10,_0x189ex11,_0x189ex35){return MailAccount[_0x7e3b[114]]({where:{custom:true},include:[{model:MailServerOut,attributes:[_0x7e3b[104],_0x7e3b[106],_0x7e3b[107],_0x7e3b[108],_0x7e3b[109],_0x7e3b[110],_0x7e3b[111],_0x7e3b[112],_0x7e3b[113]]}]})[_0x7e3b[21]](function(_0x189ex36){if(!_0x189ex36){return _0x189ex11[_0x7e3b[40]](404)};return _0x189ex11[_0x7e3b[19]](_0x189ex36)})[_0x7e3b[18]](function(_0x189ex12){return handleError(_0x189ex11,_0x189ex12)})};exports[_0x7e3b[115]]= function(_0x189ex10,_0x189ex11){return Setting[_0x7e3b[115]](_0x189ex10[_0x7e3b[31]])[_0x7e3b[21]](function(_0x189ex34){return _0x189ex11[_0x7e3b[20]](201)[_0x7e3b[19]](_0x189ex34)})[_0x7e3b[18]](function(_0x189ex12){return handleError(_0x189ex11,_0x189ex12)})};exports[_0x7e3b[116]]= function(_0x189ex10,_0x189ex11,_0x189ex35){return MailAccount[_0x7e3b[115]](_0x189ex10[_0x7e3b[31]],{include:[{model:MailServerOut}]})[_0x7e3b[21]](function(_0x189ex36){return _0x189ex11[_0x7e3b[20]](201)[_0x7e3b[19]](_0x189ex36)})[_0x7e3b[18]](function(_0x189ex12){return handleError(_0x189ex11,_0x189ex12)})};exports[_0x7e3b[117]]= function(_0x189ex10,_0x189ex11){var _0x189ex37;return MailAccount[_0x7e3b[72]](_0x189ex10[_0x7e3b[82]][_0x7e3b[104]])[_0x7e3b[21]](function(_0x189ex36){_0x189ex37= _0x189ex36;return _0x189ex37[_0x7e3b[71]]({name:_0x189ex10[_0x7e3b[31]][_0x7e3b[35]],address:_0x189ex10[_0x7e3b[31]][_0x7e3b[119]],service:_0x189ex10[_0x7e3b[31]][_0x7e3b[120]],signature:_0x189ex10[_0x7e3b[31]][_0x7e3b[121]],ListId:_0x189ex10[_0x7e3b[31]][_0x7e3b[122]],TemplateId:_0x189ex10[_0x7e3b[31]][_0x7e3b[123]]})})[_0x7e3b[21]](function(_0x189ex36){if(_0x189ex10[_0x7e3b[31]][_0x7e3b[8]]){_0x189ex10[_0x7e3b[31]][_0x7e3b[8]][_0x7e3b[111]]= _0x7e3b[118];_0x189ex10[_0x7e3b[31]][_0x7e3b[8]][_0x7e3b[112]]= null;return MailServerOut[_0x7e3b[71]](_0x189ex10[_0x7e3b[31]].MailServerOut,{where:{id:_0x189ex10[_0x7e3b[31]][_0x7e3b[8]][_0x7e3b[104]]},individualHooks:true})}})[_0x7e3b[21]](function(_0x189ex38){return _0x189ex11[_0x7e3b[40]](200)})[_0x7e3b[18]](function(_0x189ex12){return handleError(_0x189ex11,_0x189ex12)})};exports[_0x7e3b[71]]= function(_0x189ex10,_0x189ex11){if(_0x189ex10[_0x7e3b[31]][_0x7e3b[104]]){delete _0x189ex10[_0x7e3b[31]][_0x7e3b[104]]};return Setting[_0x7e3b[72]](_0x189ex10[_0x7e3b[82]][_0x7e3b[104]])[_0x7e3b[21]](function(_0x189ex34){if(!_0x189ex34){return _0x189ex11[_0x7e3b[40]](404)};var _0x189ex39=_[_0x7e3b[124]](_0x189ex34,_0x189ex10[_0x7e3b[31]]);return _0x189ex39[_0x7e3b[125]]()})[_0x7e3b[21]](function(_0x189ex34){return _0x189ex11[_0x7e3b[20]](200)[_0x7e3b[19]](_0x189ex34)})[_0x7e3b[18]](function(_0x189ex12){return handleError(_0x189ex11,_0x189ex12)})};exports[_0x7e3b[126]]= function(_0x189ex10,_0x189ex11){return Setting[_0x7e3b[72]](_0x189ex10[_0x7e3b[82]][_0x7e3b[104]])[_0x7e3b[21]](function(_0x189ex34){if(!_0x189ex34){return _0x189ex11[_0x7e3b[40]](404)};return _0x189ex34[_0x7e3b[126]]()})[_0x7e3b[21]](function(){return _0x189ex11[_0x7e3b[40]](204)})[_0x7e3b[18]](function(_0x189ex12){return handleError(_0x189ex11,_0x189ex12)})};function handleError(_0x189ex11,_0x189ex12){return _0x189ex11[_0x7e3b[20]](500)[_0x7e3b[19]](_0x189ex12)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Setting = require('../../models').Setting; +var system = require('../../config/tools/system'); +var Agent = require('../../models').User; +var VoiceMail = require('../../models').VoiceVoicemail; +var MailAccount = require('../../models').MailAccount; +var MailServerOut = require('../../models').MailServerOut; +var Promise = require('bluebird'); +var UploadFile = require('upload-file'); +var path = require('path'); +var sequelize = require('../../models').sequelize; +var config = require('../../config/environment'); +var sr = require('simple-random'); +var fs = require('fs'); +var util = require('util'); + +// Get list of settings +exports.index = function(req, res) { + return Setting + .findAll() + .then(function(settings) { + return res.status(200).send(settings); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.stats = function(req, res) { + return Promise + .all([]) + .then(system.checkStatus()) + .then(function(stats) { + return res.status(200).send(stats); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +} + +exports.asteriskCommand = function(req, res) { + req.app.locals.ami.send({ + evt: 'console', + command: req.body.command.trim(), + socket: util.format('%s:%s', req.user.role, req.user.name) + }); + return res.sendStatus(200); +} + +exports.logs = function(req, res) { + var logs = { + output: '', + errors: '' + }; + var readFile = Promise.promisify(fs.readFile); + var exists = Promise.promisify(fs.exists); + return readFile('/var/log/xcally/motion-err.log', 'utf8') + .then(function(errs) { + logs.errors = errs; + }) + .catch(function(err) { + logs.errors = 'No error log file found!'; + }) + .then(function() { + return readFile('/var/log/xcally/motion-out.log', 'utf8'); + }) + .then(function(out) { + logs.output = out; + }) + .catch(function(err) { + logs.output = 'No output log file found!'; + }) + .then(function(result) { + return res.status(200).send(logs); + }) + .catch(function(err) { + console.log('logs error:', err.message); + return handleError(res, err); + }); +} + +exports.changeLogo = function(req, res) { + changeLogo(req, res, 'logo'); +} + +exports.changeLoginLogo = function(req, res) { + changeLogo(req, res, 'loginLogo'); +} + +function changeLogo(req, res, field) { + + var upload = new UploadFile({ + dest: path.join(config.root, 'server', 'files', 'images'), + maxNumberOfFiles: 1, + minNumberOfFiles: 0, + acceptFileTypes: /(\.|\/)(jpeg|png)$/i, + rename: function(name, file) { + return sr() + path.extname(file.filename); + }, + messages: { + maxNumberOfFiles: "Max number of files upload exceeded", + acceptFileTypes: "Only jpeg and png format accepted", + invalidRequest: "Invalid request" + } + }); + + upload.on('end', function(fields, files) { + if (!files.file.filename) { + return res.status(500).send(upload); + } + return sequelize.transaction(function(t) { + return Setting + .findById(1) + .then(function(settings) { + if (!settings) { + return res.sendStatus(404); + } + var body = {}; + body[field] = files.file.filename; + return settings + .update(body, { + transaction: t + }); + }) + .then(function(user) { + return res.status(200).send(user); + }) + }) + .catch(function(err) { + return handleError(res, err); + }); + }); + + upload.on('error', function(err) { + console.log('********** Upload error :', err) + return handleError(res, err); + }); + + upload.parse(req); +} + + +exports.getLogo = function(req, res) { + getLogo(req, res, 'logo.png'); +} + +exports.getLoginLogo = function(req, res) { + getLogo(req, res, 'logo-big.png'); +} + +function getLogo(req, res, image) { + var imgPath = path.join(config.root, 'server', 'files', 'images', req.params.filename); + + fs.exists(imgPath, function(exists) { + if (!exists) { + imgPath = path.join(config.root, 'server', 'files', 'images', 'default', image); + } + + return res.sendFile(imgPath); + }); +} + +// Get internal +exports.getInternal = function(req, res) { + var _settings; + return Setting + .findById(1) + .then(function(settings) { + _settings = settings; + return Agent + .findAll({ + attributes: ['internal'] + }); + }) + .then(function(internals) { + var _internals = _.map(internals, 'internal'); + var _internal = { + value: 0, + range: 0 //maximum number of internals before an occupied one, 0 is unlimited + }; + var nextUsed; + if (req.query.internal) { + _internal.value = Number(req.query.internal); + while (_.includes(_internals, _internal.value)) { + _internal.value++; + } + nextUsed = _.filter(_internals, function(elem) { + return elem > _internal.value; + }).shift(); + _internal.range = nextUsed - _internal.value; + } else { + var maxInternal = _.max(_internals); + _internal.value = _settings.min_internal; //if the max internal is lower than my lower limit, i just set the limit as the internal + if (maxInternal && maxInternal >= _settings.min_internal) { //otherwise i get the first of the used internals and then I increment the value until I find an empty one + while (_.includes(_internals, _internal.value)) { + _internal.value++; + } + //then I find the next used internal and calculate the maximum number of free internals before a used one + nextUsed = _.filter(_internals, function(elem) { + return elem > _internal.value; + }).shift(); + _internal.range = nextUsed - _internal.value; + } + } + return res.status(200).send(_internal); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get mailbox +exports.getMailbox = function(req, res) { + var _settings; + return Setting + .findById(1) + .then(function(settings) { + _settings = settings; + return VoiceMail + .findAll({ + attributes: ['mailbox'] + }); + }) + .then(function(mailboxes) { + var _mailboxes = _.map(mailboxes, function(elem) { + return Number(elem.mailbox); + }); + var _mailbox = { + value: 0, + range: 0 //maximum number of mailboxs before an occupied one, 0 is unlimited + }; + var nextUsed; + var maxMailbox = _.max(_mailboxes); + _mailbox.value = _settings.min_mailbox; //if the max mailbox is lower than my lower limit, i just set the limit as the mailbox + if (maxMailbox && maxMailbox >= _settings.min_mailbox) { //otherwise i get the first of the used mailboxes and then I increment the value until I find an empty one + while (_.includes(_mailboxes, _mailbox.value)) { + _mailbox.value++; + } + //then I find the next used mailbox and calculate the maximum number of free mailboxes before a used one + nextUsed = _.filter(_mailboxes, function(elem) { + return elem > _mailbox.value; + }).shift(); + _mailbox.range = nextUsed - _mailbox.value; + } + + return res.status(200).send(_mailbox); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get list of settings +exports.getInfo = function(req, res) { + + var info = require('../../../package.json'); + + return res.status(200).send({ + name: info.name, + version: info.version, + engines: info.engines + }); +}; + +// Get a single setting +exports.show = function(req, res) { + return Setting + .findById(req.params.id) + .then(function(setting) { + if (!setting) { + return res.sendStatus(404); + } + return res.send(setting); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single mailAccount +exports.showCustom = function(req, res, next) { + return MailAccount + .findOne({ + where: { + custom: true + }, + include: [{ + model: MailServerOut, + attributes: ['id', 'host', 'port', 'username', 'password', 'ssl', 'state', 'source', 'description'] + }] + }) + .then(function(mailAccount) { + if (!mailAccount) { + return res.sendStatus(404); + } + return res.send(mailAccount); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new setting in the DB. +exports.create = function(req, res) { + return Setting + .create(req.body) + .then(function(setting) { + return res.status(201).send(setting); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new mailAccount in the DB. +exports.createSmtp = function(req, res, next) { + return MailAccount + .create(req.body, { + include: [{ + model: MailServerOut + }] + }).then(function(mailAccount) { + return res.status(201).send(mailAccount); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new setting in the DB. +exports.updateSmtp = function(req, res) { + var _mailAccount; + + return MailAccount + .findById(req.params.id) + .then(function(mailAccount) { + _mailAccount = mailAccount; + + return _mailAccount + .update({ + name: req.body.name, + address: req.body.address, + service: req.body.service, + signature: req.body.signature, + ListId: req.body.ListId, + TemplateId: req.body.TemplateId + }); + }) + .then(function(mailAccount) { + if (req.body.MailServerOut) { + req.body.MailServerOut.state = 'CONNECTING'; + req.body.MailServerOut.source = null; + + return MailServerOut + .update(req.body.MailServerOut, { + where: { + id: req.body.MailServerOut.id + }, + individualHooks: true + }); + } + }) + .then(function(smtp) { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing setting in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return Setting + .findById(req.params.id) + .then(function(setting) { + if (!setting) { + return res.sendStatus(404); + } + var updated = _.merge(setting, req.body); + return updated.save(); + }) + .then(function(setting) { + return res.status(200).send(setting); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a setting from the DB. +exports.destroy = function(req, res) { + return Setting + .findById(req.params.id) + .then(function(setting) { + if (!setting) { + return res.sendStatus(404); + } + return setting.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/setting/setting.events.js b/server/api/setting/setting.events.js index 1a4995b..1aa184d 100644 --- a/server/api/setting/setting.events.js +++ b/server/api/setting/setting.events.js @@ -1 +1,36 @@ -var _0x4eb5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x65\x74\x74\x69\x6E\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x4eb5[0];const EventEmitter=require(_0x4eb5[1]);const Setting=require(_0x4eb5[3])[_0x4eb5[2]];var SettingEvents= new EventEmitter();SettingEvents[_0x4eb5[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x4eb5[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x4eb5[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x4eb5[6]};for(var e in events){var event=events[e];Setting[_0x4eb5[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xb1e1x8,_0xb1e1x9,_0xb1e1xa){SettingEvents[_0x4eb5[10]](event+ _0x4eb5[8]+ _0xb1e1x8[_0x4eb5[9]],_0xb1e1x8);SettingEvents[_0x4eb5[10]](event,_0xb1e1x8);_0xb1e1xa(null)}}module[_0x4eb5[11]]= SettingEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Setting = require('../../models').Setting; + +var SettingEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SettingEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Setting.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SettingEvents.emit(event + ':' + doc._id, doc); + SettingEvents.emit(event, doc); + done(null); + } +} + +module.exports = SettingEvents; diff --git a/server/api/setting/setting.socket.js b/server/api/setting/setting.socket.js index bf2540c..6b71535 100644 --- a/server/api/setting/setting.socket.js +++ b/server/api/setting/setting.socket.js @@ -1 +1,32 @@ -var _0x19ab=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x65\x74\x74\x69\x6E\x67\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x65\x74\x74\x69\x6E\x67\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x19ab[0];const SettingEvents=require(_0x19ab[1]);var events=[_0x19ab[2],_0x19ab[3]];exports[_0x19ab[4]]= function(_0x1a3cx3){for(var _0x1a3cx4=0,_0x1a3cx5=events[_0x19ab[5]];_0x1a3cx4< _0x1a3cx5;_0x1a3cx4++){var _0x1a3cx6=events[_0x1a3cx4];var _0x1a3cx7=createListener(_0x19ab[6]+ _0x1a3cx6,_0x1a3cx3);SettingEvents[_0x19ab[7]](_0x1a3cx6,_0x1a3cx7);_0x1a3cx3[_0x19ab[7]](_0x19ab[8],removeListener(_0x1a3cx6,_0x1a3cx7))}};function createListener(_0x1a3cx6,_0x1a3cx3){return function(_0x1a3cx9){_0x1a3cx3[_0x19ab[9]](_0x1a3cx6,_0x1a3cx9)}}function removeListener(_0x1a3cx6,_0x1a3cx7){return function(){SettingEvents[_0x19ab[10]](_0x1a3cx6,_0x1a3cx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SettingEvents = require('./setting.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('setting:' + event, socket); + + SettingEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SettingEvents.removeListener(event, listener); + }; +} diff --git a/server/api/sms_account/index.js b/server/api/sms_account/index.js index f143041..6870a09 100644 --- a/server/api/sms_account/index.js +++ b/server/api/sms_account/index.js @@ -1 +1,31 @@ -var _0x4652=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x6D\x73\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x53\x6D\x73","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2F\x3A\x69\x64\x2F\x72\x6F\x6F\x6D\x73","\x67\x65\x74\x53\x6D\x73\x52\x6F\x6F\x6D\x73","\x2F\x3A\x69\x64\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x67\x65\x74\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x73\x65\x6E\x64","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65","\x2F\x3A\x69\x64\x2F\x72\x65\x63\x65\x69\x76\x65","\x72\x65\x63\x65\x69\x76\x65\x4D\x65\x73\x73\x61\x67\x65","\x2F\x3A\x69\x64\x2F\x6D\x65\x73\x73\x61\x67\x65\x2F\x3A\x6D\x73\x67\x49\x64\x2F\x75\x70\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x53\x74\x61\x74\x75\x73","\x2F\x3A\x69\x64\x2F\x6D\x65\x73\x73\x61\x67\x65\x53\x74\x61\x74\x75\x73","\x6D\x65\x73\x73\x61\x67\x65\x53\x74\x61\x74\x75\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x61\x70\x70\x49\x64","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73\x2F\x3A\x64\x69\x73\x70\x49\x64","\x75\x70\x64\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];_0x4652[0];var express=require(_0x4652[1]);var auth=require(_0x4652[2]);var controller=require(_0x4652[3]);var license=require(_0x4652[4]);var router=express.Router();router[_0x4652[13]](_0x4652[5],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9],_0x4652[10]]),controller[_0x4652[12]]);router[_0x4652[13]](_0x4652[14],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9]]),controller[_0x4652[15]]);router[_0x4652[13]](_0x4652[16],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9]]),controller[_0x4652[17]]);router[_0x4652[13]](_0x4652[18],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9]]),controller[_0x4652[19]]);router[_0x4652[13]](_0x4652[20],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9],_0x4652[10]]),controller[_0x4652[21]]);router[_0x4652[13]](_0x4652[22],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9],_0x4652[10]]),controller[_0x4652[23]]);router[_0x4652[25]](_0x4652[5],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9]]),controller[_0x4652[24]]);router[_0x4652[25]](_0x4652[22],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9]]),controller[_0x4652[26]]);router[_0x4652[25]](_0x4652[16],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9]]),controller[_0x4652[27]]);router[_0x4652[25]](_0x4652[28],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9],_0x4652[10]]),controller[_0x4652[29]]);router[_0x4652[25]](_0x4652[30],license[_0x4652[6]](),license[_0x4652[7]](),controller[_0x4652[31]]);router[_0x4652[25]](_0x4652[32],license[_0x4652[6]](),license[_0x4652[7]](),controller[_0x4652[33]]);router[_0x4652[25]](_0x4652[34],license[_0x4652[6]](),license[_0x4652[7]](),controller[_0x4652[35]]);router[_0x4652[37]](_0x4652[14],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9]]),controller[_0x4652[36]]);router[_0x4652[37]](_0x4652[16],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9]]),controller[_0x4652[38]]);router[_0x4652[37]](_0x4652[39],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9]]),controller[_0x4652[40]]);router[_0x4652[37]](_0x4652[41],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9]]),controller[_0x4652[42]]);router[_0x4652[44]](_0x4652[14],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9]]),controller[_0x4652[43]]);router[_0x4652[44]](_0x4652[16],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9]]),controller[_0x4652[45]]);router[_0x4652[44]](_0x4652[39],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9]]),controller[_0x4652[46]]);router[_0x4652[44]](_0x4652[41],license[_0x4652[6]](),license[_0x4652[7]](),auth[_0x4652[8]](),auth[_0x4652[11]]([11],[_0x4652[9]]),controller[_0x4652[47]]);module[_0x4652[48]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./sms_account.controller'); +var license = require('../../config/license/license.service'); +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin', 'agent']), controller.index); +router.get('/:id', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.show); +router.get('/:id/applications', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.showApplications); +router.get('/:id/check', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.checkAccount); +router.get('/:id/rooms', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin', 'agent']), controller.getSmsRooms); +router.get('/:id/dispositions', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin', 'agent']), controller.getDispositions); +router.post('/', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.create); +router.post('/:id/dispositions', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.createDisposition); +router.post('/:id/applications', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.createApplication); +router.post('/:id/send', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin', 'agent']), controller.sendMessage); +router.post('/:id/receive', license.isValidDate(), license.hasSms(), controller.receiveMessage); +router.post('/:id/message/:msgId/update', license.isValidDate(), license.hasSms(), controller.updateStatus); +router.post('/:id/messageStatus', license.isValidDate(), license.hasSms(), controller.messageStatus); +router.put('/:id', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.update); +router.put('/:id/applications', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.updateApplications); +router.put('/:id/applications/:appId', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.updateApplication); +router.put('/:id/dispositions/:dispId', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.updateDisposition); +router.delete('/:id', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.destroy); +router.delete('/:id/applications', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.bulkDestroyApplications); +router.delete('/:id/applications/:appId', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.destroyApplication); +router.delete('/:id/dispositions/:dispId', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.destroyDisposition); + +module.exports = router; diff --git a/server/api/sms_account/sms_account.controller.js b/server/api/sms_account/sms_account.controller.js index 64b5438..2c7be65 100644 --- a/server/api/sms_account/sms_account.controller.js +++ b/server/api/sms_account/sms_account.controller.js @@ -1 +1,677 @@ -var _0x3597=["\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","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x73\x6D\x73\x2F\x73\x6B\x65\x62\x62\x79","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x53\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74","\x53\x6D\x73\x51\x75\x65\x75\x65","\x53\x6D\x73\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x53\x6D\x73\x4D\x65\x73\x73\x61\x67\x65","\x53\x6D\x73\x52\x6F\x6F\x6D","\x53\x6D\x73\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x43\x6F\x6E\x74\x61\x63\x74","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x62\x6C\x75\x65\x62\x69\x72\x64","\x6D\x6F\x6D\x65\x6E\x74","\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\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x73\x69\x64","\x74\x6F\x6B\x65\x6E","\x74\x77\x69\x6C\x69\x6F","\x6C\x69\x73\x74","\x61\x63\x63\x6F\x75\x6E\x74\x73","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x54\x65\x73\x74","\x73\x6D\x73\x74\x79\x70\x65","\x74\x65\x73\x74","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65","\x73\x6B\x65\x62\x62\x79","\x54\x68\x65\x72\x65\x20\x69\x73\x20\x6E\x6F\x20\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x74\x68\x69\x73\x20\x61\x63\x63\x6F\x75\x6E\x74","\x74\x79\x70\x65","\x67\x65\x74\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x6C\x65\x6E\x67\x74\x68","\x67\x65\x74\x53\x6D\x73\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x73\x68\x6F\x77\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x6E\x61\x6D\x65","\x6F\x6E\x6C\x69\x6E\x65","\x70\x72\x69\x6F\x72\x69\x74\x79\x20\x41\x53\x43","\x6D\x65\x72\x67\x65","\x67\x65\x74\x53\x6D\x73\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x64\x65\x66\x61\x75\x6C\x74","\x73\x63\x6F\x70\x65","\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","\x6C\x6F\x67","\x62\x6F\x64\x79","\x63\x72\x65\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x53\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x55\x73\x65\x72\x49\x64","\x75\x73\x65\x72","\x46\x72\x6F\x6D","\x54\x6F","\x42\x6F\x64\x79","\x73\x65\x6E\x64\x65\x72","\x72\x65\x63\x65\x69\x76\x65\x72","\x74\x65\x78\x74","\x61\x63\x63\x6F\x75\x6E\x74\x54\x79\x70\x65","\x72\x65\x63\x65\x69\x76\x65\x4D\x65\x73\x73\x61\x67\x65","\x65\x72\x72\x6F\x72","\x53\x6D\x73\x52\x6F\x6F\x6D\x49\x64","\x52\x45\x43\x45\x49\x56\x45\x44","\x43\x4C\x4F\x53\x45\x44","\x66\x72\x6F\x6D","\x4E\x45\x57","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x4F\x50\x45\x4E","\x73\x79\x73\x74\x65\x6D","\x73\x6D\x73\x49\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x44\x45\x53\x43","\x66\x69\x6E\x64\x41\x6C\x6C","\x53\x4D\x53\x20\x61\x63\x63\x6F\x75\x6E\x74\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x53\x4D\x53\x20\x6D\x65\x73\x73\x61\x67\x65\x20\x66\x6F\x72\x6D\x61\x74\x20\x69\x73\x20\x6E\x6F\x74\x20\x6B\x6E\x6F\x77\x6E","\x4C\x69\x73\x74\x49\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x20\x20\x20\x65\x72\x72","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x64\x69\x73\x70\x49\x64","\x75\x70\x64\x61\x74\x65\x53\x74\x61\x74\x75\x73","\x74\x6F\x55\x70\x70\x65\x72","\x45\x72\x72\x6F\x72\x43\x6F\x64\x65","\x6D\x73\x67\x49\x64","\x6D\x65\x73\x73\x61\x67\x65\x53\x74\x61\x74\x75\x73","\x65\x72\x72\x6F\x72\x5F\x63\x6F\x64\x65","\x73\x6B\x65\x62\x62\x79\x5F\x64\x69\x73\x70\x61\x74\x63\x68\x5F\x69\x64","\x66\x69\x6E\x64\x4F\x6E\x65","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x70\x72\x69\x6F\x72\x69\x74\x79","\x66\x6F\x72\x45\x61\x63\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x61\x70\x70\x49\x64","\x64\x65\x73\x74\x72\x6F\x79\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x69\x64\x73","\x67\x65\x74\x53\x6D\x73\x52\x6F\x6F\x6D\x73","\x63\x6F\x6E\x74\x61\x63\x74","\x74\x61\x67\x73","\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x76\x6F\x69\x63\x65\x53\x6F\x75\x72\x63\x65","\x6C\x61\x73\x74\x45\x76\x65\x6E\x74","\x69\x73\x41\x72\x72\x61\x79","\x25","\x70\x75\x73\x68","\x24\x61\x6E\x64","\x77\x68\x65\x72\x65","\x69\x6E\x63\x6C\x75\x64\x65","\x61\x67\x65\x6E\x74","\x66\x69\x6E\x64","\x6D\x61\x70","\x71\x75\x65\x75\x65","\x53\x6D\x73\x51\x75\x65\x75\x65\x49\x64","\x69\x6E\x74\x65\x72\x73\x65\x63\x74\x69\x6F\x6E","\x67\x65\x74\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x72\x6F\x6C\x65","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x65\x72\x72","\x6D\x61\x78","\x75\x70\x64\x61\x74\x65\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E"];_0x3597[0];var _=require(_0x3597[1]);var Util=require(_0x3597[2]);var skebby=require(_0x3597[3]);var sequelize=require(_0x3597[5])[_0x3597[4]];var User=require(_0x3597[5])[_0x3597[6]];var SmsAccount=require(_0x3597[5])[_0x3597[7]];var SmsQueue=require(_0x3597[5])[_0x3597[8]];var SmsApplication=require(_0x3597[5])[_0x3597[9]];var SmsMessage=require(_0x3597[5])[_0x3597[10]];var SmsRoom=require(_0x3597[5])[_0x3597[11]];var SmsDisposition=require(_0x3597[5])[_0x3597[12]];var Contact=require(_0x3597[5])[_0x3597[13]];var Interval=require(_0x3597[5])[_0x3597[14]];var Promise=require(_0x3597[15]);var moment=require(_0x3597[16]);function handleError(_0x2e86x11,_0x2e86x12){return _0x2e86x11[_0x3597[18]](500)[_0x3597[17]](_0x2e86x12)}exports[_0x3597[19]]= function(_0x2e86x13,_0x2e86x11){return SmsAccount[_0x3597[24]](Util[_0x3597[23]](_0x2e86x13[_0x3597[22]]))[_0x3597[21]](function(_0x2e86x14){_0x2e86x11[_0x3597[18]](200)[_0x3597[17]](_0x2e86x14)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[25]]= function(_0x2e86x13,_0x2e86x11){return SmsAccount[_0x3597[29]](_0x2e86x13[_0x3597[28]][_0x3597[27]])[_0x3597[21]](function(_0x2e86x15){if(!_0x2e86x15){return _0x2e86x11[_0x3597[26]](404)};return _0x2e86x11[_0x3597[17]](_0x2e86x15)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[30]]= function(_0x2e86x13,_0x2e86x11){return SmsAccount[_0x3597[29]](_0x2e86x13[_0x3597[28]][_0x3597[27]])[_0x3597[21]](function(_0x2e86x15){if(!_0x2e86x15){return _0x2e86x11[_0x3597[26]](404)};switch(_0x2e86x15[_0x3597[43]]){case _0x3597[33]:var _0x2e86x17=require(_0x3597[33])(_0x2e86x15[_0x3597[31]],_0x2e86x15[_0x3597[32]]);var _0x2e86x18=Promise[_0x3597[36]](_0x2e86x17[_0x3597[35]][_0x3597[34]]);return _0x2e86x18();case _0x3597[41]:var _0x2e86x19={from:_0x3597[37],to:_0x3597[37],body:_0x3597[37]};_0x2e86x15[_0x3597[38]]= _0x3597[39];return skebby[_0x3597[40]](_0x2e86x19,_0x2e86x15);default:throw new Error(_0x3597[42])}})[_0x3597[21]](function(_0x2e86x16){return _0x2e86x11[_0x3597[26]](200)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[44]]= function(_0x2e86x13,_0x2e86x11,_0x2e86x1a){return SmsAccount[_0x3597[29]](_0x2e86x13[_0x3597[28]][_0x3597[27]])[_0x3597[21]](function(_0x2e86x15){if(!_0x2e86x15){return _0x2e86x11[_0x3597[26]](404)};return _0x2e86x15[_0x3597[46]]()})[_0x3597[21]](function(_0x2e86x1b){return _0x2e86x11[_0x3597[18]](200)[_0x3597[17]]({rows:_0x2e86x1b,count:_0x2e86x1b[_0x3597[45]]})})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[47]]= function(_0x2e86x13,_0x2e86x11,_0x2e86x1a){return SmsAccount[_0x3597[54]](_0x3597[53])[_0x3597[29]](_0x2e86x13[_0x3597[28]][_0x3597[27]])[_0x3597[21]](function(_0x2e86x15){if(!_0x2e86x15){return _0x2e86x11[_0x3597[26]](404)};return _0x2e86x15[_0x3597[52]](_[_0x3597[51]](Util[_0x3597[23]](_0x2e86x13[_0x3597[22]]),{include:[{model:SmsQueue,attributes:[_0x3597[27],_0x3597[48]]},{model:User,attributes:[_0x3597[27],_0x3597[48],_0x3597[49]]},{model:Interval,attributes:[_0x3597[27],_0x3597[48]]}],order:_0x3597[50]}))})[_0x3597[21]](function(_0x2e86x1c){return _0x2e86x11[_0x3597[17]]({count:_0x2e86x1c[_0x3597[45]],rows:_0x2e86x1c})})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[55]]= function(_0x2e86x13,_0x2e86x11){return SmsAccount[_0x3597[55]](_0x2e86x13[_0x3597[59]])[_0x3597[21]](function(_0x2e86x15){console[_0x3597[58]](_0x2e86x15);return _0x2e86x11[_0x3597[18]](201)[_0x3597[17]](_0x2e86x15)})[_0x3597[20]](sequelize.UniqueConstraintError,function(_0x2e86x12){return Util[_0x3597[57]][_0x3597[56]](_0x2e86x11,_0x2e86x12)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[60]]= function(_0x2e86x13,_0x2e86x11,_0x2e86x1a){_0x2e86x13[_0x3597[59]][_0x3597[61]]= _0x2e86x13[_0x3597[28]][_0x3597[27]];return SmsDisposition[_0x3597[55]](_0x2e86x13[_0x3597[59]])[_0x3597[21]](function(_0x2e86x1d){return _0x2e86x11[_0x3597[18]](201)[_0x3597[17]](_0x2e86x1d)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[40]]= function(_0x2e86x13,_0x2e86x11,_0x2e86x1a){_0x2e86x13[_0x3597[59]][_0x3597[61]]= _0x2e86x13[_0x3597[28]][_0x3597[27]];_0x2e86x13[_0x3597[59]][_0x3597[62]]= _0x2e86x13[_0x3597[63]][_0x3597[27]];return SmsMessage[_0x3597[55]](_0x2e86x13[_0x3597[59]],{user:_0x2e86x13[_0x3597[63]]})[_0x3597[21]](function(_0x2e86x1e){return _0x2e86x11[_0x3597[18]](201)[_0x3597[17]](_0x2e86x1e)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};function getMessage(_0x2e86x20){var _0x2e86x21;console[_0x3597[58]](_0x2e86x20);switch(_0x2e86x20[_0x3597[70]]){case _0x3597[33]:if(_0x2e86x20[_0x3597[64]]&& _0x2e86x20[_0x3597[65]]&& _0x2e86x20[_0x3597[66]]){_0x2e86x21= {from:_0x2e86x20[_0x3597[64]],to:_0x2e86x20[_0x3597[65]],body:_0x2e86x20[_0x3597[66]]}};break;case _0x3597[41]:if((_0x2e86x20[_0x3597[67]]&& _0x2e86x20[_0x3597[68]]&& _0x2e86x20[_0x3597[69]])){_0x2e86x21= {from:_0x2e86x20[_0x3597[67]],to:_0x2e86x20[_0x3597[68]],body:_0x2e86x20[_0x3597[69]]}};break;default:};return _0x2e86x21}exports[_0x3597[71]]= function(_0x2e86x13,_0x2e86x11,_0x2e86x1a){var _0x2e86x21;var _0x2e86x22;return SmsAccount[_0x3597[29]](_0x2e86x13[_0x3597[28]][_0x3597[27]])[_0x3597[21]](function(_0x2e86x15){if(!_0x2e86x15){throw new Error(_0x3597[87])};_0x2e86x22= _0x2e86x15;_0x2e86x13[_0x3597[59]][_0x3597[70]]= _0x2e86x22[_0x3597[43]];_0x2e86x21= getMessage(_0x2e86x13[_0x3597[59]]);if(!_0x2e86x21){throw new Error(_0x3597[88])};if(_0x2e86x22[_0x3597[89]]){return Contact[_0x3597[90]]({where:{ListId:_0x2e86x22[_0x3597[89]],mobile:_0x2e86x21[_0x3597[76]]},defaults:{ListId:_0x2e86x22[_0x3597[89]],mobile:_0x2e86x21[_0x3597[76]]}})}else {return []}})[_0x3597[21]](function(_0x2e86x27){return SmsRoom[_0x3597[86]]({limit:1,where:{contact:_0x2e86x21[_0x3597[76]],SmsAccountId:_0x2e86x22[_0x3597[27]]},order:[[_0x3597[84],_0x3597[85]]]})})[_0x3597[21]](function(_0x2e86x25){var _0x2e86x24=_0x2e86x25[0];if(!_0x2e86x24|| _0x2e86x24[_0x3597[18]]=== _0x3597[75]){var _0x2e86x26=_0x2e86x24?_0x2e86x24[_0x3597[27]]:null;return SmsRoom[_0x3597[55]]({contact:_0x2e86x21[_0x3597[76]],SmsAccountId:_0x2e86x22[_0x3597[27]],status:_0x3597[77],ParentId:_0x2e86x26,lastEvent:_0x3597[74],lastEventAt:moment()[_0x3597[79]](_0x3597[78]),smsIn:1})}else {return _0x2e86x24[_0x3597[83]]({status:_0x3597[80],openReason:_0x3597[81],lastEvent:_0x3597[74],lastEventAt:moment()[_0x3597[79]](_0x3597[78]),smsIn:++_0x2e86x24[_0x3597[82]]})}})[_0x3597[21]](function(_0x2e86x24){_0x2e86x21[_0x3597[61]]= _0x2e86x22[_0x3597[27]];_0x2e86x21[_0x3597[73]]= _0x2e86x24[_0x3597[27]];_0x2e86x21[_0x3597[18]]= _0x3597[74];return SmsMessage[_0x3597[55]](_0x2e86x21)})[_0x3597[21]](function(_0x2e86x23){return _0x2e86x11[_0x3597[18]](201)[_0x3597[17]](_0x2e86x23)})[_0x3597[20]](function(_0x2e86x12){console[_0x3597[72]](_0x2e86x12);return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[91]]= function(_0x2e86x13,_0x2e86x11){if(_0x2e86x13[_0x3597[59]][_0x3597[27]]){delete _0x2e86x13[_0x3597[59]][_0x3597[27]]};return SmsAccount[_0x3597[29]](_0x2e86x13[_0x3597[28]][_0x3597[27]])[_0x3597[21]](function(_0x2e86x15){if(!_0x2e86x15){return _0x2e86x11[_0x3597[26]](404)};var _0x2e86x28=_[_0x3597[51]](_0x2e86x15,_0x2e86x13[_0x3597[59]]);return _0x2e86x28[_0x3597[93]]()})[_0x3597[21]](function(_0x2e86x15){return _0x2e86x11[_0x3597[18]](200)[_0x3597[17]](_0x2e86x15)})[_0x3597[20]](sequelize.UniqueConstraintError,function(_0x2e86x12){return Util[_0x3597[57]][_0x3597[56]](_0x2e86x11,_0x2e86x12)})[_0x3597[20]](function(_0x2e86x12){console[_0x3597[58]](_0x3597[92],_0x2e86x12);return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[94]]= function(_0x2e86x13,_0x2e86x11){if(_0x2e86x13[_0x3597[59]][_0x3597[27]]){delete _0x2e86x13[_0x3597[59]][_0x3597[27]]};return SmsDisposition[_0x3597[29]](_0x2e86x13[_0x3597[28]][_0x3597[95]])[_0x3597[21]](function(_0x2e86x2a){if(!_0x2e86x2a){return _0x2e86x11[_0x3597[26]](404)};var _0x2e86x28=_[_0x3597[51]](_0x2e86x2a,_0x2e86x13[_0x3597[59]]);return _0x2e86x28[_0x3597[93]]()})[_0x3597[21]](function(_0x2e86x29){return _0x2e86x11[_0x3597[18]](200)[_0x3597[17]](_0x2e86x29)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[96]]= function(_0x2e86x13,_0x2e86x11){return SmsMessage[_0x3597[29]](_0x2e86x13[_0x3597[28]][_0x3597[99]])[_0x3597[21]](function(_0x2e86x23){if(!_0x2e86x23){return _0x2e86x11[_0x3597[26]](404)};var _0x2e86x28=_[_0x3597[51]](_0x2e86x23,{status:_[_0x3597[97]](_0x2e86x13[_0x3597[59]].MessageStatus),errorcode:_0x2e86x13[_0x3597[59]][_0x3597[98]]});return _0x2e86x28[_0x3597[93]]()})[_0x3597[21]](function(_0x2e86x23){return _0x2e86x11[_0x3597[18]](200)[_0x3597[17]](_0x2e86x23)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[100]]= function(_0x2e86x13,_0x2e86x11){return SmsMessage[_0x3597[103]]({where:{skebby_message_id:_0x2e86x13[_0x3597[59]][_0x3597[102]]}})[_0x3597[21]](function(_0x2e86x23){if(!_0x2e86x23){return _0x2e86x11[_0x3597[26]](404)};var _0x2e86x28=_[_0x3597[51]](_0x2e86x23,{status:_0x2e86x13[_0x3597[59]][_0x3597[18]],errorcode:_0x2e86x13[_0x3597[59]][_0x3597[101]]});return _0x2e86x28[_0x3597[93]]()})[_0x3597[21]](function(_0x2e86x23){return _0x2e86x11[_0x3597[18]](200)[_0x3597[17]](_0x2e86x23)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[104]]= function(_0x2e86x13,_0x2e86x11){var _0x2e86x2b=0;var _0x2e86x2c=_0x2e86x13[_0x3597[59]];_0x2e86x2c[_0x3597[107]](function(_0x2e86x2d){delete _0x2e86x2d[_0x3597[27]];delete _0x2e86x2d[_0x3597[84]];delete _0x2e86x2d[_0x3597[105]];_0x2e86x2d[_0x3597[106]]= ++_0x2e86x2b});return sequelize[_0x3597[110]](function(_0x2e86x2f){return SmsApplication[_0x3597[109]]({where:{SmsAccountId:_0x2e86x13[_0x3597[28]][_0x3597[27]]},individualHooks:true,transaction:_0x2e86x2f})[_0x3597[21]](function(_0x2e86x30){return SmsApplication[_0x3597[108]](_0x2e86x2c,{individualHooks:true,transaction:_0x2e86x2f})})})[_0x3597[21]](function(_0x2e86x2e){return _0x2e86x11[_0x3597[18]](200)[_0x3597[17]]({count:_0x2e86x2e[_0x3597[45]],rows:_0x2e86x2e})})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[109]]= function(_0x2e86x13,_0x2e86x11){return SmsAccount[_0x3597[29]](_0x2e86x13[_0x3597[28]][_0x3597[27]])[_0x3597[21]](function(_0x2e86x15){if(!_0x2e86x15){return _0x2e86x11[_0x3597[26]](404)};return _0x2e86x15[_0x3597[109]]()})[_0x3597[21]](function(){return _0x2e86x11[_0x3597[26]](204)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[111]]= function(_0x2e86x13,_0x2e86x11,_0x2e86x1a){return SmsApplication[_0x3597[29]](_0x2e86x13[_0x3597[28]][_0x3597[112]])[_0x3597[21]](function(_0x2e86x30){if(!_0x2e86x30){return _0x2e86x11[_0x3597[26]](404)};return _0x2e86x30[_0x3597[109]]()})[_0x3597[21]](function(){return _0x2e86x11[_0x3597[26]](204)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[113]]= function(_0x2e86x13,_0x2e86x11,_0x2e86x1a){return SmsDisposition[_0x3597[29]](_0x2e86x13[_0x3597[28]][_0x3597[95]])[_0x3597[21]](function(_0x2e86x1d){if(!_0x2e86x1d){return _0x2e86x11[_0x3597[26]](404)};return _0x2e86x1d[_0x3597[109]]()})[_0x3597[21]](function(){return _0x2e86x11[_0x3597[26]](204)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[114]]= function(_0x2e86x13,_0x2e86x11){return SmsApplication[_0x3597[109]]({where:{id:_0x2e86x13[_0x3597[22]][_0x3597[115]]},individualHooks:true})[_0x3597[21]](function(){return _0x2e86x11[_0x3597[26]](204)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[116]]= function(_0x2e86x13,_0x2e86x11,_0x2e86x1a){var _0x2e86x31={where:{SmsAccountId:_0x2e86x13[_0x3597[28]][_0x3597[27]],$and:[]},attributes:[_0x3597[27],_0x3597[117],_0x3597[105],_0x3597[118],_0x3597[119],_0x3597[120],_0x3597[121]],include:[]};if(_0x2e86x13[_0x3597[22]]){if(_0x2e86x13[_0x3597[22]][_0x3597[118]]){if(_[_0x3597[122]](_0x2e86x13[_0x3597[22]][_0x3597[118]])){for(var _0x2e86x32=0;_0x2e86x32< _0x2e86x13[_0x3597[22]][_0x3597[118]][_0x3597[45]];_0x2e86x32++){_0x2e86x31[_0x3597[126]][_0x3597[125]][_0x3597[124]]({tags:{$like:_0x3597[123]+ _0x2e86x13[_0x3597[22]][_0x3597[118]][_0x2e86x32]+ _0x3597[123]}})}}else {_0x2e86x31[_0x3597[126]][_0x3597[125]][_0x3597[124]]({tags:{$like:_0x3597[123]+ _0x2e86x13[_0x3597[22]][_0x3597[118]]+ _0x3597[123]}})};delete _0x2e86x13[_0x3597[22]][_0x3597[118]]};_[_0x3597[51]](_0x2e86x31[_0x3597[126]],_0x2e86x13[_0x3597[22]])};switch(_0x2e86x13[_0x3597[63]][_0x3597[135]]){case _0x3597[128]:_0x2e86x31[_0x3597[127]][_0x3597[124]]({model:User,attributes:[_0x3597[27]]});var _0x2e86x33;var _0x2e86x34;var _0x2e86x35;return User[_0x3597[29]](_0x2e86x13[_0x3597[63]][_0x3597[27]])[_0x3597[21]](function(_0x2e86x39){if(_0x2e86x39){return _0x2e86x39[_0x3597[134]]()}else {return []}})[_0x3597[21]](function(_0x2e86x38){_0x2e86x34= _[_0x3597[130]](_0x2e86x38,_0x3597[27]);return SmsAccount[_0x3597[29]](_0x2e86x13[_0x3597[28]][_0x3597[27]])})[_0x3597[21]](function(_0x2e86x37){return _0x2e86x37[_0x3597[52]]({where:{$or:[{app:_0x3597[131]},{app:_0x3597[128]}]}})})[_0x3597[21]](function(_0x2e86x2c){_0x2e86x33= _[_0x3597[130]](_[_0x3597[129]](_0x2e86x2c,{"\x61\x70\x70":_0x3597[128]}),_0x3597[62]);_0x2e86x35= _[_0x3597[130]](_[_0x3597[129]](_0x2e86x2c,{"\x61\x70\x70":_0x3597[131]}),_0x3597[132]);if(_[_0x3597[133]](_0x2e86x34,_0x2e86x35)[_0x3597[45]]|| _[_0x3597[133]](_0x2e86x33,[_0x2e86x13[_0x3597[63]][_0x3597[27]]])[_0x3597[45]]){return SmsRoom[_0x3597[86]](_0x2e86x31)[_0x3597[21]](function(_0x2e86x36){return _0x2e86x11[_0x3597[18]](200)[_0x3597[17]](_0x2e86x36)})[_0x3597[20]](function(_0x2e86x12){console[_0x3597[72]](_0x2e86x12);return handleError(_0x2e86x11,_0x2e86x12)})}else {return _0x2e86x11[_0x3597[18]](200)[_0x3597[17]]([])}})[_0x3597[20]](function(_0x2e86x12){console[_0x3597[72]](_0x2e86x12)});default:return SmsRoom[_0x3597[86]](_0x2e86x31)[_0x3597[21]](function(_0x2e86x36){return _0x2e86x11[_0x3597[18]](200)[_0x3597[17]](_0x2e86x36)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})}};exports[_0x3597[136]]= function(_0x2e86x13,_0x2e86x11,_0x2e86x1a){return SmsApplication[_0x3597[138]](_0x3597[106],{where:{SmsAccountId:_0x2e86x13[_0x3597[28]][_0x3597[27]]}})[_0x3597[21]](function(_0x2e86x3a){_0x2e86x13[_0x3597[59]][_0x3597[106]]= _0x2e86x3a?++_0x2e86x3a:1;_0x2e86x13[_0x3597[59]][_0x3597[61]]= _0x2e86x13[_0x3597[28]][_0x3597[27]];return SmsApplication[_0x3597[55]](_0x2e86x13[_0x3597[59]])})[_0x3597[21]](function(_0x2e86x30){return _0x2e86x11[_0x3597[18]](201)[_0x3597[17]](_0x2e86x30)})[_0x3597[20]](function(_0x2e86x12){console[_0x3597[58]](_0x3597[137],_0x2e86x12);return handleError(_0x2e86x11,_0x2e86x12)})};exports[_0x3597[139]]= function(_0x2e86x13,_0x2e86x11){if(_0x2e86x13[_0x3597[59]][_0x3597[27]]){delete _0x2e86x13[_0x3597[59]][_0x3597[27]]};return SmsApplication[_0x3597[29]](_0x2e86x13[_0x3597[28]][_0x3597[112]])[_0x3597[21]](function(_0x2e86x30){if(!_0x2e86x30){return _0x2e86x11[_0x3597[26]](404)};var _0x2e86x28=_[_0x3597[51]](_0x2e86x30,_0x2e86x13[_0x3597[59]]);return _0x2e86x28[_0x3597[93]]()})[_0x3597[21]](function(_0x2e86x30){return _0x2e86x11[_0x3597[18]](200)[_0x3597[17]](_0x2e86x30)})[_0x3597[20]](function(_0x2e86x12){return handleError(_0x2e86x11,_0x2e86x12)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/sms_accounts -> index + * POST /api/sms_accounts -> create + * GET /api/sms_accounts/:id -> show + * PUT /api/sms_accounts/:id -> update + * DELETE /api/sms_accounts/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); +var skebby = require('../../config/sms/skebby'); +var sequelize = require('../../models').sequelize; +var User = require('../../models').User; +var SmsAccount = require('../../models').SmsAccount; +var SmsQueue = require('../../models').SmsQueue; +var SmsApplication = require('../../models').SmsApplication; +var SmsMessage = require('../../models').SmsMessage; +var SmsRoom = require('../../models').SmsRoom; +var SmsDisposition = require('../../models').SmsDisposition; +var Contact = require('../../models').Contact; +var Interval = require('../../models').Interval; +var Promise = require('bluebird'); +var moment = require('moment'); + + + +function handleError(res, err) { + return res.status(500).send(err); +} + +// Gets a list of SmsAccounts +exports.index = function(req, res) { + return SmsAccount + .findAndCountAll(Util.getQuery(req.query)) + .then(function(sms_account) { + res.status(200).send(sms_account); + }) + .catch(function(err) { + return handleError(res, err); + }); + +} + +// Gets a single SmsAccount from the DB +exports.show = function(req, res) { + return SmsAccount + .findById(req.params.id) + .then(function(smsAccount) { + if (!smsAccount) { + return res.sendStatus(404); + } + return res.send(smsAccount); + }) + .catch(function(err) { + return handleError(res, err); + }); +} +exports.checkAccount = function(req, res) { + return SmsAccount + .findById(req.params.id) + .then(function(smsAccount) { + if (!smsAccount) { + return res.sendStatus(404); + } + switch (smsAccount.type) { + case 'twilio': + var client = require('twilio')(smsAccount.sid, smsAccount.token); + var getList = Promise.promisify(client.accounts.list); + return getList(); + case 'skebby': + var _mMessage = { + from: 'Test', + to: 'Test', + body: 'Test' + }; + smsAccount.smstype = 'test'; + return skebby.sendMessage(_mMessage, smsAccount); + default: + throw new Error('There is no authentication for this account'); + + } + }) + .then(function(response) { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +} +exports.getDispositions = function(req, res, next) { + return SmsAccount + .findById(req.params.id) + .then(function(smsAccount) { + if (!smsAccount) { + return res.sendStatus(404); + } + + return smsAccount + .getSmsDispositions(); + }) + .then(function(smsDispositions) { + return res.status(200).send({ + rows: smsDispositions, + count: smsDispositions.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Get Applications +exports.showApplications = function(req, res, next) { + return SmsAccount + .scope('default') + .findById(req.params.id) + .then(function(smsAccount) { + if (!smsAccount) { + return res.sendStatus(404); + } + return smsAccount + .getSmsApplications(_.merge(Util.getQuery(req.query), { + include: [{ + model: SmsQueue, + attributes: ['id', 'name'] + }, { + model: User, + attributes: ['id', 'name', 'online'] + }, { + model: Interval, + attributes: ['id', 'name'] + }], + order: 'priority ASC' + })); + }) + .then(function(smsApplications) { + return res.send({ + count: smsApplications.length, + rows: smsApplications + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Creates a new SmsAccount in the DB +exports.create = function(req, res) { + return SmsAccount + .create(req.body) + .then(function(smsAccount) { + console.log(smsAccount); + return res.status(201).send(smsAccount); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); + +} + +exports.createDisposition = function(req, res, next) { + req.body.SmsAccountId = req.params.id; + + return SmsDisposition + .create(req.body) + .then(function(smsDiposition) { + return res.status(201).send(smsDiposition); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a send Message in the DB. +exports.sendMessage = function(req, res, next) { + req.body.SmsAccountId = req.params.id; + req.body.UserId = req.user.id; + + return SmsMessage + .create(req.body, { + user: req.user + }) + .then(function(sms_message) { + return res.status(201).send(sms_message); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Creates a receive Message in the DB. +function getMessage(message) { + var _message; + console.log(message); + switch (message.accountType) { + case 'twilio': + if (message.From && message.To && message.Body) { + _message = { + from: message.From, + to: message.To, + body: message.Body + }; + } + break; + case 'skebby': + if ((message.sender && message.receiver && message.text)) { + _message = { + from: message.sender, + to: message.receiver, + body: message.text + }; + } + break; + default: + } + return _message; +} + +exports.receiveMessage = function(req, res, next) { + var _message; + var _account; + + return SmsAccount + .findById(req.params.id) + .then(function(smsAccount) { + if (!smsAccount) { + throw new Error('SMS account not found'); + } + _account = smsAccount; + req.body.accountType = _account.type; + + _message = getMessage(req.body); + if (!_message) { + throw new Error('SMS message format is not known'); + } + // console.log(_message); + if (_account.ListId) { + return Contact + .findOrCreate({ + where: { + ListId: _account.ListId, + mobile: _message.from + }, + defaults: { + ListId: _account.ListId, + mobile: _message.from + } + }); + } else { + return []; + } + + }) + .then(function(contact) { + return SmsRoom + .findAll({ + limit: 1, + where: { + contact: _message.from, + SmsAccountId: _account.id + }, + order: [ + ['createdAt', 'DESC'] + ] + }) + }) + .then(function(smsroom) { + var room = smsroom[0]; + if (!room || room.status === 'CLOSED') { + var parentID = room ? room.id : null; + return SmsRoom + .create({ + contact: _message.from, + SmsAccountId: _account.id, + status: 'NEW', + ParentId: parentID, + lastEvent: 'RECEIVED', + lastEventAt: moment().format('YYYY-MM-DD HH:mm:ss'), + smsIn: 1 + }) + } else { + return room + .updateAttributes({ + status: 'OPEN', + openReason: 'system', + lastEvent: 'RECEIVED', + lastEventAt: moment().format('YYYY-MM-DD HH:mm:ss'), + smsIn: ++room.smsIn + }); + } + }) + .then(function(room) { + // console.log(room); + _message.SmsAccountId = _account.id; + _message.SmsRoomId = room.id; + _message.status = 'RECEIVED'; + + return SmsMessage + .create(_message) + }) + .then(function(smsMessage) { + return res.status(201).send(smsMessage); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); +}; +// Updates an existing SmsAccount in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return SmsAccount.findById(req.params.id) + .then(function(smsAccount) { + if (!smsAccount) { + return res.sendStatus(404); + } + + var updated = _.merge(smsAccount, req.body); + return updated + .save(); + }) + .then(function(smsAccount) { + return res.status(200).send(smsAccount); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + console.log(' err', err); + return handleError(res, err); + }); + +} + +exports.updateDisposition = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return SmsDisposition + .findById(req.params.dispId) + .then(function(smsDisposition) { + if (!smsDisposition) { + return res.sendStatus(404); + } + var updated = _.merge(smsDisposition, req.body); + return updated + .save(); + }) + .then(function(mailAccount) { + return res.status(200).send(mailAccount); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Updates message status in the DB for TWILIO account +exports.updateStatus = function(req, res) { + + return SmsMessage + .findById(req.params.msgId) + .then(function(smsMessage) { + if (!smsMessage) { + return res.sendStatus(404); + } + var updated = _.merge(smsMessage, { + status: _.toUpper(req.body.MessageStatus), + errorcode: req.body.ErrorCode + }); + return updated + .save(); + }) + .then(function(smsMessage) { + return res.status(200).send(smsMessage); + }) + .catch(function(err) { + return handleError(res, err); + }); + +} + +exports.messageStatus = function(req, res) { + + return SmsMessage + .findOne({ + where: { + skebby_message_id: req.body.skebby_dispatch_id + } + }) + .then(function(smsMessage) { + if (!smsMessage) { + return res.sendStatus(404); + } + var updated = _.merge(smsMessage, { + status: req.body.status, + errorcode: req.body.error_code + }); + return updated + .save(); + }) + .then(function(smsMessage) { + return res.status(200).send(smsMessage); + }) + .catch(function(err) { + return handleError(res, err); + }); + + } + // Updates aapplications +exports.updateApplications = function(req, res) { + + var priority = 0; + var apps = req.body; + + apps.forEach(function(app) { + delete app.id; + delete app.createdAt; + delete app.updatedAt; + + app.priority = ++priority; + }); + + return sequelize.transaction(function(t) { + return SmsApplication + .destroy({ + where: { + SmsAccountId: req.params.id + }, + individualHooks: true, + transaction: t + }).then(function(smsApplication) { + return SmsApplication + .bulkCreate(apps, { + individualHooks: true, + transaction: t + }); + }); + }).then(function(smsAccounts) { + return res.status(200).send({ + count: smsAccounts.length, + rows: smsAccounts + }); + }).catch(function(err) { + return handleError(res, err); + }); +}; +// Deletes a SmsAccount from the DB +exports.destroy = function(req, res) { + return SmsAccount.findById(req.params.id) + .then(function(smsAccount) { + if (!smsAccount) { + return res.sendStatus(404); + } + + return smsAccount + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +} +exports.destroyApplication = function(req, res, next) { + return SmsApplication + .findById(req.params.appId) + .then(function(smsApplication) { + if (!smsApplication) { + return res.sendStatus(404); + } + + return smsApplication + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.destroyDisposition = function(req, res, next) { + return SmsDisposition + .findById(req.params.dispId) + .then(function(smsDiposition) { + if (!smsDiposition) { + return res.sendStatus(404); + } + return smsDiposition + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.bulkDestroyApplications = function(req, res) { + return SmsApplication + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + + +exports.getSmsRooms = function(req, res, next) { + var _query = { + where: { + SmsAccountId: req.params.id, + $and: [] + }, + attributes: ['id', 'contact', 'updatedAt', 'tags', 'disposition', 'voiceSource', 'lastEvent'], + include: [] + }; + + // TO MOVE SOON INTO AN EXTENAL UTIL FILE + if (req.query) { + if (req.query.tags) { + if (_.isArray(req.query.tags)) { + for (var i = 0; i < req.query.tags.length; i++) { + _query.where.$and.push({ + tags: { + $like: '%' + req.query.tags[i] + '%' + } + }); + } + } else { + _query.where.$and.push({ + tags: { + $like: '%' + req.query.tags + '%' + } + }); + } + + delete req.query.tags; + } + + _.merge(_query.where, req.query); + } + + switch (req.user.role) { + case 'agent': + _query.include.push({ + model: User, + attributes: ['id'] + }); + var _agents; + var _agentQueues; + var _accountQueues; + + return User + .findById(req.user.id) + .then(function(user) { + if (user) { + return user + .getSmsQueues(); + } else { + return []; + } + }) + .then(function(queues) { + _agentQueues = _.map(queues, 'id'); + return SmsAccount + .findById(req.params.id); + }) + .then(function(account) { + return account + .getSmsApplications({ + where: { + $or: [{ + app: 'queue' + }, { + app: 'agent' + }] + } + }); + }) + .then(function(apps) { + _agents = _.map(_.find(apps, { + 'app': 'agent' + }), 'UserId'); + _accountQueues = _.map(_.find(apps, { + 'app': 'queue' + }), 'SmsQueueId'); + // _accountQueues = _.map(queues, 'SmsQueueId'); + if (_.intersection(_agentQueues, _accountQueues).length || _.intersection(_agents, [req.user.id]).length) { + return SmsRoom + .findAll(_query) + .then(function(smsRooms) { + return res.status(200).send(smsRooms); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); + } else { + return res.status(200).send([]); + } + }) + .catch(function(err) { + console.error(err); + }); + + default: + + return SmsRoom + .findAll(_query) + .then(function(smsRooms) { + return res.status(200).send(smsRooms); + }) + .catch(function(err) { + return handleError(res, err); + }); + } +}; + +exports.createApplication = function(req, res, next) { + + return SmsApplication + .max('priority', { + where: { + SmsAccountId: req.params.id + } + }).then(function(max) { + // SET PRIORITY + req.body.priority = max ? ++max : 1; + req.body.SmsAccountId = req.params.id; + + return SmsApplication.create(req.body); + }) + .then(function(smsApplication) { + return res.status(201).send(smsApplication); + }) + .catch(function(err) { + console.log('err', err); + return handleError(res, err); + }); +}; + +exports.updateApplication = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return SmsApplication.findById(req.params.appId) + .then(function(smsApplication) { + if (!smsApplication) { + return res.sendStatus(404); + } + var updated = _.merge(smsApplication, req.body); + return updated.save(); + }) + .then(function(smsApplication) { + return res.status(200).send(smsApplication); + }) + .catch(function(err) { + return handleError(res, err); + }); +} diff --git a/server/api/sms_account/sms_account.events.js b/server/api/sms_account/sms_account.events.js index d430411..932ef04 100644 --- a/server/api/sms_account/sms_account.events.js +++ b/server/api/sms_account/sms_account.events.js @@ -1 +1,36 @@ -var _0x99ef=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x99ef[0];const EventEmitter=require(_0x99ef[1]);const SmsAccount=require(_0x99ef[3])[_0x99ef[2]];var SmsAccountEvents= new EventEmitter();SmsAccountEvents[_0x99ef[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x99ef[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x99ef[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x99ef[6]};for(var e in events){var event=events[e];SmsAccount[_0x99ef[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xd1eex8,_0xd1eex9,_0xd1eexa){SmsAccountEvents[_0x99ef[10]](event+ _0x99ef[8]+ _0xd1eex8[_0x99ef[9]],_0xd1eex8);SmsAccountEvents[_0x99ef[10]](event,_0xd1eex8);_0xd1eexa(null)}}module[_0x99ef[11]]= SmsAccountEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SmsAccount = require('../../models').SmsAccount; + +var SmsAccountEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SmsAccountEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SmsAccount.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SmsAccountEvents.emit(event + ':' + doc._id, doc); + SmsAccountEvents.emit(event, doc); + done(null); + } +} + +module.exports = SmsAccountEvents; diff --git a/server/api/sms_account/sms_account.socket.js b/server/api/sms_account/sms_account.socket.js index 95cb90b..4aa38a4 100644 --- a/server/api/sms_account/sms_account.socket.js +++ b/server/api/sms_account/sms_account.socket.js @@ -1 +1,32 @@ -var _0x45e9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x6D\x73\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x6D\x73\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x45e9[0];const SmsAccountEvents=require(_0x45e9[1]);var events=[_0x45e9[2],_0x45e9[3]];exports[_0x45e9[4]]= function(_0x4f37x3){for(var _0x4f37x4=0,_0x4f37x5=events[_0x45e9[5]];_0x4f37x4< _0x4f37x5;_0x4f37x4++){var _0x4f37x6=events[_0x4f37x4];var _0x4f37x7=createListener(_0x45e9[6]+ _0x4f37x6,_0x4f37x3);SmsAccountEvents[_0x45e9[7]](_0x4f37x6,_0x4f37x7);_0x4f37x3[_0x45e9[7]](_0x45e9[8],removeListener(_0x4f37x6,_0x4f37x7))}};function createListener(_0x4f37x6,_0x4f37x3){return function(_0x4f37x9){_0x4f37x3[_0x45e9[9]](_0x4f37x6,_0x4f37x9)}}function removeListener(_0x4f37x6,_0x4f37x7){return function(){SmsAccountEvents[_0x45e9[10]](_0x4f37x6,_0x4f37x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SmsAccountEvents = require('./sms_account.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('sms_account:' + event, socket); + + SmsAccountEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SmsAccountEvents.removeListener(event, listener); + }; +} diff --git a/server/api/sms_application/index.js b/server/api/sms_application/index.js index f71abc7..fd4d4f1 100644 --- a/server/api/sms_application/index.js +++ b/server/api/sms_application/index.js @@ -1 +1,15 @@ -var _0x47f6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x6D\x73\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x53\x6D\x73","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x47f6[0];var express=require(_0x47f6[1]);var auth=require(_0x47f6[2]);var controller=require(_0x47f6[3]);var license=require(_0x47f6[4]);var router=express.Router();router[_0x47f6[11]](_0x47f6[5],auth[_0x47f6[6]](),license[_0x47f6[7]](),auth[_0x47f6[9]]([11],[_0x47f6[8]]),controller[_0x47f6[10]]);router[_0x47f6[11]](_0x47f6[12],auth[_0x47f6[6]](),license[_0x47f6[7]](),auth[_0x47f6[9]]([11],[_0x47f6[8]]),controller[_0x47f6[13]]);router[_0x47f6[15]](_0x47f6[5],auth[_0x47f6[6]](),license[_0x47f6[7]](),auth[_0x47f6[9]]([11],[_0x47f6[8]]),controller[_0x47f6[14]]);router[_0x47f6[17]](_0x47f6[12],auth[_0x47f6[6]](),license[_0x47f6[7]](),auth[_0x47f6[9]]([11],[_0x47f6[8]]),controller[_0x47f6[16]]);router[_0x47f6[19]](_0x47f6[12],auth[_0x47f6[6]](),license[_0x47f6[7]](),auth[_0x47f6[9]]([11],[_0x47f6[8]]),controller[_0x47f6[18]]);module[_0x47f6[20]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./sms_application.controller'); +var license = require('../../config/license/license.service'); +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.update); +router.delete('/:id', auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/sms_application/sms_application.controller.js b/server/api/sms_application/sms_application.controller.js index 373dbd8..e1abd0b 100644 --- a/server/api/sms_application/sms_application.controller.js +++ b/server/api/sms_application/sms_application.controller.js @@ -1 +1,130 @@ -var _0x9b81=["\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","\x53\x6D\x73\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\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","\x70\x72\x69\x6F\x72\x69\x74\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x53\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x6D\x61\x78","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x9b81[0];var _=require(_0x9b81[1]);var Util=require(_0x9b81[2]);var SmsApplication=require(_0x9b81[4])[_0x9b81[3]];function handleError(_0x8cecx5,_0x8cecx6){return _0x8cecx5[_0x9b81[6]](500)[_0x9b81[5]](_0x8cecx6)}exports[_0x9b81[7]]= function(_0x8cecx7,_0x8cecx5){return SmsApplication[_0x9b81[12]]({where:_0x8cecx7[_0x9b81[10]],order:_0x9b81[11],include:[{all:true}]})[_0x9b81[9]](function(_0x8cecx8){return _0x8cecx5[_0x9b81[6]](200)[_0x9b81[5]](_0x8cecx8)})[_0x9b81[8]](function(_0x8cecx6){return handleError(_0x8cecx5,_0x8cecx6)})};exports[_0x9b81[13]]= function(_0x8cecx7,_0x8cecx5){return SmsApplication[_0x9b81[17]](_0x8cecx7[_0x9b81[16]][_0x9b81[15]],{include:[{all:true}]})[_0x9b81[9]](function(_0x8cecx9){if(!_0x8cecx9){return _0x8cecx5[_0x9b81[14]](404)};return _0x8cecx5[_0x9b81[5]](_0x8cecx9)})[_0x9b81[8]](function(_0x8cecx6){return handleError(_0x8cecx5,_0x8cecx6)})};exports[_0x9b81[18]]= function(_0x8cecx7,_0x8cecx5){return SmsApplication[_0x9b81[21]](_0x9b81[11],{where:{SmsAccountId:_0x8cecx7[_0x9b81[19]][_0x9b81[20]]}})[_0x9b81[9]](function(_0x8cecxa){_0x8cecx7[_0x9b81[19]][_0x9b81[11]]= _0x8cecxa?++_0x8cecxa:1;return SmsApplication[_0x9b81[18]](_0x8cecx7[_0x9b81[19]])})[_0x9b81[9]](function(_0x8cecx9){return _0x8cecx5[_0x9b81[6]](201)[_0x9b81[5]](_0x8cecx9)})[_0x9b81[8]](function(_0x8cecx6){return handleError(_0x8cecx5,_0x8cecx6)})};exports[_0x9b81[22]]= function(_0x8cecx7,_0x8cecx5){if(_0x8cecx7[_0x9b81[19]][_0x9b81[15]]){delete _0x8cecx7[_0x9b81[19]][_0x9b81[15]]};return SmsApplication[_0x9b81[17]](_0x8cecx7[_0x9b81[16]][_0x9b81[15]])[_0x9b81[9]](function(_0x8cecx9){if(!_0x8cecx9){return _0x8cecx5[_0x9b81[14]](404)};var _0x8cecxb=_[_0x9b81[23]](_0x8cecx9,_0x8cecx7[_0x9b81[19]]);return _0x8cecxb[_0x9b81[24]]()})[_0x9b81[9]](function(_0x8cecx9){return _0x8cecx5[_0x9b81[6]](200)[_0x9b81[5]](_0x8cecx9)})[_0x9b81[8]](function(_0x8cecx6){return handleError(_0x8cecx5,_0x8cecx6)})};exports[_0x9b81[25]]= function(_0x8cecx7,_0x8cecx5){return SmsApplication[_0x9b81[17]](_0x8cecx7[_0x9b81[16]][_0x9b81[15]])[_0x9b81[9]](function(_0x8cecx9){if(!_0x8cecx9){return _0x8cecx5[_0x9b81[14]](404)};return _0x8cecx9[_0x9b81[25]]()})[_0x9b81[9]](function(){return _0x8cecx5[_0x9b81[14]](204)})[_0x9b81[8]](function(_0x8cecx6){return handleError(_0x8cecx5,_0x8cecx6)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/sms/applications -> index + * POST /api/sms/applications -> create + * GET /api/sms/applications/:id -> show + * PUT /api/sms/applications/:id -> update + * DELETE /api/sms/applications/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var SmsApplication = require('../../models').SmsApplication; + + +function handleError(res, err) { + return res.status(500).send(err); +} + +// Gets a list of SmsApplications +exports.index = function(req, res) { + return SmsApplication + .findAll({ + where: req.query, + order: 'priority', + include: [{ + all: true + }] + }) + .then(function(smsApplications) { + return res.status(200).send(smsApplications); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Gets a single SmsApplication from the DB +exports.show = function(req, res) { + return SmsApplication + .findById(req.params.id, { + include: [{ + all: true + }] + }) + .then(function(smsApplication) { + if (!smsApplication) { + return res.sendStatus(404); + } + return res.send(smsApplication); + }) + .catch(function(err) { + return handleError(res, err); + }); + +} + +// Creates a new SmsApplication in the DB +exports.create = function(req, res) { + + return SmsApplication + .max('priority', { + where: { + SmsAccountId: req.body.SmsAccountId + } + }) + .then(function(max) { + // SET PRIORITY + req.body.priority = max ? ++max : 1; + return SmsApplication + .create(req.body) + }) + .then(function(smsApplication) { + return res.status(201).send(smsApplication); + }) + .catch(function(err) { + return handleError(res, err); + }); + + +} + +// Updates an existing SmsApplication in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return SmsApplication + .findById(req.params.id) + .then(function(smsApplication) { + if (!smsApplication) { + return res.sendStatus(404); + } + var updated = _.merge(smsApplication, req.body); + return updated + .save() + + }) + .then(function(smsApplication) { + return res.status(200).send(smsApplication); + }) + .catch(function(err) { + return handleError(res, err); + }); + +} + + +// Deletes a SmsApplication from the DB +exports.destroy = function(req, res) { + return SmsApplication + .findById(req.params.id) + .then(function(smsApplication) { + if (!smsApplication) { + return res.sendStatus(404); + } + return smsApplication + .destroy() + + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +} diff --git a/server/api/sms_application/sms_application.events.js b/server/api/sms_application/sms_application.events.js index f0ed718..5d95d05 100644 --- a/server/api/sms_application/sms_application.events.js +++ b/server/api/sms_application/sms_application.events.js @@ -1 +1,36 @@ -var _0xc18d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x6D\x73\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xc18d[0];const EventEmitter=require(_0xc18d[1]);const SmsApplication=require(_0xc18d[3])[_0xc18d[2]];var SmsApplicationEvents= new EventEmitter();SmsApplicationEvents[_0xc18d[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xc18d[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xc18d[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xc18d[6]};for(var e in events){var event=events[e];SmsApplication[_0xc18d[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xc9d1x8,_0xc9d1x9,_0xc9d1xa){SmsApplicationEvents[_0xc18d[10]](event+ _0xc18d[8]+ _0xc9d1x8[_0xc18d[9]],_0xc9d1x8);SmsApplicationEvents[_0xc18d[10]](event,_0xc9d1x8);_0xc9d1xa(null)}}module[_0xc18d[11]]= SmsApplicationEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SmsApplication = require('../../models').SmsApplication; + +var SmsApplicationEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SmsApplicationEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SmsApplication.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SmsApplicationEvents.emit(event + ':' + doc._id, doc); + SmsApplicationEvents.emit(event, doc); + done(null); + } +} + +module.exports = SmsApplicationEvents; diff --git a/server/api/sms_application/sms_application.socket.js b/server/api/sms_application/sms_application.socket.js index 321625e..9926f52 100644 --- a/server/api/sms_application/sms_application.socket.js +++ b/server/api/sms_application/sms_application.socket.js @@ -1 +1,32 @@ -var _0xc767=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x6D\x73\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x6D\x73\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xc767[0];const SmsApplicationEvents=require(_0xc767[1]);var events=[_0xc767[2],_0xc767[3]];exports[_0xc767[4]]= function(_0xcd40x3){for(var _0xcd40x4=0,_0xcd40x5=events[_0xc767[5]];_0xcd40x4< _0xcd40x5;_0xcd40x4++){var _0xcd40x6=events[_0xcd40x4];var _0xcd40x7=createListener(_0xc767[6]+ _0xcd40x6,_0xcd40x3);SmsApplicationEvents[_0xc767[7]](_0xcd40x6,_0xcd40x7);_0xcd40x3[_0xc767[7]](_0xc767[8],removeListener(_0xcd40x6,_0xcd40x7))}};function createListener(_0xcd40x6,_0xcd40x3){return function(_0xcd40x9){_0xcd40x3[_0xc767[9]](_0xcd40x6,_0xcd40x9)}}function removeListener(_0xcd40x6,_0xcd40x7){return function(){SmsApplicationEvents[_0xc767[10]](_0xcd40x6,_0xcd40x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SmsApplicationEvents = require('./sms_application.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('sms_application:' + event, socket); + + SmsApplicationEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SmsApplicationEvents.removeListener(event, listener); + }; +} diff --git a/server/api/sms_disposition/index.js b/server/api/sms_disposition/index.js index 2eebd3c..6e1022b 100644 --- a/server/api/sms_disposition/index.js +++ b/server/api/sms_disposition/index.js @@ -1 +1,16 @@ -var _0xa350=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x73\x6D\x73\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xa350[0];var express=require(_0xa350[1]);var controller=require(_0xa350[2]);var auth=require(_0xa350[3]);var router=express.Router();router[_0xa350[7]](_0xa350[4],auth[_0xa350[5]](),controller[_0xa350[6]]);router[_0xa350[7]](_0xa350[8],auth[_0xa350[5]](),controller[_0xa350[9]]);router[_0xa350[11]](_0xa350[4],auth[_0xa350[5]](),controller[_0xa350[10]]);router[_0xa350[13]](_0xa350[8],auth[_0xa350[5]](),controller[_0xa350[12]]);router[_0xa350[14]](_0xa350[8],auth[_0xa350[5]](),controller[_0xa350[12]]);router[_0xa350[16]](_0xa350[8],auth[_0xa350[5]](),controller[_0xa350[15]]);module[_0xa350[17]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./sms_disposition.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); +router.get('/:id', auth.isAuthenticated(), controller.show); +router.post('/', auth.isAuthenticated(), controller.create); +router.put('/:id', auth.isAuthenticated(), controller.update); +router.patch('/:id', auth.isAuthenticated(), controller.update); +router.delete('/:id', auth.isAuthenticated(), controller.destroy); + +module.exports = router; diff --git a/server/api/sms_disposition/sms_disposition.controller.js b/server/api/sms_disposition/sms_disposition.controller.js index 89124fe..066dd7e 100644 --- a/server/api/sms_disposition/sms_disposition.controller.js +++ b/server/api/sms_disposition/sms_disposition.controller.js @@ -1 +1,95 @@ -var _0x8bcc=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x53\x6D\x73\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0x8bcc[0];var _=require(_0x8bcc[1]);var SmsDisposition=require(_0x8bcc[3])[_0x8bcc[2]];function handleError(_0xea80x4,_0xea80x5){_0xea80x5= _0xea80x5|| 500;return function(_0xea80x6){_0xea80x4[_0x8bcc[5]](_0xea80x5)[_0x8bcc[4]](_0xea80x6)}}function responseWithResult(_0xea80x4,_0xea80x5){_0xea80x5= _0xea80x5|| 200;return function(_0xea80x8){if(_0xea80x8){_0xea80x4[_0x8bcc[5]](_0xea80x5)[_0x8bcc[6]](_0xea80x8)}}}function handleEntityNotFound(_0xea80x4){return function(_0xea80x8){if(!_0xea80x8){_0xea80x4[_0x8bcc[5]](404)[_0x8bcc[7]]();return null};return _0xea80x8}}function saveUpdates(_0xea80xb){return function(_0xea80x8){return _0xea80x8[_0x8bcc[9]](_0xea80xb)[_0x8bcc[8]](function(_0xea80xc){return _0xea80xc})}}function removeEntity(_0xea80x4){return function(_0xea80x8){if(_0xea80x8){return _0xea80x8[_0x8bcc[10]]()[_0x8bcc[8]](function(){_0xea80x4[_0x8bcc[5]](204)[_0x8bcc[7]]()})}}}exports[_0x8bcc[11]]= function(_0xea80xe,_0xea80x4){SmsDisposition[_0x8bcc[13]]()[_0x8bcc[8]](responseWithResult(_0xea80x4))[_0x8bcc[12]](handleError(_0xea80x4))};exports[_0x8bcc[14]]= function(_0xea80xe,_0xea80x4){SmsDisposition[_0x8bcc[17]](_0xea80xe[_0x8bcc[16]][_0x8bcc[15]])[_0x8bcc[8]](handleEntityNotFound(_0xea80x4))[_0x8bcc[8]](responseWithResult(_0xea80x4))[_0x8bcc[12]](handleError(_0xea80x4))};exports[_0x8bcc[18]]= function(_0xea80xe,_0xea80x4){SmsDisposition[_0x8bcc[18]](_0xea80xe[_0x8bcc[19]])[_0x8bcc[8]](responseWithResult(_0xea80x4,201))[_0x8bcc[12]](handleError(_0xea80x4))};exports[_0x8bcc[20]]= function(_0xea80xe,_0xea80x4){if(_0xea80xe[_0x8bcc[19]][_0x8bcc[15]]){delete _0xea80xe[_0x8bcc[19]][_0x8bcc[15]]};SmsDisposition[_0x8bcc[17]](_0xea80xe[_0x8bcc[16]][_0x8bcc[15]])[_0x8bcc[8]](handleEntityNotFound(_0xea80x4))[_0x8bcc[8]](saveUpdates(_0xea80xe[_0x8bcc[19]]))[_0x8bcc[8]](responseWithResult(_0xea80x4))[_0x8bcc[12]](handleError(_0xea80x4))};exports[_0x8bcc[10]]= function(_0xea80xe,_0xea80x4){SmsDisposition[_0x8bcc[17]](_0xea80xe[_0x8bcc[16]][_0x8bcc[15]])[_0x8bcc[8]](handleEntityNotFound(_0xea80x4))[_0x8bcc[8]](removeEntity(_0xea80x4))[_0x8bcc[12]](handleError(_0xea80x4))} \ No newline at end of file +'use strict'; + + +var _ = require('lodash'); + +var SmsDisposition = require('../../models').SmsDisposition; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }) + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }) + } + }; +} + +// Gets a list of SmsDispositions +exports.index = function(req, res) { + SmsDisposition.findAndCountAll() + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single SmsDisposition from the DB +exports.show = function(req, res) { + SmsDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new SmsDisposition in the DB +exports.create = function(req, res) { + SmsDisposition.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing SmsDisposition in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + SmsDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a SmsDisposition from the DB +exports.destroy = function(req, res) { + SmsDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} diff --git a/server/api/sms_disposition/sms_disposition.events.js b/server/api/sms_disposition/sms_disposition.events.js index 63397e6..5f2d801 100644 --- a/server/api/sms_disposition/sms_disposition.events.js +++ b/server/api/sms_disposition/sms_disposition.events.js @@ -1 +1,36 @@ -var _0x28da=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x6D\x73\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x28da[0];const EventEmitter=require(_0x28da[1]);const SmsDisposition=require(_0x28da[3])[_0x28da[2]];var SmsDispositionEvents= new EventEmitter();SmsDispositionEvents[_0x28da[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x28da[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x28da[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x28da[6]};for(var e in events){var event=events[e];SmsDisposition[_0x28da[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xfdfex8,_0xfdfex9,_0xfdfexa){SmsDispositionEvents[_0x28da[10]](event+ _0x28da[8]+ _0xfdfex8[_0x28da[9]],_0xfdfex8);SmsDispositionEvents[_0x28da[10]](event,_0xfdfex8);_0xfdfexa(null)}}module[_0x28da[11]]= SmsDispositionEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SmsDisposition = require('../../models').SmsDisposition; + +var SmsDispositionEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SmsDispositionEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SmsDisposition.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SmsDispositionEvents.emit(event + ':' + doc._id, doc); + SmsDispositionEvents.emit(event, doc); + done(null); + } +} + +module.exports = SmsDispositionEvents; diff --git a/server/api/sms_disposition/sms_disposition.socket.js b/server/api/sms_disposition/sms_disposition.socket.js index 91ea4b0..577c85f 100644 --- a/server/api/sms_disposition/sms_disposition.socket.js +++ b/server/api/sms_disposition/sms_disposition.socket.js @@ -1 +1,32 @@ -var _0x70bf=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x6D\x73\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x6D\x73\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x70bf[0];const SmsDispositionEvents=require(_0x70bf[1]);var events=[_0x70bf[2],_0x70bf[3]];exports[_0x70bf[4]]= function(_0x4361x3){for(var _0x4361x4=0,_0x4361x5=events[_0x70bf[5]];_0x4361x4< _0x4361x5;_0x4361x4++){var _0x4361x6=events[_0x4361x4];var _0x4361x7=createListener(_0x70bf[6]+ _0x4361x6,_0x4361x3);SmsDispositionEvents[_0x70bf[7]](_0x4361x6,_0x4361x7);_0x4361x3[_0x70bf[7]](_0x70bf[8],removeListener(_0x4361x6,_0x4361x7))}};function createListener(_0x4361x6,_0x4361x3){return function(_0x4361x9){_0x4361x3[_0x70bf[9]](_0x4361x6,_0x4361x9)}}function removeListener(_0x4361x6,_0x4361x7){return function(){SmsDispositionEvents[_0x70bf[10]](_0x4361x6,_0x4361x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SmsDispositionEvents = require('./sms_disposition.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('sms_disposition:' + event, socket); + + SmsDispositionEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SmsDispositionEvents.removeListener(event, listener); + }; +} diff --git a/server/api/sms_message/index.js b/server/api/sms_message/index.js index 1074cb6..5c0b3d0 100644 --- a/server/api/sms_message/index.js +++ b/server/api/sms_message/index.js @@ -1 +1,18 @@ -var _0x19a6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x6D\x73\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x53\x6D\x73","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x3A\x69\x64","\x61\x67\x65\x6E\x74","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x19a6[0];var express=require(_0x19a6[1]);var auth=require(_0x19a6[2]);var controller=require(_0x19a6[3]);var license=require(_0x19a6[4]);var router=express.Router();router[_0x19a6[11]](_0x19a6[5],auth[_0x19a6[6]](),license[_0x19a6[7]](),auth[_0x19a6[9]]([11],[_0x19a6[8]]),controller[_0x19a6[10]]);router[_0x19a6[11]](_0x19a6[12],auth[_0x19a6[6]](),license[_0x19a6[7]](),auth[_0x19a6[9]]([11],[_0x19a6[8]]),controller[_0x19a6[13]]);router[_0x19a6[11]](_0x19a6[14],auth[_0x19a6[6]](),license[_0x19a6[7]](),auth[_0x19a6[9]]([11],[_0x19a6[8],_0x19a6[15]]),controller[_0x19a6[16]]);router[_0x19a6[18]](_0x19a6[5],auth[_0x19a6[6]](),license[_0x19a6[7]](),auth[_0x19a6[9]]([11],[_0x19a6[8]]),controller[_0x19a6[17]]);router[_0x19a6[20]](_0x19a6[14],auth[_0x19a6[6]](),license[_0x19a6[7]](),auth[_0x19a6[9]]([11],[_0x19a6[8]]),controller[_0x19a6[19]]);router[_0x19a6[22]](_0x19a6[14],auth[_0x19a6[6]](),license[_0x19a6[7]](),auth[_0x19a6[9]]([11],[_0x19a6[8]]),controller[_0x19a6[21]]);router[_0x19a6[22]](_0x19a6[5],auth[_0x19a6[6]](),license[_0x19a6[7]](),auth[_0x19a6[9]]([11],[_0x19a6[8]]),controller[_0x19a6[23]]);module[_0x19a6[24]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./sms_message.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.index); +router.get('/describe', auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.describe); +router.get('/:id', auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin', 'agent']), controller.show); +router.post('/', auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.update); +router.delete('/:id', auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.destroy); +router.delete('/', auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.bulkDelete); + +module.exports = router; diff --git a/server/api/sms_message/sms_message.controller.js b/server/api/sms_message/sms_message.controller.js index aca535b..d1dd899 100644 --- a/server/api/sms_message/sms_message.controller.js +++ b/server/api/sms_message/sms_message.controller.js @@ -1 +1,170 @@ -var _0xbead=["\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","\x53\x6D\x73\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x6D\x73\x52\x6F\x6F\x6D","\x55\x73\x65\x72","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x69\x6E\x64\x65\x78","\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x44\x45\x53\x43","\x77\x68\x65\x72\x65","\x71\x75\x65\x72\x79","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65","\x75\x73\x65\x72","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x65\x73\x63\x72\x69\x62\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x55\x73\x65\x72\x49\x64","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x6C\x65\x74\x65","\x54\x52\x41\x53\x48","\x62\x75\x6C\x6B\x55\x70\x64\x61\x74\x65"];_0xbead[0];var _=require(_0xbead[1]);var Util=require(_0xbead[2]);var SmsMessage=require(_0xbead[4])[_0xbead[3]];var SmsRoom=require(_0xbead[4])[_0xbead[5]];var User=require(_0xbead[4])[_0xbead[6]];function handleError(_0x24dex7,_0x24dex8){return _0x24dex7[_0xbead[8]](500)[_0xbead[7]](_0x24dex8)}exports[_0xbead[9]]= function(_0x24dex9,_0x24dex7){var _0x24dexa={order:_0xbead[10],include:[{all:true,include:[{all:true}]}]};switch(_0x24dex9[_0xbead[16]][_0xbead[15]]){case _0xbead[13]:_0x24dexa[_0xbead[11]]= _0x24dex9[_0xbead[12]];break;case _0xbead[14]:break;default:};return SmsMessage[_0xbead[19]](_0x24dexa)[_0xbead[18]](function(_0x24dexb){return _0x24dex7[_0xbead[8]](200)[_0xbead[7]](_0x24dexb)})[_0xbead[17]](function(_0x24dex8){return handleError(_0x24dex7,_0x24dex8)})};exports[_0xbead[20]]= function(_0x24dex9,_0x24dex7){return SmsMessage[_0xbead[20]]()[_0xbead[18]](function(_0x24dexc){return _0x24dex7[_0xbead[8]](200)[_0xbead[7]](_0x24dexc)})[_0xbead[17]](function(_0x24dex8){return handleError(_0x24dex7,_0x24dex8)})};exports[_0xbead[21]]= function(_0x24dex9,_0x24dex7){return SmsMessage[_0xbead[28]](_0x24dex9[_0xbead[24]][_0xbead[23]],{include:[{model:User,attributes:[_0xbead[23],_0xbead[25],_0xbead[26],_0xbead[27]]}]})[_0xbead[18]](function(_0x24dexd){if(!_0x24dexd){return _0x24dex7[_0xbead[22]](404)};return _0x24dex7[_0xbead[7]](_0x24dexd)})[_0xbead[17]](function(_0x24dex8){return handleError(_0x24dex7,_0x24dex8)})};exports[_0xbead[29]]= function(_0x24dex9,_0x24dex7){_0x24dex9[_0xbead[31]][_0xbead[30]]= _0x24dex9[_0xbead[16]][_0xbead[23]];return SmsMessage[_0xbead[29]](_0x24dex9[_0xbead[31]])[_0xbead[18]](function(_0x24dexd){return _0x24dex7[_0xbead[8]](201)[_0xbead[7]](_0x24dexd)})[_0xbead[17]](function(_0x24dex8){return handleError(_0x24dex7,_0x24dex8)})};exports[_0xbead[32]]= function(_0x24dex9,_0x24dex7){if(_0x24dex9[_0xbead[31]][_0xbead[23]]){delete _0x24dex9[_0xbead[31]][_0xbead[23]]};return SmsMessage[_0xbead[28]](_0x24dex9[_0xbead[24]][_0xbead[23]],{include:[{all:true}]})[_0xbead[18]](function(_0x24dexd){if(!_0x24dexd){return _0x24dex7[_0xbead[22]](404)};var _0x24dexe=_[_0xbead[33]](_0x24dexd,_0x24dex9[_0xbead[31]]);return _0x24dexe[_0xbead[34]]()})[_0xbead[18]](function(_0x24dexe){return _0x24dex7[_0xbead[8]](200)[_0xbead[7]](_0x24dexe)})[_0xbead[17]](function(_0x24dex8){return handleError(_0x24dex7,_0x24dex8)})};exports[_0xbead[35]]= function(_0x24dex9,_0x24dex7){return SmsMessage[_0xbead[28]](_0x24dex9[_0xbead[24]][_0xbead[23]])[_0xbead[18]](function(_0x24dexd){if(!_0x24dexd){return _0x24dex7[_0xbead[22]](404)};return _0x24dexd[_0xbead[35]]()})[_0xbead[18]](function(){return _0x24dex7[_0xbead[22]](204)})[_0xbead[17]](function(_0x24dex8){return handleError(_0x24dex7,_0x24dex8)})};exports[_0xbead[36]]= function(_0x24dex9,_0x24dex7){return SmsMessage[_0xbead[38]]({where:{id:{$in:_0x24dex9[_0xbead[31]][_0xbead[23]]}},attributes:{directory:_0xbead[37]}})[_0xbead[18]](function(_0x24dexd){if(!_0x24dexd){return _0x24dex7[_0xbead[22]](404)};return _0x24dexd[_0xbead[35]]()})[_0xbead[18]](function(){return _0x24dex7[_0xbead[22]](204)})[_0xbead[17]](function(_0x24dex8){return handleError(_0x24dex7,_0x24dex8)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/sms/messages -> index + * POST /api/sms/messages -> create + * GET /api/sms/messages/:id -> show + * PUT /api/sms/messages/:id -> update + * DELETE /api/sms/messages/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var SmsMessage = require('../../models').SmsMessage; +var SmsRoom = require('../../models').SmsRoom; +var User = require('../../models').User; + + +function handleError(res, err) { + return res.status(500).send(err); +} + +// Gets a list of SmsMessages +exports.index = function(req, res) { + var params = { + order: 'createdAt DESC', + include: [{ + all: true, + include: [{ + all: true + }] + }] + }; + + switch (req.user.role) { + case 'admin': + params.where = req.query; + break; + case 'agent': + break; + default: + } + + return SmsMessage + .findAll(params) + .then(function(sms_messages) { + return res.status(200).send(sms_messages); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.describe = function(req, res) { + return SmsMessage + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Gets a single SmsMessage from the DB +exports.show = function(req, res) { + return SmsMessage + .findById(req.params.id, { + include: [{ + model: User, + attributes: ['id', 'name', 'fullname', 'email'] + }] + }) + .then(function(smsMessage) { + if (!smsMessage) { + return res.sendStatus(404); + } + return res.send(smsMessage); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Creates a new SmsMessage in the DB +exports.create = function(req, res) { + req.body.UserId = req.user.id; + return SmsMessage + .create(req.body) + .then(function(smsMessage) { + return res.status(201).send(smsMessage); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Updates an existing SmsMessage in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return SmsMessage + .findById(req.params.id, { + include: [{ + all: true + }] + }) + .then(function(smsMessage) { + if (!smsMessage) { + return res.sendStatus(404); + } + var updated = _.merge(smsMessage, req.body); + return updated + .save(); + }) + .then(function(updated) { + return res.status(200).send(updated); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Deletes a SmsMessage from the DB +exports.destroy = function(req, res) { + return SmsMessage + .findById(req.params.id) + .then(function(smsMessage) { + if (!smsMessage) { + return res.sendStatus(404); + } + return smsMessage + .destroy(); + }).then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.bulkDelete = function(req, res) { + return SmsMessage + .bulkUpdate({ + where: { + id: { + $in: req.body.id + } + }, + attributes: { + directory: 'TRASH' + } + }) + .then(function(smsMessage) { + if (!smsMessage) { + return res.sendStatus(404); + } + return smsMessage + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; diff --git a/server/api/sms_message/sms_message.events.js b/server/api/sms_message/sms_message.events.js index 90ccee4..21dd796 100644 --- a/server/api/sms_message/sms_message.events.js +++ b/server/api/sms_message/sms_message.events.js @@ -1 +1,36 @@ -var _0x7803=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x6D\x73\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x7803[0];const EventEmitter=require(_0x7803[1]);const SmsMessage=require(_0x7803[3])[_0x7803[2]];var SmsMessageEvents= new EventEmitter();SmsMessageEvents[_0x7803[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x7803[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x7803[6],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x7803[7]};for(var e in events){var event=events[e];SmsMessage[_0x7803[8]](e,emitEvent(event))};function emitEvent(event){return function(_0xe031x8,_0xe031x9,_0xe031xa){SmsMessageEvents[_0x7803[11]](event+ _0x7803[9]+ _0xe031x8[_0x7803[10]],_0xe031x8);SmsMessageEvents[_0x7803[11]](event,_0xe031x8);_0xe031xa(null)}}module[_0x7803[12]]= SmsMessageEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SmsMessage = require('../../models').SmsMessage; + +var SmsMessageEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SmsMessageEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'update', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SmsMessage.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SmsMessageEvents.emit(event + ':' + doc._id, doc); + SmsMessageEvents.emit(event, doc); + done(null); + } +} + +module.exports = SmsMessageEvents; diff --git a/server/api/sms_message/sms_message.socket.js b/server/api/sms_message/sms_message.socket.js index cb9f1dd..70931c8 100644 --- a/server/api/sms_message/sms_message.socket.js +++ b/server/api/sms_message/sms_message.socket.js @@ -1 +1,47 @@ -var _0x37e9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x6D\x73\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x6D\x73\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x73\x6D\x73\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A\x73\x61\x76\x65","\x73\x74\x61\x74\x75\x73","\x63\x68\x61\x6E\x67\x65\x64","\x73\x6D\x73\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A\x75\x70\x64\x61\x74\x65","\x73\x6D\x73\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x37e9[0];const SmsMessageEvents=require(_0x37e9[1]);var events=[_0x37e9[2],_0x37e9[3],_0x37e9[4]];exports[_0x37e9[5]]= function(_0x6bbdx3){for(var _0x6bbdx4=0,_0x6bbdx5=events[_0x37e9[6]];_0x6bbdx4< _0x6bbdx5;_0x6bbdx4++){var _0x6bbdx6=events[_0x6bbdx4];var _0x6bbdx7=createListener(_0x37e9[7]+ _0x6bbdx6,_0x6bbdx3);SmsMessageEvents[_0x37e9[8]](_0x6bbdx6,_0x6bbdx7);_0x6bbdx3[_0x37e9[8]](_0x37e9[9],removeListener(_0x6bbdx6,_0x6bbdx7))}};function createListener(_0x6bbdx6,_0x6bbdx3){return function(_0x6bbdx9){switch(_0x6bbdx6){case _0x37e9[11]:_0x6bbdx3[_0x37e9[10]](_0x6bbdx6,_0x6bbdx9);break;case _0x37e9[14]:if(_0x6bbdx9[_0x37e9[13]](_0x37e9[12])){_0x6bbdx3[_0x37e9[10]](_0x6bbdx6,_0x6bbdx9)};break;case _0x37e9[15]:_0x6bbdx3[_0x37e9[10]](_0x6bbdx6,_0x6bbdx9);break;default:}}}function removeListener(_0x6bbdx6,_0x6bbdx7){return function(){SmsMessageEvents[_0x37e9[16]](_0x6bbdx6,_0x6bbdx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SmsMessageEvents = require('./sms_message.events'); + +// Model events to emit +var events = ['save', 'update', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('sms_message:' + event, socket); + + SmsMessageEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'sms_message:save': + socket.emit(event, doc); + break; + case 'sms_message:update': + if (doc.changed('status')) { + socket.emit(event, doc); + } + break; + case 'sms_message:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + SmsMessageEvents.removeListener(event, listener); + }; +} diff --git a/server/api/sms_queue/index.js b/server/api/sms_queue/index.js index 1efae48..2033118 100644 --- a/server/api/sms_queue/index.js +++ b/server/api/sms_queue/index.js @@ -1 +1,21 @@ -var _0x66db=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x53\x6D\x73","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x68\x61\x73\x52\x6F\x6C\x65","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x66db[0];var express=require(_0x66db[1]);var auth=require(_0x66db[2]);var controller=require(_0x66db[3]);var license=require(_0x66db[4]);var router=express.Router();router[_0x66db[12]](_0x66db[5],license[_0x66db[6]](),auth[_0x66db[7]](),license[_0x66db[8]](),auth[_0x66db[10]]([11],[_0x66db[9]]),controller[_0x66db[11]]);router[_0x66db[12]](_0x66db[13],license[_0x66db[6]](),auth[_0x66db[7]](),license[_0x66db[8]](),auth[_0x66db[10]]([11],[_0x66db[9]]),controller[_0x66db[14]]);router[_0x66db[12]](_0x66db[15],license[_0x66db[6]](),auth[_0x66db[7]](),license[_0x66db[8]](),auth[_0x66db[10]]([11],[_0x66db[9]]),controller[_0x66db[16]]);router[_0x66db[19]](_0x66db[5],license[_0x66db[6]](),auth[_0x66db[7]](),license[_0x66db[8]](),auth[_0x66db[17]](_0x66db[9]),controller[_0x66db[18]]);router[_0x66db[19]](_0x66db[15],license[_0x66db[6]](),auth[_0x66db[7]](),license[_0x66db[8]](),auth[_0x66db[17]](_0x66db[9]),controller[_0x66db[20]]);router[_0x66db[22]](_0x66db[13],license[_0x66db[6]](),auth[_0x66db[7]](),license[_0x66db[8]](),auth[_0x66db[17]](_0x66db[9]),controller[_0x66db[21]]);router[_0x66db[23]](_0x66db[13],license[_0x66db[6]](),auth[_0x66db[7]](),license[_0x66db[8]](),auth[_0x66db[17]](_0x66db[9]),controller[_0x66db[21]]);router[_0x66db[25]](_0x66db[13],license[_0x66db[6]](),auth[_0x66db[7]](),license[_0x66db[8]](),auth[_0x66db[17]](_0x66db[9]),controller[_0x66db[24]]);router[_0x66db[25]](_0x66db[15],license[_0x66db[6]](),auth[_0x66db[7]](),license[_0x66db[8]](),auth[_0x66db[17]](_0x66db[9]),controller[_0x66db[26]]);router[_0x66db[25]](_0x66db[5],license[_0x66db[6]](),auth[_0x66db[7]](),license[_0x66db[8]](),auth[_0x66db[17]](_0x66db[9]),controller[_0x66db[27]]);module[_0x66db[28]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./sms_queue.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.index); +router.get('/:id', license.isValidDate(), auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.show); +router.get('/:id/agents', license.isValidDate(), auth.isAuthenticated(), license.hasSms(), auth.hasModule([11], ['admin']), controller.showAgents); +router.post('/', license.isValidDate(), auth.isAuthenticated(), license.hasSms(), auth.hasRole('admin'), controller.create); +router.post('/:id/agents', license.isValidDate(), auth.isAuthenticated(), license.hasSms(), auth.hasRole('admin'), controller.addAgents); +router.put('/:id', license.isValidDate(), auth.isAuthenticated(), license.hasSms(), auth.hasRole('admin'), controller.update); +router.patch('/:id', license.isValidDate(), auth.isAuthenticated(), license.hasSms(), auth.hasRole('admin'), controller.update); +router.delete('/:id', license.isValidDate(), auth.isAuthenticated(), license.hasSms(), auth.hasRole('admin'), controller.destroy); +router.delete('/:id/agents', license.isValidDate(), auth.isAuthenticated(), license.hasSms(), auth.hasRole('admin'), controller.removeAgents); +router.delete('/', license.isValidDate(), auth.isAuthenticated(), license.hasSms(), auth.hasRole('admin'), controller.bulkDestroy); + +module.exports = router; diff --git a/server/api/sms_queue/sms_queue.controller.js b/server/api/sms_queue/sms_queue.controller.js index fd0b930..da0bf5b 100644 --- a/server/api/sms_queue/sms_queue.controller.js +++ b/server/api/sms_queue/sms_queue.controller.js @@ -1 +1,242 @@ -var _0x647c=["\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","\x53\x6D\x73\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\x53\x6D\x73\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\x53\x6D\x73\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","\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","\x6D\x65\x72\x67\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","\x53\x6D\x73\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"];_0x647c[0];var _=require(_0x647c[1]);var Util=require(_0x647c[2]);var SmsQueue=require(_0x647c[4])[_0x647c[3]];var User=require(_0x647c[4])[_0x647c[5]];var sequelize=require(_0x647c[4])[_0x647c[6]];var UserHasSmsQueue=require(_0x647c[4])[_0x647c[7]];function handleError(_0xdd35x8,_0xdd35x9){return _0xdd35x8[_0x647c[9]](500)[_0x647c[8]](_0xdd35x9)}exports[_0x647c[10]]= function(_0xdd35xa,_0xdd35x8){switch(_0xdd35xa[_0x647c[16]][_0x647c[22]]){case _0x647c[16]:return User[_0x647c[17]](_0xdd35xa[_0x647c[16]][_0x647c[15]],{attributes:[_0x647c[15]]})[_0x647c[12]](Util[_0x647c[14]](_0xdd35xa[_0x647c[13]]))[_0x647c[12]](function(_0xdd35xb){_0xdd35x8[_0x647c[9]](200)[_0x647c[8]](_0xdd35xb)})[_0x647c[11]](function(_0xdd35x9){return handleError(_0xdd35x8,_0xdd35x9)});default:return SmsQueue[_0x647c[21]](_0x647c[20])[_0x647c[19]](Util[_0x647c[18]](_0xdd35xa[_0x647c[13]]))[_0x647c[12]](function(_0xdd35xb){_0xdd35x8[_0x647c[9]](200)[_0x647c[8]](_0xdd35xb)})[_0x647c[11]](function(_0xdd35x9){return handleError(_0xdd35x8,_0xdd35x9)})}};exports[_0x647c[23]]= function(_0xdd35xa,_0xdd35x8){return SmsQueue[_0x647c[21]](_0x647c[20])[_0x647c[17]](_0xdd35xa[_0x647c[25]][_0x647c[15]])[_0x647c[12]](function(_0xdd35xc){if(!_0xdd35xc){return _0xdd35x8[_0x647c[24]](404)};return _0xdd35x8[_0x647c[8]](_0xdd35xc)})[_0x647c[11]](function(_0xdd35x9){return handleError(_0xdd35x8,_0xdd35x9)})};exports[_0x647c[26]]= function(_0xdd35xa,_0xdd35x8){return SmsQueue[_0x647c[17]](_0xdd35xa[_0x647c[25]][_0x647c[15]])[_0x647c[12]](function(_0xdd35xe){if(!_0xdd35xe){return _0xdd35x8[_0x647c[24]](404)};return _0xdd35xe[_0x647c[32]]({where:{role:_0x647c[28]},attributes:[_0x647c[15],_0x647c[29],_0x647c[30],_0x647c[31]]})})[_0x647c[12]](function(_0xdd35xd){return _0xdd35x8[_0x647c[9]](200)[_0x647c[8]]({rows:_0xdd35xd,count:_0xdd35xd[_0x647c[27]]})})[_0x647c[11]](function(_0xdd35x9){return handleError(_0xdd35x8,_0xdd35x9)})};exports[_0x647c[33]]= function(_0xdd35xa,_0xdd35x8){var _0xdd35xf;return SmsQueue[_0x647c[33]](_0xdd35xa[_0x647c[37]])[_0x647c[12]](function(_0xdd35xc){_0xdd35xf= _0xdd35xc;if(_0xdd35xa[_0x647c[37]][_0x647c[36]]){return _0xdd35xf[_0x647c[39]](_0xdd35xa[_0x647c[37]][_0x647c[36]],{penalty:_0xdd35xa[_0x647c[37]][_0x647c[38]]|| 0,queue:_0xdd35xf[_0x647c[29]]})}})[_0x647c[12]](function(){return _0xdd35x8[_0x647c[9]](201)[_0x647c[8]](_0xdd35xf)})[_0x647c[11]](sequelize.UniqueConstraintError,function(_0xdd35x9){return Util[_0x647c[35]][_0x647c[34]](_0xdd35x8,_0xdd35x9)})[_0x647c[11]](function(_0xdd35x9){return handleError(_0xdd35x8,_0xdd35x9)})};exports[_0x647c[40]]= function(_0xdd35xa,_0xdd35x8){if(_0xdd35xa[_0x647c[37]][_0x647c[15]]){delete _0xdd35xa[_0x647c[37]][_0x647c[15]]};return SmsQueue[_0x647c[17]](_0xdd35xa[_0x647c[25]][_0x647c[15]])[_0x647c[12]](function(_0xdd35xc){if(!_0xdd35xc){return _0xdd35x8[_0x647c[24]](404)};var _0xdd35x10=_[_0x647c[41]](_0xdd35xc,_0xdd35xa[_0x647c[37]]);return _0xdd35x10[_0x647c[42]]()})[_0x647c[12]](function(_0xdd35xc){return _0xdd35x8[_0x647c[9]](200)[_0x647c[8]](_0xdd35xc)})[_0x647c[11]](sequelize.UniqueConstraintError,function(_0xdd35x9){return Util[_0x647c[35]][_0x647c[34]](_0xdd35x8,_0xdd35x9)})[_0x647c[11]](function(_0xdd35x9){return handleError(_0xdd35x8,_0xdd35x9)})};exports[_0x647c[43]]= function(_0xdd35xa,_0xdd35x8,_0xdd35x11){return SmsQueue[_0x647c[17]](_0xdd35xa[_0x647c[25]][_0x647c[15]])[_0x647c[12]](function(_0xdd35xc){if(!_0xdd35xc){return _0xdd35x8[_0x647c[24]](404)};var _0xdd35x12=_[_0x647c[44]](_0xdd35xa[_0x647c[37]][_0x647c[36]],function(_0xdd35x13){return {UserId:_0xdd35x13,penalty:_0xdd35xa[_0x647c[37]][_0x647c[38]],SmsQueueId:_0xdd35xc[_0x647c[15]],queue:_0xdd35xc[_0x647c[29]]}});return UserHasSmsQueue[_0x647c[45]](_0xdd35x12,{individualHooks:true})})[_0x647c[12]](function(){return _0xdd35x8[_0x647c[24]](200)})[_0x647c[11]](function(_0xdd35x9){return handleError(_0xdd35x8,_0xdd35x9)})};exports[_0x647c[46]]= function(_0xdd35xa,_0xdd35x8){return SmsQueue[_0x647c[17]](_0xdd35xa[_0x647c[25]][_0x647c[15]])[_0x647c[12]](function(_0xdd35xc){if(_0xdd35xc){return _0xdd35xc[_0x647c[47]](_0xdd35xa[_0x647c[13]][_0x647c[36]],{individualHooks:true})}else {throw new Error(_0x647c[48])}})[_0x647c[12]](function(){return _0xdd35x8[_0x647c[24]](202)})[_0x647c[11]](function(_0xdd35x9){return handleError(_0xdd35x8,_0xdd35x9)})};exports[_0x647c[49]]= function(_0xdd35xa,_0xdd35x8){var _0xdd35xf;return SmsQueue[_0x647c[17]](_0xdd35xa[_0x647c[25]][_0x647c[15]])[_0x647c[12]](function(_0xdd35xc){_0xdd35xf= _0xdd35xc;if(!_0xdd35xc){return _0xdd35x8[_0x647c[24]](404)};return _0xdd35xc[_0x647c[49]]()})[_0x647c[12]](function(){return _0xdd35x8[_0x647c[24]](204)})[_0x647c[11]](sequelize.ForeignKeyConstraintError,function(_0xdd35x9){return Util[_0x647c[35]][_0x647c[53]](_0xdd35x8,_0x647c[52],_0xdd35xf[_0x647c[29]],_0xdd35x9)})[_0x647c[11]](function(_0xdd35x9){console[_0x647c[51]](_0x647c[50],_0xdd35x9);return handleError(_0xdd35x8,_0xdd35x9)})};exports[_0x647c[54]]= function(_0xdd35xa,_0xdd35x8){return SmsQueue[_0x647c[49]]({where:{id:_0xdd35xa[_0x647c[13]][_0x647c[55]]},individualHooks:true})[_0x647c[12]](function(){return _0xdd35x8[_0x647c[24]](204)})[_0x647c[11]](function(_0xdd35x9){return handleError(_0xdd35x8,_0xdd35x9)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/sms/queues -> index + * POST /api/sms/queues -> create + * GET /api/sms/queues/:id -> show + * PUT /api/sms/queues/:id -> update + * DELETE /api/sms/queues/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var SmsQueue = require('../../models').SmsQueue; +var User = require('../../models').User; +var sequelize = require('../../models').sequelize; +var UserHasSmsQueue = require('../../models').UserHasSmsQueue; + +function handleError(res, err) { + return res.status(500).send(err); +} + +// Gets a list of SmsQueues +exports.index = function(req, res) { + + switch (req.user.role) { + case 'user': + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getSmsQueuesIdByUser(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + + default: + return SmsQueue + .scope('default') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + } + + + +} + +// Gets a single SmsQueue from the DB +exports.show = function(req, res) { + return SmsQueue + .scope('default') + .findById(req.params.id) + .then(function(smsQueue) { + if (!smsQueue) { + return res.sendStatus(404); + } + return res.send(smsQueue); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.showAgents = function(req, res) { + return SmsQueue + .findById(req.params.id) + .then(function(queue) { + if (!queue) { + return res.sendStatus(404); + } + return queue + .getUsers({ + where: { + role: 'agent' + }, + attributes: ['id', 'name', 'fullname', 'email'] + }); + }) + .then(function(agents) { + return res.status(200).send({ + rows: agents, + count: agents.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Creates a new SmsQueue in the DB +exports.create = function(req, res) { + var _smsQueue; + + return SmsQueue + .create(req.body) + .then(function(smsQueue) { + _smsQueue = smsQueue; + + if (req.body.agents) { + return _smsQueue + .addUsers(req.body.agents, { + penalty: req.body.penalty || 0, + queue: _smsQueue.name + }); + } + }) + .then(function() { + return res.status(201).send(_smsQueue); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Updates an existing SmsQueue in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return SmsQueue + .findById(req.params.id) + .then(function(smsQueue) { + if (!smsQueue) { + return res.sendStatus(404); + } + var updated = _.merge(smsQueue, req.body); + return updated + .save(); + }) + .then(function(smsQueue) { + return res.status(200).send(smsQueue); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); + } + // Updates an existing user_has_smsQueue in the DB. +exports.addAgents = function(req, res, next) { + return SmsQueue + .findById(req.params.id) + .then(function(smsQueue) { + if (!smsQueue) { + return res.sendStatus(404); + } + var userHasSmsQueues = _.map(req.body.agents, function(agent) { + return { + UserId: agent, + penalty: req.body.penalty, + SmsQueueId: smsQueue.id, + queue: smsQueue.name + }; + }); + + return UserHasSmsQueue + .bulkCreate(userHasSmsQueues, { + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.removeAgents = function(req, res) { + return SmsQueue + .findById(req.params.id) + .then(function(smsQueue) { + if (smsQueue) { + return smsQueue + .removeUsers(req.query.agents, { + individualHooks: true + }); + } else { + throw new Error('SmsQueue not found'); + } + }) + .then(function() { + return res.sendStatus(202); + }) + .catch(function(err) { + return handleError(res, err); + }); + +}; + +// Deletes a SmsQueue from the DB +exports.destroy = function(req, res) { + var _smsQueue; + return SmsQueue + .findById(req.params.id) + .then(function(smsQueue) { + _smsQueue = smsQueue; + if (!smsQueue) { + return res.sendStatus(404); + } + return smsQueue + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(sequelize.ForeignKeyConstraintError, function(err) { + return Util.errorManager.handleForeignKeyConstraintError(res, 'queue', _smsQueue.name, err); + }) + .catch(function(err) { + console.error('err', err); + return handleError(res, err); + }); +} +exports.bulkDestroy = function(req, res) { + return SmsQueue + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; diff --git a/server/api/sms_queue/sms_queue.events.js b/server/api/sms_queue/sms_queue.events.js index 1ac0ff9..31beb9a 100644 --- a/server/api/sms_queue/sms_queue.events.js +++ b/server/api/sms_queue/sms_queue.events.js @@ -1 +1,36 @@ -var _0xe47d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x6D\x73\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xe47d[0];const EventEmitter=require(_0xe47d[1]);const SmsQueue=require(_0xe47d[3])[_0xe47d[2]];var SmsQueueEvents= new EventEmitter();SmsQueueEvents[_0xe47d[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xe47d[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xe47d[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xe47d[6]};for(var e in events){var event=events[e];SmsQueue[_0xe47d[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xe384x8,_0xe384x9,_0xe384xa){SmsQueueEvents[_0xe47d[10]](event+ _0xe47d[8]+ _0xe384x8[_0xe47d[9]],_0xe384x8);SmsQueueEvents[_0xe47d[10]](event,_0xe384x8);_0xe384xa(null)}}module[_0xe47d[11]]= SmsQueueEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SmsQueue = require('../../models').SmsQueue; + +var SmsQueueEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SmsQueueEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SmsQueue.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SmsQueueEvents.emit(event + ':' + doc._id, doc); + SmsQueueEvents.emit(event, doc); + done(null); + } +} + +module.exports = SmsQueueEvents; diff --git a/server/api/sms_queue/sms_queue.socket.js b/server/api/sms_queue/sms_queue.socket.js index d71ef4f..2c6c4f1 100644 --- a/server/api/sms_queue/sms_queue.socket.js +++ b/server/api/sms_queue/sms_queue.socket.js @@ -1 +1,32 @@ -var _0x4412=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x4412[0];const SmsQueueEvents=require(_0x4412[1]);var events=[_0x4412[2],_0x4412[3]];exports[_0x4412[4]]= function(_0xbda1x3){for(var _0xbda1x4=0,_0xbda1x5=events[_0x4412[5]];_0xbda1x4< _0xbda1x5;_0xbda1x4++){var _0xbda1x6=events[_0xbda1x4];var _0xbda1x7=createListener(_0x4412[6]+ _0xbda1x6,_0xbda1x3);SmsQueueEvents[_0x4412[7]](_0xbda1x6,_0xbda1x7);_0xbda1x3[_0x4412[7]](_0x4412[8],removeListener(_0xbda1x6,_0xbda1x7))}};function createListener(_0xbda1x6,_0xbda1x3){return function(_0xbda1x9){_0xbda1x3[_0x4412[9]](_0xbda1x6,_0xbda1x9)}}function removeListener(_0xbda1x6,_0xbda1x7){return function(){SmsQueueEvents[_0x4412[10]](_0xbda1x6,_0xbda1x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SmsQueueEvents = require('./sms_queue.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('sms_queue:' + event, socket); + + SmsQueueEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SmsQueueEvents.removeListener(event, listener); + }; +} diff --git a/server/api/sms_room/index.js b/server/api/sms_room/index.js index a92ca21..429772f 100644 --- a/server/api/sms_room/index.js +++ b/server/api/sms_room/index.js @@ -1 +1,26 @@ -var _0xb857=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x6D\x73\x5F\x72\x6F\x6F\x6D\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x53\x6D\x73","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x70\x65\x6E\x64\x69\x6E\x67","\x70\x65\x6E\x64\x69\x6E\x67","\x2F\x6E\x65\x77","\x6E\x65\x77","\x2F\x6F\x70\x65\x6E","\x6F\x70\x65\x6E","\x2F\x63\x6C\x6F\x73\x65\x64","\x63\x6C\x6F\x73\x65\x64","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x2F\x6D\x65\x73\x73\x61\x67\x65\x73\x2F\x3A\x69\x64","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x4D\x65\x73\x73\x61\x67\x65","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x3A\x69\x64\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x63\x72\x65\x61\x74\x65\x4D\x65\x73\x73\x61\x67\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x75\x70\x64\x61\x74\x65\x41\x67\x65\x6E\x74\x73","\x75\x70\x64\x61\x74\x65\x50\x61\x74\x63\x68","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xb857[0];var express=require(_0xb857[1]);var auth=require(_0xb857[2]);var controller=require(_0xb857[3]);var license=require(_0xb857[4]);var router=express.Router();router[_0xb857[13]](_0xb857[5],license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[8]](),auth[_0xb857[11]]([11],[_0xb857[9],_0xb857[10]]),controller[_0xb857[12]]);router[_0xb857[13]](_0xb857[14],auth[_0xb857[8]](),license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[11]]([1,11],[_0xb857[9]]),controller[_0xb857[15]]);router[_0xb857[13]](_0xb857[16],auth[_0xb857[8]](),license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[11]]([11,17],[_0xb857[9]]),controller[_0xb857[17]]);router[_0xb857[13]](_0xb857[18],auth[_0xb857[8]](),license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[11]]([11,17],[_0xb857[9]]),controller[_0xb857[19]]);router[_0xb857[13]](_0xb857[20],auth[_0xb857[8]](),license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[11]]([11,17],[_0xb857[9]]),controller[_0xb857[21]]);router[_0xb857[13]](_0xb857[22],auth[_0xb857[8]](),license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[11]]([11,17],[_0xb857[9]]),controller[_0xb857[23]]);router[_0xb857[13]](_0xb857[24],license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[8]](),auth[_0xb857[11]]([11],[_0xb857[9],_0xb857[10]]),controller[_0xb857[25]]);router[_0xb857[13]](_0xb857[26],license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[8]](),auth[_0xb857[11]]([11],[_0xb857[9],_0xb857[10]]),controller[_0xb857[27]]);router[_0xb857[13]](_0xb857[28],license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[8]](),auth[_0xb857[11]]([11],[_0xb857[9],_0xb857[10]]),controller[_0xb857[29]]);router[_0xb857[31]](_0xb857[5],license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[8]](),auth[_0xb857[11]]([11],[_0xb857[9]]),controller[_0xb857[30]]);router[_0xb857[31]](_0xb857[32],license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[8]](),auth[_0xb857[11]]([11],[_0xb857[9]]),controller[_0xb857[33]]);router[_0xb857[35]](_0xb857[24],license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[8]](),auth[_0xb857[11]]([11],[_0xb857[9],_0xb857[10]]),controller[_0xb857[34]]);router[_0xb857[35]](_0xb857[26],license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[8]](),auth[_0xb857[11]]([11],[_0xb857[9],_0xb857[10]]),controller[_0xb857[36]]);router[_0xb857[38]](_0xb857[24],license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[8]](),auth[_0xb857[11]]([11],[_0xb857[9],_0xb857[10]]),controller[_0xb857[37]]);router[_0xb857[40]](_0xb857[24],license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[8]](),auth[_0xb857[11]]([11],[_0xb857[9]]),controller[_0xb857[39]]);router[_0xb857[40]](_0xb857[5],license[_0xb857[6]](),license[_0xb857[7]](),auth[_0xb857[8]](),auth[_0xb857[11]]([11],[_0xb857[9]]),controller[_0xb857[41]]);module[_0xb857[42]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./sms_room.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin', 'agent']), controller.index); +router.get('/describe', auth.isAuthenticated(), license.isValidDate(), license.hasSms(), auth.hasModule([1, 11], ['admin']), controller.describe); +router.get('/pending', auth.isAuthenticated(), license.isValidDate(), license.hasSms(), auth.hasModule([11, 17], ['admin']), controller.pending); +router.get('/new', auth.isAuthenticated(), license.isValidDate(), license.hasSms(), auth.hasModule([11, 17], ['admin']), controller.new); +router.get('/open', auth.isAuthenticated(), license.isValidDate(), license.hasSms(), auth.hasModule([11, 17], ['admin']), controller.open); +router.get('/closed', auth.isAuthenticated(), license.isValidDate(), license.hasSms(), auth.hasModule([11, 17], ['admin']), controller.closed); +router.get('/:id', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin', 'agent']), controller.show); +router.get('/:id/agents', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin', 'agent']), controller.showAgents); +router.get('/messages/:id', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin', 'agent']), controller.getRoomByMessage); +router.post('/', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.create); +router.post('/:id/messages', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.createMessage); +router.put('/:id', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin', 'agent']), controller.update); +router.put('/:id/agents', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin', 'agent']), controller.updateAgents); +router.patch('/:id', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin', 'agent']), controller.updatePatch); +router.delete('/:id', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.destroy); +router.delete('/', license.isValidDate(), license.hasSms(), auth.isAuthenticated(), auth.hasModule([11], ['admin']), controller.bulkDestroy); +module.exports = router; diff --git a/server/api/sms_room/sms_room.controller.js b/server/api/sms_room/sms_room.controller.js index 0ed1ee9..e3946f0 100644 --- a/server/api/sms_room/sms_room.controller.js +++ b/server/api/sms_room/sms_room.controller.js @@ -1 +1,399 @@ -var _0x271f=["\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","\x6D\x6F\x6D\x65\x6E\x74","\x53\x6D\x73\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x53\x6D\x73\x4D\x65\x73\x73\x61\x67\x65","\x53\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74","\x53\x6D\x73\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x53\x6D\x73\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\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x64\x65\x66\x61\x75\x6C\x74","\x61\x67\x65\x6E\x74","\x69\x64","\x75\x73\x65\x72","\x73\x63\x6F\x70\x65","\x72\x6F\x6C\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x6D\x61\x70","\x67\x65\x74\x53\x6D\x73\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x70\x65\x6E\x64\x69\x6E\x67","\x6C\x6F\x67","\x50\x45\x4E\x44\x49\x4E\x47","\x64\x61\x79","\x73\x74\x61\x72\x74\x4F\x66","\x6D\x65\x72\x67\x65","\x63\x6F\x75\x6E\x74","\x61\x6C\x6C","\x6E\x65\x77","\x4E\x45\x57","\x6F\x70\x65\x6E","\x4F\x50\x45\x4E","\x63\x6C\x6F\x73\x65\x64","\x43\x4C\x4F\x53\x45\x44","\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","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x67\x65\x74\x52\x6F\x6F\x6D\x42\x79\x4D\x65\x73\x73\x61\x67\x65","\x65\x72\x72","\x67\x65\x74\x53\x6D\x73\x52\x6F\x6F\x6D","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x63\x72\x65\x61\x74\x65\x4D\x65\x73\x73\x61\x67\x65","\x55\x73\x65\x72\x49\x64","\x53\x6D\x73\x52\x6F\x6F\x6D\x49\x64","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65\x41\x67\x65\x6E\x74\x73","\x61\x67\x65\x6E\x74\x73","\x73\x65\x74\x55\x73\x65\x72\x73","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x75\x70\x64\x61\x74\x65\x50\x61\x74\x63\x68","\x2C","\x73\x70\x6C\x69\x74"];_0x271f[0];var _=require(_0x271f[1]);var Util=require(_0x271f[2]);var moment=require(_0x271f[3]);var SmsRoom=require(_0x271f[5])[_0x271f[4]];var User=require(_0x271f[5])[_0x271f[6]];var SmsMessage=require(_0x271f[5])[_0x271f[7]];var SmsAccount=require(_0x271f[5])[_0x271f[8]];var User=require(_0x271f[5])[_0x271f[6]];var SmsApplication=require(_0x271f[5])[_0x271f[9]];var SmsQueue=require(_0x271f[5])[_0x271f[10]];function handleError(_0x57f3xb,_0x57f3xc){return _0x57f3xb[_0x271f[12]](500)[_0x271f[11]](_0x57f3xc)}exports[_0x271f[13]]= function(_0x57f3xd,_0x57f3xb){switch(_0x57f3xd[_0x271f[22]][_0x271f[24]]){case _0x271f[20]:return SmsRoom[_0x271f[23]](_0x271f[19],{method:[_0x271f[20],_0x57f3xd[_0x271f[22]][_0x271f[21]]]})[_0x271f[18]](Util[_0x271f[17]](_0x57f3xd[_0x271f[16]]))[_0x271f[15]](function(_0x57f3xe){return _0x57f3xb[_0x271f[12]](200)[_0x271f[11]](_0x57f3xe)})[_0x271f[14]](function(_0x57f3xc){return handleError(_0x57f3xb,_0x57f3xc)});default:return SmsRoom[_0x271f[23]](_0x271f[19])[_0x271f[18]](Util[_0x271f[17]](_0x57f3xd[_0x271f[16]]))[_0x271f[15]](function(_0x57f3xe){return _0x57f3xb[_0x271f[12]](200)[_0x271f[11]](_0x57f3xe)})[_0x271f[14]](function(_0x57f3xc){return handleError(_0x57f3xb,_0x57f3xc)})}};exports[_0x271f[25]]= function(_0x57f3xd,_0x57f3xb){return SmsRoom[_0x271f[25]]()[_0x271f[15]](function(_0x57f3xf){return _0x57f3xb[_0x271f[12]](200)[_0x271f[11]](_0x57f3xf)})[_0x271f[14]](function(_0x57f3xc){return handleError(_0x57f3xb,_0x57f3xc)})};function getSmsQueues(_0x57f3x11){return function(){switch(_0x57f3x11[_0x271f[24]]){case _0x271f[22]:return User[_0x271f[28]](_0x57f3x11[_0x271f[21]],{attributes:[_0x271f[21]]})[_0x271f[15]](Util[_0x271f[27]]({},{attributes:[_0x271f[21]],include:[{raw:true,model:User,attributes:[_0x271f[21]]}]}))[_0x271f[15]](function(_0x57f3x12){return {include:{model:SmsAccount,include:{model:SmsApplication,include:{model:SmsQueue,where:{id:_[_0x271f[26]](_0x57f3x12,_0x271f[21])}}}}}});default:return {}}}}exports[_0x271f[29]]= function(_0x57f3xd,_0x57f3xb){return Promise[_0x271f[36]]([])[_0x271f[15]](getSmsQueues(_0x57f3xd[_0x271f[22]]))[_0x271f[15]](function(_0x57f3x14){return SmsRoom[_0x271f[35]](_[_0x271f[34]](Util[_0x271f[17]](_0x57f3xd[_0x271f[16]],{status:_0x271f[31],updatedAt:{$gte:moment()[_0x271f[33]](_0x271f[32])}}),_0x57f3x14))})[_0x271f[15]](function(_0x57f3x13){return _0x57f3xb[_0x271f[12]](200)[_0x271f[11]]({value:_0x57f3x13})})[_0x271f[14]](function(_0x57f3xc){console[_0x271f[30]](_0x57f3xc);return handleError(_0x57f3xb,_0x57f3xc)})};exports[_0x271f[37]]= function(_0x57f3xd,_0x57f3xb){return Promise[_0x271f[36]]([])[_0x271f[15]](getSmsQueues(_0x57f3xd[_0x271f[22]]))[_0x271f[15]](function(_0x57f3x14){return SmsRoom[_0x271f[35]](_[_0x271f[34]](Util[_0x271f[17]](_0x57f3xd[_0x271f[16]],{status:_0x271f[38],updatedAt:{$gte:moment()[_0x271f[33]](_0x271f[32])}}),_0x57f3x14))})[_0x271f[15]](function(_0x57f3x13){return _0x57f3xb[_0x271f[12]](200)[_0x271f[11]]({value:_0x57f3x13})})[_0x271f[14]](function(_0x57f3xc){console[_0x271f[30]](_0x57f3xc);return handleError(_0x57f3xb,_0x57f3xc)})};exports[_0x271f[39]]= function(_0x57f3xd,_0x57f3xb){return Promise[_0x271f[36]]([])[_0x271f[15]](getSmsQueues(_0x57f3xd[_0x271f[22]]))[_0x271f[15]](function(_0x57f3x14){return SmsRoom[_0x271f[35]](_[_0x271f[34]](Util[_0x271f[17]](_0x57f3xd[_0x271f[16]],{status:_0x271f[40],updatedAt:{$gte:moment()[_0x271f[33]](_0x271f[32])}}),_0x57f3x14))})[_0x271f[15]](function(_0x57f3x13){return _0x57f3xb[_0x271f[12]](200)[_0x271f[11]]({value:_0x57f3x13})})[_0x271f[14]](function(_0x57f3xc){console[_0x271f[30]](_0x57f3xc);return handleError(_0x57f3xb,_0x57f3xc)})};exports[_0x271f[41]]= function(_0x57f3xd,_0x57f3xb){return Promise[_0x271f[36]]([])[_0x271f[15]](getSmsQueues(_0x57f3xd[_0x271f[22]]))[_0x271f[15]](function(_0x57f3x14){return SmsRoom[_0x271f[35]](_[_0x271f[34]](Util[_0x271f[17]](_0x57f3xd[_0x271f[16]],{status:_0x271f[42],updatedAt:{$gte:moment()[_0x271f[33]](_0x271f[32])}}),_0x57f3x14))})[_0x271f[15]](function(_0x57f3x13){return _0x57f3xb[_0x271f[12]](200)[_0x271f[11]]({value:_0x57f3x13})})[_0x271f[14]](function(_0x57f3xc){console[_0x271f[30]](_0x57f3xc);return handleError(_0x57f3xb,_0x57f3xc)})};exports[_0x271f[43]]= function(_0x57f3xd,_0x57f3xb){return SmsRoom[_0x271f[23]](_0x271f[19])[_0x271f[28]](_0x57f3xd[_0x271f[45]][_0x271f[21]])[_0x271f[15]](function(_0x57f3x15){if(!_0x57f3x15){return _0x57f3xb[_0x271f[44]](404)};return _0x57f3xb[_0x271f[11]](_0x57f3x15)})[_0x271f[14]](function(_0x57f3xc){return handleError(_0x57f3xb,_0x57f3xc)})};exports[_0x271f[46]]= function(_0x57f3xd,_0x57f3xb,_0x57f3x16){return SmsRoom[_0x271f[28]](_0x57f3xd[_0x271f[45]][_0x271f[21]])[_0x271f[15]](function(_0x57f3x15){if(!_0x57f3x15){return _0x57f3xb[_0x271f[44]](404)};return _0x57f3x15[_0x271f[51]]({attributes:[_0x271f[21],_0x271f[47],_0x271f[48],_0x271f[49],_0x271f[24],_0x271f[50]]})})[_0x271f[15]](function(_0x57f3x17){return _0x57f3xb[_0x271f[11]](_0x57f3x17)})[_0x271f[14]](function(_0x57f3xc){return handleError(_0x57f3xb,_0x57f3xc)})};exports[_0x271f[52]]= function(_0x57f3xd,_0x57f3xb,_0x57f3x16){return SmsMessage[_0x271f[28]](_0x57f3xd[_0x271f[45]][_0x271f[21]])[_0x271f[15]](function(_0x57f3x19){return _0x57f3x19[_0x271f[54]]({include:[{model:SmsAccount},{model:SmsMessage,include:[{model:User,attributes:[_0x271f[21],_0x271f[47],_0x271f[48],_0x271f[49]]}]},{model:User,attributes:[_0x271f[21],_0x271f[47],_0x271f[48],_0x271f[49]]}]})})[_0x271f[15]](function(_0x57f3x18){return _0x57f3xb[_0x271f[11]](_0x57f3x18)})[_0x271f[14]](function(_0x57f3xc){console[_0x271f[30]](_0x271f[53],_0x57f3xc);return handleError(_0x57f3xb,_0x57f3xc)})};exports[_0x271f[55]]= function(_0x57f3xd,_0x57f3xb){return SmsRoom[_0x271f[55]](_0x57f3xd[_0x271f[56]])[_0x271f[15]](function(_0x57f3x1a){return _0x57f3xb[_0x271f[12]](201)[_0x271f[11]](_0x57f3x1a)})[_0x271f[14]](function(_0x57f3xc){return handleError(_0x57f3xb,_0x57f3xc)})};exports[_0x271f[57]]= function(_0x57f3xd,_0x57f3xb,_0x57f3x16){_0x57f3xd[_0x271f[56]][_0x271f[58]]= _0x57f3xd[_0x271f[22]][_0x271f[21]];_0x57f3xd[_0x271f[56]][_0x271f[59]]= _0x57f3xd[_0x271f[45]][_0x271f[21]];return SmsMessage[_0x271f[55]](_0x57f3xd[_0x271f[56]])[_0x271f[15]](function(_0x57f3x1a){return _0x57f3xb[_0x271f[12]](201)[_0x271f[11]](_0x57f3x1a)})[_0x271f[14]](function(_0x57f3xc){return handleError(_0x57f3xb,_0x57f3xc)})};exports[_0x271f[60]]= function(_0x57f3xd,_0x57f3xb){if(_0x57f3xd[_0x271f[56]][_0x271f[21]]){delete _0x57f3xd[_0x271f[56]][_0x271f[21]]};return SmsRoom[_0x271f[28]](_0x57f3xd[_0x271f[45]][_0x271f[21]])[_0x271f[15]](function(_0x57f3x15){if(!_0x57f3x15){return _0x57f3xb[_0x271f[44]](404)};var _0x57f3x1b=_[_0x271f[34]](_0x57f3x15,_0x57f3xd[_0x271f[56]]);return _0x57f3x1b[_0x271f[61]]()})[_0x271f[15]](function(_0x57f3x15){return _0x57f3xb[_0x271f[12]](200)[_0x271f[11]](_0x57f3x15)})[_0x271f[14]](function(_0x57f3xc){return handleError(_0x57f3xb,_0x57f3xc)})};exports[_0x271f[62]]= function(_0x57f3xd,_0x57f3xb,_0x57f3x16){return SmsRoom[_0x271f[28]](_0x57f3xd[_0x271f[45]][_0x271f[21]])[_0x271f[15]](function(_0x57f3x15){if(!_0x57f3x15){return _0x57f3xb[_0x271f[44]](404)};return _0x57f3x15[_0x271f[64]](_0x57f3xd[_0x271f[56]][_0x271f[63]],{individualHooks:true})})[_0x271f[15]](function(){return _0x57f3xb[_0x271f[44]](200)})[_0x271f[14]](function(_0x57f3xc){return handleError(_0x57f3xb,_0x57f3xc)})};exports[_0x271f[65]]= function(_0x57f3xd,_0x57f3xb){return SmsRoom[_0x271f[28]](_0x57f3xd[_0x271f[45]][_0x271f[21]])[_0x271f[15]](function(_0x57f3x15){if(!_0x57f3x15){return _0x57f3xb[_0x271f[44]](404)};return _0x57f3x15[_0x271f[65]]()})[_0x271f[15]](function(){return _0x57f3xb[_0x271f[44]](204)})[_0x271f[14]](function(_0x57f3xc){return handleError(_0x57f3xb,_0x57f3xc)})};exports[_0x271f[66]]= function(_0x57f3xd,_0x57f3xb){return SmsRoom[_0x271f[65]]({where:{id:_0x57f3xd[_0x271f[16]][_0x271f[67]]},individualHooks:true})[_0x271f[15]](function(){return _0x57f3xb[_0x271f[44]](200)})[_0x271f[14]](function(_0x57f3xc){return handleError(_0x57f3xb,_0x57f3xc)})};exports[_0x271f[68]]= function(_0x57f3xd,_0x57f3xb,_0x57f3x16){var _0x57f3x1c={where:{id:_0x57f3xd[_0x271f[45]][_0x271f[21]][_0x271f[70]](_0x271f[69])},user:_0x57f3xd[_0x271f[22]],individualHooks:true};return SmsRoom[_0x271f[60]](_0x57f3xd[_0x271f[56]],_0x57f3x1c)[_0x271f[15]](function(_0x57f3x1d){if(!_0x57f3x1d){return _0x57f3xb[_0x271f[44]](404)};return _0x57f3x1d})[_0x271f[15]](function(_0x57f3x1d){return _0x57f3xb[_0x271f[44]](200)})[_0x271f[14]](function(_0x57f3xc){return handleError(_0x57f3xb,_0x57f3xc)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/sms/rooms -> index + * POST /api/sms/rooms -> create + * GET /api/sms/rooms/:id -> show + * PUT /api/sms/rooms/:id -> update + * DELETE /api/sms/rooms/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); +var moment = require('moment'); + +var SmsRoom = require('../../models').SmsRoom; +var User = require('../../models').User; +var SmsMessage = require('../../models').SmsMessage; +var SmsAccount = require('../../models').SmsAccount; +var User = require('../../models').User; +var SmsApplication = require('../../models').SmsApplication; +var SmsQueue = require('../../models').SmsQueue; + + +function handleError(res, err) { + return res.status(500).send(err); +} + + + +// Gets a list of SmsRooms +exports.index = function(req, res) { + switch (req.user.role) { + case 'agent': + return SmsRoom + .scope('default', { + method: ['agent', req.user.id] + }) + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + + default: + return SmsRoom + .scope('default') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + } +} + +// Get list of fields +exports.describe = function(req, res) { + return SmsRoom + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function getSmsQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.id, { + attributes: ['id'] + }) + .then(Util.getSmsQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + return { + include: { + model: SmsAccount, + include: { + model: SmsApplication, + include: { + model: SmsQueue, + where: { + id: _.map(userQueues, 'id') + } + } + } + } + }; + }); + default: + return {}; + } + } +} + +exports.pending = function(req, res) { + return Promise + .all([]) + .then(getSmsQueues(req.user)) + .then(function(condition) { + return SmsRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'PENDING', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.new = function(req, res) { + return Promise + .all([]) + .then(getSmsQueues(req.user)) + .then(function(condition) { + return SmsRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'NEW', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.open = function(req, res) { + return Promise + .all([]) + .then(getSmsQueues(req.user)) + .then(function(condition) { + return SmsRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'OPEN', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.closed = function(req, res) { + return Promise + .all([]) + .then(getSmsQueues(req.user)) + .then(function(condition) { + return SmsRoom + .count(_.merge(Util.getQuery(req.query, { + status: 'CLOSED', + updatedAt: { + $gte: moment().startOf('day') + } + }), condition)); + }) + .then(function(data) { + return res.status(200).send({ + value: data + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Gets a single SmsRoom from the DB +exports.show = function(req, res) { + return SmsRoom + .scope('default') + .findById(req.params.id) + .then(function(smsRoom) { + if (!smsRoom) { + return res.sendStatus(404); + } + return res.send(smsRoom); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +exports.showAgents = function(req, res, next) { + return SmsRoom + .findById(req.params.id) + .then(function(smsRoom) { + if (!smsRoom) { + return res.sendStatus(404); + } + + return smsRoom + .getUsers({ + attributes: ['id', 'name', 'fullname', 'email', 'role', 'internal'] + }); + }) + .then(function(users) { + return res.send(users); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +exports.getRoomByMessage = function(req, res, next) { + return SmsMessage + .findById(req.params.id) + .then(function(Message) { + return Message + .getSmsRoom({ + include: [{ + model: SmsAccount + }, { + model: SmsMessage, + include: [{ + model: User, + attributes: ['id', 'name', 'fullname', 'email'] + }] + }, { + model: User, + attributes: ['id', 'name', 'fullname', 'email'] + }] + }); + }) + .then(function(Room) { + // console.log('room', Room); + return res.send(Room); + }) + .catch(function(err) { + console.log('err', err); + return handleError(res, err); + }); +}; +// Creates a new SmsRoom in the DB +exports.create = function(req, res) { + + return SmsRoom + .create(req.body) + .then(function(smsMessage) { + return res.status(201).send(smsMessage); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + + +// Creates a new mailMessage in the DB. +exports.createMessage = function(req, res, next) { + req.body.UserId = req.user.id; + req.body.SmsRoomId = req.params.id; + return SmsMessage + .create(req.body) + .then(function(smsMessage) { + return res.status(201).send(smsMessage); + }).catch(function(err) { + return handleError(res, err); + }); +}; +// Updates an existing SmsRoom in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return SmsRoom + .findById(req.params.id) + .then(function(smsRoom) { + if (!smsRoom) { + return res.sendStatus(404); + } + + var updated = _.merge(smsRoom, req.body); + + return updated + .save(); + }) + .then(function(smsRoom) { + return res.status(200).send(smsRoom); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.updateAgents = function(req, res, next) { + return SmsRoom + .findById(req.params.id) + .then(function(smsRoom) { + if (!smsRoom) { + return res.sendStatus(404); + } + + return smsRoom + .setUsers(req.body.agents, { + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a SmsRoom from the DB +exports.destroy = function(req, res) { + return SmsRoom + .findById(req.params.id) + .then(function(smsRoom) { + if (!smsRoom) { + return res.sendStatus(404); + } + return smsRoom.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +exports.bulkDestroy = function(req, res) { + return SmsRoom + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +exports.updatePatch = function(req, res, next) { + var _options = { + where: { + id: req.params.id.split(',') + }, + user: req.user, + individualHooks: true + }; + + return SmsRoom + .update(req.body, _options) + .then(function(smsRooms) { + if (!smsRooms) { + return res.sendStatus(404); + } + return smsRooms + }) + .then(function(smsRooms) { + return res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; diff --git a/server/api/sms_room/sms_room.events.js b/server/api/sms_room/sms_room.events.js index 5aae0c9..a1390fd 100644 --- a/server/api/sms_room/sms_room.events.js +++ b/server/api/sms_room/sms_room.events.js @@ -1 +1,36 @@ -var _0x766a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x6D\x73\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x766a[0];const EventEmitter=require(_0x766a[1]);const SmsRoom=require(_0x766a[3])[_0x766a[2]];var SmsRoomEvents= new EventEmitter();SmsRoomEvents[_0x766a[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x766a[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x766a[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x766a[6]};for(var e in events){var event=events[e];SmsRoom[_0x766a[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xe68cx8,_0xe68cx9,_0xe68cxa){SmsRoomEvents[_0x766a[10]](event+ _0x766a[8]+ _0xe68cx8[_0x766a[9]],_0xe68cx8);SmsRoomEvents[_0x766a[10]](event,_0xe68cx8);_0xe68cxa(null)}}module[_0x766a[11]]= SmsRoomEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SmsRoom = require('../../models').SmsRoom; + +var SmsRoomEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SmsRoomEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SmsRoom.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SmsRoomEvents.emit(event + ':' + doc._id, doc); + SmsRoomEvents.emit(event, doc); + done(null); + } +} + +module.exports = SmsRoomEvents; diff --git a/server/api/sms_room/sms_room.socket.js b/server/api/sms_room/sms_room.socket.js index 66f8191..fe08042 100644 --- a/server/api/sms_room/sms_room.socket.js +++ b/server/api/sms_room/sms_room.socket.js @@ -1 +1,33 @@ -var _0x78b5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x6D\x73\x5F\x72\x6F\x6F\x6D\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x6D\x73\x5F\x72\x6F\x6F\x6D\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x78b5[0];const SmsRoomEvents=require(_0x78b5[1]);var events=[_0x78b5[2],_0x78b5[2],_0x78b5[3]];exports[_0x78b5[4]]= function(_0xd534x3){for(var _0xd534x4=0,_0xd534x5=events[_0x78b5[5]];_0xd534x4< _0xd534x5;_0xd534x4++){var _0xd534x6=events[_0xd534x4];var _0xd534x7=createListener(_0x78b5[6]+ _0xd534x6,_0xd534x3);SmsRoomEvents[_0x78b5[7]](_0xd534x6,_0xd534x7);_0xd534x3[_0x78b5[7]](_0x78b5[8],removeListener(_0xd534x6,_0xd534x7))}};function createListener(_0xd534x6,_0xd534x3){return function(_0xd534x9){_0xd534x3[_0x78b5[9]](_0xd534x6,_0xd534x9)}}function removeListener(_0xd534x6,_0xd534x7){return function(){SmsRoomEvents[_0x78b5[10]](_0xd534x6,_0xd534x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SmsRoomEvents = require('./sms_room.events'); + +// Model events to emit +var events = ['save', 'save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('sms_room:' + event, socket); + + SmsRoomEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + + +function removeListener(event, listener) { + return function() { + SmsRoomEvents.removeListener(event, listener); + }; +} diff --git a/server/api/sound/index.js b/server/api/sound/index.js index 16a7cd4..ac4a804 100644 --- a/server/api/sound/index.js +++ b/server/api/sound/index.js @@ -1 +1,17 @@ -var _0xc2de=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x73\x6F\x75\x6E\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x2F\x3A\x69\x64\x2F\x73\x74\x72\x65\x61\x6D","\x73\x74\x72\x65\x61\x6D","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xc2de[0];var express=require(_0xc2de[1]);var controller=require(_0xc2de[2]);var auth=require(_0xc2de[3]);var router=express.Router();router[_0xc2de[9]](_0xc2de[4],auth[_0xc2de[5]](),auth[_0xc2de[7]]([13,7],[_0xc2de[6]]),controller[_0xc2de[8]]);router[_0xc2de[9]](_0xc2de[10],auth[_0xc2de[5]](),auth[_0xc2de[7]]([13],[_0xc2de[6]]),controller[_0xc2de[11]]);router[_0xc2de[9]](_0xc2de[12],auth[_0xc2de[5]](),auth[_0xc2de[7]]([13],[_0xc2de[6]]),controller[_0xc2de[13]]);router[_0xc2de[9]](_0xc2de[14],auth[_0xc2de[5]](),auth[_0xc2de[7]]([13],[_0xc2de[6]]),controller[_0xc2de[15]]);router[_0xc2de[17]](_0xc2de[4],auth[_0xc2de[5]](),auth[_0xc2de[7]]([13],[_0xc2de[6]]),controller[_0xc2de[16]]);router[_0xc2de[19]](_0xc2de[10],auth[_0xc2de[5]](),auth[_0xc2de[7]]([13],[_0xc2de[6]]),controller[_0xc2de[18]]);router[_0xc2de[21]](_0xc2de[10],auth[_0xc2de[5]](),auth[_0xc2de[7]]([13],[_0xc2de[6]]),controller[_0xc2de[20]]);module[_0xc2de[22]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./sound.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([13, 7], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.show); +router.get('/:id/download', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.download); +router.get('/:id/stream', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.stream); +router.post('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.update); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/sound/sound.controller.js b/server/api/sound/sound.controller.js index 6050a1e..6d5f78f 100644 --- a/server/api/sound/sound.controller.js +++ b/server/api/sound/sound.controller.js @@ -1 +1,278 @@ -var _0xa779=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x53\x6F\x75\x6E\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x70\x6C\x6F\x61\x64\x2D\x66\x69\x6C\x65","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x73\x6F\x78","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x66\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x66\x69\x6C\x65\x2D\x62\x61\x73\x65\x36\x34","\x62\x6C\x75\x65\x62\x69\x72\x64","\x53\x65\x74\x74\x69\x6E\x67","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x53\x6F\x75\x6E\x64\x73","\x6A\x6F\x69\x6E","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x65\x78\x74\x6E\x61\x6D\x65","\x4D\x61\x78\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x66\x69\x6C\x65\x73\x20\x75\x70\x6C\x6F\x61\x64\x20\x65\x78\x63\x65\x65\x64\x65\x64","\x4F\x6E\x6C\x79\x20\x77\x61\x76\x2C\x6D\x70\x33\x2C\x67\x73\x6D\x2C\x20\x61\x6E\x64\x20\x6F\x67\x67\x20\x66\x6F\x72\x6D\x61\x74\x20\x61\x63\x63\x65\x70\x74\x65\x64","\x54\x68\x65\x20\x6D\x61\x78\x69\x6D\x75\x6D\x20\x66\x69\x6C\x65\x20\x73\x69\x7A\x65\x20\x69\x73\x20\x31\x35\x20\x4D\x62","\x49\x6E\x76\x61\x6C\x69\x64\x20\x72\x65\x71\x75\x65\x73\x74","\x65\x6E\x64","\x66\x69\x6C\x65","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x66\x6F\x72\x6D\x61\x74","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x66\x6F\x72\x6D\x61\x74","\x77\x61\x76","\x6E\x61\x6D\x65","\x64\x69\x73\x70\x6C\x61\x79\x5F\x6E\x61\x6D\x65","\x62\x61\x73\x65\x6E\x61\x6D\x65","\x73\x61\x76\x65\x5F\x6E\x61\x6D\x65","\x73\x6F\x75\x6E\x64\x50\x61\x74\x68","\x2F\x76\x61\x72\x2F\x6F\x70\x74\x2F\x6D\x6F\x74\x69\x6F\x6E\x2F\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x73\x6F\x75\x6E\x64\x73\x2F\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x2E","\x30\x37\x37\x37","\x63\x68\x6D\x6F\x64\x53\x79\x6E\x63","\x69\x64\x65\x6E\x74\x69\x66\x79","\x74\x72\x61\x6E\x73\x63\x6F\x64\x65","\x65\x72\x72\x6F\x72","\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x20\x43\x6F\x6E\x76\x65\x72\x73\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x3A\x20","\x75\x6E\x6C\x69\x6E\x6B","\x6F\x6E","\x70\x72\x6F\x67\x72\x65\x73\x73","\x73\x72\x63","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x64\x75\x72\x61\x74\x69\x6F\x6E","\x64\x75\x72\x61\x74\x69\x6F\x6E","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x73\x61\x6D\x70\x6C\x65\x43\x6F\x75\x6E\x74","\x73\x61\x6D\x70\x6C\x65\x43\x6F\x75\x6E\x74","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x63\x68\x61\x6E\x6E\x65\x6C\x43\x6F\x75\x6E\x74","\x63\x68\x61\x6E\x6E\x65\x6C\x43\x6F\x75\x6E\x74","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x62\x69\x74\x52\x61\x74\x65","\x62\x69\x74\x52\x61\x74\x65","\x6F\x72\x69\x67\x69\x6E\x61\x6C\x5F\x73\x61\x6D\x70\x6C\x65\x52\x61\x74\x65","\x73\x61\x6D\x70\x6C\x65\x52\x61\x74\x65","\x64\x65\x73\x74","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x64\x75\x72\x61\x74\x69\x6F\x6E","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x73\x61\x6D\x70\x6C\x65\x43\x6F\x75\x6E\x74","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x63\x68\x61\x6E\x6E\x65\x6C\x43\x6F\x75\x6E\x74","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x62\x69\x74\x52\x61\x74\x65","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x5F\x73\x61\x6D\x70\x6C\x65\x52\x61\x74\x65","\x43\x6F\x6E\x76\x65\x72\x73\x69\x6F\x6E\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x64","\x6C\x6F\x67","\x73\x74\x61\x72\x74","\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x20\x55\x70\x6C\x6F\x61\x64\x20\x65\x72\x72\x6F\x72\x20\x3A","\x70\x61\x72\x73\x65","\x75\x70\x64\x61\x74\x65","\x62\x6F\x64\x79","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x6F\x72\x69\x67\x69\x6E\x61\x6C","\x73\x74\x72\x65\x61\x6D","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x62\x61\x73\x65\x36\x34","\x62\x69\x6E\x61\x72\x79","\x72\x65\x61\x64\x46\x69\x6C\x65","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x53\x6F\x75\x6E\x64\x73","\x5F\x66\x6F\x72\x6D\x61\x74"];_0xa779[0];var _=require(_0xa779[1]);var Sound=require(_0xa779[3])[_0xa779[2]];var uploadFile=require(_0xa779[4]);var sr=require(_0xa779[5]);var sox=require(_0xa779[6]);var path=require(_0xa779[7]);var config=require(_0xa779[8]);var fs=require(_0xa779[9]);var sequelize=require(_0xa779[3])[_0xa779[10]];var base64=require(_0xa779[11]);var Promise=require(_0xa779[12]);var Setting=require(_0xa779[3])[_0xa779[13]];exports[_0xa779[14]]= function(_0x3d6cxd,_0x3d6cxe){return Sound[_0xa779[19]]()[_0xa779[18]](function(_0x3d6cx10){return _0x3d6cxe[_0xa779[17]](200)[_0xa779[16]](_0x3d6cx10)})[_0xa779[15]](function(_0x3d6cxf){return handleError(_0x3d6cxe,_0x3d6cxf)})};exports[_0xa779[20]]= function(_0x3d6cxd,_0x3d6cxe){return Sound[_0xa779[24]](_0x3d6cxd[_0xa779[23]][_0xa779[22]])[_0xa779[18]](function(Sound){if(!Sound){return _0x3d6cxe[_0xa779[21]](404)};return _0x3d6cxe[_0xa779[16]](Sound)})[_0xa779[15]](function(_0x3d6cxf){return handleError(_0x3d6cxe,_0x3d6cxf)})};exports[_0xa779[25]]= function(_0x3d6cxd,_0x3d6cxe){var _0x3d6cx11= new uploadFile({dest:path[_0xa779[27]](config[_0xa779[26]]),maxFileSize:15* 1000000,maxNumberOfFiles:10,minNumberOfFiles:0,acceptFileTypes:/(\.|\/)(wav|mp3|gsm|ogg)$/i,rename:function(_0x3d6cx12,_0x3d6cx13){return sr()+ path[_0xa779[29]](_0x3d6cx13[_0xa779[28]])},messages:{maxNumberOfFiles:_0xa779[30],acceptFileTypes:_0xa779[31],maxFileSize:_0xa779[32],invalidRequest:_0xa779[33]}});_0x3d6cx11[_0xa779[56]](_0xa779[34],function(_0x3d6cx14,_0x3d6cx15){if(!_0x3d6cx15[_0xa779[35]][_0xa779[28]]){return _0x3d6cxe[_0xa779[17]](500)[_0xa779[16]](_0x3d6cx11)};return Setting[_0xa779[24]](1)[_0xa779[18]](function(_0x3d6cx16){var _0x3d6cx17={};var _0x3d6cx18=path[_0xa779[29]](_0x3d6cx15[_0xa779[35]][_0xa779[28]]);_0x3d6cx17[_0xa779[36]]= _0xa779[37];_0x3d6cx17[_0xa779[38]]= path[_0xa779[29]](_0x3d6cx15[_0xa779[35]][_0xa779[28]])[_0xa779[39]](1);_0x3d6cx17[_0xa779[40]]= _0xa779[41];_0x3d6cx17[_0xa779[42]]= _0x3d6cx17[_0xa779[43]]= path[_0xa779[44]](_0x3d6cx15[_0xa779[35]][_0xa779[7]],_0x3d6cx18);_0x3d6cx17[_0xa779[45]]= path[_0xa779[44]](_0x3d6cx15[_0xa779[35]][_0xa779[28]],_0x3d6cx18);var _0x3d6cx19=path[_0xa779[27]](config[_0xa779[26]],_0x3d6cx17[_0xa779[45]]+ _0x3d6cx18);var _0x3d6cx1a=path[_0xa779[27]](_0x3d6cx16[_0xa779[46]]|| _0xa779[47],_0x3d6cx17[_0xa779[45]]+ _0xa779[48]+ _0x3d6cx17[_0xa779[40]]);fs[_0xa779[50]](_0x3d6cx19,parseInt(_0xa779[49],8));sox[_0xa779[51]](_0x3d6cx19,function(_0x3d6cxf,_0x3d6cx1b){});var _0x3d6cx1c=sox[_0xa779[52]](_0x3d6cx19,_0x3d6cx1a,{sampleRate:8000,format:_0xa779[41],channelCount:1,bitRate:192* 1024,compressionQuality:5});_0x3d6cx1c[_0xa779[56]](_0xa779[53],function(_0x3d6cxf){console[_0xa779[53]](_0xa779[54],_0x3d6cxf);fs[_0xa779[55]](_0x3d6cx19,function(_0x3d6cxf){if(_0x3d6cxf){return handleError(_0x3d6cxe,_0x3d6cxf)}});return handleError(_0x3d6cxe,_0x3d6cxf)});_0x3d6cx1c[_0xa779[56]](_0xa779[57],function(_0x3d6cx1d,_0x3d6cx1e){});_0x3d6cx1c[_0xa779[56]](_0xa779[58],function(_0x3d6cx1f){_0x3d6cx17[_0xa779[59]]= isNaN(_0x3d6cx1f[_0xa779[60]])?null:_0x3d6cx1f[_0xa779[60]]* 1000;_0x3d6cx17[_0xa779[61]]= isNaN(_0x3d6cx1f[_0xa779[62]])?null:_0x3d6cx1f[_0xa779[62]];_0x3d6cx17[_0xa779[63]]= isNaN(_0x3d6cx1f[_0xa779[64]])?null:_0x3d6cx1f[_0xa779[64]];_0x3d6cx17[_0xa779[65]]= isNaN(_0x3d6cx1f[_0xa779[66]])?null:_0x3d6cx1f[_0xa779[66]];_0x3d6cx17[_0xa779[67]]= isNaN(_0x3d6cx1f[_0xa779[68]])?null:_0x3d6cx1f[_0xa779[68]]});_0x3d6cx1c[_0xa779[56]](_0xa779[69],function(_0x3d6cx1f){_0x3d6cx17[_0xa779[70]]= isNaN(_0x3d6cx1f[_0xa779[60]])?null:_0x3d6cx1f[_0xa779[60]]* 1000;_0x3d6cx17[_0xa779[71]]= isNaN(_0x3d6cx1f[_0xa779[62]])?null:_0x3d6cx1f[_0xa779[62]];_0x3d6cx17[_0xa779[72]]= isNaN(_0x3d6cx1f[_0xa779[64]])?null:_0x3d6cx1f[_0xa779[64]];_0x3d6cx17[_0xa779[73]]= isNaN(_0x3d6cx1f[_0xa779[66]])?null:_0x3d6cx1f[_0xa779[66]];_0x3d6cx17[_0xa779[74]]= isNaN(_0x3d6cx1f[_0xa779[68]])?null:_0x3d6cx1f[_0xa779[68]]});_0x3d6cx1c[_0xa779[56]](_0xa779[34],function(){console[_0xa779[76]](_0xa779[75]);fs[_0xa779[50]](_0x3d6cx1a,parseInt(_0xa779[49],8));return Sound[_0xa779[25]](_0x3d6cx17)[_0xa779[18]](function(_0x3d6cx20){return _0x3d6cxe[_0xa779[17]](201)[_0xa779[16]](_0x3d6cx20)})[_0xa779[15]](function(_0x3d6cxf){console[_0xa779[76]](_0x3d6cxf);return handleError(_0x3d6cxe,_0x3d6cxf)})});_0x3d6cx1c[_0xa779[77]]()})[_0xa779[15]](function(_0x3d6cxf){return handleError(_0x3d6cxe,_0x3d6cxf)})});_0x3d6cx11[_0xa779[56]](_0xa779[53],function(_0x3d6cxf){console[_0xa779[76]](_0xa779[78],_0x3d6cxf);return handleError(_0x3d6cxe,_0x3d6cxf)});_0x3d6cx11[_0xa779[79]](_0x3d6cxd)};exports[_0xa779[80]]= function(_0x3d6cxd,_0x3d6cxe){if(_0x3d6cxd[_0xa779[81]][_0xa779[22]]){delete _0x3d6cxd[_0xa779[81]][_0xa779[22]]};return Sound[_0xa779[24]](_0x3d6cxd[_0xa779[23]][_0xa779[22]])[_0xa779[18]](function(_0x3d6cx20){if(!_0x3d6cx20){return _0x3d6cxe[_0xa779[21]](404)};var _0x3d6cx21=_[_0xa779[82]](_0x3d6cx20,_0x3d6cxd[_0xa779[81]]);return _0x3d6cx21[_0xa779[83]]()})[_0xa779[18]](function(_0x3d6cx20){return _0x3d6cxe[_0xa779[17]](200)[_0xa779[16]](_0x3d6cx20)})[_0xa779[15]](function(_0x3d6cxf){return handleError(_0x3d6cxe,_0x3d6cxf)})};exports[_0xa779[84]]= function(_0x3d6cxd,_0x3d6cxe){var _0x3d6cx22;return Setting[_0xa779[24]](1)[_0xa779[18]](function(_0x3d6cx16){_0x3d6cx22= _0x3d6cx16;return Sound[_0xa779[24]](_0x3d6cxd[_0xa779[23]][_0xa779[22]])})[_0xa779[18]](function(_0x3d6cx20){if(!_0x3d6cx20){return _0x3d6cxe[_0xa779[21]](404)};var _0x3d6cx23=path[_0xa779[27]](config[_0xa779[26]],_0x3d6cx20[_0xa779[45]]+ _0xa779[48]+ _0x3d6cx20[_0xa779[38]]);var _0x3d6cx24=path[_0xa779[27]](_0x3d6cx22[_0xa779[46]]|| _0xa779[47],_0x3d6cx20[_0xa779[45]]+ _0xa779[48]+ _0x3d6cx20[_0xa779[40]]);return sequelize[_0xa779[85]](function(_0x3d6cx25){return _0x3d6cx20[_0xa779[84]]({transaction:_0x3d6cx25})[_0xa779[18]](function(){fs[_0xa779[55]](_0x3d6cx23,function(_0x3d6cxf){if(_0x3d6cxf){console[_0xa779[76]](_0x3d6cxf)}});fs[_0xa779[55]](_0x3d6cx24,function(_0x3d6cxf){if(_0x3d6cxf){console[_0xa779[76]](_0x3d6cxf)}});return _0x3d6cxe[_0xa779[17]](200)[_0xa779[16]](_0x3d6cx20)})})[_0xa779[15]](function(_0x3d6cxf){return handleError(_0x3d6cxe,_0x3d6cxf)})})[_0xa779[15]](function(_0x3d6cxf){return handleError(_0x3d6cxe,_0x3d6cxf)})};exports[_0xa779[86]]= function(_0x3d6cxd,_0x3d6cxe){getStream(_0x3d6cxd,_0x3d6cxe,_0xa779[87])};exports[_0xa779[88]]= function(_0x3d6cxd,_0x3d6cxe){getStream(_0x3d6cxd,_0x3d6cxe,_0xa779[89])};function getStream(_0x3d6cxd,_0x3d6cxe,_0x3d6cx27){return Sound[_0xa779[24]](_0x3d6cxd[_0xa779[23]][_0xa779[22]])[_0xa779[18]](function(_0x3d6cx20){var _0x3d6cx29=Promise[_0xa779[93]](fs[_0xa779[92]]);return _0x3d6cx29(path[_0xa779[27]](config[_0x3d6cx27+ _0xa779[94]],_0x3d6cx20[_0xa779[45]]+ _0xa779[48]+ _0x3d6cx20[_0x3d6cx27+ _0xa779[95]]))})[_0xa779[18]](function(_0x3d6cx1b){var _0x3d6cx28= new Buffer(_0x3d6cx1b,_0xa779[91]).toString(_0xa779[90]);return _0x3d6cx28})[_0xa779[18]](function(_0x3d6cx28){return _0x3d6cxe[_0xa779[17]](200)[_0xa779[16]]({downloadString:_0x3d6cx28})})[_0xa779[15]](function(_0x3d6cxf){console[_0xa779[76]](_0x3d6cxf);return handleError(_0x3d6cxe,_0x3d6cxf)})}function handleError(_0x3d6cxe,_0x3d6cxf){return _0x3d6cxe[_0xa779[17]](500)[_0xa779[16]](_0x3d6cxf)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Sound = require('../../models').Sound; +var uploadFile = require('upload-file'); +var sr = require('simple-random'); +var sox = require('sox'); +var path = require('path'); +var config = require('../../config/environment'); +var fs = require('fs'); +var sequelize = require('../../models').sequelize; +var base64 = require('file-base64'); +var Promise = require('bluebird'); +var Setting = require('../../models').Setting; + +// Get list of Sounds +exports.index = function(req, res) { + return Sound + .findAndCountAll() + .then(function(Sounds) { + return res.status(200).send(Sounds); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single Sound +exports.show = function(req, res) { + return Sound + .findById(req.params.id) + .then(function(Sound) { + if (!Sound) { + return res.sendStatus(404); + } + return res.send(Sound); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new Sound in the DB. +exports.create = function(req, res) { + var upload = new uploadFile({ + dest: path.join(config.originalSounds), + maxFileSize: 15 * 1000000, + maxNumberOfFiles: 10, + minNumberOfFiles: 0, + acceptFileTypes: /(\.|\/)(wav|mp3|gsm|ogg)$/i, + rename: function(name, file) { + return sr() + path.extname(file.filename); + }, + messages: { + maxNumberOfFiles: "Max number of files upload exceeded", + acceptFileTypes: "Only wav,mp3,gsm, and ogg format accepted", + maxFileSize: "The maximum file size is 15 Mb", + invalidRequest: "Invalid request" + } + }); + + upload.on('end', function(fields, files) { + if (!files.file.filename) { + return res.status(500).send(upload); + } + + return Setting + .findById(1) + .then(function(settings) { + var job_details = {}; + var original_format = path.extname(files.file.filename); + job_details.description = ""; + job_details.original_format = path.extname(files.file.filename).substring(1); + job_details.converted_format = 'wav'; + job_details.name = job_details.display_name = path.basename(files.file.path, original_format); + job_details.save_name = path.basename(files.file.filename, original_format); + + + + var filepath = path.join(config.originalSounds, job_details.save_name + original_format); + var destination = path.join(settings.soundPath || '/var/opt/motion/server/files/sounds/converted', job_details.save_name + '.' + job_details.converted_format); + // + + fs.chmodSync(filepath, parseInt('0777', 8)); + sox.identify(filepath, function(err, result) { + // console.log('************** Result: ', result); + }); + + var job = sox.transcode(filepath, destination, { + sampleRate: 8000, + format: 'wav', + channelCount: 1, + bitRate: 192 * 1024, + compressionQuality: 5, + }); + + + + job.on('error', function(err) { + console.error('********** Conversion Error: ', err); + fs.unlink(filepath, function(err) { + if (err) + return handleError(res, err); + }); + return handleError(res, err); + }); + + job.on('progress', function(amountDone, amountTotal) { + // console.log("*********** Progress", amountDone, amountTotal); + }); + + job.on('src', function(info) { + // console.log('********** src: ', info); + /* info looks like: + { + format: 'wav', + duration: 1.5, + sampleCount: 66150, + channelCount: 1, + bitRate: 722944, + sampleRate: 44100, + } + */ + job_details.original_duration = isNaN(info.duration) ? null : info.duration * 1000; + job_details.original_sampleCount = isNaN(info.sampleCount) ? null : info.sampleCount; + job_details.original_channelCount = isNaN(info.channelCount) ? null : info.channelCount; + job_details.original_bitRate = isNaN(info.bitRate) ? null : info.bitRate; + job_details.original_sampleRate = isNaN(info.sampleRate) ? null : info.sampleRate; + }); + + job.on('dest', function(info) { + // console.log('********** dest: ', info); + /* info looks like: + { + sampleRate: 44100, + format: 'mp3', + channelCount: 2, + sampleCount: 67958, + duration: 1.540998, + bitRate: 196608, + } + */ + job_details.converted_duration = isNaN(info.duration) ? null : info.duration * 1000; + job_details.converted_sampleCount = isNaN(info.sampleCount) ? null : info.sampleCount; + job_details.converted_channelCount = isNaN(info.channelCount) ? null : info.channelCount; + job_details.converted_bitRate = isNaN(info.bitRate) ? null : info.bitRate; + job_details.converted_sampleRate = isNaN(info.sampleRate) ? null : info.sampleRate; + }); + + job.on('end', function() { + console.log("Conversion completed"); + fs.chmodSync(destination, parseInt('0777', 8)); + return Sound + .create(job_details) + .then(function(sound) { + return res.status(201).send(sound); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + }); + + job.start(); + }) + .catch(function(err) { + return handleError(res, err); + }); + + + }); + + upload.on('error', function(err) { + console.log('********** Upload error :', err) + return handleError(res, err); + }); + + upload.parse(req); +}; + +// Updates an existing upload in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return Sound + .findById(req.params.id) + .then(function(sound) { + if (!sound) { + return res.sendStatus(404); + } + var updated = _.merge(sound, req.body); + return updated.save(); + }) + .then(function(sound) { + return res.status(200).send(sound); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a Sound from the DB. +exports.destroy = function(req, res) { + var _settings; + return Setting + .findById(1) + .then(function(settings) { + _settings = settings; + return Sound + .findById(req.params.id); + }) + .then(function(sound) { + if (!sound) { + return res.sendStatus(404); + } + var original_filepath = path.join(config.originalSounds, sound.save_name + '.' + sound.original_format); + var converted_filepath = path.join(_settings.soundPath || '/var/opt/motion/server/files/sounds/converted', sound.save_name + '.' + sound.converted_format); + return sequelize.transaction(function(t) { + return sound.destroy({ + transaction: t + }) + .then(function() { + fs.unlink(original_filepath, function(err) { + if (err) + console.log(err); + }); + fs.unlink(converted_filepath, function(err) { + if (err) + console.log(err); + }); + return res.status(200).send(sound); + }) + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +//Download an uploaded file +exports.download = function(req, res) { + getStream(req, res, 'original'); +}; + +//Stream an uploaded file +exports.stream = function(req, res) { + getStream(req, res, 'converted'); +} + + +function getStream(req, res, value) { + return Sound + .findById(req.params.id) + .then(function(sound) { + var readFile = Promise.promisify(fs.readFile); + return readFile(path.join(config[value + 'Sounds'], sound.save_name + '.' + sound[value + '_format'])); + }) + .then(function(result) { + var base64String = new Buffer(result, 'binary').toString('base64'); + return base64String; + }) + .then(function(base64String) { + return res.status(200).send({ + downloadString: base64String + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +} + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/sound/sound.events.js b/server/api/sound/sound.events.js index fe9a786..ce73c5a 100644 --- a/server/api/sound/sound.events.js +++ b/server/api/sound/sound.events.js @@ -1 +1,36 @@ -var _0x98bb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x6F\x75\x6E\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x98bb[0];const EventEmitter=require(_0x98bb[1]);const Sound=require(_0x98bb[3])[_0x98bb[2]];var SoundEvents= new EventEmitter();SoundEvents[_0x98bb[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x98bb[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x98bb[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x98bb[6]};for(var e in events){var event=events[e];Sound[_0x98bb[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x68a0x8,_0x68a0x9,_0x68a0xa){SoundEvents[_0x98bb[10]](event+ _0x98bb[8]+ _0x68a0x8[_0x98bb[9]],_0x68a0x8);SoundEvents[_0x98bb[10]](event,_0x68a0x8);_0x68a0xa(null)}}module[_0x98bb[11]]= SoundEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Sound = require('../../models').Sound; + +var SoundEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SoundEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Sound.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SoundEvents.emit(event + ':' + doc._id, doc); + SoundEvents.emit(event, doc); + done(null); + } +} + +module.exports = SoundEvents; diff --git a/server/api/sound/sound.socket.js b/server/api/sound/sound.socket.js index 5a459d7..137a669 100644 --- a/server/api/sound/sound.socket.js +++ b/server/api/sound/sound.socket.js @@ -1 +1,32 @@ -var _0x742a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x6F\x75\x6E\x64\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x6F\x75\x6E\x64\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x742a[0];const SoundEvents=require(_0x742a[1]);var events=[_0x742a[2],_0x742a[3]];exports[_0x742a[4]]= function(_0xfa23x3){for(var _0xfa23x4=0,_0xfa23x5=events[_0x742a[5]];_0xfa23x4< _0xfa23x5;_0xfa23x4++){var _0xfa23x6=events[_0xfa23x4];var _0xfa23x7=createListener(_0x742a[6]+ _0xfa23x6,_0xfa23x3);SoundEvents[_0x742a[7]](_0xfa23x6,_0xfa23x7);_0xfa23x3[_0x742a[7]](_0x742a[8],removeListener(_0xfa23x6,_0xfa23x7))}};function createListener(_0xfa23x6,_0xfa23x3){return function(_0xfa23x9){_0xfa23x3[_0x742a[9]](_0xfa23x6,_0xfa23x9)}}function removeListener(_0xfa23x6,_0xfa23x7){return function(){SoundEvents[_0x742a[10]](_0xfa23x6,_0xfa23x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SoundEvents = require('./sound.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('sound:' + event, socket); + + SoundEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SoundEvents.removeListener(event, listener); + }; +} diff --git a/server/api/square_odbc/index.js b/server/api/square_odbc/index.js index 7aa1720..b6dd309 100644 --- a/server/api/square_odbc/index.js +++ b/server/api/square_odbc/index.js @@ -1 +1,17 @@ -var _0x1c69=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x73\x71\x75\x61\x72\x65\x5F\x6F\x64\x62\x63\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B","\x63\x68\x65\x63\x6B\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x1c69[0];var express=require(_0x1c69[1]);var controller=require(_0x1c69[2]);var auth=require(_0x1c69[3]);var router=express.Router();router[_0x1c69[9]](_0x1c69[4],auth[_0x1c69[5]](),auth[_0x1c69[7]]([14],[_0x1c69[6]]),controller[_0x1c69[8]]);router[_0x1c69[9]](_0x1c69[10],auth[_0x1c69[5]](),auth[_0x1c69[7]]([14],[_0x1c69[6]]),controller[_0x1c69[11]]);router[_0x1c69[9]](_0x1c69[12],auth[_0x1c69[5]](),auth[_0x1c69[7]]([14],[_0x1c69[6]]),controller[_0x1c69[13]]);router[_0x1c69[15]](_0x1c69[4],auth[_0x1c69[5]](),auth[_0x1c69[7]]([14],[_0x1c69[6]]),controller[_0x1c69[14]]);router[_0x1c69[17]](_0x1c69[12],auth[_0x1c69[5]](),auth[_0x1c69[7]]([14],[_0x1c69[6]]),controller[_0x1c69[16]]);router[_0x1c69[19]](_0x1c69[4],auth[_0x1c69[5]](),auth[_0x1c69[7]]([14],[_0x1c69[6]]),controller[_0x1c69[18]]);router[_0x1c69[19]](_0x1c69[12],auth[_0x1c69[5]](),auth[_0x1c69[7]]([14],[_0x1c69[6]]),controller[_0x1c69[20]]);module[_0x1c69[21]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./square_odbc.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.index); +router.get('/:id/check', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.checkConnection); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/square_odbc/square_odbc.controller.js b/server/api/square_odbc/square_odbc.controller.js index 7dd6acd..69af149 100644 --- a/server/api/square_odbc/square_odbc.controller.js +++ b/server/api/square_odbc/square_odbc.controller.js @@ -1 +1,135 @@ -var _0x2d7f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6F\x64\x62\x63","\x53\x71\x75\x61\x72\x65\x4F\x64\x62\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x63\x68\x65\x63\x6B\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x64\x73\x6E","\x63\x6C\x6F\x73\x65","\x6F\x70\x65\x6E"];_0x2d7f[0];var _=require(_0x2d7f[1]);var db=require(_0x2d7f[2])();var SquareOdbc=require(_0x2d7f[4])[_0x2d7f[3]];var Util=require(_0x2d7f[5]);exports[_0x2d7f[6]]= function(_0x1c56x5,_0x1c56x6){return SquareOdbc[_0x2d7f[13]](Util[_0x2d7f[12]](_0x1c56x5[_0x2d7f[11]]))[_0x2d7f[10]](function(_0x1c56x8){_0x1c56x6[_0x2d7f[9]](200)[_0x2d7f[8]](_0x1c56x8)})[_0x2d7f[7]](function(_0x1c56x7){return handleError(_0x1c56x6,_0x1c56x7)})};exports[_0x2d7f[14]]= function(_0x1c56x5,_0x1c56x6){return SquareOdbc[_0x2d7f[18]](_0x1c56x5[_0x2d7f[17]][_0x2d7f[16]])[_0x2d7f[10]](function(_0x1c56x9){if(!_0x1c56x9){return _0x1c56x6[_0x2d7f[15]](404)};return _0x1c56x6[_0x2d7f[8]](_0x1c56x9)})[_0x2d7f[7]](function(_0x1c56x7){return handleError(_0x1c56x6,_0x1c56x7)})};exports[_0x2d7f[19]]= function(_0x1c56x5,_0x1c56x6){return SquareOdbc[_0x2d7f[19]](_0x1c56x5[_0x2d7f[20]])[_0x2d7f[10]](function(_0x1c56x9){return _0x1c56x6[_0x2d7f[9]](201)[_0x2d7f[8]](_0x1c56x9)})[_0x2d7f[7]](function(_0x1c56x7){return handleError(_0x1c56x6,_0x1c56x7)})};exports[_0x2d7f[21]]= function(_0x1c56x5,_0x1c56x6){if(_0x1c56x5[_0x2d7f[20]][_0x2d7f[16]]){delete _0x1c56x5[_0x2d7f[20]][_0x2d7f[16]]};return SquareOdbc[_0x2d7f[18]](_0x1c56x5[_0x2d7f[17]][_0x2d7f[16]])[_0x2d7f[10]](function(_0x1c56x9){if(!_0x1c56x9){return _0x1c56x6[_0x2d7f[15]](404)};var _0x1c56xa=_[_0x2d7f[22]](_0x1c56x9,_0x1c56x5[_0x2d7f[20]]);_0x1c56xa[_0x2d7f[23]]()[_0x2d7f[10]](function(){return _0x1c56x6[_0x2d7f[9]](200)[_0x2d7f[8]](_0x1c56x9)})[_0x2d7f[7]](function(_0x1c56x7){return handleError(_0x1c56x6,_0x1c56x7)})})[_0x2d7f[7]](function(_0x1c56x7){return handleError(_0x1c56x6,_0x1c56x7)})};exports[_0x2d7f[24]]= function(_0x1c56x5,_0x1c56x6){return SquareOdbc[_0x2d7f[18]](_0x1c56x5[_0x2d7f[17]][_0x2d7f[16]])[_0x2d7f[10]](function(_0x1c56xb){if(!_0x1c56xb){return _0x1c56x6[_0x2d7f[15]](404)};return _0x1c56xb[_0x2d7f[24]]()})[_0x2d7f[10]](function(){return _0x1c56x6[_0x2d7f[15]](204)})[_0x2d7f[7]](function(_0x1c56x7){return handleError(_0x1c56x6,_0x1c56x7)})};exports[_0x2d7f[25]]= function(_0x1c56x5,_0x1c56x6){return SquareOdbc[_0x2d7f[24]]({where:{id:_0x1c56x5[_0x2d7f[11]][_0x2d7f[26]]},individualHooks:true})[_0x2d7f[10]](function(){return _0x1c56x6[_0x2d7f[15]](204)})[_0x2d7f[7]](function(_0x1c56x7){return handleError(_0x1c56x6,_0x1c56x7)})};exports[_0x2d7f[27]]= function(_0x1c56x5,_0x1c56x6){return SquareOdbc[_0x2d7f[18]](_0x1c56x5[_0x2d7f[17]][_0x2d7f[16]])[_0x2d7f[10]](function(_0x1c56x9){if(!_0x1c56x9){return _0x1c56x6[_0x2d7f[15]](404)};db[_0x2d7f[30]](_0x1c56x9[_0x2d7f[28]],function(_0x1c56x7){if(_0x1c56x7){return handleError(_0x1c56x6,_0x1c56x7)};db[_0x2d7f[29]](function(_0x1c56x7){if(_0x1c56x7){return handleError(_0x1c56x6,_0x1c56x7)};return _0x1c56x6[_0x2d7f[15]](200)})})})[_0x2d7f[7]](function(_0x1c56x7){return handleError(_0x1c56x6,_0x1c56x7)})};function handleError(_0x1c56x6,_0x1c56x7){return _0x1c56x6[_0x2d7f[9]](500)[_0x2d7f[8]](_0x1c56x7)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var db = require("odbc")(); + +var SquareOdbc = require('../../models').SquareOdbc; +var Util = require('../../config/util'); + +// Get list of square_odbcs +exports.index = function(req, res) { + return SquareOdbc + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single square_odbc +exports.show = function(req, res) { + return SquareOdbc + .findById(req.params.id) + .then(function(square_odbc) { + if (!square_odbc) { + return res.sendStatus(404); + } + return res.send(square_odbc); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new square_odbc in the DB. +exports.create = function(req, res) { + return SquareOdbc + .create(req.body) + .then(function(square_odbc) { + return res.status(201).send(square_odbc); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing square_odbc in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return SquareOdbc + .findById(req.params.id) + .then(function(square_odbc) { + if (!square_odbc) { + return res.sendStatus(404); + } + var updated = _.merge(square_odbc, req.body); + updated.save() + .then(function() { + return res.status(200).send(square_odbc); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a square_odbc from the DB. +exports.destroy = function(req, res) { + return SquareOdbc + .findById(req.params.id) + .then(function(odbc) { + if (!odbc) { + return res.sendStatus(404); + } + return odbc + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a square_project from the DB. +exports.bulkDestroy = function(req, res) { + return SquareOdbc + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.checkConnection = function(req, res) { + return SquareOdbc + .findById(req.params.id) + .then(function(square_odbc) { + if (!square_odbc) { + return res.sendStatus(404); + } + db.open(square_odbc.dsn, function(err) { + if (err) { + return handleError(res, err); + } + db.close(function(err) { + if (err) { + return handleError(res, err); + } + return res.sendStatus(200); + }) + }) + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/square_odbc/square_odbc.events.js b/server/api/square_odbc/square_odbc.events.js index da501cf..1f9776a 100644 --- a/server/api/square_odbc/square_odbc.events.js +++ b/server/api/square_odbc/square_odbc.events.js @@ -1 +1,36 @@ -var _0xec3e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x71\x75\x61\x72\x65\x4F\x64\x62\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xec3e[0];const EventEmitter=require(_0xec3e[1]);const SquareOdbc=require(_0xec3e[3])[_0xec3e[2]];var SquareOdbcEvents= new EventEmitter();SquareOdbcEvents[_0xec3e[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xec3e[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xec3e[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xec3e[6]};for(var e in events){var event=events[e];SquareOdbc[_0xec3e[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x224fx8,_0x224fx9,_0x224fxa){SquareOdbcEvents[_0xec3e[10]](event+ _0xec3e[8]+ _0x224fx8[_0xec3e[9]],_0x224fx8);SquareOdbcEvents[_0xec3e[10]](event,_0x224fx8);_0x224fxa(null)}}module[_0xec3e[11]]= SquareOdbcEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SquareOdbc = require('../../models').SquareOdbc; + +var SquareOdbcEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SquareOdbcEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SquareOdbc.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SquareOdbcEvents.emit(event + ':' + doc._id, doc); + SquareOdbcEvents.emit(event, doc); + done(null); + } +} + +module.exports = SquareOdbcEvents; diff --git a/server/api/square_odbc/square_odbc.socket.js b/server/api/square_odbc/square_odbc.socket.js index 852c6b1..34d555e 100644 --- a/server/api/square_odbc/square_odbc.socket.js +++ b/server/api/square_odbc/square_odbc.socket.js @@ -1 +1,32 @@ -var _0xd41d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x71\x75\x61\x72\x65\x5F\x6F\x64\x62\x63\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x71\x75\x61\x72\x65\x5F\x6F\x64\x62\x63\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xd41d[0];const SquareOdbcEvents=require(_0xd41d[1]);var events=[_0xd41d[2],_0xd41d[3]];exports[_0xd41d[4]]= function(_0x3909x3){for(var _0x3909x4=0,_0x3909x5=events[_0xd41d[5]];_0x3909x4< _0x3909x5;_0x3909x4++){var _0x3909x6=events[_0x3909x4];var _0x3909x7=createListener(_0xd41d[6]+ _0x3909x6,_0x3909x3);SquareOdbcEvents[_0xd41d[7]](_0x3909x6,_0x3909x7);_0x3909x3[_0xd41d[7]](_0xd41d[8],removeListener(_0x3909x6,_0x3909x7))}};function createListener(_0x3909x6,_0x3909x3){return function(_0x3909x9){_0x3909x3[_0xd41d[9]](_0x3909x6,_0x3909x9)}}function removeListener(_0x3909x6,_0x3909x7){return function(){SquareOdbcEvents[_0xd41d[10]](_0x3909x6,_0x3909x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SquareOdbcEvents = require('./square_odbc.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('square_odbc:' + event, socket); + + SquareOdbcEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SquareOdbcEvents.removeListener(event, listener); + }; +} diff --git a/server/api/square_project/index.js b/server/api/square_project/index.js index cad4eb7..0b1c55e 100644 --- a/server/api/square_project/index.js +++ b/server/api/square_project/index.js @@ -1 +1,17 @@ -var _0x2c8b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x73\x71\x75\x61\x72\x65\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x2c8b[0];var express=require(_0x2c8b[1]);var controller=require(_0x2c8b[2]);var auth=require(_0x2c8b[3]);var router=express.Router();router[_0x2c8b[9]](_0x2c8b[4],auth[_0x2c8b[5]](),auth[_0x2c8b[7]]([14,7],[_0x2c8b[6]]),controller[_0x2c8b[8]]);router[_0x2c8b[9]](_0x2c8b[10],auth[_0x2c8b[5]](),auth[_0x2c8b[7]]([14],[_0x2c8b[6]]),controller[_0x2c8b[11]]);router[_0x2c8b[9]](_0x2c8b[12],controller[_0x2c8b[13]]);router[_0x2c8b[15]](_0x2c8b[4],auth[_0x2c8b[5]](),auth[_0x2c8b[7]]([14],[_0x2c8b[6]]),controller[_0x2c8b[14]]);router[_0x2c8b[17]](_0x2c8b[10],auth[_0x2c8b[5]](),auth[_0x2c8b[7]]([14],[_0x2c8b[6]]),controller[_0x2c8b[16]]);router[_0x2c8b[19]](_0x2c8b[4],auth[_0x2c8b[5]](),auth[_0x2c8b[7]]([14],[_0x2c8b[6]]),controller[_0x2c8b[18]]);router[_0x2c8b[19]](_0x2c8b[10],auth[_0x2c8b[5]](),auth[_0x2c8b[7]]([14],[_0x2c8b[6]]),controller[_0x2c8b[20]]);module[_0x2c8b[21]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./square_project.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([14, 7], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.show); +router.get('/:id/download', controller.download); +router.post('/', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/square_project/square_project.controller.js b/server/api/square_project/square_project.controller.js index 51d6155..46766e9 100644 --- a/server/api/square_project/square_project.controller.js +++ b/server/api/square_project/square_project.controller.js @@ -1 +1,133 @@ -var _0xd72d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x53\x71\x75\x61\x72\x65\x50\x72\x6F\x6A\x65\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6E\x61\x6D\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x6C\x6F\x67","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x3B\x20\x66\x69\x6C\x65\x6E\x61\x6D\x65\x3D\x22","\x2E\x78\x6D\x6C\x22","\x74\x78\x74\x2F\x78\x6D\x6C","\x73\x65\x74","\x70\x72\x65\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E"];_0xd72d[0];var _=require(_0xd72d[1]);var path=require(_0xd72d[2]);var config=require(_0xd72d[3]);var Util=require(_0xd72d[4]);var SquareProject=require(_0xd72d[6])[_0xd72d[5]];exports[_0xd72d[7]]= function(_0xa16ex6,_0xa16ex7){return SquareProject[_0xd72d[14]](Util[_0xd72d[13]](_0xa16ex6[_0xd72d[12]]))[_0xd72d[11]](function(_0xa16ex9){_0xa16ex7[_0xd72d[10]](200)[_0xd72d[9]](_0xa16ex9)})[_0xd72d[8]](function(_0xa16ex8){return handleError(_0xa16ex7,_0xa16ex8)})};exports[_0xd72d[15]]= function(_0xa16ex6,_0xa16ex7){return SquareProject[_0xd72d[19]](_0xa16ex6[_0xd72d[18]][_0xd72d[17]])[_0xd72d[11]](function(_0xa16exa){if(!_0xa16exa){return _0xa16ex7[_0xd72d[16]](404)};return _0xa16ex7[_0xd72d[9]](_0xa16exa)})[_0xd72d[8]](function(_0xa16ex8){return handleError(_0xa16ex7,_0xa16ex8)})};exports[_0xd72d[20]]= function(_0xa16ex6,_0xa16ex7){return SquareProject[_0xd72d[20]](_0xa16ex6[_0xd72d[21]])[_0xd72d[11]](function(_0xa16exa){return _0xa16ex7[_0xd72d[10]](201)[_0xd72d[9]](_0xa16exa)})[_0xd72d[8]](function(_0xa16ex8){return handleError(_0xa16ex7,_0xa16ex8)})};exports[_0xd72d[22]]= function(_0xa16ex6,_0xa16ex7){if(_0xa16ex6[_0xd72d[21]][_0xd72d[17]]){delete _0xa16ex6[_0xd72d[21]][_0xd72d[17]]};delete _0xa16ex6[_0xd72d[21]][_0xd72d[23]];return SquareProject[_0xd72d[19]](_0xa16ex6[_0xd72d[18]][_0xd72d[17]])[_0xd72d[11]](function(_0xa16exa){if(!_0xa16exa){return _0xa16ex7[_0xd72d[16]](404)};var _0xa16exb=_[_0xd72d[24]](_0xa16exa,_0xa16ex6[_0xd72d[21]]);_0xa16exb[_0xd72d[25]]()[_0xd72d[11]](function(){return _0xa16ex7[_0xd72d[10]](200)[_0xd72d[9]](_0xa16exa)})[_0xd72d[8]](function(_0xa16ex8){return handleError(_0xa16ex7,_0xa16ex8)})})[_0xd72d[8]](function(_0xa16ex8){return handleError(_0xa16ex7,_0xa16ex8)})};exports[_0xd72d[26]]= function(_0xa16ex6,_0xa16ex7){return SquareProject[_0xd72d[19]](_0xa16ex6[_0xd72d[18]][_0xd72d[17]])[_0xd72d[11]](function(_0xa16exc){if(!_0xa16exc){return _0xa16ex7[_0xd72d[16]](404)};return _0xa16exc[_0xd72d[26]]()})[_0xd72d[11]](function(){return _0xa16ex7[_0xd72d[16]](204)})[_0xd72d[8]](function(_0xa16ex8){return handleError(_0xa16ex7,_0xa16ex8)})};exports[_0xd72d[27]]= function(_0xa16ex6,_0xa16ex7){return SquareProject[_0xd72d[26]]({where:{id:_0xa16ex6[_0xd72d[12]][_0xd72d[28]]},individualHooks:true})[_0xd72d[11]](function(){return _0xa16ex7[_0xd72d[16]](204)})[_0xd72d[8]](function(_0xa16ex8){return handleError(_0xa16ex7,_0xa16ex8)})};exports[_0xd72d[29]]= function(_0xa16ex6,_0xa16ex7,_0xa16exd){SquareProject[_0xd72d[19]](_0xa16ex6[_0xd72d[18]][_0xd72d[17]])[_0xd72d[11]](function(_0xa16exa){if(!_0xa16exa){return _0xa16ex7[_0xd72d[16]](404)};console[_0xd72d[31]](_0xa16ex6[_0xd72d[12]][_0xd72d[30]]);_0xa16ex7[_0xd72d[35]]({"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E":_0xd72d[32]+ _0xa16ex6[_0xd72d[12]][_0xd72d[30]]+ _0xd72d[33],"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65":_0xd72d[34]});return _0xa16ex7[_0xd72d[9]](_0xa16exa[_0xd72d[36]])})[_0xd72d[8]](function(_0xa16ex8){return handleError(_0xa16ex7,_0xa16ex8)})};function handleError(_0xa16ex7,_0xa16ex8){return _0xa16ex7[_0xd72d[10]](500)[_0xd72d[9]](_0xa16ex8)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var path = require('path'); +var config = require('../../config/environment'); +var Util = require('../../config/util'); + +var SquareProject = require('../../models').SquareProject; + +// Get list of square_projects +exports.index = function(req, res) { + return SquareProject + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single square_project +exports.show = function(req, res) { + return SquareProject + .findById(req.params.id) + .then(function(square_project) { + if (!square_project) { + return res.sendStatus(404); + } + return res.send(square_project); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new square_project in the DB. +exports.create = function(req, res) { + return SquareProject + .create(req.body) + .then(function(square_project) { + return res.status(201).send(square_project); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing square_project in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + delete req.body.name; + return SquareProject + .findById(req.params.id) + .then(function(square_project) { + if (!square_project) { + return res.sendStatus(404); + } + var updated = _.merge(square_project, req.body); + updated.save() + .then(function() { + return res.status(200).send(square_project); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a square_project from the DB. +exports.destroy = function(req, res) { + return SquareProject + .findById(req.params.id) + .then(function(project) { + if (!project) { + return res.sendStatus(404); + } + return project + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a square_project from the DB. +exports.bulkDestroy = function(req, res) { + return SquareProject + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.download = function(req, res, next) { + SquareProject + .findById(req.params.id) + .then(function(square_project) { + if (!square_project) { + return res.sendStatus(404); + } + console.log(req.query.filename); + res.set({ + "Content-Disposition": "attachment; filename=\"" + req.query.filename + + ".xml\"", + "Content-Type": "txt/xml" + }); + return res.send(square_project.preproduction); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/square_project/square_project.events.js b/server/api/square_project/square_project.events.js index 6feaa47..d592ee2 100644 --- a/server/api/square_project/square_project.events.js +++ b/server/api/square_project/square_project.events.js @@ -1 +1,36 @@ -var _0x9de0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x71\x75\x61\x72\x65\x50\x72\x6F\x6A\x65\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x9de0[0];const EventEmitter=require(_0x9de0[1]);const SquareProject=require(_0x9de0[3])[_0x9de0[2]];var SquareProjectEvents= new EventEmitter();SquareProjectEvents[_0x9de0[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x9de0[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x9de0[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x9de0[6]};for(var e in events){var event=events[e];SquareProject[_0x9de0[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x6533x8,_0x6533x9,_0x6533xa){SquareProjectEvents[_0x9de0[10]](event+ _0x9de0[8]+ _0x6533x8[_0x9de0[9]],_0x6533x8);SquareProjectEvents[_0x9de0[10]](event,_0x6533x8);_0x6533xa(null)}}module[_0x9de0[11]]= SquareProjectEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SquareProject = require('../../models').SquareProject; + +var SquareProjectEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SquareProjectEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SquareProject.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SquareProjectEvents.emit(event + ':' + doc._id, doc); + SquareProjectEvents.emit(event, doc); + done(null); + } +} + +module.exports = SquareProjectEvents; diff --git a/server/api/square_project/square_project.socket.js b/server/api/square_project/square_project.socket.js index 08f163f..fc240c5 100644 --- a/server/api/square_project/square_project.socket.js +++ b/server/api/square_project/square_project.socket.js @@ -1 +1,32 @@ -var _0xfc71=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x71\x75\x61\x72\x65\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x71\x75\x61\x72\x65\x5F\x70\x72\x6F\x6A\x65\x63\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xfc71[0];const SquareProjectEvents=require(_0xfc71[1]);var events=[_0xfc71[2],_0xfc71[3]];exports[_0xfc71[4]]= function(_0x3affx3){for(var _0x3affx4=0,_0x3affx5=events[_0xfc71[5]];_0x3affx4< _0x3affx5;_0x3affx4++){var _0x3affx6=events[_0x3affx4];var _0x3affx7=createListener(_0xfc71[6]+ _0x3affx6,_0x3affx3);SquareProjectEvents[_0xfc71[7]](_0x3affx6,_0x3affx7);_0x3affx3[_0xfc71[7]](_0xfc71[8],removeListener(_0x3affx6,_0x3affx7))}};function createListener(_0x3affx6,_0x3affx3){return function(_0x3affx9){_0x3affx3[_0xfc71[9]](_0x3affx6,_0x3affx9)}}function removeListener(_0x3affx6,_0x3affx7){return function(){SquareProjectEvents[_0xfc71[10]](_0x3affx6,_0x3affx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SquareProjectEvents = require('./square_project.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('square_project:' + event, socket); + + SquareProjectEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SquareProjectEvents.removeListener(event, listener); + }; +} diff --git a/server/api/square_recording/index.js b/server/api/square_recording/index.js index 1740344..0ac38d5 100644 --- a/server/api/square_recording/index.js +++ b/server/api/square_recording/index.js @@ -1 +1,17 @@ -var _0x1613=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x71\x75\x61\x72\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x73\x74\x72\x65\x61\x6D","\x67\x65\x74\x53\x74\x72\x65\x61\x6D","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x1613[0];var express=require(_0x1613[1]);var auth=require(_0x1613[2]);var controller=require(_0x1613[3]);var router=express.Router();router[_0x1613[9]](_0x1613[4],auth[_0x1613[5]](),auth[_0x1613[7]]([14],[_0x1613[6]]),controller[_0x1613[8]]);router[_0x1613[9]](_0x1613[10],auth[_0x1613[5]](),auth[_0x1613[7]]([14],[_0x1613[6]]),controller[_0x1613[11]]);router[_0x1613[9]](_0x1613[12],auth[_0x1613[5]](),auth[_0x1613[7]]([14],[_0x1613[6]]),controller[_0x1613[13]]);router[_0x1613[15]](_0x1613[4],auth[_0x1613[5]](),auth[_0x1613[7]]([14],[_0x1613[6]]),controller[_0x1613[14]]);router[_0x1613[17]](_0x1613[10],auth[_0x1613[5]](),auth[_0x1613[7]]([14],[_0x1613[6]]),controller[_0x1613[16]]);router[_0x1613[19]](_0x1613[4],auth[_0x1613[5]](),auth[_0x1613[7]]([14],[_0x1613[6]]),controller[_0x1613[18]]);router[_0x1613[19]](_0x1613[10],auth[_0x1613[5]](),auth[_0x1613[7]]([14],[_0x1613[6]]),controller[_0x1613[20]]);module[_0x1613[21]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./square_recording.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.show); +router.get('/:id/stream', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.getStream); +router.post('/', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([14], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/square_recording/square_recording.controller.js b/server/api/square_recording/square_recording.controller.js index b11ba09..e83e810 100644 --- a/server/api/square_recording/square_recording.controller.js +++ b/server/api/square_recording/square_recording.controller.js @@ -1 +1,183 @@ -var _0x1a8a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x53\x71\x75\x61\x72\x65\x52\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x62\x6C\x75\x65\x62\x69\x72\x64","\x66\x69\x6C\x65\x2D\x62\x61\x73\x65\x36\x34","\x66\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x63\x61\x75\x73\x65","\x63\x6F\x64\x65","\x45\x4E\x4F\x45\x4E\x54","\x4E\x6F\x20\x66\x69\x6C\x65\x20\x6F\x72\x20\x64\x69\x72\x65\x63\x74\x6F\x72\x79","\x4D\x45\x53\x53\x41\x47\x45\x5F\x4E\x4F\x5F\x46\x49\x4C\x45\x5F\x4F\x52\x5F\x44\x49\x52\x45\x43\x54\x4F\x52\x59","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x73\x61\x76\x65\x50\x61\x74\x68","\x73\x74\x61\x74\x53\x79\x6E\x63","\x6C\x6F\x67","\x74\x68\x65\x6E","\x64\x65\x73\x74\x72\x6F\x79","\x75\x6E\x6C\x69\x6E\x6B\x53\x79\x6E\x63","\x69\x6E\x64\x65\x78","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x53\x74\x72\x65\x61\x6D","\x62\x61\x73\x65\x36\x34","\x62\x69\x6E\x61\x72\x79","\x72\x65\x61\x64\x46\x69\x6C\x65","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x61\x6C\x6C","\x70\x75\x73\x68","\x43\x61\x6E\x27\x20\x74\x20\x64\x65\x6C\x65\x74\x65\x20\x74\x68\x65\x20\x66\x69\x6C\x65","\x66\x6F\x72\x45\x61\x63\x68","\x69\x64\x73","\x66\x69\x6E\x64\x41\x6C\x6C"];_0x1a8a[0];var _=require(_0x1a8a[1]);var util=require(_0x1a8a[2]);var SquareRecording=require(_0x1a8a[4])[_0x1a8a[3]];var Promise=require(_0x1a8a[5]);var base64=require(_0x1a8a[6]);var fs=require(_0x1a8a[7]);var Util=require(_0x1a8a[8]);function handleError(_0x7473x9){return function(_0x7473xa){if(_0x7473xa[_0x1a8a[9]]&& _0x7473xa[_0x1a8a[9]][_0x1a8a[10]]=== _0x1a8a[11]){_0x7473xa= {message:_0x1a8a[12],translatedMessage:_0x1a8a[13]}};return _0x7473x9[_0x1a8a[15]](500)[_0x1a8a[14]](_0x7473xa)}}function responseWithResult(_0x7473x9,_0x7473xc){_0x7473xc= _0x7473xc|| 200;return function(_0x7473xd){if(_0x7473xd){_0x7473x9[_0x1a8a[15]](_0x7473xc)[_0x1a8a[16]](_0x7473xd)}}}function handleEntityNotFound(_0x7473x9){return function(_0x7473xd){if(!_0x7473xd){_0x7473x9[_0x1a8a[15]](404)[_0x1a8a[17]]();return null};return _0x7473xd}}function saveUpdates(_0x7473x10){return function(_0x7473xd){return _0x7473xd[_0x1a8a[18]](_0x7473x10)}}function removeEntity(_0x7473x9){return function(_0x7473xd){if(_0x7473xd){try{fs[_0x1a8a[20]](_0x7473xd[_0x1a8a[19]])}catch(err){console[_0x1a8a[21]](err);return _0x7473xd[_0x1a8a[23]]()[_0x1a8a[22]](function(){_0x7473x9[_0x1a8a[15]](204)[_0x1a8a[17]]()})};try{fs[_0x1a8a[24]](_0x7473xd[_0x1a8a[19]]);return _0x7473xd[_0x1a8a[23]]()[_0x1a8a[22]](function(){_0x7473x9[_0x1a8a[15]](204)[_0x1a8a[17]]()})}catch(err){console[_0x1a8a[21]](err);throw new Error(err)}}}}exports[_0x1a8a[25]]= function(_0x7473x12,_0x7473x9){var _0x7473x13=Util[_0x1a8a[27]](_0x7473x12[_0x1a8a[26]]);return SquareRecording[_0x1a8a[29]](_0x7473x13)[_0x1a8a[22]](responseWithResult(_0x7473x9))[_0x1a8a[28]](handleError(_0x7473x9))};exports[_0x1a8a[30]]= function(_0x7473x12,_0x7473x9){return SquareRecording[_0x1a8a[33]](_0x7473x12[_0x1a8a[32]][_0x1a8a[31]])[_0x1a8a[22]](handleEntityNotFound(_0x7473x9))[_0x1a8a[22]](responseWithResult(_0x7473x9))[_0x1a8a[28]](handleError(_0x7473x9))};exports[_0x1a8a[34]]= function(_0x7473x12,_0x7473x9){return SquareRecording[_0x1a8a[33]](_0x7473x12[_0x1a8a[32]][_0x1a8a[31]])[_0x1a8a[22]](function(_0x7473x16){var _0x7473x17=Promise[_0x1a8a[38]](fs[_0x1a8a[37]]);return _0x7473x17(_0x7473x16[_0x1a8a[19]])})[_0x1a8a[22]](function(_0x7473x15){var _0x7473x14= new Buffer(_0x7473x15,_0x1a8a[36]).toString(_0x1a8a[35]);return _0x7473x14})[_0x1a8a[22]](function(_0x7473x14){return _0x7473x9[_0x1a8a[15]](200)[_0x1a8a[14]]({downloadString:_0x7473x14})})[_0x1a8a[28]](handleError(_0x7473x9))};exports[_0x1a8a[39]]= function(_0x7473x12,_0x7473x9){return SquareRecording[_0x1a8a[39]](_0x7473x12[_0x1a8a[40]])[_0x1a8a[22]](responseWithResult(_0x7473x9,201))[_0x1a8a[28]](handleError(_0x7473x9))};exports[_0x1a8a[41]]= function(_0x7473x12,_0x7473x9){if(_0x7473x12[_0x1a8a[40]][_0x1a8a[31]]){delete _0x7473x12[_0x1a8a[40]][_0x1a8a[31]]};return SquareRecording[_0x1a8a[33]](_0x7473x12[_0x1a8a[32]][_0x1a8a[31]])[_0x1a8a[22]](handleEntityNotFound(_0x7473x9))[_0x1a8a[22]](saveUpdates(_0x7473x12[_0x1a8a[40]]))[_0x1a8a[22]](responseWithResult(_0x7473x9))[_0x1a8a[28]](handleError(_0x7473x9))};exports[_0x1a8a[23]]= function(_0x7473x12,_0x7473x9){return SquareRecording[_0x1a8a[33]](_0x7473x12[_0x1a8a[32]][_0x1a8a[31]])[_0x1a8a[22]](handleEntityNotFound(_0x7473x9))[_0x1a8a[22]](removeEntity(_0x7473x9))[_0x1a8a[28]](handleError(_0x7473x9))};exports[_0x1a8a[42]]= function(_0x7473x12,_0x7473x9){return SquareRecording[_0x1a8a[49]]({where:{id:_0x7473x12[_0x1a8a[26]][_0x1a8a[48]]}})[_0x1a8a[22]](function(_0x7473x18){var _0x7473x19=[];_[_0x1a8a[47]](_0x7473x18,function(_0x7473x1a){try{fs[_0x1a8a[20]](_0x7473x1a[_0x1a8a[19]]);try{fs[_0x1a8a[24]](_0x7473x1a[_0x1a8a[19]]);_0x7473x19[_0x1a8a[45]](_0x7473x1a[_0x1a8a[23]]())}catch(err){console[_0x1a8a[21]](_0x1a8a[46],err)}}catch(err){console[_0x1a8a[21]](_0x1a8a[46],err);_0x7473x19[_0x1a8a[45]](_0x7473x1a[_0x1a8a[23]]())}});return _0x7473x19})[_0x1a8a[44]]()[_0x1a8a[22]](function(){return _0x7473x9[_0x1a8a[43]](204)})[_0x1a8a[28]](handleError(_0x7473x9))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/square/recordings -> index + * POST /api/square/recordings -> create + * GET /api/square/recordings/:id -> show + * PUT /api/square/recordings/:id -> update + * DELETE /api/square/recordings/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var util = require('util'); + +var SquareRecording = require('../../models').SquareRecording; +var Promise = require('bluebird'); +// var base64 = Promise.promisifyAll(require('file-base64')); +var base64 = require('file-base64'); +var fs = require('fs'); +var Util = require('../../config/util'); + +function handleError(res) { + return function(err) { + if (err.cause && err.cause.code === 'ENOENT') { + err = { + message: 'No file or directory', + translatedMessage: 'MESSAGE_NO_FILE_OR_DIRECTORY' + }; + } + return res.status(500).send(err); + } +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(body) { + return function(entity) { + return entity + .updateAttributes(body); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + try { + fs.statSync(entity.savePath); //search the file + } catch (err) { //file not found + console.log(err); + return entity.destroy() //deleting the dbentry + .then(function() { + res.status(204).end(); + }); + } + try { //file found, deleting + fs.unlinkSync(entity.savePath); + return entity.destroy() //file deleted, deleting the db entry + .then(function() { + res.status(204).end(); + }); + } catch (err) { //error deleting file + console.log(err); + throw new Error(err); + } + } + }; +} + +// Gets a list of SquareRecordings +exports.index = function(req, res) { + var _query = Util.getQuery(req.query); + return SquareRecording + .findAndCountAll(_query) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single SquareRecording from the DB +exports.show = function(req, res) { + return SquareRecording.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single SquareRecording from the DB +exports.getStream = function(req, res) { + return SquareRecording + .findById(req.params.id) + .then(function(recording) { + var readFile = Promise.promisify(fs.readFile); + return readFile(recording.savePath); + }) + .then(function(result) { + var base64String = new Buffer(result, 'binary').toString('base64'); + return base64String; + }) + .then(function(base64String) { + return res.status(200).send({ + downloadString: base64String + }); + }) + .catch(handleError(res)); +} + + +// Creates a new SquareRecording in the DB +exports.create = function(req, res) { + return SquareRecording.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing SquareRecording in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return SquareRecording.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a SquareRecording from the DB +exports.destroy = function(req, res) { + return SquareRecording.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +// Deletes multiple recordings from the DB. +exports.bulkDestroy = function(req, res) { + return SquareRecording + .findAll({ + where: { + id: req.query.ids + } + }) + .then(function(recordings) { + var bulkDestroy = []; + _.forEach(recordings, function(rec) { + try { + fs.statSync(rec.savePath); //search the file + try { //file found, deleting + fs.unlinkSync(rec.savePath); + bulkDestroy.push(rec.destroy()); + } catch (err) { //error deleting file + console.log('Can\' t delete the file', err); + } + } catch (err) { //file not found + console.log('Can\' t delete the file', err); + bulkDestroy.push(rec.destroy()); + } + }); + return bulkDestroy; + }) + .all() + .then(function() { + return res.sendStatus(204); + }) + .catch(handleError(res)); +}; diff --git a/server/api/square_recording/square_recording.events.js b/server/api/square_recording/square_recording.events.js index 2fded71..76305fd 100644 --- a/server/api/square_recording/square_recording.events.js +++ b/server/api/square_recording/square_recording.events.js @@ -1 +1,36 @@ -var _0xcc79=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x71\x75\x61\x72\x65\x52\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xcc79[0];const EventEmitter=require(_0xcc79[1]);const SquareRecording=require(_0xcc79[3])[_0xcc79[2]];var SquareRecordingEvents= new EventEmitter();SquareRecordingEvents[_0xcc79[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xcc79[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xcc79[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xcc79[6]};for(var e in events){var event=events[e];SquareRecording[_0xcc79[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x1769x8,_0x1769x9,_0x1769xa){SquareRecordingEvents[_0xcc79[10]](event+ _0xcc79[8]+ _0x1769x8[_0xcc79[9]],_0x1769x8);SquareRecordingEvents[_0xcc79[10]](event,_0x1769x8);_0x1769xa(null)}}module[_0xcc79[11]]= SquareRecordingEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SquareRecording = require('../../models').SquareRecording; + +var SquareRecordingEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SquareRecordingEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SquareRecording.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SquareRecordingEvents.emit(event + ':' + doc._id, doc); + SquareRecordingEvents.emit(event, doc); + done(null); + } +} + +module.exports = SquareRecordingEvents; diff --git a/server/api/square_recording/square_recording.socket.js b/server/api/square_recording/square_recording.socket.js index 0a519a0..8ca5928 100644 --- a/server/api/square_recording/square_recording.socket.js +++ b/server/api/square_recording/square_recording.socket.js @@ -1 +1,32 @@ -var _0xe3e1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x71\x75\x61\x72\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x71\x75\x61\x72\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xe3e1[0];const SquareRecordingEvents=require(_0xe3e1[1]);var events=[_0xe3e1[2],_0xe3e1[3]];exports[_0xe3e1[4]]= function(_0x8f84x3){for(var _0x8f84x4=0,_0x8f84x5=events[_0xe3e1[5]];_0x8f84x4< _0x8f84x5;_0x8f84x4++){var _0x8f84x6=events[_0x8f84x4];var _0x8f84x7=createListener(_0xe3e1[6]+ _0x8f84x6,_0x8f84x3);SquareRecordingEvents[_0xe3e1[7]](_0x8f84x6,_0x8f84x7);_0x8f84x3[_0xe3e1[7]](_0xe3e1[8],removeListener(_0x8f84x6,_0x8f84x7))}};function createListener(_0x8f84x6,_0x8f84x3){return function(_0x8f84x9){_0x8f84x3[_0xe3e1[9]](_0x8f84x6,_0x8f84x9)}}function removeListener(_0x8f84x6,_0x8f84x7){return function(){SquareRecordingEvents[_0xe3e1[10]](_0x8f84x6,_0x8f84x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SquareRecordingEvents = require('./square_recording.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('square_recording:' + event, socket); + + SquareRecordingEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SquareRecordingEvents.removeListener(event, listener); + }; +} diff --git a/server/api/sugarcrm_account/index.js b/server/api/sugarcrm_account/index.js index 6f4d6ef..5927151 100644 --- a/server/api/sugarcrm_account/index.js +++ b/server/api/sugarcrm_account/index.js @@ -1 +1,20 @@ -var _0xb113=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2F\x3A\x69\x64\x2F\x66\x69\x65\x6C\x64\x73","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65\x2F\x3A\x66\x69\x65\x6C\x64","\x61\x63\x63\x6F\x75\x6E\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xb113[0];var express=require(_0xb113[1]);var auth=require(_0xb113[2]);var controller=require(_0xb113[3]);var router=express.Router();router[_0xb113[9]](_0xb113[4],auth[_0xb113[5]](),auth[_0xb113[7]]([19,13],[_0xb113[6]]),controller[_0xb113[8]]);router[_0xb113[9]](_0xb113[10],auth[_0xb113[5]](),auth[_0xb113[7]]([19],[_0xb113[6]]),controller[_0xb113[11]]);router[_0xb113[9]](_0xb113[12],auth[_0xb113[5]](),auth[_0xb113[7]]([19],[_0xb113[6]]),controller[_0xb113[13]]);router[_0xb113[9]](_0xb113[14],auth[_0xb113[5]](),auth[_0xb113[7]]([19],[_0xb113[6]]),controller[_0xb113[15]]);router[_0xb113[18]](_0xb113[16],auth[_0xb113[5]](),auth[_0xb113[7]]([19],[_0xb113[6]]),controller[_0xb113[17]]);router[_0xb113[18]](_0xb113[4],auth[_0xb113[5]](),auth[_0xb113[7]]([19],[_0xb113[6]]),controller[_0xb113[19]]);router[_0xb113[21]](_0xb113[14],auth[_0xb113[5]](),auth[_0xb113[7]]([19],[_0xb113[6]]),controller[_0xb113[20]]);router[_0xb113[23]](_0xb113[4],auth[_0xb113[5]](),auth[_0xb113[7]]([19],[_0xb113[6]]),controller[_0xb113[22]]);router[_0xb113[23]](_0xb113[14],auth[_0xb113[5]](),auth[_0xb113[7]]([19],[_0xb113[6]]),controller[_0xb113[24]]);module[_0xb113[25]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./sugarcrm_account.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([19, 13], ['admin']), controller.index); +router.get('/:id/check', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.checkAccount); +router.get('/:id/fields', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.getFields); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.show); +router.post('/validate/:field', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.accountValidation); +router.post('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroy); + + +module.exports = router; diff --git a/server/api/sugarcrm_account/sugarcrm_account.controller.js b/server/api/sugarcrm_account/sugarcrm_account.controller.js index 4308497..344c0ed 100644 --- a/server/api/sugarcrm_account/sugarcrm_account.controller.js +++ b/server/api/sugarcrm_account/sugarcrm_account.controller.js @@ -1 +1,202 @@ -var _0xd5e6=["\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","\x53\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\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","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x6E\x6F\x64\x65\x2D\x73\x75\x67\x61\x72\x63\x72\x6D\x2D\x63\x6C\x69\x65\x6E\x74","\x72\x65\x6D\x6F\x74\x65\x55\x72\x69","\x73\x74\x72\x69\x70\x54\x72\x61\x69\x6C\x69\x6E\x67\x53\x6C\x61\x73\x68","\x2F\x73\x65\x72\x76\x69\x63\x65\x2F\x76\x34\x5F\x31\x2F\x72\x65\x73\x74\x2E\x70\x68\x70","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x69\x6E\x69\x74","\x6C\x6F\x67\x69\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x61\x63\x63\x6F\x75\x6E\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x63\x6F\x75\x6E\x74","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x43\x61\x73\x65\x73","\x67\x65\x74\x5F\x6D\x6F\x64\x75\x6C\x65\x5F\x66\x69\x65\x6C\x64\x73","\x6D\x6F\x64\x75\x6C\x65\x5F\x66\x69\x65\x6C\x64\x73","\x63\x61\x6C\x6C"];_0xd5e6[0];var _=require(_0xd5e6[1]);var Util=require(_0xd5e6[2]);var SugarcrmAccount=require(_0xd5e6[4])[_0xd5e6[3]];function handleError(_0x7863x5,_0x7863x6){_0x7863x6= _0x7863x6|| 500;return function(_0x7863x7){_0x7863x5[_0xd5e6[6]](_0x7863x6)[_0xd5e6[5]](_0x7863x7)}}function responseWithResult(_0x7863x5,_0x7863x6){_0x7863x6= _0x7863x6|| 200;return function(_0x7863x9){if(_0x7863x9){_0x7863x5[_0xd5e6[6]](_0x7863x6)[_0xd5e6[7]](_0x7863x9)}}}function responseWithoutResult(_0x7863x5,_0x7863x6){_0x7863x6= _0x7863x6|| 200;return function(){_0x7863x5[_0xd5e6[8]](_0x7863x6)}}function handleEntityNotFound(_0x7863x5){return function(_0x7863x9){if(!_0x7863x9){_0x7863x5[_0xd5e6[6]](404)[_0xd5e6[9]]();return null};return _0x7863x9}}function saveUpdates(_0x7863xd){return function(_0x7863x9){return _0x7863x9[_0xd5e6[11]](_0x7863xd)[_0xd5e6[10]](function(_0x7863xe){return _0x7863xe})}}function removeEntity(_0x7863x5){return function(_0x7863x9){if(_0x7863x9){return _0x7863x9[_0xd5e6[12]]()[_0xd5e6[10]](function(){_0x7863x5[_0xd5e6[6]](204)[_0xd5e6[9]]()})}}}exports[_0xd5e6[13]]= function(_0x7863x10,_0x7863x5){return SugarcrmAccount[_0xd5e6[20]](_0xd5e6[19])[_0xd5e6[18]](_[_0xd5e6[17]](Util[_0xd5e6[16]](_0x7863x10[_0xd5e6[15]]),{distinct:true}))[_0xd5e6[10]](responseWithResult(_0x7863x5))[_0xd5e6[14]](handleError(_0x7863x5))};exports[_0xd5e6[21]]= function(_0x7863x10,_0x7863x5){return SugarcrmAccount[_0xd5e6[24]](_0x7863x10[_0xd5e6[23]][_0xd5e6[22]])[_0xd5e6[10]](handleEntityNotFound(_0x7863x5))[_0xd5e6[10]](responseWithResult(_0x7863x5))[_0xd5e6[14]](handleError(_0x7863x5))};exports[_0xd5e6[25]]= function(_0x7863x10,_0x7863x5){return SugarcrmAccount[_0xd5e6[25]](_0x7863x10[_0xd5e6[26]])[_0xd5e6[10]](responseWithResult(_0x7863x5,201))[_0xd5e6[14]](handleError(_0x7863x5))};exports[_0xd5e6[27]]= function(_0x7863x10,_0x7863x5){if(_0x7863x10[_0xd5e6[26]][_0xd5e6[22]]){delete _0x7863x10[_0xd5e6[26]][_0xd5e6[22]]};return SugarcrmAccount[_0xd5e6[24]](_0x7863x10[_0xd5e6[23]][_0xd5e6[22]])[_0xd5e6[10]](handleEntityNotFound(_0x7863x5))[_0xd5e6[10]](saveUpdates(_0x7863x10[_0xd5e6[26]]))[_0xd5e6[10]](responseWithResult(_0x7863x5))[_0xd5e6[14]](handleError(_0x7863x5))};exports[_0xd5e6[12]]= function(_0x7863x10,_0x7863x5){return SugarcrmAccount[_0xd5e6[24]](_0x7863x10[_0xd5e6[23]][_0xd5e6[22]])[_0xd5e6[10]](handleEntityNotFound(_0x7863x5))[_0xd5e6[10]](removeEntity(_0x7863x5))[_0xd5e6[14]](handleError(_0x7863x5))};exports[_0xd5e6[28]]= function(_0x7863x10,_0x7863x5){return SugarcrmAccount[_0xd5e6[24]](_0x7863x10[_0xd5e6[23]][_0xd5e6[22]])[_0xd5e6[10]](handleEntityNotFound(_0x7863x5))[_0xd5e6[10]](function(_0x7863x11){var _0x7863x12=require(_0xd5e6[29]);_0x7863x12[_0xd5e6[35]]({apiURL:Util[_0xd5e6[31]](_0x7863x11[_0xd5e6[30]])+ _0xd5e6[32],login:_0x7863x11[_0xd5e6[33]],passwd:_0x7863x11[_0xd5e6[34]]});_0x7863x12[_0xd5e6[36]](function(_0x7863x13){if(!_0x7863x13){return _0x7863x5[_0xd5e6[8]](400)};return _0x7863x5[_0xd5e6[8]](200)})})[_0xd5e6[14]](handleError(_0x7863x5))};exports[_0xd5e6[37]]= function(_0x7863x10,_0x7863x5){SugarcrmAccount[_0xd5e6[12]]({where:{id:_0x7863x10[_0xd5e6[15]][_0xd5e6[38]]},individualHooks:true})[_0xd5e6[10]](function(){return _0x7863x5[_0xd5e6[8]](204)})[_0xd5e6[14]](handleError(_0x7863x5))};exports[_0xd5e6[39]]= function(_0x7863x10,_0x7863x5){var _0x7863x14={};_0x7863x14[_0x7863x10[_0xd5e6[23]][_0xd5e6[40]]]= _0x7863x10[_0xd5e6[26]][_0xd5e6[41]];return SugarcrmAccount[_0xd5e6[18]]({where:_0x7863x14})[_0xd5e6[10]](function(_0x7863x15){if(_0x7863x15[_0xd5e6[42]]){return _0x7863x5[_0xd5e6[6]](200)[_0xd5e6[5]]({isValid:false,value:_0x7863x10[_0xd5e6[26]][_0xd5e6[41]]})};return _0x7863x5[_0xd5e6[6]](200)[_0xd5e6[5]]({isValid:true,value:_0x7863x10[_0xd5e6[26]][_0xd5e6[41]]})})[_0xd5e6[14]](function(_0x7863x7){return handleError(_0x7863x5,_0x7863x7)})};exports[_0xd5e6[43]]= function(_0x7863x10,_0x7863x5){var _0x7863x12=require(_0xd5e6[29]);return SugarcrmAccount[_0xd5e6[24]](_0x7863x10[_0xd5e6[23]][_0xd5e6[22]])[_0xd5e6[10]](handleEntityNotFound(_0x7863x5))[_0xd5e6[10]](function(_0x7863x11){_0x7863x12[_0xd5e6[35]]({apiURL:Util[_0xd5e6[31]](_0x7863x11[_0xd5e6[30]])+ _0xd5e6[32],login:_0x7863x11[_0xd5e6[33]],passwd:_0x7863x11[_0xd5e6[34]]});_0x7863x12[_0xd5e6[36]](function(_0x7863x13){if(!_0x7863x13){return _0x7863x5[_0xd5e6[8]](400)};var _0x7863x16={session:_0x7863x13,module_name:_0xd5e6[44]};_0x7863x12[_0xd5e6[47]](_0xd5e6[45],_0x7863x16,function(_0x7863x15,_0x7863x7){if(_0x7863x7){return _0x7863x5[_0xd5e6[8]](400)};return _0x7863x5[_0xd5e6[6]](200)[_0xd5e6[5]](_0x7863x15[_0xd5e6[46]])})})})[_0xd5e6[14]](handleError(_0x7863x5))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/sugarcrm/accounts -> index + * POST /api/sugarcrm/accounts -> create + * GET /api/sugarcrm/accounts/:id -> show + * PUT /api/sugarcrm/accounts/:id -> update + * DELETE /api/sugarcrm/accounts/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var SugarcrmAccount = require('../../models').SugarcrmAccount; + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 200; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of SugarcrmAccounts +exports.index = function(req, res) { + return SugarcrmAccount + .scope('configurations') + .findAndCountAll(_.merge(Util.getQuery(req.query), { + distinct: true + })) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single SugarcrmAccount from the DB +exports.show = function(req, res) { + return SugarcrmAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new SugarcrmAccount in the DB +exports.create = function(req, res) { + return SugarcrmAccount.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing SugarcrmAccount in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return SugarcrmAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a SugarcrmAccount from the DB +exports.destroy = function(req, res) { + return SugarcrmAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +exports.checkAccount = function(req, res) { + return SugarcrmAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(account) { + var sugar = require('node-sugarcrm-client'); + sugar.init({ + apiURL: Util.stripTrailingSlash(account.remoteUri) + "/service/v4_1/rest.php", + login: account.username, + passwd: account.password + }); + sugar.login(function(sessionId) { + if (!sessionId) { + return res.sendStatus(400); + } + return res.sendStatus(200); + }); + }) + .catch(handleError(res)); +} + +exports.bulkDestroy = function(req, res) { + SugarcrmAccount + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(handleError(res)); +}; + +exports.accountValidation = function(req, res) { + var where = {}; + where[req.params.field] = req.body.value; + return SugarcrmAccount + .findAndCountAll({ + where: where + }) + .then(function(result) { + if (result.count) { + return res.status(200).send({ + isValid: false, + value: req.body.value + }); + } + return res.status(200).send({ + isValid: true, + value: req.body.value + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getFields = function(req, res) { + var sugar = require('node-sugarcrm-client'); + return SugarcrmAccount.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(account) { + sugar.init({ + apiURL: Util.stripTrailingSlash(account.remoteUri) + "/service/v4_1/rest.php", + login: account.username, + passwd: account.password + }); + sugar.login(function(sessionId) { + if (!sessionId) { + return res.sendStatus(400); + } + var params = { + session: sessionId, + module_name: "Cases" + }; + sugar.call("get_module_fields", params, function(result, err) { + if (err) { + return res.sendStatus(400); + } + return res.status(200).send(result.module_fields); + }); + }); + }) + .catch(handleError(res)); +}; diff --git a/server/api/sugarcrm_account/sugarcrm_account.events.js b/server/api/sugarcrm_account/sugarcrm_account.events.js index 9fd6eed..b65ac40 100644 --- a/server/api/sugarcrm_account/sugarcrm_account.events.js +++ b/server/api/sugarcrm_account/sugarcrm_account.events.js @@ -1 +1,36 @@ -var _0x53cb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x75\x67\x61\x72\x63\x72\x6D\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x53cb[0];const EventEmitter=require(_0x53cb[1]);const SugarcrmAccount=require(_0x53cb[3])[_0x53cb[2]];var SugarcrmAccountEvents= new EventEmitter();SugarcrmAccountEvents[_0x53cb[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x53cb[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x53cb[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x53cb[6]};for(var e in events){var event=events[e];SugarcrmAccount[_0x53cb[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x3239x8,_0x3239x9,_0x3239xa){SugarcrmAccountEvents[_0x53cb[10]](event+ _0x53cb[8]+ _0x3239x8[_0x53cb[9]],_0x3239x8);SugarcrmAccountEvents[_0x53cb[10]](event,_0x3239x8);_0x3239xa(null)}}module[_0x53cb[11]]= SugarcrmAccountEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SugarcrmAccount = require('../../models').SugarcrmAccount; + +var SugarcrmAccountEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SugarcrmAccountEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SugarcrmAccount.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SugarcrmAccountEvents.emit(event + ':' + doc._id, doc); + SugarcrmAccountEvents.emit(event, doc); + done(null); + } +} + +module.exports = SugarcrmAccountEvents; diff --git a/server/api/sugarcrm_account/sugarcrm_account.socket.js b/server/api/sugarcrm_account/sugarcrm_account.socket.js index eda2007..5a94608 100644 --- a/server/api/sugarcrm_account/sugarcrm_account.socket.js +++ b/server/api/sugarcrm_account/sugarcrm_account.socket.js @@ -1 +1,32 @@ -var _0x16f1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x16f1[0];const SugarcrmAccountEvents=require(_0x16f1[1]);var events=[_0x16f1[2],_0x16f1[3]];exports[_0x16f1[4]]= function(_0x2ac1x3){for(var _0x2ac1x4=0,_0x2ac1x5=events[_0x16f1[5]];_0x2ac1x4< _0x2ac1x5;_0x2ac1x4++){var _0x2ac1x6=events[_0x2ac1x4];var _0x2ac1x7=createListener(_0x16f1[6]+ _0x2ac1x6,_0x2ac1x3);SugarcrmAccountEvents[_0x16f1[7]](_0x2ac1x6,_0x2ac1x7);_0x2ac1x3[_0x16f1[7]](_0x16f1[8],removeListener(_0x2ac1x6,_0x2ac1x7))}};function createListener(_0x2ac1x6,_0x2ac1x3){return function(_0x2ac1x9){_0x2ac1x3[_0x16f1[9]](_0x2ac1x6,_0x2ac1x9)}}function removeListener(_0x2ac1x6,_0x2ac1x7){return function(){SugarcrmAccountEvents[_0x16f1[10]](_0x2ac1x6,_0x2ac1x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SugarcrmAccountEvents = require('./sugarcrm_account.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('sugarcrm_account:' + event, socket); + + SugarcrmAccountEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SugarcrmAccountEvents.removeListener(event, listener); + }; +} diff --git a/server/api/sugarcrm_configuration/index.js b/server/api/sugarcrm_configuration/index.js index 1b27531..a7bbe3c 100644 --- a/server/api/sugarcrm_configuration/index.js +++ b/server/api/sugarcrm_configuration/index.js @@ -1 +1,17 @@ -var _0xdf62=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x3A\x74\x79\x70\x65","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xdf62[0];var express=require(_0xdf62[1]);var auth=require(_0xdf62[2]);var controller=require(_0xdf62[3]);var router=express.Router();router[_0xdf62[9]](_0xdf62[4],auth[_0xdf62[5]](),auth[_0xdf62[7]]([19],[_0xdf62[6]]),controller[_0xdf62[8]]);router[_0xdf62[9]](_0xdf62[10],auth[_0xdf62[5]](),auth[_0xdf62[7]]([19],[_0xdf62[6]]),controller[_0xdf62[11]]);router[_0xdf62[13]](_0xdf62[4],auth[_0xdf62[5]](),auth[_0xdf62[7]]([19],[_0xdf62[6]]),controller[_0xdf62[12]]);router[_0xdf62[15]](_0xdf62[10],auth[_0xdf62[5]](),auth[_0xdf62[7]]([19],[_0xdf62[6]]),controller[_0xdf62[14]]);router[_0xdf62[13]](_0xdf62[16],auth[_0xdf62[5]](),auth[_0xdf62[7]]([19],[_0xdf62[6]]),controller[_0xdf62[17]]);router[_0xdf62[19]](_0xdf62[10],auth[_0xdf62[5]](),auth[_0xdf62[7]]([19],[_0xdf62[6]]),controller[_0xdf62[18]]);module[_0xdf62[20]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./sugarcrm_configuration.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.update); +router.post('/:id/:type', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.addConfigurationField); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroy); + + +module.exports = router; diff --git a/server/api/sugarcrm_configuration/sugarcrm_configuration.controller.js b/server/api/sugarcrm_configuration/sugarcrm_configuration.controller.js index 0853c9b..5918283 100644 --- a/server/api/sugarcrm_configuration/sugarcrm_configuration.controller.js +++ b/server/api/sugarcrm_configuration/sugarcrm_configuration.controller.js @@ -1 +1,145 @@ -var _0x28c5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x53\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x53\x75\x62\x6A\x65\x63\x74","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x46\x69\x65\x6C\x64","\x66\x69\x6E\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x73\x70\x72\x65\x61\x64","\x61\x64\x64\x53\x75\x62\x6A\x65\x63\x74","\x73\x75\x62\x6A\x65\x63\x74","\x61\x64\x64\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x61\x64\x64\x46\x69\x65\x6C\x64","\x66\x69\x65\x6C\x64","\x74\x79\x70\x65"];_0x28c5[0];var _=require(_0x28c5[1]);var SugarcrmConfiguration=require(_0x28c5[3])[_0x28c5[2]];var SugarcrmField=require(_0x28c5[3])[_0x28c5[4]];function handleError(_0x7b36x5,_0x7b36x6){_0x7b36x6= _0x7b36x6|| 500;return function(_0x7b36x7){_0x7b36x5[_0x28c5[6]](_0x7b36x6)[_0x28c5[5]](_0x7b36x7)}}function responseWithResult(_0x7b36x5,_0x7b36x6){_0x7b36x6= _0x7b36x6|| 200;return function(_0x7b36x9){if(_0x7b36x9){_0x7b36x5[_0x28c5[6]](_0x7b36x6)[_0x28c5[7]](_0x7b36x9)}}}function handleEntityNotFound(_0x7b36x5){return function(_0x7b36x9){if(!_0x7b36x9){_0x7b36x5[_0x28c5[6]](404)[_0x28c5[8]]();return null};return _0x7b36x9}}function saveUpdates(_0x7b36xc){return function(_0x7b36x9){return _0x7b36x9[_0x28c5[10]](_0x7b36xc)[_0x28c5[9]](function(_0x7b36xd){return _0x7b36xd})}}function removeEntity(_0x7b36x5){return function(_0x7b36x9){if(_0x7b36x9){return _0x7b36x9[_0x28c5[11]]()[_0x28c5[9]](function(){_0x7b36x5[_0x28c5[6]](204)[_0x28c5[8]]()})}}}exports[_0x28c5[12]]= function(_0x7b36xf,_0x7b36x5){SugarcrmConfiguration[_0x28c5[15]]({where:_0x7b36xf[_0x28c5[14]]})[_0x28c5[9]](responseWithResult(_0x7b36x5))[_0x28c5[13]](handleError(_0x7b36x5))};exports[_0x28c5[16]]= function(_0x7b36xf,_0x7b36x5){SugarcrmConfiguration[_0x28c5[22]]({where:{id:_0x7b36xf[_0x28c5[18]][_0x28c5[17]]},include:[{model:SugarcrmField,as:_0x28c5[19]},{model:SugarcrmField,as:_0x28c5[20]},{model:SugarcrmField,as:_0x28c5[21]}]})[_0x28c5[9]](handleEntityNotFound(_0x7b36x5))[_0x28c5[9]](responseWithResult(_0x7b36x5))[_0x28c5[13]](handleError(_0x7b36x5))};exports[_0x28c5[23]]= function(_0x7b36xf,_0x7b36x5){SugarcrmConfiguration[_0x28c5[23]](_0x7b36xf[_0x28c5[24]])[_0x28c5[9]](responseWithResult(_0x7b36x5,201))[_0x28c5[13]](handleError(_0x7b36x5))};exports[_0x28c5[25]]= function(_0x7b36xf,_0x7b36x5){if(_0x7b36xf[_0x28c5[24]][_0x28c5[17]]){delete _0x7b36xf[_0x28c5[24]][_0x28c5[17]]};SugarcrmConfiguration[_0x28c5[26]](_0x7b36xf[_0x28c5[18]][_0x28c5[17]])[_0x28c5[9]](handleEntityNotFound(_0x7b36x5))[_0x28c5[9]](saveUpdates(_0x7b36xf[_0x28c5[24]]))[_0x28c5[9]](responseWithResult(_0x7b36x5))[_0x28c5[13]](handleError(_0x7b36x5))};exports[_0x28c5[11]]= function(_0x7b36xf,_0x7b36x5){SugarcrmConfiguration[_0x28c5[26]](_0x7b36xf[_0x28c5[18]][_0x28c5[17]])[_0x28c5[9]](handleEntityNotFound(_0x7b36x5))[_0x28c5[9]](removeEntity(_0x7b36x5))[_0x28c5[13]](handleError(_0x7b36x5))};exports[_0x28c5[27]]= function(_0x7b36xf,_0x7b36x5,_0x7b36x10){var _0x7b36x11;SugarcrmConfiguration[_0x28c5[26]](_0x7b36xf[_0x28c5[18]][_0x28c5[17]])[_0x28c5[9]](handleEntityNotFound(_0x7b36x5))[_0x28c5[9]](function(_0x7b36x14){_0x7b36x11= _0x7b36x14;return SugarcrmField[_0x28c5[23]](_0x7b36xf[_0x28c5[24]])})[_0x28c5[9]](function(_0x7b36x13){switch(_0x7b36xf[_0x28c5[18]][_0x28c5[35]]){case _0x28c5[30]:return [_0x7b36x11[_0x28c5[29]](_0x7b36x13),_0x7b36x13];case _0x28c5[32]:return [_0x7b36x11[_0x28c5[31]](_0x7b36x13),_0x7b36x13];case _0x28c5[34]:return [_0x7b36x11[_0x28c5[33]](_0x7b36x13),_0x7b36x13]}})[_0x28c5[28]](function(_0x7b36x12,_0x7b36x13){return _0x7b36x5[_0x28c5[6]](201)[_0x28c5[7]](_0x7b36x13)})[_0x28c5[13]](handleError(_0x7b36x5))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/sugarcrm/configurations -> index + * POST /api/sugarcrm/configurations -> create + * GET /api/sugarcrm/configurations/:id -> show + * PUT /api/sugarcrm/configurations/:id -> update + * DELETE /api/sugarcrm/configurations/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); + +var SugarcrmConfiguration = require('../../models').SugarcrmConfiguration; +var SugarcrmField = require('../../models').SugarcrmField; + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of SugarcrmConfigurations +exports.index = function(req, res) { + SugarcrmConfiguration.findAll({ + where: req.query + }) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single SugarcrmConfiguration from the DB +exports.show = function(req, res) { + SugarcrmConfiguration.find({ + where: { + id: req.params.id + }, + include: [{ + model: SugarcrmField, + as: 'Subject' + }, { + model: SugarcrmField, + as: 'Description' + }, { + model: SugarcrmField, + as: 'Field' + }] + }) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new SugarcrmConfiguration in the DB +exports.create = function(req, res) { + SugarcrmConfiguration.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing SugarcrmConfiguration in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + SugarcrmConfiguration.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a SugarcrmConfiguration from the DB +exports.destroy = function(req, res) { + SugarcrmConfiguration.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +exports.addConfigurationField = function(req, res, next) { + var sugarcrmConfiguration; + SugarcrmConfiguration + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(sugarcrm_configuration) { + sugarcrmConfiguration = sugarcrm_configuration; + return SugarcrmField.create(req.body) + }) + .then(function(sugarcrmField) { + switch (req.params.type) { + case 'subject': + return [sugarcrmConfiguration.addSubject(sugarcrmField), sugarcrmField]; + case 'description': + return [sugarcrmConfiguration.addDescription(sugarcrmField), sugarcrmField]; + case 'field': + return [sugarcrmConfiguration.addField(sugarcrmField), sugarcrmField]; + } + }) + .spread(function(data, sugarcrmField) { + return res.status(201).json(sugarcrmField); + }) + .catch(handleError(res)); +}; diff --git a/server/api/sugarcrm_configuration/sugarcrm_configuration.events.js b/server/api/sugarcrm_configuration/sugarcrm_configuration.events.js index 665cdff..f1764e0 100644 --- a/server/api/sugarcrm_configuration/sugarcrm_configuration.events.js +++ b/server/api/sugarcrm_configuration/sugarcrm_configuration.events.js @@ -1 +1,36 @@ -var _0x7140=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x75\x67\x61\x72\x63\x72\x6D\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x7140[0];const EventEmitter=require(_0x7140[1]);const SugarcrmConfiguration=require(_0x7140[3])[_0x7140[2]];var SugarcrmConfigurationEvents= new EventEmitter();SugarcrmConfigurationEvents[_0x7140[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x7140[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x7140[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x7140[6]};for(var e in events){var event=events[e];SugarcrmConfiguration[_0x7140[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x911dx8,_0x911dx9,_0x911dxa){SugarcrmConfigurationEvents[_0x7140[10]](event+ _0x7140[8]+ _0x911dx8[_0x7140[9]],_0x911dx8);SugarcrmConfigurationEvents[_0x7140[10]](event,_0x911dx8);_0x911dxa(null)}}module[_0x7140[11]]= SugarcrmConfigurationEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SugarcrmConfiguration = require('../../models').SugarcrmConfiguration; + +var SugarcrmConfigurationEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SugarcrmConfigurationEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SugarcrmConfiguration.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SugarcrmConfigurationEvents.emit(event + ':' + doc._id, doc); + SugarcrmConfigurationEvents.emit(event, doc); + done(null); + } +} + +module.exports = SugarcrmConfigurationEvents; diff --git a/server/api/sugarcrm_configuration/sugarcrm_configuration.socket.js b/server/api/sugarcrm_configuration/sugarcrm_configuration.socket.js index 44e21d4..3a1b051 100644 --- a/server/api/sugarcrm_configuration/sugarcrm_configuration.socket.js +++ b/server/api/sugarcrm_configuration/sugarcrm_configuration.socket.js @@ -1 +1,32 @@ -var _0x4485=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x4485[0];const SugarcrmConfigurationEvents=require(_0x4485[1]);var events=[_0x4485[2],_0x4485[3]];exports[_0x4485[4]]= function(_0x7742x3){for(var _0x7742x4=0,_0x7742x5=events[_0x4485[5]];_0x7742x4< _0x7742x5;_0x7742x4++){var _0x7742x6=events[_0x7742x4];var _0x7742x7=createListener(_0x4485[6]+ _0x7742x6,_0x7742x3);SugarcrmConfigurationEvents[_0x4485[7]](_0x7742x6,_0x7742x7);_0x7742x3[_0x4485[7]](_0x4485[8],removeListener(_0x7742x6,_0x7742x7))}};function createListener(_0x7742x6,_0x7742x3){return function(_0x7742x9){_0x7742x3[_0x4485[9]](_0x7742x6,_0x7742x9)}}function removeListener(_0x7742x6,_0x7742x7){return function(){SugarcrmConfigurationEvents[_0x4485[10]](_0x7742x6,_0x7742x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SugarcrmConfigurationEvents = require('./sugarcrm_configuration.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('sugarcrm_configuration:' + event, socket); + + SugarcrmConfigurationEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SugarcrmConfigurationEvents.removeListener(event, listener); + }; +} diff --git a/server/api/sugarcrm_field/index.js b/server/api/sugarcrm_field/index.js index 84e2da4..30e2ad2 100644 --- a/server/api/sugarcrm_field/index.js +++ b/server/api/sugarcrm_field/index.js @@ -1 +1,17 @@ -var _0xf6e1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xf6e1[0];var express=require(_0xf6e1[1]);var auth=require(_0xf6e1[2]);var controller=require(_0xf6e1[3]);var router=express.Router();router[_0xf6e1[7]](_0xf6e1[4],auth[_0xf6e1[5]](),controller[_0xf6e1[6]]);router[_0xf6e1[7]](_0xf6e1[8],auth[_0xf6e1[5]](),auth[_0xf6e1[10]]([19],[_0xf6e1[9]]),controller[_0xf6e1[11]]);router[_0xf6e1[13]](_0xf6e1[4],auth[_0xf6e1[5]](),auth[_0xf6e1[10]]([19],[_0xf6e1[9]]),controller[_0xf6e1[12]]);router[_0xf6e1[15]](_0xf6e1[8],auth[_0xf6e1[5]](),auth[_0xf6e1[10]]([19],[_0xf6e1[9]]),controller[_0xf6e1[14]]);router[_0xf6e1[17]](_0xf6e1[8],auth[_0xf6e1[5]](),auth[_0xf6e1[10]]([19],[_0xf6e1[9]]),controller[_0xf6e1[16]]);module[_0xf6e1[18]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./sugarcrm_field.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); + +router.get('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.update); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroy); + + +module.exports = router; diff --git a/server/api/sugarcrm_field/sugarcrm_field.controller.js b/server/api/sugarcrm_field/sugarcrm_field.controller.js index eeca55d..eb6fe3d 100644 --- a/server/api/sugarcrm_field/sugarcrm_field.controller.js +++ b/server/api/sugarcrm_field/sugarcrm_field.controller.js @@ -1 +1,104 @@ -var _0x1f0b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x53\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0x1f0b[0];var _=require(_0x1f0b[1]);var SugarcrmField=require(_0x1f0b[3])[_0x1f0b[2]];function handleError(_0xafedx4,_0xafedx5){_0xafedx5= _0xafedx5|| 500;return function(_0xafedx6){_0xafedx4[_0x1f0b[5]](_0xafedx5)[_0x1f0b[4]](_0xafedx6)}}function responseWithResult(_0xafedx4,_0xafedx5){_0xafedx5= _0xafedx5|| 200;return function(_0xafedx8){if(_0xafedx8){_0xafedx4[_0x1f0b[5]](_0xafedx5)[_0x1f0b[6]](_0xafedx8)}}}function handleEntityNotFound(_0xafedx4){return function(_0xafedx8){if(!_0xafedx8){_0xafedx4[_0x1f0b[5]](404)[_0x1f0b[7]]();return null};return _0xafedx8}}function saveUpdates(_0xafedxb){return function(_0xafedx8){return _0xafedx8[_0x1f0b[9]](_0xafedxb)[_0x1f0b[8]](function(_0xafedxc){return _0xafedxc})}}function removeEntity(_0xafedx4){return function(_0xafedx8){if(_0xafedx8){return _0xafedx8[_0x1f0b[10]]()[_0x1f0b[8]](function(){_0xafedx4[_0x1f0b[5]](204)[_0x1f0b[7]]()})}}}exports[_0x1f0b[11]]= function(_0xafedxe,_0xafedx4){SugarcrmField[_0x1f0b[13]]()[_0x1f0b[8]](responseWithResult(_0xafedx4))[_0x1f0b[12]](handleError(_0xafedx4))};exports[_0x1f0b[14]]= function(_0xafedxe,_0xafedx4){SugarcrmField[_0x1f0b[17]](_0xafedxe[_0x1f0b[16]][_0x1f0b[15]])[_0x1f0b[8]](handleEntityNotFound(_0xafedx4))[_0x1f0b[8]](responseWithResult(_0xafedx4))[_0x1f0b[12]](handleError(_0xafedx4))};exports[_0x1f0b[18]]= function(_0xafedxe,_0xafedx4){SugarcrmField[_0x1f0b[18]](_0xafedxe[_0x1f0b[19]])[_0x1f0b[8]](responseWithResult(_0xafedx4,201))[_0x1f0b[12]](handleError(_0xafedx4))};exports[_0x1f0b[20]]= function(_0xafedxe,_0xafedx4){if(_0xafedxe[_0x1f0b[19]][_0x1f0b[15]]){delete _0xafedxe[_0x1f0b[19]][_0x1f0b[15]]};SugarcrmField[_0x1f0b[17]](_0xafedxe[_0x1f0b[16]][_0x1f0b[15]])[_0x1f0b[8]](handleEntityNotFound(_0xafedx4))[_0x1f0b[8]](saveUpdates(_0xafedxe[_0x1f0b[19]]))[_0x1f0b[8]](responseWithResult(_0xafedx4))[_0x1f0b[12]](handleError(_0xafedx4))};exports[_0x1f0b[10]]= function(_0xafedxe,_0xafedx4){SugarcrmField[_0x1f0b[17]](_0xafedxe[_0x1f0b[16]][_0x1f0b[15]])[_0x1f0b[8]](handleEntityNotFound(_0xafedx4))[_0x1f0b[8]](removeEntity(_0xafedx4))[_0x1f0b[12]](handleError(_0xafedx4))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/sugarcrm/fields -> index + * POST /api/sugarcrm/fields -> create + * GET /api/sugarcrm/fields/:id -> show + * PUT /api/sugarcrm/fields/:id -> update + * DELETE /api/sugarcrm/fields/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); + +var SugarcrmField = require('../../models').SugarcrmField; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of SugarcrmFields +exports.index = function(req, res) { + SugarcrmField.findAll() + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single SugarcrmField from the DB +exports.show = function(req, res) { + SugarcrmField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new SugarcrmField in the DB +exports.create = function(req, res) { + SugarcrmField.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing SugarcrmField in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + SugarcrmField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a SugarcrmField from the DB +exports.destroy = function(req, res) { + SugarcrmField.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} diff --git a/server/api/sugarcrm_field/sugarcrm_field.events.js b/server/api/sugarcrm_field/sugarcrm_field.events.js index 314fee9..0845bee 100644 --- a/server/api/sugarcrm_field/sugarcrm_field.events.js +++ b/server/api/sugarcrm_field/sugarcrm_field.events.js @@ -1 +1,36 @@ -var _0x7e35=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x53\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x7e35[0];const EventEmitter=require(_0x7e35[1]);const SugarcrmField=require(_0x7e35[3])[_0x7e35[2]];var SugarcrmFieldEvents= new EventEmitter();SugarcrmFieldEvents[_0x7e35[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x7e35[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x7e35[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x7e35[6]};for(var e in events){var event=events[e];SugarcrmField[_0x7e35[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xce42x8,_0xce42x9,_0xce42xa){SugarcrmFieldEvents[_0x7e35[10]](event+ _0x7e35[8]+ _0xce42x8[_0x7e35[9]],_0xce42x8);SugarcrmFieldEvents[_0x7e35[10]](event,_0xce42x8);_0xce42xa(null)}}module[_0x7e35[11]]= SugarcrmFieldEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const SugarcrmField = require('../../models').SugarcrmField; + +var SugarcrmFieldEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +SugarcrmFieldEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + SugarcrmField.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + SugarcrmFieldEvents.emit(event + ':' + doc._id, doc); + SugarcrmFieldEvents.emit(event, doc); + done(null); + } +} + +module.exports = SugarcrmFieldEvents; diff --git a/server/api/sugarcrm_field/sugarcrm_field.socket.js b/server/api/sugarcrm_field/sugarcrm_field.socket.js index 4e5e009..8830ac2 100644 --- a/server/api/sugarcrm_field/sugarcrm_field.socket.js +++ b/server/api/sugarcrm_field/sugarcrm_field.socket.js @@ -1 +1,32 @@ -var _0x661c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x66\x69\x65\x6C\x64\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x66\x69\x65\x6C\x64\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x661c[0];const SugarcrmFieldEvents=require(_0x661c[1]);var events=[_0x661c[2],_0x661c[3]];exports[_0x661c[4]]= function(_0xc00ax3){for(var _0xc00ax4=0,_0xc00ax5=events[_0x661c[5]];_0xc00ax4< _0xc00ax5;_0xc00ax4++){var _0xc00ax6=events[_0xc00ax4];var _0xc00ax7=createListener(_0x661c[6]+ _0xc00ax6,_0xc00ax3);SugarcrmFieldEvents[_0x661c[7]](_0xc00ax6,_0xc00ax7);_0xc00ax3[_0x661c[7]](_0x661c[8],removeListener(_0xc00ax6,_0xc00ax7))}};function createListener(_0xc00ax6,_0xc00ax3){return function(_0xc00ax9){_0xc00ax3[_0x661c[9]](_0xc00ax6,_0xc00ax9)}}function removeListener(_0xc00ax6,_0xc00ax7){return function(){SugarcrmFieldEvents[_0x661c[10]](_0xc00ax6,_0xc00ax7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const SugarcrmFieldEvents = require('./sugarcrm_field.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('sugarcrm_field:' + event, socket); + + SugarcrmFieldEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + SugarcrmFieldEvents.removeListener(event, listener); + }; +} diff --git a/server/api/tag/index.js b/server/api/tag/index.js index bdb489d..99449c8 100644 --- a/server/api/tag/index.js +++ b/server/api/tag/index.js @@ -1 +1,171 @@ -var _0xf5bc=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x74\x61\x67\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x63\x68\x61\x74\x2F\x3A\x74\x61\x67","\x67\x65\x74\x43\x68\x61\x74\x42\x79\x54\x61\x67","\x2F\x6D\x61\x69\x6C\x2F\x3A\x74\x61\x67","\x67\x65\x74\x4D\x61\x69\x6C\x42\x79\x54\x61\x67","\x2F\x66\x61\x78\x2F\x3A\x74\x61\x67","\x67\x65\x74\x46\x61\x78\x42\x79\x54\x61\x67","\x2F\x73\x6D\x73\x2F\x3A\x74\x61\x67","\x67\x65\x74\x53\x6D\x73\x42\x79\x54\x61\x67","\x2F\x63\x6F\x6E\x74\x61\x63\x74\x73\x2F\x3A\x74\x61\x67","\x67\x65\x74\x43\x6F\x6E\x74\x61\x63\x74\x73\x42\x79\x54\x61\x67","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xf5bc[0];var express=require(_0xf5bc[1]);var controller=require(_0xf5bc[2]);var auth=require(_0xf5bc[3]);var router=express.Router();router[_0xf5bc[10]](_0xf5bc[4],auth[_0xf5bc[5]](),auth[_0xf5bc[8]]([5,9,13],[_0xf5bc[6],_0xf5bc[7]]),controller[_0xf5bc[9]]);router[_0xf5bc[10]](_0xf5bc[11],auth[_0xf5bc[5]](),auth[_0xf5bc[8]]([13],[_0xf5bc[6]]),controller[_0xf5bc[12]]);router[_0xf5bc[10]](_0xf5bc[13],auth[_0xf5bc[5]](),auth[_0xf5bc[8]]([13],[_0xf5bc[6]]),controller[_0xf5bc[14]]);router[_0xf5bc[10]](_0xf5bc[15],auth[_0xf5bc[5]](),auth[_0xf5bc[8]]([13],[_0xf5bc[6]]),controller[_0xf5bc[16]]);router[_0xf5bc[10]](_0xf5bc[17],auth[_0xf5bc[5]](),auth[_0xf5bc[8]]([13],[_0xf5bc[6]]),controller[_0xf5bc[18]]);router[_0xf5bc[10]](_0xf5bc[19],auth[_0xf5bc[5]](),auth[_0xf5bc[8]]([13],[_0xf5bc[6]]),controller[_0xf5bc[20]]);router[_0xf5bc[10]](_0xf5bc[21],auth[_0xf5bc[5]](),auth[_0xf5bc[8]]([13],[_0xf5bc[6]]),controller[_0xf5bc[22]]);router[_0xf5bc[24]](_0xf5bc[4],auth[_0xf5bc[5]](),auth[_0xf5bc[8]]([5,13],[_0xf5bc[6],_0xf5bc[7]]),controller[_0xf5bc[23]]);router[_0xf5bc[26]](_0xf5bc[11],auth[_0xf5bc[5]](),auth[_0xf5bc[8]]([13],[_0xf5bc[6]]),controller[_0xf5bc[25]]);router[_0xf5bc[28]](_0xf5bc[4],auth[_0xf5bc[5]](),auth[_0xf5bc[8]]([13],[_0xf5bc[6]]),controller[_0xf5bc[27]]);router[_0xf5bc[28]](_0xf5bc[11],auth[_0xf5bc[5]](),auth[_0xf5bc[8]]([13],[_0xf5bc[6]]),controller[_0xf5bc[29]]);module[_0xf5bc[30]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./tag.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); +/** + * @api {get} /api/tags/ Get Tags' list. + * + * @apiParam (Query) {Number} [offset] Pagination offset. + * @apiParam (Query) {Number} [limit] Pagination limit. + * + * @apiVersion 0.0.143 + * @apiName GetTags + * @apiGroup Tags + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Number} count Number of tags. + * @apiSuccess {Object[]} rows Tags' list. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "count": 2, + * "rows": [{ + * "id": 1 + * "name": "tag1" + * "description": "my tag description" + * ... + * },{ + * "id": 2 + * "name": "newtag" + * "description": null + * ... + * },...] + * } + */ +router.get('/', auth.isAuthenticated(), auth.hasModule([5, 9, 13], ['admin', 'agent']), controller.index); +/** + * @api {get} /api/tags/:id Get Tag's details. + * @apiParam {Number} id Tag's unique ID. + * @apiVersion 0.0.143 + * @apiName GetTag + * @apiGroup Tags + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Object} Tag's details. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "tag1" + * "description": "my tag description" + * ... + * } + */ +router.get('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.show); +router.get('/chat/:tag', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.getChatByTag); +router.get('/mail/:tag', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.getMailByTag); +router.get('/fax/:tag', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.getFaxByTag); +router.get('/sms/:tag', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.getSmsByTag); +router.get('/contacts/:tag', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.getContactsByTag); +/** + * @api {post} /api/tags/ Create a new tag. + * @apiParam (body) {String} name Tag's name. + * @apiParam (body) {String} [description] Tag's description. + * + * @apiVersion 0.0.143 + * @apiName CreateTag + * @apiGroup Tags + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 201 Created + * { + * "id": 3 + * "name": "Tag3" + * "description": "my tag" + * ... + * } + */ +router.post('/', auth.isAuthenticated(), auth.hasModule([5, 13], ['admin', 'agent']), controller.create); +/** + * @api {put} /api/tags/:id Update tag's details. + * @apiParam {Number} id Tag's unique ID. + * @apiParam (body) {String} name Tag's name. + * @apiParam (body) {String} [description] Tag's description. + * + * @apiVersion 0.0.143 + * @apiName UpdateTag + * @apiGroup Tags + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 3 + * "name": "Tag 3" + * "description": "My new description" + * ... + * } + */ +router.put('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.update); +/** + * @api {delete} /api/tags/ Bulk Delete tags. + * + * @apiParam (Query) {Number[]} ids Tags' unique ID array. + * + * @apiVersion 0.0.143 + * @apiName BulkDeleteTags + * @apiGroup Tags + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.bulkDestroy); +/** + * @api {delete} /api/tags/:id Delete a tag. + * + * @apiParam {Number} id Tag's unique ID. + * + * @apiVersion 0.0.143 + * @apiName DeleteTag + * @apiGroup Tags + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/tag/tag.controller.js b/server/api/tag/tag.controller.js index d560bb9..8caf0e0 100644 --- a/server/api/tag/tag.controller.js +++ b/server/api/tag/tag.controller.js @@ -1 +1,209 @@ -var _0xac08=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x54\x61\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x46\x61\x78\x52\x6F\x6F\x6D","\x53\x6D\x73\x52\x6F\x6F\x6D","\x43\x6F\x6E\x74\x61\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x43\x68\x61\x74\x42\x79\x54\x61\x67","\x25","\x74\x61\x67","\x3B\x25","\x6D\x65\x72\x67\x65","\x67\x65\x74\x4D\x61\x69\x6C\x42\x79\x54\x61\x67","\x64\x65\x66\x61\x75\x6C\x74","\x73\x63\x6F\x70\x65","\x67\x65\x74\x46\x61\x78\x42\x79\x54\x61\x67","\x67\x65\x74\x53\x6D\x73\x42\x79\x54\x61\x67","\x67\x65\x74\x43\x6F\x6E\x74\x61\x63\x74\x73\x42\x79\x54\x61\x67","\x6C\x6F\x67","\x6C\x69\x73\x74","\x63\x6F\x6D\x70\x61\x6E\x79","\x63\x6F\x6D\x70\x61\x6E\x79\x5F\x6C\x69\x73\x74\x5F\x66\x69\x6C\x74\x65\x72","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x6D\x65\x73\x73\x61\x67\x65","\x54\x61\x67\x20\x69\x73\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x27\x73\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x6C\x65\x6E\x67\x74\x68"];_0xac08[0];var _=require(_0xac08[1]);var Tag=require(_0xac08[3])[_0xac08[2]];var ChatRoom=require(_0xac08[3])[_0xac08[4]];var ChatWebsite=require(_0xac08[3])[_0xac08[5]];var ChatVisitor=require(_0xac08[3])[_0xac08[6]];var MailRoom=require(_0xac08[3])[_0xac08[7]];var FaxRoom=require(_0xac08[3])[_0xac08[8]];var SmsRoom=require(_0xac08[3])[_0xac08[9]];var Contact=require(_0xac08[3])[_0xac08[10]];var Util=require(_0xac08[11]);exports[_0xac08[12]]= function(_0xea74xb,_0xea74xc,_0xea74xd){return Tag[_0xac08[19]](Util[_0xac08[18]](_0xea74xb[_0xac08[17]]))[_0xac08[16]](function(_0xea74xf){_0xea74xc[_0xac08[15]](200)[_0xac08[14]](_0xea74xf)})[_0xac08[13]](function(_0xea74xe){return handleError(_0xea74xc,_0xea74xe)})};exports[_0xac08[20]]= function(_0xea74xb,_0xea74xc){return Tag[_0xac08[24]](_0xea74xb[_0xac08[23]][_0xac08[22]])[_0xac08[16]](function(_0xea74x10){if(!_0xea74x10){return _0xea74xc[_0xac08[21]](404)};return _0xea74xc[_0xac08[14]](_0xea74x10)})[_0xac08[13]](function(_0xea74xe){return handleError(_0xea74xc,_0xea74xe)})};exports[_0xac08[25]]= function(_0xea74xb,_0xea74xc){return ChatRoom[_0xac08[19]](_[_0xac08[29]](Util[_0xac08[18]](_0xea74xb[_0xac08[17]],{tags:{$like:_0xac08[26]+ _0xea74xb[_0xac08[23]][_0xac08[27]]+ _0xac08[28]}}),{include:[ChatWebsite,ChatVisitor]}))[_0xac08[16]](function(_0xea74xf){_0xea74xc[_0xac08[15]](200)[_0xac08[14]](_0xea74xf)})[_0xac08[13]](function(_0xea74xe){return handleError(_0xea74xc,_0xea74xe)})};exports[_0xac08[30]]= function(_0xea74xb,_0xea74xc){return MailRoom[_0xac08[32]](_0xac08[31])[_0xac08[19]](Util[_0xac08[18]](_0xea74xb[_0xac08[17]],{tags:{$like:_0xac08[26]+ _0xea74xb[_0xac08[23]][_0xac08[27]]+ _0xac08[28]}}))[_0xac08[16]](function(_0xea74xf){_0xea74xc[_0xac08[15]](200)[_0xac08[14]](_0xea74xf)})[_0xac08[13]](function(_0xea74xe){return handleError(_0xea74xc,_0xea74xe)})};exports[_0xac08[33]]= function(_0xea74xb,_0xea74xc){return FaxRoom[_0xac08[32]](_0xac08[31])[_0xac08[19]](Util[_0xac08[18]](_0xea74xb[_0xac08[17]],{tags:{$like:_0xac08[26]+ _0xea74xb[_0xac08[23]][_0xac08[27]]+ _0xac08[28]}}))[_0xac08[16]](function(_0xea74xf){_0xea74xc[_0xac08[15]](200)[_0xac08[14]](_0xea74xf)})[_0xac08[13]](function(_0xea74xe){return handleError(_0xea74xc,_0xea74xe)})};exports[_0xac08[34]]= function(_0xea74xb,_0xea74xc){return SmsRoom[_0xac08[32]](_0xac08[31])[_0xac08[19]](Util[_0xac08[18]](_0xea74xb[_0xac08[17]],{tags:{$like:_0xac08[26]+ _0xea74xb[_0xac08[23]][_0xac08[27]]+ _0xac08[28]}}))[_0xac08[16]](function(_0xea74xf){_0xea74xc[_0xac08[15]](200)[_0xac08[14]](_0xea74xf)})[_0xac08[13]](function(_0xea74xe){return handleError(_0xea74xc,_0xea74xe)})};exports[_0xac08[35]]= function(_0xea74xb,_0xea74xc){return Contact[_0xac08[32]](_0xac08[37],_0xac08[38],{method:[_0xac08[39],_0xea74xb[_0xac08[17]]]})[_0xac08[19]](Util[_0xac08[18]](_0xea74xb[_0xac08[17]],{tags:{$like:_0xac08[26]+ _0xea74xb[_0xac08[23]][_0xac08[27]]+ _0xac08[28]}}))[_0xac08[16]](function(_0xea74xf){_0xea74xc[_0xac08[15]](200)[_0xac08[14]](_0xea74xf)})[_0xac08[13]](function(_0xea74xe){console[_0xac08[36]](_0xea74xe);return handleError(_0xea74xc,_0xea74xe)})};exports[_0xac08[40]]= function(_0xea74xb,_0xea74xc){return Tag[_0xac08[40]](_0xea74xb[_0xac08[41]])[_0xac08[16]](function(_0xea74x10){return _0xea74xc[_0xac08[15]](201)[_0xac08[14]](_0xea74x10)})[_0xac08[13]](function(_0xea74xe){return handleError(_0xea74xc,_0xea74xe)})};exports[_0xac08[42]]= function(_0xea74xb,_0xea74xc){if(_0xea74xb[_0xac08[41]][_0xac08[22]]){delete _0xea74xb[_0xac08[41]][_0xac08[22]]};return Tag[_0xac08[24]](_0xea74xb[_0xac08[23]][_0xac08[22]])[_0xac08[16]](function(_0xea74x10){if(!_0xea74x10){return _0xea74xc[_0xac08[21]](404)};var _0xea74x11=_[_0xac08[29]](_0xea74x10,_0xea74xb[_0xac08[41]]);return _0xea74x11[_0xac08[43]]()})[_0xac08[16]](function(_0xea74x10){return _0xea74xc[_0xac08[15]](200)[_0xac08[14]](_0xea74x10)})[_0xac08[13]](function(_0xea74xe){return handleError(_0xea74xc,_0xea74xe)})};exports[_0xac08[44]]= function(_0xea74xb,_0xea74xc){return Tag[_0xac08[32]](_0xac08[47])[_0xac08[24]](_0xea74xb[_0xac08[23]][_0xac08[22]])[_0xac08[16]](function(_0xea74x10){if(!_0xea74x10){return _0xea74xc[_0xac08[21]](404)};if(tagHasAssociation(_0xea74x10)){var _0xea74xe= new Error();_0xea74xe[_0xac08[45]]= _0xac08[46];throw _0xea74xe};return _0xea74x10[_0xac08[44]]()})[_0xac08[16]](function(){return _0xea74xc[_0xac08[21]](204)})[_0xac08[13]](function(_0xea74xe){return handleError(_0xea74xc,_0xea74xe)})};exports[_0xac08[48]]= function(_0xea74xb,_0xea74xc){return Tag[_0xac08[44]]({where:{id:_0xea74xb[_0xac08[17]][_0xac08[49]]},individualHooks:true})[_0xac08[16]](function(){return _0xea74xc[_0xac08[21]](204)})[_0xac08[13]](function(_0xea74xe){return handleError(_0xea74xc,_0xea74xe)})};function handleError(_0xea74xc,_0xea74xe){return _0xea74xc[_0xac08[15]](500)[_0xac08[14]](_0xea74xe)}function tagHasAssociation(_0xea74x10){return ((_0xea74x10[_0xac08[50]]&& _0xea74x10[_0xac08[50]][_0xac08[51]]> 0))} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Tag = require('../../models').Tag; +var ChatRoom = require('../../models').ChatRoom; +var ChatWebsite = require('../../models').ChatWebsite; +var ChatVisitor = require('../../models').ChatVisitor; +var MailRoom = require('../../models').MailRoom; +var FaxRoom = require('../../models').FaxRoom; +var SmsRoom = require('../../models').SmsRoom; +var Contact = require('../../models').Contact; +var Util = require('../../config/util'); + +// Get list of tags +exports.index = function(req, res, next) { + return Tag + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single tag +exports.show = function(req, res) { + return Tag + .findById(req.params.id) + .then(function(tag) { + if (!tag) { + return res.sendStatus(404); + } + return res.send(tag); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + + +exports.getChatByTag = function(req, res) { + return ChatRoom + .findAndCountAll(_.merge(Util.getQuery(req.query, { + tags: { + $like: '%' + req.params.tag + ';%' + } + }), { + include: [ChatWebsite, ChatVisitor] + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getMailByTag = function(req, res) { + return MailRoom + .scope('default') + .findAndCountAll(Util.getQuery(req.query, { + tags: { + $like: '%' + req.params.tag + ';%' + } + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getFaxByTag = function(req, res) { + return FaxRoom + .scope('default') + .findAndCountAll(Util.getQuery(req.query, { + tags: { + $like: '%' + req.params.tag + ';%' + } + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getSmsByTag = function(req, res) { + return SmsRoom + .scope('default') + .findAndCountAll(Util.getQuery(req.query, { + tags: { + $like: '%' + req.params.tag + ';%' + } + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.getContactsByTag = function(req, res) { + return Contact + .scope('list', 'company', { + method: ['company_list_filter', req.query] + }) + .findAndCountAll(Util.getQuery(req.query, { + tags: { + $like: '%' + req.params.tag + ';%' + } + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + + +// Creates a new tag in the DB. +exports.create = function(req, res) { + return Tag + .create(req.body) + .then(function(tag) { + return res.status(201).send(tag); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing tag in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return Tag + .findById(req.params.id) + .then(function(tag) { + if (!tag) { + return res.sendStatus(404); + } + var updated = _.merge(tag, req.body); + return updated + .save(); + }) + .then(function(tag) { + return res.status(200).send(tag); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a tag from the DB. +exports.destroy = function(req, res) { + return Tag + .scope('configuration') + .findById(req.params.id) + .then(function(tag) { + if (!tag) { + return res.sendStatus(404); + } + if (tagHasAssociation(tag)) { + var err = new Error(); + err.message = 'Tag is associated with an integration\'s configuration'; + throw err; + } + return tag.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.bulkDestroy = function(req, res) { + return Tag + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} + +function tagHasAssociation(tag) { + return ((tag.ZendeskConfigurations && tag.ZendeskConfigurations.length > 0)); +} diff --git a/server/api/tag/tag.events.js b/server/api/tag/tag.events.js index c586524..61d6e17 100644 --- a/server/api/tag/tag.events.js +++ b/server/api/tag/tag.events.js @@ -1 +1,36 @@ -var _0xc77b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x54\x61\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xc77b[0];const EventEmitter=require(_0xc77b[1]);const Tag=require(_0xc77b[3])[_0xc77b[2]];var TagEvents= new EventEmitter();TagEvents[_0xc77b[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xc77b[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xc77b[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xc77b[6]};for(var e in events){var event=events[e];Tag[_0xc77b[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x6790x8,_0x6790x9,_0x6790xa){TagEvents[_0xc77b[10]](event+ _0xc77b[8]+ _0x6790x8[_0xc77b[9]],_0x6790x8);TagEvents[_0xc77b[10]](event,_0x6790x8);_0x6790xa(null)}}module[_0xc77b[11]]= TagEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Tag = require('../../models').Tag; + +var TagEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +TagEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Tag.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + TagEvents.emit(event + ':' + doc._id, doc); + TagEvents.emit(event, doc); + done(null); + } +} + +module.exports = TagEvents; diff --git a/server/api/tag/tag.socket.js b/server/api/tag/tag.socket.js index 9004936..6fccbd9 100644 --- a/server/api/tag/tag.socket.js +++ b/server/api/tag/tag.socket.js @@ -1 +1,32 @@ -var _0xc1b8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x74\x61\x67\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x74\x61\x67\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xc1b8[0];const TagEvents=require(_0xc1b8[1]);var events=[_0xc1b8[2],_0xc1b8[3]];exports[_0xc1b8[4]]= function(_0x4b73x3){for(var _0x4b73x4=0,_0x4b73x5=events[_0xc1b8[5]];_0x4b73x4< _0x4b73x5;_0x4b73x4++){var _0x4b73x6=events[_0x4b73x4];var _0x4b73x7=createListener(_0xc1b8[6]+ _0x4b73x6,_0x4b73x3);TagEvents[_0xc1b8[7]](_0x4b73x6,_0x4b73x7);_0x4b73x3[_0xc1b8[7]](_0xc1b8[8],removeListener(_0x4b73x6,_0x4b73x7))}};function createListener(_0x4b73x6,_0x4b73x3){return function(_0x4b73x9){_0x4b73x3[_0xc1b8[9]](_0x4b73x6,_0x4b73x9)}}function removeListener(_0x4b73x6,_0x4b73x7){return function(){TagEvents[_0xc1b8[10]](_0x4b73x6,_0x4b73x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const TagEvents = require('./tag.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('tag:' + event, socket); + + TagEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + TagEvents.removeListener(event, listener); + }; +} diff --git a/server/api/team/index.js b/server/api/team/index.js index 94641e5..056fd0c 100644 --- a/server/api/team/index.js +++ b/server/api/team/index.js @@ -1 +1,247 @@ -var _0xf035=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x74\x65\x61\x6D\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x52\x6F\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x61\x73\x73\x6F\x63\x69\x61\x74\x69\x6F\x6E\x73","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x61\x73\x73\x6F\x63\x69\x61\x74\x69\x6F\x6E\x73\x49\x6E\x64\x65\x78","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0xf035[0];var express=require(_0xf035[1]);var controller=require(_0xf035[2]);var auth=require(_0xf035[3]);var router=express.Router();router[_0xf035[9]](_0xf035[4],auth[_0xf035[5]](),auth[_0xf035[7]](_0xf035[6]),controller[_0xf035[8]]);router[_0xf035[9]](_0xf035[10],auth[_0xf035[5]](),auth[_0xf035[11]]([5],[_0xf035[6]]),controller[_0xf035[12]]);router[_0xf035[9]](_0xf035[13],auth[_0xf035[5]](),auth[_0xf035[7]](_0xf035[6]),controller[_0xf035[14]]);router[_0xf035[9]](_0xf035[15],auth[_0xf035[5]](),auth[_0xf035[7]](_0xf035[6]),controller[_0xf035[16]]);router[_0xf035[18]](_0xf035[4],auth[_0xf035[5]](),auth[_0xf035[7]](_0xf035[6]),controller[_0xf035[17]]);router[_0xf035[18]](_0xf035[15],auth[_0xf035[5]](),auth[_0xf035[7]](_0xf035[6]),controller[_0xf035[19]]);router[_0xf035[21]](_0xf035[13],auth[_0xf035[5]](),auth[_0xf035[7]](_0xf035[6]),controller[_0xf035[20]]);router[_0xf035[23]](_0xf035[4],auth[_0xf035[5]](),auth[_0xf035[7]](_0xf035[6]),controller[_0xf035[22]]);router[_0xf035[23]](_0xf035[13],auth[_0xf035[5]](),auth[_0xf035[7]](_0xf035[6]),controller[_0xf035[24]]);router[_0xf035[23]](_0xf035[15],auth[_0xf035[5]](),auth[_0xf035[7]](_0xf035[6]),controller[_0xf035[25]]);module[_0xf035[26]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./team.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +/** + * @api {get} /api/teams/ Get Teams' list. + * + * @apiParam (Query) {Number} [offset] Pagination offset. + * @apiParam (Query) {Number} [limit] Pagination limit. + * + * @apiVersion 0.0.143 + * @apiName GetTeams + * @apiGroup Teams + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Number} count Number of teams. + * @apiSuccess {Object[]} rows Teams' list. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "count": 2, + * "rows": [{ + * "id": 1 + * "name": "T1" + * "description": "Default Team", + * ... + * },{ + * "id": 2 + * "name": "T2" + * "description": null + * ... + * },...] + * } + */ +router.get('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.index); +router.get('/associations', auth.isAuthenticated(), auth.hasModule([5], ['admin']), controller.associationsIndex); +/** + * @api {get} /api/teams/:id Get Team's details. + * @apiParam {Number} id Team's unique ID. + * @apiVersion 0.0.143 + * @apiName GetTeam + * @apiGroup Teams + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Object} Team's details. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "T1" + * "description": "Default Team" + * ... + * } + */ +router.get('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.show); +/** + * @api {get} /api/teams/:id/agents Get Team's agents + * @apiParam {Number} id Team's unique ID. + * @apiVersion 0.0.143 + * @apiName showAgents + * @apiGroup Teams + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Number} count Number of agents. + * @apiSuccess {Object[]} rows Agents list. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "count": 2, + * "rows": [{ + * "id": 1 + * "name": "John Doe" + * "fullname": "john.doe" + * "email": "johndoe@test.com" + * "internal": 1000, + * ... + * },{ + * "id": 2 + * "name": "Jane Miller" + * "fullname": "jane.miller", + * "email": "janemiller@test.com" + * "internal": 1001, + * ... + * },...] + * } + */ +router.get('/:id/agents', auth.isAuthenticated(), auth.hasRole('admin'), controller.showAgents); +/** + * @api {post} /api/teams/ Create a new team. + * @apiParam (body) {String} name Team's name. + * @apiParam (body) {String} [description] Team's description. + * + * @apiVersion 0.0.143 + * @apiName CreateTeam + * @apiGroup Teams + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 201 Created + * { + * "id": 3 + * "name": "My Team" + * "description": "New Team" + * ... + * } + */ +router.post('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.create); +/** + * @api {post} /api/teams/:id/agents Add agents to a team. + * @apiParam {Number} id Team's unique ID. + * @apiParam (body) {Number[]} agents Array of agents' ID + * + * @apiVersion 0.0.143 + * @apiName AddAgents + * @apiGroup Teams + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.post('/:id/agents', auth.isAuthenticated(), auth.hasRole('admin'), controller.addAgents); +/** + * @api {put} /api/teams/:id Update team's details. + * @apiParam {Number} id Team's unique ID. + * @apiParam (body) {String} name Team's name. + * @apiParam (body) {String} [description] Team's description. + * + * @apiVersion 0.0.143 + * @apiName UpdateTeam + * @apiGroup Teams + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 3 + * "name": "Team 3" + * "description": "My description" + * ... + * } + */ +router.put('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.update); +/** + * @api {delete} /api/teams/ Bulk Delete teams. + * + * @apiParam (Query) {Number[]} ids Teams' unique ID array. + * + * @apiVersion 0.0.143 + * @apiName BulkDeleteTeams + * @apiGroup Teams + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.bulkDestroy); +/** + * @api {delete} /api/teams/:id Delete a team. + * + * @apiParam {Number} id Team's unique ID. + * + * @apiVersion 0.0.143 + * @apiName DeleteTeam + * @apiGroup Teams + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.destroy); +/** + * @api {delete} /api/teams/:id/agents Remove agents from a team. + * @apiParam {Number} id Team's unique ID. + * @apiParam (Query) {Number[]} ids Agents' unique ID array. + * + * @apiVersion 0.0.143 + * @apiName RemoveAgents + * @apiGroup Teams + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/:id/agents', auth.isAuthenticated(), auth.hasRole('admin'), controller.removeAgents); + +module.exports = router; diff --git a/server/api/team/team.controller.js b/server/api/team/team.controller.js index 0bb162f..cac8024 100644 --- a/server/api/team/team.controller.js +++ b/server/api/team/team.controller.js @@ -1 +1,252 @@ -var _0xffac=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x54\x65\x61\x6D","\x55\x73\x65\x72","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\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","\x61\x73\x73\x6F\x63\x69\x61\x74\x69\x6F\x6E\x73\x49\x6E\x64\x65\x78","\x6C\x65\x6E\x67\x74\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x67\x65\x6E\x74\x73","\x72\x6F\x77\x73","\x69\x64","\x6D\x61\x70","\x67\x65\x74\x41\x67\x65\x6E\x74\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x75\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x72\x6F\x6C\x65","\x73\x68\x6F\x77","\x70\x61\x72\x61\x6D\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\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","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x61\x64\x64\x55\x73\x65\x72\x73","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x72\x65\x6D\x6F\x76\x65\x55\x73\x65\x72"];_0xffac[0];var _=require(_0xffac[1]);var util=require(_0xffac[2]);var Util=require(_0xffac[3]);var sequelize=require(_0xffac[5])[_0xffac[4]];var Team=require(_0xffac[5])[_0xffac[6]];var Agent=require(_0xffac[5])[_0xffac[7]];var User=require(_0xffac[5])[_0xffac[7]];exports[_0xffac[8]]= function(_0x3f7ex8,_0x3f7ex9){return Team[_0xffac[18]](_0xffac[17])[_0xffac[16]](_[_0xffac[15]](Util[_0xffac[14]](_0x3f7ex8[_0xffac[13]])))[_0xffac[12]](function(_0x3f7exb){_0x3f7ex9[_0xffac[11]](200)[_0xffac[10]](_0x3f7exb)})[_0xffac[9]](function(_0x3f7exa){return handleError(_0x3f7ex9,_0x3f7exa)})};exports[_0xffac[19]]= function(_0x3f7ex8,_0x3f7ex9){switch(_0x3f7ex8[_0xffac[28]][_0xffac[30]]){case _0xffac[28]:return User[_0xffac[29]](_0x3f7ex8[_0xffac[28]][_0xffac[24]])[_0xffac[12]](function(_0x3f7exd){if(!_0x3f7exd){return _0x3f7ex9[_0xffac[27]](404)};return _0x3f7exd})[_0xffac[12]](Util[_0xffac[26]](_0x3f7ex8[_0xffac[13]]))[_0xffac[12]](function(_0x3f7exc){return Team[_0xffac[18]]({method:[_0xffac[22],_[_0xffac[25]](_0x3f7exc[_0xffac[23]],_0xffac[24])]})[_0xffac[21]](_[_0xffac[15]](Util[_0xffac[14]](_0x3f7ex8[_0xffac[13]])))})[_0xffac[12]](function(_0x3f7exb){_0x3f7ex9[_0xffac[11]](200)[_0xffac[10]]({rows:_0x3f7exb,count:_0x3f7exb[_0xffac[20]]})})[_0xffac[9]](function(_0x3f7exa){return handleError(_0x3f7ex9,_0x3f7exa)});default:return Team[_0xffac[18]](_0xffac[22])[_0xffac[21]](_[_0xffac[15]](Util[_0xffac[14]](_0x3f7ex8[_0xffac[13]])))[_0xffac[12]](function(_0x3f7exb){_0x3f7ex9[_0xffac[11]](200)[_0xffac[10]]({rows:_0x3f7exb,count:_0x3f7exb[_0xffac[20]]})})[_0xffac[9]](function(_0x3f7exa){return handleError(_0x3f7ex9,_0x3f7exa)})}};exports[_0xffac[31]]= function(_0x3f7ex8,_0x3f7ex9){return Team[_0xffac[29]](_0x3f7ex8[_0xffac[32]][_0xffac[24]])[_0xffac[12]](function(_0x3f7exe){if(!_0x3f7exe){return _0x3f7ex9[_0xffac[27]](404)};return _0x3f7ex9[_0xffac[10]](_0x3f7exe)})[_0xffac[9]](function(_0x3f7exa){return handleError(_0x3f7ex9,_0x3f7exa)})};exports[_0xffac[33]]= function(_0x3f7ex8,_0x3f7ex9){switch(_0x3f7ex8[_0xffac[28]][_0xffac[30]]){case _0xffac[28]:return User[_0xffac[29]](_0x3f7ex8[_0xffac[28]][_0xffac[24]])[_0xffac[12]](function(_0x3f7exd){if(!_0x3f7exd){return _0x3f7ex9[_0xffac[27]](404)};return _0x3f7exd})[_0xffac[12]](Util[_0xffac[26]](_0x3f7ex8[_0xffac[13]]))[_0xffac[12]](function(_0x3f7exc){return Team[_0xffac[18]]({method:[_0xffac[22],_[_0xffac[25]](_0x3f7exc[_0xffac[23]],_0xffac[24])]})[_0xffac[29]](_0x3f7ex8[_0xffac[32]][_0xffac[24]])})[_0xffac[12]](function(_0x3f7exe){if(!_0x3f7exe){return _0x3f7ex9[_0xffac[27]](404)};return _0x3f7ex9[_0xffac[11]](200)[_0xffac[10]]({count:_0x3f7exe[_0xffac[34]][_0xffac[20]],rows:_0x3f7exe[_0xffac[34]]})})[_0xffac[9]](function(_0x3f7exa){return handleError(_0x3f7ex9,_0x3f7exa)});default:return Team[_0xffac[18]](_0xffac[22])[_0xffac[29]](_0x3f7ex8[_0xffac[32]][_0xffac[24]])[_0xffac[12]](function(_0x3f7exe){if(!_0x3f7exe){return _0x3f7ex9[_0xffac[27]](404)};return _0x3f7ex9[_0xffac[11]](200)[_0xffac[10]]({count:_0x3f7exe[_0xffac[34]][_0xffac[20]],rows:_0x3f7exe[_0xffac[34]]})})[_0xffac[9]](function(_0x3f7exa){return handleError(_0x3f7ex9,_0x3f7exa)})}};exports[_0xffac[35]]= function(_0x3f7ex8,_0x3f7ex9){return Team[_0xffac[35]](_0x3f7ex8[_0xffac[38]])[_0xffac[12]](function(_0x3f7exe){return _0x3f7ex9[_0xffac[11]](201)[_0xffac[10]](_0x3f7exe)})[_0xffac[9]](sequelize.UniqueConstraintError,function(_0x3f7exa){return Util[_0xffac[37]][_0xffac[36]](_0x3f7ex9,_0x3f7exa)})[_0xffac[9]](function(_0x3f7exa){return handleError(_0x3f7ex9,_0x3f7exa)})};exports[_0xffac[39]]= function(_0x3f7ex8,_0x3f7ex9){if(_0x3f7ex8[_0xffac[38]][_0xffac[24]]){delete _0x3f7ex8[_0xffac[38]][_0xffac[24]]};return Team[_0xffac[29]](_0x3f7ex8[_0xffac[32]][_0xffac[24]])[_0xffac[12]](function(_0x3f7exe){if(!_0x3f7exe){return _0x3f7ex9[_0xffac[27]](404)};var _0x3f7exf=_[_0xffac[15]](_0x3f7exe,_0x3f7ex8[_0xffac[38]]);return _0x3f7exf[_0xffac[40]]()})[_0xffac[12]](function(_0x3f7exe){return _0x3f7ex9[_0xffac[11]](200)[_0xffac[10]](_0x3f7exe)})[_0xffac[9]](function(_0x3f7exa){return handleError(_0x3f7ex9,_0x3f7exa)})};exports[_0xffac[41]]= function(_0x3f7ex8,_0x3f7ex9){return Team[_0xffac[29]](_0x3f7ex8[_0xffac[32]][_0xffac[24]])[_0xffac[12]](function(_0x3f7exe){if(!_0x3f7exe){return _0x3f7ex9[_0xffac[27]](404)};return _0x3f7exe[_0xffac[41]]()})[_0xffac[12]](function(){return _0x3f7ex9[_0xffac[27]](204)})[_0xffac[9]](function(_0x3f7exa){return handleError(_0x3f7ex9,_0x3f7exa)})};exports[_0xffac[42]]= function(_0x3f7ex8,_0x3f7ex9){return Team[_0xffac[41]]({where:{id:_0x3f7ex8[_0xffac[13]][_0xffac[43]]},individualHooks:true})[_0xffac[12]](function(){return _0x3f7ex9[_0xffac[27]](204)})[_0xffac[9]](function(_0x3f7exa){return handleError(_0x3f7ex9,_0x3f7exa)})};exports[_0xffac[44]]= function(_0x3f7ex8,_0x3f7ex9,_0x3f7ex10){return Team[_0xffac[29]](_0x3f7ex8[_0xffac[32]][_0xffac[24]])[_0xffac[12]](function(_0x3f7exe){if(!_0x3f7exe){return _0x3f7ex9[_0xffac[27]](404)};return _0x3f7exe[_0xffac[45]](_0x3f7ex8[_0xffac[38]][_0xffac[22]])})[_0xffac[12]](function(){return _0x3f7ex9[_0xffac[27]](204)})[_0xffac[9]](function(_0x3f7exa){return _0x3f7ex10(_0x3f7exa)})};exports[_0xffac[46]]= function(_0x3f7ex8,_0x3f7ex9,_0x3f7ex10){return Team[_0xffac[29]](_0x3f7ex8[_0xffac[32]][_0xffac[24]])[_0xffac[12]](function(_0x3f7exe){if(!_0x3f7exe){return _0x3f7ex9[_0xffac[27]](404)};return _0x3f7exe[_0xffac[47]](_0x3f7ex8[_0xffac[13]][_0xffac[22]])})[_0xffac[12]](function(){return _0x3f7ex9[_0xffac[27]](202)})[_0xffac[9]](function(_0x3f7exa){return _0x3f7ex10(_0x3f7exa)})};function handleError(_0x3f7ex9,_0x3f7exa){return _0x3f7ex9[_0xffac[11]](500)[_0xffac[10]](_0x3f7exa)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var Util = require('../../config/util'); + +var sequelize = require('../../models').sequelize; +var Team = require('../../models').Team; +var Agent = require('../../models').User; +var User = require('../../models').User; + +// Get list of teams +exports.index = function(req, res) { + return Team + .scope('default') + .findAndCountAll(_.merge(Util.getQuery(req.query))) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.associationsIndex = function(req, res) { + switch (req.user.role) { + case 'user': + return User + .findById(req.user.id) + .then(function(user) { + if (!user) { + return res.sendStatus(404); + } + + return user; + }) + .then(Util.getAgentsIdByUser(req.query)) + .then(function(data) { + return Team + .scope({ + method: ['agents', _.map(data.rows, 'id')] + }) + .findAll(_.merge(Util.getQuery(req.query))); + }) + .then(function(result) { + res.status(200).send({ + rows: result, + count: result.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); + + default: + return Team + .scope('agents') + .findAll(_.merge(Util.getQuery(req.query))) + .then(function(result) { + res.status(200).send({ + rows: result, + count: result.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); + } +}; + +// Get a single team +exports.show = function(req, res) { + return Team + // .scope('default') + .findById(req.params.id) + .then(function(team) { + if (!team) { + return res.sendStatus(404); + } + return res.send(team); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single team +exports.showAgents = function(req, res) { + switch (req.user.role) { + case 'user': + return User + .findById(req.user.id) + .then(function(user) { + if (!user) { + return res.sendStatus(404); + } + return user; + }) + .then(Util.getAgentsIdByUser(req.query)) + .then(function(data) { + return Team + .scope({ + method: ['agents', _.map(data.rows, 'id')] + }) + .findById(req.params.id); + }) + .then(function(team) { + if (!team) { + return res.sendStatus(404); + } + return res.status(200).send({ + count: team.Users.length, + rows: team.Users + }); + }) + .catch(function(err) { + return handleError(res, err); + }); + default: + return Team + .scope('agents') + .findById(req.params.id) + .then(function(team) { + if (!team) { + return res.sendStatus(404); + } + return res.status(200).send({ + count: team.Users.length, + rows: team.Users + }); + }) + .catch(function(err) { + return handleError(res, err); + }); + } +}; + +// Creates a new team in the DB. +exports.create = function(req, res) { + return Team + // .scope('default') + .create(req.body) + .then(function(team) { + return res.status(201).send(team); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing team in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return Team + .findById(req.params.id) + .then(function(team) { + if (!team) { + return res.sendStatus(404); + } + var updated = _.merge(team, req.body); + return updated + .save(); + }) + .then(function(team) { + return res.status(200).send(team); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a team from the DB. +exports.destroy = function(req, res) { + return Team + .findById(req.params.id) + .then(function(team) { + if (!team) { + return res.sendStatus(404); + } + return team.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a agent from the DB. +exports.bulkDestroy = function(req, res) { + return Team + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing user_has_mail_queue in the DB. +exports.addAgents = function(req, res, next) { + return Team + .findById(req.params.id) + .then(function(team) { + if (!team) { + return res.sendStatus(404); + } + return team + .addUsers(req.body.agents); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return next(err); + }); +}; + +exports.removeAgents = function(req, res, next) { + return Team + .findById(req.params.id) + .then(function(team) { + if (!team) { + return res.sendStatus(404); + } + return team + .removeUser(req.query.agents); + }) + .then(function() { + return res.sendStatus(202); + }) + .catch(function(err) { + return next(err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/team/team.events.js b/server/api/team/team.events.js index 7d8d3ad..8a9173b 100644 --- a/server/api/team/team.events.js +++ b/server/api/team/team.events.js @@ -1 +1,36 @@ -var _0xf952=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x54\x65\x61\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xf952[0];const EventEmitter=require(_0xf952[1]);const Team=require(_0xf952[3])[_0xf952[2]];var TeamEvents= new EventEmitter();TeamEvents[_0xf952[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xf952[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xf952[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xf952[6]};for(var e in events){var event=events[e];Team[_0xf952[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xe900x8,_0xe900x9,_0xe900xa){TeamEvents[_0xf952[10]](event+ _0xf952[8]+ _0xe900x8[_0xf952[9]],_0xe900x8);TeamEvents[_0xf952[10]](event,_0xe900x8);_0xe900xa(null)}}module[_0xf952[11]]= TeamEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Team = require('../../models').Team; + +var TeamEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +TeamEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Team.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + TeamEvents.emit(event + ':' + doc._id, doc); + TeamEvents.emit(event, doc); + done(null); + } +} + +module.exports = TeamEvents; diff --git a/server/api/team/team.socket.js b/server/api/team/team.socket.js index b5683d8..8217583 100644 --- a/server/api/team/team.socket.js +++ b/server/api/team/team.socket.js @@ -1 +1,32 @@ -var _0xd387=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x74\x65\x61\x6D\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x74\x65\x61\x6D\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xd387[0];const TeamEvents=require(_0xd387[1]);var events=[_0xd387[2],_0xd387[3]];exports[_0xd387[4]]= function(_0xc67dx3){for(var _0xc67dx4=0,_0xc67dx5=events[_0xd387[5]];_0xc67dx4< _0xc67dx5;_0xc67dx4++){var _0xc67dx6=events[_0xc67dx4];var _0xc67dx7=createListener(_0xd387[6]+ _0xc67dx6,_0xc67dx3);TeamEvents[_0xd387[7]](_0xc67dx6,_0xc67dx7);_0xc67dx3[_0xd387[7]](_0xd387[8],removeListener(_0xc67dx6,_0xc67dx7))}};function createListener(_0xc67dx6,_0xc67dx3){return function(_0xc67dx9){_0xc67dx3[_0xd387[9]](_0xc67dx6,_0xc67dx9)}}function removeListener(_0xc67dx6,_0xc67dx7){return function(){TeamEvents[_0xd387[10]](_0xc67dx6,_0xc67dx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const TeamEvents = require('./team.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('team:' + event, socket); + + TeamEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + TeamEvents.removeListener(event, listener); + }; +} diff --git a/server/api/telephone/index.js b/server/api/telephone/index.js index 07bc250..6d85db0 100644 --- a/server/api/telephone/index.js +++ b/server/api/telephone/index.js @@ -1 +1,174 @@ -var _0x7d77=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x52\x6F\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x69\x73\x54\x65\x6C\x65\x70\x68\x6F\x6E\x65\x73\x4C\x69\x6D\x69\x74","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x7d77[0];var express=require(_0x7d77[1]);var auth=require(_0x7d77[2]);var controller=require(_0x7d77[3]);var license=require(_0x7d77[4]);var router=express.Router();router[_0x7d77[10]](_0x7d77[5],auth[_0x7d77[6]](),auth[_0x7d77[8]](_0x7d77[7]),controller[_0x7d77[9]]);router[_0x7d77[10]](_0x7d77[11],auth[_0x7d77[6]](),auth[_0x7d77[8]](_0x7d77[7]),controller[_0x7d77[12]]);router[_0x7d77[16]](_0x7d77[5],auth[_0x7d77[6]](),license[_0x7d77[13]](),license[_0x7d77[14]](),auth[_0x7d77[8]](_0x7d77[7]),controller[_0x7d77[15]]);router[_0x7d77[18]](_0x7d77[11],auth[_0x7d77[6]](),auth[_0x7d77[8]](_0x7d77[7]),controller[_0x7d77[17]]);router[_0x7d77[20]](_0x7d77[5],auth[_0x7d77[6]](),auth[_0x7d77[8]](_0x7d77[7]),controller[_0x7d77[19]]);router[_0x7d77[20]](_0x7d77[11],auth[_0x7d77[6]](),auth[_0x7d77[8]](_0x7d77[7]),controller[_0x7d77[21]]);module[_0x7d77[22]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./telephone.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +/** + * @api {get} /api/telephones/ Get telephones list. + * @apiVersion 0.0.143 + * @apiName GetTelephones + * @apiGroup Telephones + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Number} count Number of telephones. + * @apiSuccess {Object[]} rows Get list of agent detailss. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "count": 1, + * "rows": [{ + * "id": 1 + * "name": "john.doe" + * "internal": 1001 + * ... + * }] + * } + */ +router.get('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.index); + +/** + * @api {get} /api/telephones/:id Get telephone details. + * @apiParam {Number} id Telephone's unique ID. + * @apiVersion 0.0.143 + * @apiName GetTelephone + * @apiGroup Telephones + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Object} Telephone's details. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "john.doe" + * "internal": 1001 + * ... + * } + */ +router.get('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.show); + +/** + * @api {post} /api/telephones/ Create telephone. + * @apiParam (Body) {String} name Telephone's name. + * @apiParam (Body) {String} context="from-sip" Telephone's SIP context. + * @apiParam (Body) {String} password Telephone's password. + * @apiParam (Body) {Number} internal Telephone's internal number. + * @apiParam (Body) {String="tcp", "udp", "tcp,udp"} transport="udp" Telephone's SIP transport. + * @apiParam (Body) {String="alaw", "ulaw", "gsm"} allow="alaw;ulaw;gsm" Telephone's SIP codecs. + * @apiParam (Body) {Number} internal Telephone's internal number. + * + * @apiVersion 0.0.143 + * @apiName CreateTelephone + * @apiGroup Telephones + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 201 Created + * { + * "id": 1 + * "name": "john.doe" + * "internal": 1001 + * ... + * } + */ +router.post('/', auth.isAuthenticated(), license.isValidDate(), license.isTelephonesLimit(), auth.hasRole('admin'), controller.create); + +/** + * @api {update} /api/telephones/:id Update telephone details. + * + * @apiParam (Params) {Number} id Telephone's unique ID. + * @apiParam (Body) {String} email Telephone's email. + * @apiParam (Body) {String} context="from-sip" Telephone's SIP context. + * @apiParam (Body) {String} password Telephone's password. + * @apiParam (Body) {Number} internal Telephone's internal number. + * @apiParam (Body) {String="tcp", "udp", "tcp,udp"} transport="udp" Telephone's SIP transport. + * @apiParam (Body) {String="alaw", "ulaw", "gsm"} allow="alaw;ulaw;gsm" Telephone's SIP codecs. + * + * @apiVersion 0.0.143 + * @apiName UpdateTelephone + * @apiGroup Telephones + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "john.doe" + * "internal": 1001 + * ... + * } + */ +router.put('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.update); + +/** + * @api {delete} /api/telephones/ Bulk Delete telephones. + * + * @apiParam (Query) {Number[]} ids Telephones' unique ID array. + * + * @apiVersion 0.0.143 + * @apiName BulkDeleteTelephones + * @apiGroup Telephones + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.bulkDestroy); + +/** + * @api {delete} /api/telephones/:id Delete telephone. + * + * @apiParam {Number} id Telephone's unique ID. + * + * @apiVersion 0.0.143 + * @apiName DeleteTelephone + * @apiGroup Telephones + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.destroy); + +module.exports = router; diff --git a/server/api/telephone/telephone.controller.js b/server/api/telephone/telephone.controller.js index 8d38162..139df32 100644 --- a/server/api/telephone/telephone.controller.js +++ b/server/api/telephone/telephone.controller.js @@ -1 +1,157 @@ -var _0x6fb7=["\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","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x62\x6F\x64\x79","\x74\x65\x73\x74","\x57\x72\x6F\x6E\x67\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x20\x66\x6F\x72\x6D\x61\x74\x21","\x72\x6F\x6C\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","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x6E\x61\x6D\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64\x73"];_0x6fb7[0];var _=require(_0x6fb7[1]);var Util=require(_0x6fb7[2]);var sequelize=require(_0x6fb7[4])[_0x6fb7[3]];var Telephone=require(_0x6fb7[4])[_0x6fb7[5]];function handleError(_0x8995x6,_0x8995x7){_0x8995x7= _0x8995x7|| 500;return function(_0x8995x8){_0x8995x6[_0x6fb7[7]](_0x8995x7)[_0x6fb7[6]](_0x8995x8)}}function responseWithResult(_0x8995x6,_0x8995x7){_0x8995x7= _0x8995x7|| 200;return function(_0x8995xa){if(_0x8995xa){_0x8995x6[_0x6fb7[7]](_0x8995x7)[_0x6fb7[8]](_0x8995xa)}}}function handleEntityNotFound(_0x8995x6){return function(_0x8995xa){if(!_0x8995xa){_0x8995x6[_0x6fb7[7]](404)[_0x6fb7[9]]();return null};return _0x8995xa}}function saveUpdates(_0x8995xd,_0x8995xe){return function(_0x8995xa){return _0x8995xa[_0x6fb7[11]](_0x8995xd,{transaction:_0x8995xe})[_0x6fb7[10]](function(_0x8995xf){return _0x8995xf})}}function removeEntity(_0x8995x6){return function(_0x8995xa){if(_0x8995xa){return _0x8995xa[_0x6fb7[12]]()[_0x6fb7[10]](function(){_0x8995x6[_0x6fb7[7]](204)[_0x6fb7[9]]()})}}}exports[_0x6fb7[13]]= function(_0x8995x11,_0x8995x6){return Telephone[_0x6fb7[19]](_0x6fb7[18])[_0x6fb7[17]](Util[_0x6fb7[16]](_0x8995x11[_0x6fb7[15]]))[_0x6fb7[10]](function(_0x8995x12){_0x8995x6[_0x6fb7[7]](200)[_0x6fb7[6]](_0x8995x12)})[_0x6fb7[14]](function(_0x8995x8){return handleError(_0x8995x6,_0x8995x8)})};exports[_0x6fb7[20]]= function(_0x8995x11,_0x8995x6){Telephone[_0x6fb7[23]](_0x8995x11[_0x6fb7[22]][_0x6fb7[21]])[_0x6fb7[10]](handleEntityNotFound(_0x8995x6))[_0x6fb7[10]](responseWithResult(_0x8995x6))[_0x6fb7[14]](handleError(_0x8995x6))};exports[_0x6fb7[24]]= function(_0x8995x11,_0x8995x6){var _0x8995x13=String(_0x8995x11[_0x6fb7[26]][_0x6fb7[25]]);if(!(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/[_0x6fb7[27]](_0x8995x13))){throw new Error(_0x6fb7[28])};_0x8995x11[_0x6fb7[26]][_0x6fb7[29]]= _0x6fb7[18];return sequelize[_0x6fb7[32]](function(_0x8995xe){return Telephone[_0x6fb7[24]](_0x8995x11[_0x6fb7[26]],{transaction:_0x8995xe})[_0x6fb7[10]](responseWithResult(_0x8995x6,201))})[_0x6fb7[14]](sequelize.UniqueConstraintError,function(_0x8995x8){return Util[_0x6fb7[31]][_0x6fb7[30]](_0x8995x6,_0x8995x8)})[_0x6fb7[14]](handleError(_0x8995x6))};exports[_0x6fb7[33]]= function(_0x8995x11,_0x8995x6){if(_0x8995x11[_0x6fb7[26]][_0x6fb7[21]]){delete _0x8995x11[_0x6fb7[26]][_0x6fb7[21]]};if(_0x8995x11[_0x6fb7[26]][_0x6fb7[25]]){var _0x8995x13=String(_0x8995x11[_0x6fb7[26]][_0x6fb7[25]]);if(!(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/[_0x6fb7[27]](_0x8995x13))){throw new Error(_0x6fb7[28])}};delete _0x8995x11[_0x6fb7[26]][_0x6fb7[34]];return sequelize[_0x6fb7[32]](function(_0x8995xe){return Telephone[_0x6fb7[23]](_0x8995x11[_0x6fb7[22]][_0x6fb7[21]])[_0x6fb7[10]](handleEntityNotFound(_0x8995x6))[_0x6fb7[10]](saveUpdates(_0x8995x11[_0x6fb7[26]],_0x8995xe))[_0x6fb7[10]](responseWithResult(_0x8995x6))})[_0x6fb7[14]](sequelize.UniqueConstraintError,function(_0x8995x8){return Util[_0x6fb7[31]][_0x6fb7[30]](_0x8995x6,_0x8995x8)})[_0x6fb7[14]](handleError(_0x8995x6))};exports[_0x6fb7[12]]= function(_0x8995x11,_0x8995x6){return Telephone[_0x6fb7[23]](_0x8995x11[_0x6fb7[22]][_0x6fb7[21]])[_0x6fb7[10]](handleEntityNotFound(_0x8995x6))[_0x6fb7[10]](removeEntity(_0x8995x6))[_0x6fb7[14]](handleError(_0x8995x6))};exports[_0x6fb7[35]]= function(_0x8995x11,_0x8995x6){return Telephone[_0x6fb7[12]]({where:{id:_0x8995x11[_0x6fb7[15]][_0x6fb7[37]]},individualHooks:true})[_0x6fb7[10]](function(){return _0x8995x6[_0x6fb7[36]](204)})[_0x6fb7[14]](function(_0x8995x8){return handleError(_0x8995x6,_0x8995x8)})} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/telephones -> index + * POST /api/telephones -> create + * GET /api/telephones/:id -> show + * PUT /api/telephones/:id -> update + * DELETE /api/telephones/:id -> destroy + */ + +'use strict'; + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var sequelize = require('../../models').sequelize; +var Telephone = require('../../models').User; + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates, t) { + return function(entity) { + return entity.updateAttributes(updates, { + transaction: t + }) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of Telephones +exports.index = function(req, res) { + return Telephone + .scope('telephone') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +} + +// Gets a single Telephone from the DB +exports.show = function(req, res) { + Telephone.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new Telephone in the DB +exports.create = function(req, res) { + var password = String(req.body.password); + if (!(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/.test(password))) { + throw new Error('Wrong password format!'); + } + // Set default role + req.body.role = 'telephone'; + return sequelize.transaction(function(t) { + return Telephone + .create(req.body, { + transaction: t + }) + .then(responseWithResult(res, 201)) + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(handleError(res)); +} + +// Updates an existing Telephone in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + if (req.body.password) { + var password = String(req.body.password); + if (!(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/.test(password))) { + throw new Error('Wrong password format!'); + } + } + + delete req.body.name; + + return sequelize.transaction(function(t) { + return Telephone.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body, t)) + .then(responseWithResult(res)) + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(handleError(res)); +} + +// Deletes a Telephone from the DB +exports.destroy = function(req, res) { + return Telephone.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +// Deletes a agent from the DB. +exports.bulkDestroy = function(req, res) { + return Telephone + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; diff --git a/server/api/telephone/telephone.events.js b/server/api/telephone/telephone.events.js index f793731..25f4f9a 100644 --- a/server/api/telephone/telephone.events.js +++ b/server/api/telephone/telephone.events.js @@ -1 +1,36 @@ -var _0x91ee=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x54\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x91ee[0];const EventEmitter=require(_0x91ee[1]);const Telephone=require(_0x91ee[3])[_0x91ee[2]];var TelephoneEvents= new EventEmitter();TelephoneEvents[_0x91ee[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x91ee[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x91ee[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x91ee[6]};for(var e in events){var event=events[e];Telephone[_0x91ee[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xc7a5x8,_0xc7a5x9,_0xc7a5xa){TelephoneEvents[_0x91ee[10]](event+ _0x91ee[8]+ _0xc7a5x8[_0x91ee[9]],_0xc7a5x8);TelephoneEvents[_0x91ee[10]](event,_0xc7a5x8);_0xc7a5xa(null)}}module[_0x91ee[11]]= TelephoneEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Telephone = require('../../models').Telephone; + +var TelephoneEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +TelephoneEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Telephone.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + TelephoneEvents.emit(event + ':' + doc._id, doc); + TelephoneEvents.emit(event, doc); + done(null); + } +} + +module.exports = TelephoneEvents; diff --git a/server/api/telephone/telephone.socket.js b/server/api/telephone/telephone.socket.js index d6a8cc0..66a9a8e 100644 --- a/server/api/telephone/telephone.socket.js +++ b/server/api/telephone/telephone.socket.js @@ -1 +1,32 @@ -var _0xf9aa=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xf9aa[0];const TelephoneEvents=require(_0xf9aa[1]);var events=[_0xf9aa[2],_0xf9aa[3]];exports[_0xf9aa[4]]= function(_0x49b8x3){for(var _0x49b8x4=0,_0x49b8x5=events[_0xf9aa[5]];_0x49b8x4< _0x49b8x5;_0x49b8x4++){var _0x49b8x6=events[_0x49b8x4];var _0x49b8x7=createListener(_0xf9aa[6]+ _0x49b8x6,_0x49b8x3);TelephoneEvents[_0xf9aa[7]](_0x49b8x6,_0x49b8x7);_0x49b8x3[_0xf9aa[7]](_0xf9aa[8],removeListener(_0x49b8x6,_0x49b8x7))}};function createListener(_0x49b8x6,_0x49b8x3){return function(_0x49b8x9){_0x49b8x3[_0xf9aa[9]](_0x49b8x6,_0x49b8x9)}}function removeListener(_0x49b8x6,_0x49b8x7){return function(){TelephoneEvents[_0xf9aa[10]](_0x49b8x6,_0x49b8x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const TelephoneEvents = require('./telephone.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('telephone:' + event, socket); + + TelephoneEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + TelephoneEvents.removeListener(event, listener); + }; +} diff --git a/server/api/template/index.js b/server/api/template/index.js index 927c005..55b8696 100644 --- a/server/api/template/index.js +++ b/server/api/template/index.js @@ -1 +1,182 @@ -var _0x1517=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x75\x73\x65\x72","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x1517[0];var express=require(_0x1517[1]);var controller=require(_0x1517[2]);var auth=require(_0x1517[3]);var router=express.Router();router[_0x1517[11]](_0x1517[4],auth[_0x1517[5]](),auth[_0x1517[9]]([13],[_0x1517[6],_0x1517[7],_0x1517[8]]),controller[_0x1517[10]]);router[_0x1517[11]](_0x1517[12],auth[_0x1517[5]](),auth[_0x1517[9]]([13],[_0x1517[6]]),controller[_0x1517[13]]);router[_0x1517[15]](_0x1517[4],auth[_0x1517[5]](),auth[_0x1517[9]]([13],[_0x1517[6]]),controller[_0x1517[14]]);router[_0x1517[17]](_0x1517[12],auth[_0x1517[5]](),auth[_0x1517[9]]([13],[_0x1517[6]]),controller[_0x1517[16]]);router[_0x1517[19]](_0x1517[12],auth[_0x1517[5]](),auth[_0x1517[9]]([13],[_0x1517[6]]),controller[_0x1517[18]]);router[_0x1517[19]](_0x1517[4],auth[_0x1517[5]](),auth[_0x1517[9]]([13],[_0x1517[6]]),controller[_0x1517[20]]);module[_0x1517[21]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./template.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); +/** + * @api {get} /api/template/ Get Templates' list. + * + * @apiParam (Query) {Number} [offset] Pagination offset. + * @apiParam (Query) {Number} [limit] Pagination limit. + * + * @apiVersion 0.0.143 + * @apiName GetTemplates + * @apiGroup Templates + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Number} count Number of templates. + * @apiSuccess {Object[]} rows Templates list. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "count": 2, + * "rows": [{ + * "id": 1 + * "name": "Template 1" + * "description": "Auto Response" + * "subject": "My subject" + * "attachment": null + * "html": null + * "text": "Hi, nice to meet you" + * ... + * },{ + * "id": 2 + * "name": "Template abc" + * "description": null + * ... + * },...] + * } + */ +router.get('/', auth.isAuthenticated(), auth.hasModule([13], ['admin', 'user', 'agent']), controller.index); +/** + * @api {get} /api/templates/:id Get Template's details. + * @apiParam {Number} id Template's unique ID. + * @apiVersion 0.0.143 + * @apiName GetTemplate + * @apiGroup Templates + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Object} Template's details. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "Template 1" + * "description": "Auto Response" + * "subject": "My subject" + * "attachment": null + * "html": null + * "text": "Hi, nice to meet you" + * ... + * } + */ +router.get('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.show); +/** + * @api {post} /api/templates/ Create a new template. + * @apiParam (body) {String} name Template's name. + * @apiParam (body) {String} [description] Template's description. + * @apiParam (body) {String} [subject] Template's subject. + * @apiParam (body) {String} [html] Template's content. + * + * @apiVersion 0.0.143 + * @apiName CreateTemplate + * @apiGroup Templates + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 201 Created + * { + * id": 2 + * "name": "Template 2" + * "description": "My Response", + * "subject": "My subject", + * "html": null + * ... + * } + */ +router.post('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.create); +/** + * @api {put} /api/templates/:id Update template's details. + * @apiParam {Number} id Template's unique ID. + * @apiParam (body) {String} name Template's name. + * @apiParam (body) {String} [description] Template's description. + * @apiParam (body) {String} [subject] Template's subject. + * @apiParam (body) {String} [html] Template's content. + * + * @apiVersion 0.0.143 + * @apiName UpdateTemplate + * @apiGroup Templates + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * id": 2 + * "name": "Template 2" + * "description": "My Response", + * "subject": "My subject", + * "html": "Hi, nice to meet you" + * ... + * } + */ +router.put('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.update); +/** + * @api {delete} /api/templates/:id Delete a template. + * + * @apiParam {Number} id Template's unique ID. + * + * @apiVersion 0.0.143 + * @apiName DeleteTemplate + * @apiGroup Templates + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.destroy); +/** + * @api {delete} /api/templates/ Bulk Delete templates. + * + * @apiParam (Query) {Number[]} ids Templates' unique ID array. + * + * @apiVersion 0.0.143 + * @apiName BulkDeleteTemplates + * @apiGroup Templates + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.bulkDestroy); + +module.exports = router; diff --git a/server/api/template/template.controller.js b/server/api/template/template.controller.js index 65a2068..79f8d99 100644 --- a/server/api/template/template.controller.js +++ b/server/api/template/template.controller.js @@ -1 +1,108 @@ -var _0xf8cb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x54\x65\x6D\x70\x6C\x61\x74\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0xf8cb[0];var _=require(_0xf8cb[1]);var util=require(_0xf8cb[2]);var Util=require(_0xf8cb[3]);var Template=require(_0xf8cb[5])[_0xf8cb[4]];exports[_0xf8cb[6]]= function(_0xd5b1x5,_0xd5b1x6,_0xd5b1x7){return Template[_0xf8cb[13]](Util[_0xf8cb[12]](_0xd5b1x5[_0xf8cb[11]]))[_0xf8cb[10]](function(_0xd5b1x9){_0xd5b1x6[_0xf8cb[9]](200)[_0xf8cb[8]](_0xd5b1x9)})[_0xf8cb[7]](function(_0xd5b1x8){return handleError(_0xd5b1x6,_0xd5b1x8)})};exports[_0xf8cb[14]]= function(_0xd5b1x5,_0xd5b1x6){return Template[_0xf8cb[18]](_0xd5b1x5[_0xf8cb[17]][_0xf8cb[16]])[_0xf8cb[10]](function(_0xd5b1xa){if(!_0xd5b1xa){return _0xd5b1x6[_0xf8cb[15]](404)};return _0xd5b1x6[_0xf8cb[8]](_0xd5b1xa)})[_0xf8cb[7]](function(_0xd5b1x8){return handleError(_0xd5b1x6,_0xd5b1x8)})};exports[_0xf8cb[19]]= function(_0xd5b1x5,_0xd5b1x6){return Template[_0xf8cb[19]](_0xd5b1x5[_0xf8cb[20]])[_0xf8cb[10]](function(_0xd5b1xa){return _0xd5b1x6[_0xf8cb[9]](201)[_0xf8cb[8]](_0xd5b1xa)})[_0xf8cb[7]](function(_0xd5b1x8){return handleError(_0xd5b1x6,_0xd5b1x8)})};exports[_0xf8cb[21]]= function(_0xd5b1x5,_0xd5b1x6){if(_0xd5b1x5[_0xf8cb[20]][_0xf8cb[16]]){delete _0xd5b1x5[_0xf8cb[20]][_0xf8cb[16]]};return Template[_0xf8cb[18]](_0xd5b1x5[_0xf8cb[17]][_0xf8cb[16]])[_0xf8cb[10]](function(_0xd5b1xa){if(!_0xd5b1xa){return _0xd5b1x6[_0xf8cb[15]](404)};var _0xd5b1xb=_[_0xf8cb[22]](_0xd5b1xa,_0xd5b1x5[_0xf8cb[20]]);return _0xd5b1xb[_0xf8cb[23]]()})[_0xf8cb[10]](function(_0xd5b1xa){return _0xd5b1x6[_0xf8cb[9]](200)[_0xf8cb[8]](_0xd5b1xa)})[_0xf8cb[7]](function(_0xd5b1x8){return handleError(_0xd5b1x6,_0xd5b1x8)})};exports[_0xf8cb[24]]= function(_0xd5b1x5,_0xd5b1x6){return Template[_0xf8cb[18]](_0xd5b1x5[_0xf8cb[17]][_0xf8cb[16]])[_0xf8cb[10]](function(_0xd5b1xa){if(!_0xd5b1xa){return _0xd5b1x6[_0xf8cb[15]](404)};return _0xd5b1xa[_0xf8cb[24]]()})[_0xf8cb[10]](function(){return _0xd5b1x6[_0xf8cb[15]](204)})[_0xf8cb[7]](function(_0xd5b1x8){return handleError(_0xd5b1x6,_0xd5b1x8)})};exports[_0xf8cb[25]]= function(_0xd5b1x5,_0xd5b1x6){return Template[_0xf8cb[24]]({where:{id:_0xd5b1x5[_0xf8cb[11]][_0xf8cb[26]]},individualHooks:true})[_0xf8cb[10]](function(){return _0xd5b1x6[_0xf8cb[15]](204)})[_0xf8cb[7]](function(_0xd5b1x8){return handleError(_0xd5b1x6,_0xd5b1x8)})};function handleError(_0xd5b1x6,_0xd5b1x8){return _0xd5b1x6[_0xf8cb[9]](500)[_0xf8cb[8]](_0xd5b1x8)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var Util = require('../../config/util'); + +var Template = require('../../models').Template; + +// Get list of agents +exports.index = function(req, res, next) { + return Template + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single template +exports.show = function(req, res) { + return Template + .findById(req.params.id) + .then(function(template) { + if (!template) { + return res.sendStatus(404); + } + return res.send(template); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new template in the DB. +exports.create = function(req, res) { + return Template + .create(req.body) + .then(function(template) { + return res.status(201).send(template); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing template in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return Template + .findById(req.params.id) + .then(function(template) { + if (!template) { + return res.sendStatus(404); + } + var updated = _.merge(template, req.body); + return updated + .save(); + }) + .then(function(template) { + return res.status(200).send(template); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a template from the DB. +exports.destroy = function(req, res) { + return Template + .findById(req.params.id) + .then(function(template) { + if (!template) { + return res.sendStatus(404); + } + return template + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.bulkDestroy = function(req, res) { + return Template + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/template/template.events.js b/server/api/template/template.events.js index 67aebb1..aa7bb8e 100644 --- a/server/api/template/template.events.js +++ b/server/api/template/template.events.js @@ -1 +1,36 @@ -var _0x8b1a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x54\x65\x6D\x70\x6C\x61\x74\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x8b1a[0];const EventEmitter=require(_0x8b1a[1]);const Template=require(_0x8b1a[3])[_0x8b1a[2]];var TemplateEvents= new EventEmitter();TemplateEvents[_0x8b1a[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x8b1a[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x8b1a[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x8b1a[6]};for(var e in events){var event=events[e];Template[_0x8b1a[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xcf54x8,_0xcf54x9,_0xcf54xa){TemplateEvents[_0x8b1a[10]](event+ _0x8b1a[8]+ _0xcf54x8[_0x8b1a[9]],_0xcf54x8);TemplateEvents[_0x8b1a[10]](event,_0xcf54x8);_0xcf54xa(null)}}module[_0x8b1a[11]]= TemplateEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Template = require('../../models').Template; + +var TemplateEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +TemplateEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Template.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + TemplateEvents.emit(event + ':' + doc._id, doc); + TemplateEvents.emit(event, doc); + done(null); + } +} + +module.exports = TemplateEvents; diff --git a/server/api/template/template.socket.js b/server/api/template/template.socket.js index 92b8d9f..1757712 100644 --- a/server/api/template/template.socket.js +++ b/server/api/template/template.socket.js @@ -1 +1,32 @@ -var _0x608d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x74\x65\x6D\x70\x6C\x61\x74\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x608d[0];const TemplateEvents=require(_0x608d[1]);var events=[_0x608d[2],_0x608d[3]];exports[_0x608d[4]]= function(_0x68b3x3){for(var _0x68b3x4=0,_0x68b3x5=events[_0x608d[5]];_0x68b3x4< _0x68b3x5;_0x68b3x4++){var _0x68b3x6=events[_0x68b3x4];var _0x68b3x7=createListener(_0x608d[6]+ _0x68b3x6,_0x68b3x3);TemplateEvents[_0x608d[7]](_0x68b3x6,_0x68b3x7);_0x68b3x3[_0x608d[7]](_0x608d[8],removeListener(_0x68b3x6,_0x68b3x7))}};function createListener(_0x68b3x6,_0x68b3x3){return function(_0x68b3x9){_0x68b3x3[_0x608d[9]](_0x68b3x6,_0x68b3x9)}}function removeListener(_0x68b3x6,_0x68b3x7){return function(){TemplateEvents[_0x608d[10]](_0x68b3x6,_0x68b3x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const TemplateEvents = require('./template.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('template:' + event, socket); + + TemplateEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + TemplateEvents.removeListener(event, listener); + }; +} diff --git a/server/api/trigger/index.js b/server/api/trigger/index.js index c0dcfe8..fcd2d96 100644 --- a/server/api/trigger/index.js +++ b/server/api/trigger/index.js @@ -1 +1,261 @@ -var _0xeb9b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x74\x72\x69\x67\x67\x65\x72\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xeb9b[0];var express=require(_0xeb9b[1]);var controller=require(_0xeb9b[2]);var auth=require(_0xeb9b[3]);var router=express.Router();router[_0xeb9b[9]](_0xeb9b[4],auth[_0xeb9b[5]](),auth[_0xeb9b[7]]([13],[_0xeb9b[6]]),controller[_0xeb9b[8]]);router[_0xeb9b[9]](_0xeb9b[10],auth[_0xeb9b[5]](),auth[_0xeb9b[7]]([13],[_0xeb9b[6]]),controller[_0xeb9b[11]]);router[_0xeb9b[13]](_0xeb9b[4],auth[_0xeb9b[5]](),auth[_0xeb9b[7]]([13],[_0xeb9b[6]]),controller[_0xeb9b[12]]);router[_0xeb9b[15]](_0xeb9b[10],auth[_0xeb9b[5]](),auth[_0xeb9b[7]]([13],[_0xeb9b[6]]),controller[_0xeb9b[14]]);router[_0xeb9b[17]](_0xeb9b[10],auth[_0xeb9b[5]](),auth[_0xeb9b[7]]([13],[_0xeb9b[6]]),controller[_0xeb9b[16]]);router[_0xeb9b[17]](_0xeb9b[4],auth[_0xeb9b[5]](),auth[_0xeb9b[7]]([13],[_0xeb9b[6]]),controller[_0xeb9b[18]]);module[_0xeb9b[19]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./trigger.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); +/** + * @api {get} /api/triggers/ Get Triggers' list. + * + * @apiParam (Query) {Number} [offset] Pagination offset. + * @apiParam (Query) {Number} [limit] Pagination limit. + * + * @apiVersion 0.0.143 + * @apiName GetTriggers + * @apiGroup Triggers + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Number} count Number of triggers. + * @apiSuccess {Object[]} rows Triggers' list. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "count": 2, + * "rows": [{ + * "id": 1 + * "name": "trigger1" + * "description": "my trigger description" + * ... + * },{ + * "id": 2 + * "name": "newtrigger" + * "description": null + * ... + * },...] + * } + */ +router.get('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.index); +/** + * @api {get} /api/triggers/:id Get Trigger's details. + * @apiParam {Number} id Trigger's unique ID. + * @apiVersion 0.0.143 + * @apiName GetTrigger + * @apiGroup Triggers + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Object} Trigger's details. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id":1, + * "All": [ + * { + * "field": "queue", + * "operator": "equals", + * "value": "Support" + * }, + * ... + * ], + * "Any": [ + * { + * "field": "lastevent", + * "operator": "equals", + * "value": "complete" + * }, + * { + * "field": "lastevent", + * "operator": "equals", + * "value": "abandoned" + * }, + * ... + * ], + * "Actions": [ + * { + * "action": "contactManager", + * "data1": "", + * "data2": "", + * "data3": "", + * "data4": "", + * "data5": "" + * }, + * ... + * ], + * "channel": "voice", + * "status": false, + * "name": "my trigger", + * "description": "my demo trigger", + * ... + * } + */ +router.get('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.show); +/** + * @api {post} /api/triggers/ Create a new trigger. + * @apiParam (body) {String} name Trigger's name. + * @apiParam (body) {String} [description] Trigger's description. + * @apiParam (body) {Boolean} status Trigger's status (active/inactive). + * @apiParam (body) {String} channel Trigger's channel. + * @apiParam (body) {conditions[]} All Trigger's conditions, all of them must be met. + * @apiParam (body) {conditions[]} Any Trigger's conditions, at least one of them must be met. + * @apiParam (body) {actions[]} Actions Trigger's actions. + * + * @apiParam (Conditions) {string} field Condition field. + * @apiParam (Conditions) {string} operator Condition operator, to compare field and value. + * @apiParam (Conditions) {string} value The value to compare the condition field with. + * + * @apiParam (Actions) {string} action Trigger action. + * @apiParam (Actions) {string} data1 Action data. + * @apiParam (Actions) {string} data2 Action data. + * @apiParam (Actions) {string} data3 Action data. + * @apiParam (Actions) {string} data4 Action data. + * @apiParam (Actions) {string} data5 Action data. + * + * @apiVersion 0.0.143 + * @apiName CreateTrigger + * @apiGroup Triggers + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 201 Created + * { + * "id":1, + * "All": [ + * { + * "field": "queue", + * "operator": "equals", + * "value": "Support" + * }, + * ... + * ], + * "Any": [ + * { + * "field": "lastevent", + * "operator": "equals", + * "value": "complete" + * }, + * { + * "field": "lastevent", + * "operator": "equals", + * "value": "abandoned" + * }, + * ... + * ], + * "Actions": [ + * { + * "action": "contactManager", + * "data1": "", + * "data2": "", + * "data3": "", + * "data4": "", + * "data5": "" + * }, + * ... + * ], + * "channel": "voice", + * "status": false, + * "name": "my trigger", + * "description": "my demo trigger", + * ... + * } + */ +router.post('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.create); +/** + * @api {put} /api/triggers/:id Update an existing trigger. + * @apiParam {Number} id Trigger's unique ID. + * + * @apiParam (body) {String} name Trigger's name. + * @apiParam (body) {String} [description] Trigger's description. + * @apiParam (body) {Boolean} status Trigger's status (active/inactive). + * @apiParam (body) {String} channel Trigger's channel. + * @apiParam (body) {conditions[]} All Trigger's conditions, all of them must be met. + * @apiParam (body) {conditions[]} Any Trigger's conditions, at least one of them must be met. + * @apiParam (body) {actions[]} Actions Trigger's actions. + * + * @apiParam (Conditions) {string} field Condition field. + * @apiParam (Conditions) {string} operator Condition operator, to compare field and value. + * @apiParam (Conditions) {string} value The value to compare the condition field with. + * + * @apiParam (Actions) {string} action Trigger action. + * @apiParam (Actions) {string} data1 Action data. + * @apiParam (Actions) {string} data2 Action data. + * @apiParam (Actions) {string} data3 Action data. + * @apiParam (Actions) {string} data4 Action data. + * @apiParam (Actions) {string} data5 Action data. + * + * @apiVersion 0.0.143 + * @apiName UpdateTrigger + * @apiGroup Triggers + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + */ +router.put('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.update); +/** + * @api {delete} /api/triggers/:id Delete a trigger. + * + * @apiParam {Number} id Trigger's unique ID. + * + * @apiVersion 0.0.143 + * @apiName DeleteTrigger + * @apiGroup Triggers + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.destroy); +/** + * @api {delete} /api/triggers/ Bulk Delete triggers. + * + * @apiParam (Query) {Number[]} ids Triggers' unique ID array. + * + * @apiVersion 0.0.143 + * @apiName BulkDeleteTriggers + * @apiGroup Triggers + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.bulkDestroy); + +module.exports = router; diff --git a/server/api/trigger/trigger.controller.js b/server/api/trigger/trigger.controller.js index f9799e8..dbb3e29 100644 --- a/server/api/trigger/trigger.controller.js +++ b/server/api/trigger/trigger.controller.js @@ -1 +1,216 @@ -var _0xbaf0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x54\x72\x69\x67\x67\x65\x72","\x54\x6F\x6F\x6C\x73\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x54\x6F\x6F\x6C\x73\x41\x63\x74\x69\x6F\x6E","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\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","\x61\x6C\x6C","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x41\x6C\x6C","\x41\x6E\x79","\x41\x63\x74\x69\x6F\x6E\x73","\x75\x70\x64\x61\x74\x65","\x6C\x6F\x67","\x73\x61\x76\x65","\x69\x73\x41\x72\x72\x61\x79","\x6C\x65\x6E\x67\x74\x68","\x54\x72\x69\x67\x67\x65\x72\x49\x64","\x66\x6F\x72\x45\x61\x63\x68","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x54\x72\x69\x67\x67\x65\x72\x41\x6C\x6C\x49\x64","\x54\x72\x69\x67\x67\x65\x72\x41\x6E\x79\x49\x64","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0xbaf0[0];var _=require(_0xbaf0[1]);var util=require(_0xbaf0[2]);var Util=require(_0xbaf0[3]);var sequelize=require(_0xbaf0[5])[_0xbaf0[4]];var Trigger=require(_0xbaf0[5])[_0xbaf0[6]];var ToolsCondition=require(_0xbaf0[5])[_0xbaf0[7]];var ToolsAction=require(_0xbaf0[5])[_0xbaf0[8]];exports[_0xbaf0[9]]= function(_0x633cx8,_0x633cx9,_0x633cxa){return Trigger[_0xbaf0[19]](_0xbaf0[18])[_0xbaf0[17]](_[_0xbaf0[16]](Util[_0xbaf0[15]](_0x633cx8[_0xbaf0[14]]),{distinct:true}))[_0xbaf0[13]](function(_0x633cxc){return _0x633cx9[_0xbaf0[12]](200)[_0xbaf0[11]](_0x633cxc)})[_0xbaf0[10]](function(_0x633cxb){return handleError(_0x633cx9,_0x633cxb)})};exports[_0xbaf0[20]]= function(_0x633cx8,_0x633cx9){return Trigger[_0xbaf0[19]](_0xbaf0[18])[_0xbaf0[24]](_0x633cx8[_0xbaf0[23]][_0xbaf0[22]])[_0xbaf0[13]](function(_0x633cxd){if(!_0x633cxd){return _0x633cx9[_0xbaf0[21]](404)};return _0x633cx9[_0xbaf0[12]](200)[_0xbaf0[11]](_0x633cxd)})[_0xbaf0[10]](function(_0x633cxb){return handleError(_0x633cx9,_0x633cxb)})};exports[_0xbaf0[25]]= function(_0x633cx8,_0x633cx9){return Trigger[_0xbaf0[25]](_0x633cx8[_0xbaf0[26]],{include:[{model:ToolsCondition,as:_0xbaf0[27]},{model:ToolsCondition,as:_0xbaf0[28]},{model:ToolsAction,as:_0xbaf0[29]}],newTrigger:_0x633cx8[_0xbaf0[26]]})[_0xbaf0[13]](function(_0x633cxd){return _0x633cx9[_0xbaf0[12]](201)[_0xbaf0[11]](_0x633cxd)})[_0xbaf0[10]](function(_0x633cxb){return handleError(_0x633cx9,_0x633cxb)})};exports[_0xbaf0[30]]= function(_0x633cx8,_0x633cx9,_0x633cxa){var _0x633cxe;if(_0x633cx8[_0xbaf0[26]][_0xbaf0[22]]){delete _0x633cx8[_0xbaf0[26]][_0xbaf0[22]]};return Trigger[_0xbaf0[24]](_0x633cx8[_0xbaf0[23]][_0xbaf0[22]])[_0xbaf0[13]](function(_0x633cxd){_0x633cxe= _0x633cxd;if(_0x633cx8[_0xbaf0[26]][_0xbaf0[28]]){return ToolsCondition[_0xbaf0[38]]({where:{TriggerAnyId:_0x633cx8[_0xbaf0[23]][_0xbaf0[22]]}})};return})[_0xbaf0[13]](function(){if(_0x633cx8[_0xbaf0[26]][_0xbaf0[28]]&& Array[_0xbaf0[33]](_0x633cx8[_0xbaf0[26]].Any)&& _0x633cx8[_0xbaf0[26]][_0xbaf0[28]][_0xbaf0[34]]){_[_0xbaf0[36]](_0x633cx8[_0xbaf0[26]].Any,function(_0x633cx10){_0x633cx10[_0xbaf0[40]]= _0x633cx8[_0xbaf0[23]][_0xbaf0[22]]});return ToolsCondition[_0xbaf0[37]](_0x633cx8[_0xbaf0[26]].Any)};return})[_0xbaf0[13]](function(){if(_0x633cx8[_0xbaf0[26]][_0xbaf0[27]]){return ToolsCondition[_0xbaf0[38]]({where:{TriggerAllId:_0x633cx8[_0xbaf0[23]][_0xbaf0[22]]}})};return})[_0xbaf0[13]](function(){if(_0x633cx8[_0xbaf0[26]][_0xbaf0[27]]&& Array[_0xbaf0[33]](_0x633cx8[_0xbaf0[26]].All)&& _0x633cx8[_0xbaf0[26]][_0xbaf0[27]][_0xbaf0[34]]){_[_0xbaf0[36]](_0x633cx8[_0xbaf0[26]].All,function(_0x633cx10){_0x633cx10[_0xbaf0[39]]= _0x633cx8[_0xbaf0[23]][_0xbaf0[22]]});return ToolsCondition[_0xbaf0[37]](_0x633cx8[_0xbaf0[26]].All)};return})[_0xbaf0[13]](function(){if(_0x633cx8[_0xbaf0[26]][_0xbaf0[29]]){return ToolsAction[_0xbaf0[38]]({where:{TriggerId:_0x633cx8[_0xbaf0[23]][_0xbaf0[22]]}})};return})[_0xbaf0[13]](function(){if(_0x633cx8[_0xbaf0[26]][_0xbaf0[29]]&& Array[_0xbaf0[33]](_0x633cx8[_0xbaf0[26]].Actions)&& _0x633cx8[_0xbaf0[26]][_0xbaf0[29]][_0xbaf0[34]]){_[_0xbaf0[36]](_0x633cx8[_0xbaf0[26]].Actions,function(_0x633cx10){_0x633cx10[_0xbaf0[35]]= _0x633cx8[_0xbaf0[23]][_0xbaf0[22]]});return ToolsAction[_0xbaf0[37]](_0x633cx8[_0xbaf0[26]].Actions)};return})[_0xbaf0[13]](function(){var _0x633cxf=_[_0xbaf0[16]](_0x633cxe,_0x633cx8[_0xbaf0[26]]);return _0x633cxf[_0xbaf0[32]]()})[_0xbaf0[13]](function(){return _0x633cx9[_0xbaf0[21]](200)})[_0xbaf0[10]](function(_0x633cxb){console[_0xbaf0[31]](_0x633cxb);return handleError(_0x633cx9,_0x633cxb)})};exports[_0xbaf0[38]]= function(_0x633cx8,_0x633cx9){return Trigger[_0xbaf0[24]](_0x633cx8[_0xbaf0[23]][_0xbaf0[22]])[_0xbaf0[13]](function(Trigger){if(!Trigger){return _0x633cx9[_0xbaf0[21]](404)};Trigger[_0xbaf0[38]]()[_0xbaf0[13]](function(){return _0x633cx9[_0xbaf0[21]](204)})[_0xbaf0[10]](function(_0x633cxb){return handleError(_0x633cx9,_0x633cxb)})})[_0xbaf0[10]](function(_0x633cxb){return handleError(_0x633cx9,_0x633cxb)})};exports[_0xbaf0[41]]= function(_0x633cx8,_0x633cx9){return Trigger[_0xbaf0[38]]({where:{id:_0x633cx8[_0xbaf0[14]][_0xbaf0[42]]},individualHooks:true})[_0xbaf0[13]](function(){return _0x633cx9[_0xbaf0[21]](204)})[_0xbaf0[10]](function(_0x633cxb){return handleError(_0x633cx9,_0x633cxb)})};function handleError(_0x633cx9,_0x633cxb){return _0x633cx9[_0xbaf0[12]](500)[_0xbaf0[11]](_0x633cxb)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var Util = require('../../config/util'); +var sequelize = require('../../models').sequelize; + +var Trigger = require('../../models').Trigger; +var ToolsCondition = require('../../models').ToolsCondition; +var ToolsAction = require('../../models').ToolsAction; + +// Get list of agents +exports.index = function(req, res, next) { + return Trigger + .scope('all') + .findAndCountAll(_.merge(Util.getQuery(req.query), { + distinct: true + })) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single Trigger +exports.show = function(req, res) { + return Trigger + .scope('all') + .findById(req.params.id) + .then(function(trigger) { + if (!trigger) { + return res.sendStatus(404); + } + return res.status(200).send(trigger); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new Trigger in the DB. +exports.create = function(req, res) { + return Trigger + .create(req.body, { + include: [{ + model: ToolsCondition, + as: 'All' + }, { + model: ToolsCondition, + as: 'Any' + }, { + model: ToolsAction, + as: 'Actions' + }], + newTrigger: req.body + }) + .then(function(trigger) { + return res.status(201).send(trigger); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing Trigger in the DB. +exports.update = function(req, res, next) { + var _trigger; + if (req.body.id) { + delete req.body.id; + } + // return sequelize.transaction(function(t) { + return Trigger + .findById(req.params.id) + .then(function(trigger) { + _trigger = trigger; + if (req.body.Any) { + return ToolsCondition + .destroy({ + where: { + TriggerAnyId: req.params.id + } + // , + // transaction: t + }); + } + return; + }) + .then(function() { + if (req.body.Any && Array.isArray(req.body.Any) && req.body.Any.length) { + _.forEach(req.body.Any, function(elem) { + elem.TriggerAnyId = req.params.id; + }); + return ToolsCondition + .bulkCreate(req.body.Any + // , { + // transaction: t + // } + ); + } + return; + }) + .then(function() { + if (req.body.All) { + return ToolsCondition + .destroy({ + where: { + TriggerAllId: req.params.id + } + // , + // transaction: t + }); + } + return; + }) + .then(function() { + if (req.body.All && Array.isArray(req.body.All) && req.body.All.length) { + _.forEach(req.body.All, function(elem) { + elem.TriggerAllId = req.params.id; + }); + return ToolsCondition + .bulkCreate(req.body.All + // , { + // transaction: t + // } + ); + } + return; + }) + .then(function() { + if (req.body.Actions) { + return ToolsAction + .destroy({ + where: { + TriggerId: req.params.id + } + // , + // transaction: t + }); + } + return; + }) + .then(function() { + if (req.body.Actions && Array.isArray(req.body.Actions) && req.body.Actions.length) { + _.forEach(req.body.Actions, function(elem) { + elem.TriggerId = req.params.id; + }); + return ToolsAction + .bulkCreate(req.body.Actions + // , { + // transaction: t + // } + ); + } + return; + }) + .then(function() { + var updated = _.merge(_trigger, req.body); + return updated + .save( + // { + // transaction: t + // } + ); + // }); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Deletes a Trigger from the DB. +exports.destroy = function(req, res) { + return Trigger + .findById(req.params.id) + .then(function(Trigger) { + if (!Trigger) { + return res.sendStatus(404); + } + Trigger.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.bulkDestroy = function(req, res) { + return Trigger + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/trigger/trigger.events.js b/server/api/trigger/trigger.events.js index 77bbe51..5978c45 100644 --- a/server/api/trigger/trigger.events.js +++ b/server/api/trigger/trigger.events.js @@ -1 +1,36 @@ -var _0x7ee8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x54\x72\x69\x67\x67\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x7ee8[0];const EventEmitter=require(_0x7ee8[1]);const Trigger=require(_0x7ee8[3])[_0x7ee8[2]];var TriggerEvents= new EventEmitter();TriggerEvents[_0x7ee8[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x7ee8[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x7ee8[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x7ee8[6]};for(var e in events){var event=events[e];Trigger[_0x7ee8[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xc99cx8,_0xc99cx9,_0xc99cxa){TriggerEvents[_0x7ee8[10]](event+ _0x7ee8[8]+ _0xc99cx8[_0x7ee8[9]],_0xc99cx8);TriggerEvents[_0x7ee8[10]](event,_0xc99cx8);_0xc99cxa(null)}}module[_0x7ee8[11]]= TriggerEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Trigger = require('../../models').Trigger; + +var TriggerEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +TriggerEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Trigger.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + TriggerEvents.emit(event + ':' + doc._id, doc); + TriggerEvents.emit(event, doc); + done(null); + } +} + +module.exports = TriggerEvents; diff --git a/server/api/trigger/trigger.socket.js b/server/api/trigger/trigger.socket.js index 801e593..e83aa13 100644 --- a/server/api/trigger/trigger.socket.js +++ b/server/api/trigger/trigger.socket.js @@ -1 +1,32 @@ -var _0xc1a0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x74\x72\x69\x67\x67\x65\x72\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x74\x72\x69\x67\x67\x65\x72\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xc1a0[0];const TriggerEvents=require(_0xc1a0[1]);var events=[_0xc1a0[2],_0xc1a0[3]];exports[_0xc1a0[4]]= function(_0xa2f0x3){for(var _0xa2f0x4=0,_0xa2f0x5=events[_0xc1a0[5]];_0xa2f0x4< _0xa2f0x5;_0xa2f0x4++){var _0xa2f0x6=events[_0xa2f0x4];var _0xa2f0x7=createListener(_0xc1a0[6]+ _0xa2f0x6,_0xa2f0x3);TriggerEvents[_0xc1a0[7]](_0xa2f0x6,_0xa2f0x7);_0xa2f0x3[_0xc1a0[7]](_0xc1a0[8],removeListener(_0xa2f0x6,_0xa2f0x7))}};function createListener(_0xa2f0x6,_0xa2f0x3){return function(_0xa2f0x9){_0xa2f0x3[_0xc1a0[9]](_0xa2f0x6,_0xa2f0x9)}}function removeListener(_0xa2f0x6,_0xa2f0x7){return function(){TriggerEvents[_0xc1a0[10]](_0xa2f0x6,_0xa2f0x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const TriggerEvents = require('./trigger.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('trigger:' + event, socket); + + TriggerEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + TriggerEvents.removeListener(event, listener); + }; +} diff --git a/server/api/trunk/index.js b/server/api/trunk/index.js index eab4ac4..963f647 100644 --- a/server/api/trunk/index.js +++ b/server/api/trunk/index.js @@ -1 +1,226 @@ -var _0xf3f7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x74\x72\x75\x6E\x6B\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xf3f7[0];var express=require(_0xf3f7[1]);var controller=require(_0xf3f7[2]);var config=require(_0xf3f7[3]);var auth=require(_0xf3f7[4]);var router=express.Router();router[_0xf3f7[10]](_0xf3f7[5],auth[_0xf3f7[6]](),auth[_0xf3f7[8]]([13,7,10],[_0xf3f7[7]]),controller[_0xf3f7[9]]);router[_0xf3f7[10]](_0xf3f7[11],auth[_0xf3f7[6]](),auth[_0xf3f7[8]]([13],[_0xf3f7[7]]),controller[_0xf3f7[12]]);router[_0xf3f7[14]](_0xf3f7[5],auth[_0xf3f7[6]](),auth[_0xf3f7[8]]([13],[_0xf3f7[7]]),controller[_0xf3f7[13]]);router[_0xf3f7[16]](_0xf3f7[11],auth[_0xf3f7[6]](),auth[_0xf3f7[8]]([13],[_0xf3f7[7]]),controller[_0xf3f7[15]]);router[_0xf3f7[18]](_0xf3f7[5],auth[_0xf3f7[6]](),auth[_0xf3f7[8]]([13],[_0xf3f7[7]]),controller[_0xf3f7[17]]);router[_0xf3f7[18]](_0xf3f7[11],auth[_0xf3f7[6]](),auth[_0xf3f7[8]]([13],[_0xf3f7[7]]),controller[_0xf3f7[19]]);module[_0xf3f7[20]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./trunk.controller'); +var config = require('../../config/environment'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +/** + * @api {get} /api/trunks/ Get trunks' list. + * + * @apiParam (Query) {Number} [offset] Pagination offset. + * @apiParam (Query) {Number} [limit] Pagination limit. + * + * @apiVersion 0.0.143 + * @apiName GetTrunks + * @apiGroup Trunks + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Number} count Number of trunks. + * @apiSuccess {Object[]} rows Get trunks list. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "count": 1, + * "rows": [{ + * "name": "DemoTrunk" + * "type": "friend" + * "context": "from-sip" + * "callingpres": "ALLOWED_NOT_SCREENED" + * "permit": "0.0.0.0/0.0.0.0" + * "deny": "0.0.0.0/0.0.0.0" + * ... + * }] + * } + */ +router.get('/', auth.isAuthenticated(), auth.hasModule([13, 7, 10], ['admin']), controller.index); + +/** + * @api {get} /api/trunks/:id Get trunk's details. + * @apiParam {Number} id Trunk unique ID. + * @apiVersion 0.0.143 + * @apiName GetTrunk + * @apiGroup Trunks + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "name": "DemoTrunk" + * "type": "friend" + * "context": "from-sip" + * "callingpres": "ALLOWED_NOT_SCREENED" + * "permit": "0.0.0.0/0.0.0.0" + * "deny": "0.0.0.0/0.0.0.0" + * ... + * } + */ +router.get('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.show); + +/** + * @api {post} /api/trunks/ Create trunk. + * + * @apiParam (Body) {String} name Trunk name. + * @apiParam (Body) {String="friend", "user", "peer"} [type="friend"] Trunk type. + * @apiParam (Body) {String} [context="from-sip"] Trunk context. + * @apiParam (Body) {String="ALLOWED_NOT_SCREENED", "ALLOWED_PASSED_SCREEN", "ALLOWED_FAILED_SCREEN", "ALLOWED", "PROHIB_NOT_SCREENED", "PROHIB_PASSED_SCREEN", "PROHIB_FAILED_SCREEN", "PROHIB"} [callinprogress="ALLOWED_NOT_SCREENED"] Trunk context. + * @apiParam (Body) {String} [permit] Trunk permit. + * @apiParam (Body) {String} [deny] Trunk deny. + * @apiParam (Body) {String} secret Trunk secret. + * @apiParam (Body) {String="rfc2833", "info", "shortinfo", "inband", "auto"} [dtmfmode="rfc2833"] Trunk internal number. + * @apiParam (Body) {String="tcp", "udp", "tcp,udp"} [transport="udp"] Trunk SIP transport. + * @apiParam (Body) {String="alaw", "ulaw", "gsm"} [allow="alaw;ulaw;gsm"] Trunk SIP codecs. + * @apiParam (Body) {String="yes", "no", "nonat", "update", "outgoing"} [directmedia="no"] Trunk directmedia. + * @apiParam (Body) {String="yes", "no"} [directrtpsetup="no"] Trunk directrtpsetup. + * @apiParam (Body) {String} [nat="force_rport,comedia"] Trunk mobile phone. + * @apiParam (Body) {String} [disallow="all"] Trunk address. + * @apiParam (Body) {String} [allow="alaw;ulaw;gsm"] Trunk allow codecs. + * @apiParam (Body) {String} [callerid='"" <>'] Trunk callerid. + * @apiParam (Body) {String="yes"} [callcounter="yes, no"] Trunk callcounter. + * @apiParam (Body) {String="no"} [videosupport="yes, no"] Trunk video support. + * @apiParam (Body) {String="uas"} [session_refresher="uas, uac"] Trunk session refresher. + * @apiParam (Body) {String} [host="dynamic"] Trunk host. + * @apiParam (Body) {String="yes"} [qualify="yes,no"] Trunk qualify. + * @apiParam (Body) {String} [insecure="port,invite"] Trunk insicure. + * @apiParam (Body) {String="no"} [sendrpid="yes,no"] Trunk sendrpid. + * @apiParam (Body) {String="no"} [encryption="yes,no"] Trunk encryption. + * @apiParam (Body) {String="no"} [usereqphone="yes,no"] Trunk usereqphone. + * @apiParam (Body) {String="no"} [canreinvite="yes,no"] Trunk can reinvite. + * + * @apiVersion 0.0.143 + * @apiName CreateTrunk + * @apiGroup Trunks + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 201 Created + * { + * "id": 1 + * "name": "john.doe" + * "email": "john.doe@xcally.com" + * "internal": 1001 + * "fullname": "John Doe" + * ... + * } + */ +router.post('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.create); + +/** + * @api {delete} /api/trunks/:id Update trunk's details. + * + * @apiParam (Params) {Number} id Trunk unique ID. + * @apiParam (Body) {String} name Trunk name. + * @apiParam (Body) {String="friend", "user", "peer"} [type="friend"] Trunk type. + * @apiParam (Body) {String} [context="from-sip"] Trunk context. + * @apiParam (Body) {String="ALLOWED_NOT_SCREENED", "ALLOWED_PASSED_SCREEN", "ALLOWED_FAILED_SCREEN", "ALLOWED", "PROHIB_NOT_SCREENED", "PROHIB_PASSED_SCREEN", "PROHIB_FAILED_SCREEN", "PROHIB"} [callinprogress="ALLOWED_NOT_SCREENED"] Trunk context. + * @apiParam (Body) {String} [permit] Trunk permit. + * @apiParam (Body) {String} [deny] Trunk deny. + * @apiParam (Body) {String} secret Trunk secret. + * @apiParam (Body) {String="rfc2833", "info", "shortinfo", "inband", "auto"} [dtmfmode="rfc2833"] Trunk internal number. + * @apiParam (Body) {String="tcp", "udp", "tcp,udp"} [transport="udp"] Trunk SIP transport. + * @apiParam (Body) {String="alaw", "ulaw", "gsm"} [allow="alaw;ulaw;gsm"] Trunk SIP codecs. + * @apiParam (Body) {String="yes", "no", "nonat", "update", "outgoing"} [directmedia="no"] Trunk directmedia. + * @apiParam (Body) {String="yes", "no"} [directrtpsetup="no"] Trunk directrtpsetup. + * @apiParam (Body) {String} [nat="force_rport,comedia"] Trunk mobile phone. + * @apiParam (Body) {String} [disallow="all"] Trunk address. + * @apiParam (Body) {String} [allow="alaw;ulaw;gsm"] Trunk allow codecs. + * @apiParam (Body) {String} [callerid='"" <>'] Trunk callerid. + * @apiParam (Body) {String="yes"} [callcounter="yes, no"] Trunk callcounter. + * @apiParam (Body) {String="no"} [videosupport="yes, no"] Trunk video support. + * @apiParam (Body) {String="uas"} [session_refresher="uas, uac"] Trunk session refresher. + * @apiParam (Body) {String} [host="dynamic"] Trunk host. + * @apiParam (Body) {String="yes"} [qualify="yes,no"] Trunk qualify. + * @apiParam (Body) {String} [insecure="port,invite"] Trunk insicure. + * @apiParam (Body) {String="no"} [sendrpid="yes,no"] Trunk sendrpid. + * @apiParam (Body) {String="no"} [encryption="yes,no"] Trunk encryption. + * @apiParam (Body) {String="no"} [usereqphone="yes,no"] Trunk usereqphone. + * @apiParam (Body) {String="no"} [canreinvite="yes,no"] Trunk can reinvite. + * + * @apiVersion 0.0.143 + * @apiName UpdateTrunk + * @apiGroup Trunks + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "john.doe" + * "email": "john.doe@xcally.com" + * "internal": 1001 + * "fullname": "John Doe" + * ... + * } + */ +router.put('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.update); + +/** + * @api {delete} /api/trunks/ Bulk Delete trunks. + * + * @apiParam (Query) {Number[]} ids Trunks unique ID array. + * + * @apiVersion 0.0.143 + * @apiName BulkDeleteTrunks + * @apiGroup Trunks + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.bulkDestroy); + +/** + * @api {delete} /api/trunks/:id Delete a trunk. + * + * @apiParam {Number} id Trunk unique ID. + * + * @apiVersion 0.0.143 + * @apiName DeleteTrunk + * @apiGroup Trunks + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/trunk/trunk.controller.js b/server/api/trunk/trunk.controller.js index 6e9fb66..9ee3289 100644 --- a/server/api/trunk/trunk.controller.js +++ b/server/api/trunk/trunk.controller.js @@ -1 +1,111 @@ -var _0xa027=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x54\x72\x75\x6E\x6B","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x74\x72\x75\x6E\x6B\x20\x75\x70\x64\x61\x74\x65\x20\x65\x72\x72\x6F\x72","\x6C\x6F\x67","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0xa027[0];var _=require(_0xa027[1]);var Trunk=require(_0xa027[3])[_0xa027[2]];var VoiceExtension=require(_0xa027[3])[_0xa027[4]];var sequelize=require(_0xa027[3])[_0xa027[5]];var util=require(_0xa027[6]);var Util=require(_0xa027[7]);exports[_0xa027[8]]= function(_0x3f7fx7,_0x3f7fx8,_0x3f7fx9){return Trunk[_0xa027[15]](Util[_0xa027[14]](_0x3f7fx7[_0xa027[13]]))[_0xa027[12]](function(_0x3f7fxb){_0x3f7fx8[_0xa027[11]](200)[_0xa027[10]](_0x3f7fxb)})[_0xa027[9]](function(_0x3f7fxa){return handleError(_0x3f7fx8,_0x3f7fxa)})};exports[_0xa027[16]]= function(_0x3f7fx7,_0x3f7fx8){return Trunk[_0xa027[20]](_0x3f7fx7[_0xa027[19]][_0xa027[18]])[_0xa027[12]](function(_0x3f7fxc){if(!_0x3f7fxc){return _0x3f7fx8[_0xa027[17]](404)};return _0x3f7fx8[_0xa027[10]](_0x3f7fxc)})[_0xa027[9]](function(_0x3f7fxa){return handleError(_0x3f7fx8,_0x3f7fxa)})};exports[_0xa027[21]]= function(_0x3f7fx7,_0x3f7fx8){return Trunk[_0xa027[21]](_0x3f7fx7[_0xa027[22]])[_0xa027[12]](function(_0x3f7fxc){return _0x3f7fx8[_0xa027[11]](201)[_0xa027[10]](_0x3f7fxc)})[_0xa027[9]](function(_0x3f7fxa){return handleError(_0x3f7fx8,_0x3f7fxa)})};exports[_0xa027[23]]= function(_0x3f7fx7,_0x3f7fx8){if(_0x3f7fx7[_0xa027[22]][_0xa027[18]]){delete _0x3f7fx7[_0xa027[22]][_0xa027[18]]};return Trunk[_0xa027[20]](_0x3f7fx7[_0xa027[19]][_0xa027[18]])[_0xa027[12]](function(_0x3f7fxc){if(!_0x3f7fxc){return _0x3f7fx8[_0xa027[17]](404)};var _0x3f7fxd=_[_0xa027[26]](_0x3f7fxc,_0x3f7fx7[_0xa027[22]]);return _0x3f7fxd[_0xa027[27]]()})[_0xa027[12]](function(_0x3f7fxc){return _0x3f7fx8[_0xa027[11]](200)[_0xa027[10]](_0x3f7fxc)})[_0xa027[9]](function(_0x3f7fxa){console[_0xa027[25]](_0xa027[24],_0x3f7fxa);return handleError(_0x3f7fx8,_0x3f7fxa)})};exports[_0xa027[28]]= function(_0x3f7fx7,_0x3f7fx8){return Trunk[_0xa027[20]](_0x3f7fx7[_0xa027[19]][_0xa027[18]])[_0xa027[12]](function(_0x3f7fxc){if(!_0x3f7fxc){return _0x3f7fx8[_0xa027[17]](404)};return _0x3f7fxc[_0xa027[28]]()})[_0xa027[12]](function(){return _0x3f7fx8[_0xa027[17]](204)})[_0xa027[9]](function(_0x3f7fxa){return handleError(_0x3f7fx8,_0x3f7fxa)})};exports[_0xa027[29]]= function(_0x3f7fx7,_0x3f7fx8){return Trunk[_0xa027[28]]({where:{id:_0x3f7fx7[_0xa027[13]][_0xa027[30]]},individualHooks:true})[_0xa027[12]](function(){return _0x3f7fx8[_0xa027[17]](204)})[_0xa027[9]](function(_0x3f7fxa){return handleError(_0x3f7fx8,_0x3f7fxa)})};function handleError(_0x3f7fx8,_0x3f7fxa){return _0x3f7fx8[_0xa027[11]](500)[_0xa027[10]](_0x3f7fxa)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Trunk = require('../../models').Trunk; +var VoiceExtension = require('../../models').VoiceExtension; +var sequelize = require('../../models').sequelize; +var util = require('util'); +var Util = require('../../config/util'); + +// Get list of agents +exports.index = function(req, res, next) { + return Trunk + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single trunk +exports.show = function(req, res) { + return Trunk + .findById(req.params.id) + .then(function(trunk) { + if (!trunk) { + return res.sendStatus(404); + } + return res.send(trunk); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new trunk in the DB. +exports.create = function(req, res) { + return Trunk + .create(req.body) + .then(function(trunk) { + return res.status(201).send(trunk); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return Trunk + .findById(req.params.id) + .then(function(trunk) { + if (!trunk) { + return res.sendStatus(404); + } + var updated = _.merge(trunk, req.body); + return updated + .save(); + }) + .then(function(trunk) { + return res.status(200).send(trunk); + }) + .catch(function(err) { + console.log('trunk update error', err); + return handleError(res, err); + }); +}; + +// Deletes a trunk from the DB. +exports.destroy = function(req, res) { + return Trunk + .findById(req.params.id) + .then(function(trunk) { + if (!trunk) { + return res.sendStatus(404); + } + return trunk + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes multiple trunk from the DB. +exports.bulkDestroy = function(req, res) { + return Trunk + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/trunk/trunk.events.js b/server/api/trunk/trunk.events.js index 5e2d5d0..5ceb1a1 100644 --- a/server/api/trunk/trunk.events.js +++ b/server/api/trunk/trunk.events.js @@ -1 +1,36 @@ -var _0xeb32=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x54\x72\x75\x6E\x6B","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xeb32[0];const EventEmitter=require(_0xeb32[1]);const Trunk=require(_0xeb32[3])[_0xeb32[2]];var TrunkEvents= new EventEmitter();TrunkEvents[_0xeb32[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xeb32[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xeb32[6],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xeb32[7]};for(var e in events){var event=events[e];Trunk[_0xeb32[8]](e,emitEvent(event))};function emitEvent(event){return function(_0xd155x8,_0xd155x9,_0xd155xa){TrunkEvents[_0xeb32[11]](event+ _0xeb32[9]+ _0xd155x8[_0xeb32[10]],_0xd155x8);TrunkEvents[_0xeb32[11]](event,_0xd155x8);_0xd155xa(null)}}module[_0xeb32[12]]= TrunkEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Trunk = require('../../models').Trunk; + +var TrunkEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +TrunkEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'update', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Trunk.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + TrunkEvents.emit(event + ':' + doc._id, doc); + TrunkEvents.emit(event, doc); + done(null); + } +} + +module.exports = TrunkEvents; diff --git a/server/api/trunk/trunk.socket.js b/server/api/trunk/trunk.socket.js index f2e5757..5dda5a9 100644 --- a/server/api/trunk/trunk.socket.js +++ b/server/api/trunk/trunk.socket.js @@ -1 +1,47 @@ -var _0xeb7c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x74\x72\x75\x6E\x6B\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x74\x72\x75\x6E\x6B\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x74\x72\x75\x6E\x6B\x3A\x73\x61\x76\x65","\x72\x6F\x6C\x65","\x74\x72\x75\x6E\x6B","\x73\x74\x61\x74\x75\x73","\x63\x68\x61\x6E\x67\x65\x64","\x70\x65\x65\x72\x73\x74\x61\x74\x75\x73","\x74\x72\x75\x6E\x6B\x3A\x75\x70\x64\x61\x74\x65","\x74\x72\x75\x6E\x6B\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xeb7c[0];const TrunkEvents=require(_0xeb7c[1]);var events=[_0xeb7c[2],_0xeb7c[3],_0xeb7c[4]];exports[_0xeb7c[5]]= function(_0xe1a5x3){for(var _0xe1a5x4=0,_0xe1a5x5=events[_0xeb7c[6]];_0xe1a5x4< _0xe1a5x5;_0xe1a5x4++){var _0xe1a5x6=events[_0xe1a5x4];var _0xe1a5x7=createListener(_0xeb7c[7]+ _0xe1a5x6,_0xe1a5x3);TrunkEvents[_0xeb7c[8]](_0xe1a5x6,_0xe1a5x7);_0xe1a5x3[_0xeb7c[8]](_0xeb7c[9],removeListener(_0xe1a5x6,_0xe1a5x7))}};function createListener(_0xe1a5x6,_0xe1a5x3){return function(_0xe1a5x9){switch(_0xe1a5x6){case _0xeb7c[11]:_0xe1a5x3[_0xeb7c[10]](_0xe1a5x6,_0xe1a5x9);break;case _0xeb7c[17]:if(_0xe1a5x3[_0xeb7c[12]]!== _0xeb7c[13]&& (_0xe1a5x9[_0xeb7c[15]](_0xeb7c[14])|| _0xe1a5x9[_0xeb7c[15]](_0xeb7c[16]))){_0xe1a5x3[_0xeb7c[10]](_0xe1a5x6,_0xe1a5x9)};break;case _0xeb7c[18]:_0xe1a5x3[_0xeb7c[10]](_0xe1a5x6,_0xe1a5x9);break;default:}}}function removeListener(_0xe1a5x6,_0xe1a5x7){return function(){TrunkEvents[_0xeb7c[19]](_0xe1a5x6,_0xe1a5x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const TrunkEvents = require('./trunk.events'); + +// Model events to emit +var events = ['save', 'update', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('trunk:' + event, socket); + + TrunkEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'trunk:save': + socket.emit(event, doc); + break; + case 'trunk:update': + if (socket.role !== 'trunk' && (doc.changed('status') || doc.changed('peerstatus'))) { + socket.emit(event, doc); + } + break; + case 'trunk:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + TrunkEvents.removeListener(event, listener); + }; +} diff --git a/server/api/update/index.js b/server/api/update/index.js index 1579786..b421e49 100644 --- a/server/api/update/index.js +++ b/server/api/update/index.js @@ -1 +1,14 @@ -var _0xec70=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x70\x64\x61\x74\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x52\x6F\x6C\x65","\x68\x61\x73\x55\x70\x64\x61\x74\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x63\x75\x72\x72\x65\x6E\x74","\x67\x65\x74\x43\x75\x72\x72\x65\x6E\x74\x56\x65\x72\x73\x69\x6F\x6E","\x2F\x70\x75\x6C\x6C","\x70\x75\x6C\x6C","\x65\x78\x70\x6F\x72\x74\x73"];_0xec70[0];var express=require(_0xec70[1]);var controller=require(_0xec70[2]);var auth=require(_0xec70[3]);var license=require(_0xec70[4]);var router=express.Router();router[_0xec70[11]](_0xec70[5],auth[_0xec70[6]](),auth[_0xec70[8]](_0xec70[7]),license[_0xec70[9]](),controller[_0xec70[10]]);router[_0xec70[11]](_0xec70[12],auth[_0xec70[6]](),auth[_0xec70[8]](_0xec70[7]),license[_0xec70[9]](),controller[_0xec70[13]]);router[_0xec70[11]](_0xec70[14],auth[_0xec70[6]](),auth[_0xec70[8]](_0xec70[7]),license[_0xec70[9]](),controller[_0xec70[15]]);module[_0xec70[16]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./update.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasRole('admin'), license.hasUpdate(), controller.index); +router.get('/current', auth.isAuthenticated(), auth.hasRole('admin'), license.hasUpdate(), controller.getCurrentVersion); +router.get('/pull', auth.isAuthenticated(), auth.hasRole('admin'), license.hasUpdate(), controller.pull); + +module.exports = router; diff --git a/server/api/update/update.controller.js b/server/api/update/update.controller.js index c49b832..a95d730 100644 --- a/server/api/update/update.controller.js +++ b/server/api/update/update.controller.js @@ -1 +1,87 @@ -var _0xb303=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x70\x61\x74\x68","\x6D\x6F\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x72\x6F\x6F\x74","\x6A\x6F\x69\x6E","\x73\x69\x6D\x70\x6C\x65\x2D\x67\x69\x74","\x69\x6E\x64\x65\x78","\x6C\x65\x6E\x67\x74\x68","\x61\x6C\x6C","\x7C","\x73\x70\x6C\x69\x74","\x6D\x65\x73\x73\x61\x67\x65","\x75\x6E\x6B\x6E\x6F\x77\x6E","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x64\x61\x74\x65","\x70\x75\x73\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6C\x6F\x67","\x67\x65\x74\x43\x75\x72\x72\x65\x6E\x74\x56\x65\x72\x73\x69\x6F\x6E","\x6C\x61\x74\x65\x73\x74","\x63\x75\x72\x72\x65\x6E\x74\x56\x65\x72\x73\x69\x6F\x6E","\x20","\x6F\x72\x69\x67\x69\x6E\x2F\x6D\x61\x73\x74\x65\x72","\x6C\x61\x74\x65\x73\x74\x56\x65\x72\x73\x69\x6F\x6E","\x66\x65\x74\x63\x68","\x70\x75\x6C\x6C","\x6F\x72\x69\x67\x69\x6E","\x6D\x61\x73\x74\x65\x72","\x55\x70\x64\x61\x74\x65\x20\x65\x72\x72\x6F\x72\x3A\x20","\x65\x72\x72\x6F\x72","\x55\x70\x64\x61\x74\x65\x20\x72\x65\x73\x75\x6C\x74\x3A\x20","\x45\x52\x52\x4F\x52","\x45\x52\x52\x4F\x52\x20\x53\x54\x41\x43\x4B","\x73\x74\x61\x63\x6B"];_0xb303[0];var _=require(_0xb303[1]);var path=require(_0xb303[2]);var moment=require(_0xb303[3]);var config=require(_0xb303[4]);var Git=require(_0xb303[7])(path[_0xb303[6]](config[_0xb303[5]]));exports[_0xb303[8]]= function(_0x7148x6,_0x7148x7){return Git[_0xb303[21]](function(_0x7148x8,_0x7148x9){if(_0x7148x8){return handleError(_0x7148x7,_0x7148x8)};var _0x7148xa=[];for(var _0x7148xb=0;_0x7148xb< 10&& _0x7148xb< _0x7148x9[_0xb303[10]][_0xb303[9]];_0x7148xb++){_0x7148xa[_0xb303[18]]({version:_0x7148x9[_0xb303[10]][_0x7148xb][_0xb303[13]][_0xb303[12]](_0xb303[11])[1]|| _0xb303[14],message:_0x7148x9[_0xb303[10]][_0x7148xb][_0xb303[13]][_0xb303[12]](_0xb303[11])[0],createdAt:moment(_0x7148x9[_0xb303[10]][_0x7148xb][_0xb303[17]])[_0xb303[16]](_0xb303[15])})};return _0x7148x7[_0xb303[20]](200)[_0xb303[19]]({rows:_0x7148xa,count:_0x7148xa[_0xb303[9]]})})};exports[_0xb303[22]]= function(_0x7148x6,_0x7148x7){var _0x7148xc={};return Git[_0xb303[21]](function(_0x7148x8,_0x7148x9){if(_0x7148x8){return handleError(_0x7148x7,_0x7148x8)};var _0x7148xd=_0x7148x9[_0xb303[23]][_0xb303[13]][_0xb303[12]](_0xb303[11])[1];_0x7148xc[_0xb303[24]]= {version:_0x7148xd?_0x7148xd[_0xb303[12]](_0xb303[25])[0]:_0xb303[14],message:_0x7148x9[_0xb303[23]][_0xb303[13]][_0xb303[12]](_0xb303[11])[0],createdAt:moment(_0x7148x9[_0xb303[23]][_0xb303[17]])[_0xb303[16]](_0xb303[15])};return Git[_0xb303[28]](function(_0x7148x8,_0x7148x9){if(_0x7148x8){return handleError(_0x7148x7,_0x7148x8)};return Git[_0xb303[21]]([_0xb303[26]],function(_0x7148x8,_0x7148x9){if(_0x7148x8){return handleError(_0x7148x7,_0x7148x8)};var _0x7148xe=_0x7148x9[_0xb303[23]][_0xb303[13]][_0xb303[12]](_0xb303[11])[1];_0x7148xc[_0xb303[27]]= {version:_0x7148xe?_0x7148xe[_0xb303[12]](_0xb303[25])[0]:_0xb303[14],message:_0x7148x9[_0xb303[23]][_0xb303[13]][_0xb303[12]](_0xb303[11])[0],createdAt:moment(_0x7148x9[_0xb303[23]][_0xb303[17]])[_0xb303[16]](_0xb303[15])};return _0x7148x7[_0xb303[20]](200)[_0xb303[19]](_0x7148xc)})})})};exports[_0xb303[29]]= function(_0x7148x6,_0x7148x7){Git[_0xb303[29]](_0xb303[30],_0xb303[31],function(_0x7148x8,_0x7148xf){if(_0x7148x8){console[_0xb303[33]](_0xb303[32],_0x7148x8);return _0x7148x7[_0xb303[20]](500)[_0xb303[19]](_0x7148x8)};console[_0xb303[21]](_0xb303[34],_0x7148xf);return _0x7148x7[_0xb303[20]](200)[_0xb303[19]](_0x7148xf)})};function handleError(_0x7148x7,_0x7148x8){console[_0xb303[21]](_0xb303[35],_0x7148x8);console[_0xb303[21]](_0xb303[36],_0x7148x8[_0xb303[37]]);return _0x7148x7[_0xb303[20]](500)[_0xb303[19]](_0x7148x8)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var path = require('path'); +var moment = require('moment'); +var config = require('../../config/environment'); + +var Git = require('simple-git')(path.join(config.root)); + +// Get list of updates +exports.index = function(req, res) { + return Git + .log(function(err, logs) { + if (err) { + return handleError(res, err); + } + + var rows = []; + for (var i = 0; i < 10 && i < logs.all.length; i++) { + rows.push({ + version: logs.all[i].message.split('|')[1] || 'unknown', + message: logs.all[i].message.split('|')[0], + createdAt: moment(logs.all[i].date).format("YYYY-MM-DD HH:mm:ss") + }); + } + + return res.status(200).send({ + rows: rows, + count: rows.length + }); + }); +}; + +exports.getCurrentVersion = function(req, res) { + var result = {}; + return Git + .log(function(err, logs) { + if (err) { + return handleError(res, err); + } + var currentVersion = logs.latest.message.split('|')[1]; + result.currentVersion = { + version: currentVersion ? currentVersion.split(' ')[0] : 'unknown', + message: logs.latest.message.split('|')[0], + createdAt: moment(logs.latest.date).format("YYYY-MM-DD HH:mm:ss") + }; + return Git + .fetch(function(err, logs) { + if (err) { + return handleError(res, err); + } + return Git + .log(['origin/master'], function(err, logs) { + if (err) { + return handleError(res, err); + } + var latestVersion = logs.latest.message.split('|')[1]; + result.latestVersion = { + version: latestVersion ? latestVersion.split(' ')[0] : 'unknown', + message: logs.latest.message.split('|')[0], + createdAt: moment(logs.latest.date).format("YYYY-MM-DD HH:mm:ss") + }; + + return res.status(200).send(result); + }); + }); + }); +}; + +// Get a single update +exports.pull = function(req, res) { + Git + .pull('origin', 'master', function(err, data) { + if (err) { + console.error('Update error: ', err); + return res.status(500).send(err); + } + console.log('Update result: ', data); + return res.status(200).send(data); + }); +}; + +function handleError(res, err) { + console.log('ERROR', err); + console.log('ERROR STACK', err.stack); + return res.status(500).send(err); +} diff --git a/server/api/user/index.js b/server/api/user/index.js index c5150fa..acb5c27 100644 --- a/server/api/user/index.js +++ b/server/api/user/index.js @@ -1 +1,261 @@ -var _0xb1f2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x75\x73\x65\x72","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x6D\x65","\x6D\x65","\x2F\x61\x6C\x6C","\x67\x65\x74\x55\x73\x65\x72\x73","\x2F\x61\x76\x61\x74\x61\x72\x2F\x3A\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x67\x65\x74\x41\x76\x61\x74\x61\x72","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x61\x76\x61\x74\x61\x72","\x67\x65\x74\x41\x76\x61\x74\x61\x72\x42\x79\x49\x64","\x2F\x3A\x69\x64\x2F\x61\x6C\x6C\x6F\x77\x65\x64\x2F\x6D\x6F\x64\x75\x6C\x65\x73","\x68\x61\x73\x52\x6F\x6C\x65","\x67\x65\x74\x41\x6C\x6C\x6F\x77\x65\x64\x4D\x6F\x64\x75\x6C\x65\x73","\x2F\x3A\x69\x64\x2F\x61\x6C\x6C\x6F\x77\x65\x64\x2F\x3A\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x71\x75\x65\x75\x65\x73","\x67\x65\x74\x41\x6C\x6C\x6F\x77\x65\x64\x51\x75\x65\x75\x65\x73","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x69\x73\x55\x73\x65\x72\x73\x4C\x69\x6D\x69\x74","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x65\x64\x4D\x6F\x64\x75\x6C\x65\x73","\x61\x64\x64\x41\x6C\x6C\x6F\x77\x65\x64\x51\x75\x65\x75\x65\x73","\x2F\x70\x61\x73\x73\x77\x6F\x72\x64","\x63\x68\x61\x6E\x67\x65\x50\x61\x73\x73\x77\x6F\x72\x64","\x70\x75\x74","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x6D\x6F\x76\x65\x41\x6C\x6C\x6F\x77\x65\x64\x51\x75\x65\x75\x65\x73","\x2F\x3A\x69\x64\x2F\x70\x61\x73\x73\x77\x6F\x72\x64","\x72\x65\x73\x65\x74\x50\x61\x73\x73\x77\x6F\x72\x64","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65\x2F\x3A\x66\x69\x65\x6C\x64","\x75\x73\x65\x72\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x63\x68\x61\x6E\x67\x65\x41\x76\x61\x74\x61\x72","\x65\x78\x70\x6F\x72\x74\x73"];_0xb1f2[0];var express=require(_0xb1f2[1]);var controller=require(_0xb1f2[2]);var config=require(_0xb1f2[3]);var auth=require(_0xb1f2[4]);var license=require(_0xb1f2[5]);var router=express.Router();router[_0xb1f2[13]](_0xb1f2[6],auth[_0xb1f2[7]](),auth[_0xb1f2[11]]([7],[_0xb1f2[8],_0xb1f2[9],_0xb1f2[10]]),controller[_0xb1f2[12]]);router[_0xb1f2[13]](_0xb1f2[14],auth[_0xb1f2[7]](),auth[_0xb1f2[11]]([17],[_0xb1f2[8]]),controller[_0xb1f2[15]]);router[_0xb1f2[13]](_0xb1f2[16],auth[_0xb1f2[7]](),controller[_0xb1f2[17]]);router[_0xb1f2[13]](_0xb1f2[18],auth[_0xb1f2[7]](),controller[_0xb1f2[19]]);router[_0xb1f2[13]](_0xb1f2[20],controller[_0xb1f2[21]]);router[_0xb1f2[13]](_0xb1f2[22],auth[_0xb1f2[7]](),auth[_0xb1f2[11]]([],[_0xb1f2[8],_0xb1f2[9]]),controller[_0xb1f2[23]]);router[_0xb1f2[13]](_0xb1f2[24],auth[_0xb1f2[7]](),controller[_0xb1f2[25]]);router[_0xb1f2[13]](_0xb1f2[26],auth[_0xb1f2[7]](),auth[_0xb1f2[27]](_0xb1f2[8]),controller[_0xb1f2[28]]);router[_0xb1f2[13]](_0xb1f2[29],auth[_0xb1f2[7]](),auth[_0xb1f2[27]](_0xb1f2[8]),controller[_0xb1f2[30]]);router[_0xb1f2[34]](_0xb1f2[6],auth[_0xb1f2[7]](),license[_0xb1f2[31]](),license[_0xb1f2[32]](),auth[_0xb1f2[27]](_0xb1f2[8]),controller[_0xb1f2[33]]);router[_0xb1f2[34]](_0xb1f2[26],auth[_0xb1f2[7]](),auth[_0xb1f2[27]](_0xb1f2[8]),controller[_0xb1f2[35]]);router[_0xb1f2[34]](_0xb1f2[29],auth[_0xb1f2[7]](),auth[_0xb1f2[27]](_0xb1f2[8]),controller[_0xb1f2[36]]);router[_0xb1f2[39]](_0xb1f2[37],auth[_0xb1f2[7]](),controller[_0xb1f2[38]]);router[_0xb1f2[39]](_0xb1f2[22],auth[_0xb1f2[7]](),auth[_0xb1f2[11]]([],[_0xb1f2[8],_0xb1f2[9],_0xb1f2[10]]),controller[_0xb1f2[40]]);router[_0xb1f2[42]](_0xb1f2[6],auth[_0xb1f2[7]](),auth[_0xb1f2[27]](_0xb1f2[8]),controller[_0xb1f2[41]]);router[_0xb1f2[42]](_0xb1f2[22],auth[_0xb1f2[7]](),auth[_0xb1f2[27]](_0xb1f2[8]),controller[_0xb1f2[43]]);router[_0xb1f2[42]](_0xb1f2[29],auth[_0xb1f2[7]](),auth[_0xb1f2[27]](_0xb1f2[8]),controller[_0xb1f2[44]]);router[_0xb1f2[39]](_0xb1f2[45],auth[_0xb1f2[7]](),auth[_0xb1f2[27]](_0xb1f2[8]),controller[_0xb1f2[46]]);router[_0xb1f2[34]](_0xb1f2[47],auth[_0xb1f2[7]](),auth[_0xb1f2[27]](_0xb1f2[8]),controller[_0xb1f2[48]]);router[_0xb1f2[34]](_0xb1f2[24],auth[_0xb1f2[7]](),auth[_0xb1f2[27]](_0xb1f2[8]),controller[_0xb1f2[49]]);module[_0xb1f2[50]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./user.controller'); +var config = require('../../config/environment'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +/** + * @api {get} /api/users/ Get users' profile. + * + * @api {get} /api/agents/ Get users' profile. + * + * @apiParam (Query) {Number} [offset] Pagination offset. + * @apiParam (Query) {Number} [limit] Pagination limit. + * + * @apiVersion 0.0.143 + * @apiName GetUsers + * @apiGroup Users + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Number} count Number of users. + * @apiSuccess {Object[]} rows Get list of user profiles. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "count": 1, + * "rows": [{ + * "id": 1 + * "name": "john.doe" + * "email": "john.doe@xcally.com" + * "internal": 1001 + * "fullname": "John Doe" + * ... + * }] + * } + */ +router.get('/', auth.isAuthenticated(), auth.hasModule([7], ['admin', 'user', 'agent']), controller.index); +router.get('/describe', auth.isAuthenticated(), auth.hasModule([17], ['admin']), controller.describe); + +router.get('/me', auth.isAuthenticated(), controller.me); +router.get('/all', auth.isAuthenticated(), controller.getUsers); +router.get('/avatar/:filename', controller.getAvatar); +/** + * @api {get} /api/users/:id Get user's profile. + * @apiParam {Number} id User's unique ID. + * @apiVersion 0.0.143 + * @apiName GetUser + * @apiGroup Users + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "john.doe" + * "email": "john.doe@xcally.com" + * "internal": 1001 + * "fullname": "John Doe" + * ... + * } + */ +router.get('/:id', auth.isAuthenticated(), auth.hasModule([], ['admin', 'user']), controller.show); +router.get('/:id/avatar', auth.isAuthenticated(), controller.getAvatarById); +router.get('/:id/allowed/modules', auth.isAuthenticated(), auth.hasRole('admin'), controller.getAllowedModules); +router.get('/:id/allowed/:channel/queues', auth.isAuthenticated(), auth.hasRole('admin'), controller.getAllowedQueues); + +/** + * @api {post} /api/users/ Create user's profile. + * @apiParam (Body) {String} name User's username. + * @apiParam (Body) {String} fullname User's fullname. + * @apiParam (Body) {String} email User's email. + * @apiParam (Body) {String} context="from-sip" User's SIP context. + * @apiParam (Body) {String} password User's password. + * @apiParam (Body) {Number} internal User's internal number. + * @apiParam (Body) {String="tcp", "udp", "tcp,udp"} transport="udp" User's SIP transport. + * @apiParam (Body) {String="alaw", "ulaw", "gsm"} allow="alaw;ulaw;gsm" User's SIP codecs. + * @apiParam (Body) {Number} internal User's internal number. + * @apiParam (Body) {String} [phone] User's phone. + * @apiParam (Body) {String} [mobile] User's mobile phone. + * @apiParam (Body) {String} [address] User's address. + * @apiParam (Body) {String} [zipcode] User's zipcode. + * @apiParam (Body) {String} [city] User's city. + * @apiParam (Body) {String} [country] User's country. + * + * @apiVersion 0.0.143 + * @apiName CreateUser + * @apiGroup Users + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 201 Created + * { + * "id": 1 + * "name": "john.doe" + * "email": "john.doe@xcally.com" + * "internal": 1001 + * "fullname": "John Doe" + * ... + * } + */ +router.post('/', auth.isAuthenticated(), license.isValidDate(), license.isUsersLimit(), auth.hasRole('admin'), controller.create); +router.post('/:id/allowed/modules', auth.isAuthenticated(), auth.hasRole('admin'), controller.setAllowedModules); +router.post('/:id/allowed/:channel/queues', auth.isAuthenticated(), auth.hasRole('admin'), controller.addAllowedQueues); +/** + * @api {put} /api/users/password Update user's password. + * + * @apiParam (Body) {String} oldPassword Old user's password. + * @apiParam (Body) {String} newPassword New user's password. + * + * @apiVersion 0.0.143 + * @apiName UpdateUserPassword + * @apiGroup Users + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + */ +router.put('/password', auth.isAuthenticated(), controller.changePassword); +/** + * @api {update} /api/users/:id Update user's profile. + * + * @apiParam (Params) {Number} id User's unique ID. + * @apiParam (Body) {String} fullname User's fullname. + * @apiParam (Body) {String} email User's email. + * @apiParam (Body) {String} context="from-sip" User's SIP context. + * @apiParam (Body) {String} password User's password. + * @apiParam (Body) {Number} internal User's internal number. + * @apiParam (Body) {String="tcp", "udp", "tcp,udp"} transport="udp" User's SIP transport. + * @apiParam (Body) {String="alaw", "ulaw", "gsm"} allow="alaw;ulaw;gsm" User's SIP codecs. + * @apiParam (Body) {Number} internal User's internal number. + * @apiParam (Body) {String} [phone] User's phone. + * @apiParam (Body) {String} [mobile] User's mobile phone. + * @apiParam (Body) {String} [address] User's address. + * @apiParam (Body) {String} [zipcode] User's zipcode. + * @apiParam (Body) {String} [city] User's city. + * @apiParam (Body) {String} [country] User's country. + * + * @apiVersion 0.0.143 + * @apiName UpdateUser + * @apiGroup Users + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "john.doe" + * "email": "john.doe@xcally.com" + * "internal": 1001 + * "fullname": "John Doe" + * ... + * } + */ + +router.put('/:id', auth.isAuthenticated(), auth.hasModule([], ['admin', 'user', 'agent']), controller.update); + +/** + * @api {delete} /api/users/ Bulk Delete users' profile. + * + * @apiParam (Query) {Number[]} ids Users' unique ID array. + * + * @apiVersion 0.0.143 + * @apiName BulkDeleteUsers + * @apiGroup Users + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/', auth.isAuthenticated(), auth.hasRole('admin'), controller.bulkDestroy); + +/** + * @api {delete} /api/users/:id Delete user's profile. + * + * @apiParam {Number} id User's unique ID. + * + * @apiVersion 0.0.143 + * @apiName DeleteUser + * @apiGroup Users + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/:id', auth.isAuthenticated(), auth.hasRole('admin'), controller.destroy); +router.delete('/:id/allowed/:channel/queues', auth.isAuthenticated(), auth.hasRole('admin'), controller.removeAllowedQueues); + + +/** + * @api {put} /api/users/:id/password Reset user's password. + * + * @apiParam (Params) {Number} id User's unique ID. + * @apiParam (Body) {String} newPassword New user's password. + * + * @apiPermission admin + * + * @apiVersion 0.0.143 + * @apiName ResetUserPassword + * @apiGroup Users + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + */ +router.put('/:id/password', auth.isAuthenticated(), auth.hasRole('admin'), controller.resetPassword); +router.post('/validate/:field', auth.isAuthenticated(), auth.hasRole('admin'), controller.userValidation); +router.post('/:id/avatar', auth.isAuthenticated(), auth.hasRole('admin'), controller.changeAvatar); + +module.exports = router; diff --git a/server/api/user/user.controller.js b/server/api/user/user.controller.js index 9771e69..b8b147b 100644 --- a/server/api/user/user.controller.js +++ b/server/api/user/user.controller.js @@ -1 +1,709 @@ -var _0x4114=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x6F\x64\x75\x6C\x65","\x53\x65\x74\x74\x69\x6E\x67","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x46\x61\x78\x51\x75\x65\x75\x65","\x53\x6D\x73\x51\x75\x65\x75\x65","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x70\x61\x73\x73\x70\x6F\x72\x74","\x6D\x6F\x6D\x65\x6E\x74","\x6A\x73\x6F\x6E\x77\x65\x62\x74\x6F\x6B\x65\x6E","\x75\x70\x6C\x6F\x61\x64\x2D\x66\x69\x6C\x65","\x70\x61\x74\x68","\x66\x73","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x75\x73\x65\x72","\x73\x63\x6F\x70\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x67\x65\x74\x55\x73\x65\x72\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x67\x65\x74\x41\x6C\x6C\x6F\x77\x65\x64\x4D\x6F\x64\x75\x6C\x65\x73","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x67\x65\x74\x4D\x6F\x64\x75\x6C\x65\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x72\x6F\x6C\x65","\x62\x6F\x64\x79","\x70\x61\x73\x73\x77\x6F\x72\x64","\x74\x65\x73\x74","\x57\x72\x6F\x6E\x67\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x20\x66\x6F\x72\x6D\x61\x74\x21","\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","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x73\x65\x74\x41\x6C\x6C\x6F\x77\x65\x64\x4D\x6F\x64\x75\x6C\x65\x73","\x6C\x6F\x67","\x6D\x6F\x64\x75\x6C\x65\x73","\x73\x65\x74\x4D\x6F\x64\x75\x6C\x65\x73","\x73\x68\x6F\x77","\x64\x65\x73\x74\x72\x6F\x79","\x6E\x61\x6D\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","\x63\x68\x61\x6E\x67\x65\x50\x61\x73\x73\x77\x6F\x72\x64","\x6F\x6C\x64\x50\x61\x73\x73\x77\x6F\x72\x64","\x6E\x65\x77\x50\x61\x73\x73\x77\x6F\x72\x64","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x73\x61\x76\x65","\x73\x65\x63\x75\x72\x65\x50\x61\x73\x73\x77\x6F\x72\x64","\x72\x65\x73\x65\x74\x50\x61\x73\x73\x77\x6F\x72\x64","\x65\x72\x72\x6F\x72","\x49\x6E\x76\x61\x6C\x69\x64\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x20\x70\x61\x74\x74\x65\x72\x6E","\x63\x68\x61\x6E\x67\x65\x41\x76\x61\x74\x61\x72","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x69\x6D\x61\x67\x65\x73","\x6A\x6F\x69\x6E","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x65\x78\x74\x6E\x61\x6D\x65","\x4D\x61\x78\x20\x6E\x75\x6D\x62\x65\x72\x20\x6F\x66\x20\x66\x69\x6C\x65\x73\x20\x75\x70\x6C\x6F\x61\x64\x20\x65\x78\x63\x65\x65\x64\x65\x64","\x4F\x6E\x6C\x79\x20\x6A\x70\x65\x67\x20\x61\x6E\x64\x20\x70\x6E\x67\x20\x66\x6F\x72\x6D\x61\x74\x20\x61\x63\x63\x65\x70\x74\x65\x64","\x49\x6E\x76\x61\x6C\x69\x64\x20\x72\x65\x71\x75\x65\x73\x74","\x65\x6E\x64","\x66\x69\x6C\x65","\x75\x70\x64\x61\x74\x65","\x6F\x6E","\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x20\x55\x70\x6C\x6F\x61\x64\x20\x65\x72\x72\x6F\x72\x20\x3A","\x70\x61\x72\x73\x65","\x6D\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x67\x65\x74\x41\x76\x61\x74\x61\x72","\x75\x73\x65\x72\x70\x69\x63\x2E\x70\x6E\x67","\x73\x65\x6E\x64\x46\x69\x6C\x65","\x65\x78\x69\x73\x74\x73","\x67\x65\x74\x41\x76\x61\x74\x61\x72\x42\x79\x49\x64","\x76\x69\x73\x69\x74\x6F\x72","\x63\x75\x73\x74\x6F\x6D\x65\x72\x2E\x70\x6E\x67","\x75\x73\x65\x72\x70\x69\x63","\x67\x65\x74\x41\x6C\x6C\x6F\x77\x65\x64\x51\x75\x65\x75\x65\x73","\x6D\x61\x70","\x67\x65\x74\x50\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x76\x6F\x69\x63\x65","\x67\x65\x74\x50\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x63\x68\x61\x74","\x67\x65\x74\x50\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x6D\x61\x69\x6C","\x67\x65\x74\x50\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x66\x61\x78","\x67\x65\x74\x50\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x73\x6D\x73","\x67\x65\x74\x50\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x54\x68\x65\x20\x63\x68\x61\x6E\x6E\x65\x6C\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74","\x63\x68\x61\x6E\x6E\x65\x6C","\x61\x64\x64\x41\x6C\x6C\x6F\x77\x65\x64\x51\x75\x65\x75\x65\x73","\x61\x64\x64\x50\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x61\x64\x64\x50\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x61\x64\x64\x50\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x61\x64\x64\x50\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x61\x64\x64\x50\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x61\x64\x64\x50\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x41\x6C\x6C\x6F\x77\x65\x64\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x50\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x50\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x50\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x50\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x50\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x72\x65\x6D\x6F\x76\x65\x50\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x75\x73\x65\x72\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x63\x6F\x75\x6E\x74","\x61\x75\x74\x68\x43\x61\x6C\x6C\x62\x61\x63\x6B","\x2F","\x72\x65\x64\x69\x72\x65\x63\x74"];_0x4114[0];var User=require(_0x4114[2])[_0x4114[1]];var Module=require(_0x4114[2])[_0x4114[3]];var Setting=require(_0x4114[2])[_0x4114[4]];var VoiceQueue=require(_0x4114[2])[_0x4114[5]];var ChatQueue=require(_0x4114[2])[_0x4114[6]];var MailQueue=require(_0x4114[2])[_0x4114[7]];var FaxQueue=require(_0x4114[2])[_0x4114[8]];var SmsQueue=require(_0x4114[2])[_0x4114[9]];var sequelize=require(_0x4114[2])[_0x4114[10]];var config=require(_0x4114[11]);var Util=require(_0x4114[12]);var passport=require(_0x4114[13]);var moment=require(_0x4114[14]);var jwt=require(_0x4114[15]);var uploadFile=require(_0x4114[16]);var path=require(_0x4114[17]);var fs=require(_0x4114[18]);var _=require(_0x4114[19]);var util=require(_0x4114[20]);var sr=require(_0x4114[21]);exports[_0x4114[22]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){return User[_0x4114[31]](_0x4114[30])[_0x4114[29]](Util[_0x4114[28]](_0xd85fx15[_0x4114[27]]))[_0x4114[26]](function(_0xd85fx19){_0xd85fx16[_0x4114[25]](200)[_0x4114[24]](_0xd85fx19)})[_0x4114[23]](function(_0xd85fx18){return handleError(_0xd85fx16,_0xd85fx18)})};exports[_0x4114[32]]= function(_0xd85fx15,_0xd85fx16){return User[_0x4114[32]]()[_0x4114[26]](function(_0xd85fx1a){return _0xd85fx16[_0x4114[25]](200)[_0x4114[24]](_0xd85fx1a)})[_0x4114[23]](function(_0xd85fx18){return handleError(_0xd85fx16,_0xd85fx18)})};function handleError(_0xd85fx16,_0xd85fx18){return _0xd85fx16[_0x4114[25]](500)[_0x4114[24]](_0xd85fx18)}exports[_0x4114[33]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){return User[_0x4114[34]]()[_0x4114[26]](function(_0xd85fx1c){return _0xd85fx16[_0x4114[25]](200)[_0x4114[24]]({rows:_0xd85fx1c})})[_0x4114[23]](function(_0xd85fx18){return handleError(_0xd85fx16,_0xd85fx18)})};exports[_0x4114[35]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){return User[_0x4114[40]](_0xd85fx15[_0x4114[39]][_0x4114[38]])[_0x4114[26]](function(_0xd85fx1e){if(!_0xd85fx1e){return _0xd85fx16[_0x4114[36]](404)};return _0xd85fx1e[_0x4114[37]]()})[_0x4114[26]](function(_0xd85fx1d){return _0xd85fx16[_0x4114[25]](200)[_0x4114[24]](_0xd85fx1d)})[_0x4114[23]](function(_0xd85fx18){return handleError(_0xd85fx16,_0xd85fx18)})};exports[_0x4114[41]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){_0xd85fx15[_0x4114[43]][_0x4114[42]]= _0xd85fx15[_0x4114[43]][_0x4114[42]]|| _0x4114[30];var _0xd85fx1f=String(_0xd85fx15[_0x4114[43]][_0x4114[44]]);if(!(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/[_0x4114[45]](_0xd85fx1f))){throw new Error(_0x4114[46])};return sequelize[_0x4114[49]](function(_0xd85fx20){return User[_0x4114[41]](_0xd85fx15[_0x4114[43]],{transaction:_0xd85fx20})[_0x4114[26]](function(_0xd85fx1e){return _0xd85fx16[_0x4114[25]](201)[_0x4114[24]](_0xd85fx1e)})})[_0x4114[23]](sequelize.UniqueConstraintError,function(_0xd85fx18){return Util[_0x4114[48]][_0x4114[47]](_0xd85fx16,_0xd85fx18)})[_0x4114[23]](function(_0xd85fx18){return handleError(_0xd85fx16,_0xd85fx18)})};exports[_0x4114[50]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){return sequelize[_0x4114[49]](function(_0xd85fx20){return User[_0x4114[40]](_0xd85fx15[_0x4114[39]][_0x4114[38]])[_0x4114[26]](function(_0xd85fx1e){if(!_0xd85fx1e){return _0xd85fx16[_0x4114[36]](404)};return _0xd85fx1e[_0x4114[53]](_0xd85fx15[_0x4114[43]][_0x4114[52]])})[_0x4114[26]](function(){return _0xd85fx16[_0x4114[36]](201)})})[_0x4114[23]](function(_0xd85fx18){console[_0x4114[51]](_0xd85fx18);return handleError(_0xd85fx16,_0xd85fx18)})};exports[_0x4114[54]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){return User[_0x4114[40]](_0xd85fx15[_0x4114[39]][_0x4114[38]])[_0x4114[26]](function(_0xd85fx1e){if(!_0xd85fx1e){return _0xd85fx16[_0x4114[36]](404)};return _0xd85fx16[_0x4114[25]](200)[_0x4114[24]](_0xd85fx1e)})[_0x4114[23]](function(_0xd85fx18){return handleError(_0xd85fx16,_0xd85fx18)})};exports[_0x4114[55]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){var _0xd85fx21=_0xd85fx15[_0x4114[39]][_0x4114[38]];var _0xd85fx22;return User[_0x4114[40]](_0xd85fx21)[_0x4114[26]](function(_0xd85fx1e){_0xd85fx22= _0xd85fx1e;if(!_0xd85fx1e){return _0xd85fx16[_0x4114[36]](404)};return _0xd85fx1e[_0x4114[55]]()})[_0x4114[26]](function(_0xd85fx1e){return _0xd85fx16[_0x4114[25]](200)[_0x4114[24]](_0xd85fx1e)})[_0x4114[23]](sequelize.ForeignKeyConstraintError,function(_0xd85fx18){return Util[_0x4114[48]][_0x4114[57]](_0xd85fx16,_0x4114[30],_0xd85fx22[_0x4114[56]],_0xd85fx18)})[_0x4114[23]](function(_0xd85fx18){return handleError(_0xd85fx16,_0xd85fx18)})};exports[_0x4114[58]]= function(_0xd85fx15,_0xd85fx16){return User[_0x4114[55]]({where:{id:_0xd85fx15[_0x4114[27]][_0x4114[59]]},individualHooks:true})[_0x4114[26]](function(){return _0xd85fx16[_0x4114[36]](204)})[_0x4114[23]](function(_0xd85fx18){return handleError(_0xd85fx16,_0xd85fx18)})};exports[_0x4114[60]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){var _0xd85fx21=_0xd85fx15[_0x4114[30]][_0x4114[38]];var _0xd85fx23=String(_0xd85fx15[_0x4114[43]][_0x4114[61]]);var _0xd85fx24=String(_0xd85fx15[_0x4114[43]][_0x4114[62]]);return sequelize[_0x4114[49]](function(_0xd85fx20){return Setting[_0x4114[40]](1)[_0x4114[26]](function(_0xd85fx25){if(_0xd85fx25[_0x4114[65]]&& !(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/[_0x4114[45]](_0xd85fx24))){throw new Error(_0x4114[46])};return User[_0x4114[40]](_0xd85fx21)})[_0x4114[26]](function(_0xd85fx1e){if(!_0xd85fx1e[_0x4114[63]](_0xd85fx23)){return _0xd85fx16[_0x4114[36]](403)}else {_0xd85fx1e[_0x4114[44]]= _0xd85fx24;return _0xd85fx1e[_0x4114[64]]({transaction:_0xd85fx20})[_0x4114[26]](function(){return _0xd85fx16[_0x4114[36]](200)})}})})[_0x4114[23]](function(_0xd85fx18){console[_0x4114[51]](_0xd85fx18);return handleError(_0xd85fx16,_0xd85fx18)})};exports[_0x4114[66]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){var _0xd85fx26;var _0xd85fx21=_0xd85fx15[_0x4114[39]][_0x4114[38]];var _0xd85fx24=String(_0xd85fx15[_0x4114[43]][_0x4114[62]]);return sequelize[_0x4114[49]](function(_0xd85fx20){return Setting[_0x4114[40]](1)[_0x4114[26]](function(_0xd85fx25){_0xd85fx26= _0xd85fx25;return User[_0x4114[40]](_0xd85fx21)})[_0x4114[26]](function(_0xd85fx1e){var _0xd85fx27=_0xd85fx26[_0x4114[65]]?/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/:/^[a-zA-Z0-9]{6,}$/;if(_0xd85fx26[_0x4114[65]]&& !_0xd85fx27[_0x4114[45]](_0xd85fx24)){throw new Error(_0x4114[68])};_0xd85fx1e[_0x4114[44]]= _0xd85fx24;return _0xd85fx1e[_0x4114[64]]({transaction:_0xd85fx20})})})[_0x4114[26]](function(){return _0xd85fx16[_0x4114[36]](200)})[_0x4114[23]](function(_0xd85fx18){console[_0x4114[67]](_0xd85fx18);return handleError(_0xd85fx16,_0xd85fx18)})};exports[_0x4114[69]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){var _0xd85fx28= new uploadFile({dest:path[_0x4114[74]](config[_0x4114[70]],_0x4114[71],_0x4114[72],_0x4114[73]),maxNumberOfFiles:1,minNumberOfFiles:0,acceptFileTypes:/(\.|\/)(jpeg|png)$/i,rename:function(_0xd85fx29,_0xd85fx2a){return sr()+ path[_0x4114[76]](_0xd85fx2a[_0x4114[75]])},messages:{maxNumberOfFiles:_0x4114[77],acceptFileTypes:_0x4114[78],invalidRequest:_0x4114[79]}});_0xd85fx28[_0x4114[83]](_0x4114[80],function(_0xd85fx1a,_0xd85fx2b){if(!_0xd85fx2b[_0x4114[81]][_0x4114[75]]){return _0xd85fx16[_0x4114[25]](500)[_0x4114[24]](_0xd85fx28)};return sequelize[_0x4114[49]](function(_0xd85fx20){return User[_0x4114[40]](_0xd85fx15[_0x4114[39]][_0x4114[38]])[_0x4114[26]](function(_0xd85fx1e){if(!_0xd85fx1e){return _0xd85fx16[_0x4114[36]](404)};return _0xd85fx1e[_0x4114[82]]({userpic:_0xd85fx2b[_0x4114[81]][_0x4114[75]]},{transaction:_0xd85fx20})})[_0x4114[26]](function(_0xd85fx1e){return _0xd85fx16[_0x4114[25]](200)[_0x4114[24]](_0xd85fx1e)})})[_0x4114[23]](function(_0xd85fx18){return handleError(_0xd85fx16,_0xd85fx18)})});_0xd85fx28[_0x4114[83]](_0x4114[67],function(_0xd85fx18){console[_0x4114[51]](_0x4114[84],_0xd85fx18);return handleError(_0xd85fx16,_0xd85fx18)});_0xd85fx28[_0x4114[85]](_0xd85fx15)};exports[_0x4114[86]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){return User[_0x4114[31]]({method:[_0x4114[86],_0xd85fx15[_0x4114[30]][_0x4114[38]]]})[_0x4114[87]]()[_0x4114[26]](function(_0xd85fx1e){if(!_0xd85fx1e){return _0xd85fx16[_0x4114[36]](401)};return _0xd85fx16[_0x4114[25]](200)[_0x4114[24]](_0xd85fx1e)})[_0x4114[23]](function(_0xd85fx18){return handleError(_0xd85fx16,_0xd85fx18)})};exports[_0x4114[82]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){var _0xd85fx21=_0xd85fx15[_0x4114[30]][_0x4114[38]];delete _0xd85fx15[_0x4114[43]][_0x4114[44]];delete _0xd85fx15[_0x4114[43]][_0x4114[56]];return sequelize[_0x4114[49]](function(_0xd85fx20){return User[_0x4114[40]](_0xd85fx15[_0x4114[39]][_0x4114[38]])[_0x4114[26]](function(_0xd85fx1e){if(!_0xd85fx1e){return _0xd85fx16[_0x4114[36]](500)};return _0xd85fx1e[_0x4114[82]](_0xd85fx15[_0x4114[43]],{transaction:_0xd85fx20})})[_0x4114[26]](function(_0xd85fx1e){return _0xd85fx16[_0x4114[25]](200)[_0x4114[24]](_0xd85fx1e)})})[_0x4114[23]](function(_0xd85fx18){return handleError(_0xd85fx16,_0xd85fx18)})};exports[_0x4114[88]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){var _0xd85fx2c=path[_0x4114[74]](config[_0x4114[70]],_0x4114[71],_0x4114[72],_0x4114[73],_0xd85fx15[_0x4114[39]][_0x4114[75]]);fs[_0x4114[91]](_0xd85fx2c,function(_0xd85fx2d){if(!_0xd85fx2d){_0xd85fx2c= path[_0x4114[74]](config[_0x4114[70]],_0x4114[71],_0x4114[72],_0x4114[73],_0x4114[89])};return _0xd85fx16[_0x4114[90]](_0xd85fx2c)})};exports[_0x4114[92]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){if(_0xd85fx15[_0x4114[39]][_0x4114[38]]=== _0x4114[93]){var _0xd85fx2c=path[_0x4114[74]](config[_0x4114[70]],_0x4114[71],_0x4114[72],_0x4114[73],_0x4114[94]);fs[_0x4114[91]](_0xd85fx2c,function(_0xd85fx2d){return _0xd85fx16[_0x4114[90]](_0xd85fx2c)})}else {return User[_0x4114[40]](_0xd85fx15[_0x4114[39]][_0x4114[38]])[_0x4114[26]](function(_0xd85fx1e){if(_0xd85fx1e){var _0xd85fx2c=path[_0x4114[74]](config[_0x4114[70]],_0x4114[71],_0x4114[72],_0x4114[73],_0xd85fx1e[_0x4114[95]]?_0xd85fx1e[_0x4114[95]]:_0x4114[89]);fs[_0x4114[91]](_0xd85fx2c,function(_0xd85fx2d){if(!_0xd85fx2d){_0xd85fx2c= path[_0x4114[74]](config[_0x4114[70]],_0x4114[71],_0x4114[72],_0x4114[73],_0x4114[89])};return _0xd85fx16[_0x4114[90]](_0xd85fx2c)})}else {return _0xd85fx16[_0x4114[36]](500)}})[_0x4114[23]](function(_0xd85fx18){return handleError(_0xd85fx16,_0xd85fx18)})}};exports[_0x4114[96]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){var _0xd85fx22;return User[_0x4114[40]](_0xd85fx15[_0x4114[39]][_0x4114[38]],{attributes:[_0x4114[38]]})[_0x4114[26]](function(_0xd85fx1e){_0xd85fx22= _0xd85fx1e;if(!_0xd85fx22){return _0xd85fx16[_0x4114[36]](401)};switch(_0xd85fx15[_0x4114[39]][_0x4114[111]]){case _0x4114[99]:return _0xd85fx22[_0x4114[98]]({attributes:[_0x4114[56]]});case _0x4114[101]:return _0xd85fx22[_0x4114[100]]({attributes:[_0x4114[38],_0x4114[56]]});case _0x4114[103]:return _0xd85fx22[_0x4114[102]]({attributes:[_0x4114[38],_0x4114[56]]});case _0x4114[105]:return _0xd85fx22[_0x4114[104]]({attributes:[_0x4114[38],_0x4114[56]]});case _0x4114[107]:return _0xd85fx22[_0x4114[106]]({attributes:[_0x4114[38],_0x4114[56]]});case _0x4114[109]:return _0xd85fx22[_0x4114[108]]({attributes:[_0x4114[38],_0x4114[56]]});default:throw new Error(_0x4114[110])}})[_0x4114[26]](function(_0xd85fx2e){if(_0xd85fx2e){return _0xd85fx16[_0x4114[25]](200)[_0x4114[24]](_[_0x4114[97]](_0xd85fx2e,function(_0xd85fx2f){var _0xd85fx30={name:_0xd85fx2f[_0x4114[56]]};if(_0xd85fx2f[_0x4114[38]]){_0xd85fx30[_0x4114[38]]= _0xd85fx2f[_0x4114[38]]};return _0xd85fx30}))}})[_0x4114[23]](function(_0xd85fx18){console[_0x4114[67]](_0xd85fx18);return handleError(_0xd85fx16,_0xd85fx18)})};exports[_0x4114[112]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){var _0xd85fx22;return User[_0x4114[40]](_0xd85fx15[_0x4114[39]][_0x4114[38]],{attributes:[_0x4114[38]]})[_0x4114[26]](function(_0xd85fx1e){_0xd85fx22= _0xd85fx1e;if(!_0xd85fx22){return _0xd85fx16[_0x4114[36]](401)};switch(_0xd85fx15[_0x4114[39]][_0x4114[111]]){case _0x4114[99]:return _0xd85fx22[_0x4114[113]](_0xd85fx15[_0x4114[43]]);case _0x4114[101]:return _0xd85fx22[_0x4114[114]](_0xd85fx15[_0x4114[43]]);case _0x4114[103]:return _0xd85fx22[_0x4114[115]](_0xd85fx15[_0x4114[43]]);case _0x4114[105]:return _0xd85fx22[_0x4114[116]](_0xd85fx15[_0x4114[43]]);case _0x4114[107]:return _0xd85fx22[_0x4114[117]](_0xd85fx15[_0x4114[43]]);case _0x4114[109]:return _0xd85fx22[_0x4114[118]](_0xd85fx15[_0x4114[43]]);default:return null}})[_0x4114[26]](function(_0xd85fx2e){return _0xd85fx16[_0x4114[36]](_0xd85fx2e?200:401)})[_0x4114[23]](function(_0xd85fx18){console[_0x4114[67]](_0xd85fx18)})};exports[_0x4114[119]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){var _0xd85fx22;return User[_0x4114[40]](_0xd85fx15[_0x4114[39]][_0x4114[38]],{attributes:[_0x4114[38]]})[_0x4114[26]](function(_0xd85fx1e){_0xd85fx22= _0xd85fx1e;if(!_0xd85fx22){return _0xd85fx16[_0x4114[36]](401)};switch(_0xd85fx15[_0x4114[39]][_0x4114[111]]){case _0x4114[99]:return _0xd85fx22[_0x4114[120]](_0xd85fx15[_0x4114[27]][_0x4114[59]]);case _0x4114[101]:return _0xd85fx22[_0x4114[121]](_0xd85fx15[_0x4114[27]][_0x4114[59]]);case _0x4114[103]:return _0xd85fx22[_0x4114[122]](_0xd85fx15[_0x4114[27]][_0x4114[59]]);case _0x4114[107]:return _0xd85fx22[_0x4114[123]](_0xd85fx15[_0x4114[27]][_0x4114[59]]);case _0x4114[105]:return _0xd85fx22[_0x4114[124]](_0xd85fx15[_0x4114[27]][_0x4114[59]]);case _0x4114[109]:return _0xd85fx22[_0x4114[125]](_0xd85fx15[_0x4114[27]][_0x4114[59]]);default:return null}})[_0x4114[26]](function(_0xd85fx2e){return _0xd85fx16[_0x4114[36]](_0xd85fx2e?200:401)})[_0x4114[23]](function(_0xd85fx18){console[_0x4114[67]](_0xd85fx18)})};exports[_0x4114[126]]= function(_0xd85fx15,_0xd85fx16){var _0xd85fx31={};_0xd85fx31[_0xd85fx15[_0x4114[39]][_0x4114[127]]]= _0xd85fx15[_0x4114[43]][_0x4114[128]];return User[_0x4114[29]]({where:_0xd85fx31})[_0x4114[26]](function(_0xd85fx19){if(_0xd85fx19[_0x4114[129]]){return _0xd85fx16[_0x4114[25]](200)[_0x4114[24]]({isValid:false,value:_0xd85fx15[_0x4114[43]][_0x4114[128]]})};return _0xd85fx16[_0x4114[25]](200)[_0x4114[24]]({isValid:true,value:_0xd85fx15[_0x4114[43]][_0x4114[128]]})})[_0x4114[23]](function(_0xd85fx18){return handleError(_0xd85fx16,_0xd85fx18)})};exports[_0x4114[130]]= function(_0xd85fx15,_0xd85fx16,_0xd85fx17){_0xd85fx16[_0x4114[132]](_0x4114[131])};function handleError(_0xd85fx16,_0xd85fx18){return _0xd85fx16[_0x4114[25]](500)[_0x4114[24]](_0xd85fx18)} \ No newline at end of file +'use strict'; + +var User = require('../../models').User; +var Module = require('../../models').Module; +var Setting = require('../../models').Setting; +var VoiceQueue = require('../../models').VoiceQueue; +var ChatQueue = require('../../models').ChatQueue; +var MailQueue = require('../../models').MailQueue; +var FaxQueue = require('../../models').FaxQueue; +var SmsQueue = require('../../models').SmsQueue; +var sequelize = require('../../models').sequelize; + +var config = require('../../config/environment'); +var Util = require('../../config/util'); + +var passport = require('passport'); +var moment = require('moment'); +var jwt = require('jsonwebtoken'); +var uploadFile = require('upload-file'); +var path = require('path'); +var fs = require('fs'); +var _ = require('lodash'); +var util = require('util'); +var sr = require('simple-random'); + +/** + * Get list of admin/user + */ +exports.index = function(req, res, next) { + return User + .scope('user') + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get list of fields +exports.describe = function(req, res) { + return User + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} + +/** + * Get list of admin/user/agent/telephone + */ +exports.getUsers = function(req, res, next) { + return User + .findAll() + .then(function(users) { + return res.status(200).send({ + rows: users + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +/** + * Get list of allowed modules + */ +exports.getAllowedModules = function(req, res, next) { + return User + .findById(req.params.id) + .then(function(user) { + if (!user) { + return res.sendStatus(404); + } + + return user.getModules(); + }) + .then(function(modules) { + return res.status(200).send(modules); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +/** + * Creates a new user + */ +exports.create = function(req, res, next) { + + // Set default role + req.body.role = req.body.role || 'user'; + var password = String(req.body.password); + if (!(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/.test(password))) { + throw new Error('Wrong password format!'); + } + + return sequelize.transaction(function(t) { + return User + .create(req.body, { + transaction: t + }) + .then(function(user) { + return res.status(201).send(user); + }) + }) + .catch(sequelize.UniqueConstraintError, function(err) { + return Util.errorManager.handleUniqueConstraintError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.setAllowedModules = function(req, res, next) { + return sequelize.transaction(function(t) { + return User + .findById(req.params.id) + .then(function(user) { + if (!user) { + return res.sendStatus(404); + } + return user.setModules(req.body.modules); + }) + .then(function() { + return res.sendStatus(201); + }) + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +/** + * Get a single user + */ +exports.show = function(req, res, next) { + return User + .findById(req.params.id) + .then(function(user) { + if (!user) { + return res.sendStatus(404); + } + + return res.status(200).send(user); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +/** + * Deletes a user + */ +exports.destroy = function(req, res, next) { + var userId = req.params.id; + var _user; + + return User + .findById(userId) + .then(function(user) { + _user = user; + if (!user) { + return res.sendStatus(404); + } + return user + .destroy(); + }) + .then(function(user) { + return res.status(200).send(user); + }) + .catch(sequelize.ForeignKeyConstraintError, function(err) { + return Util.errorManager.handleForeignKeyConstraintError(res, 'user', _user.name, err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a user from the DB. +exports.bulkDestroy = function(req, res) { + return User + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +/** + * Change a user password + */ +exports.changePassword = function(req, res, next) { + var userId = req.user.id; + var oldPass = String(req.body.oldPassword); + var newPass = String(req.body.newPassword); + return sequelize.transaction(function(t) { + return Setting + .findById(1) + .then(function(setting) { + if (setting.securePassword && !(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/.test(newPass))) { + throw new Error('Wrong password format!'); + } + + return User + .findById(userId); + }) + .then(function(user) { + if (!user.authenticate(oldPass)) { + return res.sendStatus(403); + } else { + user.password = newPass; + return user.save({ + transaction: t + }).then(function() { + return res.sendStatus(200); + }) + } + }) + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +/** + * Change a user password by admin + */ +exports.resetPassword = function(req, res, next) { + var _setting; + + var userId = req.params.id; + var newPass = String(req.body.newPassword); + + return sequelize.transaction(function(t) { + return Setting + .findById(1) + .then(function(setting) { + _setting = setting; + + return User + .findById(userId); + }) + .then(function(user) { + var regEx = _setting.securePassword ? /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/ : /^[a-zA-Z0-9]{6,}$/; + + if (_setting.securePassword && !regEx.test(newPass)) { + throw new Error('Invalid password pattern'); + } + + user.password = newPass; + return user + .save({ + transaction: t + }); + }) + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); +}; + +/** + * Change the avatar of the user + */ +exports.changeAvatar = function(req, res, next) { + + var upload = new uploadFile({ + dest: path.join(config.root, 'server', 'files', 'images'), + maxNumberOfFiles: 1, + minNumberOfFiles: 0, + acceptFileTypes: /(\.|\/)(jpeg|png)$/i, + rename: function(name, file) { + return sr() + path.extname(file.filename); + }, + messages: { + maxNumberOfFiles: "Max number of files upload exceeded", + acceptFileTypes: "Only jpeg and png format accepted", + invalidRequest: "Invalid request" + } + }); + + upload.on('end', function(fields, files) { + if (!files.file.filename) { + return res.status(500).send(upload); + } + return sequelize.transaction(function(t) { + return User + .findById(req.params.id) + .then(function(user) { + if (!user) { + return res.sendStatus(404); + } + + return user + .update({ + userpic: files.file.filename + }, { + transaction: t + }); + }) + .then(function(user) { + return res.status(200).send(user); + }) + }) + .catch(function(err) { + return handleError(res, err); + }); + }); + + upload.on('error', function(err) { + console.log('********** Upload error :', err) + return handleError(res, err); + }); + + upload.parse(req); +}; + + +/** + * Get my info + */ +exports.me = function(req, res, next) { + return User + .scope({ + method: ['me', req.user.id] + }) + .findOne() + .then(function(user) { + if (!user) { + return res.sendStatus(401); + } + return res.status(200).send(user); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +/** + * Update my user + */ +exports.update = function(req, res, next) { + var userId = req.user.id; + + delete req.body.password; + delete req.body.name; + + return sequelize.transaction(function(t) { + return User + .findById(req.params.id) + .then(function(user) { + if (!user) { + return res.sendStatus(500); + } + return user + .update(req.body, { + transaction: t + }); + }) + .then(function(user) { + return res.status(200).send(user); + }) + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +/** + * Get my avatar + */ +exports.getAvatar = function(req, res, next) { + var imgPath = path.join(config.root, 'server', 'files', 'images', req.params.filename); + + fs.exists(imgPath, function(exists) { + if (!exists) { + imgPath = path.join(config.root, 'server', 'files', 'images', 'userpic.png'); + } + + return res.sendFile(imgPath); + }); +}; + +/** + * Get my avatar by id + */ +exports.getAvatarById = function(req, res, next) { + if (req.params.id === 'visitor') { + var imgPath = path.join(config.root, 'server', 'files', 'images', 'customer.png'); + + fs.exists(imgPath, function(exists) { + return res.sendFile(imgPath); + }); + + } else { + return User + .findById(req.params.id) + .then(function(user) { + if (user) { + var imgPath = path.join(config.root, 'server', 'files', 'images', user.userpic ? user.userpic : 'userpic.png'); + + fs.exists(imgPath, function(exists) { + if (!exists) { + imgPath = path.join(config.root, 'server', 'files', 'images', 'userpic.png'); + } + + return res.sendFile(imgPath); + }); + } else { + return res.sendStatus(500); + } + }) + .catch(function(err) { + return handleError(res, err); + }); + } +}; + +/** + * Get my avatar by id + */ +// exports.getAllowedQueues = function(req, res, next) { +// var _user; +// var _permits = { +// voice: [], +// chat: [], +// mail: [], +// fax: [], +// sms: [] +// }; +// +// return User +// .findById(req.params.id, { +// attributes: ['id'] +// }) +// .then(function(user) { +// _user = user; +// if (!_user) { +// return res.sendStatus(401); +// } +// +// return _user +// .getPVoiceQueues({ +// attributes: ['name'] +// }); +// }) +// .then(function(queues) { +// _permits.voice = _permits.voice.concat(_.map(queues, 'name')); +// }) +// .then(function() { +// return _user +// .getPChatQueues({ +// attributes: ['name'] +// }); +// }) +// .then(function(queues) { +// _permits.chat = _permits.chat.concat(_.map(queues, 'name')); +// }) +// .then(function() { +// return _user +// .getPMailQueues({ +// attributes: ['name'] +// }); +// }) +// .then(function(queues) { +// _permits.mail = _permits.mail.concat(_.map(queues, 'name')); +// }) +// .then(function() { +// return _user +// .getPFaxQueues({ +// attributes: ['name'] +// }); +// }) +// .then(function(queues) { +// _permits.fax = _permits.fax.concat(_.map(queues, 'name')); +// }) +// // .then(function() { +// // return _user +// // .getPSmsQueues({ +// // attributes: ['name'] +// // }); +// // }) +// // .then(function(queues) { +// // _permits.sms = _permits.sms.concat(_.map(queues, 'name')); +// // }) +// .then(function() { +// return res.status(200).send(_permits); +// }) +// .catch(function(err) { +// console.error(err); +// return handleError(res, err); +// }); +// }; + +exports.getAllowedQueues = function(req, res, next) { + var _user; + + return User + .findById(req.params.id, { + attributes: ['id'] + }) + .then(function(user) { + _user = user; + if (!_user) { + return res.sendStatus(401); + } + + switch (req.params.channel) { + case 'voice': + return _user + .getPVoiceQueues({ + attributes: ['name'] + }); + case 'chat': + return _user + .getPChatQueues({ + attributes: ['id', 'name'] + }); + case 'mail': + return _user + .getPMailQueues({ + attributes: ['id', 'name'] + }); + case 'fax': + return _user + .getPFaxQueues({ + attributes: ['id', 'name'] + }); + case 'sms': + return _user + .getPSmsQueues({ + attributes: ['id', 'name'] + }); + case 'openchannel': + return _user + .getPOpenchannelQueues({ + attributes: ['id', 'name'] + }); + default: + throw new Error('The channel does not exist'); + } + }) + .then(function(queues) { + if (queues) { + return res.status(200).send(_.map(queues, function(queue) { + var _data = { + name: queue.name + }; + + if (queue.id) { + _data.id = queue.id; + } + + return _data; + })); + } + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); +}; + +exports.addAllowedQueues = function(req, res, next) { + var _user; + + return User + .findById(req.params.id, { + attributes: ['id'] + }) + .then(function(user) { + _user = user; + if (!_user) { + return res.sendStatus(401); + } + + switch (req.params.channel) { + case 'voice': + return _user + .addPVoiceQueues(req.body); + case 'chat': + return _user + .addPChatQueues(req.body); + case 'mail': + return _user + .addPMailQueues(req.body); + case 'fax': + return _user + .addPFaxQueues(req.body); + case 'sms': + return _user + .addPSmsQueues(req.body); + case 'openchannel': + return _user + .addPOpenchannelQueues(req.body); + default: + return null; + } + }) + .then(function(queues) { + return res.sendStatus(queues ? 200 : 401); + }) + .catch(function(err) { + console.error(err); + }); +}; + +exports.removeAllowedQueues = function(req, res, next) { + var _user; + + return User + .findById(req.params.id, { + attributes: ['id'] + }) + .then(function(user) { + _user = user; + if (!_user) { + return res.sendStatus(401); + } + + switch (req.params.channel) { + case 'voice': + return _user + .removePVoiceQueues(req.query.ids); + case 'chat': + return _user + .removePChatQueues(req.query.ids); + case 'mail': + return _user + .removePMailQueues(req.query.ids); + case 'sms': + return _user + .removePSmsQueues(req.query.ids); + case 'fax': + return _user + .removePFaxQueues(req.query.ids); + case 'openchannel': + return _user + .removePOpenchannelQueues(req.query.ids); + default: + return null; + } + }) + .then(function(queues) { + return res.sendStatus(queues ? 200 : 401); + }) + .catch(function(err) { + console.error(err); + }); +}; + +exports.userValidation = function(req, res) { + var where = {}; + where[req.params.field] = req.body.value; + + return User + .findAndCountAll({ + where: where + }) + .then(function(result) { + if (result.count) { + return res.status(200).send({ + isValid: false, + value: req.body.value + }); + } + return res.status(200).send({ + isValid: true, + value: req.body.value + }); + }) + .catch(function(err) { + return handleError(res, err); + }); + +}; + +/** + * Authentication callback + */ +exports.authCallback = function(req, res, next) { + res.redirect('/'); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/user/user.events.js b/server/api/user/user.events.js index 59d7cff..7052b15 100644 --- a/server/api/user/user.events.js +++ b/server/api/user/user.events.js @@ -1 +1,36 @@ -var _0x3b5b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x3b5b[0];const EventEmitter=require(_0x3b5b[1]);const User=require(_0x3b5b[3])[_0x3b5b[2]];var UserEvents= new EventEmitter();UserEvents[_0x3b5b[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x3b5b[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x3b5b[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x3b5b[6]};for(var e in events){var event=events[e];User[_0x3b5b[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x6dcdx8,_0x6dcdx9,_0x6dcdxa){UserEvents[_0x3b5b[10]](event+ _0x3b5b[8]+ _0x6dcdx8[_0x3b5b[9]],_0x6dcdx8);UserEvents[_0x3b5b[10]](event,_0x6dcdx8);_0x6dcdxa(null)}}module[_0x3b5b[11]]= UserEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const User = require('../../models').User; + +var UserEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + User.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserEvents.emit(event + ':' + doc._id, doc); + UserEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserEvents; diff --git a/server/api/user/user.socket.js b/server/api/user/user.socket.js index e81a336..a5f1bc9 100644 --- a/server/api/user/user.socket.js +++ b/server/api/user/user.socket.js @@ -1 +1,34 @@ -var _0x5872=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x72\x6F\x6C\x65","\x75\x73\x65\x72","\x61\x64\x6D\x69\x6E","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x5872[0];const UserEvents=require(_0x5872[1]);var events=[_0x5872[2],_0x5872[3]];exports[_0x5872[4]]= function(_0x90d8x3){for(var _0x90d8x4=0,_0x90d8x5=events[_0x5872[5]];_0x90d8x4< _0x90d8x5;_0x90d8x4++){var _0x90d8x6=events[_0x90d8x4];var _0x90d8x7=createListener(_0x5872[6]+ _0x90d8x6,_0x90d8x3);UserEvents[_0x5872[7]](_0x90d8x6,_0x90d8x7);_0x90d8x3[_0x5872[7]](_0x5872[8],removeListener(_0x90d8x6,_0x90d8x7))}};function createListener(_0x90d8x6,_0x90d8x3){return function(_0x90d8x9){if(_0x90d8x9[_0x5872[9]]=== _0x5872[10]|| _0x90d8x9[_0x5872[9]]=== _0x5872[11]){_0x90d8x3[_0x5872[12]](_0x90d8x6,_0x90d8x9)}}}function removeListener(_0x90d8x6,_0x90d8x7){return function(){UserEvents[_0x5872[13]](_0x90d8x6,_0x90d8x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserEvents = require('./user.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user:' + event, socket); + + UserEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + if (doc.role === 'user' || doc.role === 'admin') { + socket.emit(event, doc); + } + }; +} + +function removeListener(event, listener) { + return function() { + UserEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_chat_queue/index.js b/server/api/user_has_chat_queue/index.js index 1a6d022..bce94e7 100644 --- a/server/api/user_has_chat_queue/index.js +++ b/server/api/user_has_chat_queue/index.js @@ -1 +1,15 @@ -var _0x6fd6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x6fd6[0];var express=require(_0x6fd6[1]);var controller=require(_0x6fd6[2]);var router=express.Router();router[_0x6fd6[5]](_0x6fd6[3],controller[_0x6fd6[4]]);router[_0x6fd6[5]](_0x6fd6[6],controller[_0x6fd6[7]]);router[_0x6fd6[9]](_0x6fd6[3],controller[_0x6fd6[8]]);router[_0x6fd6[11]](_0x6fd6[6],controller[_0x6fd6[10]]);router[_0x6fd6[12]](_0x6fd6[6],controller[_0x6fd6[10]]);router[_0x6fd6[14]](_0x6fd6[6],controller[_0x6fd6[13]]);module[_0x6fd6[15]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./user_has_chat_queue.controller'); + +var router = express.Router(); + +router.get('/', controller.index); +router.get('/:id', controller.show); +router.post('/', controller.create); +router.put('/:id', controller.update); +router.patch('/:id', controller.update); +router.delete('/:id', controller.destroy); + +module.exports = router; \ No newline at end of file diff --git a/server/api/user_has_chat_queue/user_has_chat_queue.controller.js b/server/api/user_has_chat_queue/user_has_chat_queue.controller.js index 46320fa..b399892 100644 --- a/server/api/user_has_chat_queue/user_has_chat_queue.controller.js +++ b/server/api/user_has_chat_queue/user_has_chat_queue.controller.js @@ -1 +1,103 @@ -var _0xdae4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79"];_0xdae4[0];var _=require(_0xdae4[1]);var UserHasChatQueue=require(_0xdae4[3])[_0xdae4[2]];exports[_0xdae4[4]]= function(_0xb761x3,_0xb761x4){UserHasChatQueue[_0xdae4[10]](_0xb761x3[_0xdae4[9]]?{where:_0xb761x3[_0xdae4[9]]}:{})[_0xdae4[8]](function(_0xb761x6){return _0xb761x4[_0xdae4[7]](200)[_0xdae4[6]](_0xb761x6)})[_0xdae4[5]](function(_0xb761x5){return handleError(_0xb761x4,_0xb761x5)})};exports[_0xdae4[11]]= function(_0xb761x3,_0xb761x4){UserHasChatQueue[_0xdae4[15]](_0xb761x3[_0xdae4[14]][_0xdae4[13]])[_0xdae4[8]](function(_0xb761x7){if(!_0xb761x7){return _0xb761x4[_0xdae4[12]](404)};return _0xb761x4[_0xdae4[6]](_0xb761x7)})[_0xdae4[5]](function(_0xb761x5){return handleError(_0xb761x4,_0xb761x5)})};exports[_0xdae4[16]]= function(_0xb761x3,_0xb761x4){UserHasChatQueue[_0xdae4[16]](_0xb761x3[_0xdae4[17]])[_0xdae4[8]](function(_0xb761x7){return _0xb761x4[_0xdae4[7]](201)[_0xdae4[6]](_0xb761x7)})[_0xdae4[5]](function(_0xb761x5){return handleError(_0xb761x4,_0xb761x5)})};exports[_0xdae4[18]]= function(_0xb761x3,_0xb761x4){if(_0xb761x3[_0xdae4[17]][_0xdae4[13]]){delete _0xb761x3[_0xdae4[17]][_0xdae4[13]]};UserHasChatQueue[_0xdae4[21]]({where:{id:_0xb761x3[_0xdae4[14]][_0xdae4[13]]}})[_0xdae4[8]](function(_0xb761x7){if(!_0xb761x7){return _0xb761x4[_0xdae4[12]](404)};var _0xb761x8=_[_0xdae4[19]](_0xb761x7,_0xb761x3[_0xdae4[17]]);_0xb761x8[_0xdae4[20]]()[_0xdae4[8]](function(){return _0xb761x4[_0xdae4[7]](200)[_0xdae4[6]](_0xb761x7)})[_0xdae4[5]](function(_0xb761x5){return handleError(_0xb761x4,_0xb761x5)})})[_0xdae4[5]](function(_0xb761x5){return handleError(_0xb761x4,_0xb761x5)})};exports[_0xdae4[22]]= function(_0xb761x3,_0xb761x4){UserHasChatQueue[_0xdae4[21]]({where:{id:_0xb761x3[_0xdae4[14]][_0xdae4[13]]}})[_0xdae4[8]](function(_0xb761x7){if(!_0xb761x7){return _0xb761x4[_0xdae4[12]](404)};_0xb761x7[_0xdae4[22]]()[_0xdae4[8]](function(){return _0xb761x4[_0xdae4[12]](204)})[_0xdae4[5]](function(_0xb761x5){return handleError(_0xb761x4,_0xb761x5)})})[_0xdae4[5]](function(_0xb761x5){return handleError(_0xb761x4,_0xb761x5)})};function handleError(_0xb761x4,_0xb761x5){return _0xb761x4[_0xdae4[7]](500)[_0xdae4[6]](_0xb761x5)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var UserHasChatQueue = require('../../models').UserHasChatQueue; + +// Get list of userHasChatQueues +exports.index = function(req, res) { + UserHasChatQueue + .findAll(req.query ? { + where: req.query + } : {}) + .then(function(userHasChatQueues) { + return res.status(200).send(userHasChatQueues); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single userHasChatQueue +exports.show = function(req, res) { + UserHasChatQueue + .findById(req.params.id) + .then(function(userHasChatQueue) { + if (!userHasChatQueue) { + return res.sendStatus(404); + } + return res.send(userHasChatQueue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new userHasChatQueue in the DB. +exports.create = function(req, res) { + UserHasChatQueue + .create(req.body) + .then(function(userHasChatQueue) { + return res.status(201).send(userHasChatQueue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing userHasChatQueue in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + UserHasChatQueue + .find({ + where: { + id: req.params.id + } + }) + .then(function(userHasChatQueue) { + if (!userHasChatQueue) { + return res.sendStatus(404); + } + var updated = _.merge(userHasChatQueue, req.body); + updated.save() + .then(function() { + return res.status(200).send(userHasChatQueue); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a userHasChatQueue from the DB. +exports.destroy = function(req, res) { + UserHasChatQueue + .find({ + where: { + id: req.params.id + } + }) + .then(function(userHasChatQueue) { + if (!userHasChatQueue) { + return res.sendStatus(404); + } + userHasChatQueue.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/user_has_chat_queue/user_has_chat_queue.events.js b/server/api/user_has_chat_queue/user_has_chat_queue.events.js index fc05472..7289f5f 100644 --- a/server/api/user_has_chat_queue/user_has_chat_queue.events.js +++ b/server/api/user_has_chat_queue/user_has_chat_queue.events.js @@ -1 +1,36 @@ -var _0x4854=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x4854[0];const EventEmitter=require(_0x4854[1]);const UserHasChatQueue=require(_0x4854[3])[_0x4854[2]];var UserHasChatQueueEvents= new EventEmitter();UserHasChatQueueEvents[_0x4854[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x4854[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x4854[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x4854[6]};for(var e in events){var event=events[e];UserHasChatQueue[_0x4854[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xde16x8,_0xde16x9,_0xde16xa){UserHasChatQueueEvents[_0x4854[10]](event+ _0x4854[8]+ _0xde16x8[_0x4854[9]],_0xde16x8);UserHasChatQueueEvents[_0x4854[10]](event,_0xde16x8);_0xde16xa(null)}}module[_0x4854[11]]= UserHasChatQueueEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasChatQueue = require('../../models').UserHasChatQueue; + +var UserHasChatQueueEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasChatQueueEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasChatQueue.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasChatQueueEvents.emit(event + ':' + doc._id, doc); + UserHasChatQueueEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasChatQueueEvents; diff --git a/server/api/user_has_chat_queue/user_has_chat_queue.socket.js b/server/api/user_has_chat_queue/user_has_chat_queue.socket.js index 722efab..cbe8860 100644 --- a/server/api/user_has_chat_queue/user_has_chat_queue.socket.js +++ b/server/api/user_has_chat_queue/user_has_chat_queue.socket.js @@ -1 +1,32 @@ -var _0x8141=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x8141[0];const UserHasChatQueueEvents=require(_0x8141[1]);var events=[_0x8141[2],_0x8141[3]];exports[_0x8141[4]]= function(_0xe40fx3){for(var _0xe40fx4=0,_0xe40fx5=events[_0x8141[5]];_0xe40fx4< _0xe40fx5;_0xe40fx4++){var _0xe40fx6=events[_0xe40fx4];var _0xe40fx7=createListener(_0x8141[6]+ _0xe40fx6,_0xe40fx3);UserHasChatQueueEvents[_0x8141[7]](_0xe40fx6,_0xe40fx7);_0xe40fx3[_0x8141[7]](_0x8141[8],removeListener(_0xe40fx6,_0xe40fx7))}};function createListener(_0xe40fx6,_0xe40fx3){return function(_0xe40fx9){_0xe40fx3[_0x8141[9]](_0xe40fx6,_0xe40fx9)}}function removeListener(_0xe40fx6,_0xe40fx7){return function(){UserHasChatQueueEvents[_0x8141[10]](_0xe40fx6,_0xe40fx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasChatQueueEvents = require('./user_has_chat_queue.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_chat_queue:' + event, socket); + + UserHasChatQueueEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + UserHasChatQueueEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_chat_queue/user_has_chat_queue_permit.events.js b/server/api/user_has_chat_queue/user_has_chat_queue_permit.events.js index 2faf7f3..985d823 100644 --- a/server/api/user_has_chat_queue/user_has_chat_queue_permit.events.js +++ b/server/api/user_has_chat_queue/user_has_chat_queue_permit.events.js @@ -1 +1,35 @@ -var _0xbf94=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65\x50\x65\x72\x6D\x69\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xbf94[0];const EventEmitter=require(_0xbf94[1]);const UserHasChatQueuePermit=require(_0xbf94[3])[_0xbf94[2]];var UserHasChatQueuePermitEvents= new EventEmitter();UserHasChatQueuePermitEvents[_0xbf94[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xbf94[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xbf94[6]};for(var e in events){var event=events[e];UserHasChatQueuePermit[_0xbf94[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xc2d7x8,_0xc2d7x9,_0xc2d7xa){UserHasChatQueuePermitEvents[_0xbf94[10]](event+ _0xbf94[8]+ _0xc2d7x8[_0xbf94[9]],_0xc2d7x8);UserHasChatQueuePermitEvents[_0xbf94[10]](event,_0xc2d7x8);_0xc2d7xa(null)}}module[_0xbf94[11]]= UserHasChatQueuePermitEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasChatQueuePermit = require('../../models').UserHasChatQueuePermit; + +var UserHasChatQueuePermitEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasChatQueuePermitEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasChatQueuePermit.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasChatQueuePermitEvents.emit(event + ':' + doc._id, doc); + UserHasChatQueuePermitEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasChatQueuePermitEvents; diff --git a/server/api/user_has_chat_queue/user_has_chat_queue_permit.socket.js b/server/api/user_has_chat_queue/user_has_chat_queue_permit.socket.js index 5f13226..4ffea53 100644 --- a/server/api/user_has_chat_queue/user_has_chat_queue_permit.socket.js +++ b/server/api/user_has_chat_queue/user_has_chat_queue_permit.socket.js @@ -1 +1,34 @@ -var _0x7d97=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x75\x73\x65\x72\x49\x64","\x55\x73\x65\x72\x69\x64","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x3A\x63\x68\x61\x6E\x67\x65","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x7d97[0];const UserHasChatQueuePermitEvents=require(_0x7d97[1]);var events=[_0x7d97[2],_0x7d97[3]];exports[_0x7d97[4]]= function(_0x5bcdx3){for(var _0x5bcdx4=0,_0x5bcdx5=events[_0x7d97[5]];_0x5bcdx4< _0x5bcdx5;_0x5bcdx4++){var _0x5bcdx6=events[_0x5bcdx4];var _0x5bcdx7=createListener(_0x7d97[6]+ _0x5bcdx6,_0x5bcdx3);UserHasChatQueuePermitEvents[_0x7d97[7]](_0x5bcdx6,_0x5bcdx7);_0x5bcdx3[_0x7d97[7]](_0x7d97[8],removeListener(_0x5bcdx6,_0x5bcdx7))}};function createListener(_0x5bcdx6,_0x5bcdx3){return function(_0x5bcdx9){if(_0x5bcdx3[_0x7d97[9]]=== _0x5bcdx9[_0x7d97[10]]){_0x5bcdx3[_0x7d97[12]](_0x7d97[11])}}}function removeListener(_0x5bcdx6,_0x5bcdx7){return function(){UserHasChatQueuePermitEvents[_0x7d97[13]](_0x5bcdx6,_0x5bcdx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasChatQueuePermitEvents = require('./user_has_chat_queue_permit.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_chat_queue_permit:' + event, socket); + + UserHasChatQueuePermitEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + if (socket.userId === doc.Userid) { + socket.emit('user_has_chat_queue_permit:change'); + } + }; +} + +function removeListener(event, listener) { + return function() { + UserHasChatQueuePermitEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_chat_room/index.js b/server/api/user_has_chat_room/index.js index 93c3b79..381448d 100644 --- a/server/api/user_has_chat_room/index.js +++ b/server/api/user_has_chat_room/index.js @@ -1 +1,16 @@ -var _0xf269=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F\x3A\x75\x73\x65\x72\x49\x64\x2F\x3A\x63\x68\x61\x74\x52\x6F\x6F\x6D\x49\x64","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xf269[0];var express=require(_0xf269[1]);var controller=require(_0xf269[2]);var auth=require(_0xf269[3]);var router=express.Router();router[_0xf269[6]](_0xf269[4],controller[_0xf269[5]]);module[_0xf269[7]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./user_has_chat_room.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +// router.get('/', controller.index); +// router.get('/:id', controller.show); +// router.post('/', controller.create); +router.put('/:userId/:chatRoomId', controller.update); +// router.patch('/:id', controller.update); +// router.delete('/:id', controller.destroy); + +module.exports = router; diff --git a/server/api/user_has_chat_room/user_has_chat_room.controller.js b/server/api/user_has_chat_room/user_has_chat_room.controller.js index a9bee45..d747380 100644 --- a/server/api/user_has_chat_room/user_has_chat_room.controller.js +++ b/server/api/user_has_chat_room/user_has_chat_room.controller.js @@ -1 +1,96 @@ -var _0xc0af=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x75\x73\x65\x72\x49\x64","\x63\x68\x61\x74\x52\x6F\x6F\x6D\x49\x64","\x66\x69\x6E\x64\x4F\x6E\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xc0af[0];var _=require(_0xc0af[1]);var UserHasChatRoom=require(_0xc0af[3])[_0xc0af[2]];exports[_0xc0af[4]]= function(_0xe883x3,_0xe883x4){UserHasChatRoom[_0xc0af[9]]()[_0xc0af[8]](function(_0xe883x6){return _0xe883x4[_0xc0af[7]](200)[_0xc0af[6]](_0xe883x6)})[_0xc0af[5]](function(_0xe883x5){return handleError(_0xe883x4,_0xe883x5)})};exports[_0xc0af[10]]= function(_0xe883x3,_0xe883x4){UserHasChatRoom[_0xc0af[14]](_0xe883x3[_0xc0af[13]][_0xc0af[12]])[_0xc0af[8]](function(_0xe883x7){if(!_0xe883x7){return _0xe883x4[_0xc0af[11]](404)};return _0xe883x4[_0xc0af[6]](_0xe883x7)})[_0xc0af[5]](function(_0xe883x5){return handleError(_0xe883x4,_0xe883x5)})};exports[_0xc0af[15]]= function(_0xe883x3,_0xe883x4){UserHasChatRoom[_0xc0af[15]](_0xe883x3[_0xc0af[16]])[_0xc0af[8]](function(_0xe883x7){return _0xe883x4[_0xc0af[7]](201)[_0xc0af[6]](_0xe883x7)})[_0xc0af[5]](function(_0xe883x5){return handleError(_0xe883x4,_0xe883x5)})};exports[_0xc0af[17]]= function(_0xe883x3,_0xe883x4){UserHasChatRoom[_0xc0af[21]]({where:{UserId:_0xe883x3[_0xc0af[13]][_0xc0af[19]],ChatRoomId:_0xe883x3[_0xc0af[13]][_0xc0af[20]]},limit:1})[_0xc0af[8]](function(_0xe883x7){if(!_0xe883x7){return _0xe883x4[_0xc0af[11]](404)};_0xe883x7[_0xc0af[18]](_0xe883x3[_0xc0af[16]])[_0xc0af[8]](function(){return _0xe883x4[_0xc0af[7]](200)[_0xc0af[6]](_0xe883x7)})[_0xc0af[5]](function(_0xe883x5){return handleError(_0xe883x4,_0xe883x5)})})[_0xc0af[5]](function(_0xe883x5){return handleError(_0xe883x4,_0xe883x5)})};exports[_0xc0af[22]]= function(_0xe883x3,_0xe883x4){UserHasChatRoom[_0xc0af[14]](_0xe883x3[_0xc0af[13]][_0xc0af[12]])[_0xc0af[8]](function(_0xe883x7){if(!_0xe883x7){return _0xe883x4[_0xc0af[11]](404)};_0xe883x7[_0xc0af[22]]()[_0xc0af[8]](function(){return _0xe883x4[_0xc0af[11]](204)})[_0xc0af[5]](function(_0xe883x5){return handleError(_0xe883x4,_0xe883x5)})})[_0xc0af[5]](function(_0xe883x5){return handleError(_0xe883x4,_0xe883x5)})};function handleError(_0xe883x4,_0xe883x5){return _0xe883x4[_0xc0af[7]](500)[_0xc0af[6]](_0xe883x5)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var UserHasChatRoom = require('../../models').UserHasChatRoom; + +// Get list of user_has_chat_rooms +exports.index = function(req, res) { + UserHasChatRoom + .findAll() + .then(function (user_has_chat_rooms) { + return res.status(200).send(user_has_chat_rooms); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single user_has_chat_room +exports.show = function(req, res) { + UserHasChatRoom + .findById(req.params.id) + .then(function (user_has_chat_room) { + if(!user_has_chat_room) { return res.sendStatus(404); } + return res.send(user_has_chat_room); + }) + .catch(function(err){ + return handleError(res, err); + }); +}; + +// Creates a new user_has_chat_room in the DB. +exports.create = function(req, res) { + + UserHasChatRoom + .create(req.body) + .then(function(user_has_chat_room) { + return res.status(201).send(user_has_chat_room); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing user_has_chat_room in the DB. +exports.update = function(req, res) { + + UserHasChatRoom + .findOne({ + where: { + UserId: req.params.userId, + ChatRoomId: req.params.chatRoomId + }, + limit: 1 + }) + .then(function (user_has_chat_room) { + if (!user_has_chat_room) { + return res.sendStatus(404); + } + + user_has_chat_room + .updateAttributes(req.body) + .then(function () { + return res.status(200).send(user_has_chat_room); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a user_has_chat_room from the DB. +exports.destroy = function(req, res) { + + UserHasChatRoom + .findById(req.params.id) + .then(function (user_has_chat_room) { + if(!user_has_chat_room) { return res.sendStatus(404); } + user_has_chat_room.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/user_has_chat_room/user_has_chat_room.events.js b/server/api/user_has_chat_room/user_has_chat_room.events.js index b75d5aa..619a0ae 100644 --- a/server/api/user_has_chat_room/user_has_chat_room.events.js +++ b/server/api/user_has_chat_room/user_has_chat_room.events.js @@ -1 +1,36 @@ -var _0xf5ba=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xf5ba[0];const EventEmitter=require(_0xf5ba[1]);const UserHasChatRoom=require(_0xf5ba[3])[_0xf5ba[2]];var UserHasChatRoomEvents= new EventEmitter();UserHasChatRoomEvents[_0xf5ba[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xf5ba[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xf5ba[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xf5ba[6]};for(var e in events){var event=events[e];UserHasChatRoom[_0xf5ba[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x4caex8,_0x4caex9,_0x4caexa){UserHasChatRoomEvents[_0xf5ba[10]](event+ _0xf5ba[8]+ _0x4caex8[_0xf5ba[9]],_0x4caex8);UserHasChatRoomEvents[_0xf5ba[10]](event,_0x4caex8);_0x4caexa(null)}}module[_0xf5ba[11]]= UserHasChatRoomEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasChatRoom = require('../../models').UserHasChatRoom; + +var UserHasChatRoomEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasChatRoomEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasChatRoom.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasChatRoomEvents.emit(event + ':' + doc._id, doc); + UserHasChatRoomEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasChatRoomEvents; diff --git a/server/api/user_has_chat_room/user_has_chat_room.socket.js b/server/api/user_has_chat_room/user_has_chat_room.socket.js index e1e63d9..20d7dd6 100644 --- a/server/api/user_has_chat_room/user_has_chat_room.socket.js +++ b/server/api/user_has_chat_room/user_has_chat_room.socket.js @@ -1 +1,60 @@ -var _0x7b67=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x2E\x65\x76\x65\x6E\x74\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x75\x73\x65\x72\x49\x64","\x69\x64","\x65\x6D\x69\x74","\x66\x6F\x72\x45\x61\x63\x68","\x55\x73\x65\x72\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x3A\x73\x61\x76\x65","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x7b67[0];const UserHasChatRoomEvents=require(_0x7b67[1]);const ChatRoom=require(_0x7b67[3])[_0x7b67[2]];const User=require(_0x7b67[3])[_0x7b67[4]];var events=[_0x7b67[5],_0x7b67[6]];exports[_0x7b67[7]]= function(_0x2f4ex5){for(var _0x2f4ex6=0,_0x2f4ex7=events[_0x7b67[8]];_0x2f4ex6< _0x2f4ex7;_0x2f4ex6++){var _0x2f4ex8=events[_0x2f4ex6];var _0x2f4ex9=createListener(_0x7b67[9]+ _0x2f4ex8,_0x2f4ex5);UserHasChatRoomEvents[_0x7b67[10]](_0x2f4ex8,_0x2f4ex9);_0x2f4ex5[_0x7b67[10]](_0x7b67[11],removeListener(_0x2f4ex8,_0x2f4ex9))}};function createListener(_0x2f4ex8,_0x2f4ex5){return function(_0x2f4exb){switch(_0x2f4ex8){case _0x7b67[21]:return ChatRoom[_0x7b67[20]](_0x2f4exb.ChatRoomId,{include:[{model:User,attributes:[_0x7b67[15]]}]})[_0x7b67[19]](function(_0x2f4exd){_0x2f4exd[_0x7b67[18]][_0x7b67[17]](function(_0x2f4exe){if(_0x2f4ex5[_0x7b67[14]]== _0x2f4exe[_0x7b67[15]]){_0x2f4ex5[_0x7b67[16]](_0x2f4ex8,_0x2f4exb)}})})[_0x7b67[13]](function(_0x2f4exc){console[_0x7b67[12]](_0x2f4exc)});case _0x7b67[22]:_0x2f4ex5[_0x7b67[16]](_0x2f4ex8,_0x2f4exb);break;default:}}}function removeListener(_0x2f4ex8,_0x2f4ex9){return function(){UserHasChatRoomEvents[_0x7b67[23]](_0x2f4ex8,_0x2f4ex9)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasChatRoomEvents = require('./user_has_chat_room.events'); +const ChatRoom = require('../../models').ChatRoom; +const User = require('../../models').User; + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_chat_room:' + event, socket); + + UserHasChatRoomEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'user_has_chat_room:save': + return ChatRoom + .findById(doc.ChatRoomId, { + include: [{ + model: User, + attributes: ['id'] + }] + }) + .then(function(chatRoom) { + chatRoom.Users.forEach(function(user) { + if (socket.userId == user.id) { + socket.emit(event, doc); + } + }); + }) + .catch(function(err) { + console.error(err); + }); + + case 'user_has_chat_room:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + UserHasChatRoomEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_fax_queue/index.js b/server/api/user_has_fax_queue/index.js index 155249a..5805e3d 100644 --- a/server/api/user_has_fax_queue/index.js +++ b/server/api/user_has_fax_queue/index.js @@ -1 +1,15 @@ -var _0x164f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x164f[0];var express=require(_0x164f[1]);var controller=require(_0x164f[2]);var router=express.Router();router[_0x164f[5]](_0x164f[3],controller[_0x164f[4]]);router[_0x164f[5]](_0x164f[6],controller[_0x164f[7]]);router[_0x164f[9]](_0x164f[3],controller[_0x164f[8]]);router[_0x164f[11]](_0x164f[6],controller[_0x164f[10]]);router[_0x164f[12]](_0x164f[6],controller[_0x164f[10]]);router[_0x164f[14]](_0x164f[6],controller[_0x164f[13]]);module[_0x164f[15]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./user_has_fax_queue.controller'); + +var router = express.Router(); + +router.get('/', controller.index); +router.get('/:id', controller.show); +router.post('/', controller.create); +router.put('/:id', controller.update); +router.patch('/:id', controller.update); +router.delete('/:id', controller.destroy); + +module.exports = router; \ No newline at end of file diff --git a/server/api/user_has_fax_queue/user_has_fax_queue.controller.js b/server/api/user_has_fax_queue/user_has_fax_queue.controller.js index a20241c..f92e570 100644 --- a/server/api/user_has_fax_queue/user_has_fax_queue.controller.js +++ b/server/api/user_has_fax_queue/user_has_fax_queue.controller.js @@ -1 +1,103 @@ -var _0x7ce0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x46\x61\x78\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79"];_0x7ce0[0];var _=require(_0x7ce0[1]);var UserHasFaxQueue=require(_0x7ce0[3])[_0x7ce0[2]];exports[_0x7ce0[4]]= function(_0xc79bx3,_0xc79bx4){UserHasFaxQueue[_0x7ce0[10]](_0xc79bx3[_0x7ce0[9]]?{where:_0xc79bx3[_0x7ce0[9]]}:{})[_0x7ce0[8]](function(_0xc79bx6){return _0xc79bx4[_0x7ce0[7]](200)[_0x7ce0[6]](_0xc79bx6)})[_0x7ce0[5]](function(_0xc79bx5){return handleError(_0xc79bx4,_0xc79bx5)})};exports[_0x7ce0[11]]= function(_0xc79bx3,_0xc79bx4){UserHasFaxQueue[_0x7ce0[15]](_0xc79bx3[_0x7ce0[14]][_0x7ce0[13]])[_0x7ce0[8]](function(_0xc79bx7){if(!_0xc79bx7){return _0xc79bx4[_0x7ce0[12]](404)};return _0xc79bx4[_0x7ce0[6]](_0xc79bx7)})[_0x7ce0[5]](function(_0xc79bx5){return handleError(_0xc79bx4,_0xc79bx5)})};exports[_0x7ce0[16]]= function(_0xc79bx3,_0xc79bx4){UserHasFaxQueue[_0x7ce0[16]](_0xc79bx3[_0x7ce0[17]])[_0x7ce0[8]](function(_0xc79bx7){return _0xc79bx4[_0x7ce0[7]](201)[_0x7ce0[6]](_0xc79bx7)})[_0x7ce0[5]](function(_0xc79bx5){return handleError(_0xc79bx4,_0xc79bx5)})};exports[_0x7ce0[18]]= function(_0xc79bx3,_0xc79bx4){if(_0xc79bx3[_0x7ce0[17]][_0x7ce0[13]]){delete _0xc79bx3[_0x7ce0[17]][_0x7ce0[13]]};UserHasFaxQueue[_0x7ce0[21]]({where:{id:_0xc79bx3[_0x7ce0[14]][_0x7ce0[13]]}})[_0x7ce0[8]](function(_0xc79bx7){if(!_0xc79bx7){return _0xc79bx4[_0x7ce0[12]](404)};var _0xc79bx8=_[_0x7ce0[19]](_0xc79bx7,_0xc79bx3[_0x7ce0[17]]);_0xc79bx8[_0x7ce0[20]]()[_0x7ce0[8]](function(){return _0xc79bx4[_0x7ce0[7]](200)[_0x7ce0[6]](_0xc79bx7)})[_0x7ce0[5]](function(_0xc79bx5){return handleError(_0xc79bx4,_0xc79bx5)})})[_0x7ce0[5]](function(_0xc79bx5){return handleError(_0xc79bx4,_0xc79bx5)})};exports[_0x7ce0[22]]= function(_0xc79bx3,_0xc79bx4){UserHasFaxQueue[_0x7ce0[21]]({where:{id:_0xc79bx3[_0x7ce0[14]][_0x7ce0[13]]}})[_0x7ce0[8]](function(_0xc79bx7){if(!_0xc79bx7){return _0xc79bx4[_0x7ce0[12]](404)};_0xc79bx7[_0x7ce0[22]]()[_0x7ce0[8]](function(){return _0xc79bx4[_0x7ce0[12]](204)})[_0x7ce0[5]](function(_0xc79bx5){return handleError(_0xc79bx4,_0xc79bx5)})})[_0x7ce0[5]](function(_0xc79bx5){return handleError(_0xc79bx4,_0xc79bx5)})};function handleError(_0xc79bx4,_0xc79bx5){return _0xc79bx4[_0x7ce0[7]](500)[_0x7ce0[6]](_0xc79bx5)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var UserHasFaxQueue = require('../../models').UserHasFaxQueue; + +// Get list of user_has_fax_queues +exports.index = function(req, res) { + UserHasFaxQueue + .findAll(req.query ? { + where: req.query + } : {}) + .then(function(user_has_fax_queues) { + return res.status(200).send(user_has_fax_queues); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single user_has_fax_queue +exports.show = function(req, res) { + UserHasFaxQueue + .findById(req.params.id) + .then(function(user_has_fax_queue) { + if (!user_has_fax_queue) { + return res.sendStatus(404); + } + return res.send(user_has_fax_queue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new user_has_fax_queue in the DB. +exports.create = function(req, res) { + UserHasFaxQueue + .create(req.body) + .then(function(user_has_fax_queue) { + return res.status(201).send(user_has_fax_queue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing user_has_fax_queue in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + UserHasFaxQueue + .find({ + where: { + id: req.params.id + } + }) + .then(function(user_has_fax_queue) { + if (!user_has_fax_queue) { + return res.sendStatus(404); + } + var updated = _.merge(user_has_fax_queue, req.body); + updated.save() + .then(function() { + return res.status(200).send(user_has_fax_queue); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a user_has_fax_queue from the DB. +exports.destroy = function(req, res) { + UserHasFaxQueue + .find({ + where: { + id: req.params.id + } + }) + .then(function(user_has_fax_queue) { + if (!user_has_fax_queue) { + return res.sendStatus(404); + } + user_has_fax_queue.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/user_has_fax_queue/user_has_fax_queue.events.js b/server/api/user_has_fax_queue/user_has_fax_queue.events.js index ef39eed..081e428 100644 --- a/server/api/user_has_fax_queue/user_has_fax_queue.events.js +++ b/server/api/user_has_fax_queue/user_has_fax_queue.events.js @@ -1 +1,36 @@ -var _0x2de8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x46\x61\x78\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x2de8[0];const EventEmitter=require(_0x2de8[1]);const UserHasFaxQueue=require(_0x2de8[3])[_0x2de8[2]];var UserHasFaxQueueEvents= new EventEmitter();UserHasFaxQueueEvents[_0x2de8[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x2de8[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x2de8[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x2de8[6]};for(var e in events){var event=events[e];UserHasFaxQueue[_0x2de8[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xb8aax8,_0xb8aax9,_0xb8aaxa){UserHasFaxQueueEvents[_0x2de8[10]](event+ _0x2de8[8]+ _0xb8aax8[_0x2de8[9]],_0xb8aax8);UserHasFaxQueueEvents[_0x2de8[10]](event,_0xb8aax8);_0xb8aaxa(null)}}module[_0x2de8[11]]= UserHasFaxQueueEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasFaxQueue = require('../../models').UserHasFaxQueue; + +var UserHasFaxQueueEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasFaxQueueEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasFaxQueue.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasFaxQueueEvents.emit(event + ':' + doc._id, doc); + UserHasFaxQueueEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasFaxQueueEvents; diff --git a/server/api/user_has_fax_queue/user_has_fax_queue.socket.js b/server/api/user_has_fax_queue/user_has_fax_queue.socket.js index 1fb1eeb..93b3bcc 100644 --- a/server/api/user_has_fax_queue/user_has_fax_queue.socket.js +++ b/server/api/user_has_fax_queue/user_has_fax_queue.socket.js @@ -1 +1,32 @@ -var _0xab6f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xab6f[0];const UserHasFaxQueueEvents=require(_0xab6f[1]);var events=[_0xab6f[2],_0xab6f[3]];exports[_0xab6f[4]]= function(_0x6452x3){for(var _0x6452x4=0,_0x6452x5=events[_0xab6f[5]];_0x6452x4< _0x6452x5;_0x6452x4++){var _0x6452x6=events[_0x6452x4];var _0x6452x7=createListener(_0xab6f[6]+ _0x6452x6,_0x6452x3);UserHasFaxQueueEvents[_0xab6f[7]](_0x6452x6,_0x6452x7);_0x6452x3[_0xab6f[7]](_0xab6f[8],removeListener(_0x6452x6,_0x6452x7))}};function createListener(_0x6452x6,_0x6452x3){return function(_0x6452x9){_0x6452x3[_0xab6f[9]](_0x6452x6,_0x6452x9)}}function removeListener(_0x6452x6,_0x6452x7){return function(){UserHasFaxQueueEvents[_0xab6f[10]](_0x6452x6,_0x6452x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasFaxQueueEvents = require('./user_has_fax_queue.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_fax_queue:' + event, socket); + + UserHasFaxQueueEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + UserHasFaxQueueEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_fax_queue/user_has_fax_queue_permit.events.js b/server/api/user_has_fax_queue/user_has_fax_queue_permit.events.js index 6dc7249..67646f7 100644 --- a/server/api/user_has_fax_queue/user_has_fax_queue_permit.events.js +++ b/server/api/user_has_fax_queue/user_has_fax_queue_permit.events.js @@ -1 +1,35 @@ -var _0xcb9d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x46\x61\x78\x51\x75\x65\x75\x65\x50\x65\x72\x6D\x69\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xcb9d[0];const EventEmitter=require(_0xcb9d[1]);const UserHasFaxQueuePermit=require(_0xcb9d[3])[_0xcb9d[2]];var UserHasFaxQueuePermitEvents= new EventEmitter();UserHasFaxQueuePermitEvents[_0xcb9d[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xcb9d[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xcb9d[6]};for(var e in events){var event=events[e];UserHasFaxQueuePermit[_0xcb9d[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x2a99x8,_0x2a99x9,_0x2a99xa){UserHasFaxQueuePermitEvents[_0xcb9d[10]](event+ _0xcb9d[8]+ _0x2a99x8[_0xcb9d[9]],_0x2a99x8);UserHasFaxQueuePermitEvents[_0xcb9d[10]](event,_0x2a99x8);_0x2a99xa(null)}}module[_0xcb9d[11]]= UserHasFaxQueuePermitEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasFaxQueuePermit = require('../../models').UserHasFaxQueuePermit; + +var UserHasFaxQueuePermitEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasFaxQueuePermitEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasFaxQueuePermit.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasFaxQueuePermitEvents.emit(event + ':' + doc._id, doc); + UserHasFaxQueuePermitEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasFaxQueuePermitEvents; diff --git a/server/api/user_has_fax_queue/user_has_fax_queue_permit.socket.js b/server/api/user_has_fax_queue/user_has_fax_queue_permit.socket.js index dabe046..2a923b2 100644 --- a/server/api/user_has_fax_queue/user_has_fax_queue_permit.socket.js +++ b/server/api/user_has_fax_queue/user_has_fax_queue_permit.socket.js @@ -1 +1,34 @@ -var _0x9d1f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x75\x73\x65\x72\x49\x64","\x55\x73\x65\x72\x69\x64","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x3A\x63\x68\x61\x6E\x67\x65","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x9d1f[0];const UserHasFaxQueuePermitEvents=require(_0x9d1f[1]);var events=[_0x9d1f[2],_0x9d1f[3]];exports[_0x9d1f[4]]= function(_0x73b4x3){for(var _0x73b4x4=0,_0x73b4x5=events[_0x9d1f[5]];_0x73b4x4< _0x73b4x5;_0x73b4x4++){var _0x73b4x6=events[_0x73b4x4];var _0x73b4x7=createListener(_0x9d1f[6]+ _0x73b4x6,_0x73b4x3);UserHasFaxQueuePermitEvents[_0x9d1f[7]](_0x73b4x6,_0x73b4x7);_0x73b4x3[_0x9d1f[7]](_0x9d1f[8],removeListener(_0x73b4x6,_0x73b4x7))}};function createListener(_0x73b4x6,_0x73b4x3){return function(_0x73b4x9){if(_0x73b4x3[_0x9d1f[9]]=== _0x73b4x9[_0x9d1f[10]]){_0x73b4x3[_0x9d1f[12]](_0x9d1f[11])}}}function removeListener(_0x73b4x6,_0x73b4x7){return function(){UserHasFaxQueuePermitEvents[_0x9d1f[13]](_0x73b4x6,_0x73b4x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasFaxQueuePermitEvents = require('./user_has_fax_queue_permit.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_fax_queue_permit:' + event, socket); + + UserHasFaxQueuePermitEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + if (socket.userId === doc.Userid) { + socket.emit('user_has_fax_queue_permit:change'); + } + }; +} + +function removeListener(event, listener) { + return function() { + UserHasFaxQueuePermitEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_list/index.js b/server/api/user_has_list/index.js index b00c58b..ee1b9af 100644 --- a/server/api/user_has_list/index.js +++ b/server/api/user_has_list/index.js @@ -1 +1,15 @@ -var _0x200b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6C\x69\x73\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x200b[0];var express=require(_0x200b[1]);var controller=require(_0x200b[2]);var router=express.Router();router[_0x200b[5]](_0x200b[3],controller[_0x200b[4]]);router[_0x200b[5]](_0x200b[6],controller[_0x200b[7]]);router[_0x200b[9]](_0x200b[3],controller[_0x200b[8]]);router[_0x200b[11]](_0x200b[6],controller[_0x200b[10]]);router[_0x200b[12]](_0x200b[6],controller[_0x200b[10]]);router[_0x200b[14]](_0x200b[6],controller[_0x200b[13]]);module[_0x200b[15]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./user_has_list.controller'); + +var router = express.Router(); + +router.get('/', controller.index); +router.get('/:id', controller.show); +router.post('/', controller.create); +router.put('/:id', controller.update); +router.patch('/:id', controller.update); +router.delete('/:id', controller.destroy); + +module.exports = router; diff --git a/server/api/user_has_list/user_has_list.controller.js b/server/api/user_has_list/user_has_list.controller.js index 0093eb8..f0a66dd 100644 --- a/server/api/user_has_list/user_has_list.controller.js +++ b/server/api/user_has_list/user_has_list.controller.js @@ -1 +1,98 @@ -var _0x5914=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x4C\x69\x73\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x6C\x6F\x67","\x65\x72\x72\x6F\x72","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x5914[0];var _=require(_0x5914[1]);var UserHasList=require(_0x5914[3])[_0x5914[2]];exports[_0x5914[4]]= function(_0x210ex3,_0x210ex4){UserHasList[_0x5914[10]](_0x210ex3[_0x5914[9]]?{where:_0x210ex3[_0x5914[9]]}:{})[_0x5914[8]](function(_0x210ex6){return _0x210ex4[_0x5914[7]](200)[_0x5914[6]](_0x210ex6)})[_0x5914[5]](function(_0x210ex5){return handleError(_0x210ex4,_0x210ex5)})};exports[_0x5914[11]]= function(_0x210ex3,_0x210ex4){UserHasList[_0x5914[15]](_0x210ex3[_0x5914[14]][_0x5914[13]])[_0x5914[8]](function(_0x210ex7){if(!_0x210ex7){return _0x210ex4[_0x5914[12]](404)};return _0x210ex4[_0x5914[6]](_0x210ex7)})[_0x5914[5]](function(_0x210ex5){return handleError(_0x210ex4,_0x210ex5)})};exports[_0x5914[16]]= function(_0x210ex3,_0x210ex4,_0x210ex8){console[_0x5914[18]](_0x210ex3[_0x5914[17]]);UserHasList[_0x5914[16]](_0x210ex3[_0x5914[17]])[_0x5914[8]](function(_0x210ex7){return _0x210ex4[_0x5914[7]](201)[_0x5914[6]](_0x210ex7)})[_0x5914[5]](function(_0x210ex5){console[_0x5914[19]](_0x210ex5);return _0x210ex8(_0x210ex5)})};exports[_0x5914[20]]= function(_0x210ex3,_0x210ex4){if(_0x210ex3[_0x5914[17]][_0x5914[13]]){delete _0x210ex3[_0x5914[17]][_0x5914[13]]};UserHasList[_0x5914[15]](_0x210ex3[_0x5914[14]][_0x5914[13]])[_0x5914[8]](function(_0x210ex7){if(!_0x210ex7){return _0x210ex4[_0x5914[12]](404)};var _0x210ex9=_[_0x5914[21]](_0x210ex7,_0x210ex3[_0x5914[17]]);_0x210ex9[_0x5914[22]]()[_0x5914[8]](function(){return _0x210ex4[_0x5914[7]](200)[_0x5914[6]](_0x210ex7)})[_0x5914[5]](function(_0x210ex5){return handleError(_0x210ex4,_0x210ex5)})})[_0x5914[5]](function(_0x210ex5){return handleError(_0x210ex4,_0x210ex5)})};exports[_0x5914[23]]= function(_0x210ex3,_0x210ex4){UserHasList[_0x5914[15]](_0x210ex3[_0x5914[14]][_0x5914[13]])[_0x5914[8]](function(_0x210ex7){if(!_0x210ex7){return _0x210ex4[_0x5914[12]](404)};_0x210ex7[_0x5914[23]]()[_0x5914[8]](function(){return _0x210ex4[_0x5914[12]](204)})[_0x5914[5]](function(_0x210ex5){return handleError(_0x210ex4,_0x210ex5)})})[_0x5914[5]](function(_0x210ex5){return handleError(_0x210ex4,_0x210ex5)})};function handleError(_0x210ex4,_0x210ex5){return _0x210ex4[_0x5914[7]](500)[_0x5914[6]](_0x210ex5)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var UserHasList = require('../../models').UserHasList; + +// Get list of user_has_voice_queues +exports.index = function(req, res) { + UserHasList + .findAll(req.query ? { + where: req.query + } : {}) + .then(function(user_has_voice_queues) { + return res.status(200).send(user_has_voice_queues); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single userHasList +exports.show = function(req, res) { + UserHasList + .findById(req.params.id) + .then(function(userHasList) { + if (!userHasList) { + return res.sendStatus(404); + } + return res.send(userHasList); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new userHasList in the DB. +exports.create = function(req, res, next) { + console.log(req.body); + UserHasList + .create(req.body) + .then(function(userHasList) { + return res.status(201).send(userHasList); + }) + .catch(function(err) { + console.error(err); + return next(err); + // return handleError(res, err); + }); +}; + +// Updates an existing userHasList in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + UserHasList + .findById(req.params.id) + .then(function(userHasList) { + if (!userHasList) { + return res.sendStatus(404); + } + var updated = _.merge(userHasList, req.body); + updated.save() + .then(function() { + return res.status(200).send(userHasList); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a userHasList from the DB. +exports.destroy = function(req, res) { + UserHasList + .findById(req.params.id) + .then(function(userHasList) { + if (!userHasList) { + return res.sendStatus(404); + } + userHasList.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/user_has_list/user_has_list.events.js b/server/api/user_has_list/user_has_list.events.js index dd0a180..d0988e3 100644 --- a/server/api/user_has_list/user_has_list.events.js +++ b/server/api/user_has_list/user_has_list.events.js @@ -1 +1,36 @@ -var _0xc785=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x4C\x69\x73\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xc785[0];const EventEmitter=require(_0xc785[1]);const UserHasList=require(_0xc785[3])[_0xc785[2]];var UserHasListEvents= new EventEmitter();UserHasListEvents[_0xc785[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xc785[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xc785[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xc785[6]};for(var e in events){var event=events[e];UserHasList[_0xc785[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x8878x8,_0x8878x9,_0x8878xa){UserHasListEvents[_0xc785[10]](event+ _0xc785[8]+ _0x8878x8[_0xc785[9]],_0x8878x8);UserHasListEvents[_0xc785[10]](event,_0x8878x8);_0x8878xa(null)}}module[_0xc785[11]]= UserHasListEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasList = require('../../models').UserHasList; + +var UserHasListEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasListEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasList.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasListEvents.emit(event + ':' + doc._id, doc); + UserHasListEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasListEvents; diff --git a/server/api/user_has_list/user_has_list.socket.js b/server/api/user_has_list/user_has_list.socket.js index 2845b31..505a97b 100644 --- a/server/api/user_has_list/user_has_list.socket.js +++ b/server/api/user_has_list/user_has_list.socket.js @@ -1 +1,32 @@ -var _0x4a5c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6C\x69\x73\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6C\x69\x73\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x4a5c[0];const UserHasListEvents=require(_0x4a5c[1]);var events=[_0x4a5c[2],_0x4a5c[3]];exports[_0x4a5c[4]]= function(_0xa853x3){for(var _0xa853x4=0,_0xa853x5=events[_0x4a5c[5]];_0xa853x4< _0xa853x5;_0xa853x4++){var _0xa853x6=events[_0xa853x4];var _0xa853x7=createListener(_0x4a5c[6]+ _0xa853x6,_0xa853x3);UserHasListEvents[_0x4a5c[7]](_0xa853x6,_0xa853x7);_0xa853x3[_0x4a5c[7]](_0x4a5c[8],removeListener(_0xa853x6,_0xa853x7))}};function createListener(_0xa853x6,_0xa853x3){return function(_0xa853x9){_0xa853x3[_0x4a5c[9]](_0xa853x6,_0xa853x9)}}function removeListener(_0xa853x6,_0xa853x7){return function(){UserHasListEvents[_0x4a5c[10]](_0xa853x6,_0xa853x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasListEvents = require('./user_has_list.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_list:' + event, socket); + + UserHasListEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + UserHasListEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_mail_queue/index.js b/server/api/user_has_mail_queue/index.js index 20d3222..50b083e 100644 --- a/server/api/user_has_mail_queue/index.js +++ b/server/api/user_has_mail_queue/index.js @@ -1 +1,15 @@ -var _0x18d2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x18d2[0];var express=require(_0x18d2[1]);var controller=require(_0x18d2[2]);var router=express.Router();router[_0x18d2[5]](_0x18d2[3],controller[_0x18d2[4]]);router[_0x18d2[5]](_0x18d2[6],controller[_0x18d2[7]]);router[_0x18d2[9]](_0x18d2[3],controller[_0x18d2[8]]);router[_0x18d2[11]](_0x18d2[6],controller[_0x18d2[10]]);router[_0x18d2[12]](_0x18d2[6],controller[_0x18d2[10]]);router[_0x18d2[14]](_0x18d2[6],controller[_0x18d2[13]]);module[_0x18d2[15]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./user_has_mail_queue.controller'); + +var router = express.Router(); + +router.get('/', controller.index); +router.get('/:id', controller.show); +router.post('/', controller.create); +router.put('/:id', controller.update); +router.patch('/:id', controller.update); +router.delete('/:id', controller.destroy); + +module.exports = router; diff --git a/server/api/user_has_mail_queue/user_has_mail_queue.controller.js b/server/api/user_has_mail_queue/user_has_mail_queue.controller.js index e8c3e16..c15bc9d 100644 --- a/server/api/user_has_mail_queue/user_has_mail_queue.controller.js +++ b/server/api/user_has_mail_queue/user_has_mail_queue.controller.js @@ -1 +1,95 @@ -var _0x693d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0x693d[0];var _=require(_0x693d[1]);var UserHasMailQueue=require(_0x693d[3])[_0x693d[2]];exports[_0x693d[4]]= function(_0x7510x3,_0x7510x4){UserHasMailQueue[_0x693d[10]](_0x7510x3[_0x693d[9]]?{where:_0x7510x3[_0x693d[9]]}:{})[_0x693d[8]](function(_0x7510x6){return _0x7510x4[_0x693d[7]](200)[_0x693d[6]](_0x7510x6)})[_0x693d[5]](function(_0x7510x5){return handleError(_0x7510x4,_0x7510x5)})};exports[_0x693d[11]]= function(_0x7510x3,_0x7510x4){UserHasMailQueue[_0x693d[15]](_0x7510x3[_0x693d[14]][_0x693d[13]])[_0x693d[8]](function(_0x7510x7){if(!_0x7510x7){return _0x7510x4[_0x693d[12]](404)};return _0x7510x4[_0x693d[6]](_0x7510x7)})[_0x693d[5]](function(_0x7510x5){return handleError(_0x7510x4,_0x7510x5)})};exports[_0x693d[16]]= function(_0x7510x3,_0x7510x4){UserHasMailQueue[_0x693d[16]](_0x7510x3[_0x693d[17]])[_0x693d[8]](function(_0x7510x7){return _0x7510x4[_0x693d[7]](201)[_0x693d[6]](_0x7510x7)})[_0x693d[5]](function(_0x7510x5){return handleError(_0x7510x4,_0x7510x5)})};exports[_0x693d[18]]= function(_0x7510x3,_0x7510x4){if(_0x7510x3[_0x693d[17]][_0x693d[13]]){delete _0x7510x3[_0x693d[17]][_0x693d[13]]};UserHasMailQueue[_0x693d[15]](_0x7510x3[_0x693d[14]][_0x693d[13]])[_0x693d[8]](function(_0x7510x7){if(!_0x7510x7){return _0x7510x4[_0x693d[12]](404)};var _0x7510x8=_[_0x693d[19]](_0x7510x7,_0x7510x3[_0x693d[17]]);_0x7510x8[_0x693d[20]]()[_0x693d[8]](function(){return _0x7510x4[_0x693d[7]](200)[_0x693d[6]](_0x7510x7)})[_0x693d[5]](function(_0x7510x5){return handleError(_0x7510x4,_0x7510x5)})})[_0x693d[5]](function(_0x7510x5){return handleError(_0x7510x4,_0x7510x5)})};exports[_0x693d[21]]= function(_0x7510x3,_0x7510x4){UserHasMailQueue[_0x693d[15]](_0x7510x3[_0x693d[14]][_0x693d[13]])[_0x693d[8]](function(_0x7510x7){if(!_0x7510x7){return _0x7510x4[_0x693d[12]](404)};_0x7510x7[_0x693d[21]]()[_0x693d[8]](function(){return _0x7510x4[_0x693d[12]](204)})[_0x693d[5]](function(_0x7510x5){return handleError(_0x7510x4,_0x7510x5)})})[_0x693d[5]](function(_0x7510x5){return handleError(_0x7510x4,_0x7510x5)})};function handleError(_0x7510x4,_0x7510x5){return _0x7510x4[_0x693d[7]](500)[_0x693d[6]](_0x7510x5)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var UserHasMailQueue = require('../../models').UserHasMailQueue; + +// Get list of user_has_mail_queues +exports.index = function(req, res) { + UserHasMailQueue + .findAll(req.query ? { + where: req.query + } : {}) + .then(function(user_has_mail_queues) { + return res.status(200).send(user_has_mail_queues); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single user_has_mail_queue +exports.show = function(req, res) { + UserHasMailQueue + .findById(req.params.id) + .then(function(user_has_mail_queue) { + if (!user_has_mail_queue) { + return res.sendStatus(404); + } + return res.send(user_has_mail_queue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new user_has_mail_queue in the DB. +exports.create = function(req, res) { + UserHasMailQueue + .create(req.body) + .then(function(user_has_mail_queue) { + return res.status(201).send(user_has_mail_queue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing user_has_mail_queue in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + UserHasMailQueue + .findById(req.params.id) + .then(function(user_has_mail_queue) { + if (!user_has_mail_queue) { + return res.sendStatus(404); + } + var updated = _.merge(user_has_mail_queue, req.body); + updated.save() + .then(function() { + return res.status(200).send(user_has_mail_queue); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a user_has_mail_queue from the DB. +exports.destroy = function(req, res) { + UserHasMailQueue + .findById(req.params.id) + .then(function(user_has_mail_queue) { + if (!user_has_mail_queue) { + return res.sendStatus(404); + } + user_has_mail_queue.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/user_has_mail_queue/user_has_mail_queue.events.js b/server/api/user_has_mail_queue/user_has_mail_queue.events.js index 0f3b699..46a7c73 100644 --- a/server/api/user_has_mail_queue/user_has_mail_queue.events.js +++ b/server/api/user_has_mail_queue/user_has_mail_queue.events.js @@ -1 +1,36 @@ -var _0x10d9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x10d9[0];const EventEmitter=require(_0x10d9[1]);const UserHasMailQueue=require(_0x10d9[3])[_0x10d9[2]];var UserHasMailQueueEvents= new EventEmitter();UserHasMailQueueEvents[_0x10d9[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x10d9[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x10d9[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x10d9[6]};for(var e in events){var event=events[e];UserHasMailQueue[_0x10d9[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x813bx8,_0x813bx9,_0x813bxa){UserHasMailQueueEvents[_0x10d9[10]](event+ _0x10d9[8]+ _0x813bx8[_0x10d9[9]],_0x813bx8);UserHasMailQueueEvents[_0x10d9[10]](event,_0x813bx8);_0x813bxa(null)}}module[_0x10d9[11]]= UserHasMailQueueEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasMailQueue = require('../../models').UserHasMailQueue; + +var UserHasMailQueueEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasMailQueueEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasMailQueue.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasMailQueueEvents.emit(event + ':' + doc._id, doc); + UserHasMailQueueEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasMailQueueEvents; diff --git a/server/api/user_has_mail_queue/user_has_mail_queue.socket.js b/server/api/user_has_mail_queue/user_has_mail_queue.socket.js index d689b34..1635bbe 100644 --- a/server/api/user_has_mail_queue/user_has_mail_queue.socket.js +++ b/server/api/user_has_mail_queue/user_has_mail_queue.socket.js @@ -1 +1,32 @@ -var _0x1d15=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x1d15[0];const UserHasMailQueueEvents=require(_0x1d15[1]);var events=[_0x1d15[2],_0x1d15[3]];exports[_0x1d15[4]]= function(_0xcaa5x3){for(var _0xcaa5x4=0,_0xcaa5x5=events[_0x1d15[5]];_0xcaa5x4< _0xcaa5x5;_0xcaa5x4++){var _0xcaa5x6=events[_0xcaa5x4];var _0xcaa5x7=createListener(_0x1d15[6]+ _0xcaa5x6,_0xcaa5x3);UserHasMailQueueEvents[_0x1d15[7]](_0xcaa5x6,_0xcaa5x7);_0xcaa5x3[_0x1d15[7]](_0x1d15[8],removeListener(_0xcaa5x6,_0xcaa5x7))}};function createListener(_0xcaa5x6,_0xcaa5x3){return function(_0xcaa5x9){_0xcaa5x3[_0x1d15[9]](_0xcaa5x6,_0xcaa5x9)}}function removeListener(_0xcaa5x6,_0xcaa5x7){return function(){UserHasMailQueueEvents[_0x1d15[10]](_0xcaa5x6,_0xcaa5x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasMailQueueEvents = require('./user_has_mail_queue.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_mail_queue:' + event, socket); + + UserHasMailQueueEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + UserHasMailQueueEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_mail_queue/user_has_mail_queue_permit.events.js b/server/api/user_has_mail_queue/user_has_mail_queue_permit.events.js index 42baffe..519ac53 100644 --- a/server/api/user_has_mail_queue/user_has_mail_queue_permit.events.js +++ b/server/api/user_has_mail_queue/user_has_mail_queue_permit.events.js @@ -1 +1,35 @@ -var _0xdcd6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x50\x65\x72\x6D\x69\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xdcd6[0];const EventEmitter=require(_0xdcd6[1]);const UserHasMailQueuePermit=require(_0xdcd6[3])[_0xdcd6[2]];var UserHasMailQueuePermitEvents= new EventEmitter();UserHasMailQueuePermitEvents[_0xdcd6[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xdcd6[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xdcd6[6]};for(var e in events){var event=events[e];UserHasMailQueuePermit[_0xdcd6[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x4647x8,_0x4647x9,_0x4647xa){UserHasMailQueuePermitEvents[_0xdcd6[10]](event+ _0xdcd6[8]+ _0x4647x8[_0xdcd6[9]],_0x4647x8);UserHasMailQueuePermitEvents[_0xdcd6[10]](event,_0x4647x8);_0x4647xa(null)}}module[_0xdcd6[11]]= UserHasMailQueuePermitEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasMailQueuePermit = require('../../models').UserHasMailQueuePermit; + +var UserHasMailQueuePermitEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasMailQueuePermitEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasMailQueuePermit.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasMailQueuePermitEvents.emit(event + ':' + doc._id, doc); + UserHasMailQueuePermitEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasMailQueuePermitEvents; diff --git a/server/api/user_has_mail_queue/user_has_mail_queue_permit.socket.js b/server/api/user_has_mail_queue/user_has_mail_queue_permit.socket.js index 22b7623..d4786d1 100644 --- a/server/api/user_has_mail_queue/user_has_mail_queue_permit.socket.js +++ b/server/api/user_has_mail_queue/user_has_mail_queue_permit.socket.js @@ -1 +1,34 @@ -var _0x32d7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x75\x73\x65\x72\x49\x64","\x55\x73\x65\x72\x69\x64","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x3A\x63\x68\x61\x6E\x67\x65","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x32d7[0];const UserHasMailQueuePermitEvents=require(_0x32d7[1]);var events=[_0x32d7[2],_0x32d7[3]];exports[_0x32d7[4]]= function(_0x9695x3){for(var _0x9695x4=0,_0x9695x5=events[_0x32d7[5]];_0x9695x4< _0x9695x5;_0x9695x4++){var _0x9695x6=events[_0x9695x4];var _0x9695x7=createListener(_0x32d7[6]+ _0x9695x6,_0x9695x3);UserHasMailQueuePermitEvents[_0x32d7[7]](_0x9695x6,_0x9695x7);_0x9695x3[_0x32d7[7]](_0x32d7[8],removeListener(_0x9695x6,_0x9695x7))}};function createListener(_0x9695x6,_0x9695x3){return function(_0x9695x9){if(_0x9695x3[_0x32d7[9]]=== _0x9695x9[_0x32d7[10]]){_0x9695x3[_0x32d7[12]](_0x32d7[11])}}}function removeListener(_0x9695x6,_0x9695x7){return function(){UserHasMailQueuePermitEvents[_0x32d7[13]](_0x9695x6,_0x9695x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasMailQueuePermitEvents = require('./user_has_mail_queue_permit.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_mail_queue_permit:' + event, socket); + + UserHasMailQueuePermitEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + if (socket.userId === doc.Userid) { + socket.emit('user_has_mail_queue_permit:change'); + } + }; +} + +function removeListener(event, listener) { + return function() { + UserHasMailQueuePermitEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_openchannel_queue/index.js b/server/api/user_has_openchannel_queue/index.js index b463217..2548a35 100644 --- a/server/api/user_has_openchannel_queue/index.js +++ b/server/api/user_has_openchannel_queue/index.js @@ -1 +1,16 @@ -var _0x2737=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x2737[0];var express=require(_0x2737[1]);var auth=require(_0x2737[2]);var controller=require(_0x2737[3]);var router=express.Router();router[_0x2737[6]](_0x2737[4],controller[_0x2737[5]]);router[_0x2737[6]](_0x2737[7],controller[_0x2737[8]]);router[_0x2737[10]](_0x2737[4],controller[_0x2737[9]]);router[_0x2737[12]](_0x2737[7],controller[_0x2737[11]]);router[_0x2737[13]](_0x2737[7],controller[_0x2737[11]]);router[_0x2737[15]](_0x2737[7],controller[_0x2737[14]]);module[_0x2737[16]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./user_has_openchannel_queue.controller'); + +var router = express.Router(); + +router.get('/', controller.index); +router.get('/:id', controller.show); +router.post('/', controller.create); +router.put('/:id', controller.update); +router.patch('/:id', controller.update); +router.delete('/:id', controller.destroy); + +module.exports = router; diff --git a/server/api/user_has_openchannel_queue/user_has_openchannel_queue.controller.js b/server/api/user_has_openchannel_queue/user_has_openchannel_queue.controller.js index e2e5666..6e3c857 100644 --- a/server/api/user_has_openchannel_queue/user_has_openchannel_queue.controller.js +++ b/server/api/user_has_openchannel_queue/user_has_openchannel_queue.controller.js @@ -1 +1,109 @@ -var _0xf09a=["\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","\x55\x73\x65\x72\x48\x61\x73\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","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xf09a[0];var _=require(_0xf09a[1]);var Util=require(_0xf09a[2]);var UserHasOpenchannelQueue=require(_0xf09a[4])[_0xf09a[3]];exports[_0xf09a[5]]= function(_0x8665x4,_0x8665x5){UserHasOpenchannelQueue[_0xf09a[11]](_0x8665x4[_0xf09a[10]]?{where:_0x8665x4[_0xf09a[10]]}:{})[_0xf09a[9]](function(_0x8665x7){return _0x8665x5[_0xf09a[8]](200)[_0xf09a[7]](_0x8665x7)})[_0xf09a[6]](function(_0x8665x6){return handleError(_0x8665x5,_0x8665x6)})};exports[_0xf09a[12]]= function(_0x8665x4,_0x8665x5){UserHasOpenchannelQueue[_0xf09a[16]](_0x8665x4[_0xf09a[15]][_0xf09a[14]])[_0xf09a[9]](function(_0x8665x7){if(!_0x8665x7){return _0x8665x5[_0xf09a[13]](404)};return _0x8665x5[_0xf09a[7]](_0x8665x7)})[_0xf09a[6]](function(_0x8665x6){return handleError(_0x8665x5,_0x8665x6)})};exports[_0xf09a[17]]= function(_0x8665x4,_0x8665x5){UserHasOpenchannelQueue[_0xf09a[17]](_0x8665x4[_0xf09a[18]])[_0xf09a[9]](function(_0x8665x7){return _0x8665x5[_0xf09a[8]](201)[_0xf09a[7]](_0x8665x7)})[_0xf09a[6]](function(_0x8665x6){return handleError(_0x8665x5,_0x8665x6)})};exports[_0xf09a[19]]= function(_0x8665x4,_0x8665x5){if(_0x8665x4[_0xf09a[18]][_0xf09a[14]]){delete _0x8665x4[_0xf09a[18]][_0xf09a[14]]};UserHasOpenchannelQueue[_0xf09a[16]](_0x8665x4[_0xf09a[15]][_0xf09a[14]])[_0xf09a[9]](function(_0x8665x8){if(!_0x8665x8){return _0x8665x5[_0xf09a[13]](404)};var _0x8665x9=_[_0xf09a[20]](_0x8665x8,_0x8665x4[_0xf09a[18]]);_0x8665x9[_0xf09a[21]]()[_0xf09a[9]](function(){return _0x8665x5[_0xf09a[8]](200)[_0xf09a[7]](_0x8665x8)})[_0xf09a[6]](function(_0x8665x6){return handleError(_0x8665x5,_0x8665x6)})})[_0xf09a[6]](function(_0x8665x6){return handleError(_0x8665x5,_0x8665x6)})};exports[_0xf09a[22]]= function(_0x8665x4,_0x8665x5){UserHasOpenchannelQueue[_0xf09a[16]](_0x8665x4[_0xf09a[15]][_0xf09a[14]])[_0xf09a[9]](function(_0x8665x8){if(!_0x8665x8){return _0x8665x5[_0xf09a[13]](404)};user_has_mail_queue[_0xf09a[22]]()[_0xf09a[9]](function(){return _0x8665x5[_0xf09a[13]](204)})[_0xf09a[6]](function(_0x8665x6){return handleError(_0x8665x5,_0x8665x6)})})[_0xf09a[6]](function(_0x8665x6){return handleError(_0x8665x5,_0x8665x6)})};function handleError(_0x8665x5,_0x8665x6){return _0x8665x5[_0xf09a[8]](500)[_0xf09a[7]](_0x8665x6)} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/openchannel/user_has_queues -> index + * POST /api/openchannel/user_has_queues -> create + * GET /api/openchannel/user_has_queues/:id -> show + * PUT /api/openchannel/user_has_queues/:id -> update + * DELETE /api/openchannel/user_has_queues/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var Util = require('../../config/util'); + +var UserHasOpenchannelQueue = require('../../models').UserHasOpenchannelQueue; + + + +// Get list of user_has_openchannel_queues +exports.index = function(req, res) { + UserHasOpenchannelQueue + .findAll(req.query ? { + where: req.query + } : {}) + .then(function(user_has_openchannel_queues) { + return res.status(200).send(user_has_openchannel_queues); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single user_has_openchannel_queues +exports.show = function(req, res) { + UserHasOpenchannelQueue + .findById(req.params.id) + .then(function(user_has_openchannel_queues) { + if (!user_has_openchannel_queues) { + return res.sendStatus(404); + } + return res.send(user_has_openchannel_queues); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new user_has_openchannel_queues in the DB. +exports.create = function(req, res) { + UserHasOpenchannelQueue + .create(req.body) + .then(function(user_has_openchannel_queues) { + return res.status(201).send(user_has_openchannel_queues); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing user_has_openchannel_queues in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + UserHasOpenchannelQueue + .findById(req.params.id) + .then(function(user_has_openchannel_queue) { + if (!user_has_openchannel_queue) { + return res.sendStatus(404); + } + var updated = _.merge(user_has_openchannel_queue, req.body); + updated.save() + .then(function() { + return res.status(200).send(user_has_openchannel_queue); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a user_has_openchannel_queues from the DB. +exports.destroy = function(req, res) { + UserHasOpenchannelQueue + .findById(req.params.id) + .then(function(user_has_openchannel_queue) { + if (!user_has_openchannel_queue) { + return res.sendStatus(404); + } + user_has_mail_queue.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/user_has_openchannel_queue/user_has_openchannel_queue.events.js b/server/api/user_has_openchannel_queue/user_has_openchannel_queue.events.js index 1420915..1be5c74 100644 --- a/server/api/user_has_openchannel_queue/user_has_openchannel_queue.events.js +++ b/server/api/user_has_openchannel_queue/user_has_openchannel_queue.events.js @@ -1 +1,36 @@ -var _0x8b80=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\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","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x8b80[0];const EventEmitter=require(_0x8b80[1]);const UserHasOpenchannelQueue=require(_0x8b80[3])[_0x8b80[2]];var UserHasOpenchannelQueueEvents= new EventEmitter();UserHasOpenchannelQueueEvents[_0x8b80[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x8b80[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x8b80[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x8b80[6]};for(var e in events){var event=events[e];UserHasOpenchannelQueue[_0x8b80[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xefafx8,_0xefafx9,_0xefafxa){UserHasOpenchannelQueueEvents[_0x8b80[10]](event+ _0x8b80[8]+ _0xefafx8[_0x8b80[9]],_0xefafx8);UserHasOpenchannelQueueEvents[_0x8b80[10]](event,_0xefafx8);_0xefafxa(null)}}module[_0x8b80[11]]= UserHasOpenchannelQueueEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasOpenchannelQueue = require('../../models').UserHasOpenchannelQueue; + +var UserHasOpenchannelQueueEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasOpenchannelQueueEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasOpenchannelQueue.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasOpenchannelQueueEvents.emit(event + ':' + doc._id, doc); + UserHasOpenchannelQueueEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasOpenchannelQueueEvents; diff --git a/server/api/user_has_openchannel_queue/user_has_openchannel_queue.socket.js b/server/api/user_has_openchannel_queue/user_has_openchannel_queue.socket.js index f8c06e2..26d8caa 100644 --- a/server/api/user_has_openchannel_queue/user_has_openchannel_queue.socket.js +++ b/server/api/user_has_openchannel_queue/user_has_openchannel_queue.socket.js @@ -1 +1,32 @@ -var _0xed62=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xed62[0];const UserHasOpenchannelQueueEvents=require(_0xed62[1]);var events=[_0xed62[2],_0xed62[3]];exports[_0xed62[4]]= function(_0x472ex3){for(var _0x472ex4=0,_0x472ex5=events[_0xed62[5]];_0x472ex4< _0x472ex5;_0x472ex4++){var _0x472ex6=events[_0x472ex4];var _0x472ex7=createListener(_0xed62[6]+ _0x472ex6,_0x472ex3);UserHasOpenchannelQueueEvents[_0xed62[7]](_0x472ex6,_0x472ex7);_0x472ex3[_0xed62[7]](_0xed62[8],removeListener(_0x472ex6,_0x472ex7))}};function createListener(_0x472ex6,_0x472ex3){return function(_0x472ex9){_0x472ex3[_0xed62[9]](_0x472ex6,_0x472ex9)}}function removeListener(_0x472ex6,_0x472ex7){return function(){UserHasOpenchannelQueueEvents[_0xed62[10]](_0x472ex6,_0x472ex7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasOpenchannelQueueEvents = require('./user_has_openchannel_queue.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_openchannel_queue:' + event, socket); + + UserHasOpenchannelQueueEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + UserHasOpenchannelQueueEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_openchannel_queue/user_has_openchannel_queue_permit.events.js b/server/api/user_has_openchannel_queue/user_has_openchannel_queue_permit.events.js index d32b8b4..0caae70 100644 --- a/server/api/user_has_openchannel_queue/user_has_openchannel_queue_permit.events.js +++ b/server/api/user_has_openchannel_queue/user_has_openchannel_queue_permit.events.js @@ -1 +1,35 @@ -var _0x615f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x50\x65\x72\x6D\x69\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x615f[0];const EventEmitter=require(_0x615f[1]);const UserHasOpenchannelQueuePermit=require(_0x615f[3])[_0x615f[2]];var UserHasOpenchannelQueuePermitEvents= new EventEmitter();UserHasOpenchannelQueuePermitEvents[_0x615f[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x615f[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x615f[6]};for(var e in events){var event=events[e];UserHasOpenchannelQueuePermit[_0x615f[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x7f27x8,_0x7f27x9,_0x7f27xa){UserHasOpenchannelQueuePermitEvents[_0x615f[10]](event+ _0x615f[8]+ _0x7f27x8[_0x615f[9]],_0x7f27x8);UserHasOpenchannelQueuePermitEvents[_0x615f[10]](event,_0x7f27x8);_0x7f27xa(null)}}module[_0x615f[11]]= UserHasOpenchannelQueuePermitEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasOpenchannelQueuePermit = require('../../models').UserHasOpenchannelQueuePermit; + +var UserHasOpenchannelQueuePermitEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasOpenchannelQueuePermitEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasOpenchannelQueuePermit.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasOpenchannelQueuePermitEvents.emit(event + ':' + doc._id, doc); + UserHasOpenchannelQueuePermitEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasOpenchannelQueuePermitEvents; diff --git a/server/api/user_has_openchannel_queue/user_has_openchannel_queue_permit.socket.js b/server/api/user_has_openchannel_queue/user_has_openchannel_queue_permit.socket.js index 028f58f..1c7289d 100644 --- a/server/api/user_has_openchannel_queue/user_has_openchannel_queue_permit.socket.js +++ b/server/api/user_has_openchannel_queue/user_has_openchannel_queue_permit.socket.js @@ -1 +1,34 @@ -var _0xd0b3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x75\x73\x65\x72\x49\x64","\x55\x73\x65\x72\x69\x64","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x3A\x63\x68\x61\x6E\x67\x65","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xd0b3[0];const UserHasOpenchannelQueuePermitEvents=require(_0xd0b3[1]);var events=[_0xd0b3[2],_0xd0b3[3]];exports[_0xd0b3[4]]= function(_0xf43bx3){for(var _0xf43bx4=0,_0xf43bx5=events[_0xd0b3[5]];_0xf43bx4< _0xf43bx5;_0xf43bx4++){var _0xf43bx6=events[_0xf43bx4];var _0xf43bx7=createListener(_0xd0b3[6]+ _0xf43bx6,_0xf43bx3);UserHasOpenchannelQueuePermitEvents[_0xd0b3[7]](_0xf43bx6,_0xf43bx7);_0xf43bx3[_0xd0b3[7]](_0xd0b3[8],removeListener(_0xf43bx6,_0xf43bx7))}};function createListener(_0xf43bx6,_0xf43bx3){return function(_0xf43bx9){if(_0xf43bx3[_0xd0b3[9]]=== _0xf43bx9[_0xd0b3[10]]){_0xf43bx3[_0xd0b3[12]](_0xd0b3[11])}}}function removeListener(_0xf43bx6,_0xf43bx7){return function(){UserHasOpenchannelQueuePermitEvents[_0xd0b3[13]](_0xf43bx6,_0xf43bx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasOpenchannelQueuePermitEvents = require('./user_has_openchannel_queue_permit.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_openchannel_queue_permit:' + event, socket); + + UserHasOpenchannelQueuePermitEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + if (socket.userId === doc.Userid) { + socket.emit('user_has_openchannel_queue_permit:change'); + } + }; +} + +function removeListener(event, listener) { + return function() { + UserHasOpenchannelQueuePermitEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_sms_queue/index.js b/server/api/user_has_sms_queue/index.js index 49c7487..5e63266 100644 --- a/server/api/user_has_sms_queue/index.js +++ b/server/api/user_has_sms_queue/index.js @@ -1 +1,15 @@ -var _0xc5f0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xc5f0[0];var express=require(_0xc5f0[1]);var controller=require(_0xc5f0[2]);var router=express.Router();router[_0xc5f0[5]](_0xc5f0[3],controller[_0xc5f0[4]]);router[_0xc5f0[5]](_0xc5f0[6],controller[_0xc5f0[7]]);router[_0xc5f0[9]](_0xc5f0[3],controller[_0xc5f0[8]]);router[_0xc5f0[11]](_0xc5f0[6],controller[_0xc5f0[10]]);router[_0xc5f0[12]](_0xc5f0[6],controller[_0xc5f0[10]]);router[_0xc5f0[14]](_0xc5f0[6],controller[_0xc5f0[13]]);module[_0xc5f0[15]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./user_has_sms_queue.controller'); + +var router = express.Router(); + +router.get('/', controller.index); +router.get('/:id', controller.show); +router.post('/', controller.create); +router.put('/:id', controller.update); +router.patch('/:id', controller.update); +router.delete('/:id', controller.destroy); + +module.exports = router; diff --git a/server/api/user_has_sms_queue/user_has_sms_queue.controller.js b/server/api/user_has_sms_queue/user_has_sms_queue.controller.js index fbc65cc..9293afa 100644 --- a/server/api/user_has_sms_queue/user_has_sms_queue.controller.js +++ b/server/api/user_has_sms_queue/user_has_sms_queue.controller.js @@ -1 +1,103 @@ -var _0x9e49=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x53\x6D\x73\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64","\x64\x65\x73\x74\x72\x6F\x79"];_0x9e49[0];var _=require(_0x9e49[1]);var UserHasSmsQueue=require(_0x9e49[3])[_0x9e49[2]];exports[_0x9e49[4]]= function(_0xf70cx3,_0xf70cx4){UserHasSmsQueue[_0x9e49[10]](_0xf70cx3[_0x9e49[9]]?{where:_0xf70cx3[_0x9e49[9]]}:{})[_0x9e49[8]](function(_0xf70cx6){return _0xf70cx4[_0x9e49[7]](200)[_0x9e49[6]](_0xf70cx6)})[_0x9e49[5]](function(_0xf70cx5){return handleError(_0xf70cx4,_0xf70cx5)})};exports[_0x9e49[11]]= function(_0xf70cx3,_0xf70cx4){UserHasSmsQueue[_0x9e49[15]](_0xf70cx3[_0x9e49[14]][_0x9e49[13]])[_0x9e49[8]](function(UserHasSmsQueue){if(!UserHasSmsQueue){return _0xf70cx4[_0x9e49[12]](404)};return _0xf70cx4[_0x9e49[6]](UserHasSmsQueue)})[_0x9e49[5]](function(_0xf70cx5){return handleError(_0xf70cx4,_0xf70cx5)})};exports[_0x9e49[16]]= function(_0xf70cx3,_0xf70cx4){UserHasSmsQueue[_0x9e49[16]](_0xf70cx3[_0x9e49[17]])[_0x9e49[8]](function(UserHasSmsQueue){return _0xf70cx4[_0x9e49[7]](201)[_0x9e49[6]](UserHasSmsQueue)})[_0x9e49[5]](function(_0xf70cx5){return handleError(_0xf70cx4,_0xf70cx5)})};exports[_0x9e49[18]]= function(_0xf70cx3,_0xf70cx4){if(_0xf70cx3[_0x9e49[17]][_0x9e49[13]]){delete _0xf70cx3[_0x9e49[17]][_0x9e49[13]]};UserHasSmsQueue[_0x9e49[21]]({where:{id:_0xf70cx3[_0x9e49[14]][_0x9e49[13]]}})[_0x9e49[8]](function(UserHasSmsQueue){if(!UserHasSmsQueue){return _0xf70cx4[_0x9e49[12]](404)};var _0xf70cx7=_[_0x9e49[19]](UserHasSmsQueue,_0xf70cx3[_0x9e49[17]]);_0xf70cx7[_0x9e49[20]]()[_0x9e49[8]](function(){return _0xf70cx4[_0x9e49[7]](200)[_0x9e49[6]](UserHasSmsQueue)})[_0x9e49[5]](function(_0xf70cx5){return handleError(_0xf70cx4,_0xf70cx5)})})[_0x9e49[5]](function(_0xf70cx5){return handleError(_0xf70cx4,_0xf70cx5)})};exports[_0x9e49[22]]= function(_0xf70cx3,_0xf70cx4){UserHasSmsQueue[_0x9e49[21]]({where:{id:_0xf70cx3[_0x9e49[14]][_0x9e49[13]]}})[_0x9e49[8]](function(UserHasSmsQueue){if(!UserHasSmsQueue){return _0xf70cx4[_0x9e49[12]](404)};UserHasSmsQueue[_0x9e49[22]]()[_0x9e49[8]](function(){return _0xf70cx4[_0x9e49[12]](204)})[_0x9e49[5]](function(_0xf70cx5){return handleError(_0xf70cx4,_0xf70cx5)})})[_0x9e49[5]](function(_0xf70cx5){return handleError(_0xf70cx4,_0xf70cx5)})};function handleError(_0xf70cx4,_0xf70cx5){return _0xf70cx4[_0x9e49[7]](500)[_0x9e49[6]](_0xf70cx5)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var UserHasSmsQueue = require('../../models').UserHasSmsQueue; + +// Get list of UserHasSmsQueues +exports.index = function(req, res) { + UserHasSmsQueue + .findAll(req.query ? { + where: req.query + } : {}) + .then(function(UserHasSmsQueues) { + return res.status(200).send(UserHasSmsQueues); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single UserHasSmsQueue +exports.show = function(req, res) { + UserHasSmsQueue + .findById(req.params.id) + .then(function(UserHasSmsQueue) { + if (!UserHasSmsQueue) { + return res.sendStatus(404); + } + return res.send(UserHasSmsQueue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new UserHasSmsQueue in the DB. +exports.create = function(req, res) { + UserHasSmsQueue + .create(req.body) + .then(function(UserHasSmsQueue) { + return res.status(201).send(UserHasSmsQueue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing UserHasSmsQueue in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + UserHasSmsQueue + .find({ + where: { + id: req.params.id + } + }) + .then(function(UserHasSmsQueue) { + if (!UserHasSmsQueue) { + return res.sendStatus(404); + } + var updated = _.merge(UserHasSmsQueue, req.body); + updated.save() + .then(function() { + return res.status(200).send(UserHasSmsQueue); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a UserHasSmsQueue from the DB. +exports.destroy = function(req, res) { + UserHasSmsQueue + .find({ + where: { + id: req.params.id + } + }) + .then(function(UserHasSmsQueue) { + if (!UserHasSmsQueue) { + return res.sendStatus(404); + } + UserHasSmsQueue.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/user_has_sms_queue/user_has_sms_queue.events.js b/server/api/user_has_sms_queue/user_has_sms_queue.events.js index 2632932..2104253 100644 --- a/server/api/user_has_sms_queue/user_has_sms_queue.events.js +++ b/server/api/user_has_sms_queue/user_has_sms_queue.events.js @@ -1 +1,36 @@ -var _0x6df3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x53\x6D\x73\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x6df3[0];const EventEmitter=require(_0x6df3[1]);const UserHasSmsQueue=require(_0x6df3[3])[_0x6df3[2]];var UserHasSmsQueueEvents= new EventEmitter();UserHasSmsQueueEvents[_0x6df3[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x6df3[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x6df3[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x6df3[6]};for(var e in events){var event=events[e];UserHasSmsQueue[_0x6df3[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x9d40x8,_0x9d40x9,_0x9d40xa){UserHasSmsQueueEvents[_0x6df3[10]](event+ _0x6df3[8]+ _0x9d40x8[_0x6df3[9]],_0x9d40x8);UserHasSmsQueueEvents[_0x6df3[10]](event,_0x9d40x8);_0x9d40xa(null)}}module[_0x6df3[11]]= UserHasSmsQueueEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasSmsQueue = require('../../models').UserHasSmsQueue; + +var UserHasSmsQueueEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasSmsQueueEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasSmsQueue.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasSmsQueueEvents.emit(event + ':' + doc._id, doc); + UserHasSmsQueueEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasSmsQueueEvents; diff --git a/server/api/user_has_sms_queue/user_has_sms_queue.socket.js b/server/api/user_has_sms_queue/user_has_sms_queue.socket.js index a141be8..7dfde5c 100644 --- a/server/api/user_has_sms_queue/user_has_sms_queue.socket.js +++ b/server/api/user_has_sms_queue/user_has_sms_queue.socket.js @@ -1 +1,32 @@ -var _0x2382=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x2382[0];const UserHasSmsQueueEvents=require(_0x2382[1]);var events=[_0x2382[2],_0x2382[3]];exports[_0x2382[4]]= function(_0x406fx3){for(var _0x406fx4=0,_0x406fx5=events[_0x2382[5]];_0x406fx4< _0x406fx5;_0x406fx4++){var _0x406fx6=events[_0x406fx4];var _0x406fx7=createListener(_0x2382[6]+ _0x406fx6,_0x406fx3);UserHasSmsQueueEvents[_0x2382[7]](_0x406fx6,_0x406fx7);_0x406fx3[_0x2382[7]](_0x2382[8],removeListener(_0x406fx6,_0x406fx7))}};function createListener(_0x406fx6,_0x406fx3){return function(_0x406fx9){_0x406fx3[_0x2382[9]](_0x406fx6,_0x406fx9)}}function removeListener(_0x406fx6,_0x406fx7){return function(){UserHasSmsQueueEvents[_0x2382[10]](_0x406fx6,_0x406fx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasSmsQueueEvents = require('./user_has_sms_queue.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_sms_queue:' + event, socket); + + UserHasSmsQueueEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + UserHasSmsQueueEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_sms_queue/user_has_sms_queue_permit.events.js b/server/api/user_has_sms_queue/user_has_sms_queue_permit.events.js index 31e394c..b6b7a01 100644 --- a/server/api/user_has_sms_queue/user_has_sms_queue_permit.events.js +++ b/server/api/user_has_sms_queue/user_has_sms_queue_permit.events.js @@ -1 +1,35 @@ -var _0x8be7=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x53\x6D\x73\x51\x75\x65\x75\x65\x50\x65\x72\x6D\x69\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x8be7[0];const EventEmitter=require(_0x8be7[1]);const UserHasSmsQueuePermit=require(_0x8be7[3])[_0x8be7[2]];var UserHasSmsQueuePermitEvents= new EventEmitter();UserHasSmsQueuePermitEvents[_0x8be7[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x8be7[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x8be7[6]};for(var e in events){var event=events[e];UserHasSmsQueuePermit[_0x8be7[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x41cdx8,_0x41cdx9,_0x41cdxa){UserHasSmsQueuePermitEvents[_0x8be7[10]](event+ _0x8be7[8]+ _0x41cdx8[_0x8be7[9]],_0x41cdx8);UserHasSmsQueuePermitEvents[_0x8be7[10]](event,_0x41cdx8);_0x41cdxa(null)}}module[_0x8be7[11]]= UserHasSmsQueuePermitEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasSmsQueuePermit = require('../../models').UserHasSmsQueuePermit; + +var UserHasSmsQueuePermitEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasSmsQueuePermitEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasSmsQueuePermit.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasSmsQueuePermitEvents.emit(event + ':' + doc._id, doc); + UserHasSmsQueuePermitEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasSmsQueuePermitEvents; diff --git a/server/api/user_has_sms_queue/user_has_sms_queue_permit.socket.js b/server/api/user_has_sms_queue/user_has_sms_queue_permit.socket.js index b7789c5..2c2b49c 100644 --- a/server/api/user_has_sms_queue/user_has_sms_queue_permit.socket.js +++ b/server/api/user_has_sms_queue/user_has_sms_queue_permit.socket.js @@ -1 +1,34 @@ -var _0x6363=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x75\x73\x65\x72\x49\x64","\x55\x73\x65\x72\x69\x64","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x3A\x63\x68\x61\x6E\x67\x65","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x6363[0];const UserHasSmsQueuePermitEvents=require(_0x6363[1]);var events=[_0x6363[2],_0x6363[3]];exports[_0x6363[4]]= function(_0x500ex3){for(var _0x500ex4=0,_0x500ex5=events[_0x6363[5]];_0x500ex4< _0x500ex5;_0x500ex4++){var _0x500ex6=events[_0x500ex4];var _0x500ex7=createListener(_0x6363[6]+ _0x500ex6,_0x500ex3);UserHasSmsQueuePermitEvents[_0x6363[7]](_0x500ex6,_0x500ex7);_0x500ex3[_0x6363[7]](_0x6363[8],removeListener(_0x500ex6,_0x500ex7))}};function createListener(_0x500ex6,_0x500ex3){return function(_0x500ex9){if(_0x500ex3[_0x6363[9]]=== _0x500ex9[_0x6363[10]]){_0x500ex3[_0x6363[12]](_0x6363[11])}}}function removeListener(_0x500ex6,_0x500ex7){return function(){UserHasSmsQueuePermitEvents[_0x6363[13]](_0x500ex6,_0x500ex7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasSmsQueuePermitEvents = require('./user_has_sms_queue_permit.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_sms_queue_permit:' + event, socket); + + UserHasSmsQueuePermitEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + if (socket.userId === doc.Userid) { + socket.emit('user_has_sms_queue_permit:change'); + } + }; +} + +function removeListener(event, listener) { + return function() { + UserHasSmsQueuePermitEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_team/index.js b/server/api/user_has_team/index.js index 7a30a1c..723bdc1 100644 --- a/server/api/user_has_team/index.js +++ b/server/api/user_has_team/index.js @@ -1 +1,15 @@ -var _0x5815=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x5815[0];var express=require(_0x5815[1]);var controller=require(_0x5815[2]);var router=express.Router();router[_0x5815[5]](_0x5815[3],controller[_0x5815[4]]);router[_0x5815[5]](_0x5815[6],controller[_0x5815[7]]);router[_0x5815[9]](_0x5815[3],controller[_0x5815[8]]);router[_0x5815[11]](_0x5815[6],controller[_0x5815[10]]);router[_0x5815[12]](_0x5815[6],controller[_0x5815[10]]);router[_0x5815[14]](_0x5815[6],controller[_0x5815[13]]);module[_0x5815[15]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./user_has_team.controller'); + +var router = express.Router(); + +router.get('/', controller.index); +router.get('/:id', controller.show); +router.post('/', controller.create); +router.put('/:id', controller.update); +router.patch('/:id', controller.update); +router.delete('/:id', controller.destroy); + +module.exports = router; \ No newline at end of file diff --git a/server/api/user_has_team/user_has_team.controller.js b/server/api/user_has_team/user_has_team.controller.js index b0bb739..7f0f426 100644 --- a/server/api/user_has_team/user_has_team.controller.js +++ b/server/api/user_has_team/user_has_team.controller.js @@ -1 +1,96 @@ -var _0xd5e6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x54\x65\x61\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x71\x75\x65\x72\x79","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xd5e6[0];var _=require(_0xd5e6[1]);var UserHasTeam=require(_0xd5e6[3])[_0xd5e6[2]];exports[_0xd5e6[4]]= function(_0xfcc1x3,_0xfcc1x4){console[_0xd5e6[6]](_0xfcc1x3[_0xd5e6[5]]);UserHasTeam[_0xd5e6[11]]({where:_0xfcc1x3[_0xd5e6[5]]})[_0xd5e6[10]](function(_0xfcc1x6){return _0xfcc1x4[_0xd5e6[9]](200)[_0xd5e6[8]](_0xfcc1x6)})[_0xd5e6[7]](function(_0xfcc1x5){return handleError(_0xfcc1x4,_0xfcc1x5)})};exports[_0xd5e6[12]]= function(_0xfcc1x3,_0xfcc1x4){UserHasTeam[_0xd5e6[16]](_0xfcc1x3[_0xd5e6[15]][_0xd5e6[14]])[_0xd5e6[10]](function(_0xfcc1x7){if(!_0xfcc1x7){return _0xfcc1x4[_0xd5e6[13]](404)};return _0xfcc1x4[_0xd5e6[8]](_0xfcc1x7)})[_0xd5e6[7]](function(_0xfcc1x5){return handleError(_0xfcc1x4,_0xfcc1x5)})};exports[_0xd5e6[17]]= function(_0xfcc1x3,_0xfcc1x4){UserHasTeam[_0xd5e6[17]](_0xfcc1x3[_0xd5e6[18]])[_0xd5e6[10]](function(_0xfcc1x7){return _0xfcc1x4[_0xd5e6[9]](201)[_0xd5e6[8]](_0xfcc1x7)})[_0xd5e6[7]](function(_0xfcc1x5){return handleError(_0xfcc1x4,_0xfcc1x5)})};exports[_0xd5e6[19]]= function(_0xfcc1x3,_0xfcc1x4){if(_0xfcc1x3[_0xd5e6[18]][_0xd5e6[14]]){delete _0xfcc1x3[_0xd5e6[18]][_0xd5e6[14]]};UserHasTeam[_0xd5e6[16]](_0xfcc1x3[_0xd5e6[15]][_0xd5e6[14]])[_0xd5e6[10]](function(_0xfcc1x7){if(!_0xfcc1x7){return _0xfcc1x4[_0xd5e6[13]](404)};var _0xfcc1x8=_[_0xd5e6[20]](_0xfcc1x7,_0xfcc1x3[_0xd5e6[18]]);_0xfcc1x8[_0xd5e6[21]]()[_0xd5e6[10]](function(){return _0xfcc1x4[_0xd5e6[9]](200)[_0xd5e6[8]](_0xfcc1x7)})[_0xd5e6[7]](function(_0xfcc1x5){return handleError(_0xfcc1x4,_0xfcc1x5)})})[_0xd5e6[7]](function(_0xfcc1x5){return handleError(_0xfcc1x4,_0xfcc1x5)})};exports[_0xd5e6[22]]= function(_0xfcc1x3,_0xfcc1x4){UserHasTeam[_0xd5e6[16]](_0xfcc1x3[_0xd5e6[15]][_0xd5e6[14]])[_0xd5e6[10]](function(_0xfcc1x7){if(!_0xfcc1x7){return _0xfcc1x4[_0xd5e6[13]](404)};_0xfcc1x7[_0xd5e6[22]]()[_0xd5e6[10]](function(){return _0xfcc1x4[_0xd5e6[13]](204)})[_0xd5e6[7]](function(_0xfcc1x5){return handleError(_0xfcc1x4,_0xfcc1x5)})})[_0xd5e6[7]](function(_0xfcc1x5){return handleError(_0xfcc1x4,_0xfcc1x5)})};function handleError(_0xfcc1x4,_0xfcc1x5){return _0xfcc1x4[_0xd5e6[9]](500)[_0xd5e6[8]](_0xfcc1x5)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var UserHasTeam = require('../../models').UserHasTeam; + +// Get list of user_has_teams +exports.index = function(req, res) { + console.log(req.query); + UserHasTeam + .findAll({ + where: req.query + }) + .then(function(user_has_teams) { + return res.status(200).send(user_has_teams); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single user_has_team +exports.show = function(req, res) { + UserHasTeam + .findById(req.params.id) + .then(function(user_has_team) { + if (!user_has_team) { + return res.sendStatus(404); + } + return res.send(user_has_team); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new user_has_team in the DB. +exports.create = function(req, res) { + UserHasTeam + .create(req.body) + .then(function(user_has_team) { + return res.status(201).send(user_has_team); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing user_has_team in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + UserHasTeam + .findById(req.params.id) + .then(function(user_has_team) { + if (!user_has_team) { + return res.sendStatus(404); + } + var updated = _.merge(user_has_team, req.body); + updated.save() + .then(function() { + return res.status(200).send(user_has_team); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a user_has_team from the DB. +exports.destroy = function(req, res) { + UserHasTeam + .findById(req.params.id) + .then(function(user_has_team) { + if (!user_has_team) { + return res.sendStatus(404); + } + user_has_team.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/user_has_team/user_has_team.events.js b/server/api/user_has_team/user_has_team.events.js index b28431d..ce02e87 100644 --- a/server/api/user_has_team/user_has_team.events.js +++ b/server/api/user_has_team/user_has_team.events.js @@ -1 +1,36 @@ -var _0x2aa8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x54\x65\x61\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x2aa8[0];const EventEmitter=require(_0x2aa8[1]);const UserHasTeam=require(_0x2aa8[3])[_0x2aa8[2]];var UserHasTeamEvents= new EventEmitter();UserHasTeamEvents[_0x2aa8[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x2aa8[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x2aa8[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x2aa8[6]};for(var e in events){var event=events[e];UserHasTeam[_0x2aa8[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x1b10x8,_0x1b10x9,_0x1b10xa){UserHasTeamEvents[_0x2aa8[10]](event+ _0x2aa8[8]+ _0x1b10x8[_0x2aa8[9]],_0x1b10x8);UserHasTeamEvents[_0x2aa8[10]](event,_0x1b10x8);_0x1b10xa(null)}}module[_0x2aa8[11]]= UserHasTeamEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasTeam = require('../../models').UserHasTeam; + +var UserHasTeamEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasTeamEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasTeam.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasTeamEvents.emit(event + ':' + doc._id, doc); + UserHasTeamEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasTeamEvents; diff --git a/server/api/user_has_team/user_has_team.socket.js b/server/api/user_has_team/user_has_team.socket.js index 7bcd80a..423b31f 100644 --- a/server/api/user_has_team/user_has_team.socket.js +++ b/server/api/user_has_team/user_has_team.socket.js @@ -1 +1,32 @@ -var _0xf16f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xf16f[0];const UserHasTeamEvents=require(_0xf16f[1]);var events=[_0xf16f[2],_0xf16f[3]];exports[_0xf16f[4]]= function(_0xa30cx3){for(var _0xa30cx4=0,_0xa30cx5=events[_0xf16f[5]];_0xa30cx4< _0xa30cx5;_0xa30cx4++){var _0xa30cx6=events[_0xa30cx4];var _0xa30cx7=createListener(_0xf16f[6]+ _0xa30cx6,_0xa30cx3);UserHasTeamEvents[_0xf16f[7]](_0xa30cx6,_0xa30cx7);_0xa30cx3[_0xf16f[7]](_0xf16f[8],removeListener(_0xa30cx6,_0xa30cx7))}};function createListener(_0xa30cx6,_0xa30cx3){return function(_0xa30cx9){_0xa30cx3[_0xf16f[9]](_0xa30cx6,_0xa30cx9)}}function removeListener(_0xa30cx6,_0xa30cx7){return function(){UserHasTeamEvents[_0xf16f[10]](_0xa30cx6,_0xa30cx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasTeamEvents = require('./user_has_team.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_team:' + event, socket); + + UserHasTeamEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + UserHasTeamEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_voice_queue/index.js b/server/api/user_has_voice_queue/index.js index 7014384..7924edc 100644 --- a/server/api/user_has_voice_queue/index.js +++ b/server/api/user_has_voice_queue/index.js @@ -1 +1,12 @@ -var _0xc9de=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x61\x64\x6D\x69\x6E","\x75\x73\x65\x72","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x67\x65\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xc9de[0];var express=require(_0xc9de[1]);var controller=require(_0xc9de[2]);var auth=require(_0xc9de[3]);var license=require(_0xc9de[4]);var router=express.Router();router[_0xc9de[12]](_0xc9de[5],auth[_0xc9de[6]](),license[_0xc9de[7]](),auth[_0xc9de[10]]([],[_0xc9de[8],_0xc9de[9]]),controller[_0xc9de[11]]);module[_0xc9de[13]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./user_has_voice_queue.controller'); +var auth = require('../../auth/auth.service'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/describe', auth.isAuthenticated(), license.isValidDate(), auth.hasModule([], ['admin', 'user']), controller.describe); + +module.exports = router; diff --git a/server/api/user_has_voice_queue/user_has_voice_queue.controller.js b/server/api/user_has_voice_queue/user_has_voice_queue.controller.js index a52f6b4..2c6afc8 100644 --- a/server/api/user_has_voice_queue/user_has_voice_queue.controller.js +++ b/server/api/user_has_voice_queue/user_has_voice_queue.controller.js @@ -1 +1,20 @@ -var _0x34e1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x64\x65\x73\x63\x72\x69\x62\x65","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E"];_0x34e1[0];var _=require(_0x34e1[1]);var UserHasVoiceQueue=require(_0x34e1[3])[_0x34e1[2]];exports[_0x34e1[4]]= function(_0x2ae6x3,_0x2ae6x4){return UserHasVoiceQueue[_0x34e1[4]]()[_0x34e1[8]](function(_0x2ae6x6){return _0x2ae6x4[_0x34e1[7]](200)[_0x34e1[6]](_0x2ae6x6)})[_0x34e1[5]](function(_0x2ae6x5){return handleError(_0x2ae6x4,_0x2ae6x5)})};function handleError(_0x2ae6x4,_0x2ae6x5){return _0x2ae6x4[_0x34e1[7]](500)[_0x34e1[6]](_0x2ae6x5)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var UserHasVoiceQueue = require('../../models').UserHasVoiceQueue; + +// Get list of fields +exports.describe = function(req, res) { + return UserHasVoiceQueue + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/user_has_voice_queue/user_has_voice_queue.events.js b/server/api/user_has_voice_queue/user_has_voice_queue.events.js index aa1f382..aacd9a7 100644 --- a/server/api/user_has_voice_queue/user_has_voice_queue.events.js +++ b/server/api/user_has_voice_queue/user_has_voice_queue.events.js @@ -1 +1,36 @@ -var _0x6900=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x6900[0];const EventEmitter=require(_0x6900[1]);const UserHasVoiceQueue=require(_0x6900[3])[_0x6900[2]];var UserHasVoiceQueueEvents= new EventEmitter();UserHasVoiceQueueEvents[_0x6900[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x6900[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x6900[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x6900[6]};for(var e in events){var event=events[e];UserHasVoiceQueue[_0x6900[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x35eax8,_0x35eax9,_0x35eaxa){UserHasVoiceQueueEvents[_0x6900[10]](event+ _0x6900[8]+ _0x35eax8[_0x6900[9]],_0x35eax8);UserHasVoiceQueueEvents[_0x6900[10]](event,_0x35eax8);_0x35eaxa(null)}}module[_0x6900[11]]= UserHasVoiceQueueEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasVoiceQueue = require('../../models').UserHasVoiceQueue; + +var UserHasVoiceQueueEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasVoiceQueueEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasVoiceQueue.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasVoiceQueueEvents.emit(event + ':' + doc._id, doc); + UserHasVoiceQueueEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasVoiceQueueEvents; diff --git a/server/api/user_has_voice_queue/user_has_voice_queue.socket.js b/server/api/user_has_voice_queue/user_has_voice_queue.socket.js index 5e7d5b3..5056bed 100644 --- a/server/api/user_has_voice_queue/user_has_voice_queue.socket.js +++ b/server/api/user_has_voice_queue/user_has_voice_queue.socket.js @@ -1 +1,58 @@ -var _0xdb5a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x6C\x6F\x67\x67\x65\x64","\x6C\x6F\x67\x67\x65\x64\x41\x74","\x71\x75\x65\x75\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x69\x6E\x74\x65\x72\x66\x61\x63\x65","\x63\x61\x6C\x6C\x73\x74\x61\x6B\x65\x6E","\x6C\x61\x73\x74\x63\x61\x6C\x6C","\x73\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73\x64\x65\x73\x63","\x73\x74\x61\x74\x75\x73\x41\x74","\x70\x61\x75\x73\x65\x64","\x70\x61\x75\x73\x65\x64\x41\x74","\x72\x65\x61\x73\x6F\x6E","\x55\x73\x65\x72\x49\x64","\x65\x6D\x69\x74","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x3A\x73\x61\x76\x65","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xdb5a[0];const UserHasVoiceQueueEvents=require(_0xdb5a[1]);var events=[_0xdb5a[2],_0xdb5a[3]];exports[_0xdb5a[4]]= function(_0x191ex3){for(var _0x191ex4=0,_0x191ex5=events[_0xdb5a[5]];_0x191ex4< _0x191ex5;_0x191ex4++){var _0x191ex6=events[_0x191ex4];var _0x191ex7=createListener(_0xdb5a[6]+ _0x191ex6,_0x191ex3);UserHasVoiceQueueEvents[_0xdb5a[7]](_0x191ex6,_0x191ex7);_0x191ex3[_0xdb5a[7]](_0xdb5a[8],removeListener(_0x191ex6,_0x191ex7))}};function createListener(_0x191ex6,_0x191ex3){return function(_0x191ex9){switch(_0x191ex6){case _0xdb5a[24]:_0x191ex3[_0xdb5a[23]](_0x191ex6,{logged:_0x191ex9[_0xdb5a[9]],loggedAt:_0x191ex9[_0xdb5a[10]],queue:_0x191ex9[_0xdb5a[11]],membername:_0x191ex9[_0xdb5a[12]],interface:_0x191ex9[_0xdb5a[13]],callstaken:_0x191ex9[_0xdb5a[14]],lastcall:_0x191ex9[_0xdb5a[15]],status:_0x191ex9[_0xdb5a[16]],statusdesc:_0x191ex9[_0xdb5a[17]],statusAt:_0x191ex9[_0xdb5a[18]],paused:_0x191ex9[_0xdb5a[19]],pausedAt:_0x191ex9[_0xdb5a[20]],reason:_0x191ex9[_0xdb5a[21]],UserId:_0x191ex9[_0xdb5a[22]]});break;case _0xdb5a[25]:_0x191ex3[_0xdb5a[23]](_0x191ex6,_0x191ex9);break;default:}}}function removeListener(_0x191ex6,_0x191ex7){return function(){UserHasVoiceQueueEvents[_0xdb5a[26]](_0x191ex6,_0x191ex7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasVoiceQueueEvents = require('./user_has_voice_queue.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_voice_queue:' + event, socket); + + UserHasVoiceQueueEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'user_has_voice_queue:save': + socket.emit(event, { + logged: doc.logged, + loggedAt: doc.loggedAt, + queue: doc.queue, + membername: doc.membername, + interface: doc.interface, + callstaken: doc.callstaken, + lastcall: doc.lastcall, + status: doc.status, + statusdesc: doc.statusdesc, + statusAt: doc.statusAt, + paused: doc.paused, + pausedAt: doc.pausedAt, + reason: doc.reason, + UserId: doc.UserId + }); + break; + + case 'user_has_voice_queue:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + UserHasVoiceQueueEvents.removeListener(event, listener); + }; +} diff --git a/server/api/user_has_voice_queue/user_has_voice_queue_permit.events.js b/server/api/user_has_voice_queue/user_has_voice_queue_permit.events.js index 82aa673..edcd78c 100644 --- a/server/api/user_has_voice_queue/user_has_voice_queue_permit.events.js +++ b/server/api/user_has_voice_queue/user_has_voice_queue_permit.events.js @@ -1 +1,35 @@ -var _0x19bb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x50\x65\x72\x6D\x69\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x19bb[0];const EventEmitter=require(_0x19bb[1]);const UserHasVoiceQueuePermit=require(_0x19bb[3])[_0x19bb[2]];var UserHasVoiceQueuePermitEvents= new EventEmitter();UserHasVoiceQueuePermitEvents[_0x19bb[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x19bb[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x19bb[6]};for(var e in events){var event=events[e];UserHasVoiceQueuePermit[_0x19bb[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x61dbx8,_0x61dbx9,_0x61dbxa){UserHasVoiceQueuePermitEvents[_0x19bb[10]](event+ _0x19bb[8]+ _0x61dbx8[_0x19bb[9]],_0x61dbx8);UserHasVoiceQueuePermitEvents[_0x19bb[10]](event,_0x61dbx8);_0x61dbxa(null)}}module[_0x19bb[11]]= UserHasVoiceQueuePermitEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const UserHasVoiceQueuePermit = require('../../models').UserHasVoiceQueuePermit; + +var UserHasVoiceQueuePermitEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +UserHasVoiceQueuePermitEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + UserHasVoiceQueuePermit.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + UserHasVoiceQueuePermitEvents.emit(event + ':' + doc._id, doc); + UserHasVoiceQueuePermitEvents.emit(event, doc); + done(null); + } +} + +module.exports = UserHasVoiceQueuePermitEvents; diff --git a/server/api/user_has_voice_queue/user_has_voice_queue_permit.socket.js b/server/api/user_has_voice_queue/user_has_voice_queue_permit.socket.js index 5e80589..877e1e4 100644 --- a/server/api/user_has_voice_queue/user_has_voice_queue_permit.socket.js +++ b/server/api/user_has_voice_queue/user_has_voice_queue_permit.socket.js @@ -1 +1,34 @@ -var _0x7cd0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x75\x73\x65\x72\x49\x64","\x55\x73\x65\x72\x69\x64","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x3A\x63\x68\x61\x6E\x67\x65","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x7cd0[0];const UserHasVoiceQueuePermitEvents=require(_0x7cd0[1]);var events=[_0x7cd0[2],_0x7cd0[3]];exports[_0x7cd0[4]]= function(_0x421dx3){for(var _0x421dx4=0,_0x421dx5=events[_0x7cd0[5]];_0x421dx4< _0x421dx5;_0x421dx4++){var _0x421dx6=events[_0x421dx4];var _0x421dx7=createListener(_0x7cd0[6]+ _0x421dx6,_0x421dx3);UserHasVoiceQueuePermitEvents[_0x7cd0[7]](_0x421dx6,_0x421dx7);_0x421dx3[_0x7cd0[7]](_0x7cd0[8],removeListener(_0x421dx6,_0x421dx7))}};function createListener(_0x421dx6,_0x421dx3){return function(_0x421dx9){if(_0x421dx3[_0x7cd0[9]]=== _0x421dx9[_0x7cd0[10]]){_0x421dx3[_0x7cd0[12]](_0x7cd0[11])}}}function removeListener(_0x421dx6,_0x421dx7){return function(){UserHasVoiceQueuePermitEvents[_0x7cd0[13]](_0x421dx6,_0x421dx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const UserHasVoiceQueuePermitEvents = require('./user_has_voice_queue_permit.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('user_has_voice_queue_permit:' + event, socket); + + UserHasVoiceQueuePermitEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + if (socket.userId === doc.Userid) { + socket.emit('user_has_voice_queue_permit:change'); + } + }; +} + +function removeListener(event, listener) { + return function() { + UserHasVoiceQueuePermitEvents.removeListener(event, listener); + }; +} diff --git a/server/api/variable/index.js b/server/api/variable/index.js index 8eb9f64..21b09cd 100644 --- a/server/api/variable/index.js +++ b/server/api/variable/index.js @@ -1 +1,166 @@ -var _0xad57=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xad57[0];var express=require(_0xad57[1]);var controller=require(_0xad57[2]);var auth=require(_0xad57[3]);var router=express.Router();router[_0xad57[9]](_0xad57[4],auth[_0xad57[5]](),auth[_0xad57[7]]([13,14],[_0xad57[6]]),controller[_0xad57[8]]);router[_0xad57[9]](_0xad57[10],auth[_0xad57[5]](),auth[_0xad57[7]]([13],[_0xad57[6]]),controller[_0xad57[11]]);router[_0xad57[13]](_0xad57[4],auth[_0xad57[5]](),auth[_0xad57[7]]([13],[_0xad57[6]]),controller[_0xad57[12]]);router[_0xad57[15]](_0xad57[10],auth[_0xad57[5]](),auth[_0xad57[7]]([13],[_0xad57[6]]),controller[_0xad57[14]]);router[_0xad57[17]](_0xad57[4],auth[_0xad57[5]](),auth[_0xad57[7]]([13],[_0xad57[6]]),controller[_0xad57[16]]);router[_0xad57[17]](_0xad57[10],auth[_0xad57[5]](),auth[_0xad57[7]]([13],[_0xad57[6]]),controller[_0xad57[18]]);module[_0xad57[19]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./variable.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); +/** + * @api {get} /api/variables/ Get Variables' list. + * + * @apiParam (Query) {Number} [offset] Pagination offset. + * @apiParam (Query) {Number} [limit] Pagination limit. + * + * @apiVersion 0.0.143 + * @apiName GetVariables + * @apiGroup Variables + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Number} count Number of variables. + * @apiSuccess {Object[]} rows Variables' list. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "count": 2, + * "rows": [{ + * "id": 1 + * "name": "variable1" + * "description": "my variable description" + * ... + * },{ + * "id": 2 + * "name": "newvariable" + * "description": null + * ... + * },...] + * } + */ +router.get('/', auth.isAuthenticated(), auth.hasModule([13, 14], ['admin']), controller.index); +/** + * @api {get} /api/variables/:id Get Variable's details. + * @apiParam {Number} id Variable's unique ID. + * @apiVersion 0.0.143 + * @apiName GetVariable + * @apiGroup Variables + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccess {Object} Variable's details. + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 1 + * "name": "variable1" + * "description": "my variable description" + * ... + * } + */ +router.get('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.show); +/** + * @api {post} /api/variables/ Create a new variable. + * @apiParam (body) {String} name Variable's name. + * @apiParam (body) {String} [description] Variable's description. + * + * @apiVersion 0.0.143 + * @apiName CreateVariable + * @apiGroup Variables + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 201 Created + * { + * "id": 3 + * "name": "Variable3" + * "description": "my variable" + * ... + * } + */ +router.post('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.create); +/** + * @api {put} /api/variables/:id Update variable's details. + * @apiParam {Number} id Variable's unique ID. + * @apiParam (body) {String} name Variable's name. + * @apiParam (body) {String} [description] Variable's description. + * + * @apiVersion 0.0.143 + * @apiName UpdateVariable + * @apiGroup Variables + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 200 OK + * { + * "id": 3 + * "name": "Variable 3" + * "description": "My new description" + * ... + * } + */ +router.put('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.update); +/** + * @api {delete} /api/variables/ Bulk Delete variables. + * + * @apiParam (Query) {Number[]} ids Variables' unique ID array. + * + * @apiVersion 0.0.143 + * @apiName BulkDeleteVariables + * @apiGroup Variables + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.bulkDestroy); +/** + * @api {delete} /api/variables/:id Delete a variable. + * + * @apiParam {Number} id Variable's unique ID. + * + * @apiVersion 0.0.143 + * @apiName DeleteVariable + * @apiGroup Variables + * + * @apiHeader (Header) {String} Authorization Authorization access token. + * + * @apiHeaderExample {json} Header-Example: + * { + * "Authentication": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI" + * } + * + * @apiSuccessExample {json} Success-Response: + * HTTP/1.1 204 No Content + */ +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([13], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/variable/variable.controller.js b/server/api/variable/variable.controller.js index 6d4b243..2378a95 100644 --- a/server/api/variable/variable.controller.js +++ b/server/api/variable/variable.controller.js @@ -1 +1,117 @@ -var _0xbc09=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x56\x61\x72\x69\x61\x62\x6C\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x6D\x65\x73\x73\x61\x67\x65","\x56\x61\x72\x69\x61\x62\x6C\x65\x20\x69\x73\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\x61\x6E\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x27\x73\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64\x73","\x73\x63\x6F\x70\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x73","\x6C\x65\x6E\x67\x74\x68","\x44\x65\x73\x6B\x46\x69\x65\x6C\x64\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x46\x69\x65\x6C\x64\x73","\x46\x72\x65\x73\x68\x64\x65\x73\x6B\x46\x69\x65\x6C\x64\x73","\x53\x75\x67\x61\x72\x63\x72\x6D\x46\x69\x65\x6C\x64\x73"];_0xbc09[0];var _=require(_0xbc09[1]);var Variable=require(_0xbc09[3])[_0xbc09[2]];var Util=require(_0xbc09[4]);exports[_0xbc09[5]]= function(_0x4367x4,_0x4367x5,_0x4367x6){return Variable[_0xbc09[12]](Util[_0xbc09[11]](_0x4367x4[_0xbc09[10]]))[_0xbc09[9]](function(_0x4367x8){_0x4367x5[_0xbc09[8]](200)[_0xbc09[7]](_0x4367x8)})[_0xbc09[6]](function(_0x4367x7){return handleError(_0x4367x5,_0x4367x7)})};exports[_0xbc09[13]]= function(_0x4367x4,_0x4367x5){return Variable[_0xbc09[17]](_0x4367x4[_0xbc09[16]][_0xbc09[15]])[_0xbc09[9]](function(_0x4367x9){if(!_0x4367x9){return _0x4367x5[_0xbc09[14]](404)};return _0x4367x5[_0xbc09[7]](_0x4367x9)})[_0xbc09[6]](function(_0x4367x7){return handleError(_0x4367x5,_0x4367x7)})};exports[_0xbc09[18]]= function(_0x4367x4,_0x4367x5){return Variable[_0xbc09[18]](_0x4367x4[_0xbc09[19]])[_0xbc09[9]](function(_0x4367x9){return _0x4367x5[_0xbc09[8]](201)[_0xbc09[7]](_0x4367x9)})[_0xbc09[6]](function(_0x4367x7){return handleError(_0x4367x5,_0x4367x7)})};exports[_0xbc09[20]]= function(_0x4367x4,_0x4367x5){if(_0x4367x4[_0xbc09[19]][_0xbc09[15]]){delete _0x4367x4[_0xbc09[19]][_0xbc09[15]]};return Variable[_0xbc09[17]](_0x4367x4[_0xbc09[16]][_0xbc09[15]])[_0xbc09[9]](function(_0x4367x9){if(!_0x4367x9){return _0x4367x5[_0xbc09[14]](404)};var _0x4367xa=_[_0xbc09[21]](_0x4367x9,_0x4367x4[_0xbc09[19]]);return _0x4367xa[_0xbc09[22]]()})[_0xbc09[9]](function(_0x4367x9){return _0x4367x5[_0xbc09[8]](200)[_0xbc09[7]](_0x4367x9)})[_0xbc09[6]](function(_0x4367x7){return handleError(_0x4367x5,_0x4367x7)})};exports[_0xbc09[23]]= function(_0x4367x4,_0x4367x5){return Variable[_0xbc09[27]](_0xbc09[26])[_0xbc09[17]](_0x4367x4[_0xbc09[16]][_0xbc09[15]])[_0xbc09[9]](function(_0x4367x9){if(!_0x4367x9){return _0x4367x5[_0xbc09[14]](404)};if(variableHasAssociation(_0x4367x9)){var _0x4367x7= new Error();_0x4367x7[_0xbc09[24]]= _0xbc09[25];throw _0x4367x7};return _0x4367x9[_0xbc09[23]]()})[_0xbc09[9]](function(){return _0x4367x5[_0xbc09[14]](204)})[_0xbc09[6]](function(_0x4367x7){return handleError(_0x4367x5,_0x4367x7)})};exports[_0xbc09[28]]= function(_0x4367x4,_0x4367x5){return Variable[_0xbc09[23]]({where:{id:_0x4367x4[_0xbc09[10]][_0xbc09[29]]},individualHooks:true})[_0xbc09[9]](function(){return _0x4367x5[_0xbc09[14]](204)})[_0xbc09[6]](function(_0x4367x7){return handleError(_0x4367x5,_0x4367x7)})};function handleError(_0x4367x5,_0x4367x7){return _0x4367x5[_0xbc09[8]](500)[_0xbc09[7]](_0x4367x7)}function variableHasAssociation(_0x4367x9){return ((_0x4367x9[_0xbc09[30]]&& _0x4367x9[_0xbc09[30]][_0xbc09[31]]> 0)|| (_0x4367x9[_0xbc09[32]]&& _0x4367x9[_0xbc09[32]][_0xbc09[31]]> 0)|| (_0x4367x9[_0xbc09[33]]&& _0x4367x9[_0xbc09[33]][_0xbc09[31]]> 0)|| (_0x4367x9[_0xbc09[34]]&& _0x4367x9[_0xbc09[34]][_0xbc09[31]]> 0)|| (_0x4367x9[_0xbc09[35]]&& _0x4367x9[_0xbc09[35]][_0xbc09[31]]> 0))} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Variable = require('../../models').Variable; +var Util = require('../../config/util'); + +// Get list of variables +exports.index = function(req, res, next) { + return Variable + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single variable +exports.show = function(req, res) { + return Variable + .findById(req.params.id) + .then(function(variable) { + if (!variable) { + return res.sendStatus(404); + } + return res.send(variable); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new variable in the DB. +exports.create = function(req, res) { + return Variable + .create(req.body) + .then(function(variable) { + return res.status(201).send(variable); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing variable in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return Variable + .findById(req.params.id) + .then(function(variable) { + if (!variable) { + return res.sendStatus(404); + } + var updated = _.merge(variable, req.body); + return updated + .save(); + }) + .then(function(variable) { + return res.status(200).send(variable); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a variable from the DB. +exports.destroy = function(req, res) { + return Variable + .scope('fields') + .findById(req.params.id) + .then(function(variable) { + if (!variable) { + return res.sendStatus(404); + } + if (variableHasAssociation(variable)) { + var err = new Error(); + err.message = 'Variable is associated with an integration\'s configuration'; + throw err; + } + return variable.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.bulkDestroy = function(req, res) { + return Variable + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} + +function variableHasAssociation(variable) { + return ((variable.ZendeskFields && variable.ZendeskFields.length > 0) || (variable.DeskFields && variable.DeskFields.length > 0) || (variable.SalesforceFields && variable.SalesforceFields.length > + 0) || (variable.FreshdeskFields && variable.FreshdeskFields.length > 0) || (variable.SugarcrmFields && variable.SugarcrmFields.length > 0)); +} diff --git a/server/api/variable/variable.events.js b/server/api/variable/variable.events.js index ba37bcb..2f51fee 100644 --- a/server/api/variable/variable.events.js +++ b/server/api/variable/variable.events.js @@ -1 +1,36 @@ -var _0xea99=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x56\x61\x72\x69\x61\x62\x6C\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xea99[0];const EventEmitter=require(_0xea99[1]);const Variable=require(_0xea99[3])[_0xea99[2]];var VariableEvents= new EventEmitter();VariableEvents[_0xea99[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xea99[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xea99[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xea99[6]};for(var e in events){var event=events[e];Variable[_0xea99[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xe783x8,_0xe783x9,_0xe783xa){VariableEvents[_0xea99[10]](event+ _0xea99[8]+ _0xe783x8[_0xea99[9]],_0xe783x8);VariableEvents[_0xea99[10]](event,_0xe783x8);_0xe783xa(null)}}module[_0xea99[11]]= VariableEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const Variable = require('../../models').Variable; + +var VariableEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +VariableEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + Variable.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + VariableEvents.emit(event + ':' + doc._id, doc); + VariableEvents.emit(event, doc); + done(null); + } +} + +module.exports = VariableEvents; diff --git a/server/api/variable/variable.socket.js b/server/api/variable/variable.socket.js index 4caacd0..32f14e8 100644 --- a/server/api/variable/variable.socket.js +++ b/server/api/variable/variable.socket.js @@ -1 +1,32 @@ -var _0xeca0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x76\x61\x72\x69\x61\x62\x6C\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xeca0[0];const VariableEvents=require(_0xeca0[1]);var events=[_0xeca0[2],_0xeca0[3]];exports[_0xeca0[4]]= function(_0x8c2cx3){for(var _0x8c2cx4=0,_0x8c2cx5=events[_0xeca0[5]];_0x8c2cx4< _0x8c2cx5;_0x8c2cx4++){var _0x8c2cx6=events[_0x8c2cx4];var _0x8c2cx7=createListener(_0xeca0[6]+ _0x8c2cx6,_0x8c2cx3);VariableEvents[_0xeca0[7]](_0x8c2cx6,_0x8c2cx7);_0x8c2cx3[_0xeca0[7]](_0xeca0[8],removeListener(_0x8c2cx6,_0x8c2cx7))}};function createListener(_0x8c2cx6,_0x8c2cx3){return function(_0x8c2cx9){_0x8c2cx3[_0xeca0[9]](_0x8c2cx6,_0x8c2cx9)}}function removeListener(_0x8c2cx6,_0x8c2cx7){return function(){VariableEvents[_0xeca0[10]](_0x8c2cx6,_0x8c2cx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const VariableEvents = require('./variable.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('variable:' + event, socket); + + VariableEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + VariableEvents.removeListener(event, listener); + }; +} diff --git a/server/api/voice_context/index.js b/server/api/voice_context/index.js index 64e7f79..8f14e04 100644 --- a/server/api/voice_context/index.js +++ b/server/api/voice_context/index.js @@ -1 +1,16 @@ -var _0x2ada=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65","\x63\x6F\x6E\x74\x65\x78\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x2ada[0];var express=require(_0x2ada[1]);var controller=require(_0x2ada[2]);var auth=require(_0x2ada[3]);var router=express.Router();router[_0x2ada[9]](_0x2ada[4],auth[_0x2ada[5]](),auth[_0x2ada[7]]([7],[_0x2ada[6]]),controller[_0x2ada[8]]);router[_0x2ada[9]](_0x2ada[10],auth[_0x2ada[5]](),auth[_0x2ada[7]]([7],[_0x2ada[6]]),controller[_0x2ada[11]]);router[_0x2ada[13]](_0x2ada[4],auth[_0x2ada[5]](),auth[_0x2ada[7]]([7],[_0x2ada[6]]),controller[_0x2ada[12]]);router[_0x2ada[13]](_0x2ada[14],auth[_0x2ada[5]](),auth[_0x2ada[7]]([7],[_0x2ada[6]]),controller[_0x2ada[15]]);router[_0x2ada[17]](_0x2ada[10],auth[_0x2ada[5]](),auth[_0x2ada[7]]([7],[_0x2ada[6]]),controller[_0x2ada[16]]);router[_0x2ada[19]](_0x2ada[4],auth[_0x2ada[5]](),auth[_0x2ada[7]]([7],[_0x2ada[6]]),controller[_0x2ada[18]]);router[_0x2ada[19]](_0x2ada[10],auth[_0x2ada[5]](),auth[_0x2ada[7]]([7],[_0x2ada[6]]),controller[_0x2ada[20]]);module[_0x2ada[21]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./voice_context.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.create); +router.post('/validate', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.contextValidation); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.destroy); +module.exports = router; diff --git a/server/api/voice_context/voice_context.controller.js b/server/api/voice_context/voice_context.controller.js index 06f66d8..c6ec224 100644 --- a/server/api/voice_context/voice_context.controller.js +++ b/server/api/voice_context/voice_context.controller.js @@ -1 +1,227 @@ -var _0x794a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x6F\x6E\x74\x65\x78\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x6E\x61\x6D\x65","\x62\x6F\x64\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x72\x65\x61\x74\x65","\x6D\x65\x73\x73\x61\x67\x65","\x54\x68\x65\x20\x63\x6F\x6E\x74\x65\x78\x74\x20\x6E\x61\x6D\x65\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x65\x78\x69\x73\x74\x73","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x43\x4F\x4E\x54\x45\x58\x54","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x6C\x65\x6E\x67\x74\x68","\x64\x65\x73\x74\x72\x6F\x79","\x65\x72\x72","\x6C\x6F\x67","\x54\x68\x65\x20\x63\x6F\x6E\x74\x65\x78\x74\x20\x69\x73\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x65\x64\x20\x74\x6F\x20\x61\x20\x72\x6F\x75\x74\x65\x2C\x20\x64\x65\x6C\x65\x74\x65\x20\x6F\x72\x20\x63\x68\x61\x6E\x67\x65\x20\x69\x74\x20\x66\x69\x72\x73\x74","\x4D\x45\x53\x53\x41\x47\x45\x5F\x43\x4F\x4E\x54\x45\x58\x54\x5F\x52\x4F\x55\x54\x45\x5F\x41\x53\x53\x4F\x43\x49\x41\x54\x45\x44","\x64\x65\x66\x61\x75\x6C\x74\x45\x6E\x74\x72\x79","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x64\x65\x6C\x65\x74\x65\x20\x61\x20\x64\x65\x66\x61\x75\x6C\x74\x20\x65\x6E\x74\x72\x79\x21","\x4D\x45\x53\x53\x41\x47\x45\x5F\x44\x45\x46\x41\x55\x4C\x54\x5F\x45\x4E\x54\x52\x59","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x66\x69\x6E\x64","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x6D\x61\x70"];_0x794a[0];var _=require(_0x794a[1]);var util=require(_0x794a[2]);var Util=require(_0x794a[3]);var sequelize=require(_0x794a[5])[_0x794a[4]];var VoiceContext=require(_0x794a[5])[_0x794a[6]];var VoiceExtension=require(_0x794a[5])[_0x794a[7]];exports[_0x794a[8]]= function(_0x8ea4x7,_0x8ea4x8,_0x8ea4x9){return VoiceContext[_0x794a[15]](Util[_0x794a[14]](_0x8ea4x7[_0x794a[13]]))[_0x794a[12]](function(_0x8ea4xb){_0x8ea4x8[_0x794a[11]](200)[_0x794a[10]](_0x8ea4xb)})[_0x794a[9]](function(_0x8ea4xa){return handleError(_0x8ea4x8,_0x8ea4xa)})};exports[_0x794a[16]]= function(_0x8ea4x7,_0x8ea4x8){return VoiceContext[_0x794a[20]](_0x8ea4x7[_0x794a[19]][_0x794a[18]])[_0x794a[12]](function(_0x8ea4xc){if(!_0x8ea4xc){return _0x8ea4x8[_0x794a[17]](404)};return _0x8ea4x8[_0x794a[10]](_0x8ea4xc)})[_0x794a[9]](function(_0x8ea4xa){return handleError(_0x8ea4x8,_0x8ea4xa)})};exports[_0x794a[21]]= function(_0x8ea4x7,_0x8ea4x8){return VoiceContext[_0x794a[24]]({where:{name:_0x8ea4x7[_0x794a[23]][_0x794a[22]]}})[_0x794a[12]](function(_0x8ea4xd){if(!_0x8ea4xd){return _0x8ea4x8[_0x794a[17]](404)};return _0x8ea4x8[_0x794a[10]](_0x8ea4xd)})[_0x794a[9]](function(_0x8ea4xa){return handleError(_0x8ea4x8,_0x8ea4xa)})};exports[_0x794a[25]]= function(_0x8ea4x7,_0x8ea4x8){return VoiceContext[_0x794a[25]](_0x8ea4x7[_0x794a[23]])[_0x794a[12]](function(_0x8ea4xc){return _0x8ea4x8[_0x794a[11]](201)[_0x794a[10]](_0x8ea4xc)})[_0x794a[9]](sequelize.UniqueConstraintError,function(_0x8ea4xa){_0x8ea4xa[_0x794a[26]]= _0x794a[27];_0x8ea4xa[_0x794a[28]]= _0x794a[29];return handleError(_0x8ea4x8,_0x8ea4xa)})[_0x794a[9]](function(_0x8ea4xa){return handleError(_0x8ea4x8,_0x8ea4xa)})};exports[_0x794a[30]]= function(_0x8ea4x7,_0x8ea4x8){return VoiceContext[_0x794a[24]]({where:{name:_0x8ea4x7[_0x794a[23]][_0x794a[22]],id:{$ne:_0x8ea4x7[_0x794a[23]][_0x794a[18]]}}})[_0x794a[12]](function(_0x8ea4xf){if(!_0x8ea4xf){return _0x8ea4x8[_0x794a[17]](404)};if(_0x8ea4xf[_0x794a[33]]> 0){return _0x8ea4x8[_0x794a[11]](500)[_0x794a[10]]({message:_0x794a[29]})};if(_0x8ea4x7[_0x794a[23]][_0x794a[18]]){delete _0x8ea4x7[_0x794a[23]][_0x794a[18]]};return VoiceContext[_0x794a[20]](_0x8ea4x7[_0x794a[19]][_0x794a[18]])})[_0x794a[12]](function(_0x8ea4xc){if(!_0x8ea4xc){return _0x8ea4x8[_0x794a[17]](404)};var _0x8ea4xe=_[_0x794a[31]](_0x8ea4xc,_0x8ea4x7[_0x794a[23]]);return _0x8ea4xe[_0x794a[32]]()})[_0x794a[12]](function(_0x8ea4xc){return _0x8ea4x8[_0x794a[11]](200)[_0x794a[10]](_0x8ea4xc)})[_0x794a[9]](function(_0x8ea4xa){return handleError(_0x8ea4x8,_0x8ea4xa)})};exports[_0x794a[34]]= function(_0x8ea4x7,_0x8ea4x8){var _0x8ea4x10;return VoiceContext[_0x794a[20]](_0x8ea4x7[_0x794a[19]][_0x794a[18]])[_0x794a[12]](function(_0x8ea4xc){_0x8ea4x10= _0x8ea4xc;if(!_0x8ea4x10){return _0x8ea4x8[_0x794a[17]](404)};if(_0x8ea4x10[_0x794a[39]]){return _0x8ea4x8[_0x794a[11]](500)[_0x794a[10]]({message:_0x794a[40],translatedMessage:_0x794a[41]})};return VoiceExtension[_0x794a[24]]({where:{context:_0x8ea4x10[_0x794a[22]],VoiceContextId:null}})})[_0x794a[12]](function(_0x8ea4x11){console[_0x794a[36]](_0x8ea4x11);if(_0x8ea4x11[_0x794a[33]]> 0){return _0x8ea4x8[_0x794a[11]](500)[_0x794a[10]]({message:_0x794a[37],translatedMessage:_0x794a[38]})};return _0x8ea4x10[_0x794a[34]]()})[_0x794a[12]](function(){return _0x8ea4x8[_0x794a[17]](204)})[_0x794a[9]](function(_0x8ea4xa){console[_0x794a[36]](_0x794a[35],_0x8ea4xa);return handleError(_0x8ea4x8,_0x8ea4xa)})};exports[_0x794a[42]]= function(_0x8ea4x7,_0x8ea4x8){var _0x8ea4x12;return VoiceContext[_0x794a[24]]({where:{id:_0x8ea4x7[_0x794a[13]][_0x794a[43]]}})[_0x794a[12]](function(_0x8ea4xd){_0x8ea4x12= _0x8ea4xd;var _0x8ea4x13=_[_0x794a[44]](_0x8ea4x12,{defaultEntry:true});if(_0x8ea4x13){return _0x8ea4x8[_0x794a[11]](500)[_0x794a[10]]({message:_0x794a[40],translatedMessage:_0x794a[41]})};if(!_0x8ea4x12){return _0x8ea4x8[_0x794a[17]](404)};var _0x8ea4x14=_[_0x794a[46]](_[_0x794a[46]](_0x8ea4x12,_0x794a[45]),_0x794a[22]);return VoiceExtension[_0x794a[24]]({where:{context:_0x8ea4x14,VoiceContextId:null}})})[_0x794a[12]](function(_0x8ea4x11){if(_0x8ea4x11[_0x794a[33]]> _0x8ea4x12[_0x794a[33]]){return _0x8ea4x8[_0x794a[11]](500)[_0x794a[10]]({message:_0x794a[37],translatedMessage:_0x794a[38]})};return VoiceContext[_0x794a[34]]({where:{id:_0x8ea4x7[_0x794a[13]][_0x794a[43]]},individualHooks:true})})[_0x794a[12]](function(){return _0x8ea4x8[_0x794a[17]](204)})[_0x794a[9]](function(_0x8ea4xa){console[_0x794a[36]](_0x8ea4xa);return handleError(_0x8ea4x8,_0x8ea4xa)})};function handleError(_0x8ea4x8,_0x8ea4xa){return _0x8ea4x8[_0x794a[11]](500)[_0x794a[10]](_0x8ea4xa)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); + +var Util = require('../../config/util'); +var sequelize = require('../../models').sequelize; + +var VoiceContext = require('../../models').VoiceContext; +var VoiceExtension = require('../../models').VoiceExtension; + +// Get list of agents +exports.index = function(req, res, next) { + return VoiceContext + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single voiceContext +exports.show = function(req, res) { + return VoiceContext + .findById(req.params.id) + .then(function(voiceContext) { + if (!voiceContext) { + return res.sendStatus(404); + } + return res.send(voiceContext); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Validate the existence of a context +exports.contextValidation = function(req, res) { + return VoiceContext + .findAll({ + where: { + name: req.body.name + } + }) + .then(function(voiceContexts) { + if (!voiceContexts) { + return res.sendStatus(404); + } + return res.send(voiceContexts); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new voiceContext in the DB. +exports.create = function(req, res) { + return VoiceContext + .create(req.body) + .then(function(voiceContext) { + return res.status(201).send(voiceContext); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + err.message = 'The context name already exists'; + err.translatedMessage = 'MESSAGE_EXIST_CONTEXT' + return handleError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); + +}; + +// Updates an existing voiceContext in the DB. +exports.update = function(req, res) { + return VoiceContext + .findAll({ + where: { + name: req.body.name, + id: { + $ne: req.body.id + } + } + }) + .then(function(existingContexts) { + if (!existingContexts) { + return res.sendStatus(404); + } + if (existingContexts.length > 0) { + return res.status(500).send({ + message: 'MESSAGE_EXIST_CONTEXT' + }); + } + if (req.body.id) { + delete req.body.id; + } + return VoiceContext + .findById(req.params.id); + }) + .then(function(voiceContext) { + if (!voiceContext) { + return res.sendStatus(404); + } + var updated = _.merge(voiceContext, req.body); + return updated + .save(); + }) + .then(function(voiceContext) { + return res.status(200).send(voiceContext); + }) + .catch(function(err) { + return handleError(res, err); + }); + +}; + +// Deletes a voiceContext from the DB. +exports.destroy = function(req, res) { + var _voiceContext; + + return VoiceContext + .findById(req.params.id) + .then(function(voiceContext) { + _voiceContext = voiceContext; + if (!_voiceContext) { + return res.sendStatus(404); + } + if (_voiceContext.defaultEntry) { + return res.status(500).send({ + message: 'You can\'t delete a default entry!', + translatedMessage: 'MESSAGE_DEFAULT_ENTRY' + }); + } + return VoiceExtension + .findAll({ + where: { + context: _voiceContext.name, + VoiceContextId: null + } + }); + }) + .then(function(contextExtensions) { + console.log(contextExtensions); + if (contextExtensions.length > 0) { + return res.status(500).send({ + message: 'The context is associated to a route, delete or change it first', + translatedMessage: 'MESSAGE_CONTEXT_ROUTE_ASSOCIATED' + }); + } + return _voiceContext + .destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + console.log('err', err); + return handleError(res, err); + }); + +}; + +// Deletes a context from the DB. +exports.bulkDestroy = function(req, res) { + + var _voiceContexts; + + return VoiceContext + .findAll({ + where: { + id: req.query.ids + } + }) + .then(function(voiceContexts) { + _voiceContexts = voiceContexts; + var isDefault = _.find(_voiceContexts, { + defaultEntry: true + }); + if (isDefault) { + return res.status(500).send({ + message: 'You can\'t delete a default entry!', + translatedMessage: 'MESSAGE_DEFAULT_ENTRY' + }); + } + if (!_voiceContexts) { + return res.sendStatus(404); + } + var destroyContextsNames = _.map(_.map(_voiceContexts, 'dataValues'), 'name'); + + return VoiceExtension + .findAll({ + where: { + context: destroyContextsNames, + VoiceContextId: null + } + }); + }) + .then(function(contextExtensions) { + if (contextExtensions.length > _voiceContexts.length) { + return res.status(500).send({ + message: 'The context is associated to a route, delete or change it first', + translatedMessage: 'MESSAGE_CONTEXT_ROUTE_ASSOCIATED' + }); + } + + return VoiceContext + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/voice_context/voice_context.events.js b/server/api/voice_context/voice_context.events.js index 31a9498..c7c0711 100644 --- a/server/api/voice_context/voice_context.events.js +++ b/server/api/voice_context/voice_context.events.js @@ -1 +1,36 @@ -var _0xd557=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xd557[0];const EventEmitter=require(_0xd557[1]);const VoiceContext=require(_0xd557[3])[_0xd557[2]];var VoiceContextEvents= new EventEmitter();VoiceContextEvents[_0xd557[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xd557[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xd557[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xd557[6]};for(var e in events){var event=events[e];VoiceContext[_0xd557[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xdb99x8,_0xdb99x9,_0xdb99xa){VoiceContextEvents[_0xd557[10]](event+ _0xd557[8]+ _0xdb99x8[_0xd557[9]],_0xdb99x8);VoiceContextEvents[_0xd557[10]](event,_0xdb99x8);_0xdb99xa(null)}}module[_0xd557[11]]= VoiceContextEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const VoiceContext = require('../../models').VoiceContext; + +var VoiceContextEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +VoiceContextEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + VoiceContext.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + VoiceContextEvents.emit(event + ':' + doc._id, doc); + VoiceContextEvents.emit(event, doc); + done(null); + } +} + +module.exports = VoiceContextEvents; diff --git a/server/api/voice_context/voice_context.socket.js b/server/api/voice_context/voice_context.socket.js index 4ded71f..34a2d6e 100644 --- a/server/api/voice_context/voice_context.socket.js +++ b/server/api/voice_context/voice_context.socket.js @@ -1 +1,32 @@ -var _0x524c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x524c[0];const VoiceContextEvents=require(_0x524c[1]);var events=[_0x524c[2],_0x524c[3]];exports[_0x524c[4]]= function(_0x5e59x3){for(var _0x5e59x4=0,_0x5e59x5=events[_0x524c[5]];_0x5e59x4< _0x5e59x5;_0x5e59x4++){var _0x5e59x6=events[_0x5e59x4];var _0x5e59x7=createListener(_0x524c[6]+ _0x5e59x6,_0x5e59x3);VoiceContextEvents[_0x524c[7]](_0x5e59x6,_0x5e59x7);_0x5e59x3[_0x524c[7]](_0x524c[8],removeListener(_0x5e59x6,_0x5e59x7))}};function createListener(_0x5e59x6,_0x5e59x3){return function(_0x5e59x9){_0x5e59x3[_0x524c[9]](_0x5e59x6,_0x5e59x9)}}function removeListener(_0x5e59x6,_0x5e59x7){return function(){VoiceContextEvents[_0x524c[10]](_0x5e59x6,_0x5e59x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const VoiceContextEvents = require('./voice_context.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('voice_context:' + event, socket); + + VoiceContextEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + VoiceContextEvents.removeListener(event, listener); + }; +} diff --git a/server/api/voice_disposition/index.js b/server/api/voice_disposition/index.js index ea284cf..2c15433 100644 --- a/server/api/voice_disposition/index.js +++ b/server/api/voice_disposition/index.js @@ -1 +1,18 @@ -var _0x322c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x70\x61\x74\x63\x68","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x322c[0];var express=require(_0x322c[1]);var auth=require(_0x322c[2]);var controller=require(_0x322c[3]);var router=express.Router();router[_0x322c[7]](_0x322c[4],auth[_0x322c[5]](),controller[_0x322c[6]]);router[_0x322c[7]](_0x322c[8],auth[_0x322c[5]](),controller[_0x322c[9]]);router[_0x322c[11]](_0x322c[4],auth[_0x322c[5]](),controller[_0x322c[10]]);router[_0x322c[13]](_0x322c[8],auth[_0x322c[5]](),controller[_0x322c[12]]);router[_0x322c[14]](_0x322c[8],auth[_0x322c[5]](),controller[_0x322c[12]]);router[_0x322c[16]](_0x322c[8],auth[_0x322c[5]](),controller[_0x322c[15]]);module[_0x322c[17]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./voice_disposition.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), controller.index); + +router.get('/:id', auth.isAuthenticated(), controller.show); +router.post('/', auth.isAuthenticated(), controller.create); +router.put('/:id', auth.isAuthenticated(), controller.update); +router.patch('/:id', auth.isAuthenticated(), controller.update); +router.delete('/:id', auth.isAuthenticated(), controller.destroy); + + +module.exports = router; diff --git a/server/api/voice_disposition/voice_disposition.controller.js b/server/api/voice_disposition/voice_disposition.controller.js index 4099ab7..96b0f15 100644 --- a/server/api/voice_disposition/voice_disposition.controller.js +++ b/server/api/voice_disposition/voice_disposition.controller.js @@ -1 +1,112 @@ -var _0xcec1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x56\x6F\x69\x63\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x6C\x6F\x67","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65"];_0xcec1[0];var _=require(_0xcec1[1]);var VoiceDisposition=require(_0xcec1[3])[_0xcec1[2]];function handleError(_0xd2a3x4,_0xd2a3x5){_0xd2a3x5= _0xd2a3x5|| 500;return function(_0xd2a3x6){console[_0xcec1[4]](_0xd2a3x6);_0xd2a3x4[_0xcec1[6]](_0xd2a3x5)[_0xcec1[5]](_0xd2a3x6)}}function responseWithResult(_0xd2a3x4,_0xd2a3x5){_0xd2a3x5= _0xd2a3x5|| 200;return function(_0xd2a3x8){if(_0xd2a3x8){_0xd2a3x4[_0xcec1[6]](_0xd2a3x5)[_0xcec1[7]](_0xd2a3x8)}}}function responseWithoutResult(_0xd2a3x4,_0xd2a3x5){_0xd2a3x5= _0xd2a3x5|| 200;return function(){_0xd2a3x4[_0xcec1[8]](_0xd2a3x5)}}function handleEntityNotFound(_0xd2a3x4){return function(_0xd2a3x8){if(!_0xd2a3x8){_0xd2a3x4[_0xcec1[6]](404)[_0xcec1[9]]();return null};return _0xd2a3x8}}function saveUpdates(_0xd2a3xc){return function(_0xd2a3x8){return _0xd2a3x8[_0xcec1[11]](_0xd2a3xc)[_0xcec1[10]](function(_0xd2a3xd){return _0xd2a3xd})}}function removeEntity(_0xd2a3x4){return function(_0xd2a3x8){if(_0xd2a3x8){return _0xd2a3x8[_0xcec1[12]]()[_0xcec1[10]](function(){_0xd2a3x4[_0xcec1[6]](204)[_0xcec1[9]]()})}}}exports[_0xcec1[13]]= function(_0xd2a3xf,_0xd2a3x4){VoiceDisposition[_0xcec1[15]]()[_0xcec1[10]](responseWithResult(_0xd2a3x4))[_0xcec1[14]](handleError(_0xd2a3x4))};exports[_0xcec1[16]]= function(_0xd2a3xf,_0xd2a3x4){VoiceDisposition[_0xcec1[19]](_0xd2a3xf[_0xcec1[18]][_0xcec1[17]])[_0xcec1[10]](handleEntityNotFound(_0xd2a3x4))[_0xcec1[10]](responseWithResult(_0xd2a3x4))[_0xcec1[14]](handleError(_0xd2a3x4))};exports[_0xcec1[20]]= function(_0xd2a3xf,_0xd2a3x4){VoiceDisposition[_0xcec1[20]](_0xd2a3xf[_0xcec1[21]])[_0xcec1[10]](responseWithResult(_0xd2a3x4,201))[_0xcec1[14]](handleError(_0xd2a3x4))};exports[_0xcec1[22]]= function(_0xd2a3xf,_0xd2a3x4){if(_0xd2a3xf[_0xcec1[21]][_0xcec1[17]]){delete _0xd2a3xf[_0xcec1[21]][_0xcec1[17]]};VoiceDisposition[_0xcec1[19]](_0xd2a3xf[_0xcec1[18]][_0xcec1[17]])[_0xcec1[10]](handleEntityNotFound(_0xd2a3x4))[_0xcec1[10]](saveUpdates(_0xd2a3xf[_0xcec1[21]]))[_0xcec1[10]](responseWithResult(_0xd2a3x4))[_0xcec1[14]](handleError(_0xd2a3x4))};exports[_0xcec1[12]]= function(_0xd2a3xf,_0xd2a3x4){VoiceDisposition[_0xcec1[19]](_0xd2a3xf[_0xcec1[18]][_0xcec1[17]])[_0xcec1[10]](handleEntityNotFound(_0xd2a3x4))[_0xcec1[10]](removeEntity(_0xd2a3x4))[_0xcec1[14]](handleError(_0xd2a3x4))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/voice/dispositions -> index + * POST /api/voice/dispositions -> create + * GET /api/voice/dispositions/:id -> show + * PUT /api/voice/dispositions/:id -> update + * DELETE /api/voice/dispositions/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); + +var VoiceDisposition = require('../../models').VoiceDisposition; + + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + console.log(err); + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 200; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Gets a list of VoiceDispositions +exports.index = function(req, res) { + VoiceDisposition.findAndCountAll() + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Gets a single VoiceDisposition from the DB +exports.show = function(req, res) { + VoiceDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Creates a new VoiceDisposition in the DB +exports.create = function(req, res) { + VoiceDisposition.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing VoiceDisposition in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + VoiceDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a VoiceDisposition from the DB +exports.destroy = function(req, res) { + VoiceDisposition.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} diff --git a/server/api/voice_disposition/voice_disposition.events.js b/server/api/voice_disposition/voice_disposition.events.js index 5c5970a..8436878 100644 --- a/server/api/voice_disposition/voice_disposition.events.js +++ b/server/api/voice_disposition/voice_disposition.events.js @@ -1 +1,36 @@ -var _0x3626=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x56\x6F\x69\x63\x65\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x3626[0];const EventEmitter=require(_0x3626[1]);const VoiceDisposition=require(_0x3626[3])[_0x3626[2]];var VoiceDispositionEvents= new EventEmitter();VoiceDispositionEvents[_0x3626[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x3626[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x3626[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x3626[6]};for(var e in events){var event=events[e];VoiceDisposition[_0x3626[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xc84bx8,_0xc84bx9,_0xc84bxa){VoiceDispositionEvents[_0x3626[10]](event+ _0x3626[8]+ _0xc84bx8[_0x3626[9]],_0xc84bx8);VoiceDispositionEvents[_0x3626[10]](event,_0xc84bx8);_0xc84bxa(null)}}module[_0x3626[11]]= VoiceDispositionEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const VoiceDisposition = require('../../models').VoiceDisposition; + +var VoiceDispositionEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +VoiceDispositionEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + VoiceDisposition.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + VoiceDispositionEvents.emit(event + ':' + doc._id, doc); + VoiceDispositionEvents.emit(event, doc); + done(null); + } +} + +module.exports = VoiceDispositionEvents; diff --git a/server/api/voice_disposition/voice_disposition.socket.js b/server/api/voice_disposition/voice_disposition.socket.js index 4b0ebb2..6cfaf1c 100644 --- a/server/api/voice_disposition/voice_disposition.socket.js +++ b/server/api/voice_disposition/voice_disposition.socket.js @@ -1 +1,32 @@ -var _0x82aa=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x76\x6F\x69\x63\x65\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x82aa[0];const VoiceDispositionEvents=require(_0x82aa[1]);var events=[_0x82aa[2],_0x82aa[3]];exports[_0x82aa[4]]= function(_0x489cx3){for(var _0x489cx4=0,_0x489cx5=events[_0x82aa[5]];_0x489cx4< _0x489cx5;_0x489cx4++){var _0x489cx6=events[_0x489cx4];var _0x489cx7=createListener(_0x82aa[6]+ _0x489cx6,_0x489cx3);VoiceDispositionEvents[_0x82aa[7]](_0x489cx6,_0x489cx7);_0x489cx3[_0x82aa[7]](_0x82aa[8],removeListener(_0x489cx6,_0x489cx7))}};function createListener(_0x489cx6,_0x489cx3){return function(_0x489cx9){_0x489cx3[_0x82aa[9]](_0x489cx6,_0x489cx9)}}function removeListener(_0x489cx6,_0x489cx7){return function(){VoiceDispositionEvents[_0x82aa[10]](_0x489cx6,_0x489cx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const VoiceDispositionEvents = require('./voice_disposition.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('voice_disposition:' + event, socket); + + VoiceDispositionEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + VoiceDispositionEvents.removeListener(event, listener); + }; +} diff --git a/server/api/voice_extension/index.js b/server/api/voice_extension/index.js index c35c79d..29591db 100644 --- a/server/api/voice_extension/index.js +++ b/server/api/voice_extension/index.js @@ -1 +1,16 @@ -var _0x2bd5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x2bd5[0];var express=require(_0x2bd5[1]);var controller=require(_0x2bd5[2]);var auth=require(_0x2bd5[3]);var router=express.Router();router[_0x2bd5[9]](_0x2bd5[4],auth[_0x2bd5[5]](),auth[_0x2bd5[7]]([7],[_0x2bd5[6]]),controller[_0x2bd5[8]]);router[_0x2bd5[9]](_0x2bd5[10],auth[_0x2bd5[5]](),auth[_0x2bd5[7]]([7],[_0x2bd5[6]]),controller[_0x2bd5[11]]);router[_0x2bd5[13]](_0x2bd5[4],auth[_0x2bd5[5]](),auth[_0x2bd5[7]]([7],[_0x2bd5[6]]),controller[_0x2bd5[12]]);router[_0x2bd5[15]](_0x2bd5[10],auth[_0x2bd5[5]](),auth[_0x2bd5[7]]([7],[_0x2bd5[6]]),controller[_0x2bd5[14]]);router[_0x2bd5[17]](_0x2bd5[4],auth[_0x2bd5[5]](),auth[_0x2bd5[7]]([7],[_0x2bd5[6]]),controller[_0x2bd5[16]]);router[_0x2bd5[17]](_0x2bd5[10],auth[_0x2bd5[5]](),auth[_0x2bd5[7]]([7],[_0x2bd5[6]]),controller[_0x2bd5[18]]);module[_0x2bd5[19]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./voice_extension.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.bulkDestroy); //check it for apps +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.destroy); //check it for apps + +module.exports = router; diff --git a/server/api/voice_extension/voice_extension.controller.js b/server/api/voice_extension/voice_extension.controller.js index 7c736e5..8a6ec34 100644 --- a/server/api/voice_extension/voice_extension.controller.js +++ b/server/api/voice_extension/voice_extension.controller.js @@ -1 +1,148 @@ -var _0x4ad5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x53\x65\x71\x75\x65\x6C\x69\x7A\x65","\x75\x74\x69\x6C","\x61\x73\x79\x6E\x63","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x69\x6E\x64\x65\x78","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\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","\x72\x6F\x75\x74\x65\x73","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x4F\x6E\x65","\x63\x72\x65\x61\x74\x65","\x65\x72\x72","\x6D\x65\x73\x73\x61\x67\x65","\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2F\x63\x6F\x6E\x74\x65\x78\x74\x20\x63\x6F\x6D\x62\x69\x6E\x61\x74\x69\x6F\x6E\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x65\x78\x69\x73\x74","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x52\x4F\x55\x54\x45","\x62\x6F\x64\x79","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x73","\x69\x73\x41\x72\x72\x61\x79","\x6C\x65\x6E\x67\x74\x68","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x72\x6F\x75\x74\x65\x55\x70\x64\x61\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x66\x69\x6E\x64\x42\x79\x49\x64","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x4ad5[0];var _=require(_0x4ad5[1]);var VoiceExtension=require(_0x4ad5[3])[_0x4ad5[2]];var Interval=require(_0x4ad5[3])[_0x4ad5[4]];var sequelize=require(_0x4ad5[3])[_0x4ad5[5]];var Sequelize=require(_0x4ad5[3])[_0x4ad5[6]];var util=require(_0x4ad5[7]);var async=require(_0x4ad5[8]);var veUtil=require(_0x4ad5[9]);var Util=require(_0x4ad5[10]);var Applications=veUtil[_0x4ad5[11]];exports[_0x4ad5[12]]= function(_0x1b7exb,_0x1b7exc,_0x1b7exd){return VoiceExtension[_0x4ad5[24]](_0x4ad5[22],_0x4ad5[23])[_0x4ad5[21]](_[_0x4ad5[20]](Util[_0x4ad5[19]](_0x1b7exb[_0x4ad5[18]]),{distinct:true}))[_0x4ad5[17]](function(_0x1b7exf){_0x1b7exc[_0x4ad5[16]](200)[_0x4ad5[15]](_0x1b7exf)})[_0x4ad5[14]](function(_0x1b7exe){console[_0x4ad5[13]](_0x1b7exe);return handleError(_0x1b7exc,_0x1b7exe)})};exports[_0x4ad5[25]]= function(_0x1b7exb,_0x1b7exc){return VoiceExtension[_0x4ad5[24]](_0x4ad5[23])[_0x4ad5[29]]({where:{id:_0x1b7exb[_0x4ad5[28]][_0x4ad5[27]],VoiceExtensionId:null}})[_0x4ad5[17]](function(_0x1b7ex10){if(!_0x1b7ex10){return _0x1b7exc[_0x4ad5[26]](404)};return _0x1b7exc[_0x4ad5[15]](_0x1b7ex10)})[_0x4ad5[14]](function(_0x1b7exe){return handleError(_0x1b7exc,_0x1b7exe)})};exports[_0x4ad5[30]]= function(_0x1b7exb,_0x1b7exc){var _0x1b7ex11;return sequelize[_0x4ad5[40]](function(_0x1b7ex12){return VoiceExtension[_0x4ad5[30]](_0x1b7exb[_0x4ad5[36]],{transaction:_0x1b7ex12})[_0x4ad5[17]](function(_0x1b7ex13){_0x1b7ex11= _0x1b7ex13;if(_0x1b7exb[_0x4ad5[36]][_0x4ad5[11]]&& Array[_0x4ad5[38]](_0x1b7exb[_0x4ad5[36]].Applications)&& _0x1b7exb[_0x4ad5[36]][_0x4ad5[11]][_0x4ad5[39]]){return _0x1b7ex13}})[_0x4ad5[17]](veUtil[_0x4ad5[37]](_0x1b7exb[_0x4ad5[36]].Applications,_0x1b7ex12,_0x1b7exc))})[_0x4ad5[17]](function(){return _0x1b7exc[_0x4ad5[16]](201)[_0x4ad5[15]](_0x1b7ex11)})[_0x4ad5[14]](sequelize.UniqueConstraintError,function(_0x1b7exe){_0x1b7exe[_0x4ad5[32]]= _0x4ad5[33];_0x1b7exe[_0x4ad5[34]]= _0x4ad5[35];return handleError(_0x1b7exc,_0x1b7exe)})[_0x4ad5[14]](sequelize.ValidationError,function(_0x1b7exe){_0x1b7exe[_0x4ad5[32]]= _0x4ad5[33];_0x1b7exe[_0x4ad5[34]]= _0x4ad5[35];return handleError(_0x1b7exc,_0x1b7exe)})[_0x4ad5[14]](function(_0x1b7exe){console[_0x4ad5[13]](_0x4ad5[31],_0x1b7exe);return handleError(_0x1b7exc,_0x1b7exe)})};exports[_0x4ad5[41]]= function(_0x1b7exb,_0x1b7exc){return sequelize[_0x4ad5[40]](function(_0x1b7ex12){return veUtil[_0x4ad5[42]](_0x1b7exb,_0x1b7ex12)})[_0x4ad5[17]](function(){return _0x1b7exc[_0x4ad5[26]](200)})[_0x4ad5[14]](sequelize.UniqueConstraintError,function(_0x1b7exe){_0x1b7exe[_0x4ad5[32]]= _0x4ad5[33];_0x1b7exe[_0x4ad5[34]]= _0x4ad5[35];console[_0x4ad5[13]](_0x1b7exe);return handleError(_0x1b7exc,_0x1b7exe)})[_0x4ad5[14]](function(_0x1b7exe){console[_0x4ad5[13]](_0x1b7exe);return handleError(_0x1b7exc,_0x1b7exe)})};exports[_0x4ad5[43]]= function(_0x1b7exb,_0x1b7exc,_0x1b7exd){return sequelize[_0x4ad5[40]](function(_0x1b7ex12){return VoiceExtension[_0x4ad5[44]](_0x1b7exb[_0x4ad5[28]][_0x4ad5[27]])[_0x4ad5[17]](function(_0x1b7ex10){if(!_0x1b7ex10){return _0x1b7exc[_0x4ad5[26]](404)};return _0x1b7ex10[_0x4ad5[43]]()})})[_0x4ad5[17]](function(){return _0x1b7exc[_0x4ad5[26]](204)})[_0x4ad5[14]](function(_0x1b7exe){console[_0x4ad5[13]](_0x1b7exe);return handleError(_0x1b7exc,_0x1b7exe)})};exports[_0x4ad5[45]]= function(_0x1b7exb,_0x1b7exc){return VoiceExtension[_0x4ad5[43]]({where:{id:_0x1b7exb[_0x4ad5[18]][_0x4ad5[46]]},individualHooks:true})[_0x4ad5[17]](function(){return _0x1b7exc[_0x4ad5[26]](204)})[_0x4ad5[14]](function(_0x1b7exe){return handleError(_0x1b7exc,_0x1b7exe)})};function handleError(_0x1b7exc,_0x1b7exe){return _0x1b7exc[_0x4ad5[16]](500)[_0x4ad5[15]](_0x1b7exe)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var VoiceExtension = require('../../models').VoiceExtension; +var Interval = require('../../models').Interval; +var sequelize = require('../../models').sequelize; +var Sequelize = require('../../models').Sequelize; +var util = require('util'); +var async = require('async'); +var veUtil = require('../../utils/voice_extension'); +var Util = require('../../config/util'); + +var Applications = veUtil.Applications; + +// Get list of extensions +exports.index = function(req, res, next) { + return VoiceExtension + .scope('routes', 'application') + .findAndCountAll(_.merge(Util.getQuery(req.query), { + distinct: true + })) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get a single voice_extension or application +exports.show = function(req, res) { + return VoiceExtension + .scope('application') + .findOne({ + where: { + id: req.params.id, + VoiceExtensionId: null + } + }) + .then(function(voice_extension) { + if (!voice_extension) { + return res.sendStatus(404); + } + return res.send(voice_extension); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.create = function(req, res) { + var _route; + return sequelize.transaction(function(t) { + return VoiceExtension + .create(req.body, { + transaction: t + }) + .then(function(route) { + _route = route; + if (req.body.Applications && Array.isArray(req.body.Applications) && req.body.Applications.length) { + return route; + } + }) + .then(veUtil.createApps(req.body.Applications, t, res)); + }) + .then(function() { + return res.status(201).send(_route); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + err.message = 'Extension/context combination already exist'; + err.translatedMessage = 'MESSAGE_EXIST_ROUTE' + return handleError(res, err); + }) + .catch(sequelize.ValidationError, function(err) { + err.message = 'Extension/context combination already exist'; + err.translatedMessage = 'MESSAGE_EXIST_ROUTE' + return handleError(res, err); + }) + .catch(function(err) { + console.log('err', err); + return handleError(res, err); + }); +} + + + +// Updates an existing voice_extension in the DB. +exports.update = function(req, res) { + return sequelize.transaction(function(t) { + return veUtil.routeUpdate(req, t); + }) + .then(function() { + return res.sendStatus(200); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + err.message = 'Extension/context combination already exist'; + err.translatedMessage = 'MESSAGE_EXIST_ROUTE' + console.log(err); + return handleError(res, err); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +} + +// Deletes a voice_extension from the DB. +exports.destroy = function(req, res, next) { + return sequelize.transaction(function(t) { + return VoiceExtension + .findById(req.params.id) + .then(function(voice_extension) { + if (!voice_extension) { + return res.sendStatus(404); + } + return voice_extension.destroy(); + }); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Deletes from the DB. +exports.bulkDestroy = function(req, res) { + return VoiceExtension + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/voice_extension/voice_extension.events.js b/server/api/voice_extension/voice_extension.events.js index 8369ddf..2facad8 100644 --- a/server/api/voice_extension/voice_extension.events.js +++ b/server/api/voice_extension/voice_extension.events.js @@ -1 +1,36 @@ -var _0x1a2e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x1a2e[0];const EventEmitter=require(_0x1a2e[1]);const VoiceExtension=require(_0x1a2e[3])[_0x1a2e[2]];var VoiceExtensionEvents= new EventEmitter();VoiceExtensionEvents[_0x1a2e[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x1a2e[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x1a2e[6],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x1a2e[7]};for(var e in events){var event=events[e];VoiceExtension[_0x1a2e[8]](e,emitEvent(event))};function emitEvent(event){return function(_0xf703x8,_0xf703x9,_0xf703xa){VoiceExtensionEvents[_0x1a2e[11]](event+ _0x1a2e[9]+ _0xf703x8[_0x1a2e[10]],_0xf703x8);VoiceExtensionEvents[_0x1a2e[11]](event,_0xf703x8);_0xf703xa(null)}}module[_0x1a2e[12]]= VoiceExtensionEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const VoiceExtension = require('../../models').VoiceExtension; + +var VoiceExtensionEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +VoiceExtensionEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'update', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + VoiceExtension.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + VoiceExtensionEvents.emit(event + ':' + doc._id, doc); + VoiceExtensionEvents.emit(event, doc); + done(null); + } +} + +module.exports = VoiceExtensionEvents; diff --git a/server/api/voice_extension/voice_extension.socket.js b/server/api/voice_extension/voice_extension.socket.js index 757c42b..7f2dca6 100644 --- a/server/api/voice_extension/voice_extension.socket.js +++ b/server/api/voice_extension/voice_extension.socket.js @@ -1 +1,32 @@ -var _0xdb99=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xdb99[0];const VoiceExtensionEvents=require(_0xdb99[1]);var events=[_0xdb99[2],_0xdb99[3],_0xdb99[4]];exports[_0xdb99[5]]= function(_0xffddx3){for(var _0xffddx4=0,_0xffddx5=events[_0xdb99[6]];_0xffddx4< _0xffddx5;_0xffddx4++){var _0xffddx6=events[_0xffddx4];var _0xffddx7=createListener(_0xdb99[7]+ _0xffddx6,_0xffddx3);VoiceExtensionEvents[_0xdb99[8]](_0xffddx6,_0xffddx7);_0xffddx3[_0xdb99[8]](_0xdb99[9],removeListener(_0xffddx6,_0xffddx7))}};function createListener(_0xffddx6,_0xffddx3){return function(_0xffddx9){_0xffddx3[_0xdb99[10]](_0xffddx6,_0xffddx9)}}function removeListener(_0xffddx6,_0xffddx7){return function(){VoiceExtensionEvents[_0xdb99[11]](_0xffddx6,_0xffddx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const VoiceExtensionEvents = require('./voice_extension.events'); + +// Model events to emit +var events = ['save', 'update', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('voice_extension:' + event, socket); + + VoiceExtensionEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + VoiceExtensionEvents.removeListener(event, listener); + }; +} diff --git a/server/api/voice_musiconhold/index.js b/server/api/voice_musiconhold/index.js index e974a62..8bcbd0e 100644 --- a/server/api/voice_musiconhold/index.js +++ b/server/api/voice_musiconhold/index.js @@ -1 +1,21 @@ -var _0x37d1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x73\x74\x72\x65\x61\x6D","\x73\x74\x72\x65\x61\x6D","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x66\x69\x6C\x65\x73","\x73\x68\x6F\x77\x41\x75\x64\x69\x6F\x46\x69\x6C\x65\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65","\x6D\x6F\x68\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x61\x64\x64\x46\x69\x6C\x65\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65\x41\x75\x64\x69\x6F\x46\x69\x6C\x65\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0x37d1[0];var express=require(_0x37d1[1]);var controller=require(_0x37d1[2]);var auth=require(_0x37d1[3]);var router=express.Router();router[_0x37d1[9]](_0x37d1[4],auth[_0x37d1[5]](),auth[_0x37d1[7]]([7],[_0x37d1[6]]),controller[_0x37d1[8]]);router[_0x37d1[9]](_0x37d1[10],auth[_0x37d1[5]](),auth[_0x37d1[7]]([7],[_0x37d1[6]]),controller[_0x37d1[11]]);router[_0x37d1[9]](_0x37d1[12],auth[_0x37d1[5]](),auth[_0x37d1[7]]([7],[_0x37d1[6]]),controller[_0x37d1[13]]);router[_0x37d1[9]](_0x37d1[14],auth[_0x37d1[5]](),auth[_0x37d1[7]]([7],[_0x37d1[6]]),controller[_0x37d1[15]]);router[_0x37d1[17]](_0x37d1[4],auth[_0x37d1[5]](),auth[_0x37d1[7]]([7],[_0x37d1[6]]),controller[_0x37d1[16]]);router[_0x37d1[17]](_0x37d1[18],auth[_0x37d1[5]](),auth[_0x37d1[7]]([7],[_0x37d1[6]]),controller[_0x37d1[19]]);router[_0x37d1[17]](_0x37d1[14],auth[_0x37d1[5]](),auth[_0x37d1[7]]([7],[_0x37d1[6]]),controller[_0x37d1[20]]);router[_0x37d1[22]](_0x37d1[12],auth[_0x37d1[5]](),auth[_0x37d1[7]]([7],[_0x37d1[6]]),controller[_0x37d1[21]]);router[_0x37d1[24]](_0x37d1[4],auth[_0x37d1[5]](),auth[_0x37d1[7]]([7],[_0x37d1[6]]),controller[_0x37d1[23]]);router[_0x37d1[24]](_0x37d1[12],auth[_0x37d1[5]](),auth[_0x37d1[7]]([7],[_0x37d1[6]]),controller[_0x37d1[25]]);router[_0x37d1[24]](_0x37d1[14],auth[_0x37d1[5]](),auth[_0x37d1[7]]([7],[_0x37d1[6]]),controller[_0x37d1[26]]);module[_0x37d1[27]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./voice_musiconhold.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.index); +router.get('/stream', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.stream); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.show); +router.get('/:id/files', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.showAudioFiles); +router.post('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.create); +router.post('/validate', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.mohValidation); +router.post('/:id/files', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.addFiles); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.destroy); +router.delete('/:id/files', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.deleteAudioFiles); + +module.exports = router; diff --git a/server/api/voice_musiconhold/voice_musiconhold.controller.js b/server/api/voice_musiconhold/voice_musiconhold.controller.js index 08c79db..83c6288 100644 --- a/server/api/voice_musiconhold/voice_musiconhold.controller.js +++ b/server/api/voice_musiconhold/voice_musiconhold.controller.js @@ -1 +1,290 @@ -var _0x8862=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x66\x73","\x6C\x6F\x64\x61\x73\x68","\x70\x61\x74\x68","\x75\x74\x69\x6C","\x66\x73\x2D\x65\x78\x74\x72\x61","\x72\x65\x6D\x6F\x76\x65","\x66\x69\x6C\x65\x2D\x62\x61\x73\x65\x36\x34","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x53\x6F\x75\x6E\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x65\x74\x74\x69\x6E\x67","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x56\x6F\x69\x63\x65\x4D\x75\x73\x69\x63\x4F\x6E\x48\x6F\x6C\x64","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x64\x64\x46\x69\x6C\x65\x73","\x64\x69\x72\x65\x63\x74\x6F\x72\x79","\x64\x69\x73\x70\x6C\x61\x79\x5F\x6E\x61\x6D\x65","\x2E\x77\x61\x76","\x6A\x6F\x69\x6E","\x73\x6F\x75\x6E\x64\x50\x61\x74\x68","\x2F\x76\x61\x72\x2F\x6F\x70\x74\x2F\x6D\x6F\x74\x69\x6F\x6E\x2F\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x73\x6F\x75\x6E\x64\x73\x2F\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x73\x61\x76\x65\x5F\x6E\x61\x6D\x65","\x63\x6F\x70\x79\x53\x79\x6E\x63","\x66\x6F\x72\x45\x61\x63\x68","\x30\x37\x37\x37","\x63\x68\x6D\x6F\x64\x53\x79\x6E\x63","\x73\x6F\x75\x6E\x64\x73","\x62\x6F\x64\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77\x41\x75\x64\x69\x6F\x46\x69\x6C\x65\x73","\x66\x69\x6C\x65\x73","\x72\x65\x61\x64\x64\x69\x72","\x64\x65\x6C\x65\x74\x65\x41\x75\x64\x69\x6F\x46\x69\x6C\x65\x73","\x2F","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x75\x6E\x6C\x69\x6E\x6B","\x6D\x6F\x68\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x6C\x6F\x67","\x6E\x61\x6D\x65","\x63\x72\x65\x61\x74\x65","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x6D\x6F\x68","\x72\x6F\x6C\x6C\x62\x61\x63\x6B","\x66\x69\x6C\x65\x20\x65\x72\x72\x6F\x72","\x4D\x45\x53\x53\x41\x47\x45\x5F\x46\x49\x4C\x45\x5F\x43\x52\x45\x41\x54\x49\x4F\x4E\x5F\x45\x52\x52\x4F\x52","\x63\x6F\x6D\x6D\x69\x74","\x66\x69\x6C\x65\x20\x63\x72\x65\x61\x74\x65\x64","\x6D\x6B\x64\x69\x72","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x61\x6C\x6C","\x70\x75\x73\x68","\x69\x64\x73","\x73\x74\x72\x65\x61\x6D","\x65\x6E\x63\x6F\x64\x65"];_0x8862[0];var fs=require(_0x8862[1]);var _=require(_0x8862[2]);var path=require(_0x8862[3]);var util=require(_0x8862[4]);var fse=require(_0x8862[5]);var remove=require(_0x8862[6]);var base64=require(_0x8862[7]);var config=require(_0x8862[8]);var Util=require(_0x8862[9]);var Sound=require(_0x8862[11])[_0x8862[10]];var Setting=require(_0x8862[11])[_0x8862[12]];var sequelize=require(_0x8862[11])[_0x8862[13]];var VoiceMusicOnHold=require(_0x8862[11])[_0x8862[14]];exports[_0x8862[15]]= function(_0xd03dxe,_0xd03dxf){return VoiceMusicOnHold[_0x8862[22]](Util[_0x8862[21]](_0xd03dxe[_0x8862[20]]))[_0x8862[19]](function(_0xd03dx11){_0xd03dxf[_0x8862[18]](200)[_0x8862[17]](_0xd03dx11)})[_0x8862[16]](function(_0xd03dx10){return handleError(_0xd03dxf,_0xd03dx10)})};exports[_0x8862[23]]= function(_0xd03dxe,_0xd03dxf){return VoiceMusicOnHold[_0x8862[27]](_0xd03dxe[_0x8862[26]][_0x8862[25]])[_0x8862[19]](function(_0xd03dx12){if(!_0xd03dx12){return _0xd03dxf[_0x8862[24]](404)};return _0xd03dxf[_0x8862[17]](_0xd03dx12)})[_0x8862[16]](function(_0xd03dx10){return handleError(_0xd03dxf,_0xd03dx10)})};exports[_0x8862[28]]= function(_0xd03dxe,_0xd03dxf){var _0xd03dx13,_0xd03dx14;return VoiceMusicOnHold[_0x8862[27]](_0xd03dxe[_0x8862[26]][_0x8862[25]])[_0x8862[19]](function(_0xd03dx12){if(!_0xd03dx12){return _0xd03dxf[_0x8862[24]](404)};_0xd03dx13= _0xd03dx12;return Sound[_0x8862[42]]({where:{id:_0xd03dxe[_0x8862[41]][_0x8862[40]]}})})[_0x8862[19]](function(_0xd03dx18){_0xd03dx14= _0xd03dx18;return Setting[_0x8862[27]](1)})[_0x8862[19]](function(_0xd03dx15){var _0xd03dx16;_0xd03dx14[_0x8862[37]](function(_0xd03dx17){_0xd03dx16= path[_0x8862[32]](_0xd03dx13[_0x8862[29]],_0xd03dx17[_0x8862[30]]+ _0x8862[31]);fse[_0x8862[36]](path[_0x8862[32]](_0xd03dx15[_0x8862[33]]|| _0x8862[34],_0xd03dx17[_0x8862[35]]+ _0x8862[31]),_0xd03dx16)});fs[_0x8862[39]](_0xd03dx16,parseInt(_0x8862[38],8));_0xd03dxf[_0x8862[24]](200)})[_0x8862[16]](function(_0xd03dx10){return handleError(_0xd03dxf,_0xd03dx10)})};exports[_0x8862[43]]= function(_0xd03dxe,_0xd03dxf){var _0xd03dx19={};VoiceMusicOnHold[_0x8862[27]](_0xd03dxe[_0x8862[26]][_0x8862[25]])[_0x8862[19]](function(_0xd03dx12){if(!_0xd03dx12){return _0xd03dxf[_0x8862[24]](404)};_0xd03dx19[_0x8862[3]]= _0xd03dx12[_0x8862[29]];fs[_0x8862[45]](_0xd03dx12[_0x8862[29]],function(_0xd03dx10,_0xd03dx1a){if(!_0xd03dx10){_0xd03dx19[_0x8862[44]]= _0xd03dx1a;return _0xd03dxf[_0x8862[17]](_0xd03dx19)}else {throw _0xd03dx10}})})[_0x8862[16]](function(_0xd03dx10){return handleError(_0xd03dxf,_0xd03dx10)})};exports[_0x8862[46]]= function(_0xd03dxe,_0xd03dxf){return VoiceMusicOnHold[_0x8862[27]](_0xd03dxe[_0x8862[26]][_0x8862[25]])[_0x8862[19]](function(_0xd03dx12){if(!_0xd03dx12){return _0xd03dxf[_0x8862[24]](404)};var _0xd03dx1b=_0xd03dx12[_0x8862[29]]+ _0x8862[47]+ _0xd03dxe[_0x8862[20]][_0x8862[48]];fs[_0x8862[49]](_0xd03dx1b,function(_0xd03dx10){if(_0xd03dx10){return handleError(_0xd03dxf,_0xd03dx10)}else {return _0xd03dxf[_0x8862[24]](204)}})})[_0x8862[16]](function(_0xd03dx10){return handleError(_0xd03dxf,_0xd03dx10)})};exports[_0x8862[50]]= function(_0xd03dxe,_0xd03dxf){console[_0x8862[51]](_0xd03dxe[_0x8862[41]]);return VoiceMusicOnHold[_0x8862[42]]({where:{name:_0xd03dxe[_0x8862[41]][_0x8862[52]]}})[_0x8862[19]](function(_0xd03dx1c){if(!_0xd03dx1c){return _0xd03dxf[_0x8862[24]](404)};return _0xd03dxf[_0x8862[17]](_0xd03dx1c)})[_0x8862[16]](function(_0xd03dx10){return handleError(_0xd03dxf,_0xd03dx10)})};exports[_0x8862[53]]= function(_0xd03dxe,_0xd03dxf){return sequelize[_0x8862[62]]()[_0x8862[19]](function(_0xd03dx1d){_0xd03dxe[_0x8862[41]][_0x8862[29]]= path[_0x8862[32]](config[_0x8862[54]],_0x8862[55],_0xd03dxe[_0x8862[41]][_0x8862[52]]);return VoiceMusicOnHold[_0x8862[53]](_0xd03dxe[_0x8862[41]],{transaction:_0xd03dx1d})[_0x8862[19]](function(_0xd03dx12){fs[_0x8862[61]](_0xd03dx12[_0x8862[29]],parseInt(_0x8862[38],8),function(_0xd03dx10){if(_0xd03dx10){console[_0x8862[51]](_0x8862[57]);_0xd03dx1d[_0x8862[56]]();return _0xd03dxf[_0x8862[18]](500)[_0x8862[17]]({message:_0x8862[58]})};_0xd03dx1d[_0x8862[59]]();console[_0x8862[51]](_0x8862[60]);return _0xd03dxf[_0x8862[18]](201)[_0x8862[17]](_0xd03dx12)})})[_0x8862[16]](function(_0xd03dx10){_0xd03dx1d[_0x8862[56]]()})})};exports[_0x8862[63]]= function(_0xd03dxe,_0xd03dxf){if(_0xd03dxe[_0x8862[41]][_0x8862[25]]){delete _0xd03dxe[_0x8862[41]][_0x8862[25]]};return VoiceMusicOnHold[_0x8862[27]](_0xd03dxe[_0x8862[26]][_0x8862[25]])[_0x8862[19]](function(_0xd03dx12){if(!_0xd03dx12){return _0xd03dxf[_0x8862[24]](404)};var _0xd03dx1e=_[_0x8862[64]](_0xd03dx12,_0xd03dxe[_0x8862[41]]);return _0xd03dx1e[_0x8862[65]]()})[_0x8862[19]](function(_0xd03dx12){return _0xd03dxf[_0x8862[18]](200)[_0x8862[17]](_0xd03dx12)})[_0x8862[16]](function(_0xd03dx10){return handleError(_0xd03dxf,_0xd03dx10)})};exports[_0x8862[66]]= function(_0xd03dxe,_0xd03dxf){var _0xd03dx1f;return sequelize[_0x8862[62]](function(_0xd03dx1d){return VoiceMusicOnHold[_0x8862[27]](_0xd03dxe[_0x8862[26]][_0x8862[25]])[_0x8862[19]](function(_0xd03dx12){if(!_0xd03dx12){return _0xd03dxf[_0x8862[24]](404)};_0xd03dx1f= _0xd03dx12;return _0xd03dx12[_0x8862[66]]({transaction:_0xd03dx1d})})[_0x8862[19]](function(){remove(_0xd03dx1f[_0x8862[29]],function(_0xd03dx10){if(_0xd03dx10){console[_0x8862[51]](_0xd03dx10)};return _0xd03dxf[_0x8862[24]](204)})})})[_0x8862[16]](function(_0xd03dx10){return handleError(_0xd03dxf,_0xd03dx10)})};exports[_0x8862[67]]= function(_0xd03dxe,_0xd03dxf){var _0xd03dx20;return sequelize[_0x8862[62]](function(_0xd03dx1d){return VoiceMusicOnHold[_0x8862[42]]({where:{id:_0xd03dxe[_0x8862[20]][_0x8862[70]]}})[_0x8862[19]](function(_0xd03dx22){if(!_0xd03dx22){return _0xd03dxf[_0x8862[24]](404)};_0xd03dx20= _0xd03dx22;var _0xd03dx23=[];_0xd03dx22[_0x8862[37]](function(_0xd03dx21){_0xd03dx23[_0x8862[69]](_0xd03dx21[_0x8862[66]]({transaction:_0xd03dx1d}))});return _0xd03dx23})[_0x8862[68]]()[_0x8862[19]](function(){_0xd03dx20[_0x8862[37]](function(_0xd03dx21){remove(_0xd03dx21[_0x8862[29]],function(_0xd03dx10){if(_0xd03dx10){console[_0x8862[51]](_0xd03dx10);throw _0xd03dx10}})})})})[_0x8862[19]](function(){return _0xd03dxf[_0x8862[24]](204)})[_0x8862[16]](function(_0xd03dx10){return handleError(_0xd03dxf,_0xd03dx10)})};exports[_0x8862[71]]= function(_0xd03dxe,_0xd03dxf){var _0xd03dx24=decodeURI(_0xd03dxe[_0x8862[20]][_0x8862[3]]);base64[_0x8862[72]](_0xd03dx24,function(_0xd03dx10,_0xd03dx25){if(_0xd03dx10){return handleError(_0xd03dxf,_0xd03dx10)}else {return _0xd03dxf[_0x8862[18]](200)[_0x8862[17]](_0xd03dx25)}})};function handleError(_0xd03dxf,_0xd03dx10){console[_0x8862[51]](_0xd03dx10);return _0xd03dxf[_0x8862[18]](500)[_0x8862[17]](_0xd03dx10)} \ No newline at end of file +'use strict'; + +var fs = require('fs'); +var _ = require('lodash'); +var path = require('path'); +var util = require('util'); +var fse = require('fs-extra'); +var remove = require('remove'); +var base64 = require('file-base64'); + +var config = require('../../config/environment'); +var Util = require('../../config/util'); + +var Sound = require('../../models').Sound; +var Setting = require('../../models').Setting; +var sequelize = require('../../models').sequelize; +var VoiceMusicOnHold = require('../../models').VoiceMusicOnHold; + + +// Get list of voice_musiconholds +exports.index = function(req, res) { + return VoiceMusicOnHold + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single voiceMusiconhold +exports.show = function(req, res) { + return VoiceMusicOnHold + .findById(req.params.id) + .then(function(voiceMusiconhold) { + if (!voiceMusiconhold) { + return res.sendStatus(404); + } + return res.send(voiceMusiconhold); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Add files to moh class +exports.addFiles = function(req, res) { + var _voiceMusiconhold, _soundFiles; + return VoiceMusicOnHold + .findById(req.params.id) + .then(function(voiceMusiconhold) { + if (!voiceMusiconhold) { + return res.sendStatus(404); + } + _voiceMusiconhold = voiceMusiconhold; + + return Sound + .findAll({ + where: { + id: req.body.sounds + } + }); + }) + .then(function(soundFiles) { + _soundFiles = soundFiles; + + return Setting + .findById(1); + }) + .then(function(settings) { + + var dest; + _soundFiles.forEach(function(elem) { + dest = path.join(_voiceMusiconhold.directory, elem.display_name + '.wav'); + fse.copySync(path.join(settings.soundPath || '/var/opt/motion/server/files/sounds/converted', elem.save_name + '.wav'), dest); + }); + fs.chmodSync(dest, parseInt('0777', 8)); + res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.showAudioFiles = function(req, res) { + var fileObject = {}; + VoiceMusicOnHold + .findById(req.params.id) + .then(function(voiceMusiconhold) { + if (!voiceMusiconhold) { + return res.sendStatus(404); + } + fileObject.path = voiceMusiconhold.directory; + fs.readdir(voiceMusiconhold.directory, function(err, files) { + if (!err) { + fileObject.files = files; + return res.send(fileObject); + } else { + throw err; + } + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.deleteAudioFiles = function(req, res) { + return VoiceMusicOnHold + .findById(req.params.id) + .then(function(voiceMusiconhold) { + if (!voiceMusiconhold) { + return res.sendStatus(404); + } + var deletePath = voiceMusiconhold.directory + '/' + req.query.filename; + fs.unlink(deletePath, function(err) { + if (err) { + return handleError(res, err); + } else { + return res.sendStatus(204); + } + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Validate the existence of a route +exports.mohValidation = function(req, res) { + console.log(req.body); + return VoiceMusicOnHold + .findAll({ + where: { + name: req.body.name, + } + }) + .then(function(voice_mohs) { + if (!voice_mohs) { + return res.sendStatus(404); + } + return res.send(voice_mohs); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new voiceMusiconhold in the DB. +exports.create = function(req, res) { + return sequelize.transaction().then(function(t) { + req.body.directory = path.join(config.root, 'server/files/moh', req.body.name); + return VoiceMusicOnHold + .create(req.body, { + transaction: t + }) + .then(function(voiceMusiconhold) { + fs.mkdir(voiceMusiconhold.directory, parseInt('0777', 8), function(err) { + if (err) { + console.log('file error'); + t.rollback(); + return res.status(500).send({ + message: 'MESSAGE_FILE_CREATION_ERROR' + }); + } + t.commit(); + console.log('file created'); + return res.status(201).send(voiceMusiconhold); + }); + }) + .catch(function(err) { + t.rollback(); + }); + }) +}; + +// Updates an existing voiceMusiconhold in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + + return VoiceMusicOnHold + .findById(req.params.id) + .then(function(voiceMusiconhold) { + if (!voiceMusiconhold) { + return res.sendStatus(404); + } + var updated = _.merge(voiceMusiconhold, req.body); + + return updated + .save(); + }) + .then(function(voiceMusiconhold) { + return res.status(200).send(voiceMusiconhold); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a voiceMusiconhold from the DB. +exports.destroy = function(req, res) { + var _voicemoh; + return sequelize.transaction(function(t) { + return VoiceMusicOnHold + .findById(req.params.id) + .then(function(voiceMusiconhold) { + if (!voiceMusiconhold) { + return res.sendStatus(404); + } + _voicemoh = voiceMusiconhold; + return voiceMusiconhold.destroy({ + transaction: t + }); + }) + .then(function() { + remove(_voicemoh.directory, function(err) { + if (err) { + console.log(err); + } + return res.sendStatus(204); + }); + }) + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes multiple voice_musiconholds from the DB. +exports.bulkDestroy = function(req, res) { + var _voicemohs; + return sequelize.transaction(function(t) { + return VoiceMusicOnHold + .findAll({ + where: { + id: req.query.ids + } + }) + .then(function(voice_musiconholds) { + if (!voice_musiconholds) { + return res.sendStatus(404); + } + _voicemohs = voice_musiconholds; + var bulkDest = []; + voice_musiconholds.forEach(function(element) { + bulkDest.push(element.destroy({ + transaction: t + })); + }); + return bulkDest; + }) + .all() + .then(function() { + _voicemohs.forEach(function(element) { + remove(element.directory, function(err) { + if (err) { + console.log(err); + throw err + } + }); + }) + }); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// stream a moh file +exports.stream = function(req, res) { + var filepath = decodeURI(req.query.path); + base64.encode(filepath, function(err, base64String) { + if (err) { + return handleError(res, err); + } else { + return res.status(200).send(base64String); + } + }); +}; + +function handleError(res, err) { + console.log(err); + return res.status(500).send(err); +} diff --git a/server/api/voice_musiconhold/voice_musiconhold.events.js b/server/api/voice_musiconhold/voice_musiconhold.events.js index fee44ef..e3d8587 100644 --- a/server/api/voice_musiconhold/voice_musiconhold.events.js +++ b/server/api/voice_musiconhold/voice_musiconhold.events.js @@ -1 +1,36 @@ -var _0xa61c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x56\x6F\x69\x63\x65\x4D\x75\x73\x69\x63\x4F\x6E\x48\x6F\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xa61c[0];const EventEmitter=require(_0xa61c[1]);const VoiceMusicOnHold=require(_0xa61c[3])[_0xa61c[2]];var VoiceMusicOnHoldEvents= new EventEmitter();VoiceMusicOnHoldEvents[_0xa61c[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xa61c[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xa61c[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xa61c[6]};for(var e in events){var event=events[e];VoiceMusicOnHold[_0xa61c[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xabffx8,_0xabffx9,_0xabffxa){VoiceMusicOnHoldEvents[_0xa61c[10]](event+ _0xa61c[8]+ _0xabffx8[_0xa61c[9]],_0xabffx8);VoiceMusicOnHoldEvents[_0xa61c[10]](event,_0xabffx8);_0xabffxa(null)}}module[_0xa61c[11]]= VoiceMusicOnHoldEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const VoiceMusicOnHold = require('../../models').VoiceMusicOnHold; + +var VoiceMusicOnHoldEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +VoiceMusicOnHoldEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + VoiceMusicOnHold.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + VoiceMusicOnHoldEvents.emit(event + ':' + doc._id, doc); + VoiceMusicOnHoldEvents.emit(event, doc); + done(null); + } +} + +module.exports = VoiceMusicOnHoldEvents; diff --git a/server/api/voice_musiconhold/voice_musiconhold.socket.js b/server/api/voice_musiconhold/voice_musiconhold.socket.js index a3fa421..cbc19a2 100644 --- a/server/api/voice_musiconhold/voice_musiconhold.socket.js +++ b/server/api/voice_musiconhold/voice_musiconhold.socket.js @@ -1 +1,32 @@ -var _0x1e38=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x76\x6F\x69\x63\x65\x5F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x1e38[0];const VoiceMusicOnHoldEvents=require(_0x1e38[1]);var events=[_0x1e38[2],_0x1e38[3]];exports[_0x1e38[4]]= function(_0xc255x3){for(var _0xc255x4=0,_0xc255x5=events[_0x1e38[5]];_0xc255x4< _0xc255x5;_0xc255x4++){var _0xc255x6=events[_0xc255x4];var _0xc255x7=createListener(_0x1e38[6]+ _0xc255x6,_0xc255x3);VoiceMusicOnHoldEvents[_0x1e38[7]](_0xc255x6,_0xc255x7);_0xc255x3[_0x1e38[7]](_0x1e38[8],removeListener(_0xc255x6,_0xc255x7))}};function createListener(_0xc255x6,_0xc255x3){return function(_0xc255x9){_0xc255x3[_0x1e38[9]](_0xc255x6,_0xc255x9)}}function removeListener(_0xc255x6,_0xc255x7){return function(){VoiceMusicOnHoldEvents[_0x1e38[10]](_0xc255x6,_0xc255x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const VoiceMusicOnHoldEvents = require('./voice_musiconhold.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('voice_musiconhold:' + event, socket); + + VoiceMusicOnHoldEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + VoiceMusicOnHoldEvents.removeListener(event, listener); + }; +} diff --git a/server/api/voice_queue/index.js b/server/api/voice_queue/index.js index 61bad71..f1f9c3f 100644 --- a/server/api/voice_queue/index.js +++ b/server/api/voice_queue/index.js @@ -1 +1,20 @@ -var _0x1b2d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x6E\x61\x6D\x65","\x73\x68\x6F\x77","\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x76\x6F\x69\x63\x65","\x67\x65\x74\x52\x65\x61\x6C\x74\x69\x6D\x65\x51\x75\x65\x75\x65\x73","\x2F\x3A\x6E\x61\x6D\x65\x2F\x61\x67\x65\x6E\x74\x73","\x73\x68\x6F\x77\x41\x67\x65\x6E\x74\x73","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x64\x65\x6C\x65\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x1b2d[0];var express=require(_0x1b2d[1]);var controller=require(_0x1b2d[2]);var auth=require(_0x1b2d[3]);var router=express.Router();router[_0x1b2d[9]](_0x1b2d[4],auth[_0x1b2d[5]](),auth[_0x1b2d[7]]([7,13],[_0x1b2d[6]]),controller[_0x1b2d[8]]);router[_0x1b2d[9]](_0x1b2d[10],auth[_0x1b2d[5]](),auth[_0x1b2d[7]]([7],[_0x1b2d[6]]),controller[_0x1b2d[11]]);router[_0x1b2d[9]](_0x1b2d[12],auth[_0x1b2d[5]](),auth[_0x1b2d[7]]([7],[_0x1b2d[6]]),controller[_0x1b2d[13]]);router[_0x1b2d[9]](_0x1b2d[14],auth[_0x1b2d[5]](),auth[_0x1b2d[7]]([7],[_0x1b2d[6]]),controller[_0x1b2d[15]]);router[_0x1b2d[17]](_0x1b2d[4],auth[_0x1b2d[5]](),auth[_0x1b2d[7]]([7],[_0x1b2d[6]]),controller[_0x1b2d[16]]);router[_0x1b2d[17]](_0x1b2d[14],auth[_0x1b2d[5]](),auth[_0x1b2d[7]]([7],[_0x1b2d[6]]),controller[_0x1b2d[18]]);router[_0x1b2d[20]](_0x1b2d[10],auth[_0x1b2d[5]](),auth[_0x1b2d[7]]([7],[_0x1b2d[6]]),controller[_0x1b2d[19]]);router[_0x1b2d[22]](_0x1b2d[14],auth[_0x1b2d[5]](),auth[_0x1b2d[7]]([7],[_0x1b2d[6]]),controller[_0x1b2d[21]]);router[_0x1b2d[22]](_0x1b2d[4],auth[_0x1b2d[5]](),auth[_0x1b2d[7]]([7],[_0x1b2d[6]]),controller[_0x1b2d[23]]);router[_0x1b2d[22]](_0x1b2d[10],auth[_0x1b2d[5]](),auth[_0x1b2d[7]]([7],[_0x1b2d[6]]),controller[_0x1b2d[24]]);module[_0x1b2d[25]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./voice_queue.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([7, 13], ['admin']), controller.index); +router.get('/:name', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.show); +router.get('/realtime/voice', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.getRealtimeQueues); +router.get('/:name/agents', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.showAgents); +router.post('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.create); +router.post('/:name/agents', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.addAgents); +router.put('/:name', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.update); +router.delete('/:name/agents', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.removeAgents); +router.delete('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.bulkDestroy); +router.delete('/:name', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/voice_queue/voice_queue.controller.js b/server/api/voice_queue/voice_queue.controller.js index 7ebb805..79a1217 100644 --- a/server/api/voice_queue/voice_queue.controller.js +++ b/server/api/voice_queue/voice_queue.controller.js @@ -1 +1,304 @@ -var _0x8615=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x56\x6F\x69\x63\x65\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","\x6C\x6F\x67","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x72\x6F\x6C\x65","\x67\x65\x74\x52\x65\x61\x6C\x74\x69\x6D\x65\x51\x75\x65\x75\x65\x73","\x72\x6F\x77\x73","\x6E\x61\x6D\x65","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x6D\x65\x72\x67\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","\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","\x70\x75\x73\x68","\x50\x52\x49\x4D\x41\x52\x59","\x70\x61\x74\x68","\x65\x72\x72\x6F\x72\x73","\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x75\x6E\x69\x71\x75\x65","\x6D\x65\x73\x73\x61\x67\x65","\x6A\x6F\x69\x6E","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x51\x55\x45\x55\x45","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x73\x61\x76\x65","\x53\x49\x50\x2F\x25\x73","\x66\x6F\x72\x6D\x61\x74","\x70\x65\x6E\x61\x6C\x74\x79","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x61\x67\x65\x6E\x74\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x64\x64\x41\x67\x65\x6E\x74\x73","\x61\x6C\x6C","\x72\x65\x6D\x6F\x76\x65\x41\x67\x65\x6E\x74\x73","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73"];_0x8615[0];var _=require(_0x8615[1]);var util=require(_0x8615[2]);var Util=require(_0x8615[3]);var sequelize=require(_0x8615[5])[_0x8615[4]];var User=require(_0x8615[5])[_0x8615[6]];var VoiceQueue=require(_0x8615[5])[_0x8615[7]];var UserHasVoiceQueue=require(_0x8615[5])[_0x8615[8]];var VoiceExtension=require(_0x8615[5])[_0x8615[9]];exports[_0x8615[10]]= function(_0xd7b3x9,_0xd7b3xa){switch(_0xd7b3x9[_0x8615[18]][_0x8615[23]]){case _0x8615[18]:return User[_0x8615[19]](_0xd7b3x9[_0x8615[18]][_0x8615[17]],{attributes:[_0x8615[17]]})[_0x8615[14]](Util[_0x8615[16]](_0xd7b3x9[_0x8615[15]]))[_0x8615[14]](function(_0xd7b3xc){_0xd7b3xa[_0x8615[13]](200)[_0x8615[12]](_0xd7b3xc)})[_0x8615[11]](function(_0xd7b3xb){return handleError(_0xd7b3xa,_0xd7b3xb)});default:return VoiceQueue[_0x8615[22]](Util[_0x8615[21]](_0xd7b3x9[_0x8615[15]]))[_0x8615[14]](function(_0xd7b3xc){_0xd7b3xa[_0x8615[13]](200)[_0x8615[12]](_0xd7b3xc)})[_0x8615[11]](function(_0xd7b3xb){console[_0x8615[20]](_0xd7b3xb);return handleError(_0xd7b3xa,_0xd7b3xb)})}};exports[_0x8615[24]]= function(_0xd7b3x9,_0xd7b3xa,_0xd7b3xd){switch(_0xd7b3x9[_0x8615[18]][_0x8615[23]]){case _0x8615[18]:var _0xd7b3xe=[];return User[_0x8615[19]](_0xd7b3x9[_0x8615[18]][_0x8615[17]],{attributes:[_0x8615[17]]})[_0x8615[14]](Util[_0x8615[16]]({},{attributes:[_0x8615[26]],include:[{raw:true,model:User,attributes:[_0x8615[17]]}]}))[_0x8615[14]](function(_0xd7b3xf){var _0xd7b3x10=_[_0x8615[27]](_0xd7b3xf[_0x8615[25]],_0x8615[26]);_0xd7b3xf[_0x8615[25]][_0x8615[29]](function(_0xd7b3x11){_0xd7b3xe= _[_0x8615[28]](_0xd7b3xe,_[_0x8615[27]](_0xd7b3x11.Users,_0x8615[17]))});return VoiceQueue[_0x8615[22]](_[_0x8615[30]](Util[_0x8615[21]](_0xd7b3x9[_0x8615[15]],{name:_0xd7b3x10}),{include:[{model:User,where:{id:_0xd7b3xe},required:false}]}))})[_0x8615[14]](function(_0xd7b3xc){return _0xd7b3xa[_0x8615[13]](200)[_0x8615[12]](_0xd7b3xc)})[_0x8615[11]](function(_0xd7b3xb){console[_0x8615[20]](_0xd7b3xb);return handleError(_0xd7b3xa,_0xd7b3xb)});default:return VoiceQueue[_0x8615[22]](_[_0x8615[30]](Util[_0x8615[21]](_0xd7b3x9[_0x8615[15]]),{include:[{model:User,required:false}]}))[_0x8615[14]](function(_0xd7b3xc){return _0xd7b3xa[_0x8615[13]](200)[_0x8615[12]](_0xd7b3xc)})[_0x8615[11]](function(_0xd7b3xb){console[_0x8615[20]](_0xd7b3xb);return handleError(_0xd7b3xa,_0xd7b3xb)})}};exports[_0x8615[31]]= function(_0xd7b3x9,_0xd7b3xa){return VoiceQueue[_0x8615[19]](_0xd7b3x9[_0x8615[33]][_0x8615[26]])[_0x8615[14]](function(_0xd7b3x12){if(!_0xd7b3x12){return _0xd7b3xa[_0x8615[32]](404)};return _0xd7b3xa[_0x8615[12]](_0xd7b3x12)})[_0x8615[11]](function(_0xd7b3xb){return handleError(_0xd7b3xa,_0xd7b3xb)})};exports[_0x8615[34]]= function(_0xd7b3x9,_0xd7b3xa){return VoiceQueue[_0x8615[19]](_0xd7b3x9[_0x8615[33]][_0x8615[26]])[_0x8615[14]](function(_0xd7b3x11){if(!_0xd7b3x11){return _0xd7b3xa[_0x8615[32]](404)};return _0xd7b3x11[_0x8615[39]]({where:{role:_0x8615[36]},attributes:[_0x8615[17],_0x8615[26],_0x8615[37],_0x8615[38]]})})[_0x8615[14]](function(_0xd7b3xe){return _0xd7b3xa[_0x8615[13]](200)[_0x8615[12]]({rows:_0xd7b3xe,count:_0xd7b3xe[_0x8615[35]]})})[_0x8615[11]](function(_0xd7b3xb){return handleError(_0xd7b3xa,_0xd7b3xb)})};exports[_0x8615[40]]= function(_0xd7b3x9,_0xd7b3xa){var _0xd7b3x13;return VoiceQueue[_0x8615[40]](_0xd7b3x9[_0x8615[50]])[_0x8615[14]](function(_0xd7b3x12){_0xd7b3x13= _0xd7b3x12})[_0x8615[14]](addAgents(_0xd7b3x9,_0xd7b3x9[_0x8615[50]][_0x8615[26]]))[_0x8615[14]](function(){return _0xd7b3xa[_0x8615[13]](201)[_0x8615[12]](_0xd7b3x13)})[_0x8615[11]](sequelize.UniqueConstraintError,function(_0xd7b3xb){var _0xd7b3x14=[];_0xd7b3xb[_0x8615[44]][_0x8615[29]](function(_0xd7b3x15){switch(_0xd7b3x15[_0x8615[43]]){case _0x8615[42]:_0xd7b3x14[_0x8615[41]](_0x8615[26]);break;default:_0xd7b3x14[_0x8615[41]](_0xd7b3x15[_0x8615[43]])}});_0xd7b3x14[_0x8615[41]](_0x8615[45]);_0xd7b3xb[_0x8615[46]]= _0xd7b3x14[_0x8615[47]]();_0xd7b3xb[_0x8615[48]]= _0x8615[49];return _0xd7b3xa[_0x8615[13]](500)[_0x8615[12]](_0xd7b3xb)})[_0x8615[11]](function(_0xd7b3xb){return handleError(_0xd7b3xa,_0xd7b3xb)})};exports[_0x8615[51]]= function(_0xd7b3x9,_0xd7b3xa){if(_0xd7b3x9[_0x8615[50]][_0x8615[26]]){delete _0xd7b3x9[_0x8615[50]][_0x8615[26]]};return VoiceQueue[_0x8615[19]](_0xd7b3x9[_0x8615[33]][_0x8615[26]])[_0x8615[14]](function(_0xd7b3x12){if(!_0xd7b3x12){return _0xd7b3xa[_0x8615[32]](404)};var _0xd7b3x16=_[_0x8615[30]](_0xd7b3x12,_0xd7b3x9[_0x8615[50]]);return _0xd7b3x16[_0x8615[52]]()})[_0x8615[14]](function(_0xd7b3x12){return _0xd7b3xa[_0x8615[13]](200)[_0x8615[12]](_0xd7b3x12)})[_0x8615[11]](function(_0xd7b3xb){console[_0x8615[20]](_0xd7b3xb);return handleError(_0xd7b3xa,_0xd7b3xb)})};function addAgents(_0xd7b3x9,_0xd7b3x11){return function(){return User[_0x8615[58]]({where:{id:_0xd7b3x9[_0x8615[50]][_0x8615[57]]},raw:true})[_0x8615[14]](function(_0xd7b3x18){var _0xd7b3x19=_[_0x8615[27]](_0xd7b3x18,function(_0xd7b3x1a){return {queue:_0xd7b3x11,interface:util[_0x8615[54]](_0x8615[53],_0xd7b3x1a[_0x8615[26]]),stateinterface:util[_0x8615[54]](_0x8615[53],_0xd7b3x1a[_0x8615[26]]),membername:_0xd7b3x1a[_0x8615[26]],UserId:_0xd7b3x1a[_0x8615[17]],penalty:_0xd7b3x9[_0x8615[50]][_0x8615[55]]}});return UserHasVoiceQueue[_0x8615[56]](_0xd7b3x19,{individualHooks:true})})}}exports[_0x8615[59]]= function(_0xd7b3x9,_0xd7b3xa,_0xd7b3xd){return Promise[_0x8615[60]]([])[_0x8615[14]](addAgents(_0xd7b3x9,_0xd7b3x9[_0x8615[33]][_0x8615[26]]))[_0x8615[14]](function(){return _0xd7b3xa[_0x8615[32]](200)})[_0x8615[11]](function(_0xd7b3xb){console[_0x8615[20]](_0xd7b3xb);return _0xd7b3xd(_0xd7b3xb)})};exports[_0x8615[61]]= function(_0xd7b3x9,_0xd7b3xa,_0xd7b3xd){return UserHasVoiceQueue[_0x8615[62]]({where:{UserId:_0xd7b3x9[_0x8615[15]][_0x8615[57]],queue:_0xd7b3x9[_0x8615[33]][_0x8615[26]]},individualHooks:true})[_0x8615[14]](function(){return _0xd7b3xa[_0x8615[32]](202)})[_0x8615[11]](function(_0xd7b3xb){return _0xd7b3xd(_0xd7b3xb)})};exports[_0x8615[62]]= function(_0xd7b3x9,_0xd7b3xa){return VoiceQueue[_0x8615[62]]({where:{name:_0xd7b3x9[_0x8615[33]][_0x8615[26]]},individualHooks:true})[_0x8615[14]](function(){return _0xd7b3xa[_0x8615[32]](204)})[_0x8615[11]](function(_0xd7b3xb){return handleError(_0xd7b3xa,_0xd7b3xb)})};exports[_0x8615[63]]= function(_0xd7b3x9,_0xd7b3xa){return VoiceQueue[_0x8615[62]]({where:{name:_0xd7b3x9[_0x8615[15]][_0x8615[64]]},individualHooks:true})[_0x8615[14]](function(){return _0xd7b3xa[_0x8615[32]](204)})[_0x8615[11]](function(_0xd7b3xb){return handleError(_0xd7b3xa,_0xd7b3xb)})};function handleError(_0xd7b3xa,_0xd7b3xb){return _0xd7b3xa[_0x8615[13]](500)[_0x8615[12]](_0xd7b3xb)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); + +var util = require('util'); +var Util = require('../../config/util'); + +var sequelize = require('../../models').sequelize; +var User = require('../../models').User; +var VoiceQueue = require('../../models').VoiceQueue; +var UserHasVoiceQueue = require('../../models').UserHasVoiceQueue; +var VoiceExtension = require('../../models').VoiceExtension; + +// Get list of voiceQueues +exports.index = function(req, res) { + switch (req.user.role) { + case 'user': + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getVoiceQueuesIdByUser(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); + + default: + return VoiceQueue + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + } +}; + +exports.getRealtimeQueues = function(req, res, next) { + switch (req.user.role) { + case 'user': + var agents = []; + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getVoiceQueuesIdByUser({}, { + attributes: ['name'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(queues) { + var voiceQueues = _.map(queues.rows, 'name'); + queues.rows.forEach(function(queue) { + agents = _.union(agents, _.map(queue.Users, 'id')); + }); + return VoiceQueue + .findAndCountAll(_.merge(Util.getQuery(req.query, { + name: voiceQueues + }), { + include: [{ + model: User, + where: { + id: agents + }, + required: false + }] + })); + }) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + default: + return VoiceQueue + .findAndCountAll(_.merge(Util.getQuery(req.query), { + include: [{ + model: User, + required: false + }] + })) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); + } +}; + + +// Get a single voiceQueue +exports.show = function(req, res) { + return VoiceQueue + .findById(req.params.name) + .then(function(voiceQueue) { + if (!voiceQueue) { + return res.sendStatus(404); + } + return res.send(voiceQueue); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single queue +exports.showAgents = function(req, res) { + return VoiceQueue + .findById(req.params.name) + .then(function(queue) { + if (!queue) { + return res.sendStatus(404); + } + return queue + .getUsers({ + where: { + role: 'agent' + }, + attributes: ['id', 'name', 'fullname', 'email'] + }); + }) + .then(function(agents) { + return res.status(200).send({ + rows: agents, + count: agents.length + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new voiceQueue in the DB. +exports.create = function(req, res) { + var _voiceQueue; + + return VoiceQueue + .create(req.body) + .then(function(voiceQueue) { + _voiceQueue = voiceQueue; + }) + .then(addAgents(req, req.body.name)) + .then(function() { + return res.status(201).send(_voiceQueue); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + var paths = []; + + err.errors.forEach(function(error) { + switch (error.path) { + case 'PRIMARY': + paths.push('name'); + break; + default: + paths.push(error.path); + } + }); + + paths.push(' must be unique'); + err.message = paths.join(); + err.translatedMessage = 'MESSAGE_EXIST_QUEUE'; + + return res.status(500).send(err); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing voiceQueue in the DB. +exports.update = function(req, res) { + if (req.body.name) { + delete req.body.name; + } + + return VoiceQueue + .findById(req.params.name) + .then(function(voiceQueue) { + if (!voiceQueue) { + return res.sendStatus(404); + } + var updated = _.merge(voiceQueue, req.body); + return updated + .save(); + }) + .then(function(voiceQueue) { + return res.status(200).send(voiceQueue); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + + +function addAgents(req, queue) { + return function() { + return User + .findAll({ + where: { + id: req.body.agents + }, + raw: true + }) + .then(function(users) { + var userHasVoiceQueues = _.map(users, function(user) { + return { + queue: queue, + interface: util.format('SIP/%s', user.name), + stateinterface: util.format('SIP/%s', user.name), + membername: user.name, + UserId: user.id, + penalty: req.body.penalty + }; + }); + return UserHasVoiceQueue + .bulkCreate(userHasVoiceQueues, { + individualHooks: true + }); + }) + } +} + +// Add agents to voice queues +exports.addAgents = function(req, res, next) { + return Promise + .all([]) + .then(addAgents(req, req.params.name)) + .then(function() { + return res.sendStatus(200); + }) + .catch(function(err) { + console.log(err); + return next(err); + }); +}; + +exports.removeAgents = function(req, res, next) { + return UserHasVoiceQueue + .destroy({ + where: { + UserId: req.query.agents, + queue: req.params.name + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(202); + }) + .catch(function(err) { + return next(err); + }); +}; + +// Deletes a voiceQueue from the DB. +exports.destroy = function(req, res) { + return VoiceQueue + .destroy({ + where: { + name: req.params.name + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes multiple voiceQueues from the DB. +exports.bulkDestroy = function(req, res) { + return VoiceQueue + .destroy({ + where: { + name: req.query.ids + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/voice_queue/voice_queue.events.js b/server/api/voice_queue/voice_queue.events.js index 406f9ac..47e7ba6 100644 --- a/server/api/voice_queue/voice_queue.events.js +++ b/server/api/voice_queue/voice_queue.events.js @@ -1 +1,36 @@ -var _0xe4dc=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xe4dc[0];const EventEmitter=require(_0xe4dc[1]);const VoiceQueue=require(_0xe4dc[3])[_0xe4dc[2]];var VoiceQueueEvents= new EventEmitter();VoiceQueueEvents[_0xe4dc[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xe4dc[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xe4dc[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xe4dc[6]};for(var e in events){var event=events[e];VoiceQueue[_0xe4dc[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x716dx8,_0x716dx9,_0x716dxa){VoiceQueueEvents[_0xe4dc[10]](event+ _0xe4dc[8]+ _0x716dx8[_0xe4dc[9]],_0x716dx8);VoiceQueueEvents[_0xe4dc[10]](event,_0x716dx8);_0x716dxa(null)}}module[_0xe4dc[11]]= VoiceQueueEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const VoiceQueue = require('../../models').VoiceQueue; + +var VoiceQueueEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +VoiceQueueEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + VoiceQueue.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + VoiceQueueEvents.emit(event + ':' + doc._id, doc); + VoiceQueueEvents.emit(event, doc); + done(null); + } +} + +module.exports = VoiceQueueEvents; diff --git a/server/api/voice_queue/voice_queue.socket.js b/server/api/voice_queue/voice_queue.socket.js index c5324d2..1036ff9 100644 --- a/server/api/voice_queue/voice_queue.socket.js +++ b/server/api/voice_queue/voice_queue.socket.js @@ -1 +1,86 @@ -var _0x62e0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2E\x65\x76\x65\x6E\x74\x73","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6C\x6F\x64\x61\x73\x68","\x62\x6C\x75\x65\x62\x69\x72\x64","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x45\x72\x72\x6F\x72\x20\x66\x69\x6C\x74\x65\x72\x69\x6E\x67\x20\x71\x75\x65\x75\x65\x73\x20\x61\x66\x74\x65\x72\x20\x71\x75\x65\x75\x65\x20\x73\x61\x76\x65","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x6E\x61\x6D\x65","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x65\x6D\x69\x74","\x74\x68\x65\x6E","\x61\x6C\x6C","\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x3A\x73\x61\x76\x65","\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x3A\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72","\x72\x6F\x77\x73","\x6D\x61\x70","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x75\x73\x65\x72\x49\x64","\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x64\x6D\x69\x6E","\x72\x6F\x6C\x65"];_0x62e0[0];const VoiceQueueEvents=require(_0x62e0[1]);const VoiceQueue=require(_0x62e0[3])[_0x62e0[2]];const User=require(_0x62e0[3])[_0x62e0[4]];const Util=require(_0x62e0[5]);const _=require(_0x62e0[6]);const Promise=require(_0x62e0[7]);var events=[_0x62e0[8],_0x62e0[9]];exports[_0x62e0[10]]= function(_0xee09x8){for(var _0xee09x9=0,_0xee09xa=events[_0x62e0[11]];_0xee09x9< _0xee09xa;_0xee09x9++){var _0xee09xb=events[_0xee09x9];var _0xee09xc=createListener(_0x62e0[12]+ _0xee09xb,_0xee09x8);VoiceQueueEvents[_0x62e0[13]](_0xee09xb,_0xee09xc);_0xee09x8[_0x62e0[13]](_0x62e0[14],removeListener(_0xee09xb,_0xee09xc))}};function createListener(_0xee09xb,_0xee09x8){return function(_0xee09xe){switch(_0xee09xb){case _0x62e0[23]:return Promise[_0x62e0[22]]([])[_0x62e0[21]](getVoiceQueues(_0xee09x8))[_0x62e0[21]](function(_0xee09x10){if(_[_0x62e0[19]](_0xee09x10,_0xee09xe[_0x62e0[18]])){_0xee09x8[_0x62e0[20]](_0xee09xb,_0xee09xe)}})[_0x62e0[17]](function(_0xee09xf){console[_0x62e0[16]](_0x62e0[15],_0xee09xf)});break;case _0x62e0[24]:_0xee09x8[_0x62e0[20]](_0xee09xb,_0xee09xe);break;default:}}}function removeListener(_0xee09xb,_0xee09xc){return function(){VoiceQueueEvents[_0x62e0[25]](_0xee09xb,_0xee09xc)}}function getVoiceQueues(_0xee09x13){return function(){switch(_0xee09x13[_0x62e0[35]]){case _0x62e0[32]:return User[_0x62e0[31]](_0xee09x13[_0x62e0[29]],{attributes:[_0x62e0[30]]})[_0x62e0[21]](Util[_0x62e0[28]]())[_0x62e0[21]](function(_0xee09x10){return _[_0x62e0[27]](_0xee09x10[_0x62e0[26]],_0x62e0[18])});case _0x62e0[34]:return VoiceQueue[_0x62e0[33]]()[_0x62e0[21]](function(_0xee09x14){return {rows:_0xee09x14}})[_0x62e0[21]](function(_0xee09x10){return _[_0x62e0[27]](_0xee09x10[_0x62e0[26]],_0x62e0[18])});default:return []}}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const VoiceQueueEvents = require('./voice_queue.events'); +const VoiceQueue = require('../../models').VoiceQueue; +const User = require('../../models').User; +const Util = require('../../config/util'); +const _ = require('lodash'); +const Promise = require('bluebird'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('voice_queue:' + event, socket); + + VoiceQueueEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + switch (event) { + case 'voice_queue:save': + return Promise + .all([]) + .then(getVoiceQueues(socket)) + .then(function(userQueues) { + if (_.includes(userQueues, doc.name)) { + socket.emit(event, doc); + } + }) + .catch(function(err) { + console.log('Error filtering queues after queue save', err); + }) + break; + case 'voice_queue:remove': + socket.emit(event, doc); + break; + + default: + + } + }; +} + +function removeListener(event, listener) { + return function() { + VoiceQueueEvents.removeListener(event, listener); + }; +} + +function getVoiceQueues(user) { + return function() { + switch (user.role) { + case 'user': + return User + .findById(user.userId, { + attributes: ['id'] + }) + .then(Util.getVoiceQueuesIdByUser()) + .then(function(userQueues) { + return _.map(userQueues.rows, 'name'); + }); + case 'admin': + return VoiceQueue + .findAll() + .then(function(queues) { + return { + rows: queues + }; + }) + .then(function(userQueues) { + return _.map(userQueues.rows, 'name'); + }); + default: + return []; + } + } +} diff --git a/server/api/voice_recording/index.js b/server/api/voice_recording/index.js index fbae66f..bc07dc3 100644 --- a/server/api/voice_recording/index.js +++ b/server/api/voice_recording/index.js @@ -1 +1,19 @@ -var _0xfa62=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x64\x65\x73\x63\x72\x69\x62\x65","\x64\x65\x73\x63\x72\x69\x62\x65","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x67\x65\x74\x53\x74\x72\x65\x61\x6D\x42\x79\x49\x64","\x2F\x3A\x69\x64\x2F\x73\x74\x72\x65\x61\x6D","\x67\x65\x74\x53\x74\x72\x65\x61\x6D","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0xfa62[0];var express=require(_0xfa62[1]);var auth=require(_0xfa62[2]);var controller=require(_0xfa62[3]);var router=express.Router();router[_0xfa62[10]](_0xfa62[4],auth[_0xfa62[5]](),auth[_0xfa62[8]]([7],[_0xfa62[6],_0xfa62[7]]),controller[_0xfa62[9]]);router[_0xfa62[10]](_0xfa62[11],auth[_0xfa62[5]](),auth[_0xfa62[8]]([7],[_0xfa62[6]]),controller[_0xfa62[12]]);router[_0xfa62[10]](_0xfa62[13],auth[_0xfa62[5]](),auth[_0xfa62[8]]([7],[_0xfa62[6]]),controller[_0xfa62[14]]);router[_0xfa62[10]](_0xfa62[15],controller[_0xfa62[16]]);router[_0xfa62[10]](_0xfa62[17],auth[_0xfa62[5]](),auth[_0xfa62[8]]([7],[_0xfa62[6],_0xfa62[7]]),controller[_0xfa62[18]]);router[_0xfa62[20]](_0xfa62[4],auth[_0xfa62[5]](),auth[_0xfa62[8]]([7],[_0xfa62[6]]),controller[_0xfa62[19]]);router[_0xfa62[22]](_0xfa62[13],auth[_0xfa62[5]](),auth[_0xfa62[8]]([7],[_0xfa62[6]]),controller[_0xfa62[21]]);router[_0xfa62[24]](_0xfa62[4],auth[_0xfa62[5]](),auth[_0xfa62[8]]([7],[_0xfa62[6]]),controller[_0xfa62[23]]);router[_0xfa62[24]](_0xfa62[13],auth[_0xfa62[5]](),auth[_0xfa62[8]]([7],[_0xfa62[6]]),controller[_0xfa62[25]]);module[_0xfa62[26]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./voice_recording.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([7], ['admin', 'agent']), controller.index); +router.get('/describe', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.describe); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.show); +router.get('/:id/download', controller.getStreamById); +router.get('/:id/stream', auth.isAuthenticated(), auth.hasModule([7], ['admin', 'agent']), controller.getStream); +router.post('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/voice_recording/voice_recording.controller.js b/server/api/voice_recording/voice_recording.controller.js index 2c07512..f4b7425 100644 --- a/server/api/voice_recording/voice_recording.controller.js +++ b/server/api/voice_recording/voice_recording.controller.js @@ -1 +1,248 @@ -var _0x2f72=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x56\x6F\x69\x63\x65\x52\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x62\x6C\x75\x65\x62\x69\x72\x64","\x66\x69\x6C\x65\x2D\x62\x61\x73\x65\x36\x34","\x66\x73","\x70\x61\x74\x68","\x63\x61\x75\x73\x65","\x63\x6F\x64\x65","\x45\x4E\x4F\x45\x4E\x54","\x4E\x6F\x20\x66\x69\x6C\x65\x20\x6F\x72\x20\x64\x69\x72\x65\x63\x74\x6F\x72\x79","\x4D\x45\x53\x53\x41\x47\x45\x5F\x4E\x4F\x5F\x46\x49\x4C\x45\x5F\x4F\x52\x5F\x44\x49\x52\x45\x43\x54\x4F\x52\x59","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x65\x6E\x64","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x76\x61\x6C\x75\x65","\x73\x74\x61\x74\x53\x79\x6E\x63","\x6C\x6F\x67","\x74\x68\x65\x6E","\x64\x65\x73\x74\x72\x6F\x79","\x75\x6E\x6C\x69\x6E\x6B\x53\x79\x6E\x63","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x72\x6F\x77\x73","\x6E\x61\x6D\x65","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x67\x65\x74\x56\x6F\x69\x63\x65\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","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65","\x73\x68\x6F\x77","\x70\x61\x72\x61\x6D\x73","\x64\x65\x73\x63\x72\x69\x62\x65","\x67\x65\x74\x53\x74\x72\x65\x61\x6D","\x62\x61\x73\x65\x36\x34","\x62\x69\x6E\x61\x72\x79","\x72\x65\x61\x64\x46\x69\x6C\x65","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x67\x65\x74\x53\x74\x72\x65\x61\x6D\x42\x79\x49\x64","\x74\x79\x70\x65","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x75\x6E\x69\x71\x75\x65\x69\x64","\x62\x61\x73\x65\x6E\x61\x6D\x65","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x66\x69\x6E\x64\x4F\x6E\x65","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x61\x6C\x6C","\x70\x75\x73\x68","\x43\x61\x6E\x27\x20\x74\x20\x64\x65\x6C\x65\x74\x65\x20\x74\x68\x65\x20\x66\x69\x6C\x65","\x46\x69\x6C\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x2C\x20\x64\x65\x6C\x65\x74\x69\x6E\x67\x20\x64\x62\x20\x65\x6E\x74\x72\x79\x2E\x2E\x2E","\x69\x64\x73","\x66\x69\x6E\x64\x41\x6C\x6C"];_0x2f72[0];var _=require(_0x2f72[1]);var util=require(_0x2f72[2]);var Util=require(_0x2f72[3]);var VoiceRecording=require(_0x2f72[5])[_0x2f72[4]];var User=require(_0x2f72[5])[_0x2f72[6]];var Promise=require(_0x2f72[7]);var base64=require(_0x2f72[8]);var fs=require(_0x2f72[9]);var path=require(_0x2f72[10]);function handleError(_0xe3d3xb){return function(_0xe3d3xc){if(_0xe3d3xc[_0x2f72[11]]&& _0xe3d3xc[_0x2f72[11]][_0x2f72[12]]=== _0x2f72[13]){_0xe3d3xc= {message:_0x2f72[14],translatedMessage:_0x2f72[15]}};return _0xe3d3xb[_0x2f72[17]](500)[_0x2f72[16]](_0xe3d3xc)}}function responseWithResult(_0xe3d3xb,_0xe3d3xe){_0xe3d3xe= _0xe3d3xe|| 200;return function(_0xe3d3xf){if(_0xe3d3xf){_0xe3d3xb[_0x2f72[17]](_0xe3d3xe)[_0x2f72[18]](_0xe3d3xf)}}}function handleEntityNotFound(_0xe3d3xb){return function(_0xe3d3xf){if(!_0xe3d3xf){_0xe3d3xb[_0x2f72[17]](404)[_0x2f72[19]]();return null};return _0xe3d3xf}}function saveUpdates(_0xe3d3x12){return function(_0xe3d3xf){return _0xe3d3xf[_0x2f72[20]](_0xe3d3x12)}}function removeEntity(_0xe3d3xb){return function(_0xe3d3xf){if(_0xe3d3xf){try{fs[_0x2f72[22]](_0xe3d3xf[_0x2f72[21]])}catch(err){console[_0x2f72[23]](err);return _0xe3d3xf[_0x2f72[25]]()[_0x2f72[24]](function(){_0xe3d3xb[_0x2f72[17]](204)[_0x2f72[19]]()})};try{fs[_0x2f72[26]](_0xe3d3xf[_0x2f72[21]]);return _0xe3d3xf[_0x2f72[25]]()[_0x2f72[24]](function(){_0xe3d3xb[_0x2f72[17]](204)[_0x2f72[19]]()})}catch(err){console[_0x2f72[23]](err);throw new Error(err)}}}}exports[_0x2f72[27]]= function(_0xe3d3x14,_0xe3d3xb){switch(_0xe3d3x14[_0x2f72[39]][_0x2f72[42]]){case _0x2f72[39]:return User[_0x2f72[40]](_0xe3d3x14[_0x2f72[39]][_0x2f72[38]],{attributes:[_0x2f72[38]]})[_0x2f72[24]](Util[_0x2f72[37]]())[_0x2f72[24]](function(_0xe3d3x15){var _0xe3d3x16=[];var _0xe3d3x17=_[_0x2f72[31]](_0xe3d3x15[_0x2f72[29]],_0x2f72[30]);_0xe3d3x15[_0x2f72[29]][_0x2f72[33]](function(_0xe3d3x18){_0xe3d3x16= _[_0x2f72[32]](_0xe3d3x16,_[_0x2f72[31]](_0xe3d3x18.Users,_0x2f72[30]))});return VoiceRecording[_0x2f72[36]](Util[_0x2f72[35]](_0xe3d3x14[_0x2f72[34]],{$or:{queue:_0xe3d3x17,membername:_0xe3d3x16}}))})[_0x2f72[24]](responseWithResult(_0xe3d3xb))[_0x2f72[28]](handleError(_0xe3d3xb));case _0x2f72[41]:return VoiceRecording[_0x2f72[36]](Util[_0x2f72[35]](_0xe3d3x14[_0x2f72[34]],{membername:_0xe3d3x14[_0x2f72[39]][_0x2f72[30]]}))[_0x2f72[24]](responseWithResult(_0xe3d3xb))[_0x2f72[28]](handleError(_0xe3d3xb));default:return VoiceRecording[_0x2f72[36]](Util[_0x2f72[35]](_0xe3d3x14[_0x2f72[34]]))[_0x2f72[24]](responseWithResult(_0xe3d3xb))[_0x2f72[28]](handleError(_0xe3d3xb))}};exports[_0x2f72[43]]= function(_0xe3d3x14,_0xe3d3xb){return VoiceRecording[_0x2f72[40]](_0xe3d3x14[_0x2f72[44]][_0x2f72[38]])[_0x2f72[24]](handleEntityNotFound(_0xe3d3xb))[_0x2f72[24]](responseWithResult(_0xe3d3xb))[_0x2f72[28]](handleError(_0xe3d3xb))};exports[_0x2f72[45]]= function(_0xe3d3x14,_0xe3d3xb){return VoiceRecording[_0x2f72[45]]()[_0x2f72[24]](function(_0xe3d3x19){return _0xe3d3xb[_0x2f72[17]](200)[_0x2f72[16]](_0xe3d3x19)})[_0x2f72[28]](handleError(_0xe3d3xb))};exports[_0x2f72[46]]= function(_0xe3d3x14,_0xe3d3xb){return VoiceRecording[_0x2f72[40]](_0xe3d3x14[_0x2f72[44]][_0x2f72[38]])[_0x2f72[24]](function(_0xe3d3x1c){var _0xe3d3x1d=Promise[_0x2f72[50]](fs[_0x2f72[49]]);return _0xe3d3x1d(_0xe3d3x1c[_0x2f72[21]])})[_0x2f72[24]](function(_0xe3d3x1b){var _0xe3d3x1a= new Buffer(_0xe3d3x1b,_0x2f72[48]).toString(_0x2f72[47]);return _0xe3d3x1a})[_0x2f72[24]](function(_0xe3d3x1a){return _0xe3d3xb[_0x2f72[17]](200)[_0x2f72[16]]({downloadString:_0xe3d3x1a})})[_0x2f72[28]](handleError(_0xe3d3xb))};exports[_0x2f72[51]]= function(_0xe3d3x14,_0xe3d3xb){var _0xe3d3x1e={};if(_0xe3d3x14[_0x2f72[34]]&& _0xe3d3x14[_0x2f72[34]][_0x2f72[53]](_0x2f72[52])&& _0xe3d3x14[_0x2f72[34]][_0x2f72[52]]=== _0x2f72[54]){_0xe3d3x1e[_0x2f72[54]]= _0xe3d3x14[_0x2f72[44]][_0x2f72[38]]}else {_0xe3d3x1e[_0x2f72[38]]= _0xe3d3x14[_0x2f72[44]][_0x2f72[38]]};return VoiceRecording[_0x2f72[57]]({where:_0xe3d3x1e})[_0x2f72[24]](handleEntityNotFound(_0xe3d3xb))[_0x2f72[24]](function(_0xe3d3x1c){return _0xe3d3xb[_0x2f72[56]](_0xe3d3x1c[_0x2f72[21]],path[_0x2f72[55]](_0xe3d3x1c[_0x2f72[21]]))})[_0x2f72[28]](handleError(_0xe3d3xb))};exports[_0x2f72[58]]= function(_0xe3d3x14,_0xe3d3xb){return VoiceRecording[_0x2f72[58]](_0xe3d3x14[_0x2f72[59]])[_0x2f72[24]](responseWithResult(_0xe3d3xb,201))[_0x2f72[28]](handleError(_0xe3d3xb))};exports[_0x2f72[60]]= function(_0xe3d3x14,_0xe3d3xb){if(_0xe3d3x14[_0x2f72[59]][_0x2f72[38]]){delete _0xe3d3x14[_0x2f72[59]][_0x2f72[38]]};return VoiceRecording[_0x2f72[40]](_0xe3d3x14[_0x2f72[44]][_0x2f72[38]])[_0x2f72[24]](handleEntityNotFound(_0xe3d3xb))[_0x2f72[24]](saveUpdates(_0xe3d3x14[_0x2f72[59]]))[_0x2f72[24]](responseWithResult(_0xe3d3xb))[_0x2f72[28]](handleError(_0xe3d3xb))};exports[_0x2f72[25]]= function(_0xe3d3x14,_0xe3d3xb){return VoiceRecording[_0x2f72[40]](_0xe3d3x14[_0x2f72[44]][_0x2f72[38]])[_0x2f72[24]](handleEntityNotFound(_0xe3d3xb))[_0x2f72[24]](removeEntity(_0xe3d3xb))[_0x2f72[28]](handleError(_0xe3d3xb))};exports[_0x2f72[61]]= function(_0xe3d3x14,_0xe3d3xb){return VoiceRecording[_0x2f72[68]]({where:{id:_0xe3d3x14[_0x2f72[34]][_0x2f72[67]]}})[_0x2f72[24]](function(_0xe3d3x1f){var _0xe3d3x20=[];_[_0x2f72[33]](_0xe3d3x1f,function(_0xe3d3x21){try{fs[_0x2f72[22]](_0xe3d3x21[_0x2f72[21]]);try{fs[_0x2f72[26]](_0xe3d3x21[_0x2f72[21]]);_0xe3d3x20[_0x2f72[64]](_0xe3d3x21[_0x2f72[25]]())}catch(err){console[_0x2f72[23]](_0x2f72[65],err)}}catch(err){console[_0x2f72[23]](_0x2f72[66]);_0xe3d3x20[_0x2f72[64]](_0xe3d3x21[_0x2f72[25]]())}});return _0xe3d3x20})[_0x2f72[63]]()[_0x2f72[24]](function(){return _0xe3d3xb[_0x2f72[62]](204)})[_0x2f72[28]](handleError(_0xe3d3xb))} \ No newline at end of file +/** + * Using Rails-like standard naming convention for endpoints. + * GET /api/voice/recordings -> index + * POST /api/voice/recordings -> create + * GET /api/voice/recordings/:id -> show + * PUT /api/voice/recordings/:id -> update + * DELETE /api/voice/recordings/:id -> destroy + */ + +'use strict'; + + +var _ = require('lodash'); +var util = require('util'); +var Util = require('../../config/util'); + +var VoiceRecording = require('../../models').VoiceRecording; +var User = require('../../models').User; +var Promise = require('bluebird'); +// var base64 = Promise.promisifyAll(require('file-base64')); +var base64 = require('file-base64'); +var fs = require('fs'); +var path = require('path'); + +function handleError(res) { + return function(err) { + if (err.cause && err.cause.code === 'ENOENT') { + err = { + message: 'No file or directory', + translatedMessage: 'MESSAGE_NO_FILE_OR_DIRECTORY' + }; + } + return res.status(500).send(err); + } +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(body) { + return function(entity) { + return entity + .updateAttributes(body); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + try { + fs.statSync(entity.value); //search the file + } catch (err) { //file not found + console.log(err); + return entity.destroy() //deleting the dbentry + .then(function() { + res.status(204).end(); + }); + } + try { //file found, deleting + fs.unlinkSync(entity.value); + return entity.destroy() //file deleted, deleting the db entry + .then(function() { + res.status(204).end(); + }); + } catch (err) { //error deleting file + console.log(err); + throw new Error(err); + } + } + }; +} + +// Gets a list of VoiceRecordings +exports.index = function(req, res) { + switch (req.user.role) { + case 'user': + return User + .findById(req.user.id, { + attributes: ['id'] + }) + .then(Util.getVoiceQueuesIdByUser()) + .then(function(userQueues) { + var users = []; + var _userQueues = _.map(userQueues.rows, 'name'); + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'name')); + }); + return VoiceRecording + .findAndCountAll(Util.getQuery(req.query, { + $or: { + queue: _userQueues, + membername: users + } + })) + }) + .then(responseWithResult(res)) + .catch(handleError(res)); + case 'agent': + return VoiceRecording + .findAndCountAll(Util.getQuery(req.query, { + membername: req.user.name + })) + .then(responseWithResult(res)) + .catch(handleError(res)); + default: + return VoiceRecording + .findAndCountAll(Util.getQuery(req.query)) + .then(responseWithResult(res)) + .catch(handleError(res)); + } +} + +// Gets a single VoiceRecording from the DB +exports.show = function(req, res) { + return VoiceRecording.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Get list of fields +exports.describe = function(req, res) { + return VoiceRecording + .describe() + .then(function(fields) { + return res.status(200).send(fields); + }) + .catch(handleError(res)); +}; + + +// Gets a single VoiceRecording from the DB +exports.getStream = function(req, res) { + return VoiceRecording + .findById(req.params.id) + .then(function(recording) { + var readFile = Promise.promisify(fs.readFile); + return readFile(recording.value); + }) + .then(function(result) { + var base64String = new Buffer(result, 'binary').toString('base64'); + return base64String; + }) + .then(function(base64String) { + return res.status(200).send({ + downloadString: base64String + }); + }) + .catch(handleError(res)); +} + +//Download a Vocie Recordings: Not authenticated +exports.getStreamById = function(req, res) { + var where = {}; + + if (req.query && req.query.hasOwnProperty('type') && req.query.type === 'uniqueid') { + where.uniqueid = req.params.id; + } else { + where.id = req.params.id; + } + + return VoiceRecording + .findOne({ + where: where + }) + .then(handleEntityNotFound(res)) + .then(function(recording) { + return res.download(recording.value, path.basename(recording.value)); + }) + .catch(handleError(res)); +} + + +// Creates a new VoiceRecording in the DB +exports.create = function(req, res) { + return VoiceRecording.create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +} + +// Updates an existing VoiceRecording in the DB +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return VoiceRecording.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +// Deletes a VoiceRecording from the DB +exports.destroy = function(req, res) { + return VoiceRecording.findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +} + +// Deletes multiple VoiceRecordings from the DB. +exports.bulkDestroy = function(req, res) { + return VoiceRecording + .findAll({ + where: { + id: req.query.ids + } + }) + .then(function(recordings) { + var bulkDestroy = []; + _.forEach(recordings, function(rec) { + try { + fs.statSync(rec.value); //search the file + try { //file found, deleting + fs.unlinkSync(rec.value); + bulkDestroy.push(rec.destroy()); + } catch (err) { //error deleting file + console.log('Can\' t delete the file', err); + } + } catch (err) { //file not found + console.log('File not found, deleting db entry...'); + bulkDestroy.push(rec.destroy()); + } + }); + return bulkDestroy; + }) + .all() + .then(function() { + return res.sendStatus(204); + }) + .catch(handleError(res)); +}; diff --git a/server/api/voice_recording/voice_recording.events.js b/server/api/voice_recording/voice_recording.events.js index dc55c2e..ac0c175 100644 --- a/server/api/voice_recording/voice_recording.events.js +++ b/server/api/voice_recording/voice_recording.events.js @@ -1 +1,36 @@ -var _0xec4e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x56\x6F\x69\x63\x65\x52\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xec4e[0];const EventEmitter=require(_0xec4e[1]);const VoiceRecording=require(_0xec4e[3])[_0xec4e[2]];var VoiceRecordingEvents= new EventEmitter();VoiceRecordingEvents[_0xec4e[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xec4e[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xec4e[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xec4e[6]};for(var e in events){var event=events[e];VoiceRecording[_0xec4e[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x272dx8,_0x272dx9,_0x272dxa){VoiceRecordingEvents[_0xec4e[10]](event+ _0xec4e[8]+ _0x272dx8[_0xec4e[9]],_0x272dx8);VoiceRecordingEvents[_0xec4e[10]](event,_0x272dx8);_0x272dxa(null)}}module[_0xec4e[11]]= VoiceRecordingEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const VoiceRecording = require('../../models').VoiceRecording; + +var VoiceRecordingEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +VoiceRecordingEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + VoiceRecording.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + VoiceRecordingEvents.emit(event + ':' + doc._id, doc); + VoiceRecordingEvents.emit(event, doc); + done(null); + } +} + +module.exports = VoiceRecordingEvents; diff --git a/server/api/voice_recording/voice_recording.socket.js b/server/api/voice_recording/voice_recording.socket.js index b50d364..6b7ee22 100644 --- a/server/api/voice_recording/voice_recording.socket.js +++ b/server/api/voice_recording/voice_recording.socket.js @@ -1 +1,32 @@ -var _0x875e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x875e[0];const VoiceRecordingEvents=require(_0x875e[1]);var events=[_0x875e[2],_0x875e[3]];exports[_0x875e[4]]= function(_0xad70x3){for(var _0xad70x4=0,_0xad70x5=events[_0x875e[5]];_0xad70x4< _0xad70x5;_0xad70x4++){var _0xad70x6=events[_0xad70x4];var _0xad70x7=createListener(_0x875e[6]+ _0xad70x6,_0xad70x3);VoiceRecordingEvents[_0x875e[7]](_0xad70x6,_0xad70x7);_0xad70x3[_0x875e[7]](_0x875e[8],removeListener(_0xad70x6,_0xad70x7))}};function createListener(_0xad70x6,_0xad70x3){return function(_0xad70x9){_0xad70x3[_0x875e[9]](_0xad70x6,_0xad70x9)}}function removeListener(_0xad70x6,_0xad70x7){return function(){VoiceRecordingEvents[_0x875e[10]](_0xad70x6,_0xad70x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const VoiceRecordingEvents = require('./voice_recording.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('voice_recording:' + event, socket); + + VoiceRecordingEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + VoiceRecordingEvents.removeListener(event, listener); + }; +} diff --git a/server/api/voice_voicemail/index.js b/server/api/voice_voicemail/index.js index 78b0e02..db2e635 100644 --- a/server/api/voice_voicemail/index.js +++ b/server/api/voice_voicemail/index.js @@ -1 +1,17 @@ -var _0x1ec3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x75\x6E\x69\x71\x75\x65\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65","\x6D\x61\x69\x6C\x62\x6F\x78\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x1ec3[0];var express=require(_0x1ec3[1]);var controller=require(_0x1ec3[2]);var auth=require(_0x1ec3[3]);var router=express.Router();router[_0x1ec3[9]](_0x1ec3[4],auth[_0x1ec3[5]](),auth[_0x1ec3[7]]([7],[_0x1ec3[6]]),controller[_0x1ec3[8]]);router[_0x1ec3[9]](_0x1ec3[10],auth[_0x1ec3[5]](),auth[_0x1ec3[7]]([7],[_0x1ec3[6]]),controller[_0x1ec3[11]]);router[_0x1ec3[13]](_0x1ec3[4],auth[_0x1ec3[5]](),auth[_0x1ec3[7]]([7],[_0x1ec3[6]]),controller[_0x1ec3[12]]);router[_0x1ec3[13]](_0x1ec3[14],auth[_0x1ec3[5]](),auth[_0x1ec3[7]]([7],[_0x1ec3[6]]),controller[_0x1ec3[15]]);router[_0x1ec3[17]](_0x1ec3[10],auth[_0x1ec3[5]](),auth[_0x1ec3[7]]([7],[_0x1ec3[6]]),controller[_0x1ec3[16]]);router[_0x1ec3[19]](_0x1ec3[4],auth[_0x1ec3[5]](),auth[_0x1ec3[7]]([7],[_0x1ec3[6]]),controller[_0x1ec3[18]]);router[_0x1ec3[19]](_0x1ec3[10],auth[_0x1ec3[5]](),auth[_0x1ec3[7]]([7],[_0x1ec3[6]]),controller[_0x1ec3[20]]);module[_0x1ec3[21]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./voice_voicemail.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.index); +router.get('/:uniqueid', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.create); +router.post('/validate', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.mailboxValidation); +router.put('/:uniqueid', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.update); +router.delete('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.bulkDestroy); +router.delete('/:uniqueid', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/voice_voicemail/voice_voicemail.controller.js b/server/api/voice_voicemail/voice_voicemail.controller.js index 663c679..69a1139 100644 --- a/server/api/voice_voicemail/voice_voicemail.controller.js +++ b/server/api/voice_voicemail/voice_voicemail.controller.js @@ -1 +1,190 @@ -var _0x8639=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x73\x74\x72\x65\x61\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x75\x6E\x69\x71\x75\x65\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64","\x6D\x61\x69\x6C\x62\x6F\x78\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x62\x6F\x64\x79","\x6C\x6F\x67","\x6D\x61\x69\x6C\x62\x6F\x78","\x63\x6F\x6E\x74\x65\x78\x74","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x72\x65\x61\x74\x65","\x6C\x65\x6E\x67\x74\x68","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x4D\x41\x49\x4C\x42\x4F\x58","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79"];_0x8639[0];var _=require(_0x8639[1]);var stream=require(_0x8639[2]);var Util=require(_0x8639[3]);var VoiceVoicemail=require(_0x8639[5])[_0x8639[4]];var VoiceVoicemailMessages=require(_0x8639[5])[_0x8639[6]];exports[_0x8639[7]]= function(_0x735ax6,_0x735ax7){return VoiceVoicemail[_0x8639[14]](Util[_0x8639[13]](_0x735ax6[_0x8639[12]]))[_0x8639[11]](function(_0x735ax9){_0x735ax7[_0x8639[10]](200)[_0x8639[9]](_0x735ax9)})[_0x8639[8]](function(_0x735ax8){return handleError(_0x735ax7,_0x735ax8)})};exports[_0x8639[15]]= function(_0x735ax6,_0x735ax7){VoiceVoicemail[_0x8639[19]]({where:{uniqueid:_0x735ax6[_0x8639[18]][_0x8639[17]]}})[_0x8639[11]](function(_0x735axa){if(!_0x735axa){return _0x735ax7[_0x8639[16]](404)};return _0x735ax7[_0x8639[9]](_0x735axa)})[_0x8639[8]](function(_0x735ax8){return handleError(_0x735ax7,_0x735ax8)})};exports[_0x8639[20]]= function(_0x735ax6,_0x735ax7){console[_0x8639[22]](_0x735ax6[_0x8639[21]]);VoiceVoicemail[_0x8639[25]]({where:{mailbox:_0x735ax6[_0x8639[21]][_0x8639[23]],context:_0x735ax6[_0x8639[21]][_0x8639[24]]}})[_0x8639[11]](function(_0x735axb){if(!_0x735axb){return _0x735ax7[_0x8639[16]](404)};return _0x735ax7[_0x8639[9]](_0x735axb)})[_0x8639[8]](function(_0x735ax8){return handleError(_0x735ax7,_0x735ax8)})};exports[_0x8639[26]]= function(_0x735ax6,_0x735ax7){VoiceVoicemail[_0x8639[25]]({where:{mailbox:_0x735ax6[_0x8639[21]][_0x8639[23]],context:_0x735ax6[_0x8639[21]][_0x8639[24]]}})[_0x8639[11]](function(_0x735axb){if(!_0x735axb){return _0x735ax7[_0x8639[16]](404)};if(_0x735axb[_0x8639[27]]> 0){return _0x735ax7[_0x8639[10]](500)[_0x8639[9]]({message:_0x8639[28]})};VoiceVoicemail[_0x8639[26]](_0x735ax6[_0x8639[21]])[_0x8639[11]](function(_0x735axa){return _0x735ax7[_0x8639[10]](201)[_0x8639[9]](_0x735axa)})[_0x8639[8]](function(_0x735ax8){return handleError(_0x735ax7,_0x735ax8)})[_0x8639[8]](function(_0x735ax8){return handleError(_0x735ax7,_0x735ax8)})})};exports[_0x8639[29]]= function(_0x735ax6,_0x735ax7){VoiceVoicemail[_0x8639[25]]({where:{mailbox:_0x735ax6[_0x8639[21]][_0x8639[23]],context:_0x735ax6[_0x8639[21]][_0x8639[24]],uniqueid:{$ne:_0x735ax6[_0x8639[21]][_0x8639[17]]}}})[_0x8639[11]](function(_0x735axb){if(!_0x735axb){return _0x735ax7[_0x8639[16]](404)};if(_0x735axb[_0x8639[27]]> 0){return _0x735ax7[_0x8639[10]](500)[_0x8639[9]]({message:_0x8639[28]})};if(_0x735ax6[_0x8639[21]][_0x8639[17]]){delete _0x735ax6[_0x8639[21]][_0x8639[17]]};VoiceVoicemail[_0x8639[19]]({where:{uniqueid:_0x735ax6[_0x8639[18]][_0x8639[17]]}})[_0x8639[11]](function(_0x735axa){if(!_0x735axa){return _0x735ax7[_0x8639[16]](404)};var _0x735axc=_[_0x8639[30]](_0x735axa,_0x735ax6[_0x8639[21]]);_0x735axc[_0x8639[31]]()[_0x8639[11]](function(){return _0x735ax7[_0x8639[10]](200)[_0x8639[9]](_0x735axa)})[_0x8639[8]](function(_0x735ax8){return handleError(_0x735ax7,_0x735ax8)})})[_0x8639[8]](function(_0x735ax8){return handleError(_0x735ax7,_0x735ax8)})})[_0x8639[8]](function(_0x735ax8){return handleError(_0x735ax7,_0x735ax8)})};exports[_0x8639[32]]= function(_0x735ax6,_0x735ax7){VoiceVoicemail[_0x8639[19]]({where:{uniqueid:_0x735ax6[_0x8639[18]][_0x8639[17]]}})[_0x8639[11]](function(_0x735axa){if(!_0x735axa){return _0x735ax7[_0x8639[16]](404)};_0x735axa[_0x8639[32]]()[_0x8639[11]](function(){return _0x735ax7[_0x8639[16]](204)})[_0x8639[8]](function(_0x735ax8){return handleError(_0x735ax7,_0x735ax8)})})[_0x8639[8]](function(_0x735ax8){return handleError(_0x735ax7,_0x735ax8)})};exports[_0x8639[33]]= function(_0x735ax6,_0x735ax7){VoiceVoicemail[_0x8639[32]]({where:{uniqueid:_0x735ax6[_0x8639[12]][_0x8639[17]]},individualHooks:true})[_0x8639[11]](function(){return _0x735ax7[_0x8639[16]](204)})[_0x8639[8]](function(_0x735ax8){return handleError(_0x735ax7,_0x735ax8)})};function handleError(_0x735ax7,_0x735ax8){return _0x735ax7[_0x8639[10]](500)[_0x8639[9]](_0x735ax8)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var stream = require('stream'); +var Util = require('../../config/util'); + +var VoiceVoicemail = require('../../models').VoiceVoicemail; +var VoiceVoicemailMessages = require('../../models').VoiceVoicemailMessages; + +// Get list of voice_voicemails +exports.index = function(req, res) { + return VoiceVoicemail + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single voice_voicemail +exports.show = function(req, res) { + VoiceVoicemail + .find({ + where: { + uniqueid: req.params.uniqueid + } + }) + .then(function(voice_voicemail) { + if (!voice_voicemail) { + return res.sendStatus(404); + } + return res.send(voice_voicemail); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// validate mailbox uniqueness +exports.mailboxValidation = function(req, res) { + console.log(req.body); + VoiceVoicemail + .findAll({ + where: { + mailbox: req.body.mailbox, + context: req.body.context + } + }) + .then(function(voicemails) { + if (!voicemails) { + return res.sendStatus(404); + } + return res.send(voicemails); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; +// Creates a new voice_voicemail in the DB. +exports.create = function(req, res) { + VoiceVoicemail + .findAll({ + where: { + mailbox: req.body.mailbox, + context: req.body.context + } + }) + .then(function(voicemails) { + if (!voicemails) { + return res.sendStatus(404); + } + if (voicemails.length > 0) { + return res.status(500).send({ + message: 'MESSAGE_EXIST_MAILBOX' + }) + } + VoiceVoicemail + .create(req.body) + .then(function(voice_voicemail) { + return res.status(201).send(voice_voicemail); + }) + .catch(function(err) { + return handleError(res, err); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) +}; + +// Updates an existing voice_voicemail in the DB. +exports.update = function(req, res) { + VoiceVoicemail + .findAll({ + where: { + mailbox: req.body.mailbox, + context: req.body.context, + uniqueid: { + $ne: req.body.uniqueid + } + } + }) + .then(function(voicemails) { + if (!voicemails) { + return res.sendStatus(404); + } + if (voicemails.length > 0) { + return res.status(500).send({ + message: 'MESSAGE_EXIST_MAILBOX' + }) + } + if (req.body.uniqueid) { + delete req.body.uniqueid; + } + VoiceVoicemail + .find({ + where: { + uniqueid: req.params.uniqueid + } + }) + .then(function(voice_voicemail) { + if (!voice_voicemail) { + return res.sendStatus(404); + } + var updated = _.merge(voice_voicemail, req.body); + updated.save() + .then(function() { + return res.status(200).send(voice_voicemail); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); + +}; + +// Deletes a voice_voicemail from the DB. +exports.destroy = function(req, res) { + VoiceVoicemail + .find({ + where: { + uniqueid: req.params.uniqueid + } + }) + .then(function(voice_voicemail) { + if (!voice_voicemail) { + return res.sendStatus(404); + } + voice_voicemail.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a voice_voicemail from the DB. +exports.bulkDestroy = function(req, res) { + VoiceVoicemail + .destroy({ + where: { + uniqueid: req.query.uniqueid + }, + individualHooks: true + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/voice_voicemail/voice_voicemail.events.js b/server/api/voice_voicemail/voice_voicemail.events.js index 523ff11..7f8360b 100644 --- a/server/api/voice_voicemail/voice_voicemail.events.js +++ b/server/api/voice_voicemail/voice_voicemail.events.js @@ -1 +1,36 @@ -var _0x58cb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x58cb[0];const EventEmitter=require(_0x58cb[1]);const VoiceVoicemail=require(_0x58cb[3])[_0x58cb[2]];var VoiceVoicemailEvents= new EventEmitter();VoiceVoicemailEvents[_0x58cb[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x58cb[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x58cb[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x58cb[6]};for(var e in events){var event=events[e];VoiceVoicemail[_0x58cb[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xbdfdx8,_0xbdfdx9,_0xbdfdxa){VoiceVoicemailEvents[_0x58cb[10]](event+ _0x58cb[8]+ _0xbdfdx8[_0x58cb[9]],_0xbdfdx8);VoiceVoicemailEvents[_0x58cb[10]](event,_0xbdfdx8);_0xbdfdxa(null)}}module[_0x58cb[11]]= VoiceVoicemailEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const VoiceVoicemail = require('../../models').VoiceVoicemail; + +var VoiceVoicemailEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +VoiceVoicemailEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + VoiceVoicemail.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + VoiceVoicemailEvents.emit(event + ':' + doc._id, doc); + VoiceVoicemailEvents.emit(event, doc); + done(null); + } +} + +module.exports = VoiceVoicemailEvents; diff --git a/server/api/voice_voicemail/voice_voicemail.socket.js b/server/api/voice_voicemail/voice_voicemail.socket.js index 82bdd0a..1c63f6d 100644 --- a/server/api/voice_voicemail/voice_voicemail.socket.js +++ b/server/api/voice_voicemail/voice_voicemail.socket.js @@ -1 +1,32 @@ -var _0xf331=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xf331[0];const VoiceVoicemailEvents=require(_0xf331[1]);var events=[_0xf331[2],_0xf331[3]];exports[_0xf331[4]]= function(_0xf87fx3){for(var _0xf87fx4=0,_0xf87fx5=events[_0xf331[5]];_0xf87fx4< _0xf87fx5;_0xf87fx4++){var _0xf87fx6=events[_0xf87fx4];var _0xf87fx7=createListener(_0xf331[6]+ _0xf87fx6,_0xf87fx3);VoiceVoicemailEvents[_0xf331[7]](_0xf87fx6,_0xf87fx7);_0xf87fx3[_0xf331[7]](_0xf331[8],removeListener(_0xf87fx6,_0xf87fx7))}};function createListener(_0xf87fx6,_0xf87fx3){return function(_0xf87fx9){_0xf87fx3[_0xf331[9]](_0xf87fx6,_0xf87fx9)}}function removeListener(_0xf87fx6,_0xf87fx7){return function(){VoiceVoicemailEvents[_0xf331[10]](_0xf87fx6,_0xf87fx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const VoiceVoicemailEvents = require('./voice_voicemail.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('voice_voicemail:' + event, socket); + + VoiceVoicemailEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + VoiceVoicemailEvents.removeListener(event, listener); + }; +} diff --git a/server/api/voice_voicemail_messages/index.js b/server/api/voice_voicemail_messages/index.js index 7e7f578..94f57a6 100644 --- a/server/api/voice_voicemail_messages/index.js +++ b/server/api/voice_voicemail_messages/index.js @@ -1 +1,15 @@ -var _0x1e49=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x1e49[0];var express=require(_0x1e49[1]);var controller=require(_0x1e49[2]);var auth=require(_0x1e49[3]);var router=express.Router();router[_0x1e49[9]](_0x1e49[4],auth[_0x1e49[5]](),auth[_0x1e49[7]]([7],[_0x1e49[6]]),controller[_0x1e49[8]]);router[_0x1e49[9]](_0x1e49[10],auth[_0x1e49[5]](),auth[_0x1e49[7]]([7],[_0x1e49[6]]),controller[_0x1e49[11]]);router[_0x1e49[9]](_0x1e49[12],auth[_0x1e49[5]](),auth[_0x1e49[7]]([7],[_0x1e49[6]]),controller[_0x1e49[13]]);router[_0x1e49[15]](_0x1e49[4],auth[_0x1e49[5]](),auth[_0x1e49[7]]([7],[_0x1e49[6]]),controller[_0x1e49[14]]);router[_0x1e49[15]](_0x1e49[10],auth[_0x1e49[5]](),auth[_0x1e49[7]]([7],[_0x1e49[6]]),controller[_0x1e49[16]]);module[_0x1e49[17]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./voice_voicemail_messages.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.show); +router.get('/:id/download', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.download); +router.delete('/', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([7], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/voice_voicemail_messages/voice_voicemail_messages.controller.js b/server/api/voice_voicemail_messages/voice_voicemail_messages.controller.js index c7a2bf8..f97d1a1 100644 --- a/server/api/voice_voicemail_messages/voice_voicemail_messages.controller.js +++ b/server/api/voice_voicemail_messages/voice_voicemail_messages.controller.js @@ -1 +1,106 @@ -var _0x74d3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x73\x74\x72\x65\x61\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x67\x65\x74\x51\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x6D\x61\x69\x6C\x62\x6F\x78","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x64\x65\x73\x74\x72\x6F\x79","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x61\x6C\x6C","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x69\x64\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x62\x61\x73\x65\x36\x34","\x62\x69\x6E\x61\x72\x79"];_0x74d3[0];var _=require(_0x74d3[1]);var stream=require(_0x74d3[2]);var Util=require(_0x74d3[3]);var VoiceVoicemailMessages=require(_0x74d3[5])[_0x74d3[4]];exports[_0x74d3[6]]= function(_0x25cfx5,_0x25cfx6){return VoiceVoicemailMessages[_0x74d3[16]]({method:[_0x74d3[15],_0x25cfx5[_0x74d3[12]]]})[_0x74d3[14]](Util[_0x74d3[13]](_0x25cfx5[_0x74d3[12]]))[_0x74d3[11]](function(_0x25cfx8){_0x25cfx6[_0x74d3[10]](200)[_0x74d3[9]](_0x25cfx8)})[_0x74d3[8]](function(_0x25cfx7){console[_0x74d3[7]](_0x25cfx7);return handleError(_0x25cfx6,_0x25cfx7)})};exports[_0x74d3[17]]= function(_0x25cfx5,_0x25cfx6){return VoiceVoicemailMessages[_0x74d3[21]](_0x25cfx5[_0x74d3[20]][_0x74d3[19]])[_0x74d3[11]](function(_0x25cfx9){if(!_0x25cfx9){return _0x25cfx6[_0x74d3[18]](404)};return _0x25cfx6[_0x74d3[9]](_0x25cfx9)})[_0x74d3[8]](function(_0x25cfx7){return handleError(_0x25cfx6,_0x25cfx7)})};exports[_0x74d3[22]]= function(_0x25cfx5,_0x25cfx6){return VoiceVoicemailMessages[_0x74d3[21]](_0x25cfx5[_0x74d3[20]][_0x74d3[19]])[_0x74d3[11]](function(_0x25cfx9){if(!_0x25cfx9){return _0x25cfx6[_0x74d3[18]](404)};_0x25cfx9[_0x74d3[23]]= null;_0x25cfx9[_0x74d3[22]]()})[_0x74d3[11]](function(){return _0x25cfx6[_0x74d3[18]](204)})[_0x74d3[8]](function(_0x25cfx7){return handleError(_0x25cfx6,_0x25cfx7)})};exports[_0x74d3[24]]= function(_0x25cfx5,_0x25cfx6){return VoiceVoicemailMessages[_0x74d3[29]]({where:{id:_0x25cfx5[_0x74d3[12]][_0x74d3[28]]},individualHooks:true})[_0x74d3[11]](function(_0x25cfxa){var _0x25cfxb=[];_0x25cfxa[_0x74d3[27]](function(_0x25cfxc){_0x25cfxc[_0x74d3[23]]= null;_0x25cfxb[_0x74d3[26]](_0x25cfxc[_0x74d3[22]]())});return _0x25cfxb})[_0x74d3[25]]()[_0x74d3[11]](function(){return _0x25cfx6[_0x74d3[18]](204)})[_0x74d3[8]](function(_0x25cfx7){return handleError(_0x25cfx6,_0x25cfx7)})};exports[_0x74d3[30]]= function(_0x25cfx5,_0x25cfx6){return VoiceVoicemailMessages[_0x74d3[21]](_0x25cfx5[_0x74d3[20]][_0x74d3[19]])[_0x74d3[11]](function(_0x25cfxc){var _0x25cfxd= new Buffer(_0x25cfxc[_0x74d3[23]],_0x74d3[32]).toString(_0x74d3[31]);return _0x25cfxd})[_0x74d3[11]](function(_0x25cfxd){return _0x25cfx6[_0x74d3[10]](200)[_0x74d3[9]]({downloadString:_0x25cfxd})})[_0x74d3[8]](function(_0x25cfx7){console[_0x74d3[7]](_0x25cfx7);return handleError(_0x25cfx6,_0x25cfx7)})};function handleError(_0x25cfx6,_0x25cfx7){return _0x25cfx6[_0x74d3[10]](500)[_0x74d3[9]](_0x25cfx7)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var stream = require('stream'); +var Util = require('../../config/util'); + +var VoiceVoicemailMessages = require('../../models').VoiceVoicemailMessages; + +// Get list of voicemail messages +exports.index = function(req, res) { + return VoiceVoicemailMessages + .scope({ + method: ['mailbox', req.query] + }) + .findAndCountAll(Util.getQuery(req.query)) + .then(function(result) { + res.status(200).send(result); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +// Get a single voicemail_message +exports.show = function(req, res) { + return VoiceVoicemailMessages + .findById(req.params.id) + .then(function(voicemail_message) { + if (!voicemail_message) { + return res.sendStatus(404); + } + return res.send(voicemail_message); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a voicemail_message from the DB. +exports.destroy = function(req, res) { + return VoiceVoicemailMessages + .findById(req.params.id) + .then(function(voicemail_message) { + if (!voicemail_message) { + return res.sendStatus(404); + } + voicemail_message.recording = null; + voicemail_message.destroy(); + }) + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes all voicemail_messages from the DB. +exports.bulkDestroy = function(req, res) { + return VoiceVoicemailMessages + .findAll({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(function(voicemail_messages) { + var bulkDest = []; + voicemail_messages.forEach(function(message) { + message.recording = null; + bulkDest.push(message.destroy()); + }); + return bulkDest; + }) + .all() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.download = function(req, res) { + return VoiceVoicemailMessages + .findById(req.params.id) + .then(function(message) { + var base64String = new Buffer(message.recording, 'binary').toString('base64'); + return base64String; + }) + .then(function(base64String) { + return res.status(200).send({ + downloadString: base64String + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/voice_voicemail_messages/voice_voicemail_messages.events.js b/server/api/voice_voicemail_messages/voice_voicemail_messages.events.js index ade18bc..aa3edd9 100644 --- a/server/api/voice_voicemail_messages/voice_voicemail_messages.events.js +++ b/server/api/voice_voicemail_messages/voice_voicemail_messages.events.js @@ -1 +1,36 @@ -var _0x9631=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x56\x6F\x69\x63\x65\x56\x6F\x69\x63\x65\x6D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x9631[0];const EventEmitter=require(_0x9631[1]);const VoiceVoicemailMessages=require(_0x9631[3])[_0x9631[2]];var VoiceVoicemailMessagesEvents= new EventEmitter();VoiceVoicemailMessagesEvents[_0x9631[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x9631[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x9631[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x9631[6]};for(var e in events){var event=events[e];VoiceVoicemailMessages[_0x9631[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xf09cx8,_0xf09cx9,_0xf09cxa){VoiceVoicemailMessagesEvents[_0x9631[10]](event+ _0x9631[8]+ _0xf09cx8[_0x9631[9]],_0xf09cx8);VoiceVoicemailMessagesEvents[_0x9631[10]](event,_0xf09cx8);_0xf09cxa(null)}}module[_0x9631[11]]= VoiceVoicemailMessagesEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const VoiceVoicemailMessages = require('../../models').VoiceVoicemailMessages; + +var VoiceVoicemailMessagesEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +VoiceVoicemailMessagesEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + VoiceVoicemailMessages.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + VoiceVoicemailMessagesEvents.emit(event + ':' + doc._id, doc); + VoiceVoicemailMessagesEvents.emit(event, doc); + done(null); + } +} + +module.exports = VoiceVoicemailMessagesEvents; diff --git a/server/api/voice_voicemail_messages/voice_voicemail_messages.socket.js b/server/api/voice_voicemail_messages/voice_voicemail_messages.socket.js index f409583..3e1dac1 100644 --- a/server/api/voice_voicemail_messages/voice_voicemail_messages.socket.js +++ b/server/api/voice_voicemail_messages/voice_voicemail_messages.socket.js @@ -1 +1,32 @@ -var _0x28cc=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x28cc[0];const VoiceVoicemailMessagesEvents=require(_0x28cc[1]);var events=[_0x28cc[2],_0x28cc[3]];exports[_0x28cc[4]]= function(_0xb8b2x3){for(var _0xb8b2x4=0,_0xb8b2x5=events[_0x28cc[5]];_0xb8b2x4< _0xb8b2x5;_0xb8b2x4++){var _0xb8b2x6=events[_0xb8b2x4];var _0xb8b2x7=createListener(_0x28cc[6]+ _0xb8b2x6,_0xb8b2x3);VoiceVoicemailMessagesEvents[_0x28cc[7]](_0xb8b2x6,_0xb8b2x7);_0xb8b2x3[_0x28cc[7]](_0x28cc[8],removeListener(_0xb8b2x6,_0xb8b2x7))}};function createListener(_0xb8b2x6,_0xb8b2x3){return function(_0xb8b2x9){_0xb8b2x3[_0x28cc[9]](_0xb8b2x6,_0xb8b2x9)}}function removeListener(_0xb8b2x6,_0xb8b2x7){return function(){VoiceVoicemailMessagesEvents[_0x28cc[10]](_0xb8b2x6,_0xb8b2x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const VoiceVoicemailMessagesEvents = require('./voice_voicemail_messages.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('voice_voicemail_messages:' + event, socket); + + VoiceVoicemailMessagesEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + VoiceVoicemailMessagesEvents.removeListener(event, listener); + }; +} diff --git a/server/api/widget/index.js b/server/api/widget/index.js index ff4d535..a2d3e04 100644 --- a/server/api/widget/index.js +++ b/server/api/widget/index.js @@ -1 +1,13 @@ -var _0x40f6=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x77\x69\x64\x67\x65\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F\x63\x6F\x75\x6E\x74\x65\x72","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x61\x67\x65\x6E\x74","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x63\x6F\x75\x6E\x74\x65\x72","\x67\x65\x74","\x2F\x74\x61\x62\x6C\x65","\x74\x61\x62\x6C\x65","\x2F\x70\x69\x65\x63\x68\x61\x72\x74","\x70\x69\x65\x63\x68\x61\x72\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x40f6[0];var express=require(_0x40f6[1]);var controller=require(_0x40f6[2]);var auth=require(_0x40f6[3]);var router=express.Router();router[_0x40f6[10]](_0x40f6[4],auth[_0x40f6[5]](),auth[_0x40f6[8]]([2],[_0x40f6[6],_0x40f6[7]]),controller[_0x40f6[9]]);router[_0x40f6[10]](_0x40f6[11],auth[_0x40f6[5]](),auth[_0x40f6[8]]([2],[_0x40f6[6],_0x40f6[7]]),controller[_0x40f6[12]]);router[_0x40f6[10]](_0x40f6[13],auth[_0x40f6[5]](),auth[_0x40f6[8]]([2],[_0x40f6[6],_0x40f6[7]]),controller[_0x40f6[14]]);module[_0x40f6[15]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./widget.controller'); +var auth = require('../../auth/auth.service'); + +var router = express.Router(); + +router.get('/counter', auth.isAuthenticated(), auth.hasModule([2], ['admin', 'agent']), controller.counter); +router.get('/table', auth.isAuthenticated(), auth.hasModule([2], ['admin', 'agent']), controller.table); +router.get('/piechart', auth.isAuthenticated(), auth.hasModule([2], ['admin', 'agent']), controller.piechart); + +module.exports = router; diff --git a/server/api/widget/widget.controller.js b/server/api/widget/widget.controller.js index 690e509..1f15835 100644 --- a/server/api/widget/widget.controller.js +++ b/server/api/widget/widget.controller.js @@ -1 +1,147 @@ -var _0x8174=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x62\x75\x69\x6C\x64","\x62\x6C\x75\x65\x62\x69\x72\x64","\x63\x6F\x75\x6E\x74\x65\x72","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x53\x45\x4C\x45\x43\x54\x20\x25\x73\x20\x46\x52\x4F\x4D\x20\x25\x73","\x73\x65\x6C\x65\x63\x74","\x71\x75\x65\x72\x79","\x74\x61\x62\x6C\x65","\x66\x6F\x72\x6D\x61\x74","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x6E\x75\x6C\x6C","\x20\x57\x48\x45\x52\x45\x20\x25\x73","\x65\x6D\x70\x74\x79","\x20\x41\x4E\x44\x20","\x20\x57\x48\x45\x52\x45\x20","\x20\x3D\x3D\x3D\x3D\x20\x52\x45\x53\x55\x4C\x54\x49\x4E\x47\x20\x51\x55\x45\x52\x59\x20\x3D\x3D\x3D\x3D","\x20\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x4E\x4F\x20\x53\x55\x46\x46\x49\x43\x49\x45\x4E\x54\x20\x50\x45\x52\x4D\x49\x53\x53\x49\x4F\x4E\x53","\x75\x73\x65\x72","\x62\x75\x69\x6C\x64\x46\x69\x6C\x74\x65\x72","\x61\x6C\x6C","\x66\x69\x65\x6C\x64\x73","\x69\x73\x41\x72\x72\x61\x79","\x70\x61\x72\x73\x65","\x63\x6F\x6C\x75\x6D\x6E","\x61\x6C\x69\x61\x73","\x20\x41\x53\x20\x22","\x22","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x69\x73\x53\x74\x72\x69\x6E\x67","\x6C\x65\x6E\x67\x74\x68","\x2C","\x6A\x6F\x69\x6E","\x2A","\x53\x45\x4C\x45\x43\x54\x20\x25\x73\x20\x46\x52\x4F\x4D\x20\x25\x73\x20\x57\x48\x45\x52\x45\x20\x25\x73","\x72\x65\x70\x6F\x72\x74","\x70\x69\x65\x63\x68\x61\x72\x74","","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","\x53\x45\x4C\x45\x43\x54\x20\x25\x73\x20\x46\x52\x4F\x4D\x20\x25\x73\x25\x73"];_0x8174[0];var _=require(_0x8174[1]);var util=require(_0x8174[2]);var sequelize=require(_0x8174[4])[_0x8174[3]];var reportBuildUtils=require(_0x8174[5]);var Promise=require(_0x8174[6]);exports[_0x8174[7]]= function(_0x79f2x6,_0x79f2x7){return Promise[_0x8174[31]]([])[_0x8174[12]](function(){return _0x79f2x6[_0x8174[15]][_0x8174[16]]})[_0x8174[12]](reportBuildUtils[_0x8174[30]](_0x79f2x6[_0x8174[29]]))[_0x8174[12]](function(_0x79f2xa){var _0x79f2xb=util[_0x8174[17]](_0x8174[13],_0x79f2x6[_0x8174[15]][_0x8174[14]],_0x79f2x6[_0x8174[15]][_0x8174[16]]);if(_0x79f2x6[_0x8174[15]][_0x8174[18]]&& _0x79f2x6[_0x8174[15]][_0x8174[18]]!== _0x8174[19]){_0x79f2xb+= util[_0x8174[17]](_0x8174[20],decodeURIComponent(_0x79f2x6[_0x8174[15]][_0x8174[18]]))};if(!_0x79f2xa|| _0x79f2xa!== _0x8174[21]){if(_0x79f2xa){_0x79f2xb+= _0x79f2x6[_0x8174[15]][_0x8174[18]]?_0x8174[22]+ _0x79f2xa:_0x8174[23]+ _0x79f2xa};console[_0x8174[8]](_0x8174[24]);console[_0x8174[8]](_0x79f2xb);console[_0x8174[8]](_0x8174[25]);return sequelize[_0x8174[15]](_0x79f2xb,{type:sequelize[_0x8174[27]][_0x8174[26]]})}else {console[_0x8174[8]](_0x8174[24]);console[_0x8174[8]](_0x8174[28]);console[_0x8174[8]](_0x8174[25]);return []}})[_0x8174[12]](function(_0x79f2x9){return _0x79f2x7[_0x8174[11]](200)[_0x8174[10]]({result:_0x79f2x9})})[_0x8174[9]](function(_0x79f2x8){console[_0x8174[8]](_0x79f2x8);return handleError(_0x79f2x7,_0x79f2x8)})};exports[_0x8174[16]]= function(_0x79f2x6,_0x79f2x7){var _0x79f2xc=[];var _0x79f2xd;if(_0x79f2x6[_0x8174[15]][_0x8174[32]]){if(_[_0x8174[33]](_0x79f2x6[_0x8174[15]][_0x8174[32]])){_0x79f2x6[_0x8174[15]][_0x8174[32]][_0x8174[40]](function(_0x79f2xe){_0x79f2xd= JSON[_0x8174[34]](_0x79f2xe);if(_0x79f2xd[_0x8174[35]]&& _0x79f2xd[_0x8174[36]]){_0x79f2xc[_0x8174[39]](_0x79f2xd[_0x8174[35]]+ _0x8174[37]+ _0x79f2xd[_0x8174[36]]+ _0x8174[38])}})}else {if(_[_0x8174[41]](_0x79f2x6[_0x8174[15]][_0x8174[32]])){_0x79f2xd= JSON[_0x8174[34]](_0x79f2x6[_0x8174[15]][_0x8174[32]]);if(_0x79f2xd[_0x8174[35]]&& _0x79f2xd[_0x8174[36]]){_0x79f2xc[_0x8174[39]](_0x79f2xd[_0x8174[35]]+ _0x8174[37]+ _0x79f2xd[_0x8174[36]]+ _0x8174[38])}}}};var _0x79f2xf=_0x79f2xc[_0x8174[42]]?_0x79f2xc[_0x8174[44]](_0x8174[43]):_0x8174[45];sequelize[_0x8174[15]](util[_0x8174[17]](_0x8174[46],_0x79f2xf,_0x8174[47]+ _0x79f2x6[_0x8174[15]][_0x8174[16]],decodeURIComponent(_0x79f2x6[_0x8174[15]][_0x8174[18]])),{type:sequelize[_0x8174[27]][_0x8174[26]]})[_0x8174[12]](function(_0x79f2x9){return _0x79f2x7[_0x8174[11]](200)[_0x8174[10]](_0x79f2x9)})[_0x8174[9]](function(_0x79f2x8){return handleError(_0x79f2x7,_0x79f2x8)})};exports[_0x8174[48]]= function(_0x79f2x6,_0x79f2x7){return Promise[_0x8174[31]]([])[_0x8174[12]](function(){return _0x79f2x6[_0x8174[15]][_0x8174[16]]})[_0x8174[12]](reportBuildUtils[_0x8174[30]](_0x79f2x6[_0x8174[29]]))[_0x8174[12]](function(_0x79f2xa){var _0x79f2xc=[];var _0x79f2xd;if(_0x79f2x6[_0x8174[15]][_0x8174[32]]){if(_[_0x8174[33]](_0x79f2x6[_0x8174[15]][_0x8174[32]])){_0x79f2x6[_0x8174[15]][_0x8174[32]][_0x8174[40]](function(_0x79f2xe){_0x79f2xd= JSON[_0x8174[34]](_0x79f2xe);if(_0x79f2xd[_0x8174[35]]&& _0x79f2xd[_0x8174[36]]){_0x79f2xc[_0x8174[39]](_0x79f2xd[_0x8174[35]]+ _0x8174[37]+ _0x79f2xd[_0x8174[36]]+ _0x8174[38])}})}else {if(_[_0x8174[41]](_0x79f2x6[_0x8174[15]][_0x8174[32]])){_0x79f2xd= JSON[_0x8174[34]](_0x79f2x6[_0x8174[15]][_0x8174[32]]);if(_0x79f2xd[_0x8174[35]]&& _0x79f2xd[_0x8174[36]]){_0x79f2xc[_0x8174[39]](_0x79f2xd[_0x8174[35]]+ _0x8174[37]+ _0x79f2xd[_0x8174[36]]+ _0x8174[38])}}}};var _0x79f2xf=_0x79f2xc[_0x8174[42]]?_0x79f2xc[_0x8174[44]](_0x8174[43]):_0x8174[45];var _0x79f2x10=_0x8174[49];if(_0x79f2x6[_0x8174[15]][_0x8174[18]]&& _0x79f2x6[_0x8174[15]][_0x8174[18]]!== _0x8174[50]&& _0x79f2x6[_0x8174[15]][_0x8174[18]]!== _0x8174[19]){_0x79f2x10= util[_0x8174[17]](_0x8174[20],decodeURIComponent(_0x79f2x6[_0x8174[15]][_0x8174[18]]))};if(!_0x79f2xa|| _0x79f2xa!== _0x8174[21]){if(_0x79f2xa){_0x79f2x10+= _0x79f2x10?_0x8174[22]+ _0x79f2xa:_0x8174[23]+ _0x79f2xa};var _0x79f2xb=util[_0x8174[17]](_0x8174[51],_0x79f2xf,_0x79f2x6[_0x8174[15]][_0x8174[16]],_0x79f2x10);console[_0x8174[8]](_0x8174[24]);console[_0x8174[8]](_0x79f2xb);console[_0x8174[8]](_0x8174[25]);return sequelize[_0x8174[15]](_0x79f2xb,{type:sequelize[_0x8174[27]][_0x8174[26]]})}else {console[_0x8174[8]](_0x8174[24]);console[_0x8174[8]](_0x8174[28]);console[_0x8174[8]](_0x8174[25]);return []}})[_0x8174[12]](function(_0x79f2x9){return _0x79f2x7[_0x8174[11]](200)[_0x8174[10]]({result:_0x79f2x9})})[_0x8174[9]](function(_0x79f2x8){return handleError(_0x79f2x7,_0x79f2x8)})};function handleError(_0x79f2x7,_0x79f2x8){return _0x79f2x7[_0x8174[11]](500)[_0x8174[10]](_0x79f2x8)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var sequelize = require('../../models').sequelize; +var reportBuildUtils = require('../../utils/report_build'); +var Promise = require('bluebird'); + +// var ReportAgent = require('../../models').ReportAgent; +// var ReportCall = require('../../models').ReportCall; +// var ReportDial = require('../../models').ReportDial; +// var ReportMember = require('../../models').ReportMember; +// var ReportQueue = require('../../models').ReportQueue; + + + +exports.counter = function(req, res) { + return Promise + .all([]) + .then(function() { + return req.query.table; + }) + .then(reportBuildUtils.buildFilter(req.user)) + .then(function(filter) { + var query = util.format("SELECT %s FROM %s", req.query.select, req.query.table); + if (req.query.condition && req.query.condition !== 'null') { + query += util.format(" WHERE %s", decodeURIComponent(req.query.condition)) + } + if (!filter || filter !== 'empty') { + if (filter) { + query += req.query.condition ? ' AND ' + filter : ' WHERE ' + filter; + } + console.log(' ==== RESULTING QUERY ===='); + console.log(query); + console.log(' ========================='); + return sequelize.query(query, { + type: sequelize.QueryTypes.SELECT + }); + } else { + console.log(' ==== RESULTING QUERY ===='); + console.log('NO SUFFICIENT PERMISSIONS'); + console.log(' ========================='); + return []; + } + }) + .then(function(result) { + return res.status(200).send({ + result: result + }); + }) + .catch(function(err) { + console.log(err); + return handleError(res, err); + }); +}; + +exports.table = function(req, res) { + var columns = []; + var elem; + if (req.query.fields) { + if (_.isArray(req.query.fields)) { + req.query.fields.forEach(function(element) { + elem = JSON.parse(element); + if (elem.column && elem.alias) { + columns.push(elem.column + ' AS "' + elem.alias + '"'); + } + }); + } else if (_.isString(req.query.fields)) { + elem = JSON.parse(req.query.fields); + if (elem.column && elem.alias) { + columns.push(elem.column + ' AS "' + elem.alias + '"'); + } + } + } + var select = columns.length ? columns.join(',') : '*'; + sequelize.query(util.format("SELECT %s FROM %s WHERE %s", select, 'report' + req.query.table, decodeURIComponent(req.query.condition)), { + type: sequelize.QueryTypes.SELECT + }) + .then(function(result) { + return res.status(200).send(result); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.piechart = function(req, res) { + return Promise + .all([]) + .then(function() { + return req.query.table; + }) + .then(reportBuildUtils.buildFilter(req.user)) + .then(function(filter) { + var columns = []; + var elem; + if (req.query.fields) { + if (_.isArray(req.query.fields)) { + req.query.fields.forEach(function(element) { + elem = JSON.parse(element); + if (elem.column && elem.alias) { + columns.push(elem.column + ' AS "' + elem.alias + '"'); + } + }); + } else if (_.isString(req.query.fields)) { + elem = JSON.parse(req.query.fields); + if (elem.column && elem.alias) { + columns.push(elem.column + ' AS "' + elem.alias + '"'); + } + } + } + var select = columns.length ? columns.join(',') : '*'; + var where = ''; + if (req.query.condition && req.query.condition !== 'undefined' && req.query.condition !== 'null') { + where = util.format(' WHERE %s', decodeURIComponent(req.query.condition)); + } + if (!filter || filter !== 'empty') { + if (filter) { + where += where ? ' AND ' + filter : ' WHERE ' + filter; + } + var query = util.format("SELECT %s FROM %s%s", select, req.query.table, where); + console.log(' ==== RESULTING QUERY ===='); + console.log(query); + console.log(' ========================='); + return sequelize.query(query, { + type: sequelize.QueryTypes.SELECT + }); + } else { + console.log(' ==== RESULTING QUERY ===='); + console.log('NO SUFFICIENT PERMISSIONS'); + console.log(' ========================='); + return []; + } + }) + .then(function(result) { + return res.status(200).send({ + result: result + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/xchatty/index.js b/server/api/xchatty/index.js index bd3d9c3..d408579 100644 --- a/server/api/xchatty/index.js +++ b/server/api/xchatty/index.js @@ -1 +1,28 @@ -var _0x2c24=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x78\x63\x68\x61\x74\x74\x79\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F\x6A\x71\x75\x65\x72\x79","\x67\x65\x74\x4A\x71\x75\x65\x72\x79\x4C\x69\x62\x72\x61\x72\x79","\x67\x65\x74","\x2F\x61\x73\x73\x65\x74\x73","\x67\x65\x74\x41\x73\x73\x65\x74\x73","\x2F\x73\x75\x62\x6D\x69\x74","\x73\x75\x62\x6D\x69\x74\x45\x6E\x71\x75\x69\x72\x79","\x2F\x72\x61\x74\x69\x6E\x67","\x73\x65\x74\x52\x61\x74\x69\x6E\x67","\x2F\x3A\x69\x64","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x68\x61\x73\x43\x68\x61\x74","\x67\x65\x74\x4A\x73\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x2F\x3A\x69\x64\x2F\x61\x62\x61\x6E\x64\x6F\x6E","\x61\x62\x61\x6E\x64\x6F\x6E\x43\x75\x73\x74\x6F\x6D\x65\x72","\x2F\x3A\x69\x64\x2F\x68\x74\x6D\x6C","\x67\x65\x74\x48\x74\x6D\x6C\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x2F\x3A\x69\x64\x2F\x70\x72\x6F\x61\x63\x74\x69\x76\x65","\x67\x65\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x73\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x2F\x3A\x69\x64\x2F\x72\x65\x61\x64","\x67\x65\x74\x4D\x65\x73\x73\x61\x67\x65\x73","\x2F\x3A\x69\x64\x2F\x73\x65\x6E\x64","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65","\x2F\x3A\x69\x64\x2F\x73\x69\x67\x6E\x6F\x75\x74","\x73\x69\x67\x6E\x6F\x75\x74\x43\x75\x73\x74\x6F\x6D\x65\x72","\x2F\x3A\x69\x64\x2F\x73\x69\x67\x6E\x75\x70","\x73\x69\x67\x6E\x75\x70\x43\x75\x73\x74\x6F\x6D\x65\x72","\x2F\x3A\x69\x64\x2F\x73\x74\x61\x74\x75\x73","\x67\x65\x74\x53\x74\x61\x74\x75\x73\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x2F\x3A\x69\x64\x2F\x73\x74\x79\x6C\x65\x73","\x67\x65\x74\x53\x74\x79\x6C\x65\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x2F\x3A\x69\x64\x2F\x74\x72\x61\x6E\x73\x63\x72\x69\x70\x74","\x67\x65\x74\x54\x72\x61\x6E\x73\x63\x72\x69\x70\x74","\x2F\x3A\x69\x64\x2F\x75\x6E\x73\x65\x72\x76\x65\x64","\x75\x6E\x73\x65\x72\x76\x65\x64\x43\x75\x73\x74\x6F\x6D\x65\x72","\x65\x78\x70\x6F\x72\x74\x73"];_0x2c24[0];var express=require(_0x2c24[1]);var controller=require(_0x2c24[2]);var license=require(_0x2c24[3]);var router=express.Router();router[_0x2c24[6]](_0x2c24[4],controller[_0x2c24[5]]);router[_0x2c24[6]](_0x2c24[7],controller[_0x2c24[8]]);router[_0x2c24[6]](_0x2c24[9],controller[_0x2c24[10]]);router[_0x2c24[6]](_0x2c24[11],controller[_0x2c24[12]]);router[_0x2c24[6]](_0x2c24[13],license[_0x2c24[14]](),license[_0x2c24[15]](),controller[_0x2c24[16]]);router[_0x2c24[6]](_0x2c24[17],license[_0x2c24[14]](),license[_0x2c24[15]](),controller[_0x2c24[18]]);router[_0x2c24[6]](_0x2c24[19],license[_0x2c24[14]](),license[_0x2c24[15]](),controller[_0x2c24[20]]);router[_0x2c24[6]](_0x2c24[21],license[_0x2c24[14]](),license[_0x2c24[15]](),controller[_0x2c24[22]]);router[_0x2c24[6]](_0x2c24[23],license[_0x2c24[14]](),license[_0x2c24[15]](),controller[_0x2c24[24]]);router[_0x2c24[6]](_0x2c24[25],license[_0x2c24[14]](),license[_0x2c24[15]](),controller[_0x2c24[26]]);router[_0x2c24[6]](_0x2c24[27],license[_0x2c24[14]](),license[_0x2c24[15]](),controller[_0x2c24[28]]);router[_0x2c24[6]](_0x2c24[29],license[_0x2c24[14]](),license[_0x2c24[15]](),controller[_0x2c24[30]]);router[_0x2c24[6]](_0x2c24[31],license[_0x2c24[14]](),license[_0x2c24[15]](),controller[_0x2c24[32]]);router[_0x2c24[6]](_0x2c24[33],license[_0x2c24[14]](),license[_0x2c24[15]](),controller[_0x2c24[34]]);router[_0x2c24[6]](_0x2c24[35],license[_0x2c24[14]](),license[_0x2c24[15]](),controller[_0x2c24[36]]);router[_0x2c24[6]](_0x2c24[37],license[_0x2c24[14]](),license[_0x2c24[15]](),controller[_0x2c24[38]]);module[_0x2c24[39]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./xchatty.controller'); +var license = require('../../config/license/license.service'); + +var router = express.Router(); + +router.get('/jquery', controller.getJqueryLibrary); +router.get('/assets', controller.getAssets); + +router.get('/submit', controller.submitEnquiry); +router.get('/rating', controller.setRating); + +router.get('/:id', license.isValidDate(), license.hasChat(), controller.getJsByWebsite); +router.get('/:id/abandon', license.isValidDate(), license.hasChat(), controller.abandonCustomer); +router.get('/:id/html', license.isValidDate(), license.hasChat(), controller.getHtmlByWebsite); +router.get('/:id/proactive', license.isValidDate(), license.hasChat(), controller.getProactiveActionsByWebsite); +router.get('/:id/read', license.isValidDate(), license.hasChat(), controller.getMessages); +router.get('/:id/send', license.isValidDate(), license.hasChat(), controller.sendMessage); +router.get('/:id/signout', license.isValidDate(), license.hasChat(), controller.signoutCustomer); +router.get('/:id/signup', license.isValidDate(), license.hasChat(), controller.signupCustomer); +router.get('/:id/status', license.isValidDate(), license.hasChat(), controller.getStatusByWebsite); +router.get('/:id/styles', license.isValidDate(), license.hasChat(), controller.getStyleByWebsite); +router.get('/:id/transcript', license.isValidDate(), license.hasChat(), controller.getTranscript); +router.get('/:id/unserved', license.isValidDate(), license.hasChat(), controller.unservedCustomer); + +module.exports = router; diff --git a/server/api/xchatty/xchatty.controller.js b/server/api/xchatty/xchatty.controller.js index f264ee9..3932636 100644 --- a/server/api/xchatty/xchatty.controller.js +++ b/server/api/xchatty/xchatty.controller.js @@ -1 +1,1233 @@ -var _0xfefa=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6A\x73\x6D\x69\x6E","\x6D\x75\x73\x74\x61\x63\x68\x65","\x71\x75\x65\x72\x79\x73\x74\x72\x69\x6E\x67","\x70\x61\x74\x68","\x6D\x64\x35","\x66\x73","\x75\x61\x2D\x70\x61\x72\x73\x65\x72\x2D\x6A\x73","\x61\x63\x63\x65\x70\x74\x2D\x6C\x61\x6E\x67\x75\x61\x67\x65\x2D\x70\x61\x72\x73\x65\x72","\x69\x70\x61\x64\x64\x72\x2E\x6A\x73","\x67\x65\x6F\x69\x70\x2D\x6C\x69\x74\x65","\x74\x6F\x2D\x63\x73\x76","\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x72\x6F\x75\x74\x69\x6E\x67\x2F\x73\x63\x68\x65\x64\x75\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73\x2F\x78\x63\x68\x61\x74\x74\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x44\x45\x4D\x4F\x20\x4C\x49\x43\x45\x4E\x53\x45","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x43\x68\x61\x74\x45\x6E\x71\x75\x69\x72\x79","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x73\x46\x69\x65\x6C\x64","\x43\x68\x61\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x4C\x69\x63\x65\x6E\x73\x65","\x58\x63\x68\x61\x74\x74\x79","\x53\x65\x74\x74\x69\x6E\x67","\x43\x6F\x6E\x74\x61\x63\x74","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x67\x65\x74\x4A\x73\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74","\x6E\x6F\x77","\x73\x65\x74","\x6A\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x72\x65\x6D\x6F\x74\x65","\x73\x74\x72\x69\x70\x54\x72\x61\x69\x6C\x69\x6E\x67\x53\x6C\x61\x73\x68","\x2F\x61\x70\x69\x2F\x78\x63\x68\x61\x74\x74\x79\x2F","\x66\x61\x6C\x73\x65","\x74\x72\x75\x65","\x22\x22","\x6E\x75\x6C\x6C","\x2F\x61\x70\x69\x2F\x78\x63\x68\x61\x74\x74\x79\x2F\x61\x73\x73\x65\x74\x73","\x61\x6E\x69\x6D\x61\x74\x69\x6F\x6E","\x68\x65\x61\x64\x65\x72\x5F\x73\x68\x61\x70\x65","\x68\x65\x61\x64\x65\x72\x5F\x6F\x6E\x6C\x69\x6E\x65","\x6F\x6E\x6C\x69\x6E\x65\x5F\x6D\x65\x73\x73\x61\x67\x65","\x75\x73\x65\x72\x6E\x61\x6D\x65\x5F\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72","\x65\x6D\x61\x69\x6C\x5F\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72","\x73\x74\x61\x72\x74\x5F\x63\x68\x61\x74\x5F\x62\x75\x74\x74\x6F\x6E","\x6F\x66\x66\x6C\x69\x6E\x65\x5F\x6D\x65\x73\x73\x61\x67\x65","\x68\x65\x61\x64\x65\x72\x5F\x6F\x66\x66\x6C\x69\x6E\x65","\x65\x6E\x71\x75\x69\x72\x79\x5F\x6D\x65\x73\x73\x61\x67\x65\x5F\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72","\x65\x6E\x71\x75\x69\x72\x79\x5F\x62\x75\x74\x74\x6F\x6E","\x64\x6F\x77\x6E\x6C\x6F\x61\x64\x5F\x74\x72\x61\x6E\x73\x63\x72\x69\x70\x74","\x72\x61\x74\x69\x6E\x67\x5F\x6D\x65\x73\x73\x61\x67\x65","\x72\x61\x74\x69\x6E\x67\x5F\x73\x65\x6E\x64","\x72\x61\x74\x69\x6E\x67\x5F\x73\x6B\x69\x70","\x61\x67\x65\x6E\x74\x73\x5F\x62\x75\x73\x79","\x6E\x61\x6D\x65\x5F\x74\x69\x74\x6C\x65","\x65\x6D\x61\x69\x6C\x5F\x74\x69\x74\x6C\x65","\x6D\x65\x73\x73\x61\x67\x65\x5F\x74\x69\x74\x6C\x65","\x72\x65\x6E\x64\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x53\x74\x79\x6C\x65\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x74\x65\x78\x74\x2F\x63\x73\x73","\x63\x73\x73","\x63\x6F\x6C\x6F\x72","\x63\x6F\x6C\x6F\x72\x5F\x66\x6F\x63\x75\x73","\x63\x6F\x6C\x6F\x72\x5F\x62\x75\x74\x74\x6F\x6E","\x67\x65\x74\x41\x73\x73\x65\x74\x73","\x75\x70\x6C\x6F\x61\x64\x65\x64","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x71\x75\x65\x72\x79","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x72\x65\x73\x6F\x75\x72\x63\x65","\x6A\x6F\x69\x6E","\x64\x6F\x77\x6E\x6C\x6F\x61\x64","\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73","\x78\x63\x68\x61\x74\x74\x79","\x61\x73\x73\x65\x74\x73","\x67\x65\x74\x4A\x71\x75\x65\x72\x79\x4C\x69\x62\x72\x61\x72\x79","\x6A\x71\x75\x65\x72\x79","\x67\x65\x74\x53\x74\x61\x74\x75\x73","\x73\x65\x73\x73\x69\x6F\x6E","\x69\x73\x5F\x75\x6E\x73\x65\x72\x76\x65\x64","\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x28","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x29","\x76\x69\x73\x69\x74\x6F\x72\x5F\x69\x64","\x75\x6E\x73\x65\x72\x76\x65\x64","\x66\x69\x6E\x64\x4F\x6E\x65","\x72\x6F\x6F\x6D\x5F\x69\x64","\x73\x69\x67\x6E\x65\x64\x5F\x75\x70","\x4F\x50\x45\x4E","","\x6F\x70\x65\x6E\x5F\x73\x74\x61\x74\x65","\x64\x61\x74\x61","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x61\x76\x61\x74\x61\x72","\x6C\x65\x6E\x67\x74\x68","\x61\x67\x65\x6E\x74","\x67\x65\x74\x4D\x65\x73\x73\x61\x67\x65\x73","\x6E\x61\x6D\x65","\x69\x73\x5F\x6E\x65\x77\x5F\x70\x61\x67\x65","\x77\x68\x65\x72\x65","\x6C\x61\x73\x74\x5F\x69\x64","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65","\x6D\x65\x73\x73\x61\x67\x65","\x4D\x65\x73\x73\x61\x67\x65","\x63\x72\x65\x61\x74\x65","\x73\x69\x67\x6E\x6F\x75\x74\x43\x75\x73\x74\x6F\x6D\x65\x72","\x43\x4C\x4F\x53\x45\x44","\x72\x65\x71\x75\x65\x73\x74\x65\x72","\x75\x70\x64\x61\x74\x65","\x73\x69\x67\x6E\x75\x70\x43\x75\x73\x74\x6F\x6D\x65\x72","\x67\x65\x74\x52\x65\x73\x75\x6C\x74","\x75\x73\x65\x72\x2D\x61\x67\x65\x6E\x74","\x68\x65\x61\x64\x65\x72\x73","\x73\x65\x74\x55\x41","\x61\x63\x63\x65\x70\x74\x2D\x6C\x61\x6E\x67\x75\x61\x67\x65","\x70\x61\x72\x73\x65","\x78\x2D\x66\x6F\x72\x77\x61\x72\x64\x65\x64\x2D\x66\x6F\x72","\x72\x65\x6D\x6F\x74\x65\x41\x64\x64\x72\x65\x73\x73","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x69\x70","\x44\x69\x73\x63\x75\x73\x73\x69\x6F\x6E","\x72\x65\x66\x65\x72\x65\x72","\x77\x65\x62\x63\x68\x61\x74","\x62\x72\x6F\x77\x73\x65\x72","\x20","\x76\x65\x72\x73\x69\x6F\x6E","\x65\x6E\x67\x69\x6E\x65","\x6F\x73","\x6D\x6F\x64\x65\x6C","\x64\x65\x76\x69\x63\x65","\x76\x65\x6E\x64\x6F\x72","\x74\x79\x70\x65","\x63\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x49\x64","\x64\x61\x74\x61\x31","\x6C\x61\x62\x65\x6C\x44\x61\x74\x61\x31","\x69\x73\x41\x72\x72\x61\x79","\x2C","\x64\x61\x74\x61\x32","\x6C\x61\x62\x65\x6C\x44\x61\x74\x61\x32","\x64\x61\x74\x61\x33","\x6C\x61\x62\x65\x6C\x44\x61\x74\x61\x33","\x63\x68\x61\x74","\x25\x73\x2E\x25\x73","\x75\x6E\x69\x78","\x66\x6F\x72\x6D\x61\x74","\x61\x64\x64\x72\x65\x73\x73","\x69\x6E\x69\x74","\x62\x61\x73\x65\x36\x34","\x65\x78\x74\x65\x72\x6E\x61\x6C","\x4C\x69\x73\x74\x49\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x75\x6E\x73\x65\x72\x76\x65\x64\x43\x75\x73\x74\x6F\x6D\x65\x72","\x73\x75\x62\x6D\x69\x74\x45\x6E\x71\x75\x69\x72\x79","\x45\x6E\x71\x75\x69\x72\x79","\x65\x6E\x71\x75\x69\x72\x79","\x77\x65\x62\x73\x69\x74\x65\x49\x64","\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x31","\x6C\x61\x62\x65\x6C\x4F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x31","\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x32","\x6C\x61\x62\x65\x6C\x4F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x32","\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x33","\x6C\x61\x62\x65\x6C\x4F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x33","\x72\x6F\x6C\x6C\x62\x61\x63\x6B","\x63\x6F\x6D\x6D\x69\x74","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x67\x65\x74\x54\x72\x61\x6E\x73\x63\x72\x69\x70\x74","\x55\x73\x65\x72\x49\x64","\x72\x65\x70\x6C\x61\x63\x65","\x62\x6F\x64\x79","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x74\x65\x78\x74\x2F\x63\x73\x76","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79","\x67\x65\x74\x48\x74\x6D\x6C\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x74\x65\x6D\x70\x6C\x61\x74\x65","\x6C\x69\x63\x65\x6E\x73\x65","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x64\x65\x63\x72\x79\x70\x74","\x65\x6E\x71\x75\x69\x72\x79\x5F\x65\x6E\x61\x62\x6C\x65","\x4F\x6E\x6C\x69\x6E\x65","\x63\x75\x73\x74\x6F\x6D","\x64\x65\x66\x61\x75\x6C\x74\x4C\x6F\x67\x6F","\x6C\x6F\x67\x6F","\x69\x6D\x61\x67\x65\x73\x2F","\x26\x75\x70\x6C\x6F\x61\x64\x65\x64","\x69\x6D\x61\x67\x65\x73\x2F\x6D\x6F\x74\x69\x6F\x6E\x4C\x6F\x67\x6F\x2E\x70\x6E\x67","\x64\x65\x66\x61\x75\x6C\x74\x57\x68\x69\x74\x65\x4C\x61\x62\x65\x6C","\x77\x68\x69\x74\x65\x4C\x61\x62\x65\x6C","\x3C\x61\x20\x68\x72\x65\x66\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x78\x63\x61\x6C\x6C\x79\x6D\x6F\x74\x69\x6F\x6E\x2E\x63\x6F\x6D\x2F\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x5F\x62\x6C\x61\x6E\x6B\x22\x3E\x50\x6F\x77\x65\x72\x65\x64\x20\x62\x79\x20\x78\x43\x41\x4C\x4C\x59\x3C\x2F\x61\x3E","\x3C\x64\x69\x76\x20\x63\x6C\x61\x73\x73\x3D\x22\x78\x63\x5F\x64\x69\x76\x5F\x67\x72\x6F\x75\x70\x22\x3E","\x3C\x6C\x61\x62\x65\x6C\x20\x63\x6C\x61\x73\x73\x3D\x22\x78\x63\x5F\x6C\x61\x62\x65\x6C\x22\x20\x66\x6F\x72\x3D\x22\x25\x64\x22\x3E\x25\x73\x20\x25\x73\x3C\x2F\x6C\x61\x62\x65\x6C\x3E","\x6C\x61\x62\x65\x6C","\x72\x65\x71\x75\x69\x72\x65\x64","\x2A","\x3C\x69\x6E\x70\x75\x74\x20\x64\x61\x74\x61\x2D\x6C\x61\x62\x65\x6C\x3D\x22\x25\x73\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x20\x69\x64\x3D\x22\x25\x64\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x44\x69\x73\x63\x75\x73\x73\x69\x6F\x6E\x5D\x5B\x64\x61\x74\x61\x25\x64\x5D\x22\x20\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72\x3D\x22\x25\x73\x22\x20\x25\x73\x2F\x3E","\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72","\x3C\x2F\x64\x69\x76\x3E","\x74\x65\x78\x74\x49\x6E\x70\x75\x74","\x3C\x74\x65\x78\x74\x61\x72\x65\x61\x20\x69\x64\x3D\x22\x25\x64\x22\x20\x64\x61\x74\x61\x2D\x6C\x61\x62\x65\x6C\x3D\x22\x25\x73\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x44\x69\x73\x63\x75\x73\x73\x69\x6F\x6E\x5D\x5B\x64\x61\x74\x61\x25\x64\x5D\x22\x20\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72\x3D\x22\x25\x73\x22\x20\x25\x73\x3E\x3C\x2F\x74\x65\x78\x74\x61\x72\x65\x61\x3E","\x74\x65\x78\x74\x41\x72\x65\x61","\x3C\x6C\x61\x62\x65\x6C\x20\x63\x6C\x61\x73\x73\x3D\x22\x78\x63\x5F\x6C\x61\x62\x65\x6C\x22\x3E\x25\x73\x3C\x2F\x6C\x61\x62\x65\x6C\x3E","\x6F\x70\x74\x69\x6F\x6E\x73","\x3C\x6C\x61\x62\x65\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x64\x69\x73\x70\x6C\x61\x79\x3A\x62\x6C\x6F\x63\x6B\x3B\x22\x3E","\x3C\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x22\x63\x68\x65\x63\x6B\x62\x6F\x78\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x44\x69\x73\x63\x75\x73\x73\x69\x6F\x6E\x5D\x5B\x64\x61\x74\x61\x25\x64\x5D\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x25\x73\x22\x3E\x20\x25\x73\x3C\x62\x72\x3E","\x3C\x2F\x6C\x61\x62\x65\x6C\x3E","\x63\x68\x65\x63\x6B\x62\x6F\x78","\x3C\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x22\x72\x61\x64\x69\x6F\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x44\x69\x73\x63\x75\x73\x73\x69\x6F\x6E\x5D\x5B\x64\x61\x74\x61\x25\x64\x5D\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x25\x73\x22\x3E\x20\x25\x73\x3C\x62\x72\x3E","\x72\x61\x64\x69\x6F","\x3C\x6C\x61\x62\x65\x6C\x20\x63\x6C\x61\x73\x73\x3D\x22\x78\x63\x5F\x6C\x61\x62\x65\x6C\x22\x20\x66\x6F\x72\x3D\x22\x25\x64\x22\x3E\x25\x73\x3C\x2F\x6C\x61\x62\x65\x6C\x3E","\x3C\x73\x65\x6C\x65\x63\x74\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x44\x69\x73\x63\x75\x73\x73\x69\x6F\x6E\x5D\x5B\x64\x61\x74\x61\x25\x64\x5D\x22\x3E","\x3C\x6F\x70\x74\x69\x6F\x6E\x20\x76\x61\x6C\x75\x65\x3D\x22\x25\x73\x22\x3E\x25\x73\x3C\x2F\x6F\x70\x74\x69\x6F\x6E\x3E","\x3C\x2F\x73\x65\x6C\x65\x63\x74\x3E\x3C\x2F\x64\x69\x76\x3E","\x73\x65\x6C\x65\x63\x74","\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74","\x3C\x62\x72\x3E","\x3C\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x22\x68\x69\x64\x64\x65\x6E\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x44\x69\x73\x63\x75\x73\x73\x69\x6F\x6E\x5D\x5B\x6C\x61\x62\x65\x6C\x44\x61\x74\x61\x25\x64\x5D\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x25\x73\x22\x3E","\x4F\x66\x66\x6C\x69\x6E\x65","\x3C\x6C\x61\x62\x65\x6C\x20\x63\x6C\x61\x73\x73\x3D\x22\x78\x63\x5F\x6C\x61\x62\x65\x6C\x22\x20\x66\x6F\x72\x3D\x22\x6F\x66\x66\x6C\x69\x6E\x65\x25\x64\x22\x3E\x25\x73\x20\x25\x73\x3C\x2F\x6C\x61\x62\x65\x6C\x3E","\x3C\x69\x6E\x70\x75\x74\x20\x64\x61\x74\x61\x2D\x6C\x61\x62\x65\x6C\x3D\x22\x25\x73\x22\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x20\x69\x64\x3D\x22\x6F\x66\x66\x6C\x69\x6E\x65\x25\x64\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x45\x6E\x71\x75\x69\x72\x79\x5D\x5B\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x25\x64\x5D\x22\x20\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72\x3D\x22\x25\x73\x22\x20\x25\x73\x2F\x3E","\x3C\x74\x65\x78\x74\x61\x72\x65\x61\x20\x69\x64\x3D\x22\x6F\x66\x66\x6C\x69\x6E\x65\x25\x64\x22\x20\x64\x61\x74\x61\x2D\x6C\x61\x62\x65\x6C\x3D\x22\x25\x73\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x45\x6E\x71\x75\x69\x72\x79\x5D\x5B\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x25\x64\x5D\x22\x20\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72\x3D\x22\x25\x73\x22\x20\x25\x73\x3E\x3C\x2F\x74\x65\x78\x74\x61\x72\x65\x61\x3E","\x3C\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x22\x63\x68\x65\x63\x6B\x62\x6F\x78\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x45\x6E\x71\x75\x69\x72\x79\x5D\x5B\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x25\x64\x5D\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x25\x73\x22\x3E\x20\x25\x73\x3C\x62\x72\x3E","\x3C\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x22\x72\x61\x64\x69\x6F\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x45\x6E\x71\x75\x69\x72\x79\x5D\x5B\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x25\x64\x5D\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x25\x73\x22\x3E\x20\x25\x73\x3C\x62\x72\x3E","\x3C\x73\x65\x6C\x65\x63\x74\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x45\x6E\x71\x75\x69\x72\x79\x5D\x5B\x6F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x25\x64\x5D\x22\x3E","\x3C\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x22\x68\x69\x64\x64\x65\x6E\x22\x20\x6E\x61\x6D\x65\x3D\x22\x64\x61\x74\x61\x5B\x45\x6E\x71\x75\x69\x72\x79\x5D\x5B\x6C\x61\x62\x65\x6C\x4F\x66\x66\x6C\x69\x6E\x65\x44\x61\x74\x61\x25\x64\x5D\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x25\x73\x22\x3E","\x6A\x73\x6F\x6E\x70","\x67\x65\x74\x50\x72\x6F\x61\x63\x74\x69\x76\x65\x41\x63\x74\x69\x6F\x6E\x73\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x73\x65\x74\x52\x61\x74\x69\x6E\x67","\x72\x61\x74\x69\x6E\x67","\x52\x61\x74\x69\x6E\x67","\x61\x62\x61\x6E\x64\x6F\x6E\x43\x75\x73\x74\x6F\x6D\x65\x72","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x69\x6E\x64","\x67\x65\x74\x53\x74\x61\x74\x75\x73\x42\x79\x57\x65\x62\x73\x69\x74\x65","\x65\x72\x72","\x6C\x6F\x67","\x63\x6F\x75\x6E\x74","\x61\x70\x70","\x71\x75\x65\x75\x65","\x55\x73\x65\x72\x73","\x6D\x61\x70","\x75\x6E\x69\x71","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x67\x65\x74\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x53\x75\x62\x49\x6E\x74\x65\x72\x76\x61\x6C\x73","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x69\x73\x56\x61\x6C\x69\x64\x49\x6E\x74\x65\x72\x76\x61\x6C","\x73\x70\x6C\x69\x74","\x2D","\x74\x5F\x66\x72\x6F\x6D","\x48\x48\x3A\x6D\x6D","\x74\x5F\x74\x6F","\x77\x64\x5F\x66\x72\x6F\x6D","\x77\x64\x5F\x74\x6F","\x6D\x64\x5F\x66\x72\x6F\x6D","\x6D\x64\x5F\x74\x6F","\x6D\x5F\x66\x72\x6F\x6D","\x6D\x5F\x74\x6F"];_0xfefa[0];var _=require(_0xfefa[1]);var jsmin=require(_0xfefa[2])[_0xfefa[2]];var Mustache=require(_0xfefa[3]);var querystring=require(_0xfefa[4]);var path=require(_0xfefa[5]);var md5=require(_0xfefa[6]);var fs=require(_0xfefa[7]);var UAParser=require(_0xfefa[8]);var uaParser= new UAParser();var languageParser=require(_0xfefa[9]);var ipaddr=require(_0xfefa[10]);var geoip=require(_0xfefa[11]);var csv=require(_0xfefa[12]);var util=require(_0xfefa[13]);var moment=require(_0xfefa[14]);var Scheduler=require(_0xfefa[15]);var config=require(_0xfefa[16]);var xchatty_components=require(_0xfefa[17]);var Util=require(_0xfefa[18]);var license=require(_0xfefa[19]);var demoLicense={users:1,agents:1,telephones:0,chat:false,mail:false,fax:false,messaging:false,cm:false,dialer:false,jscripty:false,update:false,custom:false,description:_0xfefa[20]};var sequelize=require(_0xfefa[22])[_0xfefa[21]];var User=require(_0xfefa[22])[_0xfefa[23]];var Agent=require(_0xfefa[22])[_0xfefa[23]];var ChatRoom=require(_0xfefa[22])[_0xfefa[24]];var ChatEnquiry=require(_0xfefa[22])[_0xfefa[25]];var ChatVisitor=require(_0xfefa[22])[_0xfefa[26]];var ChatMessage=require(_0xfefa[22])[_0xfefa[27]];var ChatWebsite=require(_0xfefa[22])[_0xfefa[28]];var ChatWebsitesField=require(_0xfefa[22])[_0xfefa[29]];var ChatProactiveAction=require(_0xfefa[22])[_0xfefa[30]];var ReportChatSession=require(_0xfefa[22])[_0xfefa[31]];var ChatQueue=require(_0xfefa[22])[_0xfefa[32]];var License=require(_0xfefa[22])[_0xfefa[33]];var Xchatty=require(_0xfefa[22])[_0xfefa[34]];var Setting=require(_0xfefa[22])[_0xfefa[35]];const Contact=require(_0xfefa[22])[_0xfefa[36]];var Interval=require(_0xfefa[22])[_0xfefa[37]];const weekDaysCollection={mon:1,tue:2,wed:3,thu:4,fri:5,sat:6,sun:7};const monthsCollection={jan:1,feb:2,mar:3,apr:4,may:5,jun:6,jul:7,aug:8,sep:9,oct:10,nov:11,dec:12};var id=1;exports[_0xfefa[38]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){return Xchatty[_0xfefa[43]]()[_0xfefa[42]](function(_0x7369x2e){return _0x7369x2b[_0xfefa[41]](200)[_0xfefa[40]](_0x7369x2e)})[_0xfefa[39]](function(_0x7369x2d){return _0x7369x2c(_0x7369x2d)})};exports[_0xfefa[44]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){ChatWebsite[_0xfefa[79]](_0x7369x2a[_0xfefa[50]][_0xfefa[49]])[_0xfefa[42]](function(_0x7369x2f){_0x7369x2b[_0xfefa[47]]({"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65":_0xfefa[45],"\x78\x2D\x74\x69\x6D\x65\x73\x74\x61\x6D\x70":Date[_0xfefa[46]](),"\x78\x2D\x73\x65\x6E\x74":true});var _0x7369x30=xchatty_components[_0xfefa[48]];var _0x7369x31={websiteId:_0x7369x2a[_0xfefa[50]][_0xfefa[49]],rootPath:Util[_0xfefa[52]](_0x7369x2f[_0xfefa[51]])+ _0xfefa[53],signedUp:_0xfefa[54],windowFocused:_0xfefa[54],isNewPage:_0xfefa[55],processingSignUp:_0xfefa[54],processingEnquiry:_0xfefa[54],processingSend:_0xfefa[54],processingRating:_0xfefa[54],visitorFullname:_0xfefa[56],visitorAvatar:_0xfefa[56],timerReadMessages:_0xfefa[57],timerCheckStatus:_0xfefa[57],isOnline:_0xfefa[54],decayHistory:0,defaultTimeout:5000,isInitialStatusCheck:_0xfefa[55],muteNotificationSoundOnce:_0xfefa[54],assetBase:Util[_0xfefa[52]](_0x7369x2f[_0xfefa[51]])+ _0xfefa[58],hasSessionSaf:_0xfefa[54],restoreOpenState:_0xfefa[54],animateHover:_0x7369x2f[_0xfefa[59]],hideEmail:_0xfefa[54],hideOffline:_0xfefa[54],headerShape:_0x7369x2f[_0xfefa[60]],HeaderOnline:_0x7369x2f[_0xfefa[61]],OnlineMessage:_0x7369x2f[_0xfefa[62]],UsernamePlaceholder:_0x7369x2f[_0xfefa[63]],EmailPlaceholder:_0x7369x2f[_0xfefa[64]],StartChatButtonText:_0x7369x2f[_0xfefa[65]],OfflineMessage:_0x7369x2f[_0xfefa[66]],HeaderOffline:_0x7369x2f[_0xfefa[67]],EnquiryMessagePlaceholder:_0x7369x2f[_0xfefa[68]],EnquiryButtonText:_0x7369x2f[_0xfefa[69]],downloadTranscript:_0x7369x2f[_0xfefa[70]],RatingMessage:_0x7369x2f[_0xfefa[71]],RatingSend:_0x7369x2f[_0xfefa[72]],RatingSkip:_0x7369x2f[_0xfefa[73]],MessageAgentsBusy:_0x7369x2f[_0xfefa[74]],NameTitle:_0x7369x2f[_0xfefa[75]],EmailTitle:_0x7369x2f[_0xfefa[76]],MessageTitle:_0x7369x2f[_0xfefa[77]]};_0x7369x30= Mustache[_0xfefa[78]](_0x7369x30,_0x7369x31);_0x7369x2b[_0xfefa[40]](_0x7369x30)})[_0xfefa[39]](function(_0x7369x2d){_0x7369x2c(_0x7369x2d)})};exports[_0xfefa[80]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){ChatWebsite[_0xfefa[79]](_0x7369x2a[_0xfefa[50]][_0xfefa[49]])[_0xfefa[42]](function(_0x7369x2f){_0x7369x2b[_0xfefa[47]]({"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65":_0xfefa[81],"\x78\x2D\x74\x69\x6D\x65\x73\x74\x61\x6D\x70":Date[_0xfefa[46]](),"\x78\x2D\x73\x65\x6E\x74":true});var _0x7369x32=xchatty_components[_0xfefa[82]];var _0x7369x33={assetBase:Util[_0xfefa[52]](_0x7369x2f[_0xfefa[51]])+ _0xfefa[58],color:_0x7369x2f[_0xfefa[83]],colorFocus:_0x7369x2f[_0xfefa[84]],colorButton:_0x7369x2f[_0xfefa[85]]};_0x7369x32= Mustache[_0xfefa[78]](_0x7369x32,_0x7369x33);_0x7369x2b[_0xfefa[40]](_0x7369x32)})[_0xfefa[39]](function(_0x7369x2d){_0x7369x2c(_0x7369x2d)})};exports[_0xfefa[86]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){if(_0x7369x2a[_0xfefa[89]][_0xfefa[88]](_0xfefa[87])){_0x7369x2b[_0xfefa[95]](path[_0xfefa[94]](config[_0xfefa[90]],_0xfefa[91],_0xfefa[92],_0x7369x2a[_0xfefa[89]][_0xfefa[93]]))}else {_0x7369x2b[_0xfefa[95]](path[_0xfefa[94]](config[_0xfefa[90]],_0xfefa[91],_0xfefa[96],_0xfefa[97],_0xfefa[98],_0x7369x2a[_0xfefa[89]][_0xfefa[93]]))}};exports[_0xfefa[99]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){_0x7369x2b[_0xfefa[47]]({"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65":_0xfefa[45],"\x78\x2D\x74\x69\x6D\x65\x73\x74\x61\x6D\x70":Date[_0xfefa[46]](),"\x78\x2D\x73\x65\x6E\x74":true});var _0x7369x34=xchatty_components[_0xfefa[100]];_0x7369x2b[_0xfefa[40]](_0x7369x34)};exports[_0xfefa[101]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){if(!_0x7369x2a[_0xfefa[102]][_0xfefa[97]]){_0x7369x2a[_0xfefa[102]][_0xfefa[97]]= {}};var _0x7369x35={};return Agent[_0xfefa[43]]({where:{online:true,role:_0xfefa[121]}})[_0xfefa[42]](function(_0x7369x38){if(_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[115]]){_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[115]]= _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[115]]=== _0xfefa[55]?true:false};_0x7369x35= {success:true,has_session_saf:null,signed_up:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[111]]?true:false,fullname:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[117]]?_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[117]]:_0xfefa[114],email:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[118]]?_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[118]]:_0xfefa[114],avatar:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[119]]?_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[119]]:_0xfefa[114],open_state:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[115]]|| _0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[111]]?true:false,online:_0x7369x38[_0xfefa[120]]?true:false,is_unserved:false,room_id:0};return})[_0xfefa[42]](function(){if(_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[108]]){return ChatRoom[_0xfefa[110]]({where:{ChatVisitorId:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[108]],status:_0xfefa[113],token:{$ne:_0xfefa[114]}}})};return})[_0xfefa[42]](function(_0x7369x37){if(_0x7369x37){_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[111]]= _0x7369x37[_0xfefa[49]];_0x7369x35[_0xfefa[111]]= _0x7369x37[_0xfefa[49]];_0x7369x35[_0xfefa[112]]= true}else {_0x7369x35[_0xfefa[112]]= false};return})[_0xfefa[42]](function(){if(_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[108]]){return ChatVisitor[_0xfefa[110]]({where:{id:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[108]],status:_0xfefa[109]}})};return})[_0xfefa[42]](function(_0x7369x36){if(_0x7369x36){_0x7369x35[_0xfefa[103]]= true};return _0x7369x2b[_0xfefa[40]](_0x7369x2a[_0xfefa[89]][_0xfefa[104]]+ _0xfefa[105]+ JSON[_0xfefa[106]](_0x7369x35)+ _0xfefa[107])})[_0xfefa[39]](function(_0x7369x2d){return _0x7369x2c(_0x7369x2d)})};exports[_0xfefa[122]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){var _0x7369x39=_0x7369x2a[_0xfefa[50]][_0xfefa[49]];var _0x7369x3a={where:{ChatRoomId:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[111]]},include:[{model:User,attributes:[_0xfefa[49],_0xfefa[123],_0xfefa[117],_0xfefa[118]]},{model:ChatVisitor,attributes:[_0xfefa[49],_0xfefa[117],_0xfefa[118]]}]};if(_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[124]]=== _0xfefa[54]){_0x7369x3a[_0xfefa[125]][_0xfefa[49]]= {$gt:_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[126]]}};ChatMessage[_0xfefa[43]](_0x7369x3a)[_0xfefa[42]](function(_0x7369x3b){var _0x7369x3c={success:true,messages:_0x7369x3b,composing:false,composing_fullname:null};_0x7369x2b[_0xfefa[40]](_0x7369x2a[_0xfefa[89]][_0xfefa[104]]+ _0xfefa[105]+ JSON[_0xfefa[106]](_0x7369x3c)+ _0xfefa[107])})[_0xfefa[39]](function(_0x7369x2d){_0x7369x2c(_0x7369x2d)})};exports[_0xfefa[127]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){var _0x7369x39=_0x7369x2a[_0xfefa[50]][_0xfefa[49]];var _0x7369x3a={where:{ChatRoomId:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[111]]},include:[{model:User,attributes:[_0xfefa[49],_0xfefa[123],_0xfefa[117],_0xfefa[118]]},{model:ChatVisitor,attributes:[_0xfefa[49],_0xfefa[117],_0xfefa[118]]}]};if(_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[124]]=== _0xfefa[54]){_0x7369x3a[_0xfefa[125]][_0xfefa[49]]= {$gt:_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[126]]}};ChatMessage[_0xfefa[130]]({body:_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[129]][_0xfefa[128]],ChatRoomId:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[111]],ChatVisitorId:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[108]]})[_0xfefa[42]](function(_0x7369x3d){ChatMessage[_0xfefa[43]](_0x7369x3a)[_0xfefa[42]](function(_0x7369x3b){var _0x7369x3c={errors:[],success:true,data:_0x7369x3d,messages:_0x7369x3b};_0x7369x2b[_0xfefa[40]](_0x7369x2a[_0xfefa[89]][_0xfefa[104]]+ _0xfefa[105]+ JSON[_0xfefa[106]](_0x7369x3c)+ _0xfefa[107])})[_0xfefa[39]](function(_0x7369x2d){_0x7369x2c(_0x7369x2d)})})[_0xfefa[39]](function(_0x7369x2d){_0x7369x2c(_0x7369x2d)})};exports[_0xfefa[131]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){var _0x7369x39=_0x7369x2a[_0xfefa[50]][_0xfefa[49]];return ChatRoom[_0xfefa[79]](_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[111]])[_0xfefa[42]](function(_0x7369x37){return _0x7369x37[_0xfefa[134]]({status:_0xfefa[132],completeReason:_0xfefa[133]})})[_0xfefa[42]](function(){var _0x7369x3c={success:true,errors:[]};_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39]= {};_0x7369x2b[_0xfefa[40]](_0x7369x2a[_0xfefa[89]][_0xfefa[104]]+ _0xfefa[105]+ JSON[_0xfefa[106]](_0x7369x3c)+ _0xfefa[107])})[_0xfefa[39]](function(_0x7369x2d){_0x7369x2c(_0x7369x2d)})};exports[_0xfefa[135]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){var _0x7369x39=_0x7369x2a[_0xfefa[50]][_0xfefa[49]];var _0x7369x3e=uaParser[_0xfefa[139]](_0x7369x2a[_0xfefa[138]][_0xfefa[137]])[_0xfefa[136]]();var _0x7369x3f=languageParser[_0xfefa[141]](_0x7369x2a[_0xfefa[138]][_0xfefa[140]]);var _0x7369x40=_0x7369x2a[_0xfefa[138]][_0xfefa[142]]?_0x7369x2a[_0xfefa[138]][_0xfefa[142]]:_0x7369x2a[_0xfefa[144]][_0xfefa[143]]|| _0x7369x2a[_0xfefa[145]];var _0x7369x41={fullname:_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[146]][_0xfefa[117]],email:_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[146]][_0xfefa[118]],remote_address:_0x7369x40,user_agent:_0x7369x2a[_0xfefa[138]][_0xfefa[137]],visitor_language:_0x7369x2a[_0xfefa[138]][_0xfefa[140]],referer:_0x7369x2a[_0xfefa[138]][_0xfefa[147]],origin:_0xfefa[148],browser:_0x7369x3e[_0xfefa[149]][_0xfefa[123]]+ _0xfefa[150]+ _0x7369x3e[_0xfefa[149]][_0xfefa[151]],engine:_0x7369x3e[_0xfefa[152]][_0xfefa[123]]+ _0xfefa[150]+ _0x7369x3e[_0xfefa[152]][_0xfefa[151]],os:_0x7369x3e[_0xfefa[153]][_0xfefa[123]]+ _0xfefa[150]+ _0x7369x3e[_0xfefa[153]][_0xfefa[151]],device:_0x7369x3e[_0xfefa[155]][_0xfefa[154]]?_0x7369x3e[_0xfefa[155]][_0xfefa[154]]+ _0xfefa[150]+ _0x7369x3e[_0xfefa[155]][_0xfefa[156]]+ _0xfefa[150]+ _0x7369x3e[_0xfefa[155]][_0xfefa[157]]:null,ChatWebsiteId:_0x7369x2a[_0xfefa[89]][_0xfefa[158]]};if(_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[146]][_0xfefa[159]]&& _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[146]][_0xfefa[160]]){_0x7369x41[_0xfefa[159]]= _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[146]][_0xfefa[159]];if(_[_0xfefa[161]](_0x7369x41[_0xfefa[159]])){_0x7369x41[_0xfefa[159]]= _[_0xfefa[94]](_0x7369x41[_0xfefa[159]],_0xfefa[162])};_0x7369x41[_0xfefa[160]]= _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[146]][_0xfefa[160]]};if(_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[146]][_0xfefa[163]]&& _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[146]][_0xfefa[164]]){_0x7369x41[_0xfefa[163]]= _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[146]][_0xfefa[163]];if(_[_0xfefa[161]](_0x7369x41[_0xfefa[163]])){_0x7369x41[_0xfefa[163]]= _[_0xfefa[94]](_0x7369x41[_0xfefa[163]],_0xfefa[162])};_0x7369x41[_0xfefa[164]]= _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[146]][_0xfefa[164]]};if(_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[146]][_0xfefa[165]]&& _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[146]][_0xfefa[166]]){_0x7369x41[_0xfefa[165]]= _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[146]][_0xfefa[165]];if(_[_0xfefa[161]](_0x7369x41[_0xfefa[165]])){_0x7369x41[_0xfefa[165]]= _[_0xfefa[94]](_0x7369x41[_0xfefa[165]],_0xfefa[162])};_0x7369x41[_0xfefa[166]]= _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[146]][_0xfefa[166]]};var _0x7369x42,_0x7369x43,_0x7369x44;return ChatVisitor[_0xfefa[130]](_0x7369x41)[_0xfefa[42]](function(_0x7369x47){_0x7369x42= _0x7369x47;return ChatWebsite[_0xfefa[79]](_0x7369x42.ChatWebsiteId)})[_0xfefa[42]](function(_0x7369x46){_0x7369x43= _0x7369x46;if(_0x7369x43[_0xfefa[175]]){return Contact[_0xfefa[176]]({where:{email:_0x7369x42[_0xfefa[118]]},defaults:{email:_0x7369x42[_0xfefa[118]],firstName:_0x7369x42[_0xfefa[117]],ListId:_0x7369x43[_0xfefa[175]]}})}})[_0xfefa[42]](function(){return ChatRoom[_0xfefa[130]]({type:_0xfefa[174],ChatVisitorId:_0x7369x42[_0xfefa[49]],ChatWebsiteId:_0x7369x43[_0xfefa[49]],contact:_0x7369x42[_0xfefa[118]],website:_0x7369x43[_0xfefa[123]]})})[_0xfefa[42]](function(_0x7369x37){_0x7369x44= _0x7369x37;var _0x7369x45= new Scheduler({channel:_0xfefa[167],uniqueid:util[_0xfefa[170]](_0xfefa[168],moment()[_0xfefa[169]](),_0x7369x44[_0xfefa[49]]),roomid:_0x7369x44[_0xfefa[49]],websiteid:_0x7369x43[_0xfefa[49]],websitename:_0x7369x43[_0xfefa[123]],websiteaddress:_0x7369x43[_0xfefa[171]],accountid:_0x7369x43[_0xfefa[49]],accountname:_0x7369x43[_0xfefa[123]],accountaddress:_0x7369x43[_0xfefa[171]],visitorid:_0x7369x42[_0xfefa[49]],visitorname:_0x7369x42[_0xfefa[117]],visitoremail:_0x7369x42[_0xfefa[118]]});_0x7369x45[_0xfefa[172]]();_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[117]]= _0x7369x42[_0xfefa[117]];_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[118]]= _0x7369x42[_0xfefa[118]];_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[119]]= md5(_0x7369x42[_0xfefa[118]]).toString(_0xfefa[173]);_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[108]]= _0x7369x42[_0xfefa[49]];var _0x7369x3c={success:true,errors:[],chatVisitor:{id:_0x7369x42[_0xfefa[49]]}};_0x7369x2b[_0xfefa[40]](_0x7369x2a[_0xfefa[89]][_0xfefa[104]]+ _0xfefa[105]+ JSON[_0xfefa[106]](_0x7369x3c)+ _0xfefa[107])})[_0xfefa[39]](function(_0x7369x2d){_0x7369x2c(_0x7369x2d)})};exports[_0xfefa[177]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){var _0x7369x39=_0x7369x2a[_0xfefa[50]][_0xfefa[49]];return ChatVisitor[_0xfefa[79]](_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[108]])[_0xfefa[42]](function(_0x7369x47){return _0x7369x47[_0xfefa[134]]({status:_0xfefa[109]})})[_0xfefa[42]](function(){var _0x7369x3c={success:true,errors:[]};_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39]= {};_0x7369x2b[_0xfefa[40]](_0x7369x2a[_0xfefa[89]][_0xfefa[104]]+ _0xfefa[105]+ JSON[_0xfefa[106]](_0x7369x3c)+ _0xfefa[107])})[_0xfefa[39]](function(_0x7369x2d){_0x7369x2c(_0x7369x2d)})};exports[_0xfefa[178]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){return sequelize[_0xfefa[190]]()[_0xfefa[42]](function(_0x7369x48){var _0x7369x40=_0x7369x2a[_0xfefa[138]][_0xfefa[142]]?_0x7369x2a[_0xfefa[138]][_0xfefa[142]]:_0x7369x2a[_0xfefa[144]][_0xfefa[143]]|| _0x7369x2a[_0xfefa[145]];var _0x7369x3e=uaParser[_0xfefa[139]](_0x7369x2a[_0xfefa[138]][_0xfefa[137]])[_0xfefa[136]]();var _0x7369x3f=languageParser[_0xfefa[141]](_0x7369x2a[_0xfefa[138]][_0xfefa[140]]);var _0x7369x41={fullname:_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[117]],email:_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[118]],remote_address:_0x7369x40,user_agent:_0x7369x2a[_0xfefa[138]][_0xfefa[137]],visitor_language:_0x7369x2a[_0xfefa[138]][_0xfefa[140]],browser:_0x7369x3e[_0xfefa[149]][_0xfefa[123]]+ _0xfefa[150]+ _0x7369x3e[_0xfefa[149]][_0xfefa[151]],engine:_0x7369x3e[_0xfefa[152]][_0xfefa[123]]+ _0xfefa[150]+ _0x7369x3e[_0xfefa[152]][_0xfefa[151]],os:_0x7369x3e[_0xfefa[153]][_0xfefa[123]]+ _0xfefa[150]+ _0x7369x3e[_0xfefa[153]][_0xfefa[151]],device:_0x7369x3e[_0xfefa[155]][_0xfefa[154]]?_0x7369x3e[_0xfefa[155]][_0xfefa[154]]+ _0xfefa[150]+ _0x7369x3e[_0xfefa[155]][_0xfefa[156]]+ _0xfefa[150]+ _0x7369x3e[_0xfefa[155]][_0xfefa[157]]:null,referer:_0x7369x2a[_0xfefa[138]][_0xfefa[147]],origin:_0xfefa[180],status:_0xfefa[109],ChatWebsiteId:parseInt(_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[181]],10),ChatEnquiry:{username:_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[117]],email:_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[118]],text:_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[128]],ChatWebsiteId:parseInt(_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[181]],10)}};if(_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[182]]&& _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[183]]){_0x7369x41[_0xfefa[182]]= _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[182]];if(_[_0xfefa[161]](_0x7369x41[_0xfefa[182]])){_0x7369x41[_0xfefa[182]]= _[_0xfefa[94]](_0x7369x41[_0xfefa[182]],_0xfefa[162])};_0x7369x41[_0xfefa[183]]= _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[183]]};if(_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[184]]&& _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[185]]){_0x7369x41[_0xfefa[184]]= _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[184]];if(_[_0xfefa[161]](_0x7369x41[_0xfefa[184]])){_0x7369x41[_0xfefa[184]]= _[_0xfefa[94]](_0x7369x41[_0xfefa[184]],_0xfefa[162])};_0x7369x41[_0xfefa[185]]= _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[185]]};if(_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[186]]&& _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[187]]){_0x7369x41[_0xfefa[186]]= _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[186]];if(_[_0xfefa[161]](_0x7369x41[_0xfefa[186]])){_0x7369x41[_0xfefa[186]]= _[_0xfefa[94]](_0x7369x41[_0xfefa[186]],_0xfefa[162])};_0x7369x41[_0xfefa[187]]= _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[179]][_0xfefa[187]]};var _0x7369x42;return ChatVisitor[_0xfefa[130]](_0x7369x41,{transaction:_0x7369x48,include:[{model:ChatEnquiry}]})[_0xfefa[42]](function(_0x7369x47){_0x7369x42= _0x7369x47;return ChatWebsite[_0xfefa[79]](_0x7369x42.ChatWebsiteId)})[_0xfefa[42]](function(_0x7369x46){if(_0x7369x46[_0xfefa[175]]){return Contact[_0xfefa[176]]({where:{email:_0x7369x42[_0xfefa[118]]},defaults:{email:_0x7369x42[_0xfefa[118]],firstName:_0x7369x42[_0xfefa[117]],ListId:_0x7369x46[_0xfefa[175]]}})}})[_0xfefa[42]](function(){_0x7369x48[_0xfefa[189]]();_0x7369x2b[_0xfefa[40]](_0x7369x2a[_0xfefa[89]][_0xfefa[104]]+ _0xfefa[105]+ JSON[_0xfefa[106]]({success:true,errors:[]})+ _0xfefa[107])})[_0xfefa[39]](function(_0x7369x2d){_0x7369x48[_0xfefa[188]]();_0x7369x2c(_0x7369x2d)})})};exports[_0xfefa[191]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){var _0x7369x39=_0x7369x2a[_0xfefa[50]][_0xfefa[49]];if(_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39]&& _0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[108]]&& _0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[111]]){ChatMessage[_0xfefa[43]]({where:{ChatRoomId:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[111]]},include:[{model:Agent,attributes:[_0xfefa[49],_0xfefa[117]]},{model:ChatVisitor,attributes:[_0xfefa[49],_0xfefa[117]]}]})[_0xfefa[42]](function(_0x7369x3b){var _0x7369x49=[];_0x7369x3b[_0xfefa[197]](function(_0x7369x3d){var _0x7369x4a={name:_0x7369x3d[_0xfefa[192]]?_0x7369x3d[_0xfefa[23]][_0xfefa[117]]:_0x7369x3d[_0xfefa[26]][_0xfefa[117]],text:_0x7369x3d[_0xfefa[194]][_0xfefa[193]](/(\r\n|\n|\r)/gm,_0xfefa[150]),date:_0x7369x3d[_0xfefa[195]]};_0x7369x49[_0xfefa[196]](_0x7369x4a)});var _0x7369x4b=csv(_0x7369x49);_0x7369x2b[_0xfefa[157]](_0xfefa[198])[_0xfefa[41]](200)[_0xfefa[40]](_0x7369x4b)})[_0xfefa[39]](function(_0x7369x2d){_0x7369x2c(_0x7369x2d)})}};exports[_0xfefa[199]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){return Xchatty[_0xfefa[79]](_0x7369x2a[_0xfefa[50]][_0xfefa[49]])[_0xfefa[42]](function(_0x7369x4c){if(!_0x7369x4c){return _0x7369x2b[_0xfefa[200]](404)};return _0x7369x2b[_0xfefa[40]](_0x7369x4c)})[_0xfefa[39]](function(_0x7369x2d){return _0x7369x2c(_0x7369x2d)})};exports[_0xfefa[130]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){return Xchatty[_0xfefa[130]](_0x7369x2a[_0xfefa[194]])[_0xfefa[42]](function(_0x7369x4c){return _0x7369x2b[_0xfefa[41]](201)[_0xfefa[40]](_0x7369x4c)})[_0xfefa[39]](function(_0x7369x2d){return _0x7369x2c(_0x7369x2d)})};exports[_0xfefa[134]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){if(_0x7369x2a[_0xfefa[194]][_0xfefa[49]]){delete _0x7369x2a[_0xfefa[194]][_0xfefa[49]]};return Xchatty[_0xfefa[79]](_0x7369x2a[_0xfefa[50]][_0xfefa[49]])[_0xfefa[42]](function(_0x7369x4c){if(!_0x7369x4c){return _0x7369x2b[_0xfefa[200]](404)};var _0x7369x4d=_[_0xfefa[201]](_0x7369x4c,_0x7369x2a[_0xfefa[194]]);_0x7369x4d[_0xfefa[202]]()[_0xfefa[42]](function(){return _0x7369x2b[_0xfefa[41]](200)[_0xfefa[40]](_0x7369x4c)})[_0xfefa[39]](function(_0x7369x2d){return _0x7369x2c(_0x7369x2d)})})[_0xfefa[39]](function(_0x7369x2d){return _0x7369x2c(_0x7369x2d)})};exports[_0xfefa[203]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){return Xchatty[_0xfefa[79]](_0x7369x2a[_0xfefa[50]][_0xfefa[49]])[_0xfefa[42]](function(_0x7369x4c){if(!_0x7369x4c){return _0x7369x2b[_0xfefa[200]](404)};_0x7369x4c[_0xfefa[203]]()[_0xfefa[42]](function(){return _0x7369x2b[_0xfefa[200]](204)})[_0xfefa[39]](function(_0x7369x2d){return _0x7369x2c(_0x7369x2d)})})[_0xfefa[39]](function(_0x7369x2d){return _0x7369x2c(_0x7369x2d)})};exports[_0xfefa[204]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){var _0x7369x2f,_0x7369x4e,_0x7369x4f;var _0x7369x50=xchatty_components[_0xfefa[205]];return ChatWebsite[_0xfefa[79]](_0x7369x2a[_0xfefa[50]][_0xfefa[49]],{include:[{all:true}]})[_0xfefa[42]](function(_0x7369x43){_0x7369x2f= _0x7369x43;return Setting[_0xfefa[79]](1)})[_0xfefa[42]](function(_0x7369x56){_0x7369x4f= _0x7369x56;return License[_0xfefa[79]](1)})[_0xfefa[42]](function(_0x7369x51){if(_0x7369x51){_0x7369x4e= JSON[_0xfefa[141]](license[_0xfefa[208]](_0x7369x51[_0xfefa[207]][_0xfefa[206]],_0x7369x51[_0xfefa[159]]))}else {_0x7369x4e= demoLicense};var _0x7369x52={rootPath:Util[_0xfefa[52]](_0x7369x2f[_0xfefa[51]])+ _0xfefa[53],assetBase:Util[_0xfefa[52]](_0x7369x2f[_0xfefa[51]])+ _0xfefa[58],websiteId:_0x7369x2f[_0xfefa[49]],headerShape:_0x7369x2f[_0xfefa[60]],enquiryEnable:_0x7369x2f[_0xfefa[209]],onlineFields:_0x7369x2f[_0xfefa[210]],logo:function(){if(_0x7369x4e[_0xfefa[211]]&& !_0x7369x2f[_0xfefa[212]]&& _0x7369x2f[_0xfefa[213]]){return _0xfefa[214]+ _0x7369x2f[_0xfefa[213]]+ _0xfefa[215]}else {return _0xfefa[216]}},whiteLabel:function(){if(_0x7369x4e[_0xfefa[211]]&& !_0x7369x2f[_0xfefa[217]]){return _0x7369x2f[_0xfefa[218]]}else {return _0xfefa[219]}},renderedOnlineField:function(){var _0x7369x53=_0xfefa[114];var _0x7369x54=this;switch(this[_0xfefa[244]]){case _0xfefa[228]:_0x7369x53= _0xfefa[220];_0x7369x53+= util[_0xfefa[170]](_0xfefa[221],_0x7369x54[_0xfefa[38]],_0x7369x54[_0xfefa[222]],_0x7369x54[_0xfefa[223]]?_0xfefa[224]:_0xfefa[114]);_0x7369x53+= util[_0xfefa[170]](_0xfefa[225],_0x7369x54[_0xfefa[222]],_0x7369x54[_0xfefa[38]],_0x7369x54[_0xfefa[38]]+ 1,_0x7369x54[_0xfefa[226]],_0x7369x54[_0xfefa[223]]?_0xfefa[223]:_0xfefa[114]);_0x7369x53+= _0xfefa[227];break;case _0xfefa[230]:_0x7369x53= _0xfefa[220];_0x7369x53+= util[_0xfefa[170]](_0xfefa[221],_0x7369x54[_0xfefa[38]],_0x7369x54[_0xfefa[222]],_0x7369x54[_0xfefa[223]]?_0xfefa[224]:_0xfefa[114]);_0x7369x53+= util[_0xfefa[170]](_0xfefa[229],_0x7369x54[_0xfefa[38]],_0x7369x54[_0xfefa[222]],_0x7369x54[_0xfefa[38]]+ 1,_0x7369x54[_0xfefa[226]],_0x7369x54[_0xfefa[223]]?_0xfefa[223]:_0xfefa[114]);_0x7369x53+= _0xfefa[227];break;case _0xfefa[236]:_0x7369x53= _0xfefa[220];_0x7369x53+= util[_0xfefa[170]](_0xfefa[231],_0x7369x54[_0xfefa[222]]);_[_0xfefa[197]](_0x7369x54[_0xfefa[232]],function(_0x7369x55){_0x7369x53+= _0xfefa[233];_0x7369x53+= util[_0xfefa[170]](_0xfefa[234],_0x7369x54[_0xfefa[38]]+ 1,_0x7369x55,_0x7369x55);_0x7369x53+= _0xfefa[235]});_0x7369x53+= _0xfefa[227];break;case _0xfefa[238]:_0x7369x53= _0xfefa[220];_0x7369x53+= util[_0xfefa[170]](_0xfefa[231],_0x7369x54[_0xfefa[222]]);_[_0xfefa[197]](_0x7369x54[_0xfefa[232]],function(_0x7369x55){_0x7369x53+= _0xfefa[233];_0x7369x53+= util[_0xfefa[170]](_0xfefa[237],_0x7369x54[_0xfefa[38]]+ 1,_0x7369x55,_0x7369x55);_0x7369x53+= _0xfefa[235]});_0x7369x53+= _0xfefa[227];break;case _0xfefa[243]:_0x7369x53= _0xfefa[220];_0x7369x53+= util[_0xfefa[170]](_0xfefa[239],_0x7369x54[_0xfefa[38]],_0x7369x54[_0xfefa[222]]);_0x7369x53+= util[_0xfefa[170]](_0xfefa[240],_0x7369x54[_0xfefa[38]]+ 1);_[_0xfefa[197]](_0x7369x54[_0xfefa[232]],function(_0x7369x55){_0x7369x53+= util[_0xfefa[170]](_0xfefa[241],_0x7369x55,_0x7369x55)});_0x7369x53+= _0xfefa[242];break};_0x7369x53+= _0xfefa[245];_0x7369x53+= util[_0xfefa[170]](_0xfefa[246],_0x7369x54[_0xfefa[38]]+ 1,_0x7369x54[_0xfefa[222]]);return _0x7369x53},offlineFields:_0x7369x2f[_0xfefa[247]],renderedOfflineField:function(){var _0x7369x53=_0xfefa[114];var _0x7369x54=this;switch(this[_0xfefa[244]]){case _0xfefa[228]:_0x7369x53= _0xfefa[220];_0x7369x53+= util[_0xfefa[170]](_0xfefa[248],_0x7369x54[_0xfefa[38]],_0x7369x54[_0xfefa[222]],_0x7369x54[_0xfefa[223]]?_0xfefa[224]:_0xfefa[114]);_0x7369x53+= util[_0xfefa[170]](_0xfefa[249],_0x7369x54[_0xfefa[222]],_0x7369x54[_0xfefa[38]],_0x7369x54[_0xfefa[38]]+ 1,_0x7369x54[_0xfefa[226]],_0x7369x54[_0xfefa[223]]?_0xfefa[223]:_0xfefa[114]);_0x7369x53+= _0xfefa[227];break;case _0xfefa[230]:_0x7369x53= _0xfefa[220];_0x7369x53+= util[_0xfefa[170]](_0xfefa[248],_0x7369x54[_0xfefa[38]],_0x7369x54[_0xfefa[222]],_0x7369x54[_0xfefa[223]]?_0xfefa[224]:_0xfefa[114]);_0x7369x53+= util[_0xfefa[170]](_0xfefa[250],_0x7369x54[_0xfefa[38]],_0x7369x54[_0xfefa[222]],_0x7369x54[_0xfefa[38]]+ 1,_0x7369x54[_0xfefa[226]],_0x7369x54[_0xfefa[223]]?_0xfefa[223]:_0xfefa[114]);_0x7369x53+= _0xfefa[227];break;case _0xfefa[236]:_0x7369x53= _0xfefa[220];_0x7369x53+= util[_0xfefa[170]](_0xfefa[231],_0x7369x54[_0xfefa[222]]);_[_0xfefa[197]](_0x7369x54[_0xfefa[232]],function(_0x7369x55){_0x7369x53+= _0xfefa[233];_0x7369x53+= util[_0xfefa[170]](_0xfefa[251],_0x7369x54[_0xfefa[38]]+ 1,_0x7369x55,_0x7369x55);_0x7369x53+= _0xfefa[235]});_0x7369x53+= _0xfefa[227];break;case _0xfefa[238]:_0x7369x53= _0xfefa[220];_0x7369x53+= util[_0xfefa[170]](_0xfefa[231],_0x7369x54[_0xfefa[222]]);_[_0xfefa[197]](_0x7369x54[_0xfefa[232]],function(_0x7369x55){_0x7369x53+= _0xfefa[233];_0x7369x53+= util[_0xfefa[170]](_0xfefa[252],_0x7369x54[_0xfefa[38]]+ 1,_0x7369x55,_0x7369x55);_0x7369x53+= _0xfefa[235]});_0x7369x53+= _0xfefa[227];break;case _0xfefa[243]:_0x7369x53= _0xfefa[220];_0x7369x53+= util[_0xfefa[170]](_0xfefa[231],_0x7369x54[_0xfefa[222]]);_0x7369x53+= util[_0xfefa[170]](_0xfefa[253],_0x7369x54[_0xfefa[38]]+ 1);_[_0xfefa[197]](_0x7369x54[_0xfefa[232]],function(_0x7369x55){_0x7369x53+= util[_0xfefa[170]](_0xfefa[241],_0x7369x55,_0x7369x55)});_0x7369x53+= _0xfefa[242];break};_0x7369x53+= _0xfefa[245];_0x7369x53+= util[_0xfefa[170]](_0xfefa[254],_0x7369x54[_0xfefa[38]]+ 1,_0x7369x54[_0xfefa[222]]);return _0x7369x53}};_0x7369x50= Mustache[_0xfefa[78]](_0x7369x50,_0x7369x52);return _0x7369x2b[_0xfefa[41]](200)[_0xfefa[255]](_0x7369x50)})[_0xfefa[39]](function(_0x7369x2d){return _0x7369x2c(_0x7369x2d)})};exports[_0xfefa[256]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){return ChatWebsite[_0xfefa[79]](_0x7369x2a[_0xfefa[50]][_0xfefa[49]],{include:[{model:ChatProactiveAction}]})[_0xfefa[42]](function(_0x7369x2f){if(!_0x7369x2f){return _0x7369x2b[_0xfefa[41]](400)[_0xfefa[255]]({})};return _0x7369x2b[_0xfefa[41]](200)[_0xfefa[255]](_0x7369x2f.ChatProactiveActions)})[_0xfefa[39]](function(_0x7369x2d){return _0x7369x2c(_0x7369x2d)})};exports[_0xfefa[257]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){return ChatRoom[_0xfefa[79]](_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[259]][_0xfefa[111]])[_0xfefa[42]](function(_0x7369x37){if(!_0x7369x37){return _0x7369x2b[_0xfefa[41]](400)[_0xfefa[255]]({})};if(_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[259]][_0xfefa[88]](_0xfefa[258])&& _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[259]][_0xfefa[88]](_0xfefa[128])){return _0x7369x37[_0xfefa[134]]({rating:_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[259]][_0xfefa[258]],ratingMessage:_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[259]][_0xfefa[128]]})};return})[_0xfefa[42]](function(){return _0x7369x2b[_0xfefa[41]](200)[_0xfefa[255]]({})})[_0xfefa[39]](function(_0x7369x2d){return _0x7369x2b[_0xfefa[41]](400)[_0xfefa[255]](_0x7369x2d)})};exports[_0xfefa[260]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){var _0x7369x39=_0x7369x2a[_0xfefa[50]][_0xfefa[49]];if(_0x7369x2a[_0xfefa[102]]&& _0x7369x2a[_0xfefa[102]][_0xfefa[97]]){if(_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0xfefa[88]](_0x7369x39)&& _0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[88]](_0xfefa[108])&& _0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[108]]> 0){return ReportChatSession[_0xfefa[262]]({where:{visitorid:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[108]],leaveAt:null}})[_0xfefa[42]](function(_0x7369x57){if(!_0x7369x57){return};return _0x7369x57[_0xfefa[134]]({abandon:true,leaveAt:moment()[_0xfefa[170]](_0xfefa[261])})})[_0xfefa[42]](function(){return _0x7369x2b[_0xfefa[41]](200)[_0xfefa[255]]({})})[_0xfefa[39]](function(_0x7369x2d){_0x7369x2b[_0xfefa[41]](500)[_0xfefa[255]]({})})}};return _0x7369x2b[_0xfefa[41]](200)[_0xfefa[255]]({})};exports[_0xfefa[263]]= function(_0x7369x2a,_0x7369x2b,_0x7369x2c){if(!_0x7369x2a[_0xfefa[102]][_0xfefa[97]]){_0x7369x2a[_0xfefa[102]][_0xfefa[97]]= {}};if(!_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x2a[_0xfefa[50]][_0xfefa[49]]]){_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x2a[_0xfefa[50]][_0xfefa[49]]]= {}};var _0x7369x39=_0x7369x2a[_0xfefa[50]][_0xfefa[49]];var _0x7369x58;var _0x7369x35={};var _0x7369x59=[];return ChatWebsite[_0xfefa[79]](_0x7369x39)[_0xfefa[42]](function(_0x7369x46){if(!_0x7369x46){return _0x7369x2b[_0xfefa[200]](500)};_0x7369x58= _0x7369x46;return _0x7369x58[_0xfefa[273]]({include:[{model:ChatQueue,include:[{model:Agent}]},{model:Agent},{model:Interval,include:[{all:true}]}]})})[_0xfefa[42]](function(_0x7369x5b){_[_0xfefa[197]](_0x7369x5b,function(_0x7369x5c){if(checkAppInterval(_0x7369x5c)){if(_0x7369x5c[_0xfefa[267]]=== _0xfefa[268]){if(_0x7369x5c[_0xfefa[32]][_0xfefa[88]](_0xfefa[269])&& _0x7369x5c[_0xfefa[32]][_0xfefa[269]][_0xfefa[120]]> 0){_0x7369x59= _[_0xfefa[271]](_[_0xfefa[201]](_0x7369x59,_[_0xfefa[270]](_0x7369x5c[_0xfefa[32]].Users,_0xfefa[49])))}}else {if(_0x7369x5c[_0xfefa[267]]=== _0xfefa[121]){_0x7369x59[_0xfefa[196]](_0x7369x5c[_0xfefa[23]][_0xfefa[49]]);_0x7369x59= _[_0xfefa[271]](_0x7369x59)}}}});return Agent[_0xfefa[272]]({where:{online:true,id:{$in:_0x7369x59}}})})[_0xfefa[42]](function(_0x7369x5a){if(_0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[115]]){_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[115]]= _0x7369x2a[_0xfefa[89]][_0xfefa[116]][_0xfefa[115]]=== _0xfefa[55]?true:false};_0x7369x35= {success:true,has_session_saf:null,signed_up:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[111]]?true:false,fullname:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[117]]|| _0xfefa[114],email:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[118]]|| _0xfefa[114],avatar:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[119]]|| _0xfefa[114],open_state:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[115]]|| _0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[111]]?true:false,online:_0x7369x5a[_0xfefa[266]]?true:false,is_unserved:false,room_id:0};if(_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[108]]){return ChatRoom[_0xfefa[110]]({where:{ChatVisitorId:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[108]],status:_0xfefa[113],token:{$ne:_0xfefa[114]}}})};return})[_0xfefa[42]](function(_0x7369x37){if(_0x7369x37){_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[111]]= _0x7369x37[_0xfefa[49]];_0x7369x35[_0xfefa[111]]= _0x7369x37[_0xfefa[49]];_0x7369x35[_0xfefa[112]]= true}else {_0x7369x35[_0xfefa[112]]= false};if(_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[108]]){return ChatVisitor[_0xfefa[110]]({where:{id:_0x7369x2a[_0xfefa[102]][_0xfefa[97]][_0x7369x39][_0xfefa[108]],status:_0xfefa[109]}})};return})[_0xfefa[42]](function(_0x7369x36){if(_0x7369x36){_0x7369x35[_0xfefa[103]]= true};return _0x7369x2b[_0xfefa[41]](200)[_0xfefa[255]](_0x7369x35)})[_0xfefa[39]](function(_0x7369x2d){console[_0xfefa[265]](_0xfefa[264],_0x7369x2d);return _0x7369x2b[_0xfefa[41]](500)[_0xfefa[255]]({})})};function checkAppInterval(_0x7369x5c){var _0x7369x5e=true;if(_0x7369x5c[_0xfefa[37]]){for(var _0x7369x5f=0;_0x7369x5f< _0x7369x5c[_0xfefa[37]][_0xfefa[274]][_0xfefa[120]];_0x7369x5f++){if(Util[_0xfefa[276]](splitInterval(_0x7369x5c[_0xfefa[37]][_0xfefa[274]][_0x7369x5f][_0xfefa[275]]))){break}else {_0x7369x5e= false}}}else {if(!Util[_0xfefa[276]](splitInterval(_0x7369x5c[_0xfefa[275]]))){_0x7369x5e= false}};return _0x7369x5e}function splitInterval(_0x7369x61){var _0x7369x62={};var _0x7369x63=_0x7369x61[_0xfefa[277]](_0xfefa[162]);var _0x7369x64;_0x7369x63[_0xfefa[197]](function(_0x7369x54,_0x7369x65){switch(_0x7369x65){case 0:if(_0x7369x54!== _0xfefa[224]){_0x7369x64= _0x7369x54[_0xfefa[277]](_0xfefa[278]);_0x7369x62[_0xfefa[279]]= moment(_0x7369x64[0],_0xfefa[280]);_0x7369x62[_0xfefa[281]]= moment(_0x7369x64[1],_0xfefa[280])}else {_0x7369x62[_0xfefa[279]]= null;_0x7369x62[_0xfefa[281]]= null};break;case 1:if(_0x7369x54!== _0xfefa[224]){_0x7369x64= _0x7369x54[_0xfefa[277]](_0xfefa[278]);_0x7369x62[_0xfefa[282]]= weekDaysCollection[_0x7369x64[0]];_0x7369x62[_0xfefa[283]]= _0x7369x64[1]?weekDaysCollection[_0x7369x64[1]]:null}else {_0x7369x62[_0xfefa[282]]= null;_0x7369x62[_0xfefa[283]]= null};break;case 2:if(_0x7369x54!== _0xfefa[224]){_0x7369x64= _0x7369x54[_0xfefa[277]](_0xfefa[278]);_0x7369x62[_0xfefa[284]]= _0x7369x64[0];_0x7369x62[_0xfefa[285]]= _0x7369x64[1]?_0x7369x64[1]:null}else {_0x7369x62[_0xfefa[284]]= null;_0x7369x62[_0xfefa[285]]= null};break;case 3:if(_0x7369x54!== _0xfefa[224]){_0x7369x64= _0x7369x54[_0xfefa[277]](_0xfefa[278]);_0x7369x62[_0xfefa[286]]= monthsCollection[_0x7369x64[0]];_0x7369x62[_0xfefa[287]]= _0x7369x64[1]?monthsCollection[_0x7369x64[1]]:null}else {_0x7369x62[_0xfefa[286]]= null;_0x7369x62[_0xfefa[287]]= null};break;default:}});return _0x7369x62} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var jsmin = require('jsmin').jsmin; +var Mustache = require('mustache'); +var querystring = require('querystring'); +var path = require('path'); +var md5 = require('md5'); +var fs = require('fs'); +var UAParser = require('ua-parser-js'); +var uaParser = new UAParser(); +var languageParser = require('accept-language-parser'); +var ipaddr = require('ipaddr.js'); +var geoip = require('geoip-lite'); +var csv = require('to-csv'); +var util = require('util'); +var moment = require('moment'); + +var Scheduler = require('../../config/routing/scheduler'); +var config = require('../../config/environment'); +var xchatty_components = require('../../components/xchatty'); +var Util = require('../../config/util'); +var license = require('../../config/license/license.service'); +var demoLicense = { + users: 1, + agents: 1, + telephones: 0, + chat: false, + mail: false, + fax: false, + messaging: false, + cm: false, + dialer: false, + jscripty: false, + update: false, + custom: false, + description: 'DEMO LICENSE' +}; + +var sequelize = require('../../models').sequelize; +var User = require('../../models').User; +var Agent = require('../../models').User; +var ChatRoom = require('../../models').ChatRoom; +var ChatEnquiry = require('../../models').ChatEnquiry; +var ChatVisitor = require('../../models').ChatVisitor; +var ChatMessage = require('../../models').ChatMessage; +var ChatWebsite = require('../../models').ChatWebsite; +var ChatWebsitesField = require('../../models').ChatWebsitesField; +var ChatProactiveAction = require('../../models').ChatProactiveAction; +var ReportChatSession = require('../../models').ReportChatSession; +var ChatQueue = require('../../models').ChatQueue; +var License = require('../../models').License; +var Xchatty = require('../../models').Xchatty; +var Setting = require('../../models').Setting; +const Contact = require('../../models').Contact; +var Interval = require('../../models').Interval; + +const weekDaysCollection = { + mon: 1, + tue: 2, + wed: 3, + thu: 4, + fri: 5, + sat: 6, + sun: 7 +}; + +const monthsCollection = { + jan: 1, + feb: 2, + mar: 3, + apr: 4, + may: 5, + jun: 6, + jul: 7, + aug: 8, + sep: 9, + oct: 10, + nov: 11, + dec: 12 +}; + +var id = 1; + +// Get list of xchattys +exports.index = function(req, res, next) { + return Xchatty + .findAll() + .then(function(xchattys) { + return res.status(200).send(xchattys); + }) + .catch(function(err) { + return next(err); + }); +}; + +exports.getJsByWebsite = function(req, res, next) { + + // TO DO: Find the configuration of the website and replace configuration in the file + ChatWebsite + .findById(req.params.id) + .then(function(chatWebsite) { + res.set({ + 'Content-Type': 'application/javascript', + 'x-timestamp': Date.now(), + 'x-sent': true + }); + + var js = xchatty_components.js; + /*jshint multistr: true */ + var configJS = { + websiteId: req.params.id, + // rootPath: path.join(chatWebsite.remote, 'api', 'xchatty/'), + rootPath: Util.stripTrailingSlash(chatWebsite.remote) + '/api/xchatty/', + signedUp: 'false', + windowFocused: 'false', + isNewPage: 'true', + processingSignUp: 'false', + processingEnquiry: 'false', + processingSend: 'false', + processingRating: 'false', + visitorFullname: '""', + visitorAvatar: '""', + timerReadMessages: 'null', + timerCheckStatus: 'null', + isOnline: 'false', + decayHistory: 0, + defaultTimeout: 5000, + isInitialStatusCheck: 'true', + muteNotificationSoundOnce: 'false', + assetBase: Util.stripTrailingSlash(chatWebsite.remote) + '/api/xchatty/assets', + hasSessionSaf: 'false', + restoreOpenState: 'false', + animateHover: chatWebsite.animation, + hideEmail: 'false', + hideOffline: 'false', + headerShape: chatWebsite.header_shape, + HeaderOnline: chatWebsite.header_online, + OnlineMessage: chatWebsite.online_message, + UsernamePlaceholder: chatWebsite.username_placeholder, + EmailPlaceholder: chatWebsite.email_placeholder, + StartChatButtonText: chatWebsite.start_chat_button, + OfflineMessage: chatWebsite.offline_message, + HeaderOffline: chatWebsite.header_offline, + EnquiryMessagePlaceholder: chatWebsite.enquiry_message_placeholder, + EnquiryButtonText: chatWebsite.enquiry_button, + downloadTranscript: chatWebsite.download_transcript, + RatingMessage: chatWebsite.rating_message, + RatingSend: chatWebsite.rating_send, + RatingSkip: chatWebsite.rating_skip, + MessageAgentsBusy: chatWebsite.agents_busy, + NameTitle: chatWebsite.name_title, + EmailTitle: chatWebsite.email_title, + MessageTitle: chatWebsite.message_title + }; + + js = Mustache.render(js, configJS); + res.send(js); + + }) + .catch(function(err) { + next(err); + }); + +}; + +exports.getStyleByWebsite = function(req, res, next) { + + // TO DO: Find the configuration of the website and replace configuration in the file + ChatWebsite + .findById(req.params.id) + .then(function(chatWebsite) { + + res.set({ + 'Content-Type': 'text/css', + 'x-timestamp': Date.now(), + 'x-sent': true + }); + + var css = xchatty_components.css; + + var configCSS = { + // assetBase: path.join(chatWebsite.remote, 'api', 'xchatty', + // 'assets'), + assetBase: Util.stripTrailingSlash(chatWebsite.remote) + '/api/xchatty/assets', + color: chatWebsite.color, + colorFocus: chatWebsite.color_focus, + colorButton: chatWebsite.color_button + }; + + css = Mustache.render(css, configCSS); + res.send(css); + }) + .catch(function(err) { + next(err); + }); +}; + +exports.getAssets = function(req, res, next) { + if (req.query.hasOwnProperty('uploaded')) { + res.download(path.join(config.root, 'server', 'files', req.query.resource)); + } else { + res.download(path.join(config.root, 'server', 'components', 'xchatty', 'assets', req.query.resource)); + } +}; + +exports.getJqueryLibrary = function(req, res, next) { + + // TODO: Find the configuration of the website and replace configuration in the file + res.set({ + 'Content-Type': 'application/javascript', + 'x-timestamp': Date.now(), + 'x-sent': true + }); + + var jquery = xchatty_components.jquery; + res.send(jquery); + +}; + +exports.getStatus = function(req, res, next) { + + if (!req.session.xchatty) { + req.session.xchatty = {}; + } + + var _jsonResponse = {}; + + return Agent + .findAll({ + where: { + online: true, + role: 'agent' + } + }) + .then(function(agents) { + if (req.query.data.open_state) + req.session.xchatty.open_state = req.query.data.open_state === 'true' ? true : false; + _jsonResponse = { + success: true, + has_session_saf: null, + signed_up: req.session.xchatty.room_id ? true : false, + fullname: req.session.xchatty.fullname ? req.session.xchatty.fullname : '', + email: req.session.xchatty.email ? req.session.xchatty.email : '', + avatar: req.session.xchatty.avatar ? req.session.xchatty.avatar : '', + open_state: req.session.xchatty.open_state || req.session.xchatty.room_id ? true : false, + online: agents.length ? true : false, + is_unserved: false, + room_id: 0 + }; + return; + }) + .then(function() { + if (req.session.xchatty.visitor_id) { + return ChatRoom + .findOne({ + where: { + ChatVisitorId: req.session.xchatty.visitor_id, + status: 'OPEN', + token: { + $ne: '' + } + } + }); + } + return; + }) + .then(function(chatRoom) { + if (chatRoom) { + req.session.xchatty.room_id = chatRoom.id; + _jsonResponse.room_id = chatRoom.id; + _jsonResponse.signed_up = true; + } else { + _jsonResponse.signed_up = false; + } + return; + }) + .then(function() { + if (req.session.xchatty.visitor_id) { + return ChatVisitor + .findOne({ + where: { + id: req.session.xchatty.visitor_id, + status: 'unserved' + } + }) + } + return; + }) + .then(function(visitor) { + if (visitor) { + _jsonResponse.is_unserved = true; + } + return res.send(req.query.callback + '(' + JSON.stringify(_jsonResponse) + ')'); + }) + .catch(function(err) { + return next(err); + }); +}; + +exports.getMessages = function(req, res, next) { + + var _websiteId = req.params.id; + + /*jshint multistr: true */ + var condition = { + where: { + ChatRoomId: req.session.xchatty[_websiteId].room_id + }, + include: [{ + model: User, + attributes: ['id', 'name', 'fullname', 'email'] + }, { + model: ChatVisitor, + attributes: ['id', 'fullname', 'email'] + }] + }; + + if (req.query.data.is_new_page === 'false') { + condition.where.id = { + $gt: req.query.data.last_id + }; + } + + ChatMessage + .findAll(condition) + .then(function(chatMessages) { + var json = { + success: true, + messages: chatMessages, + composing: false, + composing_fullname: null + }; + + res.send(req.query.callback + '(' + JSON.stringify(json) + ')'); + }) + .catch(function(err) { + next(err); + }); +}; + +exports.sendMessage = function(req, res, next) { + + var _websiteId = req.params.id; + + /*jshint multistr: true */ + var condition = { + where: { + ChatRoomId: req.session.xchatty[_websiteId].room_id + }, + include: [{ + model: User, + attributes: ['id', 'name', 'fullname', 'email'] + }, { + model: ChatVisitor, + attributes: ['id', 'fullname', 'email'] + }] + }; + + if (req.query.data.is_new_page === 'false') { + condition.where.id = { + $gt: req.query.data.last_id + }; + } + + ChatMessage + .create({ + body: req.query.data.Message.message, + ChatRoomId: req.session.xchatty[_websiteId].room_id, + ChatVisitorId: req.session.xchatty[_websiteId].visitor_id + }) + .then(function(chatMessage) { + ChatMessage + .findAll(condition) + .then(function(chatMessages) { + var json = { + errors: [], + success: true, + data: chatMessage, + messages: chatMessages + }; + + res.send(req.query.callback + '(' + JSON.stringify(json) + ')'); + }) + .catch(function(err) { + next(err); + }); + }) + .catch(function(err) { + next(err); + }); + +}; + +exports.signoutCustomer = function(req, res, next) { + + var _websiteId = req.params.id; + + return ChatRoom + .findById(req.session.xchatty[_websiteId].room_id) + .then(function(chatRoom) { + return chatRoom + .update({ + status: 'CLOSED', + completeReason: 'requester' + }); + }) + .then(function() { + var json = { + success: true, + errors: [] + }; + req.session.xchatty[_websiteId] = {}; + res.send(req.query.callback + '(' + JSON.stringify(json) + ')'); + }) + .catch(function(err) { + next(err); + }); +}; + +exports.signupCustomer = function(req, res, next) { + + var _websiteId = req.params.id; + + var ua = uaParser.setUA(req.headers['user-agent']).getResult(); + var languages = languageParser.parse(req.headers['accept-language']); + var remoteAddress = req.headers['x-forwarded-for'] ? req.headers['x-forwarded-for'] : req.connection.remoteAddress || req.ip; + + var body = { + fullname: req.query.data.Discussion.fullname, + email: req.query.data.Discussion.email, + remote_address: remoteAddress, + user_agent: req.headers['user-agent'], + visitor_language: req.headers['accept-language'], + referer: req.headers.referer, + origin: 'webchat', + browser: ua.browser.name + ' ' + ua.browser.version, + engine: ua.engine.name + ' ' + ua.engine.version, + os: ua.os.name + ' ' + ua.os.version, + device: ua.device.model ? ua.device.model + ' ' + ua.device.vendor + ' ' + ua.device.type : null, + ChatWebsiteId: req.query.chatWebsiteId + }; + + if (req.query.data.Discussion.data1 && req.query.data.Discussion.labelData1) { + body.data1 = req.query.data.Discussion.data1; + if (_.isArray(body.data1)) { + body.data1 = _.join(body.data1, ','); + } + body.labelData1 = req.query.data.Discussion.labelData1; + } + if (req.query.data.Discussion.data2 && req.query.data.Discussion.labelData2) { + body.data2 = req.query.data.Discussion.data2; + if (_.isArray(body.data2)) { + body.data2 = _.join(body.data2, ','); + } + body.labelData2 = req.query.data.Discussion.labelData2; + } + if (req.query.data.Discussion.data3 && req.query.data.Discussion.labelData3) { + body.data3 = req.query.data.Discussion.data3; + if (_.isArray(body.data3)) { + body.data3 = _.join(body.data3, ','); + } + body.labelData3 = req.query.data.Discussion.labelData3; + } + + var _chatVisitor, _chatWebsite, _chatRoom; + + return ChatVisitor + .create(body) + .then(function(chatVisitor) { + + _chatVisitor = chatVisitor; + return ChatWebsite + .findById(_chatVisitor.ChatWebsiteId); + }) + .then(function(website) { + _chatWebsite = website; + + if (_chatWebsite.ListId) { + return Contact + .findOrCreate({ + where: { + email: _chatVisitor.email, + }, + defaults: { + email: _chatVisitor.email, + firstName: _chatVisitor.fullname, + ListId: _chatWebsite.ListId + } + }); + } + }) + .then(function() { + return ChatRoom + .create({ + type: 'external', + ChatVisitorId: _chatVisitor.id, + ChatWebsiteId: _chatWebsite.id, + contact: _chatVisitor.email, + website: _chatWebsite.name + }); + }) + .then(function(chatRoom) { + _chatRoom = chatRoom; + + var scheduler = new Scheduler({ + channel: 'chat', + uniqueid: util.format('%s.%s', moment().unix(), _chatRoom.id), + roomid: _chatRoom.id, + websiteid: _chatWebsite.id, + websitename: _chatWebsite.name, + websiteaddress: _chatWebsite.address, + accountid: _chatWebsite.id, + accountname: _chatWebsite.name, + accountaddress: _chatWebsite.address, + visitorid: _chatVisitor.id, + visitorname: _chatVisitor.fullname, + visitoremail: _chatVisitor.email + }) + + scheduler.init(); + + req.session.xchatty[_websiteId].fullname = _chatVisitor.fullname; + req.session.xchatty[_websiteId].email = _chatVisitor.email; + req.session.xchatty[_websiteId].avatar = md5(_chatVisitor.email).toString('base64'); + req.session.xchatty[_websiteId].visitor_id = _chatVisitor.id; + + var json = { + success: true, + errors: [], + chatVisitor: { + id: _chatVisitor.id + } + }; + + /*jshint multistr: true */ + res.send(req.query.callback + '(' + JSON.stringify(json) + ')'); + }) + .catch(function(err) { + next(err); + }); +}; + +exports.unservedCustomer = function(req, res, next) { + + var _websiteId = req.params.id; + + return ChatVisitor + .findById(req.session.xchatty[_websiteId].visitor_id) + .then(function(chatVisitor) { + return chatVisitor + .update({ + status: 'unserved' + }); + }) + .then(function() { + var json = { + success: true, + errors: [] + }; + req.session.xchatty[_websiteId] = {}; + res.send(req.query.callback + '(' + JSON.stringify(json) + ')'); + }) + .catch(function(err) { + next(err); + }); +}; + +exports.submitEnquiry = function(req, res, next) { + + return sequelize.transaction().then(function(t) { + + var remoteAddress = req.headers['x-forwarded-for'] ? req.headers['x-forwarded-for'] : req.connection.remoteAddress || req.ip; + + var ua = uaParser.setUA(req.headers['user-agent']).getResult(); + var languages = languageParser.parse(req.headers['accept-language']); + var body = { + fullname: req.query.data.Enquiry.fullname, + email: req.query.data.Enquiry.email, + remote_address: remoteAddress, + user_agent: req.headers['user-agent'], + visitor_language: req.headers['accept-language'], + browser: ua.browser.name + ' ' + ua.browser.version, + engine: ua.engine.name + ' ' + ua.engine.version, + os: ua.os.name + ' ' + ua.os.version, + device: ua.device.model ? ua.device.model + ' ' + ua.device.vendor + ' ' + ua.device.type : null, + referer: req.headers.referer, + origin: 'enquiry', + status: 'unserved', + ChatWebsiteId: parseInt(req.query.data.Enquiry.websiteId, 10), + ChatEnquiry: { + username: req.query.data.Enquiry.fullname, + email: req.query.data.Enquiry.email, + text: req.query.data.Enquiry.message, + ChatWebsiteId: parseInt(req.query.data.Enquiry.websiteId, 10) + } + }; + + if (req.query.data.Enquiry.offlineData1 && req.query.data.Enquiry.labelOfflineData1) { + body.offlineData1 = req.query.data.Enquiry.offlineData1; + if (_.isArray(body.offlineData1)) { + body.offlineData1 = _.join(body.offlineData1, ','); + } + body.labelOfflineData1 = req.query.data.Enquiry.labelOfflineData1; + } + if (req.query.data.Enquiry.offlineData2 && req.query.data.Enquiry.labelOfflineData2) { + body.offlineData2 = req.query.data.Enquiry.offlineData2; + if (_.isArray(body.offlineData2)) { + body.offlineData2 = _.join(body.offlineData2, ','); + } + body.labelOfflineData2 = req.query.data.Enquiry.labelOfflineData2; + } + if (req.query.data.Enquiry.offlineData3 && req.query.data.Enquiry.labelOfflineData3) { + body.offlineData3 = req.query.data.Enquiry.offlineData3; + if (_.isArray(body.offlineData3)) { + body.offlineData3 = _.join(body.offlineData3, ','); + } + body.labelOfflineData3 = req.query.data.Enquiry.labelOfflineData3; + } + var _chatVisitor; + return ChatVisitor + .create(body, { + transaction: t, + include: [{ + model: ChatEnquiry + }] + }) + .then(function(chatVisitor) { + + _chatVisitor = chatVisitor; + return ChatWebsite + .findById(_chatVisitor.ChatWebsiteId); + }) + .then(function(website) { + if (website.ListId) { + return Contact + .findOrCreate({ + where: { + email: _chatVisitor.email, + }, + defaults: { + email: _chatVisitor.email, + firstName: _chatVisitor.fullname, + ListId: website.ListId + } + }); + } + }) + .then(function() { + t.commit(); + res.send(req.query.callback + '(' + JSON.stringify({ + success: true, + errors: [] + }) + ')'); + }) + .catch(function(err) { + t.rollback(); + next(err); + }); + }); +}; + +exports.getTranscript = function(req, res, next) { + + var _websiteId = req.params.id; + + if (req.session.xchatty[_websiteId] && req.session.xchatty[_websiteId].visitor_id && req.session.xchatty[_websiteId].room_id) { + ChatMessage + .findAll({ + where: { + ChatRoomId: req.session.xchatty[_websiteId].room_id + }, + include: [{ + model: Agent, + attributes: ['id', 'fullname'] + }, { + model: ChatVisitor, + attributes: ['id', 'fullname'] + }] + }) + .then(function(chatMessages) { + var chatMessageForCSV = []; + chatMessages.forEach(function(chatMessage) { + var chatMsg = { + name: chatMessage.UserId ? chatMessage.User.fullname : chatMessage.ChatVisitor.fullname, + text: chatMessage.body.replace(/(\r\n|\n|\r)/gm, " "), + date: chatMessage.createdAt + }; + chatMessageForCSV.push(chatMsg); + }); + var csv_transcript = csv(chatMessageForCSV); + res.type('text/csv').status(200).send(csv_transcript); + }) + .catch(function(err) { + next(err); + }); + } +}; + +// Get a single xchatty +exports.show = function(req, res, next) { + return Xchatty + .findById(req.params.id) + .then(function(xchatty) { + if (!xchatty) { + return res.sendStatus(404); + } + return res.send(xchatty); + }) + .catch(function(err) { + return next(err); + }); +}; + +// Creates a new xchatty in the DB. +exports.create = function(req, res, next) { + return Xchatty + .create(req.body) + .then(function(xchatty) { + return res.status(201).send(xchatty); + }) + .catch(function(err) { + return next(err); + }); +}; + +// Updates an existing xchatty in the DB. +exports.update = function(req, res, next) { + if (req.body.id) { + delete req.body.id; + } + + return Xchatty + .findById(req.params.id) + .then(function(xchatty) { + if (!xchatty) { + return res.sendStatus(404); + } + var updated = _.merge(xchatty, req.body); + updated.save() + .then(function() { + return res.status(200).send(xchatty); + }) + .catch(function(err) { + return next(err); + }); + }) + .catch(function(err) { + return next(err); + }); +}; + +// Deletes a xchatty from the DB. +exports.destroy = function(req, res, next) { + return Xchatty + .findById(req.params.id) + .then(function(xchatty) { + if (!xchatty) { + return res.sendStatus(404); + } + xchatty.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return next(err); + }); + }) + .catch(function(err) { + return next(err); + }); +}; + + +exports.getHtmlByWebsite = function(req, res, next) { + var chatWebsite, myLicense, _settings; + var template = xchatty_components.template; + return ChatWebsite + .findById(req.params.id, { + include: [{ + all: true + }] + }) + .then(function(_chatWebsite) { + chatWebsite = _chatWebsite; + return Setting + .findById(1); + }) + .then(function(settings) { + _settings = settings; + return License + .findById(1); + }) + .then(function(_license) { + + if (_license) { + myLicense = JSON.parse(license.decrypt(_license.dataValues.license, _license.data1)); + } else { + myLicense = demoLicense; + } + + var configWebsite = { + rootPath: Util.stripTrailingSlash(chatWebsite.remote) + '/api/xchatty/', + assetBase: Util.stripTrailingSlash(chatWebsite.remote) + '/api/xchatty/assets', + websiteId: chatWebsite.id, + headerShape: chatWebsite.header_shape, + enquiryEnable: chatWebsite.enquiry_enable, + onlineFields: chatWebsite.Online, + logo: function() { + if (myLicense.custom && !chatWebsite.defaultLogo && chatWebsite.logo) { + return 'images/' + chatWebsite.logo + '&uploaded'; + } else { + return 'images/motionLogo.png'; + } + }, + whiteLabel: function() { + if (myLicense.custom && !chatWebsite.defaultWhiteLabel) { + return chatWebsite.whiteLabel; + } else { + return 'Powered by xCALLY'; + } + }, + renderedOnlineField: function() { + var renderedElement = ''; + var element = this; + switch (this.component) { + case 'textInput': + renderedElement = '
'; + renderedElement += util.format('', element.index, element.label, element.required ? '*' : ''); + renderedElement += util.format('', element.label, element.index, element.index + + 1, + element.placeholder, element.required ? + 'required' : + ''); + renderedElement += '
'; + break; + case 'textArea': + renderedElement = '
'; + renderedElement += util.format('', element.index, element.label, element.required ? '*' : ''); + renderedElement += util.format('', element.index, element.label, element.index + + 1, + element.placeholder, element.required ? + 'required' : + ''); + renderedElement += '
'; + break; + case 'checkbox': + renderedElement = '
'; + renderedElement += util.format('', element.label); + _.forEach(element.options, function(item) { + renderedElement += ''; + }); + renderedElement += '
'; + break; + case 'radio': + renderedElement = '
'; + renderedElement += util.format('', element.label); + _.forEach(element.options, function(item) { + renderedElement += ''; + }); + renderedElement += '
'; + break; + case 'select': + renderedElement = '
'; + renderedElement += util.format('', element.index, element.label); + renderedElement += util.format('
'; + break; + } + renderedElement += '
'; + renderedElement += util.format('', element.index + 1, element.label); + return renderedElement; + }, + offlineFields: chatWebsite.Offline, + renderedOfflineField: function() { + var renderedElement = ''; + var element = this; + switch (this.component) { + case 'textInput': + renderedElement = '
'; + renderedElement += util.format('', element.index, element.label, element.required ? '*' : ''); + renderedElement += util.format('', element.label, element.index, + element.index + + 1, + element.placeholder, element.required ? + 'required' : + ''); + renderedElement += '
'; + break; + case 'textArea': + renderedElement = '
'; + renderedElement += util.format('', element.index, element.label, element.required ? '*' : ''); + renderedElement += util.format('', element.index, element.label, + element.index + + 1, + element.placeholder, element.required ? + 'required' : + ''); + renderedElement += '
'; + break; + case 'checkbox': + renderedElement = '
'; + renderedElement += util.format('', element.label); + _.forEach(element.options, function(item) { + renderedElement += ''; + }); + renderedElement += '
'; + break; + case 'radio': + renderedElement = '
'; + renderedElement += util.format('', element.label); + _.forEach(element.options, function(item) { + renderedElement += ''; + }); + renderedElement += '
'; + break; + case 'select': + renderedElement = '
'; + renderedElement += util.format('', element.label); + renderedElement += util.format('
'; + break; + } + renderedElement += '
'; + renderedElement += util.format('', element.index + 1, element.label); + return renderedElement; + } + }; + template = Mustache.render(template, configWebsite); + return res.status(200).jsonp(template); + }) + .catch(function(err) { + return next(err); + }); +}; + +exports.getProactiveActionsByWebsite = function(req, res, next) { + return ChatWebsite + .findById(req.params.id, { + include: [{ + model: ChatProactiveAction + }] + }) + .then(function(chatWebsite) { + if (!chatWebsite) { + return res.status(400).jsonp({}); + } + return res.status(200).jsonp(chatWebsite.ChatProactiveActions); + }) + .catch(function(err) { + return next(err); + }); +}; + +exports.setRating = function(req, res, next) { + return ChatRoom + .findById(req.query.data.Rating.room_id) + .then(function(chatRoom) { + if (!chatRoom) { + return res.status(400).jsonp({}); + } + if (req.query.data.Rating.hasOwnProperty('rating') && req.query.data.Rating.hasOwnProperty('message')) { + return chatRoom + .update({ + rating: req.query.data.Rating.rating, + ratingMessage: req.query.data.Rating.message + }); + } + return; + }) + .then(function() { + return res.status(200).jsonp({}); + }) + .catch(function(err) { + return res.status(400).jsonp(err); + }); +} + +exports.abandonCustomer = function(req, res, next) { + var _websiteId = req.params.id; + if (req.session && req.session.xchatty) { + if (req.session.xchatty.hasOwnProperty(_websiteId) && req.session.xchatty[_websiteId].hasOwnProperty('visitor_id') && req.session.xchatty[_websiteId].visitor_id > 0) { + return ReportChatSession + .find({ + where: { + visitorid: req.session.xchatty[_websiteId].visitor_id, + leaveAt: null + } + }) + .then(function(reportChatSession) { + if (!reportChatSession) { + return; + } + return reportChatSession + .update({ + abandon: true, + leaveAt: moment().format("YYYY-MM-DD HH:mm:ss") + }); + }) + .then(function() { + return res.status(200).jsonp({}); + }) + .catch(function(err) { + res.status(500).jsonp({}); + }); + } + } + return res.status(200).jsonp({}); +} + +exports.getStatusByWebsite = function(req, res, next) { + + /* + Create params for the same session chat. + The session is created for each browser and not for each tab in the browser. + */ + + if (!req.session.xchatty) { + req.session.xchatty = {}; + } + + if (!req.session.xchatty[req.params.id]) { + req.session.xchatty[req.params.id] = {}; + } + + + var _websiteId = req.params.id; + var _website; + var _jsonResponse = {}; + var _users = []; + + return ChatWebsite + .findById(_websiteId) + .then(function(website) { + if (!website) { + // return res.status(500).jsonp({}); + return res.sendStatus(500); + } + _website = website; + return _website.getChatApplications({ + include: [{ + model: ChatQueue, + include: [{ + model: Agent + }] + }, { + model: Agent + }, { + model: Interval, + include: [{ + all: true + }] + }] + }); + }) + .then(function(chatApplications) { + _.forEach(chatApplications, function(app) { + if (checkAppInterval(app)) { + if (app.app === 'queue') { + if (app.ChatQueue.hasOwnProperty('Users') && app.ChatQueue.Users.length > 0) { + _users = _.uniq(_.merge(_users, _.map(app.ChatQueue.Users, 'id'))); + } + } else if (app.app === 'agent') { + _users.push(app.User.id); + _users = _.uniq(_users); + } + } + }); + return Agent.findAndCountAll({ + where: { + online: true, + id: { + $in: _users + } + } + }); + }) + .then(function(result) { + + if (req.query.data.open_state) + req.session.xchatty[_websiteId].open_state = req.query.data.open_state === 'true' ? true : false; + + _jsonResponse = { + success: true, + has_session_saf: null, + signed_up: req.session.xchatty[_websiteId].room_id ? true : false, + fullname: req.session.xchatty[_websiteId].fullname || '', + email: req.session.xchatty[_websiteId].email || '', + avatar: req.session.xchatty[_websiteId].avatar || '', + open_state: req.session.xchatty[_websiteId].open_state || req.session.xchatty[_websiteId].room_id ? true : false, + online: result.count ? true : false, + is_unserved: false, + room_id: 0 + }; + + if (req.session.xchatty[_websiteId].visitor_id) { + return ChatRoom + .findOne({ + where: { + ChatVisitorId: req.session.xchatty[_websiteId].visitor_id, + status: 'OPEN', + token: { + $ne: '' + } + } + }); + } + + return; + }) + .then(function(chatRoom) { + if (chatRoom) { + req.session.xchatty[_websiteId].room_id = chatRoom.id; + _jsonResponse.room_id = chatRoom.id; + _jsonResponse.signed_up = true; + } else { + _jsonResponse.signed_up = false; + } + + if (req.session.xchatty[_websiteId].visitor_id) { + return ChatVisitor + .findOne({ + where: { + id: req.session.xchatty[_websiteId].visitor_id, + status: 'unserved' + } + }) + } + + return; + }) + .then(function(visitor) { + if (visitor) { + _jsonResponse.is_unserved = true; + } + // return res.status(200).send(_jsonResponse); + return res.status(200).jsonp(_jsonResponse); + }) + .catch(function(err) { + console.log('err', err); + // return res.sendStatus(500); + return res.status(500).jsonp({}); + }); +} + +function checkAppInterval(app) { + var valid = true; + + if (app.Interval) { + for (var j = 0; j < app.Interval.SubIntervals.length; j++) { + if (Util.isValidInterval(splitInterval(app.Interval.SubIntervals[j].interval))) { + break; + } else { + valid = false; + } + } + } else { + if (!Util.isValidInterval(splitInterval(app.interval))) { + valid = false; + } + } + + return valid; +} + +function splitInterval(interval) { + var finalInterval = {}; + var splittedInterval = interval.split(','); + var intValues; + splittedInterval.forEach(function(element, index) { + switch (index) { + case 0: + if (element !== '*') { + intValues = element.split('-'); + finalInterval.t_from = moment(intValues[0], 'HH:mm'); + finalInterval.t_to = moment(intValues[1], 'HH:mm'); + } else { + finalInterval.t_from = null; + finalInterval.t_to = null; + } + break; + case 1: + if (element !== '*') { + intValues = element.split('-'); + finalInterval.wd_from = weekDaysCollection[intValues[0]]; + finalInterval.wd_to = intValues[1] ? weekDaysCollection[intValues[1]] : null; + } else { + finalInterval.wd_from = null; + finalInterval.wd_to = null; + } + break; + case 2: + if (element !== '*') { + intValues = element.split('-'); + finalInterval.md_from = intValues[0]; + finalInterval.md_to = intValues[1] ? intValues[1] : null; + } else { + finalInterval.md_from = null; + finalInterval.md_to = null; + } + break; + case 3: + if (element !== '*') { + intValues = element.split('-'); + finalInterval.m_from = monthsCollection[intValues[0]]; + finalInterval.m_to = intValues[1] ? monthsCollection[intValues[1]] : null; + } else { + finalInterval.m_from = null; + finalInterval.m_to = null; + } + break; + default: + + } + + + }); + return finalInterval; +} diff --git a/server/api/zendesk_account/index.js b/server/api/zendesk_account/index.js index ca69744..46ca688 100644 --- a/server/api/zendesk_account/index.js +++ b/server/api/zendesk_account/index.js @@ -1 +1,28 @@ -var _0xda9a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x2F\x3A\x69\x64\x2F\x63\x68\x65\x63\x6B","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2F\x3A\x69\x64\x2F\x66\x69\x65\x6C\x64\x73","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x67\x65\x74\x41\x63\x63\x6F\x75\x6E\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x63\x69\x64","\x67\x65\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x76\x61\x6C\x69\x64\x61\x74\x65\x2F\x3A\x66\x69\x65\x6C\x64","\x7A\x65\x6E\x64\x65\x73\x6B\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x70\x6F\x73\x74","\x63\x72\x65\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x63\x69\x64\x2F\x3A\x74\x79\x70\x65","\x63\x72\x65\x61\x74\x65\x46\x69\x65\x6C\x64","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x63\x69\x64\x2F\x74\x61\x67\x73","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x54\x61\x67\x73","\x2F\x3A\x69\x64\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73\x2F\x3A\x63\x69\x64\x2F\x66\x69\x65\x6C\x64\x73\x2F\x3A\x66\x69\x64","\x75\x70\x64\x61\x74\x65\x46\x69\x65\x6C\x64","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x64\x65\x73\x74\x72\x6F\x79\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79\x46\x69\x65\x6C\x64","\x65\x78\x70\x6F\x72\x74\x73"];_0xda9a[0];var express=require(_0xda9a[1]);var auth=require(_0xda9a[2]);var controller=require(_0xda9a[3]);var router=express.Router();router[_0xda9a[9]](_0xda9a[4],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19,13],[_0xda9a[6]]),controller[_0xda9a[8]]);router[_0xda9a[9]](_0xda9a[10],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[11]]);router[_0xda9a[9]](_0xda9a[12],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[13]]);router[_0xda9a[9]](_0xda9a[14],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[15]]);router[_0xda9a[9]](_0xda9a[16],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[17]]);router[_0xda9a[9]](_0xda9a[18],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[19]]);router[_0xda9a[22]](_0xda9a[20],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[21]]);router[_0xda9a[22]](_0xda9a[4],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[23]]);router[_0xda9a[22]](_0xda9a[16],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[24]]);router[_0xda9a[22]](_0xda9a[25],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[26]]);router[_0xda9a[28]](_0xda9a[10],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[27]]);router[_0xda9a[28]](_0xda9a[29],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[30]]);router[_0xda9a[28]](_0xda9a[31],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[32]]);router[_0xda9a[34]](_0xda9a[4],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[33]]);router[_0xda9a[34]](_0xda9a[10],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[35]]);router[_0xda9a[34]](_0xda9a[16],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[36]]);router[_0xda9a[34]](_0xda9a[18],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[37]]);router[_0xda9a[34]](_0xda9a[31],auth[_0xda9a[5]](),auth[_0xda9a[7]]([19],[_0xda9a[6]]),controller[_0xda9a[38]]);module[_0xda9a[39]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var auth = require('../../auth/auth.service'); +var controller = require('./zendesk_account.controller'); + +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([19, 13], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.show); +router.get('/:id/check', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.checkAccount); +router.get('/:id/fields', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.getFields); +router.get('/:id/configurations', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.getAccountConfigurations); +router.get('/:id/configurations/:cid', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.getConfiguration); +router.post('/validate/:field', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.zendeskValidation); +router.post('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.create); +router.post('/:id/configurations', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.createConfiguration); +router.post('/:id/configurations/:cid/:type', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.createField); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.update); +router.put('/:id/configurations/:cid/tags', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.addConfigurationTags); +router.put('/:id/configurations/:cid/fields/:fid', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.updateField); +router.delete('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.bulkDestroy); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroy); +router.delete('/:id/configurations', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.bulkDestroyConfigurations); +router.delete('/:id/configurations/:cid', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroyConfiguration); +router.delete('/:id/configurations/:cid/fields/:fid', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroyField); + +module.exports = router; diff --git a/server/api/zendesk_account/zendesk_account.controller.js b/server/api/zendesk_account/zendesk_account.controller.js index 9794d06..22ceb99 100644 --- a/server/api/zendesk_account/zendesk_account.controller.js +++ b/server/api/zendesk_account/zendesk_account.controller.js @@ -1 +1,515 @@ -var _0x3cfb=["\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","\x6E\x6F\x64\x65\x2D\x7A\x65\x6E\x64\x65\x73\x6B","\x5A\x65\x6E\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x5A\x65\x6E\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x6A\x73\x6F\x6E","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x65\x6E\x64","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x64\x65\x73\x74\x72\x6F\x79","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x71\x75\x65\x72\x79","\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","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x73\x63\x6F\x70\x65","\x73\x68\x6F\x77","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x69\x64\x73","\x7A\x65\x6E\x64\x65\x73\x6B\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x63\x6F\x75\x6E\x74","\x63\x68\x65\x63\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x72\x65\x6D\x6F\x74\x65\x55\x72\x69","\x61\x75\x74\x68\x54\x79\x70\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x74\x6F\x6B\x65\x6E","\x63\x72\x65\x61\x74\x65\x43\x6C\x69\x65\x6E\x74","\x65\x72\x72\x6F\x72","\x76\x65\x72\x69\x66\x69\x65\x64","\x61\x75\x74\x68","\x75\x73\x65\x72\x73","\x67\x65\x74\x46\x69\x65\x6C\x64\x73","\x6C\x69\x73\x74","\x74\x69\x63\x6B\x65\x74\x66\x69\x65\x6C\x64\x73","\x67\x65\x74\x41\x63\x63\x6F\x75\x6E\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x61\x63\x63\x6F\x75\x6E\x74","\x67\x65\x74\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x63\x69\x64","\x64\x65\x73\x74\x72\x6F\x79\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x63\x72\x65\x61\x74\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x74\x79\x70\x65","\x51\x75\x65\x75\x65","\x53\x75\x62\x6A\x65\x63\x74","\x73\x74\x72\x69\x6E\x67","\x5B\x78\x43\x41\x4C\x4C\x59\x20\x54\x69\x63\x6B\x65\x74\x5D","\x76\x61\x72\x69\x61\x62\x6C\x65","","\x71\x75\x65\x75\x65","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x2A\x2A\x2A\x20\x43\x61\x6C\x6C\x20\x49\x6E\x66\x6F\x20\x2A\x2A\x2A","\x6B\x65\x79\x56\x61\x6C\x75\x65","\x43\x61\x6C\x6C\x65\x72\x20\x4E\x75\x6D\x62\x65\x72","\x43\x61\x6C\x6C\x65\x72\x20\x4E\x61\x6D\x65","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x43\x61\x6C\x6C\x20\x54\x6F","\x64\x65\x73\x74\x65\x78\x74\x65\x6E","\x55\x6E\x69\x71\x75\x65\x49\x64","\x75\x6E\x69\x71\x75\x65\x69\x64","\x44\x61\x74\x65","\x61\x67\x65\x6E\x74\x63\x61\x6C\x6C\x65\x64\x41\x74","\x2A\x2A\x2A\x20\x41\x67\x65\x6E\x74\x20\x49\x6E\x66\x6F\x20\x2A\x2A\x2A","\x41\x67\x65\x6E\x74\x20\x4E\x61\x6D\x65","\x64\x65\x73\x74\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x41\x67\x65\x6E\x74\x20\x4E\x75\x6D\x62\x65\x72","\x64\x65\x73\x74\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x2A\x2A\x2A\x20\x54\x69\x6D\x65\x20\x49\x6E\x66\x6F\x20\x2A\x2A\x2A","\x41\x67\x65\x6E\x74\x20\x52\x69\x6E\x67","\x41\x67\x65\x6E\x74\x20\x43\x6F\x6E\x6E\x65\x63\x74","\x61\x67\x65\x6E\x74\x63\x6F\x6E\x6E\x65\x63\x74\x41\x74","\x41\x67\x65\x6E\x74\x20\x43\x6F\x6D\x70\x6C\x65\x74\x65","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x48\x6F\x6C\x64\x20\x54\x69\x6D\x65","\x68\x6F\x6C\x64\x74\x69\x6D\x65","\x54\x61\x6C\x6B\x20\x54\x69\x6D\x65","\x74\x61\x6C\x6B\x74\x69\x6D\x65","\x4F\x75\x74\x62\x6F\x75\x6E\x64","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x20\x43\x61\x6C\x6C","\x43\x61\x6C\x6C\x65\x64\x20\x4E\x75\x6D\x62\x65\x72","\x4D\x65\x6D\x62\x65\x72\x20\x4E\x61\x6D\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x73\x74\x61\x72\x74\x74\x69\x6D\x65","\x41\x6E\x73\x77\x65\x72\x20\x54\x69\x6D\x65","\x61\x6E\x73\x77\x65\x72\x74\x69\x6D\x65","\x43\x6F\x6D\x70\x6C\x65\x74\x65\x20\x54\x69\x6D\x65","\x65\x6E\x64\x74\x69\x6D\x65","\x76\x6F\x69\x63\x65","\x43\x68\x61\x6E\x6E\x65\x6C\x20\x6E\x6F\x74\x20\x61\x76\x61\x69\x6C\x61\x62\x6C\x65\x3A","\x63\x68\x61\x6E\x6E\x65\x6C","\x6C\x6F\x67","\x63\x72\x65\x61\x74\x65\x46\x69\x65\x6C\x64","\x53\x75\x62\x6A\x65\x63\x74\x49\x64","\x73\x75\x62\x6A\x65\x63\x74","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x49\x64","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x46\x69\x65\x6C\x64\x49\x64","\x75\x70\x64\x61\x74\x65\x46\x69\x65\x6C\x64","\x66\x69\x64","\x64\x65\x73\x74\x72\x6F\x79\x46\x69\x65\x6C\x64","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x54\x61\x67\x73","\x73\x65\x74\x54\x61\x67\x73"];_0x3cfb[0];var _=require(_0x3cfb[1]);var Util=require(_0x3cfb[2]);var zendesk=require(_0x3cfb[3]);var ZendeskAccount=require(_0x3cfb[5])[_0x3cfb[4]];var ZendeskConfiguration=require(_0x3cfb[5])[_0x3cfb[6]];var ZendeskField=require(_0x3cfb[5])[_0x3cfb[7]];function handleError(_0x2e9ex8,_0x2e9ex9){_0x2e9ex9= _0x2e9ex9|| 500;return function(_0x2e9exa){_0x2e9ex8[_0x3cfb[9]](_0x2e9ex9)[_0x3cfb[8]](_0x2e9exa)}}function responseWithResult(_0x2e9ex8,_0x2e9ex9){_0x2e9ex9= _0x2e9ex9|| 200;return function(_0x2e9exc){if(_0x2e9exc){_0x2e9ex8[_0x3cfb[9]](_0x2e9ex9)[_0x3cfb[10]](_0x2e9exc)}}}function responseWithoutResult(_0x2e9ex8,_0x2e9ex9){_0x2e9ex9= _0x2e9ex9|| 200;return function(){_0x2e9ex8[_0x3cfb[11]](_0x2e9ex9)}}function handleEntityNotFound(_0x2e9ex8){return function(_0x2e9exc){if(!_0x2e9exc){_0x2e9ex8[_0x3cfb[9]](404)[_0x3cfb[12]]();return null};return _0x2e9exc}}function saveUpdates(_0x2e9ex10){return function(_0x2e9exc){return _0x2e9exc[_0x3cfb[14]](_0x2e9ex10)[_0x3cfb[13]](function(_0x2e9ex11){return _0x2e9ex11})}}function removeEntity(_0x2e9ex8){return function(_0x2e9exc){if(_0x2e9exc){return _0x2e9exc[_0x3cfb[15]]()[_0x3cfb[13]](function(){_0x2e9ex8[_0x3cfb[9]](204)[_0x3cfb[12]]()})}}}exports[_0x3cfb[16]]= function(_0x2e9ex13,_0x2e9ex8,_0x2e9ex14){return ZendeskAccount[_0x3cfb[23]](_0x3cfb[22])[_0x3cfb[21]](_[_0x3cfb[20]](Util[_0x3cfb[19]](_0x2e9ex13[_0x3cfb[18]]),{distinct:true}))[_0x3cfb[13]](responseWithResult(_0x2e9ex8))[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[24]]= function(_0x2e9ex13,_0x2e9ex8){return ZendeskAccount[_0x3cfb[27]](_0x2e9ex13[_0x3cfb[26]][_0x3cfb[25]])[_0x3cfb[13]](handleEntityNotFound(_0x2e9ex8))[_0x3cfb[13]](responseWithResult(_0x2e9ex8))[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[28]]= function(_0x2e9ex13,_0x2e9ex8){return ZendeskAccount[_0x3cfb[28]](_0x2e9ex13[_0x3cfb[29]])[_0x3cfb[13]](responseWithResult(_0x2e9ex8,201))[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[30]]= function(_0x2e9ex13,_0x2e9ex8){if(_0x2e9ex13[_0x3cfb[29]][_0x3cfb[25]]){delete _0x2e9ex13[_0x3cfb[29]][_0x3cfb[25]]};return ZendeskAccount[_0x3cfb[27]](_0x2e9ex13[_0x3cfb[26]][_0x3cfb[25]])[_0x3cfb[13]](handleEntityNotFound(_0x2e9ex8))[_0x3cfb[13]](saveUpdates(_0x2e9ex13[_0x3cfb[29]]))[_0x3cfb[13]](responseWithResult(_0x2e9ex8))[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[15]]= function(_0x2e9ex13,_0x2e9ex8){return ZendeskAccount[_0x3cfb[27]](_0x2e9ex13[_0x3cfb[26]][_0x3cfb[25]])[_0x3cfb[13]](handleEntityNotFound(_0x2e9ex8))[_0x3cfb[13]](removeEntity(_0x2e9ex8))[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[31]]= function(_0x2e9ex13,_0x2e9ex8){return ZendeskAccount[_0x3cfb[15]]({where:{id:_0x2e9ex13[_0x3cfb[18]][_0x3cfb[32]]},individualHooks:true})[_0x3cfb[13]](responseWithResult(_0x2e9ex8,204))[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[33]]= function(_0x2e9ex13,_0x2e9ex8){var _0x2e9ex15={};_0x2e9ex15[_0x2e9ex13[_0x3cfb[26]][_0x3cfb[34]]]= _0x2e9ex13[_0x3cfb[29]][_0x3cfb[35]];return ZendeskAccount[_0x3cfb[21]]({where:_0x2e9ex15})[_0x3cfb[13]](function(_0x2e9ex16){if(_0x2e9ex16[_0x3cfb[36]]){return _0x2e9ex8[_0x3cfb[9]](200)[_0x3cfb[8]]({isValid:false,value:_0x2e9ex13[_0x3cfb[29]][_0x3cfb[35]]})};return _0x2e9ex8[_0x3cfb[9]](200)[_0x3cfb[8]]({isValid:true,value:_0x2e9ex13[_0x3cfb[29]][_0x3cfb[35]]})})[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[37]]= function(_0x2e9ex13,_0x2e9ex8){return ZendeskAccount[_0x3cfb[27]](_0x2e9ex13[_0x3cfb[26]][_0x3cfb[25]])[_0x3cfb[13]](function(_0x2e9ex17){var _0x2e9ex18={username:_0x2e9ex17[_0x3cfb[38]],remoteUri:_0x2e9ex17[_0x3cfb[39]]};if(_0x2e9ex17[_0x3cfb[40]]=== _0x3cfb[41]){_0x2e9ex18[_0x3cfb[41]]= _0x2e9ex17[_0x3cfb[41]]}else {if(_0x2e9ex17[_0x3cfb[40]]=== _0x3cfb[42]){_0x2e9ex18[_0x3cfb[42]]= _0x2e9ex17[_0x3cfb[42]]}};var _0x2e9ex19=zendesk[_0x3cfb[43]](_0x2e9ex18);_0x2e9ex19[_0x3cfb[47]][_0x3cfb[46]](function(_0x2e9exa,_0x2e9ex1a,_0x2e9ex16){if(_0x2e9exa){console[_0x3cfb[44]](_0x2e9exa);return handleError(_0x2e9ex8,_0x2e9exa)};if(!_0x2e9ex16[_0x3cfb[45]]){return _0x2e9ex8[_0x3cfb[11]](500)};return _0x2e9ex8[_0x3cfb[11]](204)})})[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[48]]= function(_0x2e9ex13,_0x2e9ex8){return ZendeskAccount[_0x3cfb[27]](_0x2e9ex13[_0x3cfb[26]][_0x3cfb[25]])[_0x3cfb[13]](function(_0x2e9ex17){var _0x2e9ex18={username:_0x2e9ex17[_0x3cfb[38]],remoteUri:_0x2e9ex17[_0x3cfb[39]]};if(_0x2e9ex17[_0x3cfb[40]]=== _0x3cfb[41]){_0x2e9ex18[_0x3cfb[41]]= _0x2e9ex17[_0x3cfb[41]]}else {if(_0x2e9ex17[_0x3cfb[40]]=== _0x3cfb[42]){_0x2e9ex18[_0x3cfb[42]]= _0x2e9ex17[_0x3cfb[42]]}};var _0x2e9ex19=zendesk[_0x3cfb[43]](_0x2e9ex18);_0x2e9ex19[_0x3cfb[50]][_0x3cfb[49]](function(_0x2e9exa,_0x2e9ex1a,_0x2e9ex16){if(_0x2e9exa){console[_0x3cfb[44]](_0x2e9exa);return handleError(_0x2e9ex8,_0x2e9exa)};return _0x2e9ex8[_0x3cfb[9]](200)[_0x3cfb[8]](_0x2e9ex16)})})[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[51]]= function(_0x2e9ex13,_0x2e9ex8){return ZendeskConfiguration[_0x3cfb[23]]({method:[_0x3cfb[52],_0x2e9ex13[_0x3cfb[26]][_0x3cfb[25]]]})[_0x3cfb[21]](_[_0x3cfb[20]](Util[_0x3cfb[19]](_0x2e9ex13[_0x3cfb[18]]),{distinct:true}))[_0x3cfb[13]](responseWithResult(_0x2e9ex8))[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[53]]= function(_0x2e9ex13,_0x2e9ex8){return ZendeskConfiguration[_0x3cfb[23]]({method:[_0x3cfb[52],_0x2e9ex13[_0x3cfb[26]][_0x3cfb[25]]]})[_0x3cfb[27]](_0x2e9ex13[_0x3cfb[26]][_0x3cfb[54]])[_0x3cfb[13]](handleEntityNotFound(_0x2e9ex8))[_0x3cfb[13]](responseWithResult(_0x2e9ex8))[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[55]]= function(_0x2e9ex13,_0x2e9ex8){return ZendeskConfiguration[_0x3cfb[23]]({method:[_0x3cfb[52],_0x2e9ex13[_0x3cfb[26]][_0x3cfb[25]]]})[_0x3cfb[27]](_0x2e9ex13[_0x3cfb[26]][_0x3cfb[54]])[_0x3cfb[13]](handleEntityNotFound(_0x2e9ex8))[_0x3cfb[13]](removeEntity(_0x2e9ex8))[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[56]]= function(_0x2e9ex13,_0x2e9ex8){return ZendeskConfiguration[_0x3cfb[15]]({where:{id:_0x2e9ex13[_0x3cfb[18]][_0x3cfb[32]]},individualHooks:true})[_0x3cfb[13]](responseWithResult(_0x2e9ex8,204))[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[57]]= function(_0x2e9ex13,_0x2e9ex8){_0x2e9ex13[_0x3cfb[29]][_0x3cfb[58]]= _0x2e9ex13[_0x3cfb[26]][_0x3cfb[25]];switch(_0x2e9ex13[_0x3cfb[29]][_0x3cfb[107]]){case _0x3cfb[105]:if(_0x2e9ex13[_0x3cfb[29]][_0x3cfb[59]]=== _0x3cfb[60]){_0x2e9ex13[_0x3cfb[29]][_0x3cfb[61]]= [{"\x74\x79\x70\x65":_0x3cfb[62],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[63],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":null},{"\x74\x79\x70\x65":_0x3cfb[64],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[66]},{"\x74\x79\x70\x65":_0x3cfb[64],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[67]}];_0x2e9ex13[_0x3cfb[29]][_0x3cfb[68]]= [{"\x74\x79\x70\x65":_0x3cfb[62],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[69],"\x6B\x65\x79":null,"\x6B\x65\x79\x54\x79\x70\x65":null,"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":null},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[71],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[67]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[72],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[73]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[74],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[75]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[60],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[66]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[76],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[77]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[78],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[79]},{"\x74\x79\x70\x65":_0x3cfb[62],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[80],"\x6B\x65\x79":null,"\x6B\x65\x79\x54\x79\x70\x65":null,"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":null},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[81],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[82]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[83],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[84]},{"\x74\x79\x70\x65":_0x3cfb[62],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[85],"\x6B\x65\x79":null,"\x6B\x65\x79\x54\x79\x70\x65":null,"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":null},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[86],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[79]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[87],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[88]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[89],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[90]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[91],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[92]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[93],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[94]}]}else {if(_0x2e9ex13[_0x3cfb[29]][_0x3cfb[59]]=== _0x3cfb[95]){_0x2e9ex13[_0x3cfb[29]][_0x3cfb[61]]= [{"\x74\x79\x70\x65":_0x3cfb[62],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[63],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":null},{"\x74\x79\x70\x65":_0x3cfb[62],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[96],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":null},{"\x74\x79\x70\x65":_0x3cfb[64],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[84]}];_0x2e9ex13[_0x3cfb[29]][_0x3cfb[68]]= [{"\x74\x79\x70\x65":_0x3cfb[62],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[69],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":null},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[97],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[84]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[98],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[99]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[76],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[77]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[78],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[100]},{"\x74\x79\x70\x65":_0x3cfb[62],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[85]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[101],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[102]},{"\x74\x79\x70\x65":_0x3cfb[70],"\x63\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x6B\x65\x79":_0x3cfb[103],"\x6B\x65\x79\x54\x79\x70\x65":_0x3cfb[64],"\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74":_0x3cfb[65],"\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65":_0x3cfb[104]}]}};break;default:console[_0x3cfb[108]](_0x3cfb[106],_0x2e9ex13[_0x3cfb[29]][_0x3cfb[107]])};delete _0x2e9ex13[_0x3cfb[29]][_0x3cfb[107]];delete _0x2e9ex13[_0x3cfb[29]][_0x3cfb[59]];return ZendeskConfiguration[_0x3cfb[28]](_0x2e9ex13[_0x3cfb[29]],{include:[{model:ZendeskField,as:_0x3cfb[61]},{model:ZendeskField,as:_0x3cfb[68]}]})[_0x3cfb[13]](responseWithResult(_0x2e9ex8,201))[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[109]]= function(_0x2e9ex13,_0x2e9ex8){return ZendeskConfiguration[_0x3cfb[23]]({method:[_0x3cfb[52],_0x2e9ex13[_0x3cfb[26]][_0x3cfb[25]]]})[_0x3cfb[27]](_0x2e9ex13[_0x3cfb[26]][_0x3cfb[54]])[_0x3cfb[13]](handleEntityNotFound(_0x2e9ex8))[_0x3cfb[13]](function(_0x2e9ex1b){switch(_0x2e9ex13[_0x3cfb[26]][_0x3cfb[59]]){case _0x3cfb[111]:_0x2e9ex13[_0x3cfb[29]][_0x3cfb[110]]= _0x2e9ex13[_0x3cfb[26]][_0x3cfb[54]];break;case _0x3cfb[113]:_0x2e9ex13[_0x3cfb[29]][_0x3cfb[112]]= _0x2e9ex13[_0x3cfb[26]][_0x3cfb[54]];break;case _0x3cfb[34]:_0x2e9ex13[_0x3cfb[29]][_0x3cfb[114]]= _0x2e9ex13[_0x3cfb[26]][_0x3cfb[54]];break};return ZendeskField[_0x3cfb[28]](_0x2e9ex13[_0x3cfb[29]])})[_0x3cfb[13]](responseWithResult(_0x2e9ex8,201))[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[115]]= function(_0x2e9ex13,_0x2e9ex8){if(_0x2e9ex13[_0x3cfb[29]][_0x3cfb[25]]){delete _0x2e9ex13[_0x3cfb[29]][_0x3cfb[25]]};return ZendeskField[_0x3cfb[27]](_0x2e9ex13[_0x3cfb[26]][_0x3cfb[116]])[_0x3cfb[13]](handleEntityNotFound(_0x2e9ex8))[_0x3cfb[13]](saveUpdates(_0x2e9ex13[_0x3cfb[29]]))[_0x3cfb[13]](responseWithResult(_0x2e9ex8))[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[117]]= function(_0x2e9ex13,_0x2e9ex8){return ZendeskField[_0x3cfb[27]](_0x2e9ex13[_0x3cfb[26]][_0x3cfb[116]])[_0x3cfb[13]](handleEntityNotFound(_0x2e9ex8))[_0x3cfb[13]](removeEntity(_0x2e9ex8))[_0x3cfb[17]](handleError(_0x2e9ex8))};exports[_0x3cfb[118]]= function(_0x2e9ex13,_0x2e9ex8,_0x2e9ex14){return ZendeskConfiguration[_0x3cfb[27]](_0x2e9ex13[_0x3cfb[26]][_0x3cfb[54]])[_0x3cfb[13]](handleEntityNotFound(_0x2e9ex8))[_0x3cfb[13]](function(_0x2e9ex1b){return _0x2e9ex1b[_0x3cfb[119]](_0x2e9ex13[_0x3cfb[29]])})[_0x3cfb[13]](responseWithoutResult(_0x2e9ex8,200))[_0x3cfb[17]](function(_0x2e9exa){console[_0x3cfb[44]](_0x2e9exa);return handleError(_0x2e9ex8,_0x2e9exa)})} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Util = require('../../config/util'); +var zendesk = require('node-zendesk'); + +var ZendeskAccount = require('../../models').ZendeskAccount; +var ZendeskConfiguration = require('../../models').ZendeskConfiguration; +var ZendeskField = require('../../models').ZendeskField; + +function handleError(res, statusCode) { + statusCode = statusCode || 500; + return function(err) { + res.status(statusCode).send(err); + }; +} + +function responseWithResult(res, statusCode) { + statusCode = statusCode || 200; + return function(entity) { + if (entity) { + res.status(statusCode).json(entity); + } + }; +} + +function responseWithoutResult(res, statusCode) { + statusCode = statusCode || 200; + return function() { + res.sendStatus(statusCode); + }; +} + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function saveUpdates(updates) { + return function(entity) { + return entity.updateAttributes(updates) + .then(function(updated) { + return updated; + }); + }; +} + +function removeEntity(res) { + return function(entity) { + if (entity) { + return entity.destroy() + .then(function() { + res.status(204).end(); + }); + } + }; +} + +// Get list of zendesk_accounts +exports.index = function(req, res, next) { + return ZendeskAccount + .scope('configurations') + .findAndCountAll(_.merge(Util.getQuery(req.query), { + distinct: true + })) + .then(responseWithResult(res)) + .catch(handleError(res)); +}; + +// Get a single zendesk_account +exports.show = function(req, res) { + return ZendeskAccount + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +}; + +// Creates a new zendesk_account in the DB. +exports.create = function(req, res) { + return ZendeskAccount + .create(req.body) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +}; + +// Updates an existing zendesk_account in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return ZendeskAccount + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +}; + +// Deletes a zendesk_account from the DB. +exports.destroy = function(req, res) { + return ZendeskAccount + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +}; + +exports.bulkDestroy = function(req, res) { + return ZendeskAccount + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(responseWithResult(res, 204)) + .catch(handleError(res)); +}; + +exports.zendeskValidation = function(req, res) { + var where = {}; + where[req.params.field] = req.body.value; + return ZendeskAccount + .findAndCountAll({ + where: where + }) + .then(function(result) { + if (result.count) { + return res.status(200).send({ + isValid: false, + value: req.body.value + }); + } + return res.status(200).send({ + isValid: true, + value: req.body.value + }); + }) + .catch(handleError(res)); + +}; + +exports.checkAccount = function(req, res) { + return ZendeskAccount + .findById(req.params.id) + .then(function(account) { + var accountZendesk = { + username: account.username, + remoteUri: account.remoteUri, + // debug: true + }; + if (account.authType === 'password') { + accountZendesk.password = account.password; + } else if (account.authType === 'token') { + accountZendesk.token = account.token; + // accountZendesk.oauth = true; + } + // console.log(accountZendesk); + var client = zendesk.createClient(accountZendesk); + client.users.auth(function(err, res2, result) { + if (err) { + console.error(err); + return handleError(res, err); + } + // console.log(result); + if (!result.verified) { + return res.sendStatus(500); + } + return res.sendStatus(204); + }); + }) + .catch(handleError(res)); +}; + +exports.getFields = function(req, res) { + return ZendeskAccount + .findById(req.params.id) + .then(function(account) { + var accountZendesk = { + username: account.username, + remoteUri: account.remoteUri, + // debug: true + }; + if (account.authType === 'password') { + accountZendesk.password = account.password; + } else if (account.authType === 'token') { + accountZendesk.token = account.token; + } + var client = zendesk.createClient(accountZendesk); + client.ticketfields.list(function(err, res2, result) { + if (err) { + console.error(err); + return handleError(res, err); + } + return res.status(200).send(result); + }); + }) + .catch(handleError(res)); +} + +exports.getAccountConfigurations = function(req, res) { + return ZendeskConfiguration + .scope({ + method: ['account', req.params.id] + }) + .findAndCountAll(_.merge(Util.getQuery(req.query), { + distinct: true + })) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +exports.getConfiguration = function(req, res) { + + return ZendeskConfiguration + .scope({ + method: ['account', req.params.id] + }) + .findById(req.params.cid) + .then(handleEntityNotFound(res)) + .then(responseWithResult(res)) + .catch(handleError(res)); +} + +exports.destroyConfiguration = function(req, res) { + return ZendeskConfiguration + .scope({ + method: ['account', req.params.id] + }) + .findById(req.params.cid) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +}; + +exports.bulkDestroyConfigurations = function(req, res) { + return ZendeskConfiguration + .destroy({ + where: { + id: req.query.ids + }, + individualHooks: true + }) + .then(responseWithResult(res, 204)) + .catch(handleError(res)); +}; + +exports.createConfiguration = function(req, res) { + req.body['AccountId'] = req.params.id; + + switch (req.body.channel) { + case 'voice': + + if (req.body.type === 'Queue') { + req.body.Subject = [{ + "type": "string", + "content": "[xCALLY Ticket]", + "variableName": null + }, { + "type": "variable", + "content": "", + "variableName": "queue" + }, { + "type": "variable", + "content": "", + "variableName": "calleridnum" + }]; + req.body.Description = [{ + "type": "string", + "content": "*** Call Info ***", + "key": null, + "keyType": null, + "variableName": null + }, { + "type": "keyValue", + "content": "", + "key": "Caller Number", + "keyType": "variable", + "variableName": "calleridnum" + }, { + "type": "keyValue", + "content": "", + "key": "Caller Name", + "keyType": "variable", + "variableName": "calleridname" + }, { + "type": "keyValue", + "content": "", + "key": "Call To", + "keyType": "variable", + "variableName": "destexten" + }, { + "type": "keyValue", + "content": "", + "key": "Queue", + "keyType": "variable", + "variableName": "queue" + }, { + "type": "keyValue", + "content": "", + "key": "UniqueId", + "keyType": "variable", + "variableName": "uniqueid" + }, { + "type": "keyValue", + "content": "", + "key": "Date", + "keyType": "variable", + "variableName": "agentcalledAt" + }, { + "type": "string", + "content": "*** Agent Info ***", + "key": null, + "keyType": null, + "variableName": null + }, { + "type": "keyValue", + "content": "", + "key": "Agent Name", + "keyType": "variable", + "variableName": "destcalleridname" + }, { + "type": "keyValue", + "content": "", + "key": "Agent Number", + "keyType": "variable", + "variableName": "destcalleridnum" + }, { + "type": "string", + "content": "*** Time Info ***", + "key": null, + "keyType": null, + "variableName": null + }, { + "type": "keyValue", + "content": "", + "key": "Agent Ring", + "keyType": "variable", + "variableName": "agentcalledAt" + }, { + "type": "keyValue", + "content": "", + "key": "Agent Connect", + "keyType": "variable", + "variableName": "agentconnectAt" + }, { + "type": "keyValue", + "content": "", + "key": "Agent Complete", + "keyType": "variable", + "variableName": "agentcompleteAt" + }, { + "type": "keyValue", + "content": "", + "key": "Hold Time", + "keyType": "variable", + "variableName": "holdtime" + }, { + "type": "keyValue", + "content": "", + "key": "Talk Time", + "keyType": "variable", + "variableName": "talktime" + }]; + } else if (req.body.type === 'Outbound') { + req.body.Subject = [{ + "type": "string", + "content": "[xCALLY Ticket]", + "variableName": null + }, { + "type": "string", + "content": "Outbound Call", + "variableName": null + }, { + "type": "variable", + "content": "", + "variableName": "destcalleridnum" + }]; + req.body.Description = [{ + "type": "string", + "content": "*** Call Info ***", + "variableName": null + }, { + "type": "keyValue", + "content": "", + "key": "Called Number", + "keyType": "variable", + "keyContent": "", + "variableName": "destcalleridnum" + }, { + "type": "keyValue", + "content": "", + "key": "Member Name", + "keyType": "variable", + "keyContent": "", + "variableName": "membername" + }, { + "type": "keyValue", + "content": "", + "key": "UniqueId", + "keyType": "variable", + "keyContent": "", + "variableName": "uniqueid" + }, { + "type": "keyValue", + "content": "", + "key": "Date", + "keyType": "variable", + "keyContent": "", + "variableName": "starttime" + }, { + "type": "string", + "content": "*** Time Info ***", + }, { + "type": "keyValue", + "content": "", + "key": "Answer Time", + "keyType": "variable", + "keyContent": "", + "variableName": "answertime" + }, { + "type": "keyValue", + "content": "", + "key": "Complete Time", + "keyType": "variable", + "keyContent": "", + "variableName": "endtime" + }]; + } + break; + default: + console.log('Channel not available:', req.body.channel); + } + + delete req.body.channel; + delete req.body.type; + + return ZendeskConfiguration + .create(req.body, { + include: [{ + model: ZendeskField, + as: 'Subject' + }, { + model: ZendeskField, + as: 'Description' + }] + }) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +}; + +exports.createField = function(req, res) { + return ZendeskConfiguration + .scope({ + method: ['account', req.params.id] + }) + .findById(req.params.cid) + .then(handleEntityNotFound(res)) + .then(function(configuration) { + switch (req.params.type) { + case 'subject': + req.body['SubjectId'] = req.params.cid; + break; + case 'description': + req.body['DescriptionId'] = req.params.cid; + break; + case 'field': + req.body['FieldId'] = req.params.cid; + break; + } + return ZendeskField.create(req.body); + }) + .then(responseWithResult(res, 201)) + .catch(handleError(res)); +}; + +exports.updateField = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + return ZendeskField + .findById(req.params.fid) + .then(handleEntityNotFound(res)) + .then(saveUpdates(req.body)) + .then(responseWithResult(res)) + .catch(handleError(res)); +}; + +exports.destroyField = function(req, res) { + return ZendeskField + .findById(req.params.fid) + .then(handleEntityNotFound(res)) + .then(removeEntity(res)) + .catch(handleError(res)); +}; + +exports.addConfigurationTags = function(req, res, next) { + return ZendeskConfiguration + .findById(req.params.cid) + .then(handleEntityNotFound(res)) + .then(function(configuration) { + return configuration.setTags(req.body); + }) + .then(responseWithoutResult(res, 200)) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); +}; diff --git a/server/api/zendesk_account/zendesk_account.events.js b/server/api/zendesk_account/zendesk_account.events.js index 702b6c7..cf5855e 100644 --- a/server/api/zendesk_account/zendesk_account.events.js +++ b/server/api/zendesk_account/zendesk_account.events.js @@ -1 +1,36 @@ -var _0x82d1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x82d1[0];const EventEmitter=require(_0x82d1[1]);const ZendeskAccount=require(_0x82d1[3])[_0x82d1[2]];var ZendeskAccountEvents= new EventEmitter();ZendeskAccountEvents[_0x82d1[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x82d1[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x82d1[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x82d1[6]};for(var e in events){var event=events[e];ZendeskAccount[_0x82d1[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x2827x8,_0x2827x9,_0x2827xa){ZendeskAccountEvents[_0x82d1[10]](event+ _0x82d1[8]+ _0x2827x8[_0x82d1[9]],_0x2827x8);ZendeskAccountEvents[_0x82d1[10]](event,_0x2827x8);_0x2827xa(null)}}module[_0x82d1[11]]= ZendeskAccountEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ZendeskAccount = require('../../models').ZendeskAccount; + +var ZendeskAccountEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ZendeskAccountEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ZendeskAccount.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ZendeskAccountEvents.emit(event + ':' + doc._id, doc); + ZendeskAccountEvents.emit(event, doc); + done(null); + } +} + +module.exports = ZendeskAccountEvents; diff --git a/server/api/zendesk_account/zendesk_account.socket.js b/server/api/zendesk_account/zendesk_account.socket.js index 487da9c..c2f0be2 100644 --- a/server/api/zendesk_account/zendesk_account.socket.js +++ b/server/api/zendesk_account/zendesk_account.socket.js @@ -1 +1,32 @@ -var _0x9801=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0x9801[0];const ZendeskAccountEvents=require(_0x9801[1]);var events=[_0x9801[2],_0x9801[3]];exports[_0x9801[4]]= function(_0x443ax3){for(var _0x443ax4=0,_0x443ax5=events[_0x9801[5]];_0x443ax4< _0x443ax5;_0x443ax4++){var _0x443ax6=events[_0x443ax4];var _0x443ax7=createListener(_0x9801[6]+ _0x443ax6,_0x443ax3);ZendeskAccountEvents[_0x9801[7]](_0x443ax6,_0x443ax7);_0x443ax3[_0x9801[7]](_0x9801[8],removeListener(_0x443ax6,_0x443ax7))}};function createListener(_0x443ax6,_0x443ax3){return function(_0x443ax9){_0x443ax3[_0x9801[9]](_0x443ax6,_0x443ax9)}}function removeListener(_0x443ax6,_0x443ax7){return function(){ZendeskAccountEvents[_0x9801[10]](_0x443ax6,_0x443ax7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ZendeskAccountEvents = require('./zendesk_account.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('zendesk_account:' + event, socket); + + ZendeskAccountEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ZendeskAccountEvents.removeListener(event, listener); + }; +} diff --git a/server/api/zendesk_configuration/index.js b/server/api/zendesk_configuration/index.js index e4416ea..f91b034 100644 --- a/server/api/zendesk_configuration/index.js +++ b/server/api/zendesk_configuration/index.js @@ -1 +1,16 @@ -var _0x468f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x2F\x3A\x69\x64\x2F\x74\x61\x67\x73","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x54\x61\x67\x73","\x2F\x3A\x69\x64\x2F\x3A\x74\x79\x70\x65","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x468f[0];var express=require(_0x468f[1]);var controller=require(_0x468f[2]);var auth=require(_0x468f[3]);var router=express.Router();router[_0x468f[9]](_0x468f[4],auth[_0x468f[5]](),auth[_0x468f[7]]([19],[_0x468f[6]]),controller[_0x468f[8]]);router[_0x468f[9]](_0x468f[10],auth[_0x468f[5]](),auth[_0x468f[7]]([19],[_0x468f[6]]),controller[_0x468f[11]]);router[_0x468f[13]](_0x468f[4],auth[_0x468f[5]](),auth[_0x468f[7]]([19],[_0x468f[6]]),controller[_0x468f[12]]);router[_0x468f[15]](_0x468f[10],auth[_0x468f[5]](),auth[_0x468f[7]]([19],[_0x468f[6]]),controller[_0x468f[14]]);router[_0x468f[13]](_0x468f[16],auth[_0x468f[5]](),auth[_0x468f[7]]([19],[_0x468f[6]]),controller[_0x468f[17]]);router[_0x468f[13]](_0x468f[18],auth[_0x468f[5]](),auth[_0x468f[7]]([19],[_0x468f[6]]),controller[_0x468f[19]]);router[_0x468f[21]](_0x468f[10],auth[_0x468f[5]](),auth[_0x468f[7]]([19],[_0x468f[6]]),controller[_0x468f[20]]);module[_0x468f[22]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./zendesk_configuration.controller'); +var auth = require('../../auth/auth.service'); +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.update); +router.post('/:id/tags', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.addConfigurationTags); +router.post('/:id/:type', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.addConfigurationField); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/zendesk_configuration/zendesk_configuration.controller.js b/server/api/zendesk_configuration/zendesk_configuration.controller.js index 472b660..e299424 100644 --- a/server/api/zendesk_configuration/zendesk_configuration.controller.js +++ b/server/api/zendesk_configuration/zendesk_configuration.controller.js @@ -1 +1,181 @@ -var _0x4b37=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x5A\x65\x6E\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x71\x75\x65\x72\x79","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x64\x65\x73\x74\x72\x6F\x79","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x46\x69\x65\x6C\x64","\x61\x64\x64\x53\x75\x62\x6A\x65\x63\x74","\x73\x75\x62\x6A\x65\x63\x74","\x61\x64\x64\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x61\x64\x64\x46\x69\x65\x6C\x64","\x66\x69\x65\x6C\x64","\x74\x79\x70\x65","\x61\x64\x64\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x54\x61\x67\x73","\x65\x72\x72\x6F\x72","\x73\x65\x74\x54\x61\x67\x73","\x65\x6E\x64"];_0x4b37[0];var _=require(_0x4b37[1]);var ZendeskConfiguration=require(_0x4b37[3])[_0x4b37[2]];var ZendeskField=require(_0x4b37[3])[_0x4b37[4]];exports[_0x4b37[5]]= function(_0x956bx4,_0x956bx5){ZendeskConfiguration[_0x4b37[11]]({where:_0x956bx4[_0x4b37[10]]})[_0x4b37[9]](function(_0x956bx7){return _0x956bx5[_0x4b37[8]](200)[_0x4b37[7]](_0x956bx7)})[_0x4b37[6]](function(_0x956bx6){return handleError(_0x956bx5,_0x956bx6)})};exports[_0x4b37[12]]= function(_0x956bx4,_0x956bx5){ZendeskConfiguration[_0x4b37[16]]({where:{id:_0x956bx4[_0x4b37[15]][_0x4b37[14]]},include:[{all:true}]})[_0x4b37[9]](function(_0x956bx8){if(!_0x956bx8){return _0x956bx5[_0x4b37[13]](404)};return _0x956bx5[_0x4b37[7]](_0x956bx8)})[_0x4b37[6]](function(_0x956bx6){return handleError(_0x956bx5,_0x956bx6)})};exports[_0x4b37[17]]= function(_0x956bx4,_0x956bx5){ZendeskConfiguration[_0x4b37[17]](_0x956bx4[_0x4b37[18]])[_0x4b37[9]](function(_0x956bx8){return _0x956bx5[_0x4b37[8]](201)[_0x4b37[7]](_0x956bx8)})[_0x4b37[6]](function(_0x956bx6){return handleError(_0x956bx5,_0x956bx6)})};exports[_0x4b37[19]]= function(_0x956bx4,_0x956bx5){if(_0x956bx4[_0x4b37[18]][_0x4b37[14]]){delete _0x956bx4[_0x4b37[18]][_0x4b37[14]]};ZendeskConfiguration[_0x4b37[22]](_0x956bx4[_0x4b37[15]][_0x4b37[14]])[_0x4b37[9]](function(_0x956bx8){if(!_0x956bx8){return _0x956bx5[_0x4b37[13]](404)};var _0x956bx9=_[_0x4b37[20]](_0x956bx8,_0x956bx4[_0x4b37[18]]);_0x956bx9[_0x4b37[21]]()[_0x4b37[9]](function(){return _0x956bx5[_0x4b37[8]](200)[_0x4b37[7]](_0x956bx8)})[_0x4b37[6]](function(_0x956bx6){return handleError(_0x956bx5,_0x956bx6)})})[_0x4b37[6]](function(_0x956bx6){return handleError(_0x956bx5,_0x956bx6)})};exports[_0x4b37[23]]= function(_0x956bx4,_0x956bx5){ZendeskConfiguration[_0x4b37[22]](_0x956bx4[_0x4b37[15]][_0x4b37[14]])[_0x4b37[9]](function(_0x956bx8){if(!_0x956bx8){return _0x956bx5[_0x4b37[13]](404)};_0x956bx8[_0x4b37[23]]()[_0x4b37[9]](function(){return _0x956bx5[_0x4b37[13]](204)})[_0x4b37[6]](function(_0x956bx6){return handleError(_0x956bx5,_0x956bx6)})})[_0x4b37[6]](function(_0x956bx6){return handleError(_0x956bx5,_0x956bx6)})};exports[_0x4b37[24]]= function(_0x956bx4,_0x956bx5,_0x956bxa){ZendeskConfiguration[_0x4b37[22]](_0x956bx4[_0x4b37[15]][_0x4b37[14]])[_0x4b37[9]](function(_0x956bxb){if(!_0x956bxb){return _0x956bx5[_0x4b37[13]](500)};ZendeskField[_0x4b37[17]](_0x956bx4[_0x4b37[18]])[_0x4b37[9]](function(_0x956bxc){switch(_0x956bx4[_0x4b37[15]][_0x4b37[31]]){case _0x4b37[26]:_0x956bxb[_0x4b37[25]](_0x956bxc)[_0x4b37[9]](function(){return _0x956bx5[_0x4b37[8]](200)[_0x4b37[7]](_0x956bxc)})[_0x4b37[6]](function(_0x956bx6){return handleError(_0x956bx5,_0x956bx6)});break;case _0x4b37[28]:_0x956bxb[_0x4b37[27]](_0x956bxc)[_0x4b37[9]](function(){return _0x956bx5[_0x4b37[8]](200)[_0x4b37[7]](_0x956bxc)})[_0x4b37[6]](function(_0x956bx6){return handleError(_0x956bx5,_0x956bx6)});break;case _0x4b37[30]:_0x956bxb[_0x4b37[29]](_0x956bxc)[_0x4b37[9]](function(){return _0x956bx5[_0x4b37[8]](200)[_0x4b37[7]](_0x956bxc)})[_0x4b37[6]](function(_0x956bx6){return handleError(_0x956bx5,_0x956bx6)});break}})[_0x4b37[6]](function(_0x956bx6){return handleError(_0x956bx5,_0x956bx6)})})[_0x4b37[6]](function(_0x956bx6){return handleError(_0x956bx5,_0x956bx6)})};exports[_0x4b37[32]]= function(_0x956bx4,_0x956bx5,_0x956bxa){ZendeskConfiguration[_0x4b37[22]](_0x956bx4[_0x4b37[15]][_0x4b37[14]])[_0x4b37[9]](handleEntityNotFound(_0x956bx5))[_0x4b37[9]](function(_0x956bxb){return _0x956bxb[_0x4b37[34]](_0x956bx4[_0x4b37[18]])})[_0x4b37[9]](function(_0x956bxd){return _0x956bx5[_0x4b37[13]](200)})[_0x4b37[6]](function(_0x956bx6){console[_0x4b37[33]](_0x956bx6);return handleError(_0x956bx5,_0x956bx6)})};function handleEntityNotFound(_0x956bx5){return function(_0x956bxf){if(!_0x956bxf){_0x956bx5[_0x4b37[8]](404)[_0x4b37[35]]();return null};return _0x956bxf}}function handleError(_0x956bx5,_0x956bx6){return _0x956bx5[_0x4b37[8]](500)[_0x4b37[7]](_0x956bx6)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var ZendeskConfiguration = require('../../models').ZendeskConfiguration; +var ZendeskField = require('../../models').ZendeskField; + +// Get list of zendesk_configurations +exports.index = function(req, res) { + ZendeskConfiguration + .findAll({ + where: req.query + }) + .then(function(zendesk_configurations) { + return res.status(200).send(zendesk_configurations); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single zendesk_configuration +exports.show = function(req, res) { + ZendeskConfiguration + .find({ + where: { + id: req.params.id + }, + include: [{ + all: true + }] + }) + .then(function(zendesk_configuration) { + if (!zendesk_configuration) { + return res.sendStatus(404); + } + return res.send(zendesk_configuration); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new zendesk_configuration in the DB. +exports.create = function(req, res) { + ZendeskConfiguration + .create(req.body) + .then(function(zendesk_configuration) { + return res.status(201).send(zendesk_configuration); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing zendesk_configuration in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + ZendeskConfiguration + .findById(req.params.id) + .then(function(zendesk_configuration) { + if (!zendesk_configuration) { + return res.sendStatus(404); + } + var updated = _.merge(zendesk_configuration, req.body); + updated.save() + .then(function() { + return res.status(200).send(zendesk_configuration); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a zendesk_configuration from the DB. +exports.destroy = function(req, res) { + ZendeskConfiguration + .findById(req.params.id) + .then(function(zendesk_configuration) { + if (!zendesk_configuration) { + return res.sendStatus(404); + } + zendesk_configuration.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +exports.addConfigurationField = function(req, res, next) { + // console.log(req.params); + ZendeskConfiguration + .findById(req.params.id) + .then(function(configuration) { + if (!configuration) { + return res.sendStatus(500); + } + ZendeskField + .create(req.body) + .then(function(field) { + switch (req.params.type) { + case 'subject': + configuration.addSubject(field) + .then(function() { + return res.status(200).send(field); + }) + .catch(function(err) { + return handleError(res, err); + }); + break; + case 'description': + configuration.addDescription(field) + .then(function() { + return res.status(200).send(field); + }) + .catch(function(err) { + return handleError(res, err); + }); + break; + case 'field': + configuration.addField(field) + .then(function() { + return res.status(200).send(field); + }) + .catch(function(err) { + return handleError(res, err); + }); + break; + } + }) + .catch(function(err) { + return handleError(res, err); + // return next(err); + }); + }) + .catch(function(err) { + // return next(err); + return handleError(res, err); + }); +}; + +exports.addConfigurationTags = function(req, res, next) { + ZendeskConfiguration + .findById(req.params.id) + .then(handleEntityNotFound(res)) + .then(function(configuration) { + return configuration.setTags(req.body); + }) + .then(function(data) { + return res.sendStatus(200); + }) + .catch(function(err) { + console.error(err); + return handleError(res, err); + }); +}; + +function handleEntityNotFound(res) { + return function(entity) { + if (!entity) { + res.status(404).end(); + return null; + } + return entity; + }; +} + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/zendesk_configuration/zendesk_configuration.events.js b/server/api/zendesk_configuration/zendesk_configuration.events.js index 5b58410..f745627 100644 --- a/server/api/zendesk_configuration/zendesk_configuration.events.js +++ b/server/api/zendesk_configuration/zendesk_configuration.events.js @@ -1 +1,36 @@ -var _0xeb70=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xeb70[0];const EventEmitter=require(_0xeb70[1]);const ZendeskConfiguration=require(_0xeb70[3])[_0xeb70[2]];var ZendeskConfigurationEvents= new EventEmitter();ZendeskConfigurationEvents[_0xeb70[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0xeb70[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0xeb70[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0xeb70[6]};for(var e in events){var event=events[e];ZendeskConfiguration[_0xeb70[7]](e,emitEvent(event))};function emitEvent(event){return function(_0x81c6x8,_0x81c6x9,_0x81c6xa){ZendeskConfigurationEvents[_0xeb70[10]](event+ _0xeb70[8]+ _0x81c6x8[_0xeb70[9]],_0x81c6x8);ZendeskConfigurationEvents[_0xeb70[10]](event,_0x81c6x8);_0x81c6xa(null)}}module[_0xeb70[11]]= ZendeskConfigurationEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ZendeskConfiguration = require('../../models').ZendeskConfiguration; + +var ZendeskConfigurationEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ZendeskConfigurationEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ZendeskConfiguration.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ZendeskConfigurationEvents.emit(event + ':' + doc._id, doc); + ZendeskConfigurationEvents.emit(event, doc); + done(null); + } +} + +module.exports = ZendeskConfigurationEvents; diff --git a/server/api/zendesk_configuration/zendesk_configuration.socket.js b/server/api/zendesk_configuration/zendesk_configuration.socket.js index 4d42d49..e6e6b68 100644 --- a/server/api/zendesk_configuration/zendesk_configuration.socket.js +++ b/server/api/zendesk_configuration/zendesk_configuration.socket.js @@ -1 +1,32 @@ -var _0xa1b2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xa1b2[0];const ZendeskConfigurationEvents=require(_0xa1b2[1]);var events=[_0xa1b2[2],_0xa1b2[3]];exports[_0xa1b2[4]]= function(_0x33dfx3){for(var _0x33dfx4=0,_0x33dfx5=events[_0xa1b2[5]];_0x33dfx4< _0x33dfx5;_0x33dfx4++){var _0x33dfx6=events[_0x33dfx4];var _0x33dfx7=createListener(_0xa1b2[6]+ _0x33dfx6,_0x33dfx3);ZendeskConfigurationEvents[_0xa1b2[7]](_0x33dfx6,_0x33dfx7);_0x33dfx3[_0xa1b2[7]](_0xa1b2[8],removeListener(_0x33dfx6,_0x33dfx7))}};function createListener(_0x33dfx6,_0x33dfx3){return function(_0x33dfx9){_0x33dfx3[_0xa1b2[9]](_0x33dfx6,_0x33dfx9)}}function removeListener(_0x33dfx6,_0x33dfx7){return function(){ZendeskConfigurationEvents[_0xa1b2[10]](_0x33dfx6,_0x33dfx7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ZendeskConfigurationEvents = require('./zendesk_configuration.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('zendesk_configuration:' + event, socket); + + ZendeskConfigurationEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ZendeskConfigurationEvents.removeListener(event, listener); + }; +} diff --git a/server/api/zendesk_field/index.js b/server/api/zendesk_field/index.js index b29602e..e84b58d 100644 --- a/server/api/zendesk_field/index.js +++ b/server/api/zendesk_field/index.js @@ -1 +1,14 @@ -var _0xf397=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x63\x6F\x6E\x74\x72\x6F\x6C\x6C\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x75\x74\x68\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x61\x64\x6D\x69\x6E","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x69\x6E\x64\x65\x78","\x67\x65\x74","\x2F\x3A\x69\x64","\x73\x68\x6F\x77","\x63\x72\x65\x61\x74\x65","\x70\x6F\x73\x74","\x75\x70\x64\x61\x74\x65","\x70\x75\x74","\x64\x65\x73\x74\x72\x6F\x79","\x64\x65\x6C\x65\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xf397[0];var express=require(_0xf397[1]);var controller=require(_0xf397[2]);var auth=require(_0xf397[3]);var router=express.Router();router[_0xf397[9]](_0xf397[4],auth[_0xf397[5]](),auth[_0xf397[7]]([19],[_0xf397[6]]),controller[_0xf397[8]]);router[_0xf397[9]](_0xf397[10],auth[_0xf397[5]](),auth[_0xf397[7]]([19],[_0xf397[6]]),controller[_0xf397[11]]);router[_0xf397[13]](_0xf397[4],auth[_0xf397[5]](),auth[_0xf397[7]]([19],[_0xf397[6]]),controller[_0xf397[12]]);router[_0xf397[15]](_0xf397[10],auth[_0xf397[5]](),auth[_0xf397[7]]([19],[_0xf397[6]]),controller[_0xf397[14]]);router[_0xf397[17]](_0xf397[10],auth[_0xf397[5]](),auth[_0xf397[7]]([19],[_0xf397[6]]),controller[_0xf397[16]]);module[_0xf397[18]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var controller = require('./zendesk_field.controller'); +var auth = require('../../auth/auth.service'); +var router = express.Router(); + +router.get('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.index); +router.get('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.show); +router.post('/', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.create); +router.put('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.update); +router.delete('/:id', auth.isAuthenticated(), auth.hasModule([19], ['admin']), controller.destroy); + +module.exports = router; diff --git a/server/api/zendesk_field/zendesk_field.controller.js b/server/api/zendesk_field/zendesk_field.controller.js index 9bc5646..48d0c38 100644 --- a/server/api/zendesk_field/zendesk_field.controller.js +++ b/server/api/zendesk_field/zendesk_field.controller.js @@ -1 +1,93 @@ -var _0xe30e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x5A\x65\x6E\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x6E\x64\x65\x78","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x68\x6F\x77","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x69\x64","\x70\x61\x72\x61\x6D\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x63\x72\x65\x61\x74\x65","\x62\x6F\x64\x79","\x75\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x64\x65\x73\x74\x72\x6F\x79"];_0xe30e[0];var _=require(_0xe30e[1]);var ZendeskField=require(_0xe30e[3])[_0xe30e[2]];exports[_0xe30e[4]]= function(_0x436ex3,_0x436ex4){ZendeskField[_0xe30e[9]]()[_0xe30e[8]](function(_0x436ex6){return _0x436ex4[_0xe30e[7]](200)[_0xe30e[6]](_0x436ex6)})[_0xe30e[5]](function(_0x436ex5){return handleError(_0x436ex4,_0x436ex5)})};exports[_0xe30e[10]]= function(_0x436ex3,_0x436ex4){ZendeskField[_0xe30e[14]](_0x436ex3[_0xe30e[13]][_0xe30e[12]])[_0xe30e[8]](function(_0x436ex7){if(!_0x436ex7){return _0x436ex4[_0xe30e[11]](404)};return _0x436ex4[_0xe30e[6]](_0x436ex7)})[_0xe30e[5]](function(_0x436ex5){return handleError(_0x436ex4,_0x436ex5)})};exports[_0xe30e[15]]= function(_0x436ex3,_0x436ex4){ZendeskField[_0xe30e[15]](_0x436ex3[_0xe30e[16]])[_0xe30e[8]](function(_0x436ex7){return _0x436ex4[_0xe30e[7]](201)[_0xe30e[6]](_0x436ex7)})[_0xe30e[5]](function(_0x436ex5){return handleError(_0x436ex4,_0x436ex5)})};exports[_0xe30e[17]]= function(_0x436ex3,_0x436ex4){if(_0x436ex3[_0xe30e[16]][_0xe30e[12]]){delete _0x436ex3[_0xe30e[16]][_0xe30e[12]]};ZendeskField[_0xe30e[14]](_0x436ex3[_0xe30e[13]][_0xe30e[12]])[_0xe30e[8]](function(_0x436ex7){if(!_0x436ex7){return _0x436ex4[_0xe30e[11]](404)};var _0x436ex8=_[_0xe30e[18]](_0x436ex7,_0x436ex3[_0xe30e[16]]);_0x436ex8[_0xe30e[19]]()[_0xe30e[8]](function(){return _0x436ex4[_0xe30e[7]](200)[_0xe30e[6]](_0x436ex7)})[_0xe30e[5]](function(_0x436ex5){return handleError(_0x436ex4,_0x436ex5)})})[_0xe30e[5]](function(_0x436ex5){return handleError(_0x436ex4,_0x436ex5)})};exports[_0xe30e[20]]= function(_0x436ex3,_0x436ex4){ZendeskField[_0xe30e[14]](_0x436ex3[_0xe30e[13]][_0xe30e[12]])[_0xe30e[8]](function(_0x436ex7){if(!_0x436ex7){return _0x436ex4[_0xe30e[11]](404)};_0x436ex7[_0xe30e[20]]()[_0xe30e[8]](function(){return _0x436ex4[_0xe30e[11]](204)})[_0xe30e[5]](function(_0x436ex5){return handleError(_0x436ex4,_0x436ex5)})})[_0xe30e[5]](function(_0x436ex5){return handleError(_0x436ex4,_0x436ex5)})};function handleError(_0x436ex4,_0x436ex5){return _0x436ex4[_0xe30e[7]](500)[_0xe30e[6]](_0x436ex5)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var ZendeskField = require('../../models').ZendeskField; + +// Get list of zendesk_fields +exports.index = function(req, res) { + ZendeskField + .findAll() + .then(function(zendesk_fields) { + return res.status(200).send(zendesk_fields); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Get a single zendesk_field +exports.show = function(req, res) { + ZendeskField + .findById(req.params.id) + .then(function(zendesk_field) { + if (!zendesk_field) { + return res.sendStatus(404); + } + return res.send(zendesk_field); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Creates a new zendesk_field in the DB. +exports.create = function(req, res) { + ZendeskField + .create(req.body) + .then(function(zendesk_field) { + return res.status(201).send(zendesk_field); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Updates an existing zendesk_field in the DB. +exports.update = function(req, res) { + if (req.body.id) { + delete req.body.id; + } + ZendeskField + .findById(req.params.id) + .then(function(zendesk_field) { + if (!zendesk_field) { + return res.sendStatus(404); + } + var updated = _.merge(zendesk_field, req.body); + updated.save() + .then(function() { + return res.status(200).send(zendesk_field); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +// Deletes a zendesk_field from the DB. +exports.destroy = function(req, res) { + ZendeskField + .findById(req.params.id) + .then(function(zendesk_field) { + if (!zendesk_field) { + return res.sendStatus(404); + } + zendesk_field.destroy() + .then(function() { + return res.sendStatus(204); + }) + .catch(function(err) { + return handleError(res, err); + }); + }) + .catch(function(err) { + return handleError(res, err); + }); +}; + +function handleError(res, err) { + return res.status(500).send(err); +} diff --git a/server/api/zendesk_field/zendesk_field.events.js b/server/api/zendesk_field/zendesk_field.events.js index 2aa5e34..3b68978 100644 --- a/server/api/zendesk_field/zendesk_field.events.js +++ b/server/api/zendesk_field/zendesk_field.events.js @@ -1 +1,36 @@ -var _0x54e2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x76\x65\x6E\x74\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x46\x69\x65\x6C\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x68\x6F\x6F\x6B","\x3A","\x5F\x69\x64","\x65\x6D\x69\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x54e2[0];const EventEmitter=require(_0x54e2[1]);const ZendeskField=require(_0x54e2[3])[_0x54e2[2]];var ZendeskFieldEvents= new EventEmitter();ZendeskFieldEvents[_0x54e2[4]](0);var events={"\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65":_0x54e2[5],"\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65":_0x54e2[5],"\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79":_0x54e2[6]};for(var e in events){var event=events[e];ZendeskField[_0x54e2[7]](e,emitEvent(event))};function emitEvent(event){return function(_0xa891x8,_0xa891x9,_0xa891xa){ZendeskFieldEvents[_0x54e2[10]](event+ _0x54e2[8]+ _0xa891x8[_0x54e2[9]],_0xa891x8);ZendeskFieldEvents[_0x54e2[10]](event,_0xa891x8);_0xa891xa(null)}}module[_0x54e2[11]]= ZendeskFieldEvents \ No newline at end of file +/** + * Thing model events + */ + +'use strict'; + +const EventEmitter = require('events'); +const ZendeskField = require('../../models').ZendeskField; + +var ZendeskFieldEvents = new EventEmitter(); + +// Set max event listeners (0 == unlimited) +ZendeskFieldEvents.setMaxListeners(0); + +// Model events +var events = { + 'afterCreate': 'save', + 'afterUpdate': 'save', + 'afterDestroy': 'remove' +}; + +// Register the event emitter to the model events +for (var e in events) { + var event = events[e]; + ZendeskField.hook(e, emitEvent(event)); +} + +function emitEvent(event) { + return function(doc, options, done) { + ZendeskFieldEvents.emit(event + ':' + doc._id, doc); + ZendeskFieldEvents.emit(event, doc); + done(null); + } +} + +module.exports = ZendeskFieldEvents; diff --git a/server/api/zendesk_field/zendesk_field.socket.js b/server/api/zendesk_field/zendesk_field.socket.js index b6a3022..891c45b 100644 --- a/server/api/zendesk_field/zendesk_field.socket.js +++ b/server/api/zendesk_field/zendesk_field.socket.js @@ -1 +1,32 @@ -var _0xd963=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x65\x76\x65\x6E\x74\x73","\x73\x61\x76\x65","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x65\x6E\x67\x74\x68","\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x3A","\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x65\x6D\x69\x74","\x72\x65\x6D\x6F\x76\x65\x4C\x69\x73\x74\x65\x6E\x65\x72"];_0xd963[0];const ZendeskFieldEvents=require(_0xd963[1]);var events=[_0xd963[2],_0xd963[3]];exports[_0xd963[4]]= function(_0x5ac5x3){for(var _0x5ac5x4=0,_0x5ac5x5=events[_0xd963[5]];_0x5ac5x4< _0x5ac5x5;_0x5ac5x4++){var _0x5ac5x6=events[_0x5ac5x4];var _0x5ac5x7=createListener(_0xd963[6]+ _0x5ac5x6,_0x5ac5x3);ZendeskFieldEvents[_0xd963[7]](_0x5ac5x6,_0x5ac5x7);_0x5ac5x3[_0xd963[7]](_0xd963[8],removeListener(_0x5ac5x6,_0x5ac5x7))}};function createListener(_0x5ac5x6,_0x5ac5x3){return function(_0x5ac5x9){_0x5ac5x3[_0xd963[9]](_0x5ac5x6,_0x5ac5x9)}}function removeListener(_0x5ac5x6,_0x5ac5x7){return function(){ZendeskFieldEvents[_0xd963[10]](_0x5ac5x6,_0x5ac5x7)}} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +const ZendeskFieldEvents = require('./zendesk_field.events'); + +// Model events to emit +var events = ['save', 'remove']; + +exports.register = function(socket) { + for (var i = 0, eventsLength = events.length; i < eventsLength; i++) { + var event = events[i]; + var listener = createListener('zendesk_field:' + event, socket); + + ZendeskFieldEvents.on(event, listener); + socket.on('disconnect', removeListener(event, listener)); + } +} + +function createListener(event, socket) { + return function(doc) { + socket.emit(event, doc); + }; +} + +function removeListener(event, listener) { + return function() { + ZendeskFieldEvents.removeListener(event, listener); + }; +} diff --git a/server/app.js b/server/app.js index 52247f2..9fcfe6a 100644 --- a/server/app.js +++ b/server/app.js @@ -1 +1,135 @@ -var _0xbcfb=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4E\x4F\x44\x45\x5F\x45\x4E\x56","\x65\x6E\x76","\x64\x65\x76\x65\x6C\x6F\x70\x6D\x65\x6E\x74","\x4E\x4F\x44\x45\x5F\x54\x4C\x53\x5F\x52\x45\x4A\x45\x43\x54\x5F\x55\x4E\x41\x55\x54\x48\x4F\x52\x49\x5A\x45\x44","\x75\x6E\x63\x61\x75\x67\x68\x74\x45\x78\x63\x65\x70\x74\x69\x6F\x6E","\x6F\x62\x6A\x65\x63\x74","\x6D\x65\x73\x73\x61\x67\x65","\x0A\x4D\x65\x73\x73\x61\x67\x65\x3A\x20","\x6C\x6F\x67","\x73\x74\x61\x63\x6B","\x0A\x53\x74\x61\x63\x6B\x74\x72\x61\x63\x65\x3A","\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D","\x64\x75\x6D\x70\x45\x72\x72\x6F\x72\x20\x3A\x3A\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x20\x69\x73\x20\x6E\x6F\x74\x20\x61\x6E\x20\x6F\x62\x6A\x65\x63\x74","\x6F\x6E","\x6F\x73","\x68\x74\x74\x70","\x75\x74\x69\x6C","\x63\x72\x79\x70\x74\x6F","\x43\x72\x6F\x6E\x4A\x6F\x62","\x63\x72\x6F\x6E","\x73\x68\x65\x6C\x6C\x6A\x73\x2F\x67\x6C\x6F\x62\x61\x6C","\x73\x74\x69\x63\x6B\x79\x2D\x73\x65\x73\x73\x69\x6F\x6E","\x65\x78\x70\x72\x65\x73\x73","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x6F\x63\x6B\x65\x74\x2E\x69\x6F","\x73\x6F\x63\x6B\x65\x74\x2E\x69\x6F\x2D\x72\x65\x64\x69\x73","\x63\x72\x65\x61\x74\x65\x53\x65\x72\x76\x65\x72","\x70\x6F\x72\x74","\x69\x70","\x45\x78\x70\x72\x65\x73\x73\x20\x73\x65\x72\x76\x65\x72\x20\x6C\x69\x73\x74\x65\x6E\x69\x6E\x67\x20\x6F\x6E\x20\x25\x64\x2C\x20\x69\x6E\x20\x25\x73\x20\x6D\x6F\x64\x65","\x67\x65\x74","\x6C\x69\x73\x74\x65\x6E","\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E","\x2F\x73\x6F\x63\x6B\x65\x74\x2E\x69\x6F\x2D\x63\x6C\x69\x65\x6E\x74","\x72\x65\x64\x69\x73\x50\x77\x64","\x63\x72\x65\x61\x74\x65\x43\x6C\x69\x65\x6E\x74","\x72\x65\x64\x69\x73","\x61\x64\x61\x70\x74\x65\x72","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x78\x70\x72\x65\x73\x73","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x68\x69\x73\x74\x6F\x72\x79\x2F\x68\x69\x73\x74\x6F\x72\x79","\x74\x68\x65\x6E","\x73\x79\x6E\x63","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65\x5F\x68\x69\x73\x74\x6F\x72\x79","\x73\x65\x65\x64\x44\x42","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x73\x65\x65\x64","\x73\x65\x65\x64\x50\x44\x42","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x73\x65\x65\x64\x70","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x61\x6D\x69","\x2E\x2F\x72\x6F\x75\x74\x65\x73","\x2E\x2F\x73\x65\x72\x76\x69\x63\x65\x73\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x73\x6F\x63\x6B\x65\x74\x69\x6F","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x73\x2F\x6D\x61\x69\x6C","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x73\x2F\x66\x61\x78","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x73\x2F\x63\x68\x61\x74","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x74\x72\x69\x67\x67\x65\x72\x73","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x73\x63\x68\x65\x64\x75\x6C\x65\x72","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x69\x6D\x61\x70","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x73\x6D\x74\x70","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x73\x6D\x73","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x63\x68\x61\x74","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x74\x6F\x6F\x6C\x73","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x61\x67\x69","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xbcfb[0];process[_0xbcfb[2]][_0xbcfb[1]]= process[_0xbcfb[2]][_0xbcfb[1]]|| _0xbcfb[3];process[_0xbcfb[2]][_0xbcfb[4]]= 0;process[_0xbcfb[14]](_0xbcfb[5],function(_0x1f9fx1){if( typeof _0x1f9fx1=== _0xbcfb[6]){if(_0x1f9fx1[_0xbcfb[7]]){console[_0xbcfb[9]](_0xbcfb[8]+ _0x1f9fx1[_0xbcfb[7]])};if(_0x1f9fx1[_0xbcfb[10]]){console[_0xbcfb[9]](_0xbcfb[11]);console[_0xbcfb[9]](_0xbcfb[12]);console[_0xbcfb[9]](_0x1f9fx1[_0xbcfb[10]])}}else {console[_0xbcfb[9]](_0xbcfb[13])}});var os=require(_0xbcfb[15]);var http=require(_0xbcfb[16]);var util=require(_0xbcfb[17]);var crypto=require(_0xbcfb[18]);var cronjob=require(_0xbcfb[20])[_0xbcfb[19]];var shelljs=require(_0xbcfb[21]);var sticky=require(_0xbcfb[22]);var express=require(_0xbcfb[23]);var config=require(_0xbcfb[24]);var models=require(_0xbcfb[25]);var sio=require(_0xbcfb[26]);var sio_redis=require(_0xbcfb[27]);var app=express();var server=http[_0xbcfb[28]](app);server[_0xbcfb[33]](config[_0xbcfb[29]],config[_0xbcfb[30]],function(){console[_0xbcfb[9]](_0xbcfb[31],config[_0xbcfb[29]],app[_0xbcfb[32]](_0xbcfb[2]))});var io=sio(server,{serveClient:(config[_0xbcfb[2]]=== _0xbcfb[34])?false:true,path:_0xbcfb[35]});if(config[_0xbcfb[36]]){var redis=require(_0xbcfb[38])[_0xbcfb[37]];var pub=redis(6379,config[_0xbcfb[30]],{password:config[_0xbcfb[36]]});var sub=redis(6379,config[_0xbcfb[30]],{return_buffers:true,password:config[_0xbcfb[36]]});io[_0xbcfb[39]](sio_redis({pubClient:pub,subClient:sub}))}else {io[_0xbcfb[39]](sio_redis({host:config[_0xbcfb[30]],port:6379}))};require(_0xbcfb[40])(app);models[_0xbcfb[68]][_0xbcfb[45]]()[_0xbcfb[44]](function(){if(config[_0xbcfb[47]]){require(_0xbcfb[48])};if(config[_0xbcfb[49]]){require(_0xbcfb[50])};var _0x1f9fx14=require(_0xbcfb[51]);require(_0xbcfb[52])(app,_0x1f9fx14);require(_0xbcfb[53])(_0x1f9fx14);require(_0xbcfb[54])(io);require(_0xbcfb[55])();require(_0xbcfb[56])();require(_0xbcfb[57])();require(_0xbcfb[58])(_0x1f9fx14);require(_0xbcfb[59])();require(_0xbcfb[60])();require(_0xbcfb[61])();require(_0xbcfb[62])();require(_0xbcfb[63])();require(_0xbcfb[64])();require(_0xbcfb[65])();require(_0xbcfb[66])();require(_0xbcfb[67])()})[_0xbcfb[44]](function(){return models[_0xbcfb[46]][_0xbcfb[45]]()})[_0xbcfb[44]](function(){require(_0xbcfb[43])(cronjob)})[_0xbcfb[42]](function(_0x1f9fx1){console[_0xbcfb[41]](_0x1f9fx1)});exports= module[_0xbcfb[69]]= app \ No newline at end of file +'use strict'; + +/** + * Main application file + */ + + +// Set default node environment to development +process.env.NODE_ENV = process.env.NODE_ENV || 'development'; +process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0; + +process.on('uncaughtException', function(err) { + if (typeof err === 'object') { + if (err.message) { + console.log('\nMessage: ' + err.message) + } + if (err.stack) { + console.log('\nStacktrace:') + console.log('====================') + console.log(err.stack); + } + } else { + console.log('dumpError :: argument is not an object'); + } +}); + +var os = require('os'); +var http = require('http'); +var util = require('util'); +var crypto = require('crypto'); +var cronjob = require('cron').CronJob; +var shelljs = require('shelljs/global'); +var sticky = require('sticky-session'); + +var express = require('express'); +var config = require('./config/environment'); +var models = require('./models'); + +var sio = require('socket.io'); +var sio_redis = require('socket.io-redis'); + +var heapdump = require('heapdump'); +var nextMBThreeshold = 0; +setInterval(function() { + var memMB = process.memoryUsage().rss / 1048576; + if (memMB >= nextMBThreeshold) { + heapdump.writeSnapshot('/var/local/xcally/' + Date.now() + '.heapsnapshot'); + nextMBThreeshold += 100; + } +}, 6000 * 2); + +// Setup server +var app = express(); +var server = http.createServer(app); + +// Start server +server.listen(config.port, config.ip, function() { + console.log('Express server listening on %d, in %s mode', config.port, app.get('env')); +}); + +var io = sio(server, { + serveClient: (config.env === 'production') ? false : true, + path: '/socket.io-client' +}); + +if (config.redisPwd) { + var redis = require('redis').createClient; + var pub = redis(6379, config.ip, { + password: config.redisPwd + }); + var sub = redis(6379, config.ip, { + return_buffers: true, + password: config.redisPwd + }); + io.adapter(sio_redis({ + pubClient: pub, + subClient: sub + })); +} else { + io.adapter(sio_redis({ + host: config.ip, + port: 6379 + })); +} + +require('./config/express')(app); + +models + .sequelize + .sync() + .then(function() { + + // Populate DB Develop with sample data + if (config.seedDB) { + require('./config/seed'); + } + // Populate DB Production with sample data + if (config.seedPDB) { + require('./config/seedp'); + } + + var cpAmi = require('./config/ami'); + + require('./routes')(app, cpAmi); + require('./services/dashboard')(cpAmi) + require('./config/socketio')(io); + require('./config/automations/mail')(); + require('./config/automations/fax')(); + require('./config/automations/chat')(); + require('./config/triggers')(cpAmi); + require('./config/scheduler')(); + require('./config/imap')(); + require('./config/smtp')(); + require('./config/sms')(); + require('./config/chat')(); + require('./config/openchannel')(); + require('./config/tools')(); + require('./config/agi')(); + require('./config/license')(); + }) + .then(function() { + // Connect to database history + return models + .sequelize_history + .sync(); + }) + .then(function() { + require('./config/history/history')(cronjob); + }) + .catch(function(err) { + console.error(err); + }); + +// Expose app +exports = module.exports = app; diff --git a/server/auth/auth.service.js b/server/auth/auth.service.js index 095c322..e82ba59 100644 --- a/server/auth/auth.service.js +++ b/server/auth/auth.service.js @@ -1 +1,150 @@ -var _0xeb7c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x6A\x73\x6F\x6E\x77\x65\x62\x74\x6F\x6B\x65\x6E","\x65\x78\x70\x72\x65\x73\x73\x2D\x6A\x77\x74","\x63\x6F\x6D\x70\x6F\x73\x61\x62\x6C\x65\x2D\x6D\x69\x64\x64\x6C\x65\x77\x61\x72\x65","\x55\x73\x65\x72","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4C\x69\x73\x74","\x73\x65\x63\x72\x65\x74","\x73\x65\x73\x73\x69\x6F\x6E","\x62\x6C\x75\x65\x62\x69\x72\x64","\x6C\x6F\x64\x61\x73\x68","\x63\x61\x74\x63\x68","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x75\x73\x65\x72","\x74\x68\x65\x6E","\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65","\x71\x75\x65\x72\x79","\x61\x63\x63\x65\x73\x73\x5F\x74\x6F\x6B\x65\x6E","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x61\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x68\x65\x61\x64\x65\x72\x73","\x42\x65\x61\x72\x65\x72\x20","\x42\x61\x73\x69\x63","\x73\x74\x61\x72\x74\x73\x57\x69\x74\x68","\x20","\x73\x70\x6C\x69\x74","\x61\x73\x63\x69\x69","\x62\x61\x73\x65\x36\x34","\x3A","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x57\x72\x6F\x6E\x67\x20\x63\x72\x65\x64\x65\x6E\x74\x69\x61\x6C\x73\x2E","\x66\x69\x6E\x64\x4F\x6E\x65","\x72\x65\x64\x75\x63\x65","\x72\x6F\x6C\x65","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x68\x61\x73\x4D\x6F\x64\x75\x6C\x65","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x61\x6C\x6C","\x52\x65\x71\x75\x69\x72\x65\x64\x20\x72\x6F\x6C\x65\x20\x6E\x65\x65\x64\x73\x20\x74\x6F\x20\x62\x65\x20\x73\x65\x74","\x69\x6E\x64\x65\x78\x4F\x66","\x75\x73\x65\x72\x52\x6F\x6C\x65\x73","\x31\x64","\x73\x69\x67\x6E","\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x77\x65\x6E\x74\x20\x77\x72\x6F\x6E\x67\x2C\x20\x70\x6C\x65\x61\x73\x65\x20\x74\x72\x79\x20\x61\x67\x61\x69\x6E\x2E","\x6A\x73\x6F\x6E","\x74\x6F\x6B\x65\x6E","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x63\x6F\x6F\x6B\x69\x65","\x2F","\x72\x65\x64\x69\x72\x65\x63\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x68\x61\x73\x52\x6F\x6C\x65","\x73\x69\x67\x6E\x54\x6F\x6B\x65\x6E","\x73\x65\x74\x54\x6F\x6B\x65\x6E\x43\x6F\x6F\x6B\x69\x65"];_0xeb7c[0];var passport=require(_0xeb7c[1]);var config=require(_0xeb7c[2]);var jwt=require(_0xeb7c[3]);var expressJwt=require(_0xeb7c[4]);var compose=require(_0xeb7c[5]);var User=require(_0xeb7c[7])[_0xeb7c[6]];var List=require(_0xeb7c[7])[_0xeb7c[8]];var validateJwt=expressJwt({secret:config[_0xeb7c[10]][_0xeb7c[9]]});var Promise=require(_0xeb7c[11]);var _=require(_0xeb7c[12]);function isAuthenticated(){return compose()[_0xeb7c[19]](function(_0x4e2exc,_0x4e2exd,_0x4e2exe){if(_0x4e2exc[_0xeb7c[20]]&& _0x4e2exc[_0xeb7c[20]][_0xeb7c[22]](_0xeb7c[21])){_0x4e2exc[_0xeb7c[24]][_0xeb7c[23]]= _0xeb7c[25]+ _0x4e2exc[_0xeb7c[20]][_0xeb7c[21]]};if(_0x4e2exc[_0xeb7c[24]]&& _0x4e2exc[_0xeb7c[24]][_0xeb7c[23]]&& _[_0xeb7c[27]](_0x4e2exc[_0xeb7c[24]][_0xeb7c[23]],_0xeb7c[26])){var _0x4e2ex11=_[_0xeb7c[29]](_0x4e2exc[_0xeb7c[24]][_0xeb7c[23]],_0xeb7c[28]);var _0x4e2ex12= new Buffer(_0x4e2ex11[1],_0xeb7c[31]).toString(_0xeb7c[30]);var _0x4e2ex13=_[_0xeb7c[29]](_0x4e2ex12,_0xeb7c[32])[0];var _0x4e2ex14=_[_0xeb7c[29]](_0x4e2ex12,_0xeb7c[32])[1];return User[_0xeb7c[35]]({where:{name:_0x4e2ex13}})[_0xeb7c[16]](function(_0x4e2ex10){if(!_0x4e2ex10|| !_0x4e2ex10[_0xeb7c[33]](_0x4e2ex14)){_0x4e2exe( new Error(_0xeb7c[34]))};_0x4e2exc[_0xeb7c[15]]= {id:_0x4e2ex10[_0xeb7c[17]]};_0x4e2exe()})}else {validateJwt(_0x4e2exc,_0x4e2exd,_0x4e2exe)}})[_0xeb7c[19]](function(_0x4e2exc,_0x4e2exd,_0x4e2exe){User[_0xeb7c[18]](_0x4e2exc[_0xeb7c[15]][_0xeb7c[17]],{include:[{model:List}]})[_0xeb7c[16]](function(_0x4e2ex10){if(!_0x4e2ex10){return _0x4e2exd[_0xeb7c[14]](401)};_0x4e2exc[_0xeb7c[15]]= _0x4e2ex10;return _0x4e2exe()})[_0xeb7c[13]](function(_0x4e2exf){return _0x4e2exe(_0x4e2exf)})})}function hasModule(_0x4e2ex16,_0x4e2ex17){return compose()[_0xeb7c[19]](function(_0x4e2exc,_0x4e2exd,_0x4e2exe){return User[_0xeb7c[18]](_0x4e2exc[_0xeb7c[15]][_0xeb7c[17]])[_0xeb7c[16]](function(_0x4e2ex10){var _0x4e2ex1b=[];_0x4e2ex16[_0xeb7c[41]](function(_0x4e2ex1c){_0x4e2ex1b[_0xeb7c[40]](_0x4e2ex10[_0xeb7c[39]](_0x4e2ex1c))});return Promise[_0xeb7c[42]](_0x4e2ex1b)})[_0xeb7c[16]](function(_0x4e2ex18){var hasModule=(_[_0xeb7c[36]](_0x4e2ex18,function(_0x4e2ex19,_0x4e2ex1a){return _0x4e2ex19|| _0x4e2ex1a}));if(_[_0xeb7c[38]](_0x4e2ex17,_0x4e2exc[_0xeb7c[15]][_0xeb7c[37]])|| hasModule){return _0x4e2exe()}else {_0x4e2exd[_0xeb7c[14]](403)}})[_0xeb7c[13]](function(_0x4e2exf){return _0x4e2exe(_0x4e2exf)})})}function hasRole(_0x4e2ex1e){if(!_0x4e2ex1e){throw new Error(_0xeb7c[43])};return compose()[_0xeb7c[19]](isAuthenticated())[_0xeb7c[19]](function _0x4e2ex1f(_0x4e2exc,_0x4e2exd,_0x4e2exe){if(config[_0xeb7c[45]][_0xeb7c[44]](_0x4e2exc[_0xeb7c[15]][_0xeb7c[37]])>= config[_0xeb7c[45]][_0xeb7c[44]](_0x4e2ex1e)){return _0x4e2exe()}else {return _0x4e2exd[_0xeb7c[14]](403)}})}function signToken(_0x4e2ex21,_0x4e2ex22,_0x4e2ex23){var _0x4e2ex24=60* 24* 365* 5;if(!_0x4e2ex23){_0x4e2ex24= _0xeb7c[46]};return jwt[_0xeb7c[47]]({id:_0x4e2ex21},config[_0xeb7c[10]][_0xeb7c[9]],{expiresIn:_0x4e2ex24})}function setTokenCookie(_0x4e2exc,_0x4e2exd){if(!_0x4e2exc[_0xeb7c[15]]){return _0x4e2exd[_0xeb7c[49]](404,{message:_0xeb7c[48]})};var _0x4e2ex26=signToken(_0x4e2exc[_0xeb7c[15]][_0xeb7c[17]],_0x4e2exc[_0xeb7c[15]][_0xeb7c[37]]);_0x4e2exd[_0xeb7c[52]](_0xeb7c[50],JSON[_0xeb7c[51]](_0x4e2ex26));_0x4e2exd[_0xeb7c[54]](_0xeb7c[53])}exports[_0xeb7c[55]]= isAuthenticated;exports[_0xeb7c[56]]= hasRole;exports[_0xeb7c[39]]= hasModule;exports[_0xeb7c[57]]= signToken;exports[_0xeb7c[58]]= setTokenCookie \ No newline at end of file +'use strict'; + +//var mongoose = require('mongoose'); +var passport = require('passport'); +var config = require('../config/environment'); +var jwt = require('jsonwebtoken'); +var expressJwt = require('express-jwt'); +var compose = require('composable-middleware'); +// var User = require('../api/user/user.model'); +var User = require('../models').User; +var List = require('../models').List; +var validateJwt = expressJwt({ + secret: config.session.secret +}); +var Promise = require('bluebird'); +var _ = require('lodash'); + +/** + * Attaches the user object to the request if authenticated + * Otherwise returns 403 + */ +function isAuthenticated() { + return compose() + // Validate jwt + .use(function(req, res, next) { + // allow access_token to be passed through query parameter as well + if (req.query && req.query.hasOwnProperty('access_token')) { + req.headers.authorization = 'Bearer ' + req.query.access_token; + } + if (req.headers && req.headers.authorization && _.startsWith(req.headers.authorization, 'Basic')) { + var arrAuth = _.split(req.headers.authorization, ' '); + var authString = new Buffer(arrAuth[1], 'base64').toString("ascii"); + var username = _.split(authString, ':')[0]; + var pwd = _.split(authString, ':')[1]; + return User.findOne({ + where: { + name: username + } + }) + .then(function(user) { + if (!user || !user.authenticate(pwd)) { + next(new Error('Wrong credentials.')); + } + req.user = { + id: user.id + }; + next(); + }) + } else { + validateJwt(req, res, next); + } + }) + // Attach user to request + .use(function(req, res, next) { + User + .findById(req.user.id, { + include: [{ + model: List + }] + }) + .then(function(user) { + if (!user) return res.sendStatus(401); + req.user = user; + return next(); + }) + .catch(function(err) { + return next(err); + }); + }); +} + +/** + * Checks if the module meets the requirements + */ +function hasModule(modules, roles) { + return compose() + .use(function(req, res, next) { + return User + .findById(req.user.id) + .then(function(user) { + var bulkModule = []; + modules.forEach(function(element) { + bulkModule.push(user.hasModule(element)); + }); + return Promise.all(bulkModule); + }) + .then(function(hasModuleArr) { + var hasModule = (_.reduce(hasModuleArr, function(total, n) { + return total || n; + })); + if (_.includes(roles, req.user.role) || hasModule) { + return next(); + } else { + res.sendStatus(403); + } + }) + .catch(function(err) { + return next(err); + }); + }); +} + +/** + * Checks if the user role meets the minimum requirements of the route + */ +function hasRole(roleRequired) { + if (!roleRequired) throw new Error('Required role needs to be set'); + + return compose() + .use(isAuthenticated()) + .use(function meetsRequirements(req, res, next) { + if (config.userRoles.indexOf(req.user.role) >= config.userRoles.indexOf(roleRequired)) { + return next(); + } else { + return res.sendStatus(403); + } + }); +} + +/** + * Returns a jwt token signed by the app secret + */ +function signToken(id, role, remember) { + var expiresIn = 60 * 24 * 365 * 5; //If remember, it expires in 5 years + if (!remember) + expiresIn = "1d"; //Expire in one day + return jwt.sign({ + id: id + }, config.session.secret, { + expiresIn: expiresIn + }); +} + +/** + * Set token cookie directly for oAuth strategies + */ +function setTokenCookie(req, res) { + if (!req.user) return res.json(404, { + message: 'Something went wrong, please try again.' + }); + var token = signToken(req.user.id, req.user.role); + res.cookie('token', JSON.stringify(token)); + res.redirect('/'); +} + +exports.isAuthenticated = isAuthenticated; +exports.hasRole = hasRole; +exports.hasModule = hasModule; +exports.signToken = signToken; +exports.setTokenCookie = setTokenCookie; diff --git a/server/auth/facebook/index.js b/server/auth/facebook/index.js index 690c045..4a6f878 100644 --- a/server/auth/facebook/index.js +++ b/server/auth/facebook/index.js @@ -1 +1,21 @@ -var _0xc577=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2E\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x66\x61\x63\x65\x62\x6F\x6F\x6B","\x2F\x73\x69\x67\x6E\x75\x70","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x73\x65\x74\x54\x6F\x6B\x65\x6E\x43\x6F\x6F\x6B\x69\x65","\x67\x65\x74","\x2F","\x65\x6D\x61\x69\x6C","\x75\x73\x65\x72\x5F\x61\x62\x6F\x75\x74\x5F\x6D\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xc577[0];var express=require(_0xc577[1]);var passport=require(_0xc577[2]);var auth=require(_0xc577[3]);var router=express.Router();router[_0xc577[9]](_0xc577[10],passport[_0xc577[7]](_0xc577[5],{scope:[_0xc577[11],_0xc577[12]],failureRedirect:_0xc577[6],session:false}))[_0xc577[9]](_0xc577[4],passport[_0xc577[7]](_0xc577[5],{failureRedirect:_0xc577[6],session:false}),auth[_0xc577[8]]);module[_0xc577[13]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var passport = require('passport'); +var auth = require('../auth.service'); + +var router = express.Router(); + +router + .get('/', passport.authenticate('facebook', { + scope: ['email', 'user_about_me'], + failureRedirect: '/signup', + session: false + })) + + .get('/callback', passport.authenticate('facebook', { + failureRedirect: '/signup', + session: false + }), auth.setTokenCookie); + +module.exports = router; \ No newline at end of file diff --git a/server/auth/facebook/passport.js b/server/auth/facebook/passport.js index 56b7159..90ae489 100644 --- a/server/auth/facebook/passport.js +++ b/server/auth/facebook/passport.js @@ -1 +1,37 @@ -var _0x1390=["\x70\x61\x73\x73\x70\x6F\x72\x74","\x53\x74\x72\x61\x74\x65\x67\x79","\x70\x61\x73\x73\x70\x6F\x72\x74\x2D\x66\x61\x63\x65\x62\x6F\x6F\x6B","\x73\x65\x74\x75\x70","\x63\x6C\x69\x65\x6E\x74\x49\x44","\x66\x61\x63\x65\x62\x6F\x6F\x6B","\x63\x6C\x69\x65\x6E\x74\x53\x65\x63\x72\x65\x74","\x63\x61\x6C\x6C\x62\x61\x63\x6B\x55\x52\x4C","\x69\x64","\x64\x69\x73\x70\x6C\x61\x79\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x65\x6D\x61\x69\x6C\x73","\x75\x73\x65\x72","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x5F\x6A\x73\x6F\x6E","\x73\x61\x76\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x75\x73\x65"];var passport=require(_0x1390[0]);var FacebookStrategy=require(_0x1390[2])[_0x1390[1]];exports[_0x1390[3]]= function(_0xba7ex3,_0xba7ex4){passport[_0x1390[17]]( new FacebookStrategy({clientID:_0xba7ex4[_0x1390[5]][_0x1390[4]],clientSecret:_0xba7ex4[_0x1390[5]][_0x1390[6]],callbackURL:_0xba7ex4[_0x1390[5]][_0x1390[7]]},function(_0xba7ex5,_0xba7ex6,_0xba7ex7,_0xba7ex8){_0xba7ex3[_0x1390[16]]({"\x66\x61\x63\x65\x62\x6F\x6F\x6B\x2E\x69\x64":_0xba7ex7[_0x1390[8]]},function(_0xba7ex9,_0xba7exa){if(_0xba7ex9){return _0xba7ex8(_0xba7ex9)};if(!_0xba7exa){_0xba7exa= new _0xba7ex3({name:_0xba7ex7[_0x1390[9]],email:_0xba7ex7[_0x1390[11]][0][_0x1390[10]],role:_0x1390[12],username:_0xba7ex7[_0x1390[13]],provider:_0x1390[5],facebook:_0xba7ex7[_0x1390[14]]});_0xba7exa[_0x1390[15]](function(_0xba7ex9){if(_0xba7ex9){_0xba7ex8(_0xba7ex9)};return _0xba7ex8(_0xba7ex9,_0xba7exa)})}else {return _0xba7ex8(_0xba7ex9,_0xba7exa)}})}))} \ No newline at end of file +var passport = require('passport'); +var FacebookStrategy = require('passport-facebook').Strategy; + +exports.setup = function (User, config) { + passport.use(new FacebookStrategy({ + clientID: config.facebook.clientID, + clientSecret: config.facebook.clientSecret, + callbackURL: config.facebook.callbackURL + }, + function(accessToken, refreshToken, profile, done) { + User.findOne({ + 'facebook.id': profile.id + }, + function(err, user) { + if (err) { + return done(err); + } + if (!user) { + user = new User({ + name: profile.displayName, + email: profile.emails[0].value, + role: 'user', + username: profile.username, + provider: 'facebook', + facebook: profile._json + }); + user.save(function(err) { + if (err) done(err); + return done(err, user); + }); + } else { + return done(err, user); + } + }) + } + )); +}; \ No newline at end of file diff --git a/server/auth/google/index.js b/server/auth/google/index.js index 4184bf3..9b1ce39 100644 --- a/server/auth/google/index.js +++ b/server/auth/google/index.js @@ -1 +1,24 @@ -var _0x26a3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2E\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x67\x6F\x6F\x67\x6C\x65","\x2F\x73\x69\x67\x6E\x75\x70","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x73\x65\x74\x54\x6F\x6B\x65\x6E\x43\x6F\x6F\x6B\x69\x65","\x67\x65\x74","\x2F","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x67\x6F\x6F\x67\x6C\x65\x61\x70\x69\x73\x2E\x63\x6F\x6D\x2F\x61\x75\x74\x68\x2F\x75\x73\x65\x72\x69\x6E\x66\x6F\x2E\x70\x72\x6F\x66\x69\x6C\x65","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x67\x6F\x6F\x67\x6C\x65\x61\x70\x69\x73\x2E\x63\x6F\x6D\x2F\x61\x75\x74\x68\x2F\x75\x73\x65\x72\x69\x6E\x66\x6F\x2E\x65\x6D\x61\x69\x6C","\x65\x78\x70\x6F\x72\x74\x73"];_0x26a3[0];var express=require(_0x26a3[1]);var passport=require(_0x26a3[2]);var auth=require(_0x26a3[3]);var router=express.Router();router[_0x26a3[9]](_0x26a3[10],passport[_0x26a3[7]](_0x26a3[5],{failureRedirect:_0x26a3[6],scope:[_0x26a3[11],_0x26a3[12]],session:false}))[_0x26a3[9]](_0x26a3[4],passport[_0x26a3[7]](_0x26a3[5],{failureRedirect:_0x26a3[6],session:false}),auth[_0x26a3[8]]);module[_0x26a3[13]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var passport = require('passport'); +var auth = require('../auth.service'); + +var router = express.Router(); + +router + .get('/', passport.authenticate('google', { + failureRedirect: '/signup', + scope: [ + 'https://www.googleapis.com/auth/userinfo.profile', + 'https://www.googleapis.com/auth/userinfo.email' + ], + session: false + })) + + .get('/callback', passport.authenticate('google', { + failureRedirect: '/signup', + session: false + }), auth.setTokenCookie); + +module.exports = router; \ No newline at end of file diff --git a/server/auth/google/passport.js b/server/auth/google/passport.js index d244d96..d304e8a 100644 --- a/server/auth/google/passport.js +++ b/server/auth/google/passport.js @@ -1 +1,33 @@ -var _0xfde6=["\x70\x61\x73\x73\x70\x6F\x72\x74","\x4F\x41\x75\x74\x68\x32\x53\x74\x72\x61\x74\x65\x67\x79","\x70\x61\x73\x73\x70\x6F\x72\x74\x2D\x67\x6F\x6F\x67\x6C\x65\x2D\x6F\x61\x75\x74\x68","\x73\x65\x74\x75\x70","\x63\x6C\x69\x65\x6E\x74\x49\x44","\x67\x6F\x6F\x67\x6C\x65","\x63\x6C\x69\x65\x6E\x74\x53\x65\x63\x72\x65\x74","\x63\x61\x6C\x6C\x62\x61\x63\x6B\x55\x52\x4C","\x69\x64","\x64\x69\x73\x70\x6C\x61\x79\x4E\x61\x6D\x65","\x76\x61\x6C\x75\x65","\x65\x6D\x61\x69\x6C\x73","\x75\x73\x65\x72","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x5F\x6A\x73\x6F\x6E","\x73\x61\x76\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x75\x73\x65"];var passport=require(_0xfde6[0]);var GoogleStrategy=require(_0xfde6[2])[_0xfde6[1]];exports[_0xfde6[3]]= function(_0xe8b3x3,_0xe8b3x4){passport[_0xfde6[17]]( new GoogleStrategy({clientID:_0xe8b3x4[_0xfde6[5]][_0xfde6[4]],clientSecret:_0xe8b3x4[_0xfde6[5]][_0xfde6[6]],callbackURL:_0xe8b3x4[_0xfde6[5]][_0xfde6[7]]},function(_0xe8b3x5,_0xe8b3x6,_0xe8b3x7,_0xe8b3x8){_0xe8b3x3[_0xfde6[16]]({"\x67\x6F\x6F\x67\x6C\x65\x2E\x69\x64":_0xe8b3x7[_0xfde6[8]]},function(_0xe8b3x9,_0xe8b3xa){if(!_0xe8b3xa){_0xe8b3xa= new _0xe8b3x3({name:_0xe8b3x7[_0xfde6[9]],email:_0xe8b3x7[_0xfde6[11]][0][_0xfde6[10]],role:_0xfde6[12],username:_0xe8b3x7[_0xfde6[13]],provider:_0xfde6[5],google:_0xe8b3x7[_0xfde6[14]]});_0xe8b3xa[_0xfde6[15]](function(_0xe8b3x9){if(_0xe8b3x9){_0xe8b3x8(_0xe8b3x9)};return _0xe8b3x8(_0xe8b3x9,_0xe8b3xa)})}else {return _0xe8b3x8(_0xe8b3x9,_0xe8b3xa)}})}))} \ No newline at end of file +var passport = require('passport'); +var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy; + +exports.setup = function (User, config) { + passport.use(new GoogleStrategy({ + clientID: config.google.clientID, + clientSecret: config.google.clientSecret, + callbackURL: config.google.callbackURL + }, + function(accessToken, refreshToken, profile, done) { + User.findOne({ + 'google.id': profile.id + }, function(err, user) { + if (!user) { + user = new User({ + name: profile.displayName, + email: profile.emails[0].value, + role: 'user', + username: profile.username, + provider: 'google', + google: profile._json + }); + user.save(function(err) { + if (err) done(err); + return done(err, user); + }); + } else { + return done(err, user); + } + }); + } + )); +}; diff --git a/server/auth/index.js b/server/auth/index.js index b393e51..42c323f 100644 --- a/server/auth/index.js +++ b/server/auth/index.js @@ -1 +1,22 @@ -var _0x3c37=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x74\x75\x70","\x2E\x2F\x6C\x6F\x63\x61\x6C\x2F\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2F\x66\x61\x63\x65\x62\x6F\x6F\x6B\x2F\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2F\x67\x6F\x6F\x67\x6C\x65\x2F\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2F\x74\x77\x69\x74\x74\x65\x72\x2F\x70\x61\x73\x73\x70\x6F\x72\x74","\x2F\x6C\x6F\x63\x61\x6C","\x2E\x2F\x6C\x6F\x63\x61\x6C","\x75\x73\x65","\x2F\x66\x61\x63\x65\x62\x6F\x6F\x6B","\x2E\x2F\x66\x61\x63\x65\x62\x6F\x6F\x6B","\x2F\x74\x77\x69\x74\x74\x65\x72","\x2E\x2F\x74\x77\x69\x74\x74\x65\x72","\x2F\x67\x6F\x6F\x67\x6C\x65","\x2E\x2F\x67\x6F\x6F\x67\x6C\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x3c37[0];var express=require(_0x3c37[1]);var passport=require(_0x3c37[2]);var config=require(_0x3c37[3]);var User=require(_0x3c37[5])[_0x3c37[4]];require(_0x3c37[7])[_0x3c37[6]](User,config);require(_0x3c37[8])[_0x3c37[6]](User,config);require(_0x3c37[9])[_0x3c37[6]](User,config);require(_0x3c37[10])[_0x3c37[6]](User,config);var router=express.Router();router[_0x3c37[13]](_0x3c37[11],require(_0x3c37[12]));router[_0x3c37[13]](_0x3c37[14],require(_0x3c37[15]));router[_0x3c37[13]](_0x3c37[16],require(_0x3c37[17]));router[_0x3c37[13]](_0x3c37[18],require(_0x3c37[19]));module[_0x3c37[20]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var passport = require('passport'); +var config = require('../config/environment'); +var User = require('../models').User; + + +// Passport Configuration +require('./local/passport').setup(User, config); +require('./facebook/passport').setup(User, config); +require('./google/passport').setup(User, config); +require('./twitter/passport').setup(User, config); + +var router = express.Router(); + +router.use('/local', require('./local')); +router.use('/facebook', require('./facebook')); +router.use('/twitter', require('./twitter')); +router.use('/google', require('./google')); + +module.exports = router; diff --git a/server/auth/local/index.js b/server/auth/local/index.js index a9b1daa..54f86ad 100644 --- a/server/auth/local/index.js +++ b/server/auth/local/index.js @@ -1 +1,213 @@ -var _0xe31d=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x70\x61\x73\x73\x70\x6F\x72\x74","\x61\x73\x79\x6E\x63","\x62\x6C\x75\x65\x62\x69\x72\x64","\x6E\x6F\x64\x65\x6D\x61\x69\x6C\x65\x72","\x6E\x6F\x64\x65\x6D\x61\x69\x6C\x65\x72\x2D\x73\x6D\x74\x70\x2D\x74\x72\x61\x6E\x73\x70\x6F\x72\x74","\x63\x72\x79\x70\x74\x6F","\x6D\x6F\x6D\x65\x6E\x74","\x2E\x2E\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x41\x63\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x76\x6F\x69\x63\x65","\x63\x68\x61\x74","\x6D\x61\x69\x6C","\x66\x61\x78","\x2F","\x6C\x6F\x63\x61\x6C\x2D\x6C\x6F\x67\x69\x6E","\x6D\x65\x73\x73\x61\x67\x65","\x6A\x73\x6F\x6E","\x73\x74\x61\x74\x75\x73","\x53\x6F\x6D\x65\x74\x68\x69\x6E\x67\x20\x77\x65\x6E\x74\x20\x77\x72\x6F\x6E\x67\x2C\x20\x70\x6C\x65\x61\x73\x65\x20\x74\x72\x79\x20\x61\x67\x61\x69\x6E\x2E","\x63\x61\x74\x63\x68","\x72\x6F\x6C\x65","\x69\x64","\x72\x65\x6D\x65\x6D\x62\x65\x72","\x62\x6F\x64\x79","\x73\x69\x67\x6E\x54\x6F\x6B\x65\x6E","\x74\x68\x65\x6E","\x71\x75\x65\x75\x65\x4C\x6F\x67\x69\x6E","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x6C\x6F\x67\x69\x6E","\x6E\x61\x6D\x65","\x63\x72\x65\x61\x74\x65","\x61\x6C\x6C","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x70\x6F\x73\x74","\x2F\x72\x65\x63\x6F\x76\x65\x72","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x68\x6F\x73\x74","\x70\x6F\x72\x74","\x73\x73\x6C","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x63\x72\x65\x61\x74\x65\x54\x72\x61\x6E\x73\x70\x6F\x72\x74","\x65\x6D\x61\x69\x6C","\x78\x43\x41\x4C\x4C\x59\x20\x4D\x6F\x74\x69\x6F\x6E\x20\x50\x61\x73\x73\x77\x6F\x72\x64\x20\x52\x65\x73\x65\x74","\x59\x6F\x75\x20\x61\x72\x65\x20\x72\x65\x63\x65\x69\x76\x69\x6E\x67\x20\x74\x68\x69\x73\x20\x62\x65\x63\x61\x75\x73\x65\x20\x79\x6F\x75\x20\x28\x6F\x72\x20\x73\x6F\x6D\x65\x6F\x6E\x65\x20\x65\x6C\x73\x65\x29\x20\x68\x61\x76\x65\x20\x72\x65\x71\x75\x65\x73\x74\x65\x64\x20\x74\x68\x65\x20\x72\x65\x73\x65\x74\x20\x6F\x66\x20\x74\x68\x65\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x20\x66\x6F\x72\x20\x79\x6F\x75\x72\x20\x61\x63\x63\x6F\x75\x6E\x74\x2E\x0A\x0A","\x50\x6C\x65\x61\x73\x65\x20\x63\x6C\x69\x63\x6B\x20\x6F\x6E\x20\x74\x68\x65\x20\x66\x6F\x6C\x6C\x6F\x77\x69\x6E\x67\x20\x6C\x69\x6E\x6B\x2C\x20\x6F\x72\x20\x70\x61\x73\x74\x65\x20\x74\x68\x69\x73\x20\x69\x6E\x74\x6F\x20\x79\x6F\x75\x72\x20\x62\x72\x6F\x77\x73\x65\x72\x20\x74\x6F\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x74\x68\x65\x20\x70\x72\x6F\x63\x65\x73\x73\x3A\x0A\x0A","\x68\x74\x74\x70\x3A\x2F\x2F","\x68\x65\x61\x64\x65\x72\x73","\x2F\x72\x65\x73\x65\x74\x2F","\x0A\x0A","\x54\x68\x65\x20\x6C\x69\x6E\x6B\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x76\x61\x6C\x69\x64\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x6E\x65\x78\x74\x20\x36\x30\x20\x6D\x69\x6E\x75\x74\x65\x73\x2E","\x49\x66\x20\x79\x6F\x75\x20\x64\x69\x64\x20\x6E\x6F\x74\x20\x72\x65\x71\x75\x65\x73\x74\x20\x74\x68\x69\x73\x2C\x20\x70\x6C\x65\x61\x73\x65\x20\x69\x67\x6E\x6F\x72\x65\x20\x74\x68\x69\x73\x20\x65\x6D\x61\x69\x6C\x20\x61\x6E\x64\x20\x79\x6F\x75\x72\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x20\x77\x69\x6C\x6C\x20\x72\x65\x6D\x61\x69\x6E\x20\x75\x6E\x63\x68\x61\x6E\x67\x65\x64\x2E\x0A","\x73\x65\x6E\x64\x4D\x61\x69\x6C","\x68\x65\x78","\x72\x65\x73\x65\x74\x50\x61\x73\x73\x77\x6F\x72\x64\x54\x6F\x6B\x65\x6E","\x72\x65\x73\x65\x74\x50\x61\x73\x73\x77\x6F\x72\x64\x45\x78\x70\x69\x72\x65\x73","\x68\x6F\x75\x72","\x61\x64\x64","\x73\x61\x76\x65","\x4E\x6F\x20\x53\x4D\x54\x50\x20\x73\x65\x72\x76\x69\x63\x65\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x65\x64","\x72\x61\x6E\x64\x6F\x6D\x42\x79\x74\x65\x73","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x45\x6D\x61\x69\x6C\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x20\x69\x6E\x20\x64\x61\x74\x61\x62\x61\x73\x65\x21","\x66\x69\x6E\x64\x4F\x6E\x65","\x2F\x72\x65\x73\x65\x74\x2F\x3A\x74\x6F\x6B\x65\x6E","\x59\x6F\x75\x72\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x20\x68\x61\x73\x20\x62\x65\x65\x6E\x20\x63\x68\x61\x6E\x67\x65\x64","\x48\x65\x6C\x6C\x6F\x2C\x0A\x0A","\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x63\x6F\x6E\x66\x69\x72\x6D\x61\x74\x69\x6F\x6E\x20\x74\x68\x61\x74\x20\x74\x68\x65\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x20\x66\x6F\x72\x20\x79\x6F\x75\x72\x20\x61\x63\x63\x6F\x75\x6E\x74\x20","\x20\x68\x61\x73\x20\x6A\x75\x73\x74\x20\x62\x65\x65\x6E\x20\x63\x68\x61\x6E\x67\x65\x64\x2E\x0A","\x50\x61\x73\x73\x77\x6F\x72\x64\x20\x72\x65\x73\x65\x74\x20\x74\x6F\x6B\x65\x6E\x20\x69\x73\x20\x69\x6E\x76\x61\x6C\x69\x64\x20\x6F\x72\x20\x68\x61\x73\x20\x65\x78\x70\x69\x72\x65\x64","\x74\x65\x73\x74","\x57\x72\x6F\x6E\x67\x20\x70\x61\x73\x73\x77\x6F\x72\x64\x20\x66\x6F\x72\x6D\x61\x74\x21","\x74\x6F\x6B\x65\x6E","\x70\x61\x72\x61\x6D\x73","\x2F\x6C\x6F\x67\x6F\x75\x74","\x69\x73\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65\x64","\x6C\x6F\x67\x6F\x75\x74","\x72\x65\x64\x69\x72\x65\x63\x74","\x75\x73\x65\x72","\x67\x65\x74","\x73\x65\x6E\x64","\x65\x78\x70\x6F\x72\x74\x73"];_0xe31d[0];var express=require(_0xe31d[1]);var passport=require(_0xe31d[2]);var async=require(_0xe31d[3]);var Promise=require(_0xe31d[4]);var nodemailer=require(_0xe31d[5]);var smtpTransport=require(_0xe31d[6]);var crypto=require(_0xe31d[7]);var moment=require(_0xe31d[8]);var auth=require(_0xe31d[9]);var User=require(_0xe31d[11])[_0xe31d[10]];var Action=require(_0xe31d[11])[_0xe31d[12]];var ReportMember=require(_0xe31d[11])[_0xe31d[13]];var MailServerOut=require(_0xe31d[11])[_0xe31d[14]];var license=require(_0xe31d[15]);var channels=[_0xe31d[16],_0xe31d[17],_0xe31d[18],_0xe31d[19]];var router=express.Router();router[_0xe31d[40]](_0xe31d[20],function(_0x5c38x11,_0x5c38x12,_0x5c38x13){passport[_0xe31d[39]](_0xe31d[21],function(_0x5c38x14,_0x5c38x15,_0x5c38x16){if(_0x5c38x14){return _0x5c38x12[_0xe31d[24]](401)[_0xe31d[23]]({message:_0x5c38x14[_0xe31d[22]]})};if(!_0x5c38x15){return _0x5c38x12[_0xe31d[24]](404)[_0xe31d[23]](_0x5c38x16|| {message:_0xe31d[25]})};return Promise[_0xe31d[38]]([])[_0xe31d[32]](function(){if(_0x5c38x11[_0xe31d[30]][_0xe31d[34]](_0xe31d[33])&& _0x5c38x11[_0xe31d[30]][_0xe31d[33]]=== false){return};return Action[_0xe31d[37]]({name:_0xe31d[35],data1:_0x5c38x15[_0xe31d[28]],data2:_0x5c38x15[_0xe31d[36]],UserId:_0x5c38x15[_0xe31d[28]]})})[_0xe31d[32]](function(){return _0x5c38x12[_0xe31d[23]]({role:_0x5c38x15[_0xe31d[27]],token:auth[_0xe31d[31]](_0x5c38x15[_0xe31d[28]],_0x5c38x15[_0xe31d[27]],_0x5c38x11[_0xe31d[30]][_0xe31d[29]]|| false),userId:_0x5c38x15[_0xe31d[28]]})})[_0xe31d[26]](function(_0x5c38x14){return _0x5c38x13(_0x5c38x14)})})(_0x5c38x11,_0x5c38x12,_0x5c38x13)});router[_0xe31d[40]](_0xe31d[41],function(_0x5c38x11,_0x5c38x12,_0x5c38x13){var _0x5c38x17,_0x5c38x18,_0x5c38x19;return User[_0xe31d[70]]({where:{email:_0x5c38x11[_0xe31d[30]][_0xe31d[49]]}})[_0xe31d[32]](function(_0x5c38x15){if(!_0x5c38x15){throw new Error(_0xe31d[69])};_0x5c38x18= _0x5c38x15;return MailServerOut[_0xe31d[70]]({where:{service:true}})})[_0xe31d[32]](function(_0x5c38x1d){if(!_0x5c38x1d){throw new Error(_0xe31d[66])};_0x5c38x19= _0x5c38x1d;return Promise[_0xe31d[68]](crypto[_0xe31d[67]])(20)})[_0xe31d[32]](function(_0x5c38x1c){_0x5c38x17= _0x5c38x1c.toString(_0xe31d[60]);_0x5c38x18[_0xe31d[61]]= _0x5c38x17;_0x5c38x18[_0xe31d[62]]= moment()[_0xe31d[64]](1,_0xe31d[63]);return _0x5c38x18[_0xe31d[65]]()})[_0xe31d[32]](function(){var _0x5c38x1a=nodemailer[_0xe31d[48]](smtpTransport({host:_0x5c38x19[_0xe31d[43]],port:_0x5c38x19[_0xe31d[44]],secure:_0x5c38x19[_0xe31d[45]],pool:true,auth:{user:_0x5c38x19[_0xe31d[46]],pass:_0x5c38x19[_0xe31d[47]]}}));var _0x5c38x1b={to:_0x5c38x18[_0xe31d[49]],from:_0x5c38x19[_0xe31d[43]],subject:_0xe31d[50],text:_0xe31d[51]+ _0xe31d[52]+ _0xe31d[53]+ _0x5c38x11[_0xe31d[54]][_0xe31d[43]]+ _0xe31d[55]+ _0x5c38x17+ _0xe31d[56]+ _0xe31d[57]+ _0xe31d[58]};return _0x5c38x1a[_0xe31d[59]](_0x5c38x1b)})[_0xe31d[32]](function(_0x5c38x16){_0x5c38x12[_0xe31d[42]](200)})[_0xe31d[26]](function(_0x5c38x14){return handleError(_0x5c38x12,_0x5c38x14)})});router[_0xe31d[40]](_0xe31d[71],function(_0x5c38x11,_0x5c38x12,_0x5c38x13){var _0x5c38x18,_0x5c38x19;return User[_0xe31d[70]]({where:{resetPasswordToken:_0x5c38x11[_0xe31d[80]][_0xe31d[79]],resetPasswordExpires:{$gt:moment()}}})[_0xe31d[32]](function(_0x5c38x15){if(!_0x5c38x15){throw new Error(_0xe31d[76])};var _0x5c38x1e=String(_0x5c38x11[_0xe31d[30]][_0xe31d[47]]);if(!(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/[_0xe31d[77]](_0x5c38x1e))){throw new Error(_0xe31d[78])};_0x5c38x15[_0xe31d[47]]= _0x5c38x1e;_0x5c38x15[_0xe31d[61]]= null;_0x5c38x15[_0xe31d[62]]= null;return _0x5c38x15[_0xe31d[65]]()})[_0xe31d[32]](function(_0x5c38x15){_0x5c38x18= _0x5c38x15;return MailServerOut[_0xe31d[70]]({where:{service:true}})})[_0xe31d[32]](function(_0x5c38x1d){if(!_0x5c38x1d){throw new Error(_0xe31d[66])};var _0x5c38x1a=nodemailer[_0xe31d[48]](smtpTransport({host:_0x5c38x1d[_0xe31d[43]],port:_0x5c38x1d[_0xe31d[44]],secure:_0x5c38x1d[_0xe31d[45]],pool:true,auth:{user:_0x5c38x1d[_0xe31d[46]],pass:_0x5c38x1d[_0xe31d[47]]}}));var _0x5c38x1b={to:_0x5c38x18[_0xe31d[49]],from:_0x5c38x1d[_0xe31d[43]],subject:_0xe31d[72],text:_0xe31d[73]+ _0xe31d[74]+ _0x5c38x18[_0xe31d[49]]+ _0xe31d[75]};return _0x5c38x1a[_0xe31d[59]](_0x5c38x1b)})[_0xe31d[32]](function(_0x5c38x16){_0x5c38x12[_0xe31d[42]](200)})[_0xe31d[26]](function(_0x5c38x14){return handleError(_0x5c38x12,_0x5c38x14)})});router[_0xe31d[86]](_0xe31d[81],auth[_0xe31d[82]](),function(_0x5c38x11,_0x5c38x12,_0x5c38x13){return Action[_0xe31d[37]]({name:_0xe31d[83],data1:_0x5c38x11[_0xe31d[85]][_0xe31d[28]],data2:_0x5c38x11[_0xe31d[85]][_0xe31d[36]],UserId:_0x5c38x11[_0xe31d[85]][_0xe31d[28]]})[_0xe31d[32]](function(){_0x5c38x11[_0xe31d[83]]();_0x5c38x12[_0xe31d[84]](_0xe31d[20])})[_0xe31d[26]](function(_0x5c38x14){return _0x5c38x13(_0x5c38x14)})});function handleError(_0x5c38x12,_0x5c38x14){return _0x5c38x12[_0xe31d[24]](500)[_0xe31d[87]]({message:_0x5c38x14[_0xe31d[22]]})}module[_0xe31d[88]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var passport = require('passport'); +var async = require('async'); +var Promise = require('bluebird'); +var nodemailer = require('nodemailer'); +var smtpTransport = require('nodemailer-smtp-transport'); +var crypto = require('crypto'); +var moment = require('moment'); + +var auth = require('../auth.service'); +var User = require('../../models').User; +var Action = require('../../models').Action; +var ReportMember = require('../../models').ReportMember; +var MailServerOut = require('../../models').MailServerOut; +var license = require('../../config/license/license.service'); + +var channels = ['voice', 'chat', 'mail', 'fax']; +var router = express.Router(); + +router.post('/', function(req, res, next) { + passport.authenticate('local-login', function(err, user, info) { + if (err) return res.status(401).json({ + message: err.message + }); + if (!user) return res.status(404).json(info || { + message: 'Something went wrong, please try again.' + }); + return Promise + .all([]) + .then(function() { + if (req.body.hasOwnProperty('queueLogin') && req.body.queueLogin === false) { + return; + } + return Action + .create({ + name: 'login', + data1: user.id, + data2: user.name, + UserId: user.id + }); + }) + .then(function() { + return res.json({ + role: user.role, + token: auth.signToken(user.id, user.role, req.body.remember || false), + userId: user.id + }); + }) + .catch(function(err) { + return next(err); + }); + + })(req, res, next) +}); + +router.post('/recover', function(req, res, next) { + var _token, _user, _server; + return User + .findOne({ + where: { + email: req.body.email + } + }) + .then(function(user) { + if (!user) { + throw new Error('Email not found in database!'); + } + _user = user; + return MailServerOut + .findOne({ + where: { + service: true + } + }); + }) + .then(function(mailServer) { + if (!mailServer) { + throw new Error('No SMTP service configured'); + } + _server = mailServer; + return Promise + .promisify(crypto.randomBytes)(20); + }) + .then(function(buffer) { + _token = buffer.toString('hex'); + _user.resetPasswordToken = _token; + _user.resetPasswordExpires = moment().add(1, 'hour'); + return _user.save(); + }) + .then(function() { + var smtp = nodemailer.createTransport(smtpTransport({ + host: _server.host, + port: _server.port, + secure: _server.ssl, + pool: true, + auth: { + user: _server.username, + pass: _server.password + } + })); + var mailOptions = { + to: _user.email, + from: _server.host, + subject: 'xCALLY Motion Password Reset', + text: 'You are receiving this because you (or someone else) have requested the reset of the password for your account.\n\n' + + 'Please click on the following link, or paste this into your browser to complete the process:\n\n' + + 'http://' + req.headers.host + '/reset/' + _token + '\n\n' + + 'The link will be valid for the next 60 minutes.' + + 'If you did not request this, please ignore this email and your password will remain unchanged.\n' + }; + return smtp + .sendMail(mailOptions); + }) + .then(function(info) { + res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err) + }); +}); + +router.post('/reset/:token', function(req, res, next) { + var _user, _server; + return User + .findOne({ + where: { + resetPasswordToken: req.params.token, + resetPasswordExpires: { + $gt: moment() + } + }, + }) + .then(function(user) { + if (!user) { + throw new Error('Password reset token is invalid or has expired'); + } + var newPass = String(req.body.password); + if (!(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&\-_=+\[\{\]\}.])[0-9a-zA-Z~!@#$%^&\-_=+\[\{\]\}.]{8,}$/.test(newPass))) { + throw new Error('Wrong password format!'); + } + user.password = newPass; + user.resetPasswordToken = null; + user.resetPasswordExpires = null; + return user.save(); + }) + .then(function(user) { + _user = user; + return MailServerOut + .findOne({ + where: { + service: true + } + }); + }) + .then(function(mailServer) { + if (!mailServer) { + throw new Error('No SMTP service configured'); + } + var smtp = nodemailer.createTransport(smtpTransport({ + host: mailServer.host, + port: mailServer.port, + secure: mailServer.ssl, + pool: true, + auth: { + user: mailServer.username, + pass: mailServer.password + } + })); + var mailOptions = { + to: _user.email, + from: mailServer.host, + subject: 'Your password has been changed', + text: 'Hello,\n\n' + + 'This is a confirmation that the password for your account ' + _user.email + ' has just been changed.\n' + }; + return smtp + .sendMail(mailOptions); + }) + .then(function(info) { + res.sendStatus(200); + }) + .catch(function(err) { + return handleError(res, err) + }); +}); + +router + .get('/logout', auth.isAuthenticated(), function(req, res, next) { + return Action + .create({ + name: 'logout', + data1: req.user.id, + data2: req.user.name, + UserId: req.user.id + }) + .then(function() { + req.logout(); + res.redirect('/'); + }) + .catch(function(err) { + return next(err); + }); + }); + +function handleError(res, err) { + return res.status(500).send({ + message: err.message + }); +} + +module.exports = router; diff --git a/server/auth/local/local.ami.js b/server/auth/local/local.ami.js index ef03c97..bfb533d 100644 --- a/server/auth/local/local.ami.js +++ b/server/auth/local/local.ami.js @@ -1 +1,51 @@ -var _0x8a69=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x61\x70\x69\x2F\x61\x6D\x69\x2F\x61\x6D\x69\x2E\x61\x6D\x69","\x6C\x6F\x67\x6F\x75\x74","\x51\x75\x65\x75\x65\x50\x61\x75\x73\x65","\x53\x49\x50\x2F\x25\x73","\x66\x6F\x72\x6D\x61\x74","\x64\x61\x74\x61","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x55\x73\x65\x72\x49\x64","\x6C\x6F\x67","\x51\x75\x65\x75\x65\x52\x65\x6D\x6F\x76\x65","\x61\x63\x74\x69\x6F\x6E","\x6C\x6F\x67\x69\x6E","\x51\x75\x65\x75\x65\x41\x64\x64"];_0x8a69[0];var util=require(_0x8a69[1]);var amiController=require(_0x8a69[2]);exports[_0x8a69[3]]= function(_0xe47ex3,_0xe47ex4,_0xe47ex5,_0xe47ex6){var _0xe47ex7={action:_0x8a69[4],queue:_0xe47ex5,interface:util[_0x8a69[6]](_0x8a69[5],_0xe47ex4),paused:false};_0xe47ex7[_0x8a69[7]]= JSON[_0x8a69[8]](_0xe47ex7);_0xe47ex7[_0x8a69[9]]= _0xe47ex3;amiController[_0x8a69[12]](_0xe47ex7,function(_0xe47ex8,_0xe47ex9){if(_0xe47ex8){console[_0x8a69[10]](_0xe47ex8)};var _0xe47ex7={action:_0x8a69[11],queue:_0xe47ex5,interface:util[_0x8a69[6]](_0x8a69[5],_0xe47ex4)};_0xe47ex7[_0x8a69[7]]= JSON[_0x8a69[8]](_0xe47ex7);_0xe47ex7[_0x8a69[9]]= _0xe47ex3;amiController[_0x8a69[12]](_0xe47ex7,_0xe47ex6)})};exports[_0x8a69[13]]= function(_0xe47ex3,_0xe47ex4,_0xe47ex5,_0xe47ex6){var _0xe47ex7={action:_0x8a69[14],queue:_0xe47ex5,interface:util[_0x8a69[6]](_0x8a69[5],_0xe47ex4),penalty:0,paused:false,membername:_0xe47ex4};_0xe47ex7[_0x8a69[7]]= JSON[_0x8a69[8]](_0xe47ex7);_0xe47ex7[_0x8a69[9]]= _0xe47ex3;amiController[_0x8a69[12]](_0xe47ex7,_0xe47ex6)} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +var util = require('util'); +var amiController = require('../../api/ami/ami.ami'); + +exports.logout = function(userid, username, queuename, callback) { + var body = { + action: 'QueuePause', + queue: queuename, + interface: util.format('SIP/%s', username), + paused: false + }; + body.data = JSON.stringify(body); + body.UserId = userid; + + amiController.action(body, function(err, res) { + if (err) { + console.log(err); + } + var body = { + action: 'QueueRemove', + queue: queuename, + interface: util.format('SIP/%s', username) + }; + body.data = JSON.stringify(body); + body.UserId = userid; + + amiController.action(body, callback); + }); +} + +exports.login = function(userid, username, queuename, callback) { + + var body = { + action: 'QueueAdd', + queue: queuename, + interface: util.format('SIP/%s', username), + penalty: 0, + paused: false, + membername: username + }; + + body.data = JSON.stringify(body); + body.UserId = userid; + + amiController.action(body, callback); +} diff --git a/server/auth/local/passport.js b/server/auth/local/passport.js index 22c4782..ab09929 100644 --- a/server/auth/local/passport.js +++ b/server/auth/local/passport.js @@ -1 +1,42 @@ -var _0x5d5d=["\x70\x61\x73\x73\x70\x6F\x72\x74","\x53\x74\x72\x61\x74\x65\x67\x79","\x70\x61\x73\x73\x70\x6F\x72\x74\x2D\x6C\x6F\x63\x61\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x73\x65\x74\x75\x70","\x6C\x6F\x63\x61\x6C\x2D\x6C\x6F\x67\x69\x6E","\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x63\x61\x74\x63\x68","\x4D\x61\x78\x69\x6D\x75\x6D\x20\x6C\x6F\x67\x69\x6E\x20\x6C\x69\x6D\x69\x74\x20\x68\x61\x73\x20\x62\x65\x65\x6E\x20\x72\x65\x61\x63\x68\x65\x64\x2E","\x74\x68\x65\x6E","\x69\x73\x56\x61\x6C\x69\x64\x41\x67\x65\x6E\x74","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x57\x72\x6F\x6E\x67\x20\x63\x72\x65\x64\x65\x6E\x74\x69\x61\x6C\x73","\x66\x69\x6E\x64\x4F\x6E\x65","\x75\x73\x65"];var passport=require(_0x5d5d[0]);var LocalStrategy=require(_0x5d5d[2])[_0x5d5d[1]];var license=require(_0x5d5d[3]);exports[_0x5d5d[4]]= function(_0xdaf9x4,_0xdaf9x5){passport[_0x5d5d[15]](_0x5d5d[5], new LocalStrategy({usernameField:_0x5d5d[6],passwordField:_0x5d5d[7]},function(_0xdaf9x6,_0xdaf9x7,_0xdaf9x8){var _0xdaf9x9;return _0xdaf9x4[_0x5d5d[14]]({where:{name:_0xdaf9x6}})[_0x5d5d[10]](function(_0xdaf9xc){_0xdaf9x9= _0xdaf9xc;if(!_0xdaf9x9|| !_0xdaf9xc[_0x5d5d[12]](_0xdaf9x7)){throw new Error(_0x5d5d[13])};return _0xdaf9x9})[_0x5d5d[10]](license[_0x5d5d[11]]())[_0x5d5d[10]](function(_0xdaf9xb){if(_0xdaf9xb){return _0xdaf9x8(null,_0xdaf9x9)}else {return _0xdaf9x8(null,false,{message:_0x5d5d[9]})}})[_0x5d5d[8]](function(_0xdaf9xa){return _0xdaf9x8(_0xdaf9xa,false,null)})}))} \ No newline at end of file +var passport = require('passport'); +var LocalStrategy = require('passport-local').Strategy; +var license = require('../../config/license/license.service'); + +exports.setup = function(User, config) { + passport.use('local-login', new LocalStrategy({ + usernameField: 'name', + passwordField: 'password' // this is the virtual field on the model + }, + function(name, password, done) { + var _user; + + return User.findOne({ + where: { + name: name + } + }) + .then(function(user) { + _user = user; + + if (!_user || !user.authenticate(password)) { + throw new Error('Wrong credentials'); + } + + return _user; + }) + .then(license.isValidAgent()) + .then(function(valid) { + if (valid) { + return done(null, _user); + } else { + return done(null, false, { + message: 'Maximum login limit has been reached.' + }); + } + }) + .catch(function(err) { + return done(err, false, null); + }); + } + )); +}; diff --git a/server/auth/twitter/index.js b/server/auth/twitter/index.js index 7c6967f..8360247 100644 --- a/server/auth/twitter/index.js +++ b/server/auth/twitter/index.js @@ -1 +1,20 @@ -var _0x6493=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x70\x61\x73\x73\x70\x6F\x72\x74","\x2E\x2E\x2F\x61\x75\x74\x68\x2E\x73\x65\x72\x76\x69\x63\x65","\x2F\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x74\x77\x69\x74\x74\x65\x72","\x2F\x73\x69\x67\x6E\x75\x70","\x61\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x73\x65\x74\x54\x6F\x6B\x65\x6E\x43\x6F\x6F\x6B\x69\x65","\x67\x65\x74","\x2F","\x65\x78\x70\x6F\x72\x74\x73"];_0x6493[0];var express=require(_0x6493[1]);var passport=require(_0x6493[2]);var auth=require(_0x6493[3]);var router=express.Router();router[_0x6493[9]](_0x6493[10],passport[_0x6493[7]](_0x6493[5],{failureRedirect:_0x6493[6],session:false}))[_0x6493[9]](_0x6493[4],passport[_0x6493[7]](_0x6493[5],{failureRedirect:_0x6493[6],session:false}),auth[_0x6493[8]]);module[_0x6493[11]]= router \ No newline at end of file +'use strict'; + +var express = require('express'); +var passport = require('passport'); +var auth = require('../auth.service'); + +var router = express.Router(); + +router + .get('/', passport.authenticate('twitter', { + failureRedirect: '/signup', + session: false + })) + + .get('/callback', passport.authenticate('twitter', { + failureRedirect: '/signup', + session: false + }), auth.setTokenCookie); + +module.exports = router; \ No newline at end of file diff --git a/server/auth/twitter/passport.js b/server/auth/twitter/passport.js index d8ecacf..a2eb4a5 100644 --- a/server/auth/twitter/passport.js +++ b/server/auth/twitter/passport.js @@ -1 +1,35 @@ -var _0x57af=["\x73\x65\x74\x75\x70","\x70\x61\x73\x73\x70\x6F\x72\x74","\x53\x74\x72\x61\x74\x65\x67\x79","\x70\x61\x73\x73\x70\x6F\x72\x74\x2D\x74\x77\x69\x74\x74\x65\x72","\x63\x6C\x69\x65\x6E\x74\x49\x44","\x74\x77\x69\x74\x74\x65\x72","\x63\x6C\x69\x65\x6E\x74\x53\x65\x63\x72\x65\x74","\x63\x61\x6C\x6C\x62\x61\x63\x6B\x55\x52\x4C","\x69\x64","\x64\x69\x73\x70\x6C\x61\x79\x4E\x61\x6D\x65","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x75\x73\x65\x72","\x5F\x6A\x73\x6F\x6E","\x73\x61\x76\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x75\x73\x65"];exports[_0x57af[0]]= function(_0x17a8x1,_0x17a8x2){var _0x17a8x3=require(_0x57af[1]);var _0x17a8x4=require(_0x57af[3])[_0x57af[2]];_0x17a8x3[_0x57af[15]]( new _0x17a8x4({consumerKey:_0x17a8x2[_0x57af[5]][_0x57af[4]],consumerSecret:_0x17a8x2[_0x57af[5]][_0x57af[6]],callbackURL:_0x17a8x2[_0x57af[5]][_0x57af[7]]},function(_0x17a8x5,_0x17a8x6,_0x17a8x7,_0x17a8x8){_0x17a8x1[_0x57af[14]]({"\x74\x77\x69\x74\x74\x65\x72\x2E\x69\x64\x5F\x73\x74\x72":_0x17a8x7[_0x57af[8]]},function(_0x17a8x9,_0x17a8xa){if(_0x17a8x9){return _0x17a8x8(_0x17a8x9)};if(!_0x17a8xa){_0x17a8xa= new _0x17a8x1({name:_0x17a8x7[_0x57af[9]],username:_0x17a8x7[_0x57af[10]],role:_0x57af[11],provider:_0x57af[5],twitter:_0x17a8x7[_0x57af[12]]});_0x17a8xa[_0x57af[13]](function(_0x17a8x9){if(_0x17a8x9){return _0x17a8x8(_0x17a8x9)};return _0x17a8x8(_0x17a8x9,_0x17a8xa)})}else {return _0x17a8x8(_0x17a8x9,_0x17a8xa)}})}))} \ No newline at end of file +exports.setup = function (User, config) { + var passport = require('passport'); + var TwitterStrategy = require('passport-twitter').Strategy; + + passport.use(new TwitterStrategy({ + consumerKey: config.twitter.clientID, + consumerSecret: config.twitter.clientSecret, + callbackURL: config.twitter.callbackURL + }, + function(token, tokenSecret, profile, done) { + User.findOne({ + 'twitter.id_str': profile.id + }, function(err, user) { + if (err) { + return done(err); + } + if (!user) { + user = new User({ + name: profile.displayName, + username: profile.username, + role: 'user', + provider: 'twitter', + twitter: profile._json + }); + user.save(function(err) { + if (err) return done(err); + return done(err, user); + }); + } else { + return done(err, user); + } + }); + } + )); +}; \ No newline at end of file diff --git a/server/config/agi/agi.js b/server/config/agi/agi.js index 2535b63..6c919ae 100644 --- a/server/config/agi/agi.js +++ b/server/config/agi/agi.js @@ -1 +1,1849 @@ -var _0x1260=["\x75\x73\x65\x20\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x61\x67\x69","\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x78\x6D\x6C\x32\x6A\x73","\x77\x61\x69\x74\x2E\x66\x6F\x72","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x70\x61\x74\x68","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x73\x68\x65\x6C\x6C\x6A\x73","\x62\x6C\x75\x65\x62\x69\x72\x64","\x72\x65\x71\x75\x65\x73\x74\x2D\x70\x72\x6F\x6D\x69\x73\x65","\x67\x6F\x6F\x67\x6C\x65\x2D\x74\x74\x73\x2D\x61\x70\x69","\x66\x73","\x73\x6F\x78","\x72\x65\x71\x75\x65\x73\x74","\x66\x69\x6C\x65\x2D\x62\x61\x73\x65\x36\x34","\x2E\x2E\x2F\x75\x74\x69\x6C","\x6F\x64\x62\x63","\x53\x71\x75\x61\x72\x65\x50\x72\x6F\x6A\x65\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x61\x72\x69\x61\x62\x6C\x65","\x53\x71\x75\x61\x72\x65\x4F\x64\x62\x63","\x53\x65\x74\x74\x69\x6E\x67","\x55\x73\x65\x72","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x53\x6F\x75\x6E\x64","\x53\x71\x75\x61\x72\x65\x52\x65\x63\x6F\x72\x64\x69\x6E\x67","\x53\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x6D\x75\x73\x74\x61\x63\x68\x65","\x54\x65\x6D\x70\x6C\x61\x74\x65","\x65\x72\x72\x6F\x72","\x6F\x6E","\x63\x6C\x6F\x73\x65","\x41\x47\x49\x20\x53\x45\x52\x56\x45\x52\x20\x45\x58\x49\x54\x45\x44\x20\x57\x49\x54\x48\x20\x43\x4F\x44\x45\x20\x25\x73\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20","\x70\x69\x64","\x66\x6F\x72\x6D\x61\x74","\x6C\x6F\x67","\x41\x47\x49\x20\x53\x45\x52\x56\x45\x52\x20\x53\x54\x41\x52\x54\x49\x4E\x47\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20","\x61\x6E\x73\x77\x65\x72","\x2D\x2D\x41\x4E\x53\x57\x45\x52\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x41\x6E\x73\x77\x65\x72\x69\x6E\x67\x20\x74\x68\x65\x20\x63\x61\x6C\x6C\x2E\x2E\x2E","\x41\x4E\x53\x57\x45\x52\x0A","\x73\x65\x6E\x64","\x63\x75\x73\x74\x6F\x6D\x5F\x61\x70\x70","\x2D\x2D\x43\x55\x53\x54\x4F\x4D\x20\x41\x50\x50\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x63\x75\x73\x74\x6F\x6D\x20\x61\x70\x70\x20\x22","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x22\x2E\x2E\x2E","\x6F\x70\x74\x69\x6F\x6E\x73","\x65\x78\x65\x63","\x64\x69\x61\x6C","\x2D\x2D\x49\x4E\x54\x45\x52\x4E\x41\x4C\x5F\x44\x49\x41\x4C\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x75\x73\x65\x72\x73","\x73\x69\x70\x5F\x69\x64","\x66\x69\x6E\x64","\x43\x61\x6C\x6C\x69\x6E\x67\x20","\x53\x49\x50\x2F\x25\x73","\x6E\x61\x6D\x65","\x2E\x2E\x2E","\x74\x69\x6D\x65\x6F\x75\x74","\x6F\x70\x74\x73","\x75\x72\x6C","\x44\x49\x41\x4C","\x2C","\x6A\x6F\x69\x6E","\x73\x74\x61\x72\x74","\x2D\x2D\x53\x54\x41\x52\x54\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x79\x65\x73","\x65\x78\x74\x5F\x64\x69\x61\x6C","\x2D\x2D\x45\x58\x54\x45\x52\x4E\x41\x4C\x5F\x44\x49\x41\x4C\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x74\x72\x75\x6E\x6B\x5F\x6E\x61\x6D\x65","\x53\x49\x50\x2F\x25\x73\x2F\x25\x73","\x70\x68\x6F\x6E\x65","\x71\x75\x65\x75\x65","\x2D\x2D\x51\x55\x45\x55\x45\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x71\x75\x65\x75\x65\x73","\x71\x75\x65\x75\x65\x5F\x69\x64","\x75\x6E\x69\x71\x75\x65\x69\x64","\x6C\x61\x62\x65\x6C","\x74\x61\x67","\x70\x72\x6F\x6A\x65\x63\x74\x5F\x6E\x61\x6D\x65","\x63\x61\x6C\x6C\x65\x72\x69\x64","\x64\x65\x74\x61\x69\x6C","\x6D\x61\x63\x72\x6F","\x67\x6F\x73\x75\x62","","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x4A\x6F\x69\x6E\x69\x6E\x67\x20","\x20\x71\x75\x65\x75\x65\x2E\x2E\x2E","\x51\x55\x45\x55\x45","\x74\x68\x65\x6E","\x66\x69\x6C\x65\x5F\x69\x64","\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x2D\x2D\x56\x4F\x49\x43\x45\x4D\x41\x49\x4C\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x6D\x61\x69\x6C\x62\x6F\x78","\x53\x74\x61\x72\x74\x69\x6E\x67\x20\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x20\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2E\x2E\x2E","\x56\x4F\x49\x43\x45\x4D\x41\x49\x4C","\x63\x61\x6C\x6C\x62\x61\x63\x6B","\x2D\x2D\x43\x41\x4C\x4C\x42\x41\x43\x4B\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x50\x4F\x53\x54","\x68\x74\x74\x70\x3A\x2F\x2F\x6C\x6F\x63\x61\x6C\x68\x6F\x73\x74\x2F\x61\x70\x69\x2F\x72\x65\x73\x74\x2F\x63\x6F\x6E\x74\x61\x63\x74\x2F\x69\x6E\x73\x65\x72\x74","\x6C\x69\x73\x74\x5F\x69\x64","\x73\x70\x6C\x69\x74","\x74\x72\x69\x6D","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x64\x65\x6C\x61\x79","\x6D\x69\x6E\x75\x74\x65\x73","\x61\x64\x64","\x54\x44\x20\x66\x69\x6E\x61\x6C\x6C\x79","\x66\x69\x6E\x61\x6C\x6C\x79","\x54\x44\x20\x70\x72\x6F\x62\x6C\x65\x6D\x20\x77\x69\x74\x68\x20\x72\x65\x71\x75\x65\x73\x74\x3A","\x6D\x65\x73\x73\x61\x67\x65","\x63\x61\x74\x63\x68","\x73\x74\x61\x74\x75\x73","\x72\x65\x73\x70\x6F\x6E\x73\x65","\x65\x72\x72\x6F\x72\x73","\x52\x4D\x49","\x6D\x61\x74\x68","\x2D\x2D\x4D\x41\x54\x48\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x43\x61\x6C\x63\x75\x6C\x61\x74\x69\x6E\x67\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6F\x6E\x2E\x2E\x2E","\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E","\x53\x61\x76\x69\x6E\x67\x20\x72\x65\x73\x75\x6C\x74\x20\x69\x6E\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x2E\x2E","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64","\x69\x73\x41\x72\x72\x61\x79","\x5B","\x5D","\x22","\x66\x6F\x72","\x66\x6F\x72\x45\x61\x63\x68","\x45\x72\x72\x6F\x72\x20\x65\x76\x61\x6C\x75\x61\x74\x69\x6E\x67\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6F\x6E","\x70\x6C\x61\x79\x62\x61\x63\x6B","\x2D\x2D\x50\x4C\x41\x59\x42\x41\x43\x4B\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x70\x6C\x61\x79\x62\x61\x63\x6B\x2E\x2E\x2E","\x50\x4C\x41\x59\x42\x41\x43\x4B","\x6D\x65\x6E\x75","\x2D\x2D\x4D\x45\x4E\x55\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x54\x68\x65\x72\x65\x20\x61\x72\x65\x20","\x72\x65\x74\x72\x79","\x20\x72\x65\x74\x72\x69\x65\x73","\x41\x6E\x6E\x6F\x75\x6E\x63\x69\x6E\x67\x20\x61\x6E\x64\x20\x77\x61\x69\x74\x69\x6E\x67\x20\x66\x6F\x72\x20\x75\x73\x65\x72\x20\x65\x6E\x74\x72\x79\x2E\x2E\x2E","\x47\x45\x54\x20\x44\x41\x54\x41\x20\x25\x73\x20\x25\x73\x20\x25\x73\x0A","\x64\x69\x67\x69\x74","\x72\x65\x73\x75\x6C\x74","\x28\x74\x69\x6D\x65\x6F\x75\x74\x29","\x72\x65\x70\x6C\x61\x63\x65","\x6C\x65\x6E\x67\x74\x68","\x2D\x31","\x64\x61\x74\x61","\x53\x61\x76\x69\x6E\x67\x20\x75\x73\x65\x72\x20\x65\x6E\x74\x72\x79\x20\x69\x6E\x20\x61\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x2E\x2E","\x4D\x65\x6E\x75\x20\x74\x69\x6D\x65\x6F\x75\x74\x21","\x30","\x74","\x52\x75\x6E\x20\x6F\x75\x74\x20\x6F\x66\x20\x72\x65\x74\x72\x69\x65\x73\x21","\x2D","\x73\x61\x79\x6E\x75\x6D\x62\x65\x72","\x2D\x2D\x53\x41\x59\x4E\x55\x4D\x42\x45\x52\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x53\x61\x79\x69\x6E\x67\x20\x6E\x75\x6D\x62\x65\x72\x2E\x2E\x2E","\x53\x41\x59\x20\x4E\x55\x4D\x42\x45\x52\x20\x25\x73\x20\x22\x25\x73\x22\x0A","\x6E\x75\x6D\x62\x65\x72","\x65\x73\x63\x61\x70\x65\x5F\x64\x69\x67\x69\x74\x73","\x73\x61\x79\x70\x68\x6F\x6E\x65\x74\x69\x63","\x2D\x2D\x53\x41\x59\x50\x48\x4F\x4E\x45\x54\x49\x43\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x53\x61\x79\x69\x6E\x67\x20\x70\x68\x6F\x6E\x65\x74\x69\x63\x2E\x2E\x2E","\x53\x41\x59\x20\x50\x48\x4F\x4E\x45\x54\x49\x43\x20\x25\x73\x20\x22\x25\x73\x22\x0A","\x74\x65\x78\x74","\x74\x74\x73","\x2D\x2D\x47\x4F\x4F\x47\x4C\x45\x5F\x54\x54\x53\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x47\x6F\x6F\x67\x6C\x65\x20\x54\x54\x53\x20\x65\x72\x72\x6F\x72\x3A\x20","\x43\x61\x6C\x6C\x69\x6E\x67\x20\x47\x6F\x6F\x67\x6C\x65\x20\x54\x54\x53\x20\x41\x50\x49\x2E\x2E\x2E","\x67\x6F\x6F\x67\x6C\x65\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x5F\x73\x61\x76\x65\x4E\x61\x6D\x65","\x5F\x73\x61\x76\x65\x50\x61\x74\x68","\x2F\x74\x6D\x70\x2F\x25\x73\x2E\x6D\x70\x33","\x63\x72\x65\x61\x74\x65\x57\x72\x69\x74\x65\x53\x74\x72\x65\x61\x6D","\x65\x6E\x64","\x47\x6F\x74\x20\x61\x75\x64\x69\x6F\x20\x62\x75\x66\x66\x65\x72\x21","\x41\x75\x64\x69\x6F\x20\x73\x61\x76\x65\x64\x20\x74\x6F\x20","\x5F\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x50\x61\x74\x68","\x2F\x74\x6D\x70\x2F\x25\x73\x2E\x77\x61\x76","\x53\x65\x74\x74\x69\x6E\x67\x20\x6F\x72\x69\x67\x69\x6E\x61\x6C\x20\x61\x75\x64\x69\x6F\x20\x66\x69\x6C\x65\x20\x61\x63\x63\x65\x73\x73\x20\x70\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E\x73\x21","\x30\x37\x37\x37","\x63\x68\x6D\x6F\x64\x53\x79\x6E\x63","\x43\x6F\x6E\x76\x65\x72\x74\x69\x6E\x67\x20\x6F\x72\x69\x67\x69\x6E\x61\x6C\x20\x61\x75\x64\x69\x6F\x20\x66\x69\x6C\x65\x20\x61\x6E\x64\x20\x73\x61\x76\x69\x6E\x67\x20\x69\x6E\x20","\x77\x61\x76","\x74\x72\x61\x6E\x73\x63\x6F\x64\x65","\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x2A\x54\x54\x53\x20\x61\x75\x64\x69\x6F\x20\x43\x6F\x6E\x76\x65\x72\x73\x69\x6F\x6E\x20\x45\x72\x72\x6F\x72\x3A\x20","\x54\x54\x53\x20\x61\x75\x64\x69\x6F\x20\x63\x6F\x6E\x76\x65\x72\x73\x69\x6F\x6E\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x64","\x53\x65\x74\x74\x69\x6E\x67\x20\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x20\x61\x75\x64\x69\x6F\x20\x66\x69\x6C\x65\x20\x61\x63\x63\x65\x73\x73\x20\x70\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E\x73\x21","\x43\x61\x6C\x6C\x69\x6E\x67\x20\x61\x73\x74\x65\x72\x69\x73\x6B\x20\x70\x6C\x61\x79\x62\x61\x63\x6B\x2E\x2E\x2E","\x2F\x74\x6D\x70\x2F\x25\x73","\x41\x73\x74\x65\x72\x69\x73\x6B\x20\x70\x6C\x61\x79\x62\x61\x63\x6B\x20\x65\x72\x72\x6F\x72\x3A\x20","\x44\x65\x6C\x65\x74\x69\x6E\x67\x20\x74\x65\x6D\x70\x20\x61\x75\x64\x69\x6F\x20\x66\x69\x6C\x65\x73\x2E\x2E\x2E","\x43\x61\x6C\x6C\x69\x6E\x67\x20\x61\x73\x74\x65\x72\x69\x73\x6B\x20\x73\x74\x72\x65\x61\x6D\x20\x66\x69\x6C\x65\x2E\x2E\x2E","\x53\x54\x52\x45\x41\x4D\x20\x46\x49\x4C\x45\x20\x25\x73\x20\x22\x25\x73\x22\x0A","\x69\x6E\x74\x4B\x65\x79","\x41\x73\x74\x65\x72\x69\x73\x6B\x20\x73\x74\x72\x65\x61\x6D\x20\x66\x69\x6C\x65\x20\x65\x72\x72\x6F\x72\x3A\x20","\x73\x74\x72\x65\x61\x6D","\x77\x72\x69\x74\x65","\x54\x54\x53\x20\x72\x65\x71\x75\x65\x73\x74\x20\x65\x72\x72\x6F\x72\x3A","\x67\x65\x74","\x54\x65\x6D\x70\x20\x61\x75\x64\x69\x6F\x20\x66\x69\x6C\x65\x20","\x20\x64\x65\x6C\x65\x74\x65\x64\x21","\x75\x6E\x6C\x69\x6E\x6B","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x69\x73\x70\x65\x65\x63\x68\x74\x74\x73","\x2D\x2D\x49\x53\x50\x45\x45\x43\x48\x5F\x54\x54\x53\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x61\x70\x69\x2E\x69\x73\x70\x65\x65\x63\x68\x2E\x6F\x72\x67\x2F\x61\x70\x69\x2F\x72\x65\x73\x74\x3F\x61\x70\x69\x6B\x65\x79\x3D\x25\x73\x26\x61\x63\x74\x69\x6F\x6E\x3D\x63\x6F\x6E\x76\x65\x72\x74\x26\x74\x65\x78\x74\x3D\x25\x73\x26\x76\x6F\x69\x63\x65\x3D\x25\x73\x26\x73\x70\x65\x65\x64\x3D\x25\x73\x26\x66\x6F\x72\x6D\x61\x74\x3D\x6D\x70\x33","\x6B\x65\x79","\x69\x73\x70\x65\x65\x63\x68\x5F\x74\x74\x73\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x73\x70\x65\x65\x64","\x54\x68\x65\x20\x69\x73\x70\x65\x65\x63\x68\x20\x74\x74\x73\x20\x75\x72\x6C\x20\x69\x73\x3A\x20","\x43\x61\x6C\x6C\x69\x6E\x67\x20\x69\x53\x70\x65\x65\x63\x68\x20\x54\x54\x53\x20\x41\x50\x49\x2E\x2E\x2E","\x69\x53\x50\x65\x65\x63\x68\x20\x54\x54\x53\x20\x65\x72\x72\x6F\x72\x3A\x20","\x67\x65\x74\x64\x69\x67\x69\x74\x73","\x2D\x2D\x47\x45\x54\x44\x49\x47\x49\x54\x53\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x6D\x61\x78\x64\x69\x67\x69\x74","\x6D\x69\x6E\x64\x69\x67\x69\x74","\x54\x68\x65\x72\x65\x20\x69\x73\x20\x61\x20\x72\x65\x73\x75\x6C\x74\x2C\x20\x69\x73\x20\x6F\x76\x65\x72\x20\x74\x68\x65\x20\x6D\x69\x6E\x69\x6D\x75\x6D\x20\x6C\x65\x6E\x67\x74\x68\x20\x61\x6E\x64\x20\x6E\x6F\x74\x20\x64\x75\x65\x20\x74\x6F\x20\x61\x6E\x20\x68\x61\x6E\x67\x75\x70\x21","\x78","\x56\x61\x72\x69\x61\x62\x6C\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x2C\x20\x75\x6E\x61\x62\x6C\x65\x20\x74\x6F\x20\x73\x61\x76\x65\x20\x74\x68\x65\x20\x72\x65\x73\x75\x6C\x74\x21","\x69","\x43\x68\x61\x6E\x6E\x65\x6C\x20\x68\x61\x6E\x67\x75\x70\x21","\x4E\x6F\x20\x65\x6E\x74\x72\x79\x20\x6F\x72\x20\x6E\x6F\x74\x20\x6C\x6F\x6E\x67\x20\x65\x6E\x6F\x75\x67\x68\x21","\x67\x65\x74\x73\x65\x63\x72\x65\x74\x64\x69\x67\x69\x74\x73","\x2D\x2D\x47\x45\x54\x53\x45\x43\x52\x45\x54\x44\x49\x47\x49\x54\x53\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x68\x69\x64\x64\x65\x6E\x64\x69\x67\x69\x74\x73\x6E\x75\x6D","\x68\x69\x64\x64\x65\x6E\x64\x69\x67\x69\x74\x73\x70\x6F\x73","\x66\x69\x72\x73\x74","\x2A","\x72\x65\x63\x6F\x72\x64","\x2D\x2D\x52\x45\x43\x4F\x52\x44\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x53\x74\x61\x72\x74\x69\x6E\x67\x20\x63\x61\x6C\x6C\x20\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2E\x2E\x2E","\x52\x45\x43\x4F\x52\x44\x20\x46\x49\x4C\x45\x20\x25\x73\x20\x25\x73\x20\x22\x25\x73\x22\x20\x25\x73\x20\x25\x73\x20\x25\x73\x20\x25\x73\x0A","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73","\x5F","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x46\x6F\x72\x6D\x61\x74","\x63\x6F\x64\x65","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20","\x3A","\x20\x62\x6C\x6F\x63\x6B\x20\x6C\x6F\x67","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x63\x6F\x6E\x74\x65\x78\x74","\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x70\x72\x69\x6F\x72\x69\x74\x79","\x61\x63\x63\x6F\x75\x6E\x74\x63\x6F\x64\x65","\x64\x6E\x69\x64","\x66\x69\x6C\x65","\x2E","\x63\x72\x65\x61\x74\x65","\x53\x61\x76\x69\x6E\x67\x20\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x20\x66\x69\x6C\x65\x6E\x61\x6D\x65\x20\x69\x6E\x20\x52\x45\x43\x4F\x52\x44\x49\x4E\x47\x5F\x53\x41\x56\x45\x4E\x41\x4D\x45\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x2E\x2E","\x53\x45\x54\x20\x56\x41\x52\x49\x41\x42\x4C\x45\x20\x25\x73\x20\x25\x73\x0A","\x52\x45\x43\x4F\x52\x44\x49\x4E\x47\x5F\x53\x41\x56\x45\x4E\x41\x4D\x45","\x67\x6F\x74\x6F\x69\x66\x74\x69\x6D\x65","\x2D\x2D\x47\x4F\x54\x4F\x49\x46\x54\x49\x4D\x45\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x66\x61\x6C\x73\x65","\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x69\x6E\x74\x65\x72\x76\x61\x6C\x5F\x69\x64","\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64","\x69\x64","\x66\x69\x6C\x74\x65\x72","\x49\x73\x20\x61\x20\x67\x72\x6F\x75\x70\x20\x6F\x66\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x73\x21","\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x73\x21","\x43\x68\x65\x63\x6B\x69\x6E\x67\x20\x69\x66\x20\x61\x74\x20\x6C\x65\x61\x73\x74\x20\x6F\x6E\x65\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x20\x69\x73\x20\x76\x61\x6C\x69\x64\x2E\x2E\x2E","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x73\x70\x6C\x69\x74\x49\x6E\x74\x65\x72\x76\x61\x6C","\x69\x73\x56\x61\x6C\x69\x64\x49\x6E\x74\x65\x72\x76\x61\x6C","\x49\x6E\x74\x65\x72\x76\x61\x6C\x20","\x20\x69\x73\x20\x76\x61\x6C\x69\x64\x21","\x74\x72\x75\x65","\x54\x68\x65\x72\x65\x20\x61\x72\x65\x20\x6E\x6F\x20\x73\x75\x62\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x73\x2C\x20\x73\x6F\x20\x69\x74\x20\x77\x69\x6C\x6C\x20\x62\x65\x20\x61\x6C\x77\x61\x79\x73\x20\x74\x72\x75\x65\x21","\x49\x73\x20\x61\x20\x73\x69\x6E\x67\x6C\x65\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x21","\x54\x68\x65\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x20\x69\x73\x20\x76\x61\x6C\x69\x64\x21","\x54\x68\x65\x20\x66\x69\x6E\x61\x6C\x20\x72\x65\x73\x75\x6C\x74\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x69\x6E\x74\x65\x72\x76\x61\x6C\x73\x20\x69\x73\x20\x22","\x22\x21","\x76\x73\x77\x69\x74\x63\x68","\x2D\x2D\x56\x41\x52\x49\x41\x42\x4C\x45\x5F\x53\x57\x49\x54\x43\x48\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x47\x65\x74\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x76\x61\x6C\x75\x65\x20\x61\x6E\x64\x20\x73\x65\x61\x72\x63\x68\x69\x6E\x67\x20\x74\x68\x65\x20\x72\x69\x67\x68\x74\x20\x65\x78\x69\x74\x2E\x2E\x2E","\x67\x6F\x61\x6C","\x67\x6F\x61\x6C\x6E\x61\x6D\x65","\x31","\x73\x65\x6E\x64\x6D\x61\x69\x6C","\x2D\x2D\x73\x65\x6E\x64\x4D\x61\x69\x6C\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x61\x63\x63\x6F\x75\x6E\x74\x5F\x69\x64","\x6D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x74\x6F","\x63\x63","\x73\x75\x62\x6A\x65\x63\x74","\x63\x72\x65\x61\x74\x65\x4D\x61\x69\x6C","\x74\x65\x6D\x70\x6C\x61\x74\x65\x5F\x69\x64","\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x66\x72\x6F\x6D","\x68\x74\x6D\x6C","\x72\x65\x6E\x64\x65\x72","\x45\x72\x72\x6F\x72\x20\x66\x69\x6E\x64\x69\x6E\x67\x20\x74\x65\x6D\x70\x6C\x61\x74\x65","\x45\x72\x72\x6F\x72\x20\x66\x69\x6E\x64\x69\x6E\x67\x20\x6D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x20\x61\x64\x64\x72\x65\x73\x73","\x45\x72\x72\x6F\x72\x20\x66\x69\x6E\x64\x69\x6E\x67\x20\x67\x65\x6E\x65\x72\x61\x6C\x20\x53\x4D\x54\x50\x20\x61\x64\x64\x72\x65\x73\x73","\x54\x68\x65\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x65\x64\x20\x61\x63\x63\x6F\x75\x6E\x74\x20\x69\x73\x20\x6E\x6F\x74\x20\x76\x61\x6C\x69\x64","\x73\x65\x6E\x64\x73\x6D\x73","\x2D\x2D\x73\x65\x6E\x64\x53\x4D\x53\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x73\x6D\x73\x5F\x74\x65\x78\x74","\x63\x72\x65\x61\x74\x65\x53\x6D\x73","\x73\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74\x73","\x74\x79\x70\x65","\x74\x77\x69\x6C\x69\x6F","\x74\x65\x73\x74","\x2B","\x45\x72\x72\x6F\x72\x20\x66\x69\x6E\x64\x69\x6E\x67\x20\x53\x4D\x53\x20\x61\x63\x63\x6F\x75\x6E\x74","\x73\x79\x73\x74\x65\x6D","\x2D\x2D\x53\x59\x53\x54\x45\x4D\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x63\x6F\x6D\x6D\x61\x6E\x64","\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x73\x79\x73\x74\x65\x6D\x20\x63\x6F\x6D\x6D\x61\x6E\x64\x2E\x2E\x2E","\x50\x72\x6F\x67\x72\x61\x6D\x20\x6F\x75\x74\x70\x75\x74\x3A","\x53\x61\x76\x69\x6E\x67\x20\x74\x68\x65\x20\x6F\x75\x74\x70\x75\x74\x20\x69\x6E\x20\x61\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x2E\x2E","\x2D\x2D\x41\x47\x49\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x41\x47\x49\x20\x63\x6F\x6D\x6D\x61\x6E\x64\x2E\x2E\x2E","\x41\x47\x49","\x61\x72\x67\x73","\x73\x75\x62\x70\x72\x6F\x6A\x65\x63\x74","\x2D\x2D\x53\x55\x42\x50\x52\x4F\x4A\x45\x43\x54\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x70\x72\x6F\x6A\x65\x63\x74\x73","\x70\x72\x6F\x6A\x65\x63\x74\x5F\x69\x64","\x4D\x6F\x76\x69\x6E\x67\x20\x74\x6F\x20\x70\x72\x6F\x6A\x65\x63\x74\x20\x22\x22","\x22\x61\x67\x69\x3A\x2F\x2F\x31\x32\x37\x2E\x30\x2E\x30\x2E\x31\x2F\x73\x71\x75\x61\x72\x65\x2C\x25\x73\x22","\x69\x73\x70\x65\x65\x63\x68\x61\x73\x72","\x2D\x2D\x49\x53\x50\x45\x45\x43\x48\x5F\x41\x53\x52\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x75\x74\x74\x65\x72\x61\x6E\x63\x65","\x22\x2D\x31\x22","\x63\x6F\x6E\x66\x69\x64\x65\x6E\x63\x65","\x69\x73\x45\x6D\x70\x74\x79","\x53\x61\x76\x69\x6E\x67\x20\x73\x65\x72\x76\x65\x72\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\x20\x69\x6E\x74\x6F\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73\x2E\x2E\x2E","\x66\x6F\x72\x4F\x77\x6E","\x45\x72\x72\x6F\x72\x3A\x20\x4E\x6F\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x21","\x41\x53\x52\x5F\x45\x52\x52\x4F\x52","\x22\x4E\x6F\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x21\x22","\x25\x73\x2C\x25\x73\x2C\x2C","\x62\x65\x65\x70","\x42\x45\x45\x50","\x71","\x23","\x52\x45\x43\x4F\x52\x44","\x41\x73\x74\x65\x72\x69\x73\x6B\x20\x72\x65\x63\x6F\x72\x64\x20\x66\x69\x6C\x65\x20\x65\x72\x72\x6F\x72\x3A\x20","\x47\x65\x74\x74\x69\x6E\x67\x20\x41\x53\x52\x20\x75\x72\x6C\x2E\x2E\x2E","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x61\x70\x69\x2E\x69\x73\x70\x65\x65\x63\x68\x2E\x6F\x72\x67\x2F\x61\x70\x69\x2F\x72\x65\x73\x74\x3F\x61\x70\x69\x6B\x65\x79\x3D\x25\x73\x26\x61\x63\x74\x69\x6F\x6E\x3D\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x26\x6C\x6F\x63\x61\x6C\x65\x3D\x25\x73","\x69\x73\x70\x65\x65\x63\x68\x5F\x61\x73\x72\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x6D\x6F\x64\x65\x6C","\x26\x6D\x6F\x64\x65\x6C\x3D\x25\x73","\x26\x66\x72\x65\x65\x66\x6F\x72\x6D\x3D\x33","\x52\x65\x61\x64\x69\x6E\x67\x20\x74\x65\x6D\x70\x20\x41\x53\x52\x20\x61\x75\x64\x69\x6F\x20\x66\x69\x6C\x65\x2E\x2E\x2E","\x44\x65\x6C\x65\x74\x69\x6E\x67\x20\x74\x65\x6D\x70\x20\x41\x53\x52\x20\x66\x69\x6C\x65\x2E\x2E\x2E","\x41\x53\x52\x20\x72\x65\x71\x75\x65\x73\x74\x20\x65\x72\x72\x6F\x72\x3A\x20","\x47\x6F\x74\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\x20\x66\x72\x6F\x6D\x20\x74\x68\x65\x20\x41\x53\x52\x20\x73\x65\x72\x76\x65\x72\x2C\x20\x65\x6C\x61\x62\x6F\x72\x61\x74\x69\x6E\x67\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\x2E\x2E\x2E","\x26","\x3D","\x20","\x73\x75\x63\x63\x65\x73\x73","\x47\x6F\x74\x20\x61\x75\x64\x69\x6F\x20\x66\x69\x6C\x65\x20\x66\x72\x6F\x6D\x20\x66\x69\x6C\x65\x73\x79\x73\x74\x65\x6D\x2C\x20\x67\x65\x6E\x65\x72\x61\x74\x69\x6E\x67\x20\x75\x72\x6C\x2E\x2E\x2E","\x62\x61\x73\x65\x36\x34","\x62\x69\x6E\x61\x72\x79","\x26\x63\x6F\x6E\x74\x65\x6E\x74\x2D\x74\x79\x70\x65\x3D\x61\x75\x64\x69\x6F\x2F\x78\x2D\x77\x61\x76\x26\x61\x75\x64\x69\x6F\x3D\x25\x73","\x43\x61\x6C\x6C\x69\x6E\x67\x20\x41\x53\x52\x20\x73\x65\x72\x76\x65\x72\x2E\x2E\x2E","\x72\x65\x61\x64\x46\x69\x6C\x65","\x64\x61\x74\x61\x62\x61\x73\x65","\x2D\x2D\x44\x41\x54\x41\x42\x41\x53\x45\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x64\x62\x43\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x73","\x6F\x64\x62\x63\x5F\x69\x64","\x54\x72\x79\x69\x6E\x67\x20\x74\x6F\x20\x67\x65\x74\x20\x4F\x44\x42\x43\x20\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x2E\x2E\x2E","\x71\x75\x65\x72\x79","\x64\x73\x6E","\x6F\x70\x65\x6E\x53\x79\x6E\x63","\x71\x75\x65\x72\x79\x53\x79\x6E\x63","\x63\x6C\x6F\x73\x65\x53\x79\x6E\x63","\x45\x52\x52\x4F\x52","\x4D\x45\x53\x53\x41\x47\x45","\x67\x6F\x74\x6F\x63","\x2D\x2D\x47\x4F\x54\x4F\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x47\x6F\x69\x6E\x67\x20\x74\x6F\x20\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x20","\x20\x2E\x2E\x2E","\x4C\x6F\x63\x61\x6C\x2F\x25\x73\x40\x25\x73","\x67\x6F\x74\x6F\x69\x66","\x2D\x2D\x47\x4F\x54\x4F\x49\x46\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x4E\x4F\x4F\x50","\x22\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x3A\x20","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x45\x76\x61\x6C\x75\x61\x74\x69\x6E\x67\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x2E\x2E\x2E","\x45\x72\x72\x6F\x72\x20\x65\x76\x61\x6C\x75\x61\x74\x69\x6E\x67\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x2C\x20\x67\x6F\x69\x6E\x67\x20\x69\x6E\x74\x6F\x20\x74\x68\x65\x20\x66\x61\x6C\x73\x65\x20\x62\x72\x61\x6E\x63\x68\x2E\x2E\x2E","\x54\x68\x65\x20\x72\x65\x73\x75\x6C\x74\x20\x69\x73\x20","\x68\x61\x6E\x67\x75\x70","\x2D\x2D\x48\x41\x4E\x47\x55\x50\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x48\x61\x6E\x67\x69\x6E\x20\x75\x70\x20\x74\x68\x65\x20\x63\x61\x6C\x6C\x2E\x2E\x2E","\x6E\x6F\x6F\x70","\x2D\x2D\x4E\x4F\x4F\x50\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x6F\x75\x74\x70\x75\x74","\x4E\x4F\x4F\x50\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20","\x73\x61\x79\x64\x69\x67\x69\x74\x73","\x2D\x2D\x53\x41\x59\x44\x49\x47\x49\x54\x53\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x53\x61\x79\x69\x6E\x67\x20\x64\x69\x67\x69\x74\x73\x2E\x2E\x2E","\x53\x41\x59\x20\x44\x49\x47\x49\x54\x53\x20\x25\x73\x20\x22\x25\x73\x22\x0A","\x64\x69\x67\x69\x74\x73","\x73\x65\x74","\x2D\x2D\x53\x45\x54\x20\x42\x4C\x4F\x43\x4B\x2D\x2D","\x53\x61\x76\x69\x6E\x67\x20\x76\x61\x6C\x75\x65\x20\x69\x6E\x20\x61\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x2E\x2E","\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x76\x61\x6C\x75\x65","\x6D\x78\x63\x65\x6C\x6C","\x24","\x66\x6F\x72\x49\x6E","\x72\x65\x64\x75\x63\x65","\x65\x64\x67\x65","\x73\x6F\x75\x72\x63\x65","\x76\x61\x6C\x75\x65","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x24\x2E\x74\x61\x72\x67\x65\x74","\x63\x68\x61\x72\x41\x74","\x7B","\x7D","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x6B\x65\x79\x73","\x5C\x24\x26","\x67","\x63\x6C\x6F\x6E\x65","\x54\x65\x78\x74\x20\x61\x66\x74\x65\x72\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73\x20\x72\x65\x70\x6C\x61\x63\x65\x3A\x20","\x76\x65\x72\x74\x69\x63\x65\x73","\x69\x73\x46\x75\x6E\x63\x74\x69\x6F\x6E","\x4E\x6F\x20\x74\x61\x72\x67\x65\x74\x20\x66\x6F\x75\x6E\x64\x2C\x20\x68\x61\x6E\x67\x75\x70\x21","\x72\x65\x70\x6C\x61\x63\x65\x64","\x4E\x6F\x20\x74\x61\x72\x67\x65\x74\x20\x66\x6F\x75\x6E\x64\x2C\x20\x73\x74\x6F\x70\x70\x69\x6E\x67\x20\x22\x46\x69\x6E\x61\x6C\x6C\x79\x22\x20\x62\x72\x61\x6E\x63\x68\x21","\x2F\x2F\x45\x72\x72\x6F\x72\x3A","\x2F\x2F\x43\x6F\x6E\x74\x65\x78\x74\x20\x63\x6C\x6F\x73\x65","\x2F\x2F\x53\x74\x61\x72\x74\x69\x6E\x67\x20\x22\x46\x69\x6E\x61\x6C\x6C\x79\x22\x20\x62\x72\x61\x6E\x63\x68\x21","\x6C\x61\x75\x6E\x63\x68\x46\x69\x62\x65\x72","\x75\x70\x64\x61\x74\x65","\x2F\x2F\x43\x6F\x6E\x74\x65\x78\x74\x20\x48\x61\x6E\x67\x75\x70","\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x52\x65\x63\x65\x69\x76\x65\x64\x20\x6E\x65\x77\x20\x63\x61\x6C\x6C\x20\x66\x72\x6F\x6D\x3A\x20","\x61\x67\x69\x5F\x63\x61\x6C\x6C\x65\x72\x69\x64","\x20\x77\x69\x74\x68\x20\x75\x6E\x69\x71\x75\x65\x69\x64\x3A\x20","\x61\x67\x69\x5F\x75\x6E\x69\x71\x75\x65\x69\x64","\x61\x67\x69\x5F\x6E\x65\x74\x77\x6F\x72\x6B","\x61\x67\x69\x5F\x6E\x65\x74\x77\x6F\x72\x6B\x5F\x73\x63\x72\x69\x70\x74","\x61\x67\x69\x5F\x72\x65\x71\x75\x65\x73\x74","\x61\x67\x69\x5F\x63\x68\x61\x6E\x6E\x65\x6C","\x61\x67\x69\x5F\x6C\x61\x6E\x67\x75\x61\x67\x65","\x61\x67\x69\x5F\x74\x79\x70\x65","\x61\x67\x69\x5F\x76\x65\x72\x73\x69\x6F\x6E","\x61\x67\x69\x5F\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x61\x67\x69\x5F\x63\x61\x6C\x6C\x69\x6E\x67\x70\x72\x65\x73","\x61\x67\x69\x5F\x63\x61\x6C\x6C\x69\x6E\x67\x61\x6E\x69\x32","\x61\x67\x69\x5F\x63\x61\x6C\x6C\x69\x6E\x67\x74\x6F\x6E","\x61\x67\x69\x5F\x63\x61\x6C\x6C\x69\x6E\x67\x74\x6E\x73","\x61\x67\x69\x5F\x64\x6E\x69\x64","\x61\x67\x69\x5F\x72\x64\x6E\x69\x73","\x61\x67\x69\x5F\x63\x6F\x6E\x74\x65\x78\x74","\x61\x67\x69\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x61\x67\x69\x5F\x70\x72\x69\x6F\x72\x69\x74\x79","\x61\x67\x69\x5F\x65\x6E\x68\x61\x6E\x63\x65\x64","\x61\x67\x69\x5F\x61\x63\x63\x6F\x75\x6E\x74\x63\x6F\x64\x65","\x61\x67\x69\x5F\x74\x68\x72\x65\x61\x64\x69\x64","\x61\x67\x69\x5F\x61\x72\x67\x5F\x31","\x45\x72\x72\x6F\x72\x3A","\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E","\x6D\x78\x67\x72\x61\x70\x68\x6D\x6F\x64\x65\x6C","\x4E\x6F\x20\x72\x6F\x6F\x74\x20\x69\x6E\x20\x70\x72\x6F\x6A\x65\x63\x74\x21","\x70\x61\x72\x73\x65\x53\x74\x72\x69\x6E\x67","\x4E\x6F\x20\x70\x72\x6F\x6A\x65\x63\x74\x20\x70\x75\x62\x6C\x69\x73\x68\x65\x64\x21","\x4E\x6F\x20\x70\x72\x6F\x6A\x65\x63\x74\x20\x66\x6F\x75\x6E\x64\x21","\x66\x69\x6E\x64\x4F\x6E\x65","\x4E\x6F\x20\x70\x72\x6F\x6A\x65\x63\x74\x20\x61\x72\x67\x75\x6D\x65\x6E\x74\x21","\x53\x65\x74\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x2E\x2E","\x53\x65\x6E\x64\x69\x6E\x67\x20\x73\x65\x74\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x2C\x76\x61\x72\x69\x61\x62\x6C\x65\x20\x69\x73\x20","\x2C\x20\x76\x61\x6C\x75\x65\x20\x69\x73\x20","\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72","\x5D\x5B","\x5F\x52\x4F\x57\x53\x5F\x43\x4F\x55\x4E\x54","\x28","\x6C\x61\x73\x74\x49\x6E\x64\x65\x78\x4F\x66","\x29","\x67\x65\x74\x56\x61\x72\x69\x61\x62\x6C\x65","\x73\x6F\x75\x6E\x64\x73","\x25\x73\x2F\x25\x73","\x73\x6F\x75\x6E\x64\x50\x61\x74\x68","\x2F\x76\x61\x72\x2F\x6F\x70\x74\x2F\x6D\x6F\x74\x69\x6F\x6E\x2F\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x73\x6F\x75\x6E\x64\x73\x2F\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x73\x61\x76\x65\x5F\x6E\x61\x6D\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x79\x6E\x63\x68","\x66\x6F\x72\x63\x65\x53\x79\x6E\x63\x68","\x6D\x65\x72\x67\x65","\x75\x6E\x73\x68\x69\x66\x74","\x61\x67\x69\x5F\x70\x6F\x72\x74","\x46\x61\x69\x6C\x65\x64\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x69\x6E\x67\x20\x41\x47\x49\x20\x73\x65\x72\x76\x69\x63\x65","\x6C\x69\x73\x74\x65\x6E","\x63\x72\x65\x61\x74\x65\x53\x65\x72\x76\x65\x72","\x63\x6F\x6C\x6C\x65\x63\x74\x69\x6F\x6E","\x64\x6F\x63","\x75\x70\x64\x61\x74\x65\x43\x6F\x6C\x6C\x65\x63\x74\x69\x6F\x6E","\x72\x65\x70\x6C\x61\x63\x65\x43\x6F\x6C\x6C\x65\x63\x74\x69\x6F\x6E","\x72\x65\x6D\x6F\x76\x65","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x43\x6F\x6C\x6C\x65\x63\x74\x69\x6F\x6E","\x61\x6C\x6C"];_0x1260[0];var _=require(_0x1260[1]);var agi=require(_0x1260[2]);var util=require(_0x1260[3]);var moment=require(_0x1260[4]);var xml=require(_0x1260[5]);var wait=require(_0x1260[6]);var sr=require(_0x1260[7]);var path=require(_0x1260[8]);var config=require(_0x1260[9]);var sh=require(_0x1260[10]);var Promise=require(_0x1260[11]);var rp=require(_0x1260[12]);const googleTTS=require(_0x1260[13]);const fs=require(_0x1260[14]);const sox=require(_0x1260[15]);const request=require(_0x1260[16]);const base64=require(_0x1260[17]);const Util=require(_0x1260[18]);var db=require(_0x1260[19])();var SquareProject=require(_0x1260[21])[_0x1260[20]];var Variable=require(_0x1260[21])[_0x1260[22]];var SquareOdbc=require(_0x1260[21])[_0x1260[23]];var Setting=require(_0x1260[21])[_0x1260[24]];var User=require(_0x1260[21])[_0x1260[25]];var VoiceQueue=require(_0x1260[21])[_0x1260[26]];var Interval=require(_0x1260[21])[_0x1260[27]];var Sound=require(_0x1260[21])[_0x1260[28]];var SquareRecording=require(_0x1260[21])[_0x1260[29]];var SmsAccount=require(_0x1260[21])[_0x1260[30]];var MailServerOut=require(_0x1260[21])[_0x1260[31]];var Mustache=require(_0x1260[32]);var Template=require(_0x1260[21])[_0x1260[33]];var collections={};var methods={};process[_0x1260[35]](_0x1260[36],function(_0x538ax24){console[_0x1260[40]](util[_0x1260[39]](_0x1260[37],_0x538ax24,process[_0x1260[38]]))})[_0x1260[35]](_0x1260[34],function(_0x538ax23){console[_0x1260[34]](_0x538ax23)});console[_0x1260[40]](util[_0x1260[39]](_0x1260[41],process[_0x1260[38]]));methods[_0x1260[42]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[43]);console[_0x1260[40]](_0x1260[44]);_0x538ax25[_0x1260[46]](_0x1260[45],function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})};methods[_0x1260[47]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[48]);console[_0x1260[40]](_0x1260[49]+ _0x538ax26[_0x1260[50]]+ _0x1260[51]);_0x538ax25[_0x1260[53]](_0x538ax26[_0x1260[50]],_0x538ax26[_0x1260[52]],function(_0x538ax23,_0x538ax28){if(_0x538ax27){_0x538ax27(_0x538ax23,_0x538ax28)}})};methods[_0x1260[54]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[55]);if(!collections[_0x1260[56]]){getUsers(false)};var _0x538ax29=_[_0x1260[58]](collections[_0x1260[56]],{id:parseInt(_0x538ax26[_0x1260[57]])});console[_0x1260[40]](_0x1260[59]+ util[_0x1260[39]](_0x1260[60],_0x538ax29[_0x1260[61]])+ _0x1260[62]);var _0x538ax2a=[util[_0x1260[39]](_0x1260[60],_0x538ax29[_0x1260[61]]),_0x538ax26[_0x1260[63]],_0x538ax26[_0x1260[64]],_0x538ax26[_0x1260[65]]];_0x538ax25[_0x1260[53]](_0x1260[66],_0x538ax2a[_0x1260[68]](_0x1260[67]),function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})};methods[_0x1260[69]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[70]);if(_0x538ax26[_0x1260[42]]=== _0x1260[71]){_0x538ax25[_0x1260[46]](_0x1260[45],function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})}else {_0x538ax27(null,{code:200,result:1})}};methods[_0x1260[72]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[73]);console[_0x1260[40]](_0x1260[59]+ util[_0x1260[39]](_0x1260[60],_0x538ax26[_0x1260[74]])+ _0x1260[62]);var _0x538ax2a=[util[_0x1260[39]](_0x1260[75],_0x538ax26[_0x1260[74]],_0x538ax26[_0x1260[76]]),_0x538ax26[_0x1260[63]],_0x538ax26[_0x1260[64]],_0x538ax26[_0x1260[65]]];_0x538ax25[_0x1260[53]](_0x1260[66],_0x538ax2a[_0x1260[68]](_0x1260[67]),function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})};methods[_0x1260[77]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[78]);if(!collections[_0x1260[79]]){getQueues(false)};var _0x538ax2b=_[_0x1260[58]](collections[_0x1260[79]],{name:_0x538ax26[_0x1260[80]]});var _0x538ax2c={uniqueid:_0x538ax25[_0x1260[81]],node:_0x538ax26[_0x1260[82]],application:_0x538ax26[_0x1260[83]],data:_0x538ax2b[_0x1260[61]],project_name:_0x538ax25[_0x1260[84]],callerid:_0x538ax25[_0x1260[85]],message:_0x1260[86]};process[_0x1260[46]](_0x538ax2c);getFilePath(_0x538ax26[_0x1260[95]])[_0x1260[94]](function(_0x538ax2d){var _0x538ax2a=[_0x538ax2b[_0x1260[61]],_0x538ax26[_0x1260[64]],_0x538ax26[_0x1260[65]],_0x538ax2d,_0x538ax26[_0x1260[63]],_0x538ax26[_0x1260[2]],_0x538ax26[_0x1260[87]],_0x538ax26[_0x1260[88]],_0x1260[89],_0x538ax26[_0x1260[90]]];console[_0x1260[40]](_0x1260[91]+ _0x538ax2b[_0x1260[61]]+ _0x1260[92]);_0x538ax25[_0x1260[53]](_0x1260[93],_0x538ax2a[_0x1260[68]](_0x1260[67]),function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})})};methods[_0x1260[96]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[97]);var _0x538ax2a=[_0x538ax26[_0x1260[98]],_0x538ax26[_0x1260[52]]];var _0x538ax2c={uniqueid:_0x538ax25[_0x1260[81]],node:_0x538ax26[_0x1260[82]],application:_0x538ax26[_0x1260[83]],data:_0x538ax2a[_0x1260[68]](_0x1260[67])|| null,project_name:_0x538ax25[_0x1260[84]],callerid:_0x538ax25[_0x1260[85]],message:_0x1260[86]};process[_0x1260[46]](_0x538ax2c);console[_0x1260[40]](_0x1260[99]);_0x538ax25[_0x1260[53]](_0x1260[100],_0x538ax2a[_0x1260[68]](_0x1260[67]),function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})};methods[_0x1260[101]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[102]);var _0x538ax2e={method:_0x1260[103],uri:_0x1260[104],body:{id_list:parseInt(_0x538ax26[_0x1260[105]]),name:_0x538ax26[_0x1260[61]]|| _0x1260[89],phones:_0x538ax26[_0x1260[76]][_0x1260[107]]()[_0x1260[106]](_0x1260[67]),description:_0x538ax26[_0x1260[82]]|| _0x1260[89],planningtime:moment()[_0x1260[111]](_0x538ax26[_0x1260[109]]|| 5,_0x1260[110])[_0x1260[39]](_0x1260[108])},json:true};rp(_0x538ax2e)[_0x1260[94]](function(_0x538ax2f){if(_0x538ax2f[_0x1260[117]]> 0){console[_0x1260[40]](_0x538ax2f[_0x1260[118]].RMI)}else {console[_0x1260[40]](_0x538ax2f[_0x1260[118]][_0x1260[120]][_0x1260[119]])}})[_0x1260[116]](function(_0x538ax23){console[_0x1260[34]](_0x1260[114],_0x538ax23[_0x1260[115]])})[_0x1260[113]](function(){console[_0x1260[40]](_0x1260[112]);_0x538ax27(null,{code:200,result:1})})};methods[_0x1260[121]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[122]);console[_0x1260[40]](_0x1260[123]);try{var _0x538ax30=eval(_0x538ax26[_0x1260[124]]);console[_0x1260[40]](_0x1260[125]);var _0x538ax31=getVariableName(_0x538ax26[_0x1260[126]]);if(_[_0x1260[127]](_0x538ax30)){_0x538ax30[_0x1260[132]](function(_0x538ax32,_0x538ax33){wait[_0x1260[131]](setVariable,_0x538ax25,_0x538ax31+ _0x1260[128]+ _0x538ax33+ _0x1260[129],_0x1260[130]+ _0x538ax32+ _0x1260[130])})}else {wait[_0x1260[131]](setVariable,_0x538ax25,_0x538ax31,_0x1260[130]+ _0x538ax30+ _0x1260[130])}}catch(err){console[_0x1260[40]](_0x1260[133]);_0x538ax27(null,{code:200,result:1})}};methods[_0x1260[134]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[135]);getFilePath(_0x538ax26[_0x1260[95]])[_0x1260[94]](function(_0x538ax34){var _0x538ax2a=[_0x538ax34,_0x538ax26[_0x1260[64]]];console[_0x1260[40]](_0x1260[136]);_0x538ax25[_0x1260[53]](_0x1260[137],_0x538ax2a[_0x1260[68]](_0x1260[67]),function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})})};methods[_0x1260[138]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[139]);var _0x538ax28={};console[_0x1260[40]](_0x1260[140]+ _0x538ax26[_0x1260[141]]+ _0x1260[142]);if(_0x538ax26[_0x1260[141]]> 0){_0x538ax26[_0x1260[141]]--;getFilePath(_0x538ax26[_0x1260[95]])[_0x1260[94]](function(_0x538ax35){console[_0x1260[40]](_0x1260[143]);_0x538ax25[_0x1260[46]](util[_0x1260[39]](_0x1260[144],_0x538ax35,parseInt(_0x538ax26[_0x1260[118]])* 1000,_0x538ax26[_0x1260[145]]),function(_0x538ax23,_0x538ax28){var _0x538ax2c={uniqueid:_0x538ax25[_0x1260[81]],node:_0x538ax26[_0x1260[82]],application:_0x538ax26[_0x1260[83]],data:_0x538ax28[_0x1260[146]]|| null,project_name:_0x538ax25[_0x1260[84]],callerid:_0x538ax25[_0x1260[85]],message:_0x1260[86]};process[_0x1260[46]](_0x538ax2c);_0x538ax28[_0x1260[146]]= _0x538ax28[_0x1260[146]][_0x1260[148]](_0x1260[147],_0x1260[89])[_0x1260[107]]();if(_0x538ax28[_0x1260[146]][_0x1260[149]]){if(_0x538ax28[_0x1260[146]]=== _0x1260[150]){_0x538ax27(null,_0x538ax28)}else {_0x538ax28[_0x1260[151]]= _0x538ax28[_0x1260[146]];if(_0x538ax26[_0x1260[126]]!== _0x1260[150]){console[_0x1260[40]](_0x1260[152]);var _0x538ax31=getVariableName(_0x538ax26[_0x1260[126]]);setVariable(_0x538ax25,_0x538ax31,_0x1260[130]+ _0x538ax28[_0x1260[151]]+ _0x1260[130],function(){_0x538ax27(null,_0x538ax28)})}else {_0x538ax27(null,_0x538ax28)}}}else {console[_0x1260[40]](_0x1260[153]);_0x538ax28= {code:200,result:_0x1260[154],data:_0x1260[155]};_0x538ax27(null,_0x538ax28)}})})}else {console[_0x1260[40]](_0x1260[156]);_0x538ax28= {code:200,result:_0x1260[154],data:_0x1260[157]};_0x538ax27(null,_0x538ax28)}};methods[_0x1260[158]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[159]);console[_0x1260[40]](_0x1260[160]);_0x538ax25[_0x1260[46]](util[_0x1260[39]](_0x1260[161],_0x538ax26[_0x1260[162]],_0x538ax26[_0x1260[163]]),function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})};methods[_0x1260[164]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[165]);console[_0x1260[40]](_0x1260[166]);_0x538ax25[_0x1260[46]](util[_0x1260[39]](_0x1260[167],_0x538ax26[_0x1260[168]],_0x538ax26[_0x1260[163]]),function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})};methods[_0x1260[169]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[170]);googleTTS(_0x538ax26[_0x1260[168]],_0x538ax26[_0x1260[173]],1)[_0x1260[94]](function(_0x538ax36){console[_0x1260[40]](_0x1260[172]);saveAndPlayTTS(_0x538ax25,_0x538ax26,_0x538ax36,_0x1260[134],_0x538ax27)})[_0x1260[116]](function(_0x538ax23){console[_0x1260[34]](_0x1260[171],_0x538ax23[_0x1260[115]]);_0x538ax27(_0x538ax23,{code:200,result:_0x1260[154]})})};function saveAndPlayTTS(_0x538ax25,_0x538ax26,_0x538ax36,_0x538ax38,_0x538ax27){var _0x538ax39={_saveName:_0x1260[89],_savePath:_0x1260[89],_convertedPath:_0x1260[89]};var _0x538ax2e={url:_0x538ax36};_0x538ax39[_0x1260[174]]= sr({length:6});_0x538ax39[_0x1260[175]]= util[_0x1260[39]](_0x1260[176],_0x538ax39._saveName);var _0x538ax3a=fs[_0x1260[177]](_0x538ax39._savePath);request[_0x1260[203]](_0x538ax2e)[_0x1260[35]](_0x1260[34],function(_0x538ax23){console[_0x1260[40]](_0x1260[202],_0x538ax23)})[_0x1260[35]](_0x1260[151],function(_0x538ax3c){_0x538ax3a[_0x1260[201]](_0x538ax3c)})[_0x1260[35]](_0x1260[178],function(){console[_0x1260[40]](_0x1260[179]);_0x538ax3a[_0x1260[178]]();console[_0x1260[40]](_0x1260[180],_0x538ax39._savePath);_0x538ax39[_0x1260[181]]= util[_0x1260[39]](_0x1260[182],_0x538ax39._saveName);console[_0x1260[40]](_0x1260[183]);fs[_0x1260[185]](_0x538ax39._savePath,parseInt(_0x1260[184],8));console[_0x1260[40]](_0x1260[186],_0x538ax39._convertedPath);var _0x538ax3b=sox[_0x1260[188]](_0x538ax39._savePath,_0x538ax39._convertedPath,{sampleRate:8000,format:_0x1260[187],channelCount:1,bitRate:192* 1024,compressionQuality:5});_0x538ax3b[_0x1260[35]](_0x1260[34],function(_0x538ax23){console[_0x1260[34]](_0x1260[189],_0x538ax23);deleteTempFile(_0x538ax39._savePath);_0x538ax27(_0x538ax23,{code:200,result:_0x1260[154]})});_0x538ax3b[_0x1260[35]](_0x1260[178],function(){console[_0x1260[40]](_0x1260[190]);console[_0x1260[40]](_0x1260[191]);fs[_0x1260[185]](_0x538ax39._convertedPath,parseInt(_0x1260[184],8));switch(_0x538ax38){case _0x1260[134]:console[_0x1260[40]](_0x1260[192]);_0x538ax25[_0x1260[53]](_0x1260[137],util[_0x1260[39]](_0x1260[193],_0x538ax39._saveName),function(_0x538ax23,_0x538ax28){if(_0x538ax23){console[_0x1260[40]](_0x1260[194],_0x538ax23)};console[_0x1260[40]](_0x1260[195]);deleteTempFile(_0x538ax39._savePath);deleteTempFile(_0x538ax39._convertedPath);_0x538ax27(_0x538ax23,{code:200,result:_0x1260[154]})});break;case _0x1260[200]:console[_0x1260[40]](_0x1260[196]);_0x538ax25[_0x1260[46]](util[_0x1260[39]](_0x1260[197],util[_0x1260[39]](_0x1260[193],_0x538ax39._saveName),_0x538ax26[_0x1260[198]]),function(_0x538ax23,_0x538ax28){if(_0x538ax23){console[_0x1260[40]](_0x1260[199],_0x538ax23)};console[_0x1260[40]](_0x1260[195]);deleteTempFile(_0x538ax39._savePath);deleteTempFile(_0x538ax39._convertedPath);_0x538ax27(_0x538ax23,{code:200,result:_0x1260[154]})});break;default:console[_0x1260[40]](_0x1260[192]);_0x538ax25[_0x1260[53]](_0x1260[137],util[_0x1260[39]](_0x1260[193],_0x538ax39._saveName),function(_0x538ax23,_0x538ax28){if(_0x538ax23){console[_0x1260[40]](_0x1260[194],_0x538ax23)};console[_0x1260[40]](_0x1260[195]);deleteTempFile(_0x538ax39._savePath);deleteTempFile(_0x538ax39._convertedPath);_0x538ax27(_0x538ax23,{code:200,result:_0x1260[154]})})}});_0x538ax3b[_0x1260[69]]()})}function deleteTempFile(_0x538ax3e){Promise[_0x1260[207]](fs[_0x1260[206]])(_0x538ax3e)[_0x1260[94]](function(){console[_0x1260[40]](_0x1260[204]+ _0x538ax3e+ _0x1260[205])})[_0x1260[116]](function(_0x538ax23){})}methods[_0x1260[208]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[209]);var _0x538ax36=util[_0x1260[39]](_0x1260[210],_0x538ax26[_0x1260[211]],encodeURIComponent(_0x538ax26[_0x1260[168]]),_0x538ax26[_0x1260[212]],_0x538ax26[_0x1260[213]]);try{console[_0x1260[40]](_0x1260[214],_0x538ax36);console[_0x1260[40]](_0x1260[215]);saveAndPlayTTS(_0x538ax25,_0x538ax26,_0x538ax36,_0x1260[200],_0x538ax27)}catch(err){console[_0x1260[34]](_0x1260[216],err);_0x538ax27(err,{code:200,result:_0x1260[154]})}};methods[_0x1260[217]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[218]);var _0x538ax28={};console[_0x1260[40]](_0x1260[140]+ _0x538ax26[_0x1260[141]]+ _0x1260[142]);if(_0x538ax26[_0x1260[141]]> 0){_0x538ax26[_0x1260[141]]--;getFilePath(_0x538ax26[_0x1260[95]])[_0x1260[94]](function(_0x538ax35){console[_0x1260[40]](_0x1260[143]);_0x538ax25[_0x1260[46]](util[_0x1260[39]](_0x1260[144],_0x538ax35,parseInt(_0x538ax26[_0x1260[118]])* 1000,_0x538ax26[_0x1260[219]]),function(_0x538ax23,_0x538ax28){var _0x538ax2c={uniqueid:_0x538ax25[_0x1260[81]],node:_0x538ax26[_0x1260[82]],application:_0x538ax26[_0x1260[83]],data:_0x538ax28[_0x1260[146]]|| null,project_name:_0x538ax25[_0x1260[84]],callerid:_0x538ax25[_0x1260[85]],message:_0x1260[86]};process[_0x1260[46]](_0x538ax2c);_0x538ax28[_0x1260[146]]= _0x538ax28[_0x1260[146]][_0x1260[148]](_0x1260[147],_0x1260[89])[_0x1260[107]]();if(_0x538ax28[_0x1260[146]][_0x1260[149]]>= parseInt(_0x538ax26[_0x1260[220]])){if(_0x538ax28[_0x1260[146]]!== _0x1260[150]){console[_0x1260[40]](_0x1260[221]);if(_0x538ax26[_0x1260[126]]!== _0x1260[150]){console[_0x1260[40]](_0x1260[152]);var _0x538ax31=getVariableName(_0x538ax26[_0x1260[126]]);setVariable(_0x538ax25,_0x538ax31,_0x1260[130]+ _0x538ax28[_0x1260[146]]+ _0x1260[130],function(){_0x538ax28= {code:200,result:_0x1260[154],data:_0x1260[222]};_0x538ax27(null,_0x538ax28)})}else {console[_0x1260[40]](_0x1260[223]);_0x538ax28= {code:200,result:_0x1260[154],data:_0x1260[224]};_0x538ax27(null,_0x538ax28)}}else {console[_0x1260[40]](_0x1260[225]);_0x538ax28= {code:500,result:_0x1260[150]};_0x538ax27(null,_0x538ax28)}}else {console[_0x1260[40]](_0x1260[226]);_0x538ax28= {code:200,result:_0x1260[154],data:_0x1260[224]};_0x538ax27(null,_0x538ax28)}})})}else {console[_0x1260[40]](_0x1260[156]);_0x538ax28= {code:200,result:_0x1260[154],data:_0x1260[157]};_0x538ax27(null,_0x538ax28)}};methods[_0x1260[227]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[228]);var _0x538ax28={};console[_0x1260[40]](_0x1260[140]+ _0x538ax26[_0x1260[141]]+ _0x1260[142]);if(_0x538ax26[_0x1260[141]]> 0){_0x538ax26[_0x1260[141]]--;getFilePath(_0x538ax26[_0x1260[95]])[_0x1260[94]](function(_0x538ax35){console[_0x1260[40]](_0x1260[143]);_0x538ax25[_0x1260[46]](util[_0x1260[39]](_0x1260[144],_0x538ax35,parseInt(_0x538ax26[_0x1260[118]])* 1000,_0x538ax26[_0x1260[219]]),function(_0x538ax23,_0x538ax28){var _0x538ax2c={uniqueid:_0x538ax25[_0x1260[81]],node:_0x538ax26[_0x1260[82]],application:_0x538ax26[_0x1260[83]],data:_0x538ax28[_0x1260[146]]|| null,project_name:_0x538ax25[_0x1260[84]],callerid:_0x538ax25[_0x1260[85]],message:_0x1260[86]};_0x538ax28[_0x1260[146]]= _0x538ax28[_0x1260[146]][_0x1260[148]](_0x1260[147],_0x1260[89])[_0x1260[107]]();if(_0x538ax28[_0x1260[146]][_0x1260[149]]>= parseInt(_0x538ax26[_0x1260[220]])){if(_0x538ax28[_0x1260[146]]!== _0x1260[150]){console[_0x1260[40]](_0x1260[221]);if(_0x538ax26[_0x1260[126]]!== _0x1260[150]){var _0x538ax3f=_0x538ax28[_0x1260[146]][_0x1260[106]](_0x1260[89]);var _0x538ax40=_0x538ax3f[_0x1260[149]];var _0x538ax41;var _0x538ax42=Number(_0x538ax26[_0x1260[229]]);if(_0x538ax26[_0x1260[230]]=== _0x1260[231]){for(_0x538ax41= 0;_0x538ax41< _0x538ax42&& _0x538ax41< _0x538ax40;_0x538ax41++){_0x538ax3f[_0x538ax41]= _0x1260[232]}}else {for(_0x538ax41= _0x538ax40- 1;_0x538ax41>= 0&& _0x538ax42> 0;_0x538ax41--,_0x538ax42--){_0x538ax3f[_0x538ax41]= _0x1260[232]}};_0x538ax2c[_0x1260[151]]= _0x538ax3f[_0x1260[68]](_0x1260[89]);process[_0x1260[46]](_0x538ax2c);console[_0x1260[40]](_0x1260[152]);var _0x538ax31=getVariableName(_0x538ax26[_0x1260[126]]);setVariable(_0x538ax25,_0x538ax31,_0x1260[130]+ _0x538ax28[_0x1260[146]]+ _0x1260[130],function(){_0x538ax28= {code:200,result:_0x1260[154],data:_0x1260[222]};_0x538ax27(null,_0x538ax28)})}else {process[_0x1260[46]](_0x538ax2c);console[_0x1260[40]](_0x1260[223]);_0x538ax28= {code:200,result:_0x1260[154]};_0x538ax27(null,_0x538ax28)}}else {process[_0x1260[46]](_0x538ax2c);console[_0x1260[40]](_0x1260[225]);_0x538ax28= {code:500,result:_0x1260[150]};_0x538ax27(null,_0x538ax28)}}else {process[_0x1260[46]](_0x538ax2c);console[_0x1260[40]](_0x1260[226]);_0x538ax28= {code:200,result:_0x1260[154],data:_0x1260[224]};_0x538ax27(null,_0x538ax28)}})})}else {console[_0x1260[40]](_0x1260[156]);_0x538ax28= {code:200,result:_0x1260[154],data:_0x1260[157]};_0x538ax27(null,_0x538ax28)}};methods[_0x1260[233]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[234]);var _0x538ax43=sr({length:4});console[_0x1260[40]](_0x1260[235]);_0x538ax25[_0x1260[46]](util[_0x1260[39]](_0x1260[236],path[_0x1260[68]](config[_0x1260[237]],_0x1260[238],_0x538ax25[_0x1260[81]]+ _0x1260[239]+ _0x538ax43),_0x538ax26[_0x1260[240]]|| _0x1260[187],_0x538ax26[_0x1260[163]],_0x538ax26[_0x1260[63]]* 1000,null,true,null),function(_0x538ax23,_0x538ax28){if(_0x538ax28[_0x1260[241]]=== 200&& _0x538ax28[_0x1260[146]]!== _0x1260[150]){SquareRecording[_0x1260[253]]({uniqueid:_0x538ax25[_0x1260[81]],callerid:_0x538ax25[_0x1260[85]],calleridname:_0x538ax25[_0x1260[245]],context:_0x538ax25[_0x1260[246]],extension:_0x538ax25[_0x1260[247]],priority:_0x538ax25[_0x1260[248]],accountcode:_0x538ax25[_0x1260[249]],dnid:_0x538ax25[_0x1260[250]],project_name:_0x538ax25[_0x1260[84]],saveName:_0x538ax25[_0x1260[81]]+ _0x1260[239]+ _0x538ax43,filename:_0x538ax26[_0x1260[251]]|| null,savePath:path[_0x1260[68]](config[_0x1260[237]],_0x1260[238],_0x538ax25[_0x1260[81]]+ _0x1260[239]+ _0x538ax43+ _0x1260[252]+ (_0x538ax26[_0x1260[240]]|| _0x1260[187]))})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x1260[242]+ _0x538ax26[_0x1260[83]]+ _0x1260[243]+ _0x538ax26[_0x1260[82]]+ _0x1260[244],_0x538ax23)});console[_0x1260[40]](_0x1260[254]);_0x538ax25[_0x1260[46]](util[_0x1260[39]](_0x1260[255],_0x1260[256],_0x538ax25[_0x1260[81]]+ _0x1260[239]+ _0x538ax43),function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})}else {_0x538ax27(_0x538ax23,_0x538ax28)}})};methods[_0x1260[257]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[258]);var _0x538ax28;var _0x538ax44=_0x1260[259];var _0x538ax45;if(!collections[_0x1260[260]]){getIntervals(false)};var _0x538ax46=_[_0x1260[58]](collections[_0x1260[260]],{id:parseInt(_0x538ax26[_0x1260[261]])});if(!_0x538ax46[_0x1260[262]]){_0x538ax45= _[_0x1260[264]](collections[_0x1260[260]],{IntervalId:parseInt(_0x538ax46[_0x1260[263]])})};if(_0x538ax45){console[_0x1260[40]](_0x1260[265]);if(_0x538ax45[_0x1260[149]]){console[_0x1260[40]](_0x1260[140]+ _0x538ax45[_0x1260[149]]+ _0x1260[266]);var _0x538ax47;console[_0x1260[40]](_0x1260[267]);_0x538ax45[_0x1260[132]](function(_0x538ax32,_0x538ax33){_0x538ax47= Util[_0x1260[269]](_0x538ax32[_0x1260[268]]);if(Util[_0x1260[270]](_0x538ax47)){console[_0x1260[40]](_0x1260[271]+ _0x538ax33+ _0x1260[272]);_0x538ax44= _0x1260[273]}})}else {console[_0x1260[40]](_0x1260[274]);_0x538ax44= _0x1260[273]}}else {console[_0x1260[40]](_0x1260[275]);var _0x538ax48=Util[_0x1260[269]](_0x538ax46[_0x1260[268]]);if(Util[_0x1260[270]](_0x538ax48)){console[_0x1260[40]](_0x1260[276]);_0x538ax44= _0x1260[273]}};console[_0x1260[40]](_0x1260[277]+ _0x538ax44+ _0x1260[278]);_0x538ax28= {code:200,result:_0x1260[154],data:_0x538ax44};_0x538ax27(null,_0x538ax28)};methods[_0x1260[279]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[280]);console[_0x1260[40]](_0x1260[281]);var _0x538ax31=getVariableName(_0x538ax26[_0x1260[126]]);getVariable(_0x538ax25,_0x538ax31,function(_0x538ax23,_0x538ax28){if(!_0x538ax28[_0x1260[151]]){_0x538ax28[_0x1260[151]]= _0x1260[157]};_0x538ax27(null,_0x538ax28)})};methods[_0x1260[282]]= function(_0x538ax25,_0x538ax26,_0x538ax27){var _0x538ax2c={uniqueid:_0x538ax25[_0x1260[81]],node:_0x538ax26[_0x1260[82]],application:_0x538ax26[_0x1260[83]],data:_0x538ax26[_0x1260[283]]|| null,project_name:_0x538ax25[_0x1260[84]],callerid:_0x538ax25[_0x1260[85]],message:_0x1260[86]};process[_0x1260[46]](_0x538ax2c);var _0x538ax28={code:200,result:_0x1260[284]};_0x538ax27(null,_0x538ax28)};methods[_0x1260[285]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[286]);var _0x538ax2c={uniqueid:_0x538ax25[_0x1260[81]],node:_0x538ax26[_0x1260[82]],application:_0x538ax26[_0x1260[83]],data:_0x538ax26[_0x1260[287]],project_name:_0x538ax25[_0x1260[84]],callerid:_0x538ax25[_0x1260[85]],message:_0x1260[86]};process[_0x1260[46]](_0x538ax2c);var _0x538ax28;if(_0x538ax26[_0x1260[287]]!== _0x1260[150]){var _0x538ax49=_[_0x1260[58]](collections[_0x1260[288]],{id:Number(_0x538ax26[_0x1260[287]])});if(_0x538ax49){var _0x538ax4a={from:[_0x538ax49[_0x1260[289]]],to:_0x538ax26[_0x1260[290]][_0x1260[106]](_0x1260[67]),cc:_0x538ax26[_0x1260[291]]?_0x538ax26[_0x1260[291]][_0x1260[106]](_0x1260[67]):[],subject:_0x538ax26[_0x1260[292]],html:_0x538ax26[_0x1260[168]],voiceSource:_0x538ax25[_0x1260[81]],auto:true,message:_0x1260[293]};if(_0x538ax26[_0x1260[294]]!== _0x1260[150]){var _0x538ax4b=_[_0x1260[58]](collections[_0x1260[295]],{id:Number(_0x538ax26[_0x1260[294]])});if(_0x538ax4b){var _0x538ax4c={from:_0x538ax4a[_0x1260[296]],to:_0x538ax4a[_0x1260[290]],cc:_0x538ax4a[_0x1260[291]],subject:_0x538ax4a[_0x1260[292]],body:_0x538ax4a[_0x1260[297]]};_0x538ax4a[_0x1260[292]]= _0x538ax4b[_0x1260[292]]?Mustache[_0x1260[298]](_0x538ax4b[_0x1260[292]],_0x538ax4c):null;_0x538ax4a[_0x1260[297]]= _0x538ax4b[_0x1260[297]]?Mustache[_0x1260[298]](_0x538ax4b[_0x1260[297]],_0x538ax4c):null;process[_0x1260[46]](_0x538ax4a);_0x538ax28= {code:200,result:_0x1260[284]};_0x538ax27(null,_0x538ax28)}else {console[_0x1260[40]](_0x1260[299]);_0x538ax28= {code:200,result:_0x1260[284]};_0x538ax27(null,_0x538ax28)}}else {process[_0x1260[46]](_0x538ax4a);_0x538ax28= {code:200,result:_0x1260[284]};_0x538ax27(null,_0x538ax28)}}else {console[_0x1260[40]](_0x538ax26[_0x1260[287]]?_0x1260[300]:_0x1260[301]);_0x538ax28= {code:200,result:_0x1260[284]};_0x538ax27(null,_0x538ax28)}}else {console[_0x1260[40]](_0x1260[302]);_0x538ax28= {code:200,result:_0x1260[284]};_0x538ax27(null,_0x538ax28)}};methods[_0x1260[303]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[304]);var _0x538ax2c={uniqueid:_0x538ax25[_0x1260[81]],node:_0x538ax26[_0x1260[82]],application:_0x538ax26[_0x1260[83]],data:_0x538ax26[_0x1260[287]],project_name:_0x538ax25[_0x1260[84]],callerid:_0x538ax25[_0x1260[85]],message:_0x1260[86]};process[_0x1260[46]](_0x538ax2c);var _0x538ax4a={body:_0x538ax26[_0x1260[305]],SmsAccountId:_0x538ax26[_0x1260[287]],source:_0x538ax25[_0x1260[81]],auto:true,message:_0x1260[306]};var _0x538ax28;if(_0x538ax26[_0x1260[287]]!== _0x1260[150]){var _0x538ax49=_[_0x1260[58]](collections[_0x1260[307]],{id:Number(_0x538ax26[_0x1260[287]])});if(_0x538ax49){if(_0x538ax49[_0x1260[308]]=== _0x1260[309]){_0x538ax4a[_0x1260[296]]= /^[\+][0-9]+$/[_0x1260[310]](_0x538ax49[_0x1260[76]])?_0x538ax49[_0x1260[76]]:_0x1260[311]+ _0x538ax49[_0x1260[76]];_0x538ax4a[_0x1260[290]]= /^[\+][0-9]+$/[_0x1260[310]](_0x538ax26[_0x1260[290]])?_0x538ax26[_0x1260[290]]:_0x1260[311]+ _0x538ax26[_0x1260[290]]}else {_0x538ax4a[_0x1260[296]]= /^[\+][0-9]+$/[_0x1260[310]](_0x538ax49[_0x1260[76]])?_0x538ax49[_0x1260[76]][_0x1260[148]](_0x1260[311],_0x1260[89]):_0x538ax49[_0x1260[76]];_0x538ax4a[_0x1260[290]]= /^[\+][0-9]+$/[_0x1260[310]](_0x538ax26[_0x1260[290]])?_0x538ax26[_0x1260[290]][_0x1260[148]](_0x1260[311],_0x1260[89]):_0x538ax26[_0x1260[290]]};process[_0x1260[46]](_0x538ax4a);_0x538ax28= {code:200,result:_0x1260[284]};_0x538ax27(null,_0x538ax28)}else {console[_0x1260[40]](_0x1260[312]);_0x538ax28= {code:200,result:_0x1260[284]};_0x538ax27(null,_0x538ax28)}}else {console[_0x1260[40]](_0x1260[302]);_0x538ax28= {code:200,result:_0x1260[284]};_0x538ax27(null,_0x538ax28)}};methods[_0x1260[313]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[314]);var _0x538ax2c={uniqueid:_0x538ax25[_0x1260[81]],node:_0x538ax26[_0x1260[82]],application:_0x538ax26[_0x1260[83]],data:_[_0x1260[107]](_0x538ax26[_0x1260[315]])|| null,project_name:_0x538ax25[_0x1260[84]],callerid:_0x538ax25[_0x1260[85]],message:_0x1260[86]};process[_0x1260[46]](_0x538ax2c);console[_0x1260[40]](_0x1260[316]);sh[_0x1260[53]](_[_0x1260[107]](_0x538ax26[_0x1260[315]]),function(_0x538ax24,_0x538ax4d){var _0x538ax4e=_0x538ax4d[_0x1260[148]](/(\r\n|\n|\r)/gm,_0x1260[89]);console[_0x1260[40]](_0x1260[317],_0x538ax4e);console[_0x1260[40]](_0x1260[318]);var _0x538ax31=getVariableName(_0x538ax26[_0x1260[126]]);setVariable(_0x538ax25,_0x538ax31,_0x1260[130]+ _0x538ax4e+ _0x1260[130],_0x538ax27)})};methods[_0x1260[2]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[319]);console[_0x1260[40]](_0x1260[320]);_0x538ax25[_0x1260[53]](_0x1260[321],_0x538ax26[_0x1260[315]],_0x538ax26[_0x1260[322]],function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})};methods[_0x1260[323]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[324]);if(!collections[_0x1260[325]]){getProjects(false)};var _0x538ax4f=_[_0x1260[58]](collections[_0x1260[325]],{id:parseInt(_0x538ax26[_0x1260[326]])});console[_0x1260[40]](_0x1260[327]+ _0x538ax4f[_0x1260[61]]+ _0x1260[51]);_0x538ax25[_0x1260[53]](_0x1260[321],util[_0x1260[39]](_0x1260[328],_0x538ax4f[_0x1260[61]]),function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})};methods[_0x1260[329]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[330]);wait[_0x1260[131]](setVariable,_0x538ax25,_0x1260[331],_0x1260[332]);wait[_0x1260[131]](setVariable,_0x538ax25,_0x1260[117],_0x1260[332]);wait[_0x1260[131]](setVariable,_0x538ax25,_0x1260[333],_0x1260[332]);var _0x538ax50=wait[_0x1260[131]](asr,_0x538ax25,_0x538ax26);if(!_[_0x1260[334]](_0x538ax50)){console[_0x1260[40]](_0x1260[335]);_[_0x1260[336]](_0x538ax50,function(_0x538ax51,_0x538ax52){wait[_0x1260[131]](setVariable,_0x538ax25,_0x538ax52,_0x1260[130]+ _0x538ax51+ _0x1260[130])})}else {console[_0x1260[40]](_0x1260[337]);wait[_0x1260[131]](setVariable,_0x538ax25,_0x1260[338],_0x1260[339])}};function asr(_0x538ax25,_0x538ax26,_0x538ax27){var _0x538ax39={_saveName:_0x1260[89],_savePath:_0x1260[89],_convertedPath:_0x1260[89]};var _0x538ax50={};_0x538ax39[_0x1260[174]]= sr({length:6});_0x538ax39[_0x1260[175]]= util[_0x1260[39]](_0x1260[182],_0x538ax39._saveName);var _0x538ax54=util[_0x1260[39]](_0x1260[340],_0x538ax39._savePath,_0x538ax26[_0x1260[63]]?_0x538ax26[_0x1260[63]]:_0x1260[89]);if(_0x538ax26[_0x1260[341]]&& _0x538ax26[_0x1260[341]]!== _0x1260[342]){_0x538ax54+= _0x1260[343]};if(_0x538ax26[_0x1260[198]]&& _0x538ax26[_0x1260[198]]!== _0x1260[344]){_0x538ax54+= _0x1260[155]};_0x538ax25[_0x1260[53]](_0x1260[345],_0x538ax54,function(_0x538ax23,_0x538ax28){if(_0x538ax23){console[_0x1260[40]](_0x1260[346],_0x538ax23);_0x538ax27(_0x538ax23,null)}else {console[_0x1260[40]](_0x1260[347]);var _0x538ax36=util[_0x1260[39]](_0x1260[348],_0x538ax26[_0x1260[211]],_0x538ax26[_0x1260[349]]);if(_0x538ax26[_0x1260[350]]&& _0x538ax26[_0x1260[350]]!== _0x1260[154]){_0x538ax36+= util[_0x1260[39]](_0x1260[351],encodeURIComponent(_0x538ax26[_0x1260[350]]))}else {_0x538ax36+= _0x1260[352]};console[_0x1260[40]](_0x1260[353]);Promise[_0x1260[207]](fs[_0x1260[366]])(_0x538ax39._savePath)[_0x1260[94]](function(_0x538ax30){console[_0x1260[40]](_0x1260[361]);var _0x538ax58= new Buffer(_0x538ax30,_0x1260[363]).toString(_0x1260[362]);_0x538ax36+= util[_0x1260[39]](_0x1260[364],_0x538ax58);var _0x538ax2e={url:_0x538ax36};console[_0x1260[40]](_0x1260[365]);return rp(_0x538ax2e)})[_0x1260[94]](function(_0x538ax55){console[_0x1260[40]](_0x1260[356]);_0x538ax55= _0x538ax55[_0x1260[106]](_0x1260[357]);var _0x538ax56,_0x538ax57;_[_0x1260[132]](_0x538ax55,function(_0x538ax32){_0x538ax56= _0x538ax32[_0x1260[106]](_0x1260[358]);if(_0x538ax56[_0x1260[149]]=== 2){switch(_0x538ax56[0]){case _0x1260[168]:_0x538ax50[_0x1260[331]]= _0x538ax56[1][_0x1260[148]](/\+/g,_0x1260[359]);break;case _0x1260[146]:if(_0x538ax56[1]=== _0x1260[360]){_0x538ax50[_0x1260[117]]= 0};break;case _0x1260[333]:_0x538ax50[_0x1260[333]]= decodeURIComponent(_0x538ax56[1]);break;case _0x1260[115]:_0x538ax50[_0x1260[338]]= decodeURIComponent(_0x538ax56[1][_0x1260[148]](/\+/g,_0x1260[359]));break;default:}}})})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x1260[355],_0x538ax23)})[_0x1260[113]](function(){console[_0x1260[40]](_0x1260[354]);deleteTempFile(_0x538ax39._savePath);_0x538ax27(null,_0x538ax50)})}})}methods[_0x1260[367]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[368]);if(!collections[_0x1260[369]]){getDbConnections(false)};var _0x538ax59=_[_0x1260[58]](collections[_0x1260[369]],{id:parseInt(_0x538ax26[_0x1260[370]])});console[_0x1260[40]](_0x1260[371]);var _0x538ax2c={uniqueid:_0x538ax25[_0x1260[81]],node:_0x538ax26[_0x1260[82]],application:_0x538ax26[_0x1260[83]],data:_0x538ax26[_0x1260[372]]|| null,project_name:_0x538ax25[_0x1260[84]],callerid:_0x538ax25[_0x1260[85]],message:_0x1260[86]};process[_0x1260[46]](_0x538ax2c);try{db[_0x1260[374]](_0x538ax59[_0x1260[373]]);var _0x538ax3c=db[_0x1260[375]](_0x538ax26[_0x1260[372]]);db[_0x1260[376]]();setVariablesMatrix(_0x538ax25,_0x538ax26,_0x538ax27,_0x538ax3c)}catch(e){console[_0x1260[40]](e[_0x1260[115]]);wait[_0x1260[131]](setVariable,_0x538ax25,_0x1260[377],_0x1260[273]);wait[_0x1260[131]](setVariable,_0x538ax25,_0x1260[378],_0x1260[130]+ e[_0x1260[115]]+ _0x1260[130])}};methods[_0x1260[379]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[380]);console[_0x1260[40]](_0x1260[381]+ _0x538ax26[_0x1260[247]]+ _0x1260[382]);_0x538ax25[_0x1260[53]](_0x1260[66],util[_0x1260[39]](_0x1260[383],_0x538ax26[_0x1260[247]],_0x538ax26[_0x1260[246]]),function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})};methods[_0x1260[384]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[385]);var _0x538ax28={code:200,result:_0x1260[154]};_0x538ax25[_0x1260[53]](_0x1260[386],_0x1260[387]+ _0x538ax26[_0x1260[388]]+ _0x1260[130],function(_0x538ax23,_0x538ax28){console[_0x1260[40]](_0x1260[389]);try{_0x538ax28[_0x1260[151]]= String(eval(_0x538ax26[_0x1260[388]])?_0x1260[273]:_0x1260[259])}catch(_0x538ax23){console[_0x1260[40]](_0x1260[390]);_0x538ax28[_0x1260[151]]= _0x1260[259]};console[_0x1260[40]](_0x1260[391]+ _0x538ax28[_0x1260[151]]);_0x538ax27(null,_0x538ax28)})};methods[_0x1260[392]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[393]);console[_0x1260[40]](_0x1260[394]);_0x538ax25[_0x1260[392]]()};methods[_0x1260[395]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[396]);var _0x538ax4d=(_0x538ax26[_0x1260[397]])?_0x1260[130]+ _0x538ax26[_0x1260[397]]+ _0x1260[130]:_0x1260[130]+ _0x538ax26[_0x1260[82]]+ _0x1260[130];console[_0x1260[40]](_0x1260[398]+ _0x538ax4d);_0x538ax25[_0x1260[53]](_0x1260[386],_0x538ax4d,function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})};methods[_0x1260[399]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[400]);console[_0x1260[40]](_0x1260[401]);_0x538ax25[_0x1260[46]](util[_0x1260[39]](_0x1260[402],_0x538ax26[_0x1260[403]],_0x538ax26[_0x1260[163]]),function(_0x538ax23,_0x538ax28){_0x538ax27(_0x538ax23,_0x538ax28)})};methods[_0x1260[404]]= function(_0x538ax25,_0x538ax26,_0x538ax27){console[_0x1260[40]](_0x1260[405]);console[_0x1260[40]](_0x1260[406]);var _0x538ax31=getVariableName(_0x538ax26[_0x1260[126]]);wait[_0x1260[131]](setVariable,_0x538ax25,_0x538ax31,_0x1260[130]+ _0x538ax26[_0x1260[407]]+ _0x1260[130])};function getVertices(_0x538ax5b){return _[_0x1260[411]](_0x538ax5b,function(_0x538ax30,_0x538ax5c,_0x538ax5d){if(_0x538ax5d=== _0x1260[408]){return _0x538ax30};if(_[_0x1260[127]](_0x538ax5c)){_[_0x1260[410]](_0x538ax5c,function(_0x538ax51,_0x538ax52){_0x538ax30[_0x538ax51[_0x1260[409]][_0x1260[263]]]= _0x538ax51[_0x1260[409]];_0x538ax30[_0x538ax51[_0x1260[409]][_0x1260[263]]][_0x1260[83]]= _0x538ax5d});return _0x538ax30};_0x538ax30[_0x538ax5c[_0x1260[409]][_0x1260[263]]]= _0x538ax5c[_0x1260[409]];_0x538ax30[_0x538ax5c[_0x1260[409]][_0x1260[263]]][_0x1260[83]]= _0x538ax5d;return _0x538ax30},{})}function getTargetBySource(_0x538ax5b,_0x538ax5f,_0x538ax51,_0x538ax60){return _[_0x1260[146]](_[_0x1260[58]](_0x538ax5b[_0x1260[408]],function(_0x538ax5c){if(_0x538ax5c[_0x1260[409]][_0x1260[412]]&& _0x538ax5c[_0x1260[409]][_0x1260[413]]){if(_0x538ax5c[_0x1260[409]][_0x1260[413]]=== _0x538ax5f){if(_0x538ax5c[_0x1260[409]][_0x1260[414]]&& _0x538ax5c[_0x1260[409]][_0x1260[414]]!== _0x538ax51){if(_0x538ax60){var _0x538ax61=_0x538ax5c[_0x1260[409]][_0x1260[414]][_0x1260[106]](_0x1260[67]);if(_[_0x1260[415]](_0x538ax61,_0x538ax51)){return true}};return false};return true}};return false}),_0x1260[416])}function recurReplace(_0x538ax63,_0x538ax25,_0x538ax64){var _0x538ax65=0,_0x538ax66={},_0x538ax41;var _0x538ax67=0;for(_0x538ax41= 0;_0x538ax41< _0x538ax63[_0x1260[149]];_0x538ax41++){if(_0x538ax63[_0x1260[417]](_0x538ax41)=== _0x1260[418]){if(_0x538ax67=== 0){_0x538ax65= _0x538ax41};_0x538ax67++};if(_0x538ax63[_0x1260[417]](_0x538ax41)=== _0x1260[419]){_0x538ax67--;if(_0x538ax67=== 0){_0x538ax66[_0x538ax63[_0x1260[420]](_0x538ax65+ 1,_0x538ax41)]= _0x538ax63[_0x1260[420]](_0x538ax65+ 1,_0x538ax41)}}};if(Object[_0x1260[421]](_0x538ax66)[_0x1260[149]]!== 0){for(var _0x538ax52 in _0x538ax66){_0x538ax66[_0x538ax52]= recurReplace(_0x538ax52,_0x538ax25)};for(var _0x538ax68 in _0x538ax66){_0x538ax63= _0x538ax63[_0x1260[148]]( new RegExp(_0x1260[418]+ _0x538ax68[_0x1260[148]](/[.*+?^${}()|[\]\\]/g,_0x1260[422])+ _0x1260[419],_0x1260[423]),_0x538ax66[_0x538ax68])}};if(_0x538ax64){return _0x538ax63}else {var _0x538ax51=wait[_0x1260[131]](getVariable,_0x538ax25,_0x538ax63);return _0x538ax51[_0x1260[151]]|| _0x1260[418]+ _0x538ax63+ _0x1260[419]}}function replaceAllVariables(_0x538ax25,_0x538ax26,_0x538ax27){var _0x538ax6a=_[_0x1260[424]](_0x538ax26);for(var _0x538ax52 in _0x538ax6a){_0x538ax6a[_0x538ax52]= recurReplace(_0x538ax6a[_0x538ax52],_0x538ax25,true);console[_0x1260[40]](_0x1260[425],_0x538ax6a[_0x538ax52])};return _0x538ax6a}function xstart(_0x538ax25){var _0x538ax5b=_0x538ax25[_0x1260[237]];var _0x538ax6c=_0x538ax25[_0x1260[426]];if(_0x538ax5b[_0x1260[69]]){if(!_[_0x1260[127]](_0x538ax5b[_0x1260[69]])){var _0x538ax5f=_0x538ax5b[_0x1260[69]][_0x1260[409]][_0x1260[263]];var _0x538ax28={};do{try{var _0x538ax26=replaceAllVariables(_0x538ax25,_0x538ax6c[_0x538ax5f]);if(_0x538ax26){if(_[_0x1260[427]](methods[_0x538ax26[_0x1260[83]]])){_0x538ax28= wait[_0x1260[131]](methods[_0x538ax26[_0x1260[83]]],_0x538ax25,_0x538ax26)}else {_0x538ax28= wait[_0x1260[131]](methods[_0x1260[395]],_0x538ax25,_0x538ax26)};if(_0x538ax28[_0x1260[241]]=== 200&& _0x538ax28[_0x1260[146]]!== _0x1260[150]){if(_0x538ax26[_0x1260[83]]=== _0x1260[138]|| _0x538ax26[_0x1260[83]]=== _0x1260[217]|| _0x538ax26[_0x1260[83]]=== _0x1260[227]){_0x538ax6c[_0x538ax5f][_0x1260[141]]= _0x538ax26[_0x1260[141]]};var _0x538ax6d=getTargetBySource(_0x538ax5b,_0x538ax5f,_0x538ax28[_0x1260[151]],_0x538ax26[_0x1260[83]]=== _0x1260[138]);if(!_0x538ax6d){if(_0x538ax26[_0x1260[83]]=== _0x1260[138]){if(_0x538ax26[_0x1260[141]]> 0){_0x538ax6d= getTargetBySource(_0x538ax5b,_0x538ax5f,_0x1260[224],true);if(!_0x538ax6d){_0x538ax6d= _0x538ax5f}}else {_0x538ax6d= getTargetBySource(_0x538ax5b,_0x538ax5f,_0x1260[157],true)}};if((_0x538ax26[_0x1260[83]]=== _0x1260[217]|| _0x538ax26[_0x1260[83]]=== _0x1260[227])&& _0x538ax28[_0x1260[151]]!== _0x1260[157]){_0x538ax6d= _0x538ax5f};if(_0x538ax26[_0x1260[83]]=== _0x1260[279]&& _0x538ax28[_0x1260[151]]!== _0x1260[157]){_0x538ax6d= getTargetBySource(_0x538ax5b,_0x538ax5f,_0x1260[157])}};_0x538ax5f= _0x538ax6d}else {_0x538ax5f= null}}else {_0x538ax5f= null}}catch(err){console[_0x1260[40]](err)}}while(_0x538ax5f);;console[_0x1260[40]](_0x1260[428]);_0x538ax25[_0x1260[392]]()}}}function xfinally(_0x538ax25){var _0x538ax5b=_0x538ax25[_0x1260[237]];var _0x538ax6c=_0x538ax25[_0x1260[426]];if(_0x538ax5b[_0x1260[113]]){if(!_[_0x1260[127]](_0x538ax5b[_0x1260[113]])){var _0x538ax5f=_0x538ax5b[_0x1260[113]][_0x1260[409]][_0x1260[263]];var _0x538ax28={};do{try{var _0x538ax26=_0x538ax6c[_0x538ax5f][_0x1260[429]]?_0x538ax6c[_0x538ax5f]:replaceAllVariables(_0x538ax25,_0x538ax6c[_0x538ax5f]);if(_0x538ax26){if(_[_0x1260[427]](methods[_0x538ax26[_0x1260[83]]])){_0x538ax28= wait[_0x1260[131]](methods[_0x538ax26[_0x1260[83]]],_0x538ax25,_0x538ax26)}else {_0x538ax28= wait[_0x1260[131]](methods[_0x1260[395]],_0x538ax25,_0x538ax26)};if(_0x538ax28[_0x1260[241]]=== 200&& _0x538ax28[_0x1260[146]]!== _0x1260[150]){if(_0x538ax26[_0x1260[83]]=== _0x1260[138]|| _0x538ax26[_0x1260[83]]=== _0x1260[217]|| _0x538ax26[_0x1260[83]]=== _0x1260[227]){_0x538ax6c[_0x538ax5f][_0x1260[141]]= _0x538ax26[_0x1260[141]]};var _0x538ax6d=getTargetBySource(_0x538ax5b,_0x538ax5f,_0x538ax28[_0x1260[151]],_0x538ax26[_0x1260[83]]=== _0x1260[138]);if(!_0x538ax6d){if(_0x538ax26[_0x1260[83]]=== _0x1260[138]){if(_0x538ax26[_0x1260[141]]> 0){_0x538ax6d= getTargetBySource(_0x538ax5b,_0x538ax5f,_0x1260[224],true);if(!_0x538ax6d){_0x538ax6d= _0x538ax5f}}else {_0x538ax6d= getTargetBySource(_0x538ax5b,_0x538ax5f,_0x1260[157],true)}};if((_0x538ax26[_0x1260[83]]=== _0x1260[217]|| _0x538ax26[_0x1260[83]]=== _0x1260[227])&& _0x538ax28[_0x1260[151]]!== _0x1260[157]){_0x538ax6d= _0x538ax5f};if(_0x538ax26[_0x1260[83]]=== _0x1260[279]&& _0x538ax28[_0x1260[151]]!== _0x1260[157]){_0x538ax6d= getTargetBySource(_0x538ax5b,_0x538ax5f,_0x1260[157])}};_0x538ax5f= _0x538ax6d}else {_0x538ax5f= null}}else {_0x538ax5f= null}}catch(err){console[_0x1260[40]](err)}}while(_0x538ax5f);;_0x538ax25[_0x1260[392]]();console[_0x1260[40]](_0x1260[430])}};_0x538ax25[_0x1260[178]]()}function main(_0x538ax25){_0x538ax25[_0x1260[35]](_0x1260[34],function(_0x538ax23){console[_0x1260[40]](_0x1260[431],_0x538ax23)});_0x538ax25[_0x1260[35]](_0x1260[36],function(){console[_0x1260[40]](_0x1260[432])});_0x538ax25[_0x1260[35]](_0x1260[392],function(){if(_0x538ax25[_0x1260[113]]){_0x538ax25[_0x1260[113]]= false;console[_0x1260[40]](_0x1260[433]);wait[_0x1260[434]](xfinally,_0x538ax25)}else {process[_0x1260[46]]({message:_0x1260[435],uniqueid:_0x538ax25[_0x1260[81]],leaveAt:moment()[_0x1260[39]](_0x1260[108])});console[_0x1260[40]](_0x1260[436])}});_0x538ax25[_0x1260[35]](_0x1260[118],function(_0x538ax28){});_0x538ax25[_0x1260[35]](_0x1260[437],function(_0x538ax50){console[_0x1260[40]](_0x538ax50);console[_0x1260[40]](_0x1260[438]+ _0x538ax50[_0x1260[439]]+ _0x1260[440]+ _0x538ax50[_0x1260[441]]);var _0x538ax70={network:_0x538ax50[_0x1260[442]],network_script:_0x538ax50[_0x1260[443]],request:_0x538ax50[_0x1260[444]],channel:_0x538ax50[_0x1260[445]],language:_0x538ax50[_0x1260[446]],type:_0x538ax50[_0x1260[447]],uniqueid:_0x538ax50[_0x1260[441]],version:_0x538ax50[_0x1260[448]],callerid:_0x538ax50[_0x1260[439]],calleridname:_0x538ax50[_0x1260[449]],callingpres:_0x538ax50[_0x1260[450]],callingani2:_0x538ax50[_0x1260[451]],callington:_0x538ax50[_0x1260[452]],callingtns:_0x538ax50[_0x1260[453]],dnid:_0x538ax50[_0x1260[454]],rdnis:_0x538ax50[_0x1260[455]],context:_0x538ax50[_0x1260[456]],extension:_0x538ax50[_0x1260[457]],priority:_0x538ax50[_0x1260[458]],enhanced:_0x538ax50[_0x1260[459]],accountcode:_0x538ax50[_0x1260[460]],threadid:_0x538ax50[_0x1260[461]],project_name:_0x538ax50[_0x1260[462]],joinAt:moment()[_0x1260[39]](_0x1260[108]),message:_0x1260[253]};process[_0x1260[46]](_0x538ax70);if(_0x538ax50[_0x1260[462]]){SquareProject[_0x1260[470]]({where:{name:_0x538ax50[_0x1260[462]]},attributes:[_0x1260[263],_0x1260[464]]})[_0x1260[94]](function(_0x538ax4f){if(_0x538ax4f){if(_0x538ax4f[_0x1260[464]]){xml[_0x1260[467]](_0x538ax4f[_0x1260[464]],{normalizeTags:true,explicitArray:false},function(_0x538ax23,_0x538ax30){var _0x538ax5b=_0x538ax30[_0x1260[465]][_0x1260[237]];if(_0x538ax5b){_0x538ax25[_0x1260[237]]= _0x538ax5b;_0x538ax25[_0x1260[113]]= true;_0x538ax25[_0x1260[81]]= _0x538ax50[_0x1260[441]];_0x538ax25[_0x1260[85]]= _0x538ax50[_0x1260[439]];_0x538ax25[_0x1260[245]]= _0x538ax50[_0x1260[449]];_0x538ax25[_0x1260[246]]= _0x538ax50[_0x1260[456]];_0x538ax25[_0x1260[247]]= _0x538ax50[_0x1260[457]];_0x538ax25[_0x1260[248]]= _0x538ax50[_0x1260[458]];_0x538ax25[_0x1260[249]]= _0x538ax50[_0x1260[460]];_0x538ax25[_0x1260[250]]= _0x538ax50[_0x1260[454]];_0x538ax25[_0x1260[84]]= _0x538ax50[_0x1260[462]];_0x538ax25[_0x1260[426]]= getVertices(_0x538ax5b);wait[_0x1260[434]](xstart,_0x538ax25)}else {console[_0x1260[40]](_0x1260[466]);_0x538ax25[_0x1260[178]]()}})}else {console[_0x1260[40]](_0x1260[468]);_0x538ax25[_0x1260[178]]()}}else {console[_0x1260[40]](_0x1260[469]);_0x538ax25[_0x1260[178]]()}})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x1260[463],_0x538ax23);_0x538ax25[_0x1260[178]]()})}else {console[_0x1260[40]](_0x1260[471]);_0x538ax25[_0x1260[178]]()}})}function setVariable(_0x538ax25,_0x538ax72,_0x538ax51,_0x538ax27){console[_0x1260[40]](_0x1260[472]);console[_0x1260[40]](_0x1260[473]+ _0x538ax72+ _0x1260[474],_0x538ax51);_0x538ax25[_0x1260[46]](util[_0x1260[39]](_0x1260[255],_0x538ax72,_0x538ax51),function(_0x538ax23,_0x538ax28){if(_0x538ax27){_0x538ax27(_0x538ax23,_0x538ax28)}})}function getVariableName(_0x538ax74){if(!collections[_0x1260[437]]){getVariables(false)};var _0x538ax75={name:_0x1260[475]};var _0x538ax76;if(_0x538ax74){_0x538ax76= _[_0x1260[58]](collections[_0x1260[437]],{id:parseInt(_0x538ax74)})};return _0x538ax76?_0x538ax76[_0x1260[61]]:_0x538ax75[_0x1260[61]]}function setVariablesMatrix(_0x538ax25,_0x538ax26,_0x538ax27,_0x538ax3c){if(_0x538ax3c&& _0x538ax3c[_0x1260[149]]){var _0x538ax31=getVariableName(_0x538ax26[_0x1260[126]]);_[_0x1260[132]](_0x538ax3c,function(_0x538ax78,_0x538ax33){_[_0x1260[336]](_0x538ax78,function(_0x538ax51,_0x538ax52){wait[_0x1260[131]](setVariable,_0x538ax25,_0x538ax31+ _0x1260[128]+ _0x538ax33+ _0x1260[476]+ _0x538ax52+ _0x1260[129],_0x1260[130]+ _0x538ax51+ _0x1260[130])})});wait[_0x1260[131]](setVariable,_0x538ax25,_0x538ax31+ _0x1260[477],_0x538ax3c[_0x1260[149]])}else {_0x538ax27(null,{code:200,result:0})}}function getVariable(_0x538ax25,_0x538ax72,_0x538ax27){_0x538ax25[_0x1260[481]](_0x538ax72,function(_0x538ax23,_0x538ax28){if(_0x538ax28[_0x1260[241]]=== 200&& _0x538ax28[_0x1260[146]]!== _0x1260[154]){_0x538ax28[_0x1260[151]]= _0x538ax28[_0x1260[146]][_0x1260[420]](_0x538ax28[_0x1260[146]][_0x1260[479]](_0x1260[478])+ 1,_0x538ax28[_0x1260[146]][_0x1260[479]](_0x1260[480]))}else {_0x538ax28[_0x1260[151]]= _0x1260[89]};_0x538ax27(null,_0x538ax28)})}function getFilePath(_0x538ax74){if(!collections[_0x1260[482]]){getSounds(false)};return Setting[_0x1260[470]]()[_0x1260[94]](function(_0x538ax30){if(_0x538ax74!== _0x1260[150]){if(_0x538ax30){var _0x538ax3e=_[_0x1260[58]](collections[_0x1260[482]],{id:parseInt(_0x538ax74)});return util[_0x1260[39]](_0x1260[483],_0x538ax30[_0x1260[484]]|| _0x1260[485],_0x538ax3e[_0x1260[486]])};return _0x1260[89]}else {return _0x1260[89]}})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x538ax23)})}function getUsers(_0x538ax7c){return User[_0x1260[487]]({raw:true})[_0x1260[94]](function(_0x538ax30){collections[_0x1260[56]]= _[_0x1260[424]](_0x538ax30);if(_0x538ax7c){synchUpdates(_0x1260[25],_0x1260[56],_0x1260[263])}})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x538ax23)})}function getQueues(_0x538ax7c){return VoiceQueue[_0x1260[487]]({raw:true})[_0x1260[94]](function(_0x538ax30){collections[_0x1260[79]]= _[_0x1260[424]](_0x538ax30);if(_0x538ax7c){synchUpdates(_0x1260[26],_0x1260[79],_0x1260[61])}})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x538ax23)})}function getVariables(_0x538ax7c){return Variable[_0x1260[487]]({raw:true})[_0x1260[94]](function(_0x538ax30){collections[_0x1260[437]]= _[_0x1260[424]](_0x538ax30);if(_0x538ax7c){synchUpdates(_0x1260[22],_0x1260[437],_0x1260[263])}})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x538ax23)})}function getDbConnections(_0x538ax7c){return SquareOdbc[_0x1260[487]]({raw:true})[_0x1260[94]](function(_0x538ax30){collections[_0x1260[369]]= _[_0x1260[424]](_0x538ax30);if(_0x538ax7c){synchUpdates(_0x1260[23],_0x1260[369],_0x1260[263])}})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x538ax23)})}function getIntervals(_0x538ax7c){return Interval[_0x1260[487]]({raw:true})[_0x1260[94]](function(_0x538ax30){collections[_0x1260[260]]= _[_0x1260[424]](_0x538ax30);if(_0x538ax7c){synchUpdates(_0x1260[27],_0x1260[260],_0x1260[263])}})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x538ax23)})}function getProjects(_0x538ax7c){return SquareProject[_0x1260[487]]({raw:true})[_0x1260[94]](function(_0x538ax30){collections[_0x1260[325]]= _[_0x1260[424]](_0x538ax30);if(_0x538ax7c){synchUpdates(_0x1260[20],_0x1260[325],_0x1260[263])}})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x538ax23)})}function getSounds(_0x538ax7c){return Sound[_0x1260[487]]({raw:true})[_0x1260[94]](function(_0x538ax30){collections[_0x1260[482]]= _[_0x1260[424]](_0x538ax30);if(_0x538ax7c){synchUpdates(_0x1260[28],_0x1260[482],_0x1260[263])}})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x538ax23)})}function getMailServerOut(_0x538ax7c){return MailServerOut[_0x1260[487]]({raw:true})[_0x1260[94]](function(_0x538ax30){collections[_0x1260[288]]= _[_0x1260[424]](_0x538ax30);if(_0x538ax7c){synchUpdates(_0x1260[31],_0x1260[288],_0x1260[263])}})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x538ax23)})}function getTemplates(_0x538ax7c){return Template[_0x1260[487]]({raw:true})[_0x1260[94]](function(_0x538ax30){collections[_0x1260[295]]= _[_0x1260[424]](_0x538ax30);if(_0x538ax7c){synchUpdates(_0x1260[33],_0x1260[295],_0x1260[263])}})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x538ax23)})}function getSmsAccounts(_0x538ax7c){return SmsAccount[_0x1260[487]]({raw:true})[_0x1260[94]](function(_0x538ax30){collections[_0x1260[307]]= _[_0x1260[424]](_0x538ax30);if(_0x538ax7c){synchUpdates(_0x1260[30],_0x1260[307],_0x1260[263])}})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x538ax23)})}function synchUpdates(_0x538ax87,_0x538ax88,_0x538ax52){process[_0x1260[46]]({message:_0x538ax52?_0x1260[488]:_0x1260[489],model:_0x538ax87,collection:_0x538ax88,key:_0x538ax52})}function updateCollection(_0x538ax88,_0x538ax8a,_0x538ax8b){var _0x538ax8c=_[_0x1260[58]](collections[_0x538ax88],_0x538ax8a);if(_0x538ax8c){_[_0x1260[490]](_0x538ax8c,_0x538ax8b)}else {collections[_0x538ax88][_0x1260[491]](_0x538ax8b)}}function replaceCollection(_0x538ax88,_0x538ax8b){collections[_0x538ax88]= _0x538ax8b}function getPort(){return function(){return Setting[_0x1260[470]]()[_0x1260[94]](function(_0x538ax30){if(_0x538ax30){return _0x538ax30[_0x1260[492]]}})[_0x1260[116]](function(_0x538ax23){console[_0x1260[40]](_0x538ax23)})}}Promise[_0x1260[502]]([])[_0x1260[94]](getPort())[_0x1260[94]](function(_0x538ax8f){agi[_0x1260[495]](main)[_0x1260[494]](_0x538ax8f|| 4573);getUsers(true);getQueues(true);getVariables(true);getIntervals(true);getProjects(true);getSounds(true);getDbConnections(true);getMailServerOut(true);getTemplates(true);getSmsAccounts(true);process[_0x1260[35]](_0x1260[115],function(_0x538ax3c){switch(_0x538ax3c[_0x1260[115]]){case _0x1260[498]:updateCollection(_0x538ax3c[_0x1260[496]],_0x538ax3c[_0x1260[388]],_0x538ax3c[_0x1260[497]]);break;case _0x1260[499]:replaceCollection(_0x538ax3c[_0x1260[496]],_0x538ax3c[_0x1260[497]]);break;case _0x1260[501]:_[_0x1260[500]](collections[_0x538ax3c[_0x1260[496]]],_0x538ax3c[_0x1260[388]]);break;default:}})})[_0x1260[116]](function(_0x538ax23){console[_0x1260[34]](_0x1260[493],_0x538ax23)}) \ No newline at end of file +'use strict'; + +var _ = require('lodash'); + +var agi = require('agi'); +var util = require('util'); +var moment = require('moment'); +var xml = require('xml2js'); +var wait = require('wait.for'); +var sr = require('simple-random'); +var path = require('path'); +var config = require('../environment'); +var sh = require('shelljs'); +var Promise = require('bluebird'); +var rp = require('request-promise'); +const googleTTS = require('google-tts-api'); +const fs = require('fs'); +const sox = require('sox'); +const request = require('request'); +const base64 = require('file-base64'); +const Util = require('../util'); + +var db = require("odbc")(); + +var SquareProject = require('../../models').SquareProject; +var Variable = require('../../models').Variable; +var SquareOdbc = require('../../models').SquareOdbc; +var Setting = require('../../models').Setting; +var User = require('../../models').User; +var VoiceQueue = require('../../models').VoiceQueue; +var Interval = require('../../models').Interval; +var Sound = require('../../models').Sound; +var SquareRecording = require('../../models').SquareRecording; +var SmsAccount = require('../../models').SmsAccount; +var MailServerOut = require('../../models').MailServerOut; +var Mustache = require('mustache'); +var Template = require('../../models').Template; + +var collections = {}; + +var methods = {}; + +process + .on('close', function(code) { + console.log(util.format('AGI SERVER EXITED WITH CODE %s, PROCESS ID: %s ', code, process.pid)); + }) + .on('error', function(err) { + console.error(err); + }); + +console.log(util.format('AGI SERVER STARTING, PROCESS ID: %s ', process.pid)); + +methods.answer = function(context, vertex, callback) { + console.log('--ANSWER BLOCK--'); + console.log('Answering the call...'); + context.send('ANSWER\n', function(err, res) { + callback(err, res); + }); +}; + +methods.custom_app = function(context, vertex, callback) { + console.log('--CUSTOM APP BLOCK--'); + console.log('Executing custom app "' + vertex.application + '"...'); + context.exec(vertex.application, vertex.options, function(err, res) { + if (callback) { + callback(err, res); + } + }); +}; + + +methods.dial = function(context, vertex, callback) { + console.log('--INTERNAL_DIAL BLOCK--'); + if (!collections.users) { + getUsers(false); + } + var sip = _.find(collections.users, { + id: parseInt(vertex.sip_id) + }); + console.log('Calling ' + util.format('SIP/%s', sip.name) + '...'); + var parameters = [util.format('SIP/%s', sip.name), vertex.timeout, vertex.opts, + vertex.url + ]; + context.exec('DIAL', parameters.join(','), + function(err, res) { + callback(err, res); + }); +}; + +methods.start = function(context, vertex, callback) { + console.log('--START BLOCK--'); + if (vertex.answer === 'yes') { + context.send('ANSWER\n', function(err, res) { + callback(err, res); + }); + } else { + callback(null, { + code: 200, + result: 1 + }); + } +}; + +methods.ext_dial = function(context, vertex, callback) { + console.log('--EXTERNAL_DIAL BLOCK--'); + console.log('Calling ' + util.format('SIP/%s', vertex.trunk_name) + '...'); + var parameters = [util.format('SIP/%s/%s', vertex.trunk_name, vertex.phone), + vertex.timeout, vertex.opts, vertex.url + ]; + context.exec('DIAL', parameters.join(','), + function(err, res) { + callback(err, res); + }); +}; + +methods.queue = function(context, vertex, callback) { + console.log('--QUEUE BLOCK--'); + + if (!collections.queues) { + console.log('No voice queues saved'); + getQueues(false); + } + var queue = _.find(collections.queues, { + name: vertex.queue_id + }); + + var squareDetail = { + uniqueid: context.uniqueid, + node: vertex.label, + application: vertex.tag, + data: queue.name, + // data: vertex.queue_id, + project_name: context.project_name, + callerid: context.callerid, + message: 'detail' + } + process.send(squareDetail); + getFilePath(vertex.file_id).then(function(announceOverride) { + var parameters = [queue.name, vertex.opts, vertex.url, + announceOverride, vertex.timeout, vertex.agi, vertex.macro, + vertex.gosub, '', vertex.position + ]; + console.log('Joining ' + queue.name + ' queue...'); + context.exec('QUEUE', parameters.join(','), function(err, res) { + callback(err, res); + }); + }) +}; + +methods.voicemail = function(context, vertex, callback) { + console.log('--VOICEMAIL BLOCK--'); + var parameters = [vertex.mailbox, vertex.options]; + var squareDetail = { + uniqueid: context.uniqueid, + node: vertex.label, + application: vertex.tag, + data: parameters.join(',') || null, + project_name: context.project_name, + callerid: context.callerid, + message: 'detail' + } + process.send(squareDetail); + console.log('Starting voicemail recording...'); + context.exec('VOICEMAIL', parameters.join(','), function(err, res) { + callback(err, res); + }); +}; + +methods.callback = function(context, vertex, callback) { + console.log('--CALLBACK BLOCK--'); + var options = { + method: 'POST', + uri: 'http://localhost/api/rest/contact/insert', + body: { + id_list: parseInt(vertex.list_id), + name: vertex.name || '', + phones: vertex.phone.trim().split(','), + description: vertex.label || '', + planningtime: moment().add(vertex.delay || 5, 'minutes').format('YYYY-MM-DD HH:mm:ss') + }, + json: true // Automatically stringifies the body to JSON + }; + + rp(options) + .then(function(parsedBody) { + if (parsedBody.status > 0) { + console.log(parsedBody.response.RMI); + } else { + console.log(parsedBody.response.RMI.errors); + } + }) + .catch(function(err) { + console.error('TD problem with request:', err.message); + }) + .finally(function() { + console.log('TD finally'); + callback(null, { + code: 200, + result: 1 + }); + }); +}; + +methods.math = function(context, vertex, callback) { + console.log('--MATH BLOCK--'); + console.log('Calculating expression...'); + try { + var result = eval(vertex.operation); + console.log('Saving result in variable...'); + var varName = getVariableName(vertex.variable_id); + if (_.isArray(result)) { + result.forEach(function(elem, index) { + wait.for(setVariable, context, varName + '[' + index + ']', '"' + elem + '"'); + }); + } else { + wait.for(setVariable, context, varName, '"' + result + '"'); + } + } catch (err) { + console.log('Error evaluating expression'); + callback(null, { + code: 200, + result: 1 + }); + } + +} + +// methods.background = function(context, vertex, callback) { +// var parameters = [getFilePath(vertex.file_id), vertex.opts]; +// context.exec('BACKGROUND', parameters.join('|'), function(err, res) { +// callback(err, res); +// }); +// }; + +methods.playback = function(context, vertex, callback) { + console.log('--PLAYBACK BLOCK--'); + getFilePath(vertex.file_id).then(function(audiofile) { + // var audiofile = '/var/www/html/files/sounds/d0269ff87187df665ece75538e4cddfd'; + var parameters = [audiofile, vertex.opts]; + console.log('Executing playback...'); + context.exec('PLAYBACK', parameters.join(','), function(err, res) { + callback(err, res); + }); + }) +}; + +methods.menu = function(context, vertex, callback) { + console.log('--MENU BLOCK--'); + var res = {}; + console.log('There are ' + vertex.retry + ' retries'); + if (vertex.retry > 0) { + vertex.retry--; + getFilePath(vertex.file_id).then(function(announce) { + // var announce = '/var/www/html/files/sounds/b19642d2f71e9cfffbd783fcc79c7415'; + // console.log(announce); + console.log('Announcing and waiting for user entry...'); + context.send(util.format('GET DATA %s %s %s\n', announce, parseInt(vertex.response) * 1000, vertex.digit), + function(err, res) { + var squareDetail = { + uniqueid: context.uniqueid, + node: vertex.label, + application: vertex.tag, + data: res.result || null, + project_name: context.project_name, + callerid: context.callerid, + message: 'detail' + } + process.send(squareDetail); + res.result = res.result.replace('(timeout)', '').trim(); + if (res.result.length) { + if (res.result === '-1') { + callback(null, res); + } else { + res.data = res.result; + if (vertex.variable_id !== '-1') { + console.log('Saving user entry in a variable...'); + var varName = getVariableName(vertex.variable_id); + setVariable(context, varName, '"' + res.data + '"', function() { + callback(null, res); + }); + } else { + callback(null, res); + } + } + } else { + console.log('Menu timeout!'); + res = { + code: 200, + result: '0', + data: 't' + }; + callback(null, res); + } + }); + }); + } else { + console.log('Run out of retries!'); + res = { + code: 200, + result: '0', + data: '-' + }; + callback(null, res); + } +}; + +methods.saynumber = function(context, vertex, callback) { + console.log('--SAYNUMBER BLOCK--'); + console.log('Saying number...'); + context.send(util.format('SAY NUMBER %s "%s"\n', vertex.number, vertex.escape_digits), + function(err, res) { + callback(err, res); + }); +}; + +methods.sayphonetic = function(context, vertex, callback) { + console.log('--SAYPHONETIC BLOCK--'); + console.log('Saying phonetic...'); + context.send(util.format('SAY PHONETIC %s "%s"\n', vertex.text, vertex.escape_digits), + function(err, res) { + callback(err, res); + }); +}; + +// methods.tts = function(context, vertex, callback) { +// console.log('--GOOGLE_TTS BLOCK--'); +// var parameters = [path.join(config.root, 'server/config/agi_scripts', 'googletts.agi'), encodeURIComponent(vertex.text), vertex.google_tts_language]; +// // var parameters = ['/var/www/html/agisquare/agiscripts/googletts.agi', encodeURIComponent(vertex.text), vertex.google_tts_language]; +// console.log('Calling Google TTS API...'); +// context.exec('AGI', parameters.join(','), +// function(err, res) { +// callback(err, res); +// }); +// }; + +methods.tts = function(context, vertex, callback) { + console.log('--GOOGLE_TTS BLOCK--'); + googleTTS(vertex.text, vertex.google_tts_language, 1) + .then(function(url) { + // console.log('The google tts url is: ', url); + console.log('Calling Google TTS API...'); + saveAndPlayTTS(context, vertex, url, 'playback', callback); + }) + .catch(function(err) { + console.error('Google TTS error: ', err.message); + callback(err, { + code: 200, + result: '0' + }) + }); +}; + +function saveAndPlayTTS(context, vertex, url, asteriskFunction, callback) { + var item = { + _saveName: '', + _savePath: '', + _convertedPath: '' + }; + + var options = { + url: url, + }; + + item._saveName = sr({ + length: 6 + }); + + item._savePath = util.format("/tmp/%s.mp3", item._saveName); + var mp3File = fs.createWriteStream(item._savePath); + + // Make API request + request + .get(options) + .on('error', function(err) { + console.log('TTS request error:', err); + }) + .on('data', function(data) { + mp3File.write(data); + }) + .on('end', function() { + console.log('Got audio buffer!'); + mp3File.end(); + + console.log('Audio saved to ', item._savePath); + item._convertedPath = util.format("/tmp/%s.wav", item._saveName); + console.log('Setting original audio file access permissions!'); + fs.chmodSync(item._savePath, parseInt('0777', 8)); + console.log('Converting original audio file and saving in ', item._convertedPath); + var job = sox.transcode(item._savePath, item._convertedPath, { + sampleRate: 8000, + format: 'wav', + channelCount: 1, + bitRate: 192 * 1024, + compressionQuality: 5, + }); + + job.on('error', function(err) { + console.error('**********TTS audio Conversion Error: ', err); + deleteTempFile(item._savePath); + callback(err, { + code: 200, + result: '0' + }) + }); + + job.on('end', function() { + console.log("TTS audio conversion completed"); + console.log('Setting converted audio file access permissions!'); + fs.chmodSync(item._convertedPath, parseInt('0777', 8)); + switch (asteriskFunction) { + case 'playback': + console.log('Calling asterisk playback...'); + context.exec('PLAYBACK', util.format("/tmp/%s", item._saveName), function(err, res) { + if (err) { + console.log('Asterisk playback error: ', err); + } + console.log('Deleting temp audio files...'); + deleteTempFile(item._savePath); + deleteTempFile(item._convertedPath); + callback(err, { + code: 200, + result: '0' + }) + }); + break; + case 'stream': + console.log('Calling asterisk stream file...'); + context.send(util.format('STREAM FILE %s "%s"\n', util.format("/tmp/%s", item._saveName), vertex.intKey), function(err, res) { + if (err) { + console.log('Asterisk stream file error: ', err); + } + console.log('Deleting temp audio files...'); + deleteTempFile(item._savePath); + deleteTempFile(item._convertedPath); + callback(err, { + code: 200, + result: '0' + }) + }); + break; + default: + console.log('Calling asterisk playback...'); + context.exec('PLAYBACK', util.format("/tmp/%s", item._saveName), function(err, res) { + if (err) { + console.log('Asterisk playback error: ', err); + } + console.log('Deleting temp audio files...'); + deleteTempFile(item._savePath); + deleteTempFile(item._convertedPath); + callback(err, { + code: 200, + result: '0' + }) + }); + } + }); + job.start(); + }); +} + +function deleteTempFile(file) { + Promise + .promisify(fs.unlink)(file) + .then(function() { + console.log('Temp audio file ' + file + ' deleted!'); + }) + .catch(function(err) { + // console.log('Error deleting temp audio file: ', err); + }); +} + +// methods.ispeechtts = function(context, vertex, callback) { +// console.log('--ISPEECH_TTS BLOCK--'); +// // var parameters = [path.join(config.root, 'server/config/agi_scripts', 'ispeech-tts.agi'), encodeURIComponent(vertex.text), vertex.ispeech_tts_language, '', '', vertex.key]; +// var parameters = ['/var/www/html/agisquare/agiscripts/ispeech-tts.agi', encodeURIComponent(vertex.text), vertex.ispeech_tts_language, vertex.intKey, vertex.speed, vertex.key]; +// console.log('Calling iSpeech TTS API...'); +// context.exec('AGI', parameters.join(','), +// function(err, res) { +// callback(err, res); +// }); +// }; + +methods.ispeechtts = function(context, vertex, callback) { + console.log('--ISPEECH_TTS BLOCK--'); + var url = util.format('https://api.ispeech.org/api/rest?apikey=%s&action=convert&text=%s&voice=%s&speed=%s&format=mp3', vertex.key, encodeURIComponent(vertex.text), vertex.ispeech_tts_language, + vertex.speed); + try { + console.log('The ispeech tts url is: ', url); + console.log('Calling iSpeech TTS API...'); + saveAndPlayTTS(context, vertex, url, 'stream', callback); + } catch (err) { + console.error('iSPeech TTS error: ', err); + callback(err, { + code: 200, + result: '0' + }); + } +}; + +methods.getdigits = function(context, vertex, callback) { + console.log('--GETDIGITS BLOCK--'); + var res = {}; + console.log('There are ' + vertex.retry + ' retries'); + if (vertex.retry > 0) { + vertex.retry--; + getFilePath(vertex.file_id).then(function(announce) { + // var announce = '/var/www/html/files/sounds/b19642d2f71e9cfffbd783fcc79c7415'; + console.log('Announcing and waiting for user entry...'); + context.send(util.format('GET DATA %s %s %s\n', announce, parseInt(vertex.response) * 1000, vertex.maxdigit), + function(err, res) { + var squareDetail = { + uniqueid: context.uniqueid, + node: vertex.label, + application: vertex.tag, + data: res.result || null, + project_name: context.project_name, + callerid: context.callerid, + message: 'detail' + } + process.send(squareDetail); + res.result = res.result.replace('(timeout)', '').trim(); + if (res.result.length >= parseInt(vertex.mindigit)) { + if (res.result !== '-1') { + console.log('There is a result, is over the minimum length and not due to an hangup!'); + if (vertex.variable_id !== '-1') { + console.log('Saving user entry in a variable...'); + var varName = getVariableName(vertex.variable_id); + setVariable(context, varName, '"' + res.result + '"', function() { + res = { + code: 200, + result: '0', + data: 'x' + }; + callback(null, res); + }); + } else { + console.log('Variable not found, unable to save the result!'); + res = { + code: 200, + result: '0', + data: 'i' + }; + callback(null, res); + } + } else { + console.log('Channel hangup!'); + res = { + code: 500, + result: '-1' + }; + callback(null, res); + } + } else { + console.log('No entry or not long enough!'); + res = { + code: 200, + result: '0', + data: 'i' + }; + callback(null, res); + } + }); + }) + } else { + console.log('Run out of retries!'); + res = { + code: 200, + result: '0', + data: '-' + }; + callback(null, res); + } +}; + +methods.getsecretdigits = function(context, vertex, callback) { + console.log('--GETSECRETDIGITS BLOCK--'); + var res = {}; + console.log('There are ' + vertex.retry + ' retries'); + if (vertex.retry > 0) { + vertex.retry--; + getFilePath(vertex.file_id).then(function(announce) { + // var announce = '/var/www/html/files/sounds/b19642d2f71e9cfffbd783fcc79c7415'; + console.log('Announcing and waiting for user entry...'); + context.send(util.format('GET DATA %s %s %s\n', announce, parseInt(vertex.response) * 1000, vertex.maxdigit), + function(err, res) { + var squareDetail = { + uniqueid: context.uniqueid, + node: vertex.label, + application: vertex.tag, + data: res.result || null, + project_name: context.project_name, + callerid: context.callerid, + message: 'detail' + } + res.result = res.result.replace('(timeout)', '').trim(); + if (res.result.length >= parseInt(vertex.mindigit)) { + if (res.result !== '-1') { + console.log('There is a result, is over the minimum length and not due to an hangup!'); + if (vertex.variable_id !== '-1') { + var stringArray = res.result.split(''); + var length = stringArray.length; + var i; + var limit = Number(vertex.hiddendigitsnum); + if (vertex.hiddendigitspos === 'first') { + for (i = 0; i < limit && i < length; i++) { + stringArray[i] = '*'; + } + } else { + for (i = length - 1; i >= 0 && limit > 0; i--, limit--) { + stringArray[i] = '*'; + } + } + squareDetail.data = stringArray.join(''); + process.send(squareDetail); + console.log('Saving user entry in a variable...'); + var varName = getVariableName(vertex.variable_id); + setVariable(context, varName, '"' + res.result + '"', function() { + res = { + code: 200, + result: '0', + data: 'x' + }; + callback(null, res); + }); + } else { + process.send(squareDetail); + console.log('Variable not found, unable to save the result!'); + res = { + code: 200, + result: '0' + }; + callback(null, res); + } + } else { + process.send(squareDetail); + console.log('Channel hangup!'); + res = { + code: 500, + result: '-1' + }; + callback(null, res); + } + } else { + process.send(squareDetail); + console.log('No entry or not long enough!'); + res = { + code: 200, + result: '0', + data: 'i' + }; + callback(null, res); + } + }); + }) + } else { + console.log('Run out of retries!'); + res = { + code: 200, + result: '0', + data: '-' + }; + callback(null, res); + } +}; + +methods.record = function(context, vertex, callback) { + console.log('--RECORD BLOCK--'); + var saveName = sr({ + length: 4 + }); + console.log('Starting call recording...'); + context.send(util.format('RECORD FILE %s %s "%s" %s %s %s %s\n', path.join(config.root, 'server/files/recordings', context.uniqueid + '_' + saveName), vertex.recordingFormat || 'wav', vertex.escape_digits, + vertex.timeout * 1000, null, true, null), + function( + err, res) { + if (res.code === 200 && res.result !== '-1') { + SquareRecording + .create({ + uniqueid: context.uniqueid, + callerid: context.callerid, + calleridname: context.calleridname, + context: context.context, + extension: context.extension, + priority: context.priority, + accountcode: context.accountcode, + dnid: context.dnid, + project_name: context.project_name, + saveName: context.uniqueid + '_' + saveName, + filename: vertex.file || null, + savePath: path.join(config.root, 'server/files/recordings', context.uniqueid + '_' + saveName + '.' + (vertex.recordingFormat || 'wav')) + }) + .catch(function(err) { + console.log('Error saving ' + vertex.tag + ':' + vertex.label + ' block log', err); + }); + console.log('Saving recording filename in RECORDING_SAVENAME variable...'); + context.send(util.format('SET VARIABLE %s %s\n', 'RECORDING_SAVENAME', context.uniqueid + '_' + saveName), function(err, res) { + callback(err, res); + }); + } else { + callback(err, res); + } + }); +}; + +methods.gotoiftime = function(context, vertex, callback) { //single or multiple intervals + console.log('--GOTOIFTIME BLOCK--'); + var res; + var valid = 'false'; + var gotoIntervals; + if (!collections.intervals) { + getIntervals(false); + } + var interval = _.find(collections.intervals, { + id: parseInt(vertex.interval_id) + }); + if (!interval.IntervalId) { + gotoIntervals = _.filter(collections.intervals, { + IntervalId: parseInt(interval.id) + }); + } + if (gotoIntervals) { + console.log('Is a group of intervals!'); + if (gotoIntervals.length) { + console.log('There are ' + gotoIntervals.length + ' intervals!'); + var subInterval; + console.log('Checking if at least one interval is valid...'); + gotoIntervals.forEach(function(elem, index) { + subInterval = Util.splitInterval(elem.interval); + if (Util.isValidInterval(subInterval)) { + console.log('Interval ' + index + ' is valid!'); + valid = 'true'; + } + }); + } else { + console.log('There are no sub intervals, so it will be always true!'); + valid = 'true'; + } + } else { + console.log('Is a single interval!'); + var splittedInterval = Util.splitInterval(interval.interval); + if (Util.isValidInterval(splittedInterval)) { + console.log('The interval is valid!'); + valid = 'true'; + } + } + console.log('The final result for the intervals is "' + valid + '"!'); + res = { + code: 200, + result: '0', + data: valid + }; + callback(null, res); +}; + +methods.vswitch = function(context, vertex, callback) { + console.log('--VARIABLE_SWITCH BLOCK--'); + console.log('Getting the variable value and searching the right exit...'); + var varName = getVariableName(vertex.variable_id); + getVariable(context, varName, function(err, res) { + if (!res.data) { + res.data = '-'; + } + callback(null, res); + }); + +}; + +methods.goal = function(context, vertex, callback) { + var squareDetail = { + uniqueid: context.uniqueid, + node: vertex.label, + application: vertex.tag, + data: vertex.goalname || null, + project_name: context.project_name, + callerid: context.callerid, + message: 'detail' + } + process.send(squareDetail); + var res = { + code: 200, + result: '1' + }; + callback(null, res); +}; +methods.sendmail = function(context, vertex, callback) { + console.log('--sendMail BLOCK--'); + + var squareDetail = { + uniqueid: context.uniqueid, + node: vertex.label, + application: vertex.tag, + data: vertex.account_id, + project_name: context.project_name, + callerid: context.callerid, + message: 'detail' + } + process.send(squareDetail); + + var res; + + if (vertex.account_id !== '-1') { + var server = _.find(collections.mailServerOut, { + id: Number(vertex.account_id) + }); + if (server) { + var _message = { + from: [server.username], + to: vertex.to.split(","), + cc: vertex.cc ? vertex.cc.split(",") : [], + subject: vertex.subject, + html: vertex.text, + voiceSource: context.uniqueid, + auto: true, + message: 'createMail' + }; + if (vertex.template_id !== '-1') { + var template = _.find(collections.templates, { + id: Number(vertex.template_id) + }); + if (template) { + var msg = { + from: _message.from, + to: _message.to, + cc: _message.cc, + subject: _message.subject, + body: _message.html + }; + _message.subject = template.subject ? Mustache.render(template.subject, msg) : null; + _message.html = template.html ? Mustache.render(template.html, msg) : null; + process.send(_message); + res = { + code: 200, + result: '1' + }; + callback(null, res); + } else { + console.log('Error finding template'); + res = { + code: 200, + result: '1' + }; + callback(null, res); + } + } else { + + process.send(_message); + res = { + code: 200, + result: '1' + }; + callback(null, res); + } + + } else { + console.log(vertex.account_id ? 'Error finding mailAccount address' : 'Error finding general SMTP address'); + res = { + code: 200, + result: '1' + }; + callback(null, res); + } + } else { + console.log('The configured account is not valid'); + res = { + code: 200, + result: '1' + }; + callback(null, res); + } + +}; + +methods.sendsms = function(context, vertex, callback) { + console.log('--sendSMS BLOCK--'); + var squareDetail = { + uniqueid: context.uniqueid, + node: vertex.label, + application: vertex.tag, + data: vertex.account_id, + project_name: context.project_name, + callerid: context.callerid, + message: 'detail' + } + process.send(squareDetail); + + var _message = { + body: vertex.sms_text, + SmsAccountId: vertex.account_id, + source: context.uniqueid, + auto: true, + message: 'createSms' + } + var res; + if (vertex.account_id !== '-1') { + var server = _.find(collections.smsAccounts, { + id: Number(vertex.account_id) + }); + if (server) { + if (server.type === 'twilio') { + _message.from = /^[\+][0-9]+$/.test(server.phone) ? server.phone : '+' + server.phone; + _message.to = /^[\+][0-9]+$/.test(vertex.to) ? vertex.to : '+' + vertex.to; + } else { + _message.from = /^[\+][0-9]+$/.test(server.phone) ? server.phone.replace('+', '') : server.phone; + _message.to = /^[\+][0-9]+$/.test(vertex.to) ? vertex.to.replace('+', '') : vertex.to; + } + process.send(_message); + res = { + code: 200, + result: '1' + }; + callback(null, res); + } else { + console.log('Error finding SMS account'); + res = { + code: 200, + result: '1' + }; + callback(null, res); + } + } else { + console.log('The configured account is not valid'); + res = { + code: 200, + result: '1' + }; + callback(null, res); + } + +}; + +methods.system = function(context, vertex, callback) { + console.log('--SYSTEM BLOCK--'); + var squareDetail = { + uniqueid: context.uniqueid, + node: vertex.label, + application: vertex.tag, + data: _.trim(vertex.command) || null, + project_name: context.project_name, + callerid: context.callerid, + message: 'detail' + } + process.send(squareDetail); + console.log('Executing the system command...'); + sh.exec(_.trim(vertex.command), function(code, output) { + var formattedOutput = output.replace(/(\r\n|\n|\r)/gm, ""); + console.log('Program output:', formattedOutput); + console.log('Saving the output in a variable...'); + var varName = getVariableName(vertex.variable_id); + setVariable(context, varName, '"' + formattedOutput + '"', callback); + }); +}; + +methods.agi = function(context, vertex, callback) { + console.log('--AGI BLOCK--'); + console.log('Executing the AGI command...'); + context.exec('AGI', vertex.command, vertex.args, + function(err, res) { + callback(err, res); + }); +}; + +methods.subproject = function(context, vertex, callback) { + console.log('--SUBPROJECT BLOCK--'); + if (!collections.projects) { + getProjects(false); + } + var project = _.find(collections.projects, { + id: parseInt(vertex.project_id) + }); + console.log('Moving to project ""' + project.name + '"...'); + context.exec('AGI', util.format('"agi://127.0.0.1/square,%s"', project.name), + function(err, res) { + callback(err, res); + }); +}; + +// methods.ispeechasr = function(context, vertex, callback) { +// console.log('--ISPEECH_ASR BLOCK--'); +// // var parameters = ['/var/www/html/agisquare/agiscripts/ispeech-asr.agi', vertex.ispeech_asr_language, '', (vertex.model === '0' ? '' : vertex.model), '1', '#', '', vertex.key]; +// var parameters = [path.join(config.root, 'server/config/agi_scripts', 'ispeech-asr.agi'), vertex.ispeech_asr_language, '', (vertex.model === '0' ? '' : vertex.model), vertex.timeout, vertex.intKey, +// vertex.beep === 'BEEP' ? '' : vertex.beep, vertex.key +// ]; +// console.log('Calling Ispeech ASR API...'); +// context.exec('AGI', parameters.join(','), +// function(err, res) { +// callback(err, res); +// }); +// }; + +methods.ispeechasr = function(context, vertex, callback) { + console.log('--ISPEECH_ASR BLOCK--'); + wait.for(setVariable, context, 'utterance', '"-1"'); + wait.for(setVariable, context, 'status', '"-1"'); + wait.for(setVariable, context, 'confidence', '"-1"'); + var vars = wait.for(asr, context, vertex); + if (!_.isEmpty(vars)) { + console.log('Saving server response into variables...'); + _.forOwn(vars, function(value, key) { + wait.for(setVariable, context, key, '"' + value + '"'); + }); + } else { + console.log('Error: No response from the server!'); + wait.for(setVariable, context, 'ASR_ERROR', '"No response from the server!"'); + } +}; + +function asr(context, vertex, callback) { //wait.for creates automatically a callback that have to be called to exit from the called function + var item = { + _saveName: '', + _savePath: '', + _convertedPath: '' + }; + //reinitialize in case of wrong variables format passed from the function + var vars = {}; + + item._saveName = sr({ + length: 6 + }); + + item._savePath = util.format("/tmp/%s.wav", item._saveName); + // console.log('Temp file is ', item._saveName); + var recordParams = util.format('%s,%s,,', item._savePath, vertex.timeout ? vertex.timeout : ''); + if (vertex.beep && vertex.beep !== 'BEEP') { + recordParams += 'q'; + } + if (vertex.intKey && vertex.intKey !== '#') { + recordParams += 't'; + } + context.exec('RECORD', recordParams, function(err, res) { + if (err) { + console.log('Asterisk record file error: ', err); + callback(err, null); + } else { + console.log('Getting ASR url...'); + var url = util.format('https://api.ispeech.org/api/rest?apikey=%s&action=recognize&locale=%s', vertex.key, vertex.ispeech_asr_language); + if (vertex.model && vertex.model !== '0') { + url += util.format('&model=%s', encodeURIComponent(vertex.model)); + } else { + url += '&freeform=3'; + } + console.log('Reading temp ASR audio file...'); + Promise.promisify(fs.readFile)(item._savePath) + .then(function(result) { + console.log('Got audio file from filesystem, generating url...'); + var base64audio = new Buffer(result, 'binary').toString('base64'); + url += util.format('&content-type=audio/x-wav&audio=%s', base64audio); + var options = { + url: url + }; + console.log('Calling ASR server...'); + return rp(options); + }) + .then(function(asrResponse) { + console.log('Got response from the ASR server, elaborating response...'); + asrResponse = asrResponse.split('&'); + // console.log('The ASR response is ', asrResponse); + var property, error; + _.forEach(asrResponse, function(elem) { + property = elem.split('='); + if (property.length === 2) { + switch (property[0]) { + case 'text': + vars.utterance = property[1].replace(/\+/g, ' '); + break; + case 'result': + if (property[1] === 'success') { + vars.status = 0; + } + break; + case 'confidence': + vars.confidence = decodeURIComponent(property[1]); + break; + case 'message': + vars.ASR_ERROR = decodeURIComponent(property[1].replace(/\+/g, ' ')); + break; + default: + } + } + }); + }) + .catch(function(err) { + console.log('ASR request error: ', err); + }) + .finally(function() { + console.log('Deleting temp ASR file...'); + deleteTempFile(item._savePath); + callback(null, vars); + }); + } + }); +} + +methods.database = function(context, vertex, callback) { + console.log('--DATABASE BLOCK--'); + if (!collections.dbConnections) { + getDbConnections(false); + } + var connection = _.find(collections.dbConnections, { + id: parseInt(vertex.odbc_id) + }); + console.log('Trying to get ODBC connection...'); + var squareDetail = { + uniqueid: context.uniqueid, + node: vertex.label, + application: vertex.tag, + data: vertex.query || null, + project_name: context.project_name, + callerid: context.callerid, + message: 'detail' + } + process.send(squareDetail); + try { + db.openSync(connection.dsn); + var data = db.querySync(vertex.query); + db.closeSync(); + setVariablesMatrix(context, vertex, callback, data); + } catch (e) { + console.log(e.message); + wait.for(setVariable, context, 'ERROR', 'true'); + wait.for(setVariable, context, 'MESSAGE', '"' + e.message + '"'); + } +}; + +methods.gotoc = function(context, vertex, callback) { + console.log('--GOTO BLOCK--'); + console.log('Going to extension ' + vertex.extension + ' ...'); + context.exec('DIAL', util.format('Local/%s@%s', vertex.extension, vertex.context), + function(err, res) { + callback(err, res); + }); +}; + +methods.gotoif = function(context, vertex, callback) { + console.log('--GOTOIF BLOCK--'); + var res = { + code: 200, + result: '0' + }; + context.exec('NOOP', '"Condition: ' + vertex.condition + '"', + function(err, res) { + console.log('Evaluating condition...'); + try { + res.data = String(eval(vertex.condition) ? 'true' : 'false'); + } catch (err) { + console.log('Error evaluating condition, going into the false branch...'); + res.data = 'false'; + } + console.log('The result is ' + res.data); + callback(null, res); + }); +}; + +methods.hangup = function(context, vertex, callback) { + console.log('--HANGUP BLOCK--'); + console.log('Hangin up the call...'); + context.hangup(); +}; + +methods.noop = function(context, vertex, callback) { + console.log('--NOOP BLOCK--'); + var output = (vertex.output) ? '\"' + vertex.output + '\"' : '\"' + + vertex.label + '\"'; + console.log('NOOP value is ' + output); + context.exec('NOOP', output, + function(err, res) { + callback(err, res); + }); +}; + +methods.saydigits = function(context, vertex, callback) { + console.log('--SAYDIGITS BLOCK--'); + console.log('Saying digits...'); + context.send(util.format('SAY DIGITS %s "%s"\n', vertex.digits, vertex.escape_digits), + function(err, res) { + callback(err, res); + }); +}; + +methods.set = function(context, vertex, callback) { + console.log('--SET BLOCK--'); + console.log('Saving value in a variable...'); + var varName = getVariableName(vertex.variable_id); + wait.for(setVariable, context, varName, '"' + vertex.variable_value + '"'); +}; + +function getVertices(root) { + return _.reduce(root, function(result, edge, tag) { + + if (tag === 'mxcell') { + return result; + } + + if (_.isArray(edge)) { + _.forIn(edge, function(value, key) { + result[value.$.id] = value.$; + result[value.$.id].tag = tag; + }); + return result; + } + + result[edge.$.id] = edge.$; + result[edge.$.id].tag = tag; + return result; + + }, {}); +} + +function getTargetBySource(root, source, value, menu) { + return _.result(_.find(root.mxcell, function(edge) { + if (edge.$.edge && edge.$.source) { + if (edge.$.source === source) { + if (edge.$.value && edge.$.value !== value) { + if (menu) { + var values = edge.$.value.split(','); + if (_.includes(values, value)) { + return true; + } + } + return false; + } + return true; + } + } + return false; + }), '$.target'); +} + +// function replaceAllVariables(context, vertex, callback) { +// var obj = vertex; +// for (var key in obj) { +// var res = obj[key].match(/{+(.*?)}/gi); +// if (res) { +// console.log('res', res); +// res.forEach(function(variable, index) { +// console.log('variable', res[index].substring(1, res[index].length - 1)); +// var value = wait.for(getVariable, context, res[index].substring(1, res[index].length - 1)); +// console.log('value', value); +// if (value.data) { +// obj[key] = obj[key].replace(res[index], value.data); +// // console.log('Replace', res[index], string); +// } +// }) +// } +// } +// obj.replaced = true; +// return obj; +// } + +function recurReplace(text, context, start) { //the start parameter says that i'm at the first instance of the recursion, so I don' t have to check if the text is an asterisk variable cause I already have the wanted value + // if (start) { + // console.log('First call, the text arrived from function call is: ', text); + // } else { + // console.log('Recursive Call, the text arrived is: ', text); + // } + var a = 0, + r = {}, + i; + var count = 0; + for (i = 0; i < text.length; i++) { + if (text.charAt(i) === '{') { + if (count === 0) { + a = i; + } + count++; + } + if (text.charAt(i) === '}') { + count--; + if (count === 0) { + r[text.substring(a + 1, i)] = text.substring(a + 1, i); + } + } + } + if (Object.keys(r).length !== 0) { + // console.log('Extracted words are: ', r); + for (var key in r) { + // console.log('Current text element is: ', key); + r[key] = recurReplace(key, context); + // console.log('Replaced text is: ', r[key]); + } + for (var key2 in r) { + text = text.replace(new RegExp('{' + key2.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") + '}', 'g'), r[key2]); + } + } + if (start) { + // console.log('Exiting recursive function!'); + return text; + } else { + // console.log('Returning single word value: ', text); + var value = wait.for(getVariable, context, text); + return value.data || '{' + text + '}'; + } +} + +function replaceAllVariables(context, vertex, callback) { + var obj = _.clone(vertex); + for (var key in obj) { + obj[key] = recurReplace(obj[key], context, true); + console.log('Text after variables replace: ', obj[key]); + } + return obj; +} + +function xstart(context) { + var root = context.root; + var vertices = context.vertices; + + if (root.start) { + if (!_.isArray(root.start)) { + var source = root.start.$.id; + var res = {}; + do { + try { + var vertex = replaceAllVariables(context, vertices[source]); + if (vertex) { + if (_.isFunction(methods[vertex.tag])) { + res = wait.for(methods[vertex.tag], context, vertex); + } else { + res = wait.for(methods.noop, context, vertex); + } + if (res.code === 200 && res.result !== '-1') { + if (vertex.tag === 'menu' || vertex.tag === 'getdigits' || vertex.tag === 'getsecretdigits') { + vertices[source].retry = vertex.retry; + } + var target = getTargetBySource(root, source, res.data, vertex.tag === 'menu'); + if (!target) { + if (vertex.tag === 'menu') { + if (vertex.retry > 0) { + target = getTargetBySource(root, source, 'i', true); + if (!target) { + target = source; + } + } else { + target = getTargetBySource(root, source, '-', true); + } + } + if ((vertex.tag === 'getdigits' || vertex.tag === 'getsecretdigits') && res.data !== '-') { + target = source; + } + if (vertex.tag === 'vswitch' && res.data !== '-') { // if I didn't find the target and I didn't fail to get the variable value I try to go to the minus branch + target = getTargetBySource(root, source, '-'); + } + } + source = target; + } else { + source = null; + } + } else { + source = null; + } + } catch (err) { + console.log(err); + } + } + while (source); + console.log('No target found, hangup!'); + context.hangup(); + } + } +} + + +function xfinally(context) { + var root = context.root; + var vertices = context.vertices; + + if (root.finally) { + if (!_.isArray(root.finally)) { + var source = root.finally.$.id; + var res = {}; + do { + try { + var vertex = vertices[source].replaced ? vertices[source] : replaceAllVariables(context, vertices[source]); + if (vertex) { + if (_.isFunction(methods[vertex.tag])) { + res = wait.for(methods[vertex.tag], context, vertex); + } else { + res = wait.for(methods.noop, context, vertex); + } + if (res.code === 200 && res.result !== '-1') { + if (vertex.tag === 'menu' || vertex.tag === 'getdigits' || vertex.tag === 'getsecretdigits') { + vertices[source].retry = vertex.retry; + } + var target = getTargetBySource(root, source, res.data, vertex.tag === 'menu'); + if (!target) { + if (vertex.tag === 'menu') { + if (vertex.retry > 0) { + target = getTargetBySource(root, source, 'i', true); + if (!target) { + target = source; + } + } else { + target = getTargetBySource(root, source, '-', true); + } + } + if ((vertex.tag === 'getdigits' || vertex.tag === 'getsecretdigits') && res.data !== '-') { + target = source; + } + if (vertex.tag === 'vswitch' && res.data !== '-') { // if I didn't find the target and I didn't fail to get the variable value I try to go to the minus branch + target = getTargetBySource(root, source, '-'); + } + } + source = target; + } else { + source = null; + } + } else { + source = null; + } + } catch (err) { + console.log(err); + } + } while (source); + context.hangup(); + console.log('No target found, stopping "Finally" branch!'); + } + } + context.end(); +} + + +function main(context) { + + context.on('error', function(err) { + console.log('//Error:', err); + }); + + context.on('close', function() { + console.log('//Context close'); + }); + + context.on('hangup', function() { + if (context.finally) { + context.finally = false; + console.log('//Starting "Finally" branch!'); + wait.launchFiber(xfinally, context); + } else { + process.send({ + message: 'update', + uniqueid: context.uniqueid, + leaveAt: moment().format("YYYY-MM-DD HH:mm:ss") + }); + console.log('//Context Hangup'); + } + }); + + context.on('response', function(res) { + //console.log('Response:', res); + }); + + context.on('variables', function(vars) { + console.log(vars); + console.log('Received new call from: ' + vars.agi_callerid + + ' with uniqueid: ' + vars.agi_uniqueid); + var squareLog = { + network: vars.agi_network, + network_script: vars.agi_network_script, + request: vars.agi_request, + channel: vars.agi_channel, + language: vars.agi_language, + type: vars.agi_type, + uniqueid: vars.agi_uniqueid, + version: vars.agi_version, + callerid: vars.agi_callerid, + calleridname: vars.agi_calleridname, + callingpres: vars.agi_callingpres, + callingani2: vars.agi_callingani2, + callington: vars.agi_callington, + callingtns: vars.agi_callingtns, + dnid: vars.agi_dnid, + rdnis: vars.agi_rdnis, + context: vars.agi_context, + extension: vars.agi_extension, + priority: vars.agi_priority, + enhanced: vars.agi_enhanced, + accountcode: vars.agi_accountcode, + threadid: vars.agi_threadid, + project_name: vars.agi_arg_1, + joinAt: moment().format("YYYY-MM-DD HH:mm:ss"), + message: 'create' + }; + + process.send(squareLog); + + if (vars.agi_arg_1) { + SquareProject + .findOne({ + where: { + name: vars.agi_arg_1 + }, + attributes: ['id', 'production'] + }) + .then(function(project) { + if (project) { + if (project.production) { + xml.parseString(project.production, { + normalizeTags: true, + explicitArray: false + }, function(err, result) { + var root = result.mxgraphmodel.root; + if (root) { + context.root = root; + context.finally = true; + context.uniqueid = vars.agi_uniqueid; + context.callerid = vars.agi_callerid; + context.calleridname = vars.agi_calleridname; + context.context = vars.agi_context; + context.extension = vars.agi_extension; + context.priority = vars.agi_priority; + context.accountcode = vars.agi_accountcode; + context.dnid = vars.agi_dnid; + context.project_name = vars.agi_arg_1; + context.vertices = getVertices(root); + wait.launchFiber(xstart, context); + } else { + console.log('No root in project!'); + context.end(); + } + }); + } else { + console.log('No project published!'); + context.end(); + } + } else { + console.log('No project found!'); + context.end(); + } + }) + .catch(function(err) { + console.log('Error:', err); + context.end(); + }); + } else { + console.log('No project argument!'); + context.end(); + } + }); +} + +function setVariable(context, name, value, callback) { + console.log('Setting variable...'); + console.log('Sending set variable,variable is ' + name + ', value is ', value); + context.send(util.format('SET VARIABLE %s %s\n', name, value), function(err, res) { + if (callback) { + callback(err, res); + } + }); +} + +function getVariableName(id) { + if (!collections.variables) { + getVariables(false); + } + var variable = { + name: 'placeholder' //if for any reason i don't receive both the name and the id of the variable, the value will be saved in a placeholder variable + }; + var searchVar; + if (id) { + searchVar = _.find(collections.variables, { + id: parseInt(id) + }); + } + return searchVar ? searchVar.name : variable.name; +} + +function setVariablesMatrix(context, vertex, callback, data) { + if (data && data.length) { + var varName = getVariableName(vertex.variable_id); + _.forEach(data, function(row, index) { + _.forOwn(row, function(value, key) { + wait.for(setVariable, context, varName + '[' + index + '][' + key + ']', '"' + value + '"'); + }); + }); + wait.for(setVariable, context, varName + '_ROWS_COUNT', data.length); + } else { + callback(null, { + code: 200, + result: 0 + }); + } +} + +function getVariable(context, name, callback) { + context.getVariable(name, function(err, res) { + if (res.code === 200 && res.result !== '0') { + res.data = res.result.substring(res.result.lastIndexOf("(") + 1, + res.result.lastIndexOf(")")); + } else { + res.data = ''; + } + callback(null, res); + }) +} + +function getFilePath(id) { + if (!collections.sounds) { + getSounds(false); + } + return Setting + .findOne() + .then(function(result) { + if (id !== '-1') { + if (result) { + var file = _.find(collections.sounds, { + id: parseInt(id) + }); + return util.format('%s/%s', result.soundPath || '/var/opt/motion/server/files/sounds/converted', file.save_name); + } + return ''; + } else { + return ''; + } + }) + .catch(function(err) { + console.log(err); + }); +} + +function getUsers(synch) { + return User + .findAll({ + raw: true + }) + .then(function(result) { + collections.users = _.clone(result); + if (synch) { + synchUpdates('User', 'users', 'id'); + } + }) + .catch(function(err) { + console.log(err); + }); +} + +function getQueues(synch) { + return VoiceQueue + .findAll({ + raw: true + }) + .then(function(result) { + collections.queues = _.clone(result); + if (synch) { + synchUpdates('VoiceQueue', 'queues', 'name'); + } + }) + .catch(function(err) { + console.log(err); + }); +} + +function getVariables(synch) { + return Variable + .findAll({ + raw: true + }) + .then(function(result) { + collections.variables = _.clone(result); + if (synch) { + synchUpdates('Variable', 'variables', 'id'); + } + }) + .catch(function(err) { + console.log(err); + }); +} + +function getDbConnections(synch) { + return SquareOdbc + .findAll({ + raw: true + }) + .then(function(result) { + collections.dbConnections = _.clone(result); + if (synch) { + synchUpdates('SquareOdbc', 'dbConnections', 'id'); + } + }) + .catch(function(err) { + console.log(err); + }); +} + +function getIntervals(synch) { + return Interval + .findAll({ + raw: true + }) + .then(function(result) { + collections.intervals = _.clone(result); + if (synch) { + synchUpdates('Interval', 'intervals', 'id'); + } + }) + .catch(function(err) { + console.log(err); + }); +} + +function getProjects(synch) { + return SquareProject + .findAll({ + raw: true + }) + .then(function(result) { + collections.projects = _.clone(result); + if (synch) { + synchUpdates('SquareProject', 'projects', 'id'); + } + }) + .catch(function(err) { + console.log(err); + }); +} + +function getSounds(synch) { + return Sound + .findAll({ + raw: true + }) + .then(function(result) { + collections.sounds = _.clone(result); + if (synch) { + synchUpdates('Sound', 'sounds', 'id'); + } + }) + .catch(function(err) { + console.log(err); + }); +} + +function getMailServerOut(synch) { + return MailServerOut + .findAll({ + raw: true + }) + .then(function(result) { + collections.mailServerOut = _.clone(result); + if (synch) { + synchUpdates('MailServerOut', 'mailServerOut', 'id'); + } + }) + .catch(function(err) { + console.log(err); + }); +} + +function getTemplates(synch) { + return Template + .findAll({ + raw: true + }) + .then(function(result) { + collections.templates = _.clone(result); + if (synch) { + synchUpdates('Template', 'templates', 'id'); + } + }) + .catch(function(err) { + console.log(err); + }); +} + +function getSmsAccounts(synch) { + return SmsAccount + .findAll({ + raw: true + }) + .then(function(result) { + collections.smsAccounts = _.clone(result); + if (synch) { + synchUpdates('SmsAccount', 'smsAccounts', 'id'); + } + }) + .catch(function(err) { + console.log(err); + }); +} + + + +function synchUpdates(model, collection, key) { + process.send({ + message: key ? 'synch' : 'forceSynch', + model: model, + collection: collection, + key: key + }); +} + +function updateCollection(collection, condition, doc) { + var oldItem = _.find(collections[collection], condition); + if (oldItem) { + _.merge(oldItem, doc); + } else { + collections[collection].unshift(doc); + } +} + +function replaceCollection(collection, doc) { + collections[collection] = doc; +} + +function getPort() { + return function() { + return Setting + .findOne() + .then(function(result) { + if (result) { + return result.agi_port; + } + }) + .catch(function(err) { + console.log(err); + }); + } +} + +Promise + .all([]) + .then(getPort()) + .then(function(agiPort) { + agi.createServer(main).listen(agiPort || 4573); + getUsers(true); + getQueues(true); + getVariables(true); + getIntervals(true); + getProjects(true); + getSounds(true); + getDbConnections(true); + getMailServerOut(true); + getTemplates(true); + getSmsAccounts(true); + process.on('message', function(data) { + switch (data.message) { + case 'updateCollection': + updateCollection(data.collection, data.condition, data.doc); + break; + case 'replaceCollection': + replaceCollection(data.collection, data.doc); + break; + case 'removeFromCollection': + _.remove(collections[data.collection], data.condition); + break; + default: + } + }); + }) + .catch(function(err) { + console.error('Failed initializing AGI service', err); + }); diff --git a/server/config/agi/index.js b/server/config/agi/index.js index 5f31533..b398255 100644 --- a/server/config/agi/index.js +++ b/server/config/agi/index.js @@ -1 +1,131 @@ -var _0x71d3=["\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x65\x78\x70\x6F\x72\x74\x73","\x65\x72\x72\x6F\x72","\x6F\x6E","\x63\x6C\x6F\x73\x65","\x41\x47\x49\x20\x53\x45\x52\x56\x45\x52\x20\x45\x58\x49\x54\x45\x44\x20\x57\x49\x54\x48\x20\x43\x4F\x44\x45\x20\x25\x73","\x66\x6F\x72\x6D\x61\x74","\x6C\x6F\x67","\x6D\x65\x73\x73\x61\x67\x65","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x65\x78\x69\x74\x20\x74\x69\x6D\x65\x20\x66\x72\x6F\x6D\x20\x49\x56\x52","\x63\x61\x74\x63\x68","\x6C\x65\x61\x76\x65\x41\x74","\x75\x6E\x69\x71\x75\x65\x69\x64","\x75\x70\x64\x61\x74\x65","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20\x65\x6E\x74\x65\x72\x20\x74\x69\x6D\x65\x20\x66\x6F\x72\x20\x49\x56\x52","\x63\x72\x65\x61\x74\x65","\x45\x72\x72\x6F\x72\x20\x73\x61\x76\x69\x6E\x67\x20","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x3A","\x6E\x6F\x64\x65","\x20\x62\x6C\x6F\x63\x6B\x20\x6C\x6F\x67","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65\x44\x65\x74\x61\x69\x6C","\x64\x65\x74\x61\x69\x6C","\x73\x79\x6E\x63\x68","\x66\x6F\x72\x63\x65\x53\x79\x6E\x63\x68","\x45\x72\x72\x6F\x72\x20\x63\x72\x65\x61\x74\x69\x6E\x67\x20\x73\x6D\x73\x20\x6D\x65\x73\x73\x61\x67\x65","\x53\x6D\x73\x4D\x65\x73\x73\x61\x67\x65","\x63\x72\x65\x61\x74\x65\x53\x6D\x73","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x63\x72\x65\x61\x74\x65\x4D\x61\x69\x6C","\x2F\x61\x67\x69","\x66\x6F\x72\x6B","\x65\x78\x69\x74","\x6B\x69\x6C\x6C","\x6B\x65\x79","\x75\x70\x64\x61\x74\x65\x43\x6F\x6C\x6C\x65\x63\x74\x69\x6F\x6E","\x63\x6F\x6C\x6C\x65\x63\x74\x69\x6F\x6E","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x73\x65\x6E\x64","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x6D\x6F\x64\x65\x6C","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65\x46\x72\x6F\x6D\x43\x6F\x6C\x6C\x65\x63\x74\x69\x6F\x6E","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x41\x47\x49\x20\x65\x72\x72\x6F\x72\x20\x6F\x6E\x20\x72\x65\x70\x6C\x61\x63\x69\x6E\x67\x20","\x20\x63\x6F\x6C\x6C\x65\x63\x74\x69\x6F\x6E","\x72\x65\x70\x6C\x61\x63\x65\x43\x6F\x6C\x6C\x65\x63\x74\x69\x6F\x6E","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C"];var cp=require(_0x71d3[0]);var util=require(_0x71d3[1]);var models=require(_0x71d3[2]);module[_0x71d3[3]]= function(){var _0xd9b1x4=cp[_0x71d3[34]](__dirname+ _0x71d3[33])[_0x71d3[5]](_0x71d3[10],function(_0xd9b1x7){switch(_0xd9b1x7[_0x71d3[10]]){case _0x71d3[15]:return models[_0x71d3[16]][_0x71d3[15]]({leaveAt:_0xd9b1x7[_0x71d3[13]]},{where:{uniqueid:_0xd9b1x7[_0x71d3[14]]},individualHooks:true})[_0x71d3[12]](function(_0xd9b1x5){console[_0x71d3[9]](_0x71d3[11],_0xd9b1x5)});case _0x71d3[18]:delete _0xd9b1x7[_0x71d3[10]];return models[_0x71d3[16]][_0x71d3[18]](_0xd9b1x7)[_0x71d3[12]](function(_0xd9b1x5){console[_0x71d3[9]](_0x71d3[17],_0xd9b1x5)});case _0x71d3[25]:delete _0xd9b1x7[_0x71d3[10]];return models[_0x71d3[24]][_0x71d3[18]](_0xd9b1x7)[_0x71d3[12]](function(_0xd9b1x5){console[_0x71d3[9]](_0x71d3[19]+ _0xd9b1x7[_0x71d3[20]]+ _0x71d3[21]+ _0xd9b1x7[_0x71d3[22]]+ _0x71d3[23],_0xd9b1x5)});case _0x71d3[26]:synchCollection(_0xd9b1x7,_0xd9b1x4);break;case _0x71d3[27]:replaceCollection(_0xd9b1x7,_0xd9b1x4);break;case _0x71d3[30]:delete _0xd9b1x7[_0x71d3[10]];return models[_0x71d3[29]][_0x71d3[18]](_0xd9b1x7)[_0x71d3[12]](function(_0xd9b1x5){console[_0x71d3[9]](_0x71d3[28],_0xd9b1x5)});case _0x71d3[32]:delete _0xd9b1x7[_0x71d3[10]];return models[_0x71d3[31]][_0x71d3[18]](_0xd9b1x7)[_0x71d3[12]](function(_0xd9b1x5){console[_0x71d3[9]](_0x71d3[28],_0xd9b1x5)});default:}})[_0x71d3[5]](_0x71d3[6],function(_0xd9b1x6){console[_0x71d3[9]](util[_0x71d3[8]](_0x71d3[7],_0xd9b1x6))})[_0x71d3[5]](_0x71d3[4],function(_0xd9b1x5){console[_0x71d3[4]](_0xd9b1x5)});process[_0x71d3[5]](_0x71d3[35],function(_0xd9b1x6){_0xd9b1x4[_0x71d3[36]]()})};function synchCollection(_0xd9b1x7,_0xd9b1x4){var _0xd9b1x9={};models[_0xd9b1x7[_0x71d3[43]]][_0x71d3[42]](function(_0xd9b1xa){_0xd9b1x9[_0xd9b1x7[_0x71d3[37]]]= _0xd9b1xa[_0xd9b1x7[_0x71d3[37]]];_0xd9b1x4[_0x71d3[41]]({message:_0x71d3[38],collection:_0xd9b1x7[_0x71d3[39]],condition:_0xd9b1x9,doc:_0xd9b1xa[_0x71d3[40]]})});models[_0xd9b1x7[_0x71d3[43]]][_0x71d3[44]](function(_0xd9b1xa){_0xd9b1x9[_0xd9b1x7[_0x71d3[37]]]= _0xd9b1xa[_0xd9b1x7[_0x71d3[37]]];_0xd9b1x4[_0x71d3[41]]({message:_0x71d3[38],collection:_0xd9b1x7[_0x71d3[39]],condition:_0xd9b1x9,doc:_0xd9b1xa[_0x71d3[40]]})});models[_0xd9b1x7[_0x71d3[43]]][_0x71d3[46]](function(_0xd9b1xa){_0xd9b1x9[_0xd9b1x7[_0x71d3[37]]]= _0xd9b1xa[_0xd9b1x7[_0x71d3[37]]];_0xd9b1x4[_0x71d3[41]]({message:_0x71d3[45],collection:_0xd9b1x7[_0x71d3[39]],condition:_0xd9b1x9})})}function replaceCollection(_0xd9b1x7,_0xd9b1x4){var _0xd9b1x9={};models[_0xd9b1x7[_0x71d3[43]]][_0x71d3[42]](function(_0xd9b1xa){getCollection(_0xd9b1x7,_0xd9b1x4)});models[_0xd9b1x7[_0x71d3[43]]][_0x71d3[44]](function(_0xd9b1xa){getCollection(_0xd9b1x7,_0xd9b1x4)});models[_0xd9b1x7[_0x71d3[43]]][_0x71d3[46]](function(_0xd9b1xa){getCollection(_0xd9b1x7,_0xd9b1x4)})}function getCollection(_0xd9b1x7,_0xd9b1x4){models[_0xd9b1x7[_0x71d3[43]]][_0x71d3[51]]()[_0x71d3[50]](function(_0xd9b1xd){_0xd9b1x4[_0x71d3[41]]({message:_0x71d3[49],collection:_0xd9b1x7[_0x71d3[39]],doc:_0xd9b1xd})})[_0x71d3[12]](function(_0xd9b1x5){console[_0x71d3[9]](_0x71d3[47],_0xd9b1x7[_0x71d3[39]],_0x71d3[48],_0xd9b1x5)})} \ No newline at end of file +var cp = require('child_process'); +var util = require('util'); +var models = require('../../models'); + +module.exports = function() { + + console.log('Memory used before starting AGI', process.memoryUsage()); + + var child = cp + .fork(__dirname + '/agi') + .on('message', function(data) { + console.log('Memory used on new message received', process.memoryUsage()); + switch (data.message) { + case 'update': + return models.ReportSquare.update({ + leaveAt: data.leaveAt + }, { + where: { + uniqueid: data.uniqueid + }, + individualHooks: true + }) + .catch(function(err) { + console.log('Error saving exit time from IVR', err); + }); + case 'create': + delete data.message; + return models.ReportSquare + .create(data) + .catch(function(err) { + console.log('Error saving enter time for IVR', err); + }); + case 'detail': + delete data.message; + return models.ReportSquareDetail + .create(data) + .catch(function(err) { + console.log('Error saving ' + data.application + ':' + data.node + ' block log', err); + }); + case 'synch': + synchCollection(data, child); + break; + case 'forceSynch': //in case of collections with sub-collections (es: voiceextension, interval) + replaceCollection(data, child); + break; + case 'createSms': + delete data.message; + return models.SmsMessage + .create(data) + .catch(function(err) { + console.log('Error creating sms message', err); + }); + case 'createMail': + delete data.message; + return models.MailMessage + .create(data) + .catch(function(err) { + console.log('Error creating sms message', err); + }); + default: + } + }) + .on('close', function(code) { + console.log(util.format('AGI SERVER EXITED WITH CODE %s', code)); + }) + .on('error', function(err) { + console.error(err); + }); + + process.on('exit', function(code) { + child.kill(); + }); +}; + +function synchCollection(data, child) { + var condition = {}; + models[data.model].afterCreate(function(doc) { + condition[data.key] = doc[data.key]; + child.send({ + message: 'updateCollection', + collection: data.collection, + condition: condition, + doc: doc.dataValues + }); + }); + models[data.model].afterUpdate(function(doc) { + condition[data.key] = doc[data.key]; + child.send({ + message: 'updateCollection', + collection: data.collection, + condition: condition, + doc: doc.dataValues + }); + }); + models[data.model].afterDestroy(function(doc) { + condition[data.key] = doc[data.key]; + child.send({ + message: 'removeFromCollection', + collection: data.collection, + condition: condition + }); + }); +} + +function replaceCollection(data, child) { + var condition = {}; + models[data.model].afterCreate(function(doc) { + getCollection(data, child); + }); + models[data.model].afterUpdate(function(doc) { + getCollection(data, child); + }); + models[data.model].afterDestroy(function(doc) { + getCollection(data, child); + }); +} + +function getCollection(data, child) { + models[data.model] + .findAll() + .then(function(results) { + child.send({ + message: 'replaceCollection', + collection: data.collection, + doc: results + }); + }) + .catch(function(err) { + console.log('AGI error on replacing ', data.collection, ' collection', err); + }); +} diff --git a/server/config/ami/action.js b/server/config/ami/action.js index d148bb5..98a8efc 100644 --- a/server/config/ami/action.js +++ b/server/config/ami/action.js @@ -1 +1,782 @@ -var _0x325c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6D\x6F\x6D\x65\x6E\x74","\x75\x74\x69\x6C","\x62\x6C\x75\x65\x62\x69\x72\x64","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x41\x63\x74\x69\x6F\x6E","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x46\x61\x78\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x53\x6D\x73\x51\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65","\x41\x63\x74\x69\x6F\x6E\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x76\x6F\x69\x63\x65","\x63\x68\x61\x74","\x6D\x61\x69\x6C","\x66\x61\x78","\x73\x6D\x73","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x63\x68\x61\x6E\x67\x65\x64","\x6E\x65\x77\x56\x61\x6C\x75\x65\x73","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x68\x61\x73","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x69\x64","\x70\x69\x63\x6B\x42\x79","\x61\x67\x65\x6E\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x25\x73\x3A\x25\x73","\x72\x6F\x6C\x65","\x66\x6F\x72\x6D\x61\x74","\x74\x6F","\x75\x73\x65\x72\x73","\x61\x64\x6D\x69\x6E\x73","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x6D\x65\x73\x73\x61\x67\x65","\x6F\x70\x74\x69\x6F\x6E\x73","\x41\x63\x74\x69\x6F\x6E\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x75\x70\x64\x61\x74\x65","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x61\x6C\x6C","\x74\x68\x65\x6E","\x63\x68\x61\x6E\x6E\x65\x6C","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x69\x6E\x74\x65\x72\x66\x61\x63\x65","\x74\x79\x70\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72\x2E\x62\x65\x66\x6F\x72\x65\x43\x72\x65\x61\x74\x65","\x65\x76\x74","\x6F\x6E","\x6E\x61\x6D\x65","\x25\x73\x2F\x25\x73","\x53\x49\x50","\x50\x41\x55\x53\x45","\x62\x6F\x64\x79","\x64\x61\x74\x61\x31","\x64\x61\x74\x61\x32","\x64\x61\x74\x61\x33","\x64\x61\x74\x61\x34","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x51\x75\x65\x75\x65\x50\x61\x75\x73\x65","\x61\x63\x74\x69\x6F\x6E","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x41\x6C\x72\x65\x61\x64\x79\x20\x50\x61\x75\x73\x65\x20\x4F\x66\x66","\x66\x69\x6E\x64\x4F\x6E\x65","\x25\x73\x25\x73","\x50\x61\x75\x73\x65","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x6F\x6E\x6C\x69\x6E\x65","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x4C\x4F\x47\x49\x4E","\x51\x75\x65\x75\x65\x41\x64\x64","\x6C\x6F\x67\x69\x6E\x49\x6E\x50\x61\x75\x73\x65","\x44\x45\x46\x41\x55\x4C\x54\x20\x50\x41\x55\x53\x45","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x51\x75\x65\x75\x65\x52\x65\x6D\x6F\x76\x65","\x53\x49\x50\x2F\x25\x73","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x71\x75\x65\x75\x65\x73","\x76\x6F\x69\x63\x65\x20\x71\x75\x65\x75\x65\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x69\x6F\x6E\x20\x72\x65\x6D\x6F\x76\x65\x20\x65\x72\x72\x6F\x72\x20\x3A","\x73\x74\x61\x63\x6B","\x71\x75\x65\x75\x65","\x64\x65\x73\x74\x72\x6F\x79","\x63\x68\x61\x74\x20\x71\x75\x65\x75\x65\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x69\x6F\x6E\x20\x72\x65\x6D\x6F\x76\x65\x20\x65\x72\x72\x6F\x72\x20\x3A","\x71\x75\x65\x75\x65\x49\x64","\x6D\x61\x69\x6C\x20\x71\x75\x65\x75\x65\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x69\x6F\x6E\x20\x72\x65\x6D\x6F\x76\x65\x20\x65\x72\x72\x6F\x72\x20\x3A","\x73\x6D\x73\x20\x71\x75\x65\x75\x65\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x69\x6F\x6E\x20\x72\x65\x6D\x6F\x76\x65\x20\x65\x72\x72\x6F\x72\x20\x3A","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x20\x71\x75\x65\x75\x65\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x69\x6F\x6E\x20\x72\x65\x6D\x6F\x76\x65\x20\x65\x72\x72\x6F\x72\x20\x3A","\x66\x61\x78\x20\x71\x75\x65\x75\x65\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x69\x6F\x6E\x20\x72\x65\x6D\x6F\x76\x65\x20\x65\x72\x72\x6F\x72\x20\x3A","\x55\x6E\x6B\x6E\x6F\x77\x6E\x20\x41\x67\x65\x6E\x74","\x61\x67\x65\x6E\x74","\x66\x69\x6E\x64\x42\x79\x49\x64","\x70\x61\x75\x73\x65","\x75\x6E\x70\x61\x75\x73\x65","\x6C\x6F\x67\x69\x6E","\x6C\x6F\x67\x6F\x75\x74","\x55\x6E\x6B\x6E\x6F\x77\x6E\x20\x41\x63\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];_0x325c[0];const moment=require(_0x325c[1]);const util=require(_0x325c[2]);const Promise=require(_0x325c[3]);const _=require(_0x325c[4]);const config=require(_0x325c[5]);const Agent=require(_0x325c[7])[_0x325c[6]];const ActionModel=require(_0x325c[7])[_0x325c[8]];const Sequelize=require(_0x325c[7])[_0x325c[9]];const VoiceQueue=require(_0x325c[7])[_0x325c[10]];const ReportMember=require(_0x325c[7])[_0x325c[11]];const UserHasVoiceQueue=require(_0x325c[7])[_0x325c[12]];const UserHasChatQueue=require(_0x325c[7])[_0x325c[13]];const UserHasMailQueue=require(_0x325c[7])[_0x325c[14]];const UserHasFaxQueue=require(_0x325c[7])[_0x325c[15]];const UserHasSmsQueue=require(_0x325c[7])[_0x325c[16]];const UserHasOpenchannelQueue=require(_0x325c[7])[_0x325c[17]];function Action(_0xb27fx12,_0xb27fx13){console[_0x325c[19]](_0x325c[18]);var _0xb27fx14=[_0x325c[20],_0x325c[21],_0x325c[22],_0x325c[23],_0x325c[24],_0x325c[25]];Agent[_0x325c[41]](function(_0xb27fx15,_0xb27fx16){var _0xb27fx17=_0xb27fx15[_0x325c[26]]();_0xb27fx15[_0x325c[28]][_0x325c[27]]= _[_0x325c[32]](_0xb27fx15[_0x325c[28]],function(_0xb27fx18,_0xb27fx19){return _[_0x325c[29]](_0xb27fx15._changed,_0xb27fx19)|| _[_0x325c[30]](_0xb27fx17,_0xb27fx19)|| _0xb27fx19=== _0x325c[31]});_0xb27fx13[_0x325c[38]](util[_0x325c[37]](_0x325c[35],_0xb27fx15[_0x325c[36]],_0xb27fx15[_0x325c[31]]))[_0x325c[34]](_0x325c[33],_0xb27fx15);_0xb27fx13[_0x325c[38]](_0x325c[39])[_0x325c[34]](_0x325c[33],_0xb27fx15);_0xb27fx13[_0x325c[38]](_0x325c[40])[_0x325c[34]](_0x325c[33],_0xb27fx15)});ActionModel[_0x325c[42]](function(_0xb27fx15,_0xb27fx16){return _0xb27fx37(_0xb27fx15,_0xb27fx16,_0xb27fx12)});process[_0x325c[59]](_0x325c[43],function(_0xb27fx1a){switch(_0xb27fx1a[_0x325c[58]]){case _0x325c[45]:return _0xb27fx37(_0xb27fx1a,_0xb27fx1a[_0x325c[44]],_0xb27fx12);case _0x325c[57]:return ReportMember[_0x325c[56]]({where:{channel:_0xb27fx1a[_0x325c[52]],membername:_0xb27fx1a[_0x325c[53]],interface:_0xb27fx1a[_0x325c[54]],type:_0xb27fx1a[_0x325c[55]],exitAt:null}})[_0x325c[51]](function(_0xb27fx1b){var _0xb27fx1c=[];_0xb27fx1b[_0x325c[49]](function(_0xb27fx1d){_0xb27fx1c[_0x325c[48]](_0xb27fx1d[_0x325c[47]]({exitAt:moment()[_0x325c[37]](_0x325c[46])}))});return Promise[_0x325c[50]](_0xb27fx1c)});default:}});function _0xb27fx1e(_0xb27fx16,_0xb27fx1f){return function(_0xb27fx20){return Promise[_0x325c[74]](_0xb27fx12[_0x325c[73]])({action:_0x325c[72],interface:util[_0x325c[37]](_0x325c[61],_0x325c[62],_0xb27fx20[_0x325c[60]]),paused:true,reason:_0xb27fx16[_0x325c[64]][_0x325c[55]]|| _0xb27fx1f[_0x325c[65]]})[_0x325c[51]](function(_0xb27fx23){return _0xb27fx20[_0x325c[47]]({voicePause:true,chatPause:true,mailPause:true,faxPause:true,smsPause:true,openchannelPause:true,pauseType:_0xb27fx16[_0x325c[64]][_0x325c[55]]|| _0xb27fx1f[_0x325c[65]],lastPauseAt:moment()[_0x325c[37]](_0x325c[46])},{transaction:_0xb27fx16[_0x325c[70]]|| null})})[_0x325c[51]](function(_0xb27fx20){var _0xb27fx21=[];_0xb27fx14[_0x325c[49]](function(_0xb27fx22){_0xb27fx21[_0x325c[48]]({channel:_0xb27fx22,membername:_0xb27fx20[_0x325c[60]],interface:util[_0x325c[37]](_0x325c[61],_0x325c[62],_0xb27fx20[_0x325c[60]]),type:_0x325c[63],enterAt:moment()[_0x325c[37]](_0x325c[46]),data1:_0xb27fx16[_0x325c[64]][_0x325c[55]]|| _0xb27fx1f[_0x325c[65]],data2:_0xb27fx1f[_0x325c[66]],data3:_0xb27fx1f[_0x325c[67]],data4:_0xb27fx1f[_0x325c[68]],role:_0xb27fx20[_0x325c[36]],internal:_0xb27fx20[_0x325c[69]]})});return ReportMember[_0x325c[71]](_0xb27fx21,{individualHooks:true,transaction:_0xb27fx16[_0x325c[70]]|| null})})}}function _0xb27fx24(_0xb27fx16,_0xb27fx1f){return function(_0xb27fx20){if(!_0xb27fx16[_0x325c[64]]){_0xb27fx16[_0x325c[64]]= {}};switch(_0xb27fx16[_0x325c[64]][_0x325c[52]]){case _0x325c[20]:return Promise[_0x325c[74]](_0xb27fx12[_0x325c[73]])({action:_0x325c[72],interface:util[_0x325c[37]](_0x325c[61],_0x325c[62],_0xb27fx20[_0x325c[60]]),paused:false,reason:_0xb27fx16[_0x325c[64]][_0x325c[55]]})[_0x325c[51]](function(){return _0xb27fx20[_0x325c[47]]({voicePause:false},{transaction:_0xb27fx16[_0x325c[70]]|| null})})[_0x325c[51]](function(_0xb27fx20){return ReportMember[_0x325c[76]]({where:{channel:_0xb27fx16[_0x325c[64]][_0x325c[52]],membername:_0xb27fx20[_0x325c[60]],interface:util[_0x325c[37]](_0x325c[61],_0x325c[62],_0xb27fx20[_0x325c[60]]),type:_0x325c[63],exitAt:null}})})[_0x325c[51]](_0xb27fx34({message:_0x325c[75]}))[_0x325c[51]](function(_0xb27fx25){return _0xb27fx25[_0x325c[47]]({exitAt:moment()[_0x325c[37]](_0x325c[46])},{individualHooks:true,transaction:_0xb27fx16[_0x325c[70]]|| null})})[_0x325c[51]](function(){return _0xb27fx20});case _0x325c[21]:;case _0x325c[22]:;case _0x325c[23]:;case _0x325c[24]:;case _0x325c[25]:var _0xb27fx1a={};_0xb27fx1a[util[_0x325c[37]](_0x325c[77],_0xb27fx16[_0x325c[64]][_0x325c[52]],_0x325c[78])]= false;return _0xb27fx20[_0x325c[47]](_0xb27fx1a,{transaction:_0xb27fx16[_0x325c[70]]|| null})[_0x325c[51]](function(_0xb27fx20){return ReportMember[_0x325c[76]]({where:{channel:_0xb27fx16[_0x325c[64]][_0x325c[52]],membername:_0xb27fx20[_0x325c[60]],interface:util[_0x325c[37]](_0x325c[61],_0x325c[62],_0xb27fx20[_0x325c[60]]),type:_0x325c[63],exitAt:null}})})[_0x325c[51]](_0xb27fx34({message:_0x325c[75]}))[_0x325c[51]](function(_0xb27fx25){return _0xb27fx25[_0x325c[47]]({exitAt:moment()[_0x325c[37]](_0x325c[46])},{individualHooks:true,transaction:_0xb27fx16[_0x325c[70]]|| null})})[_0x325c[51]](function(){return _0xb27fx20});default:var _0xb27fx1f=Promise[_0x325c[74]](_0xb27fx12[_0x325c[73]]);return _0xb27fx1f({action:_0x325c[72],interface:util[_0x325c[37]](_0x325c[61],_0x325c[62],_0xb27fx20[_0x325c[60]]),paused:false})[_0x325c[80]](function(_0xb27fx29){console[_0x325c[79]](_0xb27fx29)})[_0x325c[51]](function(){return _0xb27fx20[_0x325c[47]]({voicePause:false,mailPause:false,chatPause:false,faxPause:false,smsPause:false,openchannelPause:false},{transaction:_0xb27fx16[_0x325c[70]]|| null})})[_0x325c[51]](function(_0xb27fx20){return ReportMember[_0x325c[56]]({where:{membername:_0xb27fx20[_0x325c[60]],interface:util[_0x325c[37]](_0x325c[61],_0x325c[62],_0xb27fx20[_0x325c[60]]),type:_0x325c[63],exitAt:null}})})[_0x325c[51]](function(_0xb27fx26){var _0xb27fx27=[];_0xb27fx26[_0x325c[49]](function(_0xb27fx28){_0xb27fx27[_0x325c[48]](_0xb27fx28[_0x325c[47]]({exitAt:moment()[_0x325c[37]](_0x325c[46])}))});return Promise[_0x325c[50]](_0xb27fx27)})[_0x325c[51]](function(){return _0xb27fx20})}}}function _0xb27fx2a(_0xb27fx16,_0xb27fx1f){return function(_0xb27fx20){if(!_0xb27fx20[_0x325c[81]]){return _0xb27fx20[_0x325c[87]]()[_0x325c[51]](function(_0xb27fx2b){var _0xb27fx2c=[];_0xb27fx2b[_0x325c[49]](function(_0xb27fx2d){_0xb27fx2c[_0x325c[48]](_0xb27fx12[_0x325c[73]]({action:_0x325c[84],queue:_0xb27fx2d[_0x325c[60]],interface:util[_0x325c[37]](_0x325c[61],_0x325c[62],_0xb27fx20[_0x325c[60]]),membername:_0xb27fx20[_0x325c[60]]}))});if(_0xb27fx20[_0x325c[85]]){_0xb27fx2c[_0x325c[48]]({action:_0x325c[72],interface:util[_0x325c[37]](_0x325c[61],_0x325c[62],_0xb27fx20[_0x325c[60]]),paused:true,reason:_0x325c[86]})};return Promise[_0x325c[50]](_0xb27fx2c)})[_0x325c[51]](function(_0xb27fx23){var _0xb27fx21=[];_0xb27fx14[_0x325c[49]](function(_0xb27fx22){_0xb27fx21[_0x325c[48]]({channel:_0xb27fx22,membername:_0xb27fx20[_0x325c[60]],interface:util[_0x325c[37]](_0x325c[61],_0x325c[62],_0xb27fx20[_0x325c[60]]),type:_0x325c[83],enterAt:moment()[_0x325c[37]](_0x325c[46]),role:_0xb27fx20[_0x325c[36]],internal:_0xb27fx20[_0x325c[69]]})});return ReportMember[_0x325c[71]](_0xb27fx21,{individualHooks:true})})[_0x325c[51]](function(){return _0xb27fx20[_0x325c[82]]({online:true,lastLoginAt:moment()[_0x325c[37]](_0x325c[46])})})}}}function _0xb27fx2e(_0xb27fx16,_0xb27fx1f){return function(_0xb27fx20){if(_0xb27fx20[_0x325c[81]]){return VoiceQueue[_0x325c[56]]()[_0x325c[51]](function(_0xb27fx2b){var _0xb27fx2c=[];_0xb27fx2b[_0x325c[49]](function(_0xb27fx2d){_0xb27fx2c[_0x325c[48]](_0xb27fx12[_0x325c[73]]({action:_0x325c[88],queue:_0xb27fx2d[_0x325c[60]],interface:util[_0x325c[37]](_0x325c[61],_0x325c[62],_0xb27fx20[_0x325c[60]])}))});return Promise[_0x325c[50]](_0xb27fx2c)[_0x325c[80]](function(_0xb27fx29){console[_0x325c[79]](_0xb27fx29)})})[_0x325c[51]](function(_0xb27fx23){return ReportMember[_0x325c[56]]({where:{membername:_0xb27fx20[_0x325c[60]],interface:util[_0x325c[37]](_0x325c[61],_0x325c[62],_0xb27fx20[_0x325c[60]]),type:_0x325c[83],exitAt:null}})})[_0x325c[51]](function(_0xb27fx26){var _0xb27fx27=[];_0xb27fx26[_0x325c[49]](function(_0xb27fx28){_0xb27fx27[_0x325c[48]](_0xb27fx28[_0x325c[47]]({exitAt:moment()[_0x325c[37]](_0x325c[46])}))});return Promise[_0x325c[50]](_0xb27fx27)})[_0x325c[51]](function(){return _0xb27fx20[_0x325c[82]]({online:false})})}}}function _0xb27fx2f(_0xb27fx16,_0xb27fx1f){return function(_0xb27fx20){var _0xb27fx30=[];switch(_0xb27fx16[_0x325c[64]][_0x325c[52]]){case _0x325c[20]:_0xb27fx16[_0x325c[64]][_0x325c[91]][_0x325c[49]](function(_0xb27fx31){_0xb27fx30[_0x325c[48]](UserHasVoiceQueue[_0x325c[90]]({where:{UserId:_0xb27fx20[_0x325c[31]],queue:_0xb27fx31},defaults:{queue:_0xb27fx31,location:util[_0x325c[37]](_0x325c[89],_0xb27fx20[_0x325c[60]]),membername:_0xb27fx20[_0x325c[60]],UserId:_0xb27fx20[_0x325c[31]]},transaction:_0xb27fx16[_0x325c[70]]|| null,individualHooks:true}))});return Promise[_0x325c[50]](_0xb27fx30)[_0x325c[51]](function(){var _0xb27fx2c=[];_0xb27fx16[_0x325c[64]][_0x325c[91]][_0x325c[49]](function(_0xb27fx31){_0xb27fx2c[_0x325c[48]](_0xb27fx12[_0x325c[73]]({action:_0x325c[84],queue:_0xb27fx31,interface:util[_0x325c[37]](_0x325c[61],_0x325c[62],_0xb27fx20[_0x325c[60]]),membername:_0xb27fx20[_0x325c[60]]}))});return Promise[_0x325c[50]](_0xb27fx2c)})[_0x325c[80]](function(_0xb27fx29){console[_0x325c[79]](_0xb27fx29)});case _0x325c[21]:_0xb27fx16[_0x325c[64]][_0x325c[91]][_0x325c[49]](function(_0xb27fx31){_0xb27fx30[_0x325c[48]](UserHasChatQueue[_0x325c[90]]({where:{UserId:_0xb27fx20[_0x325c[31]],ChatQueueId:_0xb27fx31[_0x325c[31]]},defaults:{ChatQueueId:_0xb27fx31[_0x325c[31]],queue:_0xb27fx31[_0x325c[60]],UserId:_0xb27fx20[_0x325c[31]]},transaction:_0xb27fx16[_0x325c[70]]|| null}))});return Promise[_0x325c[50]](_0xb27fx30)[_0x325c[80]](function(_0xb27fx29){console[_0x325c[19]](_0xb27fx29)});case _0x325c[22]:_0xb27fx16[_0x325c[64]][_0x325c[91]][_0x325c[49]](function(_0xb27fx31){_0xb27fx30[_0x325c[48]](UserHasMailQueue[_0x325c[90]]({where:{UserId:_0xb27fx20[_0x325c[31]],MailQueueId:_0xb27fx31[_0x325c[31]]},defaults:{MailQueueId:_0xb27fx31[_0x325c[31]],queue:_0xb27fx31[_0x325c[60]],UserId:_0xb27fx20[_0x325c[31]]},transaction:_0xb27fx16[_0x325c[70]]|| null}))});return Promise[_0x325c[50]](_0xb27fx30)[_0x325c[80]](function(_0xb27fx29){console[_0x325c[19]](_0xb27fx29)});case _0x325c[24]:_0xb27fx16[_0x325c[64]][_0x325c[91]][_0x325c[49]](function(_0xb27fx31){_0xb27fx30[_0x325c[48]](UserHasSmsQueue[_0x325c[90]]({where:{UserId:_0xb27fx20[_0x325c[31]],SmsQueueId:_0xb27fx31[_0x325c[31]]},defaults:{SmsQueueId:_0xb27fx31[_0x325c[31]],queue:_0xb27fx31[_0x325c[60]],UserId:_0xb27fx20[_0x325c[31]]},transaction:_0xb27fx16[_0x325c[70]]|| null}))});return Promise[_0x325c[50]](_0xb27fx30)[_0x325c[80]](function(_0xb27fx29){console[_0x325c[19]](_0xb27fx29)});case _0x325c[25]:_0xb27fx16[_0x325c[64]][_0x325c[91]][_0x325c[49]](function(_0xb27fx31){_0xb27fx30[_0x325c[48]](UserHasOpenchannelQueue[_0x325c[90]]({where:{UserId:_0xb27fx20[_0x325c[31]],OpenchannelQueueId:_0xb27fx31[_0x325c[31]]},defaults:{OpenchannelQueueId:_0xb27fx31[_0x325c[31]],queue:_0xb27fx31[_0x325c[60]],UserId:_0xb27fx20[_0x325c[31]]},transaction:_0xb27fx16[_0x325c[70]]|| null}))});return Promise[_0x325c[50]](_0xb27fx30)[_0x325c[80]](function(_0xb27fx29){console[_0x325c[19]](_0xb27fx29)});case _0x325c[23]:_0xb27fx16[_0x325c[64]][_0x325c[91]][_0x325c[49]](function(_0xb27fx31){_0xb27fx30[_0x325c[48]](UserHasFaxQueue[_0x325c[90]]({where:{UserId:_0xb27fx20[_0x325c[31]],FaxQueueId:_0xb27fx31[_0x325c[31]]},defaults:{faxQueueId:_0xb27fx31[_0x325c[31]],queue:_0xb27fx31[_0x325c[60]],UserId:_0xb27fx20[_0x325c[31]]},transaction:_0xb27fx16[_0x325c[70]]|| null}))});return Promise[_0x325c[50]](_0xb27fx30)[_0x325c[80]](function(_0xb27fx29){console[_0x325c[19]](_0xb27fx29)});default:}}}function _0xb27fx32(_0xb27fx16,_0xb27fx1f){return function(_0xb27fx20){switch(_0xb27fx16[_0x325c[64]][_0x325c[52]]){case _0x325c[20]:return UserHasVoiceQueue[_0x325c[95]]({where:{UserId:_0xb27fx20[_0x325c[31]],queue:_0xb27fx16[_0x325c[64]][_0x325c[94]]},transaction:_0xb27fx16[_0x325c[70]]|| null,individualHooks:true})[_0x325c[51]](function(){var _0xb27fx33=Promise[_0x325c[74]](_0xb27fx12[_0x325c[73]]);return _0xb27fx33({action:_0x325c[88],queue:_0xb27fx16[_0x325c[64]][_0x325c[94]],interface:util[_0x325c[37]](_0x325c[61],_0x325c[62],_0xb27fx20[_0x325c[60]])})})[_0x325c[80]](function(_0xb27fx29){console[_0x325c[79]](_0x325c[92],_0xb27fx29[_0x325c[93]])});case _0x325c[21]:return UserHasChatQueue[_0x325c[95]]({where:{UserId:_0xb27fx20[_0x325c[31]],ChatQueueId:_0xb27fx16[_0x325c[64]][_0x325c[97]]},transaction:_0xb27fx16[_0x325c[70]]|| null,individualHooks:true})[_0x325c[80]](function(_0xb27fx29){console[_0x325c[79]](_0x325c[96],_0xb27fx29)});case _0x325c[22]:return UserHasMailQueue[_0x325c[95]]({where:{UserId:_0xb27fx20[_0x325c[31]],MailQueueId:_0xb27fx16[_0x325c[64]][_0x325c[97]]},transaction:_0xb27fx16[_0x325c[70]]|| null,individualHooks:true})[_0x325c[80]](function(_0xb27fx29){console[_0x325c[79]](_0x325c[98],_0xb27fx29)});case _0x325c[24]:return UserHasSmsQueue[_0x325c[95]]({where:{UserId:_0xb27fx20[_0x325c[31]],SmsQueueId:_0xb27fx16[_0x325c[64]][_0x325c[97]]},transaction:_0xb27fx16[_0x325c[70]]|| null,individualHooks:true})[_0x325c[80]](function(_0xb27fx29){console[_0x325c[79]](_0x325c[99],_0xb27fx29)});case _0x325c[25]:return UserHasOpenchannelQueue[_0x325c[95]]({where:{UserId:_0xb27fx20[_0x325c[31]],OpenchannelQueueId:_0xb27fx16[_0x325c[64]][_0x325c[97]]},transaction:_0xb27fx16[_0x325c[70]]|| null,individualHooks:true})[_0x325c[80]](function(_0xb27fx29){console[_0x325c[79]](_0x325c[100],_0xb27fx29)});case _0x325c[23]:return UserHasFaxQueue[_0x325c[95]]({where:{UserId:_0xb27fx20[_0x325c[31]],FaxQueueId:_0xb27fx16[_0x325c[64]][_0x325c[97]]},transaction:_0xb27fx16[_0x325c[70]]|| null,individualHooks:true})[_0x325c[80]](function(_0xb27fx29){console[_0x325c[79]](_0x325c[101],_0xb27fx29)});default:}}}function _0xb27fx34(_0xb27fx35){return function(_0xb27fx36){if(!_0xb27fx36){throw _0xb27fx35};return _0xb27fx36}}function _0xb27fx37(_0xb27fx1f,_0xb27fx16,_0xb27fx12){switch(_0xb27fx1f[_0x325c[60]]){case _0x325c[105]:return Agent[_0x325c[104]](_0xb27fx16[_0x325c[64]][_0x325c[103]])[_0x325c[51]](_0xb27fx34({message:_0x325c[102]}))[_0x325c[51]](_0xb27fx1e(_0xb27fx16,_0xb27fx1f));case _0x325c[106]:return Agent[_0x325c[104]](_0xb27fx16[_0x325c[64]][_0x325c[103]])[_0x325c[51]](_0xb27fx34({message:_0x325c[102]}))[_0x325c[51]](_0xb27fx24(_0xb27fx16,_0xb27fx1f));case _0x325c[107]:return Agent[_0x325c[104]](_0xb27fx1f[_0x325c[65]])[_0x325c[51]](_0xb27fx34({message:_0x325c[102]}))[_0x325c[51]](_0xb27fx2a(_0xb27fx16,_0xb27fx1f))[_0x325c[51]](function(){return Agent[_0x325c[104]](_0xb27fx1f[_0x325c[65]])});case _0x325c[108]:return Agent[_0x325c[104]](_0xb27fx1f[_0x325c[65]])[_0x325c[51]](_0xb27fx34({message:_0x325c[102]}))[_0x325c[51]](_0xb27fx24(_0xb27fx16,_0xb27fx1f))[_0x325c[51]](_0xb27fx2e(_0xb27fx16,_0xb27fx1f));case _0x325c[84]:return Agent[_0x325c[104]](_0xb27fx16[_0x325c[64]][_0x325c[103]])[_0x325c[51]](_0xb27fx34({message:_0x325c[102]}))[_0x325c[51]](_0xb27fx2f(_0xb27fx16,_0xb27fx1f));case _0x325c[88]:return Agent[_0x325c[104]](_0xb27fx16[_0x325c[64]][_0x325c[103]])[_0x325c[51]](_0xb27fx34({message:_0x325c[102]}))[_0x325c[51]](_0xb27fx32(_0xb27fx16,_0xb27fx1f));default:throw {message:_0x325c[109]}}}return {}}module[_0x325c[110]]= Action \ No newline at end of file +'use strict'; + +const moment = require('moment'); +const util = require('util'); +const Promise = require('bluebird'); +const _ = require('lodash'); + +const config = require('../environment'); +const Agent = require('../../models').User; +const ActionModel = require('../../models').Action; +const Sequelize = require('../../models').sequelize; +const VoiceQueue = require('../../models').VoiceQueue; +const ReportMember = require('../../models').ReportMember; +const UserHasVoiceQueue = require('../../models').UserHasVoiceQueue; +const UserHasChatQueue = require('../../models').UserHasChatQueue; +const UserHasMailQueue = require('../../models').UserHasMailQueue; +const UserHasFaxQueue = require('../../models').UserHasFaxQueue; +const UserHasSmsQueue = require('../../models').UserHasSmsQueue; +const UserHasOpenchannelQueue = require('../../models').UserHasOpenchannelQueue; + +function Action(ami, io) { + console.log('Action Initialization...'); + var channels = ['voice', 'chat', 'mail', 'fax', 'sms', 'openchannel']; + + // Agent.afterUpdate(function(doc, options) { + // var _changed = doc.changed(); + // doc.dataValues.newValues = _.pickBy(doc.dataValues, function(value, key) { + // return _.has(doc._changed, key) || _.includes(_changed, key) || key === 'id'; + // }); + // io.to(util.format('%s:%s', doc.role, doc.id)).emit('agent:save', doc); + // io.to('users').emit('agent:save', doc); + // io.to('admins').emit('agent:save', doc); + // }); + + function agentUpdateHook(doc) { + var _changed = doc.changed(); + doc.dataValues.newValues = _.pickBy(doc.dataValues, function(value, key) { + return _.has(doc._changed, key) || _.includes(_changed, key) || key === 'id'; + }); + io.to(util.format('%s:%s', doc.role, doc.id)).emit('agent:save', doc); + io.to('users').emit('agent:save', doc); + io.to('admins').emit('agent:save', doc); + } + + ActionModel.afterCreate(function(doc, options) { + return onSave(doc, options, ami); + }); + + process.on('message', function(data) { + switch (data.evt) { + case 'Action.afterCreate': + return onSave(data, data.options, ami); + + case 'ReportMember.beforeCreate': + return ReportMember + .findAll({ + where: { + channel: data.channel, + membername: data.membername, + interface: data.interface, + type: data.type, + exitAt: null + } + }) + .then(function(elms) { + var queries = []; + elms.forEach(function(elm) { + queries.push(elm.update({ + exitAt: moment().format("YYYY-MM-DD HH:mm:ss"), + })); + }); + + return Promise + .all(queries); + }); + case 'Agent.afterUpdate': + !data.changed.online && prune(ami, data); + break; + default: + } + }); + + // HANDLE PAUSE FUNCTION + function handlePause(options, action) { + return function(agent) { + return Promise + .promisify(ami.action)({ + action: 'QueuePause', + interface: util.format('%s/%s', 'SIP', agent.name), + paused: true, + reason: options.body.type || action.data1, + }) + .then(function(astData) { + return agent + .update({ + voicePause: true, + chatPause: true, + mailPause: true, + faxPause: true, + smsPause: true, + openchannelPause: true, + pauseType: options.body.type || action.data1, + lastPauseAt: moment().format("YYYY-MM-DD HH:mm:ss") + }, { + transaction: options.transaction || null + }); + }) + .then(function(agent) { + agentUpdateHook(agent); + var reportMembers = []; + channels.forEach(function(channel) { + reportMembers.push({ + channel: channel, + membername: agent.name, + interface: util.format('%s/%s', 'SIP', agent.name), + type: 'PAUSE', + enterAt: moment().format("YYYY-MM-DD HH:mm:ss"), + data1: options.body.type || action.data1, + data2: action.data2, + data3: action.data3, + data4: action.data4, + role: agent.role, + internal: agent.internal + }); + }) + return ReportMember + .bulkCreate(reportMembers, { + individualHooks: true, + transaction: options.transaction || null + }); + }); + } + } + + // HANDLE UNPAUSE FUNCTION + function handleUnpause(options, action) { + return function(agent) { + if (!options.body) { + options.body = {} + } + + switch (options.body.channel) { + case 'voice': + + return Promise + .promisify(ami.action)({ + action: 'QueuePause', + interface: util.format('%s/%s', 'SIP', agent.name), + paused: false, + reason: options.body.type + }) + .then(function() { + return agent + .update({ + voicePause: false, + }, { + transaction: options.transaction || null + }); + }) + .then(function(agent) { + agentUpdateHook(agent); + return ReportMember + .findOne({ + where: { + channel: options.body.channel, + membername: agent.name, + interface: util.format('%s/%s', 'SIP', agent.name), + type: 'PAUSE', + exitAt: null + } + }); + }) + .then(handleEntityNotFound({ + message: 'Already Pause Off' + })) + .then(function(reportMember) { + return reportMember + .update({ + exitAt: moment().format("YYYY-MM-DD HH:mm:ss"), + }, { + individualHooks: true, + transaction: options.transaction || null + }); + }) + .then(function() { + return agent; + }); + + case 'chat': + case 'mail': + case 'fax': + case 'sms': + case 'openchannel': + + var data = {}; + data[util.format('%s%s', options.body.channel, 'Pause')] = false; + + return agent + .update(data, { + transaction: options.transaction || null + }) + .then(function(agent) { + agentUpdateHook(agent); + return ReportMember + .findOne({ + where: { + channel: options.body.channel, + membername: agent.name, + interface: util.format('%s/%s', 'SIP', agent.name), + type: 'PAUSE', + exitAt: null + } + }); + }) + .then(handleEntityNotFound({ + message: 'Already Pause Off' + })) + .then(function(reportMember) { + return reportMember + .update({ + exitAt: moment().format("YYYY-MM-DD HH:mm:ss"), + }, { + individualHooks: true, + transaction: options.transaction || null + }); + }) + .then(function() { + return agent; + }); + + default: + var action = Promise.promisify(ami.action); + return action({ + action: 'QueuePause', + interface: util.format('%s/%s', 'SIP', agent.name), + paused: false + }) + .catch(function(err) { + console.error(err); + }) + .then(function() { + return agent + .update({ + voicePause: false, + mailPause: false, + chatPause: false, + faxPause: false, + smsPause: false, + openchannelPause: false + }, { + transaction: options.transaction || null + }); + }) + .then(function(agent) { + agentUpdateHook(agent); + return ReportMember + .findAll({ + where: { + membername: agent.name, + interface: util.format('%s/%s', 'SIP', agent.name), + type: 'PAUSE', + exitAt: null + }, + }); + }) + .then(function(members) { + var promises = []; + + members.forEach(function(member) { + promises.push(member.update({ + exitAt: moment().format("YYYY-MM-DD HH:mm:ss") + })); + }); + + return Promise + .all(promises); + }) + .then(function() { + return agent; + }); + } + } + } + + // HANDLE LOGIN FUNCTION + function handleLogin(options, action) { + return function(agent) { + if (!agent.online) { + return agent + .getVoiceQueues() + .then(function(voiceQueues) { + var actions = []; + voiceQueues.forEach(function(voiceQueue) { + actions.push(ami.action({ + action: 'QueueAdd', + queue: voiceQueue.name, + interface: util.format('%s/%s', 'SIP', agent.name), + membername: agent.name + })); + }); + + if (agent.loginInPause) { + actions.push({ + action: 'QueuePause', + interface: util.format('%s/%s', 'SIP', agent.name), + paused: true, + reason: 'DEFAULT PAUSE' + }); + } + + return Promise.all(actions); + }) + .then(function(astData) { + var reportMembers = []; + channels.forEach(function(channel) { + reportMembers.push({ + channel: channel, + membername: agent.name, + interface: util.format('%s/%s', 'SIP', agent.name), + type: 'LOGIN', + enterAt: moment().format("YYYY-MM-DD HH:mm:ss"), + role: agent.role, + internal: agent.internal + }); + }); + return ReportMember + .bulkCreate(reportMembers, { + individualHooks: true + }); + }) + .then(function() { + return agent.updateAttributes({ + online: true, + lastLoginAt: moment().format("YYYY-MM-DD HH:mm:ss") + }); + }) + .then(function(agent) { + agentUpdateHook(agent); + if (agent.role === 'agent') { + agent.dataValues.changed = _.keyBy(agent.changed()); + prune(ami, agent.dataValues); + } + }); + } + } + } + + // HANDLE LOGOUT FUNCTION + function handleLogout(options, action) { + return function(agent) { + if (agent.online) { + return VoiceQueue + .findAll() + .then(function(voiceQueues) { + var actions = []; + voiceQueues.forEach(function(voiceQueue) { + actions.push(ami.action({ + action: 'QueueRemove', + queue: voiceQueue.name, + interface: util.format('%s/%s', 'SIP', agent.name) + })); + }); + return Promise + .all(actions) + .catch(function(err) { + console.error(err); + }); + }) + .then(function(astData) { + return ReportMember + .findAll({ + where: { + membername: agent.name, + interface: util.format('%s/%s', 'SIP', agent.name), + type: 'LOGIN', + exitAt: null + }, + }); + }) + .then(function(members) { + //single update + var promises = []; + + members.forEach(function(member) { + promises.push(member.update({ + exitAt: moment().format("YYYY-MM-DD HH:mm:ss") + })); + }); + + return Promise + .all(promises); + }) + .then(function() { + return agent.updateAttributes({ + online: false + }); + }) + .then(function(agent) { + agentUpdateHook(agent); + if (agent.role === 'agent') { + agent.dataValues.changed = _.keyBy(agent.changed()); + prune(ami, agent.dataValues); + } + }) + } + } + } + + // HANDLE QUEUEADD FUNCTION + function handleQueueAdd(options, action) { + return function(agent) { + var bulkQueues = []; + switch (options.body.channel) { + case 'voice': + options.body.queues.forEach(function(queue) { + bulkQueues.push(UserHasVoiceQueue + .findOrCreate({ + where: { + UserId: agent.id, + queue: queue + }, + defaults: { + queue: queue, + location: util.format('SIP/%s', agent.name), + membername: agent.name, + UserId: agent.id, + }, + transaction: options.transaction || null, + individualHooks: true + })); + }); + return Promise + .all(bulkQueues) + .then(function() { + var actions = []; + options.body.queues.forEach(function(queue) { + actions.push(ami.action({ + action: 'QueueAdd', + queue: queue, + interface: util.format('%s/%s', 'SIP', agent.name), + membername: agent.name + })); + }); + return Promise + .all(actions); + }) + .catch(function(err) { + console.error(err); + }) + case 'chat': + options.body.queues.forEach(function(queue) { + bulkQueues.push(UserHasChatQueue + .findOrCreate({ + where: { + UserId: agent.id, + ChatQueueId: queue.id + }, + defaults: { + ChatQueueId: queue.id, + queue: queue.name, + UserId: agent.id, + }, + transaction: options.transaction || null + })); + }); + return Promise + .all(bulkQueues) + .catch(function(err) { + console.log(err); + }); + case 'mail': + options.body.queues.forEach(function(queue) { + bulkQueues.push(UserHasMailQueue + .findOrCreate({ + where: { + UserId: agent.id, + MailQueueId: queue.id + }, + defaults: { + MailQueueId: queue.id, + queue: queue.name, + UserId: agent.id, + }, + transaction: options.transaction || null + })); + }); + return Promise + .all(bulkQueues) + .catch(function(err) { + console.log(err); + }); + case 'sms': + options.body.queues.forEach(function(queue) { + bulkQueues.push(UserHasSmsQueue + .findOrCreate({ + where: { + UserId: agent.id, + SmsQueueId: queue.id + }, + defaults: { + SmsQueueId: queue.id, + queue: queue.name, + UserId: agent.id, + }, + transaction: options.transaction || null + })); + }); + return Promise + .all(bulkQueues) + .catch(function(err) { + console.log(err); + }); + case 'openchannel': + options.body.queues.forEach(function(queue) { + bulkQueues.push(UserHasOpenchannelQueue + .findOrCreate({ + where: { + UserId: agent.id, + OpenchannelQueueId: queue.id + }, + defaults: { + OpenchannelQueueId: queue.id, + queue: queue.name, + UserId: agent.id, + }, + transaction: options.transaction || null + })); + }); + return Promise + .all(bulkQueues) + .catch(function(err) { + console.log(err); + }); + case 'fax': + options.body.queues.forEach(function(queue) { + bulkQueues.push(UserHasFaxQueue + .findOrCreate({ + where: { + UserId: agent.id, + FaxQueueId: queue.id + }, + defaults: { + faxQueueId: queue.id, + queue: queue.name, + UserId: agent.id, + }, + transaction: options.transaction || null + })); + }); + return Promise + .all(bulkQueues) + .catch(function(err) { + console.log(err); + }); + default: + } + } + } + + // HANDLE QUEUEREMOVE FUNCTION + function handleQueueRemove(options, action) { + return function(agent) { + switch (options.body.channel) { + case 'voice': + return UserHasVoiceQueue + .destroy({ + where: { + UserId: agent.id, + queue: options.body.queue + }, + transaction: options.transaction || null, + individualHooks: true + }) + .then(function() { + var newAction = Promise.promisify(ami.action); + return newAction({ + action: 'QueueRemove', + queue: options.body.queue, + interface: util.format('%s/%s', 'SIP', agent.name), + }); + }) + .catch(function(err) { + console.error('voice queue association remove error :', err.stack); + }); + case 'chat': + return UserHasChatQueue + .destroy({ + where: { + UserId: agent.id, + ChatQueueId: options.body.queueId + }, + transaction: options.transaction || null, + individualHooks: true + }) + .catch(function(err) { + console.error('chat queue association remove error :', err); + }); + case 'mail': + return UserHasMailQueue + .destroy({ + where: { + UserId: agent.id, + MailQueueId: options.body.queueId + }, + transaction: options.transaction || null, + individualHooks: true + }) + .catch(function(err) { + console.error('mail queue association remove error :', err); + }); + case 'sms': + return UserHasSmsQueue + .destroy({ + where: { + UserId: agent.id, + SmsQueueId: options.body.queueId + }, + transaction: options.transaction || null, + individualHooks: true + }) + .catch(function(err) { + console.error('sms queue association remove error :', err); + }); + case 'openchannel': + return UserHasOpenchannelQueue + .destroy({ + where: { + UserId: agent.id, + OpenchannelQueueId: options.body.queueId + }, + transaction: options.transaction || null, + individualHooks: true + }) + .catch(function(err) { + console.error('openchannel queue association remove error :', err); + }); + case 'fax': + return UserHasFaxQueue + .destroy({ + where: { + UserId: agent.id, + FaxQueueId: options.body.queueId + }, + transaction: options.transaction || null, + individualHooks: true + }) + .catch(function(err) { + console.error('fax queue association remove error :', err); + }); + default: + } + } + } + + // HANDLE ENTITY NOT FOUND + function handleEntityNotFound(error) { + return function(entity) { + if (!entity) { + throw error; + } + return entity; + }; + } + + function onSave(action, options, ami) { + // START ACTION STATEMENT + switch (action.name) { + case 'pause': + // START HANDLE PAUSE + return Agent + .findById(options.body.agent) + .then(handleEntityNotFound({ + message: 'Unknown Agent' + })) + .then(handlePause(options, action)); + // END HANDLE PAUSE + case 'unpause': + // START HANDLE UNPAUSE + return Agent + .findById(options.body.agent) + .then(handleEntityNotFound({ + message: 'Unknown Agent' + })) + .then(handleUnpause(options, action)); + // END HANDLE UNPAUSE + + case 'login': + // START HANDLE LOGIN + return Agent + .findById(action.data1) + .then(handleEntityNotFound({ + message: 'Unknown Agent' + })) + .then(handleLogin(options, action)) + .then(function() { + return Agent + .findById(action.data1) + }) + // END HANDLE LOGING + + case 'logout': + // START HANDLE LOGOUT + return Agent + .findById(action.data1) + .then(handleEntityNotFound({ + message: 'Unknown Agent' + })) + .then(handleUnpause(options, action)) + .then(handleLogout(options, action)); + // END HANDLE LOGOUT + case 'QueueAdd': + // START HANDLE QUEUEADD + return Agent + .findById(options.body.agent) + .then(handleEntityNotFound({ + message: 'Unknown Agent' + })) + .then(handleQueueAdd(options, action)); + // END HANDLE QUEUEADD + case 'QueueRemove': + // START HANDLE QUEUEREMOVE + return Agent + .findById(options.body.agent) + .then(handleEntityNotFound({ + message: 'Unknown Agent' + })) + .then(handleQueueRemove(options, action)); + // END HANDLE QUEUEREMOVE + + default: + throw { + message: 'Unknown Action' + }; + } + // END ACTION STATEMENT + } + + return {}; +} + +function prune(ami, doc) { + var _hasPeer; + return Promise + .promisify(ami.action)({ + action: 'Command', + command: 'sip show peer ' + doc.name, + }) + .then(function(res) { + _hasPeer = res.content.replace(/(?:\r\n|\r|\n)/g, '').replace('Response: FollowsPrivilege: Command', '').replace(/ActionID: .[0-9]*/, '').replace(/ActionID: .[0-9]*/, '').split(' ').pop(); + _hasPeer = _hasPeer === 'found.' ? false : true; + if ((!doc.online && doc.changed.online) || doc.online || _hasPeer) { //logged out || online || peer is registered(i.e. telephone) + return Promise + .promisify(ami.action)({ + action: 'Command', + command: 'sip prune realtime ' + doc.name, + }); + } + }) + .then(function(res) { + // console.log(_hasPeer); + res && console.log('Agent ' + doc.name + ' pruned from realtime cache!'); + if (doc.online || (_hasPeer && doc.role !== 'agent')) { //online || peer is registered(i.e. telephone) + return Promise + .promisify(ami.action)({ + action: 'Command', + command: 'sip show peer ' + doc.name + ' load', + }); + } + }) + .then(function(res) { + res && console.log('Agent ' + doc.name + ' reloaded into realtime cache!'); + }) + .catch(function(err) { + console.log('Prune error:', err); + }); +} + +// SOCKET IO CHILD CONNETION + + + +module.exports = Action; diff --git a/server/config/ami/acw.js b/server/config/ami/acw.js index 4a1f49f..1eda483 100644 --- a/server/config/ami/acw.js +++ b/server/config/ami/acw.js @@ -1 +1,197 @@ -var _0x44bd=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x6C\x6F\x64\x61\x73\x68","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x41\x63\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74","\x41\x43\x57\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x6D\x61\x70","\x6D\x65\x73\x73\x61\x67\x65","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x6E\x61\x6D\x65","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x69\x64","\x72\x65\x6D\x6F\x76\x65","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x41\x67\x65\x6E\x74\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x72\x6F\x6C\x65","\x61\x67\x65\x6E\x74","\x41\x67\x65\x6E\x74\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x41\x67\x65\x6E\x74\x2E\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6F\x70\x74\x69\x6F\x6E\x73","\x41\x63\x74\x69\x6F\x6E\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x65\x76\x74","\x6F\x6E","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x73\x63\x6F\x70\x65","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x71\x75\x65\x75\x65","\x66\x69\x6E\x64","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x76\x6F\x69\x63\x65\x50\x61\x75\x73\x65","\x50\x41\x55\x53\x45\x44\x20\x42\x59\x20\x41\x43\x57","\x75\x6E\x69\x71\x75\x65\x69\x64","\x64\x65\x73\x74\x75\x6E\x69\x71\x75\x65\x69\x64","\x61\x63\x77\x54\x69\x6D\x65\x6F\x75\x74","\x74\x69\x6D\x65\x6F\x75\x74","\x55\x4E\x50\x41\x55\x53\x45\x44\x20\x42\x59\x20\x41\x43\x57","\x75\x6E\x70\x61\x75\x73\x65","\x41\x43\x57","\x63\x72\x65\x61\x74\x65","\x70\x61\x75\x73\x65","\x62\x6F\x64\x79","\x61\x63\x77\x54\x69\x6D\x65","\x61\x73\x53\x65\x63\x6F\x6E\x64\x73","\x61\x63\x77\x41\x74","\x64\x75\x72\x61\x74\x69\x6F\x6E","\x66\x69\x6E\x61\x6C\x6C\x79","\x75\x70\x64\x61\x74\x65","\x69\x6E\x64\x65\x78\x4F\x66","\x6D\x65\x72\x67\x65","\x75\x6E\x73\x68\x69\x66\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x44bd[0];var util=require(_0x44bd[1]);var moment=require(_0x44bd[2]);var _=require(_0x44bd[3]);var VoiceQueue=require(_0x44bd[5])[_0x44bd[4]];var Agent=require(_0x44bd[5])[_0x44bd[6]];var Action=require(_0x44bd[5])[_0x44bd[7]];var ReportAgent=require(_0x44bd[5])[_0x44bd[8]];var _voiceQueues;var _agents;var activeAcw={};function AfterCallWork(){console[_0x44bd[10]](_0x44bd[9]);VoiceQueue[_0x44bd[32]]()[_0x44bd[31]](function(_0xe26cx10){_voiceQueues= _[_0x44bd[13]](_0xe26cx10,_0x44bd[12]);return Agent[_0x44bd[33]](_0x44bd[23])[_0x44bd[32]]()})[_0x44bd[31]](function(_0xe26cxd){_agents= _[_0x44bd[13]](_0xe26cxd,_0x44bd[12]);process[_0x44bd[29]](_0x44bd[14],function(_0xe26cxe){switch(_0xe26cxe[_0x44bd[28]]){case _0x44bd[15]:;case _0x44bd[17]:updateCollection(_voiceQueues,_0xe26cxe,{name:_0xe26cxe[_0x44bd[16]]});break;case _0x44bd[20]:_[_0x44bd[19]](_agents,{id:_0xe26cxe[_0x44bd[18]]});break;case _0x44bd[21]:;case _0x44bd[24]:_0xe26cxe[_0x44bd[22]]=== _0x44bd[23]&& updateCollection(_agents,_0xe26cxe,{id:_0xe26cxe[_0x44bd[18]]});break;case _0x44bd[25]:_0xe26cxe[_0x44bd[22]]=== _0x44bd[23]&& _[_0x44bd[19]](_agents,{id:_0xe26cxe[_0x44bd[18]]});break;case _0x44bd[27]:onSave(_0xe26cxe,_0xe26cxe[_0x44bd[26]]);break;default:}});Action[_0x44bd[30]](function(_0xe26cxe,_0xe26cxf){return onSave(_0xe26cxe,_0xe26cxf)})})[_0x44bd[11]](function(_0xe26cxc){console[_0x44bd[10]](_0xe26cxc)})}AfterCallWork[_0x44bd[35]][_0x44bd[34]]= function(_0xe26cx11){var _0xe26cx12=_[_0x44bd[37]](_voiceQueues,{name:_0xe26cx11[_0x44bd[36]],acw:true});if(_0xe26cx12){var _0xe26cx13=_[_0x44bd[37]](_agents,{name:_0xe26cx11[_0x44bd[38]]});if(_0xe26cx13&& !_0xe26cx13[_0x44bd[39]]){Action[_0x44bd[48]]({name:_0x44bd[49],data1:_0x44bd[47],data2:_0xe26cx12[_0x44bd[43]],data3:_0xe26cx11[_0x44bd[41]],data4:_0xe26cx11[_0x44bd[36]]},{body:{agent:_0xe26cx13[_0x44bd[18]],type:_0x44bd[47]},raw:true})[_0x44bd[31]](function(){console[_0x44bd[10]](_0x44bd[40]);activeAcw[_0xe26cx13[_0x44bd[18]]]= {uniqueid:_0xe26cx11[_0x44bd[41]],destuniqueid:_0xe26cx11[_0x44bd[42]],acwTime:_0xe26cx12[_0x44bd[43]],acwAt:moment(),unpause:false};activeAcw[_0xe26cx13[_0x44bd[18]]][_0x44bd[44]]= setTimeout(function(){console[_0x44bd[10]](_0x44bd[45]);activeAcw[_0xe26cx13[_0x44bd[18]]][_0x44bd[46]]= true;return Action[_0x44bd[48]]({name:_0x44bd[46],data1:_0x44bd[47],data2:_0xe26cx12[_0x44bd[43]],data3:_0xe26cx11[_0x44bd[41]],data4:_0xe26cx11[_0x44bd[36]]},{body:{agent:_0xe26cx13[_0x44bd[18]],type:_0x44bd[47]},raw:true})[_0x44bd[11]](function(_0xe26cxc){console[_0x44bd[10]](_0xe26cxc)})},_0xe26cx12[_0x44bd[43]]* 1000)})[_0x44bd[11]](function(_0xe26cxc){console[_0x44bd[10]](_0xe26cxc)})}}};function onSave(_0xe26cxe,_0xe26cxf){var _0xe26cx15;if((_0xe26cxe[_0x44bd[16]]=== _0x44bd[49]|| _0xe26cxe[_0x44bd[16]]=== _0x44bd[46])&& activeAcw[_0xe26cxf[_0x44bd[50]][_0x44bd[23]]]){if(_0xe26cxe[_0x44bd[16]]=== _0x44bd[46]&& activeAcw[_0xe26cxf[_0x44bd[50]][_0x44bd[23]]][_0x44bd[46]]){_0xe26cx15= activeAcw[_0xe26cxf[_0x44bd[50]][_0x44bd[23]]][_0x44bd[51]]}else {clearTimeout(activeAcw[_0xe26cxf[_0x44bd[50]][_0x44bd[23]]][_0x44bd[44]]);_0xe26cx15= moment[_0x44bd[54]](moment()- activeAcw[_0xe26cxf[_0x44bd[50]][_0x44bd[23]]][_0x44bd[53]])[_0x44bd[52]]()};return ReportAgent[_0x44bd[56]]({agentacw:true,acwtime:_0xe26cx15},{where:{uniqueid:activeAcw[_0xe26cxf[_0x44bd[50]][_0x44bd[23]]][_0x44bd[41]],destuniqueid:activeAcw[_0xe26cxf[_0x44bd[50]][_0x44bd[23]]][_0x44bd[42]]},individualHooks:true,raw:true})[_0x44bd[11]](function(_0xe26cxc){console[_0x44bd[10]](_0xe26cxc)})[_0x44bd[55]](function(){delete activeAcw[_0xe26cxf[_0x44bd[50]][_0x44bd[23]]]})}}function updateCollection(_0xe26cx17,_0xe26cxe,_0xe26cx18){var _0xe26cx19=_[_0x44bd[37]](_0xe26cx17,_0xe26cx18);var _0xe26cx1a=_0xe26cx17[_0x44bd[57]](_0xe26cx19);if(_0xe26cx19){_[_0x44bd[58]](_0xe26cx17[_0xe26cx1a],_0xe26cxe)}else {_0xe26cx17[_0x44bd[59]](_0xe26cxe)}}module[_0x44bd[60]]= AfterCallWork \ No newline at end of file +'use strict'; + +var util = require('util'); +var moment = require('moment'); + +var _ = require('lodash'); +var VoiceQueue = require('../../models').VoiceQueue; +var Agent = require('../../models').User; +var Action = require('../../models').Action; +var ReportAgent = require('../../models').ReportAgent; +var _voiceQueues; +var _agents; +var activeAcw = {}; + +function AfterCallWork(io) { + console.log('ACW Initialization...'); + VoiceQueue + .findAll() + .then(function(voiceQueues) { + _voiceQueues = _.map(voiceQueues, 'dataValues'); + + return Agent + .scope('agent') + .findAll(); + }) + .then(function(agents) { + _agents = _.map(agents, 'dataValues'); + process.on('message', function(doc) { + switch (doc.evt) { + case 'VoiceQueue.afterCreate': + case 'VoiceQueue.afterUpdate': + updateCollection(_voiceQueues, doc, { + name: doc.name + }); + break; + case 'VoiceQueue.afterDestroy': + _.remove(_agents, { + id: doc.id + }); + break; + case 'Agent.afterCreate': + case 'Agent.afterUpdate': + doc.role === 'agent' && updateCollection(_agents, doc, { //it could be telephone + id: doc.id + }); + break; + case 'Agent.afterDestroy': + doc.role === 'agent' && _.remove(_agents, { + id: doc.id + }); + break; + case 'Action.afterCreate': + onSave(doc, doc.options, io); + break; + default: + } + }); + + Action.afterCreate(function(doc, options) { + return onSave(doc, options, io); + }); + }) + .catch(function(err) { + console.log(err); + }); +} + +AfterCallWork.prototype.agentcomplete = function(evt) { + // console.log('Launch ACW function'); + var queueIsAcw = _.find(_voiceQueues, { + name: evt.queue, + acw: true + }); + // console.log('Does queue ' + evt.queue + ' have ACW?'); + if (queueIsAcw) { + // console.log('Yes it is!'); + var agent = _.find(_agents, { + name: evt.membername + }); + // console.log('Found agent ' + evt.membername + '?'); + if (agent && !agent.voicePause) { + // console.log('Yes, found!'); + // console.log('Creating pause by ACW action...'); + Action + .create({ + name: 'pause', + data1: 'ACW', + data2: queueIsAcw.acwTimeout, + data3: evt.uniqueid, + data4: evt.queue + }, { + body: { + agent: agent.id, + type: 'ACW' + }, + raw: true + }) + .then(function() { + console.log('PAUSED BY ACW'); + // console.log('Creating the active acw for agent ', agent.id); + activeAcw[agent.id] = { + uniqueid: evt.uniqueid, + destuniqueid: evt.destuniqueid, + acwTime: queueIsAcw.acwTimeout, + acwAt: moment(), + unpause: false + }; + // console.log('Setting ACW timeout for agent ', agent.id); + activeAcw[agent.id].timeout = setTimeout(function() { + console.log('UNPAUSED BY ACW'); + activeAcw[agent.id].unpause = true; + // console.log('Creating unpause by ACW action'); + return Action + .create({ + name: 'unpause', + data1: 'ACW', + data2: queueIsAcw.acwTimeout, + data3: evt.uniqueid, + data4: evt.queue + }, { + body: { + agent: agent.id, + type: 'ACW' + }, + raw: true + }) + .catch(function(err) { + console.log(err); + }); + }, queueIsAcw.acwTimeout * 1000); + }) + .catch(function(err) { + console.log(err); + }); + } + // console.log('Nope, agent not found!'); + } + // console.log('Nope, the queue has not ACW!'); +} + +function onSave(doc, options, io) { + var acwTime; + // console.log('Someone saved an action:', doc.name); + // console.log('Doc is ', doc.dataValues || doc); + // console.log('Options are ', options); + // console.log('Is pause or unpause and I have an active ACW?'); + if ((doc.name === 'pause' || doc.name === 'unpause') && activeAcw[options.body.agent]) { + // console.log('Yes, I have!'); + if (doc.name === 'unpause' && activeAcw[options.body.agent].unpause) { + // console.log('Action is unpause and I paused by ACW timeout'); + acwTime = activeAcw[options.body.agent].acwTime; + } else { + // console.log('If is pause or unpause, I stop anyway the acw timer'); + clearTimeout(activeAcw[options.body.agent].timeout); + acwTime = moment.duration(moment() - activeAcw[options.body.agent].acwAt).asSeconds(); + } + // console.log('I create the agent report...'); + return ReportAgent + .update({ + agentacw: true, + acwtime: acwTime + }, { + where: { + uniqueid: activeAcw[options.body.agent].uniqueid, + destuniqueid: activeAcw[options.body.agent].destuniqueid + }, + // transaction: options.transaction, + individualHooks: true + }) + .then(function(doc) { + doc.dataValues.evt = 'ReportAgent.afterUpdate'; + doc.dataValues.changed = _.keyBy(doc.changed()); + process.send(doc.dataValues); + io.to(util.format('agent:%s', doc.membername)).emit('report_agent:update', doc); + }) + .catch(function(err) { + console.log(err); + }) + .finally(function() { + // console.log('At the end I delete the active ACW'); + delete activeAcw[options.body.agent]; + }); + } + // console.log('I don\' t have an active acw for the agent or I don\' t care for this type of action.'); +} + +function updateCollection(collection, doc, condition) { + var oldItem = _.find(collection, condition); + var index = collection.indexOf(oldItem); + if (oldItem) { + _.merge(collection[index], doc); + } else { + collection.unshift(doc); + } +} + +module.exports = AfterCallWork; diff --git a/server/config/ami/agent.js b/server/config/ami/agent.js index 426ad44..1326ba8 100644 --- a/server/config/ami/agent.js +++ b/server/config/ami/agent.js @@ -1 +1,126 @@ -var _0xee3e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x74\x69\x6C","\x41\x67\x65\x6E\x74\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x54\x69\x6D\x65\x31\x2D\x32","\x69\x64","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x4C\x54\x53","\x66\x6F\x72\x6D\x61\x74","\x65\x76\x74","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x6E\x64","\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x61\x67\x65\x6E\x74\x3A\x25\x73","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x74\x6F","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x6B\x65\x79\x42\x79","\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x3A\x75\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x63\x61\x6C\x6C\x65\x64","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x6C\x61\x73\x74\x65\x76\x65\x6E\x74","\x61\x67\x65\x6E\x74\x63\x61\x6C\x6C\x65\x64\x41\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x63\x6F\x6E\x6E\x65\x63\x74","\x61\x67\x65\x6E\x74\x63\x6F\x6E\x6E\x65\x63\x74\x41\x74","\x61\x6E\x73\x77\x65\x72\x65\x64\x5F\x65\x6C\x73\x65\x77\x68\x65\x72\x65","\x64\x65\x73\x74\x75\x6E\x69\x71\x75\x65\x69\x64","\x75\x6E\x69\x71\x75\x65\x69\x64","\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x64\x75\x6D\x70","\x61\x67\x65\x6E\x74\x64\x75\x6D\x70","\x61\x67\x65\x6E\x74\x64\x75\x6D\x70\x41\x74","\x72\x69\x6E\x67\x6E\x6F\x61\x6E\x73\x77\x65\x72","\x72\x65\x6A\x65\x63\x74\x65\x64","\x61\x67\x65\x6E\x74\x72\x69\x6E\x67\x6E\x6F\x61\x6E\x73\x77\x65\x72","\x61\x67\x65\x6E\x74\x72\x69\x6E\x67\x6E\x6F\x61\x6E\x73\x77\x65\x72\x41\x74","\x72\x65\x61\x73\x6F\x6E","\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E","\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64","\x54\x69\x6D\x65\x30","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x61\x67\x65\x6E\x74\x20","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x54\x69\x6D\x65\x31","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x61\x67\x65\x6E\x74\x20\x63\x72\x65\x61\x74\x65","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65","\x5B\x61\x67\x65\x6E\x74\x5D\x20\x61\x67\x65\x6E\x74\x20\x65\x72\x72\x6F\x72\x3A\x20","\x5B\x61\x67\x65\x6E\x74\x5D\x20\x61\x67\x65\x6E\x74\x20\x75\x70\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xee3e[0];const _=require(_0xee3e[1]);const moment=require(_0xee3e[2]);const ReportAgent=require(_0xee3e[4])[_0xee3e[3]];const util=require(_0xee3e[5]);function Agent(_0xbbcex6){console[_0xee3e[7]](_0xee3e[6]);ReportAgent[_0xee3e[22]](function(_0xbbcex7,_0xbbcex8){console[_0xee3e[7]](_0xee3e[8],_0xbbcex7[_0xee3e[9]],_0xbbcex7[_0xee3e[10]],moment()[_0xee3e[12]](_0xee3e[11]));_0xbbcex7[_0xee3e[14]][_0xee3e[13]]= _0xee3e[15];process[_0xee3e[16]](_0xbbcex7[_0xee3e[14]]);_0xbbcex6[_0xee3e[21]](util[_0xee3e[12]](_0xee3e[19],_0xbbcex7[_0xee3e[20]]))[_0xee3e[18]](_0xee3e[17],_0xbbcex7)});ReportAgent[_0xee3e[27]](function(_0xbbcex7,_0xbbcex8){_0xbbcex7[_0xee3e[14]][_0xee3e[13]]= _0xee3e[23];_0xbbcex7[_0xee3e[14]][_0xee3e[24]]= _[_0xee3e[25]](_0xbbcex7[_0xee3e[24]]());process[_0xee3e[16]](_0xbbcex7[_0xee3e[14]]);_0xbbcex6[_0xee3e[21]](util[_0xee3e[12]](_0xee3e[19],_0xbbcex7[_0xee3e[20]]))[_0xee3e[18]](_0xee3e[26],_0xbbcex7)})}Agent[_0xee3e[29]][_0xee3e[28]]= function(_0xbbcex9){_0xbbcex9[_0xee3e[30]]= _0xee3e[28];_0xbbcex9[_0xee3e[31]]= moment()[_0xee3e[12]](_0xee3e[32]);return createAgent(_0xbbcex9)};Agent[_0xee3e[29]][_0xee3e[33]]= function(_0xbbcex9){_0xbbcex9[_0xee3e[30]]= _0xee3e[33];_0xbbcex9[_0xee3e[34]]= moment()[_0xee3e[12]](_0xee3e[32]);updateAgents(_0xbbcex9);updateAgents({agentringnoanswer:true,agentringnoanswerAt:moment()[_0xee3e[12]](_0xee3e[32]),reason:_0xee3e[35],lastevent:_0xee3e[35],answeredelsewheredestinationuniqueid:_0xbbcex9[_0xee3e[36]],answeredelsewheremembername:_0xbbcex9[_0xee3e[20]]},{uniqueid:_0xbbcex9[_0xee3e[37]],destuniqueid:{$ne:_0xbbcex9[_0xee3e[36]]},reason:null})};Agent[_0xee3e[29]][_0xee3e[38]]= function(_0xbbcex9){_0xbbcex9[_0xee3e[30]]= _0xee3e[38];_0xbbcex9[_0xee3e[39]]= true;_0xbbcex9[_0xee3e[40]]= moment()[_0xee3e[12]](_0xee3e[32]);return updateAgents(_0xbbcex9)};Agent[_0xee3e[29]][_0xee3e[41]]= function(_0xbbcex9){_0xbbcex9[_0xee3e[30]]= _0xee3e[41];_0xbbcex9[_0xee3e[42]]= true;_0xbbcex9[_0xee3e[43]]= moment()[_0xee3e[12]](_0xee3e[32]);return updateAgents(_0xbbcex9)};Agent[_0xee3e[29]][_0xee3e[44]]= function(_0xbbcex9){_0xbbcex9[_0xee3e[30]]= _0xee3e[45];_0xbbcex9[_0xee3e[46]]= true;_0xbbcex9[_0xee3e[47]]= moment()[_0xee3e[12]](_0xee3e[32]);_0xbbcex9[_0xee3e[48]]= _0xee3e[45];return updateAgents(_0xbbcex9)};Agent[_0xee3e[29]][_0xee3e[49]]= function(_0xbbcex9){_0xbbcex9[_0xee3e[30]]= _0xee3e[50];_0xbbcex9[_0xee3e[46]]= true;_0xbbcex9[_0xee3e[47]]= moment()[_0xee3e[12]](_0xee3e[32]);_0xbbcex9[_0xee3e[48]]= _0xee3e[50];return updateAgents(_0xbbcex9,{uniqueid:_0xbbcex9[_0xee3e[37]],reason:null})};function createAgent(_0xbbcex9){console[_0xee3e[7]](_0xee3e[51],_0xbbcex9[_0xee3e[31]],moment()[_0xee3e[12]](_0xee3e[11]));return ReportAgent[_0xee3e[58]](_0xbbcex9,{raw:true})[_0xee3e[57]](function(_0xbbcexc){console[_0xee3e[7]](_0xee3e[55],_0xbbcexc[_0xee3e[9]],_0xbbcex9[_0xee3e[31]],_0xbbcexc[_0xee3e[10]],moment()[_0xee3e[12]](_0xee3e[11]));console[_0xee3e[7]](_0xee3e[56])})[_0xee3e[54]](function(_0xbbcexb){console[_0xee3e[53]](_0xee3e[52]+ _0xbbcexb)})}function updateAgents(_0xbbcex9,_0xbbcexe){return ReportAgent[_0xee3e[61]](_0xbbcex9,{where:_0xbbcexe|| {uniqueid:_0xbbcex9[_0xee3e[37]],destuniqueid:_0xbbcex9[_0xee3e[36]]},individualHooks:true})[_0xee3e[57]](function(_0xbbcexc){console[_0xee3e[7]](_0xee3e[60])})[_0xee3e[54]](function(_0xbbcexb){console[_0xee3e[53]](_0xee3e[59]+ _0xbbcexb)})}module[_0xee3e[62]]= Agent \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const moment = require('moment'); +const ReportAgent = require('../../models').ReportAgent; +const util = require('util'); + +function Agent(io) { + console.log('Agent Initialization...'); + // ReportAgent.afterCreate(function(doc, options) { + // console.log('Time1-2', doc.id, doc.createdAt, moment().format('LTS')); + // doc.dataValues.evt = 'ReportAgent.afterCreate'; + // process.send(doc.dataValues); + // io.to(util.format('agent:%s', doc.membername)).emit('report_agent:save', doc); + // }); + + // ReportAgent.afterUpdate(function(doc, options) { //called in acw + // doc.dataValues.evt = 'ReportAgent.afterUpdate'; + // doc.dataValues.changed = _.keyBy(doc.changed()); + // process.send(doc.dataValues); + // io.to(util.format('agent:%s', doc.membername)).emit('report_agent:update', doc); + // }); +} + +Agent.prototype.called = function(evt, io) { + evt.lastevent = 'called'; + evt.agentcalledAt = moment().format("YYYY-MM-DD HH:mm:ss"); + return createAgent(evt, io); +} + +Agent.prototype.connect = function(evt, io) { + evt.lastevent = 'connect'; + evt.agentconnectAt = moment().format("YYYY-MM-DD HH:mm:ss"); + updateAgents(evt, null, io); + updateAgents({ + agentringnoanswer: true, + agentringnoanswerAt: moment().format("YYYY-MM-DD HH:mm:ss"), + reason: 'answered_elsewhere', + lastevent: 'answered_elsewhere', + answeredelsewheredestinationuniqueid: evt.destuniqueid, + answeredelsewheremembername: evt.membername + }, { + uniqueid: evt.uniqueid, + destuniqueid: { + $ne: evt.destuniqueid + }, + reason: null + }, io); +} + +Agent.prototype.complete = function(evt, io) { + evt.lastevent = 'complete'; + evt.agentcomplete = true; + evt.agentcompleteAt = moment().format("YYYY-MM-DD HH:mm:ss"); + return updateAgents(evt, null, io); +} + +Agent.prototype.dump = function(evt, io) { + evt.lastevent = 'dump'; + + evt.agentdump = true; + evt.agentdumpAt = moment().format("YYYY-MM-DD HH:mm:ss"); + return updateAgents(evt, null, io); +} + +Agent.prototype.ringnoanswer = function(evt, io) { + evt.lastevent = 'rejected'; + evt.agentringnoanswer = true; + evt.agentringnoanswerAt = moment().format("YYYY-MM-DD HH:mm:ss"); + evt.reason = 'rejected'; + return updateAgents(evt, null, io); +} + +Agent.prototype.callerabandon = function(evt, io) { + evt.lastevent = 'abandoned'; + evt.agentringnoanswer = true; + evt.agentringnoanswerAt = moment().format("YYYY-MM-DD HH:mm:ss"); + evt.reason = 'abandoned'; + return updateAgents(evt, { + uniqueid: evt.uniqueid, + reason: null + }, io); +} + +function createAgent(evt, io) { + console.log('Time0', evt.agentcalledAt, moment().format('LTS')); + return ReportAgent + .create(evt, { + raw: true + }) + .then(function(data) { + console.log('Time1', data.id, evt.agentcalledAt, data.createdAt, moment().format('LTS')); + data.dataValues.evt = 'ReportAgent.afterCreate'; + process.send(data.dataValues); + io.to(util.format('agent:%s', data.membername)).emit('report_agent:save', data); + console.log('[report] agent create'); + }) + .catch(function(err) { + console.error('[report] agent ' + err); + }); +} + +function updateAgents(evt, where, io) { + return ReportAgent + .update(evt, { + where: where || { + uniqueid: evt.uniqueid, + destuniqueid: evt.destuniqueid + }, + individualHooks: true + }) + .then(function(res) { + _.forEach(res[1], function(data) { + data.dataValues.evt = 'ReportAgent.afterUpdate'; + data.dataValues.changed = _.keyBy(data.changed()); + process.send(data.dataValues); + io.to(util.format('agent:%s', data.membername)).emit('report_agent:update', data); + console.log('[agent] agent update'); + }); + }) + .catch(function(err) { + console.error('[agent] agent error: ' + err); + }); +} + +module.exports = Agent; diff --git a/server/config/ami/ami.js b/server/config/ami/ami.js index 7223c80..80039f5 100644 --- a/server/config/ami/ami.js +++ b/server/config/ami/ami.js @@ -1 +1,369 @@ -var _0x4d12=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x41\x6D\x69\x20\x70\x72\x6F\x63\x65\x73\x73\x20\x73\x74\x61\x72\x74\x65\x64\x2E\x2E","\x6C\x6F\x67","\x2E\x2F\x61\x67\x65\x6E\x74","\x2E\x2F\x61\x63\x74\x69\x6F\x6E","\x2E\x2F\x63\x61\x6C\x6C","\x2E\x2F\x6D\x65\x6D\x62\x65\x72","\x2E\x2F\x71\x75\x65\x75\x65\x5F\x63\x61\x6C\x6C\x65\x72","\x2E\x2F\x71\x75\x65\x75\x65\x5F\x6D\x65\x6D\x62\x65\x72","\x2E\x2F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2E\x2F\x74\x72\x75\x6E\x6B","\x2E\x2F\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74","\x2E\x2F\x61\x63\x77","\x2E\x2F\x75\x73\x65\x72","\x2E\x2F\x74\x72\x61\x6E\x73\x66\x65\x72","\x2E\x2F\x6E\x65\x74\x77\x6F\x72\x6B","\x2E\x2F\x66\x61\x78","\x2E\x2F\x64\x69\x61\x6C","\x2E\x2F\x63\x6C\x65\x61\x6E\x65\x72","\x62\x6C\x75\x65\x62\x69\x72\x64","\x75\x74\x69\x6C","\x72\x65\x64\x69\x73","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x63\x6C\x6F\x6E\x65","\x76\x61\x72\x69\x61\x62\x6C\x65","\x6B\x65\x79\x73","\x70\x6F\x72\x74","\x61\x73\x74\x65\x72\x69\x73\x6B","\x68\x6F\x73\x74","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x61\x73\x74\x65\x72\x69\x73\x6B\x2D\x6D\x61\x6E\x61\x67\x65\x72","\x6B\x65\x65\x70\x43\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x72\x65\x64\x69\x73\x50\x77\x64","\x69\x70","\x63\x72\x65\x61\x74\x65\x43\x6C\x69\x65\x6E\x74","\x73\x6F\x63\x6B\x65\x74\x2E\x69\x6F\x2D\x65\x6D\x69\x74\x74\x65\x72","\x6D\x65\x73\x73\x61\x67\x65","\x63\x6F\x6E\x73\x6F\x6C\x65\x3A\x65\x72\x72\x6F\x72","\x65\x6D\x69\x74","\x73\x6F\x63\x6B\x65\x74","\x74\x6F","\x63\x61\x74\x63\x68","\x63\x6F\x6E\x73\x6F\x6C\x65\x3A\x72\x65\x73\x75\x6C\x74","\x74\x68\x65\x6E","\x43\x6F\x6D\x6D\x61\x6E\x64","\x63\x6F\x6D\x6D\x61\x6E\x64","\x61\x63\x74\x69\x6F\x6E","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x63\x6F\x6E\x73\x6F\x6C\x65","\x65\x76\x74","\x6F\x6E","\x63\x6F\x6E\x6E\x65\x63\x74","\x5B\x25\x73\x3A\x25\x73\x5D\x20\x41\x4D\x49\x20\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x6F\x70\x74\x69\x6F\x6E\x73","\x69\x6E\x66\x6F","\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x41\x74","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74","\x5B\x25\x73\x3A\x25\x73\x5D\x20\x41\x4D\x49\x20\x44\x49\x53\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x63\x6C\x6F\x73\x65","\x5B\x25\x73\x3A\x25\x73\x5D\x20\x41\x4D\x49\x20\x43\x4C\x4F\x53\x45\x3A\x20\x25\x73","\x65\x72\x72\x6F\x72","\x5B\x25\x73\x3A\x25\x73\x5D\x20\x41\x4D\x49\x20\x45\x52\x52\x4F\x52\x3A\x20\x25\x73","\x64\x65\x76\x69\x63\x65\x73\x74\x61\x74\x65\x63\x68\x61\x6E\x67\x65","\x53\x49\x50\x2F","\x69\x6E\x64\x65\x78\x4F\x66","\x64\x65\x76\x69\x63\x65","\x73\x74\x61\x74\x65\x55\x70\x64\x61\x74\x65","\x61\x67\x65\x6E\x74\x63\x61\x6C\x6C\x65\x64","\x63\x61\x6C\x6C\x65\x64","\x71\x75\x65\x75\x65\x53\x74\x61\x74\x75\x73\x55\x70\x64\x61\x74\x65","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x68\x6F\x6C\x64\x74\x69\x6D\x65","\x75\x70\x64\x61\x74\x65\x51\x75\x65\x75\x65","\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x69\x6E\x62\x6F\x75\x6E\x64\x43\x6F\x6D\x70\x6C\x65\x74\x65","\x61\x67\x65\x6E\x74\x63\x6F\x6E\x6E\x65\x63\x74","\x6C\x65\x61\x76\x65","\x69\x6E\x62\x6F\x75\x6E\x64\x54\x61\x6C\x6B\x69\x6E\x67","\x61\x67\x65\x6E\x74\x64\x75\x6D\x70","\x64\x75\x6D\x70","\x61\x67\x65\x6E\x74\x72\x69\x6E\x67\x6E\x6F\x61\x6E\x73\x77\x65\x72","\x72\x69\x6E\x67\x6E\x6F\x61\x6E\x73\x77\x65\x72","\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x61\x64\x64\x65\x64","\x61\x64\x64\x65\x64","\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x70\x61\x75\x73\x65","\x70\x61\x75\x73\x65","\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x70\x65\x6E\x61\x6C\x74\x79","\x70\x65\x6E\x61\x6C\x74\x79","\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x72\x65\x6D\x6F\x76\x65\x64","\x72\x65\x6D\x6F\x76\x65\x64","\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x72\x69\x6E\x67\x69\x6E\x75\x73\x65","\x72\x69\x6E\x67\x69\x6E\x75\x73\x65","\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x73\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E","\x6A\x6F\x69\x6E","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E","\x61\x62\x61\x6E\x64\x6F\x6E","\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65","\x63\x64\x72","\x61\x64\x64","\x75\x70\x64\x61\x74\x65\x54\x79\x70\x65","\x68\x61\x6E\x67\x75\x70","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x43\x6F\x6D\x70\x6C\x65\x74\x65","\x62\x6C\x69\x6E\x64\x74\x72\x61\x6E\x73\x66\x65\x72","\x74\x79\x70\x65","\x62\x6C\x69\x6E\x64","\x63\x72\x65\x61\x74\x65\x42\x6C\x69\x6E\x64","\x61\x74\x74\x65\x6E\x64\x65\x64\x74\x72\x61\x6E\x73\x66\x65\x72","\x61\x74\x74\x65\x6E\x64\x65\x64","\x63\x72\x65\x61\x74\x65\x41\x74\x74\x65\x6E\x64\x65\x64","\x76\x61\x72\x73\x65\x74","\x65\x76\x65\x6E\x74","\x73\x65\x6E\x64","\x63\x72\x65\x61\x74\x65","\x6D\x69\x78\x6D\x6F\x6E\x69\x74\x6F\x72\x5F\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x65\x78\x69\x74","\x71\x75\x65\x75\x65\x73\x74\x61\x74\x75\x73","\x56\x61\x72\x53\x65\x74\x20\x66\x61\x78\x65\x72\x72\x6F\x72","\x76\x61\x6C\x75\x65","\x75\x70\x64\x61\x74\x65\x45\x72\x72\x6F\x72","\x66\x61\x78\x65\x72\x72\x6F\x72","\x56\x61\x72\x53\x65\x74\x20\x66\x61\x78\x73\x74\x61\x74\x75\x73\x73\x74\x72\x69\x6E\x67","\x66\x61\x78\x73\x74\x61\x74\x75\x73\x73\x74\x72\x69\x6E\x67","\x56\x61\x72\x53\x65\x74\x20\x66\x61\x78\x70\x61\x67\x65\x73","\x66\x61\x78\x70\x61\x67\x65\x73","\x75\x6E\x69\x71\x75\x65\x69\x64","\x62\x65\x66\x6F\x72\x65\x44\x69\x61\x6C","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x72\x6F\x75\x74\x65\x69\x64","\x72\x65\x67\x69\x73\x74\x72\x79","\x64\x65\x66\x61\x75\x6C\x74\x75\x73\x65\x72","\x73\x74\x61\x74\x75\x73\x55\x70\x64\x61\x74\x65","\x70\x65\x65\x72\x73\x74\x61\x74\x75\x73","\x70\x65\x65\x72\x73\x74\x61\x74\x75\x73\x55\x70\x64\x61\x74\x65","\x72\x65\x63\x65\x69\x76\x65\x66\x61\x78","\x66\x61\x78\x73\x74\x61\x74\x75\x73","\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E","\x46\x61\x78\x53\x74\x61\x74\x75\x73\x20\x45\x76\x65\x6E\x74","\x75\x70\x64\x61\x74\x65\x4D\x65\x73\x73\x61\x67\x65","\x64\x69\x61\x6C\x62\x65\x67\x69\x6E","\x62\x65\x67\x69\x6E","\x64\x69\x61\x6C\x65\x6E\x64","\x65\x6E\x64","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x54\x61\x6C\x6B\x69\x6E\x67","\x73\x65\x6E\x64\x66\x61\x78","\x53\x65\x6E\x64\x46\x41\x58\x20\x45\x76\x65\x6E\x74","\x75\x70\x64\x61\x74\x65\x53\x65\x6E\x64"];_0x4d12[0];console[_0x4d12[2]](_0x4d12[1]);var Agent=require(_0x4d12[3]);var Action=require(_0x4d12[4]);var Call=require(_0x4d12[5]);var Member=require(_0x4d12[6]);var QueueCaller=require(_0x4d12[7]);var QueueMember=require(_0x4d12[8]);var Recording=require(_0x4d12[9]);var Trunk=require(_0x4d12[10]);var Context=require(_0x4d12[11]);var AfterCallWork=require(_0x4d12[12]);var User=require(_0x4d12[13]);var Transfer=require(_0x4d12[14]);var Network=require(_0x4d12[15]);var Fax=require(_0x4d12[16]);var Dial=require(_0x4d12[17]);var Cleaner=require(_0x4d12[18]);const Promise=require(_0x4d12[19]);const util=require(_0x4d12[20]);const redis=require(_0x4d12[21]);var _=require(_0x4d12[22]);var config=require(_0x4d12[23]);var trunkStates={};function getVariable(_0x44b0x18){var _0x44b0x19=_[_0x4d12[24]](_0x44b0x18);var _0x44b0x1a=_[_0x4d12[26]](_0x44b0x19[_0x4d12[25]]);_0x44b0x19[_0x4d12[25]]= _0x44b0x1a[0];return _0x44b0x19}var ami=require(_0x4d12[32])(config[_0x4d12[28]][_0x4d12[27]],config[_0x4d12[28]][_0x4d12[29]],config[_0x4d12[28]][_0x4d12[30]],config[_0x4d12[28]][_0x4d12[31]],true);ami[_0x4d12[33]]();var redisConf;if(config[_0x4d12[34]]){redisConf= {password:config[_0x4d12[34]]}};var redisClient=redis[_0x4d12[36]](6379,config[_0x4d12[35]],redisConf);var io=require(_0x4d12[37])(redisClient);var agent= new Agent(io);var call= new Call();var member= new Member();var queuemember= new QueueMember(io);var queuecaller= new QueueCaller(io);var recording= new Recording();var trunk= new Trunk(ami);var context= new Context(ami);var action= new Action(ami,io);var acw= new AfterCallWork();var user= new User(ami,io);var tranfer= new Transfer();var network= new Network(ami);var fax= new Fax(ami,io);var dial= new Dial(io);var cleaner= new Cleaner(ami);process[_0x4d12[52]](_0x4d12[38],function(_0x44b0x2f){switch(_0x44b0x2f[_0x4d12[51]]){case _0x4d12[50]:return Promise[_0x4d12[49]](ami[_0x4d12[48]])({action:_0x4d12[46],command:_0x44b0x2f[_0x4d12[47]]})[_0x4d12[45]](function(_0x44b0x31){io[_0x4d12[42]](_0x44b0x2f[_0x4d12[41]])[_0x4d12[40]](_0x4d12[44],_0x44b0x31)})[_0x4d12[43]](function(_0x44b0x30){io[_0x4d12[42]](_0x44b0x2f[_0x4d12[41]])[_0x4d12[40]](_0x4d12[39],_0x44b0x30)});default:}});ami[_0x4d12[52]](_0x4d12[53],function(){console[_0x4d12[56]](_0x4d12[54],ami[_0x4d12[55]][_0x4d12[29]],ami[_0x4d12[55]][_0x4d12[27]]);ami[_0x4d12[55]][_0x4d12[57]]= new Date()});ami[_0x4d12[52]](_0x4d12[58],function(){console[_0x4d12[56]](_0x4d12[59],ami[_0x4d12[55]][_0x4d12[29]],ami[_0x4d12[55]][_0x4d12[27]])});ami[_0x4d12[52]](_0x4d12[60],function(_0x44b0x32){console[_0x4d12[2]](_0x4d12[61],ami[_0x4d12[55]][_0x4d12[29]],ami[_0x4d12[55]][_0x4d12[27]],_0x44b0x32)});ami[_0x4d12[52]](_0x4d12[62],function(_0x44b0x30){console[_0x4d12[2]](_0x4d12[63],ami[_0x4d12[55]][_0x4d12[29]],ami[_0x4d12[55]][_0x4d12[27]],_0x44b0x30)});ami[_0x4d12[52]](_0x4d12[64],function(_0x44b0x33){if(_0x44b0x33[_0x4d12[67]][_0x4d12[66]](_0x4d12[65])=== 0){user[_0x4d12[68]](_0x44b0x33)}});ami[_0x4d12[52]](_0x4d12[69],function(_0x44b0x33){agent[_0x4d12[70]](_0x44b0x33);user[_0x4d12[71]](_0x4d12[70],_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[72],function(_0x44b0x33){delete _0x44b0x33[_0x4d12[73]];recording[_0x4d12[74]](_0x44b0x33);acw[_0x4d12[72]](_0x44b0x33);agent[_0x4d12[75]](_0x44b0x33);member[_0x4d12[76]](_0x44b0x33);queuecaller[_0x4d12[75]](_0x44b0x33);user[_0x4d12[71]](_0x4d12[75],_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[77],function(_0x44b0x33){queuecaller[_0x4d12[78]](_0x44b0x33);agent[_0x4d12[53]](_0x44b0x33);member[_0x4d12[79]](_0x44b0x33);user[_0x4d12[71]](_0x4d12[53],_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[80],function(_0x44b0x33){agent[_0x4d12[81]](_0x44b0x33);user[_0x4d12[71]](_0x4d12[75],_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[82],function(_0x44b0x33){agent[_0x4d12[83]](_0x44b0x33);user[_0x4d12[71]](_0x4d12[75],_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[84],function(_0x44b0x33){queuemember[_0x4d12[85]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[86],function(_0x44b0x33){queuemember[_0x4d12[87]](_0x44b0x33);user[_0x4d12[87]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[88],function(_0x44b0x33){queuemember[_0x4d12[89]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[90],function(_0x44b0x33){queuemember[_0x4d12[91]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[92],function(_0x44b0x33){queuemember[_0x4d12[93]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[94],function(_0x44b0x33){queuemember[_0x4d12[95]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[96],function(_0x44b0x33){queuecaller[_0x4d12[97]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[98],function(_0x44b0x33){queuecaller[_0x4d12[99]](_0x44b0x33);user[_0x4d12[71]](_0x4d12[75],_0x44b0x33);agent[_0x4d12[100]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[101],function(_0x44b0x33){});ami[_0x4d12[52]](_0x4d12[102],function(_0x44b0x33){call[_0x4d12[103]](_0x44b0x33);recording[_0x4d12[104]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[105],function(_0x44b0x33){dial[_0x4d12[105]](_0x44b0x33);member[_0x4d12[106]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[107],function(_0x44b0x33){_0x44b0x33[_0x4d12[108]]= _0x4d12[109];tranfer[_0x4d12[110]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[111],function(_0x44b0x33){_0x44b0x33[_0x4d12[108]]= _0x4d12[112];tranfer[_0x4d12[113]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[114],function(_0x44b0x33){_0x44b0x33[_0x4d12[51]]= _0x44b0x33[_0x4d12[115]];process[_0x4d12[116]](_0x44b0x33);var _0x44b0x18=getVariable(_0x44b0x33);switch(_0x44b0x18[_0x4d12[25]]){case _0x4d12[118]:recording[_0x4d12[117]](_0x44b0x18);break;case _0x4d12[120]:queuecaller[_0x4d12[119]](_0x44b0x18);break;case _0x4d12[124]:console[_0x4d12[2]](_0x4d12[121],_0x44b0x33);if(_0x44b0x33[_0x4d12[122]]){fax[_0x4d12[123]](_0x44b0x33)};break;case _0x4d12[126]:console[_0x4d12[2]](_0x4d12[125],_0x44b0x33);break;case _0x4d12[128]:console[_0x4d12[2]](_0x4d12[127],_0x44b0x33);break;case _0x4d12[131]:if(_0x44b0x33[_0x4d12[122]]){dial[_0x4d12[130]]({uniqueid:_0x44b0x33[_0x4d12[129]],routeId:_0x44b0x33[_0x4d12[122]]})};break;default:break}});ami[_0x4d12[52]](_0x4d12[132],function(_0x44b0x33){if(trunkStates[_0x44b0x33[_0x4d12[133]]]){if(trunkStates[_0x44b0x33[_0x4d12[133]]]!== _0x44b0x33[_0x4d12[95]]){trunk[_0x4d12[134]](_0x44b0x33)}}else {trunkStates[_0x44b0x33[_0x4d12[133]]]= _0x44b0x33[_0x4d12[95]];trunk[_0x4d12[134]](_0x44b0x33)}});ami[_0x4d12[52]](_0x4d12[135],function(_0x44b0x33){trunk[_0x4d12[136]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[137],function(_0x44b0x33){fax[_0x4d12[137]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[138],function(_0x44b0x33){if(_0x44b0x33[_0x4d12[139]]=== _0x4d12[116]){console[_0x4d12[2]](_0x4d12[140],_0x44b0x33);fax[_0x4d12[141]](_0x44b0x33)}});ami[_0x4d12[52]](_0x4d12[142],function(_0x44b0x33){dial[_0x4d12[143]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[144],function(_0x44b0x33){dial[_0x4d12[145]](_0x44b0x33);member[_0x4d12[146]](_0x44b0x33)});ami[_0x4d12[52]](_0x4d12[147],function(_0x44b0x33){console[_0x4d12[2]](_0x4d12[148],_0x44b0x33);fax[_0x4d12[149]](_0x44b0x33)}) \ No newline at end of file +'use strict'; + +console.log('Ami process started..'); + +var Agent = require('./agent'); +var Action = require('./action'); +var Call = require('./call'); +var Member = require('./member'); +var QueueCaller = require('./queue_caller'); +var QueueMember = require('./queue_member'); +var Recording = require('./recording'); +var Trunk = require('./trunk'); +var Context = require('./voice_context'); +var AfterCallWork = require('./acw'); +var User = require('./user'); +var Transfer = require('./transfer'); +var Network = require('./network'); +var Fax = require('./fax'); +var Dial = require('./dial'); +var Cleaner = require('./cleaner'); +const Promise = require('bluebird'); +const util = require('util'); +const redis = require('redis'); + +var _ = require('lodash'); +var config = require('../environment'); +var trunkStates = {}; + +function getVariable(event) { + var _event = _.clone(event) + var keys = _.keys(_event.variable); + _event.variable = keys[0]; + return _event; +} + +var ami = require('asterisk-manager')(config.asterisk.port, + config.asterisk.host, + config.asterisk.username, + config.asterisk.password, + true); + +ami.keepConnected(); + +var redisConf; +if (config.redisPwd) { + redisConf = { + password: config.redisPwd + } +} +var redisClient = redis.createClient(6379, config.ip, redisConf); +var io = require('socket.io-emitter')(redisClient); + +var agent = new Agent(io); +var call = new Call(); +var member = new Member(); +var queuemember = new QueueMember(io); +var queuecaller = new QueueCaller(io); +var recording = new Recording(); +var trunk = new Trunk(ami); +var context = new Context(ami); +var action = new Action(ami, io); +var acw = new AfterCallWork(); +var user = new User(ami, io); +var tranfer = new Transfer(); +var network = new Network(ami); +var fax = new Fax(ami, io); +var dial = new Dial(io); +var cleaner = new Cleaner(ami); + + +process.on('message', function(doc) { + switch (doc.evt) { + case 'console': + return Promise + .promisify(ami.action)({ + action: 'Command', + command: doc.command, + }) + .then(function(result) { + io.to(doc.socket).emit('console:result', result); + }) + .catch(function(err) { + io.to(doc.socket).emit('console:error', err); + }); + default: + } +}); + +// Asterisk Status Connect + +// Raised when asterisk is connected +ami.on('connect', function() { + console.info('[%s:%s] AMI CONNECTED', ami.options.host, ami.options.port); + ami.options.connectedAt = new Date(); + // Call onConnect. +}); + +// Raised when asterisk is disconnected +ami.on('disconnect', function() { + // Call onDisconnect. + console.info('[%s:%s] AMI DISCONNECTED', ami.options.host, ami.options.port); +}); + +// Raised when asterisk is closed +ami.on('close', function(flag) { + console.log('[%s:%s] AMI CLOSE: %s', ami.options.host, ami.options.port, flag); +}); + +// Raised when asterisk has an error +ami.on('error', function(err) { + console.log('[%s:%s] AMI ERROR: %s', ami.options.host, ami.options.port, err); +}); + +// ami.on('managerevent', function(evt) { +// console.log(evt); +// }); + +ami.on('devicestatechange', function(evt) { + // console.log(evt); + if (evt.device.indexOf('SIP/') === 0) { + user.stateUpdate(evt, io); + } +}); + +// Agent Status Events + +// Raised when an Agent is notified of a member in the queue. +ami.on('agentcalled', function(evt) { + agent.called(evt, io); + user.queueStatusUpdate('called', evt, io); +}); + +// Raised when an agent has finished servicing a member in the queue. +ami.on('agentcomplete', function(evt) { + // console.log('agentcomplete', evt); + delete evt.holdtime; + + recording.updateQueue(evt); + acw.agentcomplete(evt); + agent.complete(evt, io); + member.inboundComplete(evt); + queuecaller.complete(evt, io); + user.queueStatusUpdate('complete', evt, io); +}); + +// Raised when an agent answers and is bridged to a member in the queue. +ami.on('agentconnect', function(evt) { + // console.log('agentconnect', evt); + queuecaller.leave(evt, io); + agent.connect(evt, io); + member.inboundTalking(evt); + user.queueStatusUpdate('connect', evt, io); +}); + +// Raised when an agent hangs up on a member in the queue. +ami.on('agentdump', function(evt) { + // console.log('agentdump', evt); + agent.dump(evt, io); + user.queueStatusUpdate('complete', evt, io); +}); + +// Raised when an agent is notified of a member in the queue and fails to answer. +ami.on('agentringnoanswer', function(evt) { + agent.ringnoanswer(evt, io); + user.queueStatusUpdate('complete', evt, io); +}); + +// Member Status Events in Queue + +// Raised when a member is added to the queue. +ami.on('queuememberadded', function(evt) { + queuemember.added(evt, io); +}); + +// Raised when a member is paused/unpaused in the queue with a reason. +ami.on('queuememberpause', function(evt) { + queuemember.pause(evt, io); + user.pause(evt, io); +}); + +// Raised when a member's penalty is changed. +ami.on('queuememberpenalty', function(evt) { + queuemember.penalty(evt, io); +}); + +// Raised when a member is removed from the queue. +ami.on('queuememberremoved', function(evt) { + queuemember.removed(evt, io); +}); + +// Raised when a member's ringinuse setting is changed. +ami.on('queuememberringinuse', function(evt) { + queuemember.ringinuse(evt, io); +}); + +// Raised when a Queue member's status has changed. +ami.on('queuememberstatus', function(evt) { + queuemember.status(evt, io); +}); + +// Queue Status Events + +// Raised when a caller joins a Queue. +ami.on('queuecallerjoin', function(evt) { + queuecaller.join(evt, io); +}); + +// // Raised when a caller abandons the queue. +ami.on('queuecallerabandon', function(evt) { + queuecaller.abandon(evt, io); + user.queueStatusUpdate('complete', evt, io); + agent.callerabandon(evt, io); +}); + +// Raised when a caller leaves a Queue. +ami.on('queuecallerleave', function(evt) { + // queuecaller.leave(evt); +}); + +// Cdr Status Events + +// Raised when a CDR is generated. +ami.on('cdr', function(evt) { + call.add(evt); + recording.updateType(evt); +}); + +// Hangup Status Events +ami.on('hangup', function(evt) { + // console.log('hangup', evt); + dial.hangup(evt); + member.outboundComplete(evt); +}); + +// // Recordings Events +// ami.on('monitorstart', function(evt) { +// // console.log('evt', evt); +// });trna +// +// ami.on('monitorstop', function(evt) { +// // console.log('evt', evt); +// recording.create(evt, 'outbound'); +// }); + +ami.on('blindtransfer', function(evt) { + // console.log('blindtransfer', evt); + evt.type = 'blind'; + tranfer.createBlind(evt); +}); + +ami.on('attendedtransfer', function(evt) { + // console.log('attendedtransfer', evt); + evt.type = 'attended'; + tranfer.createAttended(evt); +}); + +// Variable Events +ami.on('varset', function(evt) { + evt.evt = evt.event; + process.send(evt); + + var event = getVariable(evt); + switch (event.variable) { + case 'mixmonitor_filename': + recording.create(event); + break; + case 'queuestatus': + queuecaller.exit(event, io); + break; + case 'faxerror': + console.log('VarSet faxerror', evt); + if (evt.value) { + fax.updateError(evt); + } + break; + case 'faxstatusstring': + console.log('VarSet faxstatusstring', evt); + break; + case 'faxpages': + console.log('VarSet faxpages', evt); + break; + case 'outboundrouteid': + if (evt.value) { + dial.beforeDial({ + uniqueid: evt.uniqueid, + routeId: evt.value + }); + } + break; + default: + // console.log('Variable not managed:', event.variable); + break; + } +}); + +//Trunk registry event +ami.on('registry', function(evt) { + if (trunkStates[evt.defaultuser]) { + if (trunkStates[evt.defaultuser] !== evt.status) { + trunk.statusUpdate(evt); + } + } else { + trunkStates[evt.defaultuser] = evt.status; + trunk.statusUpdate(evt); + } +}); + +ami.on('peerstatus', function(evt) { + trunk.peerstatusUpdate(evt); +}); + +//Fax Events +ami.on('receivefax', function(evt) { + fax.receivefax(evt); +}); + +// Debug purpose +// setTimeout(function() { +// console.log('New timeout'); +// fax.receivefax({ +// event: 'ReceiveFAX', +// privilege: 'call,all', +// channel: 'SIP/Demo citalia-0000003b', +// channelstate: '6', +// channelstatedesc: 'Up', +// calleridnum: '01119214291', +// calleridname: '', +// connectedlinenum: '', +// connectedlinename: '', +// language: 'en', +// accountcode: '', +// context: 'from-voip-provider', +// exten: '01119827770', +// priority: '120', +// uniqueid: '1466507863.139', +// linkedid: '1466507863.139', +// localstationid: '01119827770', +// remotestationid: '01119214291', +// pagestransferred: '1', +// resolution: '8031x7700', +// transferrate: '9600', +// filename: '/var/opt/motion/server/files/fax/inbound/original/fax-20160621-131746.tif' +// }); +// }, 10 * 1000); + +ami.on('faxstatus', function(evt) { + if (evt.operation === 'send') { + console.log('FaxStatus Event', evt); + //Update outgoing message + fax.updateMessage(evt); + } +}); + +ami.on('dialbegin', function(evt) { + dial.begin(evt); +}); + +ami.on('dialend', function(evt) { + dial.end(evt); + member.outboundTalking(evt); +}) + +ami.on('sendfax', function(evt) { + console.log('SendFAX Event', evt); + fax.updateSend(evt); +}); + +// require('./../fax').register(ami); +// require('../../api/ami/ami.ami').register(ami); diff --git a/server/config/ami/call.js b/server/config/ami/call.js index fb0c8e4..78c4387 100644 --- a/server/config/ami/call.js +++ b/server/config/ami/call.js @@ -1 +1,70 @@ -var _0xf324=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x61\x6C\x6C\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x61\x64\x64","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x74\x79\x70\x65","\x6E\x61\x6D\x65","\x53\x65\x71\x75\x65\x6C\x69\x7A\x65\x55\x6E\x69\x71\x75\x65\x43\x6F\x6E\x73\x74\x72\x61\x69\x6E\x74\x45\x72\x72\x6F\x72","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x63\x61\x6C\x6C\x20","\x65\x72\x72\x6F\x72","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x63\x61\x6C\x6C\x20\x65\x76\x74","\x63\x61\x74\x63\x68","\x61\x6E\x73\x77\x65\x72\x74\x69\x6D\x65","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x63\x61\x6C\x6C\x20\x75\x6E\x69\x71\x75\x65\x69\x64","\x75\x6E\x69\x71\x75\x65\x69\x64","\x75\x70\x64\x61\x74\x65\x64","\x65\x6E\x64\x74\x69\x6D\x65","\x69\x73\x41\x66\x74\x65\x72","\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x64\x65\x73\x74\x69\x6E\x61\x74\x69\x6F\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x6C\x61\x73\x74\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x6C\x61\x73\x74\x64\x61\x74\x61","\x64\x75\x72\x61\x74\x69\x6F\x6E","\x73\x74\x61\x72\x74\x74\x69\x6D\x65","\x73\x65\x63\x6F\x6E\x64\x73","\x64\x69\x66\x66","\x62\x69\x6C\x6C\x61\x62\x6C\x65\x73\x65\x63\x6F\x6E\x64\x73","\x73\x61\x76\x65","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65","\x65\x76\x74","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x6E\x64","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x6B\x65\x79\x42\x79","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xf324[0];const _=require(_0xf324[1]);const moment=require(_0xf324[2]);const ReportCall=require(_0xf324[4])[_0xf324[3]];function Call(){console[_0xf324[6]](_0xf324[5])}Call[_0xf324[8]][_0xf324[7]]= function(_0x35d3x5){if(_0x35d3x5[_0xf324[9]]){create(_0x35d3x5)}};function create(_0x35d3x5){return ReportCall[_0xf324[33]](_0x35d3x5)[_0xf324[32]](function(_0x35d3x8){if(_0x35d3x5[_0xf324[16]]){console[_0xf324[6]](_0xf324[17],_0x35d3x5[_0xf324[18]],_0xf324[16],_0x35d3x5[_0xf324[16]],_0xf324[19]);_0x35d3x8[_0xf324[16]]= _0x35d3x5[_0xf324[16]]};if(_0x35d3x5[_0xf324[20]]&& _0x35d3x8[_0xf324[20]]){if(moment(_0x35d3x5[_0xf324[20]])[_0xf324[21]](_0x35d3x8[_0xf324[20]])){console[_0xf324[6]](_0xf324[17],_0x35d3x5[_0xf324[18]],_0xf324[20],_0x35d3x5[_0xf324[20]],_0xf324[19]);_0x35d3x8[_0xf324[20]]= _0x35d3x5[_0xf324[20]];_0x35d3x8[_0xf324[22]]= _0x35d3x5[_0xf324[22]];_0x35d3x8[_0xf324[23]]= _0x35d3x5[_0xf324[23]];_0x35d3x8[_0xf324[24]]= _0x35d3x5[_0xf324[24]];_0x35d3x8[_0xf324[25]]= _0x35d3x5[_0xf324[25]];_0x35d3x8[_0xf324[26]]= moment(_0x35d3x8[_0xf324[20]])[_0xf324[29]](_0x35d3x8[_0xf324[27]],_0xf324[28]);_0x35d3x8[_0xf324[30]]= moment(_0x35d3x8[_0xf324[20]])[_0xf324[29]](_0x35d3x8[_0xf324[16]],_0xf324[28])}};return _0x35d3x8[_0xf324[31]]()})[_0xf324[15]](function(_0x35d3x7){if(_0x35d3x7[_0xf324[10]]&& _0x35d3x7[_0xf324[10]]!== _0xf324[11]){console[_0xf324[13]](_0xf324[12]+ _0x35d3x7);console[_0xf324[13]](_0xf324[14]+ _0x35d3x5)}})}ReportCall[_0xf324[38]](function(_0x35d3x9,_0x35d3xa){_0x35d3x9[_0xf324[35]][_0xf324[34]]= _0xf324[36];process[_0xf324[37]](_0x35d3x9[_0xf324[35]])});ReportCall[_0xf324[42]](function(_0x35d3x9,_0x35d3xa){_0x35d3x9[_0xf324[35]][_0xf324[34]]= _0xf324[39];_0x35d3x9[_0xf324[35]][_0xf324[40]]= _[_0xf324[41]](_0x35d3x9[_0xf324[40]]());process[_0xf324[37]](_0x35d3x9[_0xf324[35]])});module[_0xf324[43]]= Call \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const moment = require('moment'); +const ReportCall = require('../../models').ReportCall; + +function Call() { + console.log('Call Initialization...'); +} + +Call.prototype.add = function(evt) { + if (evt.type) { + create(evt); + } +} + +function create(evt) { + return ReportCall + .create(evt) + .then(function(call) { + call.dataValues.evt = 'ReportCall.afterCreate'; + process.send(call.dataValues); + + if (evt.answertime) { + console.log('[report] call uniqueid', evt.uniqueid, 'answertime', evt.answertime, 'updated'); + call.answertime = evt.answertime; + } + + if (evt.endtime && call.endtime) { + if (moment(evt.endtime).isAfter(call.endtime)) { + console.log('[report] call uniqueid', evt.uniqueid, 'endtime', evt.endtime, 'updated'); + + call.endtime = evt.endtime; + call.disposition = evt.disposition; + call.destinationchannel = evt.destinationchannel; + call.lastapplication = evt.lastapplication; + call.lastdata = evt.lastdata; + + call.duration = moment(call.endtime).diff(call.starttime, 'seconds'); + call.billableseconds = moment(call.endtime).diff(call.answertime, 'seconds'); + } + } + + return call.save(); + }) + .then(function(data) { + data.dataValues.evt = 'ReportCall.afterUpdate'; + data.dataValues.changed = _.keyBy(data.changed()); + process.send(data.dataValues); + }) + .catch(function(err) { + if (err.name && err.name !== 'SequelizeUniqueConstraintError') { + console.error('[report] call ' + err); + console.error('[report] call evt' + evt); + } + }); +} + +// ReportCall.afterCreate(function(doc, options) { +// doc.dataValues.evt = 'ReportCall.afterCreate'; +// process.send(doc.dataValues); +// }); + +// ReportCall.afterUpdate(function(doc, options) { +// doc.dataValues.evt = 'ReportCall.afterUpdate'; +// doc.dataValues.changed = _.keyBy(doc.changed()); +// process.send(doc.dataValues); +// }); + +module.exports = Call; diff --git a/server/config/ami/cleaner.js b/server/config/ami/cleaner.js index 504cd1f..a14cbab 100644 --- a/server/config/ami/cleaner.js +++ b/server/config/ami/cleaner.js @@ -1 +1,151 @@ -var _0xc7d9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6D\x6F\x6D\x65\x6E\x74","\x6C\x6F\x64\x61\x73\x68","\x62\x6C\x75\x65\x62\x69\x72\x64","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x6C\x65\x61\x6E\x65\x72\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x43\x68\x61\x74","\x4D\x61\x69\x6C","\x46\x61\x78","\x53\x6D\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x66\x6F\x72\x45\x61\x63\x68","\x52\x65\x6D\x6F\x76\x69\x6E\x67\x20\x69\x6E\x61\x63\x74\x69\x76\x65\x20\x63\x61\x6C\x6C\x73\x2E\x2E\x2E","\x49\x6E\x61\x63\x74\x69\x76\x65\x20\x63\x61\x6C\x6C\x73\x20\x72\x65\x6D\x6F\x76\x65\x20\x65\x72\x72\x6F\x72\x3A","\x63\x61\x74\x63\x68","\x49\x6E\x61\x63\x74\x69\x76\x65\x20\x63\x61\x6C\x6C\x73\x20\x63\x6C\x65\x61\x6E\x69\x6E\x67\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x64\x21","\x74\x68\x65\x6E","\x61\x6C\x6C","\x75\x6E\x69\x71\x75\x65\x69\x64","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x5A\x4F\x4D\x42\x49\x45","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x70\x75\x73\x68","\x6E\x6F","\x66\x69\x6E\x64\x41\x6C\x6C","\x52\x65\x70\x6F\x72\x74\x44\x69\x61\x6C","\x7A\x6F\x6D\x62\x69\x65","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65","\x63\x6F\x6E\x74\x65\x6E\x74","\x0A","\x73\x70\x6C\x69\x74","\x21","\x6C\x65\x6E\x67\x74\x68","\x70\x6F\x70","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65","\x43\x6F\x6D\x6D\x61\x6E\x64","\x63\x6F\x72\x65\x20\x73\x68\x6F\x77\x20\x63\x68\x61\x6E\x6E\x65\x6C\x73\x20\x63\x6F\x6E\x63\x69\x73\x65","\x61\x63\x74\x69\x6F\x6E","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x49\x6E\x61\x63\x74\x69\x76\x65\x20","\x20\x73\x65\x73\x73\x69\x6F\x6E\x73\x20\x72\x65\x6D\x6F\x76\x65\x20\x65\x72\x72\x6F\x72\x3A","\x20\x73\x65\x73\x73\x69\x6F\x6E\x73\x20\x63\x6C\x65\x61\x6E\x69\x6E\x67\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x64\x21","\x74\x69\x6D\x65\x73\x6C\x6F\x74","\x73\x65\x63\x6F\x6E\x64\x73","\x61\x64\x64","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x69\x73\x53\x61\x6D\x65\x4F\x72\x41\x66\x74\x65\x72","\x52\x65\x70\x6F\x72\x74","\x53\x65\x73\x73\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];_0xc7d9[0];var moment=require(_0xc7d9[1]);var _=require(_0xc7d9[2]);var Promise=require(_0xc7d9[3]);var models=require(_0xc7d9[4]);function Cleaner(_0xad01x6){console[_0xc7d9[6]](_0xc7d9[5]);var _0xad01x7=[_0xc7d9[7],_0xc7d9[8],_0xc7d9[9],_0xc7d9[10],_0xc7d9[11]];clean(_0xad01x6,_0xad01x7);setInterval(function(){clean(_0xad01x6,_0xad01x7)},10* 60* 1000)}function clean(_0xad01x6,_0xad01x7){removeInactiveCalls(_0xad01x6);_[_0xc7d9[12]](_0xad01x7,function(_0xad01x9){removeExpiredApplications(_0xad01x9)})}function removeInactiveCalls(_0xad01x6){console[_0xc7d9[6]](_0xc7d9[13]);var _0xad01xb=[],_0xad01xc=[];return Promise[_0xc7d9[41]](_0xad01x6[_0xc7d9[40]])({action:_0xc7d9[38],command:_0xc7d9[39]})[_0xc7d9[17]](function(_0xad01x12){var _0xad01x13;if(_0xad01x12&& _0xad01x12[_0xc7d9[31]]){var _0xad01x14=_0xad01x12[_0xc7d9[31]][_0xc7d9[33]](_0xc7d9[32]);_[_0xc7d9[12]](_0xad01x14,function(_0xad01x15){if(_0xad01x15){_0xad01x13= _0xad01x15[_0xc7d9[33]](_0xc7d9[34]);_0xad01x13[_0xc7d9[35]]=== 14&& _0xad01xc[_0xc7d9[25]](_0xad01x13[_0xc7d9[36]]())}})};return models[_0xc7d9[37]][_0xc7d9[27]]({where:{$or:[{queuecallerleaveAt:null},{queuecallerexit:false,queuecallerabandon:false,queuecallercomplete:false,queuecallerleaveAt:{$ne:null}}]}})})[_0xc7d9[17]](function(_0xad01x11){_[_0xc7d9[12]](_0xad01x11,function(_0xad01xf){if(!_[_0xc7d9[20]](_0xad01xc,_0xad01xf[_0xc7d9[19]])){_0xad01xb[_0xc7d9[25]](_0xad01xf[_0xc7d9[24]]({queuecallerleaveAt:moment()[_0xc7d9[22]](_0xc7d9[21]),queuecallerexitAt:moment()[_0xc7d9[22]](_0xc7d9[21]),queuecallerexit:true,queuecallerexitreason:_0xc7d9[29]}))}});return models[_0xc7d9[30]][_0xc7d9[27]]({where:{leaveAt:null}})})[_0xc7d9[17]](function(_0xad01x10){_[_0xc7d9[12]](_0xad01x10,function(_0xad01xf){if(!_[_0xc7d9[20]](_0xad01xc,_0xad01xf[_0xc7d9[19]])){_0xad01xb[_0xc7d9[25]](_0xad01xf[_0xc7d9[24]]({leaveAt:moment()[_0xc7d9[22]](_0xc7d9[21]),network:_0xc7d9[26]}))}});return models[_0xc7d9[28]][_0xc7d9[27]]({where:{endtime:null}})})[_0xc7d9[17]](function(_0xad01xe){_[_0xc7d9[12]](_0xad01xe,function(_0xad01xf){if(!_[_0xc7d9[20]](_0xad01xc,_0xad01xf[_0xc7d9[19]])){_0xad01xb[_0xc7d9[25]](_0xad01xf[_0xc7d9[24]]({endtime:moment()[_0xc7d9[22]](_0xc7d9[21]),dialstatus:_0xc7d9[23]}))}});return _0xad01xb})[_0xc7d9[18]]()[_0xc7d9[17]](function(){console[_0xc7d9[6]](_0xc7d9[16])})[_0xc7d9[15]](function(_0xad01xd){console[_0xc7d9[6]](_0xc7d9[14],_0xad01xd)})}function removeExpiredApplications(_0xad01x9){return models[_0xc7d9[50]+ _0xad01x9+ _0xc7d9[51]][_0xc7d9[27]]({where:{leaveAt:null,timeslot:{$ne:null}}})[_0xc7d9[17]](function(_0xad01x17){var _0xad01x18,_0xad01x19=[];_[_0xc7d9[12]](_0xad01x17,function(_0xad01x1a){_0xad01x18= moment(_0xad01x1a[_0xc7d9[48]])[_0xc7d9[47]](_0xad01x1a[_0xc7d9[45]],_0xc7d9[46]);if(moment()[_0xc7d9[49]](_0xad01x18)){_0xad01x19[_0xc7d9[25]](_0xad01x1a[_0xc7d9[24]]({timeout:true,leaveAt:moment()[_0xc7d9[22]](_0xc7d9[21])}))}});return _0xad01x19})[_0xc7d9[18]]()[_0xc7d9[17]](function(){console[_0xc7d9[6]](_0xc7d9[42]+ _0xad01x9+ _0xc7d9[44])})[_0xc7d9[15]](function(_0xad01xd){console[_0xc7d9[6]](_0xc7d9[42]+ _0xad01x9+ _0xc7d9[43],_0xad01xd)})}module[_0xc7d9[52]]= Cleaner \ No newline at end of file +'use strict'; + +var moment = require('moment'); +var _ = require('lodash'); +var Promise = require('bluebird'); + +var models = require('../../models'); + +function Cleaner(ami) { + console.log('Cleaner Initialization...'); + var channels = ['Chat', 'Mail', 'Fax', 'Sms', 'Openchannel']; + clean(ami, channels); + setInterval(function() { + clean(ami, channels); + }, 10 * 60 * 1000); +} + +function clean(ami, channels) { + removeInactiveCalls(ami); + _.forEach(channels, function(channel) { + removeExpiredApplications(channel); + }); +} + +function removeInactiveCalls(ami) { + console.log('Removing inactive calls...'); + var _bulkClean = [], + _activeCalls = []; + return Promise + .promisify(ami.action)({ + action: 'Command', + command: 'core show channels concise', + }) + .then(function(result) { + var tmpArray; + if (result && result.content) { + var res = result.content.split('\n'); + _.forEach(res, function(elem) { + if (elem) { + tmpArray = elem.split('!'); + tmpArray.length === 14 && _activeCalls.push(tmpArray.pop()); + } + }); + } + return models.ReportQueue + .findAll({ + where: { + $or: [{ + queuecallerleaveAt: null + }, { + queuecallerexit: false, + queuecallerabandon: false, + queuecallercomplete: false, + queuecallerleaveAt: { + $ne: null + } + }] + } + }); + }) + .then(function(queueCalls) { + _.forEach(queueCalls, function(call) { + if (!_.includes(_activeCalls, call.uniqueid)) { + _bulkClean.push(call.updateAttributes({ + queuecallerleaveAt: moment().format("YYYY-MM-DD HH:mm:ss"), + queuecallerexitAt: moment().format("YYYY-MM-DD HH:mm:ss"), + queuecallerexit: true, + queuecallerexitreason: 'zombie' + })) + } + }); + return models.ReportSquare + .findAll({ + where: { + leaveAt: null + } + }); + }) + .then(function(squareCalls) { + _.forEach(squareCalls, function(call) { + if (!_.includes(_activeCalls, call.uniqueid)) { + _bulkClean.push(call.updateAttributes({ + leaveAt: moment().format("YYYY-MM-DD HH:mm:ss"), + network: 'no' + })) + } + }); + + return models.ReportDial + .findAll({ + where: { + endtime: null + } + }); + }) + .then(function(dialCalls) { + _.forEach(dialCalls, function(call) { + if (!_.includes(_activeCalls, call.uniqueid)) { + _bulkClean.push(call.updateAttributes({ + endtime: moment().format("YYYY-MM-DD HH:mm:ss"), + dialstatus: 'ZOMBIE' + })) + } + }); + return _bulkClean; + }) + .all() + .then(function() { + console.log('Inactive calls cleaning completed!'); + }) + .catch(function(err) { + console.log('Inactive calls remove error:', err); + }); +} + +function removeExpiredApplications(channel) { + + return models['Report' + channel + 'Session'] + .findAll({ + where: { + leaveAt: null, + timeslot: { //If for any reason the timeslot is not populated I can't check if the app is expired + $ne: null + } + } + }) + .then(function(sessions) { + var expiration, bulkFix = []; + _.forEach(sessions, function(session) { + expiration = moment(session.updatedAt).add(session.timeslot, 'seconds'); + if (moment().isSameOrAfter(expiration)) { + bulkFix.push(session.updateAttributes({ + timeout: true, + leaveAt: moment().format("YYYY-MM-DD HH:mm:ss") + })); + } + }); + + return bulkFix; + }) + .all() + .then(function() { + console.log('Inactive ' + channel + ' sessions cleaning completed!'); + }) + .catch(function(err) { + console.log('Inactive ' + channel + ' sessions remove error:', err); + }); + +} + +module.exports = Cleaner; diff --git a/server/config/ami/dial.js b/server/config/ami/dial.js index 7744a69..230e016 100644 --- a/server/config/ami/dial.js +++ b/server/config/ami/dial.js @@ -1 +1,110 @@ -var _0x1cd1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x44\x69\x61\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x74\x69\x6C","\x41\x67\x65\x6E\x74\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x65\x76\x74","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x52\x65\x70\x6F\x72\x74\x44\x69\x61\x6C\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x6E\x64","\x72\x65\x70\x6F\x72\x74\x5F\x64\x69\x61\x6C\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x61\x64\x6D\x69\x6E\x73","\x74\x6F","\x75\x73\x65\x72\x73","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x63\x68\x61\x6E\x6E\x65\x6C","\x52\x65\x70\x6F\x72\x74\x44\x69\x61\x6C\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x6B\x65\x79\x42\x79","\x72\x65\x70\x6F\x72\x74\x5F\x64\x69\x61\x6C\x3A","\x62\x65\x67\x69\x6E","\x73\x61\x76\x65","\x75\x70\x64\x61\x74\x65","\x61\x67\x65\x6E\x74\x3A\x25\x73","\x73\x70\x6C\x69\x74","\x66\x6F\x72\x6D\x61\x74","\x72\x65\x70\x6F\x72\x74\x5F\x64\x69\x61\x6C\x3A\x75\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x62\x65\x66\x6F\x72\x65\x44\x69\x61\x6C","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x64\x69\x61\x6C\x73\x74\x72\x69\x6E\x67","\x2F","\x6C\x65\x6E\x67\x74\x68","\x53\x49\x50","\x73\x74\x61\x72\x74\x74\x69\x6D\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x6C\x61\x73\x74\x65\x76\x65\x6E\x74","\x63\x61\x6C\x6C\x65\x64","\x65\x6E\x64","\x65\x6E\x64\x74\x69\x6D\x65","\x64\x69\x61\x6C\x73\x74\x61\x74\x75\x73","\x41\x4E\x53\x57\x45\x52","\x63\x6F\x6E\x6E\x65\x63\x74","\x61\x6E\x73\x77\x65\x72\x74\x69\x6D\x65","\x72\x65\x6A\x65\x63\x74\x65\x64","\x68\x61\x6E\x67\x75\x70","\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x74\x68\x65\x6E","\x75\x6E\x69\x71\x75\x65\x69\x64","\x63\x72\x65\x61\x74\x65\x64\x41\x74\x20\x44\x45\x53\x43","\x66\x69\x6E\x64\x4F\x6E\x65","\x5B\x64\x69\x61\x6C\x5D\x20\x64\x69\x61\x6C\x20\x63\x72\x65\x61\x74\x69\x6F\x6E\x20\x65\x72\x72\x6F\x72\x3A\x20","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x5B\x64\x69\x61\x6C\x5D\x20\x62\x65\x67\x69\x6E","\x63\x72\x65\x61\x74\x65","\x5B\x64\x69\x61\x6C\x5D\x20\x75\x70\x64\x61\x74\x65\x20\x65\x72\x72\x6F\x72\x3A\x20","\x73\x74\x61\x63\x6B","\x5B\x64\x69\x61\x6C\x5D\x20\x75\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x1cd1[0];const _=require(_0x1cd1[1]);const moment=require(_0x1cd1[2]);const ReportDial=require(_0x1cd1[4])[_0x1cd1[3]];const util=require(_0x1cd1[5]);function Dial(_0x199ax6){console[_0x1cd1[7]](_0x1cd1[6]);ReportDial[_0x1cd1[17]](function(_0x199ax7,_0x199ax8){_0x199ax7[_0x1cd1[9]][_0x1cd1[8]]= _0x1cd1[10];process[_0x1cd1[11]](_0x199ax7[_0x1cd1[9]]);console[_0x1cd1[7]](_0x199ax7[_0x1cd1[9]]);_0x199ax6[_0x1cd1[15]](_0x1cd1[14])[_0x1cd1[13]](_0x1cd1[12],_0x199ax7);_0x199ax6[_0x1cd1[15]](_0x1cd1[16])[_0x1cd1[13]](_0x1cd1[12],_0x199ax7)});ReportDial[_0x1cd1[30]](function(_0x199ax7,_0x199ax8){console[_0x1cd1[7]](_0x199ax7[_0x1cd1[18]]);_0x199ax7[_0x1cd1[9]][_0x1cd1[8]]= _0x1cd1[19];_0x199ax7[_0x1cd1[9]][_0x1cd1[20]]= _[_0x1cd1[21]](_0x199ax7[_0x1cd1[20]]());process[_0x1cd1[11]](_0x199ax7[_0x1cd1[9]]);_0x199ax6[_0x1cd1[15]](util[_0x1cd1[28]](_0x1cd1[26],_0x199ax7[_0x1cd1[18]][_0x1cd1[27]](/\/|-/)[1]))[_0x1cd1[13]](_0x1cd1[22]+ (_0x199ax8[_0x1cd1[23]]?_0x1cd1[24]:_0x1cd1[25]),_0x199ax7);_0x199ax6[_0x1cd1[15]](_0x1cd1[14])[_0x1cd1[13]](_0x1cd1[29],_0x199ax7);_0x199ax6[_0x1cd1[15]](_0x1cd1[16])[_0x1cd1[13]](_0x1cd1[29],_0x199ax7)})}Dial[_0x1cd1[32]][_0x1cd1[31]]= function(_0x199ax9){return createDial(_0x199ax9)};Dial[_0x1cd1[32]][_0x1cd1[23]]= function(_0x199ax9){if(_0x199ax9[_0x1cd1[33]]){var _0x199axa=_0x199ax9[_0x1cd1[33]][_0x1cd1[27]](_0x1cd1[34]);if(_0x199axa[_0x1cd1[35]]> 1&& _0x199axa[0]!== _0x1cd1[36]){_0x199ax9[_0x1cd1[37]]= moment()[_0x1cd1[28]](_0x1cd1[38]);_0x199ax9[_0x1cd1[39]]= _0x1cd1[40];return updateDial(_0x199ax9,null,true)}}};Dial[_0x1cd1[32]][_0x1cd1[41]]= function(_0x199ax9){_0x199ax9[_0x1cd1[42]]= moment()[_0x1cd1[28]](_0x1cd1[38]);if(_0x199ax9[_0x1cd1[43]]=== _0x1cd1[44]){_0x199ax9[_0x1cd1[39]]= _0x1cd1[45];_0x199ax9[_0x1cd1[46]]= moment()[_0x1cd1[28]](_0x1cd1[38])}else {_0x199ax9[_0x1cd1[39]]= _0x1cd1[47]};return updateDial(_0x199ax9)};Dial[_0x1cd1[32]][_0x1cd1[48]]= function(_0x199ax9){return ReportDial[_0x1cd1[53]]({where:{uniqueid:_0x199ax9[_0x1cd1[51]]},order:_0x1cd1[52]})[_0x1cd1[50]](function(_0x199axb){if(_0x199axb){_0x199ax9[_0x1cd1[42]]= moment()[_0x1cd1[28]](_0x1cd1[38]);_0x199ax9[_0x1cd1[39]]= _0x199axb[_0x1cd1[46]]?_0x1cd1[49]:_0x1cd1[47];return updateDial(_0x199ax9)}})};function createDial(_0x199ax9){return ReportDial[_0x1cd1[58]](_0x199ax9)[_0x1cd1[50]](function(_0x199axe){console[_0x1cd1[7]](_0x1cd1[57])})[_0x1cd1[56]](function(_0x199axd){console[_0x1cd1[55]](_0x1cd1[54]+ _0x199axd)})}function updateDial(_0x199ax9,_0x199ax10,_0x199ax11){return ReportDial[_0x1cd1[53]]({where:_0x199ax10|| {uniqueid:_0x199ax9[_0x1cd1[51]]},order:_0x1cd1[52]})[_0x1cd1[50]](function(_0x199ax12){if(_0x199ax12){return _0x199ax12[_0x1cd1[25]](_0x199ax9,{begin:_0x199ax11})}})[_0x1cd1[50]](function(_0x199axe){console[_0x1cd1[7]](_0x1cd1[61])})[_0x1cd1[56]](function(_0x199axd){console[_0x1cd1[55]](_0x1cd1[59]+ _0x199axd[_0x1cd1[60]])})}module[_0x1cd1[62]]= Dial \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const moment = require('moment'); +const ReportDial = require('../../models').ReportDial; +const util = require('util'); + +function Dial(io) { + console.log('Agent Initialization...'); + + ReportDial.afterCreate(function(doc, options) { + doc.dataValues.evt = 'ReportDial.afterCreate'; + process.send(doc.dataValues); + console.log(doc.dataValues); + // io.to(util.format('agent:%s', doc.channel.split(/\/|-/)[1])).emit('report_dial:save', doc);//I don' t have the cannel yet, so I don' t know the agent that is calling + io.to('admins').emit('report_dial:save', doc); + io.to('users').emit('report_dial:save', doc); + }); + + ReportDial.afterUpdate(function(doc, options) { + console.log(doc.channel); + doc.dataValues.evt = 'ReportDial.afterUpdate'; + doc.dataValues.changed = _.keyBy(doc.changed()); + process.send(doc.dataValues); + io.to(util.format('agent:%s', doc.channel.split(/\/|-/)[1])).emit('report_dial:' + (options.begin ? 'save' : 'update'), doc); //if I just started the dial I send the save event and insert the row in the realtime tible. Otherwise I send the update event and update the realtime table + io.to('admins').emit('report_dial:update', doc); + io.to('users').emit('report_dial:update', doc); + }); + +} + +Dial.prototype.beforeDial = function(evt) { + return createDial(evt); // I create the dial row in the database with the uniqueid +} + +Dial.prototype.begin = function(evt) { + if (evt.dialstring) { + var dialString = evt.dialstring.split('/'); + if (dialString.length > 1 && dialString[0] !== 'SIP') { + evt.starttime = moment().format("YYYY-MM-DD HH:mm:ss"); + evt.lastevent = 'called'; + return updateDial(evt, null, true); //At the start of the dial I update the existing row in the database. I pass a true parameter that say that I' m starting the dial + } + } +} + +Dial.prototype.end = function(evt) { + evt.endtime = moment().format("YYYY-MM-DD HH:mm:ss"); + if (evt.dialstatus === 'ANSWER') { + evt.lastevent = 'connect'; + evt.answertime = moment().format("YYYY-MM-DD HH:mm:ss"); + } else { + evt.lastevent = 'rejected'; + } + return updateDial(evt); +} + +Dial.prototype.hangup = function(evt) { + return ReportDial + .findOne({ + where: { + uniqueid: evt.uniqueid + }, + order: 'createdAt DESC' + }) + .then(function(dial) { + if (dial) { + evt.endtime = moment().format("YYYY-MM-DD HH:mm:ss"); + evt.lastevent = dial.answertime ? 'complete' : 'rejected'; + return updateDial(evt); + } + }) +} + +function createDial(evt) { + return ReportDial + .create(evt) + .then(function(data) { + console.log('[dial] begin'); + }) + .catch(function(err) { + console.error('[dial] dial creation error: ' + err); + }); +} + +function updateDial(evt, where, begin) { //I update the dial row + return ReportDial + .findOne({ + where: where || { + uniqueid: evt.uniqueid + }, + order: 'createdAt DESC' + }) + .then(function(row) { + if (row) { + return row + .update(evt, { + begin: begin // and pass the begin value as an option for the afterUpdate hook + }); + } + }) + .then(function(data) { + console.log('[dial] update'); + }) + .catch(function(err) { + console.error('[dial] update error: ' + err.stack); + }); +} + +module.exports = Dial; diff --git a/server/config/ami/fax.js b/server/config/ami/fax.js index 96a1fb9..d0825e7 100644 --- a/server/config/ami/fax.js +++ b/server/config/ami/fax.js @@ -1 +1,654 @@ -var _0xb4e0=["\x75\x73\x65\x20\x73\x74\x69\x63\x74","\x66\x73","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x6C\x6F\x64\x61\x73\x68","\x62\x6C\x75\x65\x62\x69\x72\x64","\x65\x78\x65\x63","\x63\x68\x69\x6C\x64\x2D\x70\x72\x6F\x63\x65\x73\x73\x2D\x70\x72\x6F\x6D\x69\x73\x65","\x66\x73\x2D\x65\x78\x74\x72\x61","\x6D\x6F\x6D\x65\x6E\x74","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x52\x6F\x6F\x6D","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x46\x61\x78\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x46\x61\x78","\x54\x72\x75\x6E\x6B","\x55\x73\x65\x72","\x43\x6F\x6E\x74\x61\x63\x74","\x2E\x2E\x2F\x75\x74\x69\x6C","\x46\x61\x78\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x61\x67\x65\x6E\x74\x3A\x25\x73","\x6D\x65\x6D\x62\x65\x72\x69\x64","\x66\x6F\x72\x6D\x61\x74","\x74\x6F","\x75\x73\x65\x72\x73","\x61\x64\x6D\x69\x6E\x73","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x6D\x65\x73\x73\x61\x67\x65","\x64\x6F\x63","\x6F\x70\x74\x69\x6F\x6E\x73","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x73\x74\x61\x74\x75\x73","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x53\x45\x4E\x44\x49\x4E\x47","\x72\x65\x74\x72\x79","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x63\x63\x6F\x75\x6E\x74\x69\x64","\x66\x69\x6E\x64","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x64","\x61\x63\x63\x65\x70\x74","\x72\x65\x6A\x65\x63\x74\x65\x64\x41\x74","\x72\x65\x6A\x65\x63\x74","\x52\x65\x70\x6F\x72\x74\x46\x61\x78\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x43\x4C\x4F\x53\x45\x44","\x63\x6C\x6F\x73\x65","\x46\x61\x78\x52\x6F\x6F\x6D\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x70\x75\x73\x68","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x69\x64","\x46\x61\x78\x20\x61\x63\x63\x6F\x75\x6E\x74\x3A\x20","\x6E\x61\x6D\x65","\x20\x55\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x75\x6E\x73\x68\x69\x66\x74","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74\x2E\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6F\x6E","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x63\x63\x65\x70\x74\x4D\x65\x74\x68\x6F\x64","\x61\x63\x63\x65\x70\x74\x55\x72\x6C","\x46\x61\x78\x20\x61\x63\x63\x6F\x75\x6E\x74\x20\x3C","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x61\x63\x63\x65\x70\x74\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x6C\x65\x6E\x67\x74\x68","\x61\x63\x74\x69\x6F\x6E\x73","\x65\x6E\x61\x62\x6C\x65\x64","\x65\x78\x65\x63\x41\x63\x74\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x65\x6A\x65\x63\x74\x4D\x65\x74\x68\x6F\x64","\x72\x65\x6A\x65\x63\x74\x55\x72\x6C","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x63\x6C\x6F\x73\x65\x4D\x65\x74\x68\x6F\x64","\x63\x6C\x6F\x73\x65\x55\x72\x6C","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x63\x6C\x6F\x73\x65\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x57\x65\x62\x68\x6F\x6F\x6B\x20\x6E\x6F\x74\x20\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x64","\x72\x65\x71\x75\x65\x73\x74\x20\x66\x61\x69\x6C\x65\x64\x21","\x72\x65\x71\x75\x65\x73\x74\x20\x73\x75\x63\x63\x65\x73\x73\x65\x66\x75\x6C\x21","\x73\x65\x6E\x64\x52\x65\x71\x75\x65\x73\x74","\x75\x70\x64\x61\x74\x65\x45\x72\x72\x6F\x72","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x5B\x46\x61\x78\x5D\x20\x45\x72\x72\x6F\x72\x20\x75\x70\x64\x61\x74\x69\x6E\x67\x20\x65\x72\x72\x6F\x72\x3A","\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x3A\x73\x61\x76\x65","\x5B\x46\x61\x78\x5D\x20\x4D\x65\x73\x73\x61\x67\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x76\x61\x6C\x75\x65","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x63\x68\x61\x6E\x6E\x65\x6C","\x66\x69\x6E\x64\x4F\x6E\x65","\x75\x70\x64\x61\x74\x65\x4D\x65\x73\x73\x61\x67\x65","\x5B\x46\x61\x78\x5D\x20\x45\x72\x72\x6F\x72\x20\x75\x70\x64\x61\x74\x69\x6E\x67\x20\x6D\x65\x73\x73\x61\x67\x65\x3A","\x5B\x46\x61\x78\x5D\x20\x4D\x65\x73\x73\x61\x67\x65\x3A","\x5B\x46\x61\x78\x5D\x20\x53\x74\x61\x63\x6B\x3A","\x73\x74\x61\x63\x6B","\x63\x68\x61\x6E\x6E\x65\x6C\x73\x74\x61\x74\x65","\x63\x68\x61\x6E\x6E\x65\x6C\x73\x74\x61\x74\x65\x64\x65\x73\x63","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x6C\x69\x6E\x65\x6E\x75\x6D","\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x6C\x69\x6E\x65\x6E\x61\x6D\x65","\x61\x63\x63\x6F\x75\x6E\x74\x63\x6F\x64\x65","\x63\x6F\x6E\x74\x65\x78\x74","\x65\x78\x74\x65\x6E","\x70\x72\x69\x6F\x72\x69\x74\x79","\x75\x6E\x69\x71\x75\x65\x69\x64","\x6C\x69\x6E\x6B\x65\x64\x69\x64","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64","\x75\x70\x64\x61\x74\x65\x53\x65\x6E\x64","\x5B\x46\x61\x78\x5D\x20\x45\x72\x72\x6F\x72\x20\x75\x70\x64\x61\x74\x69\x6E\x67\x20\x73\x65\x6E\x64\x69\x6E\x67\x20\x6D\x65\x73\x73\x61\x67\x65\x3A","\x5B\x46\x61\x78\x5D\x20\x52\x6F\x6F\x6D\x20\x75\x70\x64\x61\x74\x65\x20\x66\x6F\x72\x20\x53\x65\x6E\x64\x46\x61\x78\x20\x65\x76\x65\x6E\x74","\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x3A\x73\x61\x76\x65","\x5B\x46\x61\x78\x5D\x20\x52\x6F\x6F\x6D\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x53\x45\x4E\x54","\x5B\x46\x61\x78\x5D\x20\x4D\x65\x73\x73\x61\x67\x65\x20\x75\x70\x64\x61\x74\x65\x20\x66\x6F\x72\x20\x53\x65\x6E\x64\x46\x61\x78\x20\x65\x76\x65\x6E\x74","\x67\x65\x74\x46\x61\x78\x52\x6F\x6F\x6D","\x70\x61\x67\x65\x73\x74\x72\x61\x6E\x73\x66\x65\x72\x72\x65\x64","\x30","\x46\x41\x49\x4C\x45\x44","\x72\x65\x6D\x6F\x74\x65\x73\x74\x61\x74\x69\x6F\x6E\x69\x64","\x72\x65\x73\x6F\x6C\x75\x74\x69\x6F\x6E","\x74\x72\x61\x6E\x73\x66\x65\x72\x72\x61\x74\x65","\x72\x65\x63\x65\x69\x76\x65\x66\x61\x78","\x5B\x46\x61\x78\x5D\x20\x4E\x65\x77\x20\x6D\x65\x73\x73\x61\x67\x65\x20\x66\x72\x6F\x6D\x20\x25\x73","\x63\x6C\x6F\x6E\x65","\x5B\x46\x61\x78\x5D\x20\x45\x72\x72\x6F\x72\x20\x72\x65\x63\x65\x69\x76\x69\x6E\x67\x20\x6D\x65\x73\x73\x61\x67\x65\x3A","\x5B\x46\x61\x78\x5D\x20\x46\x69\x6C\x65\x20\x63\x6F\x72\x72\x65\x63\x74\x6C\x79\x20\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x69\x6E\x69\x74\x46\x61\x78\x53\x63\x68\x65\x64\x75\x6C\x65\x72","\x66\x61\x78","\x25\x73\x2E\x25\x73","\x75\x6E\x69\x78","\x66\x72\x6F\x6D","\x73\x65\x6E\x64","\x5B\x46\x61\x78\x5D\x20\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x20\x6E\x6F\x74\x20\x63\x72\x65\x61\x74\x65\x64","\x5B\x46\x61\x78\x5D\x20\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x3A","\x74\x69\x66\x66\x32\x70\x64\x66\x20\x2D\x6F\x20","\x20","\x5B\x46\x61\x78\x5D\x20\x4D\x65\x73\x73\x61\x67\x65\x20\x6E\x6F\x74\x20\x63\x72\x65\x61\x74\x65\x64","\x70\x61\x72\x73\x65","\x2E\x70\x64\x66","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x69\x6E\x62\x6F\x75\x6E\x64","\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x6A\x6F\x69\x6E","\x63\x72\x65\x61\x74\x65","\x5B\x46\x61\x78\x5D\x20\x52\x6F\x6F\x6D\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x2F\x63\x72\x65\x61\x74\x65\x64","\x5B\x46\x61\x78\x5D\x20\x52\x6F\x6F\x6D\x3A","\x46\x61\x78\x52\x6F\x6F\x6D\x49\x64","\x52\x45\x43\x45\x49\x56\x45\x44","\x66\x69\x72\x73\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x4F\x50\x45\x4E","\x73\x79\x73\x74\x65\x6D","\x66\x61\x78\x49\x6E","\x4E\x45\x57","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x44\x45\x53\x43","\x73\x70\x72\x65\x61\x64","\x5B\x46\x61\x78\x5D\x20\x41\x63\x63\x6F\x75\x6E\x74\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x5B\x46\x61\x78\x5D\x20\x41\x63\x63\x6F\x75\x6E\x74\x20\x66\x6F\x75\x6E\x64\x3A","\x4C\x69\x73\x74\x49\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x5B\x46\x61\x78\x5D\x20\x45\x72\x72\x6F\x72\x20\x73\x65\x6E\x64\x69\x6E\x67\x20\x6D\x65\x73\x73\x61\x67\x65\x3A","\x5B\x46\x61\x78\x5D\x20\x45\x72\x72\x6F\x72\x20\x75\x70\x64\x61\x74\x69\x6E\x67\x20\x65\x72\x72\x6F\x72\x20\x73\x74\x61\x74\x75\x73\x3A","\x75\x70\x64\x61\x74\x65","\x5B\x46\x61\x78\x5D\x20\x52\x65\x73\x70\x6F\x6E\x73\x65\x20\x74\x6F\x20\x41\x4D\x49\x20\x41\x63\x74\x69\x6F\x6E\x20\x4F\x72\x69\x67\x69\x6E\x61\x74\x65","\x6F\x72\x69\x67\x69\x6E\x61\x74\x65","\x25\x73\x2F\x25\x73\x2F\x25\x73","\x74\x65\x63\x68","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x22\x25\x73\x22\x20\x3C\x25\x73\x3E","\x65\x63\x6D","\x68\x65\x61\x64\x65\x72\x69\x6E\x66\x6F","\x6D\x69\x6E\x72\x61\x74\x65","\x6D\x61\x78\x72\x61\x74\x65","\x22\x25\x73\x22","\x6D\x6F\x64\x65\x6D","\x67\x61\x74\x65\x77\x61\x79","\x74\x33\x38\x74\x69\x6D\x65\x6F\x75\x74","\x61\x63\x74\x69\x6F\x6E","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x63\x68\x6D\x6F\x64\x53\x79\x6E\x63","\x5B\x46\x61\x78\x5D\x20\x46\x69\x6C\x65\x20\x63\x6F\x72\x72\x65\x63\x74\x6C\x79\x20\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x20\x61\x6E\x64\x20\x72\x65\x61\x64\x79\x20\x74\x6F\x20\x75\x73\x65","\x46\x61\x78\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x74\x79\x70\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x70\x64\x66","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x2F","\x2E\x74\x69\x66","\x67\x73\x20\x2D\x71\x20\x2D\x64\x4E\x4F\x50\x41\x55\x53\x45\x20\x2D\x64\x42\x41\x54\x43\x48\x20\x2D\x73\x44\x45\x56\x49\x43\x45\x3D\x74\x69\x66\x66\x67\x34\x20\x2D\x73\x50\x41\x50\x45\x52\x53\x49\x5A\x45\x3D\x6C\x65\x74\x74\x65\x72\x20\x2D\x73\x4F\x75\x74\x70\x75\x74\x46\x69\x6C\x65\x3D","\x62\x61\x73\x65","\x63\x6F\x70\x79\x53\x79\x6E\x63","\x66\x69\x6E\x64\x42\x79\x49\x64","\x5B\x46\x61\x78\x5D\x20\x52\x6F\x6F\x6D\x20\x75\x70\x64\x61\x74\x65\x64\x3A","\x61\x64\x64\x55\x73\x65\x72","\x50\x45\x4E\x44\x49\x4E\x47","\x66\x61\x78\x4F\x75\x74","\x75\x73\x65\x72","\x61\x64\x64\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x5B\x46\x61\x78\x5D\x20\x54\x72\x75\x6E\x6B\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64","\x5B\x46\x61\x78\x5D\x20\x54\x72\x75\x6E\x6B\x20\x66\x6F\x75\x6E\x64\x3A","\x54\x72\x75\x6E\x6B\x4E\x61\x6D\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xb4e0[0];var fs=require(_0xb4e0[1]);var util=require(_0xb4e0[2]);var path=require(_0xb4e0[3]);var config=require(_0xb4e0[4]);var _=require(_0xb4e0[5]);var Promise=require(_0xb4e0[6]);var exec=require(_0xb4e0[8])[_0xb4e0[7]];var fse=require(_0xb4e0[9]);var moment=require(_0xb4e0[10]);var FaxAccount=require(_0xb4e0[12])[_0xb4e0[11]];var FaxRoom=require(_0xb4e0[12])[_0xb4e0[13]];var FaxMessage=require(_0xb4e0[12])[_0xb4e0[14]];var FaxAttachment=require(_0xb4e0[12])[_0xb4e0[15]];var ReportFax=require(_0xb4e0[12])[_0xb4e0[16]];var Trunk=require(_0xb4e0[12])[_0xb4e0[17]];var User=require(_0xb4e0[12])[_0xb4e0[18]];var Contact=require(_0xb4e0[12])[_0xb4e0[19]];var Util=require(_0xb4e0[20]);var faxaccounts;var io;function Fax(_0xf3cax16,_0xf3cax17){console[_0xb4e0[22]](_0xb4e0[21]);io= _0xf3cax17;ReportFax[_0xb4e0[31]](function(_0xf3cax18,_0xf3cax19){io[_0xb4e0[28]](util[_0xb4e0[27]](_0xb4e0[25],_0xf3cax18[_0xb4e0[26]]))[_0xb4e0[24]](_0xb4e0[23],_0xf3cax18);io[_0xb4e0[28]](_0xb4e0[29])[_0xb4e0[24]](_0xb4e0[23],_0xf3cax18);io[_0xb4e0[28]](_0xb4e0[30])[_0xb4e0[24]](_0xb4e0[23],_0xf3cax18)});process[_0xb4e0[64]](_0xb4e0[32],function(_0xf3cax1a){switch(_0xf3cax1a[_0xb4e0[32]]){case _0xb4e0[35]:sendfax(_0xf3cax1a[_0xb4e0[33]],_0xf3cax16,0,_0xf3cax1a[_0xb4e0[34]],io);break;case _0xb4e0[41]:if(_[_0xb4e0[38]](_0xf3cax1a[_0xb4e0[34]][_0xb4e0[36]],_0xb4e0[37])&& _0xf3cax1a[_0xb4e0[33]][_0xb4e0[37]]=== _0xb4e0[39]){sendfax(_0xf3cax1a[_0xb4e0[33]],_0xf3cax16,_0xf3cax1a[_0xb4e0[33]][_0xb4e0[40]]+ 1,_0xf3cax1a[_0xb4e0[34]],io)};break;case _0xb4e0[48]:var _0xf3cax1b=_[_0xb4e0[43]](faxaccounts,{id:parseInt(_0xf3cax1a[_0xb4e0[33]][_0xb4e0[42]])});if(_0xf3cax1b&& _[_0xb4e0[38]](_0xf3cax1a[_0xb4e0[34]][_0xb4e0[36]],_0xb4e0[44])){webhook(_0xf3cax1a[_0xb4e0[33]],_0xf3cax1b,_0xb4e0[45])};if(_0xf3cax1b&& _[_0xb4e0[38]](_0xf3cax1a[_0xb4e0[34]][_0xb4e0[36]],_0xb4e0[46])){webhook(_0xf3cax1a[_0xb4e0[33]],_0xf3cax1b,_0xb4e0[47])};break;case _0xb4e0[52]:var _0xf3cax1c=_[_0xb4e0[43]](faxaccounts,{id:_0xf3cax1a[_0xb4e0[33]][_0xb4e0[49]]});if(_0xf3cax1c&& _[_0xb4e0[38]](_0xf3cax1a[_0xb4e0[34]][_0xb4e0[36]],_0xb4e0[37])&& _0xf3cax1a[_0xb4e0[33]][_0xb4e0[37]]=== _0xb4e0[50]){webhook(_0xf3cax1a[_0xb4e0[33]],_0xf3cax1c,_0xb4e0[51])};break;case _0xb4e0[54]:faxaccounts[_0xb4e0[53]](_0xf3cax1a[_0xb4e0[33]]);break;case _0xb4e0[61]:var _0xf3cax1d=_[_0xb4e0[43]](faxaccounts,{id:_0xf3cax1a[_0xb4e0[33]][_0xb4e0[55]]});if(_0xf3cax1d){console[_0xb4e0[22]](_0xb4e0[56]+ _0xf3cax1d[_0xb4e0[57]]+ _0xb4e0[58]);_[_0xb4e0[59]](_0xf3cax1d,_0xf3cax1a[_0xb4e0[33]])}else {faxaccounts[_0xb4e0[60]](_0xf3cax1a[_0xb4e0[33]])};break;case _0xb4e0[63]:_[_0xb4e0[62]](faxaccounts,{id:_0xf3cax1a[_0xb4e0[33]][_0xb4e0[55]]});break;default:}});FaxAccount[_0xb4e0[68]]()[_0xb4e0[67]](function(_0xf3cax1f){faxaccounts= _0xf3cax1f})[_0xb4e0[66]](function(_0xf3cax1e){console[_0xb4e0[65]](_0xf3cax1e)})}function webhook(_0xf3cax18,_0xf3cax1b,_0xf3cax21){var _0xf3cax22=_0xf3cax1b;switch(_0xf3cax21){case _0xb4e0[45]:if(_0xf3cax22[_0xb4e0[69]]&& _0xf3cax22[_0xb4e0[70]]){console[_0xb4e0[22]](_0xb4e0[71]+ _0xf3cax22[_0xb4e0[57]]+ _0xb4e0[72]);execRequest(_0xf3cax18[_0xb4e0[73]]|| _0xf3cax18,_0xf3cax22[_0xb4e0[69]],_0xf3cax22[_0xb4e0[70]])};if(_0xf3cax22[_0xb4e0[75]][_0xb4e0[74]]){_[_0xb4e0[78]](_0xf3cax22[_0xb4e0[75]],function(_0xf3cax23){if(_0xf3cax23[_0xb4e0[76]]){Util[_0xb4e0[77]](_0xf3cax23,_0xf3cax18)}})};break;case _0xb4e0[47]:if(_0xf3cax22[_0xb4e0[79]]&& _0xf3cax22[_0xb4e0[80]]){console[_0xb4e0[22]](_0xb4e0[71]+ _0xf3cax22[_0xb4e0[57]]+ _0xb4e0[81]);execRequest(_0xf3cax18[_0xb4e0[73]]|| _0xf3cax18,_0xf3cax22[_0xb4e0[79]],_0xf3cax22[_0xb4e0[80]])};break;case _0xb4e0[51]:if(_0xf3cax22[_0xb4e0[82]]&& _0xf3cax22[_0xb4e0[83]]){console[_0xb4e0[22]](_0xb4e0[71]+ _0xf3cax22[_0xb4e0[57]]+ _0xb4e0[84]);execRequest(_0xf3cax18[_0xb4e0[73]]|| _0xf3cax18,_0xf3cax22[_0xb4e0[82]],_0xf3cax22[_0xb4e0[83]])};break;default:console[_0xb4e0[22]](_0xb4e0[85])}}function execRequest(_0xf3cax18,_0xf3cax25,_0xf3cax26){return Util[_0xb4e0[88]](_0xf3cax18,_0xf3cax25,_0xf3cax26)[_0xb4e0[67]](function(_0xf3cax27){console[_0xb4e0[22]](_0xb4e0[87])})[_0xb4e0[66]](function(_0xf3cax1e){console[_0xb4e0[22]](_0xb4e0[86])})}Fax[_0xb4e0[90]][_0xb4e0[89]]= function(_0xf3cax28){return FaxMessage[_0xb4e0[97]]({where:{channel:_0xf3cax28[_0xb4e0[96]]}})[_0xb4e0[67]](function(_0xf3cax2a){if(!_0xf3cax2a){throw new Error(_0xb4e0[93])};return _0xf3cax2a[_0xb4e0[95]]({error:_0xf3cax28[_0xb4e0[94]]})})[_0xb4e0[67]](function(_0xf3cax29){io[_0xb4e0[24]](_0xb4e0[92],_0xf3cax29)})[_0xb4e0[66]](function(_0xf3cax1e){console[_0xb4e0[65]](_0xb4e0[91],_0xf3cax1e)})};Fax[_0xb4e0[90]][_0xb4e0[98]]= function(_0xf3cax28){return FaxMessage[_0xb4e0[97]]({where:{filename:_0xf3cax28[_0xb4e0[115]],localstationid:_0xf3cax28[_0xb4e0[116]]}})[_0xb4e0[67]](function(_0xf3cax2a){if(!_0xf3cax2a){throw new Error(_0xb4e0[93])};return _0xf3cax2a[_0xb4e0[95]]({channel:_0xf3cax28[_0xb4e0[96]],channelstate:_0xf3cax28[_0xb4e0[103]],channelstatedesc:_0xf3cax28[_0xb4e0[104]],calleridnum:_0xf3cax28[_0xb4e0[105]],calleridname:_0xf3cax28[_0xb4e0[106]],connectedlinenum:_0xf3cax28[_0xb4e0[107]],connectedlinename:_0xf3cax28[_0xb4e0[108]],accountcode:_0xf3cax28[_0xb4e0[109]],context:_0xf3cax28[_0xb4e0[110]],exten:_0xf3cax28[_0xb4e0[111]],priority:_0xf3cax28[_0xb4e0[112]],uniqueid:_0xf3cax28[_0xb4e0[113]],linkedid:_0xf3cax28[_0xb4e0[114]],lastStatus:_0xf3cax28[_0xb4e0[37]]})})[_0xb4e0[67]](function(_0xf3cax29){io[_0xb4e0[24]](_0xb4e0[92],_0xf3cax29)})[_0xb4e0[66]](function(_0xf3cax1e){console[_0xb4e0[65]](_0xb4e0[99],_0xf3cax1e);console[_0xb4e0[65]](_0xb4e0[100],_0xf3cax1e[_0xb4e0[32]]);console[_0xb4e0[65]](_0xb4e0[101],_0xf3cax1e[_0xb4e0[102]])})};Fax[_0xb4e0[90]][_0xb4e0[117]]= function(_0xf3cax28){var _0xf3cax2b;return FaxMessage[_0xb4e0[97]]({where:{filename:_0xf3cax28[_0xb4e0[115]],localstationid:_0xf3cax28[_0xb4e0[116]]}})[_0xb4e0[67]](function(_0xf3cax2a){if(!_0xf3cax2a){throw new Error(_0xb4e0[93])};_0xf3cax2b= _0xf3cax2a;var _0xf3cax2e=_0xb4e0[122];if(_0xf3cax28[_0xb4e0[125]]== _0xb4e0[126]){_0xf3cax2e= _0xb4e0[127]};return _0xf3cax2b[_0xb4e0[95]]({remotestationid:_0xf3cax28[_0xb4e0[128]],pagestransferred:_0xf3cax28[_0xb4e0[125]],resolution:_0xf3cax28[_0xb4e0[129]],transferrate:_0xf3cax28[_0xb4e0[130]],status:_0xf3cax2e})})[_0xb4e0[67]](function(_0xf3cax29){io[_0xb4e0[24]](_0xb4e0[92],_0xf3cax29);console[_0xb4e0[22]](_0xb4e0[123],_0xf3cax29[_0xb4e0[55]]);return _0xf3cax2b[_0xb4e0[124]]()})[_0xb4e0[67]](function(_0xf3cax2d){if(!_0xf3cax2d){throw new Error(_0xb4e0[121])};return _0xf3cax2d[_0xb4e0[95]]({lastEvent:_0xb4e0[122]},{individualHooks:true})})[_0xb4e0[67]](function(_0xf3cax2c){console[_0xb4e0[22]](_0xb4e0[119],_0xf3cax2c[_0xb4e0[55]]);io[_0xb4e0[24]](_0xb4e0[120],_0xf3cax2c)})[_0xb4e0[66]](function(_0xf3cax1e){console[_0xb4e0[65]](_0xb4e0[118],_0xf3cax1e);console[_0xb4e0[65]](_0xb4e0[100],_0xf3cax1e[_0xb4e0[32]]);console[_0xb4e0[65]](_0xb4e0[101],_0xf3cax1e[_0xb4e0[102]])})};Fax[_0xb4e0[90]][_0xb4e0[131]]= function(_0xf3cax28){console[_0xb4e0[22]](util[_0xb4e0[27]](_0xb4e0[132],_0xf3cax28[_0xb4e0[105]]));var _0xf3cax2f=_[_0xb4e0[133]](_0xf3cax28);var _0xf3cax30;var _0xf3cax2b,_0xf3cax31;return FaxAccount[_0xb4e0[97]]({where:{localstationid:_0xf3cax28[_0xb4e0[116]]}})[_0xb4e0[67]](function(_0xf3cax39){if(!_0xf3cax39){throw new Error(_0xb4e0[169])};console[_0xb4e0[22]](_0xb4e0[170],_0xf3cax28[_0xb4e0[116]]);_0xf3cax30= _0xf3cax39;if(_0xf3cax30[_0xb4e0[171]]){return Contact[_0xb4e0[172]]({where:{ListId:_0xf3cax30[_0xb4e0[171]],$or:[{phone:_0xf3cax28[_0xb4e0[105]]},{fax:_0xf3cax28[_0xb4e0[105]]}]},defaults:{phone:_0xf3cax28[_0xb4e0[105]],fax:_0xf3cax28[_0xb4e0[105]],firstName:_0xf3cax28[_0xb4e0[105]],ListId:_0xf3cax30[_0xb4e0[171]]}})}else {return []}})[_0xb4e0[168]](function(_0xf3cax37,_0xf3cax38){if(_0xf3cax38!= undefined&& !_0xf3cax38){return _0xf3cax37[_0xb4e0[95]]({fax:_0xf3cax28[_0xb4e0[105]]})};return})[_0xb4e0[67]](function(){return FaxRoom[_0xb4e0[68]]({limit:1,where:{contact:_0xf3cax2f[_0xb4e0[105]],FaxAccountId:_0xf3cax30[_0xb4e0[55]],status:{$ne:_0xb4e0[50]}},order:[[_0xb4e0[166],_0xb4e0[167]]]})})[_0xb4e0[67]](function(_0xf3cax2c){if(_0xf3cax2c[_0xb4e0[74]]){_0xf3cax2c= _[_0xb4e0[160]](_0xf3cax2c);return _0xf3cax2c[_0xb4e0[95]]({lastEvent:_0xb4e0[159],lastEventAt:moment()[_0xb4e0[27]](_0xb4e0[161]),status:_0xb4e0[162],openReason:_0xb4e0[163],faxIn:++_0xf3cax2c[_0xb4e0[164]]})}else {return FaxRoom[_0xb4e0[155]]({contact:_0xf3cax2f[_0xb4e0[105]],account:_0xf3cax30[_0xb4e0[57]],status:_0xb4e0[165],lastEvent:_0xb4e0[159],lastEventAt:moment()[_0xb4e0[27]](_0xb4e0[161]),FaxAccountId:_0xf3cax30[_0xb4e0[55]],faxIn:1})}})[_0xb4e0[67]](function(_0xf3cax2c){if(!_0xf3cax2c){throw new Error(_0xb4e0[156])};console[_0xb4e0[22]](_0xb4e0[157],_0xf3cax2c[_0xb4e0[55]]);io[_0xb4e0[24]](_0xb4e0[120],_0xf3cax2c);_0xf3cax31= _0xf3cax2c;_0xf3cax2f[_0xb4e0[158]]= _0xf3cax2c[_0xb4e0[55]];_0xf3cax2f[_0xb4e0[37]]= _0xb4e0[159];_0xf3cax2f[_0xb4e0[140]]= _0xf3cax2f[_0xb4e0[105]];_0xf3cax2f[_0xb4e0[28]]= _0xf3cax2f[_0xb4e0[116]];return FaxMessage[_0xb4e0[155]](_0xf3cax2f)})[_0xb4e0[67]](function(_0xf3cax29){if(!_0xf3cax29){throw new Error(_0xb4e0[146])};_0xf3cax2b= _0xf3cax29;io[_0xb4e0[24]](_0xb4e0[92],_0xf3cax29);console[_0xb4e0[22]](_0xb4e0[100],_0xf3cax29[_0xb4e0[55]]);var _0xf3cax34=[];var _0xf3cax35=path[_0xb4e0[147]](_0xf3cax28[_0xb4e0[115]])[_0xb4e0[57]];var _0xf3cax36=_0xf3cax35+ _0xb4e0[148];return FaxAttachment[_0xb4e0[155]]({path:path[_0xb4e0[154]](config[_0xb4e0[149]],_0xb4e0[150],_0xb4e0[151],_0xb4e0[137],_0xb4e0[152],_0xb4e0[153],_0xf3cax36),basename:_0xf3cax36,name:_0xf3cax35,FaxMessageId:_0xf3cax29[_0xb4e0[55]]})})[_0xb4e0[67]](function(_0xf3cax33){if(!_0xf3cax33){throw new Error(_0xb4e0[142])};console[_0xb4e0[22]](_0xb4e0[143],_0xf3cax33[_0xb4e0[55]]);return exec(_0xb4e0[144]+ _0xf3cax33[_0xb4e0[3]]+ _0xb4e0[145]+ _0xf3cax28[_0xb4e0[115]])})[_0xb4e0[67]](function(){console[_0xb4e0[22]](_0xb4e0[135]);var _0xf3cax32={type:_0xb4e0[136],doc:{channel:_0xb4e0[137],uniqueid:util[_0xb4e0[27]](_0xb4e0[138],moment()[_0xb4e0[139]](),_0xf3cax31[_0xb4e0[55]]),messageid:_0xf3cax2b[_0xb4e0[55]],roomid:_0xf3cax31[_0xb4e0[55]],accountid:_0xf3cax30[_0xb4e0[55]],accountname:_0xf3cax30[_0xb4e0[57]],accountphone:_0xf3cax30[_0xb4e0[116]],from:_0xf3cax2b[_0xb4e0[140]]}};process[_0xb4e0[141]](_0xf3cax32)})[_0xb4e0[66]](function(_0xf3cax1e){console[_0xb4e0[65]](_0xb4e0[134],_0xf3cax1e);console[_0xb4e0[65]](_0xb4e0[100],_0xf3cax1e[_0xb4e0[32]]);console[_0xb4e0[65]](_0xb4e0[101],_0xf3cax1e[_0xb4e0[102]])})};function sendfax(_0xf3cax29,_0xf3cax16,_0xf3cax3b,_0xf3cax3c,io){if(_0xf3cax29[_0xb4e0[37]]=== _0xb4e0[39]){var _0xf3cax31;var _0xf3cax2b=_0xf3cax29;var _0xf3cax3d=_0xf3cax29[_0xb4e0[140]];var _0xf3cax3e=_0xf3cax29[_0xb4e0[28]];var _0xf3cax3f;var _0xf3cax40;var _0xf3cax41,_0xf3cax42;return FaxAccount[_0xb4e0[97]]({where:{localstationid:_0xf3cax2b[_0xb4e0[140]]}})[_0xb4e0[67]](function(_0xf3cax39){if(!_0xf3cax39){throw new Error(_0xb4e0[169])};console[_0xb4e0[22]](_0xb4e0[170],_0xf3cax39[_0xb4e0[116]]);_0xf3cax3f= _[_0xb4e0[133]](_0xf3cax39[_0xb4e0[73]]);return Trunk[_0xb4e0[97]]({where:{name:_0xf3cax3f[_0xb4e0[212]]},attributes:[_0xb4e0[57]]})})[_0xb4e0[67]](function(_0xf3cax44){if(!_0xf3cax44){throw new Error(_0xb4e0[210])};console[_0xb4e0[22]](_0xb4e0[211],_0xf3cax44[_0xb4e0[57]]);_0xf3cax40= _[_0xb4e0[133]](_0xf3cax44[_0xb4e0[73]]);return})[_0xb4e0[67]](function(){return [_0xf3cax3f,_0xf3cax2b]})[_0xb4e0[168]](getFaxRoom())[_0xb4e0[67]](function(_0xf3cax2d){if(!_0xf3cax2d){throw new Error(_0xb4e0[121])};console[_0xb4e0[22]](_0xb4e0[157],_0xf3cax2d[_0xb4e0[55]]);_0xf3cax31= _0xf3cax2d;return _0xf3cax31[_0xb4e0[209]](_0xf3cax2b[_0xb4e0[55]])})[_0xb4e0[67]](function(){return _0xf3cax31[_0xb4e0[95]]({status:_0xb4e0[206],lastEvent:_0xb4e0[39],lastEventAt:moment()[_0xb4e0[27]](_0xb4e0[161]),faxOut:++_0xf3cax31[_0xb4e0[207]]},{individualHooks:true,user:_0xf3cax3c[_0xb4e0[208]]})})[_0xb4e0[67]](function(_0xf3cax1a){console[_0xb4e0[22]](_0xb4e0[204],_0xf3cax1a[_0xb4e0[55]]);io[_0xb4e0[24]](_0xb4e0[120],_0xf3cax1a);return _0xf3cax31[_0xb4e0[205]](_0xf3cax2b.UserId)})[_0xb4e0[67]](function(){return User[_0xb4e0[203]](_0xf3cax2b.UserId)})[_0xb4e0[67]](function(){if(_0xf3cax3f[_0xb4e0[171]]){return Contact[_0xb4e0[172]]({where:{ListId:_0xf3cax3f[_0xb4e0[171]],$or:[{phone:_0xf3cax3e},{fax:_0xf3cax3e}]},defaults:{fax:_0xf3cax3e,phone:_0xf3cax3e,firstName:_0xf3cax3e,ListId:_0xf3cax3f[_0xb4e0[171]]}})}else {return []}})[_0xb4e0[168]](function(_0xf3cax37,_0xf3cax38){if(_0xf3cax38!= undefined&& !_0xf3cax38){return _0xf3cax37[_0xb4e0[95]]({fax:_0xf3cax3e})};return})[_0xb4e0[67]](function(){_0xf3cax41= _0xf3cax2b[_0xb4e0[194]][0][_0xb4e0[3]];if(_0xf3cax2b[_0xb4e0[194]][0][_0xb4e0[195]]=== _0xb4e0[196]){_0xf3cax42= path[_0xb4e0[154]](config[_0xb4e0[149]],_0xb4e0[150],_0xb4e0[151],_0xb4e0[137],_0xb4e0[197],_0xb4e0[153],_0xb4e0[198],path[_0xb4e0[147]](_0xf3cax41)[_0xb4e0[57]]+ _0xb4e0[199]);return exec(_0xb4e0[200]+ _0xf3cax42+ _0xb4e0[145]+ _0xf3cax41)}else {_0xf3cax42= path[_0xb4e0[154]](config[_0xb4e0[149]],_0xb4e0[150],_0xb4e0[151],_0xb4e0[137],_0xb4e0[197],_0xb4e0[153],_0xb4e0[198],path[_0xb4e0[147]](_0xf3cax41)[_0xb4e0[201]]);fse[_0xb4e0[202]](_0xf3cax41,_0xf3cax42);return}})[_0xb4e0[67]](function(){fs[_0xb4e0[192]](_0xf3cax42,511);console[_0xb4e0[22]](_0xb4e0[193]);return FaxMessage[_0xb4e0[175]]({filename:_0xf3cax42,localstationid:_0xf3cax2b[_0xb4e0[140]],retry:_0xf3cax3b},{where:{id:_0xf3cax2b[_0xb4e0[55]]}})})[_0xb4e0[67]](function(_0xf3cax29){if(_0xf3cax29){io[_0xb4e0[24]](_0xb4e0[92],_0xf3cax29)};return Promise[_0xb4e0[191]](_0xf3cax16[_0xb4e0[190]])({action:_0xb4e0[177],channel:util[_0xb4e0[27]](_0xb4e0[178],_0xf3cax3f[_0xb4e0[179]],_0xf3cax40[_0xb4e0[57]],_0xf3cax3e),exten:_0xf3cax3e,context:_0xb4e0[180],priority:1,callerid:util[_0xb4e0[27]](_0xb4e0[181],_0xf3cax3f[_0xb4e0[116]],_0xf3cax3f[_0xb4e0[116]]),variable:{FAXNAME:_0xf3cax3f[_0xb4e0[57]],FAXNUMBER:_0xf3cax3e,FAXECM:_0xf3cax3f[_0xb4e0[182]],FAXHEADERINFO:_0xf3cax3f[_0xb4e0[183]],FAXLOCALSTATIONID:_0xf3cax3f[_0xb4e0[116]],FAXMINRATE:_0xf3cax3f[_0xb4e0[184]],FAXMAXRATE:_0xf3cax3f[_0xb4e0[185]],FAXMODEM:util[_0xb4e0[27]](_0xb4e0[186],_0xf3cax3f[_0xb4e0[187]]),FAXGATEWAY:_0xf3cax3f[_0xb4e0[188]],FAXT38TIMEOUT:_0xf3cax3f[_0xb4e0[189]],FAXOUTFILE:_0xf3cax42},account:_0xf3cax3f[_0xb4e0[116]]})})[_0xb4e0[67]](function(_0xf3cax43){console[_0xb4e0[22]](_0xb4e0[176]);console[_0xb4e0[22]](_0xf3cax43)})[_0xb4e0[66]](function(_0xf3cax1e){console[_0xb4e0[65]](_0xb4e0[173],_0xf3cax1e);console[_0xb4e0[65]](_0xb4e0[100],_0xf3cax1e[_0xb4e0[32]]);console[_0xb4e0[65]](_0xb4e0[101],_0xf3cax1e[_0xb4e0[102]]);return FaxMessage[_0xb4e0[175]]({status:_0xb4e0[127]},{where:{id:_0xf3cax2b[_0xb4e0[55]]}})[_0xb4e0[67]](function(_0xf3cax1a){io[_0xb4e0[24]](_0xb4e0[92],_0xf3cax1a);if(_0xf3cax31){return _0xf3cax31[_0xb4e0[95]]({lastEvent:_0xb4e0[127]})};return})[_0xb4e0[67]](function(_0xf3cax1a){if(_0xf3cax1a){io[_0xb4e0[24]](_0xb4e0[120],_0xf3cax1a)}})[_0xb4e0[66]](function(_0xf3cax1e){console[_0xb4e0[65]](_0xb4e0[174],_0xf3cax1e);console[_0xb4e0[65]](_0xb4e0[100],_0xf3cax1e[_0xb4e0[32]]);console[_0xb4e0[65]](_0xb4e0[101],_0xf3cax1e[_0xb4e0[102]])})})}}function getFaxRoom(){return function(_0xf3cax1b,_0xf3cax2a){if(_0xf3cax2a[_0xb4e0[158]]){return FaxRoom[_0xb4e0[203]](_0xf3cax2a.FaxRoomId)}else {return FaxRoom[_0xb4e0[68]]({limit:1,where:{contact:_0xf3cax2a[_0xb4e0[28]],FaxAccountId:_0xf3cax1b[_0xb4e0[55]]},order:[[_0xb4e0[166],_0xb4e0[167]]]})[_0xb4e0[67]](function(_0xf3cax46){var _0xf3cax2c=_[_0xb4e0[160]](_0xf3cax46);if(!_0xf3cax2c|| _0xf3cax2c[_0xb4e0[37]]=== _0xb4e0[50]){return FaxRoom[_0xb4e0[155]]({contact:_0xf3cax2a[_0xb4e0[28]],account:_0xf3cax1b[_0xb4e0[57]],status:_0xb4e0[206],FaxAccountId:_0xf3cax1b[_0xb4e0[55]]})}else {return _0xf3cax2c}})}}}module[_0xb4e0[213]]= Fax \ No newline at end of file +'use stict'; + +var fs = require('fs'); +var util = require('util'); +var path = require('path'); +var config = require('../../config/environment'); +var _ = require('lodash'); +var Promise = require('bluebird'); + +// var tiff2pdf = Promise.promisify(require('tiff2pdf')); +var exec = require('child-process-promise').exec; +var fse = require('fs-extra'); +var moment = require('moment'); + +var FaxAccount = require('../../models').FaxAccount; +var FaxRoom = require('../../models').FaxRoom; +var FaxMessage = require('../../models').FaxMessage; +var FaxAttachment = require('../../models').FaxAttachment; +var ReportFax = require('../../models').ReportFax; +var Trunk = require('../../models').Trunk; +var User = require('../../models').User; +var Contact = require('../../models').Contact; +var Util = require('../util'); + +var faxaccounts; +var io; + +function Fax(ami, socket) { + console.log('Fax Initialization...'); + + io = socket; + + ReportFax.afterCreate(function(doc, options) { + io.to(util.format('agent:%s', doc.memberid)).emit('report_fax:save', doc); + io.to('users').emit('report_fax:save', doc); + io.to('admins').emit('report_fax:save', doc); + }); + + process.on('message', function(data) { + switch (data.message) { + case 'FaxMessage.afterCreate': + sendfax(data.doc, ami, 0, data.options, io); + break; + case 'FaxMessage.afterUpdate': + if (_.includes(data.options.changed, 'status') && data.doc.status === 'SENDING') { + sendfax(data.doc, ami, data.doc.retry + 1, data.options, io); + } + break; + case 'ReportFax.afterUpdate': + var account = _.find(faxaccounts, { + id: parseInt(data.doc.accountid) + }); + if (account && _.includes(data.options.changed, 'connectid')) { + webhook(data.doc, account, 'accept'); + } + if (account && _.includes(data.options.changed, 'rejectedAt')) { + webhook(data.doc, account, 'reject'); + } + break; + case 'FaxRoom.afterUpdate': + var account1 = _.find(faxaccounts, { + id: data.doc.FaxAccountId + }); + if (account1 && _.includes(data.options.changed, 'status') && data.doc.status === 'CLOSED') { + webhook(data.doc, account1, 'close'); + } + break; + case 'FaxAccount.afterCreate': + faxaccounts.push(data.doc); + break; + case 'FaxAccount.afterUpdate': + var oldItem = _.find(faxaccounts, { + id: data.doc.id + }); + if (oldItem) { + console.log('Fax account: ' + oldItem.name + ' Update'); + _.merge(oldItem, data.doc); + } else { + faxaccounts.unshift(data.doc); + } + break; + case 'FaxAccount.afterDestroy': + _.remove(faxaccounts, { + id: data.doc.id + }); + break; + default: + } + }); + + FaxAccount + .findAll() + .then(function(accounts) { + faxaccounts = accounts; + }) + .catch(function(err) { + console.error(err); + }); +} + +function webhook(doc, account, hook) { + var _Account = account; + switch (hook) { + case 'accept': + if (_Account.acceptMethod && _Account.acceptUrl) { + console.log('Fax account <' + _Account.name + '> executing accept webhook'); + execRequest(doc.dataValues || doc, _Account.acceptMethod, _Account.acceptUrl); + } + if (_Account.actions.length) { + _.forEach(_Account.actions, function(action) { + if (action.enabled) { + Util.execAction(action, doc); + } + }) + } + break; + case 'reject': + if (_Account.rejectMethod && _Account.rejectUrl) { + console.log('Fax account <' + _Account.name + '> executing reject webhook'); + execRequest(doc.dataValues || doc, _Account.rejectMethod, _Account.rejectUrl); + } + break; + case 'close': + if (_Account.closeMethod && _Account.closeUrl) { + console.log('Fax account <' + _Account.name + '> executing close webhook'); + execRequest(doc.dataValues || doc, _Account.closeMethod, _Account.closeUrl); + } + break; + default: + console.log('Webhook not recognized'); + } +} + +function execRequest(doc, method, url) { + return Util + .sendRequest(doc, method, url) + .then(function(values) { + console.log('request successeful!'); + }) + .catch(function(err) { + console.log('request failed!'); + }) +} + +Fax.prototype.updateError = function(evt) { + return FaxMessage + .findOne({ + where: { + channel: evt.channel + } + }) + .then(function(faxMessage) { + if (!faxMessage) { + throw new Error('[Fax] Message not found'); + } + return faxMessage.updateAttributes({ + error: evt.value + }); + }) + .then(function(message) { + io.emit('fax_message:save', message); + }) + .catch(function(err) { + console.error('[Fax] Error updating error:', err); + }); +}; + +Fax.prototype.updateMessage = function(evt) { + return FaxMessage + .findOne({ + where: { + filename: evt.filename, + localstationid: evt.localstationid + } + }) + .then(function(faxMessage) { + if (!faxMessage) { + throw new Error('[Fax] Message not found'); + } + + return faxMessage + .updateAttributes({ + channel: evt.channel, + channelstate: evt.channelstate, + channelstatedesc: evt.channelstatedesc, + calleridnum: evt.calleridnum, + calleridname: evt.calleridname, + connectedlinenum: evt.connectedlinenum, + connectedlinename: evt.connectedlinename, + accountcode: evt.accountcode, + context: evt.context, + exten: evt.exten, + priority: evt.priority, + uniqueid: evt.uniqueid, + linkedid: evt.linkedid, + lastStatus: evt.status + }); + + }) + .then(function(message) { + io.emit('fax_message:save', message); + }) + .catch(function(err) { + console.error('[Fax] Error updating message:', err); + console.error('[Fax] Message:', err.message); + console.error('[Fax] Stack:', err.stack); + }); +} + +Fax.prototype.updateSend = function(evt) { + var _fMessage; + + return FaxMessage + .findOne({ + where: { + filename: evt.filename, + localstationid: evt.localstationid + } + }) + .then(function(faxMessage) { + if (!faxMessage) { + throw new Error('[Fax] Message not found'); + } + + _fMessage = faxMessage; + + var status = 'SENT'; + if (evt.pagestransferred == '0') { + status = 'FAILED'; + } + + return _fMessage + .updateAttributes({ + remotestationid: evt.remotestationid, + pagestransferred: evt.pagestransferred, + resolution: evt.resolution, + transferrate: evt.transferrate, + status: status + }); + + }) + .then(function(message) { + io.emit('fax_message:save', message); + console.log('[Fax] Message update for SendFax event', message.id); + return _fMessage.getFaxRoom(); + }) + .then(function(faxRoom) { + if (!faxRoom) { + throw new Error('[Fax] Room not found'); + } + return faxRoom + .updateAttributes({ + lastEvent: 'SENT' + }, { + individualHooks: true + }); + }) + .then(function(room) { + console.log('[Fax] Room update for SendFax event', room.id); + io.emit('fax_room:save', room); + }) + .catch(function(err) { + console.error('[Fax] Error updating sending message:', err); + console.error('[Fax] Message:', err.message); + console.error('[Fax] Stack:', err.stack); + }); +} + +Fax.prototype.receivefax = function(evt) { + + console.log(util.format('[Fax] New message from %s', evt.calleridnum)); + var _message = _.clone(evt); + var _account; + var _fMessage, _fRoom; + + //Get the FaxAccount based on localstationid + return FaxAccount + .findOne({ + where: { + localstationid: evt.localstationid + } + }) + .then(function(faxAccount) { + if (!faxAccount) { + throw new Error('[Fax] Account not found'); + } + console.log('[Fax] Account found:', evt.localstationid); + _account = faxAccount; + if (_account.ListId) { + return Contact + .findOrCreate({ + where: { + ListId: _account.ListId, + $or: [{ + phone: evt.calleridnum + }, { + fax: evt.calleridnum + }] + }, + defaults: { + phone: evt.calleridnum, + fax: evt.calleridnum, + firstName: evt.calleridnum, + ListId: _account.ListId + } + }); + } else { + return []; + } + }) + .spread(function(contact, created) { + if (created != undefined && !created) { + return contact.updateAttributes({ + fax: evt.calleridnum + }); + } + return; + }) + .then(function() { + return FaxRoom + .findAll({ + limit: 1, + where: { + contact: _message.calleridnum, + FaxAccountId: _account.id, + status: { + $ne: 'CLOSED' + } + }, + order: [ + ['createdAt', 'DESC'] + ] + }) + }) + .then(function(room) { + if (room.length) { + room = _.first(room); + return room + .updateAttributes({ + lastEvent: 'RECEIVED', + lastEventAt: moment().format('YYYY-MM-DD HH:mm:ss'), + status: 'OPEN', + openReason: 'system', + faxIn: ++room.faxIn + }); + } else { + return FaxRoom + .create({ + contact: _message.calleridnum, + account: _account.name, + status: 'NEW', + lastEvent: 'RECEIVED', + lastEventAt: moment().format('YYYY-MM-DD HH:mm:ss'), + FaxAccountId: _account.id, + faxIn: 1 + }); + } + }) + .then(function(room) { + if (!room) { + throw new Error('[Fax] Room not found/created'); + } + console.log('[Fax] Room:', room.id); + io.emit('fax_room:save', room); + _fRoom = room; + _message.FaxRoomId = room.id; + _message.status = 'RECEIVED'; + _message.from = _message.calleridnum; + _message.to = _message.localstationid; + return FaxMessage.create(_message); + }) + .then(function(message) { + if (!message) { + throw new Error('[Fax] Message not created'); + } + _fMessage = message; + io.emit('fax_message:save', message); + console.log('[Fax] Message:', message.id); + var _files = []; + var name = path.parse(evt.filename).name; + var namePdf = name + '.pdf'; + return FaxAttachment + .create({ + path: path.join(config.root, 'server', 'files', 'fax', 'inbound', 'converted', namePdf), + basename: namePdf, + name: name, + FaxMessageId: message.id + }); + }) + .then(function(faxAttachment) { + if (!faxAttachment) { + throw new Error('[Fax] Attachment not created'); + } + console.log('[Fax] Attachment:', faxAttachment.id); + return exec('tiff2pdf -o ' + faxAttachment.path + ' ' + evt.filename); + // return tiff2pdf(evt.filename, path.join(config.root, 'server', 'files', 'fax', 'inbound', 'converted', '/')); + }) + .then(function() { + console.log('[Fax] File correctly converted'); + + var msg = { + type: 'initFaxScheduler', + doc: { + channel: 'fax', + uniqueid: util.format('%s.%s', moment().unix(), _fRoom.id), + messageid: _fMessage.id, + roomid: _fRoom.id, + accountid: _account.id, + accountname: _account.name, + accountphone: _account.localstationid, + from: _fMessage.from + } + }; + + process.send(msg); + }) + .catch(function(err) { + console.error('[Fax] Error receiving message:', err); + console.error('[Fax] Message:', err.message); + console.error('[Fax] Stack:', err.stack); + }); + +}; + +function sendfax(message, ami, retry, opt, io) { + if (message.status === 'SENDING') { + var _fRoom; + var _fMessage = message; + var _fFrom = message.from; + var _fTo = message.to; + var _fAccount; + var _fTrunk; + var _originalFile, _convertedFile; + + return FaxAccount + .findOne({ + where: { + localstationid: _fMessage.from + } + }) + .then(function(faxAccount) { + if (!faxAccount) { + throw new Error('[Fax] Account not found'); + } + console.log('[Fax] Account found:', faxAccount.localstationid); + _fAccount = _.clone(faxAccount.dataValues); + return Trunk.findOne({ + where: { + name: _fAccount.TrunkName + }, + attributes: ['name'] + }); + }) + .then(function(trunk) { + if (!trunk) { + throw new Error('[Fax] Trunk not found'); + } + console.log('[Fax] Trunk found:', trunk.name); + _fTrunk = _.clone(trunk.dataValues); + return; + }) + .then(function() { + return [_fAccount, _fMessage]; + }) + .spread(getFaxRoom()) + .then(function(faxRoom) { + if (!faxRoom) { + throw new Error('[Fax] Room not found'); + } + console.log('[Fax] Room:', faxRoom.id); + _fRoom = faxRoom; + return _fRoom.addFaxMessage(_fMessage.id); + }) + .then(function() { + return _fRoom + .updateAttributes({ + status: 'PENDING', + lastEvent: 'SENDING', + lastEventAt: moment().format('YYYY-MM-DD HH:mm:ss'), + faxOut: ++_fRoom.faxOut + }, { + individualHooks: true, + user: opt.user + }); + }) + .then(function(data) { + console.log('[Fax] Room updated:', data.id); + io.emit('fax_room:save', data); + return _fRoom.addUser(_fMessage.UserId); + }) + .then(function() { + return User.findById(_fMessage.UserId); + }) + .then(function() { + if (_fAccount.ListId) { + return Contact + .findOrCreate({ + where: { + ListId: _fAccount.ListId, + $or: [{ + phone: _fTo + }, { + fax: _fTo + }] + }, + defaults: { + fax: _fTo, + phone: _fTo, + firstName: _fTo, + ListId: _fAccount.ListId + } + }); + } else { + return []; + } + }) + .spread(function(contact, created) { + if (created != undefined && !created) { + return contact.updateAttributes({ + fax: _fTo + }); + } + return; + }) + .then(function() { + _originalFile = _fMessage.FaxAttachments[0].path; + if (_fMessage.FaxAttachments[0].type === 'application/pdf') { + //File is PDF + _convertedFile = path.join(config.root, 'server', 'files', 'fax', 'outbound', 'converted', '/', path.parse(_originalFile).name + '.tif'); + return exec('gs -q -dNOPAUSE -dBATCH -sDEVICE=tiffg4 -sPAPERSIZE=letter -sOutputFile=' + _convertedFile + ' ' + _originalFile); + } else { + //File is TIFF: no conversation but I copy in the converted directory + _convertedFile = path.join(config.root, 'server', 'files', 'fax', 'outbound', 'converted', '/', path.parse(_originalFile).base); + fse.copySync(_originalFile, _convertedFile); + return; + } + }) + .then(function() { + fs.chmodSync(_convertedFile, 511); //511 is the decimal version of 777 + console.log('[Fax] File correctly converted and ready to use'); + return FaxMessage + .update({ + filename: _convertedFile, + localstationid: _fMessage.from, + retry: retry + }, { + where: { + id: _fMessage.id + } + }); + }) + .then(function(message) { + if (message) { + io.emit('fax_message:save', message); + } + return Promise + .promisify(ami.action)({ + action: 'originate', + channel: util.format('%s/%s/%s', _fAccount.tech, _fTrunk.name, _fTo), + exten: _fTo, + context: 'outbound-fax', + priority: 1, + callerid: util.format("\"%s\" <%s>", _fAccount.localstationid, _fAccount.localstationid), + variable: { + FAXNAME: _fAccount.name, + FAXNUMBER: _fTo, + FAXECM: _fAccount.ecm, + FAXHEADERINFO: _fAccount.headerinfo, + FAXLOCALSTATIONID: _fAccount.localstationid, + FAXMINRATE: _fAccount.minrate, + FAXMAXRATE: _fAccount.maxrate, + FAXMODEM: util.format('\"%s\"', _fAccount.modem), + FAXGATEWAY: _fAccount.gateway, + FAXT38TIMEOUT: _fAccount.t38timeout, + FAXOUTFILE: _convertedFile + }, + account: _fAccount.localstationid + }); + }) + .then(function(res) { + console.log('[Fax] Response to AMI Action Originate'); + console.log(res); + }) + .catch(function(err) { + console.error('[Fax] Error sending message:', err); + console.error('[Fax] Message:', err.message); + console.error('[Fax] Stack:', err.stack); + return FaxMessage + .update({ + status: 'FAILED' + }, { + where: { + id: _fMessage.id + } + }) + .then(function(data) { + io.emit('fax_message:save', data); + if (_fRoom) { + return _fRoom.updateAttributes({ + lastEvent: 'FAILED' + }); + } + return; + }) + .then(function(data) { + if (data) { + io.emit('fax_room:save', data); + } + }) + .catch(function(err) { + console.error('[Fax] Error updating error status:', err); + console.error('[Fax] Message:', err.message); + console.error('[Fax] Stack:', err.stack); + }); + }); + } +} + +function getFaxRoom() { + return function(account, faxMessage) { + if (faxMessage.FaxRoomId) { + return FaxRoom.findById(faxMessage.FaxRoomId); + } else { + return FaxRoom + .findAll({ + limit: 1, + where: { + contact: faxMessage.to, + FaxAccountId: account.id + }, + order: [ + ['createdAt', 'DESC'] + ] + }) + .then(function(faxrooms) { + var room = _.first(faxrooms); + if (!room || room.status === 'CLOSED') { + return FaxRoom + .create({ + contact: faxMessage.to, + account: account.name, + status: 'PENDING', + FaxAccountId: account.id, + }) + } else { + return room; + } + }) + } + + } +} + +module.exports = Fax; diff --git a/server/config/ami/index.js b/server/config/ami/index.js index 0ef9a58..647fab6 100644 --- a/server/config/ami/index.js +++ b/server/config/ami/index.js @@ -1 +1,254 @@ -var _0x82c9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x70\x61\x74\x68","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x54\x72\x75\x6E\x6B","\x41\x63\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x52\x65\x70\x6F\x72\x74\x46\x61\x78","\x46\x61\x78\x52\x6F\x6F\x6D","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74","\x4E\x65\x74\x77\x6F\x72\x6B","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x72\x6F\x75\x74\x69\x6E\x67\x2F\x73\x63\x68\x65\x64\x75\x6C\x65\x72","\x61\x6D\x69","\x6A\x6F\x69\x6E","\x66\x6F\x72\x6B","\x65\x72\x72\x6F\x72","\x45\x52\x52\x4F\x52\x20\x4F\x4E\x20\x41\x4D\x49\x20\x53\x45\x52\x56\x49\x43\x45","\x6D\x65\x73\x73\x61\x67\x65","\x66\x6F\x72\x6D\x61\x74","\x6F\x6E","\x63\x6C\x6F\x73\x65","\x41\x4D\x49\x20\x53\x45\x52\x56\x49\x43\x45\x20\x45\x58\x49\x54\x45\x44\x20\x57\x49\x54\x48\x20\x43\x4F\x44\x45\x20\x25\x73","\x6C\x6F\x67","\x64\x6F\x63","\x69\x6E\x69\x74\x46\x61\x78\x53\x63\x68\x65\x64\x75\x6C\x65\x72","\x74\x79\x70\x65","\x6E\x61\x6D\x65","\x63\x68\x61\x6E\x67\x65\x64","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x6D\x6F\x64\x69\x66\x79\x20\x61\x20\x63\x6F\x6E\x74\x65\x78\x74\x20\x6E\x61\x6D\x65","\x64\x65\x66\x61\x75\x6C\x74\x45\x6E\x74\x72\x79","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x6D\x6F\x64\x69\x66\x79\x20\x61\x20\x64\x65\x66\x61\x75\x6C\x74\x20\x63\x6F\x6E\x74\x65\x78\x74","\x62\x65\x66\x6F\x72\x65\x55\x70\x64\x61\x74\x65","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x64\x65\x6C\x65\x74\x65\x20\x61\x20\x64\x65\x66\x61\x75\x6C\x74\x20\x63\x6F\x6E\x74\x65\x78\x74","\x62\x65\x66\x6F\x72\x65\x44\x65\x73\x74\x72\x6F\x79","\x65\x76\x74","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x6E\x64","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x67\x65\x6E\x74","\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x72\x6F\x6C\x65","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x55\x73\x65\x72\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74\x2E\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x54\x72\x75\x6E\x6B\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x54\x72\x75\x6E\x6B\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x6B\x65\x79\x42\x79","\x54\x72\x75\x6E\x6B\x2E\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x41\x63\x74\x69\x6F\x6E\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x6F\x70\x74\x69\x6F\x6E\x73","\x62\x6F\x64\x79","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72\x2E\x62\x65\x66\x6F\x72\x65\x43\x72\x65\x61\x74\x65","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x75\x73\x65\x72","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x52\x65\x70\x6F\x72\x74\x46\x61\x78\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x46\x61\x78\x52\x6F\x6F\x6D\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74\x2E\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x69\x6E\x69\x74","\x4E\x65\x74\x77\x6F\x72\x6B\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x4E\x65\x74\x77\x6F\x72\x6B\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x4E\x65\x74\x77\x6F\x72\x6B\x2E\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x41\x67\x65\x6E\x74\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x41\x67\x65\x6E\x74\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x41\x67\x65\x6E\x74\x2E\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x82c9[0];const path=require(_0x82c9[1]);const cp=require(_0x82c9[2]);const _=require(_0x82c9[3]);const util=require(_0x82c9[4]);const config=require(_0x82c9[5]);const User=require(_0x82c9[7])[_0x82c9[6]];const Trunk=require(_0x82c9[7])[_0x82c9[8]];const Action=require(_0x82c9[7])[_0x82c9[9]];const ReportMember=require(_0x82c9[7])[_0x82c9[10]];const FaxMessage=require(_0x82c9[7])[_0x82c9[11]];const ReportFax=require(_0x82c9[7])[_0x82c9[12]];const FaxRoom=require(_0x82c9[7])[_0x82c9[13]];const FaxAccount=require(_0x82c9[7])[_0x82c9[14]];const VoiceContext=require(_0x82c9[7])[_0x82c9[15]];const Network=require(_0x82c9[7])[_0x82c9[16]];const VoiceQueue=require(_0x82c9[7])[_0x82c9[17]];const Scheduler=require(_0x82c9[18]);var cpAmi=cp[_0x82c9[21]](path[_0x82c9[20]](__dirname,_0x82c9[19]));cpAmi[_0x82c9[26]](_0x82c9[24],function(_0x180cx15){switch(_0x180cx15[_0x82c9[32]]){case _0x82c9[31]:handleInitFaxScheduler(_0x180cx15[_0x82c9[30]]);break;default:}})[_0x82c9[26]](_0x82c9[27],function(_0x180cx14){console[_0x82c9[29]](util[_0x82c9[25]](_0x82c9[28],_0x180cx14))})[_0x82c9[26]](_0x82c9[22],function(_0x180cx13){console[_0x82c9[22]](util[_0x82c9[25]](_0x82c9[23],_0x180cx13[_0x82c9[24]]))});VoiceContext[_0x82c9[38]](function(_0x180cx16,_0x180cx17){if(_0x180cx16[_0x82c9[34]](_0x82c9[33])){throw new Error(_0x82c9[35])};if(_0x180cx16[_0x82c9[36]]){throw new Error(_0x82c9[37])}});VoiceContext[_0x82c9[40]](function(_0x180cx16,_0x180cx17){if(_0x180cx16[_0x82c9[36]]){throw new Error(_0x82c9[39])}});VoiceContext[_0x82c9[45]](function(_0x180cx16,_0x180cx17){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[43];cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])});User[_0x82c9[51]](function(_0x180cx16,_0x180cx17){if(_[_0x82c9[49]]([_0x82c9[46],_0x82c9[47]],_0x180cx16[_0x82c9[48]])){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[50];cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])}});VoiceContext[_0x82c9[53]](function(_0x180cx16,_0x180cx17){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[52];cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])});Trunk[_0x82c9[45]](function(_0x180cx16,_0x180cx17){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[54];cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])});Trunk[_0x82c9[51]](function(_0x180cx16,_0x180cx17){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[55];_0x180cx16[_0x82c9[42]][_0x82c9[34]]= _[_0x82c9[56]](_0x180cx16[_0x82c9[34]]());cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])});Trunk[_0x82c9[53]](function(_0x180cx16,_0x180cx17){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[57];cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])});Action[_0x82c9[45]](function(_0x180cx16,_0x180cx17){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[58];_0x180cx16[_0x82c9[42]][_0x82c9[59]]= {body:_0x180cx17[_0x82c9[60]]|| null};cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])});ReportMember[_0x82c9[45]](function(_0x180cx16,_0x180cx17){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[61];cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])});FaxMessage[_0x82c9[45]](function(_0x180cx16,_0x180cx17){var _0x180cx15={message:_0x82c9[62],doc:_0x180cx16[_0x82c9[42]],options:{user:_0x180cx17[_0x82c9[63]]|| null}};cpAmi[_0x82c9[44]](_0x180cx15)});FaxMessage[_0x82c9[51]](function(_0x180cx16,_0x180cx17){var _0x180cx15={message:_0x82c9[64],doc:_0x180cx16[_0x82c9[42]],options:{user:_0x180cx17[_0x82c9[63]]|| null,changed:_0x180cx16[_0x82c9[34]]()}};cpAmi[_0x82c9[44]](_0x180cx15)});ReportFax[_0x82c9[51]](function(_0x180cx16,_0x180cx17){var _0x180cx15={message:_0x82c9[65],doc:_0x180cx16[_0x82c9[42]],options:{user:_0x180cx17[_0x82c9[63]]|| null,changed:_0x180cx16[_0x82c9[34]]()}};cpAmi[_0x82c9[44]](_0x180cx15)});FaxRoom[_0x82c9[51]](function(_0x180cx16,_0x180cx17){var _0x180cx15={message:_0x82c9[66],doc:_0x180cx16[_0x82c9[42]],options:{user:_0x180cx17[_0x82c9[63]]|| null,changed:_0x180cx16[_0x82c9[34]]()}};cpAmi[_0x82c9[44]](_0x180cx15)});FaxAccount[_0x82c9[45]](function(_0x180cx16,_0x180cx17){var _0x180cx15={message:_0x82c9[67],doc:_0x180cx16[_0x82c9[42]],options:{user:_0x180cx17[_0x82c9[63]]|| null}};cpAmi[_0x82c9[44]](_0x180cx15)});FaxAccount[_0x82c9[51]](function(_0x180cx16,_0x180cx17){var _0x180cx15={message:_0x82c9[68],doc:_0x180cx16[_0x82c9[42]],options:{user:_0x180cx17[_0x82c9[63]]|| null,changed:_0x180cx16[_0x82c9[34]]()}};cpAmi[_0x82c9[44]](_0x180cx15)});FaxAccount[_0x82c9[53]](function(_0x180cx16,_0x180cx17){var _0x180cx15={message:_0x82c9[69],doc:_0x180cx16[_0x82c9[42]],options:{user:_0x180cx17[_0x82c9[63]]|| null}};cpAmi[_0x82c9[44]](_0x180cx15)});function handleInitFaxScheduler(_0x180cx15){var _0x180cx19= new Scheduler(_0x180cx15);_0x180cx19[_0x82c9[70]]()}Network[_0x82c9[45]](function(_0x180cx16,_0x180cx17){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[71];cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])});Network[_0x82c9[51]](function(_0x180cx16,_0x180cx17){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[72];_0x180cx16[_0x82c9[42]][_0x82c9[34]]= _[_0x82c9[56]](_0x180cx16[_0x82c9[34]]());cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])});Network[_0x82c9[53]](function(_0x180cx16,_0x180cx17){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[73];cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])});VoiceQueue[_0x82c9[45]](function(_0x180cx16,_0x180cx17){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[74];cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])});VoiceQueue[_0x82c9[51]](function(_0x180cx16,_0x180cx17){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[75];_0x180cx16[_0x82c9[42]][_0x82c9[34]]= _[_0x82c9[56]](_0x180cx16[_0x82c9[34]]());cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])});VoiceQueue[_0x82c9[53]](function(_0x180cx16,_0x180cx17){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[76];cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])});User[_0x82c9[45]](function(_0x180cx16,_0x180cx17){if(_0x180cx16[_0x82c9[48]]=== _0x82c9[46]){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[77];cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])}});User[_0x82c9[51]](function(_0x180cx16,_0x180cx17){if(_0x180cx16[_0x82c9[48]]=== _0x82c9[46]|| _0x180cx16[_0x82c9[48]]=== _0x82c9[47]){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[78];_0x180cx16[_0x82c9[42]][_0x82c9[34]]= _[_0x82c9[56]](_0x180cx16[_0x82c9[34]]());cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])}});User[_0x82c9[53]](function(_0x180cx16,_0x180cx17){if(_0x180cx16[_0x82c9[48]]=== _0x82c9[46]|| _0x180cx16[_0x82c9[48]]=== _0x82c9[47]){_0x180cx16[_0x82c9[42]][_0x82c9[41]]= _0x82c9[79];cpAmi[_0x82c9[44]](_0x180cx16[_0x82c9[42]])}});module[_0x82c9[80]]= cpAmi \ No newline at end of file +'use strict'; + +const path = require('path'); +const cp = require('child_process'); +const _ = require('lodash'); +const util = require('util'); + +const config = require('../environment'); +const User = require('../../models').User; +const Trunk = require('../../models').Trunk; +const Action = require('../../models').Action; +const ReportMember = require('../../models').ReportMember; +const FaxMessage = require('../../models').FaxMessage; +const ReportFax = require('../../models').ReportFax; +const FaxRoom = require('../../models').FaxRoom; +const FaxAccount = require('../../models').FaxAccount; +const VoiceContext = require('../../models').VoiceContext; +const Network = require('../../models').Network; +const VoiceQueue = require('../../models').VoiceQueue; +const Scheduler = require('../routing/scheduler'); + +var cpAmi = cp.fork(path.join(__dirname, 'ami')); + +cpAmi.on('message', function(data) { + switch (data.type) { + case 'initFaxScheduler': + handleInitFaxScheduler(data.doc); + break; + default: + } + }) + .on('close', function(code) { + console.log(util.format('AMI SERVICE EXITED WITH CODE %s', code)); + }) + .on('error', function(err) { + console.error(util.format('ERROR ON AMI SERVICE', err.message)); + }); + +VoiceContext.beforeUpdate(function(doc, options) { + // doc.dataValues.evt = 'VoiceContext.beforeUpdate'; + // doc.dataValues.changed = _.keyBy(doc.changed()); + // cpAmi.send(doc.dataValues); + if (doc.changed('name')) { + throw new Error("You can't modify a context name"); + } + if (doc.defaultEntry) { + throw new Error("You can't modify a default context"); + } +}); + +VoiceContext.beforeDestroy(function(doc, options) { + // doc.dataValues.evt = 'VoiceContext.beforeDestroy'; + // cpAmi.send(doc.dataValues); + if (doc.defaultEntry) { + throw new Error("You can't delete a default context"); + } +}); + +VoiceContext.afterCreate(function(doc, options) { + doc.dataValues.evt = 'VoiceContext.afterCreate'; + cpAmi.send(doc.dataValues); +}); + +User.afterUpdate(function(doc, options) { + if (_.includes(['agent', 'telephone'], doc.role)) { + doc.dataValues.evt = 'User.afterUpdate'; + cpAmi.send(doc.dataValues); + } +}); + +VoiceContext.afterDestroy(function(doc, options) { + doc.dataValues.evt = 'VoiceContext.afterDestroy'; + cpAmi.send(doc.dataValues); +}); + +Trunk.afterCreate(function(doc, options) { + doc.dataValues.evt = 'Trunk.afterCreate'; + cpAmi.send(doc.dataValues); +}); + +Trunk.afterUpdate(function(doc, options) { + doc.dataValues.evt = 'Trunk.afterUpdate'; + doc.dataValues.changed = _.keyBy(doc.changed()); + cpAmi.send(doc.dataValues); +}); + +Trunk.afterDestroy(function(doc, options) { + doc.dataValues.evt = 'Trunk.afterDestroy'; + cpAmi.send(doc.dataValues); +}); + +Action.afterCreate(function(doc, options) { + doc.dataValues.evt = 'Action.afterCreate'; + doc.dataValues.options = { + body: options.body || null + }; + + cpAmi.send(doc.dataValues); +}); + +ReportMember.afterCreate(function(doc, options) { + doc.dataValues.evt = 'ReportMember.beforeCreate'; + cpAmi.send(doc.dataValues); +}); + +/* + Hooks for Fax service +*/ + +FaxMessage.afterCreate(function(doc, options) { + var data = { + message: 'FaxMessage.afterCreate', + doc: doc.dataValues, + options: { + user: options.user || null + } + }; + cpAmi.send(data); +}); + +FaxMessage.afterUpdate(function(doc, options) { + var data = { + message: 'FaxMessage.afterUpdate', + doc: doc.dataValues, + options: { + user: options.user || null, + changed: doc.changed() + } + }; + cpAmi.send(data); +}); + +ReportFax.afterUpdate(function(doc, options) { + var data = { + message: 'ReportFax.afterUpdate', + doc: doc.dataValues, + options: { + user: options.user || null, + changed: doc.changed() + } + }; + cpAmi.send(data); +}); + +FaxRoom.afterUpdate(function(doc, options) { + var data = { + message: 'FaxRoom.afterUpdate', + doc: doc.dataValues, + options: { + user: options.user || null, + changed: doc.changed() + } + }; + cpAmi.send(data); +}); + +FaxAccount.afterCreate(function(doc, options) { + var data = { + message: 'FaxAccount.afterCreate', + doc: doc.dataValues, + options: { + user: options.user || null + } + }; + cpAmi.send(data); +}); + +FaxAccount.afterUpdate(function(doc, options) { + var data = { + message: 'FaxAccount.afterUpdate', + doc: doc.dataValues, + options: { + user: options.user || null, + changed: doc.changed() + } + }; + cpAmi.send(data); +}); + +FaxAccount.afterDestroy(function(doc, options) { + var data = { + message: 'FaxAccount.afterDestroy', + doc: doc.dataValues, + options: { + user: options.user || null + } + }; + cpAmi.send(data); +}); + +function handleInitFaxScheduler(data) { + var scheduler = new Scheduler(data); + scheduler.init(); +} + +/* + Hooks for Extenrip and Localnet +*/ + +Network.afterCreate(function(doc, options) { + doc.dataValues.evt = 'Network.afterCreate'; + cpAmi.send(doc.dataValues); +}); + +Network.afterUpdate(function(doc, options) { + doc.dataValues.evt = 'Network.afterUpdate'; + doc.dataValues.changed = _.keyBy(doc.changed()); + cpAmi.send(doc.dataValues); +}); + +Network.afterDestroy(function(doc, options) { + doc.dataValues.evt = 'Network.afterDestroy'; + cpAmi.send(doc.dataValues); +}); + +VoiceQueue.afterCreate(function(doc, options) { + doc.dataValues.evt = 'VoiceQueue.afterCreate'; + cpAmi.send(doc.dataValues); +}); + +VoiceQueue.afterUpdate(function(doc, options) { + doc.dataValues.evt = 'VoiceQueue.afterUpdate'; + doc.dataValues.changed = _.keyBy(doc.changed()); + cpAmi.send(doc.dataValues); +}); + +VoiceQueue.afterDestroy(function(doc, options) { + doc.dataValues.evt = 'VoiceQueue.afterDestroy'; + cpAmi.send(doc.dataValues); +}); + +User.afterCreate(function(doc, options) { + if (doc.role === 'agent') { + doc.dataValues.evt = 'Agent.afterCreate'; + cpAmi.send(doc.dataValues); + } +}); + +User.afterUpdate(function(doc, options) { + if (doc.role === 'agent' || doc.role === 'telephone') { + doc.dataValues.evt = 'Agent.afterUpdate'; + doc.dataValues.changed = _.keyBy(doc.changed()); + cpAmi.send(doc.dataValues); + } +}); + +User.afterDestroy(function(doc, options) { + if (doc.role === 'agent' || doc.role === 'telephone') { + doc.dataValues.evt = 'Agent.afterDestroy'; + cpAmi.send(doc.dataValues); + } +}); + +module.exports = cpAmi; diff --git a/server/config/ami/member.js b/server/config/ami/member.js index fe58186..12e483f 100644 --- a/server/config/ami/member.js +++ b/server/config/ami/member.js @@ -1 +1,104 @@ -var _0xe981=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x65\x6D\x62\x65\x72\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x69\x6E\x62\x6F\x75\x6E\x64\x54\x61\x6C\x6B\x69\x6E\x67","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x76\x6F\x69\x63\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x69\x6E\x74\x65\x72\x66\x61\x63\x65","\x54\x41\x4C\x4B\x49\x4E\x47","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x69\x6E\x62\x6F\x75\x6E\x64","\x61\x67\x65\x6E\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x6C\x69\x6E\x65\x6E\x75\x6D","\x69\x6E\x62\x6F\x75\x6E\x64\x43\x6F\x6D\x70\x6C\x65\x74\x65","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x54\x61\x6C\x6B\x69\x6E\x67","\x64\x69\x61\x6C\x73\x74\x72\x69\x6E\x67","\x2F","\x73\x70\x6C\x69\x74","\x64\x69\x61\x6C\x73\x74\x61\x74\x75\x73","\x41\x4E\x53\x57\x45\x52","\x6C\x65\x6E\x67\x74\x68","\x64\x69\x61\x6C\x53\x74\x72\x69\x6E\x67","\x53\x49\x50","\x63\x68\x61\x6E\x6E\x65\x6C","\x2D","\x64\x65\x73\x74\x63\x68\x61\x6E\x6E\x65\x6C","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x61\x63\x63\x6F\x75\x6E\x74\x63\x6F\x64\x65","\x64\x65\x73\x74\x75\x6E\x69\x71\x75\x65\x69\x64","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x43\x6F\x6D\x70\x6C\x65\x74\x65","\x75\x6E\x69\x71\x75\x65\x69\x64","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x6D\x65\x6D\x62\x65\x72\x20\x63\x72\x65\x61\x74\x65\x20","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x6D\x65\x6D\x62\x65\x72\x20\x74\x61\x6C\x6B\x69\x6E\x67\x20\x63\x72\x65\x61\x74\x65\x64","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x6D\x65\x6D\x62\x65\x72\x20\x75\x70\x64\x61\x74\x65\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x6D\x65\x6D\x62\x65\x72\x20\x75\x70\x64\x61\x74\x65","\x61\x73\x53\x65\x63\x6F\x6E\x64\x73","\x65\x6E\x74\x65\x72\x41\x74","\x64\x75\x72\x61\x74\x69\x6F\x6E","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x65\x76\x74","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x6E\x64","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x6B\x65\x79\x42\x79","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xe981[0];const _=require(_0xe981[1]);const moment=require(_0xe981[2]);const ReportMember=require(_0xe981[4])[_0xe981[3]];function Member(){console[_0xe981[6]](_0xe981[5])}Member[_0xe981[8]][_0xe981[7]]= function(_0xf978x5){return createMember({channel:_0xe981[9],membername:_0xf978x5[_0xe981[10]],interface:_0xf978x5[_0xe981[11]],type:_0xe981[12],enterAt:moment()[_0xe981[14]](_0xe981[13]),data1:_0xe981[15],role:_0xe981[16],internal:_0xf978x5[_0xe981[17]]})};Member[_0xe981[8]][_0xe981[18]]= function(_0xf978x5){return updateMember({channel:_0xe981[9],type:_0xe981[12],membername:_0xf978x5[_0xe981[10]],interface:_0xf978x5[_0xe981[11]],exitAt:null})};Member[_0xe981[8]][_0xe981[19]]= function(_0xf978x5){if(_0xf978x5[_0xe981[20]]){var _0xf978x6=_0xf978x5[_0xe981[20]][_0xe981[22]](_0xe981[21]);if(_0xf978x5[_0xe981[23]]=== _0xe981[24]&& _0xf978x5[_0xe981[26]][_0xe981[25]]> 1&& _0xf978x6[0]!== _0xe981[27]){return createMember({channel:_0xe981[9],membername:_0xf978x5[_0xe981[28]][_0xe981[22]](/\/|-/)[1],interface:_0xf978x5[_0xe981[30]][_0xe981[22]](_0xe981[29])[0],type:_0xe981[12],enterAt:moment()[_0xe981[14]](_0xe981[13]),data1:_0xe981[31],role:_0xe981[16],internal:_0xf978x5[_0xe981[32]],uniqueid:_0xf978x5[_0xe981[33]]})}}};Member[_0xe981[8]][_0xe981[34]]= function(_0xf978x5){return updateMember({uniqueid:_0xf978x5[_0xe981[35]]})};function createMember(_0xf978x5){return ReportMember[_0xe981[41]](_0xf978x5)[_0xe981[40]](function(_0xf978x9){console[_0xe981[6]](_0xe981[39])})[_0xe981[38]](function(_0xf978x8){console[_0xe981[37]](_0xe981[36]+ _0xf978x8)})}function updateMember(_0xf978xb){return ReportMember[_0xe981[48]]({where:_0xf978xb})[_0xe981[40]](function(_0xf978xc){if(_0xf978xc){return _0xf978xc[_0xe981[47]]({exitAt:moment()[_0xe981[14]](_0xe981[13]),duration:moment[_0xe981[46]](moment()- moment(_0xf978xc[_0xe981[45]]))[_0xe981[44]]()})};return})[_0xe981[40]](function(_0xf978x9){if(_0xf978x9){console[_0xe981[6]](_0xe981[43])}})[_0xe981[38]](function(_0xf978x8){console[_0xe981[37]](_0xe981[42]+ _0xf978x8)})}ReportMember[_0xe981[53]](function(_0xf978xd,_0xf978xe){_0xf978xd[_0xe981[50]][_0xe981[49]]= _0xe981[51];process[_0xe981[52]](_0xf978xd[_0xe981[50]])});ReportMember[_0xe981[57]](function(_0xf978xd,_0xf978xe){_0xf978xd[_0xe981[50]][_0xe981[49]]= _0xe981[54];_0xf978xd[_0xe981[50]][_0xe981[55]]= _[_0xe981[56]](_0xf978xd[_0xe981[55]]());process[_0xe981[52]](_0xf978xd[_0xe981[50]])});module[_0xe981[58]]= Member \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const moment = require('moment'); +const ReportMember = require('../../models').ReportMember; + +function Member() { + console.log('Member Initialization...'); +} + +Member.prototype.inboundTalking = function(evt) { + return createMember({ + channel: 'voice', + membername: evt.membername, + interface: evt.interface, + type: 'TALKING', + enterAt: moment().format("YYYY-MM-DD HH:mm:ss"), + data1: 'inbound', + role: 'agent', + internal: evt.connectedlinenum + }); +} + +Member.prototype.inboundComplete = function(evt) { + return updateMember({ + channel: 'voice', + type: 'TALKING', + membername: evt.membername, + interface: evt.interface, + exitAt: null + }); +} + +Member.prototype.outboundTalking = function(evt) { + if (evt.dialstring) { //dialstring is present only if outbound + var dialString = evt.dialstring.split('/'); + if (evt.dialstatus === 'ANSWER' && evt.dialString.length > 1 && dialString[0] !== 'SIP') { + return createMember({ + channel: 'voice', + membername: evt.channel.split(/\/|-/)[1], + interface: evt.destchannel.split('-')[0], + type: 'TALKING', + enterAt: moment().format("YYYY-MM-DD HH:mm:ss"), + data1: 'outbound', + role: 'agent', + internal: evt.accountcode, + uniqueid: evt.destuniqueid + }); + } + } +} + +Member.prototype.outboundComplete = function(evt) { + return updateMember({ + uniqueid: evt.uniqueid + }); +} + +function createMember(evt) { + return ReportMember + .create(evt) + .then(function(data) { + console.log('[report] member talking created'); + }) + .catch(function(err) { + console.error('[report] member create ' + err); + }); +} + +function updateMember(where) { + return ReportMember + .findOne({ + where: where + }) + .then(function(member) { + if (member) { + return member + .update({ + exitAt: moment().format("YYYY-MM-DD HH:mm:ss"), + duration: moment.duration(moment() - moment(member.enterAt)).asSeconds() + }); + + } + }) + .then(function(data) { + console.log('[report] member update'); + }) + .catch(function(err) { + console.error('[report] member update ' + err); + }); +} + +ReportMember.afterCreate(function(doc, options) { + doc.dataValues.evt = 'ReportMember.afterCreate'; + process.send(doc.dataValues); +}); + +ReportMember.afterUpdate(function(doc, options) { + doc.dataValues.evt = 'ReportMember.afterUpdate'; + doc.dataValues.changed = _.keyBy(doc.changed()); + process.send(doc.dataValues); +}); + +module.exports = Member; diff --git a/server/config/ami/network.js b/server/config/ami/network.js index c65195b..0733a89 100644 --- a/server/config/ami/network.js +++ b/server/config/ami/network.js @@ -1 +1,91 @@ -var _0x9551=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x66\x73","\x4E\x65\x74\x77\x6F\x72\x6B","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x4E\x65\x74\x77\x6F\x72\x6B\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x6D\x65\x73\x73\x61\x67\x65","\x4E\x65\x74\x77\x6F\x72\x6B\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x4E\x65\x74\x77\x6F\x72\x6B\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x4E\x65\x74\x77\x6F\x72\x6B\x2E\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x65\x76\x74","\x6F\x6E","\x6E\x65\x74\x77\x6F\x72\x6B\x52\x65\x77\x72\x69\x74\x65","\x45\x72\x72\x6F\x72\x20\x77\x72\x69\x74\x69\x6E\x67\x20\x6C\x6F\x63\x61\x6C\x6E\x65\x74\x3A","\x63\x61\x74\x63\x68","","\x73\x69\x70\x5F\x78\x63\x61\x6C\x6C\x79\x5F\x6C\x6F\x63\x61\x6C\x6E\x65\x74\x2E\x63\x6F\x6E\x66","\x6C\x6F\x63\x61\x6C\x6E\x65\x74\x20\x3D\x20\x25\x73\x0A","\x76\x61\x6C\x75\x65","\x66\x6F\x72\x6D\x61\x74","\x66\x6F\x72\x45\x61\x63\x68","\x61\x73\x74\x65\x72\x69\x73\x6B\x43\x6F\x6E\x66","\x6A\x6F\x69\x6E","\x77","\x30\x37\x37\x37","\x4C\x6F\x63\x61\x6C\x6E\x65\x74\x20\x66\x69\x6C\x65\x20\x73\x61\x76\x65\x64\x21","\x77\x72\x69\x74\x65\x46\x69\x6C\x65","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x6C\x6F\x63\x61\x6C\x6E\x65\x74","\x73\x63\x6F\x70\x65","\x45\x72\x72\x6F\x72\x20\x77\x72\x69\x74\x69\x6E\x67\x20\x65\x78\x74\x65\x72\x6E\x69\x70\x3A","\x73\x69\x70\x5F\x78\x63\x61\x6C\x6C\x79\x5F\x65\x78\x74\x65\x72\x6E\x69\x70\x2E\x63\x6F\x6E\x66","\x65\x78\x74\x65\x72\x6E\x69\x70\x20\x3D\x20\x25\x73\x0A","\x45\x78\x74\x65\x72\x6E\x69\x70\x20\x66\x69\x6C\x65\x20\x73\x61\x76\x65\x64\x21","\x65\x78\x74\x65\x72\x6E\x69\x70","\x54\x79\x70\x65\x20\x6E\x6F\x74\x20\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x64\x3A","\x74\x79\x70\x65","\x52\x65\x6C\x6F\x61\x64","\x65\x72\x72\x6F\x72","\x61\x63\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];_0x9551[0];const _=require(_0x9551[1]);const util=require(_0x9551[2]);const path=require(_0x9551[3]);const fs=require(_0x9551[4]);var NetworkModel=require(_0x9551[6])[_0x9551[5]];var config=require(_0x9551[7]);function Network(_0xf1b5x8){console[_0x9551[9]](_0x9551[8]);process[_0x9551[15]](_0x9551[10],function(_0xf1b5x9){switch(_0xf1b5x9[_0x9551[14]]){case _0x9551[11]:;case _0x9551[12]:;case _0x9551[13]:networkRewrite(_0xf1b5x9,_0xf1b5x8);break;default:}})}function networkRewrite(_0xf1b5x9,_0xf1b5x8){console[_0x9551[9]](_0x9551[16],_0xf1b5x9);switch(_0xf1b5x9[_0x9551[41]]){case _0x9551[33]:return NetworkModel[_0x9551[34]](_0x9551[33])[_0x9551[32]]()[_0x9551[31]](function(_0xf1b5xc){var _0xf1b5xd=_0x9551[19];var _0xf1b5xe=_0x9551[20];_0xf1b5xc[_0x9551[24]](function(_0xf1b5xf){_0xf1b5xd+= util[_0x9551[23]](_0x9551[21],_0xf1b5xf[_0x9551[22]])});fs[_0x9551[30]](path[_0x9551[26]](config[_0x9551[25]],_0xf1b5xe),_0xf1b5xd,{flags:_0x9551[27],mode:parseInt(_0x9551[28],8)},function(_0xf1b5xb){if(_0xf1b5xb){throw _0xf1b5xb};reload(_0xf1b5x8);console[_0x9551[9]](_0x9551[29])})})[_0x9551[18]](function(_0xf1b5xb){console[_0x9551[9]](_0x9551[17],_0xf1b5xb)});case _0x9551[39]:return NetworkModel[_0x9551[34]](_0x9551[39])[_0x9551[32]]()[_0x9551[31]](function(_0xf1b5x10){var _0xf1b5x11=_0x9551[19];var _0xf1b5x12=_0x9551[36];_0xf1b5x10[_0x9551[24]](function(_0xf1b5x13){_0xf1b5x11+= util[_0x9551[23]](_0x9551[37],_0xf1b5x13[_0x9551[22]])});fs[_0x9551[30]](path[_0x9551[26]](config[_0x9551[25]],_0xf1b5x12),_0xf1b5x11,{flags:_0x9551[27],mode:parseInt(_0x9551[28],8)},function(_0xf1b5xb){if(_0xf1b5xb){throw _0xf1b5xb};reload(_0xf1b5x8);console[_0x9551[9]](_0x9551[38])})})[_0x9551[18]](function(_0xf1b5xb){console[_0x9551[9]](_0x9551[35],_0xf1b5xb)});default:console[_0x9551[9]](_0x9551[40],_0xf1b5x9[_0x9551[41]])}}function reload(_0xf1b5x8){_0xf1b5x8[_0x9551[44]]({Action:_0x9551[42]},function(_0xf1b5xb,_0xf1b5x15){if(_0xf1b5xb){console[_0x9551[43]](_0xf1b5xb)}else {console[_0x9551[9]](_0xf1b5x15)}})}module[_0x9551[45]]= Network \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const util = require('util'); +const path = require('path'); +const fs = require('fs'); + +var NetworkModel = require('../../models').Network; +var config = require('../../config/environment'); + +function Network(ami) { + console.log('Network Initialization...'); + + process.on('message', function(doc) { + switch (doc.evt) { + case 'Network.afterCreate': + case 'Network.afterUpdate': + case 'Network.afterDestroy': + networkRewrite(doc, ami); + break; + default: + } + }); + +} + +function networkRewrite(doc, ami) { + console.log('networkRewrite', doc); + switch (doc.type) { + case 'localnet': + return NetworkModel + .scope('localnet') + .findAll() + .then(function(localnets) { + var localnetStrings = ''; + var localnetFile = 'sip_xcally_localnet.conf'; + localnets.forEach(function(localnet) { + localnetStrings += util.format('localnet = %s\n', localnet.value); + }); + fs.writeFile(path.join(config.asteriskConf, localnetFile), localnetStrings, { + flags: 'w', + mode: parseInt('0777', 8) + }, function(err) { + if (err) throw err; + reload(ami); + console.log("Localnet file saved!"); + }); + }) + .catch(function(err) { + console.log('Error writing localnet:', err); + }); + case 'externip': + return NetworkModel + .scope('externip') + .findAll() + .then(function(externips) { + var externipStrings = ''; + var externipFile = 'sip_xcally_externip.conf'; + externips.forEach(function(externip) { + externipStrings += util.format('externip = %s\n', externip.value); + }); + fs.writeFile(path.join(config.asteriskConf, externipFile), externipStrings, { + flags: 'w', + mode: parseInt('0777', 8) + }, function(err) { + if (err) throw err; + reload(ami); + console.log("Externip file saved!"); + }); + }) + .catch(function(err) { + console.log('Error writing externip:', err); + }); + default: + console.log('Type not recognized:', doc.type); + } +} + +function reload(ami) { + ami.action({ + Action: 'Reload' + }, function(err, res) { + if (err) { + console.error(err); + } else { + console.log(res); + } + }); +} + +module.exports = Network; diff --git a/server/config/ami/queue_caller.js b/server/config/ami/queue_caller.js index 7414736..d36fd0e 100644 --- a/server/config/ami/queue_caller.js +++ b/server/config/ami/queue_caller.js @@ -1 +1,108 @@ -var _0xd4aa=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x74\x69\x6C","\x51\x75\x65\x75\x65\x43\x61\x6C\x6C\x65\x72\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x65\x76\x74","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x6E\x64","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x71\x75\x65\x75\x65","\x74\x6F","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x6B\x65\x79\x42\x79","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x3A\x75\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x6A\x6F\x69\x6E","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x6C\x65\x61\x76\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x75\x6E\x69\x71\x75\x65\x69\x64","\x61\x62\x61\x6E\x64\x6F\x6E","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x41\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74","\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x65\x78\x69\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x41\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x72\x65\x61\x73\x6F\x6E","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x76\x61\x6C\x75\x65","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x71\x75\x65\x75\x65\x20","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x71\x75\x65\x75\x65\x20\x63\x72\x65\x61\x74\x65\x64","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65","\x5B\x71\x75\x65\x75\x65\x5F\x63\x61\x6C\x6C\x65\x72\x5D\x20\x75\x70\x64\x61\x74\x65\x20\x65\x72\x72\x6F\x72\x3A\x20","\x5B\x72\x65\x70\x6F\x72\x74\x5D\x20\x71\x75\x65\x75\x65\x20\x75\x70\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xd4aa[0];const _=require(_0xd4aa[1]);const moment=require(_0xd4aa[2]);const ReportQueue=require(_0xd4aa[4])[_0xd4aa[3]];const util=require(_0xd4aa[5]);function QueueCaller(_0xe2b3x6){console[_0xd4aa[7]](_0xd4aa[6]);ReportQueue[_0xd4aa[16]](function(_0xe2b3x7,_0xe2b3x8){_0xe2b3x7[_0xd4aa[9]][_0xd4aa[8]]= _0xd4aa[10];process[_0xd4aa[11]](_0xe2b3x7[_0xd4aa[9]]);_0xe2b3x6[_0xd4aa[15]](_0xe2b3x7[_0xd4aa[14]])[_0xd4aa[13]](_0xd4aa[12],_0xe2b3x7)});ReportQueue[_0xd4aa[21]](function(_0xe2b3x7,_0xe2b3x8){_0xe2b3x7[_0xd4aa[9]][_0xd4aa[8]]= _0xd4aa[17];_0xe2b3x7[_0xd4aa[9]][_0xd4aa[18]]= _[_0xd4aa[19]](_0xe2b3x7[_0xd4aa[18]]());process[_0xd4aa[11]](_0xe2b3x7[_0xd4aa[9]]);_0xe2b3x6[_0xd4aa[15]](_0xe2b3x7[_0xd4aa[14]])[_0xd4aa[13]](_0xd4aa[20],_0xe2b3x7)})}QueueCaller[_0xd4aa[23]][_0xd4aa[22]]= function(_0xe2b3x9){_0xe2b3x9[_0xd4aa[24]]= moment()[_0xd4aa[26]](_0xd4aa[25]);return create(_0xe2b3x9)};QueueCaller[_0xd4aa[23]][_0xd4aa[27]]= function(_0xe2b3x9){return findAndUpdate({assigned:true,lastAssignedTo:_0xe2b3x9[_0xd4aa[28]],uniqueid:_0xe2b3x9[_0xd4aa[29]],queuecallerleaveAt:moment()[_0xd4aa[26]](_0xd4aa[25])})};QueueCaller[_0xd4aa[23]][_0xd4aa[30]]= function(_0xe2b3x9){_0xe2b3x9[_0xd4aa[31]]= true;_0xe2b3x9[_0xd4aa[32]]= moment()[_0xd4aa[26]](_0xd4aa[25]);_0xe2b3x9[_0xd4aa[33]]= moment()[_0xd4aa[26]](_0xd4aa[25]);return findAndUpdate(_0xe2b3x9)};QueueCaller[_0xd4aa[23]][_0xd4aa[34]]= function(_0xe2b3x9){_0xe2b3x9[_0xd4aa[35]]= true;_0xe2b3x9[_0xd4aa[36]]= moment()[_0xd4aa[26]](_0xd4aa[25]);return findAndUpdate(_0xe2b3x9)};QueueCaller[_0xd4aa[23]][_0xd4aa[37]]= function(_0xe2b3x9){_0xe2b3x9[_0xd4aa[31]]= false;_0xe2b3x9[_0xd4aa[32]]= null;_0xe2b3x9[_0xd4aa[38]]= true;_0xe2b3x9[_0xd4aa[39]]= moment()[_0xd4aa[26]](_0xd4aa[25]);_0xe2b3x9[_0xd4aa[40]]= _0xe2b3x9[_0xd4aa[42]][_0xd4aa[41]]();return findAndUpdate(_0xe2b3x9)};function create(_0xe2b3x9){return ReportQueue[_0xd4aa[48]](_0xe2b3x9)[_0xd4aa[47]](function(_0xe2b3xc){console[_0xd4aa[7]](_0xd4aa[46])})[_0xd4aa[45]](function(_0xe2b3xb){console[_0xd4aa[44]](_0xd4aa[43]+ _0xe2b3xb)})}function findAndUpdate(_0xe2b3x9){return ReportQueue[_0xd4aa[52]]({where:{uniqueid:_0xe2b3x9[_0xd4aa[29]]}})[_0xd4aa[47]](function(_0xe2b3xe){if(_0xe2b3xe){return _0xe2b3xe[_0xd4aa[51]](_0xe2b3x9)}})[_0xd4aa[47]](function(){console[_0xd4aa[7]](_0xd4aa[50])})[_0xd4aa[45]](function(_0xe2b3xb){console[_0xd4aa[44]](_0xd4aa[49]+ _0xe2b3xb)})}module[_0xd4aa[53]]= QueueCaller \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const moment = require('moment'); +const ReportQueue = require('../../models').ReportQueue; +const util = require('util'); + +function QueueCaller(io) { + console.log('QueueCaller Initialization...'); + + // ReportQueue.afterCreate(function(doc, options) { + // doc.dataValues.evt = 'ReportQueue.afterCreate'; + // process.send(doc.dataValues); + // + // io.to(doc.queue).emit('report_queue:save', doc); + // }); + + // ReportQueue.afterUpdate(function(doc, options) { + // doc.dataValues.evt = 'ReportQueue.afterUpdate'; + // doc.dataValues.changed = _.keyBy(doc.changed()); + // process.send(doc.dataValues); + // + // io.to(doc.queue).emit('report_queue:update', doc); + // }); +} + +QueueCaller.prototype.join = function(evt, io) { + evt.queuecallerjoinAt = moment().format("YYYY-MM-DD HH:mm:ss"); + return create(evt, io); +} + +QueueCaller.prototype.leave = function(evt, io) { + return findAndUpdate({ + assigned: true, + lastAssignedTo: evt.membername, + uniqueid: evt.uniqueid, + queuecallerleaveAt: moment().format("YYYY-MM-DD HH:mm:ss") + }, io); +} + +QueueCaller.prototype.abandon = function(evt, io) { + evt.queuecallerabandon = true; + evt.queuecallerabandonAt = moment().format("YYYY-MM-DD HH:mm:ss"); + evt.queuecallerleaveAt = moment().format("YYYY-MM-DD HH:mm:ss"); + return findAndUpdate(evt, io); +} + +QueueCaller.prototype.complete = function(evt, io) { + evt.queuecallercomplete = true; + evt.queuecallercompleteAt = moment().format("YYYY-MM-DD HH:mm:ss"); + return findAndUpdate(evt, io); +} + +QueueCaller.prototype.exit = function(evt, io) { + evt.queuecallerabandon = false; + evt.queuecallerabandonAt = null; + + evt.queuecallerexit = true; + evt.queuecallerexitAt = moment().format("YYYY-MM-DD HH:mm:ss"); + evt.queuecallerexitreason = evt.value.toLowerCase(); + + return findAndUpdate(evt, io); +} + +function create(evt, io) { + return ReportQueue + .create(evt) + .then(function(data) { + data.dataValues.evt = 'ReportQueue.afterCreate'; + process.send(data.dataValues); + + io.to(data.queue).emit('report_queue:save', data); + console.log('[report] queue created'); + }) + .catch(function(err) { + console.error('[report] queue ' + err); + }); +} + +function findAndUpdate(evt, io) { + return ReportQueue + .findOne({ + where: { + uniqueid: evt.uniqueid + } + }) + .then(function(reportQueue) { + if (reportQueue) { + return reportQueue + .update(evt); + } + }) + .then(function(doc) { + if (doc) { + doc.dataValues.evt = 'ReportQueue.afterUpdate'; + doc.dataValues.changed = _.keyBy(doc.changed()); + process.send(doc.dataValues); + + io.to(doc.queue).emit('report_queue:update', doc); + console.log('[report] queue update'); + } + }) + .catch(function(err) { + console.error('[queue_caller] update error: ' + err); + }); +} + +module.exports = QueueCaller; diff --git a/server/config/ami/queue_member.js b/server/config/ami/queue_member.js index f9f7fdf..58c3c4a 100644 --- a/server/config/ami/queue_member.js +++ b/server/config/ami/queue_member.js @@ -1 +1,99 @@ -var _0xd247=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x51\x75\x65\x75\x65\x4D\x65\x6D\x62\x65\x72\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x65\x76\x74","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x6E\x64","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x71\x75\x65\x75\x65","\x74\x6F","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x6B\x65\x79\x42\x79","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x3A\x72\x65\x6D\x6F\x76\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x61\x64\x64\x65\x64","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x6C\x61\x73\x74\x63\x61\x6C\x6C","\x63\x61\x6C\x6C\x73\x74\x61\x6B\x65\x6E","\x6C\x6F\x67\x67\x65\x64","\x6C\x6F\x67\x67\x65\x64\x41\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x70\x61\x75\x73\x65","\x70\x61\x75\x73\x65\x64\x41\x74","\x70\x61\x75\x73\x65\x64","\x70\x65\x6E\x61\x6C\x74\x79","\x72\x65\x6D\x6F\x76\x65\x64","\x72\x69\x6E\x67\x69\x6E\x75\x73\x65","\x73\x74\x61\x74\x75\x73","\x5B\x71\x75\x65\x75\x65\x5F\x6D\x65\x6D\x62\x65\x72\x2E\x6A\x73\x5D\x20\x66\x6E\x4E\x61\x6D\x65","\x5B\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x5D\x20\x75\x70\x64\x61\x74\x65\x20\x6D\x65\x6D\x62\x65\x72\x20\x65\x72\x72\x6F\x72\x3A\x20","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x5B\x71\x75\x65\x75\x65\x6D\x65\x6D\x62\x65\x72\x5D\x20\x75\x70\x64\x61\x74\x65\x20\x6D\x65\x6D\x62\x65\x72","\x74\x68\x65\x6E","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x75\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xd247[0];const _=require(_0xd247[1]);const moment=require(_0xd247[2]);const UserHasVoiceQueue=require(_0xd247[4])[_0xd247[3]];function QueueMember(_0x9823x5){console[_0xd247[6]](_0xd247[5]);UserHasVoiceQueue[_0xd247[15]](function(_0x9823x6,_0x9823x7){_0x9823x6[_0xd247[8]][_0xd247[7]]= _0xd247[9];process[_0xd247[10]](_0x9823x6[_0xd247[8]]);_0x9823x5[_0xd247[14]](_0x9823x6[_0xd247[13]])[_0xd247[12]](_0xd247[11],_0x9823x6)});UserHasVoiceQueue[_0xd247[19]](function(_0x9823x6,_0x9823x7){_0x9823x6[_0xd247[8]][_0xd247[7]]= _0xd247[16];_0x9823x6[_0xd247[8]][_0xd247[17]]= _[_0xd247[18]](_0x9823x6[_0xd247[17]]());process[_0xd247[10]](_0x9823x6[_0xd247[8]]);_0x9823x5[_0xd247[14]](_0x9823x6[_0xd247[13]])[_0xd247[12]](_0xd247[11],_0x9823x6)});UserHasVoiceQueue[_0xd247[21]](function(_0x9823x6,_0x9823x7){_0x9823x5[_0xd247[14]](_0x9823x6[_0xd247[13]])[_0xd247[12]](_0xd247[20],_0x9823x6)})}QueueMember[_0xd247[23]][_0xd247[22]]= function(_0x9823x8){delete _0x9823x8[_0xd247[24]];delete _0x9823x8[_0xd247[25]];_0x9823x8[_0xd247[26]]= true;_0x9823x8[_0xd247[27]]= moment()[_0xd247[29]](_0xd247[28]);return findAndUpdate(_0x9823x8,null,_0xd247[22])};QueueMember[_0xd247[23]][_0xd247[30]]= function(_0x9823x8){_0x9823x8[_0xd247[31]]= parseInt(_0x9823x8[_0xd247[32]],10)?moment()[_0xd247[29]](_0xd247[28]):null;return findAndUpdate(_0x9823x8,null,_0xd247[30])};QueueMember[_0xd247[23]][_0xd247[33]]= function(_0x9823x8){return findAndUpdate(_0x9823x8,null,_0xd247[33])};QueueMember[_0xd247[23]][_0xd247[34]]= function(_0x9823x8){return findAndUpdate(_0x9823x8,null,_0xd247[34])};QueueMember[_0xd247[23]][_0xd247[35]]= function(_0x9823x8){return findAndUpdate(_0x9823x8,null,_0xd247[35])};QueueMember[_0xd247[23]][_0xd247[36]]= function(_0x9823x8){return findAndUpdate(_0x9823x8,null,_0xd247[36])};function findAndUpdate(_0x9823x8,_0x9823x7,_0x9823xa){console[_0xd247[6]](_0xd247[37],_0x9823xa);return UserHasVoiceQueue[_0xd247[44]](_0x9823x8,{where:{queue:_0x9823x8[_0xd247[13]],membername:_0x9823x8[_0xd247[43]]},individualHooks:true,raw:true})[_0xd247[42]](function(){console[_0xd247[6]](_0xd247[41])})[_0xd247[40]](function(_0x9823xb){console[_0xd247[39]](_0xd247[38]+ _0x9823xb)})}module[_0xd247[45]]= QueueMember \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const moment = require('moment'); +const UserHasVoiceQueue = require('../../models').UserHasVoiceQueue; + +function QueueMember(io) { + console.log('QueueMember Initialization...'); + + UserHasVoiceQueue.afterCreate(function(doc, options) { + doc.dataValues.evt = 'UserHasVoiceQueue.afterCreate'; + process.send(doc.dataValues); + io.to(doc.queue).emit('user_has_voice_queue:save', doc); + }); + + // UserHasVoiceQueue.afterUpdate(function(doc, options) { + // doc.dataValues.evt = 'UserHasVoiceQueue.afterUpdate'; + // doc.dataValues.changed = _.keyBy(doc.changed()); + // process.send(doc.dataValues); + // + // io.to(doc.queue).emit('user_has_voice_queue:save', doc); + // }); + + UserHasVoiceQueue.afterDestroy(function(doc, options) { + io.to(doc.queue).emit('user_has_voice_queue:remove', doc); + }); + + // UserHasVoiceQueue.afterBulkCreate(function(doc, options) { + // console.log('UserHasVoiceQueue.afterBulkCreate', doc); + // doc.dataValues.evt = 'UserHasVoiceQueue.afterBulkCreate'; + // process.send(doc.dataValues); + // }); + // + // UserHasVoiceQueue.afterBulkDestroy(function(doc, options) { + // console.log('UserHasVoiceQueue.afterBulkDestroy', doc); + // doc.dataValues.evt = 'UserHasVoiceQueue.afterBulkDestroy'; + // process.send(doc.dataValues); + // }); +} + +QueueMember.prototype.added = function(evt, io) { + delete evt.lastcall; + delete evt.callstaken; + + evt.logged = true; + evt.loggedAt = moment().format('YYYY-MM-DD HH:mm:ss'); + return findAndUpdate(evt, io); +} + +QueueMember.prototype.pause = function(evt, io) { + evt.pausedAt = parseInt(evt.paused, 10) ? moment().format('YYYY-MM-DD HH:mm:ss') : null; + return findAndUpdate(evt, io); +} + +QueueMember.prototype.penalty = function(evt, io) { + return findAndUpdate(evt, io); +} + +QueueMember.prototype.removed = function(evt, io) { + return findAndUpdate(evt, io); +} + +QueueMember.prototype.ringinuse = function(evt, io) { + return findAndUpdate(evt, io); +} + +QueueMember.prototype.status = function(evt, io) { + return findAndUpdate(evt, io); +} + +function findAndUpdate(evt, io) { + return UserHasVoiceQueue + .findOne({ + where: { + queue: evt.queue, + membername: evt.membername + } + }) + .then(function(doc) { + if (doc) { + return doc.updateAttributes(evt); + } + }) + .then(function(doc) { + if (doc) { + doc.dataValues.evt = 'UserHasVoiceQueue.afterUpdate'; + doc.dataValues.changed = _.keyBy(doc.changed()); + process.send(doc.dataValues); + + io.to(doc.queue).emit('user_has_voice_queue:save', doc); + console.log('[queuemember] update member'); + } + }) + .catch(function(err) { + console.error('[queuemember] update member error: ' + err); + }); +} + +module.exports = QueueMember; diff --git a/server/config/ami/recording.js b/server/config/ami/recording.js index edf36d1..873d66d 100644 --- a/server/config/ami/recording.js +++ b/server/config/ami/recording.js @@ -1 +1,83 @@ -var _0x168a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x56\x6F\x69\x63\x65\x52\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x63\x72\x65\x61\x74\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x75\x70\x64\x61\x74\x65\x51\x75\x65\x75\x65","\x75\x70\x64\x61\x74\x65\x54\x79\x70\x65","\x74\x79\x70\x65","\x75\x6E\x6B\x6E\x6F\x77\x6E","\x63\x75\x73\x74\x6F\x6D\x65\x72\x50\x68\x6F\x6E\x65","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x20\x63\x72\x65\x61\x74\x65\x20\x65\x72\x72\x6F\x72\x3A","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x20\x71\x75\x65\x75\x65\x20\x75\x70\x64\x61\x74\x65\x20\x65\x72\x72\x6F\x72\x3A","\x71\x75\x65\x75\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x75\x6E\x69\x71\x75\x65\x69\x64","\x75\x70\x64\x61\x74\x65","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x65\x78\x74\x65\x6E","\x73\x61\x76\x65","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x4F\x6E\x65","\x65\x76\x74","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x56\x6F\x69\x63\x65\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x6E\x64","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x56\x6F\x69\x63\x65\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x6B\x65\x79\x42\x79","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x168a[0];const _=require(_0x168a[1]);const VoiceRecording=require(_0x168a[3])[_0x168a[2]];function Recording(){console[_0x168a[5]](_0x168a[4])}Recording[_0x168a[7]][_0x168a[6]]= function(_0xd4a1x4){create(_0xd4a1x4)};Recording[_0x168a[7]][_0x168a[8]]= function(_0xd4a1x4){updateQueue(_0xd4a1x4)};Recording[_0x168a[7]][_0x168a[9]]= function(_0xd4a1x4){updateType(_0xd4a1x4)};function create(_0xd4a1x4){_0xd4a1x4[_0x168a[10]]= _0x168a[11];_0xd4a1x4[_0x168a[12]]= _0xd4a1x4[_0x168a[13]];return VoiceRecording[_0x168a[6]](_0xd4a1x4,{raw:true})[_0x168a[16]](function(_0xd4a1x6){console[_0x168a[15]](_0x168a[14],_0xd4a1x6)})}function updateQueue(_0xd4a1x4){return VoiceRecording[_0x168a[21]]({queue:_0xd4a1x4[_0x168a[18]],membername:_0xd4a1x4[_0x168a[19]]},{where:{uniqueid:_0xd4a1x4[_0x168a[20]]},raw:true,individualHooks:true})[_0x168a[16]](function(_0xd4a1x6){console[_0x168a[15]](_0x168a[17],_0xd4a1x6)})}function updateType(_0xd4a1x4){return VoiceRecording[_0x168a[26]]({where:{uniqueid:_0xd4a1x4[_0x168a[20]]}})[_0x168a[25]](function(_0xd4a1x9){if(_0xd4a1x9){_0xd4a1x9[_0x168a[10]]= _0xd4a1x4[_0x168a[10]];_0xd4a1x9[_0x168a[12]]= _0xd4a1x4[_0x168a[10]]=== _0x168a[22]?_0xd4a1x9[_0x168a[23]]:_0xd4a1x9[_0x168a[13]];return _0xd4a1x9[_0x168a[24]]()}})[_0x168a[16]](function(_0xd4a1x6){console[_0x168a[15]](_0x168a[17],_0xd4a1x6)})}VoiceRecording[_0x168a[31]](function(_0xd4a1xa,_0xd4a1xb){_0xd4a1xa[_0x168a[28]][_0x168a[27]]= _0x168a[29];process[_0x168a[30]](_0xd4a1xa[_0x168a[28]])});VoiceRecording[_0x168a[35]](function(_0xd4a1xa,_0xd4a1xb){_0xd4a1xa[_0x168a[28]][_0x168a[27]]= _0x168a[32];_0xd4a1xa[_0x168a[28]][_0x168a[33]]= _[_0x168a[34]](_0xd4a1xa[_0x168a[33]]());process[_0x168a[30]](_0xd4a1xa[_0x168a[28]])});module[_0x168a[36]]= Recording \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const VoiceRecording = require('../../models').VoiceRecording; + +function Recording() { + console.log('Recording Initialization...'); +} + +Recording.prototype.create = function(evt) { + create(evt); +} + +Recording.prototype.updateQueue = function(evt) { + updateQueue(evt); +} + +Recording.prototype.updateType = function(evt) { + updateType(evt); +} + +function create(evt) { + evt.type = 'unknown'; + evt.customerPhone = evt.calleridnum; + return VoiceRecording + .create(evt, { + raw: true + }) + .catch(function(err) { + console.error('Recording create error:', err); + }); +} + +function updateQueue(evt) { + return VoiceRecording + .update({ + queue: evt.queue, + membername: evt.membername + }, { + where: { + uniqueid: evt.uniqueid + }, + raw: true, + individualHooks: true + }) + .catch(function(err) { + console.error('Recording queue update error:', err); + }); +} + +function updateType(evt) { + return VoiceRecording + .findOne({ + where: { + uniqueid: evt.uniqueid + } + }) + .then(function(recording) { + if (recording) { + recording.type = evt.type; + recording.customerPhone = evt.type === 'outbound' ? recording.exten : recording.calleridnum; + + return recording + .save(); + } + }) + .catch(function(err) { + console.error('Recording queue update error:', err); + }); +} + +VoiceRecording.afterCreate(function(doc, options) { + doc.dataValues.evt = 'VoiceRecording.afterCreate'; + process.send(doc.dataValues); +}); + +VoiceRecording.afterUpdate(function(doc, options) { + doc.dataValues.evt = 'VoiceRecording.afterUpdate'; + doc.dataValues.changed = _.keyBy(doc.changed()); + process.send(doc.dataValues); +}); + +module.exports = Recording; diff --git a/server/config/ami/transfer.js b/server/config/ami/transfer.js index 164ce7d..9e41ba4 100644 --- a/server/config/ami/transfer.js +++ b/server/config/ami/transfer.js @@ -1 +1,56 @@ -var _0xe9d6=["\x6D\x6F\x6D\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C\x54\x72\x61\x6E\x73\x66\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x54\x72\x61\x6E\x73\x66\x65\x72\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x63\x72\x65\x61\x74\x65\x42\x6C\x69\x6E\x64","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x5B\x62\x6C\x69\x6E\x64\x20\x74\x72\x61\x6E\x66\x65\x72\x5D\x20\x63\x72\x65\x61\x74\x65\x64\x20\x65\x72\x72\x6F\x72\x3A\x20","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x5B\x62\x6C\x69\x6E\x64\x20\x74\x72\x61\x6E\x66\x65\x72\x5D\x20\x63\x72\x65\x61\x74\x65\x64","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x41\x74\x74\x65\x6E\x64\x65\x64","\x5B\x61\x74\x74\x65\x6E\x64\x65\x64\x20\x74\x72\x61\x6E\x66\x65\x72\x5D\x20\x63\x72\x65\x61\x74\x65\x64\x20\x65\x72\x72\x6F\x72\x3A\x20","\x5B\x61\x74\x74\x65\x6E\x64\x65\x64\x20\x74\x72\x61\x6E\x66\x65\x72\x5D\x20\x63\x72\x65\x61\x74\x65\x64","\x72\x65\x73\x75\x6C\x74","\x6F\x72\x69\x67\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x63\x68\x61\x6E\x6E\x65\x6C","\x6F\x72\x69\x67\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x6F\x72\x69\x67\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x73\x65\x63\x6F\x6E\x64\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x6C\x69\x6E\x65\x6E\x75\x6D","\x73\x65\x63\x6F\x6E\x64\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x6C\x69\x6E\x65\x6E\x61\x6D\x65","\x6F\x72\x69\x67\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x61\x63\x63\x6F\x75\x6E\x74\x63\x6F\x64\x65","\x73\x65\x63\x6F\x6E\x64\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x63\x6F\x6E\x74\x65\x78\x74","\x73\x65\x63\x6F\x6E\x64\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x65\x78\x74\x65\x6E","\x6F\x72\x69\x67\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x6C\x69\x6E\x6B\x65\x64\x69\x64","\x74\x72\x61\x6E\x73\x66\x65\x72\x74\x61\x72\x67\x65\x74\x63\x68\x61\x6E\x6E\x65\x6C","\x74\x72\x61\x6E\x73\x66\x65\x72\x74\x61\x72\x67\x65\x74\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x74\x72\x61\x6E\x73\x66\x65\x72\x74\x61\x72\x67\x65\x74\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x74\x72\x61\x6E\x73\x66\x65\x72\x74\x61\x72\x67\x65\x74\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x6C\x69\x6E\x65\x6E\x75\x6D","\x74\x72\x61\x6E\x73\x66\x65\x72\x74\x61\x72\x67\x65\x74\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x6C\x69\x6E\x65\x6E\x61\x6D\x65","\x74\x72\x61\x6E\x73\x66\x65\x72\x74\x61\x72\x67\x65\x74\x61\x63\x63\x6F\x75\x6E\x74\x63\x6F\x64\x65","\x74\x72\x61\x6E\x73\x66\x65\x72\x74\x61\x72\x67\x65\x74\x63\x6F\x6E\x74\x65\x78\x74","\x74\x72\x61\x6E\x73\x66\x65\x72\x74\x61\x72\x67\x65\x74\x65\x78\x74\x65\x6E","\x74\x72\x61\x6E\x73\x66\x65\x72\x74\x61\x72\x67\x65\x74\x6C\x69\x6E\x6B\x65\x64\x69\x64","\x69\x73\x65\x78\x74\x65\x72\x6E\x61\x6C","\x6F\x72\x69\x67\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x63\x6F\x6E\x74\x65\x78\x74","\x6F\x72\x69\x67\x74\x72\x61\x6E\x73\x66\x65\x72\x65\x72\x65\x78\x74\x65\x6E","\x61\x74\x74\x65\x6E\x64\x65\x64","\x65\x78\x70\x6F\x72\x74\x73"];var moment=require(_0xe9d6[0]);var ReportCallTransfer=require(_0xe9d6[2])[_0xe9d6[1]];function Transfer(){console[_0xe9d6[4]](_0xe9d6[3])}Transfer[_0xe9d6[6]][_0xe9d6[5]]= function(_0x9655x4){return ReportCallTransfer[_0xe9d6[12]](_0x9655x4,{raw:true})[_0xe9d6[11]](function(){console[_0xe9d6[4]](_0xe9d6[10])})[_0xe9d6[9]](function(_0x9655x5){console[_0xe9d6[8]](_0xe9d6[7]+ _0x9655x5)})};Transfer[_0xe9d6[6]][_0xe9d6[13]]= function(_0x9655x4){return ReportCallTransfer[_0xe9d6[12]]({result:_0x9655x4[_0xe9d6[16]],transfererchannel:_0x9655x4[_0xe9d6[17]],transferercalleridnum:_0x9655x4[_0xe9d6[18]],transferercalleridname:_0x9655x4[_0xe9d6[19]],transfererconnectedlinenum:_0x9655x4[_0xe9d6[20]],transfererconnectedlinename:_0x9655x4[_0xe9d6[21]],transfereraccountcode:_0x9655x4[_0xe9d6[22]],transferercontext:_0x9655x4[_0xe9d6[23]],transfererexten:_0x9655x4[_0xe9d6[24]],transfererlinkedid:_0x9655x4[_0xe9d6[25]],transfereechannel:_0x9655x4[_0xe9d6[26]],transfereecalleridnum:_0x9655x4[_0xe9d6[27]],transfereecalleridname:_0x9655x4[_0xe9d6[28]],transfereeconnectedlinenum:_0x9655x4[_0xe9d6[29]],transfereeconnectedlinename:_0x9655x4[_0xe9d6[30]],transfereeaccountcode:_0x9655x4[_0xe9d6[31]],transfereecontext:_0x9655x4[_0xe9d6[32]],transfereeexten:_0x9655x4[_0xe9d6[33]],transfereelinkedid:_0x9655x4[_0xe9d6[34]],isexternal:_0x9655x4[_0xe9d6[35]],context:_0x9655x4[_0xe9d6[36]],extension:_0x9655x4[_0xe9d6[37]],type:_0xe9d6[38]})[_0xe9d6[11]](function(){console[_0xe9d6[4]](_0xe9d6[15])})[_0xe9d6[9]](function(_0x9655x5){console[_0xe9d6[8]](_0xe9d6[14]+ _0x9655x5)})};module[_0xe9d6[39]]= Transfer \ No newline at end of file +var moment = require('moment'); +var ReportCallTransfer = require('../../models').ReportCallTransfer; + +function Transfer() { + console.log('Transfer Initialization...'); +} + +Transfer.prototype.createBlind = function(evt) { + return ReportCallTransfer + .create(evt, { + raw: true + }) + .then(function() { + console.log('[blind tranfer] created'); + }) + .catch(function(err) { + console.error('[blind tranfer] created error: ' + err); + }); +} + +Transfer.prototype.createAttended = function(evt) { + return ReportCallTransfer + .create({ + result: evt.result, + transfererchannel: evt.origtransfererchannel, + transferercalleridnum: evt.origtransferercalleridnum, + transferercalleridname: evt.origtransferercalleridname, + transfererconnectedlinenum: evt.secondtransfererconnectedlinenum, + transfererconnectedlinename: evt.secondtransfererconnectedlinename, + transfereraccountcode: evt.origtransfereraccountcode, + transferercontext: evt.secondtransferercontext, + transfererexten: evt.secondtransfererexten, + transfererlinkedid: evt.origtransfererlinkedid, + transfereechannel: evt.transfertargetchannel, + transfereecalleridnum: evt.transfertargetcalleridnum, + transfereecalleridname: evt.transfertargetcalleridname, + transfereeconnectedlinenum: evt.transfertargetconnectedlinenum, + transfereeconnectedlinename: evt.transfertargetconnectedlinename, + transfereeaccountcode: evt.transfertargetaccountcode, + transfereecontext: evt.transfertargetcontext, + transfereeexten: evt.transfertargetexten, + transfereelinkedid: evt.transfertargetlinkedid, + isexternal: evt.isexternal, + context: evt.origtransferercontext, + extension: evt.origtransfererexten, + type: 'attended' + }) + .then(function() { + console.log('[attended tranfer] created'); + }) + .catch(function(err) { + console.error('[attended tranfer] created error: ' + err); + }); +} + +module.exports = Transfer; diff --git a/server/config/ami/trunk.js b/server/config/ami/trunk.js index 759f0fc..de418bd 100644 --- a/server/config/ami/trunk.js +++ b/server/config/ami/trunk.js @@ -1 +1,194 @@ -var _0xec0b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x54\x72\x75\x6E\x6B","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x66\x73","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x6C\x6F\x64\x61\x73\x68","\x54\x72\x75\x6E\x6B\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x6D\x65\x73\x73\x61\x67\x65","\x61\x63\x74\x69\x76\x65","\x54\x72\x75\x6E\x6B\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x63\x68\x61\x6E\x67\x65\x64","\x70\x65\x65\x72\x73\x74\x61\x74\x75\x73","\x54\x72\x75\x6E\x6B\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x54\x72\x75\x6E\x6B\x2E\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x65\x76\x74","\x6F\x6E","\x73\x74\x61\x74\x75\x73\x55\x70\x64\x61\x74\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x54\x72\x75\x6E\x6B\x20\x73\x74\x61\x74\x75\x73\x20\x75\x70\x64\x61\x74\x65\x20\x65\x72\x72\x6F\x72\x3A","\x63\x61\x74\x63\x68","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x64\x6F\x6D\x61\x69\x6E","","\x75\x70\x64\x61\x74\x65","\x70\x65\x65\x72\x73\x74\x61\x74\x75\x73\x55\x70\x64\x61\x74\x65","\x54\x72\x75\x6E\x6B\x20\x70\x65\x65\x72\x73\x74\x61\x74\x75\x73\x20\x75\x70\x64\x61\x74\x65\x20\x65\x72\x72\x6F\x72\x3A","\x2F","\x73\x70\x6C\x69\x74","\x70\x65\x65\x72","\x72\x65\x67\x69\x73\x74\x65\x72\x20\x3D\x3E\x20\x25\x73\x0A","\x63\x6C\x6F\x6E\x65","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x72\x65\x67\x69\x73\x74\x72\x79","\x66\x6F\x72\x6D\x61\x74","\x5B\x25\x73\x5D\x0A","\x6E\x61\x6D\x65","\x6F\x74\x68\x65\x72\x46\x69\x65\x6C\x64\x73","\x25\x73\x0A","\x3B","\x25\x73\x3D\x25\x73\x0A","\x66\x6F\x72\x45\x61\x63\x68","\x61\x6C\x6C\x6F\x77","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x6D\x61\x70","\x61\x73\x74\x65\x72\x69\x73\x6B\x43\x6F\x6E\x66","\x73\x69\x70\x5F\x78\x63\x61\x6C\x6C\x79\x5F\x74\x72\x75\x6E\x6B\x73\x2E\x63\x6F\x6E\x66","\x6A\x6F\x69\x6E","\x77","\x30\x37\x37\x37","\x54\x72\x75\x6E\x6B\x73\x20\x66\x69\x6C\x65\x20\x73\x61\x76\x65\x64\x21","\x73\x69\x70\x5F\x78\x63\x61\x6C\x6C\x79\x5F\x72\x65\x67\x69\x73\x74\x65\x72\x73\x2E\x63\x6F\x6E\x66","\x54\x72\x75\x6E\x6B\x73\x20\x72\x65\x67\x69\x73\x74\x65\x72\x20\x66\x69\x6C\x65\x20\x73\x61\x76\x65\x64\x21","\x77\x72\x69\x74\x65\x46\x69\x6C\x65","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x52\x65\x6C\x6F\x61\x64","\x65\x72\x72\x6F\x72","\x61\x63\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73"];_0xec0b[0];var TrunkModel=require(_0xec0b[2])[_0xec0b[1]];var fs=require(_0xec0b[3]);var util=require(_0xec0b[4]);var path=require(_0xec0b[5]);var config=require(_0xec0b[6]);var _=require(_0xec0b[7]);function Trunk(_0xe7c0x8){console[_0xec0b[9]](_0xec0b[8]);process[_0xec0b[19]](_0xec0b[10],function(_0xe7c0x9){switch(_0xe7c0x9[_0xec0b[18]]){case _0xec0b[12]:if(_0xe7c0x9[_0xec0b[11]]){trunksRewrite(_0xe7c0x9,_0xe7c0x8,false)};break;case _0xec0b[16]:if(!_0xe7c0x9[_0xec0b[14]][_0xec0b[13]]&& !_0xe7c0x9[_0xec0b[14]][_0xec0b[15]]){trunksRewrite(_0xe7c0x9,_0xe7c0x8,false)};break;case _0xec0b[17]:trunksRewrite(_0xe7c0x9,_0xe7c0x8,true);break;default:}})}Trunk[_0xec0b[21]][_0xec0b[20]]= function(_0xe7c0xa){return TrunkModel[_0xec0b[27]]({status:_0xe7c0xa[_0xec0b[13]]},{where:{defaultuser:_0xe7c0xa[_0xec0b[24]],host:_0xe7c0xa[_0xec0b[25]],active:true,$and:[{registry:{$ne:_0xec0b[26]}},{registry:{$ne:null}}]},individualHooks:true,raw:true})[_0xec0b[23]](function(_0xe7c0xb){console[_0xec0b[9]](_0xec0b[22],_0xe7c0xb)})};Trunk[_0xec0b[21]][_0xec0b[28]]= function(_0xe7c0xa){return TrunkModel[_0xec0b[27]]({peerstatus:_0xe7c0xa[_0xec0b[15]]},{where:{name:_0xe7c0xa[_0xec0b[32]][_0xec0b[31]](_0xec0b[30])[1]},individualHooks:true,raw:true})[_0xec0b[23]](function(_0xe7c0xb){console[_0xec0b[9]](_0xec0b[29],_0xe7c0xb)})};function trunksRewrite(_0xe7c0x9,_0xe7c0x8,_0xe7c0xd){var _0xe7c0xe=_0xec0b[26];var _0xe7c0xf=_0xec0b[26];var _0xe7c0x10=_0xec0b[33];if(!_0xe7c0xd&& _0xe7c0x9[_0xec0b[11]]){var _0xe7c0x11=_[_0xec0b[34]](_0xe7c0x9);delete _0xe7c0x11[_0xec0b[35]];delete _0xe7c0x11[_0xec0b[36]];delete _0xe7c0x11[_0xec0b[11]];delete _0xe7c0x11[_0xec0b[13]];delete _0xe7c0x11[_0xec0b[15]];delete _0xe7c0x11[_0xec0b[18]];delete _0xe7c0x11[_0xec0b[14]];if(_0xe7c0x11[_0xec0b[37]]){_0xe7c0xf+= util[_0xec0b[38]](_0xe7c0x10,_0xe7c0x11[_0xec0b[37]])};delete _0xe7c0x11[_0xec0b[37]];_0xe7c0xe+= util[_0xec0b[38]](_0xec0b[39],_0xe7c0x11[_0xec0b[40]]);if(_0xe7c0x11[_0xec0b[41]]){_0xe7c0xe+= util[_0xec0b[38]](_0xec0b[42],_0xe7c0x11[_0xec0b[41]]);delete _0xe7c0x11[_0xec0b[41]]};for(var _0xe7c0x12 in _0xe7c0x11){if(_0xe7c0x11[_0xe7c0x12]){switch(_0xe7c0x12){case _0xec0b[46]:var _0xe7c0x13=_0xe7c0x11[_0xe7c0x12][_0xec0b[31]](_0xec0b[43]);_0xe7c0x13[_0xec0b[45]](function(_0xe7c0x14){_0xe7c0xe+= util[_0xec0b[38]](_0xec0b[44],_0xe7c0x12,_0xe7c0x14)});break;default:_0xe7c0xe+= util[_0xec0b[38]](_0xec0b[44],_0xe7c0x12,_0xe7c0x11[_0xe7c0x12])}}}};return TrunkModel[_0xec0b[59]]({where:{name:{$ne:_0xe7c0x9[_0xec0b[40]]},active:true}})[_0xec0b[58]](function(_0xe7c0x15){var _0xe7c0x16=_[_0xec0b[48]](_0xe7c0x15,_0xec0b[47]);_0xe7c0x16[_0xec0b[45]](function(_0xe7c0x17){delete _0xe7c0x17[_0xec0b[35]];delete _0xe7c0x17[_0xec0b[36]];delete _0xe7c0x17[_0xec0b[11]];delete _0xe7c0x17[_0xec0b[13]];delete _0xe7c0x17[_0xec0b[15]];if(_0xe7c0x17[_0xec0b[37]]){_0xe7c0xf+= util[_0xec0b[38]](_0xe7c0x10,_0xe7c0x17[_0xec0b[37]])};delete _0xe7c0x17[_0xec0b[37]];_0xe7c0xe+= util[_0xec0b[38]](_0xec0b[39],_0xe7c0x17[_0xec0b[40]]);if(_0xe7c0x17[_0xec0b[41]]){_0xe7c0xe+= util[_0xec0b[38]](_0xec0b[42],_0xe7c0x17[_0xec0b[41]]);delete _0xe7c0x17[_0xec0b[41]]};for(var _0xe7c0x12 in _0xe7c0x17){if(_0xe7c0x17[_0xe7c0x12]){switch(_0xe7c0x12){case _0xec0b[46]:var _0xe7c0x13=_0xe7c0x17[_0xe7c0x12][_0xec0b[31]](_0xec0b[43]);_0xe7c0x13[_0xec0b[45]](function(_0xe7c0x14){_0xe7c0xe+= util[_0xec0b[38]](_0xec0b[44],_0xe7c0x12,_0xe7c0x14)});break;default:_0xe7c0xe+= util[_0xec0b[38]](_0xec0b[44],_0xe7c0x12,_0xe7c0x17[_0xe7c0x12])}}}});fs[_0xec0b[57]](path[_0xec0b[51]](config[_0xec0b[49]],_0xec0b[50]),_0xe7c0xe,{flags:_0xec0b[52],mode:parseInt(_0xec0b[53],8)},function(_0xe7c0xb){if(_0xe7c0xb){throw _0xe7c0xb};console[_0xec0b[9]](_0xec0b[54]);fs[_0xec0b[57]](path[_0xec0b[51]](config[_0xec0b[49]],_0xec0b[55]),_0xe7c0xf,{flags:_0xec0b[52],mode:parseInt(_0xec0b[53],8)},function(_0xe7c0xb){if(_0xe7c0xb){throw _0xe7c0xb};reload(_0xe7c0x8);console[_0xec0b[9]](_0xec0b[56])})})})[_0xec0b[23]](function(_0xe7c0xb){console[_0xec0b[9]](_0xe7c0xb)})}function reload(_0xe7c0x8){_0xe7c0x8[_0xec0b[62]]({Action:_0xec0b[60]},function(_0xe7c0xb,_0xe7c0x19){if(_0xe7c0xb){console[_0xec0b[61]](_0xe7c0xb)}else {console[_0xec0b[9]](_0xe7c0x19)}})}module[_0xec0b[63]]= Trunk \ No newline at end of file +'use strict'; + +var TrunkModel = require('../../models').Trunk; + +var fs = require('fs'); +var util = require('util'); +var path = require('path'); +var config = require('../../config/environment'); +var _ = require('lodash'); + +function Trunk(ami) { + console.log('Trunk Initialization...'); + process.on('message', function(doc) { + switch (doc.evt) { + case 'Trunk.afterCreate': + if (doc.active) { + trunksRewrite(doc, ami, false); + } + break; + case 'Trunk.afterUpdate': + if (!doc.changed.status && !doc.changed.peerstatus) { //not needed since the update is notified only by the index in the main process, so by the api calls only + trunksRewrite(doc, ami, false); + } + break; + case 'Trunk.afterDestroy': + trunksRewrite(doc, ami, true); + break; + default: + } + }); +} + +Trunk.prototype.statusUpdate = function(evt) { + return TrunkModel + .update({ + status: evt.status + }, { + where: { + defaultuser: evt.username, + host: evt.domain, + active: true, + $and: [{ + registry: { + $ne: '' + } + }, { + registry: { + $ne: null + } + }] + }, + individualHooks: true, + raw: true + }) + .catch(function(err) { + console.log('Trunk status update error:', err); + }); +} + +Trunk.prototype.peerstatusUpdate = function(evt) { + return TrunkModel + .update({ + peerstatus: evt.peerstatus + }, { + where: { + name: evt.peer.split('/')[1], + }, + individualHooks: true, + raw: true + }) + .catch(function(err) { + console.log('Trunk peerstatus update error:', err); + }); +} + +function trunksRewrite(doc, ami, deleteTrunk) { + var trunksFile = ''; + var trunksRegistersFile = ''; + var registryString = 'register => %s\n'; + if (!deleteTrunk && doc.active) { + var newTrunk = _.clone(doc); + delete newTrunk.createdAt; + delete newTrunk.updatedAt; + delete newTrunk.active; + delete newTrunk.status; + delete newTrunk.peerstatus; + delete newTrunk.evt; + delete newTrunk.changed; + + if (newTrunk.registry) { + trunksRegistersFile += util.format(registryString, newTrunk.registry); + } + delete newTrunk.registry; + + trunksFile += util.format('[%s]\n', newTrunk.name); + if (newTrunk.otherFields) { + trunksFile += util.format('%s\n', newTrunk.otherFields); + delete newTrunk.otherFields; + } + for (var key in newTrunk) { + if (newTrunk[key]) { + switch (key) { + case 'allow': + var codecs = newTrunk[key].split(';'); + codecs.forEach(function(elem) { + trunksFile += util.format('%s=%s\n', key, elem); + }); + break; + default: + trunksFile += util.format('%s=%s\n', key, newTrunk[key]); + } + } + } + } + return TrunkModel + .findAll({ + where: { + name: { + $ne: doc.name, + }, + active: true + } + }) + .then(function(trunks) { + var oldTrunks = _.map(trunks, 'dataValues'); + oldTrunks.forEach(function(element) { + delete element.createdAt; + delete element.updatedAt; + delete element.active; + delete element.status; + delete element.peerstatus; + + if (element.registry) { + trunksRegistersFile += util.format(registryString, element.registry); + } + delete element.registry; + + trunksFile += util.format('[%s]\n', element.name); + if (element.otherFields) { + trunksFile += util.format('%s\n', element.otherFields); + delete element.otherFields; + } + for (var key in element) { + if (element[key]) { + switch (key) { + case 'allow': + var codecs = element[key].split(';'); + codecs.forEach(function(elem) { + trunksFile += util.format('%s=%s\n', key, elem); + }) + break; + default: + trunksFile += util.format('%s=%s\n', key, element[key]); + } + } + } + }); + fs.writeFile(path.join(config.asteriskConf, 'sip_xcally_trunks.conf'), trunksFile, { + flags: 'w', + mode: parseInt('0777', 8) + }, function(err) { + if (err) throw err; + console.log("Trunks file saved!"); + fs.writeFile(path.join(config.asteriskConf, 'sip_xcally_registers.conf'), trunksRegistersFile, { + flags: 'w', + mode: parseInt('0777', 8) + }, function(err) { + if (err) throw err; + reload(ami); + console.log("Trunks register file saved!"); + }); + }); + + + }) + .catch(function(err) { + console.log(err); + }); +} + +function reload(ami) { + ami.action({ + Action: 'Reload' + }, function(err, res) { + if (err) { + console.error(err); + } else { + console.log(res); + } + }); +} + + +module.exports = Trunk; diff --git a/server/config/ami/user.js b/server/config/ami/user.js index da3d297..328223f 100644 --- a/server/config/ami/user.js +++ b/server/config/ami/user.js @@ -1 +1,110 @@ -var _0x7e0b=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x62\x6C\x75\x65\x62\x69\x72\x64","\x75\x74\x69\x6C","\x51\x75\x65\x75\x65\x4D\x65\x6D\x62\x65\x72\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x6D\x65\x73\x73\x61\x67\x65","\x6F\x6E\x6C\x69\x6E\x65","\x63\x68\x61\x6E\x67\x65\x64","\x41\x67\x65\x6E\x74\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x65\x76\x74","\x6F\x6E","\x72\x6F\x6C\x65","\x61\x67\x65\x6E\x74","\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x6B\x65\x79\x42\x79","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x50\x72\x75\x6E\x65\x20\x65\x72\x72\x6F\x72\x3A","\x63\x61\x74\x63\x68","\x41\x67\x65\x6E\x74\x20","\x6E\x61\x6D\x65","\x20\x72\x65\x6C\x6F\x61\x64\x65\x64\x20\x69\x6E\x74\x6F\x20\x72\x65\x61\x6C\x74\x69\x6D\x65\x20\x63\x61\x63\x68\x65\x21","\x74\x68\x65\x6E","\x20\x70\x72\x75\x6E\x65\x64\x20\x66\x72\x6F\x6D\x20\x72\x65\x61\x6C\x74\x69\x6D\x65\x20\x63\x61\x63\x68\x65\x21","\x43\x6F\x6D\x6D\x61\x6E\x64","\x73\x69\x70\x20\x73\x68\x6F\x77\x20\x70\x65\x65\x72\x20","\x20\x6C\x6F\x61\x64","\x61\x63\x74\x69\x6F\x6E","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x70\x6F\x70","\x20","\x73\x70\x6C\x69\x74","","\x72\x65\x70\x6C\x61\x63\x65","\x52\x65\x73\x70\x6F\x6E\x73\x65\x3A\x20\x46\x6F\x6C\x6C\x6F\x77\x73\x50\x72\x69\x76\x69\x6C\x65\x67\x65\x3A\x20\x43\x6F\x6D\x6D\x61\x6E\x64","\x63\x6F\x6E\x74\x65\x6E\x74","\x66\x6F\x75\x6E\x64\x2E","\x73\x69\x70\x20\x70\x72\x75\x6E\x65\x20\x72\x65\x61\x6C\x74\x69\x6D\x65\x20","\x73\x74\x61\x74\x65\x55\x70\x64\x61\x74\x65","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x73\x74\x61\x74\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x53\x49\x50\x2F","\x64\x65\x76\x69\x63\x65","\x71\x75\x65\x75\x65\x53\x74\x61\x74\x75\x73\x55\x70\x64\x61\x74\x65","\x71\x75\x65\x75\x65","\x65\x76\x65\x6E\x74","\x51\x75\x65\x75\x65\x43\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x63\x6F\x6E\x6E\x65\x63\x74","\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x70\x61\x75\x73\x65","\x70\x61\x75\x73\x65\x64","\x72\x65\x61\x73\x6F\x6E","\x5B\x75\x73\x65\x72\x5D\x20\x73\x74\x61\x74\x75\x73\x20\x75\x70\x64\x61\x74\x65\x20\x65\x72\x72\x6F\x72\x3A\x20","\x65\x72\x72\x6F\x72","\x5B\x75\x73\x65\x72\x5D\x20\x73\x74\x61\x74\x75\x73\x20\x75\x70\x64\x61\x74\x65","\x75\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x7e0b[0];const _=require(_0x7e0b[1]);const moment=require(_0x7e0b[2]);const UserModel=require(_0x7e0b[4])[_0x7e0b[3]];const Promise=require(_0x7e0b[5]);const util=require(_0x7e0b[6]);function User(_0xb29fx7,_0xb29fx8){console[_0x7e0b[8]](_0x7e0b[7]);process[_0x7e0b[14]](_0x7e0b[9],function(_0xb29fx9){switch(_0xb29fx9[_0x7e0b[13]]){case _0x7e0b[12]:!_0xb29fx9[_0x7e0b[11]][_0x7e0b[10]]&& prune(_0xb29fx7,_0xb29fx9);break;default:}});UserModel[_0x7e0b[20]](function(_0xb29fx9,_0xb29fxa){if((_0xb29fx9[_0x7e0b[15]]=== _0x7e0b[16]|| _0xb29fx9[_0x7e0b[15]]=== _0x7e0b[17])&& _0xb29fx9[_0x7e0b[11]](_0x7e0b[10])){_0xb29fx9[_0x7e0b[18]][_0x7e0b[11]]= _[_0x7e0b[19]](_0xb29fx9[_0x7e0b[11]]());prune(_0xb29fx7,_0xb29fx9[_0x7e0b[18]])}})}function prune(_0xb29fx7,_0xb29fx9){var _0xb29fxc;return Promise[_0x7e0b[32]](_0xb29fx7[_0x7e0b[31]])({action:_0x7e0b[28],command:_0x7e0b[29]+ _0xb29fx9[_0x7e0b[24]]})[_0x7e0b[26]](function(_0xb29fxe){_0xb29fxc= _0xb29fxe[_0x7e0b[39]][_0x7e0b[37]](/(?:\r\n|\r|\n)/g,_0x7e0b[36])[_0x7e0b[37]](_0x7e0b[38],_0x7e0b[36])[_0x7e0b[37]](/ActionID: .[0-9]*/,_0x7e0b[36])[_0x7e0b[37]](/ActionID: .[0-9]*/,_0x7e0b[36])[_0x7e0b[35]](_0x7e0b[34])[_0x7e0b[33]]();_0xb29fxc= _0xb29fxc=== _0x7e0b[40]?false:true;if((!_0xb29fx9[_0x7e0b[10]]&& _0xb29fx9[_0x7e0b[11]][_0x7e0b[10]])|| _0xb29fx9[_0x7e0b[10]]|| _0xb29fxc){return Promise[_0x7e0b[32]](_0xb29fx7[_0x7e0b[31]])({action:_0x7e0b[28],command:_0x7e0b[41]+ _0xb29fx9[_0x7e0b[24]]})}})[_0x7e0b[26]](function(_0xb29fxe){_0xb29fxe&& console[_0x7e0b[8]](_0x7e0b[23]+ _0xb29fx9[_0x7e0b[24]]+ _0x7e0b[27]);if(_0xb29fx9[_0x7e0b[10]]|| (_0xb29fxc&& _0xb29fx9[_0x7e0b[15]]!== _0x7e0b[16])){return Promise[_0x7e0b[32]](_0xb29fx7[_0x7e0b[31]])({action:_0x7e0b[28],command:_0x7e0b[29]+ _0xb29fx9[_0x7e0b[24]]+ _0x7e0b[30]})}})[_0x7e0b[26]](function(_0xb29fxe){_0xb29fxe&& console[_0x7e0b[8]](_0x7e0b[23]+ _0xb29fx9[_0x7e0b[24]]+ _0x7e0b[25])})[_0x7e0b[22]](function(_0xb29fxd){console[_0x7e0b[8]](_0x7e0b[21],_0xb29fxd)})}User[_0x7e0b[43]][_0x7e0b[42]]= function(_0xb29fxf){var _0xb29fx10={status:_0xb29fxf[_0x7e0b[44]],statusAt:moment()[_0x7e0b[46]](_0x7e0b[45])};var _0xb29fx11={name:_0xb29fxf[_0x7e0b[48]][_0x7e0b[37]](_0x7e0b[47],_0x7e0b[36])};return findAndUpdate(_0xb29fx10,_0xb29fx11)};User[_0x7e0b[43]][_0x7e0b[49]]= function(_0xb29fx12,_0xb29fxf){var _0xb29fx10={queueStatus:_0xb29fx12,queueStatusAt:moment()[_0x7e0b[46]](_0x7e0b[45]),lastQueue:_0xb29fxf[_0x7e0b[50]]};var _0xb29fx11=(_0xb29fxf[_0x7e0b[51]]=== _0x7e0b[52])?{lastQueue:_0xb29fxf[_0x7e0b[50]],voicePause:{$ne:true}}:{name:_0xb29fxf[_0x7e0b[53]],voicePause:{$ne:true}};findAndUpdate(_0xb29fx10,_0xb29fx11);if(_0xb29fx12=== _0x7e0b[54]){findAndUpdate({queueStatus:_0x7e0b[55],queueStatusAt:moment()[_0x7e0b[46]](_0x7e0b[45])},{lastQueue:_0xb29fxf[_0x7e0b[50]],name:{$ne:_0xb29fxf[_0x7e0b[53]]},voicePause:{$ne:true}})}};User[_0x7e0b[43]][_0x7e0b[56]]= function(_0xb29fxf){if(parseInt(_0xb29fxf[_0x7e0b[57]],10)){return findAndUpdate({voicePause:true,chatPause:true,mailPause:true,faxPause:true,smsPause:true,openchannelPause:true,pauseType:_0xb29fxf[_0x7e0b[58]],lastPauseAt:moment()[_0x7e0b[46]](_0x7e0b[45])},{name:_0xb29fxf[_0x7e0b[53]]})}};function findAndUpdate(_0xb29fx10,_0xb29fx11){return UserModel[_0x7e0b[62]](_0xb29fx10,{where:_0xb29fx11,individualHooks:true})[_0x7e0b[26]](function(_0xb29fx14){console[_0x7e0b[8]](_0x7e0b[61])})[_0x7e0b[22]](function(_0xb29fxd){console[_0x7e0b[60]](_0x7e0b[59]+ _0xb29fxd)})}module[_0x7e0b[63]]= User \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const moment = require('moment'); +const UserModel = require('../../models').User; +const Promise = require('bluebird'); +const util = require('util'); + +function User(ami, io) { + console.log('QueueMember Initialization...'); + // process.on('message', function(doc) { + // switch (doc.evt) { + // case 'Agent.afterUpdate': + // !doc.changed.online && prune(ami, doc); + // break; + // default: + // } + // }); + + // UserModel.afterUpdate(function(doc, options) { + // if (doc.role === 'agent' && doc.changed('online')) { + // doc.dataValues.changed = _.keyBy(doc.changed()); + // prune(ami, doc.dataValues);//moved to actions + // } + // }); +} + +User.prototype.stateUpdate = function(evt, io) { + var obj = { + status: evt.state, + statusAt: moment().format("YYYY-MM-DD HH:mm:ss") + } + var condition = { + name: evt.device.replace('SIP/', '') + }; + return findAndUpdate(obj, condition, io); +} + +User.prototype.queueStatusUpdate = function(status, evt, io) { + var obj = { + queueStatus: status, + queueStatusAt: moment().format("YYYY-MM-DD HH:mm:ss"), + lastQueue: evt.queue + }; + var condition = (evt.event === 'QueueCallerAbandon') ? { + lastQueue: evt.queue, + voicePause: false + } : { + name: evt.membername, + voicePause: false + }; + findAndUpdate(obj, condition, io); + if (status === 'connect') { + findAndUpdate({ + queueStatus: 'complete', + queueStatusAt: moment().format("YYYY-MM-DD HH:mm:ss") + }, { + lastQueue: evt.queue, + name: { + $ne: evt.membername + }, + voicePause: false + }, io); + } +} + +User.prototype.pause = function(evt, io) { + if (parseInt(evt.paused, 10)) { + return findAndUpdate({ + voicePause: true, + chatPause: true, + mailPause: true, + faxPause: true, + smsPause: true, + openchannelPause: true, + pauseType: evt.reason, + lastPauseAt: moment().format("YYYY-MM-DD HH:mm:ss"), + // queuestatus: 'paused', + // queueStatusAt: moment().format("YYYY-MM-DD HH:mm:ss") + }, { + name: evt.membername + }, io); + } +} + +function findAndUpdate(obj, condition, io) { + return UserModel + .update(obj, { + where: condition, + individualHooks: true, + raw: true + }) + .then(function(data) { + _.forEach(data[1], function(doc) { + var _changed = doc.changed(); + doc.dataValues.newValues = _.pickBy(doc.dataValues, function(value, key) { + return _.has(doc._changed, key) || _.includes(_changed, key) || key === 'id'; + }); + io.to(util.format('%s:%s', doc.role, doc.id)).emit('agent:save', doc); + io.to('users').emit('agent:save', doc); + io.to('admins').emit('agent:save', doc); + console.log('[user] status update'); + }); + }) + .catch(function(err) { + console.error('[user] status update error: ' + err); + }); +} + +module.exports = User; diff --git a/server/config/ami/voice_context.js b/server/config/ami/voice_context.js index dbfd98f..2e0595e 100644 --- a/server/config/ami/voice_context.js +++ b/server/config/ami/voice_context.js @@ -1 +1,95 @@ -var _0xac29=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x66\x73","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x6D\x65\x73\x73\x61\x67\x65","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74\x2E\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x65\x76\x74","\x6F\x6E","","\x5B\x25\x73\x5D\x0A\x69\x6E\x63\x6C\x75\x64\x65\x20\x3D\x3E\x20\x25\x73\x2D\x63\x75\x73\x74\x6F\x6D\x0A\x73\x77\x69\x74\x63\x68\x20\x3D\x3E\x20\x52\x65\x61\x6C\x74\x69\x6D\x65\x0A","\x6E\x61\x6D\x65","\x66\x6F\x72\x6D\x61\x74","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x66\x6F\x72\x45\x61\x63\x68","\x61\x73\x74\x65\x72\x69\x73\x6B\x43\x6F\x6E\x66","\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73\x5F\x78\x63\x61\x6C\x6C\x79\x5F\x63\x6F\x6E\x74\x65\x78\x74\x73\x2E\x63\x6F\x6E\x66","\x6A\x6F\x69\x6E","\x77","\x30\x37\x37\x37","\x43\x6F\x6E\x74\x65\x78\x74\x73\x20\x66\x69\x6C\x65\x20\x73\x61\x76\x65\x64\x21","\x52\x65\x6C\x6F\x61\x64","\x65\x72\x72\x6F\x72","\x61\x63\x74\x69\x6F\x6E","\x77\x72\x69\x74\x65\x46\x69\x6C\x65","\x74\x68\x65\x6E","\x69\x64","\x66\x69\x6E\x64\x41\x6C\x6C","\x63\x72\x65\x61\x74\x65\x20\x63\x6F\x6E\x74\x65\x78\x74\x20\x68\x61\x6E\x67\x75\x70","\x68","\x31","\x73\x79\x73\x74\x65\x6D","\x48\x61\x6E\x67\x75\x70","\x66\x61\x69\x6C\x65\x64","\x68\x61\x6E\x67\x75\x70\x20\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x20\x63\x72\x65\x61\x74\x65\x64","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xac29[0];var VoiceContext=require(_0xac29[2])[_0xac29[1]];var VoiceExtension=require(_0xac29[2])[_0xac29[3]];var fs=require(_0xac29[4]);var util=require(_0xac29[5]);var path=require(_0xac29[6]);var config=require(_0xac29[7]);function Context(_0xfb8bx8){process[_0xac29[12]](_0xac29[8],function(_0xfb8bx9){switch(_0xfb8bx9[_0xac29[11]]){case _0xac29[9]:rewriteContexts(_0xfb8bx9,_0xfb8bx8,false);createHangup(_0xfb8bx9);break;case _0xac29[10]:rewriteContexts(_0xfb8bx9,_0xfb8bx8,true);break;default:}})}function rewriteContexts(_0xfb8bx9,_0xfb8bx8,_0xfb8bxb){var _0xfb8bxc=_0xac29[13];if(!_0xfb8bxb){_0xfb8bxc= util[_0xac29[16]](_0xac29[14],_0xfb8bx9[_0xac29[15]],_0xfb8bx9[_0xac29[15]])};VoiceContext[_0xac29[32]]({where:{id:{$ne:_0xfb8bx9[_0xac29[31]]}}})[_0xac29[30]](function(_0xfb8bxe){_0xfb8bxe[_0xac29[19]](function(_0xfb8bxf){_0xfb8bxc+= util[_0xac29[16]](_0xac29[14],_0xfb8bxf[_0xac29[15]],_0xfb8bxf[_0xac29[15]])});fs[_0xac29[29]](path[_0xac29[22]](config[_0xac29[20]],_0xac29[21]),_0xfb8bxc,{flags:_0xac29[23],mode:parseInt(_0xac29[24],8)},function(_0xfb8bxd){if(_0xfb8bxd){throw _0xfb8bxd};console[_0xac29[17]](_0xac29[25]);_0xfb8bx8[_0xac29[28]]({Action:_0xac29[26]},function(_0xfb8bxd,_0xfb8bx10){if(_0xfb8bxd){console[_0xac29[27]](_0xfb8bxd)}else {console[_0xac29[17]](_0xfb8bx10)}})})})[_0xac29[18]](function(_0xfb8bxd){console[_0xac29[17]](_0xfb8bxd)})}function createHangup(_0xfb8bx9){console[_0xac29[17]](_0xac29[33],_0xfb8bx9[_0xac29[15]]);var _0xfb8bx12=[{context:_0xfb8bx9[_0xac29[15]],exten:_0xac29[34],priority:_0xac29[35],VoiceContextId:_0xfb8bx9[_0xac29[31]],type:_0xac29[36],app:_0xac29[37]},{context:_0xfb8bx9[_0xac29[15]],exten:_0xac29[38],priority:_0xac29[35],VoiceContextId:_0xfb8bx9[_0xac29[31]],type:_0xac29[36],app:_0xac29[37]}];return VoiceExtension[_0xac29[40]](_0xfb8bx12,{raw:true})[_0xac29[30]](function(){console[_0xac29[17]](_0xac29[39])})[_0xac29[18]](function(_0xfb8bxd){console[_0xac29[17]](_0xfb8bxd)})}module[_0xac29[41]]= Context \ No newline at end of file +'use strict'; + +var VoiceContext = require('../../models').VoiceContext; +var VoiceExtension = require('../../models').VoiceExtension; +var fs = require('fs'); +var util = require('util'); +var path = require('path'); +var config = require('../../config/environment'); + +function Context(ami) { + + process.on('message', function(doc) { + switch (doc.evt) { + case 'VoiceContext.afterCreate': + rewriteContexts(doc, ami, false); + createHangup(doc); + break; + case 'VoiceContext.afterDestroy': + rewriteContexts(doc, ami, true); + break; + default: + } + }); +} + +function rewriteContexts(doc, ami, deleteContext) { + var contextValues = ''; + if (!deleteContext) { + contextValues = util.format('[%s]\ninclude => %s-custom\nswitch => Realtime\n', doc.name, doc.name); + } + VoiceContext + .findAll({ + where: { + id: { + $ne: doc.id + } + } + }) + .then(function(contexts) { + contexts.forEach(function(element) { + contextValues += util.format('[%s]\ninclude => %s-custom\nswitch => Realtime\n', element.name, element.name); + }); + fs.writeFile(path.join(config.asteriskConf, 'extensions_xcally_contexts.conf'), contextValues, { + flags: 'w', + mode: parseInt('0777', 8) + }, function(err) { + if (err) throw err; + console.log("Contexts file saved!"); + ami.action({ + Action: 'Reload', + }, function(err, res) { + if (err) { + console.error(err); + } else { + console.log(res); + } + }); + }); + }) + .catch(function(err) { + console.log(err); + }); +} + +function createHangup(doc) { + console.log('create context hangup', doc.name); + var data = [{ + context: doc.name, + exten: 'h', + priority: '1', + VoiceContextId: doc.id, + type: 'system', + app: 'Hangup' + }, { + context: doc.name, + exten: 'failed', + priority: '1', + VoiceContextId: doc.id, + type: 'system', + app: 'Hangup' + }]; + + return VoiceExtension + .bulkCreate(data, { + raw: true + }) + .then(function() { + console.log('hangup extension created'); + }) + .catch(function(err) { + console.log(err); + }); +} + +module.exports = Context; diff --git a/server/config/analytics.js b/server/config/analytics.js index 0d33822..e69de29 100644 --- a/server/config/analytics.js +++ b/server/config/analytics.js @@ -1 +0,0 @@ -var _0xd017=[] \ No newline at end of file diff --git a/server/config/autodialer/index.js b/server/config/autodialer/index.js index 8514ef1..a47295f 100644 --- a/server/config/autodialer/index.js +++ b/server/config/autodialer/index.js @@ -1 +1,125 @@ -var _0x896c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x75\x74\x69\x6C","\x2E\x2F\x70\x72\x6F\x63\x65\x73\x73","\x65\x78\x70\x6F\x72\x74\x73","\x41\x75\x74\x6F\x64\x69\x61\x6C\x65\x72\x20\x53\x74\x61\x72\x74\x69\x6E\x67\x2E\x2E\x2E","\x6C\x6F\x67","\x67\x65\x74\x50\x72\x6F\x63\x65\x73\x73\x65\x73"];_0x896c[0];var util=require(_0x896c[1]);var Process=require(_0x896c[2]);module[_0x896c[3]]= function(_0x8abex3){console[_0x896c[5]](_0x896c[4]);var _0x8abex4= new Process();_0x8abex4[_0x896c[6]](function(_0x8abex5,_0x8abex6){if(_0x8abex6){console[_0x896c[5]](_0x8abex6);return}})} \ No newline at end of file +'use strict'; +var util = require('util'); +var Process = require('./process'); + +module.exports = function(ami) { + + console.log('Autodialer Starting...'); + var proc = new Process(); + + proc.getProcesses(function(res, err) { + if(err) + { + console.log(err); + return; + } + // console.log(res.Contacts); + // if (util.isArray(res.Contacts)) + // { + // var contact = res.Contacts; + // console.log(contact); + // } + // else + // { + // var contacts = res.Contacts; + // if (contacts.length) + // { + // contacts.forEach(function(contact) { + // console.log(contact); + // }) + // } + // } + + + + }); + +} + +// var _ = require('lodash'); +// +// var agents = ['SIP/massimiliano.bungaro', 'SIP/daniele.cinti']; +// var channels = []; +// var peers = []; +// var contacts = ['600', '600', '600']; +// +// var ami; +// +// function coreshow() { +// channels = []; +// if (contacts.length > 0) { +// ami.action({ +// action: 'CoreShowChannels' +// }, function(err, res) { +// if (err) { +// console.log(err); +// } +// console.log(res); +// }); +// } +// +// } +// +// function peerstatus() { +// peers = []; +// if (contacts.length > 0) { +// ami.action({ +// action: 'SIPpeerstatus' +// }, function(err, res) { +// if (err) { +// console.log(err); +// } +// console.log(res); +// }) +// } +// } +// +// module.exports = function(asterisk_manager) { +// +// ami = asterisk_manager; +// +// peerstatus(); +// +// ami.on('peerstatus', function(evt) { +// if (evt.peerstatus == 'Reachable') { +// peers.push(evt.peer); +// } +// }); +// +// ami.on('coreshowchannel', function(evt) { +// channels.push(evt.channel.split('-')[0]); +// }); +// +// ami.on('sippeerstatuscomplete', function(evt) { +// coreshow(); +// }); +// +// ami.on('coreshowchannelscomplete', function(evt) { +// console.log('Agents registered ', peers); +// console.log('Agents in call ', channels); +// +// +// var agent = _.find(agents, function(agent) { +// return !_.includes(channels, agent); +// }); +// +// if (agent) { +// if (_.includes(peers, agent)) { +// ami.action({ +// action: 'originate', +// channel: agent, +// exten: contacts.pop(), +// context: 'demo', +// priority: 1, +// async: true +// }, function(err, res) { +// if (err) { +// console.log(err); +// } +// console.log(res); +// }); +// } +// } +// peerstatus(); +// }); +// }; diff --git a/server/config/autodialer/process.js b/server/config/autodialer/process.js index a17d6d2..7974168 100644 --- a/server/config/autodialer/process.js +++ b/server/config/autodialer/process.js @@ -1 +1,26 @@ -var _0x61c8=["\x41\x75\x74\x6F\x64\x69\x61\x6C\x65\x72\x50\x72\x6F\x63\x65\x73\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x6F\x6E\x74\x61\x63\x74","\x50\x72\x6F\x63\x65\x73\x73\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x67\x65\x74\x50\x72\x6F\x63\x65\x73\x73\x65\x73","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x65\x78\x70\x6F\x72\x74\x73"];var AutodialerProcess=require(_0x61c8[1])[_0x61c8[0]];var Contact=require(_0x61c8[1])[_0x61c8[2]];function Process(){console[_0x61c8[4]](_0x61c8[3])}Process[_0x61c8[6]][_0x61c8[5]]= function(_0xcb2cx4){AutodialerProcess[_0x61c8[9]]({where:{enable:true},include:[Contact]})[_0x61c8[8]](function(_0xcb2cx6){_0xcb2cx4(_0xcb2cx6)})[_0x61c8[7]](function(_0xcb2cx5){_0xcb2cx4(null,_0xcb2cx5)})};module[_0x61c8[10]]= Process \ No newline at end of file +var AutodialerProcess = require('../../models').AutodialerProcess; +var Contact = require('../../models').Contact; + +function Process() { + console.log('Process Initialization...'); +} + +Process.prototype.getProcesses = function(callback) { + + AutodialerProcess + .findAll({ + where: { + enable: true + }, + include: [Contact] + }) + .then(function(res) { + callback(res); + }) + .catch(function(err) { + callback(null, err); + }); + +} + +module.exports = Process; diff --git a/server/config/automations/chat.js b/server/config/automations/chat.js index 906d99a..a874ea6 100644 --- a/server/config/automations/chat.js +++ b/server/config/automations/chat.js @@ -1 +1,190 @@ -var _0x4368=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x43\x68\x61\x74","\x6C\x6F\x67","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x43\x68\x61\x74\x20\x65\x78\x65\x63","\x65\x72\x72\x6F\x72","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x4D\x65\x73\x73\x61\x67\x65\x3A","\x6D\x65\x73\x73\x61\x67\x65","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x53\x74\x61\x63\x6B\x3A","\x73\x74\x61\x63\x6B","\x63\x61\x74\x63\x68","\x69\x64","\x64\x61\x74\x61\x31","\x73\x74\x61\x74\x75\x73","\x61\x63\x74\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x41\x63\x74\x69\x6F\x6E\x73","\x74\x68\x65\x6E","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x70\x75\x73\x68","\x41\x6C\x6C","\x41\x6E\x79","\x6C\x65\x6E\x67\x74\x68","\x24\x61\x6E\x64","\x77\x68\x65\x72\x65","\x24\x6F\x72","\x66\x69\x6E\x64\x41\x6C\x6C","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x6C\x6C","\x73\x63\x6F\x70\x65","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x4D\x61\x69\x6C\x20\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x75\x70\x64\x61\x74\x65","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x65\x71\x75\x61\x6C\x73","\x6E\x6F\x74\x5F\x65\x71\x75\x61\x6C\x73","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x68\x6F\x75\x72\x73","\x73\x75\x62\x74\x72\x61\x63\x74","\x67\x72\x65\x61\x74\x65\x72","\x67\x72\x65\x61\x74\x65\x72\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x6C\x65\x73\x73","\x6C\x65\x73\x73\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x4D\x61\x69\x6C","\x73\x65\x74\x20\x77\x69\x74\x68\x20\x74\x69\x6D\x65\x6F\x75\x74","\x74\x69\x6D\x65\x6F\x75\x74","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x65\x78\x70\x6F\x72\x74\x73","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x43\x68\x61\x74\x20\x73\x65\x72\x76\x69\x63\x65\x20\x73\x74\x61\x72\x74\x65\x64","\x63\x68\x61\x6E\x6E\x65\x6C","\x63\x68\x61\x74","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x43\x68\x61\x74","\x63\x72\x65\x61\x74\x65\x64\x2C\x20\x74\x68\x65\x20\x73\x74\x61\x74\x75\x73\x20\x69\x73","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x64\x2C\x20\x74\x68\x65\x20\x73\x74\x61\x74\x75\x73\x20\x69\x73","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x43\x68\x61\x74\x20\x75\x6E\x73\x65\x74\x20","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x20\x64\x65\x6C\x65\x74\x65\x64","\x61\x66\x74\x65\x72\x44\x65\x6C\x65\x74\x65","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x43\x68\x61\x74\x20\x69\x6E\x69\x74","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x43\x68\x61\x74\x20\x61\x72\x65"];_0x4368[0];var _=require(_0x4368[1]);var moment=require(_0x4368[2]);var Automation=require(_0x4368[4])[_0x4368[3]];var ChatRoom=require(_0x4368[4])[_0x4368[5]];var activeChatAutomations={};function executeAutomation(_0x8519x7){console[_0x4368[7]](_0x4368[6],_0x8519x7);var _0x8519x8;return Automation[_0x4368[33]](_0x4368[32])[_0x4368[31]](_0x8519x7)[_0x4368[21]](function(_0x8519xd){_0x8519x8= _0x8519xd;var _0x8519xe=[];var _0x8519xf=[];var _0x8519x10={where:{}};_0x8519xd[_0x4368[24]][_0x4368[19]](function(_0x8519x11){_0x8519xf[_0x4368[23]](getCondition(_0x8519x11[_0x4368[22]]))});_0x8519xd[_0x4368[25]][_0x4368[19]](function(_0x8519x11){_0x8519xe[_0x4368[23]](getCondition(_0x8519x11[_0x4368[22]]))});if(_0x8519xf[_0x4368[26]]){_0x8519x10[_0x4368[28]][_0x4368[27]]= _0x8519xf};if(_0x8519xe[_0x4368[26]]){_0x8519x10[_0x4368[28]][_0x4368[29]]= _0x8519xe};return ChatRoom[_0x4368[30]](_0x8519x10)})[_0x4368[21]](function(_0x8519xa){_0x8519xa[_0x4368[19]](function(_0x8519xb){_0x8519x8[_0x4368[20]][_0x4368[19]](function(_0x8519xc){switch(_0x8519xc[_0x4368[18]]){case _0x4368[17]:setStatus(_0x8519xb[_0x4368[15]],_0x8519xc[_0x4368[16]]);break;default:}})})})[_0x4368[14]](function(_0x8519x9){console[_0x4368[9]](_0x4368[8]);console[_0x4368[9]](_0x4368[10],_0x8519x9[_0x4368[11]]);console[_0x4368[9]](_0x4368[12],_0x8519x9[_0x4368[13]])})}function setStatus(_0x8519x13,_0x8519x14){return ChatRoom[_0x4368[35]]({status:_0x8519x14},{where:{id:_0x8519x13}})[_0x4368[14]](function(_0x8519x9){console[_0x4368[9]](_0x4368[34]);console[_0x4368[9]](_0x4368[10],_0x8519x9[_0x4368[11]]);console[_0x4368[9]](_0x4368[12],_0x8519x9[_0x4368[13]])})}function getCondition(_0x8519x11){var _0x8519x16={};switch(_0x8519x11[_0x4368[36]]){case _0x4368[17]:switch(_0x8519x11[_0x4368[40]]){case _0x4368[38]:_0x8519x16[_0x8519x11[_0x4368[36]]]= _0x8519x11[_0x4368[37]];break;case _0x4368[39]:_0x8519x16[_0x8519x11[_0x4368[36]]]= {$ne:_0x8519x11[_0x4368[37]]};break;default:};break;case _0x4368[49]:var _0x8519x17=moment()[_0x4368[44]](parseInt(_0x8519x11[_0x4368[37]],10),_0x4368[43])[_0x4368[42]](_0x4368[41]);switch(_0x8519x11[_0x4368[40]]){case _0x4368[45]:_0x8519x16[_0x8519x11[_0x4368[36]]]= {lt:_0x8519x17};break;case _0x4368[46]:_0x8519x16[_0x8519x11[_0x4368[36]]]= {$lte:_0x8519x17};break;case _0x4368[47]:_0x8519x16[_0x8519x11[_0x4368[36]]]= {$gt:_0x8519x17};break;case _0x4368[48]:_0x8519x16[_0x8519x11[_0x4368[36]]]= {$gte:_0x8519x17};break;default:};break;default:};return _0x8519x16}function createInterval(_0x8519xd){console[_0x4368[7]](_0x4368[50],_0x8519xd[_0x4368[15]],_0x4368[51],_0x8519xd[_0x4368[52]]* 60* 1000);activeChatAutomations[_0x4368[53]+ _0x8519xd[_0x4368[15]]]= setInterval(function(){executeAutomation(_0x8519xd[_0x4368[15]])},_0x8519xd[_0x4368[52]]* 60* 1000)}module[_0x4368[54]]= function(){console[_0x4368[7]](_0x4368[55]);Automation[_0x4368[60]](function(_0x8519x19,_0x8519x1a){if(_0x8519x19[_0x4368[56]]=== _0x4368[57]){console[_0x4368[7]](_0x4368[58],_0x8519x19[_0x4368[15]],_0x4368[59],_0x8519x19[_0x4368[17]]);if(_0x8519x19[_0x4368[17]]){createInterval(_0x8519x19)}}});Automation[_0x4368[63]](function(_0x8519x19,_0x8519x1a){if(_0x8519x19[_0x4368[56]]=== _0x4368[57]){console[_0x4368[7]](_0x4368[58],_0x8519x19[_0x4368[15]],_0x4368[61],_0x8519x19[_0x4368[17]]);if(activeChatAutomations[_0x4368[53]+ _0x8519x19[_0x4368[15]]]){console[_0x4368[7]](_0x4368[62],_0x8519x19[_0x4368[15]]);clearInterval(activeChatAutomations[_0x4368[53]+ _0x8519x19[_0x4368[15]]]);delete activeChatAutomations[_0x4368[53]+ _0x8519x19[_0x4368[15]]]};if(_0x8519x19[_0x4368[17]]){createInterval(_0x8519x19)}}});Automation[_0x4368[65]](function(_0x8519x19,_0x8519x1a){if(_0x8519x19[_0x4368[56]]=== _0x4368[57]){console[_0x4368[7]](_0x4368[58],_0x8519x19[_0x4368[15]],_0x4368[64]);if(activeChatAutomations[_0x4368[53]+ _0x8519x19[_0x4368[15]]]){console[_0x4368[7]](_0x4368[62],_0x8519x19[_0x4368[15]]);clearInterval(activeChatAutomations[_0x4368[53]+ _0x8519x19[_0x4368[15]]]);delete activeChatAutomations[_0x4368[53]+ _0x8519x19[_0x4368[15]]]}}});return Automation[_0x4368[33]](_0x4368[32])[_0x4368[30]]({where:{status:true,channel:_0x4368[57]},attributes:[_0x4368[15],_0x4368[52]]})[_0x4368[21]](function(_0x8519x1b){console[_0x4368[7]](_0x4368[67],_0x8519x1b[_0x4368[26]]);_0x8519x1b[_0x4368[19]](function(_0x8519xd){createInterval(_0x8519xd)})})[_0x4368[14]](function(_0x8519x9){console[_0x4368[9]](_0x4368[66]);console[_0x4368[9]](_0x4368[10],_0x8519x9[_0x4368[11]]);console[_0x4368[9]](_0x4368[12],_0x8519x9[_0x4368[13]])})} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var moment = require('moment'); + +var Automation = require('../../models').Automation; +var ChatRoom = require('../../models').ChatRoom; +var activeChatAutomations = {}; + +function executeAutomation(id) { + console.log('[Automation] Executing Chat', id); + var _chatAutomation; + return Automation + .scope('all') + .findById(id) + .then(function(chatAutomation) { + _chatAutomation = chatAutomation; + + var $or = []; + var $and = []; + var query = { + where: {} + }; + + chatAutomation.All.forEach(function(condition) { + $and.push(getCondition(condition.dataValues)); + }); + chatAutomation.Any.forEach(function(condition) { + $or.push(getCondition(condition.dataValues)); + }); + + if ($and.length) { + query.where.$and = $and; + } + if ($or.length) { + query.where.$or = $or; + } + + return ChatRoom.findAll(query); + }) + .then(function(chats) { + chats.forEach(function(chat) { + _chatAutomation.Actions.forEach(function(action) { + switch (action.action) { + case 'status': + setStatus(chat.id, action.data1); + break; + default: + } + }); + }); + }) + .catch(function(err) { + console.error('[Automation] Error in Chat exec'); + console.error('[Automation] Message:', err.message); + console.error('[Automation] Stack:', err.stack); + }); +} + +function setStatus(ticketId, newStatus) { + return ChatRoom.update({ + status: newStatus, + }, { + where: { + id: ticketId + } + }) + .catch(function(err) { + console.error('[Automation] Error in Mail setStatus'); + console.error('[Automation] Message:', err.message); + console.error('[Automation] Stack:', err.stack); + }); +} + +function getCondition(condition) { + var result = {}; + switch (condition.field) { + case 'status': + switch (condition.operator) { + case 'equals': + result[condition.field] = condition.value; + break; + case 'not_equals': + result[condition.field] = { + $ne: condition.value + }; + break; + default: + } + break; + case 'createdAt': + var compareDate = moment().subtract(parseInt(condition.value, 10), 'hours').format("YYYY-MM-DD HH:mm:ss"); + switch (condition.operator) { + case 'greater': + result[condition.field] = { + lt: compareDate + }; + break; + case 'greater_or_equal': + result[condition.field] = { + $lte: compareDate + }; + break; + case 'less': + result[condition.field] = { + $gt: compareDate + }; + break; + case 'less_or_equal': + result[condition.field] = { + $gte: compareDate + }; + break; + default: + } + break; + default: + } + return result; +} + +function createInterval(chatAutomation) { + console.log('[Automation] Mail', chatAutomation.id, 'set with timeout', chatAutomation.timeout * 60 * 1000); + activeChatAutomations['interval' + chatAutomation.id] = setInterval(function() { + executeAutomation(chatAutomation.id); + }, chatAutomation.timeout * 60 * 1000); +} + +module.exports = function() { + + console.log('[Automation] Chat service started'); + + Automation.afterCreate(function(doc, options) { + if (doc.channel === 'chat') { + console.log('[Automation] Chat', doc.id, 'created, the status is', doc.status); + if (doc.status) { + createInterval(doc); + } + } + }); + + Automation.afterUpdate(function(doc, options) { + if (doc.channel === 'chat') { + console.log('[Automation] Chat', doc.id, 'updated, the status is', doc.status); + if (activeChatAutomations['interval' + doc.id]) { + console.log('[Automation] Chat unset ', doc.id); + clearInterval(activeChatAutomations['interval' + doc.id]); + delete activeChatAutomations['interval' + doc.id]; + } + if (doc.status) { + createInterval(doc); + } + } + }); + + Automation.afterDelete(function(doc, options) { + if (doc.channel === 'chat') { + console.log('[Automation] Chat', doc.id, ' deleted'); + if (activeChatAutomations['interval' + doc.id]) { + console.log('[Automation] Chat unset ', doc.id); + clearInterval(activeChatAutomations['interval' + doc.id]); + delete activeChatAutomations['interval' + doc.id]; + } + } + }); + + return Automation + .scope('all') + .findAll({ + where: { + status: true, + channel: 'chat' + }, + attributes: ['id', 'timeout'] + }) + .then(function(chatAutomations) { + + console.log('[Automation] Chat are', chatAutomations.length); + + chatAutomations.forEach(function(chatAutomation) { + createInterval(chatAutomation); + }); + + }) + .catch(function(err) { + console.error('[Automation] Error in Chat init'); + console.error('[Automation] Message:', err.message); + console.error('[Automation] Stack:', err.stack); + }); +}; diff --git a/server/config/automations/fax.js b/server/config/automations/fax.js index 6f36b5d..d69bba5 100644 --- a/server/config/automations/fax.js +++ b/server/config/automations/fax.js @@ -1 +1,191 @@ -var _0x5d85=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x52\x6F\x6F\x6D","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x46\x61\x78","\x6C\x6F\x67","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x46\x61\x78\x20\x65\x78\x65\x63","\x65\x72\x72\x6F\x72","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x4D\x65\x73\x73\x61\x67\x65\x3A","\x6D\x65\x73\x73\x61\x67\x65","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x53\x74\x61\x63\x6B\x3A","\x73\x74\x61\x63\x6B","\x63\x61\x74\x63\x68","\x69\x64","\x64\x61\x74\x61\x31","\x73\x74\x61\x74\x75\x73","\x61\x63\x74\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x41\x63\x74\x69\x6F\x6E\x73","\x74\x68\x65\x6E","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x70\x75\x73\x68","\x41\x6C\x6C","\x41\x6E\x79","\x6C\x65\x6E\x67\x74\x68","\x24\x61\x6E\x64","\x77\x68\x65\x72\x65","\x24\x6F\x72","\x66\x69\x6E\x64\x41\x6C\x6C","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x6C\x6C","\x73\x63\x6F\x70\x65","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x46\x61\x78\x20\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x75\x70\x64\x61\x74\x65","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x65\x71\x75\x61\x6C\x73","\x6E\x6F\x74\x5F\x65\x71\x75\x61\x6C\x73","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x68\x6F\x75\x72\x73","\x73\x75\x62\x74\x72\x61\x63\x74","\x67\x72\x65\x61\x74\x65\x72","\x67\x72\x65\x61\x74\x65\x72\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x6C\x65\x73\x73","\x6C\x65\x73\x73\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x4D\x61\x69\x6C","\x73\x65\x74\x20\x77\x69\x74\x68\x20\x74\x69\x6D\x65\x6F\x75\x74","\x74\x69\x6D\x65\x6F\x75\x74","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x65\x78\x70\x6F\x72\x74\x73","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x46\x61\x78\x20\x73\x65\x72\x76\x69\x63\x65\x20\x73\x74\x61\x72\x74\x65\x64","\x63\x68\x61\x6E\x6E\x65\x6C","\x66\x61\x78","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x46\x61\x78","\x63\x72\x65\x61\x74\x65\x64\x2C\x20\x74\x68\x65\x20\x73\x74\x61\x74\x75\x73\x20\x69\x73","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x64\x2C\x20\x74\x68\x65\x20\x73\x74\x61\x74\x75\x73\x20\x69\x73","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x46\x61\x78\x20\x75\x6E\x73\x65\x74\x20","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x20\x64\x65\x6C\x65\x74\x65\x64","\x61\x66\x74\x65\x72\x44\x65\x6C\x65\x74\x65","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x4D\x61\x69\x6C\x20\x69\x6E\x69\x74","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x46\x61\x78\x20\x61\x72\x65"];_0x5d85[0];var _=require(_0x5d85[1]);var moment=require(_0x5d85[2]);var Automation=require(_0x5d85[4])[_0x5d85[3]];var FaxRoom=require(_0x5d85[4])[_0x5d85[5]];var activeFaxAutomations={};function executeAutomation(_0x999dx7){console[_0x5d85[7]](_0x5d85[6],_0x999dx7);var _0x999dx8;return Automation[_0x5d85[33]](_0x5d85[32])[_0x5d85[31]](_0x999dx7)[_0x5d85[21]](function(_0x999dxd){_0x999dx8= _0x999dxd;var _0x999dxe=[];var _0x999dxf=[];var _0x999dx10={where:{}};_0x999dxd[_0x5d85[24]][_0x5d85[19]](function(_0x999dx11){_0x999dxf[_0x5d85[23]](getCondition(_0x999dx11[_0x5d85[22]]))});_0x999dxd[_0x5d85[25]][_0x5d85[19]](function(_0x999dx11){_0x999dxe[_0x5d85[23]](getCondition(_0x999dx11[_0x5d85[22]]))});if(_0x999dxf[_0x5d85[26]]){_0x999dx10[_0x5d85[28]][_0x5d85[27]]= _0x999dxf};if(_0x999dxe[_0x5d85[26]]){_0x999dx10[_0x5d85[28]][_0x5d85[29]]= _0x999dxe};return FaxRoom[_0x5d85[30]](_0x999dx10)})[_0x5d85[21]](function(_0x999dxa){_0x999dxa[_0x5d85[19]](function(_0x999dxb){_0x999dx8[_0x5d85[20]][_0x5d85[19]](function(_0x999dxc){switch(_0x999dxc[_0x5d85[18]]){case _0x5d85[17]:setStatus(_0x999dxb[_0x5d85[15]],_0x999dxc[_0x5d85[16]]);break;default:}})})})[_0x5d85[14]](function(_0x999dx9){console[_0x5d85[9]](_0x5d85[8]);console[_0x5d85[9]](_0x5d85[10],_0x999dx9[_0x5d85[11]]);console[_0x5d85[9]](_0x5d85[12],_0x999dx9[_0x5d85[13]])})}function setStatus(_0x999dx13,_0x999dx14){return FaxRoom[_0x5d85[35]]({status:_0x999dx14},{where:{id:_0x999dx13}})[_0x5d85[14]](function(_0x999dx9){console[_0x5d85[9]](_0x5d85[34]);console[_0x5d85[9]](_0x5d85[10],_0x999dx9[_0x5d85[11]]);console[_0x5d85[9]](_0x5d85[12],_0x999dx9[_0x5d85[13]])})}function getCondition(_0x999dx11){var _0x999dx16={};switch(_0x999dx11[_0x5d85[36]]){case _0x5d85[17]:switch(_0x999dx11[_0x5d85[40]]){case _0x5d85[38]:_0x999dx16[_0x999dx11[_0x5d85[36]]]= _0x999dx11[_0x5d85[37]];break;case _0x5d85[39]:_0x999dx16[_0x999dx11[_0x5d85[36]]]= {$ne:_0x999dx11[_0x5d85[37]]};break;default:};break;case _0x5d85[49]:var _0x999dx17=moment()[_0x5d85[44]](parseInt(_0x999dx11[_0x5d85[37]],10),_0x5d85[43])[_0x5d85[42]](_0x5d85[41]);switch(_0x999dx11[_0x5d85[40]]){case _0x5d85[45]:_0x999dx16[_0x999dx11[_0x5d85[36]]]= {lt:_0x999dx17};break;case _0x5d85[46]:_0x999dx16[_0x999dx11[_0x5d85[36]]]= {$lte:_0x999dx17};break;case _0x5d85[47]:_0x999dx16[_0x999dx11[_0x5d85[36]]]= {$gt:_0x999dx17};break;case _0x5d85[48]:_0x999dx16[_0x999dx11[_0x5d85[36]]]= {$gte:_0x999dx17};break;default:};break;default:};return _0x999dx16}function createInterval(_0x999dxd){console[_0x5d85[7]](_0x5d85[50],_0x999dxd[_0x5d85[15]],_0x5d85[51],_0x999dxd[_0x5d85[52]]* 60* 1000);activeFaxAutomations[_0x5d85[53]+ _0x999dxd[_0x5d85[15]]]= setInterval(function(){executeAutomation(_0x999dxd[_0x5d85[15]])},_0x999dxd[_0x5d85[52]]* 60* 1000)}module[_0x5d85[54]]= function(){console[_0x5d85[7]](_0x5d85[55]);Automation[_0x5d85[60]](function(_0x999dx19,_0x999dx1a){if(_0x999dx19[_0x5d85[56]]=== _0x5d85[57]){console[_0x5d85[7]](_0x5d85[58],_0x999dx19[_0x5d85[15]],_0x5d85[59],_0x999dx19[_0x5d85[17]]);if(_0x999dx19[_0x5d85[17]]){createInterval(_0x999dx19)}}});Automation[_0x5d85[63]](function(_0x999dx19,_0x999dx1a){if(_0x999dx19[_0x5d85[56]]=== _0x5d85[57]){console[_0x5d85[7]](_0x5d85[58],_0x999dx19[_0x5d85[15]],_0x5d85[61],_0x999dx19[_0x5d85[17]]);if(activeFaxAutomations[_0x5d85[53]+ _0x999dx19[_0x5d85[15]]]){console[_0x5d85[7]](_0x5d85[62],_0x999dx19[_0x5d85[15]]);clearInterval(activeFaxAutomations[_0x5d85[53]+ _0x999dx19[_0x5d85[15]]]);delete activeFaxAutomations[_0x5d85[53]+ _0x999dx19[_0x5d85[15]]]};if(_0x999dx19[_0x5d85[17]]){createInterval(_0x999dx19)}}});Automation[_0x5d85[65]](function(_0x999dx19,_0x999dx1a){if(_0x999dx19[_0x5d85[56]]=== _0x5d85[57]){console[_0x5d85[7]](_0x5d85[58],_0x999dx19[_0x5d85[15]],_0x5d85[64]);if(activeFaxAutomations[_0x5d85[53]+ _0x999dx19[_0x5d85[15]]]){console[_0x5d85[7]](_0x5d85[62],_0x999dx19[_0x5d85[15]]);clearInterval(activeFaxAutomations[_0x5d85[53]+ _0x999dx19[_0x5d85[15]]]);delete activeFaxAutomations[_0x5d85[53]+ _0x999dx19[_0x5d85[15]]]}}});return Automation[_0x5d85[33]](_0x5d85[32])[_0x5d85[30]]({where:{status:true,channel:_0x5d85[57]},attributes:[_0x5d85[15],_0x5d85[52]]})[_0x5d85[21]](function(_0x999dx1b){console[_0x5d85[7]](_0x5d85[67],_0x999dx1b[_0x5d85[26]]);_0x999dx1b[_0x5d85[19]](function(_0x999dxd){createInterval(_0x999dxd)})})[_0x5d85[14]](function(_0x999dx9){console[_0x5d85[9]](_0x5d85[66]);console[_0x5d85[9]](_0x5d85[10],_0x999dx9[_0x5d85[11]]);console[_0x5d85[9]](_0x5d85[12],_0x999dx9[_0x5d85[13]])})} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var moment = require('moment'); + +var Automation = require('../../models').Automation; +var FaxRoom = require('../../models').FaxRoom; +var activeFaxAutomations = {}; + +function executeAutomation(id) { + console.log('[Automation] Executing Fax', id); + var _faxAutomation; + return Automation + .scope('all') + .findById(id) + .then(function(faxAutomation) { + _faxAutomation = faxAutomation; + + var $or = []; + var $and = []; + var query = { + where: {} + }; + + faxAutomation.All.forEach(function(condition) { + $and.push(getCondition(condition.dataValues)); + }); + faxAutomation.Any.forEach(function(condition) { + $or.push(getCondition(condition.dataValues)); + }); + + if ($and.length) { + query.where.$and = $and; + } + if ($or.length) { + query.where.$or = $or; + } + + return FaxRoom + .findAll(query); + }) + .then(function(faxes) { + faxes.forEach(function(fax) { + _faxAutomation.Actions.forEach(function(action) { + switch (action.action) { + case 'status': + setStatus(fax.id, action.data1); + break; + default: + } + }); + }); + }) + .catch(function(err) { + console.error('[Automation] Error in Fax exec'); + console.error('[Automation] Message:', err.message); + console.error('[Automation] Stack:', err.stack); + }); +} + +function setStatus(ticketId, newStatus) { + return FaxRoom.update({ + status: newStatus, + }, { + where: { + id: ticketId + } + }) + .catch(function(err) { + console.error('[Automation] Error in Fax setStatus'); + console.error('[Automation] Message:', err.message); + console.error('[Automation] Stack:', err.stack); + }); +} + +function getCondition(condition) { + var result = {}; + switch (condition.field) { + case 'status': + switch (condition.operator) { + case 'equals': + result[condition.field] = condition.value; + break; + case 'not_equals': + result[condition.field] = { + $ne: condition.value + }; + break; + default: + } + break; + case 'createdAt': + var compareDate = moment().subtract(parseInt(condition.value, 10), 'hours').format("YYYY-MM-DD HH:mm:ss"); + switch (condition.operator) { + case 'greater': + result[condition.field] = { + lt: compareDate + }; + break; + case 'greater_or_equal': + result[condition.field] = { + $lte: compareDate + }; + break; + case 'less': + result[condition.field] = { + $gt: compareDate + }; + break; + case 'less_or_equal': + result[condition.field] = { + $gte: compareDate + }; + break; + default: + } + break; + default: + } + return result; +} + +function createInterval(faxAutomation) { + console.log('[Automation] Mail', faxAutomation.id, 'set with timeout', faxAutomation.timeout * 60 * 1000); + activeFaxAutomations['interval' + faxAutomation.id] = setInterval(function() { + executeAutomation(faxAutomation.id); + }, faxAutomation.timeout * 60 * 1000); +} + +module.exports = function() { + + console.log('[Automation] Fax service started'); + + Automation.afterCreate(function(doc, options) { + if (doc.channel === 'fax') { + console.log('[Automation] Fax', doc.id, 'created, the status is', doc.status); + if (doc.status) { + createInterval(doc); + } + } + }); + + Automation.afterUpdate(function(doc, options) { + if (doc.channel === 'fax') { + console.log('[Automation] Fax', doc.id, 'updated, the status is', doc.status); + if (activeFaxAutomations['interval' + doc.id]) { + console.log('[Automation] Fax unset ', doc.id); + clearInterval(activeFaxAutomations['interval' + doc.id]); + delete activeFaxAutomations['interval' + doc.id]; + } + if (doc.status) { + createInterval(doc); + } + } + }); + + Automation.afterDelete(function(doc, options) { + if (doc.channel === 'fax') { + console.log('[Automation] Fax', doc.id, ' deleted'); + if (activeFaxAutomations['interval' + doc.id]) { + console.log('[Automation] Fax unset ', doc.id); + clearInterval(activeFaxAutomations['interval' + doc.id]); + delete activeFaxAutomations['interval' + doc.id]; + } + } + }); + + return Automation + .scope('all') + .findAll({ + where: { + status: true, + channel: 'fax' + }, + attributes: ['id', 'timeout'] + }) + .then(function(faxAutomations) { + + console.log('[Automation] Fax are', faxAutomations.length); + + faxAutomations.forEach(function(faxAutomation) { + createInterval(faxAutomation); + }); + + }) + .catch(function(err) { + console.error('[Automation] Error in Mail init'); + console.error('[Automation] Message:', err.message); + console.error('[Automation] Stack:', err.stack); + }); +}; diff --git a/server/config/automations/mail.js b/server/config/automations/mail.js index 6fb2a9c..ec240d2 100644 --- a/server/config/automations/mail.js +++ b/server/config/automations/mail.js @@ -1 +1,191 @@ -var _0xd41f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x4D\x61\x69\x6C","\x6C\x6F\x67","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x4D\x61\x69\x6C\x20\x65\x78\x65\x63","\x65\x72\x72\x6F\x72","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x4D\x65\x73\x73\x61\x67\x65\x3A","\x6D\x65\x73\x73\x61\x67\x65","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x53\x74\x61\x63\x6B\x3A","\x73\x74\x61\x63\x6B","\x63\x61\x74\x63\x68","\x69\x64","\x64\x61\x74\x61\x31","\x73\x74\x61\x74\x75\x73","\x61\x63\x74\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x41\x63\x74\x69\x6F\x6E\x73","\x74\x68\x65\x6E","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x70\x75\x73\x68","\x41\x6C\x6C","\x41\x6E\x79","\x6C\x65\x6E\x67\x74\x68","\x24\x61\x6E\x64","\x77\x68\x65\x72\x65","\x24\x6F\x72","\x66\x69\x6E\x64\x41\x6C\x6C","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x6C\x6C","\x73\x63\x6F\x70\x65","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x4D\x61\x69\x6C\x20\x73\x65\x74\x53\x74\x61\x74\x75\x73","\x75\x70\x64\x61\x74\x65","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x65\x71\x75\x61\x6C\x73","\x6E\x6F\x74\x5F\x65\x71\x75\x61\x6C\x73","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x68\x6F\x75\x72\x73","\x73\x75\x62\x74\x72\x61\x63\x74","\x67\x72\x65\x61\x74\x65\x72","\x67\x72\x65\x61\x74\x65\x72\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x6C\x65\x73\x73","\x6C\x65\x73\x73\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x4D\x61\x69\x6C","\x73\x65\x74\x20\x77\x69\x74\x68\x20\x74\x69\x6D\x65\x6F\x75\x74","\x74\x69\x6D\x65\x6F\x75\x74","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x65\x78\x70\x6F\x72\x74\x73","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x4D\x61\x69\x6C\x20\x73\x65\x72\x76\x69\x63\x65\x20\x73\x74\x61\x72\x74\x65\x64","\x63\x68\x61\x6E\x6E\x65\x6C","\x6D\x61\x69\x6C","\x63\x72\x65\x61\x74\x65\x64\x2C\x20\x74\x68\x65\x20\x73\x74\x61\x74\x75\x73\x20\x69\x73","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x75\x70\x64\x61\x74\x65\x64\x2C\x20\x74\x68\x65\x20\x73\x74\x61\x74\x75\x73\x20\x69\x73","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x4D\x61\x69\x6C\x20\x75\x6E\x73\x65\x74\x20","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x20\x64\x65\x6C\x65\x74\x65\x64","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x4D\x61\x69\x6C\x20\x69\x6E\x69\x74","\x5B\x41\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x5D\x20\x4D\x61\x69\x6C\x20\x61\x72\x65"];_0xd41f[0];var _=require(_0xd41f[1]);var moment=require(_0xd41f[2]);var Automation=require(_0xd41f[4])[_0xd41f[3]];var MailRoom=require(_0xd41f[4])[_0xd41f[5]];var activeMailAutomations={};function executeAutomation(_0x858ax7){console[_0xd41f[7]](_0xd41f[6],_0x858ax7);var _0x858ax8;return Automation[_0xd41f[33]](_0xd41f[32])[_0xd41f[31]](_0x858ax7)[_0xd41f[21]](function(_0x858axd){_0x858ax8= _0x858axd;var _0x858axe=[];var _0x858axf=[];var _0x858ax10={where:{}};_0x858axd[_0xd41f[24]][_0xd41f[19]](function(_0x858ax11){_0x858axf[_0xd41f[23]](getCondition(_0x858ax11[_0xd41f[22]]))});_0x858axd[_0xd41f[25]][_0xd41f[19]](function(_0x858ax11){_0x858axe[_0xd41f[23]](getCondition(_0x858ax11[_0xd41f[22]]))});if(_0x858axf[_0xd41f[26]]){_0x858ax10[_0xd41f[28]][_0xd41f[27]]= _0x858axf};if(_0x858axe[_0xd41f[26]]){_0x858ax10[_0xd41f[28]][_0xd41f[29]]= _0x858axe};return MailRoom[_0xd41f[30]](_0x858ax10)})[_0xd41f[21]](function(_0x858axa){_0x858axa[_0xd41f[19]](function(_0x858axb){_0x858ax8[_0xd41f[20]][_0xd41f[19]](function(_0x858axc){switch(_0x858axc[_0xd41f[18]]){case _0xd41f[17]:setStatus(_0x858axb[_0xd41f[15]],_0x858axc[_0xd41f[16]]);break;default:}})})})[_0xd41f[14]](function(_0x858ax9){console[_0xd41f[9]](_0xd41f[8]);console[_0xd41f[9]](_0xd41f[10],_0x858ax9[_0xd41f[11]]);console[_0xd41f[9]](_0xd41f[12],_0x858ax9[_0xd41f[13]])})}function setStatus(_0x858ax13,_0x858ax14){return MailRoom[_0xd41f[35]]({status:_0x858ax14},{where:{id:_0x858ax13}})[_0xd41f[14]](function(_0x858ax9){console[_0xd41f[9]](_0xd41f[34]);console[_0xd41f[9]](_0xd41f[10],_0x858ax9[_0xd41f[11]]);console[_0xd41f[9]](_0xd41f[12],_0x858ax9[_0xd41f[13]])})}function getCondition(_0x858ax11){var _0x858ax16={};switch(_0x858ax11[_0xd41f[36]]){case _0xd41f[17]:switch(_0x858ax11[_0xd41f[40]]){case _0xd41f[38]:_0x858ax16[_0x858ax11[_0xd41f[36]]]= _0x858ax11[_0xd41f[37]];break;case _0xd41f[39]:_0x858ax16[_0x858ax11[_0xd41f[36]]]= {$ne:_0x858ax11[_0xd41f[37]]};break;default:};break;case _0xd41f[49]:var _0x858ax17=moment()[_0xd41f[44]](parseInt(_0x858ax11[_0xd41f[37]],10),_0xd41f[43])[_0xd41f[42]](_0xd41f[41]);switch(_0x858ax11[_0xd41f[40]]){case _0xd41f[45]:_0x858ax16[_0x858ax11[_0xd41f[36]]]= {lt:_0x858ax17};break;case _0xd41f[46]:_0x858ax16[_0x858ax11[_0xd41f[36]]]= {$lte:_0x858ax17};break;case _0xd41f[47]:_0x858ax16[_0x858ax11[_0xd41f[36]]]= {$gt:_0x858ax17};break;case _0xd41f[48]:_0x858ax16[_0x858ax11[_0xd41f[36]]]= {$gte:_0x858ax17};break;default:};break;default:};return _0x858ax16}function createInterval(_0x858axd){console[_0xd41f[7]](_0xd41f[50],_0x858axd[_0xd41f[15]],_0xd41f[51],_0x858axd[_0xd41f[52]]* 60* 1000);activeMailAutomations[_0xd41f[53]+ _0x858axd[_0xd41f[15]]]= setInterval(function(){executeAutomation(_0x858axd[_0xd41f[15]])},_0x858axd[_0xd41f[52]]* 60* 1000)}module[_0xd41f[54]]= function(){console[_0xd41f[7]](_0xd41f[55]);Automation[_0xd41f[59]](function(_0x858ax19,_0x858ax1a){if(_0x858ax19[_0xd41f[56]]=== _0xd41f[57]){console[_0xd41f[7]](_0xd41f[50],_0x858ax19[_0xd41f[15]],_0xd41f[58],_0x858ax19[_0xd41f[17]]);if(_0x858ax19[_0xd41f[17]]){createInterval(_0x858ax19)}}});Automation[_0xd41f[62]](function(_0x858ax19,_0x858ax1a){if(_0x858ax19[_0xd41f[56]]=== _0xd41f[57]){console[_0xd41f[7]](_0xd41f[50],_0x858ax19[_0xd41f[15]],_0xd41f[60],_0x858ax19[_0xd41f[17]]);if(activeMailAutomations[_0xd41f[53]+ _0x858ax19[_0xd41f[15]]]){console[_0xd41f[7]](_0xd41f[61],_0x858ax19[_0xd41f[15]]);clearInterval(activeMailAutomations[_0xd41f[53]+ _0x858ax19[_0xd41f[15]]]);delete activeMailAutomations[_0xd41f[53]+ _0x858ax19[_0xd41f[15]]]};if(_0x858ax19[_0xd41f[17]]){createInterval(_0x858ax19)}}});Automation[_0xd41f[64]](function(_0x858ax19,_0x858ax1a){if(_0x858ax19[_0xd41f[56]]=== _0xd41f[57]){console[_0xd41f[7]](_0xd41f[50],_0x858ax19[_0xd41f[15]],_0xd41f[63]);if(activeMailAutomations[_0xd41f[53]+ _0x858ax19[_0xd41f[15]]]){console[_0xd41f[7]](_0xd41f[61],_0x858ax19[_0xd41f[15]]);clearInterval(activeMailAutomations[_0xd41f[53]+ _0x858ax19[_0xd41f[15]]]);delete activeMailAutomations[_0xd41f[53]+ _0x858ax19[_0xd41f[15]]]}}});return Automation[_0xd41f[33]](_0xd41f[32])[_0xd41f[30]]({where:{status:true,channel:_0xd41f[57]},attributes:[_0xd41f[15],_0xd41f[52]]})[_0xd41f[21]](function(_0x858ax1b){console[_0xd41f[7]](_0xd41f[66],_0x858ax1b[_0xd41f[26]]);_0x858ax1b[_0xd41f[19]](function(_0x858axd){createInterval(_0x858axd)})})[_0xd41f[14]](function(_0x858ax9){console[_0xd41f[9]](_0xd41f[65]);console[_0xd41f[9]](_0xd41f[10],_0x858ax9[_0xd41f[11]]);console[_0xd41f[9]](_0xd41f[12],_0x858ax9[_0xd41f[13]])})} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var moment = require('moment'); + +var Automation = require('../../models').Automation; +var MailRoom = require('../../models').MailRoom; +var activeMailAutomations = {}; + +function executeAutomation(id) { + console.log('[Automation] Executing Mail', id); + var _mailAutomation; + return Automation + .scope('all') + .findById(id) + .then(function(mailAutomation) { + _mailAutomation = mailAutomation; + + var $or = []; + var $and = []; + var query = { + where: {} + }; + + mailAutomation.All.forEach(function(condition) { + $and.push(getCondition(condition.dataValues)); + }); + mailAutomation.Any.forEach(function(condition) { + $or.push(getCondition(condition.dataValues)); + }); + + if ($and.length) { + query.where.$and = $and; + } + if ($or.length) { + query.where.$or = $or; + } + + return MailRoom + .findAll(query); + }) + .then(function(mails) { + mails.forEach(function(mail) { + _mailAutomation.Actions.forEach(function(action) { + switch (action.action) { + case 'status': + setStatus(mail.id, action.data1); + break; + default: + } + }); + }); + }) + .catch(function(err) { + console.error('[Automation] Error in Mail exec'); + console.error('[Automation] Message:', err.message); + console.error('[Automation] Stack:', err.stack); + }); +} + +function setStatus(ticketId, newStatus) { + return MailRoom.update({ + status: newStatus, + }, { + where: { + id: ticketId + } + }) + .catch(function(err) { + console.error('[Automation] Error in Mail setStatus'); + console.error('[Automation] Message:', err.message); + console.error('[Automation] Stack:', err.stack); + }); +} + +function getCondition(condition) { + var result = {}; + switch (condition.field) { + case 'status': + switch (condition.operator) { + case 'equals': + result[condition.field] = condition.value; + break; + case 'not_equals': + result[condition.field] = { + $ne: condition.value + }; + break; + default: + } + break; + case 'createdAt': + var compareDate = moment().subtract(parseInt(condition.value, 10), 'hours').format("YYYY-MM-DD HH:mm:ss"); + switch (condition.operator) { + case 'greater': + result[condition.field] = { + lt: compareDate + }; + break; + case 'greater_or_equal': + result[condition.field] = { + $lte: compareDate + }; + break; + case 'less': + result[condition.field] = { + $gt: compareDate + }; + break; + case 'less_or_equal': + result[condition.field] = { + $gte: compareDate + }; + break; + default: + } + break; + default: + } + return result; +} + +function createInterval(mailAutomation) { + console.log('[Automation] Mail', mailAutomation.id, 'set with timeout', mailAutomation.timeout * 60 * 1000); + activeMailAutomations['interval' + mailAutomation.id] = setInterval(function() { + executeAutomation(mailAutomation.id); + }, mailAutomation.timeout * 60 * 1000); +} + +module.exports = function() { + + console.log('[Automation] Mail service started'); + + Automation.afterCreate(function(doc, options) { + if (doc.channel === 'mail') { + console.log('[Automation] Mail', doc.id, 'created, the status is', doc.status); + if (doc.status) { + createInterval(doc); + } + } + }); + + Automation.afterUpdate(function(doc, options) { + if (doc.channel === 'mail') { + console.log('[Automation] Mail', doc.id, 'updated, the status is', doc.status); + if (activeMailAutomations['interval' + doc.id]) { + console.log('[Automation] Mail unset ', doc.id); + clearInterval(activeMailAutomations['interval' + doc.id]); + delete activeMailAutomations['interval' + doc.id]; + } + if (doc.status) { + createInterval(doc); + } + } + }); + + Automation.afterDestroy(function(doc, options) { + if (doc.channel === 'mail') { + console.log('[Automation] Mail', doc.id, ' deleted'); + if (activeMailAutomations['interval' + doc.id]) { + console.log('[Automation] Mail unset ', doc.id); + clearInterval(activeMailAutomations['interval' + doc.id]); + delete activeMailAutomations['interval' + doc.id]; + } + } + }); + + return Automation + .scope('all') + .findAll({ + where: { + status: true, + channel: 'mail' + }, + attributes: ['id', 'timeout'] + }) + .then(function(mailAutomations) { + + console.log('[Automation] Mail are', mailAutomations.length); + + mailAutomations.forEach(function(mailAutomation) { + createInterval(mailAutomation); + }); + + }) + .catch(function(err) { + console.error('[Automation] Error in Mail init'); + console.error('[Automation] Message:', err.message); + console.error('[Automation] Stack:', err.stack); + }); +}; diff --git a/server/config/chat.js b/server/config/chat.js index 8bc8cd8..eff997c 100644 --- a/server/config/chat.js +++ b/server/config/chat.js @@ -1 +1,109 @@ -var _0xc9e2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x2E\x2F\x63\x68\x61\x74","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2F\x75\x74\x69\x6C","\x65\x78\x70\x6F\x72\x74\x73","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x43\x48\x41\x54\x20\x77\x65\x62\x73\x69\x74\x65\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E","\x6C\x6F\x67","\x77\x65\x62\x73\x69\x74\x65\x69\x64","\x66\x69\x6E\x64","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x64","\x63\x68\x61\x6E\x67\x65\x64","\x61\x63\x63\x65\x70\x74","\x72\x65\x6A\x65\x63\x74\x65\x64\x41\x74","\x72\x65\x6A\x65\x63\x74","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65\x49\x64","\x73\x74\x61\x74\x75\x73","\x43\x4C\x4F\x53\x45\x44","\x63\x6C\x6F\x73\x65","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x63\x63\x65\x70\x74\x4D\x65\x74\x68\x6F\x64","\x61\x63\x63\x65\x70\x74\x55\x72\x6C","\x43\x68\x61\x74\x20\x77\x65\x62\x73\x69\x74\x65\x20\x3C","\x6E\x61\x6D\x65","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x61\x63\x63\x65\x70\x74\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x6C\x65\x6E\x67\x74\x68","\x61\x63\x74\x69\x6F\x6E\x73","\x65\x6E\x61\x62\x6C\x65\x64","\x65\x78\x65\x63\x41\x63\x74\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x65\x6A\x65\x63\x74\x4D\x65\x74\x68\x6F\x64","\x72\x65\x6A\x65\x63\x74\x55\x72\x6C","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x63\x6C\x6F\x73\x65\x4D\x65\x74\x68\x6F\x64","\x63\x6C\x6F\x73\x65\x55\x72\x6C","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x63\x6C\x6F\x73\x65\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x57\x65\x62\x68\x6F\x6F\x6B\x20\x6E\x6F\x74\x20\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x64","\x72\x65\x71\x75\x65\x73\x74\x20\x66\x61\x69\x6C\x65\x64\x21","\x72\x65\x71\x75\x65\x73\x74\x20\x73\x75\x63\x63\x65\x73\x73\x65\x66\x75\x6C\x21","\x73\x65\x6E\x64\x52\x65\x71\x75\x65\x73\x74","\x43\x68\x61\x74\x20\x77\x65\x62\x73\x69\x74\x65\x3A\x20","\x20\x43\x72\x65\x61\x74\x65","\x70\x75\x73\x68","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x69\x64","\x20\x55\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x75\x6E\x73\x68\x69\x66\x74","\x72\x65\x6D\x6F\x76\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79"];_0xc9e2[0];var ChatWebsite=require(_0xc9e2[2])[_0xc9e2[1]];var ChatRoom=require(_0xc9e2[2])[_0xc9e2[3]];var Website=require(_0xc9e2[4]);var ReportChat=require(_0xc9e2[2])[_0xc9e2[5]];var _=require(_0xc9e2[6]);var Util=require(_0xc9e2[7]);var chatwebsites;module[_0xc9e2[8]]= function(){return ChatWebsite[_0xc9e2[26]]()[_0xc9e2[25]](function(_0x957ax9){console[_0xc9e2[12]](_0xc9e2[11]);chatwebsites= _0x957ax9;synch(chatwebsites);ReportChat[_0xc9e2[20]](function(_0x957axa){var _0x957axb=_[_0xc9e2[14]](chatwebsites,{id:_0x957axa[_0xc9e2[13]]});if(_0x957axb&& _0x957axa[_0xc9e2[16]](_0xc9e2[15])){webhook(_0x957axa,_0x957axb,_0xc9e2[17])};if(_0x957axb&& _0x957axa[_0xc9e2[16]](_0xc9e2[18])){webhook(_0x957axa,_0x957axb,_0xc9e2[19])}});ChatRoom[_0xc9e2[20]](function(_0x957axa){var _0x957axb=_[_0xc9e2[14]](chatwebsites,{id:_0x957axa[_0xc9e2[21]]});if(_0x957axb&& _0x957axa[_0xc9e2[16]](_0xc9e2[22])&& _0x957axa[_0xc9e2[22]]=== _0xc9e2[23]){webhook(_0x957axa,_0x957axb,_0xc9e2[24])}})})[_0xc9e2[10]](function(_0x957ax8){console[_0xc9e2[9]](_0x957ax8)})};function webhook(_0x957axa,_0x957axb,_0x957axd){var _0x957axe=_0x957axb;switch(_0x957axd){case _0xc9e2[17]:if(_0x957axe[_0xc9e2[27]]&& _0x957axe[_0xc9e2[28]]){console[_0xc9e2[12]](_0xc9e2[29]+ _0x957axe[_0xc9e2[30]]+ _0xc9e2[31]);execRequest(_0x957axa[_0xc9e2[32]],_0x957axe[_0xc9e2[27]],_0x957axe[_0xc9e2[28]])};if(_0x957axe[_0xc9e2[34]][_0xc9e2[33]]){_[_0xc9e2[37]](_0x957axe[_0xc9e2[34]],function(_0x957axf){if(_0x957axf[_0xc9e2[35]]){Util[_0xc9e2[36]](_0x957axf,_0x957axa)}})};break;case _0xc9e2[19]:if(_0x957axe[_0xc9e2[38]]&& _0x957axe[_0xc9e2[39]]){console[_0xc9e2[12]](_0xc9e2[29]+ _0x957axe[_0xc9e2[30]]+ _0xc9e2[40]);execRequest(_0x957axa[_0xc9e2[32]],_0x957axe[_0xc9e2[38]],_0x957axe[_0xc9e2[39]])};break;case _0xc9e2[24]:if(_0x957axe[_0xc9e2[41]]&& _0x957axe[_0xc9e2[42]]){console[_0xc9e2[12]](_0xc9e2[29]+ _0x957axe[_0xc9e2[30]]+ _0xc9e2[43]);execRequest(_0x957axa[_0xc9e2[32]],_0x957axe[_0xc9e2[41]],_0x957axe[_0xc9e2[42]])};break;default:console[_0xc9e2[12]](_0xc9e2[44])}}function execRequest(_0x957axa,_0x957ax11,_0x957ax12){Util[_0xc9e2[47]](_0x957axa,_0x957ax11,_0x957ax12)[_0xc9e2[25]](function(_0x957ax13){console[_0xc9e2[12]](_0xc9e2[46])})[_0xc9e2[10]](function(_0x957ax8){console[_0xc9e2[12]](_0xc9e2[45])})}function synch(chatwebsites){ChatWebsite[_0xc9e2[51]](function(_0x957axa){console[_0xc9e2[12]](_0xc9e2[48]+ _0x957axa[_0xc9e2[30]]+ _0xc9e2[49]);chatwebsites[_0xc9e2[50]](_0x957axa)});ChatWebsite[_0xc9e2[20]](function(_0x957axa){var _0x957ax15=_[_0xc9e2[14]](chatwebsites,{id:_0x957axa[_0xc9e2[52]]});if(_0x957ax15){console[_0xc9e2[12]](_0xc9e2[48]+ _0x957ax15[_0xc9e2[30]]+ _0xc9e2[53]);_[_0xc9e2[54]](_0x957ax15,_0x957axa)}else {chatwebsites[_0xc9e2[55]](_0x957axa)}});ChatWebsite[_0xc9e2[57]](function(_0x957axa){_[_0xc9e2[56]](chatwebsites,{id:_0x957axa[_0xc9e2[52]]})})} \ No newline at end of file +'use strict'; +var ChatWebsite = require('../models').ChatWebsite; +var ChatRoom = require('../models').ChatRoom; +var Website = require('./chat'); +var ReportChat = require('../models').ReportChat; +var _ = require('lodash'); +var Util = require('./util'); +var chatwebsites; + +module.exports = function() { + + return ChatWebsite + .findAll() + .then(function(websites) { + console.log('CHAT website Initialization'); + chatwebsites = websites; + synch(chatwebsites); + ReportChat.afterUpdate(function(doc) { + var website = _.find(chatwebsites, { + id: doc.websiteid + }); + if (website && doc.changed('connectid')) { + webhook(doc, website, 'accept'); + } + if (website && doc.changed('rejectedAt')) { + webhook(doc, website, 'reject'); + } + }); + ChatRoom.afterUpdate(function(doc) { + var website = _.find(chatwebsites, { + id: doc.ChatWebsiteId + }); + if (website && doc.changed('status') && doc.status === 'CLOSED') { + webhook(doc, website, 'close'); + } + }) + }) + .catch(function(err) { + console.error(err); + }); +} + +function webhook(doc, website, hook) { + var _website = website; + switch (hook) { + case 'accept': + if (_website.acceptMethod && _website.acceptUrl) { + console.log('Chat website <' + _website.name + '> executing accept webhook'); + execRequest(doc.dataValues, _website.acceptMethod, _website.acceptUrl); + } + if (_website.actions.length) { + _.forEach(_website.actions, function(action) { + if (action.enabled) { + Util.execAction(action, doc); + } + }) + } + break; + case 'reject': + if (_website.rejectMethod && _website.rejectUrl) { + console.log('Chat website <' + _website.name + '> executing reject webhook'); + execRequest(doc.dataValues, _website.rejectMethod, _website.rejectUrl); + } + break; + case 'close': + if (_website.closeMethod && _website.closeUrl) { + console.log('Chat website <' + _website.name + '> executing close webhook'); + execRequest(doc.dataValues, _website.closeMethod, _website.closeUrl); + } + break; + default: + console.log('Webhook not recognized'); + } +} + +function execRequest(doc, method, url) { + Util.sendRequest(doc, method, url) + .then(function(values) { + console.log('request successeful!'); + }) + .catch(function(err) { + console.log('request failed!'); + }) +} + + +function synch(chatwebsites) { + ChatWebsite.afterCreate(function(doc) { + console.log('Chat website: ' + doc.name + ' Create'); + chatwebsites.push(doc); + }); + ChatWebsite.afterUpdate(function(doc) { + var oldItem = _.find(chatwebsites, { + id: doc.id + }); + if (oldItem) { + console.log('Chat website: ' + oldItem.name + ' Update'); + _.merge(oldItem, doc); + } else { + chatwebsites.unshift(doc); + } + }); + ChatWebsite.afterDestroy(function(doc) { + _.remove(chatwebsites, { + id: doc.id + }); + }); + +} diff --git a/server/config/express.js b/server/config/express.js index b8152b0..30258e5 100644 --- a/server/config/express.js +++ b/server/config/express.js @@ -1 +1,80 @@ -var _0xdf21=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x72\x65\x73\x73","\x73\x65\x72\x76\x65\x2D\x66\x61\x76\x69\x63\x6F\x6E","\x6D\x6F\x72\x67\x61\x6E","\x63\x6F\x6D\x70\x72\x65\x73\x73\x69\x6F\x6E","\x62\x6F\x64\x79\x2D\x70\x61\x72\x73\x65\x72","\x65\x78\x70\x72\x65\x73\x73\x2D\x71\x75\x65\x72\x79\x2D\x69\x6E\x74","\x6D\x65\x74\x68\x6F\x64\x2D\x6F\x76\x65\x72\x72\x69\x64\x65","\x63\x6F\x6F\x6B\x69\x65\x2D\x70\x61\x72\x73\x65\x72","\x65\x72\x72\x6F\x72\x68\x61\x6E\x64\x6C\x65\x72","\x70\x61\x74\x68","\x70\x61\x73\x73\x70\x6F\x72\x74","\x65\x78\x70\x72\x65\x73\x73\x2D\x73\x65\x73\x73\x69\x6F\x6E","\x63\x6F\x6E\x6E\x65\x63\x74\x2D\x66\x6C\x61\x73\x68","\x65\x78\x70\x72\x65\x73\x73\x2D\x6D\x79\x73\x71\x6C\x2D\x73\x65\x73\x73\x69\x6F\x6E","\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73","\x65\x6E\x76","\x67\x65\x74","\x76\x69\x65\x77\x73","\x72\x6F\x6F\x74","\x2F\x73\x65\x72\x76\x65\x72\x2F\x76\x69\x65\x77\x73","\x73\x65\x74","\x68\x74\x6D\x6C","\x72\x65\x6E\x64\x65\x72\x46\x69\x6C\x65","\x65\x6A\x73","\x65\x6E\x67\x69\x6E\x65","\x76\x69\x65\x77\x20\x65\x6E\x67\x69\x6E\x65","\x75\x73\x65","\x35\x30\x6D\x62","\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x6A\x73\x6F\x6E","\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x65","\x73\x65\x63\x72\x65\x74","\x73\x65\x73\x73\x69\x6F\x6E","\x68\x6F\x73\x74","\x64\x62","\x70\x6F\x72\x74","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x64\x61\x74\x61\x62\x61\x73\x65","\x63\x6F\x6F\x6B\x69\x65","\x6E\x61\x6D\x65","\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E","\x70\x75\x62\x6C\x69\x63","\x66\x61\x76\x69\x63\x6F\x6E\x2E\x69\x63\x6F","\x6A\x6F\x69\x6E","\x73\x74\x61\x74\x69\x63","\x61\x70\x70\x50\x61\x74\x68","\x2F\x70\x75\x62\x6C\x69\x63","\x72\x65\x6D\x6F\x74\x65\x2D\x61\x64\x64\x72\x65\x73\x73","\x78\x2D\x66\x6F\x72\x77\x61\x72\x64\x65\x64\x2D\x66\x6F\x72","\x68\x65\x61\x64\x65\x72\x73","\x72\x65\x6D\x6F\x74\x65\x41\x64\x64\x72\x65\x73\x73","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x69\x70","\x74\x6F\x6B\x65\x6E","\x3A\x6D\x65\x74\x68\x6F\x64\x20\x3A\x72\x65\x6D\x6F\x74\x65\x2D\x61\x64\x64\x72\x65\x73\x73\x20\x3A\x72\x65\x6D\x6F\x74\x65\x2D\x75\x73\x65\x72\x20\x3A\x75\x72\x6C\x20\x3A\x73\x74\x61\x74\x75\x73\x20\x3A\x72\x65\x73\x70\x6F\x6E\x73\x65\x2D\x74\x69\x6D\x65\x20\x6D\x73\x20\x2D\x20\x3A\x72\x65\x73\x5B\x63\x6F\x6E\x74\x65\x6E\x74\x2D\x6C\x65\x6E\x67\x74\x68\x5D","\x64\x65\x76\x65\x6C\x6F\x70\x6D\x65\x6E\x74","\x74\x65\x73\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x2D\x6C\x69\x76\x65\x72\x65\x6C\x6F\x61\x64","\x2E\x74\x6D\x70","\x63\x6C\x69\x65\x6E\x74"];_0xdf21[0];var express=require(_0xdf21[1]);var favicon=require(_0xdf21[2]);var morgan=require(_0xdf21[3]);var compression=require(_0xdf21[4]);var bodyParser=require(_0xdf21[5]);var queryParser=require(_0xdf21[6]);var methodOverride=require(_0xdf21[7]);var cookieParser=require(_0xdf21[8]);var errorHandler=require(_0xdf21[9]);var path=require(_0xdf21[10]);var passport=require(_0xdf21[11]);var session=require(_0xdf21[12]);var flash=require(_0xdf21[13]);var SessionStore=require(_0xdf21[14])(session);var config=require(_0xdf21[15]);module[_0xdf21[16]]= function(_0x5664x10){var _0x5664x11=_0x5664x10[_0xdf21[18]](_0xdf21[17]);_0x5664x10[_0xdf21[22]](_0xdf21[19],config[_0xdf21[20]]+ _0xdf21[21]);_0x5664x10[_0xdf21[26]](_0xdf21[23],require(_0xdf21[25])[_0xdf21[24]]);_0x5664x10[_0xdf21[22]](_0xdf21[27],_0xdf21[23]);_0x5664x10[_0xdf21[28]](compression());_0x5664x10[_0xdf21[28]](bodyParser[_0xdf21[30]]({limit:_0xdf21[29],extended:false}));_0x5664x10[_0xdf21[28]](bodyParser[_0xdf21[31]]());_0x5664x10[_0xdf21[28]](methodOverride());_0x5664x10[_0xdf21[28]](cookieParser());_0x5664x10[_0xdf21[28]](passport[_0xdf21[32]]());_0x5664x10[_0xdf21[28]](session({secret:config[_0xdf21[34]][_0xdf21[33]],store: new SessionStore({host:config[_0xdf21[36]][_0xdf21[35]],port:config[_0xdf21[36]][_0xdf21[37]],user:config[_0xdf21[36]][_0xdf21[38]],password:config[_0xdf21[36]][_0xdf21[39]],database:config[_0xdf21[36]][_0xdf21[40]]}),cookie:config[_0xdf21[34]][_0xdf21[41]],name:config[_0xdf21[34]][_0xdf21[42]],resave:true,saveUninitialized:true}));if(_0xdf21[43]=== _0x5664x11){_0x5664x10[_0xdf21[28]](favicon(path[_0xdf21[46]](config[_0xdf21[20]],_0xdf21[44],_0xdf21[45])));_0x5664x10[_0xdf21[28]](express[_0xdf21[47]](path[_0xdf21[46]](config[_0xdf21[20]],_0xdf21[44])));_0x5664x10[_0xdf21[22]](_0xdf21[48],config[_0xdf21[20]]+ _0xdf21[49]);morgan[_0xdf21[56]](_0xdf21[50],function(_0x5664x12,_0x5664x13){return _0x5664x12[_0xdf21[52]][_0xdf21[51]]?_0x5664x12[_0xdf21[52]][_0xdf21[51]]:_0x5664x12[_0xdf21[54]][_0xdf21[53]]|| _0x5664x12[_0xdf21[55]]});_0x5664x10[_0xdf21[28]](morgan(_0xdf21[57]))};if(_0xdf21[58]=== _0x5664x11|| _0xdf21[59]=== _0x5664x11){_0x5664x10[_0xdf21[28]](require(_0xdf21[60])());_0x5664x10[_0xdf21[28]](express[_0xdf21[47]](path[_0xdf21[46]](config[_0xdf21[20]],_0xdf21[61])));_0x5664x10[_0xdf21[28]](express[_0xdf21[47]](path[_0xdf21[46]](config[_0xdf21[20]],_0xdf21[62])));_0x5664x10[_0xdf21[22]](_0xdf21[48],_0xdf21[62]);morgan[_0xdf21[56]](_0xdf21[50],function(_0x5664x12,_0x5664x13){return _0x5664x12[_0xdf21[52]][_0xdf21[51]]?_0x5664x12[_0xdf21[52]][_0xdf21[51]]:_0x5664x12[_0xdf21[54]][_0xdf21[53]]|| _0x5664x12[_0xdf21[55]]});_0x5664x10[_0xdf21[28]](morgan(_0xdf21[57]));_0x5664x10[_0xdf21[28]](errorHandler())};_0x5664x10[_0xdf21[28]](flash())} \ No newline at end of file +/** + * Express configuration + */ + +'use strict'; + +var express = require('express'); +var favicon = require('serve-favicon'); +var morgan = require('morgan'); +var compression = require('compression'); +var bodyParser = require('body-parser'); +var queryParser = require('express-query-int'); +var methodOverride = require('method-override'); +var cookieParser = require('cookie-parser'); +var errorHandler = require('errorhandler'); +var path = require('path'); +var passport = require('passport'); +var session = require('express-session'); +var flash = require('connect-flash'); +var SessionStore = require('express-mysql-session')(session); +var config = require('./environment'); + +module.exports = function(app) { + var env = app.get('env'); + + app.set('views', config.root + '/server/views'); + app.engine('html', require('ejs').renderFile); + app.set('view engine', 'html'); + app.use(compression()); + app.use(bodyParser.urlencoded({ + limit: '50mb', + extended: false + })); + app.use(bodyParser.json()); + // app.use(queryParser()); + app.use(methodOverride()); + app.use(cookieParser()); + app.use(passport.initialize()); + + // Express/MySQL session storage + app.use(session({ + secret: config.session.secret, + store: new SessionStore({ + host: config.db.host, + port: config.db.port, + user: config.db.username, + password: config.db.password, + database: config.db.database + }), + cookie: config.session.cookie, + name: config.session.name, + resave: true, + saveUninitialized: true + })); + + if ('production' === env) { + app.use(favicon(path.join(config.root, 'public', 'favicon.ico'))); + app.use(express.static(path.join(config.root, 'public'))); + app.set('appPath', config.root + '/public'); + morgan.token('remote-address', function(req, res) { + return req.headers['x-forwarded-for'] ? req.headers['x-forwarded-for'] : req.connection.remoteAddress || req.ip; + }); + app.use(morgan(':method :remote-address :remote-user :url :status :response-time ms - :res[content-length]')); + } + + if ('development' === env || 'test' === env) { + app.use(require('connect-livereload')()); + app.use(express.static(path.join(config.root, '.tmp'))); + app.use(express.static(path.join(config.root, 'client'))); + app.set('appPath', 'client'); + morgan.token('remote-address', function(req, res) { + return req.headers['x-forwarded-for'] ? req.headers['x-forwarded-for'] : req.connection.remoteAddress || req.ip; + }); + app.use(morgan(':method :remote-address :remote-user :url :status :response-time ms - :res[content-length]')); + app.use(errorHandler()); // Error handler - has to be last + } + + // Connect flash for flash messages + app.use(flash()); +}; diff --git a/server/config/fax.js b/server/config/fax.js index f02018a..c64343b 100644 --- a/server/config/fax.js +++ b/server/config/fax.js @@ -1 +1,240 @@ -var _0xc1e9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6E\x6F\x64\x65\x2D\x75\x75\x69\x64","\x74\x69\x66\x66\x2D\x74\x6F\x2D\x70\x6E\x67","\x65\x78\x65\x63","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x66\x73","\x70\x61\x74\x68","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x52\x6F\x6F\x6D","\x43\x6F\x6E\x74\x61\x63\x74","\x45\x76\x65\x6E\x74","\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x72\x65\x67\x69\x73\x74\x65\x72","\x72\x65\x63\x65\x69\x76\x65\x66\x61\x78","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x73\x74\x61\x74\x75\x73","\x52\x45\x43\x45\x49\x56\x45\x44","\x46\x61\x78\x52\x6F\x6F\x6D\x49\x64","\x69\x64","\x49\x4E\x43\x4F\x4D\x49\x4E\x47","\x46\x41\x58","\x63\x72\x65\x61\x74\x65","\x73\x65\x74\x46\x72\x6F\x6D","\x73\x70\x72\x65\x61\x64","\x72\x65\x6D\x6F\x74\x65\x73\x74\x61\x74\x69\x6F\x6E\x69\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x73\x65\x74\x54\x6F","\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64","\x76\x34","\x66\x69\x6C\x65\x6E\x61\x6D\x65","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x66\x61\x78","\x69\x6E\x62\x6F\x75\x6E\x64","\x2E\x70\x64\x66","\x6A\x6F\x69\x6E","\x63\x6F\x6E\x76\x65\x72\x74\x20","\x20","\x54\x68\x65\x20\x66\x69\x6C\x65\x20","\x20\x65\x78\x69\x74\x73","\x20\x77\x61\x73\x20\x63\x6F\x6E\x76\x65\x72\x74\x65\x64\x20\x69\x6E\x20\x50\x44\x46","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x74\x73","\x65\x78\x69\x73\x74\x73","\x4E\x45\x57","\x6F\x6E","\x73\x65\x6E\x64\x66\x61\x78","\x2A\x2A\x2A\x53\x65\x6E\x64\x46\x41\x58\x2A\x2A\x2A","\x6C\x6F\x67","\x75\x6E\x69\x71\x75\x65\x69\x64","\x66\x69\x6E\x64\x4F\x6E\x65","\x76\x61\x72\x73\x65\x74","\x66\x61\x78\x73\x74\x61\x74\x75\x73","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x76\x61\x72\x69\x61\x62\x6C\x65","\x56\x61\x72\x53\x65\x74\x3A\x20","\x76\x61\x6C\x75\x65","\x46\x41\x49\x4C\x45\x44","\x53\x45\x4E\x54","\x66\x61\x78\x65\x72\x72\x6F\x72","\x66\x61\x78\x73\x74\x61\x74\x75\x73\x73\x74\x72\x69\x6E\x67","\x6C\x61\x73\x74\x73\x74\x61\x74\x75\x73","\x75\x73\x65\x72\x65\x76\x65\x6E\x74","\x46\x61\x78","\x53\x45\x4E\x44\x49\x4E\x47","\x75\x75\x69\x64","\x46\x41\x58\x53\x74\x61\x74\x75\x73\x3A\x20","\x6F\x70\x65\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x61\x6D\x69"];_0xc1e9[0];var _=require(_0xc1e9[1]);var uuidLib=require(_0xc1e9[2]);var ConvertTiff=require(_0xc1e9[3]);var exec=require(_0xc1e9[5])[_0xc1e9[4]];var fs=require(_0xc1e9[6]);var path=require(_0xc1e9[7]);var FaxMessage=require(_0xc1e9[9])[_0xc1e9[8]];var FaxRoom=require(_0xc1e9[9])[_0xc1e9[10]];var Contact=require(_0xc1e9[9])[_0xc1e9[11]];var Event=require(_0xc1e9[9])[_0xc1e9[12]];var config=require(_0xc1e9[13]);exports[_0xc1e9[14]]= function(_0xe6e9xc){_0xe6e9xc[_0xc1e9[50]](_0xc1e9[15],function(_0xe6e9xd){FaxRoom[_0xc1e9[24]]({status:_0xc1e9[49],from:_0xe6e9xd[_0xc1e9[27]],FaxAccountId:1})[_0xc1e9[45]](function(_0xe6e9xf){_0xe6e9xd[_0xc1e9[18]]= _0xc1e9[19];_0xe6e9xd[_0xc1e9[20]]= _0xe6e9xf[_0xc1e9[21]];FaxMessage[_0xc1e9[24]](_0xe6e9xd)[_0xc1e9[45]](function(_0xe6e9x10){Event[_0xc1e9[24]]({name:_0xc1e9[22],channel:_0xc1e9[23],FaxRoomId:_0xe6e9xf[_0xc1e9[21]],FaxAccountId:1})[_0xc1e9[17]](function(_0xe6e9xe){console[_0xc1e9[16]](_0xe6e9xe)});Contact[_0xc1e9[28]]({where:{phone:_0xe6e9xd[_0xc1e9[27]]},defaults:{phone:_0xe6e9xd[_0xc1e9[27]],fullname:_0xe6e9xd[_0xc1e9[27]]}})[_0xc1e9[26]](function(_0xe6e9x11,_0xe6e9x12){_0xe6e9x10[_0xc1e9[25]](_0xe6e9x11)});Contact[_0xc1e9[28]]({where:{phone:_0xe6e9xd[_0xc1e9[30]]},defaults:{phone:_0xe6e9xd[_0xc1e9[30]],fullname:_0xe6e9xd[_0xc1e9[30]]}})[_0xc1e9[26]](function(_0xe6e9x11,_0xe6e9x12){_0xe6e9x10[_0xc1e9[29]](_0xe6e9x11)});var _0xe6e9x13=uuidLib[_0xc1e9[31]]();var _0xe6e9x14=_0xe6e9xd[_0xc1e9[32]];var _0xe6e9x15=path[_0xc1e9[39]](config[_0xc1e9[33]],_0xc1e9[34],_0xc1e9[35],_0xc1e9[36],_0xc1e9[37],_0xe6e9x13+ _0xc1e9[38]);var _0xe6e9x16=_0xc1e9[40]+ _0xe6e9x14+ _0xc1e9[41]+ _0xe6e9x15;fs[_0xc1e9[48]](_0xe6e9x14,function(_0xe6e9x17){if(_0xe6e9x17){console[_0xc1e9[16]](_0xc1e9[42]+ _0xe6e9x14+ _0xc1e9[43]);exec(_0xe6e9x16,function(_0xe6e9xe){if(_0xe6e9xe){console[_0xc1e9[16]](_0xe6e9xe)}else {_0xe6e9x10[_0xc1e9[46]]({filenamePDF:_0xe6e9x13+ _0xc1e9[38]})[_0xc1e9[45]](function(){console[_0xc1e9[16]](_0xc1e9[42]+ _0xe6e9x14+ _0xc1e9[44])})[_0xc1e9[17]](function(_0xe6e9xe){console[_0xc1e9[16]](_0xe6e9xe)})}})}else {console[_0xc1e9[16]](_0xc1e9[42]+ _0xe6e9x14+ _0xc1e9[47])}})})[_0xc1e9[17]](function(_0xe6e9xe){console[_0xc1e9[16]](_0xe6e9xe)})})[_0xc1e9[17]](function(_0xe6e9xe){console[_0xc1e9[16]](_0xe6e9xe)})});_0xe6e9xc[_0xc1e9[50]](_0xc1e9[51],function(_0xe6e9xd){console[_0xc1e9[53]](_0xc1e9[52]);FaxMessage[_0xc1e9[55]]({where:{uniqueid:_0xe6e9xd[_0xc1e9[54]]}})[_0xc1e9[45]](function(_0xe6e9x10){if(_0xe6e9x10){_0xe6e9x10[_0xc1e9[46]](_0xe6e9xd)}})[_0xc1e9[17]](function(_0xe6e9xe){console[_0xc1e9[16]](_0xe6e9xe)})});_0xe6e9xc[_0xc1e9[50]](_0xc1e9[56],function(_0xe6e9xd){if(_0xe6e9xd[_0xc1e9[59]][_0xc1e9[58]](_0xc1e9[57])){FaxMessage[_0xc1e9[55]]({where:{uniqueid:_0xe6e9xd[_0xc1e9[54]]}})[_0xc1e9[45]](function(_0xe6e9x10){if(_0xe6e9x10){console[_0xc1e9[53]](_0xc1e9[60],_0xc1e9[18],_0xe6e9xd[_0xc1e9[61]]);_0xe6e9x10[_0xc1e9[46]]({status:_0xe6e9xd[_0xc1e9[61]]== _0xc1e9[62]?_0xc1e9[62]:_0xc1e9[63]})}})[_0xc1e9[17]](function(_0xe6e9xe){console[_0xc1e9[16]](_0xe6e9xe)})}else {if(_0xe6e9xd[_0xc1e9[59]][_0xc1e9[58]](_0xc1e9[64])){FaxMessage[_0xc1e9[55]]({where:{uniqueid:_0xe6e9xd[_0xc1e9[54]]}})[_0xc1e9[45]](function(_0xe6e9x10){if(_0xe6e9x10){console[_0xc1e9[53]](_0xc1e9[60],_0xc1e9[16],_0xe6e9xd[_0xc1e9[61]]);_0xe6e9x10[_0xc1e9[46]]({error:_0xe6e9xd[_0xc1e9[61]]})}})[_0xc1e9[17]](function(_0xe6e9xe){console[_0xc1e9[16]](_0xe6e9xe)})}else {if(_0xe6e9xd[_0xc1e9[59]][_0xc1e9[58]](_0xc1e9[65])){FaxMessage[_0xc1e9[55]]({where:{uniqueid:_0xe6e9xd[_0xc1e9[54]]}})[_0xc1e9[45]](function(_0xe6e9x10){if(_0xe6e9x10){console[_0xc1e9[53]](_0xc1e9[60],_0xc1e9[66],_0xe6e9xd[_0xc1e9[61]]);_0xe6e9x10[_0xc1e9[46]]({laststatus:_0xe6e9xd[_0xc1e9[61]]})}})[_0xc1e9[17]](function(_0xe6e9xe){console[_0xc1e9[16]](_0xe6e9xe)})}}}});_0xe6e9xc[_0xc1e9[50]](_0xc1e9[67],function(_0xe6e9xd){if(_0xe6e9xd[_0xc1e9[67]]=== _0xc1e9[68]){FaxMessage[_0xc1e9[55]]({where:{uuid:_0xe6e9xd[_0xc1e9[70]]}})[_0xc1e9[45]](function(_0xe6e9x10){if(_0xe6e9x10){_0xe6e9xd[_0xc1e9[18]]= _0xc1e9[69];_0xe6e9x10[_0xc1e9[46]](_0xe6e9xd)}})[_0xc1e9[17]](function(_0xe6e9xe){console[_0xc1e9[16]](_0xe6e9xe)})}});_0xe6e9xc[_0xc1e9[50]](_0xc1e9[57],function(_0xe6e9xd){FaxMessage[_0xc1e9[55]]({where:{uniqueid:_0xe6e9xd[_0xc1e9[54]]}})[_0xc1e9[45]](function(_0xe6e9x10){if(_0xe6e9x10){console[_0xc1e9[53]](_0xc1e9[71],_0xe6e9xd[_0xc1e9[54]],_0xe6e9xd[_0xc1e9[18]]);_0xe6e9x10[_0xc1e9[46]]({operation:_0xe6e9xd[_0xc1e9[72]],laststatus:_0xe6e9xd[_0xc1e9[18]]})}})[_0xc1e9[17]](function(_0xe6e9xe){console[_0xc1e9[16]](_0xe6e9xe)})});require(_0xc1e9[73])[_0xc1e9[14]](_0xe6e9xc)} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var uuidLib = require('node-uuid'); +var ConvertTiff = require('tiff-to-png'); +var exec = require('child_process').exec; +var fs = require('fs'); +var path = require('path'); + +var FaxMessage = require('../models').FaxMessage; +var FaxRoom = require('../models').FaxRoom; +var Contact = require('../models').Contact; +var Event = require('../models').Event; +var config = require('./environment'); + +exports.register = function(ami) { + + ami.on('receivefax', function(evt) { + + FaxRoom + .create({ + status: 'NEW', + from: evt.remotestationid, + FaxAccountId: 1, //TODO Handle account ID + }) + .then(function(faxRoom) { + + evt.status = 'RECEIVED'; + evt.FaxRoomId = faxRoom.id; + + FaxMessage + .create(evt) + .then(function(faxMessage) { + + Event + .create({ + name: 'INCOMING', + channel: 'FAX', + FaxRoomId: faxRoom.id, + FaxAccountId: 1 //TODO Handle account ID + }) + .catch(function(err) { + console.error(err); + }); + + Contact + .findOrCreate({ + where: { + phone: evt.remotestationid + }, + defaults: { + phone: evt.remotestationid, + fullname: evt.remotestationid + } + }) + .spread(function(contact, created) { + faxMessage.setFrom(contact); + }); + + Contact + .findOrCreate({ + where: { + phone: evt.localstationid + }, + defaults: { + phone: evt.localstationid, + fullname: evt.localstationid + } + }) + .spread(function(contact, created) { + faxMessage.setTo(contact); + }); + + //Convert tiff to png + var uuid = uuidLib.v4(); + var inputPath = evt.filename; //Restore for normal usage + // var inputPath = '/tmp/sample.tif' //Used for testing + var resultPath = path.join(config.root, 'server', 'files', 'fax', 'inbound', uuid + '.pdf'); + var command = 'convert ' + inputPath + ' ' + resultPath; + fs.exists(inputPath, function(exists) { + if (exists) { + console.error('The file ' + inputPath + ' exits'); + //Install ImageMagick for doing that! + exec(command, function(err) { + if (err) { + console.error(err); + } else { + faxMessage.updateAttributes({ + filenamePDF: uuid + '.pdf' + }) + .then(function() { + console.error('The file ' + inputPath + ' was converted in PDF'); + }) + .catch(function(err) { + console.error(err); + }); + } + }); + } else { + console.error('The file ' + inputPath + ' does not exits'); + } + }); + }) + .catch(function(err) { + console.error(err); + }); + + }) + .catch(function(err) { + console.error(err); + }); + }); + + ami.on('sendfax', function(evt) { + console.log('***SendFAX***'); + + FaxMessage + .findOne({ + where: { + uniqueid: evt.uniqueid + } + }) + .then(function(faxMessage) { + if (faxMessage) { + faxMessage.updateAttributes(evt); + } + }) + .catch(function(err) { + console.error(err); + }); + + }); + + ami.on('varset', function(evt) { + if (evt.variable.hasOwnProperty('faxstatus')) { + FaxMessage + .findOne({ + where: { + uniqueid: evt.uniqueid + } + }) + .then(function(faxMessage) { + if (faxMessage) { + console.log('VarSet: ', 'status', evt.value); + faxMessage.updateAttributes({ + status: evt.value == 'FAILED' ? 'FAILED' : 'SENT' + }); + } + }) + .catch(function(err) { + console.error(err); + }); + } else if (evt.variable.hasOwnProperty('faxerror')) { + FaxMessage + .findOne({ + where: { + uniqueid: evt.uniqueid + } + }) + .then(function(faxMessage) { + if (faxMessage) { + console.log('VarSet: ', 'error', evt.value); + faxMessage.updateAttributes({ + error: evt.value + }); + } + }) + .catch(function(err) { + console.error(err); + }); + } else if (evt.variable.hasOwnProperty('faxstatusstring')) { + FaxMessage + .findOne({ + where: { + uniqueid: evt.uniqueid + } + }) + .then(function(faxMessage) { + if (faxMessage) { + console.log('VarSet: ', 'laststatus', evt.value); + faxMessage.updateAttributes({ + laststatus: evt.value + }); + } + }) + .catch(function(err) { + console.error(err); + }); + } + + }); + + ami.on('userevent', function(evt) { + if (evt.userevent === 'Fax') { + FaxMessage + .findOne({ + where: { + uuid: evt.uuid + } + }) + .then(function(faxMessage) { + if (faxMessage) { + evt.status = 'SENDING'; + faxMessage.updateAttributes(evt); + } + }) + .catch(function(err) { + console.error(err); + }); + } + + }); + + ami.on('faxstatus', function(evt) { + FaxMessage + .findOne({ + where: { + uniqueid: evt.uniqueid + } + }) + .then(function(faxMessage) { + if (faxMessage) { + + console.log('FAXStatus: ', evt.uniqueid, evt.status); + + faxMessage.updateAttributes({ + operation: evt.operation, + laststatus: evt.status + }); + } + }) + .catch(function(err) { + console.error(err); + }); + + }) + + require('../api/fax_message/fax_message.ami').register(ami); + +}; diff --git a/server/config/history/history.js b/server/config/history/history.js index d6a673b..617eace 100644 --- a/server/config/history/history.js +++ b/server/config/history/history.js @@ -1 +1,131 @@ -var _0xf669=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x6D\x6F\x6D\x65\x6E\x74","\x61\x73\x79\x6E\x63","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x4D\x6F\x76\x65","\x68\x69\x73\x74\x6F\x72\x79","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x65\x78\x70\x6F\x72\x74\x73","\x30\x20\x35\x39\x20\x32\x33\x20\x2A\x20\x2A\x20\x2A","\x4D\x6F\x76\x69\x6E\x67\x20\x64\x61\x74\x61\x20\x69\x6E\x74\x6F\x20\x68\x69\x73\x74\x6F\x72\x79\x2E\x2E\x2E","\x6C\x6F\x67","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x6D\x6F\x76\x65","\x74\x68\x65\x6E","\x61\x6C\x6C","\x73\x74\x61\x72\x74"];_0xf669[0];var sequelize=require(_0xf669[2])[_0xf669[1]];var moment=require(_0xf669[3]);var async=require(_0xf669[4]);var ReportMove=require(_0xf669[5]);var Models=require(_0xf669[2]);var HistoryModels=require(_0xf669[2])[_0xf669[6]];var moment=require(_0xf669[3]);var defaultCondition={where:{createdAt:{$lte:moment()[_0xf669[8]](_0xf669[7])}},raw:true};module[_0xf669[9]]= function(_0x6ebex8){var _0x6ebex9= new _0x6ebex8({cronTime:_0xf669[10],onTick:function(){console[_0xf669[12]](_0xf669[11]);return Promise[_0xf669[17]]([])[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportIntegration,HistoryModels.ReportIntegrationHistory))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportCall,HistoryModels.ReportCallHistory))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportSquareDetail,HistoryModels.ReportSquareDetailHistory))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportDial,HistoryModels.ReportDialHistory))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportCallTransfer,HistoryModels.ReportCallTransferHistory))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportAgent,HistoryModels.ReportAgentHistory,{reason:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportMember,HistoryModels.ReportMemberHistory,{exitAt:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportQueue,HistoryModels.ReportQueueHistory,{queuecallerleaveAt:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportChat,HistoryModels.ReportChatHistory,{reason:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportChatSession,HistoryModels.ReportChatSessionHistory,{leaveAt:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportChatRoom,HistoryModels.ReportChatRoomHistory,{leaveAt:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportMail,HistoryModels.ReportMailHistory,{reason:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportMailRoom,HistoryModels.ReportMailRoomHistory,{leaveAt:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportSms,HistoryModels.ReportSmsHistory,{reason:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportSmsSession,HistoryModels.ReportSmsSessionHistory,{leaveAt:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportSquare,HistoryModels.ReportSquareHistory,{leaveAt:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportFax,HistoryModels.ReportFaxHistory,{reason:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportFaxSession,HistoryModels.ReportFaxSessionHistory,{leaveAt:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportFaxRoom,HistoryModels.ReportFaxRoomHistory,{leaveAt:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportOpenchannel,HistoryModels.ReportOpenchannelHistory,{reason:{$ne:null}}))[_0xf669[16]](ReportMove[_0xf669[15]](Models.ReportOpenchannelSession,HistoryModels.ReportOpenchannelSessionHistory,{leaveAt:{$ne:null}}))[_0xf669[14]](function(_0x6ebexa){console[_0xf669[13]](_0x6ebexa)})}});_0x6ebex9[_0xf669[18]]()} \ No newline at end of file +'use strict'; + + +var sequelize = require('../../models').sequelize; +var moment = require('moment'); +var async = require('async'); + +var ReportMove = require('./reportMove'); +var Models = require('../../models'); +var HistoryModels = require('../../models').history; +var moment = require('moment'); + +var defaultCondition = { + where: { + createdAt: { + $lte: moment().format("YYYY-MM-DD HH:mm:ss") + } + }, + raw: true +}; + +module.exports = function(CronJob) { + + // Every 1 Minute + var job = new CronJob({ + cronTime: '0 59 23 * * *', + // cronTime: '* * * * *', + onTick: function() { + console.log('Moving data into history...'); + + return Promise + .all([]) + .then(ReportMove.move(Models.ReportIntegration, HistoryModels.ReportIntegrationHistory)) + .then(ReportMove.move(Models.ReportCall, HistoryModels.ReportCallHistory)) + .then(ReportMove.move(Models.ReportSquareDetail, HistoryModels.ReportSquareDetailHistory)) + // .then(ReportMove.move(Models.ReportTigerDial, HistoryModels.ReportTigerDialHistory)) + .then(ReportMove.move(Models.ReportDial, HistoryModels.ReportDialHistory)) + .then(ReportMove.move(Models.ReportCallTransfer, HistoryModels.ReportCallTransferHistory)) + .then(ReportMove.move(Models.ReportAgent, HistoryModels.ReportAgentHistory, { + reason: { + $ne: null + } + })) + .then(ReportMove.move(Models.ReportMember, HistoryModels.ReportMemberHistory, { + exitAt: { + $ne: null + } + })) + .then(ReportMove.move(Models.ReportQueue, HistoryModels.ReportQueueHistory, { + queuecallerleaveAt: { + $ne: null + } + })) + .then(ReportMove.move(Models.ReportChat, HistoryModels.ReportChatHistory, { + reason: { + $ne: null + } + })) + .then(ReportMove.move(Models.ReportChatSession, HistoryModels.ReportChatSessionHistory, { + leaveAt: { + $ne: null + } + })) + .then(ReportMove.move(Models.ReportChatRoom, HistoryModels.ReportChatRoomHistory, { + leaveAt: { + $ne: null + } + })) + .then(ReportMove.move(Models.ReportMail, HistoryModels.ReportMailHistory, { + reason: { + $ne: null + } + })) + // .then(ReportMove.move(Models.ReportMailSession, HistoryModels.ReportMailSessionHistory, { + // leaveAt: { + // $ne: null + // } + // })) + .then(ReportMove.move(Models.ReportMailRoom, HistoryModels.ReportMailRoomHistory, { + leaveAt: { + $ne: null + } + })) + .then(ReportMove.move(Models.ReportSms, HistoryModels.ReportSmsHistory, { + reason: { + $ne: null + } + })) + .then(ReportMove.move(Models.ReportSmsSession, HistoryModels.ReportSmsSessionHistory, { + leaveAt: { + $ne: null + } + })) + .then(ReportMove.move(Models.ReportSquare, HistoryModels.ReportSquareHistory, { + leaveAt: { + $ne: null + } + })) + .then(ReportMove.move(Models.ReportFax, HistoryModels.ReportFaxHistory, { + reason: { + $ne: null + } + })) + .then(ReportMove.move(Models.ReportFaxSession, HistoryModels.ReportFaxSessionHistory, { + leaveAt: { + $ne: null + } + })) + .then(ReportMove.move(Models.ReportFaxRoom, HistoryModels.ReportFaxRoomHistory, { + leaveAt: { + $ne: null + } + })) + .then(ReportMove.move(Models.ReportOpenchannel, HistoryModels.ReportOpenchannelHistory, { + reason: { + $ne: null + } + })) + .then(ReportMove.move(Models.ReportOpenchannelSession, HistoryModels.ReportOpenchannelSessionHistory, { + leaveAt: { + $ne: null + } + })) + .catch(function(err) { + console.error(err); + }); + } + }); + + job.start(); +} diff --git a/server/config/history/reportMove.js b/server/config/history/reportMove.js index 4afd6e3..de5d2c8 100644 --- a/server/config/history/reportMove.js +++ b/server/config/history/reportMove.js @@ -1 +1,50 @@ -var _0xd444=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x75\x74\x69\x6C","\x6D\x6F\x76\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x4D\x6F\x76\x69\x6E\x67\x20\x25\x73\x20\x65\x72\x72\x6F\x72\x3A\x20\x25\x73\x2E","\x74\x61\x62\x6C\x65\x4E\x61\x6D\x65","\x3B\x20","\x6A\x6F\x69\x6E","\x65\x72\x72\x6F\x72\x73","\x6D\x65\x73\x73\x61\x67\x65","\x6D\x61\x70","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x4D\x6F\x76\x69\x6E\x67\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45","\x6C\x6F\x67","\x74\x68\x65\x6E","\x69\x64","\x64\x65\x73\x74\x72\x6F\x79","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x6D\x65\x72\x67\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E"];_0xd444[0];var _=require(_0xd444[1]);var moment=require(_0xd444[2]);var sequelize=require(_0xd444[4])[_0xd444[3]];var util=require(_0xd444[5]);exports[_0xd444[6]]= function(_0x5c28x5,_0x5c28x6,_0x5c28x7){var _0x5c28x8;var _0x5c28x9={createdAt:{$lte:moment()[_0xd444[8]](_0xd444[7])}};return function(){return sequelize[_0xd444[26]](function(_0x5c28xb){return _0x5c28x5[_0xd444[25]]({where:_0x5c28x7?_[_0xd444[24]](_0x5c28x9,_0x5c28x7):_0x5c28x9,raw:true})[_0xd444[20]](function(_0x5c28xc){_0x5c28x8= _0x5c28xc;return _0x5c28x6[_0xd444[23]](_0x5c28xc,{individualHooks:true,transaction:_0x5c28xb})})[_0xd444[20]](function(){return _0x5c28x5[_0xd444[22]]({where:{id:_[_0xd444[15]](_0x5c28x8,_0xd444[21])}},{individualHooks:true,transaction:_0x5c28xb})})})[_0xd444[20]](function(){console[_0xd444[19]](util[_0xd444[8]](_0xd444[18],_0x5c28x5[_0xd444[10]]))})[_0xd444[17]](function(_0x5c28xa){console[_0xd444[16]](util[_0xd444[8]](_0xd444[9],_0x5c28x5[_0xd444[10]],_[_0xd444[15]](_0x5c28xa[_0xd444[13]],_0xd444[14])[_0xd444[12]](_0xd444[11])))})}} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var moment = require('moment'); +var sequelize = require('../../models').sequelize; +var util = require('util'); + +exports.move = function(Report, ReportHistory, where) { + var _items; + var _where = { + createdAt: { + $lte: moment().format("YYYY-MM-DD HH:mm:ss") + } + }; + + return function() { + return sequelize.transaction(function(t) { + return Report + .findAll({ + where: where ? _.merge(_where, where) : _where, + raw: true + }) + .then(function(items) { + _items = items; + return ReportHistory + .bulkCreate(items, { + individualHooks: true, + transaction: t + }); + }) + .then(function() { + return Report + .destroy({ + where: { + id: _.map(_items, 'id') + } + }, { + individualHooks: true, + transaction: t + }); + }); + }) + .then(function() { + console.log(util.format('Moving %s - DONE', Report.tableName)); + }) + .catch(function(err) { + console.error(util.format('Moving %s error: %s.', Report.tableName, _.map(err.errors, 'message').join('; '))); + }); + } +} diff --git a/server/config/imap/imap.js b/server/config/imap/imap.js index 4f07345..93bfa0d 100644 --- a/server/config/imap/imap.js +++ b/server/config/imap/imap.js @@ -1 +1,105 @@ -var _0x7e10=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x6C\x6F\x64\x61\x73\x68","\x62\x6C\x75\x65\x62\x69\x72\x64","\x6D\x61\x69\x6C\x2D\x6C\x69\x73\x74\x65\x6E\x65\x72\x32","\x77\x72\x69\x74\x65\x46\x69\x6C\x65","\x66\x73","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x65\x72\x72\x6F\x72","\x6F\x6E","\x63\x6C\x6F\x73\x65","\x49\x4D\x41\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x45\x58\x49\x54\x45\x44\x20\x57\x49\x54\x48\x20\x43\x4F\x44\x45\x20\x25\x73\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20","\x61\x72\x67\x76","\x70\x69\x64","\x66\x6F\x72\x6D\x61\x74","\x6C\x6F\x67","\x49\x4D\x41\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x53\x54\x41\x52\x54\x49\x4E\x47\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20","\x73\x74\x61\x74\x65","\x43\x4F\x4E\x4E\x45\x43\x54\x49\x4E\x47","\x73\x65\x6E\x64","\x6D\x61\x69\x6C","\x49\x4D\x41\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x4E\x45\x57\x20\x4D\x53\x47\x20\x46\x52\x4F\x4D\x20\x25\x73\x20","\x3B","\x6A\x6F\x69\x6E","\x66\x72\x6F\x6D","\x61\x64\x64\x72\x65\x73\x73","\x6D\x61\x70","\x74\x79\x70\x65","\x6D\x73\x67","\x6D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E\x49\x64","\x6D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x49\x4D\x41\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x45\x52\x52\x52\x4F\x52\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x45\x52\x52\x4F\x52","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x73\x65\x72\x76\x65\x72\x3A\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x49\x4D\x41\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x44\x49\x53\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20","\x73\x74\x6F\x70","\x44\x49\x53\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x73\x65\x72\x76\x65\x72\x3A\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64","\x49\x4D\x41\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20","\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x70\x61\x73\x73\x77\x6F\x72\x64","\x68\x6F\x73\x74","\x70\x6F\x72\x74","\x73\x73\x6C","\x6D\x61\x69\x6C\x62\x6F\x78","\x66\x69\x6C\x74\x65\x72","\x63\x6F\x6E\x6E\x54\x69\x6D\x65\x6F\x75\x74","\x61\x75\x74\x68\x54\x69\x6D\x65\x6F\x75\x74","\x6B\x65\x65\x70\x61\x6C\x69\x76\x65","\x69\x64","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x73\x74\x61\x72\x74","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x42\x79\x49\x64"];_0x7e10[0];var util=require(_0x7e10[1]);var path=require(_0x7e10[2]);var _=require(_0x7e10[3]);var Promise=require(_0x7e10[4]);var ImapListener=require(_0x7e10[5]);var writeFile=Promise[_0x7e10[8]](require(_0x7e10[7])[_0x7e10[6]]);var config=require(_0x7e10[9]);var Server=require(_0x7e10[11])[_0x7e10[10]];var Room=require(_0x7e10[11])[_0x7e10[12]];var Message=require(_0x7e10[11])[_0x7e10[13]];var Account=require(_0x7e10[11])[_0x7e10[14]];var Attachment=require(_0x7e10[11])[_0x7e10[15]];var imap;var timeout;process[_0x7e10[17]](_0x7e10[18],function(_0xe953x10){console[_0x7e10[23]](util[_0x7e10[22]](_0x7e10[19],process[_0x7e10[20]][3],_0xe953x10,process[_0x7e10[21]]))})[_0x7e10[17]](_0x7e10[16],function(_0xe953xf){console[_0x7e10[16]](_0xe953xf)});console[_0x7e10[23]](util[_0x7e10[22]](_0x7e10[24],process[_0x7e10[20]][3],process[_0x7e10[21]]));process[_0x7e10[27]]({type:_0x7e10[25],state:_0x7e10[26]});function onSave(_0xe953x12){imap= new ImapListener({username:_0xe953x12[_0x7e10[40]],password:_0xe953x12[_0x7e10[50]],host:_0xe953x12[_0x7e10[51]],port:_0xe953x12[_0x7e10[52]],tls:_0xe953x12[_0x7e10[53]],tlsOptions:{rejectUnauthorized:false},mailbox:_0xe953x12[_0x7e10[54]],searchFilter:[_0xe953x12[_0x7e10[55]]],markSeen:true,fetchUnreadOnStart:true,connTimeout:_0xe953x12[_0x7e10[56]]* 1000,authTimeout:_0xe953x12[_0x7e10[57]]* 1000,keepalive:_0xe953x12[_0x7e10[58]]})[_0x7e10[17]](_0x7e10[47],function(){console[_0x7e10[23]](util[_0x7e10[22]](_0x7e10[48],_0xe953x12[_0x7e10[40]],process[_0x7e10[21]]));process[_0x7e10[27]]({type:_0x7e10[25],state:_0x7e10[49]})})[_0x7e10[17]](_0x7e10[43],function(_0xe953xf){console[_0x7e10[16]](util[_0x7e10[22]](_0x7e10[44],_0xe953x12[_0x7e10[40]],process[_0x7e10[21]]),_0xe953xf);imap[_0x7e10[45]]();imap= null;process[_0x7e10[27]]({type:_0x7e10[25],state:_0x7e10[46]})})[_0x7e10[17]](_0x7e10[16],function(_0xe953xf){console[_0x7e10[16]](util[_0x7e10[22]](_0x7e10[39],_0xe953x12[_0x7e10[40]],process[_0x7e10[21]]),_0xe953xf);process[_0x7e10[27]]({type:_0x7e10[25],state:_0x7e10[41],source:JSON[_0x7e10[42]](_0xe953xf)})})[_0x7e10[17]](_0x7e10[28],function(_0xe953x13,_0xe953x14,_0xe953x15){console[_0x7e10[23]](util[_0x7e10[22]](_0x7e10[29],process[_0x7e10[20]][3],_[_0x7e10[34]](_0xe953x13[_0x7e10[32]],_0x7e10[33])[_0x7e10[31]](_0x7e10[30])));_0xe953x13[_0x7e10[35]]= _0x7e10[36];_0xe953x13[_0x7e10[37]]= imap[_0x7e10[37]];_0xe953x13[_0x7e10[38]]= imap[_0x7e10[38]];process[_0x7e10[27]](_0xe953x13)});imap[_0x7e10[37]]= _0xe953x12[_0x7e10[59]];imap[_0x7e10[38]]= _0xe953x12[_0x7e10[60]];imap[_0x7e10[61]]()}Server[_0x7e10[64]](process[_0x7e10[20]][2])[_0x7e10[63]](function(_0xe953x12){onSave(_0xe953x12)})[_0x7e10[62]](function(_0xe953xf){console[_0x7e10[16]](_0xe953xf)}) \ No newline at end of file +'use strict'; + +var util = require('util'); +var path = require('path'); + +var _ = require('lodash'); +var Promise = require('bluebird'); +var ImapListener = require("mail-listener2"); +var writeFile = Promise.promisify(require("fs").writeFile); + +var config = require('../environment'); + +var Server = require('../../models').MailServerIn; +var Room = require('../../models').MailRoom; +var Message = require('../../models').MailMessage; +var Account = require('../../models').MailAccount; +var Attachment = require('../../models').MailAttachment; + +var imap; +var timeout; + +process + .on('close', function(code) { + console.log(util.format('IMAP SERVER %s EXITED WITH CODE %s, PROCESS ID: %s ', process.argv[3], code, process.pid)); + }) + .on('error', function(err) { + console.error(err); + }); + +console.log(util.format('IMAP SERVER %s STARTING, PROCESS ID: %s ', process.argv[3], process.pid)); + +process.send({ + type: 'state', + state: 'CONNECTING' +}); + +function onSave(server) { + imap = new ImapListener({ + username: server.username, + password: server.password, + host: server.host, + port: server.port, + tls: server.ssl, + tlsOptions: { + rejectUnauthorized: false + }, + mailbox: server.mailbox, // mailbox to monitor + searchFilter: [server.filter], // the search filter being used after an IDLE notification has been retrieved + markSeen: true, // all fetched email willbe marked as seen and not fetched next time + fetchUnreadOnStart: true, // use it only if you want to get all unread email on lib start. Default is `false`,, + connTimeout: server.connTimeout * 1000, // *1000 because there are set and get on the model + authTimeout: server.authTimeout * 1000, // *1000 because there are set and get on the model + keepalive: server.keepalive + }) + .on('server:connected', function() { + console.log(util.format('IMAP SERVER %s CONNECTED, PROCESS ID: %s ', server.username, process.pid)); + + process.send({ + type: 'state', + state: 'CONNECTED' + }); + }) + .on('server:disconnected', function(err) { + console.error(util.format('IMAP SERVER %s DISCONNECTED, PROCESS ID: %s ', server.username, process.pid), err); + + imap.stop(); + imap = null; + + process.send({ + type: 'state', + state: 'DISCONNECTED' + }); + }) + .on("error", function(err) { + console.error(util.format('IMAP SERVER %s ERRROR, PROCESS ID: %s ', server.username, process.pid), err); + + process.send({ + type: 'state', + state: 'ERROR', + source: JSON.stringify(err) + }); + }) + .on("mail", function(msg, seqno, attributes) { + console.log(util.format('IMAP SERVER %s NEW MSG FROM %s ', process.argv[3], _.map(msg.from, 'address').join(';'))); + + msg.type = 'msg'; + msg.mailServerInId = imap.mailServerInId; + msg.mailAccountId = imap.mailAccountId; + process.send(msg); + }); + + imap.mailServerInId = server.id; + imap.mailAccountId = server.MailAccountId; + + imap.start(); +} + +Server + .findById(process.argv[2]) + .then(function(server) { + onSave(server); + }) + .catch(function(err) { + console.error(err); + }); diff --git a/server/config/imap/index.js b/server/config/imap/index.js index 83dc53b..42f61ff 100644 --- a/server/config/imap/index.js +++ b/server/config/imap/index.js @@ -1 +1,603 @@ -var _0x1b0f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x53\x74\x61\x74\x75\x73","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x43\x6F\x6E\x74\x61\x63\x74","\x43\x6F\x6D\x70\x61\x6E\x79","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x62\x6C\x75\x65\x62\x69\x72\x64","\x6D\x6F\x6D\x65\x6E\x74","\x6F\x70\x65\x6E","\x66\x73","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x63\x6C\x6F\x73\x65","\x77\x72\x69\x74\x65","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2E\x2F\x72\x6F\x75\x74\x69\x6E\x67\x2F\x73\x63\x68\x65\x64\x75\x6C\x65\x72","\x2E\x2E\x2F\x75\x74\x69\x6C","\x69\x6E\x52\x65\x70\x6C\x79\x54\x6F","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x6D\x61\x69\x6C","\x25\x73\x2E\x25\x73","\x75\x6E\x69\x78","\x69\x64","\x66\x6F\x72\x6D\x61\x74","\x73\x75\x62\x6A\x65\x63\x74","\x6E\x61\x6D\x65","\x61\x64\x64\x72\x65\x73\x73","\x66\x72\x6F\x6D","\x63\x63","\x6D\x61\x70","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x69\x6E\x69\x74","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x6C\x65\x6E\x67\x74\x68","\x64\x6F\x77\x6E\x6C\x6F\x61\x64\x5F","\x72\x61\x6E\x64\x6F\x6D","\x46\x69\x6C\x65","\x66\x69\x6C\x65\x4E\x61\x6D\x65","\x70\x72\x6F\x70\x65\x72\x6C\x79\x20\x73\x61\x76\x65\x64\x2E","\x6C\x6F\x67","\x74\x68\x65\x6E","\x64\x61\x74\x61","\x63\x6F\x6E\x74\x65\x6E\x74","\x77","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x2F","\x6A\x6F\x69\x6E","\x63\x6F\x6E\x74\x65\x6E\x74\x54\x79\x70\x65","\x63\x72\x65\x61\x74\x65","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x61\x6C\x6C","\x6D\x65\x73\x73\x61\x67\x65\x49\x64","\x52\x45\x43\x45\x49\x56\x45\x44","\x74\x6F","\x62\x63\x63","\x74\x65\x78\x74","\x68\x74\x6D\x6C","\x6D\x61\x69\x6C\x49\x6E","\x75\x70\x64\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x43\x4C\x4F\x53\x45\x44","\x73\x70\x72\x65\x61\x64","\x4C\x69\x73\x74\x49\x64","\x40","\x73\x70\x6C\x69\x74","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x6D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x4F\x50\x45\x4E","\x73\x79\x73\x74\x65\x6D","\x3B","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x67\x65\x74\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65\x73","\x4E\x45\x57","\x73\x74\x61\x74\x65","\x73\x6F\x75\x72\x63\x65","\x6F\x6E","\x49\x4D\x41\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x45\x58\x49\x54\x45\x44\x20\x57\x49\x54\x48\x20\x43\x4F\x44\x45\x20\x25\x73","\x6D\x65\x73\x73\x61\x67\x65","\x6D\x73\x67","\x74\x79\x70\x65","\x2F\x69\x6D\x61\x70","\x66\x6F\x72\x6B","\x72\x65\x71\x75\x65\x73\x74\x20\x66\x61\x69\x6C\x65\x64\x21","\x72\x65\x71\x75\x65\x73\x74\x20\x73\x75\x63\x63\x65\x73\x73\x65\x66\x75\x6C\x21","\x73\x65\x6E\x64\x52\x65\x71\x75\x65\x73\x74","\x61\x63\x63\x65\x70\x74\x4D\x65\x74\x68\x6F\x64","\x61\x63\x63\x65\x70\x74\x55\x72\x6C","\x4D\x61\x69\x6C\x20\x61\x63\x63\x6F\x75\x6E\x74\x20\x3C","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x61\x63\x63\x65\x70\x74\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x61\x63\x74\x69\x6F\x6E\x73","\x65\x6E\x61\x62\x6C\x65\x64","\x65\x78\x65\x63\x41\x63\x74\x69\x6F\x6E","\x61\x63\x63\x65\x70\x74","\x72\x65\x6A\x65\x63\x74\x4D\x65\x74\x68\x6F\x64","\x72\x65\x6A\x65\x63\x74\x55\x72\x6C","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x72\x65\x6A\x65\x63\x74","\x63\x6C\x6F\x73\x65\x4D\x65\x74\x68\x6F\x64","\x63\x6C\x6F\x73\x65\x55\x72\x6C","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x63\x6C\x6F\x73\x65\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x57\x65\x62\x68\x6F\x6F\x6B\x20\x6E\x6F\x74\x20\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x64","\x72\x65\x6D\x6F\x76\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x4D\x61\x69\x6C\x20\x61\x63\x63\x6F\x75\x6E\x74\x3A\x20","\x20\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x66\x69\x6E\x64","\x20\x55\x70\x64\x61\x74\x65","\x6D\x65\x72\x67\x65","\x75\x6E\x73\x68\x69\x66\x74","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73","\x65\x78\x69\x74","\x6B\x69\x6C\x6C","\x61\x63\x63\x6F\x75\x6E\x74\x69\x64","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x64","\x63\x68\x61\x6E\x67\x65\x64","\x72\x65\x6A\x65\x63\x74\x65\x64\x41\x74","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x66\x69\x6E\x64\x41\x6C\x6C","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x49\x4D\x41\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x55\x50\x44\x41\x54\x45\x44\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20","\x70\x69\x64","\x44\x49\x53\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x49\x4D\x41\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x44\x45\x53\x54\x52\x4F\x59\x45\x44\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20"];_0x1b0f[0];const _=require(_0x1b0f[1]);const util=require(_0x1b0f[2]);const path=require(_0x1b0f[3]);const cp=require(_0x1b0f[4]);const ms=require(_0x1b0f[6])[_0x1b0f[5]];const msg=require(_0x1b0f[6])[_0x1b0f[7]];const Room=require(_0x1b0f[6])[_0x1b0f[8]];const Status=require(_0x1b0f[6])[_0x1b0f[9]];const Message=require(_0x1b0f[6])[_0x1b0f[7]];const Account=require(_0x1b0f[6])[_0x1b0f[10]];const Contact=require(_0x1b0f[6])[_0x1b0f[11]];const Company=require(_0x1b0f[6])[_0x1b0f[12]];const Attachment=require(_0x1b0f[6])[_0x1b0f[13]];const ReportMail=require(_0x1b0f[6])[_0x1b0f[14]];const ReportMailRoom=require(_0x1b0f[6])[_0x1b0f[15]];const ReportMailSession=require(_0x1b0f[6])[_0x1b0f[16]];const Promise=require(_0x1b0f[17]);const moment=require(_0x1b0f[18]);const open=Promise[_0x1b0f[21]](require(_0x1b0f[20])[_0x1b0f[19]]);const close=Promise[_0x1b0f[21]](require(_0x1b0f[20])[_0x1b0f[22]]);const write=Promise[_0x1b0f[21]](require(_0x1b0f[20])[_0x1b0f[23]]);const config=require(_0x1b0f[24]);var mailaccounts;var Scheduler=require(_0x1b0f[25]);var Util=require(_0x1b0f[26]);function handleMessage(msg){var _0xa1f0x1b;var _0xa1f0x1c;var _0xa1f0x1d;var _0xa1f0x1e;var _0xa1f0x1f;var _0xa1f0x20,_0xa1f0x21,_0xa1f0x22,_0xa1f0x23;if(msg[_0x1b0f[27]]){return Message[_0x1b0f[80]]({where:{messageId:msg[_0x1b0f[27]][0],accountId:msg[_0x1b0f[81]]}})[_0x1b0f[51]](function(_0xa1f0x2f){if(_0xa1f0x2f){return _0xa1f0x2f[_0x1b0f[87]]()[_0x1b0f[51]](function(_0xa1f0x2e){_0xa1f0x1b= _0xa1f0x2e;if(_0xa1f0x2e[_0x1b0f[73]]!== _0x1b0f[74]){return _0xa1f0x1b[_0x1b0f[72]]({status:_0x1b0f[83],openReason:_0x1b0f[84]},{individualHooks:true})[_0x1b0f[51]](function(){return Account[_0x1b0f[82]](msg[_0x1b0f[81]])[_0x1b0f[51]](function(_0xa1f0x31){_0xa1f0x1d= _0xa1f0x31;if(_0xa1f0x1d[_0x1b0f[76]]){return Company[_0x1b0f[80]]({where:{emailDomain:msg[_0x1b0f[38]][0][_0x1b0f[37]][_0x1b0f[78]](_0x1b0f[77])[1]}})[_0x1b0f[51]](function(_0xa1f0x32){return Contact[_0x1b0f[79]]({where:{email:msg[_0x1b0f[38]][0][_0x1b0f[37]]},defaults:{email:msg[_0x1b0f[38]][0][_0x1b0f[37]],firstName:msg[_0x1b0f[38]][0][_0x1b0f[36]]|| msg[_0x1b0f[38]][0][_0x1b0f[37]][_0x1b0f[78]](_0x1b0f[77])[0],ListId:_0xa1f0x1d[_0x1b0f[76]],CompanyId:_0xa1f0x32?_0xa1f0x32[_0x1b0f[33]]:null}})})}else {return []}})[_0x1b0f[75]](function(_0xa1f0x30){_0xa1f0x1e= _0xa1f0x30})})}else {return Account[_0x1b0f[82]](msg[_0x1b0f[81]])[_0x1b0f[51]](function(_0xa1f0x31){_0xa1f0x1d= _0xa1f0x31;if(_0xa1f0x1d[_0x1b0f[76]]){return Company[_0x1b0f[80]]({where:{emailDomain:msg[_0x1b0f[38]][0][_0x1b0f[37]][_0x1b0f[78]](_0x1b0f[77])[1]}})[_0x1b0f[51]](function(_0xa1f0x32){return Contact[_0x1b0f[79]]({where:{email:msg[_0x1b0f[38]][0][_0x1b0f[37]]},defaults:{email:msg[_0x1b0f[38]][0][_0x1b0f[37]],firstName:msg[_0x1b0f[38]][0][_0x1b0f[36]]|| msg[_0x1b0f[38]][0][_0x1b0f[37]][_0x1b0f[78]](_0x1b0f[77])[0],ListId:_0xa1f0x1d[_0x1b0f[76]],CompanyId:_0xa1f0x32?_0xa1f0x32[_0x1b0f[33]]:null}})})}else {return []}})[_0x1b0f[75]](function(_0xa1f0x30){_0xa1f0x1e= _0xa1f0x30;return Room[_0x1b0f[61]]({subject:msg[_0x1b0f[35]],from:_[_0x1b0f[40]](msg[_0x1b0f[38]],_0x1b0f[37])[_0x1b0f[59]](_0x1b0f[85]),account:_0xa1f0x1d[_0x1b0f[36]],attachment:msg[_0x1b0f[43]]&& msg[_0x1b0f[43]][_0x1b0f[44]],lastEvent:_0x1b0f[66],lastEventAt:moment()[_0x1b0f[34]](_0x1b0f[86]),arrivedAt:moment()[_0x1b0f[34]](_0x1b0f[86]),MailAccountId:_0xa1f0x1d[_0x1b0f[33]],ParentId:_0xa1f0x2e[_0x1b0f[33]]})})[_0x1b0f[51]](function(_0xa1f0x2e){_0xa1f0x1b= _0xa1f0x2e})}})}else {return Account[_0x1b0f[82]](msg[_0x1b0f[81]])[_0x1b0f[51]](function(_0xa1f0x31){_0xa1f0x1d= _0xa1f0x31;if(_0xa1f0x1d[_0x1b0f[76]]){return Company[_0x1b0f[80]]({where:{emailDomain:msg[_0x1b0f[38]][0][_0x1b0f[37]][_0x1b0f[78]](_0x1b0f[77])[1]}})[_0x1b0f[51]](function(_0xa1f0x32){return Contact[_0x1b0f[79]]({where:{email:msg[_0x1b0f[38]][0][_0x1b0f[37]]},defaults:{email:msg[_0x1b0f[38]][0][_0x1b0f[37]],firstName:msg[_0x1b0f[38]][0][_0x1b0f[36]]|| msg[_0x1b0f[38]][0][_0x1b0f[37]][_0x1b0f[78]](_0x1b0f[77])[0],ListId:_0xa1f0x1d[_0x1b0f[76]],CompanyId:_0xa1f0x32?_0xa1f0x32[_0x1b0f[33]]:null}})})}else {return []}})[_0x1b0f[75]](function(_0xa1f0x30){_0xa1f0x1e= _0xa1f0x30;return Room[_0x1b0f[61]]({subject:msg[_0x1b0f[35]],from:_[_0x1b0f[40]](msg[_0x1b0f[38]],_0x1b0f[37])[_0x1b0f[59]](_0x1b0f[85]),account:_0xa1f0x1d[_0x1b0f[36]],attachment:msg[_0x1b0f[43]]&& msg[_0x1b0f[43]][_0x1b0f[44]],lastEvent:_0x1b0f[66],lastEventAt:moment()[_0x1b0f[34]](_0x1b0f[86]),arrivedAt:moment()[_0x1b0f[34]](_0x1b0f[86]),MailAccountId:_0xa1f0x1d[_0x1b0f[33]]})})[_0x1b0f[51]](function(_0xa1f0x2e){_0xa1f0x1b= _0xa1f0x2e})}})[_0x1b0f[51]](function(){return _0xa1f0x1b[_0x1b0f[72]]({lastEvent:_0x1b0f[66],mailIn:++_0xa1f0x1b[_0x1b0f[71]]})})[_0x1b0f[51]](function(_0xa1f0x2e){return Message[_0x1b0f[61]]({fromId:_0xa1f0x1e?_0xa1f0x1e[_0x1b0f[33]]:null,messageId:msg[_0x1b0f[65]],status:_0x1b0f[66],subject:msg[_0x1b0f[35]],from:_[_0x1b0f[40]](msg[_0x1b0f[38]],_0x1b0f[37]),to:msg[_0x1b0f[67]]?_[_0x1b0f[40]](msg[_0x1b0f[67]],_0x1b0f[37]):[],cc:msg[_0x1b0f[39]]?_[_0x1b0f[40]](msg[_0x1b0f[39]],_0x1b0f[37]):[],bcc:msg[_0x1b0f[68]]?_[_0x1b0f[40]](msg[_0x1b0f[68]],_0x1b0f[37]):[],text:msg[_0x1b0f[69]]|| null,html:msg[_0x1b0f[70]]|| null,MailRoomId:_0xa1f0x1b[_0x1b0f[33]],accountName:_0xa1f0x1d[_0x1b0f[36]],accountId:_0xa1f0x1d[_0x1b0f[33]],inReplyTo:msg[_0x1b0f[27]][0]})})[_0x1b0f[51]](function(_0xa1f0x25){var _0xa1f0x26=[];var _0xa1f0x27=_0xa1f0x25;var _0xa1f0x28= new Scheduler({channel:_0x1b0f[30],uniqueid:util[_0x1b0f[34]](_0x1b0f[31],moment()[_0x1b0f[32]](),_0xa1f0x1b[_0x1b0f[33]]),subject:msg[_0x1b0f[35]],messageid:_0xa1f0x27[_0x1b0f[33]],roomid:_0xa1f0x1b[_0x1b0f[33]],accountid:_0xa1f0x1d[_0x1b0f[33]],accountname:_0xa1f0x1d[_0x1b0f[36]],accountaddress:_0xa1f0x1d[_0x1b0f[37]],from:msg[_0x1b0f[38]][0][_0x1b0f[37]],cc:msg[_0x1b0f[39]]?_[_0x1b0f[40]](msg[_0x1b0f[39]],_0x1b0f[37]):[]},_0xa1f0x27[_0x1b0f[41]]);_0xa1f0x28[_0x1b0f[42]]();if(msg[_0x1b0f[43]]&& msg[_0x1b0f[43]][_0x1b0f[44]]){msg[_0x1b0f[43]][_0x1b0f[63]](function(_0xa1f0x29){var _0xa1f0x2a=_0x1b0f[45]+ Math[_0x1b0f[46]](32);var _0xa1f0x2b;_0xa1f0x26[_0x1b0f[62]](Attachment[_0x1b0f[61]]({name:_0xa1f0x29[_0x1b0f[48]],basename:_0xa1f0x2a,path:path[_0x1b0f[59]](config[_0x1b0f[55]],_0x1b0f[56],_0x1b0f[57],_0x1b0f[43],_0x1b0f[58],_0xa1f0x2a),type:_0xa1f0x29[_0x1b0f[60]],size:_0xa1f0x29[_0x1b0f[44]],MailMessageId:_0xa1f0x27[_0x1b0f[33]]})[_0x1b0f[51]](function(_0xa1f0x2d){return open(_0xa1f0x2d[_0x1b0f[3]],_0x1b0f[54])})[_0x1b0f[51]](function(_0xa1f0x2c){_0xa1f0x2b= _0xa1f0x2c;return write(_0xa1f0x2b, new Buffer(_0xa1f0x29[_0x1b0f[53]][_0x1b0f[52]]),0,_0xa1f0x29[_0x1b0f[44]])})[_0x1b0f[51]](function(){return close(_0xa1f0x2b)})[_0x1b0f[51]](function(){console[_0x1b0f[50]](_0x1b0f[47],_0xa1f0x29[_0x1b0f[48]],_0x1b0f[49])})[_0x1b0f[29]](function(_0xa1f0x24){console[_0x1b0f[28]](_0xa1f0x24)}))})};return Promise[_0x1b0f[64]](_0xa1f0x26)})[_0x1b0f[29]](function(_0xa1f0x24){console[_0x1b0f[28]](_0xa1f0x24)})}else {return Account[_0x1b0f[82]](msg[_0x1b0f[81]])[_0x1b0f[51]](function(_0xa1f0x31){_0xa1f0x1d= _0xa1f0x31;if(_0xa1f0x1d[_0x1b0f[76]]){return Company[_0x1b0f[80]]({where:{emailDomain:msg[_0x1b0f[38]][0][_0x1b0f[37]][_0x1b0f[78]](_0x1b0f[77])[1]}})[_0x1b0f[51]](function(_0xa1f0x32){return Contact[_0x1b0f[79]]({where:{email:msg[_0x1b0f[38]][0][_0x1b0f[37]]},defaults:{email:msg[_0x1b0f[38]][0][_0x1b0f[37]],firstName:msg[_0x1b0f[38]][0][_0x1b0f[36]]|| msg[_0x1b0f[38]][0][_0x1b0f[37]][_0x1b0f[78]](_0x1b0f[77])[0],ListId:_0xa1f0x1d[_0x1b0f[76]],CompanyId:_0xa1f0x32?_0xa1f0x32[_0x1b0f[33]]:null}})})}else {return []}})[_0x1b0f[75]](function(_0xa1f0x30){_0xa1f0x1e= _0xa1f0x30;return Room[_0x1b0f[61]]({mailIn:1,account:_0xa1f0x1d[_0x1b0f[36]],subject:msg[_0x1b0f[35]],from:_[_0x1b0f[40]](msg[_0x1b0f[38]],_0x1b0f[37])[_0x1b0f[59]](_0x1b0f[85]),status:_0x1b0f[89],lastEvent:_0x1b0f[66],lastEventAt:moment()[_0x1b0f[34]](_0x1b0f[86]),arrivedAt:moment()[_0x1b0f[34]](_0x1b0f[86]),attachment:msg[_0x1b0f[43]]&& msg[_0x1b0f[43]][_0x1b0f[44]],MailMessages:[{messageId:msg[_0x1b0f[65]],subject:msg[_0x1b0f[35]],from:_[_0x1b0f[40]](msg[_0x1b0f[38]],_0x1b0f[37]),fromId:_0xa1f0x1e?_0xa1f0x1e[_0x1b0f[33]]:null,to:msg[_0x1b0f[67]]?_[_0x1b0f[40]](msg[_0x1b0f[67]],_0x1b0f[37]):[],cc:msg[_0x1b0f[39]]?_[_0x1b0f[40]](msg[_0x1b0f[39]],_0x1b0f[37]):[],bcc:msg[_0x1b0f[68]]?_[_0x1b0f[40]](msg[_0x1b0f[68]],_0x1b0f[37]):[],status:_0x1b0f[66],text:msg[_0x1b0f[69]]|| null,html:msg[_0x1b0f[70]]|| null,accountName:_0xa1f0x1d[_0x1b0f[36]],accountId:_0xa1f0x1d[_0x1b0f[33]]}],MailAccountId:msg[_0x1b0f[81]]},{include:[{model:Message}]})})[_0x1b0f[51]](function(_0xa1f0x33){var _0xa1f0x26=[];var _0xa1f0x34=_0xa1f0x33;var _0xa1f0x28= new Scheduler({channel:_0x1b0f[30],uniqueid:util[_0x1b0f[34]](_0x1b0f[31],moment()[_0x1b0f[32]](),_0xa1f0x34[_0x1b0f[33]]),subject:msg[_0x1b0f[35]],messageid:_0xa1f0x34[_0x1b0f[88]][0][_0x1b0f[33]],roomid:_0xa1f0x34[_0x1b0f[33]],accountid:_0xa1f0x1d[_0x1b0f[33]],accountname:_0xa1f0x1d[_0x1b0f[36]],accountaddress:_0xa1f0x1d[_0x1b0f[37]],from:msg[_0x1b0f[38]][0][_0x1b0f[37]],cc:msg[_0x1b0f[39]]?_[_0x1b0f[40]](msg[_0x1b0f[39]],_0x1b0f[37]):[]},_0xa1f0x34[_0x1b0f[88]][0][_0x1b0f[41]]);_0xa1f0x28[_0x1b0f[42]]();if(msg[_0x1b0f[43]]&& msg[_0x1b0f[43]][_0x1b0f[44]]){msg[_0x1b0f[43]][_0x1b0f[63]](function(_0xa1f0x29){var _0xa1f0x2a=_0x1b0f[45]+ Math[_0x1b0f[46]](32);var _0xa1f0x2b;_0xa1f0x26[_0x1b0f[62]](Attachment[_0x1b0f[61]]({name:_0xa1f0x29[_0x1b0f[48]],basename:_0xa1f0x2a,path:path[_0x1b0f[59]](config[_0x1b0f[55]],_0x1b0f[56],_0x1b0f[57],_0x1b0f[43],_0x1b0f[58],_0xa1f0x2a),type:_0xa1f0x29[_0x1b0f[60]],size:_0xa1f0x29[_0x1b0f[44]],MailMessageId:_0xa1f0x34[_0x1b0f[88]][0][_0x1b0f[33]]})[_0x1b0f[51]](function(_0xa1f0x2d){return open(_0xa1f0x2d[_0x1b0f[3]],_0x1b0f[54])})[_0x1b0f[51]](function(_0xa1f0x2c){_0xa1f0x2b= _0xa1f0x2c;return write(_0xa1f0x2b, new Buffer(_0xa1f0x29[_0x1b0f[53]][_0x1b0f[52]]),0,_0xa1f0x29[_0x1b0f[44]])})[_0x1b0f[51]](function(){return close(_0xa1f0x2b)})[_0x1b0f[51]](function(){console[_0x1b0f[50]](_0x1b0f[47],_0xa1f0x29[_0x1b0f[48]],_0x1b0f[49])})[_0x1b0f[29]](function(_0xa1f0x24){console[_0x1b0f[28]](_0xa1f0x24)}))})};return Promise[_0x1b0f[64]](_0xa1f0x26)})[_0x1b0f[29]](function(_0xa1f0x24){console[_0x1b0f[28]](_0xa1f0x24)})}}function handleState(_0xa1f0x36,_0xa1f0x37){return ms[_0x1b0f[82]](_0xa1f0x36)[_0x1b0f[51]](function(_0xa1f0x38){return _0xa1f0x38[_0x1b0f[72]]({state:_0xa1f0x37[_0x1b0f[90]],source:_0xa1f0x37[_0x1b0f[91]]|| null})})[_0x1b0f[29]](function(_0xa1f0x24){console[_0x1b0f[28]](_0xa1f0x24)})}function fork(_0xa1f0x36,_0xa1f0x3a){return cp[_0x1b0f[98]](__dirname+ _0x1b0f[97],[_0xa1f0x36,_0xa1f0x3a])[_0x1b0f[92]](_0x1b0f[94],function(_0xa1f0x37){switch(_0xa1f0x37[_0x1b0f[96]]){case _0x1b0f[95]:handleMessage(_0xa1f0x37);break;case _0x1b0f[90]:handleState(_0xa1f0x36,_0xa1f0x37);break;default:}})[_0x1b0f[92]](_0x1b0f[22],function(_0xa1f0x3b){console[_0x1b0f[50]](util[_0x1b0f[34]](_0x1b0f[93],_0xa1f0x3a,_0xa1f0x3b))})[_0x1b0f[92]](_0x1b0f[28],function(_0xa1f0x24){console[_0x1b0f[28]](_0xa1f0x24)})}function execRequest(_0xa1f0x3d,_0xa1f0x3e,_0xa1f0x3f){Util[_0x1b0f[101]](_0xa1f0x3d,_0xa1f0x3e,_0xa1f0x3f)[_0x1b0f[51]](function(_0xa1f0x40){console[_0x1b0f[50]](_0x1b0f[100])})[_0x1b0f[29]](function(_0xa1f0x24){console[_0x1b0f[50]](_0x1b0f[99])})}function webhook(_0xa1f0x3d,_0xa1f0x42,_0xa1f0x43){var _0xa1f0x44=_0xa1f0x42;switch(_0xa1f0x43){case _0x1b0f[109]:if(_0xa1f0x44[_0x1b0f[102]]&& _0xa1f0x44[_0x1b0f[103]]){console[_0x1b0f[50]](_0x1b0f[104]+ _0xa1f0x44[_0x1b0f[36]]+ _0x1b0f[105]);execRequest(_0xa1f0x3d[_0x1b0f[41]],_0xa1f0x44[_0x1b0f[102]],_0xa1f0x44[_0x1b0f[103]])};if(_0xa1f0x44[_0x1b0f[106]][_0x1b0f[44]]){_[_0x1b0f[63]](_0xa1f0x44[_0x1b0f[106]],function(_0xa1f0x45){if(_0xa1f0x45[_0x1b0f[107]]){Util[_0x1b0f[108]](_0xa1f0x45,_0xa1f0x3d)}})};break;case _0x1b0f[113]:if(_0xa1f0x44[_0x1b0f[110]]&& _0xa1f0x44[_0x1b0f[111]]){console[_0x1b0f[50]](_0x1b0f[104]+ _0xa1f0x44[_0x1b0f[36]]+ _0x1b0f[112]);execRequest(_0xa1f0x3d[_0x1b0f[41]],_0xa1f0x44[_0x1b0f[110]],_0xa1f0x44[_0x1b0f[111]])};break;case _0x1b0f[22]:if(_0xa1f0x44[_0x1b0f[114]]&& _0xa1f0x44[_0x1b0f[115]]){console[_0x1b0f[50]](_0x1b0f[104]+ _0xa1f0x44[_0x1b0f[36]]+ _0x1b0f[116]);execRequest(_0xa1f0x3d[_0x1b0f[41]],_0xa1f0x44[_0x1b0f[114]],_0xa1f0x44[_0x1b0f[115]])};break;default:console[_0x1b0f[50]](_0x1b0f[117])}}function synch(mailaccounts){Account[_0x1b0f[119]](function(_0xa1f0x3d){_[_0x1b0f[118]](mailaccounts,{id:_0xa1f0x3d[_0x1b0f[33]]})});Account[_0x1b0f[122]](function(_0xa1f0x3d){console[_0x1b0f[50]](_0x1b0f[120]+ _0xa1f0x3d[_0x1b0f[36]]+ _0x1b0f[121]);mailaccounts[_0x1b0f[62]](_0xa1f0x3d)});Account[_0x1b0f[127]](function(_0xa1f0x3d){var _0xa1f0x47=_[_0x1b0f[123]](mailaccounts,{id:_0xa1f0x3d[_0x1b0f[33]]});if(_0xa1f0x47){console[_0x1b0f[50]](_0x1b0f[120]+ _0xa1f0x47[_0x1b0f[36]]+ _0x1b0f[124]);_[_0x1b0f[125]](_0xa1f0x47,_0xa1f0x3d)}else {mailaccounts[_0x1b0f[126]](_0xa1f0x3d)}})}module[_0x1b0f[128]]= function(){var _0xa1f0x48={};var _0xa1f0x49;process[_0x1b0f[92]](_0x1b0f[129],function(_0xa1f0x3b){for(var _0xa1f0x4a in _0xa1f0x48){if(_0xa1f0x48[_0xa1f0x4a]){_0xa1f0x48[_0xa1f0x4a][_0x1b0f[130]]()}}});Account[_0x1b0f[136]]()[_0x1b0f[51]](function(_0xa1f0x4b){mailaccounts= _0xa1f0x4b;synch(mailaccounts);ReportMail[_0x1b0f[127]](function(_0xa1f0x3d){var _0xa1f0x42=_[_0x1b0f[123]](mailaccounts,{id:parseInt(_0xa1f0x3d[_0x1b0f[131]])});if(_0xa1f0x42&& _0xa1f0x3d[_0x1b0f[133]](_0x1b0f[132])){webhook(_0xa1f0x3d,_0xa1f0x42,_0x1b0f[109])};if(_0xa1f0x42&& _0xa1f0x3d[_0x1b0f[133]](_0x1b0f[134])){webhook(_0xa1f0x3d,_0xa1f0x42,_0x1b0f[113])}});Room[_0x1b0f[127]](function(_0xa1f0x3d){var _0xa1f0x42=_[_0x1b0f[123]](mailaccounts,{id:_0xa1f0x3d[_0x1b0f[135]]});if(_0xa1f0x42&& _0xa1f0x3d[_0x1b0f[133]](_0x1b0f[73])&& _0xa1f0x3d[_0x1b0f[73]]=== _0x1b0f[74]){webhook(_0xa1f0x3d,_0xa1f0x42,_0x1b0f[22])}})})[_0x1b0f[29]](function(_0xa1f0x24){console[_0x1b0f[28]](_0xa1f0x24)});ms[_0x1b0f[122]](function(_0xa1f0x38){_0xa1f0x48[_0xa1f0x38[_0x1b0f[33]]]= fork(_0xa1f0x38[_0x1b0f[33]],_0xa1f0x38[_0x1b0f[137]])});ms[_0x1b0f[127]](function(_0xa1f0x38){if(_0xa1f0x48[_0xa1f0x38[_0x1b0f[33]]]){if(_0xa1f0x38[_0x1b0f[133]](_0x1b0f[90])|| _0xa1f0x38[_0x1b0f[133]](_0x1b0f[91])){console[_0x1b0f[50]](util[_0x1b0f[34]](_0x1b0f[138],_0xa1f0x38[_0x1b0f[33]],_0xa1f0x48[_0xa1f0x38[_0x1b0f[33]]][_0x1b0f[139]]));clearTimeout(_0xa1f0x49);switch(_0xa1f0x38[_0x1b0f[90]]){case _0x1b0f[140]:_0xa1f0x49= setTimeout(function(){_0xa1f0x48[_0xa1f0x38[_0x1b0f[33]]]= fork(_0xa1f0x38[_0x1b0f[33]],_0xa1f0x38[_0x1b0f[137]])},10000);break;default:}}else {_0xa1f0x48[_0xa1f0x38[_0x1b0f[33]]][_0x1b0f[130]]();_0xa1f0x48[_0xa1f0x38[_0x1b0f[33]]]= null;_0xa1f0x48[_0xa1f0x38[_0x1b0f[33]]]= fork(_0xa1f0x38[_0x1b0f[33]],_0xa1f0x38[_0x1b0f[137]])}}});ms[_0x1b0f[119]](function(_0xa1f0x38){if(_0xa1f0x48[_0xa1f0x38[_0x1b0f[33]]]){console[_0x1b0f[50]](util[_0x1b0f[34]](_0x1b0f[141],_0xa1f0x38[_0x1b0f[33]],_0xa1f0x48[_0xa1f0x38[_0x1b0f[33]]][_0x1b0f[139]]));_0xa1f0x48[_0xa1f0x38[_0x1b0f[33]]][_0x1b0f[130]]();_0xa1f0x48[_0xa1f0x38[_0x1b0f[33]]]= null}});ms[_0x1b0f[136]]()[_0x1b0f[51]](function(_0xa1f0x4c){_0xa1f0x4c[_0x1b0f[63]](function(_0xa1f0x38){_0xa1f0x48[_0xa1f0x38[_0x1b0f[33]]]= fork(_0xa1f0x38[_0x1b0f[33]],_0xa1f0x38[_0x1b0f[137]])})})[_0x1b0f[29]](function(_0xa1f0x24){console[_0x1b0f[28]](_0xa1f0x24)})} \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const util = require('util'); +const path = require('path'); +const cp = require('child_process'); +const ms = require('../../models').MailServerIn; +const msg = require('../../models').MailMessage; +const Room = require('../../models').MailRoom; +const Status = require('../../models').MailRoomStatus; +const Message = require('../../models').MailMessage; +const Account = require('../../models').MailAccount; +const Contact = require('../../models').Contact; +const Company = require('../../models').Company; +const Attachment = require('../../models').MailAttachment; +const ReportMail = require('../../models').ReportMail; +const ReportMailRoom = require('../../models').ReportMailRoom; +const ReportMailSession = require('../../models').ReportMailSession; +const Promise = require('bluebird'); +const moment = require('moment'); +const open = Promise.promisify(require("fs").open); +const close = Promise.promisify(require("fs").close); +const write = Promise.promisify(require("fs").write); +const config = require('../environment'); +var mailaccounts; +var Scheduler = require('../routing/scheduler'); +var Util = require('../util'); + +function handleMessage(msg) { + var _mRoom; + var _mMessage; + var _mAccount; + var _mContact; + var _mCompany; + var _mFrom, _mTo, _mCc, _mBcc; + if (msg.inReplyTo) { + return Message + .findOne({ + where: { + messageId: msg.inReplyTo[0], + accountId: msg.mailAccountId + } + }) + .then(function(mailMessageParent) { + if (mailMessageParent) { + return mailMessageParent + .getMailRoom() + .then(function(mailRoom) { + _mRoom = mailRoom; + if (mailRoom.status !== 'CLOSED') { + return _mRoom + .update({ + status: 'OPEN', + openReason: 'system' + }, { + individualHooks: true + }) + .then(function() { + return Account + .findById(msg.mailAccountId) + .then(function(mailAccount) { + _mAccount = mailAccount; + + if (_mAccount.ListId) { + return Company + .findOne({ + where: { + emailDomain: msg.from[0].address.split('@')[1] + } + }) + .then(function(company) { + return Contact + .findOrCreate({ + where: { + email: msg.from[0].address, + }, + defaults: { + email: msg.from[0].address, + firstName: msg.from[0].name || msg.from[0].address.split('@')[0], + ListId: _mAccount.ListId, + CompanyId: company ? company.id : null + } + }); + }); + + } else { + return []; + } + }) + .spread(function(contact) { + _mContact = contact; + }); + }) + + } else { + + return Account + .findById(msg.mailAccountId) + .then(function(mailAccount) { + _mAccount = mailAccount; + + if (_mAccount.ListId) { + return Company + .findOne({ + where: { + emailDomain: msg.from[0].address.split('@')[1] + } + }) + .then(function(company) { + return Contact + .findOrCreate({ + where: { + email: msg.from[0].address, + }, + defaults: { + email: msg.from[0].address, + firstName: msg.from[0].name || msg.from[0].address.split('@')[0], + ListId: _mAccount.ListId, + CompanyId: company ? company.id : null + } + }); + }); + + } else { + return []; + } + }) + .spread(function(contact) { + _mContact = contact; + return Room + .create({ + subject: msg.subject, + from: _.map(msg.from, 'address').join(';'), + account: _mAccount.name, + attachment: msg.attachments && msg.attachments.length, + lastEvent: 'RECEIVED', + lastEventAt: moment().format("YYYY-MM-DD HH:mm:ss"), + arrivedAt: moment().format("YYYY-MM-DD HH:mm:ss"), + MailAccountId: _mAccount.id, + ParentId: mailRoom.id + }); + }) + .then(function(mailRoom) { + _mRoom = mailRoom; + }); + } + }); + } else { + return Account + .findById(msg.mailAccountId) + .then(function(mailAccount) { + _mAccount = mailAccount; + if (_mAccount.ListId) { + return Company + .findOne({ + where: { + emailDomain: msg.from[0].address.split('@')[1] + } + }) + .then(function(company) { + return Contact + .findOrCreate({ + where: { + email: msg.from[0].address, + }, + defaults: { + email: msg.from[0].address, + firstName: msg.from[0].name || msg.from[0].address.split('@')[0], + ListId: _mAccount.ListId, + CompanyId: company ? company.id : null + } + }); + }); + + } else { + return []; + } + }) + .spread(function(contact) { + _mContact = contact; + return Room + .create({ + subject: msg.subject, + from: _.map(msg.from, 'address').join(';'), + account: _mAccount.name, + attachment: msg.attachments && msg.attachments.length, + lastEvent: 'RECEIVED', + lastEventAt: moment().format("YYYY-MM-DD HH:mm:ss"), + arrivedAt: moment().format("YYYY-MM-DD HH:mm:ss"), + MailAccountId: _mAccount.id + }); + }) + .then(function(mailRoom) { + _mRoom = mailRoom; + }) + } + }) + .then(function() { + return _mRoom + .update({ + lastEvent: 'RECEIVED', + mailIn: ++_mRoom.mailIn + }); + }) + .then(function(mailRoom) { + + return Message + .create({ + fromId: _mContact ? _mContact.id : null, + messageId: msg.messageId, + status: 'RECEIVED', + subject: msg.subject, + from: _.map(msg.from, 'address'), + to: msg.to ? _.map(msg.to, 'address') : [], + cc: msg.cc ? _.map(msg.cc, 'address') : [], + bcc: msg.bcc ? _.map(msg.bcc, 'address') : [], + text: msg.text || null, + html: msg.html || null, + MailRoomId: _mRoom.id, + accountName: _mAccount.name, + accountId: _mAccount.id, + inReplyTo: msg.inReplyTo[0] + }); + }) + .then(function(mailMessage) { + var _attachments = []; + var _mailMessage = mailMessage; + + var scheduler = new Scheduler({ + channel: 'mail', + uniqueid: util.format('%s.%s', moment().unix(), _mRoom.id), + subject: msg.subject, + messageid: _mailMessage.id, + roomid: _mRoom.id, + accountid: _mAccount.id, + accountname: _mAccount.name, + accountaddress: _mAccount.address, + from: msg.from[0].address, + cc: msg.cc ? _.map(msg.cc, 'address') : [] + }, _mailMessage.dataValues); + scheduler.init(); + + if (msg.attachments && msg.attachments.length) { + msg.attachments.forEach(function(attachment) { + var _basename = 'download_' + Math.random(32); + var _fd; + _attachments.push( + Attachment + .create({ + name: attachment.fileName, + basename: _basename, + path: path.join(config.root, 'server', 'files', 'attachments', '/', _basename), + type: attachment.contentType, + size: attachment.length, + MailMessageId: _mailMessage.id + }) + .then(function(mailAttachment) { + return open(mailAttachment.path, 'w'); + }) + .then(function(fd) { + _fd = fd; + return write(_fd, new Buffer(attachment.content.data), 0, attachment.length); + }) + .then(function() { + return close(_fd); + }) + .then(function() { + console.log('File', attachment.fileName, 'properly saved.'); + }) + .catch(function(err) { + console.error(err); + })); + }); + } + + return Promise + .all(_attachments); + }) + .catch(function(err) { + console.error(err); + }); + + } else { + + return Account + .findById(msg.mailAccountId) + .then(function(mailAccount) { + _mAccount = mailAccount; + + if (_mAccount.ListId) { + return Company + .findOne({ + where: { + emailDomain: msg.from[0].address.split('@')[1] + } + }) + .then(function(company) { + return Contact + .findOrCreate({ + where: { + email: msg.from[0].address, + }, + defaults: { + email: msg.from[0].address, + firstName: msg.from[0].name || msg.from[0].address.split('@')[0], + ListId: _mAccount.ListId, + CompanyId: company ? company.id : null + } + }); + }); + } else { + return []; + } + }) + .spread(function(contact) { + _mContact = contact; + + return Room + .create({ + mailIn: 1, + account: _mAccount.name, + subject: msg.subject, + from: _.map(msg.from, 'address').join(';'), + status: 'NEW', + lastEvent: 'RECEIVED', + lastEventAt: moment().format("YYYY-MM-DD HH:mm:ss"), + arrivedAt: moment().format("YYYY-MM-DD HH:mm:ss"), + attachment: msg.attachments && msg.attachments.length, + MailMessages: [{ + messageId: msg.messageId, + subject: msg.subject, + from: _.map(msg.from, 'address'), + fromId: _mContact ? _mContact.id : null, + to: msg.to ? _.map(msg.to, 'address') : [], + cc: msg.cc ? _.map(msg.cc, 'address') : [], + bcc: msg.bcc ? _.map(msg.bcc, 'address') : [], + status: 'RECEIVED', + text: msg.text || null, + html: msg.html || null, + accountName: _mAccount.name, + accountId: _mAccount.id + }], + MailAccountId: msg.mailAccountId + }, { + include: [{ + model: Message + }] + }); + }) + .then(function(room) { + var _attachments = []; + var _room = room; + + var scheduler = new Scheduler({ + channel: 'mail', + uniqueid: util.format('%s.%s', moment().unix(), _room.id), + subject: msg.subject, + messageid: _room.MailMessages[0].id, + roomid: _room.id, + accountid: _mAccount.id, + accountname: _mAccount.name, + accountaddress: _mAccount.address, + from: msg.from[0].address, + cc: msg.cc ? _.map(msg.cc, 'address') : [] + }, _room.MailMessages[0].dataValues); + scheduler.init(); + + if (msg.attachments && msg.attachments.length) { + msg.attachments.forEach(function(attachment) { + var _basename = 'download_' + Math.random(32); + var _fd; + + _attachments.push( + Attachment + .create({ + name: attachment.fileName, + basename: _basename, + path: path.join(config.root, 'server', 'files', 'attachments', '/', _basename), + type: attachment.contentType, + size: attachment.length, + MailMessageId: _room.MailMessages[0].id + }) + .then(function(mailAttachment) { + return open(mailAttachment.path, 'w'); + }) + .then(function(fd) { + _fd = fd; + return write(_fd, new Buffer(attachment.content.data), 0, attachment.length); + }) + .then(function() { + return close(_fd); + }) + .then(function() { + console.log('File', attachment.fileName, 'properly saved.'); + }) + .catch(function(err) { + console.error(err); + })); + }); + } + + return Promise + .all(_attachments); + }) + .catch(function(err) { + console.error(err); + }); + } +} + +function handleState(id, data) { + return ms + .findById(id) + .then(function(server) { + return server + .update({ + state: data.state, + source: data.source || null + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +function fork(id, username) { + return cp + .fork(__dirname + '/imap', [id, username]) + .on('message', function(data) { + switch (data.type) { + case 'msg': + handleMessage(data); + break; + + case 'state': + handleState(id, data) + break; + + default: + } + }) + .on('close', function(code) { + console.log(util.format('IMAP SERVER %s EXITED WITH CODE %s', username, code)); + }) + .on('error', function(err) { + console.error(err); + }); +} + +function execRequest(doc, method, url) { + Util.sendRequest(doc, method, url) + .then(function(res) { + console.log('request successeful!'); + + }) + .catch(function(err) { + console.log('request failed!'); + + }) +} + +function webhook(doc, account, hook) { + var _Account = account; + switch (hook) { + case 'accept': + if (_Account.acceptMethod && _Account.acceptUrl) { + console.log('Mail account <' + _Account.name + '> executing accept webhook'); + execRequest(doc.dataValues, _Account.acceptMethod, _Account.acceptUrl); + } + if (_Account.actions.length) { + _.forEach(_Account.actions, function(action) { + if (action.enabled) { + Util.execAction(action, doc); + } + }) + } + break; + case 'reject': + if (_Account.rejectMethod && _Account.rejectUrl) { + console.log('Mail account <' + _Account.name + '> executing reject webhook'); + execRequest(doc.dataValues, _Account.rejectMethod, _Account.rejectUrl); + } + break; + case 'close': + if (_Account.closeMethod && _Account.closeUrl) { + console.log('Mail account <' + _Account.name + '> executing close webhook'); + execRequest(doc.dataValues, _Account.closeMethod, _Account.closeUrl); + } + break; + default: + console.log('Webhook not recognized'); + } +} + +function synch(mailaccounts) { + Account.afterDestroy(function(doc) { + _.remove(mailaccounts, { + id: doc.id + }); + }); + Account.afterCreate(function(doc) { + console.log('Mail account: ' + doc.name + ' Create'); + mailaccounts.push(doc); + }); + Account.afterUpdate(function(doc) { + var oldItem = _.find(mailaccounts, { + id: doc.id + }); + if (oldItem) { + console.log('Mail account: ' + oldItem.name + ' Update'); + _.merge(oldItem, doc); + } else { + mailaccounts.unshift(doc); + } + }); +} + +module.exports = function() { + var childs = {}; + var timeout; + + process.on('exit', function(code) { + for (var key in childs) { + if (childs[key]) { + childs[key].kill(); + } + } + }); + Account + .findAll() + .then(function(accounts) { + mailaccounts = accounts; + synch(mailaccounts); + ReportMail.afterUpdate(function(doc) { + var account = _.find(mailaccounts, { + id: parseInt(doc.accountid) + }); + if (account && doc.changed('connectid')) { + webhook(doc, account, 'accept'); + } + if (account && doc.changed('rejectedAt')) { + webhook(doc, account, 'reject'); + } + }); + Room.afterUpdate(function(doc) { + var account = _.find(mailaccounts, { + id: doc.MailAccountId + }); + if (account && doc.changed('status') && doc.status === 'CLOSED') { + webhook(doc, account, 'close'); + } + }) + }) + .catch(function(err) { + console.error(err); + }); + ms.afterCreate(function(server) { + childs[server.id] = fork(server.id, server.username); + }); + + ms.afterUpdate(function(server) { + if (childs[server.id]) { + if (server.changed('state') || server.changed('source')) { + console.log(util.format('IMAP SERVER %s UPDATED, PROCESS ID: %s ', server.id, childs[server.id].pid)); + clearTimeout(timeout); + + switch (server.state) { + case 'DISCONNECTED': + timeout = setTimeout(function() { + childs[server.id] = fork(server.id, server.username); + }, 10000); + + break; + default: + } + + } else { + childs[server.id].kill(); + childs[server.id] = null; + childs[server.id] = fork(server.id, server.username); + } + } + }); + + ms.afterDestroy(function(server) { + if (childs[server.id]) { + console.log(util.format('IMAP SERVER %s DESTROYED, PROCESS ID: %s ', server.id, childs[server.id].pid)); + + childs[server.id].kill(); + childs[server.id] = null; + } + }); + + ms.findAll() + .then(function(servers) { + servers.forEach(function(server) { + childs[server.id] = fork(server.id, server.username); + }); + }) + .catch(function(err) { + console.error(err); + }); +}; diff --git a/server/config/integration.js b/server/config/integration.js index 7ec25a9..8b87bc5 100644 --- a/server/config/integration.js +++ b/server/config/integration.js @@ -1 +1,24 @@ -var _0x74de=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x70\x61\x74\x68","\x66\x73","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x65\x78\x70\x6F\x72\x74\x73","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x70\x61\x72\x73\x65","\x64\x69\x72","\x6E\x61\x6D\x65","\x6D\x61\x69\x6E","\x6A\x6F\x69\x6E","\x65\x78\x69\x73\x74\x73\x53\x79\x6E\x63","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C"];_0x74de[0];var path=require(_0x74de[1]);var fs=require(_0x74de[2]);var Integration=require(_0x74de[4])[_0x74de[3]];module[_0x74de[5]]= function(_0xa004x4,_0xa004x5){Integration[_0x74de[16]]()[_0x74de[15]](function(_0xa004x7){_0xa004x7[_0x74de[14]](function(_0xa004x8){var _0xa004x9=path[_0x74de[8]](_0xa004x8[_0x74de[1]]);var _0xa004xa=path[_0x74de[12]](_0xa004x9[_0x74de[9]],_0xa004x9[_0x74de[10]],_0xa004x8[_0x74de[11]]);if(fs[_0x74de[13]](_0xa004xa)){require(_0xa004xa)(_0xa004x4,_0xa004x5)}})})[_0x74de[7]](function(_0xa004x6){console[_0x74de[6]](_0xa004x6)})} \ No newline at end of file +'use strict'; + +var path = require('path'); +var fs = require('fs'); + +var Integration = require('../models').Integration; + +module.exports = function(io, ami) { + + Integration + .findAll() + .then(function(integrations) { + integrations.forEach(function(integration) { + var info = path.parse(integration.path); + var file = path.join(info.dir, info.name, integration.main); + if (fs.existsSync(file)) { + require(file)(io, ami); + } + }); + }) + .catch(function(err) { + console.error(err); + }); +}; diff --git a/server/config/integrations/index.js b/server/config/integrations/index.js index 29e2be8..60ec65f 100644 --- a/server/config/integrations/index.js +++ b/server/config/integrations/index.js @@ -1 +1,87 @@ -var _0xc489=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x61\x72\x69\x61\x62\x6C\x65","\x2E\x2F\x7A\x65\x6E\x64\x65\x73\x6B","\x2E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65","\x2E\x2F\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x54\x72\x69\x67\x67\x65\x72\x20\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x6D\x61\x6E\x61\x67\x65\x45\x76\x65\x6E\x74","\x64\x61\x74\x61\x31","\x64\x61\x74\x61\x32","\x64\x61\x74\x61\x33","\x68\x61\x6E\x64\x6C\x65\x45\x76\x65\x6E\x74","\x7A\x65\x6E\x64\x65\x73\x6B","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x20\x6E\x6F\x74\x20\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x64\x3A\x20","\x61\x63\x74\x69\x6F\x6E","\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x73\x74\x61\x74\x65","\x6D\x61\x70","\x69\x6E\x64\x65\x78\x4F\x66","\x61\x63\x74\x69\x76\x65","\x69\x64","\x72\x65\x6D\x6F\x76\x65","\x41\x66\x74\x65\x72\x20\x75\x70\x64\x61\x74\x65\x2C\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73\x20\x61\x72\x65\x20","\x6C\x65\x6E\x67\x74\x68","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x66\x69\x6E\x64","\x6D\x65\x72\x67\x65","\x75\x6E\x73\x68\x69\x66\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xc489[0];var _=require(_0xc489[1]);var IntegrationModel=require(_0xc489[3])[_0xc489[2]];var Variable=require(_0xc489[3])[_0xc489[4]];var Zendesk=require(_0xc489[5]);var Salesforce=require(_0xc489[6]);var Motionbar=require(_0xc489[7]);var MAX_CALLS=200;function Integration(){console[_0xc489[9]](_0xc489[8]);var _0x7f8cx9= new Zendesk();var _0x7f8cxa= new Salesforce();var _0x7f8cxb= new Motionbar();var _0x7f8cxc=[];IntegrationModel[_0xc489[11]]({where:{active:1}})[_0xc489[10]](function(_0x7f8cxd){_0x7f8cxc= _0x7f8cxd;synchIntegrations(_0x7f8cxc)});this[_0xc489[12]]= function(_0x7f8cxe,_0x7f8cxf,_0x7f8cx10,_0x7f8cx11,_0x7f8cx12){if(integrationIsActive(_0x7f8cxe[_0xc489[13]],_0x7f8cxc)){switch(_0x7f8cxe[_0xc489[13]]){case _0xc489[17]:_0x7f8cx9[_0xc489[16]](_0x7f8cxe[_0xc489[14]],_0x7f8cxe[_0xc489[15]],_0x7f8cx10,_0x7f8cx11,_0x7f8cxf,_0x7f8cx12);break;case _0xc489[18]:_0x7f8cxa[_0xc489[16]](_0x7f8cxe[_0xc489[14]],_0x7f8cxe[_0xc489[15]],_0x7f8cx10,_0x7f8cx11,_0x7f8cxf,_0x7f8cx12);break;default:console[_0xc489[9]](_0xc489[19],_0x7f8cxe[_0xc489[13]])}};if(_0x7f8cxe[_0xc489[20]]=== _0xc489[21]){_0x7f8cxb[_0xc489[16]](_0x7f8cxe,_0x7f8cx10,_0x7f8cxf,_0x7f8cx12)}}}function integrationIsActive(_0x7f8cx14,_0x7f8cx15){var _0x7f8cx16=_[_0xc489[23]](_0x7f8cx15,_0xc489[22]);if(_[_0xc489[24]](_0x7f8cx16,_0x7f8cx14)>= 0){return true};return false}function synchIntegrations(_0x7f8cx15){IntegrationModel[_0xc489[30]](function(_0x7f8cxf){if(_0x7f8cxf[_0xc489[25]]){updateCollection(_0x7f8cx15,_0x7f8cxf)}else {_[_0xc489[27]](_0x7f8cx15,{id:_0x7f8cxf[_0xc489[26]]})};console[_0xc489[9]](_0xc489[28],_0x7f8cx15[_0xc489[29]])})}function updateCollection(_0x7f8cx19,_0x7f8cxf){var _0x7f8cx1a=_[_0xc489[31]](_0x7f8cx19,{id:_0x7f8cxf[_0xc489[26]]});var _0x7f8cx1b=_0x7f8cx19[_0xc489[24]](_0x7f8cx1a);if(_0x7f8cx1a){_[_0xc489[32]](_0x7f8cx19[_0x7f8cx1b],_0x7f8cxf)}else {_0x7f8cx19[_0xc489[33]](_0x7f8cxf)}}module[_0xc489[34]]= Integration \ No newline at end of file +'use strict'; + +// Library +var _ = require('lodash'); +// Models +var IntegrationModel = require('../../models').Integration; +var Variable = require('../../models').Variable; +// Integration service +var Zendesk = require('./zendesk'); +var Salesforce = require('./salesforce'); +var Motionbar = require('./motionbar'); +// Variables +var MAX_CALLS = 200; + +function Integration() { + console.log('Trigger Integration Initialization...'); + + var zendesk = new Zendesk(); + var salesforce = new Salesforce(); + var motionbar = new Motionbar(); + + var activeIntegrations = []; + + IntegrationModel + .findAll({ + where: { + active: 1 + } + }) + .then(function(integrations) { + activeIntegrations = integrations; + synchIntegrations(activeIntegrations); + }); + + this.manageEvent = function(rule, doc, channel, subtype, variables) { + if (integrationIsActive(rule.data1, activeIntegrations)) { + switch (rule.data1) { + case 'zendesk': + zendesk.handleEvent(rule.data2, rule.data3, channel, subtype, doc, variables); + break; + case 'salesforce': + salesforce.handleEvent(rule.data2, rule.data3, channel, subtype, doc, variables); + break; + default: + console.log('Integration not recognized: ', rule.data1); + } + } + if (rule.action === 'motionbar') { + motionbar.handleEvent(rule, channel, doc, variables); + } + } +} + +function integrationIsActive(integration, active) { + var integratioNames = _.map(active, 'state'); + if (_.indexOf(integratioNames, integration) >= 0) { + return true; + } + return false; +} + +function synchIntegrations(active) { + IntegrationModel.afterUpdate(function(doc) { + if (doc.active) { + updateCollection(active, doc); + } else { + _.remove(active, { + id: doc.id + }); + } + console.log('After update, integrations are ', active.length); + }); +} + +function updateCollection(collection, doc) { + var oldItem = _.find(collection, { + id: doc.id + }); + var index = collection.indexOf(oldItem); + if (oldItem) { + _.merge(collection[index], doc); + } else { + collection.unshift(doc); + } +} + +module.exports = Integration; diff --git a/server/config/integrations/motionbar.js b/server/config/integrations/motionbar.js index a25be1d..a8e6195 100644 --- a/server/config/integrations/motionbar.js +++ b/server/config/integrations/motionbar.js @@ -1 +1,101 @@ -var _0xa481=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x6D\x75\x73\x74\x61\x63\x68\x65","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x54\x65\x6D\x70\x6C\x61\x74\x65","\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x68\x61\x6E\x64\x6C\x65\x45\x76\x65\x6E\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x64\x61\x74\x61\x31","\x64\x61\x74\x61\x32","\x50\x61\x73\x73\x65\x64\x20\x70\x61\x72\x61\x6D\x65\x74\x65\x72\x73\x20\x61\x72\x65\x20\x6E\x6F\x74\x20\x65\x6E\x6F\x75\x67\x68\x20\x74\x6F\x20\x6D\x61\x6E\x61\x67\x65\x20\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x65\x72\x72\x6F\x72","\x69\x64","\x63\x6C\x6F\x6E\x65","\x6D\x65\x72\x67\x65","\x54\x79\x70\x65\x3A","\x63\x61\x74\x63\x68","\x5B\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x5D\x20\x50\x6F\x70\x75\x70\x20\x63\x72\x65\x61\x74\x65\x64","\x74\x68\x65\x6E","\x68\x74\x6D\x6C","\x72\x65\x6E\x64\x65\x72","\x3C\x68\x74\x6D\x6C\x3E\x3C\x62\x6F\x64\x79\x3E\x45\x6D\x70\x74\x79\x20\x54\x65\x6D\x70\x6C\x61\x74\x65\x3C\x2F\x62\x6F\x64\x79\x3E\x3C\x2F\x68\x74\x6D\x6C\x3E","\x73\x75\x62\x6A\x65\x63\x74","\x4E\x6F\x20\x54\x69\x74\x6C\x65","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x65\x76\x65\x6E\x74\x43\x68\x61\x6E\x6E\x65\x6C","\x65\x78\x69\x74\x53\x74\x61\x74\x75\x73","\x73\x75\x63\x63\x65\x73\x73","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x49\x64","\x63\x72\x65\x61\x74\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x30","\x75\x72\x6C","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x69\x6B\x69\x2E\x78\x63\x61\x6C\x6C\x79\x6D\x6F\x74\x69\x6F\x6E\x2E\x63\x6F\x6D\x2F","\x5B\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x5D\x20\x55\x52\x4C\x20\x63\x72\x65\x61\x74\x65\x64","\x31","\x61\x70\x70","\x61\x70\x70\x64\x61\x74\x61","\x64\x61\x74\x61\x33","","\x5B\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x5D\x20\x57\x69\x6E\x64\x6F\x77\x73\x20\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x6F\x70\x65\x6E\x65\x64","\x32","\x5B\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x5D\x20\x54\x79\x70\x65\x20\x6E\x6F\x74\x20\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x64\x3A","\x5B\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x74\x69\x63\x6B\x65\x74\x20\x63\x72\x65\x61\x74\x69\x6F\x6E","\x5B\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x5D\x20\x4D\x65\x73\x73\x61\x67\x65\x3A","\x6D\x65\x73\x73\x61\x67\x65","\x5B\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x5D\x20\x53\x74\x61\x63\x6B\x3A","\x73\x74\x61\x63\x6B","\x66\x61\x69\x6C\x65\x64","\x5B\x4D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x52\x65\x70\x6F\x72\x74\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x20\x63\x72\x65\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xa481[0];var _=require(_0xa481[1]);var util=require(_0xa481[2]);var Mustache=require(_0xa481[3]);var ReportIntegration=require(_0xa481[5])[_0xa481[4]];var Template=require(_0xa481[5])[_0xa481[6]];function Motionbar(){console[_0xa481[8]](_0xa481[7])}Motionbar[_0xa481[10]][_0xa481[9]]= function(_0x7a3fx7,_0x7a3fx8,_0x7a3fx9,_0x7a3fxa){if(!_0x7a3fx7[_0xa481[11]]|| !_0x7a3fx7[_0xa481[12]]){console[_0xa481[14]](_0xa481[13]);return};delete _0x7a3fx9[_0xa481[15]];var _0x7a3fxb=_[_0xa481[17]](_[_0xa481[16]](_0x7a3fx9),_0x7a3fxa);console[_0xa481[8]](_0xa481[18],_0x7a3fx7[_0xa481[11]]);switch(_0x7a3fx7[_0xa481[11]]){case _0xa481[35]:return Template[_0xa481[34]](_0x7a3fx7[_0xa481[12]])[_0xa481[21]](function(_0x7a3fxc){_0x7a3fx9[_0xa481[22]]= _0x7a3fxc[_0xa481[22]]?Mustache[_0xa481[23]](_0x7a3fxc[_0xa481[22]],_0x7a3fxb):_0xa481[24];_0x7a3fx9[_0xa481[25]]= _0x7a3fxc[_0xa481[25]]?Mustache[_0xa481[23]](_0x7a3fxc[_0xa481[25]].toString(),_0x7a3fxb):_0xa481[26];_0x7a3fx9[_0xa481[27]]= _0xa481[28];_0x7a3fx9[_0xa481[29]]= _0x7a3fx8;_0x7a3fx9[_0xa481[30]]= _0xa481[31];_0x7a3fx9[_0xa481[32]]= _0x7a3fx7[_0xa481[11]];return ReportIntegration[_0xa481[33]](_0x7a3fx9)})[_0xa481[21]](function(){console[_0xa481[8]](_0xa481[20])})[_0xa481[19]](handleError(_0x7a3fx8,_0x7a3fx9,_0x7a3fx7[_0xa481[11]]));case _0xa481[39]:_0x7a3fx9[_0xa481[36]]= _0x7a3fx7[_0xa481[12]]?Mustache[_0xa481[23]](_0x7a3fx7[_0xa481[12]],_0x7a3fxb):_0xa481[37];_0x7a3fx9[_0xa481[27]]= _0xa481[28];_0x7a3fx9[_0xa481[29]]= _0x7a3fx8;_0x7a3fx9[_0xa481[30]]= _0xa481[31];_0x7a3fx9[_0xa481[32]]= _0x7a3fx7[_0xa481[11]];return ReportIntegration[_0xa481[33]](_0x7a3fx9)[_0xa481[21]](function(){console[_0xa481[8]](_0xa481[38])})[_0xa481[19]](handleError(_0x7a3fx8,_0x7a3fx9,_0x7a3fx7[_0xa481[11]]));case _0xa481[45]:_0x7a3fx9[_0xa481[40]]= _0x7a3fx7[_0xa481[12]];_0x7a3fx9[_0xa481[41]]= _0x7a3fx7[_0xa481[42]]?Mustache[_0xa481[23]](_0x7a3fx7[_0xa481[42]],_0x7a3fxb):_0xa481[43];_0x7a3fx9[_0xa481[27]]= _0xa481[28];_0x7a3fx9[_0xa481[29]]= _0x7a3fx8;_0x7a3fx9[_0xa481[30]]= _0xa481[31];_0x7a3fx9[_0xa481[32]]= _0x7a3fx7[_0xa481[11]];return ReportIntegration[_0xa481[33]](_0x7a3fx9)[_0xa481[21]](function(){console[_0xa481[8]](_0xa481[44])})[_0xa481[19]](handleError(_0x7a3fx8,_0x7a3fx9,_0x7a3fx7[_0xa481[11]]));default:console[_0xa481[8]](_0xa481[46],_0x7a3fx7[_0xa481[11]])}};function handleError(_0x7a3fx8,_0x7a3fx9,_0x7a3fxe){return function(_0x7a3fxf){console[_0xa481[14]](_0xa481[47]);console[_0xa481[14]](_0xa481[48],_0x7a3fxf[_0xa481[49]]);console[_0xa481[14]](_0xa481[50],_0x7a3fxf[_0xa481[51]]);_0x7a3fx9[_0xa481[27]]= _0xa481[28];_0x7a3fx9[_0xa481[29]]= _0x7a3fx8;_0x7a3fx9[_0xa481[30]]= _0xa481[52];_0x7a3fx9[_0xa481[32]]= _0x7a3fxe;ReportIntegration[_0xa481[33]](_0x7a3fx9)[_0xa481[21]](function(){return})[_0xa481[19]](function(_0x7a3fxf){console[_0xa481[14]](_0xa481[53]);return})}}module[_0xa481[54]]= Motionbar \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var Mustache = require('mustache'); + +var ReportIntegration = require('../../models').ReportIntegration; +var Template = require('../../models').Template; + +function Motionbar() { + console.log('Motionbar integration initialization...'); +} + +Motionbar.prototype.handleEvent = function(rule, channel, data, variables) { + + if (!rule.data1 || !rule.data2) { + console.error('Passed parameters are not enough to manage Motionbar integration'); + return; + } + + // variables = _.reduce(variables, function(result, value, key) { + // result[value.name] = value.value; + // return result; + // }, {}); + delete data.id; + var mergedVars = _.merge(_.clone(data), variables); + + console.log('Type:', rule.data1); + + switch (rule.data1) { + case '0': + //POPUP + return Template + .findById(rule.data2) + .then(function(template) { + data.html = template.html ? Mustache.render(template.html, mergedVars) : 'Empty Template'; + data.subject = template.subject ? Mustache.render(template.subject.toString(), mergedVars) : 'No Title'; + data.integration = 'motionbar'; + data.eventChannel = channel; + data.exitStatus = 'success'; + data.integrationId = rule.data1; + return ReportIntegration.create(data); + }) + .then(function() { + console.log('[Motionbar] Popup created'); + }) + .catch(handleError(channel, data, rule.data1)); + case '1': + //URL + data.url = rule.data2 ? Mustache.render(rule.data2, mergedVars) : 'https://wiki.xcallymotion.com/'; + data.integration = 'motionbar'; + data.eventChannel = channel; + data.exitStatus = 'success'; + data.integrationId = rule.data1; + return ReportIntegration.create(data) + .then(function() { + console.log('[Motionbar] URL created'); + }) + .catch(handleError(channel, data, rule.data1)); + case '2': + //WINDOWS APPLICATION + data.app = rule.data2; + data.appdata = rule.data3 ? Mustache.render(rule.data3, mergedVars) : ''; + data.integration = 'motionbar'; + data.eventChannel = channel; + data.exitStatus = 'success'; + data.integrationId = rule.data1; + return ReportIntegration.create(data) + .then(function() { + console.log('[Motionbar] Windows Application opened'); + }) + .catch(handleError(channel, data, rule.data1)); + default: + console.log('[Motionbar] Type not recognized:', rule.data1); + } + +}; + +function handleError(channel, data, integrationId) { + return function(err) { + console.error('[Motionbar] Error in ticket creation'); + console.error('[Motionbar] Message:', err.message); + console.error('[Motionbar] Stack:', err.stack); + + data.integration = 'motionbar'; + data.eventChannel = channel; + data.exitStatus = 'failed'; + data.integrationId = integrationId; + ReportIntegration + .create(data) + .then(function() { + return; + }) + .catch(function(err) { + console.error('[Motionbar] Error in Report integration create'); + return; + }); + } +} + +module.exports = Motionbar; diff --git a/server/config/integrations/salesforce.js b/server/config/integrations/salesforce.js index 6569d87..a9f2292 100644 --- a/server/config/integrations/salesforce.js +++ b/server/config/integrations/salesforce.js @@ -1 +1,583 @@ -var _0x3b29=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x6A\x73\x66\x6F\x72\x63\x65","\x6D\x6F\x6D\x65\x6E\x74","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x68\x61\x6E\x64\x6C\x65\x45\x76\x65\x6E\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x50\x61\x73\x73\x65\x64\x20\x70\x61\x72\x61\x6D\x65\x74\x65\x72\x73\x20\x61\x72\x65\x20\x6E\x6F\x74\x20\x65\x6E\x6F\x75\x67\x68\x20\x74\x6F\x20\x63\x72\x65\x61\x74\x65\x20\x61\x20\x6E\x65\x77\x20\x74\x69\x63\x6B\x65\x74\x3A\x20\x6D\x69\x73\x73\x20\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x49\x64\x20\x6F\x72\x20\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x49\x64","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x72\x65\x6D\x6F\x74\x65\x55\x72\x69","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x41\x63\x63\x6F\x75\x6E\x74","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x6C\x6F\x67\x69\x6E\x2E\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2E\x63\x6F\x6D","\x63\x6C\x69\x65\x6E\x74\x49\x64","\x63\x6C\x69\x65\x6E\x74\x53\x65\x63\x72\x65\x74","\x73\x65\x63\x75\x72\x69\x74\x79\x54\x6F\x6B\x65\x6E","\x63\x6F\x6E\x63\x61\x74","\x70\x61\x73\x73\x77\x6F\x72\x64","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x73\x65\x72\x76\x65\x72\x55\x52\x4C","\x73\x65\x72\x76\x65\x72\x55\x72\x6C","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x6C\x6F\x67\x69\x6E","\x71\x75\x65\x75\x65","\x6E\x61\x6D\x65","\x6D\x6F\x6E\x69\x74\x6F\x72\x5F\x66\x6F\x72\x6D\x61\x74","\x66\x69\x6E\x64\x4F\x6E\x65","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x20\x65\x6E\x61\x62\x6C\x65\x64\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x51\x75\x65\x75\x65","\x72\x65\x63\x6F\x72\x64\x45\x6E\x61\x62\x6C\x65","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x51\x75\x65\x75\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x20\x6F\x72\x20\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x20\x6E\x6F\x74\x20\x65\x6E\x61\x62\x6C\x65\x64","\x72\x6F\x75\x74\x65\x49\x64","\x69\x64","\x72\x65\x63\x6F\x72\x64","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x20\x65\x6E\x61\x62\x6C\x65\x64\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x52\x6F\x75\x74\x65\x20\x4F\x75\x74\x62\x6F\x75\x6E\x64","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x52\x6F\x75\x74\x65\x20\x4F\x75\x74\x62\x6F\x75\x6E\x64\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x20\x6F\x72\x20\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x20\x6E\x6F\x74\x20\x65\x6E\x61\x62\x6C\x65\x64","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x41\x67\x65\x6E\x74\x20\x74\x6F\x20\x73\x65\x61\x72\x63\x68\x3A","\x65\x78\x65\x63\x75\x74\x65","\x55\x73\x65\x72","\x73\x6F\x62\x6A\x65\x63\x74","","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x76\x6F\x69\x63\x65","\x43\x68\x61\x6E\x6E\x65\x6C\x20\x6E\x6F\x74\x20\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x64\x3A","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x55\x52\x4C","\x25\x73\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73\x2F\x25\x73\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64\x3F\x74\x79\x70\x65\x3D\x75\x6E\x69\x71\x75\x65\x69\x64","\x75\x6E\x69\x71\x75\x65\x69\x64","\x66\x6F\x72\x6D\x61\x74","\x72\x65\x73\x75\x6C\x74","\x6C\x65\x6E\x67\x74\x68","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x41\x67\x65\x6E\x74\x20\x66\x6F\x75\x6E\x64\x3A","\x61\x67\x65\x6E\x74","\x4E\x61\x6D\x65","\x66\x69\x72\x73\x74","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x41\x67\x65\x6E\x74\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x2E\x20\x55\x73\x65\x20\x74\x68\x65\x20\x61\x64\x6D\x69\x6E\x20\x61\x63\x63\x6F\x75\x6E\x74","\x69\x64\x65\x6E\x74\x69\x74\x79","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x41\x64\x6D\x69\x6E\x20\x73\x65\x6C\x65\x63\x74\x65\x64","\x75\x73\x65\x72\x5F\x69\x64","\x64\x69\x73\x70\x6C\x61\x79\x5F\x6E\x61\x6D\x65","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x43\x6F\x6E\x74\x61\x63\x74\x20\x74\x6F\x20\x73\x65\x61\x72\x63\x68\x3A","\x43\x6F\x6E\x74\x61\x63\x74","\x50\x68\x6F\x6E\x65","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x64\x65\x73\x74\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x64\x65\x73\x74\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x43\x6F\x6E\x74\x61\x63\x74\x20\x66\x6F\x75\x6E\x64\x3A","\x65\x6E\x64\x75\x73\x65\x72","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x43\x6F\x6E\x74\x61\x63\x74\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x3A","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x4C\x65\x61\x64\x20\x74\x6F\x20\x73\x65\x61\x72\x63\x68\x3A","\x4C\x65\x61\x64","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x4C\x65\x61\x64\x20\x66\x6F\x75\x6E\x64\x3A","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x43\x6F\x6E\x74\x61\x63\x74\x2F\x4C\x65\x61\x64\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x3A","\x63\x72\x65\x61\x74\x65","\x4E\x6F\x20\x43\x6F\x6D\x70\x61\x6E\x79","\x4C\x61\x73\x74\x4E\x61\x6D\x65","\x43\x61\x6C\x6C\x65\x72\x20\x2D\x20\x25\x73","\x3C\x75\x6E\x6B\x6E\x6F\x77\x6E\x3E","\x73\x75\x63\x63\x65\x73\x73","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x4C\x65\x61\x64\x20\x63\x72\x65\x61\x74\x65\x64\x3A\x20","\x49\x64","\x75\x74\x63","\x76\x61\x6C\x75\x65","\x66\x6F\x72\x45\x61\x63\x68","\x54\x61\x73\x6B","\x53\x75\x62\x6A\x65\x63\x74","\x73\x6F\x72\x74\x42\x79","\x74\x79\x70\x65","\x73\x74\x72\x69\x6E\x67","\x63\x6F\x6E\x74\x65\x6E\x74","\x70\x75\x73\x68","\x76\x61\x72\x69\x61\x62\x6C\x65","\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65","\x63\x75\x73\x74\x6F\x6D\x56\x61\x72\x69\x61\x62\x6C\x65","\x56\x61\x72\x69\x61\x62\x6C\x65","\x20","\x6A\x6F\x69\x6E","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x6B\x65\x79\x56\x61\x6C\x75\x65","\x6B\x65\x79\x54\x79\x70\x65","\x6B\x65\x79","\x25\x73\x3A\x20\x25\x73","\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74","\x0A","\x46\x69\x65\x6C\x64","\x69\x64\x46\x69\x65\x6C\x64","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x54\x61\x73\x6B\x20\x63\x72\x65\x61\x74\x65\x64\x20","\x74\x61\x73\x6B\x49\x64","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65","\x65\x76\x65\x6E\x74\x43\x68\x61\x6E\x6E\x65\x6C","\x65\x78\x69\x74\x53\x74\x61\x74\x75\x73","\x74\x69\x63\x6B\x65\x74\x49\x64","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x49\x64","\x75\x72\x6C","\x25\x73\x2F\x25\x73\x2F\x65","\x69\x6E\x73\x74\x61\x6E\x63\x65\x55\x72\x6C","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x54\x61\x73\x6B\x20\x25\x73\x20\x64\x69\x73\x70\x6C\x61\x79\x65\x64\x20\x74\x6F\x20\x61\x67\x65\x6E\x74\x20\x25\x73","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x74\x61\x73\x6B\x20\x63\x72\x65\x61\x74\x69\x6F\x6E","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x4D\x65\x73\x73\x61\x67\x65\x3A","\x6D\x65\x73\x73\x61\x67\x65","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x53\x74\x61\x63\x6B\x3A","\x73\x74\x61\x63\x6B","\x66\x61\x69\x6C\x65\x64","\x5B\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x52\x65\x70\x6F\x72\x74\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x20\x63\x72\x65\x61\x74\x65","\x73\x75\x62\x73\x74\x72","\x2F","\x65\x78\x70\x6F\x72\x74\x73"];_0x3b29[0];var _=require(_0x3b29[1]);var util=require(_0x3b29[2]);var jsforce=require(_0x3b29[3]);var moment=require(_0x3b29[4]);var SalesforceIntegration=require(_0x3b29[6])[_0x3b29[5]];var SalesforceConfiguration=require(_0x3b29[6])[_0x3b29[7]];var ReportIntegration=require(_0x3b29[6])[_0x3b29[8]];var VoiceQueue=require(_0x3b29[6])[_0x3b29[9]];var VoiceExtension=require(_0x3b29[6])[_0x3b29[10]];function Salesforce(){console[_0x3b29[12]](_0x3b29[11])}Salesforce[_0x3b29[14]][_0x3b29[13]]= function(_0xc58fxb,_0xc58fxc,_0xc58fxd,_0xc58fxe,_0xc58fxf,_0xc58fx10){var _0xc58fx11={connection:undefined,configuration:undefined,agent:undefined,enduser:undefined,taskId:undefined,recordEnable:false,serverURL:undefined};if(!_0xc58fxb|| !_0xc58fxc){console[_0x3b29[16]](_0x3b29[15]);return};SalesforceConfiguration[_0x3b29[19]]({where:{id:_0xc58fxc,AccountId:_0xc58fxb},include:[{all:true,include:[{all:true}]}]})[_0x3b29[18]](handleEntityNotFound())[_0x3b29[18]](handleConnection(_0xc58fx11))[_0x3b29[18]](searchQueue(_0xc58fxf))[_0x3b29[18]](handleQueueRecordings(_0xc58fx11,_0xc58fxf))[_0x3b29[18]](searchRoute(_0xc58fxf))[_0x3b29[18]](handleOutboundRecordings(_0xc58fx11,_0xc58fxf))[_0x3b29[18]](searchAgent(_0xc58fx11,_0xc58fxd,_0xc58fxf))[_0x3b29[18]](handleAgent(_0xc58fx11,_0xc58fxd,_0xc58fxf))[_0x3b29[18]](searchAdmin(_0xc58fx11))[_0x3b29[18]](handleAdmin(_0xc58fx11))[_0x3b29[18]](searchContact(_0xc58fx11,_0xc58fxd,_0xc58fxf,_0xc58fxe))[_0x3b29[18]](handleContact(_0xc58fx11,_0xc58fxd,_0xc58fxf,_0xc58fxe))[_0x3b29[18]](searchLead(_0xc58fx11,_0xc58fxd,_0xc58fxf,_0xc58fxe))[_0x3b29[18]](handleLead(_0xc58fx11,_0xc58fxd,_0xc58fxf,_0xc58fxe))[_0x3b29[18]](leadCreation(_0xc58fx11,_0xc58fxd,_0xc58fxf,_0xc58fxe))[_0x3b29[18]](handleLeadCreation(_0xc58fx11,_0xc58fxd,_0xc58fxf,_0xc58fxe))[_0x3b29[18]](taskCreation(_0xc58fx11,_0xc58fxf,_0xc58fx10))[_0x3b29[18]](handleTaskDisplay(_0xc58fx11))[_0x3b29[18]](handleReportIntegration(_0xc58fx11,_0xc58fxd,_0xc58fxf,_0xc58fxb))[_0x3b29[18]](handleEnd(_0xc58fx11))[_0x3b29[17]](handleError(_0xc58fx11,_0xc58fxd,_0xc58fxf,_0xc58fxb))};function handleEntityNotFound(){return function(_0xc58fx13){if(!_0xc58fx13){return null};return _0xc58fx13}}function handleConnection(_0xc58fx11){return function(_0xc58fx15){_0xc58fx11[_0x3b29[20]]= new jsforce.Connection({oauth2:{loginUrl:_0xc58fx15[_0x3b29[22]][_0x3b29[21]]?_0xc58fx15[_0x3b29[22]][_0x3b29[21]]:_0x3b29[23],clientId:_0xc58fx15[_0x3b29[22]][_0x3b29[24]],clientSecret:_0xc58fx15[_0x3b29[22]][_0x3b29[25]]}});var _0xc58fx16=_0xc58fx15[_0x3b29[22]][_0x3b29[28]][_0x3b29[27]](_0xc58fx15[_0x3b29[22]][_0x3b29[26]]);_0xc58fx11[_0x3b29[29]]= _0xc58fx15;_0xc58fx11[_0x3b29[30]]= _0xc58fx15[_0x3b29[22]][_0x3b29[31]];return _0xc58fx11[_0x3b29[20]][_0x3b29[33]](_0xc58fx15[_0x3b29[22]][_0x3b29[32]],_0xc58fx16)}}function searchQueue(_0xc58fxf){return function(){if(_0xc58fxf[_0x3b29[34]]){return VoiceQueue[_0x3b29[37]]({where:{name:_0xc58fxf[_0x3b29[34]]},attributes:[_0x3b29[35],_0x3b29[36]]})}else {return}}}function handleQueueRecordings(_0xc58fx11,_0xc58fxf){return function(_0xc58fx19){if(_0xc58fxf[_0x3b29[34]]){if(_0xc58fx19&& _0xc58fx19[_0x3b29[36]]){console[_0x3b29[12]](_0x3b29[38],_0xc58fx19[_0x3b29[35]]);_0xc58fx11[_0x3b29[39]]= true}else {_0xc58fx11[_0x3b29[39]]= false;console[_0x3b29[12]](_0x3b29[40])}};return}}function searchRoute(_0xc58fxf){return function(){if(_0xc58fxf[_0x3b29[41]]){return VoiceExtension[_0x3b29[37]]({where:{id:_0xc58fxf[_0x3b29[41]]},attributes:[_0x3b29[42],_0x3b29[43]]})}else {return}}}function handleOutboundRecordings(_0xc58fx11,_0xc58fxf){return function(_0xc58fx1c){if(_0xc58fxf[_0x3b29[41]]){if(_0xc58fx1c&& _0xc58fx1c[_0x3b29[43]]){console[_0x3b29[12]](_0x3b29[44],_0xc58fx1c[_0x3b29[42]]);_0xc58fx11[_0x3b29[39]]= true}else {_0xc58fx11[_0x3b29[39]]= false;console[_0x3b29[12]](_0x3b29[45])}};return}}function searchAgent(_0xc58fx11,_0xc58fxd,_0xc58fxf){return function(){console[_0x3b29[12]](_0x3b29[46],getValueFromPropertyName(_0xc58fxf,getAgentSearchPropertyFromChannel(_0xc58fxd)));return _0xc58fx11[_0x3b29[20]][_0x3b29[49]](_0x3b29[48])[_0x3b29[19]]({Name:getValueFromPropertyName(_0xc58fxf,getAgentSearchPropertyFromChannel(_0xc58fxd))},{Id:1,Username:1,Name:1})[_0x3b29[47]]()}}function getAgentSearchPropertyFromChannel(_0xc58fxd){var _0xc58fx1f=_0x3b29[50];if(_0xc58fxd){switch(_0xc58fxd){case _0x3b29[52]:_0xc58fx1f= _0x3b29[51];break;default:_0xc58fx1f= _0x3b29[51];console[_0x3b29[16]](_0x3b29[53],_0xc58fxd)}};return _0xc58fx1f}function getValueFromPropertyName(_0xc58fxf,_0xc58fx1f,_0xc58fx11){if(_0xc58fx1f=== _0x3b29[54]){if(_0xc58fx11&& _0xc58fx11[_0x3b29[39]]&& _0xc58fx11[_0x3b29[30]]){return util[_0x3b29[57]](_0x3b29[55],stripTrailingSlash(_0xc58fx11[_0x3b29[30]]),_0xc58fxf[_0x3b29[56]])}else {return null}}else {return _[_0x3b29[58]](_0xc58fxf,_0xc58fx1f)}}function handleAgent(_0xc58fx11,_0xc58fxd,_0xc58fx22){return function(_0xc58fxf){if(_0xc58fxf[_0x3b29[59]]> 0){console[_0x3b29[12]](_0x3b29[60],getValueFromPropertyName(_0xc58fx22,getAgentSearchPropertyFromChannel(_0xc58fxd)));_0xc58fx11[_0x3b29[61]]= getMatchObject(_0xc58fxf,_0x3b29[62],getValueFromPropertyName(_0xc58fx22,getAgentSearchPropertyFromChannel(_0xc58fxd)));return _0xc58fx11[_0x3b29[61]]};return}}function getMatchObject(_0xc58fx24,_0xc58fx1f,_0xc58fx25){var _0xc58fx26=_[_0x3b29[19]](_0xc58fx24,{property:_0xc58fx25});if(_0xc58fx26){return _0xc58fx26};return _[_0x3b29[63]](_0xc58fx24)}function searchAdmin(_0xc58fx11){return function(_0xc58fxf){if(_0xc58fxf){return};console[_0x3b29[12]](_0x3b29[64]);return _0xc58fx11[_0x3b29[20]][_0x3b29[65]]()}}function handleAdmin(_0xc58fx11){return function(_0xc58fxf){if(!_0xc58fxf){return};if(_0xc58fxf){console[_0x3b29[12]](_0x3b29[66]);_0xc58fx11[_0x3b29[61]]= {Id:_0xc58fxf[_0x3b29[67]],Name:_0xc58fxf[_0x3b29[68]],Username:_0xc58fxf[_0x3b29[32]]}};return}}function searchContact(_0xc58fx11,_0xc58fxd,_0xc58fxf,_0xc58fxe){return function(){console[_0x3b29[12]](_0x3b29[69],getValueFromPropertyName(_0xc58fxf,getEndUserSearchPropertyFromChannel(_0xc58fxd,_0xc58fxe)));var _0xc58fx2a={};_0xc58fx2a[getEndUserSearchQueryFromChannel(_0xc58fxd)]= getValueFromPropertyName(_0xc58fxf,getEndUserSearchPropertyFromChannel(_0xc58fxd,_0xc58fxe));return _0xc58fx11[_0x3b29[20]][_0x3b29[49]](_0x3b29[70])[_0x3b29[19]](_0xc58fx2a,{Id:1,Name:1})[_0x3b29[47]]()}}function getEndUserSearchQueryFromChannel(_0xc58fxd){var _0xc58fx1f=_0x3b29[50];if(_0xc58fxd){switch(_0xc58fxd){case _0x3b29[52]:_0xc58fx1f= _0x3b29[71];break;default:_0xc58fx1f= _0x3b29[71];console[_0x3b29[16]](_0x3b29[53],_0xc58fxd)}};return _0xc58fx1f}function getEndUserSearchPropertyFromChannel(_0xc58fxd,_0xc58fxe){var _0xc58fx1f=_0x3b29[50];if(_0xc58fxd){switch(_0xc58fxd){case _0x3b29[52]:if(_0xc58fxe=== _0x3b29[72]){_0xc58fx1f= _0x3b29[73]}else {if(_0xc58fxe=== _0x3b29[34]){_0xc58fx1f= _0x3b29[74]}};break;default:_0xc58fx1f= _0x3b29[74];console[_0x3b29[16]](_0x3b29[53],_0xc58fxd)}};return _0xc58fx1f}function getEndUserNamePropertyFromChannel(_0xc58fxd,_0xc58fxe){var _0xc58fx1f=_0x3b29[50];if(_0xc58fxd){switch(_0xc58fxd){case _0x3b29[52]:if(_0xc58fxe=== _0x3b29[72]){_0xc58fx1f= _0x3b29[75]}else {if(_0xc58fxe=== _0x3b29[34]){_0xc58fx1f= _0x3b29[76]}};break;default:_0xc58fx1f= _0x3b29[76];console[_0x3b29[16]](_0x3b29[53],_0xc58fxd)}};return _0xc58fx1f}function handleContact(_0xc58fx11,_0xc58fxd,_0xc58fx22,_0xc58fxe){return function(_0xc58fxf){if(_0xc58fxf[_0x3b29[59]]> 0){console[_0x3b29[12]](_0x3b29[77],getValueFromPropertyName(_0xc58fx22,getEndUserSearchPropertyFromChannel(_0xc58fxd,_0xc58fxe)));_0xc58fx11[_0x3b29[78]]= _0xc58fxf[0];return _0xc58fx11[_0x3b29[78]]};console[_0x3b29[12]](_0x3b29[79],getValueFromPropertyName(_0xc58fx22,getEndUserSearchPropertyFromChannel(_0xc58fxd,_0xc58fxe)));return}}function searchLead(_0xc58fx11,_0xc58fxd,_0xc58fx22,_0xc58fxe){return function(_0xc58fxf){if(!_0xc58fxf){console[_0x3b29[12]](_0x3b29[80],getValueFromPropertyName(_0xc58fx22,getEndUserSearchPropertyFromChannel(_0xc58fxd,_0xc58fxe)));var _0xc58fx2a={};_0xc58fx2a[getEndUserSearchQueryFromChannel(_0xc58fxd)]= getValueFromPropertyName(_0xc58fx22,getEndUserSearchPropertyFromChannel(_0xc58fxd,_0xc58fxe));return _0xc58fx11[_0x3b29[20]][_0x3b29[49]](_0x3b29[81])[_0x3b29[19]](_0xc58fx2a,{Id:1,Name:1})[_0x3b29[47]]()};return}}function handleLead(_0xc58fx11,_0xc58fxd,_0xc58fx22,_0xc58fxe){return function(_0xc58fxf){if(_0xc58fxf&& _0xc58fxf[_0x3b29[59]]> 0){console[_0x3b29[12]](_0x3b29[82],getValueFromPropertyName(_0xc58fx22,getEndUserSearchPropertyFromChannel(_0xc58fxd,_0xc58fxe)));_0xc58fx11[_0x3b29[78]]= _0xc58fxf[0];return _0xc58fx11[_0x3b29[78]]};return}}function leadCreation(_0xc58fx11,_0xc58fxd,_0xc58fx22,_0xc58fxe){return function(_0xc58fxf){if(_0xc58fxf|| _0xc58fx11[_0x3b29[78]]){return};console[_0x3b29[12]](_0x3b29[83],getValueFromPropertyName(_0xc58fx22,getEndUserSearchPropertyFromChannel(_0xc58fxd,_0xc58fxe)));return _0xc58fx11[_0x3b29[20]][_0x3b29[49]](_0x3b29[81])[_0x3b29[84]](getJsonForEndUserCreation(_0xc58fxd,_0xc58fx22,_0xc58fxe))}}function getJsonForEndUserCreation(_0xc58fxd,_0xc58fxf,_0xc58fxe){var _0xc58fx33={Company:_0x3b29[85]};switch(_0xc58fxd){case _0x3b29[52]:if(_0xc58fxe=== _0x3b29[34]){if(isValidName(_0xc58fxf[_0x3b29[76]])){_0xc58fx33[_0x3b29[86]]= getValueFromPropertyName(_0xc58fxf,getEndUserNamePropertyFromChannel(_0xc58fxd,_0xc58fxe))}else {_0xc58fx33[_0x3b29[86]]= util[_0x3b29[57]](_0x3b29[87],getValueFromPropertyName(_0xc58fxf,getEndUserSearchPropertyFromChannel(_0xc58fxd,_0xc58fxe)))}}else {if(_0xc58fxe=== _0x3b29[72]){if(isValidName(_0xc58fxf[_0x3b29[75]])){_0xc58fx33[_0x3b29[86]]= getValueFromPropertyName(_0xc58fxf,getEndUserNamePropertyFromChannel(_0xc58fxd,_0xc58fxe))}else {_0xc58fx33[_0x3b29[86]]= util[_0x3b29[57]](_0x3b29[87],getValueFromPropertyName(_0xc58fxf,getEndUserSearchPropertyFromChannel(_0xc58fxd,_0xc58fxe)))}}};_0xc58fx33[_0x3b29[71]]= getValueFromPropertyName(_0xc58fxf,getEndUserSearchPropertyFromChannel(_0xc58fxd,_0xc58fxe));break;default:console[_0x3b29[16]](_0x3b29[53],_0xc58fxd)};return _0xc58fx33}function isValidName(_0xc58fx35){return _0xc58fx35&& _0xc58fx35!== _0x3b29[88]}function handleLeadCreation(_0xc58fx11,_0xc58fxd,_0xc58fx22,_0xc58fxe){return function(_0xc58fxf){if(!_0xc58fxf){return};if(_0xc58fxf&& _0xc58fxf[_0x3b29[89]]){console[_0x3b29[12]](_0x3b29[90],getValueFromPropertyName(_0xc58fx22,getEndUserSearchPropertyFromChannel(_0xc58fxd,_0xc58fxe)));_0xc58fx11[_0x3b29[78]]= {Id:_0xc58fxf[_0x3b29[42]]}};return}}function taskCreation(_0xc58fx11,_0xc58fx22,_0xc58fx10){return function(){var _0xc58fx38={WhoId:_0xc58fx11[_0x3b29[78]][_0x3b29[91]],OwnerId:_0xc58fx11[_0x3b29[61]][_0x3b29[91]],ActivityDate:moment[_0x3b29[92]](),IsReminderSet:false,IsRecurrence:false,Subject:createSubjectFromConfiguration(_0xc58fx11,_0xc58fx22,_0xc58fx10),Description:createDescriptionFromConfiguration(_0xc58fx11,_0xc58fx22,_0xc58fx10)};var _0xc58fx39=createCustomFieldsFromConfiguration(_0xc58fx11,_0xc58fx22,_0xc58fx10);if(_0xc58fx39[_0x3b29[59]]> 0){_[_0x3b29[94]](_0xc58fx39,function(_0xc58fx3a){_0xc58fx38[_0xc58fx3a[_0x3b29[42]]]= _0xc58fx3a[_0x3b29[93]]})};return _0xc58fx11[_0x3b29[20]][_0x3b29[49]](_0x3b29[95])[_0x3b29[84]](_0xc58fx38)}}function createSubjectFromConfiguration(_0xc58fx11,_0xc58fx22,_0xc58fx10){var _0xc58fx3c=_0x3b29[50];var _0xc58fx3d=[];if(_0xc58fx11[_0x3b29[29]][_0x3b29[96]][_0x3b29[59]]> 0){var _0xc58fx3e=_[_0x3b29[97]](_0xc58fx11[_0x3b29[29]].Subject,[_0x3b29[42]]);_[_0x3b29[94]](_0xc58fx3e,function(_0xc58fx3f){if(_0xc58fx3f[_0x3b29[98]]=== _0x3b29[99]){_0xc58fx3d[_0x3b29[101]](_0xc58fx3f[_0x3b29[100]])}else {if(_0xc58fx3f[_0x3b29[98]]=== _0x3b29[102]&& _0xc58fx3f[_0x3b29[103]]){var _0xc58fx40=getValueFromPropertyName(_0xc58fx22,_0xc58fx3f[_0x3b29[103]],_0xc58fx11);if(_0xc58fx40){_0xc58fx3d[_0x3b29[101]](_0xc58fx40.toString())}}else {if(_0xc58fx3f[_0x3b29[98]]=== _0x3b29[104]&& _0xc58fx3f[_0x3b29[105]]&& _0xc58fx3f[_0x3b29[105]][_0x3b29[35]]){_0xc58fx10[_0xc58fx3f[_0x3b29[105]][_0x3b29[35]]]&& _0xc58fx3d[_0x3b29[101]](_0xc58fx10[_0xc58fx3f[_0x3b29[105]][_0x3b29[35]]].toString())}}}});_0xc58fx3c= _0xc58fx3d[_0x3b29[107]](_0x3b29[106])};return _0xc58fx3c}function createDescriptionFromConfiguration(_0xc58fx11,_0xc58fx22,_0xc58fx10){var _0xc58fx42=_0x3b29[50];var _0xc58fx3d=[];if(_0xc58fx11[_0x3b29[29]][_0x3b29[108]][_0x3b29[59]]> 0){var _0xc58fx43=_[_0x3b29[97]](_0xc58fx11[_0x3b29[29]].Description,[_0x3b29[42]]);_[_0x3b29[94]](_0xc58fx43,function(_0xc58fx3f){if(_0xc58fx3f[_0x3b29[98]]=== _0x3b29[99]){_0xc58fx3d[_0x3b29[101]](_0xc58fx3f[_0x3b29[100]])}else {if(_0xc58fx3f[_0x3b29[98]]=== _0x3b29[109]){if(_0xc58fx3f[_0x3b29[110]]=== _0x3b29[99]&& _0xc58fx3f[_0x3b29[111]]){_0xc58fx3d[_0x3b29[101]](util[_0x3b29[57]](_0x3b29[112],_0xc58fx3f[_0x3b29[111]],_0xc58fx3f[_0x3b29[113]]))}else {if(_0xc58fx3f[_0x3b29[110]]=== _0x3b29[102]&& _0xc58fx3f[_0x3b29[103]]&& _0xc58fx3f[_0x3b29[111]]){var _0xc58fx40=getValueFromPropertyName(_0xc58fx22,_0xc58fx3f[_0x3b29[103]],_0xc58fx11);if(_0xc58fx40){_0xc58fx3d[_0x3b29[101]](util[_0x3b29[57]](_0x3b29[112],_0xc58fx3f[_0x3b29[111]],_0xc58fx40.toString()))}}else {if(_0xc58fx3f[_0x3b29[110]]=== _0x3b29[104]&& _0xc58fx3f[_0x3b29[105]]&& _0xc58fx3f[_0x3b29[105]][_0x3b29[35]]&& _0xc58fx3f[_0x3b29[111]]){_0xc58fx10[_0xc58fx3f[_0x3b29[105]][_0x3b29[35]]]&& _0xc58fx3d[_0x3b29[101]](util[_0x3b29[57]](_0x3b29[112],_0xc58fx3f[_0x3b29[111]],_0xc58fx10[_0xc58fx3f[_0x3b29[105]][_0x3b29[35]]]))}}}}}});_0xc58fx42= _0xc58fx3d[_0x3b29[107]](_0x3b29[114])};return _0xc58fx42}function createCustomFieldsFromConfiguration(_0xc58fx11,_0xc58fx22,_0xc58fx10){var _0xc58fx45=[];var _0xc58fx46=[];if(_0xc58fx11[_0x3b29[29]][_0x3b29[115]][_0x3b29[59]]> 0){_0xc58fx45= _0xc58fx11[_0x3b29[29]][_0x3b29[115]];_[_0x3b29[94]](_0xc58fx45,function(_0xc58fx3a){if(_0xc58fx3a[_0x3b29[98]]=== _0x3b29[99]&& _0xc58fx3a[_0x3b29[116]]){_0xc58fx46[_0x3b29[101]]({id:_0xc58fx3a[_0x3b29[116]],value:_0xc58fx3a[_0x3b29[100]]})}else {if(_0xc58fx3a[_0x3b29[98]]=== _0x3b29[102]&& _0xc58fx3a[_0x3b29[103]]&& _0xc58fx3a[_0x3b29[116]]){var _0xc58fx40=getValueFromPropertyName(_0xc58fx22,_0xc58fx3a[_0x3b29[103]],_0xc58fx11);if(_0xc58fx40){_0xc58fx46[_0x3b29[101]]({id:_0xc58fx3a[_0x3b29[116]],value:_0xc58fx40.toString()})}}else {if(_0xc58fx3a[_0x3b29[98]]=== _0x3b29[104]&& _0xc58fx3a[_0x3b29[116]]&& _0xc58fx3a[_0x3b29[105]]&& _0xc58fx3a[_0x3b29[105]][_0x3b29[35]]){_0xc58fx10[_0xc58fx3a[_0x3b29[105]][_0x3b29[35]]]&& _0xc58fx46[_0x3b29[101]]({id:_0xc58fx3a[_0x3b29[116]],value:_0xc58fx10[_0xc58fx3a[_0x3b29[105]][_0x3b29[35]]].toString()})}}}})};return _0xc58fx46}function handleTaskDisplay(_0xc58fx11){return function(_0xc58fxf){if(_0xc58fxf&& _0xc58fxf[_0x3b29[89]]){console[_0x3b29[12]](_0x3b29[117],_0xc58fxf[_0x3b29[42]]);_0xc58fx11[_0x3b29[118]]= _0xc58fxf[_0x3b29[42]];return};return}}function handleReportIntegration(_0xc58fx11,_0xc58fxd,_0xc58fxf,_0xc58fxb){return function(){delete _0xc58fxf[_0x3b29[42]];_0xc58fxf[_0x3b29[119]]= _0x3b29[120];_0xc58fxf[_0x3b29[121]]= _0xc58fxd;_0xc58fxf[_0x3b29[122]]= _0x3b29[89];_0xc58fxf[_0x3b29[123]]= _0xc58fx11[_0x3b29[118]];_0xc58fxf[_0x3b29[124]]= _0xc58fxb;_0xc58fxf[_0x3b29[125]]= util[_0x3b29[57]](_0x3b29[126],_0xc58fx11[_0x3b29[20]][_0x3b29[127]],_0xc58fx11[_0x3b29[118]]);return ReportIntegration[_0x3b29[84]](_0xc58fxf)}}function handleEnd(_0xc58fx11,_0xc58fxf,_0xc58fxd){return function(){console[_0x3b29[12]](util[_0x3b29[57]](_0x3b29[128],_0xc58fx11[_0x3b29[118]],_0xc58fx11[_0x3b29[61]].Id));_0xc58fx11= undefined;return}}function handleError(_0xc58fx11,_0xc58fxd,_0xc58fxf,_0xc58fxb){return function(_0xc58fx4b){console[_0x3b29[16]](_0x3b29[129]);console[_0x3b29[16]](_0x3b29[130],_0xc58fx4b[_0x3b29[131]]);console[_0x3b29[16]](_0x3b29[132],_0xc58fx4b[_0x3b29[133]]);_0xc58fx11= undefined;delete _0xc58fxf[_0x3b29[42]];_0xc58fxf[_0x3b29[119]]= _0x3b29[120];_0xc58fxf[_0x3b29[121]]= _0xc58fxd;_0xc58fxf[_0x3b29[122]]= _0x3b29[134];_0xc58fxf[_0x3b29[124]]= _0xc58fxb;ReportIntegration[_0x3b29[84]](_0xc58fxf)[_0x3b29[18]](function(){return})[_0x3b29[17]](function(_0xc58fx4b){console[_0x3b29[16]](_0x3b29[135]);return})}}function stripTrailingSlash(_0xc58fx4d){if(_0xc58fx4d[_0x3b29[136]](-1) === _0x3b29[137]){return _0xc58fx4d[_0x3b29[136]](0,_0xc58fx4d[_0x3b29[59]]- 1)};return _0xc58fx4d}module[_0x3b29[138]]= Salesforce \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var jsforce = require('jsforce'); +var moment = require('moment'); + +var SalesforceIntegration = require('../../models').SalesforceIntegration; +var SalesforceConfiguration = require('../../models').SalesforceConfiguration; +var ReportIntegration = require('../../models').ReportIntegration; +var VoiceQueue = require('../../models').VoiceQueue; +var VoiceExtension = require('../../models').VoiceExtension; + +function Salesforce() { + console.log('Salesforce integration initialization...'); +} + +Salesforce.prototype.handleEvent = function(integrationId, configurationId, channel, subtype, data, variables) { + + var salesforceData = { + connection: undefined, + configuration: undefined, + agent: undefined, + enduser: undefined, + taskId: undefined, + recordEnable: false, + serverURL: undefined + }; + + if (!integrationId || !configurationId) { + console.error('Passed parameters are not enough to create a new ticket: miss IntegrationId or ConfigurationId'); + return; + } + + SalesforceConfiguration + .find({ + where: { + id: configurationId, + AccountId: integrationId + }, + include: [{ + all: true, + include: [{ + all: true + }] + }] + }) + .then(handleEntityNotFound()) + .then(handleConnection(salesforceData)) + .then(searchQueue(data)) + .then(handleQueueRecordings(salesforceData, data)) + .then(searchRoute(data)) + .then(handleOutboundRecordings(salesforceData, data)) + .then(searchAgent(salesforceData, channel, data)) + .then(handleAgent(salesforceData, channel, data)) + .then(searchAdmin(salesforceData)) + .then(handleAdmin(salesforceData)) + .then(searchContact(salesforceData, channel, data, subtype)) + .then(handleContact(salesforceData, channel, data, subtype)) + .then(searchLead(salesforceData, channel, data, subtype)) + .then(handleLead(salesforceData, channel, data, subtype)) + .then(leadCreation(salesforceData, channel, data, subtype)) + .then(handleLeadCreation(salesforceData, channel, data, subtype)) + .then(taskCreation(salesforceData, data, variables)) + .then(handleTaskDisplay(salesforceData)) + .then(handleReportIntegration(salesforceData, channel, data, integrationId)) + .then(handleEnd(salesforceData)) + .catch(handleError(salesforceData, channel, data, integrationId)); + +}; + +function handleEntityNotFound() { + return function(entity) { + if (!entity) { + return null; + } + return entity; + }; +} + +function handleConnection(salesforceData) { + return function(configuration) { + salesforceData.connection = new jsforce.Connection({ + oauth2: { + loginUrl: configuration.SalesforceAccount.remoteUri ? configuration.SalesforceAccount.remoteUri : 'https://login.salesforce.com', + clientId: configuration.SalesforceAccount.clientId, + clientSecret: configuration.SalesforceAccount.clientSecret + } + }); + var pwd = configuration.SalesforceAccount.password.concat(configuration.SalesforceAccount.securityToken); + salesforceData.configuration = configuration; + salesforceData.serverURL = configuration.SalesforceAccount.serverUrl; + return salesforceData.connection.login(configuration.SalesforceAccount.username, pwd); + } +} + +function searchQueue(data) { + return function() { + if (data.queue) { + return VoiceQueue.findOne({ + where: { + name: data.queue + }, + attributes: ['name', 'monitor_format'] + }); + } else { + return; + } + } +} + +function handleQueueRecordings(salesforceData, data) { + return function(queue) { + if (data.queue) { + if (queue && queue.monitor_format) { + console.log('[Salesforce] Recording enabled for the Queue', queue.name); + salesforceData.recordEnable = true; + } else { + salesforceData.recordEnable = false; + console.log('[Salesforce] Queue not found or Recording not enabled'); + } + } + return; + } +} + +function searchRoute(data) { + return function() { + if (data.routeId) { + return VoiceExtension.findOne({ + where: { + id: data.routeId + }, + attributes: ['id', 'record'] + }); + } else { + return; + } + } +} + +function handleOutboundRecordings(salesforceData, data) { + return function(route) { + if (data.routeId) { + if (route && route.record) { + console.log('[Salesforce] Recording enabled for the Route Outbound', route.id); + salesforceData.recordEnable = true; + } else { + salesforceData.recordEnable = false; + console.log('[Salesforce] Route Outbound not found or Recording not enabled'); + } + } + return; + } +} + +function searchAgent(salesforceData, channel, data) { + return function() { + console.log('[Salesforce] Agent to search:', getValueFromPropertyName(data, getAgentSearchPropertyFromChannel(channel))); + return salesforceData.connection.sobject("User") + .find({ + Name: getValueFromPropertyName(data, getAgentSearchPropertyFromChannel(channel)) + }, { + Id: 1, + Username: 1, + Name: 1 + }) + .execute(); + } +} + +function getAgentSearchPropertyFromChannel(channel) { + var property = ''; + if (channel) { + switch (channel) { + case 'voice': + property = 'membername'; + break; + default: + property = 'membername'; + console.error('Channel not recognized:', channel); + } + } + return property; +} + +function getValueFromPropertyName(data, property, salesforceData) { + if (property === 'recordingURL') { + if (salesforceData && salesforceData.recordEnable && salesforceData.serverURL) { + return util.format('%s/api/voice/recordings/%s/download?type=uniqueid', stripTrailingSlash(salesforceData.serverURL), data.uniqueid); + } else { + return null; + } + } else { + return _.result(data, property); + } +} + +function handleAgent(salesforceData, channel, event) { + return function(data) { + if (data.length > 0) { + console.log('[Salesforce] Agent found:', getValueFromPropertyName(event, getAgentSearchPropertyFromChannel(channel))); + salesforceData.agent = getMatchObject(data, 'Name', getValueFromPropertyName(event, getAgentSearchPropertyFromChannel(channel))); + return salesforceData.agent; + } + return; + } +} + +function getMatchObject(collection, property, valueToSearch) { + var valueFound = _.find(collection, { + property: valueToSearch + }); + if (valueFound) { + return valueFound; + } + return _.first(collection); +} + +function searchAdmin(salesforceData) { + return function(data) { + if (data) { + return; + } + console.log('[Salesforce] Agent not found. Use the admin account'); + return salesforceData.connection.identity(); + } +} + +function handleAdmin(salesforceData) { + return function(data) { + if (!data) { + return; + } + if (data) { + console.log('[Salesforce] Admin selected'); + salesforceData.agent = { + Id: data.user_id, + Name: data.display_name, + Username: data.username + }; + } + return; + } +} + +function searchContact(salesforceData, channel, data, subtype) { + return function() { + console.log('[Salesforce] Contact to search:', getValueFromPropertyName(data, getEndUserSearchPropertyFromChannel(channel, subtype))); + var query = {}; + query[getEndUserSearchQueryFromChannel(channel)] = getValueFromPropertyName(data, getEndUserSearchPropertyFromChannel(channel, subtype)); + return salesforceData.connection + .sobject("Contact") + .find(query, { + Id: 1, + Name: 1 + }) + .execute(); + } +} + +function getEndUserSearchQueryFromChannel(channel) { + var property = ''; + if (channel) { + switch (channel) { + case 'voice': + property = 'Phone'; + break; + default: + property = 'Phone'; + console.error('Channel not recognized:', channel); + } + } + return property; +} + +function getEndUserSearchPropertyFromChannel(channel, subtype) { + var property = ''; + if (channel) { + switch (channel) { + case 'voice': + if (subtype === 'outbound') { + property = 'destcalleridnum'; + } else if (subtype === 'queue') { + property = 'calleridnum'; + } + break; + default: + property = 'calleridnum'; + console.error('Channel not recognized:', channel); + } + } + return property; +} + +function getEndUserNamePropertyFromChannel(channel, subtype) { + var property = ''; + if (channel) { + switch (channel) { + case 'voice': + if (subtype === 'outbound') { + property = 'destcalleridname'; + } else if (subtype === 'queue') { + property = 'calleridname'; + } + break; + default: + property = 'calleridname'; + console.error('Channel not recognized:', channel); + } + } + return property; +} + +function handleContact(salesforceData, channel, event, subtype) { + return function(data) { + if (data.length > 0) { + console.log('[Salesforce] Contact found:', getValueFromPropertyName(event, getEndUserSearchPropertyFromChannel(channel, subtype))); + salesforceData.enduser = data[0]; + return salesforceData.enduser; + } + console.log('[Salesforce] Contact not found:', getValueFromPropertyName(event, getEndUserSearchPropertyFromChannel(channel, subtype))); + return; + } +} + +function searchLead(salesforceData, channel, event, subtype) { + return function(data) { + if (!data) { + console.log('[Salesforce] Lead to search:', getValueFromPropertyName(event, getEndUserSearchPropertyFromChannel(channel, subtype))); + var query = {}; + query[getEndUserSearchQueryFromChannel(channel)] = getValueFromPropertyName(event, getEndUserSearchPropertyFromChannel(channel, subtype)); + return salesforceData.connection + .sobject("Lead") + .find(query, { + Id: 1, + Name: 1 + }) + .execute(); + } + return; + } +} + +function handleLead(salesforceData, channel, event, subtype) { + return function(data) { + if (data && data.length > 0) { + console.log('[Salesforce] Lead found:', getValueFromPropertyName(event, getEndUserSearchPropertyFromChannel(channel, subtype))); + salesforceData.enduser = data[0]; + return salesforceData.enduser; + } + return; + } +} + +function leadCreation(salesforceData, channel, event, subtype) { + return function(data) { + if (data || salesforceData.enduser) { + return; + } + console.log('[Salesforce] Contact/Lead not found:', getValueFromPropertyName(event, getEndUserSearchPropertyFromChannel(channel, subtype))); + return salesforceData.connection + .sobject("Lead") + .create(getJsonForEndUserCreation(channel, event, subtype)); + } +} + +function getJsonForEndUserCreation(channel, data, subtype) { + var user = { + Company: 'No Company' + }; + + switch (channel) { + case 'voice': + if (subtype === 'queue') { + if (isValidName(data.calleridname)) { + user.LastName = getValueFromPropertyName(data, getEndUserNamePropertyFromChannel(channel, subtype)); + } else { + user.LastName = util.format('Caller - %s', getValueFromPropertyName(data, getEndUserSearchPropertyFromChannel(channel, subtype))) + } + } else if (subtype === 'outbound') { + if (isValidName(data.destcalleridname)) { + user.LastName = getValueFromPropertyName(data, getEndUserNamePropertyFromChannel(channel, subtype)); + } else { + user.LastName = util.format('Caller - %s', getValueFromPropertyName(data, getEndUserSearchPropertyFromChannel(channel, subtype))) + } + } + user.Phone = getValueFromPropertyName(data, getEndUserSearchPropertyFromChannel(channel, subtype)); + break; + default: + console.error('Channel not recognized:', channel); + } + + return user; +} + +function isValidName(name) { + return name && name !== ''; +} + +function handleLeadCreation(salesforceData, channel, event, subtype) { + return function(data) { + if (!data) { + return; + } + if (data && data.success) { + console.log('[Salesforce] Lead created: ', getValueFromPropertyName(event, getEndUserSearchPropertyFromChannel(channel, subtype))); + salesforceData.enduser = { + Id: data.id + }; + } + return; + } +} + +function taskCreation(salesforceData, event, variables) { + return function() { + var taskBody = { + //Standard Field + WhoId: salesforceData.enduser.Id, + OwnerId: salesforceData.agent.Id, + ActivityDate: moment.utc(), + IsReminderSet: false, + IsRecurrence: false, + //Configurated Field + Subject: createSubjectFromConfiguration(salesforceData, event, variables), + Description: createDescriptionFromConfiguration(salesforceData, event, variables) + }; + var fields = createCustomFieldsFromConfiguration(salesforceData, event, variables); + if (fields.length > 0) { + _.forEach(fields, function(item) { + taskBody[item.id] = item.value; + }); + } + // console.log('[Salesforce] Task body:', taskBody); + return salesforceData.connection + .sobject("Task") + .create(taskBody); + } +} + +function createSubjectFromConfiguration(salesforceData, event, variables) { + var subject = ''; + var stringsArray = []; + if (salesforceData.configuration.Subject.length > 0) { + var subjectConfiguration = _.sortBy(salesforceData.configuration.Subject, ['id']); + _.forEach(subjectConfiguration, function(value) { + if (value.type === 'string') { + stringsArray.push(value.content); + } else if (value.type === 'variable' && value.variableName) { + var prop = getValueFromPropertyName(event, value.variableName, salesforceData); + if (prop) { + stringsArray.push(prop.toString()); + } + } else if (value.type === 'customVariable' && value.Variable && value.Variable.name) { + variables[value.Variable.name] && stringsArray.push(variables[value.Variable.name].toString()); + } + }); + subject = stringsArray.join(' '); + } + return subject; +} + +function createDescriptionFromConfiguration(salesforceData, event, variables) { + var description = ''; + var stringsArray = []; + if (salesforceData.configuration.Description.length > 0) { + var descriptionConfiguration = _.sortBy(salesforceData.configuration.Description, ['id']); + _.forEach(descriptionConfiguration, function(value) { + if (value.type === 'string') { + stringsArray.push(value.content); + } else if (value.type === 'keyValue') { + if (value.keyType === 'string' && value.key) { + stringsArray.push(util.format('%s: %s', value.key, value.keyContent)); + } else if (value.keyType === 'variable' && value.variableName && value.key) { + var prop = getValueFromPropertyName(event, value.variableName, salesforceData); + if (prop) { + stringsArray.push(util.format('%s: %s', value.key, prop.toString())); + } + } else if (value.keyType === 'customVariable' && value.Variable && value.Variable.name && value.key) { + variables[value.Variable.name] && stringsArray.push(util.format('%s: %s', value.key, variables[value.Variable.name])); + } + } + }); + description = stringsArray.join('\n'); + } + return description; +} + +function createCustomFieldsFromConfiguration(salesforceData, event, variables) { + var customFields = []; + var fieldArray = []; + if (salesforceData.configuration.Field.length > 0) { + customFields = salesforceData.configuration.Field; + _.forEach(customFields, function(item) { + if (item.type === 'string' && item.idField) { + fieldArray.push({ + id: item.idField, + value: item.content + }); + } else if (item.type === 'variable' && item.variableName && item.idField) { + var prop = getValueFromPropertyName(event, item.variableName, salesforceData); + if (prop) { + fieldArray.push({ + id: item.idField, + value: prop.toString() + }); + } + } else if (item.type === 'customVariable' && item.idField && item.Variable && item.Variable.name) { + variables[item.Variable.name] && fieldArray.push({ + id: item.idField, + value: variables[item.Variable.name].toString() + }); + } + }); + } + return fieldArray; +} + +function handleTaskDisplay(salesforceData) { + return function(data) { + if (data && data.success) { + console.log('[Salesforce] Task created ', data.id); + salesforceData.taskId = data.id; + return; + } + return; + } +} + +function handleReportIntegration(salesforceData, channel, data, integrationId) { + return function() { + delete data.id; + data.integration = 'salesforce'; + data.eventChannel = channel; + data.exitStatus = 'success'; + data.ticketId = salesforceData.taskId; + data.integrationId = integrationId; + data.url = util.format('%s/%s/e', salesforceData.connection.instanceUrl, salesforceData.taskId); + return ReportIntegration.create(data); + } +} + +function handleEnd(salesforceData, data, channel) { + return function() { + console.log(util.format('[Salesforce] Task %s displayed to agent %s', salesforceData.taskId, salesforceData.agent.Id)); + salesforceData = undefined; + return; + } +} + +function handleError(salesforceData, channel, data, integrationId) { + return function(err) { + console.error('[Salesforce] Error in task creation'); + console.error('[Salesforce] Message:', err.message); + console.error('[Salesforce] Stack:', err.stack); + salesforceData = undefined; + + delete data.id; + data.integration = 'salesforce'; + data.eventChannel = channel; + data.exitStatus = 'failed'; + data.integrationId = integrationId; + ReportIntegration + .create(data) + .then(function() { + return; + }) + .catch(function(err) { + console.error('[Salesforce] Error in Report integration create'); + return; + }); + } +} + +function stripTrailingSlash(str) { + if (str.substr(-1) === '/') { + return str.substr(0, str.length - 1); + } + return str; +} + +module.exports = Salesforce; diff --git a/server/config/integrations/zendesk.js b/server/config/integrations/zendesk.js index bfec035..b560a80 100644 --- a/server/config/integrations/zendesk.js +++ b/server/config/integrations/zendesk.js @@ -1 +1,637 @@ -var _0xf062=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x72\x65\x71\x75\x65\x73\x74\x2D\x70\x72\x6F\x6D\x69\x73\x65","\x5A\x65\x6E\x64\x65\x73\x6B\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x5A\x65\x6E\x64\x65\x73\x6B\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x55\x73\x65\x72","\x5A\x65\x6E\x64\x65\x73\x6B\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x68\x61\x6E\x64\x6C\x65\x45\x76\x65\x6E\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x50\x61\x73\x73\x65\x64\x20\x70\x61\x72\x61\x6D\x65\x74\x65\x72\x73\x20\x61\x72\x65\x20\x6E\x6F\x74\x20\x65\x6E\x6F\x75\x67\x68\x20\x74\x6F\x20\x63\x72\x65\x61\x74\x65\x20\x61\x20\x6E\x65\x77\x20\x74\x69\x63\x6B\x65\x74\x3A\x20\x6D\x69\x73\x73\x20\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x49\x64\x20\x6F\x72\x20\x43\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x49\x64","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64","\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x75\x72\x69","\x68\x65\x61\x64\x65\x72\x73","\x73\x65\x72\x76\x65\x72\x55\x52\x4C","\x73\x65\x72\x76\x65\x72\x55\x72\x6C","\x5A\x65\x6E\x64\x65\x73\x6B\x41\x63\x63\x6F\x75\x6E\x74","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x61\x67\x65\x6E\x74","\x73\x63\x6F\x70\x65","\x61\x67\x65\x6E\x74\x4E\x61\x6D\x65","\x53\x65\x61\x72\x63\x68\x69\x6E\x67\x20\x51\x75\x65\x75\x65\x2E\x2E\x2E","\x71\x75\x65\x75\x65","\x6E\x61\x6D\x65","\x6D\x6F\x6E\x69\x74\x6F\x72\x5F\x66\x6F\x72\x6D\x61\x74","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x20\x65\x6E\x61\x62\x6C\x65\x64\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x51\x75\x65\x75\x65","\x72\x65\x63\x6F\x72\x64\x45\x6E\x61\x62\x6C\x65","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x51\x75\x65\x75\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x20\x6F\x72\x20\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x20\x6E\x6F\x74\x20\x65\x6E\x61\x62\x6C\x65\x64","\x72\x6F\x75\x74\x65\x49\x64","\x69\x64","\x72\x65\x63\x6F\x72\x64","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x20\x65\x6E\x61\x62\x6C\x65\x64\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x52\x6F\x75\x74\x65\x20\x4F\x75\x74\x62\x6F\x75\x6E\x64","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x52\x6F\x75\x74\x65\x20\x4F\x75\x74\x62\x6F\x75\x6E\x64\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x20\x6F\x72\x20\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x20\x6E\x6F\x74\x20\x65\x6E\x61\x62\x6C\x65\x64","\x72\x65\x6D\x6F\x74\x65\x55\x72\x69","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x6A\x73\x6F\x6E","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x61\x75\x74\x68\x54\x79\x70\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x3A","\x74\x6F\x6B\x65\x6E","\x2F\x74\x6F\x6B\x65\x6E\x3A","\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E","\x42\x61\x73\x69\x63\x20","\x62\x61\x73\x65\x36\x34","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x41\x67\x65\x6E\x74\x20\x74\x6F\x20\x73\x65\x61\x72\x63\x68\x3A","\x2F\x73\x65\x61\x72\x63\x68\x2E\x6A\x73\x6F\x6E","\x74\x79\x70\x65\x3A\x75\x73\x65\x72\x20\x72\x6F\x6C\x65\x3A\x61\x67\x65\x6E\x74\x20\x6E\x61\x6D\x65\x3A\x25\x73","\x66\x6F\x72\x6D\x61\x74","","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x76\x6F\x69\x63\x65","\x43\x68\x61\x6E\x6E\x65\x6C\x20\x6E\x6F\x74\x20\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x64\x3A","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x55\x52\x4C","\x25\x73\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73\x2F\x25\x73\x2F\x64\x6F\x77\x6E\x6C\x6F\x61\x64\x3F\x74\x79\x70\x65\x3D\x75\x6E\x69\x71\x75\x65\x69\x64","\x75\x6E\x69\x71\x75\x65\x69\x64","\x72\x65\x73\x75\x6C\x74","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x73\x75\x6C\x74\x73","\x63\x6F\x75\x6E\x74","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x41\x67\x65\x6E\x74\x20\x66\x6F\x75\x6E\x64\x3A","\x66\x69\x72\x73\x74","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x41\x67\x65\x6E\x74\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x2E\x20\x55\x73\x65\x20\x74\x68\x65\x20\x61\x64\x6D\x69\x6E\x20\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x75\x73\x65\x72\x73\x2F\x6D\x65\x2E\x6A\x73\x6F\x6E","\x75\x73\x65\x72","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x41\x64\x6D\x69\x6E\x20\x73\x65\x6C\x65\x63\x74\x65\x64","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x45\x6E\x64\x20\x55\x73\x65\x72\x20\x74\x6F\x20\x73\x65\x61\x72\x63\x68\x3A","\x74\x79\x70\x65\x3A\x75\x73\x65\x72\x20\x72\x6F\x6C\x65\x3A\x65\x6E\x64\x2D\x75\x73\x65\x72\x20\x25\x73\x3A\x25\x73","\x70\x68\x6F\x6E\x65","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x64\x65\x73\x74\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x64\x65\x73\x74\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x45\x6E\x64\x20\x55\x73\x65\x72\x20\x66\x6F\x75\x6E\x64\x3A","\x65\x6E\x64\x75\x73\x65\x72","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x45\x6E\x64\x20\x55\x73\x65\x72\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x3A","\x2F\x75\x73\x65\x72\x73\x2E\x6A\x73\x6F\x6E","\x50\x4F\x53\x54","\x65\x6E\x64\x2D\x75\x73\x65\x72","\x43\x61\x6C\x6C\x65\x72\x20\x2D\x20\x25\x73","\x3C\x75\x6E\x6B\x6E\x6F\x77\x6E\x3E","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x45\x6E\x64\x20\x55\x73\x65\x72\x20\x63\x72\x65\x61\x74\x65\x64\x3A","\x76\x61\x6C\x75\x65","\x66\x6F\x72\x45\x61\x63\x68","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x54\x69\x63\x6B\x65\x74\x20\x62\x6F\x64\x79\x3A","\x2F\x74\x69\x63\x6B\x65\x74\x73\x2E\x6A\x73\x6F\x6E","\x54\x61\x67\x73","\x6D\x61\x70","\x53\x75\x62\x6A\x65\x63\x74","\x73\x6F\x72\x74\x42\x79","\x74\x79\x70\x65","\x73\x74\x72\x69\x6E\x67","\x63\x6F\x6E\x74\x65\x6E\x74","\x70\x75\x73\x68","\x76\x61\x72\x69\x61\x62\x6C\x65","\x76\x61\x72\x69\x61\x62\x6C\x65\x4E\x61\x6D\x65","\x63\x75\x73\x74\x6F\x6D\x56\x61\x72\x69\x61\x62\x6C\x65","\x56\x61\x72\x69\x61\x62\x6C\x65","\x20","\x6A\x6F\x69\x6E","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x6B\x65\x79\x56\x61\x6C\x75\x65","\x6B\x65\x79\x54\x79\x70\x65","\x6B\x65\x79","\x25\x73\x3A\x20\x25\x73","\x6B\x65\x79\x43\x6F\x6E\x74\x65\x6E\x74","\x0A","\x46\x69\x65\x6C\x64","\x66\x69\x6C\x74\x65\x72","\x69\x64\x46\x69\x65\x6C\x64","\x6E\x61\x6D\x65\x46\x69\x65\x6C\x64","\x74\x69\x63\x6B\x65\x74","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x54\x69\x63\x6B\x65\x74\x20\x63\x72\x65\x61\x74\x65\x64","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x61\x67\x65\x6E\x74\x73\x2F\x25\x64\x2F\x74\x69\x63\x6B\x65\x74\x73\x2F\x25\x64\x2F\x64\x69\x73\x70\x6C\x61\x79\x2E\x6A\x73\x6F\x6E","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x7A\x65\x6E\x64\x65\x73\x6B","\x65\x76\x65\x6E\x74\x43\x68\x61\x6E\x6E\x65\x6C","\x65\x78\x69\x74\x53\x74\x61\x74\x75\x73","\x73\x75\x63\x63\x65\x73\x73","\x74\x69\x63\x6B\x65\x74\x49\x64","\x75\x72\x6C","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x49\x64","\x63\x72\x65\x61\x74\x65","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x54\x69\x63\x6B\x65\x74\x20\x25\x64\x20\x64\x69\x73\x70\x6C\x61\x79\x65\x64\x20\x74\x6F\x20\x61\x67\x65\x6E\x74\x20\x25\x64","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x74\x69\x63\x6B\x65\x74\x20\x63\x72\x65\x61\x74\x69\x6F\x6E","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x4D\x65\x73\x73\x61\x67\x65\x3A","\x6D\x65\x73\x73\x61\x67\x65","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x53\x74\x61\x63\x6B\x3A","\x73\x74\x61\x63\x6B","\x66\x61\x69\x6C\x65\x64","\x5B\x5A\x65\x6E\x64\x65\x73\x6B\x5D\x20\x45\x72\x72\x6F\x72\x20\x69\x6E\x20\x52\x65\x70\x6F\x72\x74\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x20\x63\x72\x65\x61\x74\x65","\x73\x75\x62\x73\x74\x72","\x2F","\x65\x78\x70\x6F\x72\x74\x73"];_0xf062[0];var _=require(_0xf062[1]);var util=require(_0xf062[2]);var rp=require(_0xf062[3]);var ZendeskIntegration=require(_0xf062[5])[_0xf062[4]];var ZendeskConfiguration=require(_0xf062[5])[_0xf062[6]];var ReportIntegration=require(_0xf062[5])[_0xf062[7]];var VoiceQueue=require(_0xf062[5])[_0xf062[8]];var VoiceExtension=require(_0xf062[5])[_0xf062[9]];var Agent=require(_0xf062[5])[_0xf062[10]];function Zendesk(){console[_0xf062[12]](_0xf062[11])}Zendesk[_0xf062[14]][_0xf062[13]]= function(_0x92f2xb,_0x92f2xc,_0x92f2xd,_0x92f2xe,_0x92f2xf,_0x92f2x10){var _0x92f2x11={uri:undefined,headers:undefined,agent:undefined,enduser:undefined,ticket:undefined,configuration:undefined,recordEnable:false,serverURL:undefined,agentName:undefined};if(!_0x92f2xb|| !_0x92f2xc){console[_0xf062[16]](_0xf062[15]);return};ZendeskConfiguration[_0xf062[19]]({where:{id:_0x92f2xc,AccountId:_0x92f2xb},include:[{all:true,include:[{all:true}]}]})[_0xf062[18]](handleEntityNotFound())[_0xf062[18]](handleConnection(_0x92f2x11))[_0xf062[18]](searchMotionAgent(_0x92f2xd,_0x92f2xf))[_0xf062[18]](handleMotionAgent(_0x92f2x11))[_0xf062[18]](searchQueue(_0x92f2xf))[_0xf062[18]](handleQueueRecordings(_0x92f2x11,_0x92f2xf))[_0xf062[18]](searchRoute(_0x92f2xf))[_0xf062[18]](handleOutboundRecordings(_0x92f2x11,_0x92f2xf))[_0xf062[18]](searchAgent(_0x92f2x11))[_0xf062[18]](handleAgent(_0x92f2x11))[_0xf062[18]](searchAdmin(_0x92f2x11))[_0xf062[18]](handleAdmin(_0x92f2x11))[_0xf062[18]](searchEndUser(_0x92f2x11,_0x92f2xd,_0x92f2xf,_0x92f2xe))[_0xf062[18]](handleEndUser(_0x92f2x11,_0x92f2xd,_0x92f2xf,_0x92f2xe))[_0xf062[18]](endUserCreation(_0x92f2x11,_0x92f2xd,_0x92f2xf,_0x92f2xe))[_0xf062[18]](handleEndUserCreation(_0x92f2x11,_0x92f2xd,_0x92f2xf,_0x92f2xe))[_0xf062[18]](ticketCreation(_0x92f2x11,_0x92f2xf,_0x92f2x10))[_0xf062[18]](handleTicketDisplay(_0x92f2x11))[_0xf062[18]](handleReportIntegration(_0x92f2x11,_0x92f2xd,_0x92f2xf,_0x92f2xb))[_0xf062[18]](handleEnd(_0x92f2x11))[_0xf062[17]](handleError(_0x92f2x11,_0x92f2xd,_0x92f2xf,_0x92f2xb))};function handleEntityNotFound(){return function(_0x92f2x13){if(!_0x92f2x13){return null};return _0x92f2x13}}function handleConnection(_0x92f2x11){return function(_0x92f2x15){var _0x92f2x16=getAccountConfiguration(_0x92f2x15.ZendeskAccount);_0x92f2x11[_0xf062[20]]= _0x92f2x15;_0x92f2x11[_0xf062[21]]= _0x92f2x16[_0xf062[21]];_0x92f2x11[_0xf062[22]]= _0x92f2x16[_0xf062[22]];_0x92f2x11[_0xf062[23]]= _0x92f2x15[_0xf062[25]][_0xf062[24]]}}function searchMotionAgent(_0x92f2xd,_0x92f2xf){return function(){return Agent[_0xf062[29]](_0xf062[28])[_0xf062[27]]({where:{name:getValueFromPropertyName(_0x92f2xf,getAgentSearchPropertyFromChannel(_0x92f2xd))},attributes:[_0xf062[26]]})}}function handleMotionAgent(_0x92f2x11){return function(_0x92f2x19){if(_0x92f2x19&& _0x92f2x19[_0xf062[26]]){_0x92f2x11[_0xf062[30]]= _0x92f2x19[_0xf062[26]]};return}}function searchQueue(_0x92f2xf){return function(){console[_0xf062[12]](_0xf062[31]);if(_0x92f2xf[_0xf062[32]]){return VoiceQueue[_0xf062[27]]({where:{name:_0x92f2xf[_0xf062[32]]},attributes:[_0xf062[33],_0xf062[34]]})}else {return}}}function handleQueueRecordings(_0x92f2x11,_0x92f2xf){return function(_0x92f2x1c){if(_0x92f2xf[_0xf062[32]]){if(_0x92f2x1c&& _0x92f2x1c[_0xf062[34]]){console[_0xf062[12]](_0xf062[35],_0x92f2x1c[_0xf062[33]]);_0x92f2x11[_0xf062[36]]= true}else {_0x92f2x11[_0xf062[36]]= false;console[_0xf062[12]](_0xf062[37])}};return}}function searchRoute(_0x92f2xf){return function(){if(_0x92f2xf[_0xf062[38]]){return VoiceExtension[_0xf062[27]]({where:{id:_0x92f2xf[_0xf062[38]]},attributes:[_0xf062[39],_0xf062[40]]})}else {return}}}function handleOutboundRecordings(_0x92f2x11,_0x92f2xf){return function(_0x92f2x1f){if(_0x92f2xf[_0xf062[38]]){if(_0x92f2x1f&& _0x92f2x1f[_0xf062[40]]){console[_0xf062[12]](_0xf062[41],_0x92f2x1f[_0xf062[39]]);_0x92f2x11[_0xf062[36]]= true}else {_0x92f2x11[_0xf062[36]]= false;console[_0xf062[12]](_0xf062[42])}};return}}function getAccountConfiguration(_0x92f2x21){var _0x92f2x22={uri:stripTrailingSlash(_0x92f2x21[_0xf062[43]]),headers:{"\x41\x75\x74\x68\x6F\x72\x69\x7A\x61\x74\x69\x6F\x6E":undefined,"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65":_0xf062[44],"\x41\x63\x63\x65\x70\x74":_0xf062[44]}};var _0x92f2x23=_0x92f2x21[_0xf062[45]];if(_0x92f2x21[_0xf062[46]]=== _0xf062[47]){_0x92f2x23= _0x92f2x23+ _0xf062[48]+ _0x92f2x21[_0xf062[47]]}else {if(_0x92f2x21[_0xf062[46]]=== _0xf062[49]){_0x92f2x23= _0x92f2x23+ _0xf062[50]+ _0x92f2x21[_0xf062[49]]}};_0x92f2x22[_0xf062[22]][_0xf062[51]]= _0xf062[52]+ new Buffer(_0x92f2x23).toString(_0xf062[53]);return _0x92f2x22}function searchAgent(_0x92f2x11){return function(){console[_0xf062[12]](_0xf062[54],_0x92f2x11[_0xf062[30]]);return rp({uri:_0x92f2x11[_0xf062[21]]+ _0xf062[55],qs:{"\x71\x75\x65\x72\x79":util[_0xf062[57]](_0xf062[56],_0x92f2x11[_0xf062[30]])},headers:_0x92f2x11[_0xf062[22]],json:true})}}function getAgentSearchPropertyFromChannel(_0x92f2xd){var _0x92f2x26=_0xf062[58];if(_0x92f2xd){switch(_0x92f2xd){case _0xf062[60]:_0x92f2x26= _0xf062[59];break;default:_0x92f2x26= _0xf062[59];console[_0xf062[16]](_0xf062[61],_0x92f2xd)}};return _0x92f2x26}function getValueFromPropertyName(_0x92f2xf,_0x92f2x26,_0x92f2x11){if(_0x92f2x26=== _0xf062[62]){if(_0x92f2x11&& _0x92f2x11[_0xf062[36]]&& _0x92f2x11[_0xf062[23]]){return util[_0xf062[57]](_0xf062[63],stripTrailingSlash(_0x92f2x11[_0xf062[23]]),_0x92f2xf[_0xf062[64]])}else {return null}}else {return _[_0xf062[65]](_0x92f2xf,_0x92f2x26)}}function handleAgent(_0x92f2x11){return function(_0x92f2xf){if(_0x92f2xf[_0xf062[67]][_0xf062[66]]> 0&& _0x92f2xf[_0xf062[68]]> 0){console[_0xf062[12]](_0xf062[69],_0x92f2x11[_0xf062[30]]);_0x92f2x11[_0xf062[28]]= getMatchObject(_0x92f2xf[_0xf062[67]],_0xf062[33],_0x92f2x11[_0xf062[30]]);return _0x92f2x11[_0xf062[28]]};return}}function getMatchObject(_0x92f2x2a,_0x92f2x26,_0x92f2x2b){var _0x92f2x2c=_[_0xf062[19]](_0x92f2x2a,{property:_0x92f2x2b});if(_0x92f2x2c){return _0x92f2x2c};return _[_0xf062[70]](_0x92f2x2a)}function searchAdmin(_0x92f2x11){return function(_0x92f2xf){if(_0x92f2xf){return};console[_0xf062[12]](_0xf062[71]);return rp({uri:_0x92f2x11[_0xf062[21]]+ _0xf062[72],headers:_0x92f2x11[_0xf062[22]],json:true})}}function handleAdmin(_0x92f2x11){return function(_0x92f2xf){if(!_0x92f2xf){return};if(_0x92f2xf[_0xf062[73]]){console[_0xf062[12]](_0xf062[74]);_0x92f2x11[_0xf062[28]]= _0x92f2xf[_0xf062[73]]};return}}function searchEndUser(_0x92f2x11,_0x92f2xd,_0x92f2xf,_0x92f2xe){return function(){console[_0xf062[12]](_0xf062[75],getValueFromPropertyName(_0x92f2xf,getEndUserSearchPropertyFromChannel(_0x92f2xd,_0x92f2xe)));return rp({uri:_0x92f2x11[_0xf062[21]]+ _0xf062[55],qs:{"\x71\x75\x65\x72\x79":util[_0xf062[57]](_0xf062[76],getEndUserSearchQueryFromChannel(_0x92f2xd),getValueFromPropertyName(_0x92f2xf,getEndUserSearchPropertyFromChannel(_0x92f2xd,_0x92f2xe)))},headers:_0x92f2x11[_0xf062[22]],json:true})}}function getEndUserSearchQueryFromChannel(_0x92f2xd){var _0x92f2x26=_0xf062[58];if(_0x92f2xd){switch(_0x92f2xd){case _0xf062[60]:_0x92f2x26= _0xf062[77];break;default:_0x92f2x26= _0xf062[77];console[_0xf062[16]](_0xf062[61],_0x92f2xd)}};return _0x92f2x26}function getEndUserSearchPropertyFromChannel(_0x92f2xd,_0x92f2xe){var _0x92f2x26=_0xf062[58];if(_0x92f2xd){switch(_0x92f2xd){case _0xf062[60]:if(_0x92f2xe=== _0xf062[78]){_0x92f2x26= _0xf062[79]}else {if(_0x92f2xe=== _0xf062[32]){_0x92f2x26= _0xf062[80]}};break;default:_0x92f2x26= _0xf062[80];console[_0xf062[16]](_0xf062[61],_0x92f2xd)}};return _0x92f2x26}function getEndUserNamePropertyFromChannel(_0x92f2xd,_0x92f2xe){var _0x92f2x26=_0xf062[58];if(_0x92f2xd){switch(_0x92f2xd){case _0xf062[60]:if(_0x92f2xe=== _0xf062[78]){_0x92f2x26= _0xf062[81]}else {if(_0x92f2xe=== _0xf062[32]){_0x92f2x26= _0xf062[82]}};break;default:_0x92f2x26= _0xf062[82];console[_0xf062[16]](_0xf062[61],_0x92f2xd)}};return _0x92f2x26}function handleEndUser(_0x92f2x11,_0x92f2xd,_0x92f2x34,_0x92f2xe){return function(_0x92f2xf){if(_0x92f2xf[_0xf062[67]][_0xf062[66]]> 0&& _0x92f2xf[_0xf062[68]]> 0){console[_0xf062[12]](_0xf062[83],getValueFromPropertyName(_0x92f2x34,getEndUserSearchPropertyFromChannel(_0x92f2xd,_0x92f2xe)));_0x92f2x11[_0xf062[84]]= _0x92f2xf[_0xf062[67]][0];return _0x92f2x11[_0xf062[84]]};return}}function endUserCreation(_0x92f2x11,_0x92f2xd,_0x92f2x34,_0x92f2xe){return function(_0x92f2xf){if(_0x92f2xf){return};console[_0xf062[12]](_0xf062[85],getValueFromPropertyName(_0x92f2x34,getEndUserSearchPropertyFromChannel(_0x92f2xd,_0x92f2xe)));console[_0xf062[12]](getJsonForEndUserCreation(_0x92f2xd,_0x92f2x34,_0x92f2xe));return rp({uri:_0x92f2x11[_0xf062[21]]+ _0xf062[86],method:_0xf062[87],body:{user:getJsonForEndUserCreation(_0x92f2xd,_0x92f2x34,_0x92f2xe)},headers:_0x92f2x11[_0xf062[22]],json:true})}}function getJsonForEndUserCreation(_0x92f2xd,_0x92f2xf,_0x92f2xe){var _0x92f2x37={role:_0xf062[88]};switch(_0x92f2xd){case _0xf062[60]:if(_0x92f2xe=== _0xf062[32]){if(isValidName(_0x92f2xf[_0xf062[82]])){_0x92f2x37[_0xf062[33]]= getValueFromPropertyName(_0x92f2xf,getEndUserNamePropertyFromChannel(_0x92f2xd,_0x92f2xe))}else {_0x92f2x37[_0xf062[33]]= util[_0xf062[57]](_0xf062[89],getValueFromPropertyName(_0x92f2xf,getEndUserSearchPropertyFromChannel(_0x92f2xd,_0x92f2xe)))}}else {if(_0x92f2xe=== _0xf062[78]){if(isValidName(_0x92f2xf[_0xf062[81]])){_0x92f2x37[_0xf062[33]]= getValueFromPropertyName(_0x92f2xf,getEndUserNamePropertyFromChannel(_0x92f2xd,_0x92f2xe))}else {_0x92f2x37[_0xf062[33]]= util[_0xf062[57]](_0xf062[89],getValueFromPropertyName(_0x92f2xf,getEndUserSearchPropertyFromChannel(_0x92f2xd,_0x92f2xe)))}}};_0x92f2x37[_0xf062[77]]= getValueFromPropertyName(_0x92f2xf,getEndUserSearchPropertyFromChannel(_0x92f2xd,_0x92f2xe));break;default:console[_0xf062[16]](_0xf062[61],_0x92f2xd)};return _0x92f2x37}function isValidName(_0x92f2x39){return _0x92f2x39&& _0x92f2x39!== _0xf062[90]}function handleEndUserCreation(_0x92f2x11,_0x92f2xd,_0x92f2x34,_0x92f2xe){return function(_0x92f2xf){if(!_0x92f2xf){return};if(_0x92f2xf[_0xf062[73]]){console[_0xf062[12]](_0xf062[91],getValueFromPropertyName(_0x92f2x34,getEndUserSearchPropertyFromChannel(_0x92f2xd,_0x92f2xe)));_0x92f2x11[_0xf062[84]]= _0x92f2xf[_0xf062[73]]};return}}function ticketCreation(_0x92f2x11,_0x92f2x34,_0x92f2x10){return function(){var _0x92f2x3c={requester_id:_0x92f2x11[_0xf062[28]][_0xf062[39]],submitter_id:_0x92f2x11[_0xf062[84]][_0xf062[39]],assignee_id:_0x92f2x11[_0xf062[84]][_0xf062[39]],tags:createTagsFromConfiguration(_0x92f2x11),subject:createSubjectFromConfiguration(_0x92f2x11,_0x92f2x34,_0x92f2x10),description:createDescriptionFromConfiguration(_0x92f2x11,_0x92f2x34,_0x92f2x10),custom_fields:createCustomFieldsFromConfiguration(_0x92f2x11,_0x92f2x34,_0x92f2x10)};var _0x92f2x3d=createFieldsFromConfiguration(_0x92f2x11);if(_0x92f2x3d[_0xf062[66]]> 0){_[_0xf062[93]](_0x92f2x3d,function(_0x92f2x3e){_0x92f2x3c[_0x92f2x3e[_0xf062[39]]]= _0x92f2x3e[_0xf062[92]]})};console[_0xf062[12]](_0xf062[94],_0x92f2x3c);return rp({uri:_0x92f2x11[_0xf062[21]]+ _0xf062[95],method:_0xf062[87],body:{ticket:_0x92f2x3c},headers:_0x92f2x11[_0xf062[22]],json:true})}}function createTagsFromConfiguration(_0x92f2x11){var _0x92f2x40=[];if(_0x92f2x11[_0xf062[20]][_0xf062[96]][_0xf062[66]]> 0){_0x92f2x40= _[_0xf062[97]](_0x92f2x11[_0xf062[20]].Tags,_0xf062[33])};return _0x92f2x40}function createSubjectFromConfiguration(_0x92f2x11,_0x92f2x34,_0x92f2x10){var _0x92f2x42=_0xf062[58];var _0x92f2x43=[];if(_0x92f2x11[_0xf062[20]][_0xf062[98]][_0xf062[66]]> 0){var _0x92f2x44=_[_0xf062[99]](_0x92f2x11[_0xf062[20]].Subject,[_0xf062[39]]);_[_0xf062[93]](_0x92f2x44,function(_0x92f2x45){if(_0x92f2x45[_0xf062[100]]=== _0xf062[101]){_0x92f2x43[_0xf062[103]](_0x92f2x45[_0xf062[102]])}else {if(_0x92f2x45[_0xf062[100]]=== _0xf062[104]&& _0x92f2x45[_0xf062[105]]){var _0x92f2x46=getValueFromPropertyName(_0x92f2x34,_0x92f2x45[_0xf062[105]],_0x92f2x11);if(_0x92f2x46){_0x92f2x43[_0xf062[103]](_0x92f2x46.toString())}}else {if(_0x92f2x45[_0xf062[100]]=== _0xf062[106]&& _0x92f2x45[_0xf062[107]]&& _0x92f2x45[_0xf062[107]][_0xf062[33]]){_0x92f2x10[_0x92f2x45[_0xf062[107]][_0xf062[33]]]&& _0x92f2x43[_0xf062[103]](_0x92f2x10[_0x92f2x45[_0xf062[107]][_0xf062[33]]].toString())}}}});_0x92f2x42= _0x92f2x43[_0xf062[109]](_0xf062[108])};return _0x92f2x42}function createDescriptionFromConfiguration(_0x92f2x11,_0x92f2x34,_0x92f2x10){var _0x92f2x48=_0xf062[58];var _0x92f2x43=[];if(_0x92f2x11[_0xf062[20]][_0xf062[110]][_0xf062[66]]> 0){var _0x92f2x49=_[_0xf062[99]](_0x92f2x11[_0xf062[20]].Description,[_0xf062[39]]);_[_0xf062[93]](_0x92f2x49,function(_0x92f2x45){if(_0x92f2x45[_0xf062[100]]=== _0xf062[101]){_0x92f2x43[_0xf062[103]](_0x92f2x45[_0xf062[102]])}else {if(_0x92f2x45[_0xf062[100]]=== _0xf062[111]){if(_0x92f2x45[_0xf062[112]]=== _0xf062[101]&& _0x92f2x45[_0xf062[113]]){_0x92f2x43[_0xf062[103]](util[_0xf062[57]](_0xf062[114],_0x92f2x45[_0xf062[113]],_0x92f2x45[_0xf062[115]]))}else {if(_0x92f2x45[_0xf062[112]]=== _0xf062[104]&& _0x92f2x45[_0xf062[105]]&& _0x92f2x45[_0xf062[113]]){var _0x92f2x46=getValueFromPropertyName(_0x92f2x34,_0x92f2x45[_0xf062[105]],_0x92f2x11);if(_0x92f2x46){_0x92f2x43[_0xf062[103]](util[_0xf062[57]](_0xf062[114],_0x92f2x45[_0xf062[113]],_0x92f2x46.toString()))}}else {if(_0x92f2x45[_0xf062[112]]=== _0xf062[106]&& _0x92f2x45[_0xf062[107]]&& _0x92f2x45[_0xf062[107]][_0xf062[33]]&& _0x92f2x45[_0xf062[113]]){_0x92f2x10[_0x92f2x45[_0xf062[107]][_0xf062[33]]]&& _0x92f2x43[_0xf062[103]](util[_0xf062[57]](_0xf062[114],_0x92f2x45[_0xf062[113]],_0x92f2x10[_0x92f2x45[_0xf062[107]][_0xf062[33]]]))}}}}}});_0x92f2x48= _0x92f2x43[_0xf062[109]](_0xf062[116])};return _0x92f2x48}function createCustomFieldsFromConfiguration(_0x92f2x11,_0x92f2x34,_0x92f2x10){var _0x92f2x4b=[];var _0x92f2x4c=[];if(_0x92f2x11[_0xf062[20]][_0xf062[117]][_0xf062[66]]> 0){_0x92f2x4b= _[_0xf062[118]](_0x92f2x11[_0xf062[20]].Field,{"\x63\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64":true});_[_0xf062[93]](_0x92f2x4b,function(_0x92f2x3e){if(_0x92f2x3e[_0xf062[100]]=== _0xf062[101]&& _0x92f2x3e[_0xf062[119]]){_0x92f2x4c[_0xf062[103]]({id:_0x92f2x3e[_0xf062[119]],value:_0x92f2x3e[_0xf062[102]]})}else {if(_0x92f2x3e[_0xf062[100]]=== _0xf062[104]&& _0x92f2x3e[_0xf062[105]]&& _0x92f2x3e[_0xf062[119]]){var _0x92f2x46=getValueFromPropertyName(_0x92f2x34,_0x92f2x3e[_0xf062[105]],_0x92f2x11);if(_0x92f2x46){_0x92f2x4c[_0xf062[103]]({id:_0x92f2x3e[_0xf062[119]],value:_0x92f2x46.toString()})}}else {if(_0x92f2x3e[_0xf062[100]]=== _0xf062[106]&& _0x92f2x3e[_0xf062[107]]&& _0x92f2x3e[_0xf062[107]][_0xf062[33]]&& _0x92f2x3e[_0xf062[119]]){_0x92f2x10[_0x92f2x3e[_0xf062[107]][_0xf062[33]]]&& _0x92f2x4c[_0xf062[103]]({id:_0x92f2x3e[_0xf062[119]],value:_0x92f2x10[_0x92f2x3e[_0xf062[107]][_0xf062[33]]].toString()})}}}})};return _0x92f2x4c}function createFieldsFromConfiguration(_0x92f2x11){var _0x92f2x3d=[];var _0x92f2x4c=[];if(_0x92f2x11[_0xf062[20]][_0xf062[117]][_0xf062[66]]> 0){_0x92f2x3d= _[_0xf062[118]](_0x92f2x11[_0xf062[20]].Field,{"\x63\x75\x73\x74\x6F\x6D\x46\x69\x65\x6C\x64":false});_[_0xf062[93]](_0x92f2x3d,function(_0x92f2x3e){if(_0x92f2x3e[_0xf062[100]]=== _0xf062[101]&& _0x92f2x3e[_0xf062[120]]){_0x92f2x4c[_0xf062[103]]({id:_0x92f2x3e[_0xf062[120]],value:_0x92f2x3e[_0xf062[102]]})}})};return _0x92f2x4c}function handleTicketDisplay(_0x92f2x11){return function(_0x92f2xf){if(_0x92f2xf[_0xf062[121]]){console[_0xf062[12]](_0xf062[122]);_0x92f2x11[_0xf062[121]]= _0x92f2xf[_0xf062[121]];var _0x92f2x4f=util[_0xf062[57]](_0xf062[123],_0x92f2x11[_0xf062[28]][_0xf062[39]],_0x92f2x11[_0xf062[121]][_0xf062[39]]);return rp({uri:_0x92f2x11[_0xf062[21]]+ _0x92f2x4f,method:_0xf062[87],headers:_0x92f2x11[_0xf062[22]],json:true})};return}}function handleReportIntegration(_0x92f2x11,_0x92f2xd,_0x92f2xf,_0x92f2xb){return function(){delete _0x92f2xf[_0xf062[39]];_0x92f2xf[_0xf062[124]]= _0xf062[125];_0x92f2xf[_0xf062[126]]= _0x92f2xd;_0x92f2xf[_0xf062[127]]= _0xf062[128];_0x92f2xf[_0xf062[129]]= _0x92f2x11[_0xf062[121]][_0xf062[39]];_0x92f2xf[_0xf062[130]]= _0x92f2x11[_0xf062[121]][_0xf062[130]];_0x92f2xf[_0xf062[131]]= _0x92f2xb;return ReportIntegration[_0xf062[132]](_0x92f2xf)}}function handleEnd(_0x92f2x11,_0x92f2xf,_0x92f2xd){return function(){console[_0xf062[12]](util[_0xf062[57]](_0xf062[133],_0x92f2x11[_0xf062[121]][_0xf062[39]],_0x92f2x11[_0xf062[28]][_0xf062[39]]));_0x92f2x11= undefined;return}}function handleError(_0x92f2x11,_0x92f2xd,_0x92f2xf,_0x92f2xb){return function(_0x92f2x53){console[_0xf062[16]](_0xf062[134]);console[_0xf062[16]](_0xf062[135],_0x92f2x53[_0xf062[136]]);console[_0xf062[16]](_0xf062[137],_0x92f2x53[_0xf062[138]]);_0x92f2x11= undefined;delete _0x92f2xf[_0xf062[39]];_0x92f2xf[_0xf062[124]]= _0xf062[125];_0x92f2xf[_0xf062[126]]= _0x92f2xd;_0x92f2xf[_0xf062[127]]= _0xf062[139];_0x92f2xf[_0xf062[131]]= _0x92f2xb;ReportIntegration[_0xf062[132]](_0x92f2xf)[_0xf062[18]](function(){return})[_0xf062[17]](function(_0x92f2x53){console[_0xf062[16]](_0xf062[140]);return})}}function stripTrailingSlash(_0x92f2x55){if(_0x92f2x55[_0xf062[141]](-1) === _0xf062[142]){return _0x92f2x55[_0xf062[141]](0,_0x92f2x55[_0xf062[66]]- 1)};return _0x92f2x55}module[_0xf062[143]]= Zendesk \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var rp = require('request-promise'); + +var ZendeskIntegration = require('../../models').ZendeskIntegration; +var ZendeskConfiguration = require('../../models').ZendeskConfiguration; +var ReportIntegration = require('../../models').ReportIntegration; +var VoiceQueue = require('../../models').VoiceQueue; +var VoiceExtension = require('../../models').VoiceExtension; +var Agent = require('../../models').User; + +function Zendesk() { + console.log('Zendesk integration initialization...'); +} + +Zendesk.prototype.handleEvent = function(integrationId, configurationId, channel, subtype, data, variables) { + + var zendeskData = { + uri: undefined, + headers: undefined, + agent: undefined, + enduser: undefined, + ticket: undefined, + configuration: undefined, + recordEnable: false, + serverURL: undefined, + agentName: undefined + }; + + if (!integrationId || !configurationId) { + console.error('Passed parameters are not enough to create a new ticket: miss IntegrationId or ConfigurationId'); + return; + } + + ZendeskConfiguration + .find({ + where: { + id: configurationId, + AccountId: integrationId + }, + include: [{ + all: true, + include: [{ + all: true + }] + }] + }) + .then(handleEntityNotFound()) + .then(handleConnection(zendeskData)) + .then(searchMotionAgent(channel, data)) + .then(handleMotionAgent(zendeskData)) + .then(searchQueue(data)) + .then(handleQueueRecordings(zendeskData, data)) + .then(searchRoute(data)) + .then(handleOutboundRecordings(zendeskData, data)) + .then(searchAgent(zendeskData)) + .then(handleAgent(zendeskData)) + .then(searchAdmin(zendeskData)) + .then(handleAdmin(zendeskData)) + .then(searchEndUser(zendeskData, channel, data, subtype)) + .then(handleEndUser(zendeskData, channel, data, subtype)) + .then(endUserCreation(zendeskData, channel, data, subtype)) + .then(handleEndUserCreation(zendeskData, channel, data, subtype)) + .then(ticketCreation(zendeskData, data, variables)) + .then(handleTicketDisplay(zendeskData)) + .then(handleReportIntegration(zendeskData, channel, data, integrationId)) + .then(handleEnd(zendeskData)) + .catch(handleError(zendeskData, channel, data, integrationId)); + +}; + +function handleEntityNotFound() { + return function(entity) { + if (!entity) { + return null; + } + return entity; + }; +} + +function handleConnection(zendeskData) { + return function(configuration) { + var accConfiguration = getAccountConfiguration(configuration.ZendeskAccount); + zendeskData.configuration = configuration; + zendeskData.uri = accConfiguration.uri; + zendeskData.headers = accConfiguration.headers; + zendeskData.serverURL = configuration.ZendeskAccount.serverUrl; + } +} + +function searchMotionAgent(channel, data) { + return function() { + return Agent + .scope('agent') + .findOne({ + where: { + name: getValueFromPropertyName(data, getAgentSearchPropertyFromChannel(channel)) + }, + attributes: ['fullname'] + }); + } +} + +function handleMotionAgent(zendeskData) { + return function(agent) { + if (agent && agent.fullname) { + zendeskData.agentName = agent.fullname; + } + return; + } +} + +function searchQueue(data) { + return function() { + console.log('Searching Queue...'); + if (data.queue) { + return VoiceQueue.findOne({ + where: { + name: data.queue + }, + attributes: ['name', 'monitor_format'] + }); + } else { + return; + } + } +} + +function handleQueueRecordings(zendeskData, data) { + return function(queue) { + if (data.queue) { + if (queue && queue.monitor_format) { + console.log('[Zendesk] Recording enabled for the Queue', queue.name); + zendeskData.recordEnable = true; + } else { + zendeskData.recordEnable = false; + console.log('[Zendesk] Queue not found or Recording not enabled'); + } + } + return; + } +} + +function searchRoute(data) { + return function() { + if (data.routeId) { + return VoiceExtension.findOne({ + where: { + id: data.routeId + }, + attributes: ['id', 'record'] + }); + } else { + return; + } + } +} + +function handleOutboundRecordings(zendeskData, data) { + return function(route) { + if (data.routeId) { + if (route && route.record) { + console.log('[Zendesk] Recording enabled for the Route Outbound', route.id); + zendeskData.recordEnable = true; + } else { + zendeskData.recordEnable = false; + console.log('[Zendesk] Route Outbound not found or Recording not enabled'); + } + } + return; + } +} + +function getAccountConfiguration(account) { + var authJson = { + uri: stripTrailingSlash(account.remoteUri), + headers: { + 'Authorization': undefined, + 'Content-Type': 'application/json', + 'Accept': 'application/json' + } + }; + var auth = account.username; + if (account.authType === 'password') { + auth = auth + ':' + account.password; + } else if (account.authType === 'token') { + auth = auth + '/token:' + account.token; + } + authJson.headers.Authorization = 'Basic ' + new Buffer(auth).toString('base64'); + return authJson; +} + +function searchAgent(zendeskData) { + return function() { + console.log('[Zendesk] Agent to search:', zendeskData.agentName); + return rp({ + uri: zendeskData.uri + '/search.json', + qs: { + // 'query': "type:user role:agent name:Andrea Bianco" + 'query': util.format("type:user role:agent name:%s", zendeskData.agentName) + }, + headers: zendeskData.headers, + json: true + }); + } +} + +function getAgentSearchPropertyFromChannel(channel) { + var property = ''; + if (channel) { + switch (channel) { + case 'voice': + property = 'membername'; + break; + default: + property = 'membername'; + console.error('Channel not recognized:', channel); + } + } + return property; +} + +function getValueFromPropertyName(data, property, zendeskData) { + if (property === 'recordingURL') { + if (zendeskData && zendeskData.recordEnable && zendeskData.serverURL) { + return util.format('%s/api/voice/recordings/%s/download?type=uniqueid', stripTrailingSlash(zendeskData.serverURL), data.uniqueid); + } else { + return null; + } + } else { + return _.result(data, property); + } +} + +function handleAgent(zendeskData) { + return function(data) { + if (data.results.length > 0 && data.count > 0) { + console.log('[Zendesk] Agent found:', zendeskData.agentName); + zendeskData.agent = getMatchObject(data.results, 'name', zendeskData.agentName); + return zendeskData.agent; + } + return; + } +} + +function getMatchObject(collection, property, valueToSearch) { + var valueFound = _.find(collection, { + property: valueToSearch + }); + if (valueFound) { + return valueFound; + } + return _.first(collection); +} + +function searchAdmin(zendeskData) { + return function(data) { + if (data) { + return; + } + console.log('[Zendesk] Agent not found. Use the admin account'); + return rp({ + uri: zendeskData.uri + '/users/me.json', + headers: zendeskData.headers, + json: true + }); + } +} + +function handleAdmin(zendeskData) { + return function(data) { + if (!data) { + return; + } + if (data.user) { + console.log('[Zendesk] Admin selected'); + zendeskData.agent = data.user; + } + return; + } +} + +function searchEndUser(zendeskData, channel, data, subtype) { + return function() { + console.log('[Zendesk] End User to search:', getValueFromPropertyName(data, getEndUserSearchPropertyFromChannel(channel, subtype))); + return rp({ + uri: zendeskData.uri + '/search.json', + qs: { + 'query': util.format("type:user role:end-user %s:%s", getEndUserSearchQueryFromChannel(channel), getValueFromPropertyName(data, getEndUserSearchPropertyFromChannel(channel, subtype))) + }, + headers: zendeskData.headers, + json: true + }); + } +} + +function getEndUserSearchQueryFromChannel(channel) { + var property = ''; + if (channel) { + switch (channel) { + case 'voice': + property = 'phone'; + break; + default: + property = 'phone'; + console.error('Channel not recognized:', channel); + } + } + return property; +} + +function getEndUserSearchPropertyFromChannel(channel, subtype) { + var property = ''; + if (channel) { + switch (channel) { + case 'voice': + if (subtype === 'outbound') { + property = 'destcalleridnum'; + } else if (subtype === 'queue') { + property = 'calleridnum'; + } + break; + default: + property = 'calleridnum'; + console.error('Channel not recognized:', channel); + } + } + return property; +} + +function getEndUserNamePropertyFromChannel(channel, subtype) { + var property = ''; + if (channel) { + switch (channel) { + case 'voice': + if (subtype === 'outbound') { + property = 'destcalleridname'; + } else if (subtype === 'queue') { + property = 'calleridname'; + } + break; + default: + property = 'calleridname'; + console.error('Channel not recognized:', channel); + } + } + return property; +} + +function handleEndUser(zendeskData, channel, event, subtype) { + return function(data) { + if (data.results.length > 0 && data.count > 0) { + console.log('[Zendesk] End User found:', getValueFromPropertyName(event, getEndUserSearchPropertyFromChannel(channel, subtype))); + zendeskData.enduser = data.results[0]; + return zendeskData.enduser; + } + return; + } +} + +function endUserCreation(zendeskData, channel, event, subtype) { + return function(data) { + if (data) { + return; + } + console.log('[Zendesk] End User not found:', getValueFromPropertyName(event, getEndUserSearchPropertyFromChannel(channel, subtype))); + console.log(getJsonForEndUserCreation(channel, event, subtype)); + return rp({ + uri: zendeskData.uri + '/users.json', + method: 'POST', + body: { + user: getJsonForEndUserCreation(channel, event, subtype) + }, + headers: zendeskData.headers, + json: true + }); + } +} + +function getJsonForEndUserCreation(channel, data, subtype) { + var user = { + role: 'end-user' + }; + + switch (channel) { + case 'voice': + if (subtype === 'queue') { + if (isValidName(data.calleridname)) { + user.name = getValueFromPropertyName(data, getEndUserNamePropertyFromChannel(channel, subtype)); + } else { + user.name = util.format('Caller - %s', getValueFromPropertyName(data, getEndUserSearchPropertyFromChannel(channel, subtype))) + } + } else if (subtype === 'outbound') { + if (isValidName(data.destcalleridname)) { + user.name = getValueFromPropertyName(data, getEndUserNamePropertyFromChannel(channel, subtype)); + } else { + user.name = util.format('Caller - %s', getValueFromPropertyName(data, getEndUserSearchPropertyFromChannel(channel, subtype))) + } + } + user.phone = getValueFromPropertyName(data, getEndUserSearchPropertyFromChannel(channel, subtype)); + break; + default: + console.error('Channel not recognized:', channel); + } + + return user; +} + +function isValidName(name) { + return name && name !== ''; +} + +function handleEndUserCreation(zendeskData, channel, event, subtype) { + return function(data) { + if (!data) { + return; + } + if (data.user) { + console.log('[Zendesk] End User created:', getValueFromPropertyName(event, getEndUserSearchPropertyFromChannel(channel, subtype))); + zendeskData.enduser = data.user; + } + return; + } +} + +function ticketCreation(zendeskData, event, variables) { + return function() { + var ticketBody = { + //Standard Field + requester_id: zendeskData.agent.id, + submitter_id: zendeskData.enduser.id, + assignee_id: zendeskData.enduser.id, + //Tag + tags: createTagsFromConfiguration(zendeskData), + //Configurated Field + subject: createSubjectFromConfiguration(zendeskData, event, variables), + description: createDescriptionFromConfiguration(zendeskData, event, variables), + custom_fields: createCustomFieldsFromConfiguration(zendeskData, event, variables) + }; + var fields = createFieldsFromConfiguration(zendeskData); + if (fields.length > 0) { + _.forEach(fields, function(item) { + ticketBody[item.id] = item.value; + }); + } + console.log('[Zendesk] Ticket body:', ticketBody); + return rp({ + uri: zendeskData.uri + '/tickets.json', + method: 'POST', + body: { + ticket: ticketBody + }, + headers: zendeskData.headers, + json: true + }); + } +} + +function createTagsFromConfiguration(zendeskData) { + var tags = []; + if (zendeskData.configuration.Tags.length > 0) { + tags = _.map(zendeskData.configuration.Tags, 'name'); + } + return tags; +} + +function createSubjectFromConfiguration(zendeskData, event, variables) { + var subject = ''; + var stringsArray = []; + if (zendeskData.configuration.Subject.length > 0) { + var subjectConfiguration = _.sortBy(zendeskData.configuration.Subject, ['id']); + _.forEach(subjectConfiguration, function(value) { + if (value.type === 'string') { + stringsArray.push(value.content); + } else if (value.type === 'variable' && value.variableName) { + var prop = getValueFromPropertyName(event, value.variableName, zendeskData); + if (prop) { + stringsArray.push(prop.toString()); + } + } else if (value.type === 'customVariable' && value.Variable && value.Variable.name) { + variables[value.Variable.name] && stringsArray.push(variables[value.Variable.name].toString()); + } + }); + subject = stringsArray.join(' '); + } + return subject; +} + +function createDescriptionFromConfiguration(zendeskData, event, variables) { + var description = ''; + var stringsArray = []; + if (zendeskData.configuration.Description.length > 0) { + var descriptionConfiguration = _.sortBy(zendeskData.configuration.Description, ['id']); + _.forEach(descriptionConfiguration, function(value) { + if (value.type === 'string') { + stringsArray.push(value.content); + } else if (value.type === 'keyValue') { + if (value.keyType === 'string' && value.key) { + stringsArray.push(util.format('%s: %s', value.key, value.keyContent)); + } else if (value.keyType === 'variable' && value.variableName && value.key) { + var prop = getValueFromPropertyName(event, value.variableName, zendeskData); + if (prop) { + stringsArray.push(util.format('%s: %s', value.key, prop.toString())); + } + } else if (value.keyType === 'customVariable' && value.Variable && value.Variable.name && value.key) { + variables[value.Variable.name] && stringsArray.push(util.format('%s: %s', value.key, variables[value.Variable.name])); + } + } + }); + description = stringsArray.join('\n'); + } + return description; +} + +function createCustomFieldsFromConfiguration(zendeskData, event, variables) { + var customFields = []; + var fieldArray = []; + if (zendeskData.configuration.Field.length > 0) { + customFields = _.filter(zendeskData.configuration.Field, { + 'customField': true + }); + _.forEach(customFields, function(item) { + if (item.type === 'string' && item.idField) { + fieldArray.push({ + id: item.idField, + value: item.content + }); + } else if (item.type === 'variable' && item.variableName && item.idField) { + var prop = getValueFromPropertyName(event, item.variableName, zendeskData); + if (prop) { + fieldArray.push({ + id: item.idField, + value: prop.toString() + }); + } + } else if (item.type === 'customVariable' && item.Variable && item.Variable.name && item.idField) { + variables[item.Variable.name] && fieldArray.push({ + id: item.idField, + value: variables[item.Variable.name].toString() + }); + } + }); + } + return fieldArray; +} + +function createFieldsFromConfiguration(zendeskData) { + var fields = []; + var fieldArray = []; + if (zendeskData.configuration.Field.length > 0) { + fields = _.filter(zendeskData.configuration.Field, { + 'customField': false + }); + _.forEach(fields, function(item) { + if (item.type === 'string' && item.nameField) { + fieldArray.push({ + id: item.nameField, + value: item.content + }); + } + }); + } + return fieldArray; +} + +function handleTicketDisplay(zendeskData) { + return function(data) { + if (data.ticket) { + console.log('[Zendesk] Ticket created'); + zendeskData.ticket = data.ticket; + var urlDisplay = util.format('/channels/voice/agents/%d/tickets/%d/display.json', zendeskData.agent.id, zendeskData.ticket.id); + return rp({ + uri: zendeskData.uri + urlDisplay, + method: 'POST', + headers: zendeskData.headers, + json: true + }); + } + return; + } +} + +function handleReportIntegration(zendeskData, channel, data, integrationId) { + return function() { + delete data.id; + data.integration = 'zendesk'; + data.eventChannel = channel; + data.exitStatus = 'success'; + data.ticketId = zendeskData.ticket.id; + data.url = zendeskData.ticket.url; + data.integrationId = integrationId; + return ReportIntegration.create(data); + } +} + +function handleEnd(zendeskData, data, channel) { + return function() { + console.log(util.format('[Zendesk] Ticket %d displayed to agent %d', zendeskData.ticket.id, zendeskData.agent.id)); + zendeskData = undefined; + return; + } +} + +function handleError(zendeskData, channel, data, integrationId) { + return function(err) { + console.error('[Zendesk] Error in ticket creation'); + console.error('[Zendesk] Message:', err.message); + console.error('[Zendesk] Stack:', err.stack); + zendeskData = undefined; + + delete data.id; + data.integration = 'zendesk'; + data.eventChannel = channel; + data.exitStatus = 'failed'; + data.integrationId = integrationId; + ReportIntegration + .create(data) + .then(function() { + return; + }) + .catch(function(err) { + console.error('[Zendesk] Error in Report integration create'); + return; + }); + } +} + +function stripTrailingSlash(str) { + if (str.substr(-1) === '/') { + return str.substr(0, str.length - 1); + } + return str; +} + +module.exports = Zendesk; diff --git a/server/config/license/hardware.js b/server/config/license/hardware.js index f8bf842..57ddc35 100644 --- a/server/config/license/hardware.js +++ b/server/config/license/hardware.js @@ -1 +1,59 @@ -var _0x3cd4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6F\x73","\x63\x72\x79\x70\x74\x6F","\x70\x61\x74\x68","\x6D\x61\x63\x68\x69\x6E\x65\x2D\x75\x75\x69\x64","\x62\x69\x6D\x65\x64\x69\x61\x2D\x6D\x61\x63\x68\x69\x6E\x65\x2D\x75\x75\x69\x64","\x61\x73\x79\x6E\x63","\x6E\x65\x74\x77\x6F\x72\x6B\x49\x6E\x74\x65\x72\x66\x61\x63\x65\x73","\x66\x61\x6D\x69\x6C\x79","\x49\x50\x76\x34","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x66\x69\x6C\x74\x65\x72","\x63\x6F\x6E\x63\x61\x74","\x6C\x65\x6E\x67\x74\x68","\x6D\x61\x63","\x30\x30\x3A\x30\x30\x3A\x30\x30\x3A\x30\x30\x3A\x30\x30\x3A\x30\x30","\x61\x64\x64\x72\x65\x73\x73","\x31\x32\x37\x2E\x30\x2E\x30\x2E\x31","\x65\x78\x70\x6F\x72\x74\x73","\x75\x75\x69\x64","\x7C","\x68\x65\x78","\x64\x69\x67\x65\x73\x74","\x75\x70\x64\x61\x74\x65","\x6D\x64\x35","\x63\x72\x65\x61\x74\x65\x48\x61\x73\x68","\x73\x75\x62\x73\x74\x72\x69\x6E\x67","\x2D"];_0x3cd4[0];var os=require(_0x3cd4[1]),crypto=require(_0x3cd4[2]),path=require(_0x3cd4[3]),machineId=require(_0x3cd4[4]),machine=require(_0x3cd4[5]),async=require(_0x3cd4[6]);function getInterfaces(){var _0xb85fx8=[];var _0xb85fx9=os[_0x3cd4[7]]();for(var _0xb85fxa in _0xb85fx9){var _0xb85fxb=_0xb85fx9[_0xb85fxa][_0x3cd4[11]](function(_0xb85fxc){return _0xb85fxc[_0x3cd4[8]]=== _0x3cd4[9]&& _0xb85fxc[_0x3cd4[10]]=== false});_0xb85fx8= _0xb85fx8[_0x3cd4[12]](_0xb85fxb)};return _0xb85fx8}function macAddress(){var _0xb85fx8=getInterfaces();return (_0xb85fx8[_0x3cd4[13]]> 0)?_0xb85fx8[0][_0x3cd4[14]]:_0x3cd4[15]}function ipAddress(){var _0xb85fx8=getInterfaces();return (_0xb85fx8[_0x3cd4[13]]> 0)?_0xb85fx8[0][_0x3cd4[16]]:_0x3cd4[17]}module[_0x3cd4[18]]= function(_0xb85fxf){var _0xb85fx10=machine[_0x3cd4[19]]+ _0x3cd4[20]+ macAddress()+ _0x3cd4[20]+ ipAddress();var _0xb85fx11=crypto[_0x3cd4[25]](_0x3cd4[24])[_0x3cd4[23]](_0xb85fx10)[_0x3cd4[22]](_0x3cd4[21]);var _0xb85fx12=_0xb85fx11[_0x3cd4[26]](0,8)+ _0x3cd4[27]+ _0xb85fx11[_0x3cd4[26]](8,12)+ _0x3cd4[27]+ _0xb85fx11[_0x3cd4[26]](12,16)+ _0x3cd4[27]+ _0xb85fx11[_0x3cd4[26]](16,20)+ _0x3cd4[27]+ _0xb85fx11[_0x3cd4[26]](20);return _0xb85fxf=== true?_0xb85fx12:_0xb85fx11} \ No newline at end of file +'use strict'; +/** + * Imports + */ +var os = require('os'), + crypto = require('crypto'), + path = require('path'), + machineId = require('machine-uuid'), + machine = require('bimedia-machine-uuid'), + async = require('async'); + + +function getInterfaces() { + var ifaces = []; + var interfaces = os.networkInterfaces(); + for (var dev in interfaces) { + // ... and find the one that matches the criteria + var iface = interfaces[dev].filter(function(details) { + return details.family === 'IPv4' && details.internal === false; + }); + ifaces = ifaces.concat(iface); + } + + return ifaces; +} + +/** + * Retrieve unique MAC addresses + * + * @returns {string} array of MAC addresses + */ +function macAddress() { + var ifaces = getInterfaces(); + return (ifaces.length > 0) ? ifaces[0].mac : '00:00:00:00:00:00'; +} + +/** + * Retrieve unique IP addresses + * + * @returns {string} array of IP addresses + */ +function ipAddress() { + var ifaces = getInterfaces(); + return (ifaces.length > 0) ? ifaces[0].address : '127.0.0.1'; +} + +/** + * Generate the machine ID + * + * @param {Bolean} [format] true to return a formatted ID + * @returns {String} machine ID + */ +module.exports = function(format) { + var s = machine.uuid + '|' + macAddress() + '|' + ipAddress(); + var ID = crypto.createHash('md5').update(s).digest('hex'); + var FORMATTED = ID.substring(0, 8) + '-' + ID.substring(8, 12) + '-' + ID.substring(12, 16) + '-' + ID.substring(16, 20) + '-' + ID.substring(20); + + return format === true ? FORMATTED : ID; +}; diff --git a/server/config/license/index.js b/server/config/license/index.js index c90e5ce..c89b470 100644 --- a/server/config/license/index.js +++ b/server/config/license/index.js @@ -1 +1,87 @@ -var _0xfd2e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x72\x65\x71\x75\x65\x73\x74\x2D\x70\x72\x6F\x6D\x69\x73\x65","\x75\x74\x69\x6C","\x75\x72\x6C","\x63\x72\x79\x70\x74\x6F","\x6D\x6F\x6D\x65\x6E\x74","\x43\x72\x6F\x6E\x4A\x6F\x62","\x63\x72\x6F\x6E","\x2E\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x4C\x69\x63\x65\x6E\x73\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x73\x73\x69\x6F\x6E","\x2A\x20\x2A\x20\x2A\x20\x2A\x20\x2A","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x64\x61\x74\x61\x32","\x61\x65\x73\x2D\x32\x35\x36\x2D\x63\x74\x72","\x73\x65\x63\x72\x65\x74","\x63\x72\x65\x61\x74\x65\x44\x65\x63\x69\x70\x68\x65\x72","\x62\x61\x73\x65\x36\x34","\x75\x74\x66\x38","\x75\x70\x64\x61\x74\x65","\x66\x69\x6E\x61\x6C","\x64\x61\x79\x73","\x64\x69\x66\x66","\x64\x61\x74\x61\x31","\x67\x65\x74\x55\x75\x69\x64","\x63\x72\x65\x61\x74\x65\x43\x69\x70\x68\x65\x72","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D","\x66\x6F\x72\x6D\x61\x74","\x61\x63\x74\x69\x76\x65","\x6C\x69\x63\x65\x6E\x73\x65","\x75\x75\x69\x64","\x74\x68\x65\x6E","\x70\x72\x6F\x76\x69\x73\x69\x6F\x6E\x69\x6E\x67","\x2F\x73\x65\x72\x76\x65\x72\x73\x2F","\x2F\x63\x68\x65\x63\x6B","\x73\x70\x72\x65\x61\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x73\x74\x61\x72\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0xfd2e[0];var rp=require(_0xfd2e[1]);var util=require(_0xfd2e[2]);var url=require(_0xfd2e[3]);var crypto=require(_0xfd2e[4]);var moment=require(_0xfd2e[5]);var CronJob=require(_0xfd2e[7])[_0xfd2e[6]];var licenseService=require(_0xfd2e[8]);var config=require(_0xfd2e[9]);var License=require(_0xfd2e[11])[_0xfd2e[10]];var session=require(_0xfd2e[9])[_0xfd2e[12]];const expirationTh=7;function licenseManager(){var _0xbc3cxd= new CronJob({cronTime:_0xfd2e[13],onTick:function(){return License[_0xfd2e[39]]({where:{id:1}})[_0xfd2e[38]](function(_0xbc3cxf){var _0xbc3cx10={};if(_0xbc3cxf[_0xfd2e[16]]){var _0xbc3cx11=crypto[_0xfd2e[19]](_0xfd2e[17],session[_0xfd2e[18]]);var _0xbc3cx12=_0xbc3cx11[_0xfd2e[22]](_0xbc3cxf[_0xfd2e[16]],_0xfd2e[20],_0xfd2e[21]);_0xbc3cx12+= _0xbc3cx11[_0xfd2e[23]](_0xfd2e[21]);if(moment()[_0xfd2e[25]](_0xbc3cx12,_0xfd2e[24])> expirationTh){_0xbc3cx10[_0xfd2e[26]]= licenseService[_0xfd2e[27]]();_0xbc3cx10[_0xfd2e[16]]= null}};if(!_0xbc3cxf[_0xfd2e[26]]){_0xbc3cx10[_0xfd2e[26]]= licenseService[_0xfd2e[27]]()}else {if((_0xbc3cx10[_0xfd2e[26]]!== licenseService[_0xfd2e[27]]())&& !_0xbc3cxf[_0xfd2e[16]]){var _0xbc3cx13=crypto[_0xfd2e[28]](_0xfd2e[17],session[_0xfd2e[18]]);_0xbc3cx10[_0xfd2e[16]]= _0xbc3cx13[_0xfd2e[22]](moment()[_0xfd2e[30]](_0xfd2e[29]),_0xfd2e[21],_0xfd2e[20]);_0xbc3cx10[_0xfd2e[16]]+= _0xbc3cx13[_0xfd2e[23]](_0xfd2e[20])}};return _0xbc3cxf[_0xfd2e[22]](_0xbc3cx10)[_0xfd2e[34]](function(_0xbc3cx10){return rp({uri:config[_0xfd2e[35]]+ _0xfd2e[36]+ licenseService[_0xfd2e[27]]()+ _0xfd2e[37],json:true})})[_0xfd2e[34]](function(_0xbc3cx10){if(_0xbc3cx10[_0xfd2e[31]]){return _0xbc3cxf[_0xfd2e[22]]({license:_0xbc3cx10[_0xfd2e[32]],data1:_0xbc3cx10[_0xfd2e[33]],data2:null})}})})[_0xfd2e[15]](function(_0xbc3cxe){console[_0xfd2e[14]](_0xbc3cxe)})},start:true});_0xbc3cxd[_0xfd2e[40]]();return {}}module[_0xfd2e[41]]= licenseManager \ No newline at end of file +'use strict'; + +var rp = require('request-promise'); +var util = require('util'); +var url = require('url'); +var crypto = require('crypto'); +var moment = require('moment'); +var CronJob = require('cron').CronJob; +var licenseService = require('./license.service'); +var config = require('../environment'); +var License = require('../../models').License; +var session = require('../environment').session; + +const expirationTh = 7; + +// Define the factory +function licenseManager() { + // Store the settings in a closure + var job = new CronJob({ + cronTime: '* * * * *', + onTick: function() { + + return License + .findOrCreate({ + where: { + id: 1 + } + }) + .spread(function(license) { + var data = {}; + + if (license.data2) { + var decipher = crypto.createDecipher('aes-256-ctr', session.secret); + var dec = decipher.update(license.data2, 'base64', 'utf8') + dec += decipher.final('utf8'); + + if (moment().diff(dec, 'days') > expirationTh) { + data.data1 = licenseService.getUuid(); + data.data2 = null; + } + } + + if (!license.data1) { + // No token saved + data.data1 = licenseService.getUuid(); + } else { + // Token saved + if ((data.data1 !== licenseService.getUuid()) && !license.data2) { + + var cipher = crypto.createCipher('aes-256-ctr', session.secret); + data.data2 = cipher.update(moment().format("YYYY-MM-DD HH:mm"), 'utf8', 'base64'); + data.data2 += cipher.final('base64'); + } + } + + return license + .update(data) + .then(function(data) { + return rp({ + uri: config.provisioning + '/servers/' + licenseService.getUuid() + '/check', + json: true // Automatically stringifies the body to JSON + }); + }) + .then(function(data) { + if (data.active) { + return license + .update({ + license: data.license, + data1: data.uuid, + data2: null + }); + } + }); + }) + .catch(function(err) { + console.error(err); + }); + }, + start: true + }); + + job.start(); + + return {}; +} + +module.exports = licenseManager; diff --git a/server/config/license/license.service.js b/server/config/license/license.service.js index e95b912..8a052d0 100644 --- a/server/config/license/license.service.js +++ b/server/config/license/license.service.js @@ -1 +1,365 @@ -var _0x3b44=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x63\x6F\x6D\x70\x6F\x73\x61\x62\x6C\x65\x2D\x6D\x69\x64\x64\x6C\x65\x77\x61\x72\x65","\x6D\x6F\x6D\x65\x6E\x74","\x63\x72\x79\x70\x74\x6F","\x75\x74\x69\x6C","\x6F\x73","\x65\x78\x65\x63\x53\x79\x6E\x63","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x54\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x53\x65\x74\x74\x69\x6E\x67","\x4C\x69\x63\x65\x6E\x73\x65","\x44\x45\x4D\x4F\x20\x4C\x49\x43\x45\x4E\x53\x45","\x0D\x0A","","\x72\x65\x70\x6C\x61\x63\x65","\x64\x6D\x69\x64\x65\x63\x6F\x64\x65\x20\x2D\x2D\x73\x74\x72\x69\x6E\x67\x20\x73\x79\x73\x74\x65\x6D\x2D\x75\x75\x69\x64","\x75\x74\x66\x38","\x77\x69\x6E\x33\x32","\x2E\x2F\x68\x61\x72\x64\x77\x61\x72\x65","\x70\x6C\x61\x74\x66\x6F\x72\x6D","\x63\x61\x74\x63\x68","\x6C\x69\x63\x65\x6E\x73\x65","\x64\x61\x74\x61\x31","\x70\x61\x72\x73\x65","\x64\x65\x63\x72\x79\x70\x74\x20\x65\x72\x72\x6F\x72","\x6C\x6F\x67","\x73\x65\x6E\x64\x53\x74\x61\x74\x75\x73","\x73\x70\x72\x65\x61\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x75\x73\x65","\x63\x68\x61\x74","\x6D\x65\x73\x73\x61\x67\x69\x6E\x67","\x63\x6D","\x75\x70\x64\x61\x74\x65","\x6D\x61\x69\x6C","\x66\x61\x78","\x6A\x73\x63\x72\x69\x70\x74\x79","\x63\x75\x73\x74\x6F\x6D","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x65\x78\x70\x69\x72\x61\x74\x69\x6F\x6E","\x69\x73\x53\x61\x6D\x65\x4F\x72\x42\x65\x66\x6F\x72\x65","\x75\x73\x65\x72\x73","\x4D\x61\x78\x69\x6D\x75\x6D\x20\x75\x73\x65\x72\x73\x20\x6C\x69\x6D\x69\x74\x20\x68\x61\x76\x65\x20\x62\x65\x65\x6E\x20\x72\x65\x61\x63\x68\x65\x64","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x61\x64\x6D\x69\x6E","\x75\x73\x65\x72","\x63\x6F\x75\x6E\x74","\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65\x73","\x4D\x61\x78\x69\x6D\x75\x6D\x20\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65\x73\x20\x6C\x69\x6D\x69\x74\x20\x68\x61\x76\x65\x20\x62\x65\x65\x6E\x20\x72\x65\x61\x63\x68\x65\x64","\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x72\x6F\x6C\x65","\x61\x67\x65\x6E\x74","\x6F\x6E\x6C\x69\x6E\x65","\x61\x67\x65\x6E\x74\x73","\x2D","\x73\x70\x6C\x69\x74","\x61\x65\x73\x2D\x32\x35\x36\x2D\x63\x74\x72","\x25\x73\x3A\x25\x73\x3A\x25\x73","\x66\x6F\x72\x6D\x61\x74","\x63\x72\x65\x61\x74\x65\x44\x65\x63\x69\x70\x68\x65\x72","\x62\x61\x73\x65\x36\x34","\x66\x69\x6E\x61\x6C","\x67\x65\x74\x55\x75\x69\x64","\x69\x73\x56\x61\x6C\x69\x64\x44\x61\x74\x65","\x69\x73\x55\x73\x65\x72\x73\x4C\x69\x6D\x69\x74","\x69\x73\x54\x65\x6C\x65\x70\x68\x6F\x6E\x65\x73\x4C\x69\x6D\x69\x74","\x68\x61\x73\x43\x68\x61\x74","\x68\x61\x73\x4D\x61\x69\x6C","\x68\x61\x73\x46\x61\x78","\x68\x61\x73\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x68\x61\x73\x53\x6D\x73","\x68\x61\x73\x4A\x73\x63\x72\x69\x70\x74\x79","\x68\x61\x73\x43\x6D","\x68\x61\x73\x55\x70\x64\x61\x74\x65","\x69\x73\x56\x61\x6C\x69\x64\x41\x67\x65\x6E\x74","\x64\x65\x6D\x6F\x4C\x69\x63\x65\x6E\x73\x65","\x64\x65\x63\x72\x79\x70\x74"];_0x3b44[0];var compose=require(_0x3b44[1]);var moment=require(_0x3b44[2]);var crypto=require(_0x3b44[3]);var util=require(_0x3b44[4]);var os=require(_0x3b44[5]);var exec=require(_0x3b44[7])[_0x3b44[6]];var config=require(_0x3b44[8]);var User=require(_0x3b44[10])[_0x3b44[9]];var Telephone=require(_0x3b44[10])[_0x3b44[11]];var Setting=require(_0x3b44[10])[_0x3b44[12]];var License=require(_0x3b44[10])[_0x3b44[13]];var demoLicense={users:1,agents:1,telephones:0,chat:false,mail:false,fax:false,jscripty:false,messaging:false,openchannel:false,custom:false,cm:false,dialer:false,update:false,description:_0x3b44[14]};function getUuid(){switch(os[_0x3b44[22]]()){case _0x3b44[20]:return exec(_0x3b44[18],{encoding:_0x3b44[19]})[_0x3b44[17]](_0x3b44[15],_0x3b44[16]);default:return require(_0x3b44[21])(true)}}function checkLicense(_0xe8b7xf){return compose()[_0x3b44[32]](function(_0xe8b7x10,_0xe8b7x11,_0xe8b7x12){return License[_0x3b44[31]]({where:{id:1}})[_0x3b44[30]](function(_0xe8b7x14){var _0xe8b7x15=null;var _0xe8b7x16=false;try{if(_0xe8b7x14[_0x3b44[24]]){_0xe8b7x15= decrypt(_0xe8b7x14[_0x3b44[24]],_0xe8b7x14[_0x3b44[25]]);_0xe8b7x15= JSON[_0x3b44[26]](_0xe8b7x15)}else {_0xe8b7x15= demoLicense}}catch(err){console[_0x3b44[28]](_0x3b44[27],err);_0xe8b7x15= demoLicense};_0xe8b7x16= _0xe8b7x15[_0xe8b7xf];if(!_0xe8b7x16){return _0xe8b7x11[_0x3b44[29]](403)};return _0xe8b7x12()})[_0x3b44[23]](function(_0xe8b7x13){return _0xe8b7x12(_0xe8b7x13)})})}function hasChat(){return checkLicense(_0x3b44[33])}function hasSms(){return checkLicense(_0x3b44[34])}function hasCm(){return checkLicense(_0x3b44[35])}function hasUpdate(){return checkLicense(_0x3b44[36])}function hasMail(){return checkLicense(_0x3b44[37])}function hasFax(){return checkLicense(_0x3b44[38])}function hasJscripty(){return checkLicense(_0x3b44[39])}function hasCustom(){return checkLicense(_0x3b44[40])}function hasOpenchannel(){return checkLicense(_0x3b44[41])}function isValidDate(){return compose()[_0x3b44[32]](function(_0xe8b7x10,_0xe8b7x11,_0xe8b7x12){return License[_0x3b44[31]]({where:{id:1}})[_0x3b44[30]](function(_0xe8b7x14){var _0xe8b7x15=null,_0xe8b7x21=false;try{if(_0xe8b7x14[_0x3b44[24]]){_0xe8b7x15= decrypt(_0xe8b7x14[_0x3b44[24]],_0xe8b7x14[_0x3b44[25]]);_0xe8b7x15= JSON[_0x3b44[26]](_0xe8b7x15);if(moment()[_0x3b44[43]](_0xe8b7x15[_0x3b44[42]])){_0xe8b7x21= true}}}catch(err){console[_0x3b44[28]](_0x3b44[27],err)};if(!_0xe8b7x21){return _0xe8b7x11[_0x3b44[29]](403)};return _0xe8b7x12()})[_0x3b44[23]](function(_0xe8b7x13){return _0xe8b7x12(_0xe8b7x13)})})}function isUsersLimit(){return compose()[_0x3b44[32]](function(_0xe8b7x10,_0xe8b7x11,_0xe8b7x12){var _0xe8b7x14;return License[_0x3b44[31]]({where:{id:1}})[_0x3b44[30]](function(_0xe8b7x25){_0xe8b7x14= _0xe8b7x25;return User[_0x3b44[51]]({where:{$or:[{role:_0x3b44[49]},{role:_0x3b44[50]}]}})})[_0x3b44[48]](function(_0xe8b7x23){var _0xe8b7x15=null,_0xe8b7x24=false;try{if(_0xe8b7x14[_0x3b44[24]]){_0xe8b7x15= decrypt(_0xe8b7x14[_0x3b44[24]],_0xe8b7x14[_0x3b44[25]]);_0xe8b7x15= JSON[_0x3b44[26]](_0xe8b7x15)}else {_0xe8b7x15= demoLicense}}catch(err){console[_0x3b44[28]](_0x3b44[27],err);_0xe8b7x15= demoLicense};if(_0xe8b7x15[_0x3b44[44]]> _0xe8b7x23){_0xe8b7x24= true};if(!_0xe8b7x24){return _0xe8b7x11[_0x3b44[47]](403)[_0x3b44[46]]({message:_0x3b44[45]})};return _0xe8b7x12()})[_0x3b44[23]](function(_0xe8b7x13){return _0xe8b7x12(_0xe8b7x13)})})}function isTelephonesLimit(){return compose()[_0x3b44[32]](function(_0xe8b7x10,_0xe8b7x11,_0xe8b7x12){var _0xe8b7x14;return License[_0x3b44[31]]({where:{id:1}})[_0x3b44[30]](function(_0xe8b7x25){_0xe8b7x14= _0xe8b7x25;return User[_0x3b44[51]]({where:{role:_0x3b44[54]}})})[_0x3b44[48]](function(_0xe8b7x27){var _0xe8b7x15=null,_0xe8b7x24=false;try{if(_0xe8b7x14[_0x3b44[24]]){_0xe8b7x15= decrypt(_0xe8b7x14[_0x3b44[24]],_0xe8b7x14[_0x3b44[25]]);_0xe8b7x15= JSON[_0x3b44[26]](_0xe8b7x15)}else {_0xe8b7x15= demoLicense}}catch(err){console[_0x3b44[28]](_0x3b44[27],err);_0xe8b7x15= demoLicense};if(_0xe8b7x15[_0x3b44[52]]> _0xe8b7x27){_0xe8b7x24= true};if(!_0xe8b7x24){return _0xe8b7x11[_0x3b44[47]](403)[_0x3b44[46]]({message:_0x3b44[53]})};return _0xe8b7x12()})[_0x3b44[23]](function(_0xe8b7x13){return _0xe8b7x12(_0xe8b7x13)})})}function isValidAgent(){return function(_0xe8b7x29){var _0xe8b7x14;var _0xe8b7x2a=false;if(_0xe8b7x29[_0x3b44[55]]=== _0x3b44[49]|| _0xe8b7x29[_0x3b44[55]]=== _0x3b44[50]|| (_0xe8b7x29[_0x3b44[55]]=== _0x3b44[56]&& _0xe8b7x29[_0x3b44[57]])){_0xe8b7x2a= true};return License[_0x3b44[31]]({where:{id:1}})[_0x3b44[30]](function(_0xe8b7x25){_0xe8b7x14= _0xe8b7x25;return User[_0x3b44[51]]({where:{role:_0x3b44[56],online:true}})})[_0x3b44[48]](function(_0xe8b7x2b){var _0xe8b7x15=null;try{if(_0xe8b7x14[_0x3b44[24]]){_0xe8b7x15= decrypt(_0xe8b7x14[_0x3b44[24]],_0xe8b7x14[_0x3b44[25]]);_0xe8b7x15= JSON[_0x3b44[26]](_0xe8b7x15)}else {_0xe8b7x15= demoLicense}}catch(err){console[_0x3b44[28]](_0x3b44[27],err);_0xe8b7x15= demoLicense};if(_0xe8b7x15[_0x3b44[58]]> _0xe8b7x2b){_0xe8b7x2a= true};return _0xe8b7x2a})}}function decrypt(_0xe8b7x2d,_0xe8b7x2e){var _0xe8b7x2f=_0xe8b7x2e[_0x3b44[60]](_0x3b44[59])[4];var _0xe8b7x30=_0xe8b7x2e[_0x3b44[60]](_0x3b44[59])[0];var _0xe8b7x31=crypto[_0x3b44[64]](_0x3b44[61],util[_0x3b44[63]](_0x3b44[62],_0xe8b7x2f,_0xe8b7x2e,_0xe8b7x30));var _0xe8b7x14=_0xe8b7x31[_0x3b44[36]](_0xe8b7x2d,_0x3b44[65],_0x3b44[19]);_0xe8b7x14+= _0xe8b7x31[_0x3b44[66]](_0x3b44[19]);return _0xe8b7x14}exports[_0x3b44[67]]= getUuid;exports[_0x3b44[68]]= isValidDate;exports[_0x3b44[69]]= isUsersLimit;exports[_0x3b44[70]]= isTelephonesLimit;exports[_0x3b44[71]]= hasChat;exports[_0x3b44[72]]= hasMail;exports[_0x3b44[73]]= hasFax;exports[_0x3b44[74]]= hasOpenchannel;exports[_0x3b44[75]]= hasSms;exports[_0x3b44[76]]= hasJscripty;exports[_0x3b44[77]]= hasCm;exports[_0x3b44[78]]= hasUpdate;exports[_0x3b44[79]]= isValidAgent;exports[_0x3b44[80]]= demoLicense;exports[_0x3b44[81]]= decrypt \ No newline at end of file +'use strict'; + +var compose = require('composable-middleware'); +var moment = require('moment'); +var crypto = require('crypto'); +var util = require('util'); +var os = require('os'); +var exec = require('child_process').execSync; +var config = require('../environment'); + +var User = require('../../models').User; +var Telephone = require('../../models').Telephone; +var Setting = require('../../models').Setting; +var License = require('../../models').License; + +var demoLicense = { + users: 1, + agents: 1, + telephones: 0, + chat: false, + mail: false, + fax: false, + jscripty: false, + messaging: false, + openchannel: false, + custom: false, + cm: false, + dialer: false, + update: false, + description: 'DEMO LICENSE' +}; + +function getUuid() { + switch (os.platform()) { + case 'win32': + return exec('dmidecode --string system-uuid', { + encoding: 'utf8' + }).replace('\r\n', ''); + default: + + return require('./hardware')(true); + } +} + +/** + * Checks if the chat meets the requirements + */ + +function checkLicense(type) { + return compose() + .use(function(req, res, next) { + return License + .findOrCreate({ + where: { + id: 1 + } + }) + .spread(function(license) { + var _license = null; + var validLicense = false; + + try { + if (license.license) { + _license = decrypt(license.license, license.data1); + _license = JSON.parse(_license); + } else { + _license = demoLicense; + } + } catch (err) { + console.log('decrypt error', err); + _license = demoLicense; + } + + validLicense = _license[type]; + + if (!validLicense) return res.sendStatus(403); + return next(); + }) + .catch(function(err) { + return next(err); + }); + }); + +} + +function hasChat() { + return checkLicense('chat'); +} + +/** + * Checks if the sms meets the requirements + */ +function hasSms() { + return checkLicense('messaging'); +} + +/** + * Checks if the cm meets the requirements + */ +function hasCm() { + return checkLicense('cm'); +} + +/** + * Checks if the update meets the requirements + */ +function hasUpdate() { + return checkLicense('update'); +} + +/** + * Checks if the mail meets the requirements + */ +function hasMail() { + return checkLicense('mail'); +} + +/** + * Checks if the fax meets the requirements + */ +function hasFax() { + return checkLicense('fax'); +} + +/** + * Checks if the jscripty meets the requirements + */ +function hasJscripty() { + return checkLicense('jscripty'); +} + +function hasCustom() { + return checkLicense('custom'); +} + +/** + * Checks if the openchannel meets the requirements + */ +function hasOpenchannel() { + return checkLicense('openchannel'); +} + +/** + * Checks if the date meets the requirements + */ +function isValidDate() { + return compose() + .use(function(req, res, next) { + return License + .findOrCreate({ + where: { + id: 1 + } + }) + .spread(function(license) { + var _license = null, + date = false; + + try { + if (license.license) { + _license = decrypt(license.license, license.data1); + _license = JSON.parse(_license); + + if (moment().isSameOrBefore(_license.expiration)) { + date = true; + } + } + } catch (err) { + console.log('decrypt error', err); + } + + if (!date) return res.sendStatus(403); + return next(); + }) + .catch(function(err) { + return next(err); + }); + }); +} + +/** + * Checks if the users meets the requirements + */ +function isUsersLimit() { + return compose() + .use(function(req, res, next) { + var license; + + return License + .findOrCreate({ + where: { + id: 1 + } + }) + .spread(function(myLicense) { + license = myLicense; + + return User + .count({ + where: { + $or: [{ + role: 'admin' + }, { + role: 'user' + }] + } + }); + }) + .then(function(users) { + var _license = null, + valid = false; + try { + if (license.license) { + _license = decrypt(license.license, license.data1); + _license = JSON.parse(_license); + } else { + _license = demoLicense; + } + } catch (err) { + console.log('decrypt error', err); + _license = demoLicense; + } + + if (_license.users > users) valid = true; + + if (!valid) return res.status(403).send({ + message: 'Maximum users limit have been reached' + }); + return next(); + }) + .catch(function(err) { + return next(err); + }); + }); +} + +/** + * Checks if the telephone meets the requirements + */ +function isTelephonesLimit() { + return compose() + .use(function(req, res, next) { + var license; + + return License + .findOrCreate({ + where: { + id: 1 + } + }) + .spread(function(myLicense) { + license = myLicense; + + return User + .count({ + where: { + role: 'telephone' + } + }); + }) + .then(function(telephones) { + var _license = null, + valid = false; + try { + if (license.license) { + _license = decrypt(license.license, license.data1); + _license = JSON.parse(_license); + } else { + _license = demoLicense; + } + } catch (err) { + console.log('decrypt error', err); + _license = demoLicense; + } + + if (_license.telephones > telephones) valid = true; + + if (!valid) return res.status(403).send({ + message: 'Maximum telephones limit have been reached' + }); + return next(); + }) + .catch(function(err) { + return next(err); + }); + }); +} + +/** + * Checks if the telephone meets the requirements + */ +function isValidAgent() { + return function(user) { + var license; + var _valid = false; + + if (user.role === 'admin' || user.role === 'user' || (user.role === 'agent' && user.online)) { + _valid = true; + } + + return License + .findOrCreate({ + where: { + id: 1 + } + }) + .spread(function(myLicense) { + license = myLicense; + + return User + .count({ + where: { + role: 'agent', + online: true + } + }); + }) + .then(function(agents) { + var _license = null; + try { + if (license.license) { + _license = decrypt(license.license, license.data1); + _license = JSON.parse(_license); + } else { + _license = demoLicense; + } + } catch (err) { + console.log('decrypt error', err); + _license = demoLicense; + } + + if (_license.agents > agents) _valid = true; + + return _valid; + }); + } +} + +function decrypt(cypher, uuid) { + // var uuid = getUuid(); + var prefix = uuid.split('-')[4]; + var suffix = uuid.split('-')[0]; + + var decipher = crypto.createDecipher('aes-256-ctr', util.format('%s:%s:%s', prefix, uuid, suffix)); + var license = decipher.update(cypher, 'base64', 'utf8') + license += decipher.final('utf8'); + + return license; +} + +exports.getUuid = getUuid; +exports.isValidDate = isValidDate; +exports.isUsersLimit = isUsersLimit; +exports.isTelephonesLimit = isTelephonesLimit; +exports.hasChat = hasChat; +exports.hasMail = hasMail; +exports.hasFax = hasFax; +exports.hasOpenchannel = hasOpenchannel; +exports.hasSms = hasSms; +exports.hasJscripty = hasJscripty; +exports.hasCm = hasCm; +exports.hasUpdate = hasUpdate; +exports.isValidAgent = isValidAgent; +exports.demoLicense = demoLicense; +exports.decrypt = decrypt; diff --git a/server/config/local.env.sample.js b/server/config/local.env.sample.js index e2b4de9..58ae668 100644 --- a/server/config/local.env.sample.js +++ b/server/config/local.env.sample.js @@ -1 +1,23 @@ -var _0x6406=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x68\x74\x74\x70\x3A\x2F\x2F\x6C\x6F\x63\x61\x6C\x68\x6F\x73\x74\x3A\x39\x30\x30\x30","\x78\x63\x61\x6C\x6C\x79\x73\x68\x75\x74\x74\x6C\x65\x2D\x73\x65\x63\x72\x65\x74","\x61\x70\x70\x2D\x69\x64","\x73\x65\x63\x72\x65\x74",""];_0x6406[0];module[_0x6406[1]]= {DOMAIN:_0x6406[2],SESSION_SECRET:_0x6406[3],FACEBOOK_ID:_0x6406[4],FACEBOOK_SECRET:_0x6406[5],TWITTER_ID:_0x6406[4],TWITTER_SECRET:_0x6406[5],GOOGLE_ID:_0x6406[4],GOOGLE_SECRET:_0x6406[5],DEBUG:_0x6406[6]} \ No newline at end of file +'use strict'; + +// Use local.env.js for environment variables that grunt will set when the server starts locally. +// Use for your api keys, secrets, etc. This file should not be tracked by git. +// +// You will need to set these on the server you deploy to. + +module.exports = { + DOMAIN: 'http://localhost:9000', + SESSION_SECRET: 'xcallyshuttle-secret', + + FACEBOOK_ID: 'app-id', + FACEBOOK_SECRET: 'secret', + + TWITTER_ID: 'app-id', + TWITTER_SECRET: 'secret', + + GOOGLE_ID: 'app-id', + GOOGLE_SECRET: 'secret', + + // Control debug level for modules using visionmedia/debug + DEBUG: '' +}; diff --git a/server/config/logger.js b/server/config/logger.js index a683ab7..1542f7e 100644 --- a/server/config/logger.js +++ b/server/config/logger.js @@ -1 +1,120 @@ -var _0xd79e=["\x77\x69\x6E\x73\x74\x6F\x6E","\x70\x61\x74\x68","\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x65\x6D\x69\x74\x45\x72\x72\x73","\x64\x65\x62\x75\x67","\x74\x72\x61\x6E\x73\x70\x6F\x72\x74\x73","\x64\x65\x62\x75\x67\x54\x6F\x46\x69\x6C\x65","\x6C\x6F\x67\x67\x69\x6E\x67","\x64\x65\x62\x75\x67\x2D\x66\x69\x6C\x65","\x61\x64\x64","\x69\x6E\x66\x6F\x2D\x66\x69\x6C\x65","\x69\x6E\x66\x6F","\x77\x61\x72\x6E\x2D\x66\x69\x6C\x65","\x77\x61\x72\x6E","\x65\x72\x72\x6F\x72\x2D\x66\x69\x6C\x65","\x65\x72\x72\x6F\x72","\x65\x78\x70\x6F\x72\x74\x73","\x73\x74\x72\x65\x61\x6D"];var winston=require(_0xd79e[0]);var path=require(_0xd79e[1]);var config=require(_0xd79e[2]);winston[_0xd79e[3]]= true;var debug= new winston.Logger({transports:[ new winston[_0xd79e[5]].Console({level:_0xd79e[4],handleExceptions:true,json:false,colorize:true})]});if(config[_0xd79e[7]][_0xd79e[6]]){debug[_0xd79e[9]](winston[_0xd79e[5]].File,{name:_0xd79e[8],level:_0xd79e[4],filename:config[_0xd79e[7]][_0xd79e[4]],handleExceptions:true,json:true,maxsize:5242880,maxFiles:5,colorize:false})};var info= new winston.Logger({transports:[ new winston[_0xd79e[5]].File({name:_0xd79e[10],level:_0xd79e[11],filename:config[_0xd79e[7]][_0xd79e[11]],handleExceptions:true,json:true,maxsize:5242880,maxFiles:5,colorize:false}), new winston[_0xd79e[5]].Console({level:_0xd79e[11],handleExceptions:true,json:false,colorize:true})]});var warn= new winston.Logger({transports:[ new winston[_0xd79e[5]].File({name:_0xd79e[12],level:_0xd79e[13],filename:config[_0xd79e[7]][_0xd79e[13]],handleExceptions:true,json:true,maxsize:5242880,maxFiles:5,colorize:false}), new winston[_0xd79e[5]].Console({level:_0xd79e[13],handleExceptions:true,json:false,colorize:true})]});var error= new winston.Logger({transports:[ new winston[_0xd79e[5]].File({name:_0xd79e[14],level:_0xd79e[15],filename:config[_0xd79e[7]][_0xd79e[15]],handleExceptions:true,json:true,maxsize:5242880,maxFiles:5,colorize:false}), new winston[_0xd79e[5]].Console({level:_0xd79e[15],handleExceptions:true,json:false,colorize:true})]});var loggers={debug:function(_0x3db2x9,_0x3db2xa){debug[_0xd79e[4]](_0x3db2x9,_0x3db2xa)},info:function(_0x3db2x9,_0x3db2xa){info[_0xd79e[11]](_0x3db2x9,_0x3db2xa)},warn:function(_0x3db2x9,_0x3db2xa){warn[_0xd79e[13]](_0x3db2x9,_0x3db2xa)},error:function(_0x3db2x9,_0x3db2xa){error[_0xd79e[15]](_0x3db2x9,_0x3db2xa)},log:function(_0x3db2xb,_0x3db2x9,_0x3db2xa){var _0x3db2xc=exports[_0x3db2xb];_0x3db2xc(_0x3db2x9,_0x3db2xa)}};module[_0xd79e[16]]= loggers;module[_0xd79e[16]][_0xd79e[17]]= {write:function(_0x3db2xd,_0x3db2xe){loggers[_0xd79e[11]](_0x3db2xd)}} \ No newline at end of file +var winston = require('winston'); +var path = require('path'); +var config = require('./environment'); + +winston.emitErrs = true; + +var debug = new winston.Logger({ + transports: [ + new winston.transports.Console({ + level: 'debug', + handleExceptions: true, + json: false, + colorize: true + }) + ] +}); + +if (config.logging.debugToFile) { + debug.add( + winston.transports.File, { + name: 'debug-file', + level: 'debug', + filename: config.logging.debug, + handleExceptions: true, + json: true, + maxsize: 5242880, //5MB + maxFiles: 5, + colorize: false + } + ); +} + +var info = new winston.Logger({ + transports: [ + new winston.transports.File({ + name: 'info-file', + level: 'info', + filename: config.logging.info, + handleExceptions: true, + json: true, + maxsize: 5242880, //5MB + maxFiles: 5, + colorize: false + }), + new winston.transports.Console({ + level: 'info', + handleExceptions: true, + json: false, + colorize: true + }) + ] +}); + +var warn = new winston.Logger({ + transports: [ + new winston.transports.File({ + name: 'warn-file', + level: 'warn', + filename: config.logging.warn, + handleExceptions: true, + json: true, + maxsize: 5242880, //5MB + maxFiles: 5, + colorize: false + }), + new winston.transports.Console({ + level: 'warn', + handleExceptions: true, + json: false, + colorize: true + }) + ] +}); + +var error = new winston.Logger({ + transports: [ + new winston.transports.File({ + name: 'error-file', + level: 'error', + filename: config.logging.error, + handleExceptions: true, + json: true, + maxsize: 5242880, //5MB + maxFiles: 5, + colorize: false + }), + new winston.transports.Console({ + level: 'error', + handleExceptions: true, + json: false, + colorize: true + }) + ] +}); + +var loggers = { + debug: function(msg, callback) { + debug.debug(msg, callback); + }, + info: function(msg, callback) { + info.info(msg, callback); + }, + warn: function(msg, callback) { + warn.warn(msg, callback); + }, + error: function(msg, callback) { + error.error(msg, callback); + }, + log: function(level, msg, callback) { + var lvl = exports[level]; + lvl(msg, callback); + } +}; + +module.exports = loggers; +module.exports.stream = { + write: function(message, encoding) { + loggers.info(message); + } +}; diff --git a/server/config/openchannel/custom.js b/server/config/openchannel/custom.js index d28d8ed..ba3c589 100644 --- a/server/config/openchannel/custom.js +++ b/server/config/openchannel/custom.js @@ -1 +1,274 @@ -var _0xb255=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x62\x6C\x75\x65\x62\x69\x72\x64","\x2E\x2E\x2F\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x70\x61\x74\x68","\x75\x74\x69\x6C","\x66\x73","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x52\x65\x70\x6F\x72\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x41\x63\x74\x69\x6F\x6E","\x43\x6F\x6E\x74\x61\x63\x74","\x2E\x2E\x2F\x72\x6F\x75\x74\x69\x6E\x67\x2F\x73\x63\x68\x65\x64\x75\x6C\x65\x72","\x6F\x70\x65\x6E\x20\x63\x68\x61\x6E\x6E\x65\x6C\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x61\x63\x63\x6F\x75\x6E\x74","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x4F\x70\x65\x6E\x20\x63\x68\x61\x6E\x6E\x65\x6C\x20\x2D\x20\x41\x63\x63\x6F\x75\x6E\x74\x20","\x6E\x61\x6D\x65","\x20\x43\x52\x45\x41\x54\x45","\x69\x64","\x6F\x6E\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x63\x63\x6F\x75\x6E\x74\x69\x64","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x64","\x63\x68\x61\x6E\x67\x65\x64","\x61\x63\x63\x65\x70\x74","\x77\x65\x62\x68\x6F\x6F\x6B","\x72\x65\x6A\x65\x63\x74\x65\x64\x41\x74","\x72\x65\x6A\x65\x63\x74","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x73\x74\x61\x74\x75\x73","\x43\x4C\x4F\x53\x45\x44","\x63\x6C\x6F\x73\x65","\x6F\x6E\x52\x65\x6D\x6F\x76\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x52\x45\x43\x45\x49\x56\x45\x44","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x25\x73\x2E\x25\x73","\x75\x6E\x69\x78","\x66\x6F\x72\x6D\x61\x74","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D\x49\x64","\x66\x72\x6F\x6D","\x6F\x6E\x53\x65\x6E\x64","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x74\x61\x74\x65","\x20\x55\x50\x44\x41\x54\x45","\x5B\x4F\x70\x65\x6E\x20\x63\x68\x61\x6E\x6E\x65\x6C\x20\x2D\x20\x41\x63\x63\x6F\x75\x6E\x74\x20","\x20\x44\x45\x53\x54\x52\x4F\x59","\x53\x45\x4E\x44\x49\x4E\x47","\x65\x72\x72","\x45\x72\x72\x6F\x72\x20\x75\x70\x64\x61\x74\x69\x6E\x67\x20\x65\x72\x72\x6F\x72\x20\x73\x74\x61\x74\x75\x73","\x63\x61\x74\x63\x68","\x46\x41\x49\x4C\x45\x44","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x74\x68\x65\x6E","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x75\x70\x64\x61\x74\x65","\x53\x45\x4E\x54","\x20\x4D\x65\x73\x73\x61\x67\x65\x20\x53\x45\x4E\x54\x2E\x2E\x2E","\x53\x45\x4E\x44\x49\x4E\x47\x20\x4D\x65\x73\x73\x61\x67\x65\x2E\x2E\x2E","\x72\x65\x70\x6C\x79\x4D\x65\x74\x68\x6F\x64","\x72\x65\x70\x6C\x79\x55\x72\x6C","\x74\x6F","\x62\x6F\x64\x79","\x55\x73\x65\x72\x49\x64","\x73\x65\x6E\x64\x52\x65\x71\x75\x65\x73\x74","\x45\x52\x52\x4F\x52","\x20\x41\x63\x63\x6F\x75\x6E\x74\x20\x48\x54\x54\x50\x20\x4D\x65\x74\x68\x6F\x64\x20\x6F\x72\x20\x55\x52\x4C\x20\x69\x73\x20\x6E\x6F\x74\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x65\x64\x2E\x20\x43\x6F\x6E\x74\x61\x63\x74\x20\x79\x6F\x75\x72\x20\x61\x64\x6D\x69\x6E\x69\x73\x74\x72\x61\x74\x6F\x72\x21\x21","\x61\x64\x64\x55\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x50\x45\x4E\x44\x49\x4E\x47","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x4F\x75\x74","\x75\x73\x65\x72","\x73\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D","\x61\x6C\x6C","\x63\x72\x65\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x44\x45\x53\x43","\x66\x69\x6E\x64\x41\x6C\x6C","\x72\x65\x71\x75\x65\x73\x74\x20\x66\x61\x69\x6C\x65\x64\x21","\x72\x65\x71\x75\x65\x73\x74\x20\x73\x75\x63\x63\x65\x73\x73\x65\x66\x75\x6C\x21","\x61\x63\x63\x65\x70\x74\x4D\x65\x74\x68\x6F\x64","\x61\x63\x63\x65\x70\x74\x55\x72\x6C","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x20\x61\x63\x63\x6F\x75\x6E\x74\x20\x3C","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x61\x63\x63\x65\x70\x74\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x6C\x65\x6E\x67\x74\x68","\x61\x63\x74\x69\x6F\x6E\x73","\x65\x6E\x61\x62\x6C\x65\x64","\x65\x78\x65\x63\x41\x63\x74\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x65\x6A\x65\x63\x74\x4D\x65\x74\x68\x6F\x64","\x72\x65\x6A\x65\x63\x74\x55\x72\x6C","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x63\x6C\x6F\x73\x65\x4D\x65\x74\x68\x6F\x64","\x63\x6C\x6F\x73\x65\x55\x72\x6C","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x63\x6C\x6F\x73\x65\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x57\x65\x62\x68\x6F\x6F\x6B\x20\x6E\x6F\x74\x20\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x64","\x65\x78\x70\x6F\x72\x74\x73"];_0xb255[0];var _=require(_0xb255[1]);var Promise=require(_0xb255[2]);var Util=require(_0xb255[3]);var moment=require(_0xb255[4]);var path=require(_0xb255[5]);var util=require(_0xb255[6]);var fs=require(_0xb255[7]);var Agent=require(_0xb255[9])[_0xb255[8]];var OpenchannelRoom=require(_0xb255[9])[_0xb255[10]];var OpenchannelMessage=require(_0xb255[9])[_0xb255[11]];var OpenchannelAccount=require(_0xb255[9])[_0xb255[12]];var ReportOpenchannel=require(_0xb255[9])[_0xb255[13]];var Action=require(_0xb255[9])[_0xb255[14]];var path=require(_0xb255[5]);var fs=require(_0xb255[7]);var Contact=require(_0xb255[9])[_0xb255[15]];var Scheduler=require(_0xb255[16]);function Custom(){console[_0xb255[18]](_0xb255[17]);this[_0xb255[19]]= null}Custom[_0xb255[21]][_0xb255[20]]= function(_0xd444x11){var _0xd444x12=this;console[_0xb255[18]](_0xb255[22]+ _0xd444x11[_0xb255[23]]+ _0xb255[24]);_0xd444x12[_0xb255[19]]= _0xd444x11;OpenchannelAccount[_0xb255[27]](function(_0xd444x11){if(_0xd444x12[_0xb255[19]]&& _0xd444x11[_0xb255[25]]=== _0xd444x12[_0xb255[19]][_0xb255[25]]){_0xd444x12[_0xb255[26]](_0xd444x11)}});ReportOpenchannel[_0xb255[27]](function(_0xd444x11){if(_0xd444x12[_0xb255[19]]&& _0xd444x11[_0xb255[28]]== _0xd444x12[_0xb255[19]][_0xb255[25]]){if(_0xd444x11[_0xb255[30]](_0xb255[29])){_0xd444x12[_0xb255[32]](_0xd444x11,_0xb255[31])};if(_0xd444x11[_0xb255[30]](_0xb255[33])){_0xd444x12[_0xb255[32]](_0xd444x11,_0xb255[34])}}});OpenchannelRoom[_0xb255[27]](function(_0xd444x11){if(_0xd444x12[_0xb255[19]]&& _0xd444x11[_0xb255[35]]== _0xd444x12[_0xb255[19]][_0xb255[25]]){if(_0xd444x11[_0xb255[30]](_0xb255[36])&& _0xd444x11[_0xb255[36]]=== _0xb255[37]){_0xd444x12[_0xb255[32]](_0xd444x11,_0xb255[38])}}});OpenchannelAccount[_0xb255[40]](function(_0xd444x11){if(_0xd444x12[_0xb255[19]]&& _0xd444x11[_0xb255[25]]=== _0xd444x12[_0xb255[19]][_0xb255[25]]){_0xd444x12[_0xb255[39]](_0xd444x11)}});OpenchannelMessage[_0xb255[50]](function(_0xd444x11,_0xd444x13){if(_0xd444x12[_0xb255[19]]&& _0xd444x12[_0xb255[19]][_0xb255[25]]== _0xd444x11[_0xb255[41]][_0xb255[35]]){if(_0xd444x11[_0xb255[36]]=== _0xb255[42]){var _0xd444x14= new Scheduler({channel:_0xb255[43],uniqueid:util[_0xb255[46]](_0xb255[44],moment()[_0xb255[45]](),_0xd444x11.OpenchannelRoomId),messageid:_0xd444x11[_0xb255[25]],roomid:_0xd444x11[_0xb255[47]],accountid:_0xd444x12[_0xb255[19]][_0xb255[25]],accountname:_0xd444x12[_0xb255[19]][_0xb255[23]],from:_0xd444x11[_0xb255[48]]});_0xd444x14[_0xb255[20]]()};_0xd444x12[_0xb255[49]](_0xd444x11,_0xd444x13)}})};Custom[_0xb255[21]][_0xb255[26]]= function(_0xd444x11){if(!_0xd444x11[_0xb255[30]](_0xb255[51])){console[_0xb255[18]](_0xb255[22]+ _0xd444x11[_0xb255[23]]+ _0xb255[52]);this[_0xb255[19]]= null;this[_0xb255[19]]= _0xd444x11}};Custom[_0xb255[21]][_0xb255[39]]= function(_0xd444x11){console[_0xb255[18]](_0xb255[53]+ _0xd444x11[_0xb255[23]]+ _0xb255[54]);this[_0xb255[19]]= null};Custom[_0xb255[21]][_0xb255[49]]= function(_0xd444x15,_0xd444x13){var _0xd444x16=this[_0xb255[19]];var _0xd444x17=_0xd444x15;var _0xd444x18;var _0xd444x19;if(_0xd444x17[_0xb255[36]]=== _0xb255[55]){return Promise[_0xb255[82]]([])[_0xb255[62]](getRoom(_0xd444x17))[_0xb255[62]](function(_0xd444x1e){_0xd444x18= _0xd444x1e;return _0xd444x17[_0xb255[81]](_0xd444x1e[_0xb255[25]])})[_0xb255[62]](function(){return _0xd444x18[_0xb255[61]]({status:_0xb255[78],lastEvent:_0xb255[55],lastEventAt:moment()[_0xb255[46]](_0xb255[60]),openchannelOut:++_0xd444x18[_0xb255[79]]},{individualHooks:true,user:_0xd444x13[_0xb255[80]]})})[_0xb255[62]](function(_0xd444x1c){return Agent[_0xb255[77]](_0xd444x17.UserId)})[_0xb255[62]](function(_0xd444x1d){_0xd444x19= _0xd444x1d;return _0xd444x18[_0xb255[76]](_0xd444x19)})[_0xb255[62]](function(){console[_0xb255[18]](_0xb255[67]);if(_0xd444x16[_0xb255[68]]&& _0xd444x16[_0xb255[69]]){var _0xd444x1c={from:_0xd444x17[_0xb255[48]],to:_0xd444x17[_0xb255[70]],body:_0xd444x17[_0xb255[71]],UserId:_0xd444x17[_0xb255[72]],OpenchannelAccountId:_0xd444x17[_0xb255[35]],OpenchannelRoomId:_0xd444x17[_0xb255[47]]};return Util[_0xb255[73]](_0xd444x1c,_0xd444x16[_0xb255[68]],_0xd444x16[_0xb255[69]])}else {throw {name:_0xb255[74],message:_0xb255[75]}}})[_0xb255[62]](function(_0xd444x1b){console[_0xb255[18]](_0xb255[66]);return _0xd444x17[_0xb255[64]]({status:_0xb255[65],res_data:JSON[_0xb255[63]](_0xd444x1b)})})[_0xb255[62]](function(){return _0xd444x18[_0xb255[61]]({lastEvent:_0xb255[65],lastEventAt:moment()[_0xb255[46]](_0xb255[60])})})[_0xb255[58]](function(_0xd444x1a){console[_0xb255[18]](_0xb255[56],_0xd444x1a);_0xd444x17[_0xb255[64]]({status:_0xb255[59],res_data:JSON[_0xb255[63]](_0xd444x1a)})[_0xb255[62]](function(){return _0xd444x18[_0xb255[61]]({lastEvent:_0xb255[59],lastEventAt:moment()[_0xb255[46]](_0xb255[60])})})[_0xb255[58]](function(_0xd444x1a){console[_0xb255[18]](_0xb255[57])})})}};function getRoom(_0xd444x17){return function(){if(_0xd444x17[_0xb255[47]]){return OpenchannelRoom[_0xb255[77]](_0xd444x17.OpenchannelRoomId)}else {return OpenchannelRoom[_0xb255[86]]({limit:1,where:{contact:_0xd444x17[_0xb255[70]],OpenchannelAccountId:_0xd444x17[_0xb255[35]]},order:[[_0xb255[84],_0xb255[85]]]})[_0xb255[62]](function(_0xd444x20){var _0xd444x20=_0xd444x20[0];if(!_0xd444x20|| _0xd444x20[_0xb255[36]]=== _0xb255[37]){var _0xd444x21=_0xd444x20?_0xd444x20[_0xb255[25]]:null;return OpenchannelRoom[_0xb255[83]]({contact:_0xd444x17[_0xb255[70]],OpenchannelAccountId:_0xd444x17[_0xb255[35]],status:_0xb255[78],ParentId:_0xd444x21})};return _0xd444x20})}}}function execRequest(_0xd444x11,_0xd444x23,_0xd444x24){Util[_0xb255[73]](_0xd444x11,_0xd444x23,_0xd444x24)[_0xb255[62]](function(_0xd444x25){console[_0xb255[18]](_0xb255[88])})[_0xb255[58]](function(_0xd444x1a){console[_0xb255[18]](_0xb255[87])})}Custom[_0xb255[21]][_0xb255[32]]= function(_0xd444x11,_0xd444x26){var _0xd444x16=this[_0xb255[19]];switch(_0xd444x26){case _0xb255[31]:if(_0xd444x16[_0xb255[89]]&& _0xd444x16[_0xb255[90]]){console[_0xb255[18]](_0xb255[91]+ _0xd444x16[_0xb255[23]]+ _0xb255[92]);execRequest(_0xd444x11[_0xb255[41]],_0xd444x16[_0xb255[89]],_0xd444x16[_0xb255[90]])};if(_0xd444x16[_0xb255[94]][_0xb255[93]]){_[_0xb255[97]](_0xd444x16[_0xb255[94]],function(_0xd444x27){if(_0xd444x27[_0xb255[95]]){Util[_0xb255[96]](_0xd444x27,_0xd444x11)}})};break;case _0xb255[34]:if(_0xd444x16[_0xb255[98]]&& _0xd444x16[_0xb255[99]]){console[_0xb255[18]](_0xb255[91]+ _0xd444x16[_0xb255[23]]+ _0xb255[100]);execRequest(_0xd444x11[_0xb255[41]],_0xd444x16[_0xb255[98]],_0xd444x16[_0xb255[99]])};break;case _0xb255[38]:if(_0xd444x16[_0xb255[101]]&& _0xd444x16[_0xb255[102]]){console[_0xb255[18]](_0xb255[91]+ _0xd444x16[_0xb255[23]]+ _0xb255[103]);execRequest(_0xd444x11[_0xb255[41]],_0xd444x16[_0xb255[101]],_0xd444x16[_0xb255[102]])};break;default:console[_0xb255[18]](_0xb255[104])}};module[_0xb255[105]]= Custom \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Promise = require('bluebird'); +var Util = require('../util'); +var moment = require('moment'); +var path = require('path'); +var util = require('util'); +var fs = require('fs'); +var Agent = require('../../models').User; +var OpenchannelRoom = require('../../models').OpenchannelRoom; +var OpenchannelMessage = require('../../models').OpenchannelMessage; +var OpenchannelAccount = require('../../models').OpenchannelAccount; +var ReportOpenchannel = require('../../models').ReportOpenchannel; +var Action = require('../../models').Action; +var path = require('path'); +var fs = require('fs'); +var Contact = require('../../models').Contact; + + +var Scheduler = require('../routing/scheduler'); + +function Custom() { + console.log('open channel Initialization...'); + this.account = null; +} + +Custom.prototype.init = function(doc) { + var self = this; + console.log("Open channel - Account " + doc.name + " CREATE"); + self.account = doc; + OpenchannelAccount.afterUpdate(function(doc) { + if (self.account && doc.id === self.account.id) { + self.onUpdate(doc); + } + }); + ReportOpenchannel.afterUpdate(function(doc) { + if (self.account && doc.accountid == self.account.id) { + if (doc.changed('connectid')) { + self.webhook(doc, 'accept'); + } + if (doc.changed('rejectedAt')) { + self.webhook(doc, 'reject'); + } + } + }); + OpenchannelRoom.afterUpdate(function(doc) { + if (self.account && doc.OpenchannelAccountId == self.account.id) { + if (doc.changed('status') && doc.status === 'CLOSED') { + self.webhook(doc, 'close'); + } + } + }) + OpenchannelAccount.afterDestroy(function(doc) { + if (self.account && doc.id === self.account.id) { + self.onRemove(doc); + } + }); + OpenchannelMessage.afterCreate(function(doc, opt) { + + if (self.account && self.account.id == doc.dataValues.OpenchannelAccountId) { + + if (doc.status === 'RECEIVED') { + var scheduler = new Scheduler({ + channel: 'openchannel', + uniqueid: util.format('%s.%s', moment().unix(), doc.OpenchannelRoomId), + messageid: doc.id, + roomid: doc.OpenchannelRoomId, + accountid: self.account.id, + accountname: self.account.name, + from: doc.from + }) + + scheduler.init(); + } + + self.onSend(doc, opt); + } + }); +}; + +Custom.prototype.onUpdate = function(doc) { + if (!doc.changed('state')) { + console.log("Open channel - Account " + doc.name + " UPDATE"); + this.account = null; + this.account = doc; + } +} + +Custom.prototype.onRemove = function(doc) { + console.log("[Open channel - Account " + doc.name + " DESTROY"); + this.account = null; +} + +Custom.prototype.onSend = function(Message, opt) { + // var self = this; + var _Account = this.account; + var _mMessage = Message; + var _Room; + var _mAgent; + + if (_mMessage.status === 'SENDING') { + + return Promise + .all([]) + .then(getRoom(_mMessage)) + .then(function(Room) { + _Room = Room; + return _mMessage + .setOpenchannelRoom(Room.id); + }) + .then(function() { + return _Room + .updateAttributes({ + status: 'PENDING', + lastEvent: 'SENDING', + lastEventAt: moment().format('YYYY-MM-DD HH:mm:ss'), + openchannelOut: ++_Room.openchannelOut + }, { + individualHooks: true, + user: opt.user + }); + }) + .then(function(message) { + return Agent. + findById(_mMessage.UserId); + }) + .then(function(mAgent) { + _mAgent = mAgent; + return _Room + .addUser(_mAgent); + }) + .then(function() { + console.log("SENDING Message..."); + if (_Account.replyMethod && _Account.replyUrl) { + var message = { + from: _mMessage.from, + to: _mMessage.to, + body: _mMessage.body, + UserId: _mMessage.UserId, + OpenchannelAccountId: _mMessage.OpenchannelAccountId, + OpenchannelRoomId: _mMessage.OpenchannelRoomId + }; + return Util + .sendRequest(message, _Account.replyMethod, _Account.replyUrl) + } else { + throw { + name: "ERROR", + message: " Account HTTP Method or URL is not configured. Contact your administrator!!" + }; + + } + }) + .then(function(res) { + // console.log('response', res); + console.log(" Message SENT..."); + return _mMessage + .update({ + status: 'SENT', + res_data: JSON.stringify(res) + }) + }) + .then(function() { + return _Room + .updateAttributes({ + lastEvent: 'SENT', + lastEventAt: moment().format('YYYY-MM-DD HH:mm:ss') + }); + }) + .catch(function(err) { + console.log('err', err); + _mMessage + .update({ + status: 'FAILED', + res_data: JSON.stringify(err) + }) + .then(function() { + return _Room + .updateAttributes({ + lastEvent: 'FAILED', + lastEventAt: moment().format('YYYY-MM-DD HH:mm:ss') + }); + }) + .catch(function(err) { + console.log('Error updating error status'); + }); + + }) + } +} + +function getRoom(_mMessage) { + return function() { + if (_mMessage.OpenchannelRoomId) { + return OpenchannelRoom + .findById(_mMessage.OpenchannelRoomId) + } else { + return OpenchannelRoom + .findAll({ + limit: 1, + where: { + contact: _mMessage.to, + OpenchannelAccountId: _mMessage.OpenchannelAccountId + }, + order: [ + ['createdAt', 'DESC'] + ] + }) + .then(function(room) { + var room = room[0]; + if (!room || room.status === 'CLOSED') { + var parentID = room ? room.id : null; + return OpenchannelRoom + .create({ + contact: _mMessage.to, + OpenchannelAccountId: _mMessage.OpenchannelAccountId, + status: 'PENDING', + ParentId: parentID + }) + } + return room; + }) + } + + } +} + + +function execRequest(doc, method, url) { + Util.sendRequest(doc, method, url) + .then(function(values) { + console.log('request successeful!'); + + }) + .catch(function(err) { + console.log('request failed!'); + + }) +} +Custom.prototype.webhook = function(doc, hook) { + var _Account = this.account; + + switch (hook) { + case 'accept': + if (_Account.acceptMethod && _Account.acceptUrl) { + console.log('Openchannel account <' + _Account.name + '> executing accept webhook'); + execRequest(doc.dataValues, _Account.acceptMethod, _Account.acceptUrl); + } + if (_Account.actions.length) { + _.forEach(_Account.actions, function(action) { + if (action.enabled) { + Util.execAction(action, doc); + } + }) + } + break; + case 'reject': + if (_Account.rejectMethod && _Account.rejectUrl) { + console.log('Openchannel account <' + _Account.name + '> executing reject webhook'); + execRequest(doc.dataValues, _Account.rejectMethod, _Account.rejectUrl); + } + break; + case 'close': + if (_Account.closeMethod && _Account.closeUrl) { + console.log('Openchannel account <' + _Account.name + '> executing close webhook'); + execRequest(doc.dataValues, _Account.closeMethod, _Account.closeUrl); + } + break; + default: + console.log('Webhook not recognized'); + } +} + +module.exports = Custom; diff --git a/server/config/openchannel/index.js b/server/config/openchannel/index.js index ccc2ba8..f6a56c3 100644 --- a/server/config/openchannel/index.js +++ b/server/config/openchannel/index.js @@ -1 +1,23 @@ -var _0xb4c8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2F\x63\x75\x73\x74\x6F\x6D","\x65\x78\x70\x6F\x72\x74\x73","\x69\x6E\x69\x74","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C"];_0xb4c8[0];var OpenchannelAccount=require(_0xb4c8[2])[_0xb4c8[1]];var Custom=require(_0xb4c8[3]);module[_0xb4c8[4]]= function(){OpenchannelAccount[_0xb4c8[6]](function(_0x38abx3){var _0x38abx4= new Custom();_0x38abx4[_0xb4c8[5]](_0x38abx3)});return OpenchannelAccount[_0xb4c8[11]]()[_0xb4c8[10]](function(_0x38abx6){_0x38abx6[_0xb4c8[9]](function(_0x38abx7){var _0x38abx4= new Custom();_0x38abx4[_0xb4c8[5]](_0x38abx7)})})[_0xb4c8[8]](function(_0x38abx5){console[_0xb4c8[7]](_0x38abx5)})} \ No newline at end of file +'use strict'; +var OpenchannelAccount = require('../../models').OpenchannelAccount; +var Custom = require('./custom'); + + +module.exports = function() { + OpenchannelAccount.afterCreate(function(server) { + var custom = new Custom(); + custom.init(server); + }); + + return OpenchannelAccount + .findAll() + .then(function(accounts) { + accounts.forEach(function(account) { + var custom = new Custom(); + custom.init(account); + }); + }) + .catch(function(err) { + console.error(err); + }); +} diff --git a/server/config/routing/agent.js b/server/config/routing/agent.js index f1d4408..d2231e5 100644 --- a/server/config/routing/agent.js +++ b/server/config/routing/agent.js @@ -1 +1,118 @@ -var _0xa4b1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2F\x73\x74\x72\x75\x63\x74\x75\x72\x65","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x61\x70\x70","\x64\x61\x74\x61","\x63\x61\x6C\x6C\x65\x64","\x72\x65\x6A\x65\x63\x74\x65\x64","\x6E\x65\x78\x74","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x55\x73\x65\x72\x49\x64","\x63\x68\x61\x6E\x6E\x65\x6C","\x70\x61\x75\x73\x65\x73","\x6C\x61\x62\x65\x6C\x73","\x77\x68\x65\x72\x65","\x72\x6F\x6F\x6D\x73","\x6D\x6F\x64\x65\x6C\x73","\x69\x64","\x70\x75\x73\x68","\x69\x6E\x63\x6C\x75\x64\x65","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x41\x47\x45\x4E\x54\x20\x41\x43\x54\x49\x4F\x4E\x20\x53\x54\x41\x52\x54\x45\x44","\x6C\x6F\x67","\x74\x68\x65\x6E","\x72\x6F\x6F\x6D\x69\x64","\x75\x70\x64\x61\x74\x65","\x5F\x61\x67\x65\x6E\x74\x73","\x74\x6F\x55\x70\x70\x65\x72\x43\x61\x73\x65","\x41\x50\x50\x20\x41\x47\x45\x4E\x54\x2C\x20\x49\x4E\x54\x45\x52\x41\x43\x54\x49\x4F\x4E\x3A","\x75\x6E\x69\x71\x75\x65\x69\x64","\x54\x49\x4D\x45\x4F\x55\x54","\x74\x69\x6D\x65\x6F\x75\x74","\x53\x45\x43","\x69\x6E\x66\x6F","\x6C\x65\x6E\x67\x74\x68","\x6F\x6E\x6C\x69\x6E\x65","\x4F\x50\x45\x4E","\x66\x69\x6C\x74\x65\x72","\x63\x61\x70\x61\x63\x69\x74\x69\x65\x73","\x77\x72\x69\x74\x65\x52\x65\x70\x6F\x72\x74","\x41\x50\x50\x20\x46\x49\x44\x45\x4C\x49\x54\x59\x20\x53\x4B\x49\x50\x20\x49\x4E\x54\x45\x52\x41\x43\x54\x49\x4F\x4E\x3A","\x72\x6F\x6F\x6D\x49\x64","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x67\x65\x6E\x74","\x6E\x61\x6D\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x6D\x65\x72\x67\x65","\x6D\x61\x70","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x72\x65\x70\x6F\x72\x74\x73","\x73\x65\x73\x73\x69\x6F\x6E\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0xa4b1[0];const _=require(_0xa4b1[1]);const config=require(_0xa4b1[2]);const structure=require(_0xa4b1[3]);const cp=require(_0xa4b1[4]);const util=require(_0xa4b1[5]);const moment=require(_0xa4b1[6]);const User=require(_0xa4b1[8])[_0xa4b1[7]];function Agent(_0xe999x9,_0xe999xa,_0xe999xb){this[_0xa4b1[9]]= _0xe999x9;this[_0xa4b1[10]]= _0xe999xa;this[_0xa4b1[11]]= [];this[_0xa4b1[12]]= [];this[_0xa4b1[13]]= _0xe999xb}Agent[_0xa4b1[15]][_0xa4b1[14]]= function init(){var _0xe999xd=this;var _0xe999xe={where:{id:_0xe999xd[_0xa4b1[9]][_0xa4b1[16]],online:true},include:[]};_0xe999xe[_0xa4b1[20]][structure[_0xa4b1[19]][_0xa4b1[18]][_0xe999xd[_0xa4b1[10]][_0xa4b1[17]]]]= false;_0xe999xe[_0xa4b1[25]][_0xa4b1[24]]({model:structure[_0xa4b1[22]][_0xa4b1[21]][_0xe999xd[_0xa4b1[10]][_0xa4b1[17]]],attributes:[_0xa4b1[23]]});return User[_0xa4b1[49]](_0xe999xe)[_0xa4b1[30]](function(_0xe999x10){_0xe999xd[_0xa4b1[33]]= _0xe999x10;console[_0xa4b1[40]](_0xe999xd[_0xa4b1[10]][_0xa4b1[17]][_0xa4b1[34]](),_0xa4b1[35],_0xe999xd[_0xa4b1[10]][_0xa4b1[36]],_0xa4b1[37],_0xe999xd[_0xa4b1[9]][_0xa4b1[38]],_0xa4b1[39]);if(_0xe999xd[_0xa4b1[33]][_0xa4b1[41]]&& available(_0xe999xd[_0xa4b1[33]][0][_0xa4b1[42]],_0xe999xd[_0xa4b1[33]][0][structure[_0xa4b1[19]][_0xa4b1[18]][_0xe999xd[_0xa4b1[10]][_0xa4b1[17]]]],_[_0xa4b1[44]](_0xe999xd[_0xa4b1[33]][0][structure[_0xa4b1[19]][_0xa4b1[21]][_0xe999xd[_0xa4b1[10]][_0xa4b1[17]]]],{status:_0xa4b1[43]}),_0xe999xd[_0xa4b1[33]][0][structure[_0xa4b1[19]][_0xa4b1[45]][_0xe999xd[_0xa4b1[10]][_0xa4b1[17]]]])){_0xe999xd[_0xa4b1[46]]();_0xe999xd[_0xa4b1[38]]= setTimeout(function(){_0xe999xd[_0xa4b1[13]]()},_0xe999xd[_0xa4b1[9]][_0xa4b1[38]]* 1000)}else {console[_0xa4b1[40]](_0xe999xd[_0xa4b1[10]][_0xa4b1[17]][_0xa4b1[34]](),_0xa4b1[47],_0xe999xd[_0xa4b1[10]][_0xa4b1[48]]);_0xe999xd[_0xa4b1[13]]()}})[_0xa4b1[30]](function(){return structure[_0xa4b1[22]][_0xa4b1[21]][_0xe999xd[_0xa4b1[10]][_0xa4b1[17]]][_0xa4b1[32]]({waiting:true},{where:{id:_0xe999xd[_0xa4b1[10]][_0xa4b1[31]]},individualHooks:true})[_0xa4b1[30]](function(){console[_0xa4b1[29]](_0xa4b1[28])})[_0xa4b1[27]](function(_0xe999xf){console[_0xa4b1[26]]()})})};Agent[_0xa4b1[15]][_0xa4b1[46]]= function writeReport(){var _0xe999xd=this;var _0xe999x12=_[_0xa4b1[55]](_0xe999xd._agents,function(_0xe999x13){return _[_0xa4b1[54]](_0xe999xd[_0xa4b1[10]],{timeslot:_0xe999xd[_0xa4b1[9]][_0xa4b1[38]],application:_0xa4b1[50],membername:_0xe999x13[_0xa4b1[51]],memberid:_0xe999x13[_0xa4b1[23]],calledAt:moment()[_0xa4b1[53]](_0xa4b1[52]),joinAt:moment()[_0xa4b1[53]](_0xa4b1[52])})});return structure[_0xa4b1[22]][_0xa4b1[58]][_0xe999xd[_0xa4b1[10]][_0xa4b1[17]]][_0xa4b1[56]](_0xe999x12,{individualHooks:true})[_0xa4b1[30]](function(){return structure[_0xa4b1[22]][_0xa4b1[57]][_0xe999xd[_0xa4b1[10]][_0xa4b1[17]]][_0xa4b1[56]](_0xe999x12,{individualHooks:true})})[_0xa4b1[27]](function(_0xe999xf){console[_0xa4b1[26]](_0xe999xf)})};function available(_0xe999x15,_0xe999x16,_0xe999x17,_0xe999x18){return _0xe999x15&& !_0xe999x16&& ((_0xe999x17[_0xa4b1[41]]< _0xe999x18)|| _0xe999x18=== 0)}module[_0xa4b1[59]]= Agent \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const config = require('../environment'); +const structure = require('./structure'); + +// NODEJS API +const cp = require('child_process'); +const util = require('util'); +const moment = require('moment'); + +// MODELS +const User = require('../../models').User; + +// Define the factory +function Agent(app, data, next) { + this.app = app; + this.data = data; + this.called = []; + this.rejected = []; + //callbacks + this.next = next; +} + +Agent.prototype.init = function init() { + var self = this; + var query = { + where: { + id: self.app.UserId, + online: true + }, + include: [] + }; + + query.where[structure.labels.pauses[self.data.channel]] = false; + query.include.push({ + model: structure.models.rooms[self.data.channel], + attributes: ['id'] + }); + + return User + .findAll(query) + .then(function(agents) { + self._agents = agents; + + console.info(self.data.channel.toUpperCase(), 'APP AGENT, INTERACTION:', self.data.uniqueid, 'TIMEOUT', self.app.timeout, 'SEC'); + + if (self._agents.length && available( + self._agents[0].online, + self._agents[0][structure.labels.pauses[self.data.channel]], + _.filter(self._agents[0][structure.labels.rooms[self.data.channel]], { + status: 'OPEN' + }), + self._agents[0][structure.labels.capacities[self.data.channel]])) { + self.writeReport(); + + self.timeout = setTimeout(function() { + self.next(); + }, self.app.timeout * 1000); + } else { + console.info(self.data.channel.toUpperCase(), 'APP FIDELITY SKIP INTERACTION:', self.data.roomId); + self.next(); + } + }) + .then(function() { + return structure.models.rooms[self.data.channel] + .update({ + waiting: true + }, { + where: { + id: self.data.roomid, + }, + individualHooks: true + }) + .then(function() { + console.log('AGENT ACTION STARTED'); + }) + .catch(function(err) { + console.error(); + }); + }); +} + +Agent.prototype.writeReport = function writeReport() { + var self = this; + var values = _.map(self._agents, function(agent) { + return _.merge(self.data, { + timeslot: self.app.timeout, + application: 'agent', + membername: agent.name, + memberid: agent.id, + calledAt: moment().format("YYYY-MM-DD HH:mm:ss"), + joinAt: moment().format("YYYY-MM-DD HH:mm:ss") + }); + }); + + return structure.models.sessions[self.data.channel] + .bulkCreate(values, { + individualHooks: true + }) + .then(function() { + return structure.models.reports[self.data.channel] + .bulkCreate(values, { + individualHooks: true + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +function available(online, pause, rooms, capacity) { + // CHECK CAPACITY + return online && !pause && ((rooms.length < capacity) || capacity === 0); +} + +// Export this file as a module +module.exports = Agent; diff --git a/server/config/routing/fidelity.js b/server/config/routing/fidelity.js index d51b251..eef584f 100644 --- a/server/config/routing/fidelity.js +++ b/server/config/routing/fidelity.js @@ -1 +1,105 @@ -var _0xf281=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2F\x73\x74\x72\x75\x63\x74\x75\x72\x65","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x61\x70\x70","\x64\x61\x74\x61","\x6E\x65\x78\x74","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x69\x64","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x63\x68\x61\x6E\x6E\x65\x6C","\x70\x61\x75\x73\x65\x73","\x6C\x61\x62\x65\x6C\x73","\x77\x68\x65\x72\x65","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x46\x49\x44\x45\x4C\x49\x54\x59\x20\x41\x43\x54\x49\x4F\x4E\x20\x53\x54\x41\x52\x54\x45\x44","\x6C\x6F\x67","\x74\x68\x65\x6E","\x72\x6F\x6F\x6D\x69\x64","\x75\x70\x64\x61\x74\x65","\x72\x6F\x6F\x6D\x73","\x6D\x6F\x64\x65\x6C\x73","\x5F\x61\x67\x65\x6E\x74\x73","\x74\x6F\x55\x70\x70\x65\x72\x43\x61\x73\x65","\x41\x50\x50\x20\x46\x49\x44\x45\x4C\x49\x54\x59\x20\x49\x4E\x54\x45\x52\x41\x43\x54\x49\x4F\x4E\x3A","\x54\x49\x4D\x45\x4F\x55\x54","\x74\x69\x6D\x65\x6F\x75\x74","\x53\x45\x43","\x69\x6E\x66\x6F","\x6C\x65\x6E\x67\x74\x68","\x77\x72\x69\x74\x65\x52\x65\x70\x6F\x72\x74","\x41\x50\x50\x20\x46\x49\x44\x45\x4C\x49\x54\x59\x20\x53\x4B\x49\x50\x20\x49\x4E\x54\x45\x52\x41\x43\x54\x49\x4F\x4E\x3A","\x67\x65\x74\x55\x73\x65\x72\x73","\x66\x69\x6E\x64\x42\x79\x49\x64","\x66\x69\x64\x65\x6C\x69\x74\x79","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x6D\x65\x72\x67\x65","\x6D\x61\x70","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x72\x65\x70\x6F\x72\x74\x73","\x73\x65\x73\x73\x69\x6F\x6E\x73","\x65\x78\x70\x6F\x72\x74\x73"];_0xf281[0];const _=require(_0xf281[1]);const config=require(_0xf281[2]);const structure=require(_0xf281[3]);const cp=require(_0xf281[4]);const util=require(_0xf281[5]);const moment=require(_0xf281[6]);const Agent=require(_0xf281[8])[_0xf281[7]];function Fidelity(_0x1a6dx9,_0x1a6dxa,_0x1a6dxb){this[_0xf281[9]]= _0x1a6dx9;this[_0xf281[10]]= _0x1a6dxa;this[_0xf281[11]]= _0x1a6dxb}Fidelity[_0xf281[13]][_0xf281[12]]= function init(){var _0x1a6dxd=this;var _0x1a6dxe={where:{online:true},attributes:[_0xf281[14],_0xf281[15],_0xf281[16]],raw:true};_0x1a6dxe[_0xf281[20]][structure[_0xf281[19]][_0xf281[18]][_0x1a6dxd[_0xf281[10]][_0xf281[17]]]]= false;return structure[_0xf281[29]][_0xf281[28]][_0x1a6dxd[_0xf281[10]][_0xf281[17]]][_0xf281[41]](_0x1a6dxd[_0xf281[10]][_0xf281[26]])[_0xf281[25]](function(_0x1a6dx11){return _0x1a6dx11[_0xf281[40]](_0x1a6dxe)})[_0xf281[25]](function(_0x1a6dx10){_0x1a6dxd[_0xf281[30]]= _0x1a6dx10;console[_0xf281[36]](_0x1a6dxd[_0xf281[10]][_0xf281[17]][_0xf281[31]](),_0xf281[32],_0x1a6dxd[_0xf281[10]][_0xf281[26]],_0xf281[33],_0x1a6dxd[_0xf281[9]][_0xf281[34]],_0xf281[35]);if(_0x1a6dxd[_0xf281[30]][_0xf281[37]]){_0x1a6dxd[_0xf281[38]]();_0x1a6dxd[_0xf281[34]]= setTimeout(function(){_0x1a6dxd[_0xf281[11]]()},_0x1a6dxd[_0xf281[9]][_0xf281[34]]* 1000)}else {console[_0xf281[36]](_0x1a6dxd[_0xf281[10]][_0xf281[17]][_0xf281[31]](),_0xf281[39],_0x1a6dxd[_0xf281[10]][_0xf281[26]]);_0x1a6dxd[_0xf281[11]]()}})[_0xf281[25]](function(){return structure[_0xf281[29]][_0xf281[28]][_0x1a6dxd[_0xf281[10]][_0xf281[17]]][_0xf281[27]]({waiting:true},{where:{id:_0x1a6dxd[_0xf281[10]][_0xf281[26]]},individualHooks:true})[_0xf281[25]](function(){console[_0xf281[24]](_0xf281[23])})[_0xf281[22]](function(_0x1a6dxf){console[_0xf281[21]]()})})};Fidelity[_0xf281[13]][_0xf281[38]]= function writeReport(){var _0x1a6dxd=this;var _0x1a6dx13=_[_0xf281[46]](_0x1a6dxd._agents,function(_0x1a6dx14){return _[_0xf281[45]](_0x1a6dxd[_0xf281[10]],{timeslot:_0x1a6dxd[_0xf281[9]][_0xf281[34]],application:_0xf281[42],membername:_0x1a6dx14[_0xf281[15]],memberid:_0x1a6dx14[_0xf281[14]],calledAt:moment()[_0xf281[44]](_0xf281[43]),joinAt:moment()[_0xf281[44]](_0xf281[43]),fidelity:_0x1a6dxd[_0xf281[9]][_0xf281[34]]})});return structure[_0xf281[29]][_0xf281[49]][_0x1a6dxd[_0xf281[10]][_0xf281[17]]][_0xf281[47]](_0x1a6dx13,{individualHooks:true})[_0xf281[25]](function(){return structure[_0xf281[29]][_0xf281[48]][_0x1a6dxd[_0xf281[10]][_0xf281[17]]][_0xf281[47]](_0x1a6dx13,{individualHooks:true})})[_0xf281[22]](function(_0x1a6dxf){console[_0xf281[21]](_0x1a6dxf)})};module[_0xf281[50]]= Fidelity \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const config = require('../environment'); +const structure = require('./structure'); + +// NODEJS API +const cp = require('child_process'); +const util = require('util'); +const moment = require('moment'); + +// MODELS +const Agent = require('../../models').User; + +// Define the factory +function Fidelity(app, data, next) { + this.app = app; + this.data = data; + //callbacks + this.next = next; +} + +Fidelity.prototype.init = function init() { + var self = this; + var query = { + where: { + online: true + }, + attributes: ['id', 'name', 'fullname'], + raw: true + }; + + query.where[structure.labels.pauses[self.data.channel]] = false; + + return structure.models.rooms[self.data.channel] + .findById(self.data.roomid) + .then(function(room) { + return room + .getUsers(query); + }) + .then(function(agents) { + self._agents = agents; + console.info(self.data.channel.toUpperCase(), 'APP FIDELITY INTERACTION:', self.data.roomid, 'TIMEOUT', self.app.timeout, 'SEC'); + if (self._agents.length) { + self.writeReport(); + + self.timeout = setTimeout(function() { + self.next(); + }, self.app.timeout * 1000); + + } else { + console.info(self.data.channel.toUpperCase(), 'APP FIDELITY SKIP INTERACTION:', self.data.roomid); + self.next(); + } + }) + .then(function() { + return structure.models.rooms[self.data.channel] + .update({ + waiting: true + }, { + where: { + id: self.data.roomid, + }, + individualHooks: true + }) + .then(function() { + console.log('FIDELITY ACTION STARTED'); + }) + .catch(function(err) { + console.error(); + }); + }); +} + +Fidelity.prototype.writeReport = function writeReport() { + var self = this; + var values = _.map(self._agents, function(agent) { + return _.merge(self.data, { + timeslot: self.app.timeout, + application: 'fidelity', + membername: agent.name, + memberid: agent.id, + calledAt: moment().format("YYYY-MM-DD HH:mm:ss"), + joinAt: moment().format("YYYY-MM-DD HH:mm:ss"), + fidelity: self.app.timeout + }); + }); + + return structure.models.sessions[self.data.channel] + .bulkCreate(values, { + individualHooks: true + }) + .then(function() { + return structure.models.reports[self.data.channel] + .bulkCreate(values, { + individualHooks: true + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Export this file as a module +module.exports = Fidelity; diff --git a/server/config/routing/queue.js b/server/config/routing/queue.js index c2fb5f5..250affd 100644 --- a/server/config/routing/queue.js +++ b/server/config/routing/queue.js @@ -1 +1,301 @@ -var _0x7204=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2F\x73\x74\x72\x75\x63\x74\x75\x72\x65","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x61\x70\x70","\x64\x61\x74\x61","\x65\x6C\x61\x70\x73\x65\x64","\x6E\x65\x78\x74","\x63\x61\x6C\x6C\x65\x64","\x72\x65\x6A\x65\x63\x74\x65\x64","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x51\x55\x45\x55\x45\x20\x41\x43\x54\x49\x4F\x4E\x20\x53\x54\x41\x52\x54\x45\x44","\x6C\x6F\x67","\x74\x68\x65\x6E","\x72\x6F\x6F\x6D\x69\x64","\x75\x70\x64\x61\x74\x65","\x63\x68\x61\x6E\x6E\x65\x6C","\x72\x6F\x6F\x6D\x73","\x6D\x6F\x64\x65\x6C\x73","\x74\x69\x6D\x65\x6F\x75\x74","\x71\x75\x65\x75\x65","\x69\x64","\x5F\x71\x75\x65\x75\x65","\x6E\x61\x6D\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x6D\x65\x72\x67\x65","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x73\x65\x73\x73\x69\x6F\x6E\x73","\x25\x73\x20\x51\x55\x45\x55\x45\x20\x49\x4E\x53\x54\x41\x4E\x43\x45\x20\x46\x4F\x52\x20\x41\x43\x43\x4F\x55\x4E\x54\x20\x25\x73","\x74\x6F\x55\x70\x70\x65\x72\x43\x61\x73\x65","\x61\x63\x63\x6F\x75\x6E\x74\x6E\x61\x6D\x65","\x69\x6E\x66\x6F","\x5F\x64\x75\x72\x61\x74\x69\x6F\x6E","\x51\x55\x45\x55\x45\x20\x42\x45\x45\x50\x41\x4C\x4C\x20\x53\x54\x52\x41\x54\x45\x47\x59\x2C\x20\x44\x55\x52\x41\x54\x49\x4F\x4E","\x5F\x61\x67\x65\x6E\x74\x73","\x70\x65\x6E\x61\x6C\x74\x79\x54\x61\x62\x6C\x65\x73","\x6C\x61\x62\x65\x6C\x73","\x67\x72\x6F\x75\x70\x42\x79","\x76\x61\x6C\x75\x65\x73","\x62\x65\x65\x70\x61\x6C\x6C","\x51\x55\x45\x55\x45\x20\x52\x4F\x55\x4E\x44\x20\x52\x4F\x42\x49\x4E\x20\x53\x54\x52\x41\x54\x45\x47\x59\x2C\x20\x44\x55\x52\x41\x54\x49\x4F\x4E","\x55\x73\x65\x72\x73","\x72\x72","\x72\x6F\x75\x6E\x64\x72\x6F\x62\x69\x6E","\x51\x55\x45\x55\x45\x20\x52\x52\x20\x4D\x45\x4D\x4F\x52\x59\x20\x53\x54\x52\x41\x54\x45\x47\x59\x2C\x20\x44\x55\x52\x41\x54\x49\x4F\x4E","\x6C\x61\x73\x74\x41\x67\x65\x6E\x74","\x6C\x65\x6E\x67\x74\x68","\x73\x68\x69\x66\x74","\x70\x75\x73\x68","\x72\x72\x6D\x65\x6D\x6F\x72\x79","\x73\x74\x72\x61\x74\x65\x67\x79","\x61\x70\x70\x51\x75\x65\x75\x65\x73","\x70\x65\x6E\x61\x6C\x74\x79","\x41\x53\x43","\x66\x69\x6E\x64\x42\x79\x49\x64","\x71\x75\x65\x75\x65\x73","\x6D\x61\x70","\x73\x74\x61\x74\x75\x73","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x6F\x6E\x6C\x69\x6E\x65","\x6D\x61\x69\x6C\x50\x61\x75\x73\x65","\x63\x68\x61\x74\x50\x61\x75\x73\x65","\x66\x61\x78\x50\x61\x75\x73\x65","\x73\x6D\x73\x50\x61\x75\x73\x65","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x50\x61\x75\x73\x65","\x6D\x61\x69\x6C\x43\x61\x70\x61\x63\x69\x74\x79","\x63\x68\x61\x74\x43\x61\x70\x61\x63\x69\x74\x79","\x66\x61\x78\x43\x61\x70\x61\x63\x69\x74\x79","\x73\x6D\x73\x43\x61\x70\x61\x63\x69\x74\x79","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x43\x61\x70\x61\x63\x69\x74\x79","\x70\x61\x75\x73\x65\x73","\x77\x68\x65\x72\x65","\x4F\x50\x45\x4E","\x66\x69\x6C\x74\x65\x72","\x63\x61\x70\x61\x63\x69\x74\x69\x65\x73","\x72\x65\x6D\x6F\x76\x65","\x63\x6C\x6F\x6E\x65","\x72\x65\x70\x6F\x72\x74\x73","\x66\x69\x6E\x64\x41\x6C\x6C","\x6A\x6F\x69\x6E","\x6F\x72\x64\x65\x72","\x46\x49\x45\x4C\x44\x28\x55\x73\x65\x72\x2E\x69\x64\x2C","\x29","\x66\x69\x6E\x64","\x65\x78\x70\x6F\x72\x74\x73"];_0x7204[0];const _=require(_0x7204[1]);const config=require(_0x7204[2]);const structure=require(_0x7204[3]);const cp=require(_0x7204[4]);const util=require(_0x7204[5]);const moment=require(_0x7204[6]);const Agent=require(_0x7204[8])[_0x7204[7]];function Queue(_0xc46bx9,_0xc46bxa,_0xc46bxb){this[_0x7204[9]]= _0xc46bx9;this[_0x7204[10]]= _0xc46bxa;this[_0x7204[11]]= 0;this[_0x7204[12]]= _0xc46bxb;this[_0x7204[13]]= [];this[_0x7204[14]]= []}Queue[_0x7204[16]][_0x7204[15]]= function init(){var _0xc46bxd=this;return structure[_0x7204[26]][_0x7204[64]][_0xc46bxd[_0x7204[10]][_0x7204[24]]][_0x7204[63]](_0xc46bxd[_0x7204[9]][structure[_0x7204[45]][_0x7204[60]][_0xc46bxd[_0x7204[10]][_0x7204[24]]]],{attributes:[_0x7204[29],_0x7204[31],_0x7204[27],_0x7204[59],_0x7204[54]],include:[{model:Agent,attributes:[_0x7204[29]],order:[[_0x7204[61],_0x7204[62]]]}]})[_0x7204[21]](function(_0xc46bx10){console[_0x7204[40]](util[_0x7204[33]](_0x7204[37],_0xc46bxd[_0x7204[10]][_0x7204[24]][_0x7204[38]](),_0xc46bxd[_0x7204[10]][_0x7204[39]]));_0xc46bxd[_0x7204[30]]= _0xc46bx10;_0xc46bxd[_0x7204[41]]= _0xc46bxd[_0x7204[9]][_0x7204[27]];switch(_0xc46bxd[_0x7204[30]][_0x7204[59]]){case _0x7204[48]:console[_0x7204[40]](_0xc46bxd[_0x7204[10]][_0x7204[24]][_0x7204[38]](),_0x7204[42],_0xc46bxd[_0x7204[9]][_0x7204[27]]);_0xc46bxd[_0x7204[43]]= _[_0x7204[47]](_[_0x7204[46]](_0xc46bx10.Users,structure[_0x7204[45]][_0x7204[44]][_0xc46bxd[_0x7204[10]][_0x7204[24]]]));_0xc46bxd[_0x7204[48]]();break;case _0x7204[52]:console[_0x7204[40]](_0xc46bxd[_0x7204[10]][_0x7204[24]][_0x7204[38]](),_0x7204[49],_0xc46bxd[_0x7204[9]][_0x7204[27]]);_0xc46bxd[_0x7204[43]]= _0xc46bx10[_0x7204[50]];_0xc46bxd[_0x7204[51]]();break;case _0x7204[58]:console[_0x7204[40]](_0xc46bxd[_0x7204[10]][_0x7204[24]][_0x7204[38]](),_0x7204[53],_0xc46bxd[_0x7204[9]][_0x7204[27]]);_0xc46bxd[_0x7204[43]]= _0xc46bx10[_0x7204[50]];if(_0xc46bxd[_0x7204[30]][_0x7204[54]]){var _0xc46bx11;for(var _0xc46bx12=0;_0xc46bx12< _0xc46bxd[_0x7204[43]][_0x7204[55]];_0xc46bx12++){_0xc46bx11= _0xc46bxd[_0x7204[43]][_0x7204[56]]();_0xc46bxd[_0x7204[43]][_0x7204[57]](_0xc46bx11);if(_0xc46bx11[_0x7204[29]]=== _0xc46bxd[_0x7204[30]][_0x7204[54]]){break}}};_0xc46bxd[_0x7204[51]]();break;default:}})[_0x7204[21]](function(){var _0xc46bxf=[_[_0x7204[34]](_0xc46bxd[_0x7204[10]],{timeslot:_0xc46bxd[_0x7204[9]][_0x7204[27]],application:_0x7204[28],queue:_0xc46bxd[_0x7204[30]][_0x7204[29]],queuename:_0xc46bxd[_0x7204[30]][_0x7204[31]],calledAt:moment()[_0x7204[33]](_0x7204[32]),joinAt:moment()[_0x7204[33]](_0x7204[32]),membername:null,memberid:null})];return structure[_0x7204[26]][_0x7204[36]][_0xc46bxd[_0x7204[10]][_0x7204[24]]][_0x7204[35]](_0xc46bxf,{individualHooks:true})})[_0x7204[21]](function(){return structure[_0x7204[26]][_0x7204[25]][_0xc46bxd[_0x7204[10]][_0x7204[24]]][_0x7204[23]]({waiting:true},{where:{id:_0xc46bxd[_0x7204[10]][_0x7204[22]]},individualHooks:true})[_0x7204[21]](function(){console[_0x7204[20]](_0x7204[19])})[_0x7204[18]](function(_0xc46bxe){console[_0x7204[17]]()})})};Queue[_0x7204[16]][_0x7204[48]]= function beepall(){var _0xc46bxd=this;var _0xc46bx14=_0xc46bxd[_0x7204[43]][_0x7204[56]]();_0xc46bxd[_0x7204[43]][_0x7204[57]](_0xc46bx14);var _0xc46bx15={where:{id:{$in:_[_0x7204[65]](_0xc46bx14,_0x7204[29])},online:true},include:[{model:structure[_0x7204[26]][_0x7204[25]][_0xc46bxd[_0x7204[10]][_0x7204[24]]],attributes:[_0x7204[29],_0x7204[66]]}],attributes:[_0x7204[29],_0x7204[31],_0x7204[67],_0x7204[68],_0x7204[69],_0x7204[70],_0x7204[71],_0x7204[72],_0x7204[73],_0x7204[74],_0x7204[75],_0x7204[76],_0x7204[77],_0x7204[78]]};_0xc46bx15[_0x7204[80]][structure[_0x7204[45]][_0x7204[79]][_0xc46bxd[_0x7204[10]][_0x7204[24]]]]= false;var _0xc46bx16=((_0xc46bxd[_0x7204[9]][_0x7204[27]]- _0xc46bxd[_0x7204[11]])> _0xc46bxd[_0x7204[30]][_0x7204[27]])?_0xc46bxd[_0x7204[30]][_0x7204[27]]:(_0xc46bxd[_0x7204[9]][_0x7204[27]]- _0xc46bxd[_0x7204[11]]);_0xc46bxd[_0x7204[27]]= setTimeout(function(){_0xc46bxd[_0x7204[11]]+= _0xc46bxd[_0x7204[30]][_0x7204[27]];_0xc46bxd[_0x7204[48]]()},_0xc46bx16* 1000);if(_0xc46bx16> 0){Agent[_0x7204[87]](_0xc46bx15)[_0x7204[21]](function(_0xc46bx17){_0xc46bx17= _[_0x7204[84]](_0xc46bx17,function(_0xc46bx11){if(available(_0xc46bx11,_0xc46bx11[structure[_0x7204[45]][_0x7204[79]][_0xc46bxd[_0x7204[10]][_0x7204[24]]]],_0xc46bxd[_0x7204[14]],_[_0x7204[82]](_0xc46bx11[structure[_0x7204[45]][_0x7204[25]][_0xc46bxd[_0x7204[10]][_0x7204[24]]]],{status:_0x7204[81]}),_0xc46bx11[structure[_0x7204[45]][_0x7204[83]][_0xc46bxd[_0x7204[10]][_0x7204[24]]]])){return true}else {return false}});var _0xc46bxf=_[_0x7204[65]](_0xc46bx17,function(_0xc46bx11){var _0xc46bx18=_[_0x7204[34]](_0xc46bxd[_0x7204[10]],{timeslot:_0xc46bx16,application:_0x7204[28],membername:_0xc46bx11[_0x7204[31]],memberid:_0xc46bx11[_0x7204[29]],queue:_0xc46bxd[_0x7204[30]][_0x7204[29]],queuename:_0xc46bxd[_0x7204[30]][_0x7204[31]],calledAt:moment()[_0x7204[33]](_0x7204[32])});return _[_0x7204[85]](_0xc46bx18)});structure[_0x7204[26]][_0x7204[86]][_0xc46bxd[_0x7204[10]][_0x7204[24]]][_0x7204[35]](_0xc46bxf,{individualHooks:true})[_0x7204[18]](function(_0xc46bxe){console[_0x7204[17]](_0xc46bxe)})})[_0x7204[18]](function(_0xc46bxe){console[_0x7204[17]](_0xc46bxe)})}else {clearTimeout(_0xc46bxd[_0x7204[27]]);this[_0x7204[12]]()}};Queue[_0x7204[16]][_0x7204[51]]= function rr(){var _0xc46bxd=this;var _0xc46bx16=((_0xc46bxd[_0x7204[9]][_0x7204[27]]- _0xc46bxd[_0x7204[11]])> _0xc46bxd[_0x7204[30]][_0x7204[27]])?_0xc46bxd[_0x7204[30]][_0x7204[27]]:(_0xc46bxd[_0x7204[9]][_0x7204[27]]- _0xc46bxd[_0x7204[11]]);_0xc46bxd[_0x7204[27]]= setTimeout(function(){_0xc46bxd[_0x7204[11]]+= _0xc46bxd[_0x7204[30]][_0x7204[27]];_0xc46bxd[_0x7204[51]]()},_0xc46bx16* 1000);var _0xc46bx15={where:{id:{$in:_[_0x7204[65]](_0xc46bxd._agents,_0x7204[29])}},include:[{model:structure[_0x7204[26]][_0x7204[25]][_0xc46bxd[_0x7204[10]][_0x7204[24]]],attributes:[_0x7204[29]]}],attributes:[_0x7204[29],_0x7204[31],_0x7204[67],_0x7204[68],_0x7204[69],_0x7204[70],_0x7204[71],_0x7204[72],_0x7204[73],_0x7204[74],_0x7204[75],_0x7204[76],_0x7204[77],_0x7204[78]]};if(_[_0x7204[65]](_0xc46bxd._agents,_0x7204[29])[_0x7204[88]]()[_0x7204[55]]){_0xc46bx15[_0x7204[89]]= [[{raw:_0x7204[90]+ _[_0x7204[65]](_0xc46bxd._agents,_0x7204[29])[_0x7204[88]]()+ _0x7204[91]}]]};if(_0xc46bx16> 0){Agent[_0x7204[87]](_0xc46bx15)[_0x7204[21]](function(_0xc46bx17){if(_0xc46bx17[_0x7204[55]]){_0xc46bxd[_0x7204[43]]= _0xc46bx17;for(var _0xc46bx12=0;_0xc46bx12< _0xc46bxd[_0x7204[43]][_0x7204[55]];_0xc46bx12++){if(available(_0xc46bxd[_0x7204[43]][0],_0xc46bxd[_0x7204[43]][0][structure[_0x7204[45]][_0x7204[79]][_0xc46bxd[_0x7204[10]][_0x7204[24]]]],_0xc46bxd[_0x7204[14]],_[_0x7204[82]](_0xc46bxd[_0x7204[43]][0][structure[_0x7204[45]][_0x7204[25]][_0xc46bxd[_0x7204[10]][_0x7204[24]]]],{status:_0x7204[81]}),_0xc46bxd[_0x7204[43]][0][structure[_0x7204[45]][_0x7204[83]][_0xc46bxd[_0x7204[10]][_0x7204[24]]]])){var _0xc46bxf=[_[_0x7204[34]](_0xc46bxd[_0x7204[10]],{timeslot:_0xc46bx16,application:_0x7204[28],membername:_0xc46bxd[_0x7204[43]][0][_0x7204[31]],memberid:_0xc46bxd[_0x7204[43]][0][_0x7204[29]],queue:_0xc46bxd[_0x7204[30]][_0x7204[29]],queuename:_0xc46bxd[_0x7204[30]][_0x7204[31]],calledAt:moment()[_0x7204[33]](_0x7204[32])})];return structure[_0x7204[26]][_0x7204[86]][_0xc46bxd[_0x7204[10]][_0x7204[24]]][_0x7204[35]](_0xc46bxf,{individualHooks:true})[_0x7204[21]](function(){return structure[_0x7204[26]][_0x7204[64]][_0xc46bxd[_0x7204[10]][_0x7204[24]]][_0x7204[23]]({lastAgent:_0xc46bxd[_0x7204[43]][0][_0x7204[29]]},{where:{id:_0xc46bxd[_0x7204[30]][_0x7204[29]]}})})[_0x7204[18]](function(_0xc46bxe){console[_0x7204[17]](_0xc46bxe)})}else {var _0xc46bx11=_0xc46bxd[_0x7204[43]][_0x7204[56]]();_0xc46bxd[_0x7204[43]][_0x7204[57]](_0xc46bx11)}}}})[_0x7204[21]](function(){var _0xc46bx11=_0xc46bxd[_0x7204[43]][_0x7204[56]]();_0xc46bxd[_0x7204[43]][_0x7204[57]](_0xc46bx11)})[_0x7204[18]](function(_0xc46bxe){console[_0x7204[17]](_0xc46bxe)})}else {clearTimeout(_0xc46bxd[_0x7204[27]]);this[_0x7204[12]]()}};function available(_0xc46bx11,_0xc46bx1b,_0xc46bx1c,_0xc46bx1d,_0xc46bx1e){var _0xc46bx1f=_[_0x7204[92]](_0xc46bx1c,{id:_0xc46bx11[_0x7204[29]]})?true:false;return _0xc46bx11[_0x7204[68]]&& !_0xc46bx1b&& !_0xc46bx1f&& ((_0xc46bx1d[_0x7204[55]]< _0xc46bx1e)|| (_0xc46bx1e=== 0))}module[_0x7204[93]]= Queue \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const config = require('../environment'); +const structure = require('./structure'); + +// NODEJS API +const cp = require('child_process'); +const util = require('util'); +const moment = require('moment'); + +const Agent = require('../../models').User; + +// Define the factory +function Queue(app, data, next) { + this.app = app; + this.data = data; + this.elapsed = 0; + //callbacks + this.next = next; + this.called = []; + this.rejected = []; +} + +Queue.prototype.init = function init() { + var self = this; + + return structure.models.queues[self.data.channel] + .findById(self.app[structure.labels.appQueues[self.data.channel]], { + attributes: ['id', 'name', 'timeout', 'strategy', 'lastAgent'], + include: [{ + model: Agent, + attributes: ['id'], + order: [ + ['penalty', 'ASC'] + ] + }] + }) + .then(function(queue) { + console.info(util.format('%s QUEUE INSTANCE FOR ACCOUNT %s', self.data.channel.toUpperCase(), self.data.accountname)); + + self._queue = queue; + self._duration = self.app.timeout; + + switch (self._queue.strategy) { + case 'beepall': + console.info(self.data.channel.toUpperCase(), 'QUEUE BEEPALL STRATEGY, DURATION', self.app.timeout); + + self._agents = _.values(_.groupBy(queue.Users, structure.labels.penaltyTables[self.data.channel])); + self.beepall(); + break; + case 'roundrobin': + console.info(self.data.channel.toUpperCase(), 'QUEUE ROUND ROBIN STRATEGY, DURATION', self.app.timeout); + self._agents = queue.Users; + self.rr(); + break; + case 'rrmemory': + console.info(self.data.channel.toUpperCase(), 'QUEUE RR MEMORY STRATEGY, DURATION', self.app.timeout); + self._agents = queue.Users; + if (self._queue.lastAgent) { + var agent; + for (var i = 0; i < self._agents.length; i++) { + agent = self._agents.shift(); + self._agents.push(agent); + + if (agent.id === self._queue.lastAgent) { + break; + } + } + } + + self.rr(); + break; + default: + } + }) + .then(function() { + var values = [_.merge(self.data, { + timeslot: self.app.timeout, + application: 'queue', + queue: self._queue.id, + queuename: self._queue.name, + calledAt: moment().format("YYYY-MM-DD HH:mm:ss"), + joinAt: moment().format("YYYY-MM-DD HH:mm:ss"), + membername: null, + memberid: null + })]; + return structure.models.sessions[self.data.channel] + .bulkCreate(values, { + individualHooks: true + }); + }) + .then(function() { + return structure.models.rooms[self.data.channel] + .update({ + waiting: true + }, { + where: { + id: self.data.roomid, + }, + individualHooks: true + }) + .then(function() { + console.log('QUEUE ACTION STARTED'); + }) + .catch(function(err) { + console.error(); + }); + }); +} + +Queue.prototype.beepall = function beepall() { + var self = this; + var attempts = self._agents.shift(); + self._agents.push(attempts); + + var query = { + where: { + id: { + $in: _.map(attempts, 'id') + }, + online: true + }, + include: [{ + model: structure.models.rooms[self.data.channel], + attributes: ['id', 'status'] + }], + attributes: ['id', 'name', 'fullname', 'online', 'mailPause', 'chatPause', 'faxPause', 'smsPause', 'openchannelPause', 'mailCapacity', 'chatCapacity', 'faxCapacity', 'smsCapacity', + 'openchannelCapacity' + ] + }; + + query.where[structure.labels.pauses[self.data.channel]] = false; + + var timeslot = ((self.app.timeout - self.elapsed) > self._queue.timeout) ? self._queue.timeout : (self.app.timeout - self.elapsed); + + self.timeout = setTimeout(function() { + self.elapsed += self._queue.timeout; + self.beepall(); + }, timeslot * 1000); + + if (timeslot > 0) { + Agent + .findAll(query) + .then(function(agents) { + // REMOVE AGENTS BY CAPACITY + agents = _.remove(agents, function(agent) { + if (available(agent, + agent[structure.labels.pauses[self.data.channel]], + self.rejected, + _.filter(agent[structure.labels.rooms[self.data.channel]], { + status: 'OPEN' + }), + agent[structure.labels.capacities[self.data.channel]])) { + return true; + } else { + return false; + } + }); + + var values = _.map(agents, function(agent) { + var value = _.merge(self.data, { + timeslot: timeslot, + application: 'queue', + membername: agent.name, + memberid: agent.id, + queue: self._queue.id, + queuename: self._queue.name, + calledAt: moment().format("YYYY-MM-DD HH:mm:ss") + }); + + return _.clone(value); + }); + + structure.models.reports[self.data.channel] + .bulkCreate(values, { + individualHooks: true + }) + .catch(function(err) { + console.error(err); + }); + }) + .catch(function(err) { + console.error(err); + }); + } else { + clearTimeout(self.timeout); + this.next(); + } +} + +Queue.prototype.rr = function rr() { + var self = this; + var timeslot = ((self.app.timeout - self.elapsed) > self._queue.timeout) ? self._queue.timeout : (self.app.timeout - self.elapsed); + + self.timeout = setTimeout(function() { + self.elapsed += self._queue.timeout; + self.rr(); + }, timeslot * 1000); + + var query = { + where: { + id: { + $in: _.map(self._agents, 'id') + } + }, + include: [{ + model: structure.models.rooms[self.data.channel], + attributes: ['id'] + }], + attributes: ['id', 'name', 'fullname', 'online', 'mailPause', 'chatPause', 'faxPause', 'smsPause', 'openchannelPause', 'mailCapacity', 'chatCapacity', 'faxCapacity', 'smsCapacity', + 'openchannelCapacity' + ] + }; + + if (_.map(self._agents, 'id').join().length) { + query.order = [ + [{ + raw: 'FIELD(User.id,' + _.map(self._agents, 'id').join() + ')' + }] + ]; + } + + if (timeslot > 0) { + Agent + .findAll(query) + .then(function(agents) { + if (agents.length) { + self._agents = agents; + + for (var i = 0; i < self._agents.length; i++) { + + if (available(self._agents[0], + self._agents[0][structure.labels.pauses[self.data.channel]], + self.rejected, + _.filter(self._agents[0][structure.labels.rooms[self.data.channel]], { + status: 'OPEN' + }), + self._agents[0][structure.labels.capacities[self.data.channel]] + )) { + + var values = [_.merge(self.data, { + timeslot: timeslot, + application: 'queue', + membername: self._agents[0].name, + memberid: self._agents[0].id, + queue: self._queue.id, + queuename: self._queue.name, + calledAt: moment().format("YYYY-MM-DD HH:mm:ss") + })]; + + return structure.models.reports[self.data.channel] + .bulkCreate(values, { + individualHooks: true + }) + .then(function() { + return structure.models.queues[self.data.channel] + .update({ + lastAgent: self._agents[0].id + }, { + where: { + id: self._queue.id + } + }); + }) + .catch(function(err) { + console.error(err); + }); + + } else { + var agent = self._agents.shift(); + self._agents.push(agent); + } + } + } + }) + .then(function() { + var agent = self._agents.shift(); + self._agents.push(agent); + }) + .catch(function(err) { + console.error(err); + }); + } else { + clearTimeout(self.timeout); + this.next(); + } +} + +function available(agent, pause, rejected, rooms, capacity) { + // CHECK REJECTED + var reject = _.find(rejected, { + id: agent.id + }) ? true : false; + // CHECK CAPACITY + + return agent.online && !pause && !reject && ((rooms.length < capacity) || (capacity === 0)); +} + +// Export this file as a module +module.exports = Queue; diff --git a/server/config/routing/replyMail.js b/server/config/routing/replyMail.js index 7ebfb37..f78acdb 100644 --- a/server/config/routing/replyMail.js +++ b/server/config/routing/replyMail.js @@ -1 +1,86 @@ -var _0x4282=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2F\x73\x74\x72\x75\x63\x74\x75\x72\x65","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x6D\x75\x73\x74\x61\x63\x68\x65","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x54\x65\x6D\x70\x6C\x61\x74\x65","\x61\x70\x70","\x64\x61\x74\x61","\x6D\x73\x67","\x6C\x6F\x67","\x6E\x65\x78\x74","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x73\x75\x62\x6A\x65\x63\x74","\x72\x65\x6E\x64\x65\x72","\x66\x72\x6F\x6D","\x74\x6F","\x63\x63","\x62\x63\x63","\x61\x63\x63\x6F\x75\x6E\x74\x4E\x61\x6D\x65","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x49\x64","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x68\x74\x6D\x6C","\x61\x75\x74\x6F","\x72\x6F\x6F\x6D\x69\x64","\x63\x72\x65\x61\x74\x65","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x75\x73\x68","\x72\x65\x70\x6C\x79\x41\x6C\x6C","\x64\x61\x74\x61\x31","\x64\x61\x74\x61\x39","\x66\x69\x6E\x64\x42\x79\x49\x64","\x67\x65\x74\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x64\x61\x74\x61\x38","\x65\x78\x70\x6F\x72\x74\x73"];_0x4282[0];const _=require(_0x4282[1]);const config=require(_0x4282[2]);const structure=require(_0x4282[3]);const cp=require(_0x4282[4]);const util=require(_0x4282[5]);const moment=require(_0x4282[6]);const Mustache=require(_0x4282[7]);const User=require(_0x4282[9])[_0x4282[8]];const Message=require(_0x4282[9])[_0x4282[10]];const Account=require(_0x4282[9])[_0x4282[11]];const Template=require(_0x4282[9])[_0x4282[12]];function ReplyMail(_0xe8b4xd,_0xe8b4xe,_0xe8b4xf,_0xe8b4x10){this[_0x4282[13]]= _0xe8b4xd;this[_0x4282[14]]= _0xe8b4xe;this[_0x4282[15]]= _0xe8b4x10;console[_0x4282[16]](_0xe8b4x10);this[_0x4282[17]]= _0xe8b4xf}ReplyMail[_0x4282[19]][_0x4282[18]]= function init(){var _0xe8b4x12=this;var _0xe8b4x13;var _0xe8b4x14={from:[],to:[]};return Account[_0x4282[41]](_0xe8b4x12[_0x4282[13]][_0x4282[43]])[_0x4282[22]](function(_0xe8b4x18){return _0xe8b4x18[_0x4282[42]]()})[_0x4282[22]](function(_0xe8b4x17){_0xe8b4x13= _0xe8b4x17;_0xe8b4x14[_0x4282[25]][_0x4282[37]](_0xe8b4x13[_0x4282[36]]);_0xe8b4x14[_0x4282[26]][_0x4282[37]](_0xe8b4x12[_0x4282[14]][_0x4282[25]]);switch(_0xe8b4x12[_0x4282[13]][_0x4282[39]]){case _0x4282[38]:_0xe8b4x14[_0x4282[27]]= _0xe8b4x12[_0x4282[14]][_0x4282[27]];break;default:};return Template[_0x4282[41]](_0xe8b4x12[_0x4282[13]][_0x4282[40]])})[_0x4282[22]](function(_0xe8b4x16){var _0xe8b4x10={subject:_0xe8b4x16[_0x4282[23]]?Mustache[_0x4282[24]](_0xe8b4x16[_0x4282[23]],_0xe8b4x10):null,from:_0xe8b4x12[_0x4282[15]][_0x4282[25]],to:_0xe8b4x12[_0x4282[15]][_0x4282[26]],cc:_0xe8b4x12[_0x4282[15]][_0x4282[27]],bcc:_0xe8b4x12[_0x4282[15]][_0x4282[28]],accountName:_0xe8b4x12[_0x4282[15]][_0x4282[29]],interactionId:_0xe8b4x12[_0x4282[15]][_0x4282[30]],createdAt:_0xe8b4x12[_0x4282[15]][_0x4282[31]]};_0xe8b4x14[_0x4282[23]]= _0xe8b4x16[_0x4282[23]]?Mustache[_0x4282[24]](_0xe8b4x16[_0x4282[23]],_0xe8b4x10):null;_0xe8b4x14[_0x4282[32]]= _0xe8b4x16[_0x4282[32]]?Mustache[_0x4282[24]](_0xe8b4x16[_0x4282[32]],_0xe8b4x10):null;_0xe8b4x14[_0x4282[33]]= true;_0xe8b4x14[_0x4282[30]]= _0xe8b4x12[_0x4282[14]][_0x4282[34]];return Message[_0x4282[35]](_0xe8b4x14)})[_0x4282[22]](function(){_0xe8b4x12[_0x4282[17]]()})[_0x4282[21]](function(_0xe8b4x15){console[_0x4282[20]](_0xe8b4x15)})};module[_0x4282[44]]= ReplyMail \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const config = require('../environment'); +const structure = require('./structure'); + +// NODEJS API +const cp = require('child_process'); +const util = require('util'); +const moment = require('moment'); +const Mustache = require('mustache'); + +// MODELS +const User = require('../../models').User; +const Message = require('../../models').MailMessage; +const Account = require('../../models').MailAccount; +const Template = require('../../models').Template; + +// Define the factory +function ReplyMail(app, data, next, msg) { + this.app = app; + this.data = data; + this.msg = msg; + console.log(msg); + //callbacks + this.next = next; +} + +ReplyMail.prototype.init = function init() { + var self = this; + var _smtp; + var _message = { + from: [], + to: [] + }; + + return Account + .findById(self.app.data8) + .then(function(account) { + return account + .getMailServerOut(); + }) + .then(function(smtp) { + _smtp = smtp; + _message.from.push(_smtp.username); + _message.to.push(self.data.from); + + switch (self.app.data1) { + case 'replyAll': + _message.cc = self.data.cc; + break; + default: + } + + return Template + .findById(self.app.data9); + }) + .then(function(template) { + var msg = { + subject: template.subject ? Mustache.render(template.subject, msg) : null, + from: self.msg.from, + to: self.msg.to, + cc: self.msg.cc, + bcc: self.msg.bcc, + accountName: self.msg.accountName, + interactionId: self.msg.MailRoomId, + createdAt: self.msg.createdAt + } + _message.subject = template.subject ? Mustache.render(template.subject, msg) : null; + _message.html = template.html ? Mustache.render(template.html, msg) : null; + _message.auto = true; + _message.MailRoomId = self.data.roomid; + + return Message + .create(_message); + }) + .then(function() { + self.next(); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Export this file as a module +module.exports = ReplyMail; diff --git a/server/config/routing/scheduler.js b/server/config/routing/scheduler.js index a7ccb42..37644f4 100644 --- a/server/config/routing/scheduler.js +++ b/server/config/routing/scheduler.js @@ -1 +1,346 @@ -var _0xa74e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2F\x73\x74\x72\x75\x63\x74\x75\x72\x65","\x2E\x2E\x2F\x75\x74\x69\x6C","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x75\x74\x69\x6C","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74","\x52\x65\x70\x6F\x72\x74\x53\x6D\x73","\x52\x65\x70\x6F\x72\x74\x46\x61\x78","\x52\x65\x70\x6F\x72\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x2E\x2F\x66\x69\x64\x65\x6C\x69\x74\x79","\x2E\x2F\x61\x67\x65\x6E\x74","\x2E\x2F\x71\x75\x65\x75\x65","\x2E\x2F\x73\x65\x6E\x64\x4D\x61\x69\x6C","\x2E\x2F\x73\x65\x6E\x64\x53\x6D\x73","\x2E\x2F\x72\x65\x70\x6C\x79\x4D\x61\x69\x6C","\x64\x61\x74\x61","\x6D\x73\x67","\x5F\x61\x70\x70\x73","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x69\x64","\x61\x70\x70","\x74\x69\x6D\x65\x6F\x75\x74","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x55\x73\x65\x72\x49\x64","\x63\x68\x61\x6E\x6E\x65\x6C","\x61\x70\x70\x51\x75\x65\x75\x65\x73","\x6C\x61\x62\x65\x6C\x73","\x70\x75\x73\x68","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x72\x6F\x6F\x6D\x69\x64","\x73\x74\x61\x74\x75\x73","\x63\x68\x61\x6E\x67\x65\x64","\x53\x54\x4F\x50\x20\x53\x43\x48\x45\x44\x55\x4C\x45\x52\x20\x49\x4E\x53\x54\x41\x4E\x43\x45\x2C\x20\x49\x4E\x54\x45\x52\x41\x43\x54\x49\x4F\x4E\x3A","\x66\x6F\x72\x6D\x61\x74","\x69\x6E\x66\x6F","\x61\x64\x64\x48\x6F\x6F\x6B","\x72\x6F\x6F\x6D\x73","\x6D\x6F\x64\x65\x6C\x73","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x64","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x64\x69\x61\x6C\x70\x6C\x61\x6E\x20\x65\x6E\x64\x65\x64","\x6C\x6F\x67","\x74\x68\x65\x6E","\x75\x70\x64\x61\x74\x65","\x6D\x65\x6D\x62\x65\x72\x69\x64","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x75\x6E\x69\x71\x75\x65\x69\x64","\x73\x65\x73\x73\x69\x6F\x6E\x73","\x72\x65\x6A\x65\x63\x74\x65\x64\x41\x74","\x53\x54\x4F\x50\x20\x53\x43\x48\x45\x44\x55\x4C\x45\x52\x20\x49\x4E\x53\x54\x41\x4E\x43\x45\x20\x52\x45\x4A\x45\x43\x54\x45\x44\x2C\x20\x49\x4E\x54\x45\x52\x41\x43\x54\x49\x4F\x4E\x3A","\x41\x47\x45\x4E\x54\x3A","\x72\x65\x6A\x65\x63\x74\x65\x64","\x72\x65\x70\x6F\x72\x74\x73","\x63\x68\x61\x74","\x61\x62\x61\x6E\x64\x6F\x6E","\x41\x42\x41\x4E\x44\x4F\x4E","\x6C\x65\x6E\x67\x74\x68","\x53\x75\x62\x49\x6E\x74\x65\x72\x76\x61\x6C\x73","\x73\x70\x6C\x69\x74\x49\x6E\x74\x65\x72\x76\x61\x6C","\x69\x73\x56\x61\x6C\x69\x64\x49\x6E\x74\x65\x72\x76\x61\x6C","\x74\x6F\x55\x70\x70\x65\x72\x43\x61\x73\x65","\x41\x50\x50","\x53\x4B\x49\x50\x20\x42\x59\x20\x49\x4E\x54\x45\x52\x56\x41\x4C\x2E\x20\x49\x4E\x54\x45\x52\x41\x43\x54\x49\x4F\x4E\x3A","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x6E\x65\x78\x74","\x43\x52\x45\x41\x54\x45\x20\x53\x43\x48\x45\x44\x55\x4C\x45\x52\x20\x49\x4E\x53\x54\x41\x4E\x43\x45\x20\x46\x4F\x52\x20\x41\x43\x43\x4F\x55\x4E\x54\x20\x25\x73","\x6E\x61\x6D\x65","\x66\x69\x64\x65\x6C\x69\x74\x79","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x70\x72\x69\x6F\x72\x69\x74\x79\x20\x41\x53\x43","\x67\x65\x74\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x6D\x61\x69\x6C","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x70\x72\x69\x6F\x72\x69\x74\x79\x20\x41\x53\x43","\x67\x65\x74\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x70\x72\x69\x6F\x72\x69\x74\x79\x20\x41\x53\x43","\x67\x65\x74\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x66\x61\x78","\x53\x6D\x73\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x70\x72\x69\x6F\x72\x69\x74\x79\x20\x41\x53\x43","\x67\x65\x74\x53\x6D\x73\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x73\x6D\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x70\x72\x69\x6F\x72\x69\x74\x79\x20\x41\x53\x43","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x61\x63\x63\x6F\x75\x6E\x74\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x63\x63\x6F\x75\x6E\x74\x73","\x73\x68\x69\x66\x74","\x72\x65\x6D\x6F\x76\x65\x48\x6F\x6F\x6B","\x61\x67\x65\x6E\x74","\x71\x75\x65\x75\x65","\x73\x65\x6E\x64\x4D\x61\x69\x6C","\x72\x65\x70\x6C\x79\x4D\x61\x69\x6C","\x73\x65\x6E\x64\x53\x6D\x73","\x75\x6E\x6B\x6E\x6F\x77\x6E\x20\x61\x70\x70","\x55\x4E\x4D\x41\x4E\x41\x47\x45\x44","\x65\x78\x70\x6F\x72\x74\x73"];_0xa74e[0];const _=require(_0xa74e[1]);const moment=require(_0xa74e[2]);const config=require(_0xa74e[3]);const structure=require(_0xa74e[4]);const Util=require(_0xa74e[5]);const cp=require(_0xa74e[6]);const util=require(_0xa74e[7]);const User=require(_0xa74e[9])[_0xa74e[8]];const Interval=require(_0xa74e[9])[_0xa74e[10]];const MailAccount=require(_0xa74e[9])[_0xa74e[11]];const ReportMail=require(_0xa74e[9])[_0xa74e[12]];const ReportChat=require(_0xa74e[9])[_0xa74e[13]];const ReportSms=require(_0xa74e[9])[_0xa74e[14]];const ReportFax=require(_0xa74e[9])[_0xa74e[15]];const ReportOpenchannel=require(_0xa74e[9])[_0xa74e[16]];var Fidelity=require(_0xa74e[17]);var Agent=require(_0xa74e[18]);var Queue=require(_0xa74e[19]);var SendMail=require(_0xa74e[20]);var SendSms=require(_0xa74e[21]);var ReplyMail=require(_0xa74e[22]);function Scheduler(_0xa9cbx17,_0xa9cbx18){this[_0xa74e[23]]= _0xa9cbx17;this[_0xa74e[24]]= _0xa9cbx18;this[_0xa74e[25]]= []}Scheduler[_0xa74e[27]][_0xa74e[26]]= function init(){var _0xa9cbx1a=this;var _0xa9cbx1b=[_0xa74e[28],_0xa74e[29],_0xa74e[30],_0xa74e[31],_0xa74e[32]];_0xa9cbx1b[_0xa74e[36]](structure[_0xa74e[35]][_0xa74e[34]][_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]]);structure[_0xa74e[46]][_0xa74e[45]][_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]][_0xa74e[44]](_0xa74e[37],function(_0xa9cbx1c,_0xa9cbx1d){if(_0xa9cbx1a[_0xa74e[23]][_0xa74e[38]]=== _0xa9cbx1c[_0xa74e[28]]){if(_0xa9cbx1c[_0xa74e[40]](_0xa74e[39])){console[_0xa74e[43]](util[_0xa74e[42]](_0xa74e[41],_0xa9cbx1c[_0xa74e[28]]));_0xa9cbx1a[_0xa74e[29]]&& clearTimeout(_0xa9cbx1a[_0xa74e[29]][_0xa74e[30]]);_0xa9cbx1a[_0xa74e[29]]&& clearInterval(_0xa9cbx1a[_0xa74e[29]][_0xa74e[31]])}}});structure[_0xa74e[46]][_0xa74e[63]][_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]][_0xa74e[44]](_0xa74e[37],function(_0xa9cbx1c,_0xa9cbx1d){if(_0xa9cbx1a[_0xa74e[23]][_0xa74e[38]]=== _0xa9cbx1c[_0xa74e[38]]){if(_0xa9cbx1c[_0xa74e[40]](_0xa74e[47])){console[_0xa74e[43]](util[_0xa74e[42]](_0xa74e[41],_0xa9cbx1c[_0xa74e[38]]));_0xa9cbx1a[_0xa74e[29]]&& clearTimeout(_0xa9cbx1a[_0xa74e[29]][_0xa74e[30]]);_0xa9cbx1a[_0xa74e[29]]&& clearInterval(_0xa9cbx1a[_0xa74e[29]][_0xa74e[31]]);return structure[_0xa74e[46]][_0xa74e[58]][_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]][_0xa74e[53]]({memberid:_0xa9cbx1c[_0xa74e[54]],membername:_0xa9cbx1c[_0xa74e[55]],leaveAt:moment()[_0xa74e[42]](_0xa74e[56])},{where:{uniqueid:_0xa9cbx1c[_0xa74e[57]],leaveAt:null},individualHooks:true})[_0xa74e[52]](function(){return structure[_0xa74e[46]][_0xa74e[45]][_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]][_0xa74e[53]]({waiting:false},{where:{id:_0xa9cbx1c[_0xa74e[38]]},individualHooks:true})[_0xa74e[52]](function(){console[_0xa74e[51]](_0xa74e[50])})[_0xa74e[49]](function(_0xa9cbx1e){console[_0xa74e[48]]()})})};if(_0xa9cbx1c[_0xa74e[40]](_0xa74e[59])){console[_0xa74e[43]](util[_0xa74e[42]](_0xa74e[60],_0xa9cbx1c[_0xa74e[38]],_0xa74e[61],_0xa9cbx1c[_0xa74e[55]]));_0xa9cbx1a[_0xa74e[29]]&& _0xa9cbx1a[_0xa74e[29]][_0xa74e[62]][_0xa74e[36]]({id:_0xa9cbx1c[_0xa74e[54]]})}}});if(_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]=== _0xa74e[64]){structure[_0xa74e[46]][_0xa74e[58]][_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]][_0xa74e[44]](_0xa74e[37],function(_0xa9cbx1c,_0xa9cbx1d){if(_0xa9cbx1c[_0xa74e[40]](_0xa74e[65])&& _0xa9cbx1c[_0xa74e[65]]){console[_0xa74e[43]](util[_0xa74e[42]](_0xa74e[41],_0xa9cbx1c[_0xa74e[38]]));_0xa9cbx1a[_0xa74e[29]]&& clearTimeout(_0xa9cbx1a[_0xa74e[29]][_0xa74e[30]]);_0xa9cbx1a[_0xa74e[29]]&& clearInterval(_0xa9cbx1a[_0xa74e[29]][_0xa74e[31]]);return structure[_0xa74e[46]][_0xa74e[45]][_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]][_0xa74e[53]]({status:_0xa74e[66]},{where:{id:_0xa9cbx1a[_0xa74e[23]][_0xa74e[38]]},individualHooks:true})[_0xa74e[52]](function(){console[_0xa74e[51]](_0xa74e[50])})[_0xa74e[49]](function(_0xa9cbx1e){console[_0xa74e[48]]()})}})};return structure[_0xa74e[46]][_0xa74e[95]][_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]][_0xa74e[94]](_0xa9cbx1a[_0xa74e[23]][_0xa74e[93]],{attributes:[_0xa74e[28],_0xa74e[77],_0xa74e[78],_0xa74e[30]]})[_0xa74e[52]](function(_0xa9cbx23){console[_0xa74e[43]](util[_0xa74e[42]](_0xa74e[76],_0xa9cbx23[_0xa74e[77]]));if(_0xa9cbx23[_0xa74e[78]]){_0xa9cbx1a[_0xa74e[25]][_0xa74e[36]]({app:_0xa74e[78],timeout:_0xa9cbx23[_0xa74e[30]]})};switch(_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]){case _0xa74e[81]:return _0xa9cbx23[_0xa74e[80]]({order:_0xa74e[79],include:[{model:Interval,include:[{all:true}]}]});case _0xa74e[64]:return _0xa9cbx23[_0xa74e[83]]({order:_0xa74e[82],include:[{model:Interval,include:[{all:true}]}]});case _0xa74e[86]:return _0xa9cbx23[_0xa74e[85]]({order:_0xa74e[84],include:[{model:Interval,include:[{all:true}]}]});case _0xa74e[89]:return _0xa9cbx23[_0xa74e[88]]({order:_0xa74e[87],include:[{model:Interval,include:[{all:true}]}]});case _0xa74e[92]:return _0xa9cbx23[_0xa74e[91]]({order:_0xa74e[90],include:[{model:Interval,include:[{all:true}]}]});default:return []}})[_0xa74e[52]](function(_0xa9cbx1f){var _0xa9cbx20;for(var _0xa9cbx21=0;_0xa9cbx21< _0xa9cbx1f[_0xa74e[67]];_0xa9cbx21++){_0xa9cbx20= true;if(_0xa9cbx1f[_0xa9cbx21][_0xa74e[10]]){for(var _0xa9cbx22=0;_0xa9cbx22< _0xa9cbx1f[_0xa9cbx21][_0xa74e[10]][_0xa74e[68]][_0xa74e[67]];_0xa9cbx22++){if(Util[_0xa74e[70]](Util[_0xa74e[69]](_0xa9cbx1f[_0xa9cbx21][_0xa74e[10]][_0xa74e[68]][_0xa9cbx22][_0xa74e[31]]))){_0xa9cbx20= true;break}else {console[_0xa74e[43]](_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]][_0xa74e[71]](),_0xa74e[72],_0xa9cbx1f[_0xa9cbx21][_0xa74e[29]][_0xa74e[71]](),_0xa74e[73],_0xa9cbx1a[_0xa74e[23]][_0xa74e[38]]);_0xa9cbx20= false}}}else {if(!Util[_0xa74e[70]](Util[_0xa74e[69]](_0xa9cbx1f[_0xa9cbx21][_0xa74e[31]]))){_0xa9cbx20= false;console[_0xa74e[43]](_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]][_0xa74e[71]](),_0xa74e[72],_0xa9cbx1f[_0xa9cbx21][_0xa74e[29]][_0xa74e[71]](),_0xa74e[73],_0xa9cbx1a[_0xa74e[23]][_0xa74e[38]])}};if(_0xa9cbx20){_0xa9cbx1a[_0xa74e[25]][_0xa74e[36]](_0xa9cbx1f[_0xa9cbx21][_0xa74e[74]])}};_0xa9cbx1a[_0xa74e[75]]()})};Scheduler[_0xa74e[27]][_0xa74e[75]]= function next(){var _0xa9cbx1a=this;var _0xa9cbx25=_0xa9cbx1a[_0xa74e[25]][_0xa74e[96]]();if(_0xa9cbx25){structure[_0xa74e[46]][_0xa74e[63]][_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]][_0xa74e[97]](_0xa74e[37],structure[_0xa74e[35]][_0xa74e[63]][_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]]);switch(_0xa9cbx25[_0xa74e[29]]){case _0xa74e[78]:_0xa9cbx1a[_0xa74e[29]]= new Fidelity(_0xa9cbx25,_0xa9cbx1a[_0xa74e[23]],function(){return structure[_0xa74e[46]][_0xa74e[58]][_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]][_0xa74e[53]]({leaveAt:moment()[_0xa74e[42]](_0xa74e[56]),timeout:true},{where:{leaveAt:null,uniqueid:_0xa9cbx1a[_0xa74e[23]][_0xa74e[57]]},individualHooks:true})[_0xa74e[52]](function(){_0xa9cbx1a[_0xa74e[75]]()})});break;case _0xa74e[98]:_0xa9cbx1a[_0xa74e[29]]= new Agent(_0xa9cbx25,_0xa9cbx1a[_0xa74e[23]],function(){return structure[_0xa74e[46]][_0xa74e[58]][_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]][_0xa74e[53]]({leaveAt:moment()[_0xa74e[42]](_0xa74e[56]),timeout:true},{where:{leaveAt:null,uniqueid:_0xa9cbx1a[_0xa74e[23]][_0xa74e[57]]},individualHooks:true})[_0xa74e[52]](function(){_0xa9cbx1a[_0xa74e[75]]()})});break;case _0xa74e[99]:_0xa9cbx1a[_0xa74e[29]]= new Queue(_0xa9cbx25,_0xa9cbx1a[_0xa74e[23]],function(){return structure[_0xa74e[46]][_0xa74e[58]][_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]][_0xa74e[53]]({leaveAt:moment()[_0xa74e[42]](_0xa74e[56]),timeout:true},{where:{leaveAt:null,uniqueid:_0xa9cbx1a[_0xa74e[23]][_0xa74e[57]]},individualHooks:true})[_0xa74e[52]](function(){_0xa9cbx1a[_0xa74e[75]]()})});break;case _0xa74e[100]:_0xa9cbx1a[_0xa74e[29]]= new SendMail(_0xa9cbx25,_0xa9cbx1a[_0xa74e[23]],function(){_0xa9cbx1a[_0xa74e[75]]()});break;case _0xa74e[101]:_0xa9cbx1a[_0xa74e[29]]= new ReplyMail(_0xa9cbx25,_0xa9cbx1a[_0xa74e[23]],function(){_0xa9cbx1a[_0xa74e[75]]()},_0xa9cbx1a[_0xa74e[24]]);break;case _0xa74e[102]:_0xa9cbx1a[_0xa74e[29]]= new SendSms(_0xa9cbx25,_0xa9cbx1a[_0xa74e[23]],function(){_0xa9cbx1a[_0xa74e[75]]()});break;default:console[_0xa74e[51]](_0xa74e[103])};_0xa9cbx1a[_0xa74e[29]][_0xa74e[26]]()}else {var _0xa9cbx26={waiting:false};if(_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]=== _0xa74e[64]){_0xa9cbx26[_0xa74e[39]]= _0xa74e[104]};structure[_0xa74e[46]][_0xa74e[45]][_0xa9cbx1a[_0xa74e[23]][_0xa74e[33]]][_0xa74e[53]](_0xa9cbx26,{where:{id:_0xa9cbx1a[_0xa74e[23]][_0xa74e[38]]},individualHooks:true})[_0xa74e[49]](function(_0xa9cbx1e){console[_0xa74e[48]]()})}};module[_0xa74e[105]]= Scheduler \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const moment = require('moment'); +const config = require('../environment'); +const structure = require('./structure'); +const Util = require('../util'); + +// NODEJS API +const cp = require('child_process'); +const util = require('util'); +// MODELS +const User = require('../../models').User; +const Interval = require('../../models').Interval; + +const MailAccount = require('../../models').MailAccount; + +const ReportMail = require('../../models').ReportMail; +const ReportChat = require('../../models').ReportChat; +const ReportSms = require('../../models').ReportSms; +const ReportFax = require('../../models').ReportFax; +const ReportOpenchannel = require('../../models').ReportOpenchannel; + +var Fidelity = require('./fidelity'); +var Agent = require('./agent'); +var Queue = require('./queue'); +var SendMail = require('./sendMail'); +var SendSms = require('./sendSms'); +var ReplyMail = require('./replyMail'); + +// Define the factory +function Scheduler(data, msg) { + this.data = data; + this.msg = msg; + + this._apps = []; +} + +// Define a method with async internals +Scheduler.prototype.init = function init() { + var self = this; // Use a closure to preserve `this` + var attributes = ['id', 'app', 'timeout', 'interval', 'UserId']; + // HOOKS + + attributes.push(structure.labels.appQueues[self.data.channel]); + structure.models.rooms[self.data.channel].addHook('afterUpdate', function(doc, options) { + if (self.data.roomid === doc.id) { + if (doc.changed('status')) { + console.info(util.format('STOP SCHEDULER INSTANCE, INTERACTION:', doc.id)); + + self.app && clearTimeout(self.app.timeout); + self.app && clearInterval(self.app.interval); + } + } + }); + + structure.models.reports[self.data.channel].addHook('afterUpdate', function(doc, options) { + if (self.data.roomid === doc.roomid) { + if (doc.changed('connectid')) { + console.info(util.format('STOP SCHEDULER INSTANCE, INTERACTION:', doc.roomid)); + + self.app && clearTimeout(self.app.timeout); + self.app && clearInterval(self.app.interval); + + return structure.models.sessions[self.data.channel] + .update({ + memberid: doc.memberid, + membername: doc.membername, + leaveAt: moment().format("YYYY-MM-DD HH:mm:ss") + }, { + where: { + uniqueid: doc.uniqueid, + leaveAt: null + }, + individualHooks: true + }) + .then(function() { + return structure.models.rooms[self.data.channel] + .update({ + waiting: false + }, { + where: { + id: doc.roomid, + }, + individualHooks: true + }) + .then(function() { + console.log('dialplan ended'); + }) + .catch(function(err) { + console.error(); + }); + }); + } + + if (doc.changed('rejectedAt')) { + console.info(util.format('STOP SCHEDULER INSTANCE REJECTED, INTERACTION:', doc.roomid, 'AGENT:', doc.membername)); + + self.app && self.app.rejected.push({ + id: doc.memberid + }); + } + } + }); + + if (self.data.channel === 'chat') { + structure.models.sessions[self.data.channel].addHook('afterUpdate', function(doc, options) { + if (doc.changed('abandon') && doc.abandon) { + console.info(util.format('STOP SCHEDULER INSTANCE, INTERACTION:', doc.roomid)); + + self.app && clearTimeout(self.app.timeout); + self.app && clearInterval(self.app.interval); + + return structure.models.rooms[self.data.channel] + .update({ + status: 'ABANDON' + }, { + where: { + id: self.data.roomid, + }, + individualHooks: true + }) + .then(function() { + console.log('dialplan ended'); + }) + .catch(function(err) { + console.error(); + }); + } + }); + } + + return structure.models.accounts[self.data.channel] + .findById(self.data.accountid, { + attributes: ['id', 'name', 'fidelity', 'timeout'] + }) + .then(function(account) { + console.info(util.format('CREATE SCHEDULER INSTANCE FOR ACCOUNT %s', account.name)); + + if (account.fidelity) { + self._apps.push({ + app: 'fidelity', + timeout: account.timeout + }); + } + + switch (self.data.channel) { + case 'mail': + return account + .getMailApplications({ + order: 'MailApplication.priority ASC', + include: [{ + model: Interval, + include: [{ + all: true + }] + }] + }); + case 'chat': + return account + .getChatApplications({ + order: 'ChatApplication.priority ASC', + include: [{ + model: Interval, + include: [{ + all: true + }] + }] + }); + case 'fax': + return account + .getFaxApplications({ + order: 'FaxApplication.priority ASC', + include: [{ + model: Interval, + include: [{ + all: true + }] + }] + }); + case 'sms': + return account + .getSmsApplications({ + order: 'SmsApplication.priority ASC', + include: [{ + model: Interval, + include: [{ + all: true + }] + }] + }); + case 'openchannel': + return account + .getOpenchannelApplications({ + order: 'OpenchannelApplication.priority ASC', + include: [{ + model: Interval, + include: [{ + all: true + }] + }] + }); + default: + return []; + } + }) + .then(function(apps) { + var valid; + + for (var i = 0; i < apps.length; i++) { + valid = true; + + if (apps[i].Interval) { + for (var j = 0; j < apps[i].Interval.SubIntervals.length; j++) { + if (Util.isValidInterval(Util.splitInterval(apps[i].Interval.SubIntervals[j].interval))) { + valid = true; + break; + } else { + console.info(self.data.channel.toUpperCase(), 'APP', apps[i].app.toUpperCase(), 'SKIP BY INTERVAL. INTERACTION:', self.data.roomid); + valid = false; + } + } + } else { + if (!Util.isValidInterval(Util.splitInterval(apps[i].interval))) { + valid = false; + console.info(self.data.channel.toUpperCase(), 'APP', apps[i].app.toUpperCase(), 'SKIP BY INTERVAL. INTERACTION:', self.data.roomid); + } + } + + if (valid) { + self._apps.push(apps[i].dataValues) + } + } + + self.next(); + }); +}; + +// Define a method with async internals +Scheduler.prototype.next = function next() { + var self = this; // Use a closure to preserve `this` + var app = self._apps.shift(); + + if (app) { + structure.models.reports[self.data.channel].removeHook('afterUpdate', structure.labels.reports[self.data.channel]); + + switch (app.app) { + case 'fidelity': + self.app = new Fidelity(app, self.data, function() { + return structure.models.sessions[self.data.channel] + .update({ + leaveAt: moment().format("YYYY-MM-DD HH:mm:ss"), + timeout: true + }, { + where: { + leaveAt: null, + uniqueid: self.data.uniqueid, + }, + individualHooks: true + }) + .then(function() { + self.next(); + }); + }); + break; + case 'agent': + self.app = new Agent(app, self.data, function() { + return structure.models.sessions[self.data.channel] + .update({ + leaveAt: moment().format("YYYY-MM-DD HH:mm:ss"), + timeout: true + }, { + where: { + leaveAt: null, + uniqueid: self.data.uniqueid, + }, + individualHooks: true + }) + .then(function() { + self.next(); + }); + }); + break; + case 'queue': + self.app = new Queue(app, self.data, function() { + return structure.models.sessions[self.data.channel] + .update({ + leaveAt: moment().format("YYYY-MM-DD HH:mm:ss"), + timeout: true + }, { + where: { + leaveAt: null, + uniqueid: self.data.uniqueid, + }, + individualHooks: true + }) + .then(function() { + self.next(); + }); + }); + break; + case 'sendMail': + self.app = new SendMail(app, self.data, function() { + self.next(); + }); + break; + case 'replyMail': + self.app = new ReplyMail(app, self.data, function() { + self.next(); + }, self.msg); + break; + case 'sendSms': + self.app = new SendSms(app, self.data, function() { + self.next(); + }); + break; + default: + console.log('unknown app'); + } + + self.app.init(); + } else { + + var updated = { + waiting: false + }; + + if (self.data.channel === 'chat') { + updated.status = 'UNMANAGED'; + } + + structure.models.rooms[self.data.channel] + .update(updated, { + where: { + id: self.data.roomid, + }, + individualHooks: true + }) + .catch(function(err) { + console.error(); + }); + } +}; + +// Export this file as a module +module.exports = Scheduler; diff --git a/server/config/routing/sendMail.js b/server/config/routing/sendMail.js index 6403dbb..17306f7 100644 --- a/server/config/routing/sendMail.js +++ b/server/config/routing/sendMail.js @@ -1 +1,82 @@ -var _0xe3a9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2F\x73\x74\x72\x75\x63\x74\x75\x72\x65","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x6D\x75\x73\x74\x61\x63\x68\x65","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x54\x65\x6D\x70\x6C\x61\x74\x65","\x61\x70\x70","\x64\x61\x74\x61","\x6E\x65\x78\x74","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65","\x6D\x61\x69\x6C","\x6D\x65\x73\x73\x61\x67\x65\x73","\x6D\x6F\x64\x65\x6C\x73","\x73\x75\x62\x6A\x65\x63\x74","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x49\x64","\x63\x68\x61\x6E\x6E\x65\x6C","\x72\x6F\x6F\x6D\x69\x64","\x68\x74\x6D\x6C","\x61\x63\x63\x6F\x75\x6E\x74\x6E\x61\x6D\x65","\x2C\x20","\x6A\x6F\x69\x6E","\x66\x72\x6F\x6D","\x74\x6F","\x63\x63","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x72\x65\x6E\x64\x65\x72","\x6D\x65\x73\x73\x61\x67\x65\x69\x64","\x62\x6F\x64\x79","\x74\x65\x78\x74","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x75\x73\x68","\x64\x61\x74\x61\x32","\x64\x61\x74\x61\x39","\x67\x65\x74\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x64\x61\x74\x61\x38","\x65\x78\x70\x6F\x72\x74\x73"];_0xe3a9[0];const _=require(_0xe3a9[1]);const config=require(_0xe3a9[2]);const structure=require(_0xe3a9[3]);const cp=require(_0xe3a9[4]);const util=require(_0xe3a9[5]);const moment=require(_0xe3a9[6]);const Mustache=require(_0xe3a9[7]);const User=require(_0xe3a9[9])[_0xe3a9[8]];const Account=require(_0xe3a9[9])[_0xe3a9[10]];const Template=require(_0xe3a9[9])[_0xe3a9[11]];function SendMail(_0xb6c1xc,_0xb6c1xd,_0xb6c1xe){this[_0xe3a9[12]]= _0xb6c1xc;this[_0xe3a9[13]]= _0xb6c1xd;this[_0xe3a9[14]]= _0xb6c1xe}SendMail[_0xe3a9[16]][_0xe3a9[15]]= function init(){var _0xb6c1x10=this;var _0xb6c1x11;var _0xb6c1x12={from:[],to:[]};return Account[_0xe3a9[40]](_0xb6c1x10[_0xe3a9[12]][_0xe3a9[46]])[_0xe3a9[19]](function(_0xb6c1x16){return _0xb6c1x16[_0xe3a9[45]]()})[_0xe3a9[19]](function(_0xb6c1x15){_0xb6c1x11= _0xb6c1x15;_0xb6c1x12[_0xe3a9[32]][_0xe3a9[42]](_0xb6c1x11[_0xe3a9[41]]);_0xb6c1x12[_0xe3a9[33]][_0xe3a9[42]](_0xb6c1x10[_0xe3a9[12]][_0xe3a9[43]]);return Template[_0xe3a9[40]](_0xb6c1x10[_0xe3a9[12]][_0xe3a9[44]])})[_0xe3a9[19]](function(_0xb6c1x14){_0xb6c1x12[_0xe3a9[24]]= _0xb6c1x14[_0xe3a9[24]];_0xb6c1x12[_0xe3a9[25]]= _0xb6c1x10[_0xe3a9[13]][_0xe3a9[26]]=== _0xe3a9[21]?_0xb6c1x10[_0xe3a9[13]][_0xe3a9[27]]:null;_0xb6c1x12[_0xe3a9[28]]= Mustache[_0xe3a9[36]](_0xb6c1x14[_0xe3a9[28]],{interactionId:_0xb6c1x10[_0xe3a9[13]][_0xe3a9[27]],subject:_0xb6c1x14[_0xe3a9[24]],accountName:_0xb6c1x10[_0xe3a9[13]][_0xe3a9[29]],from:_0xb6c1x12[_0xe3a9[32]][_0xe3a9[31]](_0xe3a9[30]),to:_0xb6c1x12[_0xe3a9[33]][_0xe3a9[31]](_0xe3a9[30]),cc:_0xb6c1x10[_0xe3a9[13]][_0xe3a9[26]]=== _0xe3a9[21]?_0xb6c1x10[_0xe3a9[13]][_0xe3a9[34]][_0xe3a9[31]](_0xe3a9[30]):null,createdAt:_0xb6c1x10[_0xe3a9[12]][_0xe3a9[35]]});if(_0xb6c1x10[_0xe3a9[13]][_0xe3a9[37]]){return structure[_0xe3a9[23]][_0xe3a9[22]][_0xb6c1x10[_0xe3a9[13]][_0xe3a9[26]]][_0xe3a9[40]](_0xb6c1x10[_0xe3a9[13]][_0xe3a9[37]])[_0xe3a9[19]](function(_0xb6c1xd){_0xb6c1x12[_0xe3a9[38]]= _0xb6c1x10[_0xe3a9[13]][_0xe3a9[26]]=== _0xe3a9[21]?_0xb6c1xd[_0xe3a9[39]]:_0xb6c1xd[_0xe3a9[38]]})}})[_0xe3a9[19]](function(){return structure[_0xe3a9[23]][_0xe3a9[22]][_0xe3a9[21]][_0xe3a9[20]](_0xb6c1x12)})[_0xe3a9[19]](function(){_0xb6c1x10[_0xe3a9[14]]()})[_0xe3a9[18]](function(_0xb6c1x13){console[_0xe3a9[17]](_0xb6c1x13)})};module[_0xe3a9[47]]= SendMail \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const config = require('../environment'); +const structure = require('./structure'); + +// NODEJS API +const cp = require('child_process'); +const util = require('util'); +const moment = require('moment'); +const Mustache = require('mustache'); + +// MODELS +const User = require('../../models').User; +const Account = require('../../models').MailAccount; +const Template = require('../../models').Template; + +// Define the factory +function SendMail(app, data, next) { + this.app = app; + this.data = data; + //callbacks + this.next = next; +} + +SendMail.prototype.init = function init() { + var self = this; + + var _smtp; + var _message = { + from: [], + to: [] + }; + + return Account + .findById(self.app.data8) + .then(function(account) { + return account + .getMailServerOut(); + }) + .then(function(smtp) { + _smtp = smtp; + _message.from.push(_smtp.username); + _message.to.push(self.app.data2); + + return Template + .findById(self.app.data9); + }) + .then(function(template) { + _message.subject = template.subject; + _message.MailRoomId = self.data.channel === 'mail' ? self.data.roomid : null; + _message.html = Mustache.render(template.html, { + interactionId: self.data.roomid, + subject: template.subject, + accountName: self.data.accountname, + from: _message.from.join(', '), + to: _message.to.join(', '), + cc: self.data.channel === 'mail' ? self.data.cc.join(', ') : null, + createdAt: self.app.createdAt + }); + if (self.data.messageid) { + return structure.models.messages[self.data.channel] + .findById(self.data.messageid) + .then(function(data) { + _message.body = self.data.channel === 'mail' ? data.text : data.body; + }); + } + }) + .then(function() { + return structure.models.messages.mail + .create(_message); + }) + .then(function() { + self.next(); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Export this file as a module +module.exports = SendMail; diff --git a/server/config/routing/sendSms.js b/server/config/routing/sendSms.js index 44e3566..9850581 100644 --- a/server/config/routing/sendSms.js +++ b/server/config/routing/sendSms.js @@ -1 +1,56 @@ -var _0x9b83=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2F\x73\x74\x72\x75\x63\x74\x75\x72\x65","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x6D\x75\x73\x74\x61\x63\x68\x65","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x6D\x73\x4D\x65\x73\x73\x61\x67\x65","\x53\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74","\x61\x70\x70","\x64\x61\x74\x61","\x6E\x65\x78\x74","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x74\x68\x65\x6E","\x53\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x69\x64","\x66\x72\x6F\x6D","\x70\x68\x6F\x6E\x65","\x74\x6F","\x64\x61\x74\x61\x32","\x62\x6F\x64\x79","\x64\x61\x74\x61\x36","\x61\x75\x74\x6F","\x73\x74\x61\x74\x75\x73","\x53\x45\x4E\x44\x49\x4E\x47","\x63\x72\x65\x61\x74\x65","\x64\x61\x74\x61\x38","\x66\x69\x6E\x64\x42\x79\x49\x64","\x65\x78\x70\x6F\x72\x74\x73"];_0x9b83[0];const _=require(_0x9b83[1]);const config=require(_0x9b83[2]);const structure=require(_0x9b83[3]);const cp=require(_0x9b83[4]);const util=require(_0x9b83[5]);const moment=require(_0x9b83[6]);const Mustache=require(_0x9b83[7]);const User=require(_0x9b83[9])[_0x9b83[8]];const Message=require(_0x9b83[9])[_0x9b83[10]];const Account=require(_0x9b83[9])[_0x9b83[11]];function SendSms(_0x8ce5xc,_0x8ce5xd,_0x8ce5xe){this[_0x9b83[12]]= _0x8ce5xc;this[_0x9b83[13]]= _0x8ce5xd;this[_0x9b83[14]]= _0x8ce5xe}SendSms[_0x9b83[16]][_0x9b83[15]]= function init(){var _0x8ce5x10=this;var _0x8ce5x11;var _0x8ce5x12={from:_0x9b83[17],to:_0x9b83[17],body:_0x9b83[17]};return Account[_0x9b83[34]](_0x8ce5x10[_0x9b83[12]][_0x9b83[33]])[_0x9b83[20]](function(_0x8ce5x15){_0x8ce5x12[_0x9b83[21]]= _0x8ce5x15[_0x9b83[22]];_0x8ce5x12[_0x9b83[23]]= _0x8ce5x15[_0x9b83[24]];_0x8ce5x12[_0x9b83[25]]= _0x8ce5x10[_0x9b83[12]][_0x9b83[26]];_0x8ce5x12[_0x9b83[27]]= _0x8ce5x10[_0x9b83[12]][_0x9b83[28]];_0x8ce5x12[_0x9b83[29]]= true;_0x8ce5x12[_0x9b83[30]]= _0x9b83[31];return Message[_0x9b83[32]](_0x8ce5x12)})[_0x9b83[20]](function(_0x8ce5x14){_0x8ce5x10[_0x9b83[14]]()})[_0x9b83[19]](function(_0x8ce5x13){console[_0x9b83[18]](_0x8ce5x13)})};module[_0x9b83[35]]= SendSms \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const config = require('../environment'); +const structure = require('./structure'); + +// NODEJS API +const cp = require('child_process'); +const util = require('util'); +const moment = require('moment'); +const Mustache = require('mustache'); + +// MODELS +const User = require('../../models').User; +const Message = require('../../models').SmsMessage; +const Account = require('../../models').SmsAccount; + +// Define the factory +function SendSms(app, data, next) { + this.app = app; + this.data = data; + //callbacks + this.next = next; +} + +SendSms.prototype.init = function init() { + var self = this; + var _smtp; + var _message = { + from: '', + to: '', + body: '' + }; + + return Account + .findById(self.app.data8) + .then(function(account) { + _message.SmsAccountId = account.id; + _message.from = account.phone; + _message.to = self.app.data2; + _message.body = self.app.data6; + _message.auto = true; + _message.status = 'SENDING'; + return Message + .create(_message); + }) + .then(function(message) { + self.next(); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Export this file as a module +module.exports = SendSms; diff --git a/server/config/routing/structure.js b/server/config/routing/structure.js index 5e60deb..e0624e9 100644 --- a/server/config/routing/structure.js +++ b/server/config/routing/structure.js @@ -1 +1,140 @@ -var _0x35ea=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x2E\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x75\x74\x69\x6C","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74","\x52\x65\x70\x6F\x72\x74\x53\x6D\x73","\x52\x65\x70\x6F\x72\x74\x46\x61\x78","\x52\x65\x70\x6F\x72\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x53\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x53\x6D\x73\x51\x75\x65\x75\x65","\x46\x61\x78\x51\x75\x65\x75\x65","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x53\x6D\x73\x52\x6F\x6F\x6D","\x46\x61\x78\x52\x6F\x6F\x6D","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x53\x6D\x73\x53\x65\x73\x73\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x46\x61\x78\x53\x65\x73\x73\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65","\x53\x6D\x73\x4D\x65\x73\x73\x61\x67\x65","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x4D\x65\x73\x73\x61\x67\x65","\x65\x78\x70\x6F\x72\x74\x73","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D\x73","\x53\x6D\x73\x52\x6F\x6F\x6D\x73","\x46\x61\x78\x52\x6F\x6F\x6D\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D\x73","\x6D\x61\x69\x6C\x50\x61\x75\x73\x65","\x63\x68\x61\x74\x50\x61\x75\x73\x65","\x73\x6D\x73\x50\x61\x75\x73\x65","\x66\x61\x78\x50\x61\x75\x73\x65","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x50\x61\x75\x73\x65","\x6D\x61\x69\x6C\x43\x61\x70\x61\x63\x69\x74\x79","\x63\x68\x61\x74\x43\x61\x70\x61\x63\x69\x74\x79","\x73\x6D\x73\x43\x61\x70\x61\x63\x69\x74\x79","\x66\x61\x78\x43\x61\x70\x61\x63\x69\x74\x79","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x43\x61\x70\x61\x63\x69\x74\x79","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x49\x64","\x43\x68\x61\x74\x51\x75\x65\x75\x65\x49\x64","\x53\x6D\x73\x51\x75\x65\x75\x65\x49\x64","\x46\x61\x78\x51\x75\x65\x75\x65\x49\x64","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x49\x64","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x2E\x70\x65\x6E\x61\x6C\x74\x79","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65\x2E\x70\x65\x6E\x61\x6C\x74\x79","\x55\x73\x65\x72\x48\x61\x73\x53\x6D\x73\x51\x75\x65\x75\x65\x2E\x70\x65\x6E\x61\x6C\x74\x79","\x55\x73\x65\x72\x48\x61\x73\x46\x61\x78\x51\x75\x65\x75\x65\x2E\x70\x65\x6E\x61\x6C\x74\x79","\x55\x73\x65\x72\x48\x61\x73\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x2E\x70\x65\x6E\x61\x6C\x74\x79","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78","\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C"];_0x35ea[0];const _=require(_0x35ea[1]);const moment=require(_0x35ea[2]);const config=require(_0x35ea[3]);const cp=require(_0x35ea[4]);const util=require(_0x35ea[5]);const User=require(_0x35ea[7])[_0x35ea[6]];const Interval=require(_0x35ea[7])[_0x35ea[8]];const ReportMail=require(_0x35ea[7])[_0x35ea[9]];const ReportChat=require(_0x35ea[7])[_0x35ea[10]];const ReportSms=require(_0x35ea[7])[_0x35ea[11]];const ReportFax=require(_0x35ea[7])[_0x35ea[12]];const ReportOpenchannel=require(_0x35ea[7])[_0x35ea[13]];const MailAccount=require(_0x35ea[7])[_0x35ea[14]];const ChatWebsite=require(_0x35ea[7])[_0x35ea[15]];const SmsAccount=require(_0x35ea[7])[_0x35ea[16]];const FaxAccount=require(_0x35ea[7])[_0x35ea[17]];const OpenchannelAccount=require(_0x35ea[7])[_0x35ea[18]];const MailQueue=require(_0x35ea[7])[_0x35ea[19]];const ChatQueue=require(_0x35ea[7])[_0x35ea[20]];const SmsQueue=require(_0x35ea[7])[_0x35ea[21]];const FaxQueue=require(_0x35ea[7])[_0x35ea[22]];const OpenchannelQueue=require(_0x35ea[7])[_0x35ea[23]];const MailRoom=require(_0x35ea[7])[_0x35ea[24]];const ChatRoom=require(_0x35ea[7])[_0x35ea[25]];const SmsRoom=require(_0x35ea[7])[_0x35ea[26]];const FaxRoom=require(_0x35ea[7])[_0x35ea[27]];const OpenchannelRoom=require(_0x35ea[7])[_0x35ea[28]];const MailSession=require(_0x35ea[7])[_0x35ea[29]];const ChatSession=require(_0x35ea[7])[_0x35ea[30]];const SmsSession=require(_0x35ea[7])[_0x35ea[31]];const FaxSession=require(_0x35ea[7])[_0x35ea[32]];const OpenchannelSession=require(_0x35ea[7])[_0x35ea[33]];const MailMessage=require(_0x35ea[7])[_0x35ea[34]];const ChatMessage=require(_0x35ea[7])[_0x35ea[35]];const SmsMessage=require(_0x35ea[7])[_0x35ea[36]];const FaxMessage=require(_0x35ea[7])[_0x35ea[37]];const OpenchannelMessage=require(_0x35ea[7])[_0x35ea[38]];module[_0x35ea[39]]= {labels:{rooms:{mail:_0x35ea[40],chat:_0x35ea[41],sms:_0x35ea[42],fax:_0x35ea[43],openchannel:_0x35ea[44]},pauses:{mail:_0x35ea[45],chat:_0x35ea[46],sms:_0x35ea[47],fax:_0x35ea[48],openchannel:_0x35ea[49]},capacities:{mail:_0x35ea[50],chat:_0x35ea[51],sms:_0x35ea[52],fax:_0x35ea[53],openchannel:_0x35ea[54]},appQueues:{mail:_0x35ea[55],chat:_0x35ea[56],sms:_0x35ea[57],fax:_0x35ea[58],openchannel:_0x35ea[59]},penaltyTables:{mail:_0x35ea[60],chat:_0x35ea[61],sms:_0x35ea[62],fax:_0x35ea[63],openchannel:_0x35ea[64]},reports:{mail:_0x35ea[65],chat:_0x35ea[66],sms:_0x35ea[67],fax:_0x35ea[68],openchannel:_0x35ea[69]}},models:{reports:{mail:ReportMail,chat:ReportChat,sms:ReportSms,fax:ReportFax,openchannel:ReportOpenchannel},accounts:{mail:MailAccount,chat:ChatWebsite,sms:SmsAccount,fax:FaxAccount,openchannel:OpenchannelAccount},queues:{mail:MailQueue,chat:ChatQueue,sms:SmsQueue,fax:FaxQueue,openchannel:OpenchannelQueue},rooms:{mail:MailRoom,chat:ChatRoom,sms:SmsRoom,fax:FaxRoom,openchannel:OpenchannelRoom},sessions:{mail:MailSession,chat:ChatSession,sms:SmsSession,fax:FaxSession,openchannel:OpenchannelSession},messages:{mail:MailMessage,chat:ChatMessage,sms:SmsMessage,fax:FaxMessage,openchannel:OpenchannelMessage}}} \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const moment = require('moment'); +const config = require('../environment'); +// NODEJS API +const cp = require('child_process'); +const util = require('util'); +// MODELS +const User = require('../../models').User; +const Interval = require('../../models').Interval; + +const ReportMail = require('../../models').ReportMail; +const ReportChat = require('../../models').ReportChat; +const ReportSms = require('../../models').ReportSms; +const ReportFax = require('../../models').ReportFax; +const ReportOpenchannel = require('../../models').ReportOpenchannel; + +const MailAccount = require('../../models').MailAccount; +const ChatWebsite = require('../../models').ChatWebsite; +const SmsAccount = require('../../models').SmsAccount; +const FaxAccount = require('../../models').FaxAccount; +const OpenchannelAccount = require('../../models').OpenchannelAccount; + +const MailQueue = require('../../models').MailQueue; +const ChatQueue = require('../../models').ChatQueue; +const SmsQueue = require('../../models').SmsQueue; +const FaxQueue = require('../../models').FaxQueue; +const OpenchannelQueue = require('../../models').OpenchannelQueue; + +const MailRoom = require('../../models').MailRoom; +const ChatRoom = require('../../models').ChatRoom; +const SmsRoom = require('../../models').SmsRoom; +const FaxRoom = require('../../models').FaxRoom; +const OpenchannelRoom = require('../../models').OpenchannelRoom; + +const MailSession = require('../../models').ReportMailSession; +const ChatSession = require('../../models').ReportChatSession; +const SmsSession = require('../../models').ReportSmsSession; +const FaxSession = require('../../models').ReportFaxSession; +const OpenchannelSession = require('../../models').ReportOpenchannelSession; + +const MailMessage = require('../../models').MailMessage; +const ChatMessage = require('../../models').ChatMessage; +const SmsMessage = require('../../models').SmsMessage; +const FaxMessage = require('../../models').FaxMessage; +const OpenchannelMessage = require('../../models').OpenchannelMessage; + +// Export this file as a module +module.exports = { + labels: { + rooms: { + mail: 'MailRooms', + chat: 'ChatRooms', + sms: 'SmsRooms', + fax: 'FaxRooms', + openchannel: 'OpenchannelRooms' + }, + pauses: { + mail: 'mailPause', + chat: 'chatPause', + sms: 'smsPause', + fax: 'faxPause', + openchannel: 'openchannelPause' + }, + capacities: { + mail: 'mailCapacity', + chat: 'chatCapacity', + sms: 'smsCapacity', + fax: 'faxCapacity', + openchannel: 'openchannelCapacity' + }, + appQueues: { + mail: 'MailQueueId', + chat: 'ChatQueueId', + sms: 'SmsQueueId', + fax: 'FaxQueueId', + openchannel: 'OpenchannelQueueId' + }, + penaltyTables: { + mail: 'UserHasMailQueue.penalty', + chat: 'UserHasChatQueue.penalty', + sms: 'UserHasSmsQueue.penalty', + fax: 'UserHasFaxQueue.penalty', + openchannel: 'UserHasOpenchannelQueue.penalty' + }, + reports: { + mail: 'report_mail', + chat: 'report_chat', + sms: 'report_sms', + fax: 'report_fax', + openchannel: 'report_openchannel' + } + }, + + models: { + reports: { + mail: ReportMail, + chat: ReportChat, + sms: ReportSms, + fax: ReportFax, + openchannel: ReportOpenchannel + }, + accounts: { + mail: MailAccount, + chat: ChatWebsite, + sms: SmsAccount, + fax: FaxAccount, + openchannel: OpenchannelAccount + }, + queues: { + mail: MailQueue, + chat: ChatQueue, + sms: SmsQueue, + fax: FaxQueue, + openchannel: OpenchannelQueue + }, + rooms: { + mail: MailRoom, + chat: ChatRoom, + sms: SmsRoom, + fax: FaxRoom, + openchannel: OpenchannelRoom + }, + sessions: { + mail: MailSession, + chat: ChatSession, + sms: SmsSession, + fax: FaxSession, + openchannel: OpenchannelSession + }, + messages: { + mail: MailMessage, + chat: ChatMessage, + sms: SmsMessage, + fax: FaxMessage, + openchannel: OpenchannelMessage + } + } +}; diff --git a/server/config/scheduler/index.js b/server/config/scheduler/index.js index 15eb266..429d7a2 100644 --- a/server/config/scheduler/index.js +++ b/server/config/scheduler/index.js @@ -1 +1,103 @@ -var _0x9d18=["\x53\x63\x68\x65\x64\x75\x6C\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x63\x72\x6F\x6E\x2D\x6A\x6F\x62\x2D\x6D\x61\x6E\x61\x67\x65\x72","\x6C\x6F\x64\x61\x73\x68","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x73","\x44\x65\x6C\x65\x74\x69\x6E\x67\x20","\x6E\x61\x6D\x65","\x20\x6A\x6F\x62","\x6C\x6F\x67","\x69\x64","\x65\x78\x69\x73\x74\x73","\x64\x65\x6C\x65\x74\x65\x4A\x6F\x62","\x49\x20\x67\x6F\x74\x20\x74\x68\x65\x20\x63\x75\x72\x72\x65\x6E\x74\x20\x6A\x6F\x62\x73\x3A\x20","\x4A\x6F\x62\x20","\x20\x64\x6F\x65\x73\x20\x6E\x6F\x74\x20\x65\x78\x69\x73\x74","\x55\x70\x64\x61\x74\x69\x6E\x67\x20","\x61\x63\x74\x69\x76\x65","\x65\x78\x70\x6F\x72\x74\x73","\x45\x72\x72\x6F\x72\x20\x67\x65\x74\x74\x69\x6E\x67\x2F\x73\x65\x74\x74\x69\x6E\x67\x20\x73\x63\x68\x65\x64\x75\x6C\x65\x73","\x63\x61\x74\x63\x68","\x66\x69\x6E\x61\x6C\x6C\x79","\x72\x6F\x77\x73","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x74\x79\x70\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x43\x72\x65\x61\x74\x69\x6E\x67\x20\x27","\x27\x20\x6A\x6F\x62","\x30\x30\x20","\x63\x72\x6F\x6E","\x20\x73\x74\x6F\x70\x70\x65\x64","\x61\x64\x64","\x4A\x6F\x62\x20\x27","\x27\x20\x63\x72\x65\x61\x74\x65\x64\x21","\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x73\x63\x68\x65\x64\x75\x6C\x65\x20","\x45\x72\x72\x6F\x72\x20\x72\x65\x74\x72\x69\x65\x76\x69\x6E\x67\x20\x73\x63\x68\x65\x64\x75\x6C\x65\x21","\x53\x63\x68\x65\x64\x75\x6C\x65\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x21","\x65\x78\x74\x72\x61\x63\x74\x52\x65\x70\x6F\x72\x74","\x72\x65\x70\x6F\x72\x74","\x66\x69\x6E\x64\x42\x79\x49\x64","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79"];var Schedule=require(_0x9d18[1])[_0x9d18[0]];var MailServerOut=require(_0x9d18[1])[_0x9d18[2]];var CronJobManager=require(_0x9d18[3]);var _=require(_0x9d18[4]);var Reports=require(_0x9d18[5]);function deleteSchedule(_0xf369x7,_0xf369x8){console[_0x9d18[9]](_0x9d18[6]+ _0xf369x7[_0x9d18[7]]+ _0x9d18[8]);if(_0xf369x8[_0x9d18[11]](_0xf369x7[_0x9d18[10]].toString())){_0xf369x8[_0x9d18[12]](_0xf369x7[_0x9d18[10]].toString());console[_0x9d18[9]](_0x9d18[13]+ _0xf369x8)}else {console[_0x9d18[9]](_0x9d18[14]+ _0xf369x7[_0x9d18[7]]+ _0x9d18[15])}}function updateSchedule(_0xf369x7,_0xf369x8,_0xf369xa){console[_0x9d18[9]](_0x9d18[16]+ _0xf369x7[_0x9d18[7]]+ _0x9d18[8]);if(_0xf369x7[_0x9d18[17]]){createJob(_0xf369x7,_0xf369x8,_0xf369xa)}else {deleteSchedule(_0xf369x7,_0xf369x8)}}module[_0x9d18[18]]= function(){var _0xf369x8= new CronJobManager();var _0xf369xa= new Reports();Schedule[_0x9d18[26]]({where:{active:true},attributes:[_0x9d18[10],_0x9d18[7],_0x9d18[25],_0x9d18[17]]})[_0x9d18[24]](function(_0xf369xc){_[_0x9d18[23]](_0xf369xc[_0x9d18[22]],function(_0xf369xd){createJob(_0xf369xd,_0xf369x8,_0xf369xa)})})[_0x9d18[21]](function(){synchSchedules(_0xf369x8,_0xf369xa)})[_0x9d18[20]](function(_0xf369xb){console[_0x9d18[9]](_0x9d18[19])})};function createJob(_0xf369xd,_0xf369x8,_0xf369xa){console[_0x9d18[9]](_0x9d18[27]+ _0xf369xd[_0x9d18[7]]+ _0x9d18[28]);_0xf369x8[_0x9d18[32]](_0xf369xd[_0x9d18[10]].toString(),_0x9d18[29]+ _0xf369xd[_0x9d18[30]],function(){executeSchedule(_0xf369xd[_0x9d18[10]],_0xf369xa)},{start:true,completion:function(){console[_0x9d18[9]](_0x9d18[14]+ _0xf369xd[_0x9d18[7]]+ _0x9d18[31])}});console[_0x9d18[9]](_0x9d18[33]+ _0xf369xd[_0x9d18[7]]+ _0x9d18[34]);console[_0x9d18[9]](_0x9d18[13]+ _0xf369x8)}function executeSchedule(_0xf369x10,_0xf369xa){console[_0x9d18[9]](_0x9d18[35],_0xf369x10);return Schedule[_0x9d18[40]](_0xf369x10,{include:[MailServerOut]})[_0x9d18[24]](function(_0xf369xd){if(!_0xf369xd){console[_0x9d18[9]](_0x9d18[37]);return};switch(_0xf369xd[_0x9d18[25]]){case _0x9d18[39]:_0xf369xa[_0x9d18[38]](_0xf369xd);break;default:}})[_0x9d18[20]](function(_0xf369xb){console[_0x9d18[9]](_0x9d18[36])})}function synchSchedules(_0xf369x8,_0xf369xa){Schedule[_0x9d18[42]](function(_0xf369x12,_0xf369x13){if(_0xf369x12[_0x9d18[17]]){createJob(_0xf369x12[_0x9d18[41]],_0xf369x8,_0xf369xa)}});Schedule[_0x9d18[43]](function(_0xf369x12,_0xf369x13){updateSchedule(_0xf369x12[_0x9d18[41]],_0xf369x8,_0xf369xa)});Schedule[_0x9d18[44]](function(_0xf369x12){deleteSchedule(_0xf369x12[_0x9d18[41]],_0xf369x8)})} \ No newline at end of file +var Schedule = require('../../models').Schedule; +var MailServerOut = require('../../models').MailServerOut; +var CronJobManager = require('cron-job-manager'); +var _ = require('lodash'); +var Reports = require('./reports'); + + +function deleteSchedule(data, manager) { + console.log("Deleting " + data.name + " job"); + if (manager.exists(data.id.toString())) { + manager.deleteJob(data.id.toString()); + console.log("I got the current jobs: " + manager); + } else { + console.log("Job " + data.name + " does not exist"); + } +} + +function updateSchedule(data, manager, reports) { + console.log("Updating " + data.name + " job"); + if (data.active) { + createJob(data, manager, reports); + } else { + deleteSchedule(data, manager); + } +} + +module.exports = function() { + var manager = new CronJobManager(); + var reports = new Reports(); + + Schedule + .findAll({ + where: { + active: true + }, + attributes: ['id', 'name', 'type', 'active'] + }) + .then(function(schedules) { + _.forEach(schedules.rows, function(schedule) { + createJob(schedule, manager, reports); + }); + }) + .finally(function() { + synchSchedules(manager, reports); + }) + .catch(function(err) { + console.log('Error getting/setting schedules'); + }); +}; + +function createJob(schedule, manager, reports) { + console.log("Creating '" + schedule.name + "' job"); + manager.add(schedule.id.toString(), + "00 " + schedule.cron, + // "00 */2 * * * *", + function() { + executeSchedule(schedule.id, reports); + }, { + start: true, + completion: function() { + console.log("Job " + schedule.name + " stopped"); + } + }); + console.log("Job '" + schedule.name + "' created!"); + console.log("I got the current jobs: " + manager); +} + +function executeSchedule(scheduleId, reports) { + console.log('Executing schedule ', scheduleId); + return Schedule + .findById(scheduleId, { + include: [MailServerOut] + }) + .then(function(schedule) { + if (!schedule) { + console.log('Schedule not found!'); + return; + } + switch (schedule.type) { + case 'report': + reports.extractReport(schedule); + break; + default: + } + }) + .catch(function(err) { + console.log('Error retrieving schedule!'); + }); +} + +function synchSchedules(manager, reports) { + Schedule.afterCreate(function(doc, options) { + if (doc.active) { + createJob(doc.dataValues, manager, reports); + } + }); + Schedule.afterUpdate(function(doc, options) { + updateSchedule(doc.dataValues, manager, reports); + }); + Schedule.afterDestroy(function(doc) { + deleteSchedule(doc.dataValues, manager); + }); +} diff --git a/server/config/scheduler/reports.js b/server/config/scheduler/reports.js index fc9697c..70e212f 100644 --- a/server/config/scheduler/reports.js +++ b/server/config/scheduler/reports.js @@ -1 +1,228 @@ -var _0xba9a=["\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x6D\x6F\x6D\x65\x6E\x74","\x6D\x6F\x6D\x65\x6E\x74\x2D\x72\x61\x6E\x67\x65","\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x52\x65\x70\x6F\x72\x74","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x66\x73\x2D\x65\x78\x74\x72\x61","\x6C\x6F\x64\x61\x73\x68","\x52\x65\x70\x6F\x72\x74\x54\x72\x65\x65","\x52\x65\x70\x6F\x72\x74\x73\x20\x73\x63\x68\x65\x64\x75\x6C\x65\x73\x20\x6C\x61\x75\x6E\x63\x68\x65\x72\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x65\x78\x74\x72\x61\x63\x74\x52\x65\x70\x6F\x72\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x45\x78\x74\x72\x61\x63\x74\x69\x6E\x67\x20\x72\x65\x70\x6F\x72\x74\x2E\x2E\x2E","\x63\x75\x72\x72\x65\x6E\x74\x44\x61\x79","\x63\x72\x6F\x6E\x54\x79\x70\x65","\x43\x68\x65\x63\x6B\x69\x6E\x67\x20\x74\x6F\x64\x61\x79\x20\x73\x63\x68\x65\x64\x75\x6C\x65\x20\x72\x61\x6E\x67\x65\x20\x76\x61\x6C\x69\x64\x69\x74\x79\x2E\x2E\x2E","\x76\x61\x6C\x69\x64\x69\x74\x79\x53\x74\x61\x72\x74","\x76\x61\x6C\x69\x64\x69\x74\x79\x45\x6E\x64","\x54\x68\x65\x20\x68\x6F\x75\x72\x73\x20\x72\x61\x6E\x67\x65\x20\x69\x73\x20\x76\x61\x6C\x69\x64\x2C\x20\x65\x78\x74\x72\x61\x63\x74\x69\x6E\x67\x20\x74\x6F\x64\x61\x79\x20\x72\x65\x70\x6F\x72\x74\x2E\x2E\x2E","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44","\x66\x6F\x72\x6D\x61\x74","\x30\x30\x3A\x30\x30","\x32\x33\x3A\x35\x39","\x4F\x75\x74\x20\x6F\x66\x20\x68\x6F\x75\x72\x73\x20\x72\x61\x6E\x67\x65\x2C\x20\x73\x6B\x69\x70\x70\x69\x6E\x67\x20\x72\x65\x63\x6F\x72\x64\x20\x65\x78\x74\x72\x61\x63\x74\x69\x6F\x6E\x21","\x64\x61\x79\x73","\x73\x75\x62\x74\x72\x61\x63\x74","\x79\x65\x73\x74\x65\x72\x64\x61\x79","\x6C\x61\x73\x74\x37","\x6C\x61\x73\x74\x33\x30","\x6D\x6F\x6E\x74\x68","\x73\x74\x61\x72\x74\x4F\x66","\x6D\x6F\x6E\x74\x68\x73","\x65\x6E\x64\x4F\x66","\x6C\x61\x73\x74\x4D\x6F\x6E\x74\x68","\x72\x65\x70\x6F\x72\x74\x52\x61\x6E\x67\x65","\x63\x6F\x6E\x74\x61\x69\x6E\x73","\x68","\x72\x61\x6E\x67\x65","\x74\x65\x78\x74","\x2F\x20","\x70\x61\x72\x65\x6E\x74","\x23","\x66\x69\x6E\x64","\x72\x65\x70\x6F\x72\x74\x54\x79\x70\x65","\x64\x65\x66\x61\x75\x6C\x74","\x53\x63\x68\x65\x64\x75\x6C\x65\x64\x20\x72\x65\x70\x6F\x72\x74\x20\x65\x78\x74\x72\x61\x63\x74\x69\x6F\x6E\x20\x65\x72\x72\x6F\x72\x3A\x20","\x63\x61\x74\x63\x68","\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x65\x78\x74\x72\x61\x63\x74\x69\x6F\x6E\x2E\x6A\x73","\x66\x6F\x72\x6B","\x65\x72\x72\x6F\x72","\x63\x68\x69\x6C\x64\x20\x65\x72\x72\x6F\x72","\x6F\x6E","\x63\x6C\x6F\x73\x65","\x63\x68\x69\x6C\x64\x20\x63\x6C\x6F\x73\x65","\x6D\x65\x73\x73\x61\x67\x65","\x63\x68\x69\x6C\x64\x20\x6D\x65\x73\x73\x61\x67\x65","\x73\x65\x6E\x64\x4D\x61\x69\x6C","\x73\x74\x61\x74\x75\x73","\x63\x6F\x6D\x70\x6C\x65\x74\x65\x64","\x69\x64","\x6B\x69\x6C\x6C","\x61\x64\x6D\x69\x6E","\x72\x65\x70\x6F\x72\x74\x4F\x75\x74\x70\x75\x74","\x73\x65\x6E\x64","\x73\x70\x72\x65\x61\x64","\x74\x72\x65\x65","\x70\x61\x72\x73\x65","\x6E\x61\x6D\x65","\x74\x61\x62\x6C\x65","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x5F\x68\x69\x73\x74\x6F\x72\x79","","\x72\x65\x70\x6C\x61\x63\x65","\x6D\x61\x6E\x75\x61\x6C","\x73\x63\x68\x65\x64\x75\x6C\x65\x64","\x63\x72\x65\x61\x74\x65","\x74\x68\x65\x6E","\x52\x65\x70\x6F\x72\x74\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x21","\x66\x69\x6E\x64\x42\x79\x49\x64","\x72\x65\x70\x6F\x72\x74\x49\x64","\x66\x69\x65\x6C\x64\x73","\x73\x63\x6F\x70\x65","\x66\x69\x6E\x61\x6C\x6C\x79","\x45\x72\x72\x6F\x72\x20\x73\x65\x6E\x64\x69\x6E\x67\x20\x65\x78\x74\x72\x61\x63\x74\x65\x64\x20\x72\x65\x70\x6F\x72\x74\x20\x62\x79\x20\x6D\x61\x69\x6C\x21","\x53\x63\x68\x65\x64\x75\x6C\x65\x64\x20\x6D\x65\x73\x73\x61\x67\x65\x20\x73\x65\x6E\x74\x21","\x73\x65\x74\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x20\x72\x65\x70\x6F\x72\x74\x20\x6E\x6F\x74\x20\x66\x6F\x75\x6E\x64\x21","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x53\x63\x68\x65\x64\x75\x6C\x65\x64\x20\x52\x65\x70\x6F\x72\x74","\x65\x6D\x61\x69\x6C","\x53\x45\x4E\x44\x49\x4E\x47","\x4E\x6F\x20\x41\x63\x63\x6F\x75\x6E\x74\x20\x6F\x72\x20\x53\x4D\x54\x50\x20\x61\x64\x64\x72\x65\x73\x73\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x65\x64","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x72\x65\x70\x6F\x72\x74\x73","\x73\x61\x76\x65\x6E\x61\x6D\x65","\x6A\x6F\x69\x6E","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x2E","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x6F\x75\x74\x70\x75\x74","\x62\x61\x73\x65\x6E\x61\x6D\x65","\x63\x6F\x70\x79\x53\x79\x6E\x63","\x73\x75\x63\x63\x65\x73\x73\x21","\x45\x72\x72\x6F\x72\x20\x67\x65\x74\x74\x69\x6E\x67\x20\x74\x68\x65\x20\x65\x78\x74\x72\x61\x63\x74\x65\x64\x20\x72\x65\x70\x6F\x72\x74\x20\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x21","\x5F","\x44\x44\x2D\x4D\x4D\x2D\x59\x59\x59\x59","\x73\x74\x61\x72\x74\x44\x61\x74\x65","\x65\x6E\x64\x44\x61\x74\x65","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F","\x73\x74\x61\x74\x53\x79\x6E\x63","\x73\x69\x7A\x65","\x65\x78\x70\x6F\x72\x74\x73"];var cp=require(_0xba9a[0]);var moment=require(_0xba9a[1]);require(_0xba9a[2]);var CustomReport=require(_0xba9a[4])[_0xba9a[3]];var DefaultReport=require(_0xba9a[4])[_0xba9a[5]];var ExtractedReport=require(_0xba9a[4])[_0xba9a[6]];var MailAttachment=require(_0xba9a[4])[_0xba9a[7]];var MailServerOut=require(_0xba9a[4])[_0xba9a[8]];var MailMessage=require(_0xba9a[4])[_0xba9a[9]];var path=require(_0xba9a[10]);var config=require(_0xba9a[11]);var fs=require(_0xba9a[12]);var _=require(_0xba9a[13]);var ReportTree=require(_0xba9a[4])[_0xba9a[14]];function Reports(){console[_0xba9a[16]](_0xba9a[15])}Reports[_0xba9a[18]][_0xba9a[17]]= function(_0x3089xf,_0x3089x10){console[_0xba9a[16]](_0xba9a[19]);extract(_0x3089xf,_0x3089x10)};function extract(_0x3089xf,_0x3089x10){switch(_0x3089xf[_0xba9a[21]]){case _0xba9a[20]:extractTodayReport(_0x3089xf,_0x3089x10);break;default:extractRangeReport(_0x3089xf,_0x3089x10);break}}function extractTodayReport(_0x3089xf,_0x3089x10){console[_0xba9a[16]](_0xba9a[22]);if(_0x3089x10|| checkValidity(_0x3089xf[_0xba9a[23]],_0x3089xf[_0xba9a[24]])){console[_0xba9a[16]](_0xba9a[25]);docExtract(_0x3089xf,moment()[_0xba9a[27]](_0xba9a[26]),moment()[_0xba9a[27]](_0xba9a[26]),_0x3089x10,_0xba9a[28],_0xba9a[29])}else {console[_0xba9a[16]](_0xba9a[30])}}function extractRangeReport(_0x3089xf,_0x3089x10){switch(_0x3089xf[_0xba9a[41]]){case _0xba9a[33]:docExtract(_0x3089xf,moment()[_0xba9a[32]](1,_0xba9a[31])[_0xba9a[27]](_0xba9a[26]),moment()[_0xba9a[32]](1,_0xba9a[31])[_0xba9a[27]](_0xba9a[26]),_0x3089x10);break;case _0xba9a[34]:docExtract(_0x3089xf,moment()[_0xba9a[32]](7,_0xba9a[31])[_0xba9a[27]](_0xba9a[26]),moment()[_0xba9a[32]](1,_0xba9a[31])[_0xba9a[27]](_0xba9a[26]),_0x3089x10);break;case _0xba9a[35]:docExtract(_0x3089xf,moment()[_0xba9a[32]](30,_0xba9a[31])[_0xba9a[27]](_0xba9a[26]),moment()[_0xba9a[32]](1,_0xba9a[31])[_0xba9a[27]](_0xba9a[26]),_0x3089x10);break;case _0xba9a[40]:docExtract(_0x3089xf,moment()[_0xba9a[32]](1,_0xba9a[38])[_0xba9a[37]](_0xba9a[36])[_0xba9a[27]](_0xba9a[26]),moment()[_0xba9a[32]](1,_0xba9a[38])[_0xba9a[39]](_0xba9a[36])[_0xba9a[27]](_0xba9a[26]),_0x3089x10);break}}function checkValidity(_0x3089x15,_0x3089x16){return moment()[_0xba9a[44]](moment(_0x3089x15,_0xba9a[43]),moment(_0x3089x16,_0xba9a[43]))[_0xba9a[42]](moment())}function getReportPath(_0x3089x18,_0x3089x19,path){path= _0x3089x18[_0xba9a[45]]+ _0xba9a[46]+ path;if(_0x3089x18[_0xba9a[47]]=== _0xba9a[48]){return path}else {return getReportPath(_[_0xba9a[49]](_0x3089x19,{id:_0x3089x18[_0xba9a[47]]}),_0x3089x19,path)}}function docExtract(_0x3089xf,_0x3089x1b,_0x3089x1c,_0x3089x10,_0x3089x1d,_0x3089x1e){var _0x3089x1f=_0x3089xf[_0xba9a[50]]=== _0xba9a[51]?DefaultReport:CustomReport;var _0x3089x20;_0x3089x1f[_0xba9a[88]](_0xba9a[87])[_0xba9a[85]](_0x3089xf[_0xba9a[86]])[_0xba9a[83]](function(_0x3089x25){if(!_0x3089x25){console[_0xba9a[16]](_0xba9a[84]);return};_0x3089x20= _0x3089x25;return ReportTree[_0xba9a[85]](_0x3089xf[_0xba9a[50]]=== _0xba9a[51]?1:2)})[_0xba9a[83]](function(_0x3089x19){_0x3089x19= JSON[_0xba9a[73]](_0x3089x19[_0xba9a[72]]);var _0x3089x18=_[_0xba9a[49]](_0x3089x19,{id:_0x3089x20[_0xba9a[47]]});var path=getReportPath(_0x3089x18,_0x3089x19,_0x3089x20[_0xba9a[74]]);if(_0x3089xf[_0xba9a[21]]=== _0xba9a[20]){_0x3089x20[_0xba9a[76]][_0xba9a[75]]= _0x3089x20[_0xba9a[76]][_0xba9a[75]][_0xba9a[79]](_0xba9a[77],_0xba9a[78])};return [_0x3089x20,ExtractedReport[_0xba9a[82]]({name:_0x3089x20[_0xba9a[74]],startDate:_0x3089x1b,endDate:_0x3089x1c,output:_0x3089xf[_0xba9a[69]],type:_0x3089x10?_0xba9a[80]:_0xba9a[81],UserId:_0x3089x10?_0x3089x10[_0xba9a[66]]:null})]})[_0xba9a[71]](function(_0x3089x20,_0x3089x22){var _0x3089x23=cp[_0xba9a[55]](__dirname+ _0xba9a[54]);_0x3089x23[_0xba9a[58]](_0xba9a[61],function(_0x3089x24){console[_0xba9a[16]](_0xba9a[62],_0x3089x24);if(_0x3089xf[_0xba9a[63]]&& _0x3089x24[_0xba9a[64]]=== _0xba9a[65]){sendReportByMail(_0x3089xf,_0x3089x22[_0xba9a[66]],_0x3089x10,_0x3089x23)}else {_0x3089x23[_0xba9a[67]]()}})[_0xba9a[58]](_0xba9a[59],function(){console[_0xba9a[16]](_0xba9a[60])})[_0xba9a[58]](_0xba9a[56],function(_0x3089x21){console[_0xba9a[16]](_0xba9a[57],_0x3089x21)});_0x3089x23[_0xba9a[70]]({report:_0x3089x20,query:{startDate:_0x3089x1b,endDate:_0x3089x1c,startTime:_0x3089x1d|| null,endTime:_0x3089x1e|| null},extractedId:_0x3089x22[_0xba9a[66]],user:_0x3089x10?_0x3089x10:{role:_0xba9a[68]},type:_0x3089xf[_0xba9a[69]]})})[_0xba9a[53]](function(_0x3089x21){console[_0xba9a[16]](_0xba9a[52],_0x3089x21)})}function sendReportByMail(_0x3089xf,_0x3089x27,_0x3089x10,_0x3089x23){var _0x3089x28;return ExtractedReport[_0xba9a[85]](_0x3089x27)[_0xba9a[83]](function(extract){if(!extract){console[_0xba9a[16]](_0xba9a[93]);return};_0x3089x28= extract;if(_0x3089xf[_0xba9a[8]]&& _0x3089xf[_0xba9a[8]][_0xba9a[94]]){var _0x3089x2a=getAttachment(_0x3089x28);var _0x3089x2b={subject:_0xba9a[95],from:[_0x3089xf[_0xba9a[8]][_0xba9a[94]]],to:[_0x3089xf[_0xba9a[96]]],cc:[],html:null,text:null,inReplyTo:null,status:_0xba9a[97],attachment:true,UserId:_0x3089x10?_0x3089x10[_0xba9a[66]]:null,MailAttachments:[_0x3089x2a]};return MailMessage[_0xba9a[82]](_0x3089x2b,{include:[{model:MailAttachment}]})}else {throw new Error(_0xba9a[98])}})[_0xba9a[83]](function(_0x3089x29){return _0x3089x28[_0xba9a[92]](_0x3089x29)})[_0xba9a[83]](function(){console[_0xba9a[16]](_0xba9a[91])})[_0xba9a[53]](function(_0x3089x21){console[_0xba9a[16]](_0xba9a[90],_0x3089x21)})[_0xba9a[89]](function(){_0x3089x23[_0xba9a[67]]()})}function getAttachment(extract){var _0x3089x2d=path[_0xba9a[104]](config[_0xba9a[99]],_0xba9a[100],_0xba9a[101],_0xba9a[102],extract[_0xba9a[103]]);var _0x3089x2e=path[_0xba9a[104]](config[_0xba9a[99]],_0xba9a[100],_0xba9a[101],_0xba9a[105]);var _0x3089x2f=path[_0xba9a[109]](extract[_0xba9a[103]],_0xba9a[106]+ extract[_0xba9a[108]][_0xba9a[107]]());try{fs[_0xba9a[110]](_0x3089x2d,path[_0xba9a[104]](_0x3089x2e,_0x3089x2f));console[_0xba9a[16]](_0xba9a[111])}catch(err){console[_0xba9a[56]](_0xba9a[112]);return null};return {size:getFilesizeInBytes(_0x3089x2d),path:path[_0xba9a[104]](_0x3089x2e,_0x3089x2f),name:extract[_0xba9a[74]]+ _0xba9a[113]+ moment(extract[_0xba9a[115]])[_0xba9a[27]](_0xba9a[114])+ _0xba9a[113]+ moment(extract[_0xba9a[116]])[_0xba9a[27]](_0xba9a[114])+ _0xba9a[106]+ extract[_0xba9a[108]][_0xba9a[107]](),type:_0xba9a[117]+ extract[_0xba9a[108]][_0xba9a[107]](),basename:_0x3089x2f}}function getFilesizeInBytes(_0x3089x31){try{var _0x3089x32=fs[_0xba9a[118]](_0x3089x31);var _0x3089x33=_0x3089x32[_0xba9a[119]];return _0x3089x33}catch(err){return 0}}module[_0xba9a[120]]= Reports \ No newline at end of file +var cp = require('child_process'); +var moment = require('moment'); +require('moment-range'); +var CustomReport = require('../../models').CustomReport; +var DefaultReport = require('../../models').DefaultReport; +var ExtractedReport = require('../../models').ExtractedReport; +var MailAttachment = require('../../models').MailAttachment; +var MailServerOut = require('../../models').MailServerOut; +var MailMessage = require('../../models').MailMessage; +var path = require('path'); +var config = require('../../config/environment'); +var fs = require('fs-extra'); +var _ = require('lodash'); +var ReportTree = require('../../models').ReportTree; + +function Reports() { + console.log('Reports schedules launcher Initialization...'); +} + +Reports.prototype.extractReport = function(schedule, user) { + console.log('Extracting report...'); + extract(schedule, user); +} + +function extract(schedule, user) { + switch (schedule.cronType) { + case 'currentDay': + extractTodayReport(schedule, user); + break; + default: + extractRangeReport(schedule, user); + break; + } +} + +function extractTodayReport(schedule, user) { + console.log('Checking today schedule range validity...'); + if (user || checkValidity(schedule.validityStart, schedule.validityEnd)) { + console.log('The hours range is valid, extracting today report...'); + docExtract(schedule, moment().format('YYYY-MM-DD'), moment().format('YYYY-MM-DD'), user, '00:00', '23:59'); + } else { + console.log('Out of hours range, skipping record extraction!'); + } +} + +function extractRangeReport(schedule, user) { + switch (schedule.reportRange) { + case 'yesterday': + docExtract(schedule, moment().subtract(1, 'days').format('YYYY-MM-DD'), moment().subtract(1, 'days').format('YYYY-MM-DD'), user) + break; + case 'last7': + docExtract(schedule, moment().subtract(7, 'days').format('YYYY-MM-DD'), moment().subtract(1, 'days').format('YYYY-MM-DD'), user) + break; + case 'last30': + docExtract(schedule, moment().subtract(30, 'days').format('YYYY-MM-DD'), moment().subtract(1, 'days').format('YYYY-MM-DD'), user) + break; + case 'lastMonth': + docExtract(schedule, moment().subtract(1, 'months').startOf('month').format('YYYY-MM-DD'), moment().subtract(1, 'months').endOf('month').format('YYYY-MM-DD'), user) + break; + } +} + +function checkValidity(startHour, endHour) { + return moment().range(moment(startHour, "h"), moment(endHour, "h")).contains(moment()); +} + +function getReportPath(folder, tree, path) { + path = folder.text + '/ ' + path; + if (folder.parent === '#') { + return path; + } else { + return getReportPath(_.find(tree, { + id: folder.parent + }), tree, path); + } +} + +function docExtract(schedule, startDate, endDate, user, startTime, endTime) { + // console.log('common docExtract api function'); + var resource = schedule.reportType === 'default' ? DefaultReport : CustomReport; + var report; + resource //DO NOT ADD RETURN CAUSE THE EXTRACTING FUNCTION WILL KEEP EXTRACTING AFTER THE API HAS RETURNED + .scope('fields') + .findById(schedule.reportId) + .then(function(_report) { + if (!_report) { + console.log('Report not found!'); + return; + } + report = _report; + return ReportTree + .findById(schedule.reportType === 'default' ? 1 : 2); + }) + .then(function(tree) { + tree = JSON.parse(tree.tree); + var folder = _.find(tree, { + id: report.parent + }); + var path = getReportPath(folder, tree, report.name); + // console.log('found the report, creating the new DB row for extracted reports..'); + //CREATE A DB ROW IN A TABLE WITH THE REPORT INFO, QUERY DATES, AND THE STATUS 'ELABORATING' + if (schedule.cronType === 'currentDay') { + report.dataValues.table = report.dataValues.table.replace('_history', ''); + } + return [report, ExtractedReport.create({ + name: report.name, + startDate: startDate, + endDate: endDate, + output: schedule.reportOutput, + type: user ? 'manual' : 'scheduled', + UserId: user ? user.id : null + })] + }) + .spread(function(report, extractedReport) { + // console.log('created new extracted reports db entry, calling external extraction function: ' + typeFunction); + var child = cp.fork(__dirname + '/../../utils/report_extraction.js'); + child.on('message', function(data) { + console.log('child message', data); + if (schedule.sendMail && data.status === 'completed') { + sendReportByMail(schedule, extractedReport.id, user, child); + } else { + child.kill(); + } + }).on('close', function() { + console.log('child close'); + }).on('error', function(err) { + console.log('child error', err); + }); + child.send({ + report: report, + query: { + startDate: startDate, + endDate: endDate, + startTime: startTime || null, + endTime: endTime || null + }, + extractedId: extractedReport.id, + user: user ? user : { + role: 'admin' + }, + type: schedule.reportOutput + }); + }) + .catch(function(err) { + console.log('Scheduled report extraction error: ', err); + }); +} + +function sendReportByMail(schedule, extractedId, user, child) { + var _extract; + return ExtractedReport + .findById(extractedId) + .then(function(extract) { + if (!extract) { + console.log('Extracted report not found!'); + return; + } + _extract = extract; + if (schedule.MailServerOut && schedule.MailServerOut.username) { + var attachment = getAttachment(_extract); + var message = { + subject: 'Scheduled Report', + from: [schedule.MailServerOut.username], + to: [schedule.email], + cc: [], + html: null, + text: null, + inReplyTo: null, + status: 'SENDING', + attachment: true, + UserId: user ? user.id : null, //how to get user if sent automatically?? + MailAttachments: [attachment] + }; + return MailMessage + .create(message, { + include: [{ + model: MailAttachment + }] + }) + } else { + throw new Error("No Account or SMTP address configured"); + } + }) + .then(function(mailMessage) { + return _extract.setMailMessage(mailMessage); + }) + .then(function() { + console.log('Scheduled message sent!'); + }) + .catch(function(err) { + console.log('Error sending extracted report by mail!', err); + }) + .finally(function() { + child.kill(); + }); +} + +function getAttachment(extract) { + var oldFile = path.join(config.root, 'server', 'files', 'reports', extract.savename); + var newPath = path.join(config.root, 'server', 'files', 'attachments'); + var newSavename = path.basename(extract.savename, '.' + extract.output.toLowerCase()); + try { + fs.copySync(oldFile, path.join(newPath, newSavename)); + console.log("success!"); + } catch (err) { + console.error('Error getting the extracted report attachment!'); + return null; + } + return { + size: getFilesizeInBytes(oldFile), + path: path.join(newPath, newSavename), + name: extract.name + '_' + moment(extract.startDate).format("DD-MM-YYYY") + '_' + moment(extract.endDate).format("DD-MM-YYYY") + '.' + extract.output.toLowerCase(), + type: 'application/' + extract.output.toLowerCase(), + basename: newSavename + }; +} + +function getFilesizeInBytes(filename) { + try { + var stats = fs.statSync(filename) + var fileSizeInBytes = stats.size; + return fileSizeInBytes + } catch (err) { + return 0; + } +} + +module.exports = Reports; diff --git a/server/config/seed.js b/server/config/seed.js index eef4794..ab5b614 100644 --- a/server/config/seed.js +++ b/server/config/seed.js @@ -1 +1,4005 @@ -var _0xd23a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x75\x73\x65\x72\x73","\x6C\x6F\x67","\x74\x68\x65\x6E","\x6C\x6F\x63\x61\x6C","\x61\x67\x65\x6E\x74","\x47\x69\x75\x73\x65\x70\x70\x65\x20\x43\x61\x72\x65\x72\x69","\x67\x69\x75\x73\x65\x70\x70\x65\x2E\x63\x61\x72\x65\x72\x69\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x67\x69\x75\x73\x65\x70\x70\x65\x2E\x63\x61\x72\x65\x72\x69","\x37\x35\x78\x63\x61\x6C\x6C\x79\x37\x35","\x64\x79\x6E\x61\x6D\x69\x63","\x46\x52\x49\x45\x4E\x44","\x75\x64\x70","\x61\x6C\x61\x77\x3B\x75\x6C\x61\x77\x3B\x67\x73\x6D","\x79\x65\x73","\x66\x6F\x72\x63\x65\x5F\x72\x70\x6F\x72\x74\x2C\x63\x6F\x6D\x65\x64\x69\x61","\x61\x6C\x6C","\x66\x72\x6F\x6D\x2D\x73\x69\x70","\x44\x61\x6E\x69\x65\x6C\x65\x20\x43\x69\x6E\x74\x69","\x64\x61\x6E\x69\x65\x6C\x65\x2E\x63\x69\x6E\x74\x69\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x64\x61\x6E\x69\x65\x6C\x65\x2E\x63\x69\x6E\x74\x69","\x41\x6E\x64\x72\x65\x61\x20\x42\x69\x61\x6E\x63\x6F","\x61\x6E\x64\x72\x65\x61\x2E\x62\x69\x61\x6E\x63\x6F\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x61\x6E\x64\x72\x65\x61\x2E\x62\x69\x61\x6E\x63\x6F","\x4D\x61\x73\x73\x69\x6D\x69\x6C\x69\x61\x6E\x6F\x20\x42\x75\x6E\x67\x61\x72\x6F","\x6D\x61\x73\x73\x69\x6D\x69\x6C\x69\x61\x6E\x6F\x2E\x62\x75\x6E\x67\x61\x72\x6F\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x6D\x61\x73\x73\x69\x6D\x69\x6C\x69\x61\x6E\x6F\x2E\x62\x75\x6E\x67\x61\x72\x6F","\x56\x61\x6C\x65\x72\x69\x6F\x20\x43\x69\x6F\x74\x74\x61","\x76\x61\x6C\x65\x72\x69\x6F\x2E\x63\x69\x6F\x74\x74\x61\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x76\x61\x6C\x65\x72\x69\x6F\x2E\x63\x69\x6F\x74\x74\x61","\x61\x64\x6D\x69\x6E","\x43\x6C\x61\x72\x6F\x74\x65\x63\x68","\x63\x6C\x61\x72\x6F\x74\x65\x63\x68\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x63\x6C\x61\x72\x6F\x74\x65\x63\x68","\x41\x62\x69\x67\x61\x65\x6C","\x61\x62\x69\x67\x61\x65\x6C\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x61\x62\x69\x67\x61\x65\x6C","\x54\x6F\x6E\x79\x20\x52\x75\x73\x73\x65\x6C\x6C","\x74\x6F\x6E\x79\x72\x40\x78\x63\x6C\x61\x72\x6F\x74\x65\x63\x68\x2E\x63\x6F\x2E\x7A\x61","\x74\x6F\x6E\x79\x2E\x72\x75\x73\x73\x65\x6C\x6C","\x43\x6F\x6C\x69\x6E\x20\x46\x61\x69\x72","\x63\x6F\x6C\x69\x6E\x66\x40\x78\x63\x6C\x61\x72\x6F\x74\x65\x63\x68\x2E\x63\x6F\x2E\x7A\x61","\x63\x6F\x6C\x69\x6E\x2E\x66\x61\x69\x72","\x44\x69\x65\x67\x6F\x20\x47\x6F\x73\x6D\x61\x72","\x64\x69\x65\x67\x6F\x2E\x67\x6F\x73\x6D\x61\x72\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x64\x69\x65\x67\x6F\x2E\x67\x6F\x73\x6D\x61\x72","\x47\x69\x75\x73\x65\x70\x70\x65\x20\x49\x6E\x6E\x61\x6D\x6F\x72\x61\x74\x6F","\x67\x69\x75\x73\x65\x70\x70\x65\x2E\x69\x6E\x6E\x61\x6D\x6F\x72\x61\x74\x6F\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x67\x69\x75\x73\x65\x70\x70\x65\x2E\x69\x6E\x6E\x61\x6D\x6F\x72\x61\x74\x6F","\x75\x70\x64","\x41\x6C\x65\x73\x73\x61\x6E\x64\x72\x61\x20\x42\x65\x73\x73\x6F\x6E\x65","\x61\x6C\x65\x73\x73\x61\x6E\x64\x72\x61\x2E\x62\x65\x73\x73\x6F\x6E\x65\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x61\x6C\x65\x73\x73\x61\x6E\x64\x72\x61\x2E\x62\x65\x73\x73\x6F\x6E\x65","\x46\x65\x6C\x69\x63\x65\x20\x42\x72\x69\x73\x63\x65\x73\x65","\x66\x65\x6C\x69\x63\x65\x2E\x62\x72\x69\x73\x63\x65\x73\x65\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x66\x65\x6C\x69\x63\x65\x2E\x62\x72\x69\x73\x63\x65\x73\x65","\x78\x43\x61\x6C\x6C\x79","\x69\x6E\x66\x6F\x2E\x78\x63\x61\x6C\x6C\x79\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x78\x63\x61\x6C\x6C\x79","\x33\x38\x38\x78\x73\x68\x75\x74\x74\x6C\x65\x33\x38\x38","\x4A\x6F\x68\x6E\x20\x44\x6F\x65","\x6A\x6F\x68\x6E\x2E\x64\x6F\x65\x40\x67\x6D\x61\x69\x6C\x2E\x63\x6F\x6D","\x6A\x6F\x68\x6E\x2E\x64\x6F\x65","\x4A\x61\x6E\x65\x20\x4D\x69\x6C\x6C\x65\x72","\x6A\x61\x6E\x65\x2E\x6D\x69\x6C\x6C\x65\x72\x40\x67\x6D\x61\x69\x6C\x2E\x63\x6F\x6D","\x6A\x61\x6E\x65\x2E\x6D\x69\x6C\x6C\x65\x72","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x55\x73\x65\x72","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x74\x72\x75\x6E\x6B\x73","\x63\x69\x74\x61\x6C\x69\x61","\x66\x72\x69\x65\x6E\x64","\x70\x6F\x72\x74\x2C\x69\x6E\x76\x69\x74\x65","\x30\x31\x31\x31\x39\x38\x32\x37\x37\x37\x30","\x54\x21\x4E\x50\x6E\x76\x2D\x71\x6A\x43\x4D\x65\x39\x76","\x66\x72\x6F\x6D\x2D\x76\x6F\x69\x70\x2D\x70\x72\x6F\x76\x69\x64\x65\x72","\x69\x74","\x76\x6F\x69\x70\x2E\x65\x75\x74\x65\x6C\x69\x61\x2E\x69\x74","\x72\x66\x63\x32\x38\x33\x33","\x20\x22\x22\x20\x3C\x3E","\x75\x6C\x61\x77\x3B\x61\x6C\x61\x77\x3B\x67\x73\x6D","\x6E\x6F","\x54\x72\x75\x6E\x6B","\x64\x61\x73\x68\x62\x6F\x61\x72\x64","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x44\x41\x53\x48\x42\x4F\x41\x52\x44","\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x2F\x76\x6F\x69\x63\x65","\x79\x6F\x75\x72\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x59\x4F\x55\x52\x5F\x44\x41\x53\x48\x42\x4F\x41\x52\x44\x53","\x2F\x74\x6F\x6F\x6C\x73\x2F\x79\x6F\x75\x72\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x73\x2F\x73\x68\x6F\x77\x2F\x31","\x73\x74\x61\x66\x66","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x53\x54\x41\x46\x46","\x2F\x73\x74\x61\x66\x66\x2F\x61\x67\x65\x6E\x74\x73\x2F\x6C\x69\x73\x74","\x61\x67\x65\x6E\x74\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x41\x47\x45\x4E\x54\x53","\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x4F\x4E\x54\x41\x43\x54\x5F\x4D\x41\x4E\x41\x47\x45\x52","\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x63\x6F\x6E\x74\x61\x63\x74\x73\x2F\x6C\x69\x73\x74","\x63\x68\x61\x6E\x6E\x65\x6C\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x48\x41\x4E\x4E\x45\x4C\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x71\x75\x65\x75\x65\x73\x2F\x6C\x69\x73\x74","\x76\x6F\x69\x63\x65","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x56\x4F\x49\x43\x45","\x63\x68\x61\x74","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x48\x41\x54","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x63\x68\x61\x74\x2F\x77\x65\x62\x73\x69\x74\x65\x73\x2F\x6C\x69\x73\x74","\x6D\x61\x69\x6C","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x4D\x41\x49\x4C","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x6D\x61\x69\x6C\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x6C\x69\x73\x74","\x66\x61\x78","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x46\x41\x58","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x66\x61\x78\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x6C\x69\x73\x74","\x73\x6D\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x53\x4D\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x73\x6D\x73\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x6C\x69\x73\x74","\x72\x65\x61\x6C\x74\x69\x6D\x65","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x52\x45\x41\x4C\x54\x49\x4D\x45","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x76\x69\x65\x77\x2F\x61\x67\x65\x6E\x74\x73","\x74\x6F\x6F\x6C\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x54\x4F\x4F\x4C\x53","\x2F\x74\x6F\x6F\x6C\x73\x2F\x74\x72\x69\x67\x67\x65\x72\x73\x2F\x6C\x69\x73\x74","\x73\x71\x75\x61\x72\x65","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x41\x4C\x4C\x59\x53\x51\x55\x41\x52\x45","\x2F\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x6C\x69\x73\x74","\x6A\x73\x63\x72\x69\x70\x74\x79","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x4A\x53\x43\x52\x49\x50\x54\x59","\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x6C\x69\x73\x74","\x6D\x6F\x74\x69\x6F\x6E\x64\x69\x61\x6C\x65\x72","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x4D\x4F\x54\x49\x4F\x4E\x5F\x44\x49\x41\x4C\x45\x52","\x2F\x6D\x6F\x74\x69\x6F\x6E\x64\x69\x61\x6C\x65\x72\x2F\x6C\x69\x73\x74\x73\x2F\x6C\x69\x73\x74","\x61\x6E\x61\x6C\x79\x74\x69\x63\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x41\x4E\x41\x4C\x59\x54\x49\x43\x53","\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x72\x65\x70\x6F\x72\x74\x73\x2F\x6C\x69\x73\x74","\x73\x65\x74\x74\x69\x6E\x67","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x53\x45\x54\x54\x49\x4E\x47\x53","\x2F\x73\x65\x74\x74\x69\x6E\x67\x2F\x75\x70\x64\x61\x74\x65\x73\x2F\x6C\x69\x73\x74","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x49\x4E\x54\x45\x47\x52\x41\x54\x49\x4F\x4E","\x2F\x6D\x61\x72\x6B\x65\x74","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x4F\x50\x45\x4E\x5F\x43\x48\x41\x4E\x4E\x45\x4C","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x6C\x69\x73\x74","\x72\x6F\x75\x74\x65\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x52\x4F\x55\x54\x45\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x72\x6F\x75\x74\x65\x73","\x63\x6F\x6E\x74\x65\x78\x74\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x4F\x4E\x54\x45\x58\x54\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x63\x6F\x6E\x74\x65\x78\x74\x73\x2F\x6C\x69\x73\x74","\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x56\x4F\x49\x43\x45\x4D\x41\x49\x4C\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73\x2F\x6C\x69\x73\x74","\x6D\x6F\x68","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x4D\x4F\x48","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x6D\x6F\x68\x2F\x6C\x69\x73\x74","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x52\x45\x43\x4F\x52\x44\x49\x4E\x47\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73\x2F\x6C\x69\x73\x74","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x76\x69\x65\x77\x2F\x61\x67\x65\x6E\x74\x73","\x63\x68\x61\x6E\x73\x70\x79","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x48\x41\x4E\x53\x50\x59","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x63\x68\x61\x6E\x73\x70\x79\x2F\x6C\x69\x73\x74","\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x44\x49\x53\x50\x4F\x53\x49\x54\x49\x4F\x4E\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73\x2F\x6C\x69\x73\x74","\x45\x72\x72\x6F\x72\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x6F\x64\x75\x6C\x65\x73\x3A","\x63\x61\x74\x63\x68","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x6F\x64\x75\x6C\x65\x73","\x69\x64","\x6D\x61\x70","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x75\x70\x64\x61\x74\x65","\x4D\x6F\x64\x75\x6C\x65","\x70\x75\x73\x68","\x63\x72\x65\x61\x74\x65","\x66\x6F\x72\x45\x61\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x63\x68\x61\x74\x20\x71\x75\x65\x75\x65\x20\x31","\x61\x64\x64\x55\x73\x65\x72\x73","\x54\x31","\x66\x69\x6E\x64\x4F\x6E\x65","\x54\x65\x61\x6D","\x43\x51\x31","\x43\x51\x31\x20\x44\x65\x73\x63","\x72\x72\x6D\x65\x6D\x6F\x72\x79","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x61\x69\x6C\x20\x71\x75\x65\x75\x65\x20\x31","\x74\x65\x61\x6D\x20\x66\x6F\x75\x6E\x64","\x74\x65\x73\x74","\x4D\x51\x31","\x4D\x51\x31\x20\x44\x65\x73\x63","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x66\x61\x78\x20\x71\x75\x65\x75\x65\x20\x31","\x46\x51\x31","\x46\x51\x31\x20\x44\x65\x73\x63","\x46\x61\x78\x51\x75\x65\x75\x65","\x44\x65\x66\x61\x75\x6C\x74\x20\x54\x65\x61\x6D","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x61\x69\x6C\x20\x61\x63\x63\x6F\x75\x6E\x74","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x61\x69\x6C\x20\x73\x65\x72\x76\x65\x72\x20\x69\x6E","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x61\x69\x6C\x20\x73\x65\x72\x76\x65\x72\x20\x6F\x75\x74","\x73\x6D\x74\x70\x2E\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x64\x65\x76\x65\x6C\x6F\x70\x6D\x65\x6E\x74\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x70\x68\x6F\x6B\x75\x63\x6C\x6F\x6B\x61","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x69\x6D\x61\x70\x2E\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x49\x4E\x42\x4F\x58","\x55\x4E\x53\x45\x45\x4E","\x49\x4D\x41\x50","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x49\x6E","\x78\x43\x61\x6C\x6C\x79\x20\x44\x65\x76\x65\x6C\x6F\x70\x6D\x65\x6E\x74","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x73\x71\x75\x61\x72\x65\x20\x70\x72\x6F\x6A\x65\x63\x74\x73","\x70\x72\x6F\x6A\x65\x63\x74\x31","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x70\x72\x6F\x6A\x65\x63\x74","\x53\x71\x75\x61\x72\x65\x50\x72\x6F\x6A\x65\x63\x74","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x63\x68\x61\x74\x20\x77\x65\x62\x73\x69\x74\x65","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x63\x68\x61\x74\x20\x77\x65\x62\x73\x69\x74\x65\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x31","\x71\x75\x65\x75\x65","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x63\x68\x61\x74\x20\x77\x65\x62\x73\x69\x74\x65\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x32","\x78\x43\x61\x6C\x6C\x79\x20\x53\x68\x6F\x70","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D\x2F\x73\x68\x6F\x70\x2F","\x23\x66\x35\x31\x31\x31\x31","\x68\x74\x74\x70\x3A\x2F\x2F\x6C\x6F\x63\x61\x6C\x68\x6F\x73\x74\x3A\x39\x30\x30\x30","\x73\x71\x75\x61\x72\x65\x64","\x57\x65\x20\x61\x72\x65\x20\x68\x65\x72\x65\x21","\x51\x75\x65\x73\x74\x69\x6F\x6E\x73\x3F\x20\x49\x6E\x73\x65\x72\x74\x20\x79\x6F\x75\x72\x20\x6E\x61\x6D\x65\x20\x61\x6E\x64\x20\x65\x6D\x61\x69\x6C\x20\x61\x64\x64\x72\x65\x73\x73\x20\x74\x6F\x20\x73\x74\x61\x72\x74\x20\x61\x20\x6C\x69\x76\x65\x2D\x63\x68\x61\x74\x20\x77\x69\x74\x68\x20\x6F\x75\x72\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x74\x65\x61\x6D\x2E","\x59\x6F\x75\x72\x20\x6E\x61\x6D\x65","\x59\x6F\x75\x72\x20\x65\x6D\x61\x69\x6C\x20\x61\x64\x64\x72\x65\x73\x73","\x43\x68\x61\x74","\x43\x6F\x6E\x74\x61\x63\x74\x20\x75\x73","\x3C\x73\x74\x72\x6F\x6E\x67\x3E\x57\x65\x27\x72\x65\x20\x6E\x6F\x74\x20\x6F\x6E\x6C\x69\x6E\x65\x2E\x3C\x2F\x73\x74\x72\x6F\x6E\x67\x3E\x3C\x62\x72\x20\x2F\x3E\x49\x74\x20\x64\x6F\x65\x73\x6E\x27\x74\x20\x6D\x65\x61\x6E\x20\x77\x65\x27\x72\x65\x20\x6E\x6F\x74\x20\x74\x68\x65\x72\x65\x20\x74\x6F\x20\x68\x65\x6C\x70\x20\x2D\x20\x6C\x65\x61\x76\x65\x20\x79\x6F\x75\x72\x20\x6D\x65\x73\x73\x61\x67\x65\x20\x62\x65\x6C\x6F\x77\x20\x61\x6E\x64\x20\x77\x65\x27\x6C\x6C\x20\x62\x65\x20\x69\x6E\x20\x74\x6F\x75\x63\x68\x20\x61\x73\x20\x73\x6F\x6F\x6E\x20\x61\x73\x20\x70\x6F\x73\x73\x69\x62\x6C\x65\x2E\x27","\x59\x6F\x75\x72\x20\x6D\x65\x73\x73\x61\x67\x65\x2E\x2E\x2E","\x4C\x65\x61\x76\x65\x20\x6D\x65\x73\x73\x61\x67\x65","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x76\x61\x72\x69\x61\x62\x6C\x65\x31","\x56\x61\x72\x69\x61\x62\x6C\x65","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x63\x6F\x6E\x74\x65\x78\x74\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x44\x65\x66\x61\x75\x6C\x74\x20\x63\x6F\x6E\x74\x65\x78\x74\x20\x28\x44\x4F\x20\x4E\x4F\x54\x20\x44\x45\x4C\x45\x54\x45\x29","\x69\x6E\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x66\x72\x6F\x6D\x2D\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x6F\x68\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x64\x65\x66\x61\x75\x6C\x74","\x66\x69\x6C\x65\x73","\x76\x61\x72\x2F\x6C\x69\x62\x2F\x61\x73\x74\x65\x72\x69\x73\x6B\x2F\x6D\x6F\x68","\x61\x6C\x70\x68\x61","\x77\x61\x76","\x56\x6F\x69\x63\x65\x4D\x75\x73\x69\x63\x4F\x6E\x48\x6F\x6C\x64","\x2F\x76\x61\x72\x2F\x6F\x70\x74\x2F\x6D\x6F\x74\x69\x6F\x6E\x2F\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x73\x6F\x75\x6E\x64\x73\x2F\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x53\x65\x74\x74\x69\x6E\x67","\x4D\x6F\x74\x69\x6F\x6E\x20\x44\x61\x73\x68\x62\x6F\x61\x72\x64","\x63\x6F\x6C\x2D\x6D\x64\x2D\x34","\x63\x6C\x6F\x63\x6B","\x43\x6C\x6F\x63\x6B","\x68\x68\x3A\x6D\x6D\x3A\x73\x73\x20\x61","\x64\x64\x64\x64\x2C\x20\x4D\x4D\x4D\x4D\x20\x44\x6F\x20\x59\x59\x59\x59","\x63\x6F\x6C\x2D\x6D\x64\x2D\x38","\x69\x66\x72\x61\x6D\x65","\x49\x66\x72\x61\x6D\x65","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x64\x65\x6D\x6F\x2E\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D\x2F\x73\x68\x6F\x70\x2F","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x44\x61\x73\x68\x62\x6F\x61\x72\x64","\x5A\x65\x6E\x64\x65\x73\x6B","\x31\x2E\x30\x2E\x30","\x58\x65\x6E\x69\x61\x4C\x41\x42\x20\x73\x2E\x72\x2E\x6C\x2E","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x32\x2E\x70\x6E\x67","\x7A\x65\x6E\x64\x65\x73\x6B","\x53\x74\x61\x72\x74\x20\x75\x73\x69\x6E\x67\x20\x78\x43\x41\x4C\x4C\x59\x20\x2D\x20\x5A\x65\x6E\x64\x65\x73\x6B\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x3A\x20\x41\x75\x74\x6F\x2D\x47\x65\x6E\x65\x72\x61\x74\x65\x64\x20\x54\x69\x63\x6B\x65\x74\x73\x2C\x20\x66\x75\x6C\x6C\x79\x20\x63\x75\x73\x74\x6F\x6D\x69\x7A\x61\x62\x6C\x65\x20\x63\x6F\x6D\x6D\x65\x6E\x74\x73\x2C\x20\x43\x75\x73\x74\x6F\x6D\x20\x46\x69\x65\x6C\x64\x73\x20\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74\x2C\x20\x54\x61\x67\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x61\x6E\x64\x20\x53\x69\x6D\x70\x6C\x65\x20\x53\x65\x74\x75\x70","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x69\x6B\x69\x2E\x78\x63\x61\x6C\x6C\x79\x6D\x6F\x74\x69\x6F\x6E\x2E\x63\x6F\x6D\x2F\x64\x69\x73\x70\x6C\x61\x79\x2F\x58\x4D\x44\x2F\x5A\x65\x6E\x64\x65\x73\x6B\x2B\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x32\x2E\x70\x6E\x67","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65","\x53\x74\x61\x72\x74\x20\x75\x73\x69\x6E\x67\x20\x78\x43\x41\x4C\x4C\x59\x20\x2D\x20\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x3A\x20\x41\x75\x74\x6F\x2D\x47\x65\x6E\x65\x72\x61\x74\x65\x64\x20\x54\x61\x73\x6B\x73\x2C\x20\x66\x75\x6C\x6C\x79\x20\x63\x75\x73\x74\x6F\x6D\x69\x7A\x61\x62\x6C\x65\x20\x63\x6F\x6D\x6D\x65\x6E\x74\x73\x2C\x20\x43\x75\x73\x74\x6F\x6D\x20\x46\x69\x65\x6C\x64\x73\x20\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74\x20\x61\x6E\x64\x20\x4F\x70\x65\x6E\x43\x54\x49\x20\x73\x75\x70\x70\x6F\x72\x74","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x69\x6B\x69\x2E\x78\x63\x61\x6C\x6C\x79\x6D\x6F\x74\x69\x6F\x6E\x2E\x63\x6F\x6D\x2F\x64\x69\x73\x70\x6C\x61\x79\x2F\x58\x4D\x44\x2F\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2B\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x69\x46\x72\x61\x6D\x65","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x69\x66\x72\x61\x6D\x65\x2E\x70\x6E\x67","\x53\x74\x61\x72\x74\x20\x75\x73\x69\x6E\x67\x20\x69\x46\x72\x61\x6D\x65\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x3A\x20\x65\x6E\x61\x62\x6C\x65\x20\x79\x6F\x75\x72\x20\x61\x67\x65\x6E\x74\x73\x20\x74\x6F\x20\x76\x69\x65\x77\x20\x65\x78\x74\x65\x72\x6E\x61\x6C\x20\x70\x61\x67\x65\x73\x20\x28\x6C\x69\x6B\x65\x20\x79\x6F\x75\x72\x20\x43\x52\x4D\x29\x20\x64\x69\x72\x65\x63\x74\x6C\x79\x20\x66\x72\x6F\x6D\x20\x4D\x6F\x74\x69\x6F\x6E\x20\x47\x55\x49","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x69\x6B\x69\x2E\x78\x63\x61\x6C\x6C\x79\x6D\x6F\x74\x69\x6F\x6E\x2E\x63\x6F\x6D\x2F\x64\x69\x73\x70\x6C\x61\x79\x2F\x58\x4D\x44\x2F\x69\x46\x72\x61\x6D\x65\x2B\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x44\x65\x73\x6B\x2E\x63\x6F\x6D","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x64\x65\x73\x6B\x32\x2E\x70\x6E\x67","\x64\x65\x73\x6B","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x44\x65\x73\x6B\x2E\x63\x6F\x6D\x20\x61\x73\x64\x6E\x76\x6C\x73\x64\x62\x6A\x76\x20\x73\x61\x65\x6B\x6C\x62\x76\x71\x77\x6F\x56\x42\x51","\x46\x72\x65\x73\x68\x64\x65\x73\x6B","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2E\x70\x6E\x67","\x66\x72\x65\x73\x68\x64\x65\x73\x6B","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x46\x72\x65\x73\x68\x64\x65\x73\x6B","\x53\x75\x67\x61\x72\x43\x52\x4D","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x32\x2E\x70\x6E\x67","\x73\x75\x67\x61\x72\x63\x72\x6D","\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x53\x75\x67\x61\x72\x43\x52\x4D","\x45\x72\x72\x6F\x72\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73\x3A","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x73\x74\x61\x74\x65","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x51\x75\x65\x75\x65\x20\x2D\x20\x44\x65\x74\x61\x69\x6C\x73","\x6A\x34\x5F\x33","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x5F\x68\x69\x73\x74\x6F\x72\x79","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x5D\x7D\x7D","\x44\x65\x74\x61\x69\x6C\x73","\x43\x61\x6C\x6C\x73\x20\x64\x65\x74\x61\x69\x6C\x73\x20\x28\x63\x64\x72\x29","\x6A\x32\x30\x5F\x31","\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x5F\x68\x69\x73\x74\x6F\x72\x79","\x4F\x75\x74\x62\x6F\x75\x6E\x64","\x4D\x61\x6E\x75\x61\x6C\x20\x6F\x75\x74\x62\x6F\x75\x6E\x64\x20\x63\x61\x6C\x6C\x73\x20\x64\x65\x74\x61\x69\x6C","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x74\x79\x70\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x6F\x75\x74\x62\x6F\x75\x6E\x64\x22\x7D\x5D\x7D\x7D","\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x51\x75\x65\x75\x65","\x6A\x34\x5F\x37","\x6A\x34\x5F\x35","\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x5F\x68\x69\x73\x74\x6F\x72\x79","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x31\x22\x7D\x5D\x7D\x7D","\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x41\x67\x65\x6E\x74","\x41\x6E\x73\x77\x65\x72\x20\x54\x69\x6D\x65\x20\x62\x79\x20\x51\x75\x65\x75\x65","\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x43\x61\x75\x73\x65","\x6A\x34\x5F\x36","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x30\x22\x7D\x5D\x7D\x7D","\x55\x6E\x61\x6E\x73\x77\x65\x72\x65\x64\x20\x62\x79\x20\x51\x75\x65\x75\x65","\x45\x78\x69\x74\x20\x43\x61\x75\x73\x65","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x31\x22\x7D\x5D\x7D\x7D","\x41\x62\x61\x6E\x64\x6F\x6E\x20\x54\x69\x6D\x65\x20\x62\x79\x20\x51\x75\x65\x75\x65","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x31\x22\x7D\x5D\x7D\x7D","\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x44\x61\x74\x65","\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x48\x6F\x75\x72","\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x44\x61\x79","\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x54\x79\x70\x65","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x20\x43\x61\x6C\x6C\x73\x20\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x20\x63\x61\x6C\x6C\x73\x20\x67\x72\x6F\x75\x70\x65\x64\x20\x62\x79\x20\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x50\x61\x75\x73\x65\x20\x54\x69\x6D\x65","\x6A\x34\x5F\x34","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72\x5F\x68\x69\x73\x74\x6F\x72\x79","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x74\x79\x70\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x50\x41\x55\x53\x45\x22\x7D\x2C\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x63\x68\x61\x6E\x6E\x65\x6C\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x76\x6F\x69\x63\x65\x22\x7D\x5D\x7D\x7D","\x4C\x6F\x67\x69\x6E\x20\x54\x69\x6D\x65","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x74\x79\x70\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x4C\x4F\x47\x49\x4E\x22\x7D\x2C\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x63\x68\x61\x6E\x6E\x65\x6C\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x76\x6F\x69\x63\x65\x22\x7D\x5D\x7D\x7D","\x57\x65\x62\x73\x69\x74\x65\x20\x53\x75\x6D\x6D\x61\x72\x79","\x6A\x34\x5F\x31","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x53\x65\x73\x73\x69\x6F\x6E\x20\x44\x65\x74\x61\x69\x6C","\x43\x68\x61\x74\x20\x62\x79\x20\x41\x67\x65\x6E\x74","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x63\x6F\x6D\x70\x6C\x65\x74\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x31\x22\x7D\x5D\x7D\x7D","\x43\x68\x61\x74\x20\x62\x79\x20\x51\x75\x65\x75\x65","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x71\x75\x65\x75\x65\x22\x7D\x5D\x7D\x7D","\x41\x67\x65\x6E\x74\x73\x20\x73\x74\x61\x74\x75\x73\x20\x64\x65\x74\x61\x69\x6C\x73","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x63\x68\x61\x6E\x6E\x65\x6C\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x76\x6F\x69\x63\x65\x22\x7D\x5D\x7D\x7D","\x53\x75\x6D\x6D\x61\x72\x79","\x43\x61\x6C\x6C\x79\x53\x71\x75\x61\x72\x65\x20\x53\x75\x6D\x6D\x61\x72\x79","\x6A\x31\x31\x32\x5F\x31","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x68\x69\x73\x74\x6F\x72\x79","\x42\x6C\x6F\x63\x6B\x73","\x43\x61\x6C\x6C\x79\x53\x71\x75\x61\x72\x65\x20\x42\x6C\x6F\x63\x6B\x73","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x64\x65\x74\x61\x69\x6C\x73\x5F\x68\x69\x73\x74\x6F\x72\x79","\x4C\x6F\x67\x69\x6E\x20\x44\x65\x74\x61\x69\x6C\x73","\x6A\x32\x34\x5F\x31","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x63\x68\x61\x6E\x6E\x65\x6C\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x76\x6F\x69\x63\x65\x22\x7D\x2C\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x74\x79\x70\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x4C\x4F\x47\x49\x4E\x22\x7D\x5D\x7D\x7D","\x50\x61\x75\x73\x65\x20\x54\x69\x6D\x65\x20\x62\x79\x20\x43\x68\x61\x6E\x6E\x65\x6C","","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x74\x79\x70\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x50\x41\x55\x53\x45\x22\x7D\x5D\x7D\x7D","\x50\x61\x75\x73\x65\x20\x44\x65\x74\x61\x69\x6C\x73","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x63\x68\x61\x6E\x6E\x65\x6C\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x76\x6F\x69\x63\x65\x22\x7D\x2C\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x74\x79\x70\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x50\x41\x55\x53\x45\x22\x7D\x5D\x7D\x7D","\x52\x61\x74\x69\x6E\x67\x20\x62\x79\x20\x41\x67\x65\x6E\x74","\x6A\x32\x30\x5F\x33","\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73","\x52\x61\x74\x69\x6E\x67\x20\x62\x79\x20\x51\x75\x65\x75\x65","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x49\x53\x20\x4E\x4F\x54\x20\x45\x4D\x50\x54\x59\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x71\x75\x65\x75\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x5D\x7D\x7D","\x51\x75\x65\x75\x65\x20\x2D\x20\x43\x61\x6C\x6C\x73","\x41\x6E\x73\x77\x65\x72\x20\x54\x69\x6D\x65\x20\x62\x79\x20\x48\x6F\x75\x72","\x52\x65\x63\x65\x69\x76\x65\x64\x20\x65\x6D\x61\x69\x6C\x73\x20\x62\x79\x20\x61\x63\x63\x6F\x75\x6E\x74","\x53\x75\x6D\x6D\x61\x72\x79\x20\x6F\x66\x20\x74\x68\x65\x20\x65\x6D\x61\x69\x6C\x73\x20\x61\x63\x63\x65\x70\x74\x65\x64\x20\x62\x79\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x65\x61\x63\x68\x20\x61\x63\x63\x6F\x75\x6E\x74","\x6A\x34\x5F\x32","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x52\x65\x63\x65\x69\x76\x65\x64\x20\x65\x6D\x61\x69\x6C\x73\x20\x62\x79\x20\x71\x75\x65\x75\x65","\x53\x75\x6D\x6D\x61\x72\x79\x20\x6F\x66\x20\x72\x65\x63\x65\x69\x76\x65\x64\x20\x65\x6D\x61\x69\x6C\x20\x62\x79\x20\x71\x75\x65\x75\x65","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x71\x75\x65\x75\x65\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x41\x63\x63\x65\x70\x74\x65\x64\x20\x65\x6D\x61\x69\x6C\x73\x20\x62\x79\x20\x61\x67\x65\x6E\x74","\x53\x75\x6D\x6D\x61\x72\x79\x20\x6F\x66\x20\x61\x63\x63\x65\x70\x74\x65\x64\x20\x65\x6D\x61\x69\x6C\x20\x62\x79\x20\x61\x67\x65\x6E\x74","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x74\x69\x6D\x65\x6F\x75\x74\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x30\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x4D\x65\x73\x73\x61\x67\x65\x73\x20\x53\x75\x6D\x6D\x61\x72\x79\x20\x62\x79\x20\x44\x61\x74\x65","\x47\x6C\x6F\x62\x61\x6C\x20\x6D\x65\x73\x73\x61\x67\x65\x73\x20\x73\x75\x6D\x6D\x61\x72\x79\x20\x62\x79\x20\x64\x61\x74\x65","\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x61\x75\x74\x6F\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x66\x61\x6C\x73\x65\x7D\x5D\x7D\x7D","\x49\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x73\x20\x64\x65\x74\x61\x69\x6C","\x44\x65\x74\x61\x69\x6C\x65\x64\x20\x72\x65\x70\x6F\x72\x74\x20\x61\x62\x6F\x75\x74\x20\x74\x68\x65\x20\x69\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x73","\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73","\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x20\x53\x75\x6D\x6D\x61\x72\x79","\x43\x6C\x6F\x73\x65\x64\x20\x69\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x73\x20\x62\x79\x20\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x20\x28\x66\x69\x6C\x74\x65\x72\x65\x64\x20\x62\x79\x20\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x20\x6E\x6F\x74\x20\x6E\x75\x6C\x6C\x29","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x49\x53\x20\x4E\x4F\x54\x20\x4E\x55\x4C\x4C\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x5D\x7D\x7D","\x43\x6C\x6F\x73\x65\x64\x20\x69\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x73\x20\x62\x79\x20\x64\x61\x74\x65","\x53\x75\x6D\x6D\x61\x72\x79\x20\x6F\x66\x20\x63\x6C\x6F\x73\x65\x64\x20\x69\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x73\x20\x67\x72\x6F\x75\x70\x65\x64\x20\x62\x79\x20\x64\x61\x74\x65\x20\x2B\x20\x61\x76\x65\x72\x61\x67\x65\x20\x68\x61\x6E\x64\x6C\x65\x20\x74\x69\x6D\x65\x20\x28\x66\x72\x6F\x6D\x20\x77\x68\x65\x6E\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x65\x6D\x61\x69\x6C\x20\x61\x72\x72\x69\x76\x65\x64\x20\x74\x6F\x20\x77\x68\x65\x6E\x20\x74\x68\x65\x20\x69\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x20\x68\x61\x73\x20\x62\x65\x65\x6E\x20\x63\x6C\x6F\x73\x65\x64\x29","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x4F\x52\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x73\x74\x61\x74\x75\x73\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x27\x43\x4C\x4F\x53\x45\x44\x27\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x51\x75\x65\x75\x65\x20\x2D\x20\x54\x61\x6C\x6B\x54\x69\x6D\x65","\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x29","\x51\x75\x65\x75\x65\x20\x2D\x20\x41\x62\x61\x6E\x64\x6F\x6E\x20\x54\x69\x6D\x65","\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64\x20\x3C\x31\x30\x73","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3C\x31\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x43\x6F\x75\x6E\x74\x20\x6F\x66\x20\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64\x20\x63\x61\x6C\x6C\x73\x20\x77\x69\x74\x68\x69\x6E\x20\x31\x30\x20\x73\x65\x63\x6F\x6E\x64\x73\x20\x28\x53\x68\x6F\x72\x74\x20\x43\x61\x6C\x6C\x73\x29","\x51\x75\x65\x75\x65\x20\x2D\x20\x41\x6E\x73\x77\x65\x72\x54\x69\x6D\x65","\x49\x46\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x3D\x31\x2C\x68\x6F\x6C\x64\x74\x69\x6D\x65\x2C\x6E\x75\x6C\x6C\x29","\x41\x6E\x73\x77\x65\x72\x65\x64\x20\x3C\x20\x31\x30\x73","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x3C\x31\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x43\x6F\x75\x6E\x74\x20\x6F\x66\x20\x61\x6E\x73\x77\x65\x72\x65\x64\x20\x63\x61\x6C\x6C\x73\x20\x77\x69\x74\x68\x69\x6E\x20\x31\x30\x20\x73\x65\x63\x6F\x6E\x64\x73","\x41\x6E\x73\x77\x65\x72\x65\x64\x20\x31\x30\x2D\x32\x30\x73","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3E\x3D\x31\x30\x20\x41\x4E\x44\x20\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3C\x32\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x43\x6F\x75\x6E\x74\x20\x6F\x66\x20\x61\x6E\x73\x77\x65\x72\x65\x64\x20\x63\x61\x6C\x6C\x73\x20\x62\x65\x74\x77\x65\x65\x6E\x20\x31\x30\x20\x61\x6E\x64\x20\x32\x30\x20\x73\x65\x63\x6F\x6E\x64\x73","\x41\x6E\x73\x77\x65\x72\x65\x64\x20\x32\x30\x2D\x33\x30\x73","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3E\x3D\x32\x30\x20\x41\x4E\x44\x20\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3C\x33\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x43\x6F\x75\x6E\x74\x20\x6F\x66\x20\x61\x6E\x73\x77\x65\x72\x65\x64\x20\x63\x61\x6C\x6C\x73\x20\x62\x65\x74\x77\x65\x65\x6E\x20\x32\x30\x20\x61\x6E\x64\x20\x33\x30\x20\x73\x65\x63\x6F\x6E\x64\x73","\x41\x6E\x73\x77\x65\x72\x65\x64\x20\x3E\x33\x30\x73","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3E\x3D\x33\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x43\x6F\x75\x6E\x74\x20\x6F\x66\x20\x61\x6E\x73\x77\x65\x72\x65\x64\x20\x63\x61\x6C\x6C\x73\x20\x6F\x76\x65\x72\x20\x33\x30\x20\x73\x65\x63\x6F\x6E\x64\x73","\x51\x75\x65\x75\x65\x20\x2D\x20\x45\x78\x69\x74\x20\x54\x69\x6D\x65","\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x45\x78\x69\x74\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64\x20\x31\x30\x2D\x36\x30\x73","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3E\x3D\x31\x30\x20\x41\x4E\x44\x20\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3C\x36\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x43\x6F\x75\x6E\x74\x20\x6F\x66\x20\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64\x20\x63\x61\x6C\x6C\x73\x20\x62\x65\x74\x77\x65\x65\x6E\x20\x31\x30\x20\x61\x6E\x64\x20\x36\x30\x20\x73\x65\x63\x6F\x6E\x64\x73","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64\x20\x36\x30\x2D\x31\x32\x30\x73","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3E\x3D\x36\x30\x20\x41\x4E\x44\x20\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3C\x31\x32\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x43\x6F\x75\x6E\x74\x20\x6F\x66\x20\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64\x20\x63\x61\x6C\x6C\x73\x20\x62\x65\x74\x77\x65\x65\x6E\x20\x36\x30\x20\x61\x6E\x64\x20\x31\x32\x30\x20\x73\x65\x63\x6F\x6E\x64\x73","\x51\x75\x65\x75\x65\x20\x2D\x20\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64\x20\x3E\x31\x32\x30\x73","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3E\x3D\x31\x32\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x43\x6F\x75\x6E\x74\x20\x6F\x66\x20\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64\x20\x63\x61\x6C\x6C\x73\x20\x6F\x76\x65\x72\x20\x31\x32\x30\x20\x73\x65\x63\x6F\x6E\x64\x73","\x51\x75\x65\x75\x65\x20\x2D\x20\x4A\x6F\x69\x6E\x44\x61\x74\x65","\x44\x41\x54\x45\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x61\x74\x29","\x45\x78\x74\x72\x61\x63\x74\x20\x74\x68\x65\x20\x64\x61\x74\x65\x20\x6F\x66\x20\x74\x68\x65\x20\x6A\x6F\x69\x6E\x20\x71\x75\x65\x75\x65","\x51\x75\x65\x75\x65\x20\x2D\x20\x4A\x6F\x69\x6E\x48\x6F\x75\x72","\x48\x4F\x55\x52\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x61\x74\x29","\x45\x78\x74\x72\x61\x63\x74\x20\x74\x68\x65\x20\x68\x6F\x75\x72\x20\x6F\x66\x20\x74\x68\x65\x20\x6A\x6F\x69\x6E\x20\x71\x75\x65\x75\x65","\x51\x75\x65\x75\x65\x20\x2D\x20\x4A\x6F\x69\x6E\x44\x61\x79","\x44\x41\x59\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x61\x74\x29","\x45\x78\x74\x72\x61\x63\x74\x20\x74\x68\x65\x20\x64\x61\x79\x20\x6F\x66\x20\x74\x68\x65\x20\x6A\x6F\x69\x6E\x20\x71\x75\x65\x75\x65","\x4D\x65\x6D\x62\x65\x72\x20\x2D\x20\x45\x76\x65\x6E\x74\x20\x44\x75\x72\x61\x74\x69\x6F\x6E","\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x78\x69\x74\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x6E\x74\x65\x72\x41\x74\x29","\x4D\x65\x6D\x62\x65\x72\x20\x65\x76\x65\x6E\x74\x20\x64\x75\x72\x61\x74\x69\x6F\x6E\x20\x69\x6E\x20\x73\x65\x63\x6F\x6E\x64\x73","\x4D\x65\x6D\x62\x65\x72\x20\x2D\x20\x54\x6F\x74\x61\x6C\x20\x45\x76\x65\x6E\x74\x20\x44\x75\x72\x61\x74\x69\x6F\x6E","\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x53\x55\x4D\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x78\x69\x74\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x6E\x74\x65\x72\x41\x74\x29\x29\x29","\x54\x6F\x74\x61\x6C\x20\x65\x76\x65\x6E\x74\x20\x64\x75\x72\x61\x74\x69\x6F\x6E","\x43\x68\x61\x74\x20\x2D\x20\x53\x65\x73\x73\x69\x6F\x6E\x20\x54\x69\x6D\x65","\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x6C\x65\x61\x76\x65\x41\x74\x29","\x53\x65\x73\x73\x69\x6F\x6E\x20\x54\x69\x6D\x65","\x43\x68\x61\x74\x20\x2D\x20\x51\x75\x65\x75\x65","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x71\x75\x65\x75\x65\x22\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x43\x68\x61\x74\x20\x71\x75\x65\x75\x65\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x63\x6F\x75\x6E\x74","\x43\x68\x61\x74\x20\x2D\x20\x41\x67\x65\x6E\x74","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x61\x67\x65\x6E\x74\x22\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x43\x68\x61\x74\x20\x61\x67\x65\x6E\x74\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x63\x6F\x75\x6E\x74","\x43\x68\x61\x74\x20\x2D\x20\x41\x76\x67\x20\x53\x65\x73\x73\x69\x6F\x6E\x20\x54\x69\x6D\x65","\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x6C\x65\x61\x76\x65\x41\x74\x29\x29\x29","\x41\x76\x65\x72\x61\x67\x65\x20\x73\x65\x73\x73\x69\x6F\x6E\x20\x74\x69\x6D\x65","\x4D\x65\x6D\x62\x65\x72\x20\x2D\x20\x45\x76\x65\x6E\x74\x20\x44\x75\x72\x61\x74\x69\x6F\x6E\x20\x28\x48\x48\x3A\x6D\x6D\x3A\x73\x73\x29","\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x78\x69\x74\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x6E\x74\x65\x72\x41\x74\x29\x29","\x4D\x65\x6D\x62\x65\x72\x20\x65\x76\x65\x6E\x74\x73\x20\x64\x75\x72\x61\x74\x69\x6F\x6E\x20\x69\x6E\x20\x74\x69\x6D\x65\x20\x66\x6F\x72\x6D\x61\x74","\x53\x71\x75\x61\x72\x65\x20\x2D\x20\x44\x75\x72\x61\x74\x69\x6F\x6E","\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x6C\x65\x61\x76\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x6A\x6F\x69\x6E\x41\x74\x29","\x49\x56\x52\x20\x44\x75\x72\x61\x74\x69\x6F\x6E","\x51\x75\x65\x75\x65\x20\x2D\x20\x45\x6E\x64\x54\x69\x6D\x65\x20\x43\x61\x6C\x6C","\x43\x41\x53\x45\x20\x57\x48\x45\x4E\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x3D\x31\x20\x54\x48\x45\x4E\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74\x20\x45\x4C\x53\x45\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x4C\x65\x61\x76\x65\x41\x74\x20\x45\x4E\x44","\x51\x75\x65\x75\x65\x20\x2D\x20\x43\x61\x6C\x6C\x73\x20\x52\x65\x73\x75\x6C\x74","\x43\x41\x53\x45\x20\x57\x48\x45\x4E\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x3D\x31\x20\x54\x48\x45\x4E\x20\x22\x59\x45\x53\x22\x20\x45\x4C\x53\x45\x20\x22\x4E\x4F\x22\x20\x45\x4E\x44","\x53\x68\x6F\x77\x20\x69\x66\x20\x61\x20\x63\x61\x6C\x6C\x20\x69\x73\x20\x61\x6E\x73\x77\x65\x72\x65\x64\x20\x6F\x72\x20\x6E\x6F\x74","\x45\x72\x72\x6F\x72\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x41\x6E\x61\x6C\x79\x74\x69\x63\x73\x3A","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x41\x6E\x61\x6C\x79\x74\x69\x63\x73","\x75\x6E\x69\x71\x75\x65\x69\x64","\x55\x6E\x69\x71\x75\x65\x49\x64","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x43\x61\x6C\x6C\x65\x72\x49\x64\x4E\x75\x6D","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x43\x61\x6C\x6C\x65\x72\x49\x64\x4E\x61\x6D\x65","\x51\x75\x65\x75\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74","\x51\x75\x65\x75\x65\x4A\x6F\x69\x6E\x41\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74","\x51\x75\x65\x75\x65\x4C\x65\x61\x76\x65\x41\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E","\x51\x75\x65\x75\x65\x41\x62\x61\x6E\x64\x6F\x6E","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x41\x74","\x51\x75\x65\x75\x65\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x43\x6F\x6D\x70\x6C\x65\x74\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x43\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74","\x51\x75\x65\x75\x65\x45\x78\x69\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x41\x74","\x51\x75\x65\x75\x65\x45\x78\x69\x74\x41\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x72\x65\x61\x73\x6F\x6E","\x51\x75\x65\x75\x65\x45\x78\x69\x74\x52\x65\x61\x73\x6F\x6E","\x65\x78\x74\x65\x6E","\x44\x49\x44","\x54\x61\x6C\x6B\x54\x69\x6D\x65","\x41\x6E\x73\x77\x65\x72\x54\x69\x6D\x65","\x41\x62\x61\x6E\x64\x6F\x6E\x54\x69\x6D\x65","\x55\x6E\x69\x71\x75\x65\x49\x44","\x74\x79\x70\x65","\x54\x79\x70\x65","\x74\x61\x67","\x54\x61\x67","\x73\x6F\x75\x72\x63\x65","\x53\x6F\x75\x72\x63\x65","\x64\x65\x73\x74\x69\x6E\x61\x74\x69\x6F\x6E","\x44\x65\x73\x74\x69\x6E\x61\x74\x69\x6F\x6E","\x63\x61\x6C\x6C\x65\x72\x69\x64","\x43\x61\x6C\x6C\x65\x72\x49\x44","\x64\x65\x73\x74\x69\x6E\x61\x74\x69\x6F\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x44\x65\x73\x74\x43\x68\x61\x6E\x6E\x65\x6C","\x6C\x61\x73\x74\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x4C\x61\x73\x74\x41\x70\x70","\x6C\x61\x73\x74\x64\x61\x74\x61","\x4C\x61\x73\x74\x44\x61\x74\x61","\x73\x74\x61\x72\x74\x74\x69\x6D\x65","\x53\x74\x61\x72\x74\x54\x69\x6D\x65","\x61\x6E\x73\x77\x65\x72\x74\x69\x6D\x65","\x65\x6E\x64\x74\x69\x6D\x65","\x45\x6E\x64\x54\x69\x6D\x65","\x64\x75\x72\x61\x74\x69\x6F\x6E","\x44\x75\x72\x61\x74\x69\x6F\x6E","\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x63\x63\x6F\x75\x6E\x74\x63\x6F\x64\x65","\x41\x67\x65\x6E\x74\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x43\x61\x6C\x6C\x65\x72\x49\x64","\x45\x6E\x64\x54\x49\x6D\x65","\x62\x69\x6C\x6C\x61\x62\x6C\x65\x73\x65\x63\x6F\x6E\x64\x73","\x42\x69\x6C\x6C\x73\x65\x63","\x4F\x66\x66\x65\x72\x65\x64","\x43\x4F\x55\x4E\x54","\x43\x6F\x6D\x70\x6C\x65\x74\x65\x64","\x53\x55\x4D","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64","\x55\x6E\x6D\x61\x6E\x61\x67\x65\x64","\x41\x76\x67\x54\x61\x6C\x6B\x54\x69\x6D\x65","\x41\x56\x47","\x41\x76\x67\x41\x62\x61\x6E\x64\x6F\x6E\x54\x69\x6D\x65","\x41\x76\x67\x41\x6E\x73\x77\x65\x72\x54\x69\x6D\x65","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x41\x67\x65\x6E\x74","\x61\x67\x65\x6E\x74\x63\x61\x6C\x6C\x65\x64\x41\x74","\x41\x67\x65\x6E\x74\x43\x61\x6C\x6C\x65\x64\x41\x74","\x61\x67\x65\x6E\x74\x63\x6F\x6E\x6E\x65\x63\x74\x41\x74","\x41\x67\x65\x6E\x74\x43\x6F\x6E\x6E\x65\x63\x74\x41\x74","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x41\x67\x65\x6E\x74\x43\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x68\x6F\x6C\x64\x74\x69\x6D\x65","\x74\x61\x6C\x6B\x74\x69\x6D\x65","\x61\x67\x65\x6E\x74\x61\x63\x77","\x41\x67\x65\x6E\x74\x41\x43\x57","\x61\x63\x77\x74\x69\x6D\x65","\x41\x67\x65\x6E\x74\x41\x43\x57\x54\x69\x6D\x65","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x41\x67\x65\x6E\x74\x43\x6F\x6D\x70\x6C\x65\x74\x65","\x72\x65\x61\x73\x6F\x6E","\x48\x61\x6E\x67\x75\x70\x52\x65\x61\x73\x6F\x6E","\x6C\x61\x73\x74\x65\x76\x65\x6E\x74","\x4C\x61\x73\x74\x45\x76\x65\x6E\x74","\x61\x67\x65\x6E\x74\x72\x69\x6E\x67\x6E\x6F\x61\x6E\x73\x77\x65\x72","\x52\x69\x6E\x67\x4E\x6F\x41\x6E\x73\x77\x65\x72","\x54\x6F\x74\x54\x61\x6C\x6B\x54\x69\x6D\x65","\x54\x6F\x74\x41\x43\x57\x54\x69\x6D\x65","\x41\x76\x67\x41\x43\x57\x54\x69\x6D\x65","\x54\x6F\x74\x20\x54\x61\x6C\x6B\x54\x69\x6D\x65","\x41\x76\x67\x20\x54\x61\x6C\x6B\x54\x69\x6D\x65","\x54\x6F\x74\x20\x48\x6F\x6C\x64\x54\x69\x6D\x65","\x41\x76\x67\x20\x48\x6F\x6C\x64\x54\x69\x6D\x65","\x54\x6F\x74\x20\x41\x43\x57\x54\x69\x6D\x65","\x41\x76\x67\x20\x41\x43\x57\x54\x69\x6D\x65","\x54\x6F\x74\x20\x41\x6E\x73\x77\x65\x72\x65\x64","\x41\x6E\x73\x77\x65\x72\x65\x64\x20\x3C\x31\x30\x73","\x52\x65\x61\x73\x6F\x6E","\x43\x61\x6C\x6C\x73","\x41\x62\x61\x6E\x64\x6F\x6E\x20\x54\x69\x6D\x65","\x45\x78\x69\x74\x20\x54\x69\x6D\x65","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x51\x75\x65\x75\x65\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x54\x6F\x74\x20\x41\x62\x61\x6E\x64\x6F\x6E\x54\x69\x6D\x65","\x45\x78\x69\x74\x65\x64","\x41\x76\x67\x20\x45\x78\x69\x74\x65\x64\x54\x49\x6D\x65","\x54\x6F\x74\x20\x45\x78\x69\x74\x65\x64\x54\x69\x6D\x65","\x54\x6F\x74\x20\x45\x78\x69\x74\x54\x69\x6D\x65","\x54\x6F\x74\x20\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64\x3C\x31\x30\x73","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64\x3E\x31\x32\x30\x73","\x44\x61\x74\x65","\x48\x6F\x75\x72","\x44\x61\x79","\x54\x6F\x74\x20\x44\x75\x72\x61\x74\x69\x6F\x6E","\x41\x76\x67\x20\x44\x75\x72\x61\x74\x69\x6F\x6E","\x41\x53\x43","\x64\x61\x74\x61\x31","\x50\x61\x75\x73\x65\x54\x79\x70\x65","\x77\x65\x62\x73\x69\x74\x65\x6E\x61\x6D\x65","\x57\x65\x62\x73\x69\x74\x65","\x76\x69\x73\x69\x74\x6F\x72\x6E\x61\x6D\x65","\x56\x69\x73\x69\x74\x6F\x72\x4E\x61\x6D\x65","\x76\x69\x73\x69\x74\x6F\x72\x65\x6D\x61\x69\x6C","\x56\x69\x73\x69\x74\x6F\x72\x45\x6D\x61\x69\x6C","\x4D\x65\x6D\x65\x62\x65\x72\x4E\x61\x6D\x65","\x71\x75\x65\x75\x65\x6E\x61\x6D\x65","\x51\x75\x65\x75\x65\x4E\x61\x6D\x65","\x6A\x6F\x69\x6E\x41\x74","\x4A\x6F\x69\x6E\x41\x74","\x6C\x65\x61\x76\x65\x41\x74","\x4C\x65\x61\x76\x65\x41\x74","\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x63\x6F\x6D\x70\x6C\x65\x74\x65\x52\x65\x61\x73\x6F\x6E","\x43\x6F\x6D\x70\x6C\x65\x74\x65\x52\x65\x61\x73\x6F\x6E","\x61\x62\x61\x6E\x64\x6F\x6E","\x41\x62\x61\x6E\x64\x6F\x6E","\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64","\x55\x6E\x6D\x61\x6E\x61\x67\x65","\x53\x65\x73\x73\x69\x6F\x6E","\x46\x72\x6F\x6D\x51\x75\x65\x75\x65","\x32\x30\x31\x36\x2D\x30\x35\x2D\x31\x34\x20\x31\x38\x3A\x31\x33\x3A\x30\x31","\x44\x69\x72\x65\x63\x74\x54\x6F\x41\x67\x65\x6E\x74","\x54\x6F\x74\x20\x53\x65\x73\x73\x69\x6F\x6E\x20\x54\x69\x6D\x65","\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45","\x41\x76\x67\x20\x53\x65\x73\x73\x69\x6F\x6E\x20\x54\x69\x6D\x65","\x57\x65\x62\x53\x69\x74\x65","\x53\x65\x73\x73\x69\x6F\x6E\x73","\x43\x4F\x55\x4E\x54\x20\x44\x49\x53\x54\x49\x4E\x43\x54","\x69\x6E\x74\x65\x72\x66\x61\x63\x65","\x49\x6E\x74\x65\x72\x66\x61\x63\x65","\x45\x76\x65\x6E\x74","\x50\x61\x75\x73\x65\x2F\x41\x43\x57\x20\x51\x75\x65\x75\x65","\x65\x6E\x74\x65\x72\x41\x74","\x45\x6E\x74\x65\x72\x41\x74","\x65\x78\x69\x74\x41\x74","\x45\x78\x69\x74\x41\x74","\x70\x72\x6F\x6A\x65\x63\x74\x5F\x6E\x61\x6D\x65","\x50\x72\x6F\x6A\x65\x63\x74\x20\x4E\x61\x6D\x65","\x64\x6E\x69\x64","\x53\x74\x61\x72\x74\x20\x54\x69\x6D\x65","\x45\x6E\x64\x20\x54\x69\x6D\x65","\x43\x61\x6C\x6C\x65\x72\x20\x49\x64","\x55\x6E\x69\x71\x75\x65\x20\x49\x64","\x6E\x6F\x64\x65","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54","\x63\x68\x61\x6E\x6E\x65\x6C","\x43\x68\x61\x6E\x6E\x65\x6C","\x50\x61\x75\x73\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x6C\x69\x6E\x65\x6E\x61\x6D\x65","\x52\x65\x63\x6F\x72\x64\x65\x64\x20\x43\x61\x6C\x6C\x73","\x72\x61\x74\x69\x6E\x67","\x54\x6F\x74\x61\x6C\x20\x52\x61\x74\x69\x6E\x67","\x41\x76\x67\x20\x52\x61\x74\x69\x6E\x67","\x41\x6E\x73\x77\x65\x72\x65\x64","\x48\x4F\x55\x52","\x61\x63\x63\x6F\x75\x6E\x74\x6E\x61\x6D\x65","\x41\x63\x63\x6F\x75\x6E\x74","\x52\x65\x63\x65\x69\x76\x65\x64","\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x2C\x31\x2C\x6E\x75\x6C\x6C\x29","\x41\x63\x63\x65\x70\x74\x65\x64","\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x2C\x31\x2C\x6E\x75\x6C\x6C\x29\x29\x2F\x43\x4F\x55\x4E\x54\x28\x44\x49\x53\x54\x49\x4E\x43\x54\x28\x75\x6E\x69\x71\x75\x65\x69\x64\x29\x29\x2A\x31\x30\x30\x2C\x31\x29","\x41\x63\x63\x65\x70\x74\x20\x52\x61\x74\x65","\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x20\x41\x4E\x44\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x71\x75\x65\x75\x65\x22\x2C\x31\x2C\x6E\x75\x6C\x6C\x29","\x41\x63\x63\x65\x70\x74\x65\x64\x20\x62\x79\x20\x51\x75\x65\x75\x65","\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x20\x41\x4E\x44\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x66\x69\x64\x65\x6C\x69\x74\x79\x22\x2C\x31\x2C\x6E\x75\x6C\x6C\x29","\x41\x63\x63\x65\x70\x74\x20\x62\x79\x20\x46\x69\x64\x65\x6C\x69\x74\x79","\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x20\x41\x4E\x44\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x61\x67\x65\x6E\x74\x22\x2C\x31\x2C\x6E\x75\x6C\x6C\x29","\x41\x63\x63\x65\x70\x74\x65\x64\x20\x62\x79\x20\x41\x67\x65\x6E\x74","\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x2C\x31\x2C\x30\x29","\x74\x69\x6D\x65\x6F\x75\x74","\x54\x69\x6D\x65\x6F\x75\x74","\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x2C\x31\x2C\x6E\x75\x6C\x6C\x29\x29\x2F\x43\x4F\x55\x4E\x54\x28\x75\x6E\x69\x71\x75\x65\x69\x64\x29\x2A\x31\x30\x30\x2C\x31\x29","\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x2C\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x6C\x65\x61\x76\x65\x61\x74\x29\x2D\x20\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x6A\x6F\x69\x6E\x61\x74\x29\x2C\x4E\x55\x4C\x4C\x29\x29\x29","\x41\x76\x67\x20\x41\x63\x63\x65\x70\x74\x20\x54\x69\x6D\x65","\x54\x6F\x74\x20\x41\x63\x63\x65\x70\x74\x65\x64","\x49\x46\x28\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x66\x69\x64\x65\x6C\x69\x74\x79\x22\x2C\x31\x2C\x30\x29","\x46\x69\x64\x65\x6C\x69\x74\x79","\x49\x46\x28\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x61\x67\x65\x6E\x74\x22\x2C\x31\x2C\x30\x29","\x49\x46\x28\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x71\x75\x65\x75\x65\x22\x2C\x31\x2C\x30\x29","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x44\x41\x54\x45","\x49\x46\x28\x73\x74\x61\x74\x75\x73\x3D\x22\x52\x45\x43\x45\x49\x56\x45\x44\x22\x2C\x31\x2C\x30\x29","\x49\x46\x28\x73\x74\x61\x74\x75\x73\x3D\x22\x53\x45\x4E\x54\x22\x2C\x31\x2C\x30\x29","\x53\x65\x6E\x74","\x61\x63\x63\x6F\x75\x6E\x74","\x73\x74\x61\x74\x75\x73","\x6C\x61\x73\x74\x45\x76\x65\x6E\x74","\x61\x72\x72\x69\x76\x65\x64\x41\x74","\x6F\x70\x65\x6E\x65\x64\x41\x74","\x63\x6C\x6F\x73\x65\x64\x41\x74","\x6D\x61\x69\x6C\x49\x6E","\x6D\x61\x69\x6C\x4F\x75\x74","\x74\x61\x67\x73","\x50\x61\x72\x65\x6E\x74\x49\x64","\x63\x6F\x75\x6E\x74\x28\x2A\x29","\x69\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x73","\x49\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x73","\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x63\x6C\x6F\x73\x65\x64\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x61\x72\x72\x69\x76\x65\x64\x41\x74\x29\x29\x29","\x41\x76\x67\x20\x48\x61\x6E\x64\x6C\x65\x20\x54\x69\x6D\x65","\x52\x65\x70\x6F\x72\x74\x46\x69\x65\x6C\x64","\x64\x65\x73\x74\x72\x6F\x79","\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74","\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63","\x5B\x7B\x22\x69\x64\x22\x3A\x22\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x43\x75\x73\x74\x6F\x6D\x20\x52\x65\x70\x6F\x72\x74\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x22\x69\x63\x6F\x6E\x2D\x62\x6F\x6F\x6B\x2D\x6F\x70\x65\x6E\x22\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x31\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x31\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x23\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x32\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x42\x61\x73\x69\x63\x20\x4E\x6F\x64\x65\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x32\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x32\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x7D\x5D","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x52\x65\x70\x6F\x72\x74\x54\x72\x65\x65","\x5B\x7B\x22\x69\x64\x22\x3A\x22\x31\x22\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x23\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x4D\x6F\x74\x69\x6F\x6E\x20\x52\x65\x70\x6F\x72\x74\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x22\x69\x63\x6F\x6E\x2D\x72\x6F\x63\x6B\x65\x74\x22\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x32\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x56\x6F\x69\x63\x65\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x32\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x32\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x33\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x51\x75\x65\x75\x65\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x33\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x33\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x32\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x35\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x41\x6E\x73\x77\x65\x72\x65\x64\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x35\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x35\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x6A\x34\x5F\x33\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x36\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x55\x6E\x61\x6E\x73\x77\x65\x72\x65\x64\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x36\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x36\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x6A\x34\x5F\x33\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x37\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x44\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6F\x6E\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x37\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x37\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x6A\x34\x5F\x33\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x32\x30\x5F\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x43\x61\x6C\x6C\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x32\x30\x5F\x31\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x32\x30\x5F\x31\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x32\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x34\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x41\x67\x65\x6E\x74\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x34\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x34\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x32\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x31\x32\x5F\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x43\x61\x6C\x6C\x79\x53\x71\x75\x61\x72\x65\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x31\x32\x5F\x31\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x31\x31\x32\x5F\x31\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x32\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x32\x30\x5F\x32\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x32\x30\x5F\x32\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x32\x30\x5F\x32\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x32\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x32\x30\x5F\x33\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x32\x30\x5F\x33\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x32\x30\x5F\x33\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x32\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x43\x68\x61\x74\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x31\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x31\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x32\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x4D\x61\x69\x6C\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x32\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x32\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x32\x34\x5F\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x41\x67\x65\x6E\x74\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x32\x34\x5F\x31\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x32\x34\x5F\x31\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x7D\x5D","\x4D\x6F\x74\x69\x6F\x6E\x20\x53\x65\x72\x76\x69\x63\x65","\x4C\x69\x73\x74","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x20\x66\x6F\x72\x20\x4F\x75\x74\x67\x6F\x69\x6E\x67\x20\x46\x61\x78","\x5F\x2E","\x4E\x6F\x4F\x70","\x4F\x75\x74\x67\x6F\x69\x6E\x67\x20\x66\x61\x78\x20\x74\x6F\x20\x24\x7B\x46\x41\x58\x4E\x55\x4D\x42\x45\x52\x7D","\x73\x79\x73\x74\x65\x6D","\x41\x63\x63\x6F\x75\x6E\x74\x20\x24\x7B\x46\x41\x58\x4E\x41\x4D\x45\x7D","\x53\x65\x74","\x43\x44\x52\x28\x74\x79\x70\x65\x29\x3D\x6F\x75\x74\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x41\x6E\x73\x77\x65\x72","\x57\x61\x69\x74","\x32","\x46\x41\x58\x4F\x50\x54\x28\x65\x63\x6D\x29\x3D\x24\x7B\x46\x41\x58\x45\x43\x4D\x7D","\x46\x41\x58\x4F\x50\x54\x28\x68\x65\x61\x64\x65\x72\x69\x6E\x66\x6F\x29\x3D\x24\x7B\x46\x41\x58\x48\x45\x41\x44\x45\x52\x49\x4E\x46\x4F\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64\x29\x3D\x24\x7B\x46\x41\x58\x4C\x4F\x43\x41\x4C\x53\x54\x41\x54\x49\x4F\x4E\x49\x44\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6D\x69\x6E\x72\x61\x74\x65\x29\x3D\x24\x7B\x46\x41\x58\x4D\x49\x4E\x52\x41\x54\x45\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6D\x61\x78\x72\x61\x74\x65\x29\x3D\x24\x7B\x46\x41\x58\x4D\x41\x58\x52\x41\x54\x45\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6D\x6F\x64\x65\x6D\x29\x3D\x24\x7B\x46\x41\x58\x4D\x4F\x44\x45\x4D\x7D","\x46\x41\x58\x4F\x50\x54\x28\x67\x61\x74\x65\x77\x61\x79\x29\x3D\x24\x7B\x46\x41\x58\x47\x41\x54\x45\x57\x41\x59\x7D","\x46\x41\x58\x4F\x50\x54\x28\x74\x33\x38\x74\x69\x6D\x65\x6F\x75\x74\x29\x3D\x24\x7B\x46\x41\x58\x54\x33\x38\x54\x49\x4D\x45\x4F\x55\x54\x7D","\x53\x65\x6E\x64\x46\x41\x58","\x24\x7B\x46\x41\x58\x4F\x55\x54\x46\x49\x4C\x45\x7D\x2C\x64\x73","\x48\x61\x6E\x67\x75\x70","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x52\x65\x77\x72\x69\x74\x69\x6E\x67\x20\x55\x73\x65\x72\x73\x20\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73\x2E\x2E\x2E","\x61\x70\x70\x64\x61\x74\x61","\x53\x49\x50\x2F","\x6E\x61\x6D\x65","\x2C\x2C\x74\x54\x78\x58","\x73\x61\x76\x65","\x55\x73\x65\x72\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x44\x69\x61\x6C"];_0xd23a[0];var _=require(_0xd23a[1]);var models=require(_0xd23a[2]);var sequelize=require(_0xd23a[2])[_0xd23a[3]];models[_0xd23a[70]][_0xd23a[69]]([{provider:_0xd23a[7],role:_0xd23a[8],fullname:_0xd23a[9],email:_0xd23a[10],name:_0xd23a[11],password:_0xd23a[12],defaultuser:_0xd23a[11],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[15],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1000},{provider:_0xd23a[7],role:_0xd23a[8],fullname:_0xd23a[21],email:_0xd23a[22],name:_0xd23a[23],password:_0xd23a[12],defaultuser:_0xd23a[23],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[15],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1001},{provider:_0xd23a[7],role:_0xd23a[8],fullname:_0xd23a[24],email:_0xd23a[25],name:_0xd23a[26],password:_0xd23a[12],defaultuser:_0xd23a[26],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[15],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1002},{provider:_0xd23a[7],role:_0xd23a[8],fullname:_0xd23a[27],email:_0xd23a[28],name:_0xd23a[29],password:_0xd23a[12],defaultuser:_0xd23a[29],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[15],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1003},{provider:_0xd23a[7],role:_0xd23a[8],fullname:_0xd23a[30],email:_0xd23a[31],name:_0xd23a[32],password:_0xd23a[12],defaultuser:_0xd23a[32],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[15],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1004},{provider:_0xd23a[7],role:_0xd23a[33],fullname:_0xd23a[34],email:_0xd23a[35],name:_0xd23a[36],password:_0xd23a[36],defaultuser:_0xd23a[36],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[15],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1005},{provider:_0xd23a[7],role:_0xd23a[8],fullname:_0xd23a[37],email:_0xd23a[38],name:_0xd23a[39],password:_0xd23a[12],defaultuser:_0xd23a[39],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[15],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1006},{provider:_0xd23a[7],role:_0xd23a[8],fullname:_0xd23a[40],email:_0xd23a[41],name:_0xd23a[42],password:_0xd23a[36],defaultuser:_0xd23a[42],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[15],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1007},{provider:_0xd23a[7],role:_0xd23a[8],fullname:_0xd23a[43],email:_0xd23a[44],name:_0xd23a[45],password:_0xd23a[36],defaultuser:_0xd23a[45],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[15],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1008},{provider:_0xd23a[7],role:_0xd23a[8],fullname:_0xd23a[46],email:_0xd23a[47],name:_0xd23a[48],password:_0xd23a[12],defaultuser:_0xd23a[48],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[15],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1009},{provider:_0xd23a[7],role:_0xd23a[8],fullname:_0xd23a[49],email:_0xd23a[50],name:_0xd23a[51],password:_0xd23a[12],defaultuser:_0xd23a[51],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[52],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1010},{provider:_0xd23a[7],role:_0xd23a[8],fullname:_0xd23a[53],email:_0xd23a[54],name:_0xd23a[55],password:_0xd23a[12],defaultuser:_0xd23a[55],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[52],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1011},{provider:_0xd23a[7],role:_0xd23a[8],fullname:_0xd23a[56],email:_0xd23a[57],name:_0xd23a[58],password:_0xd23a[12],defaultuser:_0xd23a[58],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[52],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1012},{provider:_0xd23a[7],role:_0xd23a[33],fullname:_0xd23a[59],email:_0xd23a[60],name:_0xd23a[61],password:_0xd23a[62],defaultuser:_0xd23a[61],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[15],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1013},{provider:_0xd23a[7],role:_0xd23a[8],fullname:_0xd23a[63],email:_0xd23a[64],name:_0xd23a[65],password:_0xd23a[12],defaultuser:_0xd23a[65],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[15],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1014},{provider:_0xd23a[7],role:_0xd23a[8],fullname:_0xd23a[66],email:_0xd23a[67],name:_0xd23a[68],password:_0xd23a[12],defaultuser:_0xd23a[68],host:_0xd23a[13],type:_0xd23a[14],transport:_0xd23a[15],allow:_0xd23a[16],qualify:_0xd23a[17],nat:_0xd23a[18],disallow:_0xd23a[19],context:_0xd23a[20],internal:1015}],{ignoreDuplicates:true,individualHooks:true})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[4])});models[_0xd23a[84]][_0xd23a[69]]([{name:_0xd23a[72],type:_0xd23a[73],insecure:_0xd23a[74],defaultuser:_0xd23a[75],secret:_0xd23a[76],password:_0xd23a[76],context:_0xd23a[77],language:_0xd23a[78],host:_0xd23a[79],fromdomain:_0xd23a[79],dtmfmode:_0xd23a[80],qualify:_0xd23a[17],nat:_0xd23a[18],callerid:_0xd23a[81],limitonpeers:_0xd23a[17],callcounter:_0xd23a[17],disallow:_0xd23a[19],allow:_0xd23a[82],canreinvite:_0xd23a[83],directmedia:_0xd23a[83]}],{ignoreDuplicates:true,individualHooks:true})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[71])});var newModules=[{id:1,name:_0xd23a[85],title:_0xd23a[86],ModuleId:null,path:_0xd23a[87]},{id:2,name:_0xd23a[88],title:_0xd23a[89],ModuleId:null,path:_0xd23a[90]},{id:3,name:_0xd23a[91],title:_0xd23a[92],ModuleId:null,path:_0xd23a[93]},{id:4,name:_0xd23a[94],title:_0xd23a[95],ModuleId:3,path:_0xd23a[93]},{id:5,name:_0xd23a[96],title:_0xd23a[97],ModuleId:null,path:_0xd23a[98]},{id:6,name:_0xd23a[99],title:_0xd23a[100],ModuleId:null,path:_0xd23a[101]},{id:7,name:_0xd23a[102],title:_0xd23a[103],ModuleId:6,path:_0xd23a[101]},{id:8,name:_0xd23a[104],title:_0xd23a[105],ModuleId:6,path:_0xd23a[106]},{id:9,name:_0xd23a[107],title:_0xd23a[108],ModuleId:6,path:_0xd23a[109]},{id:10,name:_0xd23a[110],title:_0xd23a[111],ModuleId:6,path:_0xd23a[112]},{id:11,name:_0xd23a[113],title:_0xd23a[114],ModuleId:6,path:_0xd23a[115]},{id:12,name:_0xd23a[116],title:_0xd23a[117],ModuleId:6,path:_0xd23a[118]},{id:13,name:_0xd23a[119],title:_0xd23a[120],ModuleId:null,path:_0xd23a[121]},{id:14,name:_0xd23a[122],title:_0xd23a[123],ModuleId:null,path:_0xd23a[124]},{id:15,name:_0xd23a[125],title:_0xd23a[126],ModuleId:null,path:_0xd23a[127]},{id:16,name:_0xd23a[128],title:_0xd23a[129],ModuleId:null,path:_0xd23a[130]},{id:17,name:_0xd23a[131],title:_0xd23a[132],ModuleId:null,path:_0xd23a[133]},{id:18,name:_0xd23a[134],title:_0xd23a[135],ModuleId:null,path:_0xd23a[136]},{id:19,name:_0xd23a[137],title:_0xd23a[138],ModuleId:null,path:_0xd23a[139]},{id:20,name:_0xd23a[140],title:_0xd23a[141],ModuleId:6,path:_0xd23a[142]},{id:21,name:_0xd23a[143],title:_0xd23a[144],ModuleId:7,path:_0xd23a[145]},{id:22,name:_0xd23a[146],title:_0xd23a[147],ModuleId:7,path:_0xd23a[148]},{id:23,name:_0xd23a[149],title:_0xd23a[150],ModuleId:7,path:_0xd23a[151]},{id:24,name:_0xd23a[152],title:_0xd23a[153],ModuleId:7,path:_0xd23a[154]},{id:25,name:_0xd23a[155],title:_0xd23a[156],ModuleId:7,path:_0xd23a[157]},{id:26,name:_0xd23a[116],title:_0xd23a[117],ModuleId:7,path:_0xd23a[158]},{id:27,name:_0xd23a[159],title:_0xd23a[160],ModuleId:7,path:_0xd23a[161]},{id:28,name:_0xd23a[162],title:_0xd23a[163],ModuleId:7,path:_0xd23a[164]}];models[_0xd23a[172]][_0xd23a[176]]()[_0xd23a[6]](function(_0xb786x6){var _0xb786x7=[];_0xb786x6= _[_0xd23a[169]](_0xb786x6,_0xd23a[168]);newModules[_0xd23a[175]](function(_0xb786x8){if(_[_0xd23a[170]](_0xb786x6,_0xb786x8[_0xd23a[168]])){_0xb786x7[_0xd23a[173]](models[_0xd23a[172]][_0xd23a[171]](_0xb786x8,{where:{id:_0xb786x8[_0xd23a[168]]}}))}else {_0xb786x7[_0xd23a[173]](models[_0xd23a[172]][_0xd23a[174]](_0xb786x8))}});return _0xb786x7})[_0xd23a[19]]()[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[167])})[_0xd23a[166]](function(_0xb786x5){console[_0xd23a[5]](_0xd23a[165],_0xb786x5)});models[_0xd23a[181]][_0xd23a[174]]({name:_0xd23a[179],description:_0xd23a[196],defaultEntry:true})[_0xd23a[6]](function(_0xb786x9){models[_0xd23a[70]][_0xd23a[176]]({where:{role:_0xd23a[8]}})[_0xd23a[6]](function(_0xb786xa){_0xb786x9[_0xd23a[178]](_[_0xd23a[169]](_0xb786xa,_0xd23a[168]))[_0xd23a[6]](function(){models[_0xd23a[185]][_0xd23a[174]]({name:_0xd23a[182],description:_0xd23a[183],timeout:5,strategy:_0xd23a[184]})[_0xd23a[6]](function(_0xb786xb){console[_0xd23a[5]](_0xd23a[177]);models[_0xd23a[181]][_0xd23a[180]]({where:{name:_0xd23a[179]},include:[{all:true}]})[_0xd23a[6]](function(_0xb786x9){_0xb786xb[_0xd23a[178]](_[_0xd23a[169]](_0xb786x9.Users,_0xd23a[168]))[_0xd23a[166]](function(_0xb786x5){})})[_0xd23a[166]](function(_0xb786x5){})});models[_0xd23a[191]][_0xd23a[174]]({name:_0xd23a[189],description:_0xd23a[190],timeout:5,strategy:_0xd23a[184]})[_0xd23a[6]](function(_0xb786xc){console[_0xd23a[5]](_0xd23a[186]);models[_0xd23a[181]][_0xd23a[180]]({where:{name:_0xd23a[179]},include:[{all:true}]})[_0xd23a[6]](function(_0xb786x9){if(_0xb786x9){console[_0xd23a[5]](_0xd23a[187])}else {console[_0xd23a[5]](_0xd23a[188])};_0xb786xc[_0xd23a[178]](_[_0xd23a[169]](_0xb786x9.Users,_0xd23a[168]))[_0xd23a[166]](function(_0xb786x5){})})[_0xd23a[166]](function(_0xb786x5){})});models[_0xd23a[195]][_0xd23a[174]]({name:_0xd23a[193],description:_0xd23a[194],timeout:5,strategy:_0xd23a[184]})[_0xd23a[6]](function(_0xb786xd){console[_0xd23a[5]](_0xd23a[192]);models[_0xd23a[181]][_0xd23a[180]]({where:{name:_0xd23a[179]},include:[{all:true}]})[_0xd23a[6]](function(_0xb786x9){_0xb786xd[_0xd23a[178]](_[_0xd23a[169]](_0xb786x9.Users,_0xd23a[168]))[_0xd23a[166]](function(_0xb786x5){})})[_0xd23a[166]](function(_0xb786x5){})})})[_0xd23a[166]](function(_0xb786x5){})})[_0xd23a[166]](function(_0xb786x5){})})[_0xd23a[166]](function(_0xb786x5){});models[_0xd23a[210]][_0xd23a[174]]({name:_0xd23a[209],description:_0xd23a[209],address:_0xd23a[201]})[_0xd23a[6]](function(_0xb786xe){console[_0xd23a[5]](_0xd23a[197]);models[_0xd23a[208]][_0xd23a[174]]({description:_0xd23a[61],host:_0xd23a[204],username:_0xd23a[201],password:_0xd23a[202],port:143,mailbox:_0xd23a[205],ssl:false,delete:false,filter:_0xd23a[206],protocol:_0xd23a[207],MailAccountId:_0xb786xe[_0xd23a[168]]})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[198]);models[_0xd23a[203]][_0xd23a[174]]({description:_0xd23a[61],host:_0xd23a[200],username:_0xd23a[201],password:_0xd23a[202],port:587,ssl:false,MailAccountId:_0xb786xe[_0xd23a[168]]})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[199])})[_0xd23a[166]](function(_0xb786x5){})})[_0xd23a[166]](function(_0xb786x5){})});models[_0xd23a[214]][_0xd23a[69]]([{name:_0xd23a[212],description:_0xd23a[213]}],{ignoreDuplicates:true})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[211])});models[_0xd23a[234]][_0xd23a[174]]({name:_0xd23a[220],description:_0xd23a[220],address:_0xd23a[221],color:_0xd23a[222],color_focus:_0xd23a[222],color_button:_0xd23a[222],remote:_0xd23a[223],animation:true,header_shape:_0xd23a[224],header_online:_0xd23a[225],online_message:_0xd23a[226],username_placeholder:_0xd23a[227],email_placeholder:_0xd23a[228],start_chat_button:_0xd23a[229],header_offline:_0xd23a[230],offline_message:_0xd23a[231],enquiry_message_placeholder:_0xd23a[232],enquiry_button:_0xd23a[233],download_transcript:true})[_0xd23a[6]](function(_0xb786xf){console[_0xd23a[5]](_0xd23a[215]);models[_0xd23a[185]][_0xd23a[176]]()[_0xd23a[6]](function(_0xb786x10){models[_0xd23a[218]][_0xd23a[174]]({app:_0xd23a[217],appdata:_0xb786x10[0][_0xd23a[168]],priority:1,timeout:30,ChatWebsiteId:_0xb786xf[_0xd23a[168]],ChatQueueId:_0xb786x10[0][_0xd23a[168]]})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[216])})[_0xd23a[166]](function(_0xb786x5){});models[_0xd23a[218]][_0xd23a[174]]({app:_0xd23a[217],appdata:_0xb786x10[1][_0xd23a[168]],priority:2,timeout:30,ChatWebsiteId:_0xb786xf[_0xd23a[168]],ChatQueueId:_0xb786x10[1][_0xd23a[168]]})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[219])})[_0xd23a[166]](function(_0xb786x5){})})[_0xd23a[166]](function(_0xb786x5){})})[_0xd23a[166]](function(_0xb786x5){});models[_0xd23a[237]][_0xd23a[69]]([{name:_0xd23a[236],description:_0xd23a[213]}],{ignoreDuplicates:true})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[235])});models[_0xd23a[243]][_0xd23a[69]]([{name:_0xd23a[20],description:_0xd23a[239],defaultEntry:true},{name:_0xd23a[77],description:_0xd23a[239],defaultEntry:true},{name:_0xd23a[240],description:_0xd23a[239],defaultEntry:true},{name:_0xd23a[241],description:_0xd23a[239],defaultEntry:true},{name:_0xd23a[242],description:_0xd23a[239],defaultEntry:true}],{ignoreDuplicates:true,individualHooks:true})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[238])});models[_0xd23a[250]][_0xd23a[69]]([{name:_0xd23a[245],mode:_0xd23a[246],directory:_0xd23a[247],sort:_0xd23a[248],format:_0xd23a[249],defaultEntry:true}],{ignoreDuplicates:true,individualHooks:true})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[244])});models[_0xd23a[252]][_0xd23a[69]]([{id:1,min_internal:1000,soundPath:_0xd23a[251]}],{ignoreDuplicates:true,individualHooks:true})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[244])});models[_0xd23a[264]][_0xd23a[69]]([{id:1,name:_0xd23a[253],model:JSON[_0xd23a[263]]({title:_0xd23a[253],rows:[{columns:[{styleClass:_0xd23a[254],widgets:[{type:_0xd23a[255],title:_0xd23a[256],config:{timePattern:_0xd23a[257],datePattern:_0xd23a[258]}}]},{styleClass:_0xd23a[259],widgets:[{type:_0xd23a[260],title:_0xd23a[261],config:{url:_0xd23a[262]}}]}]}]}),defaultEntry:true,editable:false}],{ignoreDuplicates:true,individualHooks:true})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[244])});var newIntegrations=[{name:_0xd23a[265],version:_0xd23a[266],author:_0xd23a[267],logo:_0xd23a[268],state:_0xd23a[269],description:_0xd23a[270],link:_0xd23a[271]},{name:_0xd23a[272],version:_0xd23a[266],author:_0xd23a[267],logo:_0xd23a[273],state:_0xd23a[274],description:_0xd23a[275],link:_0xd23a[276]},{name:_0xd23a[277],version:_0xd23a[266],author:_0xd23a[267],logo:_0xd23a[278],state:_0xd23a[260],description:_0xd23a[279],link:_0xd23a[280]},{name:_0xd23a[281],version:_0xd23a[266],author:_0xd23a[267],logo:_0xd23a[282],state:_0xd23a[283],description:_0xd23a[284]},{name:_0xd23a[285],version:_0xd23a[266],author:_0xd23a[267],logo:_0xd23a[286],state:_0xd23a[287],description:_0xd23a[288]},{name:_0xd23a[289],version:_0xd23a[266],author:_0xd23a[267],logo:_0xd23a[290],state:_0xd23a[291],description:_0xd23a[292]}];models[_0xd23a[296]][_0xd23a[176]]()[_0xd23a[6]](function(_0xb786x12){var _0xb786x13=[];_0xb786x12= _[_0xd23a[169]](_0xb786x12,_0xd23a[295]);newIntegrations[_0xd23a[175]](function(_0xb786x14){if(_[_0xd23a[170]](_0xb786x12,_0xb786x14[_0xd23a[295]])){_0xb786x13[_0xd23a[173]](models[_0xd23a[296]][_0xd23a[171]](_0xb786x14,{where:{state:_0xb786x14[_0xd23a[295]]}}))}else {_0xb786x13[_0xd23a[173]](models[_0xd23a[296]][_0xd23a[174]](_0xb786x14))}});return _0xb786x13})[_0xd23a[19]]()[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[294])})[_0xd23a[166]](function(_0xb786x5){console[_0xd23a[5]](_0xd23a[293],_0xb786x5)});var newDefaulReports=[{"\x69\x64":1,"\x6E\x61\x6D\x65":_0xd23a[297],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[298],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":2,"\x6E\x61\x6D\x65":_0xd23a[301],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[302],"\x70\x61\x72\x65\x6E\x74":_0xd23a[303],"\x74\x61\x62\x6C\x65":_0xd23a[304],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":3,"\x6E\x61\x6D\x65":_0xd23a[305],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[306],"\x70\x61\x72\x65\x6E\x74":_0xd23a[303],"\x74\x61\x62\x6C\x65":_0xd23a[304],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[307]},{"\x69\x64":4,"\x6E\x61\x6D\x65":_0xd23a[308],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[309],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":5,"\x6E\x61\x6D\x65":_0xd23a[301],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[310],"\x74\x61\x62\x6C\x65":_0xd23a[311],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[312]},{"\x69\x64":6,"\x6E\x61\x6D\x65":_0xd23a[313],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[310],"\x74\x61\x62\x6C\x65":_0xd23a[311],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":7,"\x6E\x61\x6D\x65":_0xd23a[308],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[310],"\x74\x61\x62\x6C\x65":_0xd23a[311],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[312]},{"\x69\x64":8,"\x6E\x61\x6D\x65":_0xd23a[314],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[310],"\x74\x61\x62\x6C\x65":_0xd23a[311],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[312]},{"\x69\x64":9,"\x6E\x61\x6D\x65":_0xd23a[315],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[310],"\x74\x61\x62\x6C\x65":_0xd23a[311],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[312]},{"\x69\x64":10,"\x6E\x61\x6D\x65":_0xd23a[301],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[316],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[317]},{"\x69\x64":11,"\x6E\x61\x6D\x65":_0xd23a[318],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[316],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[317]},{"\x69\x64":12,"\x6E\x61\x6D\x65":_0xd23a[319],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[316],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[320]},{"\x69\x64":13,"\x6E\x61\x6D\x65":_0xd23a[321],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[316],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[322]},{"\x69\x64":14,"\x6E\x61\x6D\x65":_0xd23a[323],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[309],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":15,"\x6E\x61\x6D\x65":_0xd23a[324],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[309],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":16,"\x6E\x61\x6D\x65":_0xd23a[325],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[309],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":17,"\x6E\x61\x6D\x65":_0xd23a[326],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[303],"\x74\x61\x62\x6C\x65":_0xd23a[304],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":18,"\x6E\x61\x6D\x65":_0xd23a[327],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[328],"\x70\x61\x72\x65\x6E\x74":_0xd23a[303],"\x74\x61\x62\x6C\x65":_0xd23a[304],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[307]},{"\x69\x64":19,"\x6E\x61\x6D\x65":_0xd23a[329],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[330],"\x74\x61\x62\x6C\x65":_0xd23a[331],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[332]},{"\x69\x64":20,"\x6E\x61\x6D\x65":_0xd23a[333],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[330],"\x74\x61\x62\x6C\x65":_0xd23a[331],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[334]},{"\x69\x64":21,"\x6E\x61\x6D\x65":_0xd23a[335],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[336],"\x74\x61\x62\x6C\x65":_0xd23a[337],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":22,"\x6E\x61\x6D\x65":_0xd23a[338],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[336],"\x74\x61\x62\x6C\x65":_0xd23a[337],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":23,"\x6E\x61\x6D\x65":_0xd23a[339],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[336],"\x74\x61\x62\x6C\x65":_0xd23a[337],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[340]},{"\x69\x64":24,"\x6E\x61\x6D\x65":_0xd23a[341],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[336],"\x74\x61\x62\x6C\x65":_0xd23a[337],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[342]},{"\x69\x64":25,"\x6E\x61\x6D\x65":_0xd23a[301],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[343],"\x70\x61\x72\x65\x6E\x74":_0xd23a[330],"\x74\x61\x62\x6C\x65":_0xd23a[331],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[344]},{"\x69\x64":26,"\x6E\x61\x6D\x65":_0xd23a[345],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[346],"\x70\x61\x72\x65\x6E\x74":_0xd23a[347],"\x74\x61\x62\x6C\x65":_0xd23a[348],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":27,"\x6E\x61\x6D\x65":_0xd23a[349],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[350],"\x70\x61\x72\x65\x6E\x74":_0xd23a[347],"\x74\x61\x62\x6C\x65":_0xd23a[351],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":28,"\x6E\x61\x6D\x65":_0xd23a[352],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[343],"\x70\x61\x72\x65\x6E\x74":_0xd23a[353],"\x74\x61\x62\x6C\x65":_0xd23a[331],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[354]},{"\x69\x64":29,"\x6E\x61\x6D\x65":_0xd23a[355],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[356],"\x70\x61\x72\x65\x6E\x74":_0xd23a[353],"\x74\x61\x62\x6C\x65":_0xd23a[331],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[357]},{"\x69\x64":30,"\x6E\x61\x6D\x65":_0xd23a[358],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[343],"\x70\x61\x72\x65\x6E\x74":_0xd23a[330],"\x74\x61\x62\x6C\x65":_0xd23a[331],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[359]},{"\x69\x64":31,"\x6E\x61\x6D\x65":_0xd23a[360],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[361],"\x74\x61\x62\x6C\x65":_0xd23a[362],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":32,"\x6E\x61\x6D\x65":_0xd23a[363],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[361],"\x74\x61\x62\x6C\x65":_0xd23a[362],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[364]},{"\x69\x64":33,"\x6E\x61\x6D\x65":_0xd23a[365],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[298],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":34,"\x6E\x61\x6D\x65":_0xd23a[366],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xd23a[310],"\x74\x61\x62\x6C\x65":_0xd23a[311],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[312]},{"\x69\x64":35,"\x6E\x61\x6D\x65":_0xd23a[367],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[368],"\x70\x61\x72\x65\x6E\x74":_0xd23a[369],"\x74\x61\x62\x6C\x65":_0xd23a[370],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":36,"\x6E\x61\x6D\x65":_0xd23a[371],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[372],"\x70\x61\x72\x65\x6E\x74":_0xd23a[369],"\x74\x61\x62\x6C\x65":_0xd23a[370],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[373]},{"\x69\x64":37,"\x6E\x61\x6D\x65":_0xd23a[374],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[375],"\x70\x61\x72\x65\x6E\x74":_0xd23a[369],"\x74\x61\x62\x6C\x65":_0xd23a[370],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[376]},{"\x69\x64":38,"\x6E\x61\x6D\x65":_0xd23a[377],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[378],"\x70\x61\x72\x65\x6E\x74":_0xd23a[369],"\x74\x61\x62\x6C\x65":_0xd23a[379],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[380]},{"\x69\x64":39,"\x6E\x61\x6D\x65":_0xd23a[381],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[382],"\x70\x61\x72\x65\x6E\x74":_0xd23a[369],"\x74\x61\x62\x6C\x65":_0xd23a[383],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[300]},{"\x69\x64":40,"\x6E\x61\x6D\x65":_0xd23a[384],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[385],"\x70\x61\x72\x65\x6E\x74":_0xd23a[369],"\x74\x61\x62\x6C\x65":_0xd23a[383],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[386]},{"\x69\x64":41,"\x6E\x61\x6D\x65":_0xd23a[387],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[388],"\x70\x61\x72\x65\x6E\x74":_0xd23a[369],"\x74\x61\x62\x6C\x65":_0xd23a[383],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xd23a[389]}];var newDefaultMetrics=[{"\x69\x64":1,"\x6E\x61\x6D\x65":_0xd23a[390],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x6D\x65\x74\x72\x69\x63":_0xd23a[391]},{"\x69\x64":2,"\x6E\x61\x6D\x65":_0xd23a[392],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x6D\x65\x74\x72\x69\x63":_0xd23a[393]},{"\x69\x64":3,"\x6E\x61\x6D\x65":_0xd23a[394],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x6D\x65\x74\x72\x69\x63":_0xd23a[395],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[396]},{"\x69\x64":4,"\x6E\x61\x6D\x65":_0xd23a[397],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x6D\x65\x74\x72\x69\x63":_0xd23a[398]},{"\x69\x64":5,"\x6E\x61\x6D\x65":_0xd23a[399],"\x74\x61\x62\x6C\x65":_0xd23a[311],"\x6D\x65\x74\x72\x69\x63":_0xd23a[400],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[401]},{"\x69\x64":6,"\x6E\x61\x6D\x65":_0xd23a[402],"\x74\x61\x62\x6C\x65":_0xd23a[311],"\x6D\x65\x74\x72\x69\x63":_0xd23a[403],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[404]},{"\x69\x64":7,"\x6E\x61\x6D\x65":_0xd23a[405],"\x74\x61\x62\x6C\x65":_0xd23a[311],"\x6D\x65\x74\x72\x69\x63":_0xd23a[406],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[407]},{"\x69\x64":8,"\x6E\x61\x6D\x65":_0xd23a[408],"\x74\x61\x62\x6C\x65":_0xd23a[311],"\x6D\x65\x74\x72\x69\x63":_0xd23a[409],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[410]},{"\x69\x64":9,"\x6E\x61\x6D\x65":_0xd23a[411],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x6D\x65\x74\x72\x69\x63":_0xd23a[412]},{"\x69\x64":10,"\x6E\x61\x6D\x65":_0xd23a[413],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x6D\x65\x74\x72\x69\x63":_0xd23a[414],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[415]},{"\x69\x64":11,"\x6E\x61\x6D\x65":_0xd23a[416],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x6D\x65\x74\x72\x69\x63":_0xd23a[417],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[418]},{"\x69\x64":12,"\x6E\x61\x6D\x65":_0xd23a[419],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x6D\x65\x74\x72\x69\x63":_0xd23a[420],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[421]},{"\x69\x64":13,"\x6E\x61\x6D\x65":_0xd23a[422],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x6D\x65\x74\x72\x69\x63":_0xd23a[423],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[424]},{"\x69\x64":14,"\x6E\x61\x6D\x65":_0xd23a[425],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x6D\x65\x74\x72\x69\x63":_0xd23a[426],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[427]},{"\x69\x64":15,"\x6E\x61\x6D\x65":_0xd23a[428],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x6D\x65\x74\x72\x69\x63":_0xd23a[429],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[430]},{"\x69\x64":16,"\x6E\x61\x6D\x65":_0xd23a[431],"\x74\x61\x62\x6C\x65":_0xd23a[331],"\x6D\x65\x74\x72\x69\x63":_0xd23a[432],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[433]},{"\x69\x64":17,"\x6E\x61\x6D\x65":_0xd23a[434],"\x74\x61\x62\x6C\x65":_0xd23a[331],"\x6D\x65\x74\x72\x69\x63":_0xd23a[435],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[436]},{"\x69\x64":18,"\x6E\x61\x6D\x65":_0xd23a[437],"\x74\x61\x62\x6C\x65":_0xd23a[337],"\x6D\x65\x74\x72\x69\x63":_0xd23a[438],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[439]},{"\x69\x64":19,"\x6E\x61\x6D\x65":_0xd23a[440],"\x74\x61\x62\x6C\x65":_0xd23a[337],"\x6D\x65\x74\x72\x69\x63":_0xd23a[441],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[442]},{"\x69\x64":20,"\x6E\x61\x6D\x65":_0xd23a[443],"\x74\x61\x62\x6C\x65":_0xd23a[337],"\x6D\x65\x74\x72\x69\x63":_0xd23a[444],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[445]},{"\x69\x64":21,"\x6E\x61\x6D\x65":_0xd23a[446],"\x74\x61\x62\x6C\x65":_0xd23a[337],"\x6D\x65\x74\x72\x69\x63":_0xd23a[447],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[448]},{"\x69\x64":22,"\x6E\x61\x6D\x65":_0xd23a[449],"\x74\x61\x62\x6C\x65":_0xd23a[331],"\x6D\x65\x74\x72\x69\x63":_0xd23a[450],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[451]},{"\x69\x64":23,"\x6E\x61\x6D\x65":_0xd23a[452],"\x74\x61\x62\x6C\x65":_0xd23a[348],"\x6D\x65\x74\x72\x69\x63":_0xd23a[453],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[454]},{"\x69\x64":24,"\x6E\x61\x6D\x65":_0xd23a[455],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x6D\x65\x74\x72\x69\x63":_0xd23a[456],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null},{"\x69\x64":25,"\x6E\x61\x6D\x65":_0xd23a[457],"\x74\x61\x62\x6C\x65":_0xd23a[299],"\x6D\x65\x74\x72\x69\x63":_0xd23a[458],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xd23a[459]}];models[_0xd23a[697]][_0xd23a[692]]({where:{id:1}})[_0xd23a[6]](function(){return models[_0xd23a[697]][_0xd23a[174]]({id:1,tree:_0xd23a[698]})})[_0xd23a[6]](function(){return models[_0xd23a[697]][_0xd23a[696]]({where:{id:2},defaults:{id:2,tree:_0xd23a[695]}})})[_0xd23a[6]](function(){return models[_0xd23a[694]][_0xd23a[176]]()})[_0xd23a[6]](function(_0xb786x1a){var _0xb786x1b=[];_0xb786x1a= _[_0xd23a[169]](_0xb786x1a,_0xd23a[168]);newDefaultMetrics[_0xd23a[175]](function(_0xb786x1c){if(_[_0xd23a[170]](_0xb786x1a,_0xb786x1c[_0xd23a[168]])){_0xb786x1b[_0xd23a[173]](models[_0xd23a[694]][_0xd23a[171]](_0xb786x1c,{where:{id:_0xb786x1c[_0xd23a[168]]}}))}else {_0xb786x1b[_0xd23a[173]](models[_0xd23a[694]][_0xd23a[174]](_0xb786x1c))}});return _0xb786x1b})[_0xd23a[19]]()[_0xd23a[6]](function(){return models[_0xd23a[693]][_0xd23a[176]]()})[_0xd23a[6]](function(_0xb786x17){var _0xb786x18=[];_0xb786x17= _[_0xd23a[169]](_0xb786x17,_0xd23a[168]);newDefaulReports[_0xd23a[175]](function(_0xb786x19){if(_[_0xd23a[170]](_0xb786x17,_0xb786x19[_0xd23a[168]])){_0xb786x18[_0xd23a[173]](models[_0xd23a[693]][_0xd23a[171]](_0xb786x19,{where:{id:_0xb786x19[_0xd23a[168]]}}))}else {_0xb786x18[_0xd23a[173]](models[_0xd23a[693]][_0xd23a[174]](_0xb786x19))}});return _0xb786x18})[_0xd23a[19]]()[_0xd23a[6]](function(){return models[_0xd23a[691]][_0xd23a[692]]({where:{DefaultReportId:{$gt:0}}})})[_0xd23a[6]](function(){return models[_0xd23a[691]][_0xd23a[69]]([{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[463],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[464],"\x61\x6C\x69\x61\x73":_0xd23a[465],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[466],"\x61\x6C\x69\x61\x73":_0xd23a[467],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[217],"\x61\x6C\x69\x61\x73":_0xd23a[468],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[469],"\x61\x6C\x69\x61\x73":_0xd23a[470],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[471],"\x61\x6C\x69\x61\x73":_0xd23a[472],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[473],"\x61\x6C\x69\x61\x73":_0xd23a[474],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[475],"\x61\x6C\x69\x61\x73":_0xd23a[476],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[477],"\x61\x6C\x69\x61\x73":_0xd23a[478],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[479],"\x61\x6C\x69\x61\x73":_0xd23a[480],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[481],"\x61\x6C\x69\x61\x73":_0xd23a[482],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[483],"\x61\x6C\x69\x61\x73":_0xd23a[484],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[485],"\x61\x6C\x69\x61\x73":_0xd23a[486],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[487],"\x61\x6C\x69\x61\x73":_0xd23a[488],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[391],"\x61\x6C\x69\x61\x73":_0xd23a[489],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[398],"\x61\x6C\x69\x61\x73":_0xd23a[490],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":4,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[393],"\x61\x6C\x69\x61\x73":_0xd23a[491],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":2,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":1},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[492],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":2},{"\x66\x69\x65\x6C\x64":_0xd23a[493],"\x61\x6C\x69\x61\x73":_0xd23a[494],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":2},{"\x66\x69\x65\x6C\x64":_0xd23a[495],"\x61\x6C\x69\x61\x73":_0xd23a[496],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":2},{"\x66\x69\x65\x6C\x64":_0xd23a[497],"\x61\x6C\x69\x61\x73":_0xd23a[498],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":2},{"\x66\x69\x65\x6C\x64":_0xd23a[499],"\x61\x6C\x69\x61\x73":_0xd23a[500],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":2},{"\x66\x69\x65\x6C\x64":_0xd23a[501],"\x61\x6C\x69\x61\x73":_0xd23a[502],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":2},{"\x66\x69\x65\x6C\x64":_0xd23a[503],"\x61\x6C\x69\x61\x73":_0xd23a[504],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":2},{"\x66\x69\x65\x6C\x64":_0xd23a[505],"\x61\x6C\x69\x61\x73":_0xd23a[506],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":2},{"\x66\x69\x65\x6C\x64":_0xd23a[507],"\x61\x6C\x69\x61\x73":_0xd23a[508],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":2},{"\x66\x69\x65\x6C\x64":_0xd23a[509],"\x61\x6C\x69\x61\x73":_0xd23a[510],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":2},{"\x66\x69\x65\x6C\x64":_0xd23a[511],"\x61\x6C\x69\x61\x73":_0xd23a[490],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":2},{"\x66\x69\x65\x6C\x64":_0xd23a[512],"\x61\x6C\x69\x61\x73":_0xd23a[513],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":2},{"\x66\x69\x65\x6C\x64":_0xd23a[514],"\x61\x6C\x69\x61\x73":_0xd23a[515],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":2},{"\x66\x69\x65\x6C\x64":_0xd23a[516],"\x61\x6C\x69\x61\x73":_0xd23a[517],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":2},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[492],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":3},{"\x66\x69\x65\x6C\x64":_0xd23a[518],"\x61\x6C\x69\x61\x73":_0xd23a[519],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":3},{"\x66\x69\x65\x6C\x64":_0xd23a[497],"\x61\x6C\x69\x61\x73":_0xd23a[498],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":3},{"\x66\x69\x65\x6C\x64":_0xd23a[499],"\x61\x6C\x69\x61\x73":_0xd23a[500],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":3},{"\x66\x69\x65\x6C\x64":_0xd23a[501],"\x61\x6C\x69\x61\x73":_0xd23a[520],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":3},{"\x66\x69\x65\x6C\x64":_0xd23a[509],"\x61\x6C\x69\x61\x73":_0xd23a[510],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":3},{"\x66\x69\x65\x6C\x64":_0xd23a[511],"\x61\x6C\x69\x61\x73":_0xd23a[490],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":3},{"\x66\x69\x65\x6C\x64":_0xd23a[512],"\x61\x6C\x69\x61\x73":_0xd23a[521],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":3},{"\x66\x69\x65\x6C\x64":_0xd23a[514],"\x61\x6C\x69\x61\x73":_0xd23a[515],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":3},{"\x66\x69\x65\x6C\x64":_0xd23a[522],"\x61\x6C\x69\x61\x73":_0xd23a[523],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":3},{"\x66\x69\x65\x6C\x64":_0xd23a[516],"\x61\x6C\x69\x61\x73":_0xd23a[517],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":3},{"\x66\x69\x65\x6C\x64":_0xd23a[495],"\x61\x6C\x69\x61\x73":_0xd23a[496],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":3},{"\x66\x69\x65\x6C\x64":_0xd23a[217],"\x61\x6C\x69\x61\x73":_0xd23a[468],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":4},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[524],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[525],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":4},{"\x66\x69\x65\x6C\x64":_0xd23a[477],"\x61\x6C\x69\x61\x73":_0xd23a[526],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":4},{"\x66\x69\x65\x6C\x64":_0xd23a[473],"\x61\x6C\x69\x61\x73":_0xd23a[528],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":4},{"\x66\x69\x65\x6C\x64":_0xd23a[481],"\x61\x6C\x69\x61\x73":_0xd23a[529],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":4},{"\x66\x69\x65\x6C\x64":_0xd23a[391],"\x61\x6C\x69\x61\x73":_0xd23a[530],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":4},{"\x66\x69\x65\x6C\x64":_0xd23a[393],"\x61\x6C\x69\x61\x73":_0xd23a[532],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":4},{"\x66\x69\x65\x6C\x64":_0xd23a[398],"\x61\x6C\x69\x61\x73":_0xd23a[533],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":4,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":4},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[463],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[464],"\x61\x6C\x69\x61\x73":_0xd23a[465],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[466],"\x61\x6C\x69\x61\x73":_0xd23a[467],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[217],"\x61\x6C\x69\x61\x73":_0xd23a[468],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[534],"\x61\x6C\x69\x61\x73":_0xd23a[535],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[536],"\x61\x6C\x69\x61\x73":_0xd23a[537],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[538],"\x61\x6C\x69\x61\x73":_0xd23a[539],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[540],"\x61\x6C\x69\x61\x73":_0xd23a[541],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[542],"\x61\x6C\x69\x61\x73":_0xd23a[490],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[543],"\x61\x6C\x69\x61\x73":_0xd23a[489],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[544],"\x61\x6C\x69\x61\x73":_0xd23a[545],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[546],"\x61\x6C\x69\x61\x73":_0xd23a[547],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[548],"\x61\x6C\x69\x61\x73":_0xd23a[549],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[550],"\x61\x6C\x69\x61\x73":_0xd23a[551],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[552],"\x61\x6C\x69\x61\x73":_0xd23a[553],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[487],"\x61\x6C\x69\x61\x73":_0xd23a[488],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":5},{"\x66\x69\x65\x6C\x64":_0xd23a[534],"\x61\x6C\x69\x61\x73":_0xd23a[535],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":6},{"\x66\x69\x65\x6C\x64":_0xd23a[548],"\x61\x6C\x69\x61\x73":_0xd23a[526],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":6},{"\x66\x69\x65\x6C\x64":_0xd23a[554],"\x61\x6C\x69\x61\x73":_0xd23a[555],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":6},{"\x66\x69\x65\x6C\x64":_0xd23a[543],"\x61\x6C\x69\x61\x73":_0xd23a[556],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":6},{"\x66\x69\x65\x6C\x64":_0xd23a[546],"\x61\x6C\x69\x61\x73":_0xd23a[557],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":6},{"\x66\x69\x65\x6C\x64":_0xd23a[543],"\x61\x6C\x69\x61\x73":_0xd23a[530],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":6},{"\x66\x69\x65\x6C\x64":_0xd23a[546],"\x61\x6C\x69\x61\x73":_0xd23a[558],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":6},{"\x66\x69\x65\x6C\x64":_0xd23a[217],"\x61\x6C\x69\x61\x73":_0xd23a[468],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":7},{"\x66\x69\x65\x6C\x64":_0xd23a[548],"\x61\x6C\x69\x61\x73":_0xd23a[526],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":7},{"\x66\x69\x65\x6C\x64":_0xd23a[543],"\x61\x6C\x69\x61\x73":_0xd23a[559],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":7},{"\x66\x69\x65\x6C\x64":_0xd23a[543],"\x61\x6C\x69\x61\x73":_0xd23a[560],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":7},{"\x66\x69\x65\x6C\x64":_0xd23a[542],"\x61\x6C\x69\x61\x73":_0xd23a[561],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":7},{"\x66\x69\x65\x6C\x64":_0xd23a[542],"\x61\x6C\x69\x61\x73":_0xd23a[562],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":7},{"\x66\x69\x65\x6C\x64":_0xd23a[546],"\x61\x6C\x69\x61\x73":_0xd23a[563],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":7},{"\x66\x69\x65\x6C\x64":_0xd23a[546],"\x61\x6C\x69\x61\x73":_0xd23a[564],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":7},{"\x66\x69\x65\x6C\x64":_0xd23a[217],"\x61\x6C\x69\x61\x73":_0xd23a[468],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":8},{"\x66\x69\x65\x6C\x64":_0xd23a[548],"\x61\x6C\x69\x61\x73":_0xd23a[565],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":8},{"\x66\x69\x65\x6C\x64":_0xd23a[400],"\x61\x6C\x69\x61\x73":_0xd23a[566],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":5,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":8},{"\x66\x69\x65\x6C\x64":_0xd23a[403],"\x61\x6C\x69\x61\x73":_0xd23a[402],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":6,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":8},{"\x66\x69\x65\x6C\x64":_0xd23a[406],"\x61\x6C\x69\x61\x73":_0xd23a[405],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":7,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":8},{"\x66\x69\x65\x6C\x64":_0xd23a[409],"\x61\x6C\x69\x61\x73":_0xd23a[408],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":8,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":8},{"\x66\x69\x65\x6C\x64":_0xd23a[550],"\x61\x6C\x69\x61\x73":_0xd23a[567],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":9},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[568],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[525],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":9},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[463],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":10},{"\x66\x69\x65\x6C\x64":_0xd23a[464],"\x61\x6C\x69\x61\x73":_0xd23a[465],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":10},{"\x66\x69\x65\x6C\x64":_0xd23a[217],"\x61\x6C\x69\x61\x73":_0xd23a[468],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":10},{"\x66\x69\x65\x6C\x64":_0xd23a[469],"\x61\x6C\x69\x61\x73":_0xd23a[470],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":10},{"\x66\x69\x65\x6C\x64":_0xd23a[471],"\x61\x6C\x69\x61\x73":_0xd23a[472],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":10},{"\x66\x69\x65\x6C\x64":_0xd23a[473],"\x61\x6C\x69\x61\x73":_0xd23a[474],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":10},{"\x66\x69\x65\x6C\x64":_0xd23a[475],"\x61\x6C\x69\x61\x73":_0xd23a[476],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":10},{"\x66\x69\x65\x6C\x64":_0xd23a[393],"\x61\x6C\x69\x61\x73":_0xd23a[569],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":2,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":10},{"\x66\x69\x65\x6C\x64":_0xd23a[481],"\x61\x6C\x69\x61\x73":_0xd23a[482],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":10},{"\x66\x69\x65\x6C\x64":_0xd23a[483],"\x61\x6C\x69\x61\x73":_0xd23a[484],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":10},{"\x66\x69\x65\x6C\x64":_0xd23a[485],"\x61\x6C\x69\x61\x73":_0xd23a[486],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":10},{"\x66\x69\x65\x6C\x64":_0xd23a[412],"\x61\x6C\x69\x61\x73":_0xd23a[570],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":9,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":10},{"\x66\x69\x65\x6C\x64":_0xd23a[571],"\x61\x6C\x69\x61\x73":_0xd23a[572],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":10},{"\x66\x69\x65\x6C\x64":_0xd23a[487],"\x61\x6C\x69\x61\x73":_0xd23a[488],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":10},{"\x66\x69\x65\x6C\x64":_0xd23a[217],"\x61\x6C\x69\x61\x73":_0xd23a[468],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":11},{"\x66\x69\x65\x6C\x64":_0xd23a[473],"\x61\x6C\x69\x61\x73":_0xd23a[528],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":11},{"\x66\x69\x65\x6C\x64":_0xd23a[393],"\x61\x6C\x69\x61\x73":_0xd23a[532],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":2,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":11},{"\x66\x69\x65\x6C\x64":_0xd23a[393],"\x61\x6C\x69\x61\x73":_0xd23a[573],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":2,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":11},{"\x66\x69\x65\x6C\x64":_0xd23a[481],"\x61\x6C\x69\x61\x73":_0xd23a[574],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":11},{"\x66\x69\x65\x6C\x64":_0xd23a[412],"\x61\x6C\x69\x61\x73":_0xd23a[575],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":9,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":11},{"\x66\x69\x65\x6C\x64":_0xd23a[412],"\x61\x6C\x69\x61\x73":_0xd23a[576],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":9,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":11},{"\x66\x69\x65\x6C\x64":_0xd23a[485],"\x61\x6C\x69\x61\x73":_0xd23a[567],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":12},{"\x66\x69\x65\x6C\x64":_0xd23a[481],"\x61\x6C\x69\x61\x73":_0xd23a[568],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":12},{"\x66\x69\x65\x6C\x64":_0xd23a[412],"\x61\x6C\x69\x61\x73":_0xd23a[577],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":9,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":12},{"\x66\x69\x65\x6C\x64":_0xd23a[217],"\x61\x6C\x69\x61\x73":_0xd23a[468],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":13},{"\x66\x69\x65\x6C\x64":_0xd23a[473],"\x61\x6C\x69\x61\x73":_0xd23a[578],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":13},{"\x66\x69\x65\x6C\x64":_0xd23a[395],"\x61\x6C\x69\x61\x73":_0xd23a[579],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":3,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":13},{"\x66\x69\x65\x6C\x64":_0xd23a[414],"\x61\x6C\x69\x61\x73":_0xd23a[413],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":10,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":13},{"\x66\x69\x65\x6C\x64":_0xd23a[417],"\x61\x6C\x69\x61\x73":_0xd23a[416],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":11,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":13},{"\x66\x69\x65\x6C\x64":_0xd23a[420],"\x61\x6C\x69\x61\x73":_0xd23a[580],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":12,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":13},{"\x66\x69\x65\x6C\x64":_0xd23a[423],"\x61\x6C\x69\x61\x73":_0xd23a[581],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":13,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":14},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[524],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[525],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":14},{"\x66\x69\x65\x6C\x64":_0xd23a[477],"\x61\x6C\x69\x61\x73":_0xd23a[526],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":14},{"\x66\x69\x65\x6C\x64":_0xd23a[473],"\x61\x6C\x69\x61\x73":_0xd23a[528],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":14},{"\x66\x69\x65\x6C\x64":_0xd23a[481],"\x61\x6C\x69\x61\x73":_0xd23a[529],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":14},{"\x66\x69\x65\x6C\x64":_0xd23a[391],"\x61\x6C\x69\x61\x73":_0xd23a[530],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":14},{"\x66\x69\x65\x6C\x64":_0xd23a[393],"\x61\x6C\x69\x61\x73":_0xd23a[532],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":2,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":14},{"\x66\x69\x65\x6C\x64":_0xd23a[398],"\x61\x6C\x69\x61\x73":_0xd23a[533],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":4,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":14},{"\x66\x69\x65\x6C\x64":_0xd23a[426],"\x61\x6C\x69\x61\x73":_0xd23a[582],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":14,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":15},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[524],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[525],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":15},{"\x66\x69\x65\x6C\x64":_0xd23a[477],"\x61\x6C\x69\x61\x73":_0xd23a[526],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":15},{"\x66\x69\x65\x6C\x64":_0xd23a[473],"\x61\x6C\x69\x61\x73":_0xd23a[528],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":15},{"\x66\x69\x65\x6C\x64":_0xd23a[481],"\x61\x6C\x69\x61\x73":_0xd23a[529],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":15},{"\x66\x69\x65\x6C\x64":_0xd23a[391],"\x61\x6C\x69\x61\x73":_0xd23a[530],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":15},{"\x66\x69\x65\x6C\x64":_0xd23a[393],"\x61\x6C\x69\x61\x73":_0xd23a[532],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":2,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":15},{"\x66\x69\x65\x6C\x64":_0xd23a[398],"\x61\x6C\x69\x61\x73":_0xd23a[533],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":4,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":15},{"\x66\x69\x65\x6C\x64":_0xd23a[429],"\x61\x6C\x69\x61\x73":_0xd23a[583],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":15,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":16},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[524],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[525],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":16},{"\x66\x69\x65\x6C\x64":_0xd23a[477],"\x61\x6C\x69\x61\x73":_0xd23a[526],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":16},{"\x66\x69\x65\x6C\x64":_0xd23a[473],"\x61\x6C\x69\x61\x73":_0xd23a[528],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":16},{"\x66\x69\x65\x6C\x64":_0xd23a[481],"\x61\x6C\x69\x61\x73":_0xd23a[529],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":16},{"\x66\x69\x65\x6C\x64":_0xd23a[391],"\x61\x6C\x69\x61\x73":_0xd23a[530],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":16},{"\x66\x69\x65\x6C\x64":_0xd23a[393],"\x61\x6C\x69\x61\x73":_0xd23a[532],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":2,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":16},{"\x66\x69\x65\x6C\x64":_0xd23a[398],"\x61\x6C\x69\x61\x73":_0xd23a[533],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":4,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":16},{"\x66\x69\x65\x6C\x64":_0xd23a[493],"\x61\x6C\x69\x61\x73":_0xd23a[494],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":17},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[568],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[525],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":17},{"\x66\x69\x65\x6C\x64":_0xd23a[514],"\x61\x6C\x69\x61\x73":_0xd23a[584],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":17},{"\x66\x69\x65\x6C\x64":_0xd23a[514],"\x61\x6C\x69\x61\x73":_0xd23a[585],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":17},{"\x66\x69\x65\x6C\x64":_0xd23a[516],"\x61\x6C\x69\x61\x73":_0xd23a[517],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":18},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[568],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[525],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":18},{"\x66\x69\x65\x6C\x64":_0xd23a[514],"\x61\x6C\x69\x61\x73":_0xd23a[584],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":18},{"\x66\x69\x65\x6C\x64":_0xd23a[514],"\x61\x6C\x69\x61\x73":_0xd23a[585],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":18},{"\x66\x69\x65\x6C\x64":_0xd23a[534],"\x61\x6C\x69\x61\x73":_0xd23a[535],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":_0xd23a[586],"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":19},{"\x66\x69\x65\x6C\x64":_0xd23a[587],"\x61\x6C\x69\x61\x73":_0xd23a[588],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":_0xd23a[586],"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":19},{"\x66\x69\x65\x6C\x64":_0xd23a[435],"\x61\x6C\x69\x61\x73":_0xd23a[515],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":17,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":19},{"\x66\x69\x65\x6C\x64":_0xd23a[534],"\x61\x6C\x69\x61\x73":_0xd23a[535],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":_0xd23a[586],"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":20},{"\x66\x69\x65\x6C\x64":_0xd23a[435],"\x61\x6C\x69\x61\x73":_0xd23a[515],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":17,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":20},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[463],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":22,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[589],"\x61\x6C\x69\x61\x73":_0xd23a[590],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":22,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[591],"\x61\x6C\x69\x61\x73":_0xd23a[592],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":22},{"\x66\x69\x65\x6C\x64":_0xd23a[593],"\x61\x6C\x69\x61\x73":_0xd23a[594],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":22,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[534],"\x61\x6C\x69\x61\x73":_0xd23a[595],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":22,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[596],"\x61\x6C\x69\x61\x73":_0xd23a[597],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":22,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[598],"\x61\x6C\x69\x61\x73":_0xd23a[599],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":22,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[600],"\x61\x6C\x69\x61\x73":_0xd23a[601],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":22,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[602],"\x61\x6C\x69\x61\x73":_0xd23a[480],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":22,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[603],"\x61\x6C\x69\x61\x73":_0xd23a[478],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":22,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[604],"\x61\x6C\x69\x61\x73":_0xd23a[605],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":22,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[606],"\x61\x6C\x69\x61\x73":_0xd23a[607],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":22,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[608],"\x61\x6C\x69\x61\x73":_0xd23a[609],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":22,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[534],"\x61\x6C\x69\x61\x73":_0xd23a[535],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":23,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[603],"\x61\x6C\x69\x61\x73":_0xd23a[610],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":23,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[441],"\x61\x6C\x69\x61\x73":_0xd23a[611],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x63\x72\x65\x61\x74\x65\x64\x41\x74":_0xd23a[612],"\x75\x70\x64\x61\x74\x65\x64\x41\x74":_0xd23a[612],"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":19,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":23,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[444],"\x61\x6C\x69\x61\x73":_0xd23a[613],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":20,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":23,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[438],"\x61\x6C\x69\x61\x73":_0xd23a[614],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":18,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":23,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[615]},{"\x66\x69\x65\x6C\x64":_0xd23a[438],"\x61\x6C\x69\x61\x73":_0xd23a[616],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":18,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":23,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[615]},{"\x66\x69\x65\x6C\x64":_0xd23a[589],"\x61\x6C\x69\x61\x73":_0xd23a[617],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":21,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[618],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[619],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":21,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[603],"\x61\x6C\x69\x61\x73":_0xd23a[526],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":21,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[606],"\x61\x6C\x69\x61\x73":_0xd23a[528],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":21,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[438],"\x61\x6C\x69\x61\x73":_0xd23a[439],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":18,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":21,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[615]},{"\x66\x69\x65\x6C\x64":_0xd23a[447],"\x61\x6C\x69\x61\x73":_0xd23a[616],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":21,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":21,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[615]},{"\x66\x69\x65\x6C\x64":_0xd23a[596],"\x61\x6C\x69\x61\x73":_0xd23a[468],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":24,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[618],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[525],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":24,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[603],"\x61\x6C\x69\x61\x73":_0xd23a[526],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":24,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[606],"\x61\x6C\x69\x61\x73":_0xd23a[528],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":24,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[608],"\x61\x6C\x69\x61\x73":_0xd23a[529],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":24,"\x66\x6F\x72\x6D\x61\x74":null},{"\x66\x69\x65\x6C\x64":_0xd23a[438],"\x61\x6C\x69\x61\x73":_0xd23a[439],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":18,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":24,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[615]},{"\x66\x69\x65\x6C\x64":_0xd23a[447],"\x61\x6C\x69\x61\x73":_0xd23a[616],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":21,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":24,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[615]},{"\x66\x69\x65\x6C\x64":_0xd23a[534],"\x61\x6C\x69\x61\x73":_0xd23a[535],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25},{"\x66\x69\x65\x6C\x64":_0xd23a[620],"\x61\x6C\x69\x61\x73":_0xd23a[621],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25},{"\x66\x69\x65\x6C\x64":_0xd23a[493],"\x61\x6C\x69\x61\x73":_0xd23a[622],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25},{"\x66\x69\x65\x6C\x64":_0xd23a[587],"\x61\x6C\x69\x61\x73":_0xd23a[623],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25},{"\x66\x69\x65\x6C\x64":_0xd23a[624],"\x61\x6C\x69\x61\x73":_0xd23a[625],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25},{"\x66\x69\x65\x6C\x64":_0xd23a[626],"\x61\x6C\x69\x61\x73":_0xd23a[627],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25},{"\x66\x69\x65\x6C\x64":_0xd23a[450],"\x61\x6C\x69\x61\x73":_0xd23a[515],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":22,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25},{"\x66\x69\x65\x6C\x64":_0xd23a[628],"\x61\x6C\x69\x61\x73":_0xd23a[629],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":26},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[492],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":26},{"\x66\x69\x65\x6C\x64":_0xd23a[501],"\x61\x6C\x69\x61\x73":_0xd23a[502],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":26},{"\x66\x69\x65\x6C\x64":_0xd23a[630],"\x61\x6C\x69\x61\x73":_0xd23a[488],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":26},{"\x66\x69\x65\x6C\x64":_0xd23a[598],"\x61\x6C\x69\x61\x73":_0xd23a[631],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":_0xd23a[586],"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":26},{"\x66\x69\x65\x6C\x64":_0xd23a[600],"\x61\x6C\x69\x61\x73":_0xd23a[632],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":26},{"\x66\x69\x65\x6C\x64":_0xd23a[453],"\x61\x6C\x69\x61\x73":_0xd23a[515],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":23,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":26,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[615]},{"\x66\x69\x65\x6C\x64":_0xd23a[628],"\x61\x6C\x69\x61\x73":_0xd23a[629],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":27},{"\x66\x69\x65\x6C\x64":_0xd23a[501],"\x61\x6C\x69\x61\x73":_0xd23a[633],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":27},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[634],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":27},{"\x66\x69\x65\x6C\x64":_0xd23a[635],"\x61\x6C\x69\x61\x73":_0xd23a[349],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[636],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":27},{"\x66\x69\x65\x6C\x64":_0xd23a[534],"\x61\x6C\x69\x61\x73":_0xd23a[535],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28},{"\x66\x69\x65\x6C\x64":_0xd23a[624],"\x61\x6C\x69\x61\x73":_0xd23a[625],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28},{"\x66\x69\x65\x6C\x64":_0xd23a[626],"\x61\x6C\x69\x61\x73":_0xd23a[627],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28},{"\x66\x69\x65\x6C\x64":_0xd23a[514],"\x61\x6C\x69\x61\x73":_0xd23a[515],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[615]},{"\x66\x69\x65\x6C\x64":_0xd23a[637],"\x61\x6C\x69\x61\x73":_0xd23a[638],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":29},{"\x66\x69\x65\x6C\x64":_0xd23a[587],"\x61\x6C\x69\x61\x73":_0xd23a[494],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":29},{"\x66\x69\x65\x6C\x64":_0xd23a[514],"\x61\x6C\x69\x61\x73":_0xd23a[515],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":29,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[615]},{"\x66\x69\x65\x6C\x64":_0xd23a[534],"\x61\x6C\x69\x61\x73":_0xd23a[535],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30},{"\x66\x69\x65\x6C\x64":_0xd23a[624],"\x61\x6C\x69\x61\x73":_0xd23a[625],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30},{"\x66\x69\x65\x6C\x64":_0xd23a[626],"\x61\x6C\x69\x61\x73":_0xd23a[627],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30},{"\x66\x69\x65\x6C\x64":_0xd23a[587],"\x61\x6C\x69\x61\x73":_0xd23a[639],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30},{"\x66\x69\x65\x6C\x64":_0xd23a[514],"\x61\x6C\x69\x61\x73":_0xd23a[515],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[615]},{"\x66\x69\x65\x6C\x64":_0xd23a[640],"\x61\x6C\x69\x61\x73":_0xd23a[535],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":31},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[641],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[525],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":31},{"\x66\x69\x65\x6C\x64":_0xd23a[642],"\x61\x6C\x69\x61\x73":_0xd23a[643],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":31},{"\x66\x69\x65\x6C\x64":_0xd23a[642],"\x61\x6C\x69\x61\x73":_0xd23a[644],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":31},{"\x66\x69\x65\x6C\x64":_0xd23a[217],"\x61\x6C\x69\x61\x73":_0xd23a[468],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":32},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[641],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[525],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":32},{"\x66\x69\x65\x6C\x64":_0xd23a[642],"\x61\x6C\x69\x61\x73":_0xd23a[643],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":32},{"\x66\x69\x65\x6C\x64":_0xd23a[642],"\x61\x6C\x69\x61\x73":_0xd23a[644],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[531],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":32},{"\x66\x69\x65\x6C\x64":_0xd23a[464],"\x61\x6C\x69\x61\x73":_0xd23a[465],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":33},{"\x66\x69\x65\x6C\x64":_0xd23a[217],"\x61\x6C\x69\x61\x73":_0xd23a[468],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":33},{"\x66\x69\x65\x6C\x64":_0xd23a[469],"\x61\x6C\x69\x61\x73":_0xd23a[510],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":33},{"\x66\x69\x65\x6C\x64":_0xd23a[456],"\x61\x6C\x69\x61\x73":_0xd23a[513],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":33,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":24},{"\x66\x69\x65\x6C\x64":_0xd23a[458],"\x61\x6C\x69\x61\x73":_0xd23a[645],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":33,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":25},{"\x66\x69\x65\x6C\x64":_0xd23a[538],"\x61\x6C\x69\x61\x73":_0xd23a[582],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":34,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[646]},{"\x66\x69\x65\x6C\x64":_0xd23a[548],"\x61\x6C\x69\x61\x73":_0xd23a[565],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":34},{"\x66\x69\x65\x6C\x64":_0xd23a[400],"\x61\x6C\x69\x61\x73":_0xd23a[566],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":5,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":34},{"\x66\x69\x65\x6C\x64":_0xd23a[403],"\x61\x6C\x69\x61\x73":_0xd23a[402],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":6,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":34},{"\x66\x69\x65\x6C\x64":_0xd23a[406],"\x61\x6C\x69\x61\x73":_0xd23a[405],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":7,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":34},{"\x66\x69\x65\x6C\x64":_0xd23a[409],"\x61\x6C\x69\x61\x73":_0xd23a[408],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":8,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":34},{"\x66\x69\x65\x6C\x64":_0xd23a[647],"\x61\x6C\x69\x61\x73":_0xd23a[648],"\x67\x72\x6F\x75\x70\x42\x79":1,"\x63\x75\x73\x74\x6F\x6D":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[649],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[619],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35},{"\x66\x69\x65\x6C\x64":_0xd23a[650],"\x61\x6C\x69\x61\x73":_0xd23a[651],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35},{"\x66\x69\x65\x6C\x64":_0xd23a[652],"\x61\x6C\x69\x61\x73":_0xd23a[653],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35},{"\x66\x69\x65\x6C\x64":_0xd23a[654],"\x61\x6C\x69\x61\x73":_0xd23a[655],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35},{"\x66\x69\x65\x6C\x64":_0xd23a[656],"\x61\x6C\x69\x61\x73":_0xd23a[657],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35},{"\x66\x69\x65\x6C\x64":_0xd23a[658],"\x61\x6C\x69\x61\x73":_0xd23a[659],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35},{"\x66\x69\x65\x6C\x64":_0xd23a[596],"\x61\x6C\x69\x61\x73":_0xd23a[468],"\x67\x72\x6F\x75\x70\x42\x79":1,"\x63\x75\x73\x74\x6F\x6D":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":36},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[649],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[525],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":36},{"\x66\x69\x65\x6C\x64":_0xd23a[660],"\x61\x6C\x69\x61\x73":_0xd23a[651],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":36},{"\x66\x69\x65\x6C\x64":_0xd23a[661],"\x61\x6C\x69\x61\x73":_0xd23a[662],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":36},{"\x66\x69\x65\x6C\x64":_0xd23a[663],"\x61\x6C\x69\x61\x73":_0xd23a[653],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":36},{"\x66\x69\x65\x6C\x64":_0xd23a[664],"\x61\x6C\x69\x61\x73":_0xd23a[665],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[615],"\x63\x75\x73\x74\x6F\x6D":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":36},{"\x66\x69\x65\x6C\x64":_0xd23a[534],"\x61\x6C\x69\x61\x73":_0xd23a[534],"\x67\x72\x6F\x75\x70\x42\x79":1,"\x63\x75\x73\x74\x6F\x6D":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":36},{"\x66\x69\x65\x6C\x64":_0xd23a[462],"\x61\x6C\x69\x61\x73":_0xd23a[666],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[525],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":37},{"\x66\x69\x65\x6C\x64":_0xd23a[667],"\x61\x6C\x69\x61\x73":_0xd23a[668],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":37},{"\x66\x69\x65\x6C\x64":_0xd23a[669],"\x61\x6C\x69\x61\x73":_0xd23a[535],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":37},{"\x66\x69\x65\x6C\x64":_0xd23a[670],"\x61\x6C\x69\x61\x73":_0xd23a[468],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":37},{"\x66\x69\x65\x6C\x64":_0xd23a[671],"\x61\x6C\x69\x61\x73":_0xd23a[581],"\x67\x72\x6F\x75\x70\x42\x79":1,"\x63\x75\x73\x74\x6F\x6D":0,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[672],"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":38},{"\x66\x69\x65\x6C\x64":_0xd23a[673],"\x61\x6C\x69\x61\x73":_0xd23a[649],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":38},{"\x66\x69\x65\x6C\x64":_0xd23a[674],"\x61\x6C\x69\x61\x73":_0xd23a[675],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[527],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x63\x75\x73\x74\x6F\x6D":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":38},{"\x66\x69\x65\x6C\x64":_0xd23a[168],"\x61\x6C\x69\x61\x73":_0xd23a[168],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":39,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[676],"\x61\x6C\x69\x61\x73":_0xd23a[676],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":39,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[677],"\x61\x6C\x69\x61\x73":_0xd23a[677],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":39,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[678],"\x61\x6C\x69\x61\x73":_0xd23a[678],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":39,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[671],"\x61\x6C\x69\x61\x73":_0xd23a[671],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":39,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[679],"\x61\x6C\x69\x61\x73":_0xd23a[679],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":39,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[680],"\x61\x6C\x69\x61\x73":_0xd23a[680],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":39,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[681],"\x61\x6C\x69\x61\x73":_0xd23a[681],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":39,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[682],"\x61\x6C\x69\x61\x73":_0xd23a[682],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":39,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[683],"\x61\x6C\x69\x61\x73":_0xd23a[683],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":39,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[684],"\x61\x6C\x69\x61\x73":_0xd23a[684],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":39,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[516],"\x61\x6C\x69\x61\x73":_0xd23a[516],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":39,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[685],"\x61\x6C\x69\x61\x73":_0xd23a[685],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":39,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[516],"\x61\x6C\x69\x61\x73":_0xd23a[516],"\x67\x72\x6F\x75\x70\x42\x79":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":40,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[686],"\x61\x6C\x69\x61\x73":_0xd23a[687],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":40,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xd23a[681],"\x61\x6C\x69\x61\x73":_0xd23a[681],"\x67\x72\x6F\x75\x70\x42\x79":1,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":41,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[672],"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[168],"\x61\x6C\x69\x61\x73":_0xd23a[688],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xd23a[525],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":41,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xd23a[689],"\x61\x6C\x69\x61\x73":_0xd23a[690],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":41,"\x66\x6F\x72\x6D\x61\x74":_0xd23a[615],"\x63\x75\x73\x74\x6F\x6D":1}],{ignoreDuplicates:true,individualHooks:true})})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[461])})[_0xd23a[166]](function(_0xb786x5){console[_0xd23a[5]](_0xd23a[460],_0xb786x5)});models[_0xd23a[700]][_0xd23a[69]]([{id:1,name:_0xd23a[699],defaultEntry:true}],{ignoreDuplicates:true,individualHooks:true})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[294])});models[_0xd23a[723]][_0xd23a[692]]({where:{context:_0xd23a[241]}})[_0xd23a[6]](function(){models[_0xd23a[723]][_0xd23a[69]]([{context:_0xd23a[241],exten:_0xd23a[702],priority:1,app:_0xd23a[703],appdata:_0xd23a[704],type:_0xd23a[705]},{context:_0xd23a[241],exten:_0xd23a[702],priority:2,app:_0xd23a[703],appdata:_0xd23a[706],type:_0xd23a[705]},{context:_0xd23a[241],exten:_0xd23a[702],priority:3,app:_0xd23a[707],appdata:_0xd23a[708],type:_0xd23a[705]},{context:_0xd23a[241],exten:_0xd23a[702],priority:4,app:_0xd23a[709],appdata:_0xd23a[356],type:_0xd23a[705]},{context:_0xd23a[241],exten:_0xd23a[702],priority:5,app:_0xd23a[710],appdata:_0xd23a[711],type:_0xd23a[705]},{context:_0xd23a[241],exten:_0xd23a[702],priority:6,app:_0xd23a[707],appdata:_0xd23a[712],type:_0xd23a[705]},{context:_0xd23a[241],exten:_0xd23a[702],priority:7,app:_0xd23a[707],appdata:_0xd23a[713],type:_0xd23a[705]},{context:_0xd23a[241],exten:_0xd23a[702],priority:8,app:_0xd23a[707],appdata:_0xd23a[714],type:_0xd23a[705]},{context:_0xd23a[241],exten:_0xd23a[702],priority:9,app:_0xd23a[707],appdata:_0xd23a[715],type:_0xd23a[705]},{context:_0xd23a[241],exten:_0xd23a[702],priority:10,app:_0xd23a[707],appdata:_0xd23a[716],type:_0xd23a[705]},{context:_0xd23a[241],exten:_0xd23a[702],priority:11,app:_0xd23a[707],appdata:_0xd23a[717],type:_0xd23a[705]},{context:_0xd23a[241],exten:_0xd23a[702],priority:12,app:_0xd23a[707],appdata:_0xd23a[718],type:_0xd23a[705]},{context:_0xd23a[241],exten:_0xd23a[702],priority:13,app:_0xd23a[707],appdata:_0xd23a[719],type:_0xd23a[705]},{context:_0xd23a[241],exten:_0xd23a[702],priority:14,app:_0xd23a[720],appdata:_0xd23a[721],type:_0xd23a[705]},{context:_0xd23a[241],exten:_0xd23a[702],priority:15,app:_0xd23a[722],appdata:_0xd23a[356],type:_0xd23a[705]}],{ignoreDuplicates:true,individualHooks:true})})[_0xd23a[6]](function(){console[_0xd23a[5]](_0xd23a[701])});models[_0xd23a[70]][_0xd23a[176]]({include:[{model:models[_0xd23a[723]],as:_0xd23a[730],where:{app:_0xd23a[731]}}]})[_0xd23a[6]](function(_0xb786xa){console[_0xd23a[5]](_0xd23a[724]);var _0xb786x1d=[];_[_0xd23a[175]](_0xb786xa,function(_0xb786x1e){_[_0xd23a[175]](_0xb786x1e.UserExtensions,function(_0xb786x1f){_0xb786x1f[_0xd23a[725]]= _0xd23a[726]+ _0xb786x1e[_0xd23a[727]]+ _0xd23a[728];_0xb786x1d[_0xd23a[173]](_0xb786x1f[_0xd23a[729]]())})});return _0xb786x1d})[_0xd23a[19]]()[_0xd23a[166]](function(_0xb786x5){console[_0xd23a[5]](_0xb786x5)}) \ No newline at end of file +/** + * Populate DB with sample data on server start + * to disable, edit config/environment/index.js, and set `seedDB: false` + */ +'use strict'; + +var _ = require('lodash'); +var models = require('../models'); +var sequelize = require('../models').sequelize; + +models.User.bulkCreate([{ + provider: 'local', + role: 'agent', + fullname: 'Giuseppe Careri', + email: 'giuseppe.careri@xcally.com', + name: 'giuseppe.careri', + password: '75xcally75', + defaultuser: 'giuseppe.careri', + host: 'dynamic', + type: 'FRIEND', + transport: 'udp', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1000 +}, { + provider: 'local', + role: 'agent', + fullname: 'Daniele Cinti', + email: 'daniele.cinti@xcally.com', + name: 'daniele.cinti', + password: '75xcally75', + defaultuser: 'daniele.cinti', + host: 'dynamic', + type: 'FRIEND', + transport: 'udp', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1001 +}, { + provider: 'local', + role: 'agent', + fullname: 'Andrea Bianco', + email: 'andrea.bianco@xcally.com', + name: 'andrea.bianco', + password: '75xcally75', + defaultuser: 'andrea.bianco', + host: 'dynamic', + type: 'FRIEND', + transport: 'udp', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1002 +}, { + provider: 'local', + role: 'agent', + fullname: 'Massimiliano Bungaro', + email: 'massimiliano.bungaro@xcally.com', + name: 'massimiliano.bungaro', + password: '75xcally75', + defaultuser: 'massimiliano.bungaro', + host: 'dynamic', + type: 'FRIEND', + transport: 'udp', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1003 +}, { + provider: 'local', + role: 'agent', + fullname: 'Valerio Ciotta', + email: 'valerio.ciotta@xcally.com', + name: 'valerio.ciotta', + password: '75xcally75', + defaultuser: 'valerio.ciotta', + host: 'dynamic', + type: 'FRIEND', + transport: 'udp', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1004 +}, { + provider: 'local', + role: 'admin', + fullname: 'Clarotech', + email: 'clarotech@xcally.com', + name: 'clarotech', + password: 'clarotech', + defaultuser: 'clarotech', + host: 'dynamic', + type: 'FRIEND', + transport: 'udp', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1005 +}, { + provider: 'local', + role: 'agent', + fullname: 'Abigael', + email: 'abigael@xcally.com', + name: 'abigael', + password: '75xcally75', + defaultuser: 'abigael', + host: 'dynamic', + type: 'FRIEND', + transport: 'udp', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1006 +}, { + provider: 'local', + role: 'agent', + fullname: 'Tony Russell', + email: 'tonyr@xclarotech.co.za', + name: 'tony.russell', + password: 'clarotech', + defaultuser: 'tony.russell', + host: 'dynamic', + type: 'FRIEND', + transport: 'udp', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1007 +}, { + provider: 'local', + role: 'agent', + fullname: 'Colin Fair', + email: 'colinf@xclarotech.co.za', + name: 'colin.fair', + password: 'clarotech', + defaultuser: 'colin.fair', + host: 'dynamic', + type: 'FRIEND', + transport: 'udp', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1008 +}, { + provider: 'local', + role: 'agent', + fullname: 'Diego Gosmar', + email: 'diego.gosmar@xcally.com', + name: 'diego.gosmar', + password: '75xcally75', + defaultuser: 'diego.gosmar', + host: 'dynamic', + type: 'FRIEND', + transport: 'udp', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1009 +}, { + provider: 'local', + role: 'agent', + fullname: 'Giuseppe Innamorato', + email: 'giuseppe.innamorato@xcally.com', + name: 'giuseppe.innamorato', + password: '75xcally75', + defaultuser: 'giuseppe.innamorato', + host: 'dynamic', + type: 'FRIEND', + transport: 'upd', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1010 +}, { + provider: 'local', + role: 'agent', + fullname: 'Alessandra Bessone', + email: 'alessandra.bessone@xcally.com', + name: 'alessandra.bessone', + password: '75xcally75', + defaultuser: 'alessandra.bessone', + host: 'dynamic', + type: 'FRIEND', + transport: 'upd', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1011 +}, { + provider: 'local', + role: 'agent', + fullname: 'Felice Briscese', + email: 'felice.briscese@xcally.com', + name: 'felice.briscese', + password: '75xcally75', + defaultuser: 'felice.briscese', + host: 'dynamic', + type: 'FRIEND', + transport: 'upd', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1012 +}, { + provider: 'local', + role: 'admin', + fullname: 'xCally', + email: 'info.xcally@xcally.com', + name: 'xcally', + password: '388xshuttle388', + defaultuser: 'xcally', + host: 'dynamic', + type: 'FRIEND', + transport: 'udp', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1013 +}, { + provider: 'local', + role: 'agent', + fullname: 'John Doe', + email: 'john.doe@gmail.com', + name: 'john.doe', + password: '75xcally75', + defaultuser: 'john.doe', + host: 'dynamic', + type: 'FRIEND', + transport: 'udp', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1014 +}, { + provider: 'local', + role: 'agent', + fullname: 'Jane Miller', + email: 'jane.miller@gmail.com', + name: 'jane.miller', + password: '75xcally75', + defaultuser: 'jane.miller', + host: 'dynamic', + type: 'FRIEND', + transport: 'udp', + allow: 'alaw;ulaw;gsm', + qualify: 'yes', + nat: 'force_rport,comedia', + disallow: 'all', + context: 'from-sip', + internal: 1015 +}], { + ignoreDuplicates: true, + individualHooks: true +}).then(function() { + console.log('Finished populating users'); +}); + +models.Trunk.bulkCreate([{ + name: 'citalia', + type: 'friend', + insecure: 'port,invite', + defaultuser: '01119827770', + secret: 'T!NPnv-qjCMe9v', + password: 'T!NPnv-qjCMe9v', + context: 'from-voip-provider', + language: 'it', + host: 'voip.eutelia.it', + fromdomain: 'voip.eutelia.it', + dtmfmode: 'rfc2833', + qualify: 'yes', + nat: 'force_rport,comedia', + callerid: ' "" <>', + limitonpeers: 'yes', + callcounter: 'yes', + disallow: 'all', + allow: 'ulaw;alaw;gsm', + canreinvite: 'no', + directmedia: 'no' +}], { + ignoreDuplicates: true, + individualHooks: true +}).then(function() { + console.log('Finished populating trunks'); +}); + +// Init modules table +var newModules = [{ + id: 1, + name: "dashboard", + title: "APPLICATION_DASHBOARD", + ModuleId: null, + path: '/dashboard/voice' +}, { + id: 2, + name: "yourdashboards", + title: "APPLICATION_YOUR_DASHBOARDS", + ModuleId: null, + path: '/tools/yourdashboards/show/1' +}, { + id: 3, + name: "staff", + title: "APPLICATION_STAFF", + ModuleId: null, + path: '/staff/agents/list' +}, { + id: 4, + name: "agents", + title: "APPLICATION_AGENTS", + ModuleId: 3, + path: '/staff/agents/list' +}, { + id: 5, + name: "contactmanager", + title: "APPLICATION_CONTACT_MANAGER", + ModuleId: null, + path: '/contactmanager/contacts/list' +}, { + id: 6, + name: "channels", + title: "APPLICATION_CHANNELS", + ModuleId: null, + path: '/channels/voice/queues/list' +}, { + id: 7, + name: "voice", + title: "APPLICATION_VOICE", + ModuleId: 6, + path: '/channels/voice/queues/list' +}, { + id: 8, + name: "chat", + title: "APPLICATION_CHAT", + ModuleId: 6, + path: '/channels/chat/websites/list' +}, { + id: 9, + name: "mail", + title: "APPLICATION_MAIL", + ModuleId: 6, + path: '/channels/mail/accounts/list' +}, { + id: 10, + name: "fax", + title: "APPLICATION_FAX", + ModuleId: 6, + path: '/channels/fax/accounts/list' +}, { + id: 11, + name: "sms", + title: "APPLICATION_SMS", + ModuleId: 6, + path: '/channels/sms/accounts/list' +}, { + id: 12, + name: "realtime", + title: "APPLICATION_REALTIME", + ModuleId: 6, + path: '/channels/realtime/view/agents' +}, { + id: 13, + name: "tools", + title: "APPLICATION_TOOLS", + ModuleId: null, + path: '/tools/triggers/list' +}, { + id: 14, + name: "square", + title: "APPLICATION_CALLYSQUARE", + ModuleId: null, + path: '/square/projects/list' +}, { + id: 15, + name: "jscripty", + title: "APPLICATION_JSCRIPTY", + ModuleId: null, + path: '/jscripty/projects/list' +}, { + id: 16, + name: "motiondialer", + title: "APPLICATION_MOTION_DIALER", + ModuleId: null, + path: '/motiondialer/lists/list' +}, { + id: 17, + name: "analytics", + title: "APPLICATION_ANALYTICS", + ModuleId: null, + path: '/analytics/reports/list' +}, { + id: 18, + name: "setting", + title: "APPLICATION_SETTINGS", + ModuleId: null, + path: '/setting/updates/list' +}, { + id: 19, + name: "integration", + title: "APPLICATION_INTEGRATION", + ModuleId: null, + path: '/market' +}, { + id: 20, + name: "openchannel", + title: "APPLICATION_OPEN_CHANNEL", + ModuleId: 6, + path: '/channels/openchannel/accounts/list' +}, { + id: 21, + name: "routes", + title: "APPLICATION_ROUTES", + ModuleId: 7, + path: '/channels/voice/routes' +}, { + id: 22, + name: "contexts", + title: "APPLICATION_CONTEXTS", + ModuleId: 7, + path: '/channels/voice/contexts/list' +}, { + id: 23, + name: "voicemails", + title: "APPLICATION_VOICEMAILS", + ModuleId: 7, + path: '/channels/voice/voicemails/list' +}, { + id: 24, + name: "moh", + title: "APPLICATION_MOH", + ModuleId: 7, + path: '/channels/voice/moh/list' +}, { + id: 25, + name: "recordings", + title: "APPLICATION_RECORDINGS", + ModuleId: 7, + path: '/channels/voice/recordings/list' +}, { + id: 26, + name: "realtime", + title: "APPLICATION_REALTIME", + ModuleId: 7, + path: '/channels/voice/realtime/view/agents' +}, { + id: 27, + name: "chanspy", + title: "APPLICATION_CHANSPY", + ModuleId: 7, + path: '/channels/voice/chanspy/list' +}, { + id: 28, + name: "dispositions", + title: "APPLICATION_DISPOSITIONS", + ModuleId: 7, + path: '/channels/voice/dispositions/list' +}]; + +models.Module.findAll().then(function(oldModules) { + var bulkModules = []; + oldModules = _.map(oldModules, 'id'); + newModules.forEach(function(module) { + if (_.includes(oldModules, module.id)) { + bulkModules.push(models.Module.update(module, { + where: { + id: module.id + } + })); + } else { + bulkModules.push(models.Module.create(module)); + } + }); + return bulkModules; +}).all().then(function() { + console.log('Finished populating modules'); +}).catch(function(err) { + console.log('Error populating modules:', err); +}); + +models.Team.create({ + name: "T1", + description: "Default Team", + defaultEntry: true +}).then(function(team) { + models.User.findAll({ + where: { + role: 'agent' + } + }).then(function(users) { + team.addUsers(_.map(users, 'id')).then(function() { + models.ChatQueue.create({ + name: "CQ1", + description: "CQ1 Desc", + timeout: 5, + strategy: "rrmemory" + }).then(function(chatQueue) { + console.log('Finished populating chat queue 1'); + models.Team.findOne({ + where: { + name: 'T1' + }, + include: [{ + all: true + }] + }).then(function(team) { + chatQueue.addUsers(_.map(team.Users, 'id')).catch(function(err) { + // console.error(err); + }); + }).catch(function(err) { + // console.error(err); + }); + }); + models.MailQueue.create({ + name: "MQ1", + description: "MQ1 Desc", + timeout: 5, + strategy: "rrmemory" + }).then(function(mailQueue) { + console.log('Finished populating mail queue 1'); + models.Team.findOne({ + where: { + name: 'T1' + }, + include: [{ + all: true + }] + }).then(function(team) { + if (team) { + console.log('team found'); + } else { + console.log('test'); + } + mailQueue.addUsers(_.map(team.Users, 'id')).catch(function(err) { + // console.error(err); + }); + }).catch(function(err) { + // console.error(err); + }); + }); + models.FaxQueue.create({ + name: "FQ1", + description: "FQ1 Desc", + timeout: 5, + strategy: "rrmemory" + }).then(function(faxQueue) { + console.log('Finished populating fax queue 1'); + models.Team.findOne({ + where: { + name: 'T1' + }, + include: [{ + all: true + }] + }).then(function(team) { + faxQueue.addUsers(_.map(team.Users, 'id')).catch(function(err) { + // console.error(err); + }); + }).catch(function(err) { + // console.error(err); + }); + }); + }).catch(function(err) { + // console.error(err); + }); + }).catch(function(err) { + // console.error(err); + }); +}).catch(function(err) { + // console.error(err); +}); + +models.MailAccount.create({ + name: "xCally Development", + description: "xCally Development", + address: "development@xcally.com" +}).then(function(mailAccount) { + console.log('Finished populating mail account'); + models.MailServerIn.create({ + description: 'xcally', + host: 'imap.xcally.com', + username: 'development@xcally.com', + password: 'phokucloka', + port: 143, + mailbox: 'INBOX', + ssl: false, + delete: false, + filter: 'UNSEEN', + protocol: 'IMAP', + MailAccountId: mailAccount.id + }).then(function() { + console.log('Finished populating mail server in'); + models.MailServerOut.create({ + description: 'xcally', + host: 'smtp.xcally.com', + username: 'development@xcally.com', + password: 'phokucloka', + port: 587, + ssl: false, + MailAccountId: mailAccount.id + }).then(function() { + console.log('Finished populating mail server out'); + }).catch(function(err) { + // console.error(err); + }); + }).catch(function(err) { + // console.error(err); + }); +}); +// models.FaxAccount +// .create({ +// description: 'FA1 Desc', +// name: 'FA1', +// phone: '01119827770', +// ecm: true, +// faxheader: 'xCALLY', +// localid: '01119827770', +// maxrate: '9600', +// minrate: '14400', +// }) +// .then(function(faxAccount) { +// console.log('Finished populating fax account'); +// +// models.Trunk +// .findOne({ +// where: { +// name: 'citalia' +// } +// }) +// .then(function(trunk) { +// faxAccount +// .setTrunk(trunk) +// .catch(function(err) { +// // console.error(err); +// }); +// +// +// models.VoiceExtension +// .create({ +// context: 'from-voip-provider', +// exten: '01119827770', +// priority: 1, +// app: 'Goto', +// appdata: 'inbound-fax,s,1', +// type: 'inbound-fax' +// }) +// +// }) +// .catch(function(err) { +// // console.error(err); +// }); +// +// models.FaxQueue +// .findAll() +// .then(function(faxQueues) { +// models.FaxApplication +// .create({ +// app: 'queue', +// appdata: faxQueues[0].id, +// priority: 1, +// timeout: 30, +// FaxAccountId: faxAccount.id, +// FaxQueueId: faxQueues[0].id +// }) +// .then(function() { +// console.log('Finished populating chat website application 1'); +// }) +// .catch(function(err) { +// // console.error(err); +// }); +// +// models.FaxApplication +// .create({ +// app: 'queue', +// appdata: faxQueues[1].id, +// priority: 2, +// timeout: 30, +// FaxAccountId: faxAccount.id, +// FaxQueueId: faxQueues[1].id +// }) +// .then(function() { +// console.log('Finished populating chat website application 2'); +// }) +// .catch(function(err) { +// // console.error(err); +// }); +// }) +// .catch(function(err) { +// // console.error(err); +// }); +// }) +// .catch(function(err) { +// // console.error(err); +// }); +// models.FaxAccount +// .create({ +// description: 'FA1 Desc', +// name: 'FA1', +// phone: '01119827770', +// ecm: true, +// faxheader: 'xCALLY', +// localid: '01119827770', +// maxrate: '9600', +// minrate: '14400', +// }) +// .then(function (faxAccount) { +// console.log('Finished populating fax account'); +// +// models.Trunk +// .findOne({ +// where: { +// name: 'citalia' +// } +// }) +// .then(function (trunk) { +// faxAccount +// .setTrunk(trunk) +// .catch(function (err) { +// // console.error(err); +// }); +// +// +// models.VoiceExtension +// .create({ +// context: 'from-voip-provider', +// exten: '01119827770', +// priority: 1, +// app: 'Goto', +// appdata: 'inbound-fax,s,1', +// type: 'inbound-fax', +// TrunkId: trunk.name +// }) +// +// }) +// .catch(function (err) { +// // console.error(err); +// }); +// +// models.FaxQueue +// .findAll() +// .then(function (faxQueues) { +// models.FaxApplication +// .create({ +// app: 'queue', +// appdata: faxQueues[0].id, +// priority: 1, +// timeout: 30, +// FaxAccountId: faxAccount.id, +// FaxQueueId: faxQueues[0].id +// }) +// .then(function () { +// console.log('Finished populating chat website application 1'); +// }) +// .catch(function (err) { +// // console.error(err); +// }); +// +// models.FaxApplication +// .create({ +// app: 'queue', +// appdata: faxQueues[1].id, +// priority: 2, +// timeout: 30, +// FaxAccountId: faxAccount.id, +// FaxQueueId: faxQueues[1].id +// }) +// .then(function () { +// console.log('Finished populating chat website application 2'); +// }) +// .catch(function (err) { +// // console.error(err); +// }); +// }) +// .catch(function (err) { +// // console.error(err); +// }); +// }) +// .catch(function (err) { +// // console.error(err); +// }); +// models.VoiceExtension +// .bulkCreate([{ +// context: 'outbound-fax', +// exten: 's', +// priority: 1, +// app: 'NoOp', +// appdata: 'Fax UUID: ${FAXUUID}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 's', +// priority: 2, +// app: 'UserEvent', +// appdata: 'Fax,uuid: ${FAXUUID}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 's', +// priority: 3, +// app: 'Set', +// appdata: 'FAXOPT(filename):${FAXFILE}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 's', +// priority: 4, +// app: 'Set', +// appdata: 'FAXOPT(ecm):${ECM}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 's', +// priority: 5, +// app: 'Set', +// appdata: 'FAXOPT(headerinfo):${FAXHEADER}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 's', +// priority: 6, +// app: 'Set', +// appdata: 'FAXOPT(localstationid):${LOCALID}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 's', +// priority: 7, +// app: 'Set', +// appdata: 'FAXOPT(maxrate):${MAXRATE}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 's', +// priority: 8, +// app: 'Set', +// appdata: 'FAXOPT(minrate):${MINRATE}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 's', +// priority: 9, +// app: 'SendFAX', +// appdata: '${FAXFILE},d', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 's', +// priority: 10, +// app: 'NoOp', +// appdata: 'ERROR "${TIMESTAMP}" "NO_STATUS" "NO_PAGES"', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 'h', +// priority: 1, +// app: 'NoOp', +// appdata: 'FAXOPT(ecm) : ${FAXOPT(ecm)}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 'h', +// priority: 2, +// app: 'NoOp', +// appdata: 'FaxStatus : ${FAXSTATUS}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 'h', +// priority: 3, +// app: 'NoOp', +// appdata: 'FaxStatusString : ${FAXSTATUSSTRING}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 'h', +// priority: 4, +// app: 'NoOp', +// appdata: 'FaxError : ${FAXERROR}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 'h', +// priority: 5, +// app: 'NoOp', +// appdata: 'RemoteStationID : ${REMOTESTATIONID}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 'h', +// priority: 6, +// app: 'NoOp', +// appdata: 'FaxPages : ${FAXPAGES}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 'h', +// priority: 7, +// app: 'NoOp', +// appdata: 'FaxBitRate : ${FAXBITRATE}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 'h', +// priority: 8, +// app: 'NoOp', +// appdata: 'FaxResolution : ${FAXRESOLUTION}', +// type: 'outbound-fax' +// }, { +// context: 'outbound-fax', +// exten: 'h', +// priority: 9, +// app: 'NoOp', +// appdata: 'OK "${TIMESTAMP}" "${FAXSTATUSSTRING}" "${FAXPAGES}"', +// type: 'outbound-fax' +// }], { +// ignoreDuplicates: true +// }) +// .then(function() { +// console.log('Finished populating fax outbound voice extension'); +// }); +// +// models.VoiceExtension +// .bulkCreate([{ +// context: 'inbound-fax', +// exten: 's', +// priority: 1, +// app: 'NoOp', +// appdata: '**** FAX RECEIVED from ${CALLERID(num)} ${STRFTIME(${EPOCH},,%c)} ****', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 2, +// app: 'Set', +// appdata: 'FAXOPT(ecm):yes', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 3, +// app: 'Set', +// appdata: 'FILENAME:${UNIQUEID}', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 4, +// app: 'Set', +// appdata: 'FAXFILE:${FILENAME}.tif', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 5, +// app: 'Set', +// appdata: 'FAXOPT(headerinfo):Received by XeniaLAB ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M)}', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 6, +// app: 'Set', +// appdata: 'FAXOPT(localstationid):${LOCALID}', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 7, +// app: 'Set', +// appdata: 'FAXOPT(maxrate):${MAXRATE}', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 8, +// app: 'Set', +// appdata: 'FAXOPT(minrate):${MINRATE}', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 9, +// app: 'NoOp', +// appdata: 'FAXOPT(ecm) : ${FAXOPT(ecm)}', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 10, +// app: 'NoOp', +// appdata: 'FAXOPT(headerinfo) : ${FAXOPT(headerinfo)}', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 11, +// app: 'NoOp', +// appdata: 'FAXOPT(localstationid) : ${FAXOPT(localstationid)}', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 12, +// app: 'NoOp', +// appdata: 'FAXOPT(maxrate) : ${FAXOPT(maxrate)}', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 13, +// app: 'NoOp', +// appdata: 'FAXOPT(minrate) : ${FAXOPT(minrate)}', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 14, +// app: 'NoOp', +// appdata: '**** RECEIVING FAX : ${FAXFILE} ****', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 15, +// app: 'ReceiveFax', +// appdata: '/tmp/${FAXFILE}', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 's', +// priority: 16, +// app: 'Hangup', +// type: 'inbound-fax' +// }, { +// context: 'inbound-fax', +// exten: 'h', +// priority: 1, +// app: 'NoOp', +// appdata: 'FAXOPT(ecm) : ${FAXOPT(ecm)}', +// type: 'inbound-fax' +// }], { +// ignoreDuplicates: true +// }) +// .then(function() { +// console.log('Finished populating fax outbound voice extension'); +// }); + +models.SquareProject.bulkCreate([{ + name: "project1", + description: "description project" +}], { + ignoreDuplicates: true +}).then(function() { + console.log('Finished populating square projects'); +}); + +models.ChatWebsite.create({ + name: 'xCally Shop', + description: 'xCally Shop', + address: 'http://www.xcally.com/shop/', + color: '#f51111', + color_focus: '#f51111', + color_button: '#f51111', + remote: 'http://localhost:9000', + animation: true, + header_shape: 'squared', + header_online: 'We are here!', + online_message: 'Questions? Insert your name and email address to start a live-chat with our support team.', + username_placeholder: 'Your name', + email_placeholder: 'Your email address', + start_chat_button: 'Chat', + header_offline: 'Contact us', + offline_message: "We're not online.
It doesn't mean we're not there to help - leave your message below and we'll be in touch as soon as possible.'", + enquiry_message_placeholder: 'Your message...', + enquiry_button: 'Leave message', + download_transcript: true +}).then(function(chatWebsite) { + console.log('Finished populating chat website'); + models.ChatQueue.findAll().then(function(chatQueues) { + models.ChatApplication.create({ + app: 'queue', + appdata: chatQueues[0].id, + priority: 1, + timeout: 30, + ChatWebsiteId: chatWebsite.id, + ChatQueueId: chatQueues[0].id + }).then(function() { + console.log('Finished populating chat website application 1'); + }).catch(function(err) { + // console.error(err); + }); + models.ChatApplication.create({ + app: 'queue', + appdata: chatQueues[1].id, + priority: 2, + timeout: 30, + ChatWebsiteId: chatWebsite.id, + ChatQueueId: chatQueues[1].id + }).then(function() { + console.log('Finished populating chat website application 2'); + }).catch(function(err) { + // console.error(err); + }); + }).catch(function(err) { + // console.error(err); + }); +}).catch(function(err) { + // console.error(err); +}); + +models.Variable.bulkCreate([{ + name: "variable1", + description: "description project" +}], { + ignoreDuplicates: true +}).then(function() { + console.log('Finished populating variables'); +}); + +models.VoiceContext.bulkCreate([{ + name: "from-sip", + description: "Default context (DO NOT DELETE)", + defaultEntry: true +}, { + name: "from-voip-provider", + description: "Default context (DO NOT DELETE)", + defaultEntry: true +}, { + name: "inbound-fax", + description: "Default context (DO NOT DELETE)", + defaultEntry: true +}, { + name: "outbound-fax", + description: "Default context (DO NOT DELETE)", + defaultEntry: true +}, { + name: "from-voicemail", + description: "Default context (DO NOT DELETE)", + defaultEntry: true +}], { + ignoreDuplicates: true, + individualHooks: true +}).then(function() { + console.log('Finished populating context variables'); +}); + +models.VoiceMusicOnHold.bulkCreate([{ + name: "default", + mode: "files", + directory: 'var/lib/asterisk/moh', + sort: 'alpha', + format: 'wav', + defaultEntry: true +}], { + ignoreDuplicates: true, + individualHooks: true +}).then(function() { + console.log('Finished populating moh variables'); +}); + +models.Setting.bulkCreate([{ + id: 1, + min_internal: 1000, + soundPath: '/var/opt/motion/server/files/sounds/converted' +}], { + ignoreDuplicates: true, + individualHooks: true +}).then(function() { + console.log('Finished populating moh variables'); +}); + +models.Dashboard.bulkCreate([{ + id: 1, + name: 'Motion Dashboard', + model: JSON.stringify({ + title: 'Motion Dashboard', + rows: [{ + columns: [{ + styleClass: 'col-md-4', + widgets: [{ + type: 'clock', + title: 'Clock', + config: { + timePattern: 'hh:mm:ss a', + datePattern: 'dddd, MMMM Do YYYY' + } + }] + }, { + styleClass: 'col-md-8', + widgets: [{ + type: 'iframe', + title: 'Iframe', + config: { + url: 'https://demo.xcally.com/shop/' + } + }] + }] + }] + }), + defaultEntry: true, + editable: false +}], { + ignoreDuplicates: true, + individualHooks: true +}).then(function() { + console.log('Finished populating moh variables'); +}); + +var newIntegrations = [{ + name: 'Zendesk', + version: '1.0.0', + author: 'XeniaLAB s.r.l.', + logo: 'assets/images/media/zendesk2.png', + state: 'zendesk', + description: 'Start using xCALLY - Zendesk integration: Auto-Generated Tickets, fully customizable comments, Custom Fields management, Tag support and Simple Setup', + link: 'https://wiki.xcallymotion.com/display/XMD/Zendesk+integration' +}, { + name: 'Salesforce', + version: '1.0.0', + author: 'XeniaLAB s.r.l.', + logo: 'assets/images/media/salesforce2.png', + state: 'salesforce', + description: 'Start using xCALLY - Salesforce integration: Auto-Generated Tasks, fully customizable comments, Custom Fields management and OpenCTI support', + link: 'https://wiki.xcallymotion.com/display/XMD/Salesforce+integration' +}, { + name: 'iFrame', + version: '1.0.0', + author: 'XeniaLAB s.r.l.', + logo: 'assets/images/media/iframe.png', + state: 'iframe', + description: 'Start using iFrame integration: enable your agents to view external pages (like your CRM) directly from Motion GUI', + link: 'https://wiki.xcallymotion.com/display/XMD/iFrame+Integration' +}, { + name: 'Desk.com', + version: '1.0.0', + author: 'XeniaLAB s.r.l.', + logo: 'assets/images/media/desk2.png', + state: 'desk', + description: 'Description for Desk.com asdnvlsdbjv saeklbvqwoVBQ' +}, { + name: 'Freshdesk', + version: '1.0.0', + author: 'XeniaLAB s.r.l.', + logo: 'assets/images/media/freshdesk.png', + state: 'freshdesk', + description: 'Description for Freshdesk' +}, { + name: 'SugarCRM', + version: '1.0.0', + author: 'XeniaLAB s.r.l.', + logo: 'assets/images/media/sugarcrm2.png', + state: 'sugarcrm', + description: 'Description for SugarCRM' +}]; + +models.Integration + .findAll() + .then(function(oldIntegrations) { + var bulkIntegrations = []; + oldIntegrations = _.map(oldIntegrations, 'state'); + newIntegrations.forEach(function(integration) { + if (_.includes(oldIntegrations, integration.state)) { + bulkIntegrations.push(models.Integration.update(integration, { + where: { + state: integration.state + } + })); + } else { + bulkIntegrations.push(models.Integration.create(integration)); + } + }); + return bulkIntegrations; + }) + .all() + .then(function() { + console.log('Finished populating integrations'); + }) + .catch(function(err) { + console.log('Error populating integrations:', err); + }); + +var newDefaulReports = [{ + "id": 1, + "name": "Queue - Details", + "description": null, + "parent": "j4_3", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 2, + "name": "Details", + "description": "Calls details (cdr)", + "parent": "j20_1", + "table": "report_call_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 3, + "name": "Outbound", + "description": "Manual outbound calls detail", + "parent": "j20_1", + "table": "report_call_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"type\",\"value\":\"outbound\"}]}}" +}, { + "id": 4, + "name": "Calls by Queue", + "description": null, + "parent": "j4_7", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 5, + "name": "Details", + "description": null, + "parent": "j4_5", + "table": "report_agent_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"agentcomplete\",\"value\":\"1\"}]}}" +}, { + "id": 6, + "name": "Calls by Agent", + "description": null, + "parent": "j4_5", + "table": "report_agent_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 7, + "name": "Calls by Queue", + "description": null, + "parent": "j4_5", + "table": "report_agent_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"agentcomplete\",\"value\":\"1\"}]}}" +}, { + "id": 8, + "name": "Answer Time by Queue", + "description": null, + "parent": "j4_5", + "table": "report_agent_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"agentcomplete\",\"value\":\"1\"}]}}" +}, { + "id": 9, + "name": "Disconnection Cause", + "description": null, + "parent": "j4_5", + "table": "report_agent_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"agentcomplete\",\"value\":\"1\"}]}}" +}, { + "id": 10, + "name": "Details", + "description": null, + "parent": "j4_6", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"queuecallercomplete\",\"value\":\"0\"}]}}" +}, { + "id": 11, + "name": "Unanswered by Queue", + "description": null, + "parent": "j4_6", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"queuecallercomplete\",\"value\":\"0\"}]}}" +}, { + "id": 12, + "name": "Exit Cause", + "description": null, + "parent": "j4_6", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"queuecallerexit\",\"value\":\"1\"}]}}" +}, { + "id": 13, + "name": "Abandon Time by Queue", + "description": null, + "parent": "j4_6", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"queuecallerabandon\",\"value\":\"1\"}]}}" +}, { + "id": 14, + "name": "Calls by Date", + "description": null, + "parent": "j4_7", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 15, + "name": "Calls by Hour", + "description": null, + "parent": "j4_7", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 16, + "name": "Calls by Day", + "description": null, + "parent": "j4_7", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 17, + "name": "Calls by Type", + "description": null, + "parent": "j20_1", + "table": "report_call_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 18, + "name": "Outbound Calls Disposition", + "description": "Outbound calls grouped by disposition", + "parent": "j20_1", + "table": "report_call_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"type\",\"value\":\"outbound\"}]}}" +}, { + "id": 19, + "name": "Pause Time", + "description": null, + "parent": "j4_4", + "table": "report_member_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"type\",\"value\":\"PAUSE\"},{\"condition\":\"=\",\"field\":\"channel\",\"value\":\"voice\"}]}}" +}, { + "id": 20, + "name": "Login Time", + "description": null, + "parent": "j4_4", + "table": "report_member_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"type\",\"value\":\"LOGIN\"},{\"condition\":\"=\",\"field\":\"channel\",\"value\":\"voice\"}]}}" +}, { + "id": 21, + "name": "Website Summary", + "description": null, + "parent": "j4_1", + "table": "report_chat_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 22, + "name": "Session Detail", + "description": null, + "parent": "j4_1", + "table": "report_chat_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}", +}, { + "id": 23, + "name": "Chat by Agent", + "description": null, + "parent": "j4_1", + "table": "report_chat_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"complete\",\"value\":\"1\"}]}}" +}, { + "id": 24, + "name": "Chat by Queue", + "description": null, + "parent": "j4_1", + "table": "report_chat_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"application\",\"value\":\"queue\"}]}}" +}, { + "id": 25, + "name": "Details", + "description": "Agents status details", + "parent": "j4_4", + "table": "report_member_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"channel\",\"value\":\"voice\"}]}}" +}, { + "id": 26, + "name": "Summary", + "description": "CallySquare Summary", + "parent": "j112_1", + "table": "report_square_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 27, + "name": "Blocks", + "description": "CallySquare Blocks", + "parent": "j112_1", + "table": "report_square_details_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 28, + "name": "Login Details", + "description": "Agents status details", + "parent": "j24_1", + "table": "report_member_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"channel\",\"value\":\"voice\"},{\"condition\":\"=\",\"field\":\"type\",\"value\":\"LOGIN\"}]}}" +}, { + "id": 29, + "name": "Pause Time by Channel", + "description": "", + "parent": "j24_1", + "table": "report_member_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"type\",\"value\":\"PAUSE\"}]}}" +}, { + "id": 30, + "name": "Pause Details", + "description": "Agents status details", + "parent": "j4_4", + "table": "report_member_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"channel\",\"value\":\"voice\"},{\"condition\":\"=\",\"field\":\"type\",\"value\":\"PAUSE\"}]}}" +}, { + "id": 31, + "name": "Rating by Agent", + "description": null, + "parent": "j20_3", + "table": "voice_recordings", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 32, + "name": "Rating by Queue", + "description": null, + "parent": "j20_3", + "table": "voice_recordings", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"IS NOT EMPTY\",\"field\":\"queue\",\"value\":\"\",\"required\":false}]}}" +}, { + "id": 33, + "name": "Queue - Calls", + "description": null, + "parent": "j4_3", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 34, + "name": "Answer Time by Hour", + "description": null, + "parent": "j4_5", + "table": "report_agent_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"agentcomplete\",\"value\":\"1\"}]}}" +}, { + "id": 35, + "name": "Received emails by account", + "description": "Summary of the emails accepted by application for each account", + "parent": "j4_2", + "table": "report_mail_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 36, + "name": "Received emails by queue", + "description": "Summary of received email by queue", + "parent": "j4_2", + "table": "report_mail_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"application\",\"value\":\"queue\",\"required\":true}]}}" +}, { + "id": 37, + "name": "Accepted emails by agent", + "description": "Summary of accepted email by agent", + "parent": "j4_2", + "table": "report_mail_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"timeout\",\"value\":\"0\",\"required\":true}]}}" +}, { + "id": 38, + "name": "Messages Summary by Date", + "description": "Global messages summary by date", + "parent": "j4_2", + "table": "mail_messages", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"auto\",\"value\":false}]}}" +}, { + "id": 39, + "name": "Interactions detail", + "description": "Detailed report about the interactions", + "parent": "j4_2", + "table": "mail_rooms", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" +}, { + "id": 40, + "name": "Disposition Summary", + "description": "Closed interactions by disposition (filtered by disposition not null)", + "parent": "j4_2", + "table": "mail_rooms", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"IS NOT NULL\",\"field\":\"disposition\",\"value\":\"\",\"required\":false}]}}" +}, { + "id": 41, + "name": "Closed interactions by date", + "description": "Summary of closed interactions grouped by date + average handle time (from when the first email arrived to when the interaction has been closed)", + "parent": "j4_2", + "table": "mail_rooms", + "conditions": "{\"group\":{\"operator\":\"OR\",\"rules\":[{\"condition\":\"=\",\"field\":\"status\",\"value\":\"'CLOSED'\",\"required\":true}]}}" +}]; + +var newDefaultMetrics = [{ + "id": 1, + "name": "Queue - TalkTime", + "table": "report_queue_history", + "metric": "UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)" +}, { + "id": 2, + "name": "Queue - Abandon Time", + "table": "report_queue_history", + "metric": "UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)" +}, { + "id": 3, + "name": "Abandoned <10s", + "table": "report_queue_history", + "metric": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <10,1,NULL))", + "description": "Count of abandoned calls within 10 seconds (Short Calls)" +}, { + "id": 4, + "name": "Queue - AnswerTime", + "table": "report_queue_history", + "metric": "IF(queuecallercomplete=1,holdtime,null)" +}, { + "id": 5, + "name": "Answered < 10s", + "table": "report_agent_history", + "metric": "COUNT(IF(holdtime<10,1,NULL))", + "description": "Count of answered calls within 10 seconds" +}, { + "id": 6, + "name": "Answered 10-20s", + "table": "report_agent_history", + "metric": "COUNT(IF(holdtime >=10 AND holdtime <20,1,NULL))", + "description": "Count of answered calls between 10 and 20 seconds" +}, { + "id": 7, + "name": "Answered 20-30s", + "table": "report_agent_history", + "metric": "COUNT(IF(holdtime >=20 AND holdtime <30,1,NULL))", + "description": "Count of answered calls between 20 and 30 seconds" +}, { + "id": 8, + "name": "Answered >30s", + "table": "report_agent_history", + "metric": "COUNT(IF(holdtime >=30,1,NULL))", + "description": "Count of answered calls over 30 seconds" +}, { + "id": 9, + "name": "Queue - Exit Time", + "table": "report_queue_history", + "metric": "UNIX_TIMESTAMP(queuecallerExitAt)-UNIX_TIMESTAMP(queuecallerjoinAt)" +}, { + "id": 10, + "name": "Abandoned 10-60s", + "table": "report_queue_history", + "metric": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=10 AND UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <60,1,NULL))", + "description": "Count of abandoned calls between 10 and 60 seconds" +}, { + "id": 11, + "name": "Abandoned 60-120s", + "table": "report_queue_history", + "metric": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=60 AND UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <120,1,NULL))", + "description": "Count of abandoned calls between 60 and 120 seconds" +}, { + "id": 12, + "name": "Queue - Abandoned >120s", + "table": "report_queue_history", + "metric": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=120,1,NULL))", + "description": "Count of abandoned calls over 120 seconds" +}, { + "id": 13, + "name": "Queue - JoinDate", + "table": "report_queue_history", + "metric": "DATE(queuecallerjoinat)", + "description": "Extract the date of the join queue" +}, { + "id": 14, + "name": "Queue - JoinHour", + "table": "report_queue_history", + "metric": "HOUR(queuecallerjoinat)", + "description": "Extract the hour of the join queue" +}, { + "id": 15, + "name": "Queue - JoinDay", + "table": "report_queue_history", + "metric": "DAY(queuecallerjoinat)", + "description": "Extract the day of the join queue" +}, { + "id": 16, + "name": "Member - Event Duration", + "table": "report_member_history", + "metric": "UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt)", + "description": "Member event duration in seconds" +}, { + "id": 17, + "name": "Member - Total Event Duration", + "table": "report_member_history", + "metric": "SEC_TO_TIME(SUM(UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt)))", + "description": "Total event duration" +}, { + "id": 18, + "name": "Chat - Session Time", + "table": "report_chat_session_history", + "metric": "UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)", + "description": "Session Time", +}, { + "id": 19, + "name": "Chat - Queue", + "table": "report_chat_session_history", + "metric": "COUNT(IF(application=\"queue\",1,NULL))", + "description": "Chat queue application count", +}, { + "id": 20, + "name": "Chat - Agent", + "table": "report_chat_session_history", + "metric": "COUNT(IF(application=\"agent\",1,NULL))", + "description": "Chat agent application count", +}, { + "id": 21, + "name": "Chat - Avg Session Time", + "table": "report_chat_session_history", + "metric": "ROUND(AVG(UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)))", + "description": "Average session time" +}, { + "id": 22, + "name": "Member - Event Duration (HH:mm:ss)", + "table": "report_member_history", + "metric": "SEC_TO_TIME(UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt))", + "description": "Member events duration in time format" +}, { + "id": 23, + "name": "Square - Duration", + "table": "report_square_history", + "metric": "UNIX_TIMESTAMP(leaveAt)-UNIX_TIMESTAMP(joinAt)", + "description": "IVR Duration" +}, { + "id": 24, + "name": "Queue - EndTime Call", + "table": "report_queue_history", + "metric": "CASE WHEN queuecallercomplete=1 THEN queuecallercompleteAt ELSE queuecallerLeaveAt END", + "description": null +}, { + "id": 25, + "name": "Queue - Calls Result", + "table": "report_queue_history", + "metric": "CASE WHEN queuecallercomplete=1 THEN \"YES\" ELSE \"NO\" END", + "description": "Show if a call is answered or not" +}]; + +models.ReportTree.destroy({ + where: { + id: 1 + } + }) + .then(function() { + return models.ReportTree.create({ + id: 1, + tree: '[{"id":"1","parent":"#","text":"Motion Reports","icon":"icon-rocket","state":{"selected":true,"opened":true}},{"id":"2","text":"Voice","icon":true,"li_attr":{"id":"2"},"a_attr":{"href":"#","id":"2_anchor"},"state":{"loaded":true,"opened":true,"selected":false,"disabled":false},"data":{},"parent":"1"},{"id":"j4_3","text":"Queues","icon":true,"li_attr":{"id":"j4_3"},"a_attr":{"href":"#","id":"j4_3_anchor"},"state":{"loaded":true,"opened":true,"selected":false,"disabled":false},"data":{},"parent":"2"},{"id":"j4_5","text":"Answered","icon":true,"li_attr":{"id":"j4_5"},"a_attr":{"href":"#","id":"j4_5_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"j4_3"},{"id":"j4_6","text":"Unanswered","icon":true,"li_attr":{"id":"j4_6"},"a_attr":{"href":"#","id":"j4_6_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"j4_3"},{"id":"j4_7","text":"Distribution","icon":true,"li_attr":{"id":"j4_7"},"a_attr":{"href":"#","id":"j4_7_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"j4_3"},{"id":"j20_1","text":"Calls","icon":true,"li_attr":{"id":"j20_1"},"a_attr":{"href":"#","id":"j20_1_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"2"},{"id":"j4_4","text":"Agents","icon":true,"li_attr":{"id":"j4_4"},"a_attr":{"href":"#","id":"j4_4_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"2"},{"id":"j112_1","text":"CallySquare","icon":true,"li_attr":{"id":"j112_1"},"a_attr":{"href":"#","id":"j112_1_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"2"},{"id":"j20_2","text":"Integration","icon":true,"li_attr":{"id":"j20_2"},"a_attr":{"href":"#","id":"j20_2_anchor"},"state":{"loaded":true,"opened":false,"selected":true,"disabled":false},"data":{},"parent":"2"},{"id":"j20_3","text":"Recordings","icon":true,"li_attr":{"id":"j20_3"},"a_attr":{"href":"#","id":"j20_3_anchor"},"state":{"loaded":true,"opened":false,"selected":true,"disabled":false},"data":{},"parent":"2"},{"id":"j4_1","text":"Chat","icon":true,"li_attr":{"id":"j4_1"},"a_attr":{"href":"#","id":"j4_1_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"1"},{"id":"j4_2","text":"Mail","icon":true,"li_attr":{"id":"j4_2"},"a_attr":{"href":"#","id":"j4_2_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"1"},{"id":"j24_1","text":"Agents","icon":true,"li_attr":{"id":"j24_1"},"a_attr":{"href":"#","id":"j24_1_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"1"}]', + }) + }) + .then(function() { + return models.ReportTree.findOrCreate({ + where: { + id: 2 + }, + defaults: { + id: 2, + tree: '[{"id":"1","text":"Custom Reports","icon":"icon-book-open","li_attr":{"id":"1"},"a_attr":{"href":"#","id":"1_anchor"},"state":{"loaded":true,"opened":true,"selected":false,"disabled":false},"data":{},"parent":"#"},{"id":"2","text":"Basic Node","icon":true,"li_attr":{"id":"2"},"a_attr":{"href":"#","id":"2_anchor"},"state":{"loaded":true,"opened":true,"selected":false,"disabled":false},"data":{},"parent":"1"}]' + } + }) + }) + .then(function() { + return models.DefaultMetric.findAll(); + }) + .then(function(oldDefaultMetrics) { + var bulkDefaultMetrics = []; + oldDefaultMetrics = _.map(oldDefaultMetrics, 'id'); + newDefaultMetrics.forEach(function(defaultMet) { + if (_.includes(oldDefaultMetrics, defaultMet.id)) { + bulkDefaultMetrics.push(models.DefaultMetric.update(defaultMet, { + where: { + id: defaultMet.id + } + })); + } else { + bulkDefaultMetrics.push(models.DefaultMetric.create(defaultMet)); + } + }); + return bulkDefaultMetrics; + }) + .all() + .then(function() { + return models.DefaultReport.findAll() + }) + .then(function(oldDefaultReports) { + var bulkDefaultReports = []; + oldDefaultReports = _.map(oldDefaultReports, 'id'); + newDefaulReports.forEach(function(defaultRep) { + if (_.includes(oldDefaultReports, defaultRep.id)) { + bulkDefaultReports.push(models.DefaultReport.update(defaultRep, { + where: { + id: defaultRep.id + } + })); + } else { + bulkDefaultReports.push(models.DefaultReport.create(defaultRep)); + } + }); + return bulkDefaultReports; + }) + .all() + .then(function() { + return models.ReportField.destroy({ + where: { + DefaultReportId: { + $gt: 0 + } + } + }) + }) + .then(function() { + return models.ReportField.bulkCreate([{ + "field": "uniqueid", + "alias": "UniqueId", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 1 + }, { + "field": "calleridnum", + "alias": "CallerIdNum", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 1 + }, { + "field": "calleridname", + "alias": "CallerIdName", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 1 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 1 + }, { + "field": "queuecallerjoinAt", + "alias": "QueueJoinAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 1 + }, { + "field": "queuecallerleaveAt", + "alias": "QueueLeaveAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 1 + }, { + "field": "queuecallerabandon", + "alias": "QueueAbandon", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 1 + }, { + "field": "queuecallerabandonAt", + "alias": "QueueAbandonAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 1 + }, { + "field": "queuecallercomplete", + "alias": "Complete", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 1 + }, { + "field": "queuecallercompleteAt", + "alias": "CompleteAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 1 + }, { + "field": "queuecallerexit", + "alias": "QueueExit", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 1 + }, { + "field": "queuecallerexitAt", + "alias": "QueueExitAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 1 + }, { + "field": "queuecallerexitreason", + "alias": "QueueExitReason", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 1 + }, { + "field": "exten", + "alias": "DID", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 1 + }, { + "field": "UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)", + "alias": "TalkTime", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 1, + "DefaultReportId": 1 + }, { + "field": "IF(queuecallercomplete=1,holdtime,null)", + "alias": "AnswerTime", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 4, + "DefaultReportId": 1 + }, { + "field": "UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "AbandonTime", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 2, + "DefaultReportId": 1 + }, { + "field": "uniqueid", + "alias": "UniqueID", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 2 + }, { + "field": "type", + "alias": "Type", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 2 + }, { + "field": "tag", + "alias": "Tag", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 2 + }, { + "field": "source", + "alias": "Source", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 2 + }, { + "field": "destination", + "alias": "Destination", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 2 + }, { + "field": "callerid", + "alias": "CallerID", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 2 + }, { + "field": "destinationchannel", + "alias": "DestChannel", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 2 + }, { + "field": "lastapplication", + "alias": "LastApp", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 2 + }, { + "field": "lastdata", + "alias": "LastData", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 2 + }, { + "field": "starttime", + "alias": "StartTime", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 2 + }, { + "field": "answertime", + "alias": "AnswerTime", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 2 + }, { + "field": "endtime", + "alias": "EndTime", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 2 + }, { + "field": "duration", + "alias": "Duration", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 2 + }, { + "field": "disposition", + "alias": "Disposition", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 2 + }, { + "field": "uniqueid", + "alias": "UniqueID", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 3 + }, { + "field": "accountcode", + "alias": "AgentExtension", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 3 + }, { + "field": "source", + "alias": "Source", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 3 + }, { + "field": "destination", + "alias": "Destination", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 3 + }, { + "field": "callerid", + "alias": "CallerId", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 3 + }, { + "field": "starttime", + "alias": "StartTime", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 3 + }, { + "field": "answertime", + "alias": "AnswerTime", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 3 + }, { + "field": "endtime", + "alias": "EndTIme", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 3 + }, { + "field": "duration", + "alias": "Duration", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 3 + }, { + "field": "billableseconds", + "alias": "Billsec", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 3 + }, { + "field": "disposition", + "alias": "Disposition", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 3 + }, { + "field": "tag", + "alias": "Tag", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 3 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 4 + }, { + "field": "uniqueid", + "alias": "Offered", + "function": "COUNT", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 4 + }, { + "field": "queuecallercomplete", + "alias": "Completed", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 4 + }, { + "field": "queuecallerabandon", + "alias": "Abandoned", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 4 + }, { + "field": "queuecallerexit", + "alias": "Unmanaged", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 4 + }, { + "field": "UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)", + "alias": "AvgTalkTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 1, + "DefaultReportId": 4 + }, { + "field": "UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "AvgAbandonTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 1, + "DefaultReportId": 4 + }, { + "field": "IF(queuecallercomplete=1,holdtime,null)", + "alias": "AvgAnswerTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 4, + "DefaultReportId": 4 + }, { + "field": "uniqueid", + "alias": "UniqueId", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "calleridnum", + "alias": "CallerIdNum", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "calleridname", + "alias": "CallerIdName", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "agentcalledAt", + "alias": "AgentCalledAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "agentconnectAt", + "alias": "AgentConnectAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "agentcompleteAt", + "alias": "AgentCompleteAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "holdtime", + "alias": "AnswerTime", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "talktime", + "alias": "TalkTime", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "agentacw", + "alias": "AgentACW", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "acwtime", + "alias": "AgentACWTime", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "agentcomplete", + "alias": "AgentComplete", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "reason", + "alias": "HangupReason", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "lastevent", + "alias": "LastEvent", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "exten", + "alias": "DID", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 5 + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 6 + }, { + "field": "agentcomplete", + "alias": "Completed", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 6 + }, { + "field": "agentringnoanswer", + "alias": "RingNoAnswer", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 6 + }, { + "field": "talktime", + "alias": "TotTalkTime", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 6 + }, { + "field": "acwtime", + "alias": "TotACWTime", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 6 + }, { + "field": "talktime", + "alias": "AvgTalkTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 6 + }, { + "field": "acwtime", + "alias": "AvgACWTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 6 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 7 + }, { + "field": "agentcomplete", + "alias": "Completed", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 7 + }, { + "field": "talktime", + "alias": "Tot TalkTime", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 7 + }, { + "field": "talktime", + "alias": "Avg TalkTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 7 + }, { + "field": "holdtime", + "alias": "Tot HoldTime", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 7 + }, { + "field": "holdtime", + "alias": "Avg HoldTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 7 + }, { + "field": "acwtime", + "alias": "Tot ACWTime", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 7 + }, { + "field": "acwtime", + "alias": "Avg ACWTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 7 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 8 + }, { + "field": "agentcomplete", + "alias": "Tot Answered", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 8 + }, { + "field": "COUNT(IF(holdtime<10,1,NULL))", + "alias": "Answered <10s", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 5, + "DefaultReportId": 8 + }, { + "field": "COUNT(IF(holdtime >=10 AND holdtime <20,1,NULL))", + "alias": "Answered 10-20s", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 6, + "DefaultReportId": 8 + }, { + "field": "COUNT(IF(holdtime >=20 AND holdtime <30,1,NULL))", + "alias": "Answered 20-30s", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 7, + "DefaultReportId": 8 + }, { + "field": "COUNT(IF(holdtime >=30,1,NULL))", + "alias": "Answered >30s", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 8, + "DefaultReportId": 8 + }, { + "field": "reason", + "alias": "Reason", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 9 + }, { + "field": "uniqueid", + "alias": "Calls", + "function": "COUNT", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 9 + }, { + "field": "uniqueid", + "alias": "UniqueId", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 10 + }, { + "field": "calleridnum", + "alias": "CallerIdNum", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 10 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 10 + }, { + "field": "queuecallerjoinAt", + "alias": "QueueJoinAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 10 + }, { + "field": "queuecallerleaveAt", + "alias": "QueueLeaveAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 10 + }, { + "field": "queuecallerabandon", + "alias": "QueueAbandon", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 10 + }, { + "field": "queuecallerabandonAt", + "alias": "QueueAbandonAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 10 + }, { + "field": "UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "Abandon Time", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 2, + "DefaultReportId": 10 + }, { + "field": "queuecallerexit", + "alias": "QueueExit", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 10 + }, { + "field": "queuecallerexitAt", + "alias": "QueueExitAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 10 + }, { + "field": "queuecallerexitreason", + "alias": "QueueExitReason", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 10 + }, { + "field": "UNIX_TIMESTAMP(queuecallerExitAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "Exit Time", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 9, + "DefaultReportId": 10 + }, { + "field": "position", + "alias": "QueuePosition", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 10 + }, { + "field": "exten", + "alias": "DID", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 10 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 11 + }, { + "field": "queuecallerabandon", + "alias": "Abandoned", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 11 + }, { + "field": "UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "AvgAbandonTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 2, + "DefaultReportId": 11 + }, { + "field": "UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "Tot AbandonTime", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 2, + "DefaultReportId": 11 + }, { + "field": "queuecallerexit", + "alias": "Exited", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 11 + }, { + "field": "UNIX_TIMESTAMP(queuecallerExitAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "Avg ExitedTIme", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 9, + "DefaultReportId": 11 + }, { + "field": "UNIX_TIMESTAMP(queuecallerExitAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "Tot ExitedTime", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 9, + "DefaultReportId": 11 + }, { + "field": "queuecallerexitreason", + "alias": "Reason", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 12 + }, { + "field": "queuecallerexit", + "alias": "Calls", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 12 + }, { + "field": "UNIX_TIMESTAMP(queuecallerExitAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "Tot ExitTime", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 9, + "DefaultReportId": 12 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 13 + }, { + "field": "queuecallerabandon", + "alias": "Tot Abandoned", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 13 + }, { + "field": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <10,1,NULL))", + "alias": "Abandoned<10s", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 3, + "DefaultReportId": 13 + }, { + "field": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=10 AND UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <60,1,NULL))", + "alias": "Abandoned 10-60s", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 10, + "DefaultReportId": 13 + }, { + "field": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=60 AND UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <120,1,NULL))", + "alias": "Abandoned 60-120s", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 11, + "DefaultReportId": 13 + }, { + "field": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=120,1,NULL))", + "alias": "Abandoned>120s", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 12, + "DefaultReportId": 13 + }, { + "field": "DATE(queuecallerjoinat)", + "alias": "Date", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultMetricId": 13, + "DefaultReportId": 14 + }, { + "field": "uniqueid", + "alias": "Offered", + "function": "COUNT", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 14 + }, { + "field": "queuecallercomplete", + "alias": "Completed", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 14 + }, { + "field": "queuecallerabandon", + "alias": "Abandoned", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 14 + }, { + "field": "queuecallerexit", + "alias": "Unmanaged", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 14 + }, { + "field": "UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)", + "alias": "AvgTalkTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 1, + "DefaultReportId": 14 + }, { + "field": "UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "AvgAbandonTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 2, + "DefaultReportId": 14 + }, { + "field": "IF(queuecallercomplete=1,holdtime,null)", + "alias": "AvgAnswerTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 4, + "DefaultReportId": 14 + }, { + "field": "HOUR(queuecallerjoinat)", + "alias": "Hour", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultMetricId": 14, + "DefaultReportId": 15 + }, { + "field": "uniqueid", + "alias": "Offered", + "function": "COUNT", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 15 + }, { + "field": "queuecallercomplete", + "alias": "Completed", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 15 + }, { + "field": "queuecallerabandon", + "alias": "Abandoned", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 15 + }, { + "field": "queuecallerexit", + "alias": "Unmanaged", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 15 + }, { + "field": "UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)", + "alias": "AvgTalkTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 1, + "DefaultReportId": 15 + }, { + "field": "UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "AvgAbandonTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 2, + "DefaultReportId": 15 + }, { + "field": "IF(queuecallercomplete=1,holdtime,null)", + "alias": "AvgAnswerTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 4, + "DefaultReportId": 15 + }, { + "field": "DAY(queuecallerjoinat)", + "alias": "Day", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultMetricId": 15, + "DefaultReportId": 16 + }, { + "field": "uniqueid", + "alias": "Offered", + "function": "COUNT", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 16 + }, { + "field": "queuecallercomplete", + "alias": "Completed", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 16 + }, { + "field": "queuecallerabandon", + "alias": "Abandoned", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 16 + }, { + "field": "queuecallerexit", + "alias": "Unmanaged", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 16 + }, { + "field": "UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)", + "alias": "AvgTalkTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 1, + "DefaultReportId": 16 + }, { + "field": "UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "AvgAbandonTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 2, + "DefaultReportId": 16 + }, { + "field": "IF(queuecallercomplete=1,holdtime,null)", + "alias": "AvgAnswerTime", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 4, + "DefaultReportId": 16 + }, { + "field": "type", + "alias": "Type", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 17 + }, { + "field": "uniqueid", + "alias": "Calls", + "function": "COUNT", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 17 + }, { + "field": "duration", + "alias": "Tot Duration", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 17 + }, { + "field": "duration", + "alias": "Avg Duration", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 17 + }, { + "field": "disposition", + "alias": "Disposition", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 18 + }, { + "field": "uniqueid", + "alias": "Calls", + "function": "COUNT", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 18 + }, { + "field": "duration", + "alias": "Tot Duration", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 18 + }, { + "field": "duration", + "alias": "Avg Duration", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 18 + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "groupBy": 1, + "orderBy": "ASC", + "DefaultReportId": 19 + }, { + "field": "data1", + "alias": "PauseType", + "function": null, + "groupBy": 1, + "orderBy": "ASC", + "DefaultReportId": 19 + }, { + "field": "SEC_TO_TIME(SUM(UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt)))", + "alias": "Duration", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 17, + "DefaultReportId": 19 + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "groupBy": 1, + "orderBy": "ASC", + "DefaultReportId": 20, + }, { + "field": "SEC_TO_TIME(SUM(UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt)))", + "alias": "Duration", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 17, + "DefaultReportId": 20, + }, { + "field": "uniqueid", + "alias": "UniqueId", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 22, + "format": null + }, { + "field": "websitename", + "alias": "Website", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 22, + "format": null + }, { + "field": "visitorname", + "alias": "VisitorName", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 22, + }, { + "field": "visitoremail", + "alias": "VisitorEmail", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 22, + "format": null + }, { + "field": "membername", + "alias": "MemeberName", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 22, + "format": null + }, { + "field": "queuename", + "alias": "QueueName", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 22, + "format": null + }, { + "field": "joinAt", + "alias": "JoinAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 22, + "format": null + }, { + "field": "leaveAt", + "alias": "LeaveAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 22, + "format": null + }, { + "field": "completeAt", + "alias": "CompleteAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 22, + "format": null + }, { + "field": "complete", + "alias": "Complete", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 22, + "format": null + }, { + "field": "completeReason", + "alias": "CompleteReason", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 22, + "format": null + }, { + "field": "abandon", + "alias": "Abandon", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 22, + "format": null + }, { + "field": "unmanaged", + "alias": "Unmanage", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 22, + "format": null + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 23, + "format": null + }, { + "field": "complete", + "alias": "Session", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 23, + "format": null + }, { + "field": "COUNT(IF(application=\"queue\",1,NULL))", + "alias": "FromQueue", + "function": null, + "groupBy": 0, + "orderBy": null, + "createdAt": "2016-05-14 18:13:01", + "updatedAt": "2016-05-14 18:13:01", + "DefaultMetricId": 19, + "DefaultReportId": 23, + "format": null + }, { + "field": "COUNT(IF(application=\"agent\",1,NULL))", + "alias": "DirectToAgent", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 20, + "DefaultReportId": 23, + "format": null + }, { + "field": "UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)", + "alias": "Tot Session Time", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 18, + "DefaultReportId": 23, + "format": "SEC_TO_TIME" + }, { + "field": "UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)", + "alias": "Avg Session Time", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 18, + "DefaultReportId": 23, + "format": "SEC_TO_TIME" + }, { + "field": "websitename", + "alias": "WebSite", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 21, + "format": null + }, { + "field": "uniqueid", + "alias": "Sessions", + "function": "COUNT DISTINCT", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 21, + "format": null + }, { + "field": "complete", + "alias": "Completed", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 21, + "format": null + }, { + "field": "abandon", + "alias": "Abandoned", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 21, + "format": null + }, { + "field": "UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)", + "alias": "Session Time", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 18, + "DefaultReportId": 21, + "format": "SEC_TO_TIME" + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)))", + "alias": "Avg Session Time", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 21, + "DefaultReportId": 21, + "format": "SEC_TO_TIME" + }, { + "field": "queuename", + "alias": "Queue", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 24, + "format": null + }, { + "field": "uniqueid", + "alias": "Sessions", + "function": "COUNT", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 24, + "format": null + }, { + "field": "complete", + "alias": "Completed", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 24, + "format": null + }, { + "field": "abandon", + "alias": "Abandoned", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 24, + "format": null + }, { + "field": "unmanaged", + "alias": "Unmanaged", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 24, + "format": null + }, { + "field": "UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)", + "alias": "Session Time", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 18, + "DefaultReportId": 24, + "format": "SEC_TO_TIME" + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)))", + "alias": "Avg Session Time", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 21, + "DefaultReportId": 24, + "format": "SEC_TO_TIME" + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 25, + }, { + "field": "interface", + "alias": "Interface", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 25, + }, { + "field": "type", + "alias": "Event", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 25, + }, { + "field": "data1", + "alias": "Pause/ACW Queue", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 25, + }, { + "field": "enterAt", + "alias": "EnterAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 25, + }, { + "field": "exitAt", + "alias": "ExitAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 25, + }, { + "field": "SEC_TO_TIME(UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt))", + "alias": "Duration", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 22, + "DefaultReportId": 25 + }, { + "field": "project_name", + "alias": "Project Name", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 26 + }, { + "field": "uniqueid", + "alias": "UniqueID", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 26, + }, { + "field": "callerid", + "alias": "CallerID", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 26, + }, { + "field": "dnid", + "alias": "DID", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 26, + }, { + "field": "joinAt", + "alias": "Start Time", + "function": null, + "groupBy": 0, + "orderBy": "ASC", + "DefaultReportId": 26, + }, { + "field": "leaveAt", + "alias": "End Time", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 26, + }, { + "field": "UNIX_TIMESTAMP(leaveAt)-UNIX_TIMESTAMP(joinAt)", + "alias": "Duration", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 23, + "DefaultReportId": 26, + "format": "SEC_TO_TIME" + }, { + "field": "project_name", + "alias": "Project Name", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 27, + }, { + "field": "callerid", + "alias": "Caller Id", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 27, + }, { + "field": "uniqueid", + "alias": "Unique Id", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 27, + }, { + "field": "node", + "alias": "Blocks", + "function": "GROUP_CONCAT", + "format": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 27, + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 28, + }, { + "field": "enterAt", + "alias": "EnterAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 28, + }, { + "field": "exitAt", + "alias": "ExitAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 28, + }, { + "field": "duration", + "alias": "Duration", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 28, + "format": "SEC_TO_TIME" + }, { + "field": "channel", + "alias": "Channel", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 29, + }, { + "field": "data1", + "alias": "Type", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 29, + }, { + "field": "duration", + "alias": "Duration", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 29, + "format": "SEC_TO_TIME" + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 30 + }, { + "field": "enterAt", + "alias": "EnterAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 30 + }, { + "field": "exitAt", + "alias": "ExitAt", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 30 + }, { + "field": "data1", + "alias": "Pause", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 30 + }, { + "field": "duration", + "alias": "Duration", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 30, + "format": "SEC_TO_TIME" + }, { + "field": "connectedlinename", + "alias": "Agent", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 31 + }, { + "field": "uniqueid", + "alias": "Recorded Calls", + "function": "COUNT", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 31 + }, { + "field": "rating", + "alias": "Total Rating", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 31 + }, { + "field": "rating", + "alias": "Avg Rating", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 31 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 32 + }, { + "field": "uniqueid", + "alias": "Recorded Calls", + "function": "COUNT", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 32 + }, { + "field": "rating", + "alias": "Total Rating", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 32 + }, { + "field": "rating", + "alias": "Avg Rating", + "function": "AVG", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 32 + }, { + "field": "calleridnum", + "alias": "CallerIdNum", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 33 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 33 + }, { + "field": "queuecallerjoinAt", + "alias": "StartTime", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 33 + }, { + "field": "CASE WHEN queuecallercomplete=1 THEN queuecallercompleteAt ELSE queuecallerLeaveAt END", + "alias": "EndTime", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 33, + "DefaultMetricId": 24 + }, { + "field": "CASE WHEN queuecallercomplete=1 THEN \"YES\" ELSE \"NO\" END", + "alias": "Answered", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 33, + "DefaultMetricId": 25 + }, { + "field": "agentconnectAt", + "alias": "Hour", + "function": null, + "groupBy": 1, + "orderBy": null, + "DefaultReportId": 34, + "format": "HOUR" + }, { + "field": "agentcomplete", + "alias": "Tot Answered", + "function": "SUM", + "groupBy": 0, + "orderBy": null, + "DefaultReportId": 34, + }, { + "field": "COUNT(IF(holdtime<10,1,NULL))", + "alias": "Answered <10s", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 5, + "DefaultReportId": 34 + }, { + "field": "COUNT(IF(holdtime >=10 AND holdtime <20,1,NULL))", + "alias": "Answered 10-20s", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 6, + "DefaultReportId": 34 + }, { + "field": "COUNT(IF(holdtime >=20 AND holdtime <30,1,NULL))", + "alias": "Answered 20-30s", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 7, + "DefaultReportId": 34 + }, { + "field": "COUNT(IF(holdtime >=30,1,NULL))", + "alias": "Answered >30s", + "function": null, + "groupBy": 0, + "orderBy": null, + "DefaultMetricId": 8, + "DefaultReportId": 34 + }, { + "field": "accountname", + "alias": "Account", + "groupBy": 1, + "custom": 0, + "DefaultReportId": 35 + }, { + "field": "uniqueid", + "alias": "Received", + "function": "COUNT DISTINCT", + "groupBy": 0, + "custom": 0, + "DefaultReportId": 35 + }, { + "field": "IF(timeout=0,1,null)", + "alias": "Accepted", + "function": "SUM", + "groupBy": 0, + "custom": 1, + "DefaultReportId": 35 + }, { + "field": "ROUND(SUM(IF(timeout=0,1,null))/COUNT(DISTINCT(uniqueid))*100,1)", + "alias": "Accept Rate", + "groupBy": 0, + "custom": 1, + "DefaultReportId": 35 + }, { + "field": "IF(timeout=0 AND application=\"queue\",1,null)", + "alias": "Accepted by Queue", + "function": "SUM", + "groupBy": 0, + "custom": 1, + "DefaultReportId": 35 + }, { + "field": "IF(timeout=0 AND application=\"fidelity\",1,null)", + "alias": "Accept by Fidelity", + "function": "SUM", + "groupBy": 0, + "custom": 1, + "DefaultReportId": 35 + }, { + "field": "IF(timeout=0 AND application=\"agent\",1,null)", + "alias": "Accepted by Agent", + "function": "SUM", + "groupBy": 0, + "custom": 1, + "DefaultReportId": 35 + }, { + "field": "queuename", + "alias": "Queue", + "groupBy": 1, + "custom": 0, + "DefaultReportId": 36 + }, { + "field": "uniqueid", + "alias": "Received", + "function": "COUNT", + "groupBy": 0, + "custom": 0, + "DefaultReportId": 36 + }, { + "field": "IF(timeout=0,1,0)", + "alias": "Accepted", + "function": "SUM", + "groupBy": 0, + "custom": 1, + "DefaultReportId": 36 + }, { + "field": "timeout", + "alias": "Timeout", + "function": "SUM", + "groupBy": 0, + "DefaultReportId": 36 + }, { + "field": "ROUND(SUM(IF(timeout=0,1,null))/COUNT(uniqueid)*100,1)", + "alias": "Accept Rate", + "groupBy": 0, + "custom": 1, + "DefaultReportId": 36 + }, { + "field": "ROUND(AVG(IF(timeout=0,UNIX_TIMESTAMP(leaveat)- UNIX_TIMESTAMP(joinat),NULL)))", + "alias": "Avg Accept Time", + "groupBy": 0, + "format": "SEC_TO_TIME", + "custom": 1, + "DefaultReportId": 36 + }, { + "field": "membername", + "alias": "membername", + "groupBy": 1, + "custom": 0, + "DefaultReportId": 36 + }, { + "field": "uniqueid", + "alias": "Tot Accepted", + "function": "COUNT", + "groupBy": 0, + "custom": 0, + "DefaultReportId": 37 + }, { + "field": "IF(application=\"fidelity\",1,0)", + "alias": "Fidelity", + "function": "SUM", + "groupBy": 0, + "custom": 1, + "DefaultReportId": 37 + }, { + "field": "IF(application=\"agent\",1,0)", + "alias": "Agent", + "function": "SUM", + "groupBy": 0, + "custom": 1, + "DefaultReportId": 37 + }, { + "field": "IF(application=\"queue\",1,0)", + "alias": "Queue", + "function": "SUM", + "groupBy": 0, + "custom": 1, + "DefaultReportId": 37 + }, { + "field": "createdAt", + "alias": "Date", + "groupBy": 1, + "custom": 0, + "format": "DATE", + "DefaultReportId": 38 + }, { + "field": "IF(status=\"RECEIVED\",1,0)", + "alias": "Received", + "function": "SUM", + "groupBy": 0, + "custom": 1, + "DefaultReportId": 38 + }, { + "field": "IF(status=\"SENT\",1,0)", + "alias": "Sent", + "function": "SUM", + "groupBy": 0, + "custom": 1, + "DefaultReportId": 38 + }, { + "field": "id", + "alias": "id", + "groupBy": 0, + "DefaultReportId": 39, + "custom": 0 + }, { + "field": "account", + "alias": "account", + "groupBy": 0, + "DefaultReportId": 39, + "custom": 0 + }, { + "field": "status", + "alias": "status", + "groupBy": 0, + "DefaultReportId": 39, + "custom": 0 + }, { + "field": "lastEvent", + "alias": "lastEvent", + "groupBy": 0, + "DefaultReportId": 39, + "custom": 0 + }, { + "field": "createdAt", + "alias": "createdAt", + "groupBy": 0, + "DefaultReportId": 39, + "custom": 0 + }, { + "field": "arrivedAt", + "alias": "arrivedAt", + "groupBy": 0, + "DefaultReportId": 39, + "custom": 0 + }, { + "field": "openedAt", + "alias": "openedAt", + "groupBy": 0, + "DefaultReportId": 39, + "custom": 0 + }, { + "field": "closedAt", + "alias": "closedAt", + "groupBy": 0, + "DefaultReportId": 39, + "custom": 0 + }, { + "field": "mailIn", + "alias": "mailIn", + "groupBy": 0, + "DefaultReportId": 39, + "custom": 0 + }, { + "field": "mailOut", + "alias": "mailOut", + "groupBy": 0, + "DefaultReportId": 39, + "custom": 0 + }, { + "field": "tags", + "alias": "tags", + "groupBy": 0, + "DefaultReportId": 39, + "custom": 0 + }, { + "field": "disposition", + "alias": "disposition", + "groupBy": 0, + "DefaultReportId": 39, + "custom": 0 + }, { + "field": "ParentId", + "alias": "ParentId", + "groupBy": 0, + "DefaultReportId": 39, + "custom": 0 + }, { + "field": "disposition", + "alias": "disposition", + "groupBy": 1, + "DefaultReportId": 40, + "custom": 0 + }, { + "field": "count(*)", + "alias": "interactions", + "groupBy": 0, + "DefaultReportId": 40, + "custom": 1 + }, { + "field": "closedAt", + "alias": "closedAt", + "groupBy": 1, + "DefaultReportId": 41, + "format": "DATE", + "custom": 0 + }, { + "field": "id", + "alias": "Interactions", + "function": "COUNT", + "groupBy": 0, + "DefaultReportId": 41, + "custom": 0 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(closedAt)-UNIX_TIMESTAMP(arrivedAt)))", + "alias": "Avg Handle Time", + "groupBy": 0, + "DefaultReportId": 41, + "format": "SEC_TO_TIME", + "custom": 1 + }], { + ignoreDuplicates: true, + individualHooks: true + }) + }).then(function() { + console.log('Populating Analytics'); + }).catch(function(err) { + console.log('Error populating Analytics:', err); + }); + +models.List.bulkCreate([{ + id: 1, + name: 'Motion Service', + defaultEntry: true +}], { + ignoreDuplicates: true, + individualHooks: true +}).then(function() { + console.log('Finished populating integrations'); +}); + +models.VoiceExtension + .destroy({ + where: { + context: 'outbound-fax' + } + }) + .then(function() { + models.VoiceExtension.bulkCreate([{ + context: 'outbound-fax', + exten: '_.', + priority: 1, + app: 'NoOp', + appdata: 'Outgoing fax to ${FAXNUMBER}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 2, + app: 'NoOp', + appdata: 'Account ${FAXNAME}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 3, + app: 'Set', + appdata: 'CDR(type)=outbound-fax', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 4, + app: 'Answer', + appdata: '', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 5, + app: 'Wait', + appdata: '2', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 6, + app: 'Set', + appdata: 'FAXOPT(ecm)=${FAXECM}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 7, + app: 'Set', + appdata: 'FAXOPT(headerinfo)=${FAXHEADERINFO}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 8, + app: 'Set', + appdata: 'FAXOPT(localstationid)=${FAXLOCALSTATIONID}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 9, + app: 'Set', + appdata: 'FAXOPT(minrate)=${FAXMINRATE}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 10, + app: 'Set', + appdata: 'FAXOPT(maxrate)=${FAXMAXRATE}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 11, + app: 'Set', + appdata: 'FAXOPT(modem)=${FAXMODEM}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 12, + app: 'Set', + appdata: 'FAXOPT(gateway)=${FAXGATEWAY}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 13, + app: 'Set', + appdata: 'FAXOPT(t38timeout)=${FAXT38TIMEOUT}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 14, + app: 'SendFAX', + appdata: '${FAXOUTFILE},ds', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 15, + app: 'Hangup', + appdata: '', + type: 'system' + }], { + ignoreDuplicates: true, + individualHooks: true + }) + }) + .then(function() { + console.log('Finished populating VoiceExtension for Outgoing Fax'); + }); + +models.User + .findAll({ + include: [{ + model: models.VoiceExtension, + as: 'UserExtensions', + where: { + app: 'Dial' + } + }] + }) + .then(function(users) { + console.log('Rewriting Users extensions...'); + var bulkUpdates = []; + _.forEach(users, function(user) { + _.forEach(user.UserExtensions, function(elem) { + elem.appdata = 'SIP/' + user.name + ',,tTxX'; + bulkUpdates.push(elem.save()); + // console.log('extension updated'); + }); + }); + return bulkUpdates; + }) + .all() + .catch(function(err) { + console.log(err); + }); diff --git a/server/config/seedp.js b/server/config/seedp.js index b0db3aa..0e64ba1 100644 --- a/server/config/seedp.js +++ b/server/config/seedp.js @@ -1 +1,8017 @@ -var _0xb2f9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x66\x69\x72\x73\x74\x53\x65\x74\x75\x70","\x6C\x6F\x67","\x69\x64","\x61\x64\x64\x55\x73\x65\x72\x73","\x74\x68\x65\x6E","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x4D\x61\x69\x6C\x20\x51\x75\x65\x75\x65\x73\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x6A\x6F\x69\x6E","\x6E\x61\x6D\x65","\x6D\x61\x70","\x66\x6F\x72\x6D\x61\x74","\x61\x64\x64\x55\x73\x65\x72","\x53\x61\x6C\x65\x73","\x72\x72\x6D\x65\x6D\x6F\x72\x79","\x53\x75\x70\x70\x6F\x72\x74","\x62\x65\x65\x70\x61\x6C\x6C","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x56\x6F\x69\x63\x65\x20\x51\x75\x65\x75\x65\x73\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x6A\x61\x6E\x65\x2E\x6D\x69\x6C\x6C\x65\x72","\x66\x69\x6E\x64","\x6A\x6F\x68\x6E\x2E\x64\x6F\x65","\x55\x73\x65\x72\x73","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x41\x67\x65\x6E\x74\x73\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x54\x65\x61\x6D\x73\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x64\x65\x66\x61\x75\x6C\x74","\x72\x69\x6E\x67\x61\x6C\x6C","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x55\x73\x65\x72\x73\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x44\x65\x66\x61\x75\x6C\x74\x20\x54\x65\x61\x6D","\x61\x67\x65\x6E\x74","\x4A\x6F\x68\x6E\x20\x44\x6F\x65","\x6A\x6F\x68\x6E\x2E\x64\x6F\x65\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x73\x68\x75\x74\x74\x6C\x65\x35\x35","\x4A\x61\x6E\x65\x20\x4D\x69\x6C\x6C\x65\x72","\x6A\x61\x6E\x65\x2E\x6D\x69\x6C\x6C\x65\x72\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x55\x73\x65\x72","\x63\x72\x65\x61\x74\x65","\x54\x65\x61\x6D","\x61\x64\x6D\x69\x6E","\x41\x64\x6D\x69\x6E\x69\x73\x74\x72\x61\x74\x6F\x72","\x61\x64\x6D\x69\x6E\x40\x61\x64\x6D\x69\x6E\x2E\x63\x6F\x6D","\x70\x61\x73\x73\x77\x6F\x72\x64","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x43\x68\x61\x6E\x53\x70\x79\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x43\x68\x61\x6E\x53\x70\x79\x31","\x73\x70\x79\x31","\x54\x68\x65\x20\x73\x75\x70\x65\x72\x76\x69\x73\x6F\x72\x20\x63\x61\x6E\x20\x6C\x69\x73\x74\x65\x6E\x20\x61\x6E\x64\x20\x74\x61\x6C\x6B\x20\x74\x6F\x20\x74\x68\x65\x20\x61\x67\x65\x6E\x74\x2E\x20\x54\x68\x65\x20\x63\x75\x73\x74\x6F\x6D\x65\x72\x20\x77\x69\x6C\x6C\x20\x6E\x6F\x74\x20\x6C\x69\x73\x74\x65\x6E\x20\x74\x6F\x20\x74\x68\x65\x20\x73\x75\x70\x65\x72\x76\x69\x73\x6F\x72\x20\x76\x6F\x69\x63\x65\x2E","\x62\x77","\x43\x68\x61\x6E\x53\x70\x79\x32","\x73\x70\x79\x32","\x54\x68\x65\x20\x73\x75\x70\x65\x72\x76\x69\x73\x6F\x72\x20\x63\x61\x6E\x20\x6F\x6E\x6C\x79\x20\x6C\x69\x73\x74\x65\x6E\x20\x74\x68\x65\x20\x61\x67\x65\x6E\x74\x20\x63\x68\x61\x6E\x6E\x65\x6C\x20\x28\x6E\x65\x69\x74\x68\x65\x72\x20\x74\x68\x65\x20\x61\x67\x65\x6E\x74\x20\x6E\x6F\x72\x20\x74\x68\x65\x20\x63\x75\x73\x74\x6F\x6D\x65\x72\x20\x77\x69\x6C\x6C\x20\x6C\x69\x73\x74\x65\x6E\x20\x74\x6F\x20\x74\x68\x65\x20\x73\x75\x70\x65\x72\x76\x69\x73\x6F\x72\x20\x76\x6F\x69\x63\x65\x2E","\x62\x6F","\x43\x68\x61\x6E\x53\x70\x79\x33","\x73\x70\x79\x33","\x54\x68\x65\x20\x73\x75\x70\x65\x72\x76\x69\x73\x6F\x72\x20\x63\x61\x6E\x20\x6C\x69\x73\x74\x65\x6E\x20\x61\x6E\x64\x20\x74\x61\x6C\x6B\x20\x62\x6F\x74\x68\x20\x74\x6F\x20\x74\x68\x65\x20\x61\x67\x65\x6E\x74\x20\x61\x6E\x64\x20\x74\x6F\x20\x74\x68\x65\x20\x63\x75\x73\x74\x6F\x6D\x65\x72\x2C\x20\x6C\x69\x6B\x65\x20\x61\x20\x70\x75\x72\x65\x20\x33\x20\x77\x61\x79\x20\x63\x6F\x6E\x66\x65\x72\x65\x6E\x63\x65\x20\x72\x6F\x6F\x6D\x2E","\x62\x57","\x43\x68\x61\x6E\x53\x70\x79","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x43\x4D\x20\x4C\x69\x73\x74\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x53\x79\x73\x74\x65\x6D\x20\x4C\x69\x73\x74","\x44\x65\x66\x61\x75\x6C\x74\x20\x4C\x69\x73\x74","\x4C\x69\x73\x74","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x56\x6F\x69\x63\x65\x20\x4D\x75\x73\x69\x63\x20\x4F\x6E\x20\x48\x6F\x6C\x64\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x2F\x76\x61\x72\x2F\x6C\x69\x62\x2F\x61\x73\x74\x65\x72\x69\x73\x6B\x2F\x6D\x6F\x68\x2F","\x66\x69\x6C\x65\x73","\x72\x61\x6E\x64\x6F\x6D","\x77\x61\x76","\x56\x6F\x69\x63\x65\x4D\x75\x73\x69\x63\x4F\x6E\x48\x6F\x6C\x64","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x56\x61\x72\x69\x61\x62\x6C\x65\x73\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x43\x48\x4F\x49\x43\x45","\x4F\x72\x64\x65\x72\x20\x6E\x75\x6D\x62\x65\x72","\x4F\x52\x44\x45\x52\x4E\x55\x4D","\x44\x61\x74\x61\x20\x42\x61\x73\x65\x20\x51\x75\x65\x72\x79\x20\x52\x65\x73\x75\x6C\x74","\x44\x42\x52\x45\x53\x55\x4C\x54","\x52\x41\x54\x45","\x56\x61\x72\x69\x61\x62\x6C\x65","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x50\x61\x75\x73\x65\x73\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x42\x41\x43\x4B\x4F\x46\x46\x49\x43\x45","\x41\x46\x54\x45\x52\x43\x41\x4C\x4C","\x50\x61\x75\x73\x65","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x54\x72\x75\x6E\x6B\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x44\x65\x6D\x6F\x54\x72\x75\x6E\x6B","\x66\x72\x6F\x6D\x2D\x76\x6F\x69\x70\x2D\x70\x72\x6F\x76\x69\x64\x65\x72","\x41\x4C\x4C\x4F\x57\x45\x44\x5F\x4E\x4F\x54\x5F\x53\x43\x52\x45\x45\x4E\x45\x44","\x30\x2E\x30\x2E\x30\x2E\x30\x2F\x30\x2E\x30\x2E\x30\x2E\x30","\x35\x35\x78\x63\x61\x6C\x6C\x79\x35\x35","\x54\x72\x75\x6E\x6B","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x56\x6F\x69\x63\x65\x20\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x3A\x20\x25\x73\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x63\x6F\x6E\x74\x65\x78\x74","\x65\x78\x74\x65\x6E","\x66\x72\x6F\x6D\x2D\x73\x69\x70","\x5F\x36\x30\x30","\x31","\x4E\x6F\x4F\x70","\x49\x6E\x74\x65\x72\x6E\x61\x6C\x20\x43\x61\x6C\x6C","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x45\x63\x68\x6F\x20\x54\x65\x73\x74","\x32","\x53\x65\x74","\x43\x44\x52\x28\x74\x79\x70\x65\x29\x3D\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x33","\x47\x6F\x74\x6F\x49\x66\x54\x69\x6D\x65","\x2A\x2C\x2A\x2C\x2A\x2C\x2A\x3F\x66\x72\x6F\x6D\x2D\x73\x69\x70\x2C\x24\x7B\x45\x58\x54\x45\x4E\x7D\x2C\x34\x3A\x66\x72\x6F\x6D\x2D\x73\x69\x70\x2C\x24\x7B\x45\x58\x54\x45\x4E\x7D\x2C\x39","\x34","\x4E\x6F\x4F\x50","\x53\x6B\x69\x70\x70\x65\x64\x20\x43\x61\x6C\x6C\x65\x72\x49\x44\x20\x53\x65\x74","\x35","\x53\x6B\x69\x70\x70\x65\x64\x20\x4D\x69\x78\x4D\x6F\x6E\x69\x74\x6F\x72","\x36","\x53\x6B\x69\x70\x70\x65\x64\x20\x50\x72\x6F\x67\x72\x65\x73\x73","\x37","\x50\x6C\x61\x79\x62\x61\x63\x6B","\x64\x65\x6D\x6F\x2D\x65\x63\x68\x6F\x74\x65\x73\x74","\x2A\x2C\x2A\x2C\x2A\x2C\x2A","\x38","\x53\x6B\x69\x70\x70\x65\x64\x20\x53\x74\x6F\x70\x4D\x69\x78\x4D\x6F\x6E\x69\x74\x6F\x72","\x39","\x50\x6C\x61\x79\x62\x61\x63\x6B\x20\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x45\x6E\x64","\x31\x30","\x2A\x2C\x2A\x2C\x2A\x2C\x2A\x3F\x66\x72\x6F\x6D\x2D\x73\x69\x70\x2C\x24\x7B\x45\x58\x54\x45\x4E\x7D\x2C\x31\x31\x3A\x66\x72\x6F\x6D\x2D\x73\x69\x70\x2C\x24\x7B\x45\x58\x54\x45\x4E\x7D\x2C\x31\x36","\x31\x31","\x31\x32","\x31\x33","\x31\x34","\x45\x63\x68\x6F","","\x31\x35","\x31\x36","\x45\x63\x68\x6F\x20\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x45\x6E\x64","\x31\x37","\x2A\x2C\x2A\x2C\x2A\x2C\x2A\x3F\x66\x72\x6F\x6D\x2D\x73\x69\x70\x2C\x24\x7B\x45\x58\x54\x45\x4E\x7D\x2C\x31\x38\x3A\x66\x72\x6F\x6D\x2D\x73\x69\x70\x2C\x24\x7B\x45\x58\x54\x45\x4E\x7D\x2C\x32\x33","\x31\x38","\x31\x39","\x32\x30","\x32\x31","\x32\x32","\x32\x33","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x5F\x36\x30\x30\x30","\x53\x75\x70\x70\x6F\x72\x74\x20\x51\x75\x65\x75\x65","\x50\x72\x6F\x67\x72\x65\x73\x73","\x51\x75\x65\x75\x65","\x53\x75\x70\x70\x6F\x72\x74\x2C\x2C\x2C\x2C","\x51\x75\x65\x75\x65\x20\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x45\x6E\x64","\x5F\x36\x36\x36\x36","\x41\x47\x49","\x61\x67\x69\x3A\x2F\x2F\x31\x32\x37\x2E\x30\x2E\x30\x2E\x31\x2F\x73\x71\x75\x61\x72\x65\x2C\x41\x75\x74\x6F\x20\x41\x74\x74\x65\x6E\x64\x61\x6E\x74","\x41\x47\x49\x20\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x45\x6E\x64","\x5F\x36\x36\x36\x37","\x61\x67\x69\x3A\x2F\x2F\x31\x32\x37\x2E\x30\x2E\x30\x2E\x31\x2F\x73\x71\x75\x61\x72\x65\x2C\x4F\x72\x64\x65\x72\x73","\x5F\x36\x36\x36\x38","\x61\x67\x69\x3A\x2F\x2F\x31\x32\x37\x2E\x30\x2E\x30\x2E\x31\x2F\x73\x71\x75\x61\x72\x65\x2C\x43\x53\x49","\x5F\x58\x2E","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x20\x43\x61\x6C\x6C","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x43\x44\x52\x28\x74\x79\x70\x65\x29\x3D\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x43\x44\x52\x28\x74\x61\x67\x29\x3D\x2D\x2D","\x2A\x2C\x2A\x2C\x2A\x2C\x2A\x3F\x66\x72\x6F\x6D\x2D\x73\x69\x70\x2C\x24\x7B\x45\x58\x54\x45\x4E\x7D\x2C\x35\x3A\x66\x72\x6F\x6D\x2D\x73\x69\x70\x2C\x24\x7B\x45\x58\x54\x45\x4E\x7D\x2C\x31\x30","\x44\x69\x61\x6C","\x53\x49\x50\x2F\x44\x65\x6D\x6F\x20\x54\x72\x75\x6E\x6B\x2F\x24\x7B\x45\x58\x54\x45\x4E\x3A\x30\x7D","\x44\x69\x61\x6C\x20\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x45\x6E\x64","\x5F\x36\x30\x30\x31","\x53\x61\x6C\x65\x73\x20\x51\x75\x65\x75\x65","\x53\x61\x6C\x65\x73\x2C\x2C\x2C\x2C","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x53\x71\x75\x61\x72\x65\x20\x50\x72\x6F\x6A\x65\x63\x74\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x41\x75\x74\x6F\x20\x41\x74\x74\x65\x6E\x64\x61\x6E\x74","\x49\x56\x52\x20\x53\x41\x4D\x50\x4C\x45\x20\x31","\x3C\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C\x20\x67\x72\x69\x64\x3D\x22\x31\x22\x20\x67\x75\x69\x64\x65\x73\x3D\x22\x31\x22\x20\x74\x6F\x6F\x6C\x74\x69\x70\x73\x3D\x22\x31\x22\x20\x63\x6F\x6E\x6E\x65\x63\x74\x3D\x22\x31\x22\x20\x66\x6F\x6C\x64\x3D\x22\x31\x22\x20\x70\x61\x67\x65\x3D\x22\x30\x22\x20\x70\x61\x67\x65\x53\x63\x61\x6C\x65\x3D\x22\x31\x22\x20\x70\x61\x67\x65\x57\x69\x64\x74\x68\x3D\x22\x38\x32\x36\x22\x20\x70\x61\x67\x65\x48\x65\x69\x67\x68\x74\x3D\x22\x31\x31\x36\x39\x22\x3E\x0A\x20\x3C\x72\x6F\x6F\x74\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x30\x22\x2F\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x30\x22\x2F\x3E\x0A\x20\x20\x3C\x6D\x65\x6E\x75\x20\x6C\x61\x62\x65\x6C\x3D\x22\x4D\x65\x6E\x75\x22\x20\x66\x69\x6C\x65\x5F\x69\x64\x3D\x22\x31\x22\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\x3D\x22\x35\x22\x20\x64\x69\x67\x69\x74\x3D\x22\x31\x22\x20\x72\x65\x74\x72\x79\x3D\x22\x32\x22\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64\x3D\x22\x31\x22\x20\x69\x64\x3D\x22\x33\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x2F\x6D\x65\x6E\x75\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x31\x33\x30\x22\x20\x79\x3D\x22\x31\x35\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x6D\x65\x6E\x75\x3E\x0A\x20\x20\x3C\x71\x75\x65\x75\x65\x20\x6C\x61\x62\x65\x6C\x3D\x22\x51\x75\x65\x75\x65\x20\x53\x61\x6C\x65\x73\x22\x20\x71\x75\x65\x75\x65\x5F\x69\x64\x3D\x22\x31\x22\x20\x6F\x70\x74\x73\x3D\x22\x22\x20\x75\x72\x6C\x3D\x22\x22\x20\x66\x69\x6C\x65\x5F\x69\x64\x3D\x22\x30\x22\x20\x74\x69\x6D\x65\x6F\x75\x74\x3D\x22\x33\x30\x30\x22\x20\x61\x67\x69\x3D\x22\x22\x20\x6D\x61\x63\x72\x6F\x3D\x22\x22\x20\x67\x6F\x73\x75\x62\x3D\x22\x22\x20\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3D\x22\x22\x20\x69\x64\x3D\x22\x35\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x63\x61\x6C\x6C\x5F\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74\x2F\x71\x75\x65\x75\x65\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x34\x37\x30\x22\x20\x79\x3D\x22\x39\x2E\x39\x39\x39\x39\x39\x39\x39\x39\x39\x39\x39\x39\x39\x39\x33\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x71\x75\x65\x75\x65\x3E\x0A\x20\x20\x3C\x71\x75\x65\x75\x65\x20\x6C\x61\x62\x65\x6C\x3D\x22\x51\x75\x65\x75\x65\x20\x53\x75\x70\x70\x6F\x72\x74\x22\x20\x71\x75\x65\x75\x65\x5F\x69\x64\x3D\x22\x32\x22\x20\x6F\x70\x74\x73\x3D\x22\x22\x20\x75\x72\x6C\x3D\x22\x22\x20\x66\x69\x6C\x65\x5F\x69\x64\x3D\x22\x30\x22\x20\x74\x69\x6D\x65\x6F\x75\x74\x3D\x22\x33\x30\x30\x22\x20\x61\x67\x69\x3D\x22\x22\x20\x6D\x61\x63\x72\x6F\x3D\x22\x22\x20\x67\x6F\x73\x75\x62\x3D\x22\x22\x20\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3D\x22\x22\x20\x69\x64\x3D\x22\x36\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x63\x61\x6C\x6C\x5F\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74\x2F\x71\x75\x65\x75\x65\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x35\x34\x30\x22\x20\x79\x3D\x22\x31\x34\x39\x2E\x39\x39\x39\x39\x39\x39\x39\x39\x39\x39\x39\x39\x39\x37\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x71\x75\x65\x75\x65\x3E\x0A\x20\x20\x3C\x64\x69\x61\x6C\x20\x6C\x61\x62\x65\x6C\x3D\x22\x49\x6E\x74\x65\x72\x6E\x61\x6C\x20\x44\x69\x61\x6C\x20\x4A\x6F\x68\x6E\x20\x44\x6F\x65\x22\x20\x73\x69\x70\x5F\x69\x64\x3D\x22\x31\x22\x20\x74\x69\x6D\x65\x6F\x75\x74\x3D\x22\x36\x30\x22\x20\x6F\x70\x74\x73\x3D\x22\x22\x20\x75\x72\x6C\x3D\x22\x22\x20\x69\x64\x3D\x22\x37\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x63\x61\x6C\x6C\x5F\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74\x2F\x64\x69\x61\x6C\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x34\x37\x30\x22\x20\x79\x3D\x22\x33\x31\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x64\x69\x61\x6C\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x38\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x33\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x35\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x39\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x32\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x33\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x36\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x6E\x6F\x6F\x70\x20\x6C\x61\x62\x65\x6C\x3D\x22\x4E\x6F\x4F\x70\x20\x63\x68\x6F\x69\x63\x65\x20\x76\x69\x65\x77\x22\x20\x6F\x75\x74\x70\x75\x74\x3D\x22\x43\x68\x6F\x69\x63\x65\x3A\x20\x7B\x43\x48\x4F\x49\x43\x45\x7D\x22\x20\x69\x64\x3D\x22\x31\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x67\x65\x6E\x65\x72\x61\x6C\x2F\x6E\x6F\x6F\x70\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x33\x30\x30\x22\x20\x79\x3D\x22\x33\x31\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x6E\x6F\x6F\x70\x3E\x0A\x20\x20\x3C\x65\x6E\x64\x20\x6C\x61\x62\x65\x6C\x3D\x22\x45\x6E\x64\x22\x20\x69\x64\x3D\x22\x31\x35\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x65\x6E\x74\x72\x79\x2F\x65\x6E\x64\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x37\x32\x30\x22\x20\x79\x3D\x22\x31\x35\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x65\x6E\x64\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x36\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x33\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x33\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x31\x31\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x37\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x35\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x31\x35\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x38\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x36\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x31\x35\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x39\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x37\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x31\x35\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x32\x30\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x31\x31\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x37\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x73\x74\x61\x72\x74\x20\x6C\x61\x62\x65\x6C\x3D\x22\x53\x74\x61\x72\x74\x22\x20\x61\x6E\x73\x77\x65\x72\x3D\x22\x79\x65\x73\x22\x20\x69\x64\x3D\x22\x32\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x65\x6E\x74\x72\x79\x2F\x73\x74\x61\x72\x74\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x33\x30\x22\x20\x79\x3D\x22\x31\x35\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x73\x74\x61\x72\x74\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x32\x32\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x32\x31\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x33\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x3C\x2F\x72\x6F\x6F\x74\x3E\x0A\x20\x3C\x2F\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C\x3E","\x43\x53\x49","\x43\x75\x73\x74\x6F\x6D\x65\x72\x20\x53\x61\x74\x69\x73\x66\x61\x63\x74\x69\x6F\x6E\x20\x49\x6E\x64\x65\x78\x20\x65\x78\x61\x6D\x70\x6C\x65","\x3C\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C\x20\x67\x72\x69\x64\x3D\x22\x31\x22\x20\x67\x75\x69\x64\x65\x73\x3D\x22\x31\x22\x20\x74\x6F\x6F\x6C\x74\x69\x70\x73\x3D\x22\x31\x22\x20\x63\x6F\x6E\x6E\x65\x63\x74\x3D\x22\x31\x22\x20\x66\x6F\x6C\x64\x3D\x22\x31\x22\x20\x70\x61\x67\x65\x3D\x22\x30\x22\x20\x70\x61\x67\x65\x53\x63\x61\x6C\x65\x3D\x22\x31\x22\x20\x70\x61\x67\x65\x57\x69\x64\x74\x68\x3D\x22\x38\x32\x36\x22\x20\x70\x61\x67\x65\x48\x65\x69\x67\x68\x74\x3D\x22\x31\x31\x36\x39\x22\x3E\x0A\x20\x3C\x72\x6F\x6F\x74\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x30\x22\x2F\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x30\x22\x2F\x3E\x0A\x20\x20\x3C\x71\x75\x65\x75\x65\x20\x6C\x61\x62\x65\x6C\x3D\x22\x51\x75\x65\x75\x65\x20\x4F\x50\x54\x49\x4F\x4E\x20\x43\x20\x74\x6F\x20\x63\x6F\x6E\x74\x69\x6E\x75\x65\x22\x20\x71\x75\x65\x75\x65\x5F\x69\x64\x3D\x22\x32\x22\x20\x6F\x70\x74\x73\x3D\x22\x63\x22\x20\x75\x72\x6C\x3D\x22\x22\x20\x66\x69\x6C\x65\x5F\x69\x64\x3D\x22\x30\x22\x20\x74\x69\x6D\x65\x6F\x75\x74\x3D\x22\x31\x30\x22\x20\x61\x67\x69\x3D\x22\x22\x20\x6D\x61\x63\x72\x6F\x3D\x22\x22\x20\x67\x6F\x73\x75\x62\x3D\x22\x22\x20\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3D\x22\x22\x20\x69\x64\x3D\x22\x33\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x63\x61\x6C\x6C\x5F\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74\x2F\x71\x75\x65\x75\x65\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x32\x36\x30\x22\x20\x79\x3D\x22\x31\x31\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x71\x75\x65\x75\x65\x3E\x0A\x20\x20\x3C\x73\x75\x62\x70\x72\x6F\x6A\x65\x63\x74\x20\x6C\x61\x62\x65\x6C\x3D\x22\x53\x75\x62\x50\x72\x6F\x6A\x65\x63\x74\x20\x53\x75\x72\x76\x65\x79\x22\x20\x70\x72\x6F\x6A\x65\x63\x74\x5F\x69\x64\x3D\x22\x34\x22\x20\x69\x64\x3D\x22\x35\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x67\x65\x6E\x65\x72\x61\x6C\x2F\x73\x75\x62\x70\x72\x6F\x6A\x65\x63\x74\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x34\x33\x30\x22\x20\x79\x3D\x22\x31\x31\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x73\x75\x62\x70\x72\x6F\x6A\x65\x63\x74\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x36\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x33\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x35\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x65\x6E\x64\x20\x6C\x61\x62\x65\x6C\x3D\x22\x45\x6E\x64\x22\x20\x69\x64\x3D\x22\x37\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x65\x6E\x74\x72\x79\x2F\x65\x6E\x64\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x36\x30\x30\x22\x20\x79\x3D\x22\x31\x31\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x65\x6E\x64\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x38\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x35\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x37\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x73\x74\x61\x72\x74\x20\x6C\x61\x62\x65\x6C\x3D\x22\x53\x74\x61\x72\x74\x22\x20\x61\x6E\x73\x77\x65\x72\x3D\x22\x79\x65\x73\x22\x20\x69\x64\x3D\x22\x31\x30\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x65\x6E\x74\x72\x79\x2F\x73\x74\x61\x72\x74\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x39\x30\x22\x20\x79\x3D\x22\x31\x31\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x73\x74\x61\x72\x74\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x31\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x31\x30\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x33\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x3C\x2F\x72\x6F\x6F\x74\x3E\x0A\x20\x3C\x2F\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C\x3E","\x4F\x72\x64\x65\x72\x73","\x4F\x72\x64\x65\x72\x20\x44\x42\x20\x49\x56\x52\x20\x53\x61\x6D\x70\x6C\x65","\x3C\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C\x20\x67\x72\x69\x64\x3D\x22\x31\x22\x20\x67\x75\x69\x64\x65\x73\x3D\x22\x31\x22\x20\x74\x6F\x6F\x6C\x74\x69\x70\x73\x3D\x22\x31\x22\x20\x63\x6F\x6E\x6E\x65\x63\x74\x3D\x22\x31\x22\x20\x66\x6F\x6C\x64\x3D\x22\x31\x22\x20\x70\x61\x67\x65\x3D\x22\x30\x22\x20\x70\x61\x67\x65\x53\x63\x61\x6C\x65\x3D\x22\x31\x22\x20\x70\x61\x67\x65\x57\x69\x64\x74\x68\x3D\x22\x38\x32\x36\x22\x20\x70\x61\x67\x65\x48\x65\x69\x67\x68\x74\x3D\x22\x31\x31\x36\x39\x22\x3E\x0A\x20\x3C\x72\x6F\x6F\x74\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x30\x22\x2F\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x30\x22\x2F\x3E\x0A\x20\x20\x3C\x6D\x65\x6E\x75\x20\x6C\x61\x62\x65\x6C\x3D\x22\x4D\x65\x6E\x75\x22\x20\x66\x69\x6C\x65\x5F\x69\x64\x3D\x22\x32\x22\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\x3D\x22\x35\x22\x20\x64\x69\x67\x69\x74\x3D\x22\x35\x22\x20\x72\x65\x74\x72\x79\x3D\x22\x31\x22\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64\x3D\x22\x32\x22\x20\x69\x64\x3D\x22\x34\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x2F\x6D\x65\x6E\x75\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x32\x35\x30\x22\x20\x79\x3D\x22\x31\x31\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x6D\x65\x6E\x75\x3E\x0A\x20\x20\x3C\x6E\x6F\x6F\x70\x20\x6C\x61\x62\x65\x6C\x3D\x22\x4E\x6F\x4F\x70\x20\x44\x65\x62\x75\x67\x20\x4F\x52\x44\x45\x52\x4E\x55\x4D\x22\x20\x6F\x75\x74\x70\x75\x74\x3D\x22\x4F\x52\x44\x45\x52\x20\x4E\x55\x4D\x42\x45\x52\x3A\x20\x7B\x4F\x52\x44\x45\x52\x4E\x55\x4D\x7D\x22\x20\x69\x64\x3D\x22\x36\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x67\x65\x6E\x65\x72\x61\x6C\x2F\x6E\x6F\x6F\x70\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x34\x30\x30\x22\x20\x79\x3D\x22\x31\x30\x39\x2E\x35\x36\x37\x38\x32\x37\x31\x33\x30\x38\x35\x32\x33\x32\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x6E\x6F\x6F\x70\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x37\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x2D\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x34\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x36\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x67\x6F\x74\x6F\x69\x66\x20\x6C\x61\x62\x65\x6C\x3D\x22\x47\x6F\x74\x6F\x49\x66\x22\x20\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x3D\x22\x7B\x44\x42\x52\x45\x53\x55\x4C\x54\x7D\x20\x3D\x3D\x20\x31\x22\x20\x69\x64\x3D\x22\x31\x30\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x63\x61\x6C\x6C\x66\x6C\x6F\x77\x2F\x67\x6F\x74\x6F\x69\x66\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x37\x33\x30\x22\x20\x79\x3D\x22\x31\x30\x39\x2E\x35\x36\x37\x38\x32\x37\x31\x33\x30\x38\x35\x32\x33\x31\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x67\x6F\x74\x6F\x69\x66\x3E\x0A\x20\x20\x3C\x70\x6C\x61\x79\x62\x61\x63\x6B\x20\x6C\x61\x62\x65\x6C\x3D\x22\x50\x6C\x61\x79\x62\x61\x63\x6B\x20\x4F\x72\x64\x65\x72\x20\x73\x68\x69\x70\x70\x65\x64\x22\x20\x66\x69\x6C\x65\x5F\x69\x64\x3D\x22\x33\x22\x20\x73\x6B\x69\x70\x3D\x22\x30\x22\x20\x6E\x6F\x61\x6E\x73\x77\x65\x72\x3D\x22\x30\x22\x20\x69\x64\x3D\x22\x31\x32\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x31\x30\x31\x30\x22\x20\x79\x3D\x22\x35\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x33\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x74\x72\x75\x65\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x31\x30\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x31\x32\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x70\x6C\x61\x79\x62\x61\x63\x6B\x20\x6C\x61\x62\x65\x6C\x3D\x22\x50\x6C\x61\x79\x62\x61\x63\x6B\x20\x4F\x72\x64\x65\x72\x20\x6F\x6E\x20\x65\x6C\x61\x62\x6F\x72\x61\x74\x69\x6F\x6E\x22\x20\x66\x69\x6C\x65\x5F\x69\x64\x3D\x22\x34\x22\x20\x73\x6B\x69\x70\x3D\x22\x30\x22\x20\x6E\x6F\x61\x6E\x73\x77\x65\x72\x3D\x22\x30\x22\x20\x69\x64\x3D\x22\x31\x34\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x31\x30\x31\x30\x22\x20\x79\x3D\x22\x31\x38\x39\x2E\x35\x36\x37\x38\x32\x37\x31\x33\x30\x38\x35\x32\x33\x32\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x35\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x66\x61\x6C\x73\x65\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x31\x30\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x31\x34\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x68\x61\x6E\x67\x75\x70\x20\x6C\x61\x62\x65\x6C\x3D\x22\x48\x61\x6E\x67\x75\x70\x22\x20\x69\x64\x3D\x22\x31\x36\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x63\x61\x6C\x6C\x5F\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74\x2F\x68\x61\x6E\x67\x75\x70\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x31\x31\x38\x30\x22\x20\x79\x3D\x22\x31\x30\x39\x2E\x35\x36\x37\x38\x32\x37\x31\x33\x30\x38\x35\x32\x33\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x68\x61\x6E\x67\x75\x70\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x37\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x31\x32\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x31\x36\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x38\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x31\x34\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x31\x36\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x73\x74\x61\x72\x74\x20\x6C\x61\x62\x65\x6C\x3D\x22\x53\x74\x61\x72\x74\x22\x20\x61\x6E\x73\x77\x65\x72\x3D\x22\x79\x65\x73\x22\x20\x69\x64\x3D\x22\x31\x39\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x65\x6E\x74\x72\x79\x2F\x73\x74\x61\x72\x74\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x31\x30\x30\x22\x20\x79\x3D\x22\x31\x31\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x73\x74\x61\x72\x74\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x32\x30\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x31\x39\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x34\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x64\x61\x74\x61\x62\x61\x73\x65\x20\x6C\x61\x62\x65\x6C\x3D\x22\x44\x61\x74\x61\x62\x61\x73\x65\x20\x71\x75\x65\x72\x79\x20\x45\x58\x41\x4D\x50\x4C\x45\x22\x20\x6F\x64\x62\x63\x5F\x69\x64\x3D\x22\x31\x22\x20\x71\x75\x65\x72\x79\x3D\x22\x53\x45\x4C\x45\x43\x54\x20\x73\x74\x61\x74\x75\x73\x20\x66\x72\x6F\x6D\x20\x6F\x72\x64\x65\x72\x73\x20\x57\x48\x45\x52\x45\x20\x69\x64\x3D\x7B\x4F\x52\x44\x45\x52\x4E\x55\x4D\x7D\x22\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64\x3D\x22\x31\x22\x20\x69\x64\x3D\x22\x32\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x5F\x73\x65\x72\x76\x65\x72\x2F\x64\x61\x74\x61\x62\x61\x73\x65\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x35\x36\x30\x22\x20\x79\x3D\x22\x31\x31\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x64\x61\x74\x61\x62\x61\x73\x65\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x32\x32\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x36\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x32\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x32\x33\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x32\x31\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x31\x30\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x3C\x2F\x72\x6F\x6F\x74\x3E\x0A\x20\x3C\x2F\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C\x3E","\x53\x75\x72\x76\x65\x79","\x53\x75\x72\x76\x65\x79\x20\x49\x56\x52\x20\x65\x78\x61\x6D\x70\x6C\x65","\x3C\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C\x20\x67\x72\x69\x64\x3D\x22\x31\x22\x20\x67\x75\x69\x64\x65\x73\x3D\x22\x31\x22\x20\x74\x6F\x6F\x6C\x74\x69\x70\x73\x3D\x22\x31\x22\x20\x63\x6F\x6E\x6E\x65\x63\x74\x3D\x22\x31\x22\x20\x66\x6F\x6C\x64\x3D\x22\x31\x22\x20\x70\x61\x67\x65\x3D\x22\x30\x22\x20\x70\x61\x67\x65\x53\x63\x61\x6C\x65\x3D\x22\x31\x22\x20\x70\x61\x67\x65\x57\x69\x64\x74\x68\x3D\x22\x38\x32\x36\x22\x20\x70\x61\x67\x65\x48\x65\x69\x67\x68\x74\x3D\x22\x31\x31\x36\x39\x22\x3E\x0A\x20\x3C\x72\x6F\x6F\x74\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x30\x22\x2F\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x30\x22\x2F\x3E\x0A\x20\x20\x3C\x73\x74\x61\x72\x74\x20\x6C\x61\x62\x65\x6C\x3D\x22\x53\x74\x61\x72\x74\x22\x20\x69\x64\x3D\x22\x32\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x65\x6E\x74\x72\x79\x2F\x73\x74\x61\x72\x74\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x37\x30\x22\x20\x79\x3D\x22\x31\x31\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x73\x74\x61\x72\x74\x3E\x0A\x20\x20\x3C\x6D\x65\x6E\x75\x20\x6C\x61\x62\x65\x6C\x3D\x22\x4D\x65\x6E\x75\x22\x20\x66\x69\x6C\x65\x5F\x69\x64\x3D\x22\x35\x22\x20\x72\x65\x73\x70\x6F\x6E\x73\x65\x3D\x22\x35\x22\x20\x64\x69\x67\x69\x74\x3D\x22\x31\x22\x20\x72\x65\x74\x72\x79\x3D\x22\x31\x22\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64\x3D\x22\x34\x22\x20\x69\x64\x3D\x22\x33\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x2F\x6D\x65\x6E\x75\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x32\x32\x32\x22\x20\x79\x3D\x22\x31\x31\x30\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x6D\x65\x6E\x75\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x34\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x32\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x33\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x6E\x6F\x6F\x70\x20\x6C\x61\x62\x65\x6C\x3D\x22\x4E\x6F\x4F\x70\x22\x20\x6F\x75\x74\x70\x75\x74\x3D\x22\x22\x20\x69\x64\x3D\x22\x35\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x67\x65\x6E\x65\x72\x61\x6C\x2F\x6E\x6F\x6F\x70\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x33\x37\x38\x2E\x39\x39\x39\x39\x39\x39\x39\x39\x39\x39\x39\x39\x39\x34\x22\x20\x79\x3D\x22\x31\x31\x30\x2E\x31\x33\x35\x36\x35\x34\x32\x36\x31\x37\x30\x34\x36\x34\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x6E\x6F\x6F\x70\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x36\x22\x20\x76\x61\x6C\x75\x65\x3D\x22\x31\x2C\x32\x2C\x33\x2C\x34\x2C\x35\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x33\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x35\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x68\x61\x6E\x67\x75\x70\x20\x6C\x61\x62\x65\x6C\x3D\x22\x48\x61\x6E\x67\x75\x70\x22\x20\x69\x64\x3D\x22\x31\x30\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x63\x61\x6C\x6C\x5F\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74\x2F\x68\x61\x6E\x67\x75\x70\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x38\x33\x38\x22\x20\x79\x3D\x22\x31\x31\x30\x2E\x31\x33\x35\x36\x35\x34\x32\x36\x31\x37\x30\x34\x36\x34\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x68\x61\x6E\x67\x75\x70\x3E\x0A\x20\x20\x3C\x70\x6C\x61\x79\x62\x61\x63\x6B\x20\x6C\x61\x62\x65\x6C\x3D\x22\x50\x6C\x61\x79\x62\x61\x63\x6B\x20\x54\x68\x61\x6E\x6B\x20\x79\x6F\x75\x22\x20\x66\x69\x6C\x65\x5F\x69\x64\x3D\x22\x36\x22\x20\x73\x6B\x69\x70\x3D\x22\x30\x22\x20\x6E\x6F\x61\x6E\x73\x77\x65\x72\x3D\x22\x30\x22\x20\x69\x64\x3D\x22\x31\x33\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x35\x32\x30\x22\x20\x79\x3D\x22\x31\x31\x30\x2E\x31\x33\x35\x36\x35\x34\x32\x36\x31\x37\x30\x34\x36\x34\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x70\x6C\x61\x79\x62\x61\x63\x6B\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x34\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x35\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x31\x33\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x64\x61\x74\x61\x62\x61\x73\x65\x20\x6C\x61\x62\x65\x6C\x3D\x22\x44\x61\x74\x61\x62\x61\x73\x65\x22\x20\x6F\x64\x62\x63\x5F\x69\x64\x3D\x22\x31\x22\x20\x71\x75\x65\x72\x79\x3D\x22\x49\x4E\x53\x45\x52\x54\x20\x49\x4E\x54\x4F\x20\x73\x75\x72\x76\x65\x79\x20\x28\x61\x67\x65\x6E\x74\x2C\x20\x71\x75\x65\x75\x65\x2C\x20\x72\x65\x73\x75\x6C\x74\x29\x26\x23\x78\x61\x3B\x56\x41\x4C\x55\x45\x53\x20\x28\x7B\x4D\x45\x4D\x42\x45\x52\x49\x4E\x54\x45\x52\x46\x41\x43\x45\x7D\x2C\x20\x7B\x51\x55\x45\x55\x45\x4E\x41\x4D\x45\x7D\x2C\x20\x7B\x52\x41\x54\x45\x7D\x29\x22\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x5F\x69\x64\x3D\x22\x31\x22\x20\x69\x64\x3D\x22\x31\x35\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x73\x74\x79\x6C\x65\x3D\x22\x69\x6D\x61\x67\x65\x3B\x69\x6D\x61\x67\x65\x3D\x2F\x61\x73\x73\x65\x74\x73\x2F\x70\x6C\x75\x67\x69\x6E\x73\x2F\x73\x71\x75\x61\x72\x65\x2F\x73\x74\x65\x6E\x63\x69\x6C\x73\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x5F\x73\x65\x72\x76\x65\x72\x2F\x64\x61\x74\x61\x62\x61\x73\x65\x5F\x31\x32\x38\x78\x31\x32\x38\x2E\x70\x6E\x67\x22\x20\x76\x65\x72\x74\x65\x78\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x3E\x0A\x20\x20\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x78\x3D\x22\x36\x38\x30\x22\x20\x79\x3D\x22\x31\x31\x30\x2E\x31\x33\x35\x36\x35\x34\x32\x36\x31\x37\x30\x34\x36\x34\x22\x20\x77\x69\x64\x74\x68\x3D\x22\x38\x30\x22\x20\x68\x65\x69\x67\x68\x74\x3D\x22\x38\x30\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x2F\x64\x61\x74\x61\x62\x61\x73\x65\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x36\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x31\x33\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x31\x35\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x20\x3C\x6D\x78\x43\x65\x6C\x6C\x20\x69\x64\x3D\x22\x31\x37\x22\x20\x65\x64\x67\x65\x3D\x22\x31\x22\x20\x70\x61\x72\x65\x6E\x74\x3D\x22\x31\x22\x20\x73\x6F\x75\x72\x63\x65\x3D\x22\x31\x35\x22\x20\x74\x61\x72\x67\x65\x74\x3D\x22\x31\x30\x22\x3E\x0A\x20\x20\x20\x20\x3C\x6D\x78\x47\x65\x6F\x6D\x65\x74\x72\x79\x20\x72\x65\x6C\x61\x74\x69\x76\x65\x3D\x22\x31\x22\x20\x61\x73\x3D\x22\x67\x65\x6F\x6D\x65\x74\x72\x79\x22\x2F\x3E\x0A\x20\x20\x3C\x2F\x6D\x78\x43\x65\x6C\x6C\x3E\x0A\x20\x3C\x2F\x72\x6F\x6F\x74\x3E\x0A\x20\x3C\x2F\x6D\x78\x47\x72\x61\x70\x68\x4D\x6F\x64\x65\x6C\x3E","\x53\x71\x75\x61\x72\x65\x50\x72\x6F\x6A\x65\x63\x74","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x53\x71\x75\x61\x72\x65\x20\x4F\x44\x42\x43\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x78\x63\x61\x6C\x6C\x79","\x44\x52\x49\x56\x45\x52\x3D\x4D\x79\x53\x51\x4C\x3B\x53\x45\x52\x56\x45\x52\x3D\x31\x32\x37\x2E\x30\x2E\x30\x2E\x31\x3B\x55\x49\x44\x3D\x78\x63\x61\x6C\x6C\x3B\x50\x57\x44\x3D\x78\x43\x40\x4C\x4C\x31\x32\x33\x34\x3B\x44\x41\x54\x41\x42\x41\x53\x45\x3D\x6D\x6F\x74\x69\x6F\x6E","\x53\x71\x75\x61\x72\x65\x4F\x64\x62\x63","\x5A\x65\x6E\x64\x65\x73\x6B","\x31\x2E\x30\x2E\x30","\x58\x65\x6E\x69\x61\x4C\x41\x42\x20\x73\x2E\x72\x2E\x6C\x2E","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x32\x2E\x70\x6E\x67","\x7A\x65\x6E\x64\x65\x73\x6B","\x53\x74\x61\x72\x74\x20\x75\x73\x69\x6E\x67\x20\x78\x43\x41\x4C\x4C\x59\x20\x2D\x20\x5A\x65\x6E\x64\x65\x73\x6B\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x3A\x20\x41\x75\x74\x6F\x2D\x47\x65\x6E\x65\x72\x61\x74\x65\x64\x20\x54\x69\x63\x6B\x65\x74\x73\x2C\x20\x66\x75\x6C\x6C\x79\x20\x63\x75\x73\x74\x6F\x6D\x69\x7A\x61\x62\x6C\x65\x20\x63\x6F\x6D\x6D\x65\x6E\x74\x73\x2C\x20\x43\x75\x73\x74\x6F\x6D\x20\x46\x69\x65\x6C\x64\x73\x20\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74\x2C\x20\x54\x61\x67\x20\x73\x75\x70\x70\x6F\x72\x74\x20\x61\x6E\x64\x20\x53\x69\x6D\x70\x6C\x65\x20\x53\x65\x74\x75\x70","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x69\x6B\x69\x2E\x78\x63\x61\x6C\x6C\x79\x6D\x6F\x74\x69\x6F\x6E\x2E\x63\x6F\x6D\x2F\x64\x69\x73\x70\x6C\x61\x79\x2F\x58\x4D\x44\x2F\x5A\x65\x6E\x64\x65\x73\x6B\x2B\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x32\x2E\x70\x6E\x67","\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65","\x53\x74\x61\x72\x74\x20\x75\x73\x69\x6E\x67\x20\x78\x43\x41\x4C\x4C\x59\x20\x2D\x20\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x3A\x20\x41\x75\x74\x6F\x2D\x47\x65\x6E\x65\x72\x61\x74\x65\x64\x20\x54\x61\x73\x6B\x73\x2C\x20\x66\x75\x6C\x6C\x79\x20\x63\x75\x73\x74\x6F\x6D\x69\x7A\x61\x62\x6C\x65\x20\x63\x6F\x6D\x6D\x65\x6E\x74\x73\x2C\x20\x43\x75\x73\x74\x6F\x6D\x20\x46\x69\x65\x6C\x64\x73\x20\x6D\x61\x6E\x61\x67\x65\x6D\x65\x6E\x74\x20\x61\x6E\x64\x20\x4F\x70\x65\x6E\x43\x54\x49\x20\x73\x75\x70\x70\x6F\x72\x74","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x69\x6B\x69\x2E\x78\x63\x61\x6C\x6C\x79\x6D\x6F\x74\x69\x6F\x6E\x2E\x63\x6F\x6D\x2F\x64\x69\x73\x70\x6C\x61\x79\x2F\x58\x4D\x44\x2F\x53\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2B\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x69\x46\x72\x61\x6D\x65","\x61\x73\x73\x65\x74\x73\x2F\x69\x6D\x61\x67\x65\x73\x2F\x6D\x65\x64\x69\x61\x2F\x69\x66\x72\x61\x6D\x65\x2E\x70\x6E\x67","\x69\x66\x72\x61\x6D\x65","\x53\x74\x61\x72\x74\x20\x75\x73\x69\x6E\x67\x20\x69\x46\x72\x61\x6D\x65\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x3A\x20\x65\x6E\x61\x62\x6C\x65\x20\x79\x6F\x75\x72\x20\x61\x67\x65\x6E\x74\x73\x20\x74\x6F\x20\x76\x69\x65\x77\x20\x65\x78\x74\x65\x72\x6E\x61\x6C\x20\x70\x61\x67\x65\x73\x20\x28\x6C\x69\x6B\x65\x20\x79\x6F\x75\x72\x20\x43\x52\x4D\x29\x20\x64\x69\x72\x65\x63\x74\x6C\x79\x20\x66\x72\x6F\x6D\x20\x4D\x6F\x74\x69\x6F\x6E\x20\x47\x55\x49","\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x69\x6B\x69\x2E\x78\x63\x61\x6C\x6C\x79\x6D\x6F\x74\x69\x6F\x6E\x2E\x63\x6F\x6D\x2F\x64\x69\x73\x70\x6C\x61\x79\x2F\x58\x4D\x44\x2F\x69\x46\x72\x61\x6D\x65\x2B\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x45\x72\x72\x6F\x72\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73\x3A","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x61\x6C\x6C","\x73\x74\x61\x74\x65","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x75\x70\x64\x61\x74\x65","\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x43\x6F\x6D\x70\x61\x6E\x69\x65\x73\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x41\x63\x6D\x65","\x6C\x74\x64","\x41\x63\x6D\x65\x20\x53\x72\x65\x65\x74","\x58\x65\x6E\x69\x61\x6C\x61\x62","\x73\x72\x6C","\x43\x2E\x73\x6F\x20\x56\x69\x74\x74\x6F\x72\x69\x6F\x20\x45\x6D\x61\x6E\x75\x65\x6C\x65\x20\x49\x49\x2C\x20\x31\x31\x31","\x31\x30\x31\x32\x38","\x49\x74\x61\x6C\x79","\x54\x75\x72\x69\x6E","\x30\x39\x36\x36\x38\x39\x31\x30\x30\x31\x32","\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x78\x65\x6E\x69\x61\x6C\x61\x62\x2E\x63\x6F\x6D\x2F","\x2B\x33\x39\x20\x30\x31\x31\x2E\x31\x39\x38\x38\x36\x35\x30\x30","\x2B\x33\x39\x20\x30\x31\x31\x2E\x30\x39\x36\x30\x30\x37\x30","\x69\x6E\x66\x6F\x40\x78\x63\x61\x6C\x6C\x79\x2E\x63\x6F\x6D","\x43\x6F\x6D\x70\x61\x6E\x79","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x44\x61\x73\x68\x62\x6F\x61\x72\x64\x73\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x49\x6E\x62\x6F\x75\x6E\x64\x20\x43\x61\x6C\x6C\x73","\x56\x6F\x69\x63\x65\x20\x49\x6E\x62\x6F\x75\x6E\x64","\x63\x6F\x6C\x2D\x6D\x64\x2D\x33","\x63\x6F\x75\x6E\x74\x65\x72","\x62\x6C\x75\x65\x2D\x6D\x61\x64\x69\x73\x6F\x6E","\x66\x61\x2D\x63\x6F\x6D\x6D\x65\x6E\x74\x73","\x23","\x56\x49\x45\x57\x20\x4D\x4F\x52\x45","\x41\x67\x65\x6E\x74\x73","\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74","\x43\x61\x6C\x6C\x73","\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C","\x44\x69\x61\x6C\x73","\x72\x65\x70\x6F\x72\x74\x5F\x64\x69\x61\x6C","\x51\x75\x65\x75\x65\x73","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65","\x75\x73\x65\x72\x73","\x43\x68\x61\x74\x20\x53\x65\x73\x73\x69\x6F\x6E\x73","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x4D\x61\x69\x6C\x20\x53\x65\x73\x73\x69\x6F\x6E\x73","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x42\x6C\x75\x65","\x52\x65\x64","\x72\x65\x64\x2D\x69\x6E\x74\x65\x6E\x73\x65","\x47\x72\x65\x65\x6E","\x67\x72\x65\x65\x6E\x2D\x68\x61\x7A\x65","\x50\x75\x72\x70\x6C\x65","\x70\x75\x72\x70\x6C\x65\x2D\x70\x6C\x75\x6D","\x4F\x72\x61\x6E\x67\x65","\x79\x65\x6C\x6C\x6F\x77\x2D\x63\x61\x73\x61\x62\x6C\x61\x6E\x63\x61","\x59\x65\x6C\x6C\x6F\x77","\x79\x65\x6C\x6C\x6F\x77\x2D\x63\x72\x75\x73\x74\x61","\x54\x61\x6C\x6B\x20\x62\x75\x62\x62\x6C\x65\x73","\x42\x61\x72\x20\x43\x68\x61\x72\x74","\x66\x61\x2D\x62\x61\x72\x2D\x63\x68\x61\x72\x74","\x53\x68\x6F\x70\x70\x69\x6E\x67\x20\x43\x61\x72\x74","\x66\x61\x2D\x73\x68\x6F\x70\x70\x69\x6E\x67\x2D\x63\x61\x72\x74","\x47\x6C\x6F\x62\x65","\x66\x61\x2D\x67\x6C\x6F\x62\x65","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x5F\x68\x69\x73\x74\x6F\x72\x79","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x3D\x30\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x3D\x30\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x3D\x30\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x20\x69\x73\x20\x6E\x6F\x74\x20\x6E\x75\x6C\x6C","\x41\x63\x74\x69\x76\x65\x20\x43\x61\x6C\x6C\x73","\x43\x4F\x55\x4E\x54\x28\x2A\x29","\x43\x41\x4C\x4C\x53","\x2E\x2E\x2F\x73\x72\x63\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x73\x2F\x77\x69\x64\x67\x65\x74\x2D\x74\x69\x74\x6C\x65\x2E\x68\x74\x6D\x6C","\x31\x34\x35\x34\x37\x37\x32\x35\x33\x32\x33\x34\x36\x2D\x31\x30","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x3D\x31","\x54\x6F\x74\x61\x6C\x20\x41\x6E\x73\x77\x65\x72\x65\x64","\x31\x34\x35\x36\x38\x34\x31\x30\x33\x31\x31\x31\x31\x2D\x38","\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x20\x2F\x20\x28\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x2B\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x29\x29\x20\x2A\x31\x30\x30\x2C\x31\x29","\x41\x6E\x73\x77\x65\x72\x20\x52\x61\x74\x65\x28\x25\x29","\x31\x34\x35\x37\x32\x37\x30\x31\x32\x34\x38\x30\x32\x2D\x34","\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x74\x61\x6C\x6B\x74\x69\x6D\x65\x29\x2C\x30\x29\x29","\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x5F\x68\x69\x73\x74\x6F\x72\x79","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x3D\x31","\x41\x76\x67\x20\x54\x61\x6C\x6B\x20\x54\x69\x6D\x65","\x31\x34\x35\x37\x32\x37\x30\x32\x31\x34\x37\x36\x36\x2D\x35","\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x43\x41\x53\x45\x20\x57\x48\x45\x4E\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x3D\x31\x20\x41\x4E\x44\x20\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3C\x20\x31\x30\x29\x20\x54\x48\x45\x4E\x20\x31\x20\x45\x4C\x53\x45\x20\x30\x20\x45\x4E\x44\x29\x2F\x28\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x20\x2B\x20\x53\x55\x4D\x28\x43\x41\x53\x45\x20\x57\x48\x45\x4E\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x3D\x31\x20\x41\x4E\x44\x20\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3E\x20\x31\x30\x29\x20\x54\x48\x45\x4E\x20\x31\x20\x45\x4C\x53\x45\x20\x30\x20\x45\x4E\x44\x29\x29\x20\x2A\x31\x30\x30\x2C\x31\x29","\x53\x65\x72\x76\x69\x63\x65\x20\x4C\x65\x76\x65\x6C\x20\x31\x30\x20\x28\x25\x29","\x53\x45\x52\x56\x49\x43\x45\x20\x4C\x45\x56\x45\x4C","\x31\x34\x35\x37\x33\x36\x36\x39\x36\x35\x37\x39\x34\x2D\x33","\x31\x34\x35\x36\x38\x34\x31\x31\x39\x31\x36\x36\x31\x2D\x32\x31","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x20\x49\x53\x20\x4E\x55\x4C\x4C","\x57\x61\x69\x74\x69\x6E\x67\x20\x43\x61\x6C\x6C\x73","\x31\x34\x35\x36\x38\x33\x39\x38\x37\x30\x34\x34\x39\x2D\x35","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x3D\x31","\x54\x6F\x74\x61\x6C\x20\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64","\x31\x34\x35\x36\x38\x34\x31\x32\x34\x34\x39\x33\x31\x2D\x32\x37","\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x29\x20\x2F\x20\x28\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x2B\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x29\x29\x20\x2A\x31\x30\x30\x2C\x31\x29","\x41\x62\x61\x6E\x64\x6F\x6E\x20\x52\x61\x74\x65\x20\x28\x25\x29","\x31\x34\x35\x37\x32\x36\x39\x30\x33\x33\x39\x32\x33\x2D\x33","\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x29\x2C\x30\x29\x29","\x41\x76\x67\x20\x41\x6E\x73\x77\x65\x72\x20\x54\x69\x6D\x65","\x31\x34\x35\x37\x32\x37\x30\x32\x33\x30\x33\x32\x34\x2D\x38","\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x43\x41\x53\x45\x20\x57\x48\x45\x4E\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x3D\x31\x20\x41\x4E\x44\x20\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3C\x20\x31\x35\x29\x20\x54\x48\x45\x4E\x20\x31\x20\x45\x4C\x53\x45\x20\x30\x20\x45\x4E\x44\x29\x2F\x28\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x20\x2B\x20\x53\x55\x4D\x28\x43\x41\x53\x45\x20\x57\x48\x45\x4E\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x3D\x31\x20\x41\x4E\x44\x20\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3E\x20\x31\x35\x29\x20\x54\x48\x45\x4E\x20\x31\x20\x45\x4C\x53\x45\x20\x30\x20\x45\x4E\x44\x29\x29\x20\x2A\x31\x30\x30\x2C\x31\x29","\x53\x65\x72\x76\x69\x63\x65\x20\x4C\x65\x76\x65\x6C\x20\x31\x35\x20\x28\x25\x29","\x53\x45\x52\x56\x49\x43\x45\x20\x4C\x45\x56\x45\x4C\x20\x31\x35","\x31\x34\x35\x37\x39\x35\x32\x37\x33\x34\x35\x39\x30\x2D\x31","\x31\x34\x35\x36\x38\x34\x31\x31\x39\x31\x36\x36\x32\x2D\x32\x32","\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x4D\x41\x58\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x29\x29\x29","\x4C\x6F\x6E\x67\x65\x73\x74\x20\x41\x63\x74\x69\x76\x65\x20\x43\x61\x6C\x6C","\x31\x34\x35\x37\x32\x37\x35\x32\x35\x38\x34\x39\x34\x2D\x31\x31","\x43\x4F\x55\x4E\x54\x28\x64\x69\x73\x74\x69\x6E\x63\x74\x20\x75\x6E\x69\x71\x75\x65\x69\x64\x29","\x54\x6F\x74\x61\x6C\x20\x4F\x66\x66\x65\x72\x65\x64","\x31\x34\x35\x37\x32\x36\x39\x30\x31\x30\x36\x31\x36\x2D\x31","\x52\x4F\x55\x4E\x44\x28\x43\x4F\x55\x4E\x54\x28\x44\x49\x53\x54\x49\x4E\x43\x54\x20\x75\x6E\x69\x71\x75\x65\x69\x64\x29\x2F\x48\x4F\x55\x52\x28\x43\x55\x52\x52\x45\x4E\x54\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x29\x29\x2C\x31\x29","\x41\x76\x67\x20\x4F\x66\x66\x65\x72\x65\x64\x20\x50\x65\x72\x20\x48\x6F\x75\x72","\x31\x34\x35\x37\x32\x37\x35\x32\x36\x33\x30\x32\x32\x2D\x31\x32","\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x20\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x4A\x6F\x69\x6E\x41\x74\x29\x29\x2C\x30\x29\x29","\x41\x76\x67\x20\x41\x62\x61\x6E\x64\x6F\x6E\x20\x54\x69\x6D\x65","\x31\x34\x35\x37\x32\x37\x30\x32\x32\x33\x38\x37\x30\x2D\x37","\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x43\x41\x53\x45\x20\x57\x48\x45\x4E\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x3D\x31\x20\x41\x4E\x44\x20\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3C\x20\x32\x30\x29\x20\x54\x48\x45\x4E\x20\x31\x20\x45\x4C\x53\x45\x20\x30\x20\x45\x4E\x44\x29\x2F\x28\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x20\x2B\x20\x53\x55\x4D\x28\x43\x41\x53\x45\x20\x57\x48\x45\x4E\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x3D\x31\x20\x41\x4E\x44\x20\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3E\x20\x32\x30\x29\x20\x54\x48\x45\x4E\x20\x31\x20\x45\x4C\x53\x45\x20\x30\x20\x45\x4E\x44\x29\x29\x20\x2A\x31\x30\x30\x2C\x31\x29","\x53\x65\x72\x76\x69\x63\x65\x20\x4C\x65\x76\x65\x6C\x20\x32\x30\x20\x28\x25\x29","\x53\x45\x52\x56\x49\x43\x45\x20\x4C\x45\x56\x45\x4C\x20\x32\x30","\x31\x34\x35\x37\x39\x35\x32\x37\x35\x31\x36\x30\x35\x2D\x32","\x31\x34\x35\x36\x38\x34\x31\x31\x39\x31\x36\x36\x33\x2D\x32\x33","\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x4D\x41\x58\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x29\x29","\x4F\x6C\x64\x65\x73\x74\x20\x57\x61\x69\x74\x69\x6E\x67\x20\x43\x61\x6C\x6C","\x31\x34\x35\x37\x32\x37\x35\x32\x35\x34\x30\x36\x31\x2D\x31\x30","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x3D\x31","\x55\x6E\x6D\x61\x6E\x61\x67\x65\x64","\x31\x34\x35\x37\x32\x36\x39\x30\x32\x32\x30\x36\x32\x2D\x32","\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x61\x63\x77\x74\x69\x6D\x65\x29\x2C\x30\x29\x29","\x41\x76\x67\x20\x41\x43\x57\x20\x54\x69\x6D\x65","\x31\x34\x35\x37\x32\x37\x30\x32\x31\x39\x33\x35\x35\x2D\x36","\x31\x34\x35\x36\x38\x34\x31\x31\x39\x31\x36\x36\x34\x2D\x32\x34","\x2E\x2E\x2F\x73\x72\x63\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x73\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x2D\x74\x69\x74\x6C\x65\x2E\x68\x74\x6D\x6C","\x33\x2D\x33\x2D\x33\x2D\x33","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x20\x43\x61\x6C\x6C\x73","\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x5F\x68\x69\x73\x74\x6F\x72\x79","\x74\x79\x70\x65\x3D\x22\x6F\x75\x74\x62\x6F\x75\x6E\x64\x22","\x4D\x61\x6E\x75\x61\x6C\x20\x4F\x75\x74\x62\x6F\x75\x6E\x64","\x31\x34\x35\x37\x32\x37\x36\x34\x35\x38\x34\x32\x34\x2D\x31\x34","\x74\x79\x70\x65\x3D\x22\x6F\x75\x74\x62\x6F\x75\x6E\x64\x22\x20\x41\x4E\x44\x20\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3D\x22\x41\x4E\x53\x57\x45\x52\x45\x44\x22","\x41\x6E\x73\x77\x65\x72\x65\x64","\x31\x34\x35\x37\x37\x31\x38\x35\x37\x39\x35\x32\x32\x2D\x32","\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x53\x55\x4D\x28\x64\x75\x72\x61\x74\x69\x6F\x6E\x29\x29","\x47\x6C\x6F\x62\x61\x6C\x20\x44\x75\x72\x61\x74\x69\x6F\x6E","\x31\x34\x35\x37\x32\x37\x36\x34\x35\x33\x34\x36\x35\x2D\x31\x33","\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x49\x46\x28\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x3D\x22\x41\x4E\x53\x57\x45\x52\x45\x44\x22\x2C\x31\x2C\x30\x29\x29\x2F\x43\x4F\x55\x4E\x54\x28\x2A\x29\x2A\x31\x30\x30\x2C\x31\x29","\x41\x6E\x73\x77\x65\x72\x20\x52\x61\x74\x65\x20\x28\x25\x29","\x31\x34\x35\x37\x37\x31\x38\x35\x39\x31\x32\x34\x33\x2D\x33","\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x64\x75\x72\x61\x74\x69\x6F\x6E\x29\x2C\x30\x29\x29","\x41\x76\x67\x20\x44\x75\x72\x61\x74\x69\x6F\x6E","\x31\x34\x35\x37\x37\x31\x38\x34\x38\x32\x33\x39\x36\x2D\x31","\x41\x67\x65\x6E\x74\x73\x20\x53\x74\x61\x74\x75\x73","\x6F\x6E\x6C\x69\x6E\x65\x3D\x31\x20\x41\x4E\x44\x20\x72\x6F\x6C\x65\x3D\x22\x61\x67\x65\x6E\x74\x22","\x4C\x6F\x67\x67\x65\x64","\x41\x47\x45\x4E\x54\x53","\x31\x34\x35\x37\x32\x37\x35\x32\x34\x38\x35\x32\x31\x2D\x39","\x6F\x6E\x6C\x69\x6E\x65\x3D\x31\x20\x41\x4E\x44\x20\x72\x6F\x6C\x65\x3D\x22\x61\x67\x65\x6E\x74\x22\x20\x41\x4E\x44\x20\x28\x76\x6F\x69\x63\x65\x50\x61\x75\x73\x65\x3D\x31\x20\x4F\x52\x20\x63\x68\x61\x74\x50\x61\x75\x73\x65\x3D\x31\x20\x4F\x52\x20\x6D\x61\x69\x6C\x50\x61\x75\x73\x65\x3D\x31\x20\x4F\x52\x20\x66\x61\x78\x50\x41\x75\x73\x65\x3D\x31\x29\x20\x61\x6E\x64\x20\x70\x61\x75\x73\x65\x54\x79\x70\x65\x20\x21\x3D\x22\x41\x43\x57\x22","\x50\x61\x75\x73\x65\x64","\x31\x34\x35\x37\x32\x37\x36\x34\x36\x32\x38\x34\x36\x2D\x31\x35","\x76\x6F\x69\x63\x65\x50\x61\x75\x73\x65\x3D\x31\x20\x61\x6E\x64\x20\x70\x61\x75\x73\x65\x54\x79\x70\x65\x3D\x22\x41\x43\x57\x22","\x41\x43\x57","\x31\x34\x35\x37\x33\x36\x30\x34\x36\x34\x32\x30\x38\x2D\x31","\x44\x61\x73\x68\x62\x6F\x61\x72\x64","\x64\x65\x73\x74\x72\x6F\x79","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x20\x66\x6F\x72\x20\x4F\x75\x74\x67\x6F\x69\x6E\x67\x20\x46\x61\x78","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x5F\x2E","\x4F\x75\x74\x67\x6F\x69\x6E\x67\x20\x66\x61\x78\x20\x74\x6F\x20\x24\x7B\x46\x41\x58\x4E\x55\x4D\x42\x45\x52\x7D","\x73\x79\x73\x74\x65\x6D","\x41\x63\x63\x6F\x75\x6E\x74\x20\x24\x7B\x46\x41\x58\x4E\x41\x4D\x45\x7D","\x43\x44\x52\x28\x74\x79\x70\x65\x29\x3D\x6F\x75\x74\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x41\x6E\x73\x77\x65\x72","\x57\x61\x69\x74","\x46\x41\x58\x4F\x50\x54\x28\x65\x63\x6D\x29\x3D\x24\x7B\x46\x41\x58\x45\x43\x4D\x7D","\x46\x41\x58\x4F\x50\x54\x28\x68\x65\x61\x64\x65\x72\x69\x6E\x66\x6F\x29\x3D\x24\x7B\x46\x41\x58\x48\x45\x41\x44\x45\x52\x49\x4E\x46\x4F\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64\x29\x3D\x24\x7B\x46\x41\x58\x4C\x4F\x43\x41\x4C\x53\x54\x41\x54\x49\x4F\x4E\x49\x44\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6D\x69\x6E\x72\x61\x74\x65\x29\x3D\x24\x7B\x46\x41\x58\x4D\x49\x4E\x52\x41\x54\x45\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6D\x61\x78\x72\x61\x74\x65\x29\x3D\x24\x7B\x46\x41\x58\x4D\x41\x58\x52\x41\x54\x45\x7D","\x46\x41\x58\x4F\x50\x54\x28\x6D\x6F\x64\x65\x6D\x29\x3D\x24\x7B\x46\x41\x58\x4D\x4F\x44\x45\x4D\x7D","\x46\x41\x58\x4F\x50\x54\x28\x67\x61\x74\x65\x77\x61\x79\x29\x3D\x24\x7B\x46\x41\x58\x47\x41\x54\x45\x57\x41\x59\x7D","\x46\x41\x58\x4F\x50\x54\x28\x74\x33\x38\x74\x69\x6D\x65\x6F\x75\x74\x29\x3D\x24\x7B\x46\x41\x58\x54\x33\x38\x54\x49\x4D\x45\x4F\x55\x54\x7D","\x53\x65\x6E\x64\x46\x41\x58","\x24\x7B\x46\x41\x58\x4F\x55\x54\x46\x49\x4C\x45\x7D\x2C\x64\x73","\x48\x61\x6E\x67\x75\x70","\x52\x65\x77\x72\x69\x74\x69\x6E\x67\x20\x55\x73\x65\x72\x73\x20\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73\x2E\x2E\x2E","\x61\x70\x70\x64\x61\x74\x61","\x53\x49\x50\x2F","\x2C\x2C\x74\x54\x78\x58","\x73\x61\x76\x65","\x55\x73\x65\x72\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x43\x6F\x6E\x74\x65\x78\x74\x73\x3A\x20\x25\x73\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x44\x65\x66\x61\x75\x6C\x74\x20\x63\x6F\x6E\x74\x65\x78\x74\x20\x28\x44\x4F\x20\x4E\x4F\x54\x20\x44\x45\x4C\x45\x54\x45\x29","\x69\x6E\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x66\x72\x6F\x6D\x2D\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x56\x6F\x69\x63\x65\x43\x6F\x6E\x74\x65\x78\x74","\x64\x61\x73\x68\x62\x6F\x61\x72\x64","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x44\x41\x53\x48\x42\x4F\x41\x52\x44","\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x2F\x76\x6F\x69\x63\x65","\x79\x6F\x75\x72\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x59\x4F\x55\x52\x5F\x44\x41\x53\x48\x42\x4F\x41\x52\x44\x53","\x2F\x74\x6F\x6F\x6C\x73\x2F\x79\x6F\x75\x72\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x73\x2F\x73\x68\x6F\x77\x2F\x31","\x73\x74\x61\x66\x66","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x53\x54\x41\x46\x46","\x61\x67\x65\x6E\x74\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x41\x47\x45\x4E\x54\x53","\x2F\x73\x74\x61\x66\x66\x2F\x61\x67\x65\x6E\x74\x73\x2F\x6C\x69\x73\x74","\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x4F\x4E\x54\x41\x43\x54\x5F\x4D\x41\x4E\x41\x47\x45\x52","\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x63\x6F\x6E\x74\x61\x63\x74\x73\x2F\x6C\x69\x73\x74","\x63\x68\x61\x6E\x6E\x65\x6C\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x48\x41\x4E\x4E\x45\x4C\x53","\x76\x6F\x69\x63\x65","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x56\x4F\x49\x43\x45","\x63\x68\x61\x74","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x48\x41\x54","\x6D\x61\x69\x6C","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x4D\x41\x49\x4C","\x66\x61\x78","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x46\x41\x58","\x73\x6D\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x53\x4D\x53","\x72\x65\x61\x6C\x74\x69\x6D\x65","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x52\x45\x41\x4C\x54\x49\x4D\x45","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x76\x69\x65\x77\x2F\x61\x67\x65\x6E\x74\x73","\x74\x6F\x6F\x6C\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x54\x4F\x4F\x4C\x53","\x73\x71\x75\x61\x72\x65","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x41\x4C\x4C\x59\x53\x51\x55\x41\x52\x45","\x2F\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x6C\x69\x73\x74","\x6A\x73\x63\x72\x69\x70\x74\x79","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x4A\x53\x43\x52\x49\x50\x54\x59","\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73\x2F\x6C\x69\x73\x74","\x6D\x6F\x74\x69\x6F\x6E\x64\x69\x61\x6C\x65\x72","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x4D\x4F\x54\x49\x4F\x4E\x5F\x44\x49\x41\x4C\x45\x52","\x2F\x6D\x6F\x74\x69\x6F\x6E\x64\x69\x61\x6C\x65\x72\x2F\x6C\x69\x73\x74\x73\x2F\x6C\x69\x73\x74","\x61\x6E\x61\x6C\x79\x74\x69\x63\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x41\x4E\x41\x4C\x59\x54\x49\x43\x53","\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x72\x65\x70\x6F\x72\x74\x73\x2F\x6C\x69\x73\x74","\x73\x65\x74\x74\x69\x6E\x67","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x53\x45\x54\x54\x49\x4E\x47\x53","\x2F\x73\x65\x74\x74\x69\x6E\x67\x2F\x75\x70\x64\x61\x74\x65\x73\x2F\x6C\x69\x73\x74","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x49\x4E\x54\x45\x47\x52\x41\x54\x49\x4F\x4E","\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73\x2F\x6C\x69\x73\x74","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x4F\x50\x45\x4E\x5F\x43\x48\x41\x4E\x4E\x45\x4C","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x6C\x69\x73\x74","\x72\x6F\x75\x74\x65\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x52\x4F\x55\x54\x45\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x72\x6F\x75\x74\x65\x73\x2F\x69\x6E\x62\x6F\x75\x6E\x64\x2F\x6C\x69\x73\x74","\x63\x6F\x6E\x74\x65\x78\x74\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x4F\x4E\x54\x45\x58\x54\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x63\x6F\x6E\x74\x65\x78\x74\x73\x2F\x6C\x69\x73\x74","\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x56\x4F\x49\x43\x45\x4D\x41\x49\x4C\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73\x2F\x6C\x69\x73\x74","\x6D\x6F\x68","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x4D\x4F\x48","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x6D\x6F\x68\x2F\x6C\x69\x73\x74","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x52\x45\x43\x4F\x52\x44\x49\x4E\x47\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73\x2F\x6C\x69\x73\x74","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x76\x69\x65\x77\x2F\x61\x67\x65\x6E\x74\x73","\x63\x68\x61\x6E\x73\x70\x79","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x48\x41\x4E\x53\x50\x59","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x63\x68\x61\x6E\x73\x70\x79\x2F\x6C\x69\x73\x74","\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x44\x49\x53\x50\x4F\x53\x49\x54\x49\x4F\x4E\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x76\x6F\x69\x63\x65\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73\x2F\x6C\x69\x73\x74","\x77\x65\x62\x73\x69\x74\x65\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x57\x45\x42\x5F\x53\x49\x54\x45\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x63\x68\x61\x74\x2F\x77\x65\x62\x73\x69\x74\x65\x73\x2F\x6C\x69\x73\x74","\x71\x75\x65\x75\x65\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x51\x55\x45\x55\x45\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x63\x68\x61\x74\x2F\x71\x75\x65\x75\x65\x73\x2F\x6C\x69\x73\x74","\x69\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x49\x4E\x54\x45\x52\x41\x43\x54\x49\x4F\x4E\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x63\x68\x61\x74\x2F\x72\x6F\x6F\x6D\x2F\x69\x6E\x74\x65\x72\x6E\x61\x6C\x2F\x6C\x69\x73\x74","\x6F\x66\x66\x6C\x69\x6E\x65","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x4F\x46\x46\x4C\x49\x4E\x45\x5F\x4D\x45\x53\x53\x41\x47\x45\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x63\x68\x61\x74\x2F\x6F\x66\x66\x6C\x69\x6E\x65\x2F\x6C\x69\x73\x74","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x63\x68\x61\x74\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x76\x69\x65\x77\x2F\x61\x67\x65\x6E\x74\x73","\x61\x63\x63\x6F\x75\x6E\x74\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x41\x43\x43\x4F\x55\x4E\x54\x53","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x6D\x61\x69\x6C\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x6C\x69\x73\x74","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x6D\x61\x69\x6C\x2F\x71\x75\x65\x75\x65\x73\x2F\x6C\x69\x73\x74","\x69\x6E\x62\x6F\x78","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x49\x4E\x42\x4F\x58","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x6D\x61\x69\x6C\x2F\x69\x6E\x62\x6F\x78\x2F\x76\x69\x65\x77","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x6D\x61\x69\x6C\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x76\x69\x65\x77\x2F\x61\x67\x65\x6E\x74\x73","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x66\x61\x78\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x6C\x69\x73\x74","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x66\x61\x78\x2F\x71\x75\x65\x75\x65\x73\x2F\x6C\x69\x73\x74","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x66\x61\x78\x2F\x69\x6E\x62\x6F\x78\x2F\x76\x69\x65\x77","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x66\x61\x78\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x76\x69\x65\x77\x2F\x61\x67\x65\x6E\x74\x73","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x73\x6D\x73\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F\x6C\x69\x73\x74","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x73\x6D\x73\x2F\x71\x75\x65\x75\x65\x73\x2F\x6C\x69\x73\x74","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x73\x6D\x73\x2F\x69\x6E\x62\x6F\x78\x2F\x76\x69\x65\x77","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x73\x6D\x73\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x76\x69\x65\x77\x2F\x61\x67\x65\x6E\x74\x73","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x71\x75\x65\x75\x65\x73\x2F\x6C\x69\x73\x74","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x69\x6E\x62\x6F\x78\x2F\x76\x69\x65\x77","\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x73\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x72\x65\x61\x6C\x74\x69\x6D\x65\x2F\x76\x69\x65\x77\x2F\x61\x67\x65\x6E\x74\x73","\x74\x72\x69\x67\x67\x65\x72\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x54\x52\x49\x47\x47\x45\x52\x53","\x2F\x74\x6F\x6F\x6C\x73\x2F\x74\x72\x69\x67\x67\x65\x72\x73\x2F\x6C\x69\x73\x74","\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x41\x55\x54\x4F\x4D\x41\x54\x49\x4F\x4E\x53","\x2F\x74\x6F\x6F\x6C\x73\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x73\x2F\x6C\x69\x73\x74","\x74\x72\x75\x6E\x6B\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x54\x52\x55\x4E\x4B\x53","\x2F\x74\x6F\x6F\x6C\x73\x2F\x74\x72\x75\x6E\x6B\x73\x2F\x6C\x69\x73\x74","\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x49\x4E\x54\x45\x52\x56\x41\x4C\x53","\x2F\x74\x6F\x6F\x6C\x73\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x73\x2F\x6C\x69\x73\x74","\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x56\x41\x52\x49\x41\x42\x4C\x45\x53","\x2F\x74\x6F\x6F\x6C\x73\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x73\x2F\x6C\x69\x73\x74","\x74\x61\x67\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x54\x41\x47\x53","\x2F\x74\x6F\x6F\x6C\x73\x2F\x74\x61\x67\x73\x2F\x6C\x69\x73\x74","\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x54\x45\x4D\x50\x4C\x41\x54\x45\x53","\x2F\x74\x6F\x6F\x6C\x73\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x73\x2F\x6C\x69\x73\x74","\x70\x61\x75\x73\x65\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x50\x41\x55\x53\x45\x53","\x2F\x74\x6F\x6F\x6C\x73\x2F\x70\x61\x75\x73\x65\x73\x2F\x6C\x69\x73\x74","\x61\x6E\x73\x77\x65\x72\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x43\x41\x4E\x4E\x45\x44\x5F\x41\x4E\x53\x57\x45\x52\x53","\x2F\x74\x6F\x6F\x6C\x73\x2F\x61\x6E\x73\x77\x65\x72\x73\x2F\x6C\x69\x73\x74","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x44\x41\x53\x48\x42\x4F\x41\x52\x44\x53\x5F\x4D\x41\x4E\x41\x47\x45\x52","\x2F\x74\x6F\x6F\x6C\x73\x2F\x79\x6F\x75\x72\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x73\x2F\x6C\x69\x73\x74","\x73\x6F\x75\x6E\x64\x73","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x53\x4F\x55\x4E\x44\x53","\x2F\x74\x6F\x6F\x6C\x73\x2F\x73\x6F\x75\x6E\x64\x73\x2F\x6C\x69\x73\x74","\x73\x63\x68\x65\x64\x75\x6C\x65\x72","\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E\x5F\x53\x43\x48\x45\x44\x55\x4C\x45\x52","\x2F\x74\x6F\x6F\x6C\x73\x2F\x73\x63\x68\x65\x64\x75\x6C\x65\x72\x2F\x6C\x69\x73\x74","\x45\x72\x72\x6F\x72\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x6F\x64\x75\x6C\x65\x73\x3A","\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x6D\x6F\x64\x75\x6C\x65\x73","\x4D\x6F\x64\x75\x6C\x65","\x44\x65\x74\x61\x69\x6C\x73","\x44\x65\x74\x61\x69\x6C\x65\x64\x20\x71\x75\x65\x75\x65\x73\x20\x72\x65\x70\x6F\x72\x74","\x6A\x31\x32\x5F\x37","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x5D\x7D\x7D","\x43\x61\x6C\x6C\x73\x20\x52\x65\x73\x75\x6C\x74","\x53\x69\x6D\x70\x6C\x65\x20\x71\x75\x65\x75\x65\x20\x63\x61\x6C\x6C\x73\x20\x6F\x76\x65\x72\x76\x69\x65\x77","\x44\x65\x74\x61\x69\x6C\x65\x64\x20\x72\x65\x70\x6F\x72\x74\x20\x61\x62\x6F\x75\x74\x20\x61\x6E\x73\x77\x65\x72\x65\x64\x20\x71\x75\x65\x75\x65\x20\x63\x61\x6C\x6C\x73","\x6A\x36\x30\x5F\x31","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x31\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x41\x67\x65\x6E\x74","\x41\x67\x65\x6E\x74\x20\x63\x61\x6C\x6C\x73\x20\x74\x69\x6D\x65\x72\x20\x48\x61\x6E\x64\x6C\x65\x20\x74\x69\x6D\x65\x3D\x20\x74\x61\x6C\x6B\x20\x74\x69\x6D\x65\x20\x2B\x20\x41\x43\x57\x20\x74\x69\x6D\x65","\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x51\x75\x65\x75\x65","\x51\x75\x65\x75\x65\x20\x74\x69\x6D\x65\x72\x20\x48\x61\x6E\x64\x6C\x65\x20\x54\x69\x6D\x65\x3D\x20\x54\x61\x6C\x6B\x20\x54\x69\x6D\x65\x20\x2B\x20\x41\x56\x47\x20\x54\x49\x6D\x65","\x41\x6E\x73\x77\x65\x72\x20\x54\x69\x6D\x65\x20\x62\x79\x20\x51\x75\x65\x75\x65","\x51\x75\x65\x75\x65\x73\x20\x61\x6E\x73\x77\x65\x72\x20\x74\x69\x6D\x65\x20\x70\x65\x72\x66\x6F\x72\x6D\x61\x6E\x63\x65","\x44\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x43\x61\x75\x73\x65","\x53\x75\x6D\x6D\x61\x72\x79\x20\x6F\x66\x20\x74\x68\x65\x20\x63\x61\x6C\x6C\x73\x20\x63\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E\x20\x63\x61\x75\x73\x65\x73","\x41\x6E\x73\x77\x65\x72\x20\x54\x69\x6D\x65\x20\x62\x79\x20\x48\x6F\x75\x72","\x41\x6E\x73\x77\x65\x72\x20\x74\x69\x6D\x65\x20\x20\x62\x79\x20\x68\x6F\x75\x72","\x44\x65\x74\x61\x69\x6C\x65\x64\x20\x72\x65\x70\x6F\x72\x74\x20\x61\x62\x6F\x75\x74\x20\x74\x68\x65\x20\x75\x6E\x61\x6E\x73\x77\x65\x72\x65\x64\x20\x63\x61\x6C\x6C\x73","\x6A\x36\x30\x5F\x32","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x30\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x55\x6E\x61\x6E\x73\x77\x65\x72\x65\x64\x20\x62\x79\x20\x51\x75\x65\x75\x65","\x55\x6E\x61\x6E\x73\x77\x65\x72\x65\x64\x20\x63\x61\x6C\x6C\x73\x20\x73\x75\x6D\x6D\x61\x72\x79\x20\x62\x79\x20\x71\x75\x65\x75\x65","\x55\x6E\x6D\x61\x6E\x61\x67\x65\x64\x20\x63\x61\x6C\x6C\x73","\x55\x6E\x6D\x61\x6E\x61\x67\x65\x64\x20\x63\x61\x6C\x6C\x73\x20\x73\x75\x6D\x6D\x61\x72\x79","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x31\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x41\x62\x61\x6E\x64\x6F\x6E\x20\x54\x69\x6D\x65\x20\x62\x79\x20\x51\x75\x65\x75\x65","\x41\x62\x61\x6E\x64\x6F\x6E\x20\x74\x69\x6D\x65\x20\x70\x65\x72\x66\x6F\x72\x6D\x61\x6E\x63\x65\x20\x62\x79\x20\x71\x75\x65\x75\x65","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x31\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x44\x61\x74\x65","\x51\x75\x65\x75\x65\x20\x63\x61\x6C\x6C\x73\x20\x73\x75\x6D\x6D\x61\x72\x79\x20\x62\x79\x20\x64\x61\x74\x65","\x6A\x36\x30\x5F\x33","\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x48\x6F\x75\x72","\x43\x61\x6C\x6C\x73\x20\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6F\x6E\x20\x62\x79\x20\x68\x6F\x75\x72","\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x44\x61\x79","\x43\x61\x6C\x6C\x73\x20\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6F\x6E\x20\x62\x79\x20\x64\x61\x79\x20\x6F\x66\x20\x74\x68\x65\x20\x6D\x6F\x6E\x74\x68","\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x57\x65\x65\x6B\x64\x61\x79","\x43\x61\x6C\x6C\x73\x20\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6F\x6E\x20\x62\x79\x20\x64\x61\x79\x20\x6F\x66\x20\x74\x68\x65\x20\x77\x65\x65\x6B","\x53\x75\x6D\x6D\x61\x72\x79","\x43\x61\x6C\x6C\x73\x20\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6F\x6E\x20\x62\x79\x20\x71\x75\x65\x75\x65","\x43\x61\x6C\x6C\x73\x20\x64\x65\x74\x61\x69\x6C\x20\x28\x63\x64\x72\x29","\x6A\x35\x31\x5F\x31","\x4F\x75\x74\x62\x6F\x75\x6E\x64","\x4D\x61\x6E\x75\x61\x6C\x20\x6F\x75\x74\x62\x6F\x75\x6E\x64\x20\x63\x61\x6C\x6C\x73\x20\x64\x65\x74\x61\x69\x6C\x65\x64\x20\x72\x65\x70\x6F\x72\x74","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x74\x79\x70\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x27\x6F\x75\x74\x62\x6F\x75\x6E\x64\x27\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x54\x79\x70\x65","\x53\x75\x6D\x6D\x61\x72\x79\x20\x72\x65\x70\x6F\x72\x74\x20\x6F\x66\x20\x74\x68\x65\x20\x63\x61\x6C\x6C\x73\x20\x74\x79\x70\x65","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x20\x43\x61\x6C\x6C\x73\x20\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x20\x63\x61\x6C\x6C\x73\x20\x67\x72\x6F\x75\x70\x65\x64\x20\x62\x79\x20\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x20\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x41\x67\x65\x6E\x74","\x53\x75\x6D\x6D\x61\x72\x79\x20\x6F\x66\x20\x6F\x75\x74\x62\x6F\x75\x6E\x64\x20\x63\x61\x6C\x6C\x73\x20\x67\x72\x6F\x75\x70\x65\x64\x20\x62\x79\x20\x61\x67\x65\x6E\x74","\x4F\x75\x74\x62\x6F\x75\x6E\x64\x20\x43\x61\x6C\x6C\x73\x20\x62\x79\x20\x44\x61\x74\x65","\x53\x75\x6D\x6D\x61\x72\x79\x20\x6F\x66\x20\x6F\x75\x74\x62\x6F\x75\x6E\x64\x20\x63\x61\x6C\x6C\x73\x20\x67\x72\x6F\x75\x70\x65\x64\x20\x62\x79\x20\x64\x61\x74\x65","\x4C\x6F\x67\x69\x6E\x20\x54\x69\x6D\x65","\x41\x67\x65\x6E\x74\x27\x73\x20\x6C\x6F\x67\x69\x6E\x20\x74\x69\x6D\x65","\x6A\x31\x32\x5F\x35","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72\x5F\x68\x69\x73\x74\x6F\x72\x79","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x74\x79\x70\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x27\x4C\x4F\x47\x49\x4E\x27\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x2C\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x63\x68\x61\x6E\x6E\x65\x6C\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x27\x76\x6F\x69\x63\x65\x27\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x41\x63\x74\x69\x76\x69\x74\x69\x65\x73\x20\x53\x75\x6D\x6D\x61\x72\x79","\x41\x67\x65\x6E\x74\x27\x73\x20\x61\x63\x74\x69\x76\x69\x74\x69\x65\x73\x20\x72\x65\x70\x6F\x72\x74","\x6A\x38\x37\x5F\x31","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x63\x68\x61\x6E\x6E\x65\x6C\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x27\x76\x6F\x69\x63\x65\x27\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x50\x61\x75\x73\x65\x20\x44\x65\x74\x61\x69\x6C\x73","\x41\x67\x65\x6E\x74\x73\x20\x73\x74\x61\x74\x75\x73\x20\x64\x65\x74\x61\x69\x6C\x73","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x63\x68\x61\x6E\x6E\x65\x6C\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x27\x76\x6F\x69\x63\x65\x27\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x2C\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x74\x79\x70\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x27\x50\x41\x55\x53\x45\x27\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x41\x67\x65\x6E\x74\x27\x73\x20\x73\x74\x61\x74\x75\x73\x20\x64\x65\x74\x61\x69\x6C","\x50\x61\x75\x73\x65\x20\x54\x69\x6D\x65","\x41\x67\x65\x6E\x74\x27\x73\x20\x70\x61\x75\x73\x65\x20\x74\x69\x6D\x65","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x74\x79\x70\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x27\x50\x41\x55\x53\x45\x27\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x2C\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x63\x68\x61\x6E\x6E\x65\x6C\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x27\x76\x6F\x69\x63\x65\x27\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x43\x61\x6C\x6C\x79\x53\x71\x75\x61\x72\x65\x20\x53\x75\x6D\x6D\x61\x72\x79","\x6A\x38\x37\x5F\x32","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x68\x69\x73\x74\x6F\x72\x79","\x42\x6C\x6F\x63\x6B\x73","\x43\x61\x6C\x6C\x79\x53\x71\x75\x61\x72\x65\x20\x42\x6C\x6F\x63\x6B\x73\x20\x44\x65\x74\x61\x69\x6C","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x64\x65\x74\x61\x69\x6C\x73\x5F\x68\x69\x73\x74\x6F\x72\x79","\x52\x65\x63\x65\x69\x76\x65\x64\x20\x65\x6D\x61\x69\x6C\x73\x20\x62\x79\x20\x61\x63\x63\x6F\x75\x6E\x74","\x53\x75\x6D\x6D\x61\x72\x79\x20\x6F\x66\x20\x74\x68\x65\x20\x65\x6D\x61\x69\x6C\x73\x20\x61\x63\x63\x65\x70\x74\x65\x64\x20\x62\x79\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x66\x6F\x72\x20\x65\x61\x63\x68\x20\x61\x63\x63\x6F\x75\x6E\x74","\x6A\x31\x32\x5F\x34","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x52\x61\x74\x69\x6E\x67\x20\x62\x79\x20\x41\x67\x65\x6E\x74","\x52\x65\x63\x6F\x72\x64\x73\x20\x72\x61\x74\x69\x6E\x67\x20\x62\x79\x20\x61\x67\x65\x6E\x74","\x6A\x31\x31\x30\x5F\x31","\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3E\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x72\x61\x74\x69\x6E\x67\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x30\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x52\x61\x74\x69\x6E\x67\x20\x62\x79\x20\x51\x75\x65\x75\x65","\x52\x65\x63\x6F\x72\x64\x73\x20\x72\x61\x74\x69\x6E\x67\x20\x62\x79\x20\x71\x75\x65\x75\x65","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x49\x53\x20\x4E\x4F\x54\x20\x4E\x55\x4C\x4C\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x71\x75\x65\x75\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3E\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x72\x61\x74\x69\x6E\x67\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x30\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x57\x65\x62\x73\x69\x74\x65\x20\x53\x75\x6D\x6D\x61\x72\x79","\x43\x68\x61\x74\x20\x73\x65\x73\x73\x69\x6F\x6E\x20\x69\x6E\x66\x6F\x72\x6D\x61\x74\x69\x6F\x6E\x20\x62\x79\x20\x77\x65\x62\x73\x69\x74\x65","\x6A\x31\x32\x5F\x33","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x53\x65\x73\x73\x69\x6F\x6E\x20\x44\x65\x74\x61\x69\x6C","\x44\x65\x74\x61\x69\x6C\x65\x64\x20\x72\x65\x70\x6F\x72\x74\x20\x61\x62\x6F\x75\x74\x20\x63\x68\x61\x74\x20\x73\x65\x73\x73\x69\x6F\x6E","\x43\x68\x61\x74\x20\x62\x79\x20\x41\x67\x65\x6E\x74","\x53\x65\x73\x73\x69\x6F\x6E\x20\x63\x68\x61\x74\x20\x62\x79\x20\x61\x67\x65\x6E\x74","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x63\x6F\x6D\x70\x6C\x65\x74\x65\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x31\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x43\x68\x61\x74\x20\x62\x79\x20\x51\x75\x65\x75\x65","\x43\x68\x61\x74\x20\x73\x65\x73\x73\x69\x6F\x6E\x73\x20\x62\x79\x20\x71\x75\x65\x75\x65","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x27\x71\x75\x65\x75\x65\x27\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x43\x68\x61\x74\x20\x62\x79\x20\x44\x61\x74\x65","\x53\x65\x73\x73\x69\x6F\x6E\x20\x63\x68\x61\x74\x20\x62\x79\x20\x64\x61\x74\x65","\x52\x65\x63\x65\x69\x76\x65\x64\x20\x65\x6D\x61\x69\x6C\x73\x20\x62\x79\x20\x71\x75\x65\x75\x65","\x53\x75\x6D\x6D\x61\x72\x79\x20\x6F\x66\x20\x72\x65\x63\x65\x69\x76\x65\x64\x20\x65\x6D\x61\x69\x6C\x20\x62\x79\x20\x71\x75\x65\x75\x65","\x41\x63\x63\x65\x70\x74\x65\x64\x20\x65\x6D\x61\x69\x6C\x73\x20\x62\x79\x20\x61\x67\x65\x6E\x74","\x53\x75\x6D\x6D\x61\x72\x79\x20\x6F\x66\x20\x61\x63\x63\x65\x70\x74\x65\x64\x20\x65\x6D\x61\x69\x6C\x20\x62\x79\x20\x61\x67\x65\x6E\x74","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x74\x69\x6D\x65\x6F\x75\x74\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x30\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x4D\x65\x73\x73\x61\x67\x65\x73\x20\x53\x75\x6D\x6D\x61\x72\x79\x20\x62\x79\x20\x44\x61\x74\x65","\x47\x6C\x6F\x62\x61\x6C\x20\x6D\x65\x73\x73\x61\x67\x65\x73\x20\x73\x75\x6D\x6D\x61\x72\x79\x20\x62\x79\x20\x64\x61\x74\x65","\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x49\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x73\x20\x64\x65\x74\x61\x69\x6C","\x44\x65\x74\x61\x69\x6C\x65\x64\x20\x72\x65\x70\x6F\x72\x74\x20\x61\x62\x6F\x75\x74\x20\x74\x68\x65\x20\x69\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x73","\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73","\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x20\x53\x75\x6D\x6D\x61\x72\x79","\x43\x6C\x6F\x73\x65\x64\x20\x69\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x73\x20\x62\x79\x20\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x20\x28\x66\x69\x6C\x74\x65\x72\x65\x64\x20\x62\x79\x20\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x20\x6E\x6F\x74\x20\x6E\x75\x6C\x6C\x29","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x41\x4E\x44\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x49\x53\x20\x4E\x4F\x54\x20\x4E\x55\x4C\x4C\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x5D\x7D\x7D","\x43\x6C\x6F\x73\x65\x64\x20\x69\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x73\x20\x62\x79\x20\x64\x61\x74\x65","\x53\x75\x6D\x6D\x61\x72\x79\x20\x6F\x66\x20\x63\x6C\x6F\x73\x65\x64\x20\x69\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x73\x20\x67\x72\x6F\x75\x70\x65\x64\x20\x62\x79\x20\x64\x61\x74\x65\x20\x2B\x20\x61\x76\x65\x72\x61\x67\x65\x20\x68\x61\x6E\x64\x6C\x65\x20\x74\x69\x6D\x65\x20\x28\x66\x72\x6F\x6D\x20\x77\x68\x65\x6E\x20\x74\x68\x65\x20\x66\x69\x72\x73\x74\x20\x65\x6D\x61\x69\x6C\x20\x61\x72\x72\x69\x76\x65\x64\x20\x74\x6F\x20\x77\x68\x65\x6E\x20\x74\x68\x65\x20\x69\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x20\x68\x61\x73\x20\x62\x65\x65\x6E\x20\x63\x6C\x6F\x73\x65\x64\x29","\x7B\x22\x67\x72\x6F\x75\x70\x22\x3A\x7B\x22\x6F\x70\x65\x72\x61\x74\x6F\x72\x22\x3A\x22\x4F\x52\x22\x2C\x22\x72\x75\x6C\x65\x73\x22\x3A\x5B\x7B\x22\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x22\x3A\x22\x3D\x22\x2C\x22\x66\x69\x65\x6C\x64\x22\x3A\x22\x73\x74\x61\x74\x75\x73\x22\x2C\x22\x76\x61\x6C\x75\x65\x22\x3A\x22\x27\x43\x4C\x4F\x53\x45\x44\x27\x22\x2C\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3A\x74\x72\x75\x65\x7D\x5D\x7D\x7D","\x6A\x31\x32\x5F\x36","\x73\x6D\x73\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x6A\x34\x5F\x31\x30","\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x75\x6E\x69\x71\x75\x65\x69\x64","\x55\x6E\x69\x71\x75\x65\x49\x64","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x75\x6D","\x43\x61\x6C\x6C\x65\x72\x49\x64\x4E\x75\x6D","\x63\x61\x6C\x6C\x65\x72\x69\x64\x6E\x61\x6D\x65","\x43\x61\x6C\x6C\x65\x72\x49\x64\x4E\x61\x6D\x65","\x71\x75\x65\x75\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74","\x51\x75\x65\x75\x65\x4A\x6F\x69\x6E\x41\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74","\x51\x75\x65\x75\x65\x4C\x65\x61\x76\x65\x41\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E","\x51\x75\x65\x75\x65\x41\x62\x61\x6E\x64\x6F\x6E","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x41\x74","\x51\x75\x65\x75\x65\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x43\x6F\x6D\x70\x6C\x65\x74\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x43\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74","\x51\x75\x65\x75\x65\x45\x78\x69\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x41\x74","\x51\x75\x65\x75\x65\x45\x78\x69\x74\x41\x74","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x72\x65\x61\x73\x6F\x6E","\x51\x75\x65\x75\x65\x45\x78\x69\x74\x52\x65\x61\x73\x6F\x6E","\x44\x49\x44","\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x29","\x54\x61\x6C\x6B\x54\x69\x6D\x65","\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45","\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29","\x41\x62\x61\x6E\x64\x6F\x6E\x54\x69\x6D\x65","\x49\x46\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x3D\x31\x2C\x68\x6F\x6C\x64\x74\x69\x6D\x65\x2C\x6E\x75\x6C\x6C\x29","\x41\x6E\x73\x77\x65\x72\x54\x69\x6D\x65","\x43\x61\x6C\x6C\x65\x72\x49\x44","\x53\x74\x61\x72\x74\x54\x69\x6D\x65","\x43\x41\x53\x45\x20\x57\x48\x45\x4E\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x3D\x31\x20\x54\x48\x45\x4E\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74\x20\x45\x4C\x53\x45\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x4C\x65\x61\x76\x65\x41\x74\x20\x45\x4E\x44","\x45\x6E\x64\x54\x69\x6D\x65","\x68\x6F\x6C\x64\x74\x69\x6D\x65","\x48\x6F\x6C\x64\x54\x69\x6D\x65","\x43\x41\x53\x45\x20\x57\x48\x45\x4E\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x3D\x31\x20\x54\x48\x45\x4E\x20\x22\x59\x45\x53\x22\x20\x45\x4C\x53\x45\x20\x22\x4E\x4F\x22\x20\x45\x4E\x44","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x41\x67\x65\x6E\x74","\x61\x67\x65\x6E\x74\x63\x61\x6C\x6C\x65\x64\x41\x74","\x41\x67\x65\x6E\x74\x43\x61\x6C\x6C\x65\x64\x41\x74","\x61\x67\x65\x6E\x74\x63\x6F\x6E\x6E\x65\x63\x74\x41\x74","\x41\x67\x65\x6E\x74\x43\x6F\x6E\x6E\x65\x63\x74\x41\x74","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x41\x67\x65\x6E\x74\x43\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x74\x61\x6C\x6B\x74\x69\x6D\x65","\x61\x67\x65\x6E\x74\x61\x63\x77","\x41\x67\x65\x6E\x74\x41\x43\x57","\x61\x63\x77\x74\x69\x6D\x65","\x41\x67\x65\x6E\x74\x41\x43\x57\x54\x69\x6D\x65","\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x41\x67\x65\x6E\x74\x43\x6F\x6D\x70\x6C\x65\x74\x65","\x72\x65\x61\x73\x6F\x6E","\x48\x61\x6E\x67\x75\x70\x52\x65\x61\x73\x6F\x6E","\x6C\x61\x73\x74\x65\x76\x65\x6E\x74","\x4C\x61\x73\x74\x45\x76\x65\x6E\x74","\x43\x6F\x6D\x70\x6C\x65\x74\x65\x64","\x53\x55\x4D","\x54\x6F\x74\x54\x61\x6C\x6B\x54\x69\x6D\x65","\x54\x6F\x74\x41\x43\x57\x54\x69\x6D\x65","\x74\x61\x6C\x6B\x74\x69\x6D\x65\x20\x2B\x20\x61\x63\x77\x74\x69\x6D\x65","\x54\x6F\x74\x48\x61\x6E\x64\x6C\x65\x54\x69\x6D\x65","\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x74\x61\x6C\x6B\x74\x69\x6D\x65\x29\x29","\x41\x76\x67\x54\x61\x6C\x6B\x54\x69\x6D\x65","\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x61\x63\x77\x74\x69\x6D\x65\x29\x29","\x41\x76\x67\x41\x43\x57\x54\x69\x6D\x65","\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x74\x61\x6C\x6B\x74\x69\x6D\x65\x20\x2B\x20\x61\x63\x77\x74\x69\x6D\x65\x29\x2F\x43\x4F\x55\x4E\x54\x28\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x29","\x41\x76\x67\x48\x61\x6E\x64\x6C\x65\x54\x69\x6D\x65","\x54\x6F\x74\x20\x54\x61\x6C\x6B\x54\x69\x6D\x65","\x54\x6F\x74\x20\x48\x6F\x6C\x64\x54\x69\x6D\x65","\x54\x6F\x74\x20\x41\x43\x57\x54\x69\x6D\x65","\x54\x6F\x74\x20\x48\x61\x6E\x64\x6C\x65\x20\x54\x69\x6D\x65","\x41\x76\x67\x20\x54\x61\x6C\x6B\x54\x69\x6D\x65","\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x29\x29","\x41\x76\x67\x20\x48\x6F\x6C\x64\x54\x69\x6D\x65","\x41\x76\x67\x20\x41\x43\x57\x54\x69\x6D\x65","\x41\x76\x67\x20\x48\x61\x6E\x64\x6C\x65\x20\x54\x69\x6D\x65","\x54\x6F\x74\x20\x41\x6E\x73\x77\x65\x72\x65\x64","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x3C\x31\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x41\x6E\x73\x77\x65\x72\x65\x64\x20\x3C\x31\x30\x73","\x52\x4F\x55\x4E\x44\x28\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x3C\x31\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29\x20\x2F\x20\x53\x55\x4D\x28\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x20\x2A\x31\x30\x30\x2C\x31\x29","\x41\x6E\x73\x77\x65\x72\x20\x52\x61\x74\x65\x20\x3C\x31\x30\x73","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3E\x3D\x31\x30\x20\x41\x4E\x44\x20\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3C\x32\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x41\x6E\x73\x77\x65\x72\x65\x64\x20\x31\x30\x2D\x32\x30\x73","\x52\x4F\x55\x4E\x44\x28\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3E\x3D\x31\x30\x20\x41\x4E\x44\x20\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3C\x32\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29\x20\x2F\x20\x53\x55\x4D\x28\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x20\x2A\x31\x30\x30\x2C\x31\x29","\x41\x6E\x73\x77\x65\x72\x20\x52\x61\x74\x65\x20\x31\x30\x2D\x32\x30\x73","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3E\x3D\x32\x30\x20\x41\x4E\x44\x20\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3C\x33\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x41\x6E\x73\x77\x65\x72\x65\x64\x20\x32\x30\x2D\x33\x30\x73","\x52\x4F\x55\x4E\x44\x28\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3E\x3D\x32\x30\x20\x41\x4E\x44\x20\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3C\x33\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29\x20\x2F\x20\x53\x55\x4D\x28\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x20\x2A\x31\x30\x30\x2C\x31\x29","\x41\x6E\x73\x77\x65\x72\x20\x52\x61\x74\x65\x20\x32\x30\x2D\x33\x30\x73","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3E\x3D\x33\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x41\x6E\x73\x77\x65\x72\x65\x64\x20\x3E\x33\x30\x73","\x52\x4F\x55\x4E\x44\x28\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x3E\x3D\x33\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29\x20\x2F\x20\x53\x55\x4D\x28\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x20\x2A\x31\x30\x30\x2C\x31\x29","\x41\x6E\x73\x77\x65\x72\x20\x52\x61\x74\x65\x20\x3E\x33\x30\x73","\x52\x65\x61\x73\x6F\x6E","\x43\x4F\x55\x4E\x54","\x48\x6F\x75\x72","\x48\x4F\x55\x52","\x4A\x6F\x69\x6E\x41\x74","\x4C\x65\x61\x76\x65\x41\x74","\x41\x62\x61\x6E\x64\x6F\x6E","\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74","\x55\x6E\x6D\x61\x6E\x61\x67\x65\x64\x41\x74","\x55\x6E\x6D\x61\x6E\x61\x67\x65\x64\x52\x65\x61\x73\x6F\x6E","\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x51\x75\x65\x75\x65\x50\x6F\x73\x69\x74\x69\x6F\x6E","\x41\x62\x61\x6E\x64\x6F\x6E\x20\x54\x69\x6D\x65","\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x45\x78\x69\x74\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29","\x55\x6E\x6D\x61\x6E\x61\x67\x65\x64\x20\x48\x6F\x6C\x64\x54\x69\x6D\x65","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64","\x54\x6F\x74\x20\x41\x62\x61\x6E\x64\x6F\x6E\x54\x69\x6D\x65","\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x29\x29","\x41\x76\x67\x41\x62\x61\x6E\x64\x6F\x6E\x54\x69\x6D\x65","\x54\x6F\x74\x20\x55\x6E\x6D\x61\x6E\x61\x67\x65\x64\x20\x54\x69\x6D\x65","\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x45\x78\x69\x74\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x29\x29","\x41\x76\x67\x20\x55\x6E\x6D\x61\x6E\x61\x67\x65\x64\x20\x54\x49\x6D\x65","\x54\x6F\x74\x20\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3C\x31\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64\x3C\x31\x30\x73","\x52\x4F\x55\x4E\x44\x28\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3C\x31\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29\x20\x2F\x20\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x29\x20\x2A\x31\x30\x30\x2C\x31\x29","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64\x20\x52\x61\x74\x65\x3C\x31\x30\x73","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3E\x3D\x31\x30\x20\x41\x4E\x44\x20\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3C\x36\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64\x20\x31\x30\x2D\x36\x30\x73","\x52\x4F\x55\x4E\x44\x28\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3E\x3D\x31\x30\x20\x41\x4E\x44\x20\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3C\x36\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29\x20\x20\x2F\x20\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x29\x20\x2A\x31\x30\x30\x2C\x31\x29","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64\x20\x52\x61\x74\x65\x20\x31\x30\x2D\x36\x30\x73","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3E\x3D\x36\x30\x20\x41\x4E\x44\x20\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3C\x31\x32\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64\x20\x36\x30\x2D\x31\x32\x30\x73","\x52\x4F\x55\x4E\x44\x28\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3E\x3D\x36\x30\x20\x41\x4E\x44\x20\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3C\x31\x32\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29\x20\x20\x20\x2F\x20\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x29\x20\x2A\x31\x30\x30\x2C\x31\x29","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64\x20\x52\x61\x74\x65\x20\x36\x30\x2D\x31\x32\x30\x73","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3E\x3D\x31\x32\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64\x3E\x31\x32\x30\x73","\x52\x4F\x55\x4E\x44\x28\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x41\x62\x61\x6E\x64\x6F\x6E\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x41\x74\x29\x20\x3E\x3D\x31\x32\x30\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29\x20\x20\x2F\x20\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x29\x20\x2A\x31\x30\x30\x2C\x31\x29","\x41\x62\x61\x6E\x64\x6F\x6E\x65\x64\x20\x52\x61\x74\x65\x3E\x31\x32\x30\x73","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x61\x74","\x44\x61\x74\x65","\x44\x41\x54\x45","\x4F\x66\x66\x65\x72\x65\x64","\x43\x4F\x55\x4E\x54\x20\x44\x49\x53\x54\x49\x4E\x43\x54","\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x29\x29\x29","\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x2F\x43\x4F\x55\x4E\x54\x28\x44\x49\x53\x54\x49\x4E\x43\x54\x20\x75\x6E\x69\x71\x75\x65\x69\x64\x29\x2A\x31\x30\x30\x2C\x31\x29","\x41\x6E\x73\x77\x65\x72\x20\x52\x61\x74\x65","\x44\x41\x59\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x61\x74\x29","\x44\x61\x79","\x44\x41\x59\x4E\x41\x4D\x45\x28\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6A\x6F\x69\x6E\x61\x74\x29","\x44\x61\x79\x4F\x66\x57\x65\x65\x6B","\x41\x53\x43","\x55\x6E\x69\x71\x75\x65\x49\x44","\x74\x79\x70\x65","\x54\x79\x70\x65","\x74\x61\x67","\x54\x61\x67","\x73\x6F\x75\x72\x63\x65","\x53\x6F\x75\x72\x63\x65","\x64\x65\x73\x74\x69\x6E\x61\x74\x69\x6F\x6E","\x44\x65\x73\x74\x69\x6E\x61\x74\x69\x6F\x6E","\x63\x61\x6C\x6C\x65\x72\x69\x64","\x64\x65\x73\x74\x69\x6E\x61\x74\x69\x6F\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x44\x65\x73\x74\x43\x68\x61\x6E\x6E\x65\x6C","\x6C\x61\x73\x74\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x4C\x61\x73\x74\x41\x70\x70","\x6C\x61\x73\x74\x64\x61\x74\x61","\x4C\x61\x73\x74\x44\x61\x74\x61","\x73\x74\x61\x72\x74\x74\x69\x6D\x65","\x61\x6E\x73\x77\x65\x72\x74\x69\x6D\x65","\x65\x6E\x64\x74\x69\x6D\x65","\x64\x75\x72\x61\x74\x69\x6F\x6E","\x44\x75\x72\x61\x74\x69\x6F\x6E","\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x44\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x61\x63\x63\x6F\x75\x6E\x74\x63\x6F\x64\x65","\x41\x67\x65\x6E\x74\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x43\x61\x6C\x6C\x65\x72\x49\x64","\x62\x69\x6C\x6C\x61\x62\x6C\x65\x73\x65\x63\x6F\x6E\x64\x73","\x42\x69\x6C\x6C\x73\x65\x63","\x54\x6F\x74\x20\x44\x75\x72\x61\x74\x69\x6F\x6E","\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x64\x75\x72\x61\x74\x69\x6F\x6E\x29\x29","\x53\x55\x42\x53\x54\x52\x49\x4E\x47\x5F\x49\x4E\x44\x45\x58\x28\x63\x68\x61\x6E\x6E\x65\x6C\x2C\x20\x27\x2D\x27\x2C\x20\x31\x29","\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x53\x55\x4D\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x78\x69\x74\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x6E\x74\x65\x72\x41\x74\x29\x29\x29","\x43\x41\x53\x45\x20\x57\x48\x45\x4E\x20\x74\x79\x70\x65\x3D\x22\x4C\x4F\x47\x49\x4E\x22\x20\x54\x48\x45\x4E\x20\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x78\x69\x74\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x6E\x74\x65\x72\x41\x74\x29\x20\x45\x4E\x44","\x43\x41\x53\x45\x20\x57\x48\x45\x4E\x20\x74\x79\x70\x65\x3D\x22\x54\x41\x4C\x4B\x49\x4E\x47\x22\x20\x54\x48\x45\x4E\x20\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x78\x69\x74\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x6E\x74\x65\x72\x41\x74\x29\x20\x45\x4E\x44","\x54\x61\x6C\x6B\x20\x54\x69\x6D\x65","\x43\x41\x53\x45\x20\x57\x48\x45\x4E\x20\x74\x79\x70\x65\x3D\x22\x50\x41\x55\x53\x45\x22\x20\x54\x48\x45\x4E\x20\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x78\x69\x74\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x6E\x74\x65\x72\x41\x74\x29\x20\x45\x4E\x44","\x65\x6E\x74\x65\x72\x41\x74","\x45\x6E\x74\x65\x72\x41\x74","\x65\x78\x69\x74\x41\x74","\x45\x78\x69\x74\x41\x74","\x64\x61\x74\x61\x31","\x69\x6E\x74\x65\x72\x66\x61\x63\x65","\x49\x6E\x74\x65\x72\x66\x61\x63\x65","\x45\x76\x65\x6E\x74","\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x78\x69\x74\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x65\x6E\x74\x65\x72\x41\x74\x29\x29","\x50\x61\x75\x73\x65\x54\x79\x70\x65","\x70\x72\x6F\x6A\x65\x63\x74\x5F\x6E\x61\x6D\x65","\x50\x72\x6F\x6A\x65\x63\x74\x20\x4E\x61\x6D\x65","\x64\x6E\x69\x64","\x6A\x6F\x69\x6E\x41\x74","\x53\x74\x61\x72\x74\x20\x54\x69\x6D\x65","\x6C\x65\x61\x76\x65\x41\x74","\x45\x6E\x64\x20\x54\x69\x6D\x65","\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x6C\x65\x61\x76\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x6A\x6F\x69\x6E\x41\x74\x29","\x55\x6E\x69\x71\x75\x65\x20\x49\x64","\x43\x61\x6C\x6C\x65\x72\x20\x49\x64","\x6E\x6F\x64\x65","\x42\x6C\x6F\x63\x6B","\x64\x61\x74\x61","\x44\x61\x74\x61","\x61\x63\x63\x6F\x75\x6E\x74\x6E\x61\x6D\x65","\x41\x63\x63\x6F\x75\x6E\x74","\x52\x65\x63\x65\x69\x76\x65\x64","\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x2C\x31\x2C\x6E\x75\x6C\x6C\x29","\x41\x63\x63\x65\x70\x74\x65\x64","\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x2C\x31\x2C\x6E\x75\x6C\x6C\x29\x29\x2F\x43\x4F\x55\x4E\x54\x28\x44\x49\x53\x54\x49\x4E\x43\x54\x28\x75\x6E\x69\x71\x75\x65\x69\x64\x29\x29\x2A\x31\x30\x30\x2C\x31\x29","\x41\x63\x63\x65\x70\x74\x20\x52\x61\x74\x65","\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x20\x41\x4E\x44\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x71\x75\x65\x75\x65\x22\x2C\x31\x2C\x6E\x75\x6C\x6C\x29","\x41\x63\x63\x65\x70\x74\x65\x64\x20\x62\x79\x20\x51\x75\x65\x75\x65","\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x20\x41\x4E\x44\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x66\x69\x64\x65\x6C\x69\x74\x79\x22\x2C\x31\x2C\x6E\x75\x6C\x6C\x29","\x41\x63\x63\x65\x70\x74\x20\x62\x79\x20\x46\x69\x64\x65\x6C\x69\x74\x79","\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x20\x41\x4E\x44\x20\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x61\x67\x65\x6E\x74\x22\x2C\x31\x2C\x6E\x75\x6C\x6C\x29","\x41\x63\x63\x65\x70\x74\x65\x64\x20\x62\x79\x20\x41\x67\x65\x6E\x74","\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x6C\x69\x6E\x65\x6E\x61\x6D\x65","\x52\x65\x63\x6F\x72\x64\x65\x64\x20\x43\x61\x6C\x6C\x73","\x72\x61\x74\x69\x6E\x67","\x54\x6F\x74\x61\x6C\x20\x52\x61\x74\x69\x6E\x67","\x41\x76\x67\x20\x52\x61\x74\x69\x6E\x67","\x41\x56\x47","\x52\x61\x74\x65\x64\x20\x43\x61\x6C\x6C\x73","\x77\x65\x62\x73\x69\x74\x65\x6E\x61\x6D\x65","\x57\x65\x62\x53\x69\x74\x65","\x53\x65\x73\x73\x69\x6F\x6E\x73","\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x61\x62\x61\x6E\x64\x6F\x6E","\x74\x69\x6D\x65\x6F\x75\x74","\x54\x69\x6D\x65\x6F\x75\x74","\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x6C\x65\x61\x76\x65\x41\x74\x29","\x54\x6F\x74\x20\x53\x65\x73\x73\x69\x6F\x6E\x20\x54\x69\x6D\x65","\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x6C\x65\x61\x76\x65\x41\x74\x29\x29\x29","\x41\x76\x67\x20\x53\x65\x73\x73\x69\x6F\x6E\x20\x54\x69\x6D\x65","\x57\x65\x62\x73\x69\x74\x65","\x76\x69\x73\x69\x74\x6F\x72\x6E\x61\x6D\x65","\x56\x69\x73\x69\x74\x6F\x72\x4E\x61\x6D\x65","\x76\x69\x73\x69\x74\x6F\x72\x65\x6D\x61\x69\x6C","\x56\x69\x73\x69\x74\x6F\x72\x45\x6D\x61\x69\x6C","\x4D\x65\x6D\x65\x62\x65\x72\x4E\x61\x6D\x65","\x71\x75\x65\x75\x65\x6E\x61\x6D\x65","\x51\x75\x65\x75\x65\x4E\x61\x6D\x65","\x63\x6F\x6D\x70\x6C\x65\x74\x65\x41\x74","\x63\x6F\x6D\x70\x6C\x65\x74\x65\x52\x65\x61\x73\x6F\x6E","\x43\x6F\x6D\x70\x6C\x65\x74\x65\x52\x65\x61\x73\x6F\x6E","\x53\x65\x73\x73\x69\x6F\x6E","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x71\x75\x65\x75\x65\x22\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x46\x72\x6F\x6D\x51\x75\x65\x75\x65","\x43\x4F\x55\x4E\x54\x28\x49\x46\x28\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x61\x67\x65\x6E\x74\x22\x2C\x31\x2C\x4E\x55\x4C\x4C\x29\x29","\x44\x69\x72\x65\x63\x74\x54\x6F\x41\x67\x65\x6E\x74","\x53\x65\x73\x73\x69\x6F\x6E\x20\x54\x69\x6D\x65","\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x63\x6F\x6D\x70\x6C\x65\x74\x65\x29\x2F\x43\x4F\x55\x4E\x54\x28\x44\x49\x53\x54\x49\x4E\x43\x54\x20\x75\x6E\x69\x71\x75\x65\x69\x64\x29\x20\x2A\x31\x30\x30\x2C\x31\x29","\x43\x6F\x6D\x70\x6C\x65\x74\x65\x20\x52\x61\x74\x65","\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x2C\x31\x2C\x30\x29","\x52\x4F\x55\x4E\x44\x28\x53\x55\x4D\x28\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x2C\x31\x2C\x6E\x75\x6C\x6C\x29\x29\x2F\x43\x4F\x55\x4E\x54\x28\x75\x6E\x69\x71\x75\x65\x69\x64\x29\x2A\x31\x30\x30\x2C\x31\x29","\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x49\x46\x28\x74\x69\x6D\x65\x6F\x75\x74\x3D\x30\x2C\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x6C\x65\x61\x76\x65\x61\x74\x29\x2D\x20\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x6A\x6F\x69\x6E\x61\x74\x29\x2C\x4E\x55\x4C\x4C\x29\x29\x29","\x41\x76\x67\x20\x41\x63\x63\x65\x70\x74\x20\x54\x69\x6D\x65","\x54\x6F\x74\x20\x41\x63\x63\x65\x70\x74\x65\x64","\x49\x46\x28\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x66\x69\x64\x65\x6C\x69\x74\x79\x22\x2C\x31\x2C\x30\x29","\x46\x69\x64\x65\x6C\x69\x74\x79","\x49\x46\x28\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x61\x67\x65\x6E\x74\x22\x2C\x31\x2C\x30\x29","\x49\x46\x28\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x3D\x22\x71\x75\x65\x75\x65\x22\x2C\x31\x2C\x30\x29","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x49\x46\x28\x73\x74\x61\x74\x75\x73\x3D\x22\x52\x45\x43\x45\x49\x56\x45\x44\x22\x2C\x31\x2C\x30\x29","\x49\x46\x28\x73\x74\x61\x74\x75\x73\x3D\x22\x53\x45\x4E\x54\x22\x2C\x31\x2C\x30\x29","\x53\x65\x6E\x74","\x61\x63\x63\x6F\x75\x6E\x74","\x73\x74\x61\x74\x75\x73","\x6C\x61\x73\x74\x45\x76\x65\x6E\x74","\x61\x72\x72\x69\x76\x65\x64\x41\x74","\x6F\x70\x65\x6E\x65\x64\x41\x74","\x63\x6C\x6F\x73\x65\x64\x41\x74","\x6D\x61\x69\x6C\x49\x6E","\x6D\x61\x69\x6C\x4F\x75\x74","\x50\x61\x72\x65\x6E\x74\x49\x64","\x63\x6F\x75\x6E\x74\x28\x2A\x29","\x49\x6E\x74\x65\x72\x61\x63\x74\x69\x6F\x6E\x73","\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x63\x6C\x6F\x73\x65\x64\x41\x74\x29\x2D\x55\x4E\x49\x58\x5F\x54\x49\x4D\x45\x53\x54\x41\x4D\x50\x28\x61\x72\x72\x69\x76\x65\x64\x41\x74\x29\x29\x29","\x44\x61\x74\x65\x54\x69\x6D\x65","\x49\x64","\x66\x72\x6F\x6D","\x66\x72\x6F\x6D\x4E\x75\x6D\x62\x65\x72","\x74\x6F","\x74\x6F\x4E\x75\x6D\x62\x65\x72","\x53\x74\x61\x74\x75\x73","\x41\x67\x65\x6E\x74\x4E\x61\x6D\x65","\x65\x78\x69\x74\x53\x74\x61\x74\x75\x73","\x74\x69\x63\x6B\x65\x74\x49\x64","\x54\x69\x63\x6B\x65\x74\x49\x44","\x45\x72\x72\x6F\x72\x20\x70\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x41\x6E\x61\x6C\x79\x74\x69\x63\x73\x3A","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x41\x6E\x61\x6C\x79\x74\x69\x63\x73","\x52\x65\x70\x6F\x72\x74\x46\x69\x65\x6C\x64","\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74","\x5B\x7B\x22\x69\x64\x22\x3A\x22\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x43\x75\x73\x74\x6F\x6D\x20\x52\x65\x70\x6F\x72\x74\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x22\x69\x63\x6F\x6E\x2D\x62\x6F\x6F\x6B\x2D\x6F\x70\x65\x6E\x22\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x31\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x31\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x23\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x32\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x4D\x79\x20\x52\x65\x70\x6F\x72\x74\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x32\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x32\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x7D\x5D","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x52\x65\x70\x6F\x72\x74\x54\x72\x65\x65","\x5B\x7B\x22\x69\x64\x22\x3A\x22\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x4D\x6F\x74\x69\x6F\x6E\x20\x52\x65\x70\x6F\x72\x74\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x22\x69\x63\x6F\x6E\x2D\x62\x6F\x6F\x6B\x2D\x6F\x70\x65\x6E\x22\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x31\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x31\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x23\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x32\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x56\x6F\x69\x63\x65\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x32\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x32\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x37\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x51\x75\x65\x75\x65\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x37\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x37\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x6A\x31\x32\x5F\x32\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x36\x30\x5F\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x41\x6E\x73\x77\x65\x72\x65\x64\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x36\x30\x5F\x31\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x36\x30\x5F\x31\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x6A\x31\x32\x5F\x37\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x36\x30\x5F\x32\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x55\x6E\x61\x6E\x73\x77\x65\x72\x65\x64\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x36\x30\x5F\x32\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x36\x30\x5F\x32\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x6A\x31\x32\x5F\x37\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x36\x30\x5F\x33\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x44\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6F\x6E\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x36\x30\x5F\x33\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x36\x30\x5F\x33\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x6A\x31\x32\x5F\x37\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x35\x31\x5F\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x43\x61\x6C\x6C\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x35\x31\x5F\x31\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x35\x31\x5F\x31\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x6A\x31\x32\x5F\x32\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x38\x37\x5F\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x41\x67\x65\x6E\x74\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x38\x37\x5F\x31\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x38\x37\x5F\x31\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x6A\x31\x32\x5F\x32\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x38\x37\x5F\x32\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x43\x61\x6C\x6C\x79\x53\x71\x75\x61\x72\x65\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x38\x37\x5F\x32\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x38\x37\x5F\x32\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x6A\x31\x32\x5F\x32\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x31\x30\x5F\x31\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x52\x65\x63\x6F\x72\x64\x69\x6E\x67\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x31\x30\x5F\x31\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x31\x31\x30\x5F\x31\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x6A\x31\x32\x5F\x32\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x31\x30\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x31\x30\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x34\x5F\x31\x30\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x6A\x31\x32\x5F\x32\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x33\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x43\x68\x61\x74\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x33\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x33\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x34\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x45\x2D\x4D\x61\x69\x6C\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x34\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x34\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x36\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x53\x4D\x53\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x36\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x36\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x7D\x2C\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x35\x22\x2C\x22\x74\x65\x78\x74\x22\x3A\x22\x41\x67\x65\x6E\x74\x73\x22\x2C\x22\x69\x63\x6F\x6E\x22\x3A\x74\x72\x75\x65\x2C\x22\x6C\x69\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x35\x22\x7D\x2C\x22\x61\x5F\x61\x74\x74\x72\x22\x3A\x7B\x22\x68\x72\x65\x66\x22\x3A\x22\x23\x22\x2C\x22\x69\x64\x22\x3A\x22\x6A\x31\x32\x5F\x35\x5F\x61\x6E\x63\x68\x6F\x72\x22\x7D\x2C\x22\x73\x74\x61\x74\x65\x22\x3A\x7B\x22\x6C\x6F\x61\x64\x65\x64\x22\x3A\x74\x72\x75\x65\x2C\x22\x6F\x70\x65\x6E\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x73\x65\x6C\x65\x63\x74\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x2C\x22\x64\x69\x73\x61\x62\x6C\x65\x64\x22\x3A\x66\x61\x6C\x73\x65\x7D\x2C\x22\x64\x61\x74\x61\x22\x3A\x7B\x7D\x2C\x22\x70\x61\x72\x65\x6E\x74\x22\x3A\x22\x31\x22\x7D\x5D","\x50\x6F\x70\x75\x6C\x61\x74\x69\x6E\x67\x20\x53\x65\x74\x74\x69\x6E\x67\x20\x2D\x20\x44\x4F\x4E\x45\x20","\x73\x70\x72\x65\x61\x64","\x2F\x76\x61\x72\x2F\x6F\x70\x74\x2F\x6D\x6F\x74\x69\x6F\x6E\x2F\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x73\x6F\x75\x6E\x64\x73\x2F\x63\x6F\x6E\x76\x65\x72\x74\x65\x64","\x53\x65\x74\x74\x69\x6E\x67"];_0xb2f9[0];var _=require(_0xb2f9[1]);var util=require(_0xb2f9[2]);var models=require(_0xb2f9[3]);var sequelize=require(_0xb2f9[3])[_0xb2f9[4]];var _agents=[];var _voiceQueues=[];var _mailQueues=[];var _chatQueues=[];var _miller,_doe;var _setting;return models[_0xb2f9[976]][_0xb2f9[970]]({where:{id:1},defaults:{id:1,min_internal:1000,min_mailbox:1000,agi_port:4573,automation_timeout:3600,soundPath:_0xb2f9[975]}})[_0xb2f9[974]](function(_0x4f3fxd){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[973]));return _0x4f3fxd})[_0xb2f9[11]](function(_0x4f3fxd){_setting= _0x4f3fxd;if(_setting[_0xb2f9[7]]){models[_0xb2f9[43]][_0xb2f9[22]]([{role:_0xb2f9[46],fullname:_0xb2f9[47],email:_0xb2f9[48],name:_0xb2f9[46],password:_0xb2f9[49],defaultuser:_0xb2f9[46],internal:1000}],{ignoreDuplicates:true,individualHooks:true})[_0xb2f9[11]](function(_0x4f3fx12){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[35],_[_0xb2f9[15]](_0x4f3fx12,_0xb2f9[14])[_0xb2f9[13]]()));return models[_0xb2f9[45]][_0xb2f9[44]]({name:_0xb2f9[36],description:_0xb2f9[36],defaultEntry:true,Users:[{role:_0xb2f9[37],fullname:_0xb2f9[38],email:_0xb2f9[39],name:_0xb2f9[28],password:_0xb2f9[40],defaultuser:_0xb2f9[28],internal:1001},{role:_0xb2f9[37],fullname:_0xb2f9[41],email:_0xb2f9[42],name:_0xb2f9[26],password:_0xb2f9[40],defaultuser:_0xb2f9[26],internal:1002}]},{include:[{model:models[_0xb2f9[43]]}]})})[_0xb2f9[11]](function(_0x4f3fx11){_agents= _0x4f3fx11[_0xb2f9[29]];console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[30],_[_0xb2f9[15]](_0x4f3fx11.Users,_0xb2f9[14])[_0xb2f9[13]]()));console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[31],_0x4f3fx11[_0xb2f9[14]]));return models[_0xb2f9[34]][_0xb2f9[22]]([{name:_0xb2f9[18],musiconhold:_0xb2f9[32],strategy:_0xb2f9[19]},{name:_0xb2f9[20],musiconhold:_0xb2f9[32],strategy:_0xb2f9[33]}],{ignoreDuplicates:true,individualHooks:true})})[_0xb2f9[11]](function(_0x4f3fx10){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[25],_[_0xb2f9[15]](_0x4f3fx10,_0xb2f9[14])[_0xb2f9[13]]()));_voiceQueues= _0x4f3fx10;_miller= _[_0xb2f9[27]](_agents,{name:_0xb2f9[26]});_doe= _[_0xb2f9[27]](_agents,{name:_0xb2f9[28]});return _voiceQueues[0][_0xb2f9[17]](_miller[_0xb2f9[9]])})[_0xb2f9[11]](function(){return _voiceQueues[1][_0xb2f9[10]]([_miller[_0xb2f9[9]],_doe[_0xb2f9[9]]])})[_0xb2f9[11]](function(){return models[_0xb2f9[24]][_0xb2f9[22]]([{name:_0xb2f9[18],timeout:5,strategy:_0xb2f9[19]},{name:_0xb2f9[20],timeout:5,strategy:_0xb2f9[21]}],{ignoreDuplicates:true,individualHooks:true})})[_0xb2f9[11]](function(_0x4f3fxf){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[12],_[_0xb2f9[15]](_0x4f3fxf,_0xb2f9[14])[_0xb2f9[13]]()));_mailQueues= _0x4f3fxf;return _mailQueues[0][_0xb2f9[17]](_miller[_0xb2f9[9]])})[_0xb2f9[11]](function(){return _mailQueues[1][_0xb2f9[10]]([_miller[_0xb2f9[9]],_doe[_0xb2f9[9]]])})[_0xb2f9[11]](function(){return models[_0xb2f9[23]][_0xb2f9[22]]([{name:_0xb2f9[18],timeout:5,strategy:_0xb2f9[19]},{name:_0xb2f9[20],timeout:5,strategy:_0xb2f9[21]}],{ignoreDuplicates:true,individualHooks:true})})[_0xb2f9[11]](function(_0x4f3fxe){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[12],_[_0xb2f9[15]](_0x4f3fxe,_0xb2f9[14])[_0xb2f9[13]]()));_chatQueues= _0x4f3fxe;return _chatQueues[0][_0xb2f9[17]](_miller[_0xb2f9[9]])})[_0xb2f9[11]](function(){return _chatQueues[1][_0xb2f9[10]]([_miller[_0xb2f9[9]],_doe[_0xb2f9[9]]])})[_0xb2f9[6]](function(_0x4f3fxc){console[_0xb2f9[8]](_0x4f3fxc)});models[_0xb2f9[63]][_0xb2f9[22]]([{name:_0xb2f9[51],prefix:_0xb2f9[52],description:_0xb2f9[53],options:_0xb2f9[54]},{name:_0xb2f9[55],prefix:_0xb2f9[56],description:_0xb2f9[57],options:_0xb2f9[58]},{name:_0xb2f9[59],prefix:_0xb2f9[60],description:_0xb2f9[61],options:_0xb2f9[62]}],{ignoreDuplicates:true,individualHooks:true})[_0xb2f9[11]](function(_0x4f3fx13){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[50],_[_0xb2f9[15]](_0x4f3fx13,_0xb2f9[14])[_0xb2f9[13]]()))});models[_0xb2f9[67]][_0xb2f9[44]]({name:_0xb2f9[65],description:_0xb2f9[66],defaultEntry:true})[_0xb2f9[11]](function(_0x4f3fx14){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[64],_0x4f3fx14[_0xb2f9[14]]))});models[_0xb2f9[73]][_0xb2f9[44]]({name:_0xb2f9[32],directory:_0xb2f9[69],mode:_0xb2f9[70],sort:_0xb2f9[71],format:_0xb2f9[72],defaultEntry:true})[_0xb2f9[11]](function(_0x4f3fx15){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[68],_0x4f3fx15[_0xb2f9[14]]))});models[_0xb2f9[81]][_0xb2f9[22]]([{name:_0xb2f9[75]},{description:_0xb2f9[76],name:_0xb2f9[77]},{description:_0xb2f9[78],name:_0xb2f9[79]},{name:_0xb2f9[80]}],{ignoreDuplicates:true,individualHooks:true})[_0xb2f9[11]](function(_0x4f3fx16){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[74],_[_0xb2f9[15]](_0x4f3fx16,_0xb2f9[14])[_0xb2f9[13]]()))});models[_0xb2f9[85]][_0xb2f9[22]]([{name:_0xb2f9[83]},{name:_0xb2f9[84]}],{ignoreDuplicates:true,individualHooks:true})[_0xb2f9[11]](function(_0x4f3fx17){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[82],_[_0xb2f9[15]](_0x4f3fx17,_0xb2f9[14])[_0xb2f9[13]]()))});models[_0xb2f9[92]][_0xb2f9[44]]({name:_0xb2f9[87],context:_0xb2f9[88],callingpres:_0xb2f9[89],deny:_0xb2f9[90],permit:_0xb2f9[90],secret:_0xb2f9[91]})[_0xb2f9[11]](function(_0x4f3fx18){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[86],_0x4f3fx18[_0xb2f9[14]]))});models[_0xb2f9[143]][_0xb2f9[44]]({context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[98],app:_0xb2f9[99],appdata:_0xb2f9[100],type:_0xb2f9[101],description:_0xb2f9[102],Applications:[{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[103],app:_0xb2f9[104],appdata:_0xb2f9[105],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[106],app:_0xb2f9[107],appdata:_0xb2f9[108],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[109],app:_0xb2f9[110],appdata:_0xb2f9[111],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[112],app:_0xb2f9[110],appdata:_0xb2f9[113],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[114],app:_0xb2f9[110],appdata:_0xb2f9[115],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[116],app:_0xb2f9[117],appdata:_0xb2f9[118],type:_0xb2f9[101],interval:_0xb2f9[119],isApp:true},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[120],app:_0xb2f9[110],appdata:_0xb2f9[121],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[122],app:_0xb2f9[110],appdata:_0xb2f9[123],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[124],app:_0xb2f9[107],appdata:_0xb2f9[125],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[126],app:_0xb2f9[110],appdata:_0xb2f9[111],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[127],app:_0xb2f9[110],appdata:_0xb2f9[113],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[128],app:_0xb2f9[110],appdata:_0xb2f9[115],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[129],app:_0xb2f9[130],appdata:_0xb2f9[131],type:_0xb2f9[101],interval:_0xb2f9[119],isApp:true},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[132],app:_0xb2f9[110],appdata:_0xb2f9[121],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[133],app:_0xb2f9[110],appdata:_0xb2f9[134],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[135],app:_0xb2f9[107],appdata:_0xb2f9[136],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[137],app:_0xb2f9[110],appdata:_0xb2f9[111],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[138],app:_0xb2f9[110],appdata:_0xb2f9[113],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[139],app:_0xb2f9[110],appdata:_0xb2f9[115],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[140],app:_0xb2f9[117],appdata:_0xb2f9[118],type:_0xb2f9[101],interval:_0xb2f9[119],isApp:true},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[141],app:_0xb2f9[110],appdata:_0xb2f9[121],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[97],priority:_0xb2f9[142],app:_0xb2f9[110],appdata:_0xb2f9[123],type:_0xb2f9[101]}]},{include:[{model:models[_0xb2f9[143]],as:_0xb2f9[144]}]})[_0xb2f9[11]](function(_0x4f3fx19){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[93],_0x4f3fx19[_0xb2f9[94]],_0x4f3fx19[_0xb2f9[95]]))});models[_0xb2f9[143]][_0xb2f9[44]]({context:_0xb2f9[96],exten:_0xb2f9[145],priority:_0xb2f9[98],app:_0xb2f9[99],appdata:_0xb2f9[100],type:_0xb2f9[101],description:_0xb2f9[146],Applications:[{context:_0xb2f9[96],exten:_0xb2f9[145],priority:_0xb2f9[103],app:_0xb2f9[104],appdata:_0xb2f9[105],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[145],priority:_0xb2f9[106],app:_0xb2f9[107],appdata:_0xb2f9[108],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[145],priority:_0xb2f9[109],app:_0xb2f9[110],appdata:_0xb2f9[111],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[145],priority:_0xb2f9[112],app:_0xb2f9[110],appdata:_0xb2f9[113],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[145],priority:_0xb2f9[114],app:_0xb2f9[147],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[145],priority:_0xb2f9[116],app:_0xb2f9[148],appdata:_0xb2f9[149],type:_0xb2f9[101],interval:_0xb2f9[119],isApp:true},{context:_0xb2f9[96],exten:_0xb2f9[145],priority:_0xb2f9[120],app:_0xb2f9[110],appdata:_0xb2f9[121],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[145],priority:_0xb2f9[122],app:_0xb2f9[110],appdata:_0xb2f9[150],type:_0xb2f9[101]}]},{include:[{model:models[_0xb2f9[143]],as:_0xb2f9[144]}]})[_0xb2f9[11]](function(_0x4f3fx19){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[93],_0x4f3fx19[_0xb2f9[94]],_0x4f3fx19[_0xb2f9[95]]))});models[_0xb2f9[143]][_0xb2f9[44]]({context:_0xb2f9[96],exten:_0xb2f9[151],priority:_0xb2f9[98],app:_0xb2f9[99],appdata:_0xb2f9[100],type:_0xb2f9[101],description:_0xb2f9[146],Applications:[{context:_0xb2f9[96],exten:_0xb2f9[151],priority:_0xb2f9[103],app:_0xb2f9[104],appdata:_0xb2f9[105],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[151],priority:_0xb2f9[106],app:_0xb2f9[107],appdata:_0xb2f9[108],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[151],priority:_0xb2f9[109],app:_0xb2f9[110],appdata:_0xb2f9[111],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[151],priority:_0xb2f9[112],app:_0xb2f9[110],appdata:_0xb2f9[113],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[151],priority:_0xb2f9[114],app:_0xb2f9[110],appdata:_0xb2f9[115],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[151],priority:_0xb2f9[116],app:_0xb2f9[152],appdata:_0xb2f9[153],type:_0xb2f9[101],interval:_0xb2f9[119],isApp:true},{context:_0xb2f9[96],exten:_0xb2f9[151],priority:_0xb2f9[120],app:_0xb2f9[110],appdata:_0xb2f9[121],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[151],priority:_0xb2f9[122],app:_0xb2f9[110],appdata:_0xb2f9[154],type:_0xb2f9[101]}]},{include:[{model:models[_0xb2f9[143]],as:_0xb2f9[144]}]})[_0xb2f9[11]](function(_0x4f3fx19){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[93],_0x4f3fx19[_0xb2f9[94]],_0x4f3fx19[_0xb2f9[95]]))});models[_0xb2f9[143]][_0xb2f9[44]]({context:_0xb2f9[96],exten:_0xb2f9[155],priority:_0xb2f9[98],app:_0xb2f9[99],appdata:_0xb2f9[100],type:_0xb2f9[101],description:_0xb2f9[146],Applications:[{context:_0xb2f9[96],exten:_0xb2f9[155],priority:_0xb2f9[103],app:_0xb2f9[104],appdata:_0xb2f9[105],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[155],priority:_0xb2f9[106],app:_0xb2f9[107],appdata:_0xb2f9[108],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[155],priority:_0xb2f9[109],app:_0xb2f9[110],appdata:_0xb2f9[111],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[155],priority:_0xb2f9[112],app:_0xb2f9[110],appdata:_0xb2f9[113],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[155],priority:_0xb2f9[114],app:_0xb2f9[110],appdata:_0xb2f9[115],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[155],priority:_0xb2f9[116],app:_0xb2f9[152],appdata:_0xb2f9[156],type:_0xb2f9[101],interval:_0xb2f9[119],isApp:true},{context:_0xb2f9[96],exten:_0xb2f9[155],priority:_0xb2f9[120],app:_0xb2f9[110],appdata:_0xb2f9[121],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[155],priority:_0xb2f9[122],app:_0xb2f9[110],appdata:_0xb2f9[154],type:_0xb2f9[101]}]},{include:[{model:models[_0xb2f9[143]],as:_0xb2f9[144]}]})[_0xb2f9[11]](function(_0x4f3fx19){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[93],_0x4f3fx19[_0xb2f9[94]],_0x4f3fx19[_0xb2f9[95]]))});models[_0xb2f9[143]][_0xb2f9[44]]({context:_0xb2f9[96],exten:_0xb2f9[157],priority:_0xb2f9[98],app:_0xb2f9[99],appdata:_0xb2f9[100],type:_0xb2f9[101],description:_0xb2f9[146],Applications:[{context:_0xb2f9[96],exten:_0xb2f9[157],priority:_0xb2f9[103],app:_0xb2f9[104],appdata:_0xb2f9[105],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[157],priority:_0xb2f9[106],app:_0xb2f9[107],appdata:_0xb2f9[108],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[157],priority:_0xb2f9[109],app:_0xb2f9[110],appdata:_0xb2f9[111],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[157],priority:_0xb2f9[112],app:_0xb2f9[110],appdata:_0xb2f9[113],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[157],priority:_0xb2f9[114],app:_0xb2f9[110],appdata:_0xb2f9[115],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[157],priority:_0xb2f9[116],app:_0xb2f9[152],appdata:_0xb2f9[158],type:_0xb2f9[101],interval:_0xb2f9[119],isApp:true},{context:_0xb2f9[96],exten:_0xb2f9[157],priority:_0xb2f9[120],app:_0xb2f9[110],appdata:_0xb2f9[121],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[157],priority:_0xb2f9[122],app:_0xb2f9[110],appdata:_0xb2f9[154],type:_0xb2f9[101]}]},{include:[{model:models[_0xb2f9[143]],as:_0xb2f9[144]}]})[_0xb2f9[11]](function(_0x4f3fx19){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[93],_0x4f3fx19[_0xb2f9[94]],_0x4f3fx19[_0xb2f9[95]]))});models[_0xb2f9[143]][_0xb2f9[44]]({context:_0xb2f9[96],exten:_0xb2f9[159],priority:_0xb2f9[98],app:_0xb2f9[99],appdata:_0xb2f9[160],type:_0xb2f9[161],description:_0xb2f9[160],Applications:[{context:_0xb2f9[96],exten:_0xb2f9[159],priority:_0xb2f9[103],app:_0xb2f9[104],appdata:_0xb2f9[162],type:_0xb2f9[161]},{context:_0xb2f9[96],exten:_0xb2f9[159],priority:_0xb2f9[106],app:_0xb2f9[104],appdata:_0xb2f9[163],type:_0xb2f9[161]},{context:_0xb2f9[96],exten:_0xb2f9[159],priority:_0xb2f9[109],app:_0xb2f9[107],appdata:_0xb2f9[164],type:_0xb2f9[161]},{context:_0xb2f9[96],exten:_0xb2f9[159],priority:_0xb2f9[112],app:_0xb2f9[110],appdata:_0xb2f9[111],type:_0xb2f9[161]},{context:_0xb2f9[96],exten:_0xb2f9[159],priority:_0xb2f9[114],app:_0xb2f9[110],appdata:_0xb2f9[113],type:_0xb2f9[161]},{context:_0xb2f9[96],exten:_0xb2f9[159],priority:_0xb2f9[116],app:_0xb2f9[110],appdata:_0xb2f9[115],type:_0xb2f9[161]},{context:_0xb2f9[96],exten:_0xb2f9[159],priority:_0xb2f9[120],app:_0xb2f9[165],appdata:_0xb2f9[166],type:_0xb2f9[161],interval:_0xb2f9[119],isApp:true},{context:_0xb2f9[96],exten:_0xb2f9[159],priority:_0xb2f9[122],app:_0xb2f9[110],appdata:_0xb2f9[121],type:_0xb2f9[161]},{context:_0xb2f9[96],exten:_0xb2f9[159],priority:_0xb2f9[124],app:_0xb2f9[110],appdata:_0xb2f9[167],type:_0xb2f9[161]}]},{include:[{model:models[_0xb2f9[143]],as:_0xb2f9[144]}]})[_0xb2f9[11]](function(_0x4f3fx19){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[93],_0x4f3fx19[_0xb2f9[94]],_0x4f3fx19[_0xb2f9[95]]))});models[_0xb2f9[143]][_0xb2f9[44]]({context:_0xb2f9[96],exten:_0xb2f9[168],priority:_0xb2f9[98],app:_0xb2f9[99],appdata:_0xb2f9[100],type:_0xb2f9[101],description:_0xb2f9[169],Applications:[{context:_0xb2f9[96],exten:_0xb2f9[168],priority:_0xb2f9[103],app:_0xb2f9[104],appdata:_0xb2f9[105],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[168],priority:_0xb2f9[106],app:_0xb2f9[107],appdata:_0xb2f9[108],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[168],priority:_0xb2f9[109],app:_0xb2f9[110],appdata:_0xb2f9[111],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[168],priority:_0xb2f9[112],app:_0xb2f9[110],appdata:_0xb2f9[113],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[168],priority:_0xb2f9[114],app:_0xb2f9[147],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[168],priority:_0xb2f9[116],app:_0xb2f9[148],appdata:_0xb2f9[170],type:_0xb2f9[101],interval:_0xb2f9[119],isApp:true},{context:_0xb2f9[96],exten:_0xb2f9[168],priority:_0xb2f9[120],app:_0xb2f9[110],appdata:_0xb2f9[121],type:_0xb2f9[101]},{context:_0xb2f9[96],exten:_0xb2f9[168],priority:_0xb2f9[122],app:_0xb2f9[110],appdata:_0xb2f9[150],type:_0xb2f9[101]}]},{include:[{model:models[_0xb2f9[143]],as:_0xb2f9[144]}]})[_0xb2f9[11]](function(_0x4f3fx19){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[93],_0x4f3fx19[_0xb2f9[94]],_0x4f3fx19[_0xb2f9[95]]))});models[_0xb2f9[184]][_0xb2f9[22]]([{"\x6E\x61\x6D\x65":_0xb2f9[172],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[173],"\x70\x72\x65\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E":_0xb2f9[174],"\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E":_0xb2f9[174]},{"\x6E\x61\x6D\x65":_0xb2f9[175],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[176],"\x70\x72\x65\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E":_0xb2f9[177],"\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E":_0xb2f9[177]},{"\x6E\x61\x6D\x65":_0xb2f9[178],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[179],"\x70\x72\x65\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E":_0xb2f9[180],"\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E":_0xb2f9[180]},{"\x6E\x61\x6D\x65":_0xb2f9[181],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[182],"\x70\x72\x65\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E":_0xb2f9[183],"\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E":_0xb2f9[183]}])[_0xb2f9[11]](function(_0x4f3fx1a){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[171],_[_0xb2f9[15]](_0x4f3fx1a,_0xb2f9[14])[_0xb2f9[13]]()))});models[_0xb2f9[188]][_0xb2f9[44]]({name:_0xb2f9[186],dsn:_0xb2f9[187]})[_0xb2f9[11]](function(_0x4f3fx1b){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[185],_0x4f3fx1b[_0xb2f9[14]]))});var _0x4f3fx1c=[{name:_0xb2f9[189],version:_0xb2f9[190],author:_0xb2f9[191],logo:_0xb2f9[192],state:_0xb2f9[193],description:_0xb2f9[194],link:_0xb2f9[195]},{name:_0xb2f9[196],version:_0xb2f9[190],author:_0xb2f9[191],logo:_0xb2f9[197],state:_0xb2f9[198],description:_0xb2f9[199],link:_0xb2f9[200]},{name:_0xb2f9[201],version:_0xb2f9[190],author:_0xb2f9[191],logo:_0xb2f9[202],state:_0xb2f9[203],description:_0xb2f9[204],link:_0xb2f9[205]}];models[_0xb2f9[212]][_0xb2f9[215]]()[_0xb2f9[11]](function(_0x4f3fx1d){var _0x4f3fx1e=[];_0x4f3fx1d= _[_0xb2f9[15]](_0x4f3fx1d,_0xb2f9[209]);_0x4f3fx1c[_0xb2f9[214]](function(_0x4f3fx1f){if(_[_0xb2f9[210]](_0x4f3fx1d,_0x4f3fx1f[_0xb2f9[209]])){_0x4f3fx1e[_0xb2f9[213]](models[_0xb2f9[212]][_0xb2f9[211]](_0x4f3fx1f,{where:{state:_0x4f3fx1f[_0xb2f9[209]]}}))}else {_0x4f3fx1e[_0xb2f9[213]](models[_0xb2f9[212]][_0xb2f9[44]](_0x4f3fx1f))}});return _0x4f3fx1e})[_0xb2f9[208]]()[_0xb2f9[11]](function(){console[_0xb2f9[8]](_0xb2f9[207])})[_0xb2f9[6]](function(_0x4f3fxc){console[_0xb2f9[8]](_0xb2f9[206],_0x4f3fxc)});models[_0xb2f9[231]][_0xb2f9[22]]([{name:_0xb2f9[217],type:_0xb2f9[218],street:_0xb2f9[219]},{name:_0xb2f9[220],type:_0xb2f9[221],street:_0xb2f9[222],postalCode:_0xb2f9[223],country:_0xb2f9[224],city:_0xb2f9[225],vat:_0xb2f9[226],website:_0xb2f9[227],phone:_0xb2f9[228],fax:_0xb2f9[229],email:_0xb2f9[230]}])[_0xb2f9[11]](function(_0x4f3fx20){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[216],_[_0xb2f9[15]](_0x4f3fx20,_0xb2f9[14])[_0xb2f9[13]]()))});models[_0xb2f9[370]][_0xb2f9[371]]({where:{defaultEntry:true}})[_0xb2f9[11]](function(){return models[_0xb2f9[370]][_0xb2f9[22]]([{name:_0xb2f9[233],model:JSON[_0xb2f9[341]]({"\x74\x69\x74\x6C\x65":_0xb2f9[234],"\x72\x6F\x77\x73":[{"\x63\x6F\x6C\x75\x6D\x6E\x73":[{"\x73\x74\x79\x6C\x65\x43\x6C\x61\x73\x73":_0xb2f9[235],"\x77\x69\x64\x67\x65\x74\x73":[{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[237],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[273],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[274],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[275]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[278]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[237],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[279],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[280],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[275]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[281]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[237],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[282],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[98],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[283]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[284]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[237],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[285],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[286],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[287],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[288]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[289]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[258],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[290],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[98],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[291]},"\x74\x69\x74\x6C\x65":_0xb2f9[292],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[293]}],"\x63\x69\x64":_0xb2f9[294]},{"\x73\x74\x79\x6C\x65\x43\x6C\x61\x73\x73":_0xb2f9[235],"\x77\x69\x64\x67\x65\x74\x73":[{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[256],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[295],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[296],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[275]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[297]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[256],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[298],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[299],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[275]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[300]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[256],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[301],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[98],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[302]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[303]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[262],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[304],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[286],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[287],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[305]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[306]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[98],"\x63\x6F\x6C\x6F\x72":_0xb2f9[258],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[307],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[308]},"\x74\x69\x74\x6C\x65":_0xb2f9[309],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[310]}],"\x63\x69\x64":_0xb2f9[311]},{"\x73\x74\x79\x6C\x65\x43\x6C\x61\x73\x73":_0xb2f9[235],"\x77\x69\x64\x67\x65\x74\x73":[{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[237],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[312],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[273],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[313]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[314]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[262],"\x69\x63\x6F\x6E":_0xb2f9[267],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[315],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[316],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[98]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[317]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[262],"\x69\x63\x6F\x6E":_0xb2f9[267],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[318],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[98],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[319]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[320]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[256],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[321],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[298],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[322]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[323]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[98],"\x63\x6F\x6C\x6F\x72":_0xb2f9[258],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[324],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[325]},"\x74\x69\x74\x6C\x65":_0xb2f9[326],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[327]}],"\x63\x69\x64":_0xb2f9[328]},{"\x73\x74\x79\x6C\x65\x43\x6C\x61\x73\x73":_0xb2f9[235],"\x77\x69\x64\x67\x65\x74\x73":[{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[256],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[329],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[295],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[330]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[331]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[256],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[275],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[332],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[272],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[333]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[334]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[264],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[335],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[286],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[287],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[336]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[337]}],"\x63\x69\x64":_0xb2f9[338]}]}],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[339],"\x73\x74\x72\x75\x63\x74\x75\x72\x65":_0xb2f9[340]}),defaultEntry:true,editable:true},{name:_0xb2f9[342],model:JSON[_0xb2f9[341]]({"\x74\x69\x74\x6C\x65":_0xb2f9[342],"\x72\x6F\x77\x73":[{"\x63\x6F\x6C\x75\x6D\x6E\x73":[{"\x73\x74\x79\x6C\x65\x43\x6C\x61\x73\x73":_0xb2f9[235],"\x77\x69\x64\x67\x65\x74\x73":[{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[260],"\x69\x63\x6F\x6E":_0xb2f9[271],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[275],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[343],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[344],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[345]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[346]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[347],"\x63\x6F\x6C\x6F\x72":_0xb2f9[258],"\x69\x63\x6F\x6E":_0xb2f9[271],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[275],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[343],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[348]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[349]}],"\x63\x69\x64":_0xb2f9[294]},{"\x73\x74\x79\x6C\x65\x43\x6C\x61\x73\x73":_0xb2f9[235],"\x77\x69\x64\x67\x65\x74\x73":[{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[260],"\x69\x63\x6F\x6E":_0xb2f9[271],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[350],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[343],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[344],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[351]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[352]},{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[344],"\x63\x6F\x6C\x6F\x72":_0xb2f9[262],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[353],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[343],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[354]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[355]}],"\x63\x69\x64":_0xb2f9[311]},{"\x73\x74\x79\x6C\x65\x43\x6C\x61\x73\x73":_0xb2f9[235],"\x77\x69\x64\x67\x65\x74\x73":[{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[344],"\x63\x6F\x6C\x6F\x72":_0xb2f9[237],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[356],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[343],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[357]},"\x74\x69\x74\x6C\x65":_0xb2f9[276],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[358]}],"\x63\x69\x64":_0xb2f9[328]},{"\x73\x74\x79\x6C\x65\x43\x6C\x61\x73\x73":_0xb2f9[235],"\x77\x69\x64\x67\x65\x74\x73":[],"\x63\x69\x64":_0xb2f9[338]}]}],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[339],"\x73\x74\x72\x75\x63\x74\x75\x72\x65":_0xb2f9[340]}),defaultEntry:true,editable:true},{name:_0xb2f9[359],model:JSON[_0xb2f9[341]]({"\x74\x69\x74\x6C\x65":_0xb2f9[359],"\x72\x6F\x77\x73":[{"\x63\x6F\x6C\x75\x6D\x6E\x73":[{"\x73\x74\x79\x6C\x65\x43\x6C\x61\x73\x73":_0xb2f9[235],"\x77\x69\x64\x67\x65\x74\x73":[{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[260],"\x69\x63\x6F\x6E":_0xb2f9[271],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[275],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[249],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[360],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[361]},"\x74\x69\x74\x6C\x65":_0xb2f9[362],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[363]}],"\x63\x69\x64":_0xb2f9[294]},{"\x73\x74\x79\x6C\x65\x43\x6C\x61\x73\x73":_0xb2f9[235],"\x77\x69\x64\x67\x65\x74\x73":[{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[264],"\x69\x63\x6F\x6E":_0xb2f9[271],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[275],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[249],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[364],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[365]},"\x74\x69\x74\x6C\x65":_0xb2f9[362],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[366]}],"\x63\x69\x64":_0xb2f9[311]},{"\x73\x74\x79\x6C\x65\x43\x6C\x61\x73\x73":_0xb2f9[235],"\x77\x69\x64\x67\x65\x74\x73":[{"\x74\x79\x70\x65":_0xb2f9[236],"\x63\x6F\x6E\x66\x69\x67":{"\x74\x69\x6D\x65\x6F\x75\x74":5,"\x63\x6F\x6C\x6F\x72":_0xb2f9[262],"\x69\x63\x6F\x6E":_0xb2f9[238],"\x6C\x69\x6E\x6B":_0xb2f9[239],"\x6C\x69\x6E\x6B\x54\x65\x78\x74":_0xb2f9[240],"\x72\x65\x70\x6F\x72\x74\x54\x61\x62\x6C\x65\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[241],"\x76\x61\x6C\x75\x65":_0xb2f9[242]},{"\x6E\x61\x6D\x65":_0xb2f9[243],"\x76\x61\x6C\x75\x65":_0xb2f9[244]},{"\x6E\x61\x6D\x65":_0xb2f9[245],"\x76\x61\x6C\x75\x65":_0xb2f9[246]},{"\x6E\x61\x6D\x65":_0xb2f9[247],"\x76\x61\x6C\x75\x65":_0xb2f9[248]},{"\x6E\x61\x6D\x65":_0xb2f9[29],"\x76\x61\x6C\x75\x65":_0xb2f9[249]},{"\x6E\x61\x6D\x65":_0xb2f9[250],"\x76\x61\x6C\x75\x65":_0xb2f9[251]},{"\x6E\x61\x6D\x65":_0xb2f9[252],"\x76\x61\x6C\x75\x65":_0xb2f9[253]}],"\x63\x6F\x6C\x6F\x72\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[254],"\x76\x61\x6C\x75\x65":_0xb2f9[237]},{"\x6E\x61\x6D\x65":_0xb2f9[255],"\x76\x61\x6C\x75\x65":_0xb2f9[256]},{"\x6E\x61\x6D\x65":_0xb2f9[257],"\x76\x61\x6C\x75\x65":_0xb2f9[258]},{"\x6E\x61\x6D\x65":_0xb2f9[259],"\x76\x61\x6C\x75\x65":_0xb2f9[260]},{"\x6E\x61\x6D\x65":_0xb2f9[261],"\x76\x61\x6C\x75\x65":_0xb2f9[262]},{"\x6E\x61\x6D\x65":_0xb2f9[263],"\x76\x61\x6C\x75\x65":_0xb2f9[264]}],"\x69\x63\x6F\x6E\x73":[{"\x6E\x61\x6D\x65":_0xb2f9[265],"\x76\x61\x6C\x75\x65":_0xb2f9[238]},{"\x6E\x61\x6D\x65":_0xb2f9[266],"\x76\x61\x6C\x75\x65":_0xb2f9[267]},{"\x6E\x61\x6D\x65":_0xb2f9[268],"\x76\x61\x6C\x75\x65":_0xb2f9[269]},{"\x6E\x61\x6D\x65":_0xb2f9[270],"\x76\x61\x6C\x75\x65":_0xb2f9[271]}],"\x73\x65\x6C\x65\x63\x74":_0xb2f9[275],"\x72\x65\x70\x6F\x72\x74":_0xb2f9[249],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E":_0xb2f9[367],"\x64\x65\x74\x61\x69\x6C\x73":_0xb2f9[368]},"\x74\x69\x74\x6C\x65":_0xb2f9[362],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[277],"\x77\x69\x64":_0xb2f9[369]}],"\x63\x69\x64":_0xb2f9[328]},{"\x73\x74\x79\x6C\x65\x43\x6C\x61\x73\x73":_0xb2f9[235],"\x77\x69\x64\x67\x65\x74\x73":[],"\x63\x69\x64":_0xb2f9[338]}]}],"\x74\x69\x74\x6C\x65\x54\x65\x6D\x70\x6C\x61\x74\x65\x55\x72\x6C":_0xb2f9[339],"\x73\x74\x72\x75\x63\x74\x75\x72\x65":_0xb2f9[340]}),defaultEntry:true,editable:true}],{ignoreDuplicates:true,individualHooks:true})})[_0xb2f9[11]](function(_0x4f3fx21){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[232],_[_0xb2f9[15]](_0x4f3fx21,_0xb2f9[14])[_0xb2f9[13]]()))});models[_0xb2f9[143]][_0xb2f9[371]]({where:{context:_0xb2f9[373]}})[_0xb2f9[11]](function(){models[_0xb2f9[143]][_0xb2f9[22]]([{context:_0xb2f9[373],exten:_0xb2f9[374],priority:1,app:_0xb2f9[99],appdata:_0xb2f9[375],type:_0xb2f9[376]},{context:_0xb2f9[373],exten:_0xb2f9[374],priority:2,app:_0xb2f9[99],appdata:_0xb2f9[377],type:_0xb2f9[376]},{context:_0xb2f9[373],exten:_0xb2f9[374],priority:3,app:_0xb2f9[104],appdata:_0xb2f9[378],type:_0xb2f9[376]},{context:_0xb2f9[373],exten:_0xb2f9[374],priority:4,app:_0xb2f9[379],appdata:_0xb2f9[131],type:_0xb2f9[376]},{context:_0xb2f9[373],exten:_0xb2f9[374],priority:5,app:_0xb2f9[380],appdata:_0xb2f9[103],type:_0xb2f9[376]},{context:_0xb2f9[373],exten:_0xb2f9[374],priority:6,app:_0xb2f9[104],appdata:_0xb2f9[381],type:_0xb2f9[376]},{context:_0xb2f9[373],exten:_0xb2f9[374],priority:7,app:_0xb2f9[104],appdata:_0xb2f9[382],type:_0xb2f9[376]},{context:_0xb2f9[373],exten:_0xb2f9[374],priority:8,app:_0xb2f9[104],appdata:_0xb2f9[383],type:_0xb2f9[376]},{context:_0xb2f9[373],exten:_0xb2f9[374],priority:9,app:_0xb2f9[104],appdata:_0xb2f9[384],type:_0xb2f9[376]},{context:_0xb2f9[373],exten:_0xb2f9[374],priority:10,app:_0xb2f9[104],appdata:_0xb2f9[385],type:_0xb2f9[376]},{context:_0xb2f9[373],exten:_0xb2f9[374],priority:11,app:_0xb2f9[104],appdata:_0xb2f9[386],type:_0xb2f9[376]},{context:_0xb2f9[373],exten:_0xb2f9[374],priority:12,app:_0xb2f9[104],appdata:_0xb2f9[387],type:_0xb2f9[376]},{context:_0xb2f9[373],exten:_0xb2f9[374],priority:13,app:_0xb2f9[104],appdata:_0xb2f9[388],type:_0xb2f9[376]},{context:_0xb2f9[373],exten:_0xb2f9[374],priority:14,app:_0xb2f9[389],appdata:_0xb2f9[390],type:_0xb2f9[376]},{context:_0xb2f9[373],exten:_0xb2f9[374],priority:15,app:_0xb2f9[391],appdata:_0xb2f9[131],type:_0xb2f9[376]}],{ignoreDuplicates:true,individualHooks:true})})[_0xb2f9[11]](function(){console[_0xb2f9[8]](_0xb2f9[372])});models[_0xb2f9[43]][_0xb2f9[215]]({include:[{model:models[_0xb2f9[143]],as:_0xb2f9[397],where:{app:_0xb2f9[165]}}]})[_0xb2f9[11]](function(_0x4f3fx12){console[_0xb2f9[8]](_0xb2f9[392]);var _0x4f3fx22=[];_[_0xb2f9[214]](_0x4f3fx12,function(_0x4f3fx23){_[_0xb2f9[214]](_0x4f3fx23.UserExtensions,function(_0x4f3fx24){_0x4f3fx24[_0xb2f9[393]]= _0xb2f9[394]+ _0x4f3fx23[_0xb2f9[14]]+ _0xb2f9[395];_0x4f3fx22[_0xb2f9[213]](_0x4f3fx24[_0xb2f9[396]]())})});return _0x4f3fx22})[_0xb2f9[208]]()[_0xb2f9[6]](function(_0x4f3fxc){console[_0xb2f9[8]](_0x4f3fxc)});_setting[_0xb2f9[211]]({firstSetup:false})};models[_0xb2f9[402]][_0xb2f9[22]]([{name:_0xb2f9[96],description:_0xb2f9[399],defaultEntry:true},{name:_0xb2f9[88],description:_0xb2f9[399],defaultEntry:true},{name:_0xb2f9[400],description:_0xb2f9[399],defaultEntry:true},{name:_0xb2f9[373],description:_0xb2f9[399],defaultEntry:true},{name:_0xb2f9[401],description:_0xb2f9[399],defaultEntry:true}],{ignoreDuplicates:true,individualHooks:true})[_0xb2f9[11]](function(_0x4f3fx17){console[_0xb2f9[8]](util[_0xb2f9[16]](_0xb2f9[398],_[_0xb2f9[15]](_0x4f3fx17,_0xb2f9[14])[_0xb2f9[13]]()))});var _0x4f3fx25=[{id:1,name:_0xb2f9[403],title:_0xb2f9[404],ModuleId:null,path:_0xb2f9[405]},{id:2,name:_0xb2f9[406],title:_0xb2f9[407],ModuleId:null,path:_0xb2f9[408]},{id:3,name:_0xb2f9[409],title:_0xb2f9[410],ModuleId:null,path:null},{id:4,name:_0xb2f9[411],title:_0xb2f9[412],ModuleId:3,path:_0xb2f9[413]},{id:5,name:_0xb2f9[414],title:_0xb2f9[415],ModuleId:null,path:_0xb2f9[416]},{id:6,name:_0xb2f9[417],title:_0xb2f9[418],ModuleId:null,path:null},{id:7,name:_0xb2f9[419],title:_0xb2f9[420],ModuleId:6,path:null},{id:8,name:_0xb2f9[421],title:_0xb2f9[422],ModuleId:6,path:null},{id:9,name:_0xb2f9[423],title:_0xb2f9[424],ModuleId:6,path:null},{id:10,name:_0xb2f9[425],title:_0xb2f9[426],ModuleId:6,path:null},{id:11,name:_0xb2f9[427],title:_0xb2f9[428],ModuleId:6,path:null},{id:12,name:_0xb2f9[429],title:_0xb2f9[430],ModuleId:6,path:_0xb2f9[431]},{id:13,name:_0xb2f9[432],title:_0xb2f9[433],ModuleId:null,path:null},{id:14,name:_0xb2f9[434],title:_0xb2f9[435],ModuleId:null,path:_0xb2f9[436]},{id:15,name:_0xb2f9[437],title:_0xb2f9[438],ModuleId:null,path:_0xb2f9[439]},{id:16,name:_0xb2f9[440],title:_0xb2f9[441],ModuleId:null,path:_0xb2f9[442]},{id:17,name:_0xb2f9[443],title:_0xb2f9[444],ModuleId:null,path:_0xb2f9[445]},{id:18,name:_0xb2f9[446],title:_0xb2f9[447],ModuleId:null,path:_0xb2f9[448]},{id:19,name:_0xb2f9[449],title:_0xb2f9[450],ModuleId:null,path:_0xb2f9[451]},{id:20,name:_0xb2f9[452],title:_0xb2f9[453],ModuleId:6,path:_0xb2f9[454]},{id:21,name:_0xb2f9[455],title:_0xb2f9[456],ModuleId:7,path:_0xb2f9[457]},{id:22,name:_0xb2f9[458],title:_0xb2f9[459],ModuleId:7,path:_0xb2f9[460]},{id:23,name:_0xb2f9[461],title:_0xb2f9[462],ModuleId:7,path:_0xb2f9[463]},{id:24,name:_0xb2f9[464],title:_0xb2f9[465],ModuleId:7,path:_0xb2f9[466]},{id:25,name:_0xb2f9[467],title:_0xb2f9[468],ModuleId:7,path:_0xb2f9[469]},{id:26,name:_0xb2f9[429],title:_0xb2f9[430],ModuleId:7,path:_0xb2f9[470]},{id:27,name:_0xb2f9[471],title:_0xb2f9[472],ModuleId:7,path:_0xb2f9[473]},{id:28,name:_0xb2f9[474],title:_0xb2f9[475],ModuleId:7,path:_0xb2f9[476]},{id:29,name:_0xb2f9[477],title:_0xb2f9[478],ModuleId:8,path:_0xb2f9[479]},{id:30,name:_0xb2f9[480],title:_0xb2f9[481],ModuleId:8,path:_0xb2f9[482]},{id:31,name:_0xb2f9[483],title:_0xb2f9[484],ModuleId:8,path:_0xb2f9[485]},{id:32,name:_0xb2f9[486],title:_0xb2f9[487],ModuleId:8,path:_0xb2f9[488]},{id:33,name:_0xb2f9[429],title:_0xb2f9[430],ModuleId:8,path:_0xb2f9[489]},{id:34,name:_0xb2f9[490],title:_0xb2f9[491],ModuleId:9,path:_0xb2f9[492]},{id:35,name:_0xb2f9[480],title:_0xb2f9[481],ModuleId:9,path:_0xb2f9[493]},{id:36,name:_0xb2f9[494],title:_0xb2f9[495],ModuleId:9,path:_0xb2f9[496]},{id:37,name:_0xb2f9[429],title:_0xb2f9[430],ModuleId:9,path:_0xb2f9[497]},{id:38,name:_0xb2f9[490],title:_0xb2f9[491],ModuleId:10,path:_0xb2f9[498]},{id:39,name:_0xb2f9[480],title:_0xb2f9[481],ModuleId:10,path:_0xb2f9[499]},{id:40,name:_0xb2f9[494],title:_0xb2f9[495],ModuleId:10,path:_0xb2f9[500]},{id:41,name:_0xb2f9[429],title:_0xb2f9[430],ModuleId:10,path:_0xb2f9[501]},{id:42,name:_0xb2f9[490],title:_0xb2f9[491],ModuleId:11,path:_0xb2f9[502]},{id:43,name:_0xb2f9[480],title:_0xb2f9[481],ModuleId:11,path:_0xb2f9[503]},{id:44,name:_0xb2f9[494],title:_0xb2f9[495],ModuleId:11,path:_0xb2f9[504]},{id:45,name:_0xb2f9[429],title:_0xb2f9[430],ModuleId:11,path:_0xb2f9[505]},{id:46,name:_0xb2f9[490],title:_0xb2f9[491],ModuleId:20,path:_0xb2f9[454]},{id:47,name:_0xb2f9[480],title:_0xb2f9[481],ModuleId:20,path:_0xb2f9[506]},{id:48,name:_0xb2f9[494],title:_0xb2f9[495],ModuleId:20,path:_0xb2f9[507]},{id:49,name:_0xb2f9[429],title:_0xb2f9[430],ModuleId:20,path:_0xb2f9[508]},{id:50,name:_0xb2f9[509],title:_0xb2f9[510],ModuleId:13,path:_0xb2f9[511]},{id:51,name:_0xb2f9[512],title:_0xb2f9[513],ModuleId:13,path:_0xb2f9[514]},{id:52,name:_0xb2f9[515],title:_0xb2f9[516],ModuleId:13,path:_0xb2f9[517]},{id:53,name:_0xb2f9[518],title:_0xb2f9[519],ModuleId:13,path:_0xb2f9[520]},{id:54,name:_0xb2f9[521],title:_0xb2f9[522],ModuleId:13,path:_0xb2f9[523]},{id:55,name:_0xb2f9[524],title:_0xb2f9[525],ModuleId:13,path:_0xb2f9[526]},{id:56,name:_0xb2f9[527],title:_0xb2f9[528],ModuleId:13,path:_0xb2f9[529]},{id:57,name:_0xb2f9[530],title:_0xb2f9[531],ModuleId:13,path:_0xb2f9[532]},{id:58,name:_0xb2f9[533],title:_0xb2f9[534],ModuleId:13,path:_0xb2f9[535]},{id:59,name:_0xb2f9[406],title:_0xb2f9[536],ModuleId:13,path:_0xb2f9[537]},{id:60,name:_0xb2f9[538],title:_0xb2f9[539],ModuleId:13,path:_0xb2f9[540]},{id:61,name:_0xb2f9[541],title:_0xb2f9[542],ModuleId:13,path:_0xb2f9[543]}];models[_0xb2f9[546]][_0xb2f9[215]]()[_0xb2f9[11]](function(_0x4f3fx26){var _0x4f3fx27=[];_0x4f3fx26= _[_0xb2f9[15]](_0x4f3fx26,_0xb2f9[9]);_0x4f3fx25[_0xb2f9[214]](function(_0x4f3fx28){if(_[_0xb2f9[210]](_0x4f3fx26,_0x4f3fx28[_0xb2f9[9]])){_0x4f3fx27[_0xb2f9[213]](models[_0xb2f9[546]][_0xb2f9[211]](_0x4f3fx28,{where:{id:_0x4f3fx28[_0xb2f9[9]]}}))}else {_0x4f3fx27[_0xb2f9[213]](models[_0xb2f9[546]][_0xb2f9[44]](_0x4f3fx28))}});return _0x4f3fx27})[_0xb2f9[208]]()[_0xb2f9[11]](function(){console[_0xb2f9[8]](_0xb2f9[545])})[_0xb2f9[6]](function(_0x4f3fxc){console[_0xb2f9[8]](_0xb2f9[544],_0x4f3fxc)});var _0x4f3fx29=[{"\x69\x64":25,"\x6E\x61\x6D\x65":_0xb2f9[547],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[548],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[549],"\x74\x61\x62\x6C\x65":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":26,"\x6E\x61\x6D\x65":_0xb2f9[551],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[552],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[549],"\x74\x61\x62\x6C\x65":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":28,"\x6E\x61\x6D\x65":_0xb2f9[547],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[553],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[554],"\x74\x61\x62\x6C\x65":_0xb2f9[286],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[555]},{"\x69\x64":29,"\x6E\x61\x6D\x65":_0xb2f9[556],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[557],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[554],"\x74\x61\x62\x6C\x65":_0xb2f9[286],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[555]},{"\x69\x64":30,"\x6E\x61\x6D\x65":_0xb2f9[558],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[559],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[554],"\x74\x61\x62\x6C\x65":_0xb2f9[286],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[555]},{"\x69\x64":31,"\x6E\x61\x6D\x65":_0xb2f9[560],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[561],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[554],"\x74\x61\x62\x6C\x65":_0xb2f9[286],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[555]},{"\x69\x64":32,"\x6E\x61\x6D\x65":_0xb2f9[562],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[563],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[554],"\x74\x61\x62\x6C\x65":_0xb2f9[286],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[555]},{"\x69\x64":34,"\x6E\x61\x6D\x65":_0xb2f9[564],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[565],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[554],"\x74\x61\x62\x6C\x65":_0xb2f9[286],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[555]},{"\x69\x64":35,"\x6E\x61\x6D\x65":_0xb2f9[547],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[566],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[567],"\x74\x61\x62\x6C\x65":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[568]},{"\x69\x64":36,"\x6E\x61\x6D\x65":_0xb2f9[569],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[570],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[567],"\x74\x61\x62\x6C\x65":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[568]},{"\x69\x64":37,"\x6E\x61\x6D\x65":_0xb2f9[571],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[572],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[567],"\x74\x61\x62\x6C\x65":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[573]},{"\x69\x64":38,"\x6E\x61\x6D\x65":_0xb2f9[574],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[575],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[567],"\x74\x61\x62\x6C\x65":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[576]},{"\x69\x64":40,"\x6E\x61\x6D\x65":_0xb2f9[577],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[578],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[579],"\x74\x61\x62\x6C\x65":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":41,"\x6E\x61\x6D\x65":_0xb2f9[580],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[581],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[579],"\x74\x61\x62\x6C\x65":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":46,"\x6E\x61\x6D\x65":_0xb2f9[582],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[583],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[579],"\x74\x61\x62\x6C\x65":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":47,"\x6E\x61\x6D\x65":_0xb2f9[584],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[585],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[579],"\x74\x61\x62\x6C\x65":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":49,"\x6E\x61\x6D\x65":_0xb2f9[586],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[587],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[549],"\x74\x61\x62\x6C\x65":_0xb2f9[272],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":50,"\x6E\x61\x6D\x65":_0xb2f9[547],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[588],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[589],"\x74\x61\x62\x6C\x65":_0xb2f9[343],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":51,"\x6E\x61\x6D\x65":_0xb2f9[590],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[591],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[589],"\x74\x61\x62\x6C\x65":_0xb2f9[343],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[592]},{"\x69\x64":52,"\x6E\x61\x6D\x65":_0xb2f9[593],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[594],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[589],"\x74\x61\x62\x6C\x65":_0xb2f9[343],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":53,"\x6E\x61\x6D\x65":_0xb2f9[595],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[596],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[589],"\x74\x61\x62\x6C\x65":_0xb2f9[343],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[592]},{"\x69\x64":54,"\x6E\x61\x6D\x65":_0xb2f9[597],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[598],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[589],"\x74\x61\x62\x6C\x65":_0xb2f9[343],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[592]},{"\x69\x64":55,"\x6E\x61\x6D\x65":_0xb2f9[599],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[600],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[589],"\x74\x61\x62\x6C\x65":_0xb2f9[343],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[592]},{"\x69\x64":57,"\x6E\x61\x6D\x65":_0xb2f9[601],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[602],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[603],"\x74\x61\x62\x6C\x65":_0xb2f9[604],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[605]},{"\x69\x64":61,"\x6E\x61\x6D\x65":_0xb2f9[606],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[607],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[608],"\x74\x61\x62\x6C\x65":_0xb2f9[604],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[609]},{"\x69\x64":62,"\x6E\x61\x6D\x65":_0xb2f9[610],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[611],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[608],"\x74\x61\x62\x6C\x65":_0xb2f9[604],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[612]},{"\x69\x64":63,"\x6E\x61\x6D\x65":_0xb2f9[547],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[613],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[608],"\x74\x61\x62\x6C\x65":_0xb2f9[604],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[609]},{"\x69\x64":64,"\x6E\x61\x6D\x65":_0xb2f9[614],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[615],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[608],"\x74\x61\x62\x6C\x65":_0xb2f9[604],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[616]},{"\x69\x64":65,"\x6E\x61\x6D\x65":_0xb2f9[586],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[617],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[618],"\x74\x61\x62\x6C\x65":_0xb2f9[619],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":67,"\x6E\x61\x6D\x65":_0xb2f9[620],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[621],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[618],"\x74\x61\x62\x6C\x65":_0xb2f9[622],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":68,"\x6E\x61\x6D\x65":_0xb2f9[623],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[624],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[625],"\x74\x61\x62\x6C\x65":_0xb2f9[626],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":69,"\x6E\x61\x6D\x65":_0xb2f9[627],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[628],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[629],"\x74\x61\x62\x6C\x65":_0xb2f9[630],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[631]},{"\x69\x64":70,"\x6E\x61\x6D\x65":_0xb2f9[632],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[633],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[629],"\x74\x61\x62\x6C\x65":_0xb2f9[630],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[634]},{"\x69\x64":72,"\x6E\x61\x6D\x65":_0xb2f9[635],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[636],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[637],"\x74\x61\x62\x6C\x65":_0xb2f9[638],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":73,"\x6E\x61\x6D\x65":_0xb2f9[639],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[640],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[637],"\x74\x61\x62\x6C\x65":_0xb2f9[638],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":74,"\x6E\x61\x6D\x65":_0xb2f9[641],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[642],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[637],"\x74\x61\x62\x6C\x65":_0xb2f9[638],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[643]},{"\x69\x64":75,"\x6E\x61\x6D\x65":_0xb2f9[644],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[645],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[637],"\x74\x61\x62\x6C\x65":_0xb2f9[638],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[646]},{"\x69\x64":76,"\x6E\x61\x6D\x65":_0xb2f9[647],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[648],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[637],"\x74\x61\x62\x6C\x65":_0xb2f9[638],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":77,"\x6E\x61\x6D\x65":_0xb2f9[649],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[650],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[625],"\x74\x61\x62\x6C\x65":_0xb2f9[626],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[646]},{"\x69\x64":79,"\x6E\x61\x6D\x65":_0xb2f9[651],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[652],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[625],"\x74\x61\x62\x6C\x65":_0xb2f9[626],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[653]},{"\x69\x64":81,"\x6E\x61\x6D\x65":_0xb2f9[654],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[655],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[625],"\x74\x61\x62\x6C\x65":_0xb2f9[656],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":82,"\x6E\x61\x6D\x65":_0xb2f9[657],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[658],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[625],"\x74\x61\x62\x6C\x65":_0xb2f9[659],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":83,"\x6E\x61\x6D\x65":_0xb2f9[660],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[661],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[625],"\x74\x61\x62\x6C\x65":_0xb2f9[659],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[662]},{"\x69\x64":84,"\x6E\x61\x6D\x65":_0xb2f9[663],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0xb2f9[664],"\x70\x61\x72\x65\x6E\x74":_0xb2f9[625],"\x74\x61\x62\x6C\x65":_0xb2f9[659],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[665]},{"\x69\x64":85,"\x6E\x61\x6D\x65":_0xb2f9[547],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xb2f9[666],"\x74\x61\x62\x6C\x65":_0xb2f9[667],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]},{"\x69\x64":90,"\x6E\x61\x6D\x65":_0xb2f9[547],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":null,"\x70\x61\x72\x65\x6E\x74":_0xb2f9[668],"\x74\x61\x62\x6C\x65":_0xb2f9[669],"\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73":_0xb2f9[550]}];var _0x4f3fx2a=[{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[671],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[672],"\x61\x6C\x69\x61\x73":_0xb2f9[673],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[674],"\x61\x6C\x69\x61\x73":_0xb2f9[675],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[676],"\x61\x6C\x69\x61\x73":_0xb2f9[148],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[677],"\x61\x6C\x69\x61\x73":_0xb2f9[678],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[679],"\x61\x6C\x69\x61\x73":_0xb2f9[680],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[681],"\x61\x6C\x69\x61\x73":_0xb2f9[682],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[683],"\x61\x6C\x69\x61\x73":_0xb2f9[684],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[685],"\x61\x6C\x69\x61\x73":_0xb2f9[686],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[687],"\x61\x6C\x69\x61\x73":_0xb2f9[688],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[689],"\x61\x6C\x69\x61\x73":_0xb2f9[690],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[691],"\x61\x6C\x69\x61\x73":_0xb2f9[692],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[693],"\x61\x6C\x69\x61\x73":_0xb2f9[694],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[95],"\x61\x6C\x69\x61\x73":_0xb2f9[695],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[696],"\x61\x6C\x69\x61\x73":_0xb2f9[697],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[699],"\x61\x6C\x69\x61\x73":_0xb2f9[700],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[701],"\x61\x6C\x69\x61\x73":_0xb2f9[702],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":25,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[672],"\x61\x6C\x69\x61\x73":_0xb2f9[703],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":26,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[676],"\x61\x6C\x69\x61\x73":_0xb2f9[148],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":26,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[677],"\x61\x6C\x69\x61\x73":_0xb2f9[704],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":26,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[705],"\x61\x6C\x69\x61\x73":_0xb2f9[706],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":26,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[707],"\x61\x6C\x69\x61\x73":_0xb2f9[708],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":26,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[709],"\x61\x6C\x69\x61\x73":_0xb2f9[348],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":26,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[671],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[672],"\x61\x6C\x69\x61\x73":_0xb2f9[673],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[674],"\x61\x6C\x69\x61\x73":_0xb2f9[675],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[676],"\x61\x6C\x69\x61\x73":_0xb2f9[148],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[710],"\x61\x6C\x69\x61\x73":_0xb2f9[711],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[712],"\x61\x6C\x69\x61\x73":_0xb2f9[713],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[714],"\x61\x6C\x69\x61\x73":_0xb2f9[715],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[716],"\x61\x6C\x69\x61\x73":_0xb2f9[717],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[707],"\x61\x6C\x69\x61\x73":_0xb2f9[702],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[718],"\x61\x6C\x69\x61\x73":_0xb2f9[697],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[719],"\x61\x6C\x69\x61\x73":_0xb2f9[720],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[721],"\x61\x6C\x69\x61\x73":_0xb2f9[722],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[723],"\x61\x6C\x69\x61\x73":_0xb2f9[724],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[725],"\x61\x6C\x69\x61\x73":_0xb2f9[726],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[727],"\x61\x6C\x69\x61\x73":_0xb2f9[728],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[95],"\x61\x6C\x69\x61\x73":_0xb2f9[695],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":28,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[710],"\x61\x6C\x69\x61\x73":_0xb2f9[711],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":29,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[723],"\x61\x6C\x69\x61\x73":_0xb2f9[729],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":29,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[718],"\x61\x6C\x69\x61\x73":_0xb2f9[731],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":29,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[721],"\x61\x6C\x69\x61\x73":_0xb2f9[732],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":29,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[733],"\x61\x6C\x69\x61\x73":_0xb2f9[734],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":29,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[735],"\x61\x6C\x69\x61\x73":_0xb2f9[736],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":29,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[737],"\x61\x6C\x69\x61\x73":_0xb2f9[738],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":29,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[739],"\x61\x6C\x69\x61\x73":_0xb2f9[740],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":29,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[676],"\x61\x6C\x69\x61\x73":_0xb2f9[148],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[723],"\x61\x6C\x69\x61\x73":_0xb2f9[729],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[718],"\x61\x6C\x69\x61\x73":_0xb2f9[741],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[707],"\x61\x6C\x69\x61\x73":_0xb2f9[742],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[721],"\x61\x6C\x69\x61\x73":_0xb2f9[743],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[733],"\x61\x6C\x69\x61\x73":_0xb2f9[744],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[735],"\x61\x6C\x69\x61\x73":_0xb2f9[745],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[746],"\x61\x6C\x69\x61\x73":_0xb2f9[747],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[737],"\x61\x6C\x69\x61\x73":_0xb2f9[748],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[739],"\x61\x6C\x69\x61\x73":_0xb2f9[749],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":30,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[676],"\x61\x6C\x69\x61\x73":_0xb2f9[148],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":31,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[723],"\x61\x6C\x69\x61\x73":_0xb2f9[750],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":31,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[751],"\x61\x6C\x69\x61\x73":_0xb2f9[752],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":31,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[753],"\x61\x6C\x69\x61\x73":_0xb2f9[754],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":31,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[755],"\x61\x6C\x69\x61\x73":_0xb2f9[756],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":31,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[757],"\x61\x6C\x69\x61\x73":_0xb2f9[758],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":31,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[759],"\x61\x6C\x69\x61\x73":_0xb2f9[760],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":31,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[761],"\x61\x6C\x69\x61\x73":_0xb2f9[762],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":31,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[763],"\x61\x6C\x69\x61\x73":_0xb2f9[764],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":31,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[765],"\x61\x6C\x69\x61\x73":_0xb2f9[766],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":31,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[725],"\x61\x6C\x69\x61\x73":_0xb2f9[767],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":32,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[243],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[768],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":32,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[714],"\x61\x6C\x69\x61\x73":_0xb2f9[769],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[770],"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":34,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[723],"\x61\x6C\x69\x61\x73":_0xb2f9[750],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":34,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[751],"\x61\x6C\x69\x61\x73":_0xb2f9[752],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":34,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[755],"\x61\x6C\x69\x61\x73":_0xb2f9[756],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":34,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[759],"\x61\x6C\x69\x61\x73":_0xb2f9[760],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":34,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[763],"\x61\x6C\x69\x61\x73":_0xb2f9[764],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":34,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[671],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[672],"\x61\x6C\x69\x61\x73":_0xb2f9[673],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[676],"\x61\x6C\x69\x61\x73":_0xb2f9[148],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[677],"\x61\x6C\x69\x61\x73":_0xb2f9[771],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[679],"\x61\x6C\x69\x61\x73":_0xb2f9[772],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[681],"\x61\x6C\x69\x61\x73":_0xb2f9[773],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[683],"\x61\x6C\x69\x61\x73":_0xb2f9[774],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[689],"\x61\x6C\x69\x61\x73":_0xb2f9[333],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[691],"\x61\x6C\x69\x61\x73":_0xb2f9[775],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[693],"\x61\x6C\x69\x61\x73":_0xb2f9[776],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[777],"\x61\x6C\x69\x61\x73":_0xb2f9[778],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[95],"\x61\x6C\x69\x61\x73":_0xb2f9[695],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[699],"\x61\x6C\x69\x61\x73":_0xb2f9[779],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[780],"\x61\x6C\x69\x61\x73":_0xb2f9[781],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":35,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[676],"\x61\x6C\x69\x61\x73":_0xb2f9[148],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":36,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[681],"\x61\x6C\x69\x61\x73":_0xb2f9[782],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":36,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[689],"\x61\x6C\x69\x61\x73":_0xb2f9[333],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":36,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[699],"\x61\x6C\x69\x61\x73":_0xb2f9[783],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":36,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[784],"\x61\x6C\x69\x61\x73":_0xb2f9[785],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":36,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[780],"\x61\x6C\x69\x61\x73":_0xb2f9[786],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":36,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[787],"\x61\x6C\x69\x61\x73":_0xb2f9[788],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":36,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[693],"\x61\x6C\x69\x61\x73":_0xb2f9[767],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":37,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[689],"\x61\x6C\x69\x61\x73":_0xb2f9[243],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":37,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[780],"\x61\x6C\x69\x61\x73":_0xb2f9[786],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":37,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[676],"\x61\x6C\x69\x61\x73":_0xb2f9[148],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":38,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[681],"\x61\x6C\x69\x61\x73":_0xb2f9[789],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":38,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[790],"\x61\x6C\x69\x61\x73":_0xb2f9[791],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":38,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[792],"\x61\x6C\x69\x61\x73":_0xb2f9[793],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":38,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[794],"\x61\x6C\x69\x61\x73":_0xb2f9[795],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":38,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[796],"\x61\x6C\x69\x61\x73":_0xb2f9[797],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":38,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[798],"\x61\x6C\x69\x61\x73":_0xb2f9[799],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":38,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[800],"\x61\x6C\x69\x61\x73":_0xb2f9[801],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":38,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[802],"\x61\x6C\x69\x61\x73":_0xb2f9[803],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":38,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[804],"\x61\x6C\x69\x61\x73":_0xb2f9[805],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":38,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[806],"\x61\x6C\x69\x61\x73":_0xb2f9[807],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[808],"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":40,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[809],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[810],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":40,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[685],"\x61\x6C\x69\x61\x73":_0xb2f9[729],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":40,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[681],"\x61\x6C\x69\x61\x73":_0xb2f9[782],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":40,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[689],"\x61\x6C\x69\x61\x73":_0xb2f9[333],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":40,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[696],"\x61\x6C\x69\x61\x73":_0xb2f9[741],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":40,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[811],"\x61\x6C\x69\x61\x73":_0xb2f9[736],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":40,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[784],"\x61\x6C\x69\x61\x73":_0xb2f9[785],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":40,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[806],"\x61\x6C\x69\x61\x73":_0xb2f9[769],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[770],"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":41,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[809],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[810],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":41,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[685],"\x61\x6C\x69\x61\x73":_0xb2f9[348],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":41,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[812],"\x61\x6C\x69\x61\x73":_0xb2f9[813],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":41,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[681],"\x61\x6C\x69\x61\x73":_0xb2f9[782],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":41,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[689],"\x61\x6C\x69\x61\x73":_0xb2f9[333],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":41,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[696],"\x61\x6C\x69\x61\x73":_0xb2f9[741],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":41,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[811],"\x61\x6C\x69\x61\x73":_0xb2f9[736],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":41,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[784],"\x61\x6C\x69\x61\x73":_0xb2f9[785],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":41,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[814],"\x61\x6C\x69\x61\x73":_0xb2f9[815],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":46,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[809],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[810],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":46,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[685],"\x61\x6C\x69\x61\x73":_0xb2f9[348],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":46,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[812],"\x61\x6C\x69\x61\x73":_0xb2f9[813],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":46,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[681],"\x61\x6C\x69\x61\x73":_0xb2f9[782],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":46,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[689],"\x61\x6C\x69\x61\x73":_0xb2f9[333],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":46,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[696],"\x61\x6C\x69\x61\x73":_0xb2f9[741],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":46,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[811],"\x61\x6C\x69\x61\x73":_0xb2f9[736],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":46,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[784],"\x61\x6C\x69\x61\x73":_0xb2f9[785],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":46,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[816],"\x61\x6C\x69\x61\x73":_0xb2f9[817],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":47,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[809],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[810],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":47,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[685],"\x61\x6C\x69\x61\x73":_0xb2f9[348],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":47,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[812],"\x61\x6C\x69\x61\x73":_0xb2f9[813],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":47,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[681],"\x61\x6C\x69\x61\x73":_0xb2f9[782],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":_0xb2f9[818],"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":47,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[689],"\x61\x6C\x69\x61\x73":_0xb2f9[333],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":47,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[696],"\x61\x6C\x69\x61\x73":_0xb2f9[741],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":47,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[811],"\x61\x6C\x69\x61\x73":_0xb2f9[736],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":47,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[784],"\x61\x6C\x69\x61\x73":_0xb2f9[785],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":47,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[676],"\x61\x6C\x69\x61\x73":_0xb2f9[148],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":49,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[809],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[810],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":49,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[685],"\x61\x6C\x69\x61\x73":_0xb2f9[348],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":49,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[812],"\x61\x6C\x69\x61\x73":_0xb2f9[813],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":49,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[681],"\x61\x6C\x69\x61\x73":_0xb2f9[782],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":49,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[689],"\x61\x6C\x69\x61\x73":_0xb2f9[333],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":49,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[696],"\x61\x6C\x69\x61\x73":_0xb2f9[741],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":49,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[811],"\x61\x6C\x69\x61\x73":_0xb2f9[736],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":49,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[784],"\x61\x6C\x69\x61\x73":_0xb2f9[785],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":49,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[819],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":50,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[820],"\x61\x6C\x69\x61\x73":_0xb2f9[821],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":50,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[822],"\x61\x6C\x69\x61\x73":_0xb2f9[823],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":50,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[824],"\x61\x6C\x69\x61\x73":_0xb2f9[825],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":50,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[826],"\x61\x6C\x69\x61\x73":_0xb2f9[827],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":50,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[828],"\x61\x6C\x69\x61\x73":_0xb2f9[703],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":50,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[829],"\x61\x6C\x69\x61\x73":_0xb2f9[830],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":50,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[831],"\x61\x6C\x69\x61\x73":_0xb2f9[832],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":50,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[833],"\x61\x6C\x69\x61\x73":_0xb2f9[834],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":50,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[835],"\x61\x6C\x69\x61\x73":_0xb2f9[704],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":50,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[836],"\x61\x6C\x69\x61\x73":_0xb2f9[702],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":50,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[837],"\x61\x6C\x69\x61\x73":_0xb2f9[706],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":50,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[838],"\x61\x6C\x69\x61\x73":_0xb2f9[839],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":50,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[840],"\x61\x6C\x69\x61\x73":_0xb2f9[841],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":50,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[819],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":51,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[842],"\x61\x6C\x69\x61\x73":_0xb2f9[843],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":51,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[824],"\x61\x6C\x69\x61\x73":_0xb2f9[825],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":51,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[826],"\x61\x6C\x69\x61\x73":_0xb2f9[827],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":51,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[828],"\x61\x6C\x69\x61\x73":_0xb2f9[844],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":51,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[835],"\x61\x6C\x69\x61\x73":_0xb2f9[704],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":51,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[836],"\x61\x6C\x69\x61\x73":_0xb2f9[702],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":51,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[837],"\x61\x6C\x69\x61\x73":_0xb2f9[706],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":51,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[838],"\x61\x6C\x69\x61\x73":_0xb2f9[839],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":51,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[845],"\x61\x6C\x69\x61\x73":_0xb2f9[846],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":51,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[840],"\x61\x6C\x69\x61\x73":_0xb2f9[841],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":51,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[822],"\x61\x6C\x69\x61\x73":_0xb2f9[823],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":51,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[820],"\x61\x6C\x69\x61\x73":_0xb2f9[821],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":52,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[243],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[768],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":52,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[838],"\x61\x6C\x69\x61\x73":_0xb2f9[847],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":52,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[848],"\x61\x6C\x69\x61\x73":_0xb2f9[357],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":52,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[840],"\x61\x6C\x69\x61\x73":_0xb2f9[841],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":53,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[243],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[768],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":53,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[838],"\x61\x6C\x69\x61\x73":_0xb2f9[847],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":53,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[848],"\x61\x6C\x69\x61\x73":_0xb2f9[357],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":53,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[849],"\x61\x6C\x69\x61\x73":_0xb2f9[711],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":54,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[243],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[768],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":54,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[838],"\x61\x6C\x69\x61\x73":_0xb2f9[847],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":54,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[848],"\x61\x6C\x69\x61\x73":_0xb2f9[357],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":54,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[835],"\x61\x6C\x69\x61\x73":_0xb2f9[807],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[808],"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":55,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[243],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[768],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":55,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[838],"\x61\x6C\x69\x61\x73":_0xb2f9[847],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":55,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[848],"\x61\x6C\x69\x61\x73":_0xb2f9[357],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":55,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[710],"\x61\x6C\x69\x61\x73":_0xb2f9[711],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":_0xb2f9[818],"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":57,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[850],"\x61\x6C\x69\x61\x73":_0xb2f9[839],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":57,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[710],"\x61\x6C\x69\x61\x73":_0xb2f9[711],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":61,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[851],"\x61\x6C\x69\x61\x73":_0xb2f9[601],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":61,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[852],"\x61\x6C\x69\x61\x73":_0xb2f9[853],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":61,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[854],"\x61\x6C\x69\x61\x73":_0xb2f9[614],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":61,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[710],"\x61\x6C\x69\x61\x73":_0xb2f9[711],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":62,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[855],"\x61\x6C\x69\x61\x73":_0xb2f9[856],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":62,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[857],"\x61\x6C\x69\x61\x73":_0xb2f9[858],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":62,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[859],"\x61\x6C\x69\x61\x73":_0xb2f9[85],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":62,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[838],"\x61\x6C\x69\x61\x73":_0xb2f9[839],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":62,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[710],"\x61\x6C\x69\x61\x73":_0xb2f9[711],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":63,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[860],"\x61\x6C\x69\x61\x73":_0xb2f9[861],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":63,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[820],"\x61\x6C\x69\x61\x73":_0xb2f9[862],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":63,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[859],"\x61\x6C\x69\x61\x73":_0xb2f9[821],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":63,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[855],"\x61\x6C\x69\x61\x73":_0xb2f9[856],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":63,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[857],"\x61\x6C\x69\x61\x73":_0xb2f9[858],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":63,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[863],"\x61\x6C\x69\x61\x73":_0xb2f9[839],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":63,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[710],"\x61\x6C\x69\x61\x73":_0xb2f9[711],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":_0xb2f9[818],"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":64,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[859],"\x61\x6C\x69\x61\x73":_0xb2f9[864],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":_0xb2f9[818],"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":64,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[850],"\x61\x6C\x69\x61\x73":_0xb2f9[839],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":64,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[865],"\x61\x6C\x69\x61\x73":_0xb2f9[866],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":65,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[671],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":65,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[828],"\x61\x6C\x69\x61\x73":_0xb2f9[844],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":65,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[867],"\x61\x6C\x69\x61\x73":_0xb2f9[695],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":65,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[868],"\x61\x6C\x69\x61\x73":_0xb2f9[869],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":_0xb2f9[818],"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":65,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[870],"\x61\x6C\x69\x61\x73":_0xb2f9[871],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":65,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[872],"\x61\x6C\x69\x61\x73":_0xb2f9[839],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":65,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[873],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":67,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[865],"\x61\x6C\x69\x61\x73":_0xb2f9[866],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":67,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[828],"\x61\x6C\x69\x61\x73":_0xb2f9[874],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":67,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[875],"\x61\x6C\x69\x61\x73":_0xb2f9[876],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":67,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[877],"\x61\x6C\x69\x61\x73":_0xb2f9[878],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":67,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[879],"\x61\x6C\x69\x61\x73":_0xb2f9[880],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":68,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[881],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[810],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":68,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[882],"\x61\x6C\x69\x61\x73":_0xb2f9[883],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":68,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[884],"\x61\x6C\x69\x61\x73":_0xb2f9[885],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":68,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[886],"\x61\x6C\x69\x61\x73":_0xb2f9[887],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":68,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[888],"\x61\x6C\x69\x61\x73":_0xb2f9[889],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":68,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[890],"\x61\x6C\x69\x61\x73":_0xb2f9[891],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":68,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[892],"\x61\x6C\x69\x61\x73":_0xb2f9[711],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":69,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[893],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[768],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":69,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[894],"\x61\x6C\x69\x61\x73":_0xb2f9[895],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":69,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[894],"\x61\x6C\x69\x61\x73":_0xb2f9[896],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[897],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":69,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[676],"\x61\x6C\x69\x61\x73":_0xb2f9[148],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":70,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[898],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[768],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":70,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[894],"\x61\x6C\x69\x61\x73":_0xb2f9[895],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":70,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[894],"\x61\x6C\x69\x61\x73":_0xb2f9[896],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[897],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":70,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[899],"\x61\x6C\x69\x61\x73":_0xb2f9[900],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":72,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[901],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[810],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":72,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[902],"\x61\x6C\x69\x61\x73":_0xb2f9[729],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":72,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[903],"\x61\x6C\x69\x61\x73":_0xb2f9[782],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":72,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[904],"\x61\x6C\x69\x61\x73":_0xb2f9[905],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":72,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[906],"\x61\x6C\x69\x61\x73":_0xb2f9[907],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":72,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[908],"\x61\x6C\x69\x61\x73":_0xb2f9[909],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":72,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[671],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":73,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[899],"\x61\x6C\x69\x61\x73":_0xb2f9[910],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":73,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[911],"\x61\x6C\x69\x61\x73":_0xb2f9[912],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":73,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[913],"\x61\x6C\x69\x61\x73":_0xb2f9[914],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":73,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[710],"\x61\x6C\x69\x61\x73":_0xb2f9[915],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":73,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[916],"\x61\x6C\x69\x61\x73":_0xb2f9[917],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":73,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[868],"\x61\x6C\x69\x61\x73":_0xb2f9[771],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":73,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[870],"\x61\x6C\x69\x61\x73":_0xb2f9[772],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":73,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[918],"\x61\x6C\x69\x61\x73":_0xb2f9[688],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":73,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[902],"\x61\x6C\x69\x61\x73":_0xb2f9[729],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":73,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[919],"\x61\x6C\x69\x61\x73":_0xb2f9[920],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":73,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[903],"\x61\x6C\x69\x61\x73":_0xb2f9[782],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":73,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[904],"\x61\x6C\x69\x61\x73":_0xb2f9[905],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":73,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[710],"\x61\x6C\x69\x61\x73":_0xb2f9[711],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":74,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[902],"\x61\x6C\x69\x61\x73":_0xb2f9[921],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":74,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[906],"\x61\x6C\x69\x61\x73":_0xb2f9[907],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":74,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[908],"\x61\x6C\x69\x61\x73":_0xb2f9[909],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":74,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[922],"\x61\x6C\x69\x61\x73":_0xb2f9[923],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":74,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[924],"\x61\x6C\x69\x61\x73":_0xb2f9[925],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":74,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[916],"\x61\x6C\x69\x61\x73":_0xb2f9[148],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":75,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[901],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[768],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":75,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[902],"\x61\x6C\x69\x61\x73":_0xb2f9[729],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":75,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[903],"\x61\x6C\x69\x61\x73":_0xb2f9[782],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":75,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[904],"\x61\x6C\x69\x61\x73":_0xb2f9[905],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":75,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[906],"\x61\x6C\x69\x61\x73":_0xb2f9[926],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":75,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[908],"\x61\x6C\x69\x61\x73":_0xb2f9[909],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":75,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[868],"\x61\x6C\x69\x61\x73":_0xb2f9[807],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[808],"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":76,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[901],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[810],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":76,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[902],"\x61\x6C\x69\x61\x73":_0xb2f9[729],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":76,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[927],"\x61\x6C\x69\x61\x73":_0xb2f9[928],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":76,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[906],"\x61\x6C\x69\x61\x73":_0xb2f9[907],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":76,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[908],"\x61\x6C\x69\x61\x73":_0xb2f9[909],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":76,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[916],"\x61\x6C\x69\x61\x73":_0xb2f9[148],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":77,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[881],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[768],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":77,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[929],"\x61\x6C\x69\x61\x73":_0xb2f9[883],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":77,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[904],"\x61\x6C\x69\x61\x73":_0xb2f9[905],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":77,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[930],"\x61\x6C\x69\x61\x73":_0xb2f9[885],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":77,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[931],"\x61\x6C\x69\x61\x73":_0xb2f9[932],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":77,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[710],"\x61\x6C\x69\x61\x73":_0xb2f9[710],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":79,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[933],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[768],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":79,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[934],"\x61\x6C\x69\x61\x73":_0xb2f9[935],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":79,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[936],"\x61\x6C\x69\x61\x73":_0xb2f9[711],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":79,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[937],"\x61\x6C\x69\x61\x73":_0xb2f9[148],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":79,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[938],"\x61\x6C\x69\x61\x73":_0xb2f9[807],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[808],"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":81,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[939],"\x61\x6C\x69\x61\x73":_0xb2f9[881],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":81,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[940],"\x61\x6C\x69\x61\x73":_0xb2f9[941],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[730],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":81,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[942],"\x61\x6C\x69\x61\x73":_0xb2f9[942],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":82,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[943],"\x61\x6C\x69\x61\x73":_0xb2f9[943],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":82,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[944],"\x61\x6C\x69\x61\x73":_0xb2f9[944],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":82,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[938],"\x61\x6C\x69\x61\x73":_0xb2f9[938],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":82,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[945],"\x61\x6C\x69\x61\x73":_0xb2f9[945],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":82,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[946],"\x61\x6C\x69\x61\x73":_0xb2f9[946],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":82,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[947],"\x61\x6C\x69\x61\x73":_0xb2f9[947],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":82,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[948],"\x61\x6C\x69\x61\x73":_0xb2f9[948],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":82,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[949],"\x61\x6C\x69\x61\x73":_0xb2f9[949],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":82,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[524],"\x61\x6C\x69\x61\x73":_0xb2f9[524],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":82,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[840],"\x61\x6C\x69\x61\x73":_0xb2f9[840],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":82,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[950],"\x61\x6C\x69\x61\x73":_0xb2f9[950],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":82,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[840],"\x61\x6C\x69\x61\x73":_0xb2f9[840],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":83,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[951],"\x61\x6C\x69\x61\x73":_0xb2f9[483],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":83,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[947],"\x61\x6C\x69\x61\x73":_0xb2f9[947],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[808],"\x67\x72\x6F\x75\x70\x42\x79":1,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":84,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x61\x6C\x69\x61\x73":_0xb2f9[952],"\x66\x69\x65\x6C\x64":_0xb2f9[9],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":_0xb2f9[768],"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":84,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[953],"\x61\x6C\x69\x61\x73":_0xb2f9[749],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":_0xb2f9[698],"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":84,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":1},{"\x66\x69\x65\x6C\x64":_0xb2f9[938],"\x61\x6C\x69\x61\x73":_0xb2f9[954],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":85,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x61\x6C\x69\x61\x73":_0xb2f9[955],"\x66\x69\x65\x6C\x64":_0xb2f9[9],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":85,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[956],"\x61\x6C\x69\x61\x73":_0xb2f9[957],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":85,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[958],"\x61\x6C\x69\x61\x73":_0xb2f9[959],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":85,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[943],"\x61\x6C\x69\x61\x73":_0xb2f9[960],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":85,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[938],"\x61\x6C\x69\x61\x73":_0xb2f9[954],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":90,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[670],"\x61\x6C\x69\x61\x73":_0xb2f9[819],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":90,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[449],"\x61\x6C\x69\x61\x73":_0xb2f9[212],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":90,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[676],"\x61\x6C\x69\x61\x73":_0xb2f9[148],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":90,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[672],"\x61\x6C\x69\x61\x73":_0xb2f9[703],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":90,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[710],"\x61\x6C\x69\x61\x73":_0xb2f9[961],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":90,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[962],"\x61\x6C\x69\x61\x73":_0xb2f9[962],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":90,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0},{"\x66\x69\x65\x6C\x64":_0xb2f9[963],"\x61\x6C\x69\x61\x73":_0xb2f9[964],"\x66\x75\x6E\x63\x74\x69\x6F\x6E":null,"\x66\x6F\x72\x6D\x61\x74":null,"\x67\x72\x6F\x75\x70\x42\x79":0,"\x6F\x72\x64\x65\x72\x42\x79":null,"\x43\x75\x73\x74\x6F\x6D\x52\x65\x70\x6F\x72\x74\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x44\x65\x66\x61\x75\x6C\x74\x52\x65\x70\x6F\x72\x74\x49\x64":90,"\x4D\x65\x74\x72\x69\x63\x49\x64":null,"\x63\x75\x73\x74\x6F\x6D":0}];models[_0xb2f9[971]][_0xb2f9[371]]({where:{id:1}})[_0xb2f9[11]](function(){return models[_0xb2f9[971]][_0xb2f9[44]]({id:1,tree:_0xb2f9[972]})})[_0xb2f9[11]](function(){return models[_0xb2f9[971]][_0xb2f9[970]]({where:{id:2},defaults:{id:2,tree:_0xb2f9[969]}})})[_0xb2f9[11]](function(){return models[_0xb2f9[967]][_0xb2f9[371]]({where:{DefaultReportId:{$ne:null}}})})[_0xb2f9[11]](function(){return models[_0xb2f9[968]][_0xb2f9[371]]({where:{id:{$ne:null}}})})[_0xb2f9[11]](function(){return models[_0xb2f9[968]][_0xb2f9[22]](_0x4f3fx29)})[_0xb2f9[11]](function(){return models[_0xb2f9[967]][_0xb2f9[22]](_0x4f3fx2a,{ignoreDuplicates:true,individualHooks:true})})[_0xb2f9[11]](function(){console[_0xb2f9[8]](_0xb2f9[966])})[_0xb2f9[6]](function(_0x4f3fxc){console[_0xb2f9[8]](_0xb2f9[965],_0x4f3fxc)})})[_0xb2f9[6]](function(_0x4f3fxc){console[_0xb2f9[5]](_0x4f3fxc)}) \ No newline at end of file +/** + * Populate DB with sample data on server start + * to disable, edit config/environment/index.js, and set `seedDB: false` + */ + +'use strict'; + +var _ = require('lodash'); +var util = require('util'); + +var models = require('../models'); +var sequelize = require('../models').sequelize; + +var _agents = []; +var _voiceQueues = []; +var _mailQueues = []; +var _chatQueues = []; +var _miller, _doe; +var _setting; + + +return models.Setting + .findOrCreate({ + where: { + id: 1 + }, + defaults: { + id: 1, + min_internal: 1000, + min_mailbox: 1000, + agi_port: 4573, + automation_timeout: 3600, + soundPath: '/var/opt/motion/server/files/sounds/converted' + } + }) + .spread(function(setting) { + console.log(util.format('Populating Setting - DONE ')); + return setting; + }) + .then(function(setting) { + _setting = setting + if (_setting.firstSetup) { + models.User + .bulkCreate([{ + role: 'admin', + fullname: 'Administrator', + email: 'admin@admin.com', + name: 'admin', + password: 'password', + defaultuser: 'admin', + internal: 1000 + }], { + ignoreDuplicates: true, + individualHooks: true + }) + .then(function(users) { + console.log(util.format('Populating Users: %s - DONE ', _.map(users, 'name').join())); + return models.Team + .create({ + name: "Default Team", + description: "Default Team", + defaultEntry: true, + Users: [{ + role: 'agent', + fullname: 'John Doe', + email: 'john.doe@xcally.com', + name: 'john.doe', + password: 'shuttle55', + defaultuser: 'john.doe', + internal: 1001 + }, { + role: 'agent', + fullname: 'Jane Miller', + email: 'jane.miller@xcally.com', + name: 'jane.miller', + password: 'shuttle55', + defaultuser: 'jane.miller', + internal: 1002 + }] + }, { + include: [{ + model: models.User + }] + }); + }) + .then(function(team) { + _agents = team.Users; + + console.log(util.format('Populating Agents: %s - DONE ', _.map(team.Users, 'name').join())); + console.log(util.format('Populating Teams: %s - DONE ', team.name)); + + return models.VoiceQueue + .bulkCreate([{ + name: 'Sales', + musiconhold: 'default', + strategy: 'rrmemory' + }, { + name: 'Support', + musiconhold: 'default', + strategy: 'ringall' + }], { + ignoreDuplicates: true, + individualHooks: true + }); + }) + .then(function(voiceQueues) { + console.log(util.format('Populating Voice Queues: %s - DONE ', _.map(voiceQueues, 'name').join())); + _voiceQueues = voiceQueues; + + _miller = _.find(_agents, { + name: 'jane.miller' + }); + _doe = _.find(_agents, { + name: 'john.doe' + }); + + return _voiceQueues[0] + .addUser(_miller.id); + }) + .then(function() { + return _voiceQueues[1] + .addUsers([_miller.id, _doe.id]); + }) + .then(function() { + return models.MailQueue + .bulkCreate([{ + name: 'Sales', + timeout: 5, + strategy: 'rrmemory' + }, { + name: 'Support', + timeout: 5, + strategy: 'beepall' + }], { + ignoreDuplicates: true, + individualHooks: true + }); + }) + .then(function(mailQueues) { + console.log(util.format('Populating Mail Queues: %s - DONE ', _.map(mailQueues, 'name').join())); + _mailQueues = mailQueues; + + return _mailQueues[0] + .addUser(_miller.id); + }) + .then(function() { + return _mailQueues[1] + .addUsers([_miller.id, _doe.id]); + }) + .then(function() { + return models.ChatQueue + .bulkCreate([{ + name: 'Sales', + timeout: 5, + strategy: 'rrmemory' + }, { + name: 'Support', + timeout: 5, + strategy: 'beepall' + }], { + ignoreDuplicates: true, + individualHooks: true + }); + }) + .then(function(chatQueues) { + console.log(util.format('Populating Mail Queues: %s - DONE ', _.map(chatQueues, 'name').join())); + _chatQueues = chatQueues; + + return _chatQueues[0] + .addUser(_miller.id); + }) + .then(function() { + return _chatQueues[1] + .addUsers([_miller.id, _doe.id]); + }) + .catch(function(err) { + console.log(err); + }); + + models.ChanSpy + .bulkCreate([{ + name: 'ChanSpy1', + prefix: 'spy1', + description: 'The supervisor can listen and talk to the agent. The customer will not listen to the supervisor voice.', + options: 'bw' + }, { + name: 'ChanSpy2', + prefix: 'spy2', + description: 'The supervisor can only listen the agent channel (neither the agent nor the customer will listen to the supervisor voice.', + options: 'bo' + }, { + name: 'ChanSpy3', + prefix: 'spy3', + description: 'The supervisor can listen and talk both to the agent and to the customer, like a pure 3 way conference room.', + options: 'bW' + }], { + ignoreDuplicates: true, + individualHooks: true + }) + .then(function(chanSpys) { + console.log(util.format('Populating ChanSpy: %s - DONE ', _.map(chanSpys, 'name').join())); + }); + + models.List + .create({ + name: 'System List', + description: 'Default List', + defaultEntry: true + }) + .then(function(list) { + console.log(util.format('Populating CM List: %s - DONE ', list.name)); + }); + + models.VoiceMusicOnHold + .create({ + name: 'default', + directory: '/var/lib/asterisk/moh/', + mode: 'files', + sort: 'random', + format: 'wav', + defaultEntry: true + }) + .then(function(voiceMusicOnHold) { + console.log(util.format('Populating Voice Music On Hold: %s - DONE ', voiceMusicOnHold.name)); + }); + + models.Variable + .bulkCreate([{ + name: 'CHOICE' + }, { + description: 'Order number', + name: 'ORDERNUM' + }, { + description: 'Data Base Query Result', + name: 'DBRESULT' + }, { + name: 'RATE' + }], { + ignoreDuplicates: true, + individualHooks: true + }) + .then(function(variables) { + console.log(util.format('Populating Variables: %s - DONE ', _.map(variables, 'name').join())); + }); + + models.Pause + .bulkCreate([{ + name: 'BACKOFFICE' + }, { + name: 'AFTERCALL' + }], { + ignoreDuplicates: true, + individualHooks: true + }) + .then(function(pauses) { + console.log(util.format('Populating Pauses: %s - DONE ', _.map(pauses, 'name').join())); + }); + + models.Trunk + .create({ + name: 'DemoTrunk', + context: 'from-voip-provider', + callingpres: 'ALLOWED_NOT_SCREENED', + deny: '0.0.0.0/0.0.0.0', + permit: '0.0.0.0/0.0.0.0', + secret: '55xcally55' + }) + .then(function(trunk) { + console.log(util.format('Populating Trunk: %s - DONE ', trunk.name)); + }); + + models.VoiceExtension + .create({ + context: 'from-sip', + exten: '_600', + priority: '1', + app: 'NoOp', + appdata: 'Internal Call', + type: 'internal', + description: 'Echo Test', + Applications: [{ + context: 'from-sip', + exten: '_600', + priority: '2', + app: 'Set', + appdata: 'CDR(type)=internal', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '3', + app: 'GotoIfTime', + appdata: '*,*,*,*?from-sip,${EXTEN},4:from-sip,${EXTEN},9', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '4', + app: 'NoOP', + appdata: 'Skipped CallerID Set', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '5', + app: 'NoOP', + appdata: 'Skipped MixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '6', + app: 'NoOP', + appdata: 'Skipped Progress', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '7', + app: 'Playback', + appdata: 'demo-echotest', + type: 'internal', + interval: '*,*,*,*', + isApp: true + }, { + context: 'from-sip', + exten: '_600', + priority: '8', + app: 'NoOP', + appdata: 'Skipped StopMixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '9', + app: 'NoOP', + appdata: 'Playback Application End', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '10', + app: 'GotoIfTime', + appdata: '*,*,*,*?from-sip,${EXTEN},11:from-sip,${EXTEN},16', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '11', + app: 'NoOP', + appdata: 'Skipped CallerID Set', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '12', + app: 'NoOP', + appdata: 'Skipped MixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '13', + app: 'NoOP', + appdata: 'Skipped Progress', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '14', + app: 'Echo', + appdata: '', + type: 'internal', + interval: '*,*,*,*', + isApp: true + }, { + context: 'from-sip', + exten: '_600', + priority: '15', + app: 'NoOP', + appdata: 'Skipped StopMixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '16', + app: 'NoOP', + appdata: 'Echo Application End', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '17', + app: 'GotoIfTime', + appdata: '*,*,*,*?from-sip,${EXTEN},18:from-sip,${EXTEN},23', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '18', + app: 'NoOP', + appdata: 'Skipped CallerID Set', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '19', + app: 'NoOP', + appdata: 'Skipped MixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '20', + app: 'NoOP', + appdata: 'Skipped Progress', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '21', + app: 'Playback', + appdata: 'demo-echotest', + type: 'internal', + interval: '*,*,*,*', + isApp: true + }, { + context: 'from-sip', + exten: '_600', + priority: '22', + app: 'NoOP', + appdata: 'Skipped StopMixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_600', + priority: '23', + app: 'NoOP', + appdata: 'Playback Application End', + type: 'internal' + }] + }, { + include: [{ + model: models.VoiceExtension, + as: 'Applications' + }] + }) + .then(function(voiceExtension) { + console.log(util.format('Populating Voice Extension: %s %s - DONE ', voiceExtension.context, voiceExtension.exten)); + }); + + models.VoiceExtension + .create({ + context: 'from-sip', + exten: '_6000', + priority: '1', + app: 'NoOp', + appdata: 'Internal Call', + type: 'internal', + description: 'Support Queue', + Applications: [{ + context: 'from-sip', + exten: '_6000', + priority: '2', + app: 'Set', + appdata: 'CDR(type)=internal', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6000', + priority: '3', + app: 'GotoIfTime', + appdata: '*,*,*,*?from-sip,${EXTEN},4:from-sip,${EXTEN},9', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6000', + priority: '4', + app: 'NoOP', + appdata: 'Skipped CallerID Set', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6000', + priority: '5', + app: 'NoOP', + appdata: 'Skipped MixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6000', + priority: '6', + app: 'Progress', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6000', + priority: '7', + app: 'Queue', + appdata: 'Support,,,,', + type: 'internal', + interval: '*,*,*,*', + isApp: true + }, { + context: 'from-sip', + exten: '_6000', + priority: '8', + app: 'NoOP', + appdata: 'Skipped StopMixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6000', + priority: '9', + app: 'NoOP', + appdata: 'Queue Application End', + type: 'internal' + }] + }, { + include: [{ + model: models.VoiceExtension, + as: 'Applications' + }] + }) + .then(function(voiceExtension) { + console.log(util.format('Populating Voice Extension: %s %s - DONE ', voiceExtension.context, voiceExtension.exten)); + }); + + models.VoiceExtension + .create({ + context: 'from-sip', + exten: '_6666', + priority: '1', + app: 'NoOp', + appdata: 'Internal Call', + type: 'internal', + description: 'Support Queue', + Applications: [{ + context: 'from-sip', + exten: '_6666', + priority: '2', + app: 'Set', + appdata: 'CDR(type)=internal', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6666', + priority: '3', + app: 'GotoIfTime', + appdata: '*,*,*,*?from-sip,${EXTEN},4:from-sip,${EXTEN},9', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6666', + priority: '4', + app: 'NoOP', + appdata: 'Skipped CallerID Set', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6666', + priority: '5', + app: 'NoOP', + appdata: 'Skipped MixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6666', + priority: '6', + app: 'NoOP', + appdata: 'Skipped Progress', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6666', + priority: '7', + app: 'AGI', + appdata: 'agi://127.0.0.1/square,Auto Attendant', + type: 'internal', + interval: '*,*,*,*', + isApp: true + }, { + context: 'from-sip', + exten: '_6666', + priority: '8', + app: 'NoOP', + appdata: 'Skipped StopMixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6666', + priority: '9', + app: 'NoOP', + appdata: 'AGI Application End', + type: 'internal' + }] + }, { + include: [{ + model: models.VoiceExtension, + as: 'Applications' + }] + }) + .then(function(voiceExtension) { + console.log(util.format('Populating Voice Extension: %s %s - DONE ', voiceExtension.context, voiceExtension.exten)); + }); + + models.VoiceExtension + .create({ + context: 'from-sip', + exten: '_6667', + priority: '1', + app: 'NoOp', + appdata: 'Internal Call', + type: 'internal', + description: 'Support Queue', + Applications: [{ + context: 'from-sip', + exten: '_6667', + priority: '2', + app: 'Set', + appdata: 'CDR(type)=internal', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6667', + priority: '3', + app: 'GotoIfTime', + appdata: '*,*,*,*?from-sip,${EXTEN},4:from-sip,${EXTEN},9', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6667', + priority: '4', + app: 'NoOP', + appdata: 'Skipped CallerID Set', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6667', + priority: '5', + app: 'NoOP', + appdata: 'Skipped MixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6667', + priority: '6', + app: 'NoOP', + appdata: 'Skipped Progress', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6667', + priority: '7', + app: 'AGI', + appdata: 'agi://127.0.0.1/square,Orders', + type: 'internal', + interval: '*,*,*,*', + isApp: true + }, { + context: 'from-sip', + exten: '_6667', + priority: '8', + app: 'NoOP', + appdata: 'Skipped StopMixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6667', + priority: '9', + app: 'NoOP', + appdata: 'AGI Application End', + type: 'internal' + }] + }, { + include: [{ + model: models.VoiceExtension, + as: 'Applications' + }] + }) + .then(function(voiceExtension) { + console.log(util.format('Populating Voice Extension: %s %s - DONE ', voiceExtension.context, voiceExtension.exten)); + }); + + models.VoiceExtension + .create({ + context: 'from-sip', + exten: '_6668', + priority: '1', + app: 'NoOp', + appdata: 'Internal Call', + type: 'internal', + description: 'Support Queue', + Applications: [{ + context: 'from-sip', + exten: '_6668', + priority: '2', + app: 'Set', + appdata: 'CDR(type)=internal', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6668', + priority: '3', + app: 'GotoIfTime', + appdata: '*,*,*,*?from-sip,${EXTEN},4:from-sip,${EXTEN},9', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6668', + priority: '4', + app: 'NoOP', + appdata: 'Skipped CallerID Set', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6668', + priority: '5', + app: 'NoOP', + appdata: 'Skipped MixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6668', + priority: '6', + app: 'NoOP', + appdata: 'Skipped Progress', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6668', + priority: '7', + app: 'AGI', + appdata: 'agi://127.0.0.1/square,CSI', + type: 'internal', + interval: '*,*,*,*', + isApp: true + }, { + context: 'from-sip', + exten: '_6668', + priority: '8', + app: 'NoOP', + appdata: 'Skipped StopMixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6668', + priority: '9', + app: 'NoOP', + appdata: 'AGI Application End', + type: 'internal' + }] + }, { + include: [{ + model: models.VoiceExtension, + as: 'Applications' + }] + }) + .then(function(voiceExtension) { + console.log(util.format('Populating Voice Extension: %s %s - DONE ', voiceExtension.context, voiceExtension.exten)); + }); + + models.VoiceExtension + .create({ + context: 'from-sip', + exten: '_X.', + priority: '1', + app: 'NoOp', + appdata: 'Outbound Call', + type: 'outbound', + description: 'Outbound Call', + Applications: [{ + context: 'from-sip', + exten: '_X.', + priority: '2', + app: 'Set', + appdata: 'CDR(type)=outbound', + type: 'outbound' + }, { + context: 'from-sip', + exten: '_X.', + priority: '3', + app: 'Set', + appdata: 'CDR(tag)=--', + type: 'outbound' + }, { + context: 'from-sip', + exten: '_X.', + priority: '4', + app: 'GotoIfTime', + appdata: '*,*,*,*?from-sip,${EXTEN},5:from-sip,${EXTEN},10', + type: 'outbound' + }, { + context: 'from-sip', + exten: '_X.', + priority: '5', + app: 'NoOP', + appdata: 'Skipped CallerID Set', + type: 'outbound' + }, { + context: 'from-sip', + exten: '_X.', + priority: '6', + app: 'NoOP', + appdata: 'Skipped MixMonitor', + type: 'outbound' + }, { + context: 'from-sip', + exten: '_X.', + priority: '7', + app: 'NoOP', + appdata: 'Skipped Progress', + type: 'outbound' + }, { + context: 'from-sip', + exten: '_X.', + priority: '8', + app: 'Dial', + appdata: 'SIP/Demo Trunk/${EXTEN:0}', + type: 'outbound', + interval: '*,*,*,*', + isApp: true + }, { + context: 'from-sip', + exten: '_X.', + priority: '9', + app: 'NoOP', + appdata: 'Skipped StopMixMonitor', + type: 'outbound' + }, { + context: 'from-sip', + exten: '_X.', + priority: '10', + app: 'NoOP', + appdata: 'Dial Application End', + type: 'outbound' + }] + }, { + include: [{ + model: models.VoiceExtension, + as: 'Applications' + }] + }) + .then(function(voiceExtension) { + console.log(util.format('Populating Voice Extension: %s %s - DONE ', voiceExtension.context, voiceExtension.exten)); + }); + + models.VoiceExtension + .create({ + context: 'from-sip', + exten: '_6001', + priority: '1', + app: 'NoOp', + appdata: 'Internal Call', + type: 'internal', + description: 'Sales Queue', + Applications: [{ + context: 'from-sip', + exten: '_6001', + priority: '2', + app: 'Set', + appdata: 'CDR(type)=internal', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6001', + priority: '3', + app: 'GotoIfTime', + appdata: '*,*,*,*?from-sip,${EXTEN},4:from-sip,${EXTEN},9', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6001', + priority: '4', + app: 'NoOP', + appdata: 'Skipped CallerID Set', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6001', + priority: '5', + app: 'NoOP', + appdata: 'Skipped MixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6001', + priority: '6', + app: 'Progress', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6001', + priority: '7', + app: 'Queue', + appdata: 'Sales,,,,', + type: 'internal', + interval: '*,*,*,*', + isApp: true + }, { + context: 'from-sip', + exten: '_6001', + priority: '8', + app: 'NoOP', + appdata: 'Skipped StopMixMonitor', + type: 'internal' + }, { + context: 'from-sip', + exten: '_6001', + priority: '9', + app: 'NoOP', + appdata: 'Queue Application End', + type: 'internal' + }] + }, { + include: [{ + model: models.VoiceExtension, + as: 'Applications' + }] + }) + .then(function(voiceExtension) { + console.log(util.format('Populating Voice Extension: %s %s - DONE ', voiceExtension.context, voiceExtension.exten)); + }); + + models.SquareProject + .bulkCreate([{ + "name": "Auto Attendant", + "description": "IVR SAMPLE 1", + "preproduction": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ", + "production": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n " + }, { + "name": "CSI", + "description": "Customer Satisfaction Index example", + "preproduction": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ", + "production": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n " + }, { + "name": "Orders", + "description": "Order DB IVR Sample", + "preproduction": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ", + "production": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n " + }, { + "name": "Survey", + "description": "Survey IVR example", + "preproduction": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ", + "production": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n " + }]) + .then(function(projects) { + console.log(util.format('Populating Square Project: %s - DONE ', _.map(projects, 'name').join())); + }); + + models.SquareOdbc + .create({ + name: 'xcally', + dsn: 'DRIVER=MySQL;SERVER=127.0.0.1;UID=xcall;PWD=xC@LL1234;DATABASE=motion' + }) + .then(function(squareOdbc) { + console.log(util.format('Populating Square ODBC: %s - DONE ', squareOdbc.name)); + }); + + var newIntegrations = [{ + name: 'Zendesk', + version: '1.0.0', + author: 'XeniaLAB s.r.l.', + logo: 'assets/images/media/zendesk2.png', + state: 'zendesk', + description: 'Start using xCALLY - Zendesk integration: Auto-Generated Tickets, fully customizable comments, Custom Fields management, Tag support and Simple Setup', + link: 'https://wiki.xcallymotion.com/display/XMD/Zendesk+integration' + }, { + name: 'Salesforce', + version: '1.0.0', + author: 'XeniaLAB s.r.l.', + logo: 'assets/images/media/salesforce2.png', + state: 'salesforce', + description: 'Start using xCALLY - Salesforce integration: Auto-Generated Tasks, fully customizable comments, Custom Fields management and OpenCTI support', + link: 'https://wiki.xcallymotion.com/display/XMD/Salesforce+integration' + }, { + name: 'iFrame', + version: '1.0.0', + author: 'XeniaLAB s.r.l.', + logo: 'assets/images/media/iframe.png', + state: 'iframe', + description: 'Start using iFrame integration: enable your agents to view external pages (like your CRM) directly from Motion GUI', + link: 'https://wiki.xcallymotion.com/display/XMD/iFrame+Integration' + }]; + + models.Integration + .findAll() + .then(function(oldIntegrations) { + var bulkIntegrations = []; + oldIntegrations = _.map(oldIntegrations, 'state'); + newIntegrations.forEach(function(integration) { + if (_.includes(oldIntegrations, integration.state)) { + bulkIntegrations.push(models.Integration.update(integration, { + where: { + state: integration.state + } + })); + } else { + bulkIntegrations.push(models.Integration.create(integration)); + } + }); + return bulkIntegrations; + }) + .all() + .then(function() { + console.log('Finished populating integrations'); + }) + .catch(function(err) { + console.log('Error populating integrations:', err); + }); + + models.Company + .bulkCreate([{ + name: 'Acme', + type: 'ltd', + street: 'Acme Sreet', + }, { + name: 'Xenialab', + type: 'srl', + street: 'C.so Vittorio Emanuele II, 111', + postalCode: '10128', + country: 'Italy', + city: 'Turin', + vat: '09668910012', + website: 'http://www.xenialab.com/', + phone: '+39 011.19886500', + fax: '+39 011.0960070', + email: 'info@xcally.com' + }]) + .then(function(companies) { + console.log(util.format('Populating Companies: %s - DONE ', _.map(companies, 'name').join())); + }); + + models.Dashboard + .destroy({ + where: { + defaultEntry: true + } + }) + .then(function() { + return models.Dashboard + .bulkCreate([{ + name: 'Inbound Calls', + model: JSON.stringify({ + "title": "Voice Inbound", + "rows": [{ + "columns": [{ + "styleClass": "col-md-3", + "widgets": [{ + "type": "counter", + "config": { + "timeout": 5, + "color": "blue-madison", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "report": "report_queue_history", + "condition": "queuecallerabandon=0 AND queuecallercomplete=0 AND queuecallerexit=0 AND queuecallerleaveAt is not null", + "details": "Active Calls", + "select": "COUNT(*)" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1454772532346-10" + }, { + "type": "counter", + "config": { + "timeout": 5, + "color": "blue-madison", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "report": "report_queue_history", + "condition": "queuecallercomplete=1", + "details": "Total Answered", + "select": "COUNT(*)" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1456841031111-8" + }, { + "type": "counter", + "config": { + "timeout": 5, + "color": "blue-madison", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "ROUND(SUM(queuecallercomplete) / (SUM(queuecallercomplete)+SUM(queuecallerabandon)) *100,1)", + "report": "report_queue_history", + "condition": "1", + "details": "Answer Rate(%)" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457270124802-4" + }, { + "type": "counter", + "config": { + "timeout": 5, + "color": "blue-madison", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "SEC_TO_TIME(ROUND(AVG(talktime),0))", + "report": "report_agent_history", + "condition": "agentcomplete=1", + "details": "Avg Talk Time" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457270214766-5" + }, { + "type": "counter", + "config": { + "timeout": 5, + "color": "green-haze", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "ROUND(SUM(CASE WHEN queuecallercomplete=1 AND (UNIX_TIMESTAMP(queuecallerleaveAt)-UNIX_TIMESTAMP(queuecallerjoinAt) < 10) THEN 1 ELSE 0 END)/(SUM(queuecallercomplete) + SUM(CASE WHEN queuecallerabandon=1 AND (UNIX_TIMESTAMP(queuecallerleaveAt)-UNIX_TIMESTAMP(queuecallerjoinAt) > 10) THEN 1 ELSE 0 END)) *100,1)", + "report": "report_queue_history", + "condition": "1", + "details": "Service Level 10 (%)" + }, + "title": "SERVICE LEVEL", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457366965794-3" + }], + "cid": "1456841191661-21" + }, { + "styleClass": "col-md-3", + "widgets": [{ + "type": "counter", + "config": { + "timeout": 5, + "color": "red-intense", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "report": "report_queue_history", + "condition": "queuecallerleaveAt IS NULL", + "details": "Waiting Calls", + "select": "COUNT(*)" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1456839870449-5" + }, { + "type": "counter", + "config": { + "timeout": 5, + "color": "red-intense", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "report": "report_queue_history", + "condition": "queuecallerabandon=1", + "details": "Total Abandoned", + "select": "COUNT(*)" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1456841244931-27" + }, { + "type": "counter", + "config": { + "timeout": 5, + "color": "red-intense", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "ROUND(SUM(queuecallerabandon) / (SUM(queuecallercomplete)+SUM(queuecallerabandon)) *100,1)", + "report": "report_queue_history", + "condition": "1", + "details": "Abandon Rate (%)" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457269033923-3" + }, { + "type": "counter", + "config": { + "timeout": 5, + "color": "yellow-casablanca", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "SEC_TO_TIME(ROUND(AVG(holdtime),0))", + "report": "report_agent_history", + "condition": "agentcomplete=1", + "details": "Avg Answer Time" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457270230324-8" + }, { + "type": "counter", + "config": { + "timeout": 5, + "condition": "1", + "color": "green-haze", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "ROUND(SUM(CASE WHEN queuecallercomplete=1 AND (UNIX_TIMESTAMP(queuecallerleaveAt)-UNIX_TIMESTAMP(queuecallerjoinAt) < 15) THEN 1 ELSE 0 END)/(SUM(queuecallercomplete) + SUM(CASE WHEN queuecallerabandon=1 AND (UNIX_TIMESTAMP(queuecallerleaveAt)-UNIX_TIMESTAMP(queuecallerjoinAt) > 15) THEN 1 ELSE 0 END)) *100,1)", + "report": "report_queue_history", + "details": "Service Level 15 (%)" + }, + "title": "SERVICE LEVEL 15", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457952734590-1" + }], + "cid": "1456841191662-22" + }, { + "styleClass": "col-md-3", + "widgets": [{ + "type": "counter", + "config": { + "timeout": 5, + "color": "blue-madison", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "SEC_TO_TIME(MAX(UNIX_TIMESTAMP()-UNIX_TIMESTAMP(queuecallerleaveAt)))", + "report": "report_queue_history", + "condition": "queuecallerabandon=0 AND queuecallercomplete=0 AND queuecallerexit=0 AND queuecallerleaveAt is not null", + "details": "Longest Active Call" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457275258494-11" + }, { + "type": "counter", + "config": { + "timeout": 5, + "color": "yellow-casablanca", + "icon": "fa-bar-chart", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "COUNT(distinct uniqueid)", + "report": "report_queue_history", + "details": "Total Offered", + "condition": "1" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457269010616-1" + }, { + "type": "counter", + "config": { + "timeout": 5, + "color": "yellow-casablanca", + "icon": "fa-bar-chart", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "ROUND(COUNT(DISTINCT uniqueid)/HOUR(CURRENT_TIMESTAMP()),1)", + "report": "report_queue_history", + "condition": "1", + "details": "Avg Offered Per Hour" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457275263022-12" + }, { + "type": "counter", + "config": { + "timeout": 5, + "color": "red-intense", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "SEC_TO_TIME(ROUND(AVG(UNIX_TIMESTAMP(queuecallerabandonAt)- UNIX_TIMESTAMP(queuecallerJoinAt)),0))", + "report": "report_queue_history", + "condition": "queuecallerabandon=1", + "details": "Avg Abandon Time" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457270223870-7" + }, { + "type": "counter", + "config": { + "timeout": 5, + "condition": "1", + "color": "green-haze", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "ROUND(SUM(CASE WHEN queuecallercomplete=1 AND (UNIX_TIMESTAMP(queuecallerleaveAt)-UNIX_TIMESTAMP(queuecallerjoinAt) < 20) THEN 1 ELSE 0 END)/(SUM(queuecallercomplete) + SUM(CASE WHEN queuecallerabandon=1 AND (UNIX_TIMESTAMP(queuecallerleaveAt)-UNIX_TIMESTAMP(queuecallerjoinAt) > 20) THEN 1 ELSE 0 END)) *100,1)", + "report": "report_queue_history", + "details": "Service Level 20 (%)" + }, + "title": "SERVICE LEVEL 20", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457952751605-2" + }], + "cid": "1456841191663-23" + }, { + "styleClass": "col-md-3", + "widgets": [{ + "type": "counter", + "config": { + "timeout": 5, + "color": "red-intense", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "SEC_TO_TIME(MAX(UNIX_TIMESTAMP()-UNIX_TIMESTAMP(queuecallerjoinAt)))", + "report": "report_queue_history", + "condition": "queuecallerleaveAt IS NULL", + "details": "Oldest Waiting Call" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457275254061-10" + }, { + "type": "counter", + "config": { + "timeout": 5, + "color": "red-intense", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "COUNT(*)", + "condition": "queuecallerexit=1", + "report": "report_queue_history", + "details": "Unmanaged" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457269022062-2" + }, { + "type": "counter", + "config": { + "timeout": 5, + "color": "yellow-crusta", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "SEC_TO_TIME(ROUND(AVG(acwtime),0))", + "report": "report_agent_history", + "condition": "agentcomplete=1", + "details": "Avg ACW Time" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457270219355-6" + }], + "cid": "1456841191664-24" + }] + }], + "titleTemplateUrl": "../src/templates/dashboard-title.html", + "structure": "3-3-3-3" + }), + defaultEntry: true, + editable: true + }, { + name: 'Outbound Calls', + model: JSON.stringify({ + "title": "Outbound Calls", + "rows": [{ + "columns": [{ + "styleClass": "col-md-3", + "widgets": [{ + "type": "counter", + "config": { + "timeout": 5, + "color": "purple-plum", + "icon": "fa-globe", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "COUNT(*)", + "report": "report_call_history", + "condition": "type=\"outbound\"", + "details": "Manual Outbound" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457276458424-14" + }, { + "type": "counter", + "config": { + "timeout": 5, + "condition": "type=\"outbound\" AND disposition=\"ANSWERED\"", + "color": "green-haze", + "icon": "fa-globe", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "COUNT(*)", + "report": "report_call_history", + "details": "Answered" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457718579522-2" + }], + "cid": "1456841191661-21" + }, { + "styleClass": "col-md-3", + "widgets": [{ + "type": "counter", + "config": { + "timeout": 5, + "color": "purple-plum", + "icon": "fa-globe", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "SEC_TO_TIME(SUM(duration))", + "report": "report_call_history", + "condition": "type=\"outbound\"", + "details": "Global Duration" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457276453465-13" + }, { + "type": "counter", + "config": { + "timeout": 5, + "condition": "type=\"outbound\"", + "color": "yellow-casablanca", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "ROUND(SUM(IF(disposition=\"ANSWERED\",1,0))/COUNT(*)*100,1)", + "report": "report_call_history", + "details": "Answer Rate (%)" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457718591243-3" + }], + "cid": "1456841191662-22" + }, { + "styleClass": "col-md-3", + "widgets": [{ + "type": "counter", + "config": { + "timeout": 5, + "condition": "type=\"outbound\"", + "color": "blue-madison", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "SEC_TO_TIME(ROUND(AVG(duration),0))", + "report": "report_call_history", + "details": "Avg Duration" + }, + "title": "CALLS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457718482396-1" + }], + "cid": "1456841191663-23" + }, { + "styleClass": "col-md-3", + "widgets": [], + "cid": "1456841191664-24" + }] + }], + "titleTemplateUrl": "../src/templates/dashboard-title.html", + "structure": "3-3-3-3" + }), + defaultEntry: true, + editable: true + }, { + name: 'Agents Status', + model: JSON.stringify({ + "title": "Agents Status", + "rows": [{ + "columns": [{ + "styleClass": "col-md-3", + "widgets": [{ + "type": "counter", + "config": { + "timeout": 5, + "color": "purple-plum", + "icon": "fa-globe", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "COUNT(*)", + "report": "users", + "condition": "online=1 AND role=\"agent\"", + "details": "Logged" + }, + "title": "AGENTS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457275248521-9" + }], + "cid": "1456841191661-21" + }, { + "styleClass": "col-md-3", + "widgets": [{ + "type": "counter", + "config": { + "timeout": 5, + "color": "yellow-crusta", + "icon": "fa-globe", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "COUNT(*)", + "report": "users", + "condition": "online=1 AND role=\"agent\" AND (voicePause=1 OR chatPause=1 OR mailPause=1 OR faxPAuse=1) and pauseType !=\"ACW\"", + "details": "Paused" + }, + "title": "AGENTS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457276462846-15" + }], + "cid": "1456841191662-22" + }, { + "styleClass": "col-md-3", + "widgets": [{ + "type": "counter", + "config": { + "timeout": 5, + "color": "yellow-casablanca", + "icon": "fa-comments", + "link": "#", + "linkText": "VIEW MORE", + "reportTables": [{ + "name": "Agents", + "value": "report_agent" + }, { + "name": "Calls", + "value": "report_call" + }, { + "name": "Dials", + "value": "report_dial" + }, { + "name": "Queues", + "value": "report_queue" + }, { + "name": "Users", + "value": "users" + }, { + "name": "Chat Sessions", + "value": "report_chat_session" + }, { + "name": "Mail Sessions", + "value": "report_mail_session" + }], + "colors": [{ + "name": "Blue", + "value": "blue-madison" + }, { + "name": "Red", + "value": "red-intense" + }, { + "name": "Green", + "value": "green-haze" + }, { + "name": "Purple", + "value": "purple-plum" + }, { + "name": "Orange", + "value": "yellow-casablanca" + }, { + "name": "Yellow", + "value": "yellow-crusta" + }], + "icons": [{ + "name": "Talk bubbles", + "value": "fa-comments" + }, { + "name": "Bar Chart", + "value": "fa-bar-chart" + }, { + "name": "Shopping Cart", + "value": "fa-shopping-cart" + }, { + "name": "Globe", + "value": "fa-globe" + }], + "select": "COUNT(*)", + "report": "users", + "condition": "voicePause=1 and pauseType=\"ACW\"", + "details": "ACW" + }, + "title": "AGENTS", + "titleTemplateUrl": "../src/templates/widget-title.html", + "wid": "1457360464208-1" + }], + "cid": "1456841191663-23" + }, { + "styleClass": "col-md-3", + "widgets": [], + "cid": "1456841191664-24" + }] + }], + "titleTemplateUrl": "../src/templates/dashboard-title.html", + "structure": "3-3-3-3" + }), + defaultEntry: true, + editable: true + }], { + ignoreDuplicates: true, + individualHooks: true + }); + }) + .then(function(dashboards) { + console.log(util.format('Populating Dashboards: %s - DONE ', _.map(dashboards, 'name').join())); + }); + + // Init modules table + + models.VoiceExtension.destroy({ + where: { + context: 'outbound-fax' + } + }) + .then(function() { + models.VoiceExtension.bulkCreate([{ + context: 'outbound-fax', + exten: '_.', + priority: 1, + app: 'NoOp', + appdata: 'Outgoing fax to ${FAXNUMBER}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 2, + app: 'NoOp', + appdata: 'Account ${FAXNAME}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 3, + app: 'Set', + appdata: 'CDR(type)=outbound-fax', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 4, + app: 'Answer', + appdata: '', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 5, + app: 'Wait', + appdata: '2', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 6, + app: 'Set', + appdata: 'FAXOPT(ecm)=${FAXECM}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 7, + app: 'Set', + appdata: 'FAXOPT(headerinfo)=${FAXHEADERINFO}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 8, + app: 'Set', + appdata: 'FAXOPT(localstationid)=${FAXLOCALSTATIONID}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 9, + app: 'Set', + appdata: 'FAXOPT(minrate)=${FAXMINRATE}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 10, + app: 'Set', + appdata: 'FAXOPT(maxrate)=${FAXMAXRATE}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 11, + app: 'Set', + appdata: 'FAXOPT(modem)=${FAXMODEM}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 12, + app: 'Set', + appdata: 'FAXOPT(gateway)=${FAXGATEWAY}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 13, + app: 'Set', + appdata: 'FAXOPT(t38timeout)=${FAXT38TIMEOUT}', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 14, + app: 'SendFAX', + appdata: '${FAXOUTFILE},ds', + type: 'system' + }, { + context: 'outbound-fax', + exten: '_.', + priority: 15, + app: 'Hangup', + appdata: '', + type: 'system' + }], { + ignoreDuplicates: true, + individualHooks: true + }) + }) + .then(function() { + console.log('Finished populating VoiceExtension for Outgoing Fax'); + }); + + models.User + .findAll({ + include: [{ + model: models.VoiceExtension, + as: 'UserExtensions', + where: { + app: 'Dial' + } + }] + }) + .then(function(users) { + console.log('Rewriting Users extensions...'); + var bulkUpdates = []; + _.forEach(users, function(user) { + _.forEach(user.UserExtensions, function(elem) { + elem.appdata = 'SIP/' + user.name + ',,tTxX'; + bulkUpdates.push(elem.save()); + // console.log('extension updated'); + }); + }); + return bulkUpdates; + }) + .all() + .catch(function(err) { + console.log(err); + }); + + _setting + .update({ + firstSetup: false + }); + } + + models.VoiceContext + .bulkCreate([{ + name: 'from-sip', + description: 'Default context (DO NOT DELETE)', + defaultEntry: true + }, { + name: 'from-voip-provider', + description: 'Default context (DO NOT DELETE)', + defaultEntry: true + }, { + name: 'inbound-fax', + description: 'Default context (DO NOT DELETE)', + defaultEntry: true + }, { + name: 'outbound-fax', + description: 'Default context (DO NOT DELETE)', + defaultEntry: true + }, { + name: 'from-voicemail', + description: 'Default context (DO NOT DELETE)', + defaultEntry: true + }], { + ignoreDuplicates: true, + individualHooks: true + }) + .then(function(pauses) { + console.log(util.format('Populating Contexts: %s - DONE ', _.map(pauses, 'name').join())); + }); + + var newModules = [{ + id: 1, + name: "dashboard", + title: "APPLICATION_DASHBOARD", + ModuleId: null, + path: '/dashboard/voice' + }, { + id: 2, + name: "yourdashboards", + title: "APPLICATION_YOUR_DASHBOARDS", + ModuleId: null, + path: '/tools/yourdashboards/show/1' + }, { + id: 3, + name: "staff", + title: "APPLICATION_STAFF", + ModuleId: null, + path: null + }, { + id: 4, + name: "agents", + title: "APPLICATION_AGENTS", + ModuleId: 3, + path: '/staff/agents/list' + }, { + id: 5, + name: "contactmanager", + title: "APPLICATION_CONTACT_MANAGER", + ModuleId: null, + path: '/contactmanager/contacts/list' + }, { + id: 6, + name: "channels", + title: "APPLICATION_CHANNELS", + ModuleId: null, + path: null + }, { + id: 7, + name: "voice", + title: "APPLICATION_VOICE", + ModuleId: 6, + path: null + }, { + id: 8, + name: "chat", + title: "APPLICATION_CHAT", + ModuleId: 6, + path: null + }, { + id: 9, + name: "mail", + title: "APPLICATION_MAIL", + ModuleId: 6, + path: null + }, { + id: 10, + name: "fax", + title: "APPLICATION_FAX", + ModuleId: 6, + path: null + }, { + id: 11, + name: "sms", + title: "APPLICATION_SMS", + ModuleId: 6, + path: null + }, { + id: 12, + name: "realtime", + title: "APPLICATION_REALTIME", + ModuleId: 6, + path: '/channels/realtime/view/agents' + }, { + id: 13, + name: "tools", + title: "APPLICATION_TOOLS", + ModuleId: null, + path: null + }, { + id: 14, + name: "square", + title: "APPLICATION_CALLYSQUARE", + ModuleId: null, + path: '/square/projects/list' + }, { + id: 15, + name: "jscripty", + title: "APPLICATION_JSCRIPTY", + ModuleId: null, + path: '/jscripty/projects/list' + }, { + id: 16, + name: "motiondialer", + title: "APPLICATION_MOTION_DIALER", + ModuleId: null, + path: '/motiondialer/lists/list' + }, { + id: 17, + name: "analytics", + title: "APPLICATION_ANALYTICS", + ModuleId: null, + path: '/analytics/reports/list' + }, { + id: 18, + name: "setting", + title: "APPLICATION_SETTINGS", + ModuleId: null, + path: '/setting/updates/list' + }, { + id: 19, + name: "integration", + title: "APPLICATION_INTEGRATION", + ModuleId: null, + path: '/integrations/list' + }, { + id: 20, + name: "openchannel", + title: "APPLICATION_OPEN_CHANNEL", + ModuleId: 6, + path: '/channels/openchannel/accounts/list' + }, { + id: 21, + name: "routes", + title: "APPLICATION_ROUTES", + ModuleId: 7, + path: '/channels/voice/routes/inbound/list' + }, { + id: 22, + name: "contexts", + title: "APPLICATION_CONTEXTS", + ModuleId: 7, + path: '/channels/voice/contexts/list' + }, { + id: 23, + name: "voicemails", + title: "APPLICATION_VOICEMAILS", + ModuleId: 7, + path: '/channels/voice/voicemails/list' + }, { + id: 24, + name: "moh", + title: "APPLICATION_MOH", + ModuleId: 7, + path: '/channels/voice/moh/list' + }, { + id: 25, + name: "recordings", + title: "APPLICATION_RECORDINGS", + ModuleId: 7, + path: '/channels/voice/recordings/list' + }, { + id: 26, + name: "realtime", + title: "APPLICATION_REALTIME", + ModuleId: 7, + path: '/channels/voice/realtime/view/agents' + }, { + id: 27, + name: "chanspy", + title: "APPLICATION_CHANSPY", + ModuleId: 7, + path: '/channels/voice/chanspy/list' + }, { + id: 28, + name: "dispositions", + title: "APPLICATION_DISPOSITIONS", + ModuleId: 7, + path: '/channels/voice/dispositions/list' + }, { + id: 29, + name: "websites", + title: "APPLICATION_WEB_SITES", + ModuleId: 8, + path: '/channels/chat/websites/list' + }, { + id: 30, + name: "queues", + title: "APPLICATION_QUEUES", + ModuleId: 8, + path: '/channels/chat/queues/list' + }, { + id: 31, + name: "interactions", + title: "APPLICATION_INTERACTIONS", + ModuleId: 8, + path: '/channels/chat/room/internal/list' + }, { + id: 32, + name: "offline", + title: "APPLICATION_OFFLINE_MESSAGES", + ModuleId: 8, + path: '/channels/chat/offline/list' + }, { + id: 33, + name: "realtime", + title: "APPLICATION_REALTIME", + ModuleId: 8, + path: '/channels/chat/realtime/view/agents' + }, { + id: 34, + name: "accounts", + title: "APPLICATION_ACCOUNTS", + ModuleId: 9, + path: '/channels/mail/accounts/list' + }, { + id: 35, + name: "queues", + title: "APPLICATION_QUEUES", + ModuleId: 9, + path: '/channels/mail/queues/list' + }, { + id: 36, + name: "inbox", + title: "APPLICATION_INBOX", + ModuleId: 9, + path: '/channels/mail/inbox/view' + }, { + id: 37, + name: "realtime", + title: "APPLICATION_REALTIME", + ModuleId: 9, + path: '/channels/mail/realtime/view/agents' + }, { + id: 38, + name: "accounts", + title: "APPLICATION_ACCOUNTS", + ModuleId: 10, + path: '/channels/fax/accounts/list' + }, { + id: 39, + name: "queues", + title: "APPLICATION_QUEUES", + ModuleId: 10, + path: '/channels/fax/queues/list' + }, { + id: 40, + name: "inbox", + title: "APPLICATION_INBOX", + ModuleId: 10, + path: '/channels/fax/inbox/view' + }, { + id: 41, + name: "realtime", + title: "APPLICATION_REALTIME", + ModuleId: 10, + path: '/channels/fax/realtime/view/agents' + }, { + id: 42, + name: "accounts", + title: "APPLICATION_ACCOUNTS", + ModuleId: 11, + path: '/channels/sms/accounts/list' + }, { + id: 43, + name: "queues", + title: "APPLICATION_QUEUES", + ModuleId: 11, + path: '/channels/sms/queues/list' + }, { + id: 44, + name: "inbox", + title: "APPLICATION_INBOX", + ModuleId: 11, + path: '/channels/sms/inbox/view' + }, { + id: 45, + name: "realtime", + title: "APPLICATION_REALTIME", + ModuleId: 11, + path: '/channels/sms/realtime/view/agents' + }, { + id: 46, + name: "accounts", + title: "APPLICATION_ACCOUNTS", + ModuleId: 20, + path: '/channels/openchannel/accounts/list' + }, { + id: 47, + name: "queues", + title: "APPLICATION_QUEUES", + ModuleId: 20, + path: '/channels/openchannel/queues/list' + }, { + id: 48, + name: "inbox", + title: "APPLICATION_INBOX", + ModuleId: 20, + path: '/channels/openchannel/inbox/view' + }, { + id: 49, + name: "realtime", + title: "APPLICATION_REALTIME", + ModuleId: 20, + path: '/channels/openchannel/realtime/view/agents' + }, { + id: 50, + name: "triggers", + title: "APPLICATION_TRIGGERS", + ModuleId: 13, + path: '/tools/triggers/list' + }, { + id: 51, + name: "automations", + title: "APPLICATION_AUTOMATIONS", + ModuleId: 13, + path: '/tools/automations/list' + }, { + id: 52, + name: "trunks", + title: "APPLICATION_TRUNKS", + ModuleId: 13, + path: '/tools/trunks/list' + }, { + id: 53, + name: "intervals", + title: "APPLICATION_INTERVALS", + ModuleId: 13, + path: '/tools/intervals/list' + }, { + id: 54, + name: "variables", + title: "APPLICATION_VARIABLES", + ModuleId: 13, + path: '/tools/variables/list' + }, { + id: 55, + name: "tags", + title: "APPLICATION_TAGS", + ModuleId: 13, + path: '/tools/tags/list' + }, { + id: 56, + name: "templates", + title: "APPLICATION_TEMPLATES", + ModuleId: 13, + path: '/tools/templates/list' + }, { + id: 57, + name: "pauses", + title: "APPLICATION_PAUSES", + ModuleId: 13, + path: '/tools/pauses/list' + }, { + id: 58, + name: "answers", + title: "APPLICATION_CANNED_ANSWERS", + ModuleId: 13, + path: '/tools/answers/list' + }, { + id: 59, + name: "yourdashboards", + title: "APPLICATION_DASHBOARDS_MANAGER", + ModuleId: 13, + path: '/tools/yourdashboards/list' + }, { + id: 60, + name: "sounds", + title: "APPLICATION_SOUNDS", + ModuleId: 13, + path: '/tools/sounds/list' + }, { + id: 61, + name: "scheduler", + title: "APPLICATION_SCHEDULER", + ModuleId: 13, + path: '/tools/scheduler/list' + }]; + + + models.Module + .findAll() + .then(function(oldModules) { + var bulkModules = []; + oldModules = _.map(oldModules, 'id'); + newModules.forEach(function(module) { + if (_.includes(oldModules, module.id)) { + bulkModules.push(models.Module.update(module, { + where: { + id: module.id + } + })); + } else { + bulkModules.push(models.Module.create(module)); + } + }); + return bulkModules; + }) + .all() + .then(function() { + console.log('Finished populating modules'); + }) + .catch(function(err) { + console.log('Error populating modules:', err); + }); + + var newDefaultReports = [{ + "id": 25, + "name": "Details", + "description": "Detailed queues report", + "parent": "j12_7", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 26, + "name": "Calls Result", + "description": "Simple queue calls overview", + "parent": "j12_7", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 28, + "name": "Details", + "description": "Detailed report about answered queue calls", + "parent": "j60_1", + "table": "report_agent_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"agentcomplete\",\"value\":\"1\",\"required\":true}]}}" + }, { + "id": 29, + "name": "Calls by Agent", + "description": "Agent calls timer Handle time= talk time + ACW time", + "parent": "j60_1", + "table": "report_agent_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"agentcomplete\",\"value\":\"1\",\"required\":true}]}}" + }, { + "id": 30, + "name": "Calls by Queue", + "description": "Queue timer Handle Time= Talk Time + AVG TIme", + "parent": "j60_1", + "table": "report_agent_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"agentcomplete\",\"value\":\"1\",\"required\":true}]}}" + }, { + "id": 31, + "name": "Answer Time by Queue", + "description": "Queues answer time performance", + "parent": "j60_1", + "table": "report_agent_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"agentcomplete\",\"value\":\"1\",\"required\":true}]}}" + }, { + "id": 32, + "name": "Disconnection Cause", + "description": "Summary of the calls cdisconnection causes", + "parent": "j60_1", + "table": "report_agent_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"agentcomplete\",\"value\":\"1\",\"required\":true}]}}" + }, { + "id": 34, + "name": "Answer Time by Hour", + "description": "Answer time by hour", + "parent": "j60_1", + "table": "report_agent_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"agentcomplete\",\"value\":\"1\",\"required\":true}]}}" + }, { + "id": 35, + "name": "Details", + "description": "Detailed report about the unanswered calls", + "parent": "j60_2", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"queuecallercomplete\",\"value\":\"0\",\"required\":true}]}}" + }, { + "id": 36, + "name": "Unanswered by Queue", + "description": "Unanswered calls summary by queue", + "parent": "j60_2", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"queuecallercomplete\",\"value\":\"0\",\"required\":true}]}}" + }, { + "id": 37, + "name": "Unmanaged calls", + "description": "Unmanaged calls summary", + "parent": "j60_2", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"queuecallerexit\",\"value\":\"1\",\"required\":true}]}}" + }, { + "id": 38, + "name": "Abandon Time by Queue", + "description": "Abandon time performance by queue", + "parent": "j60_2", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"queuecallerabandon\",\"value\":\"1\",\"required\":true}]}}" + }, { + "id": 40, + "name": "Calls by Date", + "description": "Queue calls summary by date", + "parent": "j60_3", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 41, + "name": "Calls by Hour", + "description": "Calls distribution by hour", + "parent": "j60_3", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 46, + "name": "Calls by Day", + "description": "Calls distribution by day of the month", + "parent": "j60_3", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 47, + "name": "Calls by Weekday", + "description": "Calls distribution by day of the week", + "parent": "j60_3", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 49, + "name": "Summary", + "description": "Calls distribution by queue", + "parent": "j12_7", + "table": "report_queue_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 50, + "name": "Details", + "description": "Calls detail (cdr)", + "parent": "j51_1", + "table": "report_call_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 51, + "name": "Outbound", + "description": "Manual outbound calls detailed report", + "parent": "j51_1", + "table": "report_call_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"type\",\"value\":\"'outbound'\",\"required\":true}]}}" + }, { + "id": 52, + "name": "Calls by Type", + "description": "Summary report of the calls type", + "parent": "j51_1", + "table": "report_call_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 53, + "name": "Outbound Calls Disposition", + "description": "Outbound calls grouped by disposition", + "parent": "j51_1", + "table": "report_call_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"type\",\"value\":\"'outbound'\",\"required\":true}]}}" + }, { + "id": 54, + "name": "Outbound Calls by Agent", + "description": "Summary of outbound calls grouped by agent", + "parent": "j51_1", + "table": "report_call_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"type\",\"value\":\"'outbound'\",\"required\":true}]}}" + }, { + "id": 55, + "name": "Outbound Calls by Date", + "description": "Summary of outbound calls grouped by date", + "parent": "j51_1", + "table": "report_call_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"type\",\"value\":\"'outbound'\",\"required\":true}]}}" + }, { + "id": 57, + "name": "Login Time", + "description": "Agent's login time", + "parent": "j12_5", + "table": "report_member_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"type\",\"value\":\"'LOGIN'\",\"required\":true},{\"condition\":\"=\",\"field\":\"channel\",\"value\":\"'voice'\",\"required\":true}]}}" + }, { + "id": 61, + "name": "Activities Summary", + "description": "Agent's activities report", + "parent": "j87_1", + "table": "report_member_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"channel\",\"value\":\"'voice'\",\"required\":true}]}}" + }, { + "id": 62, + "name": "Pause Details", + "description": "Agents status details", + "parent": "j87_1", + "table": "report_member_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"channel\",\"value\":\"'voice'\",\"required\":true},{\"condition\":\"=\",\"field\":\"type\",\"value\":\"'PAUSE'\",\"required\":true}]}}" + }, { + "id": 63, + "name": "Details", + "description": "Agent's status detail", + "parent": "j87_1", + "table": "report_member_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"channel\",\"value\":\"'voice'\",\"required\":true}]}}" + }, { + "id": 64, + "name": "Pause Time", + "description": "Agent's pause time", + "parent": "j87_1", + "table": "report_member_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"type\",\"value\":\"'PAUSE'\",\"required\":true},{\"condition\":\"=\",\"field\":\"channel\",\"value\":\"'voice'\",\"required\":true}]}}" + }, { + "id": 65, + "name": "Summary", + "description": "CallySquare Summary", + "parent": "j87_2", + "table": "report_square_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 67, + "name": "Blocks", + "description": "CallySquare Blocks Detail", + "parent": "j87_2", + "table": "report_square_details_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 68, + "name": "Received emails by account", + "description": "Summary of the emails accepted by application for each account", + "parent": "j12_4", + "table": "report_mail_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 69, + "name": "Rating by Agent", + "description": "Records rating by agent", + "parent": "j110_1", + "table": "voice_recordings", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\">\",\"field\":\"rating\",\"value\":\"0\",\"required\":true}]}}" + }, { + "id": 70, + "name": "Rating by Queue", + "description": "Records rating by queue", + "parent": "j110_1", + "table": "voice_recordings", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"IS NOT NULL\",\"field\":\"queue\",\"value\":\"\",\"required\":false},{\"condition\":\">\",\"field\":\"rating\",\"value\":\"0\",\"required\":true}]}}" + }, { + "id": 72, + "name": "Website Summary", + "description": "Chat session information by website", + "parent": "j12_3", + "table": "report_chat_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 73, + "name": "Session Detail", + "description": "Detailed report about chat session", + "parent": "j12_3", + "table": "report_chat_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 74, + "name": "Chat by Agent", + "description": "Session chat by agent", + "parent": "j12_3", + "table": "report_chat_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"complete\",\"value\":\"1\",\"required\":true}]}}" + }, { + "id": 75, + "name": "Chat by Queue", + "description": "Chat sessions by queue", + "parent": "j12_3", + "table": "report_chat_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"application\",\"value\":\"'queue'\",\"required\":true}]}}" + }, { + "id": 76, + "name": "Chat by Date", + "description": "Session chat by date", + "parent": "j12_3", + "table": "report_chat_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 77, + "name": "Received emails by queue", + "description": "Summary of received email by queue", + "parent": "j12_4", + "table": "report_mail_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"application\",\"value\":\"'queue'\",\"required\":true}]}}" + }, { + "id": 79, + "name": "Accepted emails by agent", + "description": "Summary of accepted email by agent", + "parent": "j12_4", + "table": "report_mail_session_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"=\",\"field\":\"timeout\",\"value\":\"0\",\"required\":true}]}}" + }, { + "id": 81, + "name": "Messages Summary by Date", + "description": "Global messages summary by date", + "parent": "j12_4", + "table": "mail_messages", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 82, + "name": "Interactions detail", + "description": "Detailed report about the interactions", + "parent": "j12_4", + "table": "mail_rooms", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 83, + "name": "Disposition Summary", + "description": "Closed interactions by disposition (filtered by disposition not null)", + "parent": "j12_4", + "table": "mail_rooms", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[{\"condition\":\"IS NOT NULL\",\"field\":\"disposition\",\"value\":\"\",\"required\":false}]}}" + }, { + "id": 84, + "name": "Closed interactions by date", + "description": "Summary of closed interactions grouped by date + average handle time (from when the first email arrived to when the interaction has been closed)", + "parent": "j12_4", + "table": "mail_rooms", + "conditions": "{\"group\":{\"operator\":\"OR\",\"rules\":[{\"condition\":\"=\",\"field\":\"status\",\"value\":\"'CLOSED'\",\"required\":true}]}}" + }, { + "id": 85, + "name": "Details", + "description": null, + "parent": "j12_6", + "table": "sms_messages", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }, { + "id": 90, + "name": "Details", + "description": null, + "parent": "j4_10", + "table": "report_integration_history", + "conditions": "{\"group\":{\"operator\":\"AND\",\"rules\":[]}}" + }]; + + var newDefaulReportsFields = [{ + "field": "uniqueid", + "alias": "UniqueId", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 0 + }, { + "field": "calleridnum", + "alias": "CallerIdNum", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 0 + }, { + "field": "calleridname", + "alias": "CallerIdName", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 0 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerjoinAt", + "alias": "QueueJoinAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerleaveAt", + "alias": "QueueLeaveAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerabandon", + "alias": "QueueAbandon", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerabandonAt", + "alias": "QueueAbandonAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallercomplete", + "alias": "Complete", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallercompleteAt", + "alias": "CompleteAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerexit", + "alias": "QueueExit", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerexitAt", + "alias": "QueueExitAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerexitreason", + "alias": "QueueExitReason", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 0 + }, { + "field": "exten", + "alias": "DID", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 0 + }, { + "field": "UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)", + "alias": "TalkTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 1 + }, { + "field": "UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "AbandonTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 1 + }, { + "field": "IF(queuecallercomplete=1,holdtime,null)", + "alias": "AnswerTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 25, + "MetricId": null, + "custom": 1 + }, { + "field": "calleridnum", + "alias": "CallerID", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 26, + "MetricId": null, + "custom": 0 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 26, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerjoinAt", + "alias": "StartTime", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 26, + "MetricId": null, + "custom": 0 + }, { + "field": "CASE WHEN queuecallercomplete=1 THEN queuecallercompleteAt ELSE queuecallerLeaveAt END", + "alias": "EndTime", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 26, + "MetricId": null, + "custom": 1 + }, { + "field": "holdtime", + "alias": "HoldTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 26, + "MetricId": null, + "custom": 0 + }, { + "field": "CASE WHEN queuecallercomplete=1 THEN \"YES\" ELSE \"NO\" END", + "alias": "Answered", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 26, + "MetricId": null, + "custom": 1 + }, { + "field": "uniqueid", + "alias": "UniqueId", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "calleridnum", + "alias": "CallerIdNum", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "calleridname", + "alias": "CallerIdName", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "agentcalledAt", + "alias": "AgentCalledAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "agentconnectAt", + "alias": "AgentConnectAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "agentcompleteAt", + "alias": "AgentCompleteAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "holdtime", + "alias": "AnswerTime", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "talktime", + "alias": "TalkTime", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "agentacw", + "alias": "AgentACW", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "acwtime", + "alias": "AgentACWTime", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "agentcomplete", + "alias": "AgentComplete", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "reason", + "alias": "HangupReason", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "lastevent", + "alias": "LastEvent", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "exten", + "alias": "DID", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 28, + "MetricId": null, + "custom": 0 + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 29, + "MetricId": null, + "custom": 0 + }, { + "field": "agentcomplete", + "alias": "Completed", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 29, + "MetricId": null, + "custom": 0 + }, { + "field": "talktime", + "alias": "TotTalkTime", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 29, + "MetricId": null, + "custom": 0 + }, { + "field": "acwtime", + "alias": "TotACWTime", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 29, + "MetricId": null, + "custom": 0 + }, { + "field": "talktime + acwtime", + "alias": "TotHandleTime", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 29, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(talktime))", + "alias": "AvgTalkTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 29, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(acwtime))", + "alias": "AvgACWTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 29, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(SUM(talktime + acwtime)/COUNT(agentcomplete))", + "alias": "AvgHandleTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 29, + "MetricId": null, + "custom": 1 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 30, + "MetricId": null, + "custom": 0 + }, { + "field": "agentcomplete", + "alias": "Completed", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 30, + "MetricId": null, + "custom": 0 + }, { + "field": "talktime", + "alias": "Tot TalkTime", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 30, + "MetricId": null, + "custom": 0 + }, { + "field": "holdtime", + "alias": "Tot HoldTime", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 30, + "MetricId": null, + "custom": 0 + }, { + "field": "acwtime", + "alias": "Tot ACWTime", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 30, + "MetricId": null, + "custom": 0 + }, { + "field": "talktime + acwtime", + "alias": "Tot Handle Time", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 30, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(talktime))", + "alias": "Avg TalkTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 30, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(holdtime))", + "alias": "Avg HoldTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 30, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(acwtime))", + "alias": "Avg ACWTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 30, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(SUM(talktime + acwtime)/COUNT(agentcomplete))", + "alias": "Avg Handle Time", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 30, + "MetricId": null, + "custom": 1 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 31, + "MetricId": null, + "custom": 0 + }, { + "field": "agentcomplete", + "alias": "Tot Answered", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 31, + "MetricId": null, + "custom": 0 + }, { + "field": "COUNT(IF(holdtime<10,1,NULL))", + "alias": "Answered <10s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 31, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(COUNT(IF(holdtime<10,1,NULL)) / SUM(agentcomplete) *100,1)", + "alias": "Answer Rate <10s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 31, + "MetricId": null, + "custom": 1 + }, { + "field": "COUNT(IF(holdtime >=10 AND holdtime <20,1,NULL))", + "alias": "Answered 10-20s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 31, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(COUNT(IF(holdtime >=10 AND holdtime <20,1,NULL)) / SUM(agentcomplete) *100,1)", + "alias": "Answer Rate 10-20s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 31, + "MetricId": null, + "custom": 1 + }, { + "field": "COUNT(IF(holdtime >=20 AND holdtime <30,1,NULL))", + "alias": "Answered 20-30s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 31, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(COUNT(IF(holdtime >=20 AND holdtime <30,1,NULL)) / SUM(agentcomplete) *100,1)", + "alias": "Answer Rate 20-30s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 31, + "MetricId": null, + "custom": 1 + }, { + "field": "COUNT(IF(holdtime >=30,1,NULL))", + "alias": "Answered >30s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 31, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(COUNT(IF(holdtime >=30,1,NULL)) / SUM(agentcomplete) *100,1)", + "alias": "Answer Rate >30s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 31, + "MetricId": null, + "custom": 1 + }, { + "field": "reason", + "alias": "Reason", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 32, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "Calls", + "function": "COUNT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 32, + "MetricId": null, + "custom": 0 + }, { + "field": "agentconnectAt", + "alias": "Hour", + "function": null, + "format": "HOUR", + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 34, + "MetricId": null, + "custom": 0 + }, { + "field": "agentcomplete", + "alias": "Tot Answered", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 34, + "MetricId": null, + "custom": 0 + }, { + "field": "COUNT(IF(holdtime<10,1,NULL))", + "alias": "Answered <10s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 34, + "MetricId": null, + "custom": 1 + }, { + "field": "COUNT(IF(holdtime >=10 AND holdtime <20,1,NULL))", + "alias": "Answered 10-20s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 34, + "MetricId": null, + "custom": 1 + }, { + "field": "COUNT(IF(holdtime >=20 AND holdtime <30,1,NULL))", + "alias": "Answered 20-30s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 34, + "MetricId": null, + "custom": 1 + }, { + "field": "COUNT(IF(holdtime >=30,1,NULL))", + "alias": "Answered >30s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 34, + "MetricId": null, + "custom": 1 + }, { + "field": "uniqueid", + "alias": "UniqueId", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 35, + "MetricId": null, + "custom": 0 + }, { + "field": "calleridnum", + "alias": "CallerIdNum", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 35, + "MetricId": null, + "custom": 0 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 35, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerjoinAt", + "alias": "JoinAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 35, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerleaveAt", + "alias": "LeaveAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 35, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerabandon", + "alias": "Abandon", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 35, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerabandonAt", + "alias": "AbandonAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 35, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerexit", + "alias": "Unmanaged", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 35, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerexitAt", + "alias": "UnmanagedAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 35, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerexitreason", + "alias": "UnmanagedReason", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 35, + "MetricId": null, + "custom": 0 + }, { + "field": "position", + "alias": "QueuePosition", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 35, + "MetricId": null, + "custom": 0 + }, { + "field": "exten", + "alias": "DID", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 35, + "MetricId": null, + "custom": 0 + }, { + "field": "UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "Abandon Time", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 35, + "MetricId": null, + "custom": 1 + }, { + "field": "UNIX_TIMESTAMP(queuecallerExitAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "Unmanaged HoldTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 35, + "MetricId": null, + "custom": 1 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 36, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerabandon", + "alias": "Abandoned", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 36, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerexit", + "alias": "Unmanaged", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 36, + "MetricId": null, + "custom": 0 + }, { + "field": "UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "Tot AbandonTime", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 36, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)))", + "alias": "AvgAbandonTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 36, + "MetricId": null, + "custom": 1 + }, { + "field": "UNIX_TIMESTAMP(queuecallerExitAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "Tot Unmanaged Time", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 36, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(queuecallerExitAt)-UNIX_TIMESTAMP(queuecallerjoinAt)))", + "alias": "Avg Unmanaged TIme", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 36, + "MetricId": null, + "custom": 1 + }, { + "field": "queuecallerexitreason", + "alias": "Reason", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 37, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerexit", + "alias": "Calls", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 37, + "MetricId": null, + "custom": 0 + }, { + "field": "UNIX_TIMESTAMP(queuecallerExitAt)-UNIX_TIMESTAMP(queuecallerjoinAt)", + "alias": "Tot Unmanaged Time", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 37, + "MetricId": null, + "custom": 1 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 38, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerabandon", + "alias": "Tot Abandoned", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 38, + "MetricId": null, + "custom": 0 + }, { + "field": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <10,1,NULL))", + "alias": "Abandoned<10s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 38, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <10,1,NULL)) / SUM(queuecallerabandon) *100,1)", + "alias": "Abandoned Rate<10s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 38, + "MetricId": null, + "custom": 1 + }, { + "field": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=10 AND UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <60,1,NULL))", + "alias": "Abandoned 10-60s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 38, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=10 AND UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <60,1,NULL)) / SUM(queuecallerabandon) *100,1)", + "alias": "Abandoned Rate 10-60s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 38, + "MetricId": null, + "custom": 1 + }, { + "field": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=60 AND UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <120,1,NULL))", + "alias": "Abandoned 60-120s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 38, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=60 AND UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <120,1,NULL)) / SUM(queuecallerabandon) *100,1)", + "alias": "Abandoned Rate 60-120s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 38, + "MetricId": null, + "custom": 1 + }, { + "field": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=120,1,NULL))", + "alias": "Abandoned>120s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 38, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=120,1,NULL)) / SUM(queuecallerabandon) *100,1)", + "alias": "Abandoned Rate>120s", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 38, + "MetricId": null, + "custom": 1 + }, { + "field": "queuecallerjoinat", + "alias": "Date", + "function": null, + "format": "DATE", + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 40, + "MetricId": null, + "custom": 1 + }, { + "field": "uniqueid", + "alias": "Offered", + "function": "COUNT DISTINCT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 40, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallercomplete", + "alias": "Completed", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 40, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerabandon", + "alias": "Abandoned", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 40, + "MetricId": null, + "custom": 1 + }, { + "field": "queuecallerexit", + "alias": "Unmanaged", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 40, + "MetricId": null, + "custom": 1 + }, { + "field": "UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)", + "alias": "Tot TalkTime", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 40, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)))", + "alias": "AvgTalkTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 40, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)))", + "alias": "AvgAbandonTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 40, + "MetricId": null, + "custom": 1 + }, { + "field": "queuecallerjoinat", + "alias": "Hour", + "function": null, + "format": "HOUR", + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 41, + "MetricId": null, + "custom": 1 + }, { + "field": "uniqueid", + "alias": "Offered", + "function": "COUNT DISTINCT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 41, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallercomplete", + "alias": "Answered", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 41, + "MetricId": null, + "custom": 0 + }, { + "field": "ROUND(SUM(queuecallercomplete)/COUNT(DISTINCT uniqueid)*100,1)", + "alias": "Answer Rate", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 41, + "MetricId": null, + "custom": 1 + }, { + "field": "queuecallerabandon", + "alias": "Abandoned", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 41, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerexit", + "alias": "Unmanaged", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 41, + "MetricId": null, + "custom": 0 + }, { + "field": "UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)", + "alias": "Tot TalkTime", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 41, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)))", + "alias": "AvgTalkTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 41, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)))", + "alias": "AvgAbandonTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 41, + "MetricId": null, + "custom": 1 + }, { + "field": "DAY(queuecallerjoinat)", + "alias": "Day", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 46, + "MetricId": null, + "custom": 1 + }, { + "field": "uniqueid", + "alias": "Offered", + "function": "COUNT DISTINCT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 46, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallercomplete", + "alias": "Answered", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 46, + "MetricId": null, + "custom": 0 + }, { + "field": "ROUND(SUM(queuecallercomplete)/COUNT(DISTINCT uniqueid)*100,1)", + "alias": "Answer Rate", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 46, + "MetricId": null, + "custom": 1 + }, { + "field": "queuecallerabandon", + "alias": "Abandoned", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 46, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerexit", + "alias": "Unmanaged", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 46, + "MetricId": null, + "custom": 0 + }, { + "field": "UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)", + "alias": "Tot TalkTime", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 46, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)))", + "alias": "AvgTalkTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 46, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)))", + "alias": "AvgAbandonTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 46, + "MetricId": null, + "custom": 1 + }, { + "field": "DAYNAME(queuecallerjoinat)", + "alias": "DayOfWeek", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 47, + "MetricId": null, + "custom": 1 + }, { + "field": "uniqueid", + "alias": "Offered", + "function": "COUNT DISTINCT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 47, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallercomplete", + "alias": "Answered", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 47, + "MetricId": null, + "custom": 0 + }, { + "field": "ROUND(SUM(queuecallercomplete)/COUNT(DISTINCT uniqueid)*100,1)", + "alias": "Answer Rate", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 47, + "MetricId": null, + "custom": 1 + }, { + "field": "queuecallerabandon", + "alias": "Abandoned", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": "ASC", + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 47, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerexit", + "alias": "Unmanaged", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 47, + "MetricId": null, + "custom": 0 + }, { + "field": "UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)", + "alias": "Tot TalkTime", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 47, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)))", + "alias": "AvgTalkTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 47, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)))", + "alias": "AvgAbandonTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 47, + "MetricId": null, + "custom": 1 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 49, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "Offered", + "function": "COUNT DISTINCT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 49, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallercomplete", + "alias": "Answered", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 49, + "MetricId": null, + "custom": 0 + }, { + "field": "ROUND(SUM(queuecallercomplete)/COUNT(DISTINCT uniqueid)*100,1)", + "alias": "Answer Rate", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 49, + "MetricId": null, + "custom": 1 + }, { + "field": "queuecallerabandon", + "alias": "Abandoned", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 49, + "MetricId": null, + "custom": 0 + }, { + "field": "queuecallerexit", + "alias": "Unmanaged", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 49, + "MetricId": null, + "custom": 0 + }, { + "field": "UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)", + "alias": "Tot TalkTime", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 49, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)))", + "alias": "AvgTalkTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 49, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)))", + "alias": "AvgAbandonTime", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 49, + "MetricId": null, + "custom": 1 + }, { + "field": "uniqueid", + "alias": "UniqueID", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 50, + "MetricId": null, + "custom": 0 + }, { + "field": "type", + "alias": "Type", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 50, + "MetricId": null, + "custom": 0 + }, { + "field": "tag", + "alias": "Tag", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 50, + "MetricId": null, + "custom": 0 + }, { + "field": "source", + "alias": "Source", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 50, + "MetricId": null, + "custom": 0 + }, { + "field": "destination", + "alias": "Destination", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 50, + "MetricId": null, + "custom": 0 + }, { + "field": "callerid", + "alias": "CallerID", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 50, + "MetricId": null, + "custom": 0 + }, { + "field": "destinationchannel", + "alias": "DestChannel", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 50, + "MetricId": null, + "custom": 0 + }, { + "field": "lastapplication", + "alias": "LastApp", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 50, + "MetricId": null, + "custom": 0 + }, { + "field": "lastdata", + "alias": "LastData", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 50, + "MetricId": null, + "custom": 0 + }, { + "field": "starttime", + "alias": "StartTime", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 50, + "MetricId": null, + "custom": 0 + }, { + "field": "answertime", + "alias": "AnswerTime", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 50, + "MetricId": null, + "custom": 0 + }, { + "field": "endtime", + "alias": "EndTime", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 50, + "MetricId": null, + "custom": 0 + }, { + "field": "duration", + "alias": "Duration", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 50, + "MetricId": null, + "custom": 0 + }, { + "field": "disposition", + "alias": "Disposition", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 50, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "UniqueID", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 51, + "MetricId": null, + "custom": 0 + }, { + "field": "accountcode", + "alias": "AgentExtension", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 51, + "MetricId": null, + "custom": 0 + }, { + "field": "source", + "alias": "Source", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 51, + "MetricId": null, + "custom": 0 + }, { + "field": "destination", + "alias": "Destination", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 51, + "MetricId": null, + "custom": 0 + }, { + "field": "callerid", + "alias": "CallerId", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 51, + "MetricId": null, + "custom": 0 + }, { + "field": "starttime", + "alias": "StartTime", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 51, + "MetricId": null, + "custom": 0 + }, { + "field": "answertime", + "alias": "AnswerTime", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 51, + "MetricId": null, + "custom": 0 + }, { + "field": "endtime", + "alias": "EndTime", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 51, + "MetricId": null, + "custom": 0 + }, { + "field": "duration", + "alias": "Duration", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 51, + "MetricId": null, + "custom": 0 + }, { + "field": "billableseconds", + "alias": "Billsec", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 51, + "MetricId": null, + "custom": 0 + }, { + "field": "disposition", + "alias": "Disposition", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 51, + "MetricId": null, + "custom": 0 + }, { + "field": "tag", + "alias": "Tag", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 51, + "MetricId": null, + "custom": 0 + }, { + "field": "type", + "alias": "Type", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 52, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "Calls", + "function": "COUNT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 52, + "MetricId": null, + "custom": 0 + }, { + "field": "duration", + "alias": "Tot Duration", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 52, + "MetricId": null, + "custom": 0 + }, { + "field": "ROUND(AVG(duration))", + "alias": "Avg Duration", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 52, + "MetricId": null, + "custom": 1 + }, { + "field": "disposition", + "alias": "Disposition", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 53, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "Calls", + "function": "COUNT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 53, + "MetricId": null, + "custom": 0 + }, { + "field": "duration", + "alias": "Tot Duration", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 53, + "MetricId": null, + "custom": 0 + }, { + "field": "ROUND(AVG(duration))", + "alias": "Avg Duration", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 53, + "MetricId": null, + "custom": 1 + }, { + "field": "SUBSTRING_INDEX(channel, '-', 1)", + "alias": "Agent", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 54, + "MetricId": null, + "custom": 1 + }, { + "field": "uniqueid", + "alias": "Calls", + "function": "COUNT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 54, + "MetricId": null, + "custom": 0 + }, { + "field": "duration", + "alias": "Tot Duration", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 54, + "MetricId": null, + "custom": 0 + }, { + "field": "ROUND(AVG(duration))", + "alias": "Avg Duration", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 54, + "MetricId": null, + "custom": 1 + }, { + "field": "starttime", + "alias": "Date", + "function": null, + "format": "DATE", + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 55, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "Calls", + "function": "COUNT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 55, + "MetricId": null, + "custom": 0 + }, { + "field": "duration", + "alias": "Tot Duration", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 55, + "MetricId": null, + "custom": 0 + }, { + "field": "ROUND(AVG(duration))", + "alias": "Avg Duration", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 55, + "MetricId": null, + "custom": 1 + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": "ASC", + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 57, + "MetricId": null, + "custom": 0 + }, { + "field": "SEC_TO_TIME(SUM(UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt)))", + "alias": "Duration", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 57, + "MetricId": null, + "custom": 1 + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 61, + "MetricId": null, + "custom": 0 + }, { + "field": "CASE WHEN type=\"LOGIN\" THEN UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt) END", + "alias": "Login Time", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 61, + "MetricId": null, + "custom": 1 + }, { + "field": "CASE WHEN type=\"TALKING\" THEN UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt) END", + "alias": "Talk Time", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 61, + "MetricId": null, + "custom": 1 + }, { + "field": "CASE WHEN type=\"PAUSE\" THEN UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt) END", + "alias": "Pause Time", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 61, + "MetricId": null, + "custom": 1 + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 62, + "MetricId": null, + "custom": 0 + }, { + "field": "enterAt", + "alias": "EnterAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 62, + "MetricId": null, + "custom": 0 + }, { + "field": "exitAt", + "alias": "ExitAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 62, + "MetricId": null, + "custom": 0 + }, { + "field": "data1", + "alias": "Pause", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 62, + "MetricId": null, + "custom": 0 + }, { + "field": "duration", + "alias": "Duration", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 62, + "MetricId": null, + "custom": 0 + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 63, + "MetricId": null, + "custom": 0 + }, { + "field": "interface", + "alias": "Interface", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 63, + "MetricId": null, + "custom": 0 + }, { + "field": "type", + "alias": "Event", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 63, + "MetricId": null, + "custom": 0 + }, { + "field": "data1", + "alias": "Type", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 63, + "MetricId": null, + "custom": 0 + }, { + "field": "enterAt", + "alias": "EnterAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 63, + "MetricId": null, + "custom": 0 + }, { + "field": "exitAt", + "alias": "ExitAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 63, + "MetricId": null, + "custom": 0 + }, { + "field": "SEC_TO_TIME(UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt))", + "alias": "Duration", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 63, + "MetricId": null, + "custom": 1 + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": "ASC", + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 64, + "MetricId": null, + "custom": 0 + }, { + "field": "data1", + "alias": "PauseType", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": "ASC", + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 64, + "MetricId": null, + "custom": 0 + }, { + "field": "SEC_TO_TIME(SUM(UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt)))", + "alias": "Duration", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 64, + "MetricId": null, + "custom": 1 + }, { + "field": "project_name", + "alias": "Project Name", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 65, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "UniqueId", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 65, + "MetricId": null, + "custom": 0 + }, { + "field": "callerid", + "alias": "CallerId", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 65, + "MetricId": null, + "custom": 0 + }, { + "field": "dnid", + "alias": "DID", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 65, + "MetricId": null, + "custom": 0 + }, { + "field": "joinAt", + "alias": "Start Time", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": "ASC", + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 65, + "MetricId": null, + "custom": 0 + }, { + "field": "leaveAt", + "alias": "End Time", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 65, + "MetricId": null, + "custom": 0 + }, { + "field": "UNIX_TIMESTAMP(leaveAt)-UNIX_TIMESTAMP(joinAt)", + "alias": "Duration", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 65, + "MetricId": null, + "custom": 1 + }, { + "field": "uniqueid", + "alias": "Unique Id", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 67, + "MetricId": null, + "custom": 0 + }, { + "field": "project_name", + "alias": "Project Name", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 67, + "MetricId": null, + "custom": 0 + }, { + "field": "callerid", + "alias": "Caller Id", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 67, + "MetricId": null, + "custom": 0 + }, { + "field": "node", + "alias": "Block", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 67, + "MetricId": null, + "custom": 0 + }, { + "field": "data", + "alias": "Data", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 67, + "MetricId": null, + "custom": 0 + }, { + "field": "accountname", + "alias": "Account", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 68, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "Received", + "function": "COUNT DISTINCT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 68, + "MetricId": null, + "custom": 0 + }, { + "field": "IF(timeout=0,1,null)", + "alias": "Accepted", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 68, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(SUM(IF(timeout=0,1,null))/COUNT(DISTINCT(uniqueid))*100,1)", + "alias": "Accept Rate", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 68, + "MetricId": null, + "custom": 1 + }, { + "field": "IF(timeout=0 AND application=\"queue\",1,null)", + "alias": "Accepted by Queue", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 68, + "MetricId": null, + "custom": 1 + }, { + "field": "IF(timeout=0 AND application=\"fidelity\",1,null)", + "alias": "Accept by Fidelity", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 68, + "MetricId": null, + "custom": 1 + }, { + "field": "IF(timeout=0 AND application=\"agent\",1,null)", + "alias": "Accepted by Agent", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 68, + "MetricId": null, + "custom": 1 + }, { + "field": "connectedlinename", + "alias": "Agent", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 69, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "Recorded Calls", + "function": "COUNT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 69, + "MetricId": null, + "custom": 0 + }, { + "field": "rating", + "alias": "Total Rating", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 69, + "MetricId": null, + "custom": 0 + }, { + "field": "rating", + "alias": "Avg Rating", + "function": "AVG", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 69, + "MetricId": null, + "custom": 0 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 70, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "Rated Calls", + "function": "COUNT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 70, + "MetricId": null, + "custom": 0 + }, { + "field": "rating", + "alias": "Total Rating", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 70, + "MetricId": null, + "custom": 0 + }, { + "field": "rating", + "alias": "Avg Rating", + "function": "AVG", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 70, + "MetricId": null, + "custom": 0 + }, { + "field": "websitename", + "alias": "WebSite", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 72, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "Sessions", + "function": "COUNT DISTINCT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 72, + "MetricId": null, + "custom": 0 + }, { + "field": "complete", + "alias": "Completed", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 72, + "MetricId": null, + "custom": 0 + }, { + "field": "abandon", + "alias": "Abandoned", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 72, + "MetricId": null, + "custom": 0 + }, { + "field": "timeout", + "alias": "Timeout", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 72, + "MetricId": null, + "custom": 0 + }, { + "field": "UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)", + "alias": "Tot Session Time", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 72, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)))", + "alias": "Avg Session Time", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 72, + "MetricId": null, + "custom": 1 + }, { + "field": "uniqueid", + "alias": "UniqueId", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 73, + "MetricId": null, + "custom": 0 + }, { + "field": "websitename", + "alias": "Website", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 73, + "MetricId": null, + "custom": 0 + }, { + "field": "visitorname", + "alias": "VisitorName", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 73, + "MetricId": null, + "custom": 0 + }, { + "field": "visitoremail", + "alias": "VisitorEmail", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 73, + "MetricId": null, + "custom": 0 + }, { + "field": "membername", + "alias": "MemeberName", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 73, + "MetricId": null, + "custom": 0 + }, { + "field": "queuename", + "alias": "QueueName", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 73, + "MetricId": null, + "custom": 0 + }, { + "field": "joinAt", + "alias": "JoinAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 73, + "MetricId": null, + "custom": 0 + }, { + "field": "leaveAt", + "alias": "LeaveAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 73, + "MetricId": null, + "custom": 0 + }, { + "field": "completeAt", + "alias": "CompleteAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 73, + "MetricId": null, + "custom": 0 + }, { + "field": "complete", + "alias": "Completed", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 73, + "MetricId": null, + "custom": 0 + }, { + "field": "completeReason", + "alias": "CompleteReason", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 73, + "MetricId": null, + "custom": 0 + }, { + "field": "abandon", + "alias": "Abandoned", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 73, + "MetricId": null, + "custom": 0 + }, { + "field": "timeout", + "alias": "Timeout", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 73, + "MetricId": null, + "custom": 0 + }, { + "field": "membername", + "alias": "Agent", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 74, + "MetricId": null, + "custom": 0 + }, { + "field": "complete", + "alias": "Session", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 74, + "MetricId": null, + "custom": 0 + }, { + "field": "UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)", + "alias": "Tot Session Time", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 74, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)))", + "alias": "Avg Session Time", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 74, + "MetricId": null, + "custom": 1 + }, { + "field": "COUNT(IF(application=\"queue\",1,NULL))", + "alias": "FromQueue", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 74, + "MetricId": null, + "custom": 1 + }, { + "field": "COUNT(IF(application=\"agent\",1,NULL))", + "alias": "DirectToAgent", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 74, + "MetricId": null, + "custom": 1 + }, { + "field": "queuename", + "alias": "Queue", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 75, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "Sessions", + "function": "COUNT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 75, + "MetricId": null, + "custom": 0 + }, { + "field": "complete", + "alias": "Completed", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 75, + "MetricId": null, + "custom": 0 + }, { + "field": "abandon", + "alias": "Abandoned", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 75, + "MetricId": null, + "custom": 0 + }, { + "field": "timeout", + "alias": "Timeout", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 75, + "MetricId": null, + "custom": 0 + }, { + "field": "UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)", + "alias": "Session Time", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 75, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)))", + "alias": "Avg Session Time", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 75, + "MetricId": null, + "custom": 1 + }, { + "field": "joinAt", + "alias": "Date", + "function": null, + "format": "DATE", + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 76, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "Sessions", + "function": "COUNT DISTINCT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 76, + "MetricId": null, + "custom": 0 + }, { + "field": "complete", + "alias": "Completed", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 76, + "MetricId": null, + "custom": 0 + }, { + "field": "ROUND(SUM(complete)/COUNT(DISTINCT uniqueid) *100,1)", + "alias": "Complete Rate", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 76, + "MetricId": null, + "custom": 1 + }, { + "field": "UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)", + "alias": "Tot Session Time", + "function": "SUM", + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 76, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)))", + "alias": "Avg Session Time", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 76, + "MetricId": null, + "custom": 1 + }, { + "field": "queuename", + "alias": "Queue", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 77, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "Received", + "function": "COUNT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 77, + "MetricId": null, + "custom": 0 + }, { + "field": "IF(timeout=0,1,0)", + "alias": "Accepted", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 77, + "MetricId": null, + "custom": 1 + }, { + "field": "timeout", + "alias": "Timeout", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 77, + "MetricId": null, + "custom": 0 + }, { + "field": "ROUND(SUM(IF(timeout=0,1,null))/COUNT(uniqueid)*100,1)", + "alias": "Accept Rate", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 77, + "MetricId": null, + "custom": 1 + }, { + "field": "ROUND(AVG(IF(timeout=0,UNIX_TIMESTAMP(leaveat)- UNIX_TIMESTAMP(joinat),NULL)))", + "alias": "Avg Accept Time", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 77, + "MetricId": null, + "custom": 1 + }, { + "field": "membername", + "alias": "membername", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 79, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "Tot Accepted", + "function": "COUNT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 79, + "MetricId": null, + "custom": 0 + }, { + "field": "IF(application=\"fidelity\",1,0)", + "alias": "Fidelity", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 79, + "MetricId": null, + "custom": 1 + }, { + "field": "IF(application=\"agent\",1,0)", + "alias": "Agent", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 79, + "MetricId": null, + "custom": 1 + }, { + "field": "IF(application=\"queue\",1,0)", + "alias": "Queue", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 79, + "MetricId": null, + "custom": 1 + }, { + "field": "createdAt", + "alias": "Date", + "function": null, + "format": "DATE", + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 81, + "MetricId": null, + "custom": 0 + }, { + "field": "IF(status=\"RECEIVED\",1,0)", + "alias": "Received", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 81, + "MetricId": null, + "custom": 1 + }, { + "field": "IF(status=\"SENT\",1,0)", + "alias": "Sent", + "function": "SUM", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 81, + "MetricId": null, + "custom": 1 + }, { + "field": "account", + "alias": "account", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 82, + "MetricId": null, + "custom": 0 + }, { + "field": "status", + "alias": "status", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 82, + "MetricId": null, + "custom": 0 + }, { + "field": "lastEvent", + "alias": "lastEvent", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 82, + "MetricId": null, + "custom": 0 + }, { + "field": "createdAt", + "alias": "createdAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 82, + "MetricId": null, + "custom": 0 + }, { + "field": "arrivedAt", + "alias": "arrivedAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 82, + "MetricId": null, + "custom": 0 + }, { + "field": "openedAt", + "alias": "openedAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 82, + "MetricId": null, + "custom": 0 + }, { + "field": "closedAt", + "alias": "closedAt", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 82, + "MetricId": null, + "custom": 0 + }, { + "field": "mailIn", + "alias": "mailIn", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 82, + "MetricId": null, + "custom": 0 + }, { + "field": "mailOut", + "alias": "mailOut", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 82, + "MetricId": null, + "custom": 0 + }, { + "field": "tags", + "alias": "tags", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 82, + "MetricId": null, + "custom": 0 + }, { + "field": "disposition", + "alias": "disposition", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 82, + "MetricId": null, + "custom": 0 + }, { + "field": "ParentId", + "alias": "ParentId", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 82, + "MetricId": null, + "custom": 0 + }, { + "field": "disposition", + "alias": "disposition", + "function": null, + "format": null, + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 83, + "MetricId": null, + "custom": 0 + }, { + "field": "count(*)", + "alias": "interactions", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 83, + "MetricId": null, + "custom": 1 + }, { + "field": "closedAt", + "alias": "closedAt", + "function": null, + "format": "DATE", + "groupBy": 1, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 84, + "MetricId": null, + "custom": 0 + }, { + "alias": "Interactions", + "field": "id", + "function": "COUNT", + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 84, + "MetricId": null, + "custom": 0 + }, { + "field": "ROUND(AVG(UNIX_TIMESTAMP(closedAt)-UNIX_TIMESTAMP(arrivedAt)))", + "alias": "Avg Handle Time", + "function": null, + "format": "SEC_TO_TIME", + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 84, + "MetricId": null, + "custom": 1 + }, { + "field": "createdAt", + "alias": "DateTime", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 85, + "MetricId": null, + "custom": 0 + }, { + "alias": "Id", + "field": "id", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 85, + "MetricId": null, + "custom": 0 + }, { + "field": "from", + "alias": "fromNumber", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 85, + "MetricId": null, + "custom": 0 + }, { + "field": "to", + "alias": "toNumber", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 85, + "MetricId": null, + "custom": 0 + }, { + "field": "status", + "alias": "Status", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 85, + "MetricId": null, + "custom": 0 + }, { + "field": "createdAt", + "alias": "DateTime", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 90, + "MetricId": null, + "custom": 0 + }, { + "field": "uniqueid", + "alias": "UniqueID", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 90, + "MetricId": null, + "custom": 0 + }, { + "field": "integration", + "alias": "Integration", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 90, + "MetricId": null, + "custom": 0 + }, { + "field": "queue", + "alias": "Queue", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 90, + "MetricId": null, + "custom": 0 + }, { + "field": "calleridnum", + "alias": "CallerID", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 90, + "MetricId": null, + "custom": 0 + }, { + "field": "membername", + "alias": "AgentName", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 90, + "MetricId": null, + "custom": 0 + }, { + "field": "exitStatus", + "alias": "exitStatus", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 90, + "MetricId": null, + "custom": 0 + }, { + "field": "ticketId", + "alias": "TicketID", + "function": null, + "format": null, + "groupBy": 0, + "orderBy": null, + "CustomReportId": null, + "DefaultMetricId": null, + "DefaultReportId": 90, + "MetricId": null, + "custom": 0 + }]; + + // var newDefaultMetrics = [{ + // "id": 1, + // "name": "Queue - TalkTime", + // "table": "report_queue_history", + // "metric": "UNIX_TIMESTAMP(queuecallercompleteAt)-UNIX_TIMESTAMP(queuecallerleaveAt)" + // }, { + // "id": 2, + // "name": "Queue - Abandon Time", + // "table": "report_queue_history", + // "metric": "UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt)" + // }, { + // "id": 3, + // "name": "Abandoned <10s", + // "table": "report_queue_history", + // "metric": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <10,1,NULL))", + // "description": "Count of abandoned calls within 10 seconds (Short Calls)" + // }, { + // "id": 4, + // "name": "Queue - AnswerTime", + // "table": "report_queue_history", + // "metric": "IF(queuecallercomplete=1,holdtime,null)" + // }, { + // "id": 5, + // "name": "Answered < 10s", + // "table": "report_agent_history", + // "metric": "COUNT(IF(holdtime<10,1,NULL))", + // "description": "Count of answered calls within 10 seconds" + // }, { + // "id": 6, + // "name": "Answered 10-20s", + // "table": "report_agent_history", + // "metric": "COUNT(IF(holdtime >=10 AND holdtime <20,1,NULL))", + // "description": "Count of answered calls between 10 and 20 seconds" + // }, { + // "id": 7, + // "name": "Answered 20-30s", + // "table": "report_agent_history", + // "metric": "COUNT(IF(holdtime >=20 AND holdtime <30,1,NULL))", + // "description": "Count of answered calls between 20 and 30 seconds" + // }, { + // "id": 8, + // "name": "Answered >30s", + // "table": "report_agent_history", + // "metric": "COUNT(IF(holdtime >=30,1,NULL))", + // "description": "Count of answered calls over 30 seconds" + // }, { + // "id": 9, + // "name": "Queue - Exit Time", + // "table": "report_queue_history", + // "metric": "UNIX_TIMESTAMP(queuecallerExitAt)-UNIX_TIMESTAMP(queuecallerjoinAt)" + // }, { + // "id": 10, + // "name": "Abandoned 10-60s", + // "table": "report_queue_history", + // "metric": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=10 AND UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <60,1,NULL))", + // "description": "Count of abandoned calls between 10 and 60 seconds" + // }, { + // "id": 11, + // "name": "Abandoned 60-120s", + // "table": "report_queue_history", + // "metric": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=60 AND UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) <120,1,NULL))", + // "description": "Count of abandoned calls between 60 and 120 seconds" + // }, { + // "id": 12, + // "name": "Queue - Abandoned >120s", + // "table": "report_queue_history", + // "metric": "COUNT(IF(UNIX_TIMESTAMP(queuecallerAbandonAt)-UNIX_TIMESTAMP(queuecallerjoinAt) >=120,1,NULL))", + // "description": "Count of abandoned calls over 120 seconds" + // }, { + // "id": 13, + // "name": "Queue - JoinDate", + // "table": "report_queue_history", + // "metric": "DATE(queuecallerjoinat)", + // "description": "Extract the date of the join queue" + // }, { + // "id": 14, + // "name": "Queue - JoinHour", + // "table": "report_queue_history", + // "metric": "HOUR(queuecallerjoinat)", + // "description": "Extract the hour of the join queue" + // }, { + // "id": 15, + // "name": "Queue - JoinDay", + // "table": "report_queue_history", + // "metric": "DAY(queuecallerjoinat)", + // "description": "Extract the day of the join queue" + // }, { + // "id": 16, + // "name": "Member - Event Duration", + // "table": "report_member_history", + // "metric": "UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt)", + // "description": "Member event duration in seconds" + // }, { + // "id": 17, + // "name": "Member - Total Event Duration", + // "table": "report_member_history", + // "metric": "SEC_TO_TIME(SUM(UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt)))", + // "description": "Total event duration" + // }, { + // "id": 18, + // "name": "Chat - Session Time", + // "table": "report_chat_session_history", + // "metric": "UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)", + // "description": "Session Time", + // }, { + // "id": 19, + // "name": "Chat - Queue", + // "table": "report_chat_session_history", + // "metric": "COUNT(IF(application=\"queue\",1,NULL))", + // "description": "Chat queue application count", + // }, { + // "id": 20, + // "name": "Chat - Agent", + // "table": "report_chat_session_history", + // "metric": "COUNT(IF(application=\"agent\",1,NULL))", + // "description": "Chat agent application count", + // }, { + // "id": 21, + // "name": "Chat - Avg Session Time", + // "table": "report_chat_session_history", + // "metric": "ROUND(AVG(UNIX_TIMESTAMP(completeAt)-UNIX_TIMESTAMP(leaveAt)))", + // "description": "Average session time" + // }, { + // "id": 22, + // "name": "Member - Event Duration (HH:mm:ss)", + // "table": "report_member_history", + // "metric": "SEC_TO_TIME(UNIX_TIMESTAMP(exitAt)-UNIX_TIMESTAMP(enterAt))", + // "description": "Member events duration in time format" + // }, { + // "id": 23, + // "name": "Square - Duration", + // "table": "report_square_history", + // "metric": "UNIX_TIMESTAMP(leaveAt)-UNIX_TIMESTAMP(joinAt)", + // "description": "IVR Duration" + // }, { + // "id": 24, + // "name": "Queue - EndTime Call", + // "table": "report_queue_history", + // "metric": "CASE WHEN queuecallercomplete=1 THEN queuecallercompleteAt ELSE queuecallerLeaveAt END", + // "description": null + // }, { + // "id": 25, + // "name": "Queue - Calls Result", + // "table": "report_queue_history", + // "metric": "CASE WHEN queuecallercomplete=1 THEN \"YES\" ELSE \"NO\" END", + // "description": "Show if a call is answered or not" + // }]; + + models.ReportTree.destroy({ + where: { + id: 1 + } + }) + .then(function() { + return models.ReportTree.create({ + id: 1, + tree: '[{"id":"1","text":"Motion Reports","icon":"icon-book-open","li_attr":{"id":"1"},"a_attr":{"href":"#","id":"1_anchor"},"state":{"loaded":true,"opened":true,"selected":false,"disabled":false},"data":{},"parent":"#"},{"id":"j12_2","text":"Voice","icon":true,"li_attr":{"id":"j12_2"},"a_attr":{"href":"#","id":"j12_2_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"1"},{"id":"j12_7","text":"Queues","icon":true,"li_attr":{"id":"j12_7"},"a_attr":{"href":"#","id":"j12_7_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"j12_2"},{"id":"j60_1","text":"Answered","icon":true,"li_attr":{"id":"j60_1"},"a_attr":{"href":"#","id":"j60_1_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"j12_7"},{"id":"j60_2","text":"Unanswered","icon":true,"li_attr":{"id":"j60_2"},"a_attr":{"href":"#","id":"j60_2_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"j12_7"},{"id":"j60_3","text":"Distribution","icon":true,"li_attr":{"id":"j60_3"},"a_attr":{"href":"#","id":"j60_3_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"j12_7"},{"id":"j51_1","text":"Calls","icon":true,"li_attr":{"id":"j51_1"},"a_attr":{"href":"#","id":"j51_1_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"j12_2"},{"id":"j87_1","text":"Agents","icon":true,"li_attr":{"id":"j87_1"},"a_attr":{"href":"#","id":"j87_1_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"j12_2"},{"id":"j87_2","text":"CallySquare","icon":true,"li_attr":{"id":"j87_2"},"a_attr":{"href":"#","id":"j87_2_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"j12_2"},{"id":"j110_1","text":"Recordings","icon":true,"li_attr":{"id":"j110_1"},"a_attr":{"href":"#","id":"j110_1_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"j12_2"},{"id":"j4_10","text":"Integration","icon":true,"li_attr":{"id":"j4_10"},"a_attr":{"href":"#","id":"j4_10_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"j12_2"},{"id":"j12_3","text":"Chat","icon":true,"li_attr":{"id":"j12_3"},"a_attr":{"href":"#","id":"j12_3_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"1"},{"id":"j12_4","text":"E-Mail","icon":true,"li_attr":{"id":"j12_4"},"a_attr":{"href":"#","id":"j12_4_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"1"},{"id":"j12_6","text":"SMS","icon":true,"li_attr":{"id":"j12_6"},"a_attr":{"href":"#","id":"j12_6_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"1"},{"id":"j12_5","text":"Agents","icon":true,"li_attr":{"id":"j12_5"},"a_attr":{"href":"#","id":"j12_5_anchor"},"state":{"loaded":true,"opened":false,"selected":false,"disabled":false},"data":{},"parent":"1"}]', + }) + }) + .then(function() { + return models.ReportTree.findOrCreate({ + where: { + id: 2 + }, + defaults: { + id: 2, + tree: '[{"id":"1","text":"Custom Reports","icon":"icon-book-open","li_attr":{"id":"1"},"a_attr":{"href":"#","id":"1_anchor"},"state":{"loaded":true,"opened":true,"selected":false,"disabled":false},"data":{},"parent":"#"},{"id":"2","text":"My Reports","icon":true,"li_attr":{"id":"2"},"a_attr":{"href":"#","id":"2_anchor"},"state":{"loaded":true,"opened":true,"selected":false,"disabled":false},"data":{},"parent":"1"}]' + } + }) + }) + // .then(function() { + // return models.DefaultMetric.findAll(); + // }) + // .then(function(oldDefaultMetrics) { + // var bulkDefaultMetrics = []; + // oldDefaultMetrics = _.map(oldDefaultMetrics, 'id'); + // newDefaultMetrics.forEach(function(defaultMet) { + // if (_.includes(oldDefaultMetrics, defaultMet.id)) { + // bulkDefaultMetrics.push(models.DefaultMetric.update(defaultMet, { + // where: { + // id: defaultMet.id + // } + // })); + // } else { + // bulkDefaultMetrics.push(models.DefaultMetric.create(defaultMet)); + // } + // }); + // return bulkDefaultMetrics; + // }) + // .all() + // .then(function() { + // return models.DefaultReport.findAll() + // }) + // .then(function(oldDefaultReports) { + // var bulkDefaultReports = []; + // oldDefaultReports = _.map(oldDefaultReports, 'id'); + // newDefaulReports.forEach(function(defaultRep) { + // if (_.includes(oldDefaultReports, defaultRep.id)) { + // bulkDefaultReports.push(models.DefaultReport.update(defaultRep, { + // where: { + // id: defaultRep.id + // } + // })); + // } else { + // bulkDefaultReports.push(models.DefaultReport.create(defaultRep)); + // } + // }); + // return bulkDefaultReports; + // }) + // .all() + .then(function() { + return models.ReportField.destroy({ + where: { + DefaultReportId: { + $ne: null + } + } + }) + }) + .then(function() { + return models.DefaultReport.destroy({ + where: { + id: { + $ne: null + } + } + }); + }) + .then(function() { + return models.DefaultReport.bulkCreate(newDefaultReports); + }) + .then(function() { + return models.ReportField.bulkCreate(newDefaulReportsFields, { + ignoreDuplicates: true, + individualHooks: true + }) + }).then(function() { + console.log('Populating Analytics'); + }).catch(function(err) { + console.log('Error populating Analytics:', err); + }); + + }) + .catch(function(err) { + console.error(err); + }); diff --git a/server/config/sms/index.js b/server/config/sms/index.js index 845bc65..81fbf23 100644 --- a/server/config/sms/index.js +++ b/server/config/sms/index.js @@ -1 +1,23 @@ -var _0xb697=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x53\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2F\x73\x6D\x73","\x65\x78\x70\x6F\x72\x74\x73","\x69\x6E\x69\x74","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C"];_0xb697[0];var SmsAccount=require(_0xb697[2])[_0xb697[1]];var Sms=require(_0xb697[3]);module[_0xb697[4]]= function(){SmsAccount[_0xb697[6]](function(_0xd454x3){var _0xd454x4= new Sms();_0xd454x4[_0xb697[5]](_0xd454x3)});return SmsAccount[_0xb697[11]]()[_0xb697[10]](function(_0xd454x6){_0xd454x6[_0xb697[9]](function(_0xd454x3){var _0xd454x4= new Sms();_0xd454x4[_0xb697[5]](_0xd454x3)})})[_0xb697[8]](function(_0xd454x5){console[_0xb697[7]](_0xd454x5)})} \ No newline at end of file +'use strict'; +var SmsAccount = require('../../models').SmsAccount; +var Sms = require('./sms'); + + +module.exports = function() { + SmsAccount.afterCreate(function(server) { + var sms = new Sms(); + sms.init(server); + }); + + return SmsAccount + .findAll() + .then(function(servers) { + servers.forEach(function(server) { + var sms = new Sms(); + sms.init(server); + }); + }) + .catch(function(err) { + console.error(err); + }); +} diff --git a/server/config/sms/skebby.js b/server/config/sms/skebby.js index 6cb81ce..4f65a2d 100644 --- a/server/config/sms/skebby.js +++ b/server/config/sms/skebby.js @@ -1 +1,110 @@ -var _0xf04f=["\x71\x75\x65\x72\x79\x73\x74\x72\x69\x6E\x67","\x68\x74\x74\x70\x73","\x72\x65\x71\x75\x65\x73\x74\x2D\x70\x72\x6F\x6D\x69\x73\x65","\x62\x6C\x75\x65\x62\x69\x72\x64","\x74\x65\x78\x74","\x73\x65\x6E\x64\x65\x72\x5F\x6E\x75\x6D\x62\x65\x72","","\x73\x65\x6E\x64\x65\x72\x5F\x73\x74\x72\x69\x6E\x67","\x6D\x65\x74\x68\x6F\x64","\x72\x65\x63\x69\x70\x69\x65\x6E\x74\x73","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x73\x65\x6E\x64\x5F\x73\x6D\x73\x5F\x63\x6C\x61\x73\x73\x69\x63","\x63\x6C\x61\x73\x73\x69\x63","\x73\x65\x6E\x64\x5F\x73\x6D\x73\x5F\x63\x6C\x61\x73\x73\x69\x63\x5F\x72\x65\x70\x6F\x72\x74","\x63\x6C\x61\x73\x73\x69\x63\x2B","\x74\x65\x73\x74\x5F\x73\x65\x6E\x64\x5F\x73\x6D\x73\x5F\x62\x61\x73\x69\x63","\x74\x65\x73\x74","\x62\x61\x73\x69\x63","\x73\x65\x6E\x64\x5F\x73\x6D\x73\x5F\x62\x61\x73\x69\x63","\x55\x54\x46\x2D\x38","\x74\x65\x73\x74\x5F","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x2F\x61\x70\x69\x2F\x73\x65\x6E\x64\x2F\x73\x6D\x73\x65\x61\x73\x79\x2F\x61\x64\x76\x61\x6E\x63\x65\x64\x2F\x68\x74\x74\x70\x2E\x70\x68\x70","\x67\x61\x74\x65\x77\x61\x79\x2E\x73\x6B\x65\x62\x62\x79\x2E\x69\x74","\x50\x4F\x53\x54","\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x78\x2D\x77\x77\x77\x2D\x66\x6F\x72\x6D\x2D\x75\x72\x6C\x65\x6E\x63\x6F\x64\x65\x64","\x6C\x65\x6E\x67\x74\x68","\x75\x74\x66\x38","\x64\x61\x74\x61","\x6F\x6E","\x65\x6E\x64","\x70\x61\x72\x73\x65","\x73\x74\x61\x74\x75\x73","\x73\x75\x63\x63\x65\x73\x73","\x72\x65\x71\x75\x65\x73\x74","\x65\x72\x72\x6F\x72","\x73\x6D\x73\x74\x79\x70\x65","\x66\x72\x6F\x6D","\x2B","\x72\x65\x70\x6C\x61\x63\x65","\x74\x6F","\x62\x6F\x64\x79","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65","\x65\x78\x70\x6F\x72\x74\x73"];var qs=require(_0xf04f[0]);var https=require(_0xf04f[1]);var rp=require(_0xf04f[2]);var Promise=require(_0xf04f[3]);var skebbyMessage=function(_0x6d06x6,_0x6d06x7){var _0x6d06x8=_0x6d06x6[_0xf04f[4]];var _0x6d06x9=_0x6d06x6[_0xf04f[5]]|| _0xf04f[6];var _0x6d06xa=_0x6d06x6[_0xf04f[7]]|| _0xf04f[6];var _0x6d06xb=_0x6d06x6[_0xf04f[8]];var _0x6d06xc=_0x6d06x6[_0xf04f[9]]|| [];var _0x6d06xd=_0x6d06x6[_0xf04f[10]];var _0x6d06xe=_0x6d06x6[_0xf04f[11]];switch(_0x6d06xb){case _0xf04f[13]:_0x6d06xb= _0xf04f[12];break;case _0xf04f[15]:_0x6d06xb= _0xf04f[14];break;case _0xf04f[17]:_0x6d06xb= _0xf04f[16];break;case _0xf04f[18]:;default:_0x6d06xb= _0xf04f[19]};var _0x6d06xf=_0x6d06x6[_0xf04f[17]]|| false;var _0x6d06x10={method:_0x6d06xb,username:_0x6d06xd,password:_0x6d06xe,"\x72\x65\x63\x69\x70\x69\x65\x6E\x74\x73\x5B\x5D":_0x6d06xc,text:_0x6d06x8,charset:_0xf04f[20]};if(_0x6d06x9){_0x6d06x10[_0xf04f[5]]= _0x6d06x9}else {if(_0x6d06xa){_0x6d06x10[_0xf04f[7]]= _0x6d06xa}};if(_0x6d06xf){_0x6d06x10[_0xf04f[8]]= _0xf04f[21]+ _0x6d06x10[_0xf04f[8]]};var _0x6d06x11=false;var _0x6d06x12=qs[_0xf04f[22]](_0x6d06x10);var _0x6d06x13=https[_0xf04f[35]]({port:443,path:_0xf04f[23],host:_0xf04f[24],method:_0xf04f[25],headers:{"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65":_0xf04f[26],"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x4C\x65\x6E\x67\x74\x68":_0x6d06x12[_0xf04f[27]],"\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x45\x6E\x63\x6F\x64\x69\x6E\x67":_0xf04f[28]}},function(_0x6d06x14){var _0x6d06x15=_0xf04f[6];_0x6d06x14[_0xf04f[30]](_0xf04f[29],function(_0x6d06x12){_0x6d06x15+= _0x6d06x12});_0x6d06x14[_0xf04f[30]](_0xf04f[31],function(){if(!_0x6d06x11){var _0x6d06x16=qs[_0xf04f[32]](_0x6d06x15);if(_0x6d06x16[_0xf04f[33]]== _0xf04f[34]){_0x6d06x7(null,{data:_0x6d06x16})}else {_0x6d06x7(_0x6d06x16)};_0x6d06x11= true}})});_0x6d06x13[_0xf04f[31]](_0x6d06x12);_0x6d06x13[_0xf04f[30]](_0xf04f[36],function(_0x6d06x17){if(!_0x6d06x11){_0x6d06x7(_0x6d06x17);_0x6d06x11= true}})};var sendMessage=function(_0x6d06x19,_0x6d06x1a){var _0x6d06x1b={method:_0x6d06x1a[_0xf04f[37]],username:_0x6d06x1a[_0xf04f[10]],password:_0x6d06x1a[_0xf04f[11]],sender_number:/^[\+][0-9]+$/[_0xf04f[17]](_0x6d06x19[_0xf04f[38]])?_0x6d06x19[_0xf04f[38]][_0xf04f[40]](_0xf04f[39],_0xf04f[6]):_0x6d06x19[_0xf04f[38]],recipients:/^[\+][0-9]+$/[_0xf04f[17]](_0x6d06x19[_0xf04f[41]])?_0x6d06x19[_0xf04f[41]][_0xf04f[40]](_0xf04f[39],_0xf04f[6]):_0x6d06x19[_0xf04f[41]],text:_0x6d06x19[_0xf04f[42]]};var _0x6d06x1c=Promise[_0xf04f[43]](skebbyMessage);return _0x6d06x1c(_0x6d06x1b)};module[_0xf04f[45]][_0xf04f[44]]= sendMessage \ No newline at end of file +var qs = require('querystring'); +var https = require('https'); +var rp = require('request-promise'); +var Promise = require('bluebird'); + + +var skebbyMessage = function(input, callback) { + + var text = input.text; + var sender_number = input.sender_number || ""; + var sender_string = input.sender_string || ""; + var method = input.method; + var lrecipients = input.recipients || []; + var username = input.username; + var password = input.password; + + switch (method) { + case 'classic': + method = 'send_sms_classic'; + break; + case 'classic+': + method = 'send_sms_classic_report'; + break; + case 'test': + method = 'test_send_sms_basic'; + break; + case 'basic': + default: + method = 'send_sms_basic'; + + } + + var test = input.test || false; + + var params = { + method: method, + username: username, + password: password, + "recipients[]": lrecipients, + text: text, + charset: "UTF-8", + }; + + if (sender_number) { + params.sender_number = sender_number; + } else if (sender_string) { + params.sender_string = sender_string; + } + + if (test) { + params.method = "test_" + params.method; + } + + var res_done = false; + var data = qs.stringify(params); + + var client = https.request({ + port: 443, + path: "/api/send/smseasy/advanced/http.php", + host: "gateway.skebby.it", + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + "Content-Length": data.length, + "Content-Encoding": "utf8", + } + }, function(res) { + var res_data = ""; + res.on('data', function(data) { + res_data += data; + }); + res.on("end", function() { + if (!res_done) { + var res_parsed = qs.parse(res_data); + if (res_parsed.status == "success") { + callback(null, { + data: res_parsed + }); + } else { + callback(res_parsed); + } + res_done = true; + } + }); + }); + + client.end(data); + client.on('error', function(e) { + if (!res_done) { + callback(e); + res_done = true; + } + }); +}; + +var sendMessage = function(message, account) { + + var _message = { + method: account.smstype, + username: account.username, + password: account.password, + sender_number: /^[\+][0-9]+$/.test(message.from) ? message.from.replace("+", "") : message.from, + recipients: /^[\+][0-9]+$/.test(message.to) ? message.to.replace("+", "") : message.to, + text: message.body + }; + var send = Promise.promisify(skebbyMessage); + return send(_message); +}; + +module.exports.sendMessage = sendMessage; diff --git a/server/config/sms/sms.js b/server/config/sms/sms.js index 113e2b7..2fe7f71 100644 --- a/server/config/sms/sms.js +++ b/server/config/sms/sms.js @@ -1 +1,285 @@ -var _0x61e3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x62\x6C\x75\x65\x62\x69\x72\x64","\x2E\x2E\x2F\x75\x74\x69\x6C","\x6D\x6F\x6D\x65\x6E\x74","\x70\x61\x74\x68","\x75\x74\x69\x6C","\x66\x73","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x6D\x73\x52\x6F\x6F\x6D","\x53\x6D\x73\x4D\x65\x73\x73\x61\x67\x65","\x53\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74","\x52\x65\x70\x6F\x72\x74\x53\x6D\x73","\x41\x63\x74\x69\x6F\x6E","\x43\x6F\x6E\x74\x61\x63\x74","\x2E\x2E\x2F\x72\x6F\x75\x74\x69\x6E\x67\x2F\x73\x63\x68\x65\x64\x75\x6C\x65\x72","\x53\x6D\x73\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x61\x63\x63\x6F\x75\x6E\x74","\x69\x6E\x69\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x53\x4D\x53\x20\x2D\x20\x41\x63\x63\x6F\x75\x6E\x74\x20","\x6E\x61\x6D\x65","\x20\x53\x4D\x53\x20\x43\x52\x45\x41\x54\x45","\x69\x64","\x6F\x6E\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x63\x63\x6F\x75\x6E\x74\x69\x64","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x64","\x63\x68\x61\x6E\x67\x65\x64","\x61\x63\x63\x65\x70\x74","\x77\x65\x62\x68\x6F\x6F\x6B","\x72\x65\x6A\x65\x63\x74\x65\x64\x41\x74","\x72\x65\x6A\x65\x63\x74","\x53\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x73\x74\x61\x74\x75\x73","\x43\x4C\x4F\x53\x45\x44","\x63\x6C\x6F\x73\x65","\x6F\x6E\x52\x65\x6D\x6F\x76\x65","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x52\x45\x43\x45\x49\x56\x45\x44","\x73\x6D\x73","\x25\x73\x2E\x25\x73","\x75\x6E\x69\x78","\x66\x6F\x72\x6D\x61\x74","\x53\x6D\x73\x52\x6F\x6F\x6D\x49\x64","\x70\x68\x6F\x6E\x65","\x66\x72\x6F\x6D","\x6F\x6E\x53\x65\x6E\x64","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x74\x61\x74\x65","\x20\x53\x4D\x53\x20\x55\x50\x44\x41\x54\x45","\x5B\x53\x4D\x53\x20\x2D\x20\x41\x63\x63\x6F\x75\x6E\x74\x20","\x20\x53\x4D\x53\x20\x44\x45\x53\x54\x52\x4F\x59","\x53\x45\x4E\x44\x49\x4E\x47","\x65\x72\x72","\x45\x72\x72\x6F\x72\x20\x75\x70\x64\x61\x74\x69\x6E\x67\x20\x65\x72\x72\x6F\x72\x20\x73\x74\x61\x74\x75\x73","\x63\x61\x74\x63\x68","\x46\x41\x49\x4C\x45\x44","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x74\x68\x65\x6E","\x63\x6F\x64\x65","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x75\x70\x64\x61\x74\x65","\x53\x45\x4E\x54","\x20\x53\x4D\x53\x20\x53\x45\x4E\x54\x2E\x2E\x2E","\x74\x79\x70\x65","\x73\x6B\x65\x62\x62\x79","\x64\x61\x74\x61","\x53\x45\x4E\x44\x49\x4E\x47\x20\x53\x4D\x53\x2E\x2E\x2E","\x2E\x6A\x73","\x6A\x6F\x69\x6E","\x65\x78\x69\x73\x74\x73\x53\x79\x6E\x63","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65","\x53\x4D\x53\x20\x2D\x20\x49\x4E\x54\x45\x52\x47\x52\x41\x54\x49\x4F\x4E\x20","\x20\x4E\x4F\x54\x20\x46\x4F\x55\x4E\x44\x21\x21","\x4C\x69\x73\x74\x49\x64","\x66\x69\x6E\x64\x4F\x72\x43\x72\x65\x61\x74\x65","\x61\x64\x64\x55\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x76\x6F\x69\x63\x65\x53\x6F\x75\x72\x63\x65","\x61\x75\x74\x6F","\x73\x6D\x73\x4F\x75\x74","\x75\x73\x65\x72","\x73\x65\x74\x53\x6D\x73\x52\x6F\x6F\x6D","\x61\x6C\x6C","\x74\x6F","\x50\x45\x4E\x44\x49\x4E\x47","\x63\x72\x65\x61\x74\x65","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x44\x45\x53\x43","\x66\x69\x6E\x64\x41\x6C\x6C","\x72\x65\x71\x75\x65\x73\x74\x20\x66\x61\x69\x6C\x65\x64\x21","\x72\x65\x71\x75\x65\x73\x74\x20\x73\x75\x63\x63\x65\x73\x73\x65\x66\x75\x6C\x21","\x73\x65\x6E\x64\x52\x65\x71\x75\x65\x73\x74","\x61\x63\x63\x65\x70\x74\x4D\x65\x74\x68\x6F\x64","\x61\x63\x63\x65\x70\x74\x55\x72\x6C","\x53\x4D\x53\x20\x61\x63\x63\x6F\x75\x6E\x74\x20\x3C","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x61\x63\x63\x65\x70\x74\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x6C\x65\x6E\x67\x74\x68","\x61\x63\x74\x69\x6F\x6E\x73","\x65\x6E\x61\x62\x6C\x65\x64","\x65\x78\x65\x63\x41\x63\x74\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x65\x6A\x65\x63\x74\x4D\x65\x74\x68\x6F\x64","\x72\x65\x6A\x65\x63\x74\x55\x72\x6C","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x72\x65\x6A\x65\x63\x74\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x63\x6C\x6F\x73\x65\x4D\x65\x74\x68\x6F\x64","\x63\x6C\x6F\x73\x65\x55\x72\x6C","\x3E\x20\x65\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x63\x6C\x6F\x73\x65\x20\x77\x65\x62\x68\x6F\x6F\x6B","\x57\x65\x62\x68\x6F\x6F\x6B\x20\x6E\x6F\x74\x20\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x64","\x65\x78\x70\x6F\x72\x74\x73"];_0x61e3[0];var _=require(_0x61e3[1]);var Promise=require(_0x61e3[2]);var Util=require(_0x61e3[3]);var moment=require(_0x61e3[4]);var path=require(_0x61e3[5]);var util=require(_0x61e3[6]);var fs=require(_0x61e3[7]);var Agent=require(_0x61e3[9])[_0x61e3[8]];var SmsRoom=require(_0x61e3[9])[_0x61e3[10]];var SmsMessage=require(_0x61e3[9])[_0x61e3[11]];var SmsAccount=require(_0x61e3[9])[_0x61e3[12]];var ReportSms=require(_0x61e3[9])[_0x61e3[13]];var Action=require(_0x61e3[9])[_0x61e3[14]];var path=require(_0x61e3[5]);var fs=require(_0x61e3[7]);var Contact=require(_0x61e3[9])[_0x61e3[15]];var Scheduler=require(_0x61e3[16]);function Sms(){console[_0x61e3[18]](_0x61e3[17]);this[_0x61e3[19]]= null}Sms[_0x61e3[21]][_0x61e3[20]]= function(_0x25dcx11){var _0x25dcx12=this;console[_0x61e3[18]](_0x61e3[22]+ _0x25dcx11[_0x61e3[23]]+ _0x61e3[24]);_0x25dcx12[_0x61e3[19]]= _0x25dcx11;SmsAccount[_0x61e3[27]](function(_0x25dcx11){if(_0x25dcx12[_0x61e3[19]]&& _0x25dcx11[_0x61e3[25]]=== _0x25dcx12[_0x61e3[19]][_0x61e3[25]]){_0x25dcx12[_0x61e3[26]](_0x25dcx11)}});ReportSms[_0x61e3[27]](function(_0x25dcx11){if(_0x25dcx12[_0x61e3[19]]&& _0x25dcx11[_0x61e3[28]]== _0x25dcx12[_0x61e3[19]][_0x61e3[25]]){if(_0x25dcx11[_0x61e3[30]](_0x61e3[29])){_0x25dcx12[_0x61e3[32]](_0x25dcx11,_0x61e3[31])};if(_0x25dcx11[_0x61e3[30]](_0x61e3[33])){_0x25dcx12[_0x61e3[32]](_0x25dcx11,_0x61e3[34])}}});SmsRoom[_0x61e3[27]](function(_0x25dcx11){if(_0x25dcx12[_0x61e3[19]]&& _0x25dcx11[_0x61e3[35]]== _0x25dcx12[_0x61e3[19]][_0x61e3[25]]){if(_0x25dcx11[_0x61e3[30]](_0x61e3[36])&& _0x25dcx11[_0x61e3[36]]=== _0x61e3[37]){_0x25dcx12[_0x61e3[32]](_0x25dcx11,_0x61e3[38])}}});SmsAccount[_0x61e3[40]](function(_0x25dcx11){if(_0x25dcx12[_0x61e3[19]]&& _0x25dcx11[_0x61e3[25]]=== _0x25dcx12[_0x61e3[19]][_0x61e3[25]]){_0x25dcx12[_0x61e3[39]](_0x25dcx11)}});SmsMessage[_0x61e3[51]](function(_0x25dcx11,_0x25dcx13){if(_0x25dcx12[_0x61e3[19]]&& _0x25dcx12[_0x61e3[19]][_0x61e3[25]]== _0x25dcx11[_0x61e3[41]][_0x61e3[35]]){if(_0x25dcx11[_0x61e3[36]]=== _0x61e3[42]){var _0x25dcx14= new Scheduler({channel:_0x61e3[43],uniqueid:util[_0x61e3[46]](_0x61e3[44],moment()[_0x61e3[45]](),_0x25dcx11.SmsRoomId),messageid:_0x25dcx11[_0x61e3[25]],roomid:_0x25dcx11[_0x61e3[47]],accountid:_0x25dcx12[_0x61e3[19]][_0x61e3[25]],accountname:_0x25dcx12[_0x61e3[19]][_0x61e3[23]],accountnumber:_0x25dcx12[_0x61e3[19]][_0x61e3[48]],from:_0x25dcx11[_0x61e3[49]]});_0x25dcx14[_0x61e3[20]]()};_0x25dcx12[_0x61e3[50]](_0x25dcx11,_0x25dcx13)}})};Sms[_0x61e3[21]][_0x61e3[26]]= function(_0x25dcx11){if(!_0x25dcx11[_0x61e3[30]](_0x61e3[52])){console[_0x61e3[18]](_0x61e3[22]+ _0x25dcx11[_0x61e3[23]]+ _0x61e3[53]);this[_0x61e3[19]]= null;this[_0x61e3[19]]= _0x25dcx11}};Sms[_0x61e3[21]][_0x61e3[39]]= function(_0x25dcx11){console[_0x61e3[18]](_0x61e3[54]+ _0x25dcx11[_0x61e3[23]]+ _0x61e3[55]);this[_0x61e3[19]]= null};Sms[_0x61e3[21]][_0x61e3[50]]= function(_0x25dcx15,_0x25dcx13){var _0x25dcx16=this[_0x61e3[19]];var _0x25dcx17=_0x25dcx15;var _0x25dcx18;var _0x25dcx19;if(_0x25dcx17[_0x61e3[36]]=== _0x61e3[56]){return Promise[_0x61e3[88]]([])[_0x61e3[63]](getSmsRoom(_0x25dcx17,this[_0x61e3[19]][_0x61e3[23]]))[_0x61e3[63]](function(_0x25dcx1f){_0x25dcx18= _0x25dcx1f;return _0x25dcx17[_0x61e3[87]](_0x25dcx1f[_0x61e3[25]])})[_0x61e3[63]](function(){return _0x25dcx18[_0x61e3[62]]({voiceSource:_0x25dcx18[_0x61e3[83]]|| _0x25dcx17[_0x61e3[84]],lastEvent:_0x61e3[56],lastEventAt:moment()[_0x61e3[46]](_0x61e3[61]),smsOut:++_0x25dcx18[_0x61e3[85]]},{individualHooks:true,user:_0x25dcx13[_0x61e3[86]]})})[_0x61e3[63]](function(_0x25dcx1e){return Agent[_0x61e3[82]](_0x25dcx17.UserId)})[_0x61e3[63]](function(_0x25dcx1d){_0x25dcx19= _0x25dcx1d;return _0x25dcx18[_0x61e3[81]](_0x25dcx19)})[_0x61e3[63]](function(){if(_0x25dcx16[_0x61e3[79]]){return Contact[_0x61e3[80]]({where:{ListId:_0x25dcx16[_0x61e3[79]],mobile:_0x25dcx17[_0x61e3[49]]},defaults:{ListId:_0x25dcx16[_0x61e3[79]],mobile:_0x25dcx17[_0x61e3[49]]}})}else {return []}})[_0x61e3[63]](function(){console[_0x61e3[18]](_0x61e3[72]);var _0x25dcx1c=path[_0x61e3[74]](__dirname,_0x25dcx16[_0x61e3[69]]+ _0x61e3[73]);if(fs[_0x61e3[75]](_0x25dcx1c)){return require(_0x25dcx1c)[_0x61e3[76]](_0x25dcx17,_0x25dcx16)}else {throw new Error(_0x61e3[77]+ _0x25dcx16[_0x61e3[69]]+ _0x61e3[78])}})[_0x61e3[63]](function(_0x25dcx1b){console[_0x61e3[18]](_0x61e3[68]);return _0x25dcx17[_0x61e3[66]]({status:(_0x25dcx16[_0x61e3[69]]== _0x61e3[70])?_0x61e3[67]:_0x25dcx1b[_0x61e3[36]],skebby_message_id:(_0x25dcx16[_0x61e3[69]]== _0x61e3[70])?_0x25dcx1b[_0x61e3[71]][_0x61e3[25]]:null,res_data:JSON[_0x61e3[65]](_0x25dcx1b)})})[_0x61e3[63]](function(){return _0x25dcx18[_0x61e3[62]]({lastEvent:_0x61e3[67],lastEventAt:moment()[_0x61e3[46]](_0x61e3[61])})})[_0x61e3[59]](function(_0x25dcx1a){console[_0x61e3[18]](_0x61e3[57],_0x25dcx1a);_0x25dcx17[_0x61e3[66]]({status:_0x61e3[60],errorcode:_0x25dcx1a[_0x61e3[64]],res_data:JSON[_0x61e3[65]](_0x25dcx1a)})[_0x61e3[63]](function(){return _0x25dcx18[_0x61e3[62]]({lastEvent:_0x61e3[60],lastEventAt:moment()[_0x61e3[46]](_0x61e3[61])})})[_0x61e3[59]](function(_0x25dcx1a){console[_0x61e3[18]](_0x61e3[58])})})}};function getSmsRoom(_0x25dcx17,_0x25dcx21){return function(){if(_0x25dcx17[_0x61e3[47]]){return SmsRoom[_0x61e3[82]](_0x25dcx17.SmsRoomId)}else {return SmsRoom[_0x61e3[94]]({limit:1,where:{contact:_0x25dcx17[_0x61e3[89]],SmsAccountId:_0x25dcx17[_0x61e3[35]]},order:[[_0x61e3[92],_0x61e3[93]]]})[_0x61e3[63]](function(_0x25dcx22){var _0x25dcx23=_0x25dcx22[0];if(!_0x25dcx23|| _0x25dcx23[_0x61e3[36]]=== _0x61e3[37]){var _0x25dcx24=_0x25dcx23?_0x25dcx23[_0x61e3[25]]:null;return SmsRoom[_0x61e3[91]]({contact:_0x25dcx17[_0x61e3[89]],SmsAccountId:_0x25dcx17[_0x61e3[35]],status:_0x25dcx17[_0x61e3[84]]?_0x61e3[37]:_0x61e3[90],ParentId:_0x25dcx24,account:_0x25dcx21})}else {return _0x25dcx23}})}}}function execRequest(_0x25dcx11,_0x25dcx26,_0x25dcx27){Util[_0x61e3[97]](_0x25dcx11,_0x25dcx26,_0x25dcx27)[_0x61e3[63]](function(_0x25dcx28){console[_0x61e3[18]](_0x61e3[96])})[_0x61e3[59]](function(_0x25dcx1a){console[_0x61e3[18]](_0x61e3[95])})}Sms[_0x61e3[21]][_0x61e3[32]]= function(_0x25dcx11,_0x25dcx29){var _0x25dcx16=this[_0x61e3[19]];switch(_0x25dcx29){case _0x61e3[31]:if(_0x25dcx16[_0x61e3[98]]&& _0x25dcx16[_0x61e3[99]]){console[_0x61e3[18]](_0x61e3[100]+ _0x25dcx16[_0x61e3[23]]+ _0x61e3[101]);execRequest(_0x25dcx11[_0x61e3[41]],_0x25dcx16[_0x61e3[98]],_0x25dcx16[_0x61e3[99]])};if(_0x25dcx16[_0x61e3[103]][_0x61e3[102]]){_[_0x61e3[106]](_0x25dcx16[_0x61e3[103]],function(_0x25dcx2a){if(_0x25dcx2a[_0x61e3[104]]){Util[_0x61e3[105]](_0x25dcx2a,_0x25dcx11)}})};break;case _0x61e3[34]:if(_0x25dcx16[_0x61e3[107]]&& _0x25dcx16[_0x61e3[108]]){console[_0x61e3[18]](_0x61e3[100]+ _0x25dcx16[_0x61e3[23]]+ _0x61e3[109]);execRequest(_0x25dcx11[_0x61e3[41]],_0x25dcx16[_0x61e3[107]],_0x25dcx16[_0x61e3[108]])};break;case _0x61e3[38]:if(_0x25dcx16[_0x61e3[110]]&& _0x25dcx16[_0x61e3[111]]){console[_0x61e3[18]](_0x61e3[100]+ _0x25dcx16[_0x61e3[23]]+ _0x61e3[112]);execRequest(_0x25dcx11[_0x61e3[41]],_0x25dcx16[_0x61e3[110]],_0x25dcx16[_0x61e3[111]])};break;default:console[_0x61e3[18]](_0x61e3[113])}};module[_0x61e3[114]]= Sms \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Promise = require('bluebird'); +var Util = require('../util'); +var moment = require('moment'); +var path = require('path'); +var util = require('util'); +var fs = require('fs'); +var Agent = require('../../models').User; +var SmsRoom = require('../../models').SmsRoom; +var SmsMessage = require('../../models').SmsMessage; +var SmsAccount = require('../../models').SmsAccount; +var ReportSms = require('../../models').ReportSms; +var Action = require('../../models').Action; +var path = require('path'); +var fs = require('fs'); +var Contact = require('../../models').Contact; + + +var Scheduler = require('../routing/scheduler'); + +function Sms() { + console.log('Sms Initialization...'); + this.account = null; +} + +Sms.prototype.init = function(doc) { + var self = this; + console.log("SMS - Account " + doc.name + " SMS CREATE"); + self.account = doc; + SmsAccount.afterUpdate(function(doc) { + if (self.account && doc.id === self.account.id) { + self.onUpdate(doc); + } + }); + ReportSms.afterUpdate(function(doc) { + if (self.account && doc.accountid == self.account.id) { + if (doc.changed('connectid')) { + self.webhook(doc, 'accept'); + } + if (doc.changed('rejectedAt')) { + self.webhook(doc, 'reject'); + } + } + }); + SmsRoom.afterUpdate(function(doc) { + if (self.account && doc.SmsAccountId == self.account.id) { + if (doc.changed('status') && doc.status === 'CLOSED') { + self.webhook(doc, 'close'); + } + } + }) + SmsAccount.afterDestroy(function(doc) { + if (self.account && doc.id === self.account.id) { + self.onRemove(doc); + } + }); + SmsMessage.afterCreate(function(doc, opt) { + + if (self.account && self.account.id == doc.dataValues.SmsAccountId) { + + if (doc.status === 'RECEIVED') { + var scheduler = new Scheduler({ + channel: 'sms', + uniqueid: util.format('%s.%s', moment().unix(), doc.SmsRoomId), + messageid: doc.id, + roomid: doc.SmsRoomId, + accountid: self.account.id, + accountname: self.account.name, + accountnumber: self.account.phone, + from: doc.from + }) + + scheduler.init(); + } + + self.onSend(doc, opt); + } + }); +}; + +Sms.prototype.onUpdate = function(doc) { + if (!doc.changed('state')) { + console.log("SMS - Account " + doc.name + " SMS UPDATE"); + this.account = null; + this.account = doc; + } +} + +Sms.prototype.onRemove = function(doc) { + console.log("[SMS - Account " + doc.name + " SMS DESTROY"); + this.account = null; +} + +Sms.prototype.onSend = function(smsMessage, opt) { + // var self = this; + var _Account = this.account; + var _mMessage = smsMessage; + var _Room; + var _mAgent; + + if (_mMessage.status === 'SENDING') { + + return Promise + .all([]) + .then(getSmsRoom(_mMessage, this.account.name)) + .then(function(smsRoom) { + _Room = smsRoom; + return _mMessage + .setSmsRoom(smsRoom.id); + }) + .then(function() { + return _Room + .updateAttributes({ + voiceSource: _Room.voiceSource || _mMessage.auto, + lastEvent: 'SENDING', + lastEventAt: moment().format('YYYY-MM-DD HH:mm:ss'), + smsOut: ++_Room.smsOut + }, { + individualHooks: true, + user: opt.user + }); + }) + .then(function(message) { + return Agent. + findById(_mMessage.UserId); + }) + .then(function(mAgent) { + _mAgent = mAgent; + return _Room + .addUser(_mAgent); + }) + .then(function() { + if (_Account.ListId) { + return Contact + .findOrCreate({ + where: { + ListId: _Account.ListId, + mobile: _mMessage.from + }, + defaults: { + ListId: _Account.ListId, + mobile: _mMessage.from + } + }); + } else { + return []; + } + }) + .then(function() { + console.log("SENDING SMS..."); + var file = path.join(__dirname, _Account.type + '.js'); + if (fs.existsSync(file)) { + return require(file).sendMessage(_mMessage, _Account) + } else { + throw new Error("SMS - INTERGRATION " + _Account.type + " NOT FOUND!!"); + } + }) + .then(function(res) { + // console.log('response', response); + console.log(" SMS SENT..."); + return _mMessage + .update({ + status: (_Account.type == 'skebby') ? 'SENT' : res.status, + skebby_message_id: (_Account.type == 'skebby') ? res.data.id : null, + res_data: JSON.stringify(res) + }) + }) + .then(function() { + return _Room + .updateAttributes({ + lastEvent: 'SENT', + lastEventAt: moment().format('YYYY-MM-DD HH:mm:ss') + }); + }) + .catch(function(err) { + console.log('err', err); + _mMessage + .update({ + status: 'FAILED', + errorcode: err.code, + res_data: JSON.stringify(err) + }) + .then(function() { + return _Room + .updateAttributes({ + lastEvent: 'FAILED', + lastEventAt: moment().format('YYYY-MM-DD HH:mm:ss') + }); + }) + .catch(function(err) { + console.log('Error updating error status'); + }); + + }) + } +} + +function getSmsRoom(_mMessage, name) { + return function() { + if (_mMessage.SmsRoomId) { + return SmsRoom + .findById(_mMessage.SmsRoomId) + } else { + return SmsRoom + .findAll({ + limit: 1, + where: { + contact: _mMessage.to, + SmsAccountId: _mMessage.SmsAccountId + }, + order: [ + ['createdAt', 'DESC'] + ] + }) + .then(function(smsroom) { + var room = smsroom[0]; + if (!room || room.status === 'CLOSED') { + var parentID = room ? room.id : null; + return SmsRoom + .create({ + contact: _mMessage.to, + SmsAccountId: _mMessage.SmsAccountId, + status: _mMessage.auto ? 'CLOSED' : 'PENDING', + ParentId: parentID, + account: name + }) + } else { + return room; + } + }) + } + + } +} + + +function execRequest(doc, method, url) { + Util.sendRequest(doc, method, url) + .then(function(values) { + console.log('request successeful!'); + + }) + .catch(function(err) { + console.log('request failed!'); + + }) +} + +Sms.prototype.webhook = function(doc, hook) { + var _Account = this.account; + + switch (hook) { + case 'accept': + if (_Account.acceptMethod && _Account.acceptUrl) { + console.log('SMS account <' + _Account.name + '> executing accept webhook'); + execRequest(doc.dataValues, _Account.acceptMethod, _Account.acceptUrl); + } + if (_Account.actions.length) { + _.forEach(_Account.actions, function(action) { + if (action.enabled) { + Util.execAction(action, doc); + } + }) + } + break; + case 'reject': + if (_Account.rejectMethod && _Account.rejectUrl) { + console.log('SMS account <' + _Account.name + '> executing reject webhook'); + execRequest(doc.dataValues, _Account.rejectMethod, _Account.rejectUrl); + } + break; + case 'close': + if (_Account.closeMethod && _Account.closeUrl) { + console.log('SMS account <' + _Account.name + '> executing close webhook'); + execRequest(doc.dataValues, _Account.closeMethod, _Account.closeUrl); + } + break; + default: + console.log('Webhook not recognized'); + } +} + +module.exports = Sms; diff --git a/server/config/sms/twilio.js b/server/config/sms/twilio.js index 36eb8f2..b4949ef 100644 --- a/server/config/sms/twilio.js +++ b/server/config/sms/twilio.js @@ -1 +1,22 @@ -var _0x8895=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x74\x77\x69\x6C\x69\x6F","\x53\x6D\x73\x4D\x65\x73\x73\x61\x67\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x62\x6C\x75\x65\x62\x69\x72\x64","\x73\x69\x64","\x74\x6F\x6B\x65\x6E","\x72\x65\x6D\x6F\x74\x65","\x2F\x61\x70\x69\x2F\x73\x6D\x73\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73\x2F","\x69\x64","\x2F\x6D\x65\x73\x73\x61\x67\x65\x2F","\x2F\x75\x70\x64\x61\x74\x65","\x73\x65\x6E\x64\x4D\x65\x73\x73\x61\x67\x65","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x74\x6F","\x74\x65\x73\x74","\x2B","\x66\x72\x6F\x6D","\x62\x6F\x64\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x8895[0];var twilio=require(_0x8895[1]);var SmsMessage=require(_0x8895[3])[_0x8895[2]];var Promise=require(_0x8895[4]);var sendMessage=function(_0x87dax5,_0x87dax6){var _0x87dax7=twilio(_0x87dax6[_0x8895[5]],_0x87dax6[_0x8895[6]]);var _0x87dax8=_0x87dax6[_0x8895[7]]+ _0x8895[8]+ _0x87dax6[_0x8895[9]]+ _0x8895[10]+ _0x87dax5[_0x8895[9]]+ _0x8895[11];var _0x87dax9=Promise[_0x8895[13]](_0x87dax7[_0x8895[12]]);return _0x87dax9({to:/^[\+][0-9]+$/[_0x8895[15]](_0x87dax5[_0x8895[14]])?_0x87dax5[_0x8895[14]]:_0x8895[16]+ _0x87dax5[_0x8895[14]],from:/^[\+][0-9]+$/[_0x8895[15]](_0x87dax5[_0x8895[17]])?_0x87dax5[_0x8895[17]]:_0x8895[16]+ _0x87dax5[_0x8895[17]],body:_0x87dax5[_0x8895[18]],StatusCallback:_0x87dax8})};module[_0x8895[19]][_0x8895[12]]= sendMessage \ No newline at end of file +'use strict'; +var twilio = require('twilio'); +// https://twilio.github.io/twilio-node/ +var SmsMessage = require('../../models').SmsMessage; +var Promise = require('bluebird'); + + +var sendMessage = function(message, account) { + var client = twilio(account.sid, account.token); + var url = account.remote + '/api/sms/accounts/' + account.id + '/message/' + + message.id + '/update'; + + var send = Promise.promisify(client.sendMessage); + return send({ + to: /^[\+][0-9]+$/.test(message.to) ? message.to : '+' + message.to, // Any number Twilio can deliver to + from: /^[\+][0-9]+$/.test(message.from) ? message.from : '+' + message.from, // A number you bought from Twilio and can use for outbound communication + body: message.body, // body of the SMS message + StatusCallback: url + }); +} + +module.exports.sendMessage = sendMessage; diff --git a/server/config/smtp/index.js b/server/config/smtp/index.js index 39a8a17..60a6f38 100644 --- a/server/config/smtp/index.js +++ b/server/config/smtp/index.js @@ -1 +1,131 @@ -var _0x5d81=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x75\x74\x69\x6C","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x65\x72\x72\x6F\x72","\x6F\x6E","\x63\x6C\x6F\x73\x65","\x53\x4D\x54\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x45\x58\x49\x54\x45\x44\x20\x57\x49\x54\x48\x20\x43\x4F\x44\x45\x20\x25\x73","\x66\x6F\x72\x6D\x61\x74","\x6C\x6F\x67","\x6D\x65\x73\x73\x61\x67\x65","\x74\x79\x70\x65","\x75\x70\x64\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x74\x68\x65\x6E","\x72\x6F\x6F\x6D\x49\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x6D\x73\x67\x49\x64","\x73\x74\x61\x74\x65","\x63\x61\x74\x63\x68","\x73\x6F\x75\x72\x63\x65","\x2F\x73\x6D\x74\x70","\x66\x6F\x72\x6B","\x65\x78\x70\x6F\x72\x74\x73","\x65\x78\x69\x74","\x6B\x69\x6C\x6C","\x66\x72\x6F\x6D","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x72\x65\x74\x72\x79\x53\x65\x6E\x64","\x73\x65\x6E\x64","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x53\x45\x4E\x44\x49\x4E\x47","\x72\x65\x74\x72\x79","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x69\x64","\x68\x6F\x73\x74","\x70\x61\x73\x73\x77\x6F\x72\x64","\x70\x6F\x72\x74","\x73\x73\x6C","\x53\x4D\x54\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x55\x50\x44\x41\x54\x45\x44\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20","\x70\x69\x64","\x53\x4D\x54\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x44\x45\x53\x54\x52\x4F\x59\x45\x44\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x66\x6F\x72\x45\x61\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C"];_0x5d81[0];const util=require(_0x5d81[1]);const cp=require(_0x5d81[2]);const ms=require(_0x5d81[4])[_0x5d81[3]];const msg=require(_0x5d81[4])[_0x5d81[5]];const rm=require(_0x5d81[4])[_0x5d81[6]];function fork(_0xa795x7,_0xa795x8){return cp[_0x5d81[25]](__dirname+ _0x5d81[24],[_0xa795x7,_0xa795x8])[_0x5d81[8]](_0x5d81[13],function(_0xa795xb){if(_0xa795xb[_0x5d81[14]]=== _0x5d81[15]){return msg[_0x5d81[19]](_0xa795xb[_0x5d81[20]])[_0x5d81[17]](function(_0xa795xd){return _0xa795xd[_0x5d81[15]](_0xa795xb)})[_0x5d81[17]](function(){return rm[_0x5d81[19]](_0xa795xb[_0x5d81[18]])})[_0x5d81[17]](function(_0xa795xc){return _0xa795xc[_0x5d81[15]]({lastEvent:_0xa795xb[_0x5d81[16]]})})};if(_0xa795xb[_0x5d81[14]]=== _0x5d81[21]){return ms[_0x5d81[19]](_0xa795x7)[_0x5d81[17]](function(_0xa795xe){return _0xa795xe[_0x5d81[15]]({state:_0xa795xb[_0x5d81[21]],source:_0xa795xb[_0x5d81[23]]|| null})})[_0x5d81[17]](function(){console[_0x5d81[12]](_0xa795xb[_0x5d81[12]])})[_0x5d81[22]](function(_0xa795x9){console[_0x5d81[7]](_0xa795x9)})}})[_0x5d81[8]](_0x5d81[9],function(_0xa795xa){console[_0x5d81[12]](util[_0x5d81[11]](_0x5d81[10],_0xa795x8,_0xa795xa))})[_0x5d81[8]](_0x5d81[7],function(_0xa795x9){console[_0x5d81[7]](_0xa795x9)})}module[_0x5d81[26]]= function(){var _0xa795xf={};process[_0x5d81[8]](_0x5d81[27],function(_0xa795xa){for(var _0xa795x10 in _0xa795xf){if(_0xa795xf[_0xa795x10]){_0xa795xf[_0xa795x10][_0x5d81[28]]()}}});msg[_0x5d81[33]](function(_0xa795xd){if(_0xa795xf[_0xa795xd[_0x5d81[29]]]){_0xa795xd[_0x5d81[30]][_0x5d81[14]]= _0x5d81[13];_0xa795xd[_0x5d81[30]][_0x5d81[31]]= 0;_0xa795xf[_0xa795xd[_0x5d81[29]]][_0x5d81[32]](_0xa795xd[_0x5d81[30]])}});msg[_0x5d81[37]](function(_0xa795xd){if(_0xa795xd[_0x5d81[34]](_0x5d81[16])&& _0xa795xd[_0x5d81[16]]=== _0x5d81[35]){if(_0xa795xf[_0xa795xd[_0x5d81[29]]]){_0xa795xd[_0x5d81[30]][_0x5d81[14]]= _0x5d81[13];_0xa795xd[_0x5d81[30]][_0x5d81[31]]= _0xa795xd[_0x5d81[30]][_0x5d81[36]]+ 1;_0xa795xf[_0xa795xd[_0x5d81[29]]][_0x5d81[32]](_0xa795xd[_0x5d81[30]])}}});ms[_0x5d81[33]](function(_0xa795xe){_0xa795xf[_0xa795xe[_0x5d81[38]]]= fork(_0xa795xe[_0x5d81[39]],_0xa795xe[_0x5d81[38]])});ms[_0x5d81[37]](function(_0xa795xe){if(_0xa795xf[_0xa795xe[_0x5d81[38]]]){if((!_0xa795xe[_0x5d81[34]](_0x5d81[21])&& !_0xa795xe[_0x5d81[34]](_0x5d81[23]))|| _0xa795xe[_0x5d81[34]](_0x5d81[40])|| _0xa795xe[_0x5d81[34]](_0x5d81[38])|| _0xa795xe[_0x5d81[34]](_0x5d81[41])|| _0xa795xe[_0x5d81[34]](_0x5d81[42])|| _0xa795xe[_0x5d81[34]](_0x5d81[43])){_0xa795xf[_0xa795xe[_0x5d81[38]]][_0x5d81[28]]();_0xa795xf[_0xa795xe[_0x5d81[38]]]= null;_0xa795xf[_0xa795xe[_0x5d81[38]]]= fork(_0xa795xe[_0x5d81[39]],_0xa795xe[_0x5d81[38]]);console[_0x5d81[12]](util[_0x5d81[11]](_0x5d81[44],_0xa795xe[_0x5d81[39]],_0xa795xf[_0xa795xe[_0x5d81[38]]][_0x5d81[45]]))}else {_0xa795xf[_0xa795xe[_0x5d81[38]]][_0x5d81[32]]({type:_0x5d81[21],state:_0xa795xe[_0x5d81[21]],source:_0xa795xe[_0x5d81[23]],username:_0xa795xe[_0x5d81[38]]})}}});ms[_0x5d81[47]](function(_0xa795xe){if(_0xa795xf[_0xa795xe[_0x5d81[38]]]){console[_0x5d81[12]](util[_0x5d81[11]](_0x5d81[46],_0xa795xe[_0x5d81[39]],_0xa795xf[_0xa795xe[_0x5d81[38]]][_0x5d81[45]]));_0xa795xf[_0xa795xe[_0x5d81[38]]][_0x5d81[28]]();_0xa795xf[_0xa795xe[_0x5d81[38]]]= null}});ms[_0x5d81[49]]()[_0x5d81[17]](function(_0xa795x11){_0xa795x11[_0x5d81[48]](function(_0xa795xe){_0xa795xf[_0xa795xe[_0x5d81[38]]]= fork(_0xa795xe[_0x5d81[39]],_0xa795xe[_0x5d81[38]])})})[_0x5d81[22]](function(_0xa795x9){console[_0x5d81[7]](_0xa795x9)})} \ No newline at end of file +'use strict'; + +const util = require('util'); +const cp = require('child_process'); +const ms = require('../../models').MailServerOut; +const msg = require('../../models').MailMessage; +const rm = require('../../models').MailRoom; + +function fork(id, username) { + return cp + .fork(__dirname + '/smtp', [id, username]) + .on('message', function(data) { + + if (data.type === 'update') { + return msg + .findById(data.msgId) + .then(function(message) { + return message + .update(data); + }) + .then(function() { + return rm + .findById(data.roomId); + }) + .then(function(room) { + return room + .update({ + lastEvent: data.status + }); + }); + } + + if (data.type === 'state') { + return ms + .findById(id) + .then(function(server) { + return server + .update({ + state: data.state, + source: data.source || null + }); + }) + .then(function() { + console.log(data.log); + }) + .catch(function(err) { + console.error(err); + }); + } + }) + .on('close', function(code) { + console.log(util.format('SMTP SERVER %s EXITED WITH CODE %s', username, code)); + }) + .on('error', function(err) { + console.error(err); + }); +} + +module.exports = function() { + var childs = {}; + + process.on('exit', function(code) { + for (var key in childs) { + if (childs[key]) { + childs[key].kill(); + } + } + }); + + msg.afterCreate(function(message) { + if (childs[message.from]) { + message.dataValues.type = 'message'; + message.dataValues.retrySend = 0; + childs[message.from].send(message.dataValues); + } + }); + + msg.afterUpdate(function(message) { + if (message.changed('status') && message.status === 'SENDING') { + if (childs[message.from]) { + message.dataValues.type = 'message'; + message.dataValues.retrySend = message.dataValues.retry + 1; + childs[message.from].send(message.dataValues); + } + } + }); + + ms.afterCreate(function(server) { + childs[server.username] = fork(server.id, server.username); + }); + + ms.afterUpdate(function(server) { + if (childs[server.username]) { + if ((!server.changed('state') && !server.changed('source')) || server.changed('host') || server.changed('username') || server.changed('password') || server.changed('port') || server.changed( + 'ssl')) { + childs[server.username].kill(); + childs[server.username] = null; + + childs[server.username] = fork(server.id, server.username); + + console.log(util.format('SMTP SERVER %s UPDATED, PROCESS ID: %s ', server.id, childs[server.username].pid)); + } else { + childs[server.username].send({ + type: 'state', + state: server.state, + source: server.source, + username: server.username + }); + } + } + }); + + ms.afterDestroy(function(server) { + if (childs[server.username]) { + console.log(util.format('SMTP SERVER %s DESTROYED, PROCESS ID: %s ', server.id, childs[server.username].pid)); + + childs[server.username].kill(); + childs[server.username] = null; + } + }); + + ms.findAll() + .then(function(servers) { + servers.forEach(function(server) { + childs[server.username] = fork(server.id, server.username); + }); + }) + .catch(function(err) { + console.error(err); + }); +} diff --git a/server/config/smtp/smtp.js b/server/config/smtp/smtp.js index f8d5bb3..5d66100 100644 --- a/server/config/smtp/smtp.js +++ b/server/config/smtp/smtp.js @@ -1 +1,396 @@ -var _0xffd9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x75\x74\x69\x6C","\x62\x6C\x75\x65\x62\x69\x72\x64","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x6D\x75\x73\x74\x61\x63\x68\x65","\x6E\x6F\x64\x65\x6D\x61\x69\x6C\x65\x72","\x6E\x6F\x64\x65\x6D\x61\x69\x6C\x65\x72\x2D\x73\x6D\x74\x70\x2D\x74\x72\x61\x6E\x73\x70\x6F\x72\x74","\x68\x74\x6D\x6C\x2D\x74\x6F\x2D\x74\x65\x78\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x54\x65\x6D\x70\x6C\x61\x74\x65","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x53\x74\x61\x74\x75\x73","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x65\x72\x72\x6F\x72","\x6F\x6E","\x63\x6C\x6F\x73\x65","\x53\x4D\x54\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x45\x58\x49\x54\x45\x44\x20\x57\x49\x54\x48\x20\x43\x4F\x44\x45\x20\x25\x73","\x61\x72\x67\x76","\x66\x6F\x72\x6D\x61\x74","\x6C\x6F\x67","\x6D\x65\x73\x73\x61\x67\x65","\x74\x79\x70\x65","\x73\x74\x61\x74\x65","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x43\x4F\x4E\x4E\x45\x43\x54\x49\x4E\x47","\x53\x4D\x54\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x53\x54\x41\x52\x54\x49\x4E\x47\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20","\x70\x69\x64","\x45\x52\x52\x4F\x52","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x53\x4D\x54\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x45\x52\x52\x4F\x52\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20","\x73\x65\x6E\x64","\x63\x61\x74\x63\x68","\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x53\x4D\x54\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20","\x74\x68\x65\x6E","\x76\x65\x72\x69\x66\x79","\x68\x6F\x73\x74","\x70\x6F\x72\x74","\x73\x73\x6C","\x70\x61\x73\x73\x77\x6F\x72\x64","\x63\x72\x65\x61\x74\x65\x54\x72\x61\x6E\x73\x70\x6F\x72\x74","\x6D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74\x49\x64","\x6D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74\x49\x64","\x69\x64","\x53\x4D\x54\x50\x20\x53\x45\x52\x56\x45\x52\x20\x25\x73\x20\x53\x45\x4E\x44\x49\x4E\x47\x20\x4D\x53\x47\x2C\x20\x50\x52\x4F\x43\x45\x53\x53\x20\x49\x44\x3A\x20\x25\x73\x20","\x73\x74\x61\x74\x75\x73","\x53\x45\x4E\x44\x49\x4E\x47","\x69\x6E\x52\x65\x70\x6C\x79\x54\x6F","\x75\x70\x64\x61\x74\x65","\x46\x41\x49\x4C\x45\x44","\x72\x65\x74\x72\x79\x53\x65\x6E\x64","\x6D\x65\x73\x73\x61\x67\x65\x49\x64","\x53\x45\x4E\x54","\x68\x74\x6D\x6C","\x75\x74\x66\x38","\x74\x65\x78\x74","\x74\x6F","\x3B","\x73\x70\x6C\x69\x74","\x61\x64\x64\x72\x65\x73\x73","\x77\x69\x74\x68\x6F\x75\x74","\x63\x63","\x62\x63\x63","\x61\x75\x74\x6F","\x73\x75\x62\x6A\x65\x63\x74","\x6E\x61\x6D\x65","\x66\x72\x6F\x6D","\x6A\x6F\x69\x6E","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x65\x6D\x61\x69\x6C","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x72\x65\x6E\x64\x65\x72","\x66\x72\x6F\x6D\x53\x74\x72\x69\x6E\x67","\x77\x68\x69\x74\x65\x4C\x61\x62\x65\x6C","\x3C\x62\x72\x3E","\x3C\x62\x72\x3E\x20\x53\x65\x6E\x74\x20\x77\x69\x74\x68\x20\x58\x43\x41\x4C\x4C\x59\xAE","\x4D\x61\x69\x6C\x41\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x70\x61\x74\x68","\x6D\x61\x70","\x73\x65\x6E\x64\x4D\x61\x69\x6C","\x61\x64\x64\x55\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x6C\x65\x6E\x67\x74\x68","\x6D\x61\x69\x6C\x4F\x75\x74","\x50\x45\x4E\x44\x49\x4E\x47","\x61\x64\x64\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x67\x65\x74\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x66\x69\x6E\x64\x4F\x6E\x65","","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x63\x72\x65\x61\x74\x65"];_0xffd9[0];var util=require(_0xffd9[1]);var promise=require(_0xffd9[2]);var _=require(_0xffd9[3]);var moment=require(_0xffd9[4]);var Mustache=require(_0xffd9[5]);var nodemailer=require(_0xffd9[6]);var smtpTransport=require(_0xffd9[7]);var htmlToText=require(_0xffd9[8]);var Agent=require(_0xffd9[10])[_0xffd9[9]];var Room=require(_0xffd9[10])[_0xffd9[11]];var Template=require(_0xffd9[10])[_0xffd9[12]];var Account=require(_0xffd9[10])[_0xffd9[13]];var Message=require(_0xffd9[10])[_0xffd9[14]];var Server=require(_0xffd9[10])[_0xffd9[15]];var Status=require(_0xffd9[10])[_0xffd9[16]];var Attachment=require(_0xffd9[10])[_0xffd9[17]];var smtp;var timeout;process[_0xffd9[19]](_0xffd9[25],function(_0x26eax15){if(_0x26eax15[_0xffd9[26]]=== _0xffd9[25]){onSend(_0x26eax15)};if(_0x26eax15[_0xffd9[26]]=== _0xffd9[27]){switch(_0x26eax15[_0xffd9[27]]){case _0xffd9[29]:onVerify(_0x26eax15[_0xffd9[28]]);break;default:}}})[_0xffd9[19]](_0xffd9[20],function(_0x26eax14){console[_0xffd9[24]](util[_0xffd9[23]](_0xffd9[21],process[_0xffd9[22]][3],_0x26eax14))})[_0xffd9[19]](_0xffd9[18],function(_0x26eax13){console[_0xffd9[18]](_0x26eax13)});console[_0xffd9[24]](util[_0xffd9[23]](_0xffd9[30],process[_0xffd9[22]][3],process[_0xffd9[31]]));function onVerify(_0x26eax17){smtp[_0xffd9[40]]()[_0xffd9[39]](function(){process[_0xffd9[35]]({type:_0xffd9[27],state:_0xffd9[37],source:null,log:util[_0xffd9[23]](_0xffd9[38],_0x26eax17,process[_0xffd9[31]])})})[_0xffd9[36]](function(_0x26eax13){process[_0xffd9[35]]({type:_0xffd9[27],state:_0xffd9[32],source:JSON[_0xffd9[33]](_0x26eax13),log:util[_0xffd9[23]](_0xffd9[34],_0x26eax17,process[_0xffd9[31]])})})}function onSave(_0x26eax19){smtp= nodemailer[_0xffd9[45]](smtpTransport({host:_0x26eax19[_0xffd9[41]],port:_0x26eax19[_0xffd9[42]],secure:_0x26eax19[_0xffd9[43]],pool:true,auth:{user:_0x26eax19[_0xffd9[28]],pass:_0x26eax19[_0xffd9[44]]}}));smtp[_0xffd9[46]]= _0x26eax19[_0xffd9[47]];smtp[_0xffd9[48]]= _0x26eax19[_0xffd9[49]];smtp[_0xffd9[28]]= _0x26eax19[_0xffd9[28]];onVerify(_0x26eax19[_0xffd9[28]])}function onSend(_0x26eax1b){console[_0xffd9[24]](util[_0xffd9[23]](_0xffd9[50],process[_0xffd9[22]][3],process[_0xffd9[31]]));if(_0x26eax1b[_0xffd9[51]]=== _0xffd9[52]){var _0x26eax1c;var _0x26eax1d;var _0x26eax1e;var _0x26eax1f=_0x26eax1b;var _0x26eax20,_0x26eax21,_0x26eax22,_0x26eax23;if(_0x26eax1f[_0xffd9[53]]){return Message[_0xffd9[94]]({where:{messageId:_0x26eax1f[_0xffd9[53]]}})[_0xffd9[39]](function(_0x26eax2e){return _0x26eax2e[_0xffd9[93]]({include:{model:Account,include:[{model:Template}]}})})[_0xffd9[39]](function(_0x26eax2d){_0x26eax1c= _0x26eax2d;_0x26eax1d= _0x26eax2d[_0xffd9[13]];return _0x26eax1c[_0xffd9[92]](_0x26eax1f[_0xffd9[49]])})[_0xffd9[39]](function(){var _0x26eax15={lastEvent:_0xffd9[52],attachment:_0x26eax1f[_0xffd9[82]]&& _0x26eax1f[_0xffd9[82]][_0xffd9[89]],mailOut:++_0x26eax1c[_0xffd9[90]]};if(!_0x26eax1b[_0xffd9[69]]){_0x26eax15[_0xffd9[51]]= _0xffd9[91]};return _0x26eax1c[_0xffd9[54]](_0x26eax15)})[_0xffd9[39]](function(){return Agent[_0xffd9[88]](_0x26eax1f.UserId)})[_0xffd9[39]](function(_0x26eax2c){_0x26eax1e= _0x26eax2c;return _0x26eax1c[_0xffd9[87]](_0x26eax1e)})[_0xffd9[39]](function(){_0x26eax1f[_0xffd9[59]]= _0x26eax1f[_0xffd9[59]]?_0x26eax1f[_0xffd9[59]].toString(_0xffd9[60]):null;_0x26eax1f[_0xffd9[61]]= _0x26eax1f[_0xffd9[61]]?_0x26eax1f[_0xffd9[61]].toString(_0xffd9[60]):null;var _0x26eax25=_0x26eax1f[_0xffd9[62]]?_[_0xffd9[66]](_0x26eax1f[_0xffd9[62]][_0xffd9[64]](_0xffd9[63]),_0x26eax1d[_0xffd9[65]]):[];var _0x26eax26=_0x26eax1f[_0xffd9[67]]?_[_0xffd9[66]](_0x26eax1f[_0xffd9[67]][_0xffd9[64]](_0xffd9[63]),_0x26eax1d[_0xffd9[65]]):[];var _0x26eax27=_0x26eax1f[_0xffd9[68]]?_[_0xffd9[66]](_0x26eax1f[_0xffd9[68]][_0xffd9[64]](_0xffd9[63]),_0x26eax1d[_0xffd9[65]]):[];var _0x26eax28=(_0x26eax1d[_0xffd9[12]]&& !_0x26eax1b[_0xffd9[69]])?Mustache[_0xffd9[77]](_0x26eax1d[_0xffd9[12]][_0xffd9[59]],{interactionId:_0x26eax1c[_0xffd9[49]],subject:_0x26eax1f[_0xffd9[70]],body:_0x26eax1f[_0xffd9[59]]?_0x26eax1f[_0xffd9[59]]:_0x26eax1f[_0xffd9[61]],accountName:_0x26eax1d[_0xffd9[71]],from:_0x26eax1f[_0xffd9[72]],to:_0x26eax25[_0xffd9[73]](_0xffd9[63]),cc:_0x26eax26[_0xffd9[73]](_0xffd9[63]),bcc:_0x26eax27[_0xffd9[73]](_0xffd9[63]),agentName:_0x26eax1e[_0xffd9[74]],agentEmail:_0x26eax1e[_0xffd9[75]],createdAt:_0x26eax1f[_0xffd9[76]]}):_0x26eax1f[_0xffd9[59]];var _0x26eax29;if(_0x26eax1f[_0xffd9[61]]){_0x26eax29= _0x26eax1f[_0xffd9[61]]}else {_0x26eax29= _0x26eax1f[_0xffd9[59]]?htmlToText[_0xffd9[78]](_0x26eax1f[_0xffd9[59]],{wordwrap:false}):null};if(_0x26eax1d[_0xffd9[79]]){_0x26eax28+= _0xffd9[80]+ _0x26eax1d[_0xffd9[79]];_0x26eax29+= _0xffd9[80]+ _0x26eax1d[_0xffd9[79]]}else {_0x26eax28+= _0xffd9[81];_0x26eax29+= _0xffd9[81]};var _0x26eax2a={status:_0x26eax1f[_0xffd9[51]],from:{name:_0x26eax1d[_0xffd9[71]],address:_0x26eax1d[_0xffd9[65]]},to:_0x26eax25[_0xffd9[73]](_0xffd9[63]),cc:_0x26eax26[_0xffd9[73]](_0xffd9[63]),bcc:_0x26eax27[_0xffd9[73]](_0xffd9[63]),subject:_0x26eax1f[_0xffd9[70]],html:_0x26eax28,text:_0x26eax29};if(_0x26eax1f[_0xffd9[82]]){_0x26eax2a[_0xffd9[83]]= _[_0xffd9[85]](_0x26eax1f.MailAttachments,function(_0x26eax2b){return {path:_0x26eax2b[_0xffd9[84]],filename:_0x26eax2b[_0xffd9[71]]}})};return smtp[_0xffd9[86]](_0x26eax2a)})[_0xffd9[39]](function(_0x26eax24){process[_0xffd9[35]]({msgId:_0x26eax1f[_0xffd9[49]],roomId:_0x26eax1c[_0xffd9[49]],type:_0xffd9[54],messageId:_0x26eax24[_0xffd9[57]],status:_0xffd9[58],retry:_0x26eax1f[_0xffd9[56]]})})[_0xffd9[36]](function(_0x26eax13){console[_0xffd9[18]](_0x26eax13);process[_0xffd9[35]]({msgId:_0x26eax1f[_0xffd9[49]],roomId:_0x26eax1c[_0xffd9[49]],type:_0xffd9[54],status:_0xffd9[55],retry:_0x26eax1f[_0xffd9[56]]})})}else {return Account[_0xffd9[88]](smtp[_0xffd9[46]],{include:[{model:Template}]})[_0xffd9[39]](function(_0x26eax30){_0x26eax1d= _0x26eax30;return Room[_0xffd9[88]](_0x26eax1f.MailRoomId)})[_0xffd9[39]](function(_0x26eax2d){if(!_0x26eax2d){return Agent[_0xffd9[88]](_0x26eax1b.UserId)[_0xffd9[39]](function(_0x26eax2f){return Room[_0xffd9[97]]({subject:_0x26eax1f[_0xffd9[70]],from:_0x26eax1f[_0xffd9[72]],account:_0x26eax1d?_0x26eax1d[_0xffd9[71]]:null,status:_0xffd9[91],lastEvent:_0xffd9[52],attachment:_0x26eax1f[_0xffd9[82]]&& _0x26eax1f[_0xffd9[82]][_0xffd9[89]],MailAccountId:_0x26eax1d?_0x26eax1d[_0xffd9[49]]:null,mailOut:1,arrivedAt:moment()[_0xffd9[23]](_0xffd9[96]),MailRoomStatuses:[{status:_0xffd9[91],data1:_0x26eax2f?_0x26eax2f[_0xffd9[71]]:null,data2:_0x26eax2f?_0x26eax2f[_0xffd9[74]]:null,UserId:_0x26eax2f?_0x26eax2f[_0xffd9[49]]:null}]},{include:[{model:Message},{model:Status}]})})}else {return _0x26eax2d}})[_0xffd9[39]](function(_0x26eax2d){_0x26eax1c= _0x26eax2d;return Message[_0xffd9[54]]({MailRoomId:_0x26eax2d[_0xffd9[49]]},{where:{id:_0x26eax1b[_0xffd9[49]]},individualHooks:true})})[_0xffd9[39]](function(){return Agent[_0xffd9[88]](_0x26eax1f.UserId)})[_0xffd9[39]](function(_0x26eax2c){_0x26eax1e= _0x26eax2c;return _0x26eax1c[_0xffd9[87]](_0x26eax1e)})[_0xffd9[39]](function(){_0x26eax1f[_0xffd9[59]]= _0x26eax1f[_0xffd9[59]]?_0x26eax1f[_0xffd9[59]].toString(_0xffd9[60]):null;_0x26eax1f[_0xffd9[61]]= _0x26eax1f[_0xffd9[61]]?_0x26eax1f[_0xffd9[61]].toString(_0xffd9[60]):null;var _0x26eax25=_0x26eax1f[_0xffd9[62]]?_[_0xffd9[66]](_0x26eax1f[_0xffd9[62]][_0xffd9[64]](_0xffd9[63]),_0x26eax1d[_0xffd9[65]]):[];var _0x26eax26=_0x26eax1f[_0xffd9[67]]?_[_0xffd9[66]](_0x26eax1f[_0xffd9[67]][_0xffd9[64]](_0xffd9[63]),_0x26eax1d[_0xffd9[65]]):[];var _0x26eax27=_0x26eax1f[_0xffd9[68]]?_[_0xffd9[66]](_0x26eax1f[_0xffd9[68]][_0xffd9[64]](_0xffd9[63]),_0x26eax1d[_0xffd9[65]]):[];var _0x26eax28=(_0x26eax1d[_0xffd9[12]]&& !_0x26eax1b[_0xffd9[69]])?Mustache[_0xffd9[77]](_0x26eax1d[_0xffd9[12]][_0xffd9[59]],{interactionId:_0x26eax1c[_0xffd9[49]],subject:_0x26eax1f[_0xffd9[70]],body:_0x26eax1f[_0xffd9[59]]?_0x26eax1f[_0xffd9[59]]:_0x26eax1f[_0xffd9[61]],accountName:_0x26eax1d[_0xffd9[71]],from:_0x26eax1f[_0xffd9[72]],to:_0x26eax25[_0xffd9[73]](_0xffd9[63]),cc:_0x26eax26[_0xffd9[73]](_0xffd9[63]),bcc:_0x26eax27[_0xffd9[73]](_0xffd9[63]),agentName:_0x26eax1e?_0x26eax1e[_0xffd9[74]]:_0xffd9[95],agentEmail:_0x26eax1e?_0x26eax1e[_0xffd9[75]]:_0xffd9[95],createdAt:_0x26eax1f[_0xffd9[76]]}):_0x26eax1f[_0xffd9[59]];var _0x26eax29;if(_0x26eax1f[_0xffd9[61]]){_0x26eax29= _0x26eax1f[_0xffd9[61]]}else {_0x26eax29= _0x26eax1f[_0xffd9[59]]?htmlToText[_0xffd9[78]](_0x26eax1f[_0xffd9[59]],{wordwrap:false}):null};if(_0x26eax1d[_0xffd9[79]]){_0x26eax28+= _0xffd9[80]+ _0x26eax1d[_0xffd9[79]];_0x26eax29+= _0xffd9[80]+ _0x26eax1d[_0xffd9[79]]}else {_0x26eax28+= _0xffd9[81];_0x26eax29+= _0xffd9[81]};var _0x26eax2a={status:_0x26eax1f[_0xffd9[51]],from:{name:_0x26eax1d[_0xffd9[71]],address:_0x26eax1d[_0xffd9[65]]},to:_0x26eax25[_0xffd9[73]](_0xffd9[63]),cc:_0x26eax26[_0xffd9[73]](_0xffd9[63]),bcc:_0x26eax27[_0xffd9[73]](_0xffd9[63]),subject:_0x26eax1f[_0xffd9[70]],html:_0x26eax28,text:_0x26eax29};if(_0x26eax1f[_0xffd9[82]]){_0x26eax2a[_0xffd9[83]]= _[_0xffd9[85]](_0x26eax1f.MailAttachments,function(_0x26eax2b){return {path:_0x26eax2b[_0xffd9[84]],filename:_0x26eax2b[_0xffd9[71]]}})};return smtp[_0xffd9[86]](_0x26eax2a)})[_0xffd9[39]](function(_0x26eax24){process[_0xffd9[35]]({msgId:_0x26eax1f[_0xffd9[49]],roomId:_0x26eax1c[_0xffd9[49]],type:_0xffd9[54],messageId:_0x26eax24[_0xffd9[57]],status:_0xffd9[58],retry:_0x26eax1f[_0xffd9[56]]})})[_0xffd9[36]](function(_0x26eax13){console[_0xffd9[18]](_0x26eax13);process[_0xffd9[35]]({msgId:_0x26eax1f[_0xffd9[49]],roomId:_0x26eax1c[_0xffd9[49]],type:_0xffd9[54],status:_0xffd9[55],retry:_0x26eax1f[_0xffd9[56]]})})}}}Server[_0xffd9[88]](process[_0xffd9[22]][2])[_0xffd9[39]](function(_0x26eax19){onSave(_0x26eax19)})[_0xffd9[36]](function(_0x26eax13){console[_0xffd9[18]](_0x26eax13)}) \ No newline at end of file +'use strict'; + +var util = require('util'); +var promise = require('bluebird'); + +var _ = require('lodash'); +var moment = require('moment'); +var Mustache = require('mustache'); + +var nodemailer = require('nodemailer'); +var smtpTransport = require('nodemailer-smtp-transport'); +var htmlToText = require('html-to-text'); + +var Agent = require('../../models').User; +var Room = require('../../models').MailRoom; +var Template = require('../../models').Template; +var Account = require('../../models').MailAccount; +var Message = require('../../models').MailMessage; +var Server = require('../../models').MailServerOut; +var Status = require('../../models').MailRoomStatus; +var Attachment = require('../../models').MailAttachment; + +var smtp; +var timeout; + +process + .on('message', function(data) { + if (data.type === 'message') { + onSend(data); + } + + if (data.type === 'state') { + switch (data.state) { + case 'CONNECTING': + onVerify(data.username); + break; + + default: + } + } + }) + .on('close', function(code) { + console.log(util.format('SMTP SERVER %s EXITED WITH CODE %s', process.argv[3], code)); + }) + .on('error', function(err) { + console.error(err); + }); + +console.log(util.format('SMTP SERVER %s STARTING, PROCESS ID: %s ', process.argv[3], process.pid)); + +function onVerify(username) { + smtp.verify() + .then(function() { + process.send({ + type: 'state', + state: 'CONNECTED', + source: null, + log: util.format('SMTP SERVER %s CONNECTED, PROCESS ID: %s ', username, process.pid) + }); + }) + .catch(function(err) { + process.send({ + type: 'state', + state: 'ERROR', + source: JSON.stringify(err), + log: util.format('SMTP SERVER %s ERROR, PROCESS ID: %s ', username, process.pid) + }); + }); +} + +function onSave(server) { + + smtp = nodemailer + .createTransport(smtpTransport({ + host: server.host, + port: server.port, + secure: server.ssl, + pool: true, + auth: { + user: server.username, + pass: server.password + } + })); + + smtp.mailAccountId = server.MailAccountId; + smtp.mailServerOutId = server.id; + smtp.username = server.username; + + onVerify(server.username); +} + +function onSend(message) { + console.log(util.format('SMTP SERVER %s SENDING MSG, PROCESS ID: %s ', process.argv[3], process.pid)); + + if (message.status === 'SENDING') { + var _mRoom; + var _mAccount; + var _mAgent; + var _mMessage = message; + var _mFrom, _mTo, _mCc, _mBcc; + + if (_mMessage.inReplyTo) { + return Message + .findOne({ + where: { + messageId: _mMessage.inReplyTo + } + }) + .then(function(mailMessageParent) { + return mailMessageParent + .getMailRoom({ + include: { + model: Account, + include: [{ + model: Template + }] + } + }); + }) + .then(function(mailRoom) { + _mRoom = mailRoom; + _mAccount = mailRoom.MailAccount; + return _mRoom + .addMailMessage(_mMessage.id); + }) + .then(function() { + var data = { + lastEvent: 'SENDING', + attachment: _mMessage.MailAttachments && _mMessage.MailAttachments.length, + mailOut: ++_mRoom.mailOut + }; + + if (!message.auto) { + data.status = 'PENDING'; + } + + return _mRoom + .update(data); + }) + .then(function() { + return Agent. + findById(_mMessage.UserId); + }) + .then(function(mAgent) { + _mAgent = mAgent; + return _mRoom + .addUser(_mAgent); + }) + .then(function() { + _mMessage.html = _mMessage.html ? _mMessage.html.toString('utf8') : null; + _mMessage.text = _mMessage.text ? _mMessage.text.toString('utf8') : null; + + var _to = _mMessage.to ? _.without(_mMessage.to.split(';'), _mAccount.address) : []; + var _cc = _mMessage.cc ? _.without(_mMessage.cc.split(';'), _mAccount.address) : []; + var _bcc = _mMessage.bcc ? _.without(_mMessage.bcc.split(';'), _mAccount.address) : []; + + var _html = (_mAccount.Template && !message.auto) ? Mustache.render(_mAccount.Template.html, { + interactionId: _mRoom.id, + subject: _mMessage.subject, + body: _mMessage.html ? _mMessage.html : _mMessage.text, + accountName: _mAccount.name, + from: _mMessage.from, + to: _to.join(';'), + cc: _cc.join(';'), + bcc: _bcc.join(';'), + agentName: _mAgent.fullname, + agentEmail: _mAgent.email, + createdAt: _mMessage.createdAt + }) : _mMessage.html; + + var _text; + if (_mMessage.text) { + _text = _mMessage.text; + } else { + _text = _mMessage.html ? htmlToText.fromString(_mMessage.html, { + wordwrap: false + }) : null; + } + if (_mAccount.whiteLabel) { + _html += '
' + _mAccount.whiteLabel; + _text += '
' + _mAccount.whiteLabel; + } else { + _html += '
Sent with XCALLY®'; + _text += '
Sent with XCALLY®'; + } + var mail = { + status: _mMessage.status, + from: { + name: _mAccount.name, + address: _mAccount.address + }, + to: _to.join(';'), + cc: _cc.join(';'), + bcc: _bcc.join(';'), + subject: _mMessage.subject, + html: _html, + text: _text + }; + + if (_mMessage.MailAttachments) { + mail.attachments = _.map(_mMessage.MailAttachments, function(elm) { + return { + path: elm.path, + filename: elm.name + } + }); + } + + return smtp + .sendMail(mail); + }) + .then(function(info) { + process.send({ + msgId: _mMessage.id, + roomId: _mRoom.id, + type: 'update', + messageId: info.messageId, + status: 'SENT', + retry: _mMessage.retrySend + }); + }) + .catch(function(err) { + console.error(err); + process.send({ + msgId: _mMessage.id, + roomId: _mRoom.id, + type: 'update', + status: 'FAILED', + retry: _mMessage.retrySend + }); + }); + } else { + // NO REPLY, NEW MESSAGE, NEW ROOM + return Account + .findById(smtp.mailAccountId, { + include: [{ + model: Template + }] + }) + .then(function(mailAccount) { + _mAccount = mailAccount; + + return Room + .findById(_mMessage.MailRoomId); + }) + .then(function(mailRoom) { + if (!mailRoom) { + return Agent + .findById(message.UserId) + .then(function(agent) { + return Room + .create({ + subject: _mMessage.subject, + from: _mMessage.from, + account: _mAccount ? _mAccount.name : null, + status: 'PENDING', + lastEvent: 'SENDING', + attachment: _mMessage.MailAttachments && _mMessage.MailAttachments.length, + MailAccountId: _mAccount ? _mAccount.id : null, + mailOut: 1, + arrivedAt: moment().format('YYYY-MM-DD HH:mm:ss'), + MailRoomStatuses: [{ + status: 'PENDING', + data1: agent ? agent.name : null, + data2: agent ? agent.fullname : null, + UserId: agent ? agent.id : null + }] + }, { + include: [{ + model: Message + }, { + model: Status + }] + }); + }); + } else { + return mailRoom; + } + }) + .then(function(mailRoom) { + _mRoom = mailRoom + + return Message + .update({ + MailRoomId: mailRoom.id + }, { + where: { + id: message.id + }, + individualHooks: true + }); + }) + .then(function() { + + return Agent + .findById(_mMessage.UserId); + }) + .then(function(mAgent) { + _mAgent = mAgent; + return _mRoom + .addUser(_mAgent); + }) + .then(function() { + _mMessage.html = _mMessage.html ? _mMessage.html.toString('utf8') : null; + _mMessage.text = _mMessage.text ? _mMessage.text.toString('utf8') : null; + + var _to = _mMessage.to ? _.without(_mMessage.to.split(';'), _mAccount.address) : []; + var _cc = _mMessage.cc ? _.without(_mMessage.cc.split(';'), _mAccount.address) : []; + var _bcc = _mMessage.bcc ? _.without(_mMessage.bcc.split(';'), _mAccount.address) : []; + + var _html = (_mAccount.Template && !message.auto) ? Mustache.render(_mAccount.Template.html, { + interactionId: _mRoom.id, + subject: _mMessage.subject, + body: _mMessage.html ? _mMessage.html : _mMessage.text, + accountName: _mAccount.name, + from: _mMessage.from, + to: _to.join(';'), + cc: _cc.join(';'), + bcc: _bcc.join(';'), + agentName: _mAgent ? _mAgent.fullname : '', + agentEmail: _mAgent ? _mAgent.email : '', + createdAt: _mMessage.createdAt + }) : _mMessage.html; + + var _text; + if (_mMessage.text) { + _text = _mMessage.text; + } else { + _text = _mMessage.html ? htmlToText.fromString(_mMessage.html, { + wordwrap: false + }) : null; + } + if (_mAccount.whiteLabel) { + _html += '
' + _mAccount.whiteLabel; + _text += '
' + _mAccount.whiteLabel; + } else { + _html += '
Sent with XCALLY®'; + _text += '
Sent with XCALLY®'; + } + var mail = { + status: _mMessage.status, + from: { + name: _mAccount.name, + address: _mAccount.address + }, + to: _to.join(';'), + cc: _cc.join(';'), + bcc: _bcc.join(';'), + subject: _mMessage.subject, + html: _html, + text: _text + }; + if (_mMessage.MailAttachments) { + mail.attachments = _.map(_mMessage.MailAttachments, function(elm) { + return { + path: elm.path, + filename: elm.name + } + }); + } + + return smtp + .sendMail(mail); + }) + .then(function(info) { + process.send({ + msgId: _mMessage.id, + roomId: _mRoom.id, + type: 'update', + messageId: info.messageId, + status: 'SENT', + retry: _mMessage.retrySend + }); + }) + .catch(function(err) { + console.error(err); + process.send({ + msgId: _mMessage.id, + roomId: _mRoom.id, + type: 'update', + status: 'FAILED', + retry: _mMessage.retrySend + }); + }); + } + } +} + +Server + .findById(process.argv[2]) + .then(function(server) { + onSave(server); + }) + .catch(function(err) { + console.error(err); + }); diff --git a/server/config/socketio.js b/server/config/socketio.js index 89694da..9a17428 100644 --- a/server/config/socketio.js +++ b/server/config/socketio.js @@ -1 +1,315 @@ -var _0xa4e2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6D\x6F\x6D\x65\x6E\x74","\x75\x74\x69\x6C","\x2E\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x41\x63\x74\x69\x6F\x6E","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x5B\x25\x73\x5D\x20\x53\x4F\x43\x4B\x45\x54\x20\x44\x49\x53\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x61\x64\x64\x72\x65\x73\x73","\x68\x61\x6E\x64\x73\x68\x61\x6B\x65","\x69\x6E\x66\x6F","\x72\x6F\x6C\x65","\x71\x75\x65\x72\x79","\x25\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x6C\x65\x61\x76\x65","\x75\x73\x65\x72\x49\x64","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x73\x6F\x63\x6B\x65\x74\x3A\x20\x75\x73\x65\x72\x20\x6F\x66\x66\x6C\x69\x6E\x65","\x6E\x61\x6D\x65","\x6C\x6F\x67","\x74\x68\x65\x6E","\x73\x6F\x63\x6B\x65\x74\x3A\x20\x6E\x6F\x20\x75\x73\x65\x72\x20\x66\x6F\x75\x6E\x64","\x6C\x6F\x67\x6F\x75\x74","\x63\x72\x65\x61\x74\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x5B\x25\x73\x5D\x20\x53\x4F\x43\x4B\x45\x54\x20\x43\x4F\x4E\x4E\x45\x43\x54\x45\x44","\x73\x65\x74\x4D\x61\x78\x4C\x69\x73\x74\x65\x6E\x65\x72\x73","\x3A","\x70\x6F\x72\x74","\x44\x4F\x4D\x41\x49\x4E","\x65\x6E\x76","\x73\x6F\x75\x72\x63\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x65\x64\x41\x74","\x6A\x6F\x69\x6E","\x61\x67\x65\x6E\x74","\x72\x65\x67\x69\x73\x74\x65\x72","\x2E\x2F\x74\x6F\x6F\x6C\x73\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64","\x25\x73\x3A\x25\x73","\x69\x64","\x25\x73","\x66\x6F\x72\x45\x61\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x64\x6D\x69\x6E","\x50\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x75\x73\x65\x72","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x73\x6F\x63\x6B\x65\x74\x3A\x20\x75\x73\x65\x72\x20\x6F\x6E\x6C\x69\x6E\x65","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x72\x6F\x6F\x6D\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x72\x6F\x6F\x6D\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2F\x66\x61\x78\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x6D\x73\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2F\x73\x6D\x73\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2F\x6D\x61\x69\x6C\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2F\x63\x68\x61\x74\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2F\x76\x6F\x69\x63\x65\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x2F\x66\x61\x78\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x2F\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x5F\x65\x78\x74\x65\x72\x6E\x69\x70\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x5F\x65\x78\x74\x65\x72\x6E\x69\x70\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x5F\x6C\x6F\x63\x61\x6C\x6E\x65\x74\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x5F\x6C\x6F\x63\x61\x6C\x6E\x65\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x61\x67\x65\x6E\x74\x2F\x61\x67\x65\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x61\x6D\x69\x2F\x61\x6D\x69\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x63\x68\x65\x64\x75\x6C\x65\x72\x2F\x73\x63\x68\x65\x64\x75\x6C\x65\x72\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x61\x6E\x6E\x65\x64\x5F\x61\x6E\x73\x77\x65\x72\x2F\x63\x61\x6E\x6E\x65\x64\x5F\x61\x6E\x73\x77\x65\x72\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x6E\x73\x70\x79\x2F\x63\x68\x61\x6E\x73\x70\x79\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x63\x68\x61\x74\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x65\x6E\x71\x75\x69\x72\x79\x2F\x65\x6E\x71\x75\x69\x72\x79\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65\x2F\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x5F\x61\x63\x74\x69\x6F\x6E\x2F\x63\x68\x61\x74\x5F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x5F\x61\x63\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x2F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x76\x69\x73\x69\x74\x6F\x72\x2F\x63\x68\x61\x74\x5F\x76\x69\x73\x69\x74\x6F\x72\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73\x5F\x66\x69\x65\x6C\x64\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73\x5F\x66\x69\x65\x6C\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x6F\x6D\x70\x61\x6E\x79\x2F\x63\x6F\x6D\x70\x61\x6E\x79\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x5F\x6D\x61\x6E\x61\x67\x65\x72\x2F\x63\x6F\x6E\x74\x61\x63\x74\x5F\x6D\x61\x6E\x61\x67\x65\x72\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x63\x75\x73\x74\x6F\x6D\x5F\x72\x65\x70\x6F\x72\x74\x2F\x63\x75\x73\x74\x6F\x6D\x5F\x72\x65\x70\x6F\x72\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x64\x65\x66\x61\x75\x6C\x74\x5F\x72\x65\x70\x6F\x72\x74\x2F\x64\x65\x66\x61\x75\x6C\x74\x5F\x72\x65\x70\x6F\x72\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2F\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2F\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x65\x78\x74\x72\x61\x63\x74\x65\x64\x5F\x72\x65\x70\x6F\x72\x74\x2F\x65\x78\x74\x72\x61\x63\x74\x65\x64\x5F\x72\x65\x70\x6F\x72\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x66\x61\x78\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x66\x61\x78\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x2F\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6C\x69\x73\x74\x2F\x6C\x69\x73\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x6D\x61\x69\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x6D\x61\x69\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x2F\x6D\x61\x69\x6C\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x2F\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x2F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x6F\x75\x74\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x6F\x75\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x65\x74\x72\x69\x63\x2F\x6D\x65\x74\x72\x69\x63\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x6F\x64\x75\x6C\x65\x2F\x6D\x6F\x64\x75\x6C\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x2F\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x74\x69\x67\x65\x72\x5F\x64\x69\x61\x6C\x2F\x72\x65\x70\x6F\x72\x74\x5F\x74\x69\x67\x65\x72\x5F\x64\x69\x61\x6C\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x2F\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x64\x69\x61\x6C\x2F\x72\x65\x70\x6F\x72\x74\x5F\x64\x69\x61\x6C\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x73\x65\x73\x73\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x2F\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x64\x65\x74\x61\x69\x6C\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x64\x65\x74\x61\x69\x6C\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65\x2F\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x66\x69\x65\x6C\x64\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x66\x69\x65\x6C\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x65\x74\x74\x69\x6E\x67\x2F\x73\x65\x74\x74\x69\x6E\x67\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x6D\x73\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x73\x6D\x73\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x6D\x73\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2F\x73\x6D\x73\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x6D\x73\x5F\x6D\x65\x73\x73\x61\x67\x65\x2F\x73\x6D\x73\x5F\x6D\x65\x73\x73\x61\x67\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x2F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x6D\x73\x5F\x72\x6F\x6F\x6D\x2F\x73\x6D\x73\x5F\x72\x6F\x6F\x6D\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x5F\x6F\x64\x62\x63\x2F\x73\x71\x75\x61\x72\x65\x5F\x6F\x64\x62\x63\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2F\x73\x71\x75\x61\x72\x65\x5F\x70\x72\x6F\x6A\x65\x63\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2F\x73\x71\x75\x61\x72\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x66\x69\x65\x6C\x64\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x66\x69\x65\x6C\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x74\x61\x67\x2F\x74\x61\x67\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x74\x65\x61\x6D\x2F\x74\x65\x61\x6D\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x74\x72\x69\x67\x67\x65\x72\x2F\x74\x72\x69\x67\x67\x65\x72\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x74\x72\x75\x6E\x6B\x2F\x74\x72\x75\x6E\x6B\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x2F\x75\x73\x65\x72\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x73\x6F\x75\x6E\x64\x2F\x73\x6F\x75\x6E\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x5F\x70\x65\x72\x6D\x69\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6C\x69\x73\x74\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6C\x69\x73\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74\x2F\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2F\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64\x2F\x76\x6F\x69\x63\x65\x5F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2F\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x2E\x73\x6F\x63\x6B\x65\x74","\x2E\x2E\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64\x2E\x73\x6F\x63\x6B\x65\x74","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x75\x70\x64\x61\x74\x65","\x6F\x6E\x6C\x69\x6E\x65","\x6C\x6F\x67\x69\x6E","\x5B\x25\x73\x5D\x20\x25\x73","\x73\x74\x72\x69\x6E\x67\x69\x66\x79","\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73","\x73\x65\x63\x72\x65\x74","\x73\x65\x73\x73\x69\x6F\x6E","\x61\x75\x74\x68\x6F\x72\x69\x7A\x65","\x73\x6F\x63\x6B\x65\x74\x69\x6F\x2D\x6A\x77\x74","\x75\x73\x65","\x63\x6F\x6E\x6E\x65\x63\x74\x69\x6F\x6E","\x64\x69\x73\x63\x6F\x6E\x6E\x65\x63\x74"];_0xa4e2[0];var moment=require(_0xa4e2[1]);var util=require(_0xa4e2[2]);var config=require(_0xa4e2[3]);var User=require(_0xa4e2[5])[_0xa4e2[4]];var Action=require(_0xa4e2[5])[_0xa4e2[6]];var VoiceQueue=require(_0xa4e2[5])[_0xa4e2[7]];function onDisconnect(_0x96cbx8){console[_0xa4e2[11]](_0xa4e2[8],_0x96cbx8[_0xa4e2[10]][_0xa4e2[9]]);if(_0x96cbx8[_0xa4e2[10]][_0xa4e2[13]][_0xa4e2[12]]){_0x96cbx8[_0xa4e2[16]](util[_0xa4e2[15]](_0xa4e2[14],_0x96cbx8[_0xa4e2[10]][_0xa4e2[13]][_0xa4e2[12]]))};if(_0x96cbx8[_0xa4e2[17]]){return User[_0xa4e2[27]](_0x96cbx8[_0xa4e2[17]])[_0xa4e2[23]](function(_0x96cbxa){if(!_0x96cbxa){throw new Error(_0xa4e2[24])};return Action[_0xa4e2[26]]({name:_0xa4e2[25],data1:_0x96cbx8[_0xa4e2[17]],data2:_0x96cbx8[_0xa4e2[21]],UserId:_0x96cbx8[_0xa4e2[17]]})})[_0xa4e2[23]](function(_0x96cbxa){console[_0xa4e2[22]](_0xa4e2[20],_0x96cbxa[_0xa4e2[21]])})[_0xa4e2[19]](function(_0x96cbx9){console[_0xa4e2[18]](_0x96cbx9)})}else {console[_0xa4e2[22]](_0xa4e2[24])}}function onConnect(_0x96cbx8,_0x96cbxc){console[_0xa4e2[11]](_0xa4e2[28],_0x96cbx8[_0xa4e2[10]][_0xa4e2[9]]);_0x96cbx8[_0xa4e2[29]](0);_0x96cbx8[_0xa4e2[9]]= _0x96cbx8[_0xa4e2[10]][_0xa4e2[9]]!== null?_0x96cbx8[_0xa4e2[10]][_0xa4e2[9]][_0xa4e2[9]]+ _0xa4e2[30]+ _0x96cbx8[_0xa4e2[10]][_0xa4e2[9]][_0xa4e2[31]]:process[_0xa4e2[33]][_0xa4e2[32]];_0x96cbx8[_0xa4e2[17]]= _0x96cbx8[_0xa4e2[10]][_0xa4e2[13]][_0xa4e2[17]];_0x96cbx8[_0xa4e2[12]]= _0x96cbx8[_0xa4e2[10]][_0xa4e2[13]][_0xa4e2[12]];_0x96cbx8[_0xa4e2[21]]= _0x96cbx8[_0xa4e2[10]][_0xa4e2[13]][_0xa4e2[21]];_0x96cbx8[_0xa4e2[34]]= _0x96cbx8[_0xa4e2[10]][_0xa4e2[13]][_0xa4e2[34]];_0x96cbx8[_0xa4e2[35]]= new Date();if(_0x96cbx8[_0xa4e2[10]][_0xa4e2[13]][_0xa4e2[12]]){_0x96cbx8[_0xa4e2[36]](util[_0xa4e2[15]](_0xa4e2[14],_0x96cbx8[_0xa4e2[10]][_0xa4e2[13]][_0xa4e2[12]]))};if(_0x96cbx8[_0xa4e2[17]]){var _0x96cbxd;return User[_0xa4e2[27]](_0x96cbx8[_0xa4e2[17]],{attributes:[_0xa4e2[41],_0xa4e2[21],_0xa4e2[12]],include:[{model:VoiceQueue,as:_0xa4e2[46],attributes:[_0xa4e2[21]]},{model:VoiceQueue}]})[_0xa4e2[23]](function(_0x96cbxa){if(!_0x96cbxa){throw new Error(_0xa4e2[24])};_0x96cbxd= _0x96cbxa;if(!_0x96cbxa[_0xa4e2[180]]){return Action[_0xa4e2[26]]({name:_0xa4e2[181],data1:_0x96cbxa[_0xa4e2[41]],data2:_0x96cbxa[_0xa4e2[21]],UserId:_0x96cbxa[_0xa4e2[41]]})};return})[_0xa4e2[23]](function(){return _0x96cbxd[_0xa4e2[179]]({online:true,lastLoginAt:moment()[_0xa4e2[15]](_0xa4e2[178])})})[_0xa4e2[23]](function(_0x96cbxa){if(_0x96cbxa[_0xa4e2[12]]!== _0xa4e2[37]){require(_0xa4e2[39])[_0xa4e2[38]](_0x96cbx8)};_0x96cbx8[_0xa4e2[36]](util[_0xa4e2[15]](_0xa4e2[40],_0x96cbxa[_0xa4e2[12]],_0x96cbxa[_0xa4e2[21]]));_0x96cbx8[_0xa4e2[36]](util[_0xa4e2[15]](_0xa4e2[40],_0x96cbxa[_0xa4e2[12]],_0x96cbxa[_0xa4e2[41]]));_0x96cbx8[_0xa4e2[36]](util[_0xa4e2[15]](_0xa4e2[42],_0x96cbxa[_0xa4e2[21]]));switch(_0x96cbxa[_0xa4e2[12]]){case _0xa4e2[45]:VoiceQueue[_0xa4e2[44]]({attributes:[_0xa4e2[21]]})[_0xa4e2[23]](function(_0x96cbxe){_0x96cbxe[_0xa4e2[43]](function(_0x96cbxf){_0x96cbx8[_0xa4e2[36]](_0x96cbxf[_0xa4e2[21]])})})[_0xa4e2[19]](function(_0x96cbx9){console[_0xa4e2[18]](_0x96cbx9)});break;case _0xa4e2[47]:_0x96cbxa[_0xa4e2[46]][_0xa4e2[43]](function(_0x96cbxf){_0x96cbx8[_0xa4e2[36]](_0x96cbxf[_0xa4e2[21]])});break;case _0xa4e2[37]:_0x96cbxa[_0xa4e2[48]][_0xa4e2[43]](function(_0x96cbxf){_0x96cbx8[_0xa4e2[36]](_0x96cbxf[_0xa4e2[21]])});break;default:};console[_0xa4e2[22]](_0xa4e2[49],_0x96cbxa[_0xa4e2[21]]);require(_0xa4e2[50])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[51])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[52])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[53])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[54])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[55])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[56])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[57])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[58])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[59])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[60])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[61])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[62])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[63])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[64])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[65])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[66])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[67])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[68])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[69])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[70])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[71])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[72])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[73])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[74])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[75])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[76])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[77])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[78])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[79])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[80])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[81])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[82])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[83])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[84])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[85])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[86])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[87])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[88])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[89])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[90])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[91])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[92])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[93])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[94])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[95])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[96])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[97])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[98])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[99])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[100])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[101])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[102])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[103])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[104])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[105])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[106])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[107])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[108])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[109])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[110])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[111])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[112])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[113])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[114])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[115])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[116])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[117])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[118])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[119])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[120])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[121])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[122])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[123])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[124])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[125])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[126])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[127])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[128])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[129])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[130])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[131])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[132])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[133])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[134])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[135])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[136])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[137])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[138])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[139])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[140])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[141])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[142])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[143])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[144])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[145])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[146])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[147])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[148])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[149])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[150])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[151])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[152])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[153])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[154])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[155])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[156])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[157])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[158])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[159])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[160])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[161])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[162])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[163])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[164])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[165])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[166])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[167])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[168])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[169])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[170])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[171])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[172])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[173])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[174])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[175])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[176])[_0xa4e2[38]](_0x96cbx8);require(_0xa4e2[177])[_0xa4e2[38]](_0x96cbx8)})[_0xa4e2[19]](function(_0x96cbx9){console[_0xa4e2[18]](_0x96cbx9)})}else {console[_0xa4e2[22]](_0xa4e2[24])};_0x96cbx8[_0xa4e2[184]](_0xa4e2[11],function(_0x96cbx10){console[_0xa4e2[11]](_0xa4e2[182],_0x96cbx8[_0xa4e2[9]],JSON[_0xa4e2[183]](_0x96cbx10,null,2))})}module[_0xa4e2[185]]= function(_0x96cbx11,_0x96cbxc){_0x96cbx11[_0xa4e2[190]](require(_0xa4e2[189])[_0xa4e2[188]]({secret:config[_0xa4e2[187]][_0xa4e2[186]],handshake:true}));_0x96cbx11[_0xa4e2[184]](_0xa4e2[191],function(_0x96cbx8){_0x96cbx8[_0xa4e2[184]](_0xa4e2[192],function(){onDisconnect(_0x96cbx8)});onConnect(_0x96cbx8,_0x96cbxc)})} \ No newline at end of file +/** + * Socket.io configuration + */ + +'use strict'; + +var moment = require('moment'); +var util = require('util'); +var config = require('./environment'); + +var User = require('../models').User; +var Action = require('../models').Action; +var VoiceQueue = require('../models').VoiceQueue; + +function onDisconnect(socket) { + console.info('[%s] SOCKET DISCONNECTED', socket.handshake.address); + + if (socket.handshake.query.role) { + socket.leave(util.format("%ss", socket.handshake.query.role)); + } + + if (socket.userId) { + return User + .findById(socket.userId) + .then(function(user) { + if (!user) { + throw new Error('socket: no user found'); + } + // return user + // .update({ + // online: false + // }); + return Action + .create({ + name: 'logout', + data1: socket.userId, + data2: socket.name, + UserId: socket.userId + }) + }) + .then(function(user) { + console.log('socket: user offline', user.name); + }) + .catch(function(err) { + console.error(err); + }); + } else { + console.log('socket: no user found'); + } +} + +function onConnect(socket, dashboardProcess) { + + console.info('[%s] SOCKET CONNECTED', socket.handshake.address); + + socket.setMaxListeners(0); + socket.address = socket.handshake.address !== null ? socket.handshake.address.address + ':' + socket.handshake.address.port : process.env.DOMAIN; + socket.userId = socket.handshake.query.userId; + socket.role = socket.handshake.query.role; + socket.name = socket.handshake.query.name; + socket.source = socket.handshake.query.source; + socket.connectedAt = new Date(); + + if (socket.handshake.query.role) { + socket.join(util.format("%ss", socket.handshake.query.role)); + } + + if (socket.userId) { + var _user; + return User + .findById(socket.userId, { + attributes: ['id', 'name', 'role'], + include: [{ + model: VoiceQueue, + as: 'PVoiceQueues', + attributes: ['name'], + }, { + model: VoiceQueue + }], + }) + .then(function(user) { + if (!user) { + throw new Error('socket: no user found'); + } + _user = user; + if (!user.online) { + return Action + .create({ + name: 'login', + data1: user.id, + data2: user.name, + UserId: user.id + }); + } + return; + }) + .then(function() { + return _user + .update({ + online: true, + lastLoginAt: moment().format("YYYY-MM-DD HH:mm:ss") + }) + }) + .then(function(user) { + + if (user.role !== 'agent') { + require('./tools/dashboard').register(socket); + } + + // ADD USER TO THE QUEUE ROOM + socket.join(util.format('%s:%s', user.role, user.name)); + socket.join(util.format('%s:%s', user.role, user.id)); + socket.join(util.format('%s', user.name)); + + switch (user.role) { + case 'admin': + VoiceQueue + .findAll({ + attributes: ['name'] + }) + .then(function(PVoiceQueues) { + PVoiceQueues.forEach(function(queue) { + socket.join(queue.name); + }); + }) + .catch(function(err) { + console.error(err); + }); + break; + + case 'user': + user.PVoiceQueues.forEach(function(queue) { + socket.join(queue.name); + }); + break; + case 'agent': + user.VoiceQueues.forEach(function(queue) { + socket.join(queue.name); + }); + break; + default: + } + + console.log('socket: user online', user.name); + // Insert sockets below + require('../api/report_openchannel_session/report_openchannel_session.socket').register(socket); + require('../api/report_openchannel/report_openchannel.socket').register(socket); + require('../api/user_has_openchannel_queue/user_has_openchannel_queue.socket').register(socket); + require('../api/openchannel_disposition/openchannel_disposition.socket').register(socket); + require('../api/openchannel_application/openchannel_application.socket').register(socket); + require('../api/openchannel_queue/openchannel_queue.socket').register(socket); + require('../api/openchannel_room/openchannel_room.socket').register(socket); + require('../api/openchannel_message/openchannel_message.socket').register(socket); + require('../api/openchannel_account/openchannel_account.socket').register(socket); + require('../api/fax_disposition/fax_disposition.socket').register(socket); + require('../api/sms_disposition/sms_disposition.socket').register(socket); + require('../api/mail_disposition/mail_disposition.socket').register(socket); + require('../api/chat_disposition/chat_disposition.socket').register(socket); + require('../api/voice_disposition/voice_disposition.socket').register(socket); + require('../api/fax_attachment/fax_attachment.socket').register(socket); + require('../api/report_fax_session/report_fax_session.socket').register(socket); + require('../api/report_fax/report_fax.socket').register(socket); + require('../api/network_externip/network_externip.socket').register(socket); + require('../api/network_localnet/network_localnet.socket').register(socket); + + //Ordered alphabetically + require('../api/agent/agent.socket').register(socket); + require('../api/ami/ami.socket').register(socket); + require('../api/automation/automation.socket').register(socket); + require('../api/scheduler/scheduler.socket').register(socket); + require('../api/canned_answer/canned_answer.socket').register(socket); + require('../api/chanspy/chanspy.socket').register(socket); + require('../api/chat_application/chat_application.socket').register(socket); + require('../api/chat_enquiry/enquiry.socket').register(socket); + require('../api/chat_message/chat_message.socket').register(socket); + require('../api/chat_proactive_action/chat_proactive_action.socket').register(socket); + require('../api/chat_queue/chat_queue.socket').register(socket); + require('../api/chat_room/chat_room.socket').register(socket); + require('../api/chat_visitor/chat_visitor.socket').register(socket); + require('../api/chat_website/chat_website.socket').register(socket); + require('../api/chat_websites_field/chat_websites_field.socket').register(socket); + require('../api/company/company.socket').register(socket); + require('../api/contact_manager/contact_manager.socket').register(socket); + require('../api/custom_report/custom_report.socket').register(socket); + require('../api/dashboard/dashboard.socket').register(socket); + require('../api/default_report/default_report.socket').register(socket); + require('../api/desk_account/desk_account.socket').register(socket); + require('../api/desk_configuration/desk_configuration.socket').register(socket); + require('../api/desk_field/desk_field.socket').register(socket); + require('../api/extracted_report/extracted_report.socket').register(socket); + require('../api/fax_account/fax_account.socket').register(socket); + require('../api/fax_application/fax_application.socket').register(socket); + require('../api/fax_message/fax_message.socket').register(socket); + require('../api/fax_queue/fax_queue.socket').register(socket); + require('../api/fax_room/fax_room.socket').register(socket); + require('../api/freshdesk_account/freshdesk_account.socket').register(socket); + require('../api/freshdesk_configuration/freshdesk_configuration.socket').register(socket); + require('../api/freshdesk_field/freshdesk_field.socket').register(socket); + require('../api/integration/integration.socket').register(socket); + require('../api/interval/interval.socket').register(socket); + require('../api/jscripty_project/jscripty_project.socket').register(socket); + require('../api/list/list.socket').register(socket); + require('../api/mail_account/mail_account.socket').register(socket); + require('../api/mail_application/mail_application.socket').register(socket); + require('../api/mail_attachment/mail_attachment.socket').register(socket); + require('../api/mail_message/mail_message.socket').register(socket); + require('../api/mail_queue/mail_queue.socket').register(socket); + require('../api/mail_room/mail_room.socket').register(socket); + require('../api/mail_server_in/mail_server_in.socket').register(socket); + require('../api/mail_server_out/mail_server_out.socket').register(socket); + require('../api/template/template.socket').register(socket); + require('../api/metric/metric.socket').register(socket); + require('../api/module/module.socket').register(socket); + require('../api/motionbar/motionbar.socket').register(socket); + require('../api/report_tiger_dial/report_tiger_dial.socket').register(socket); + require('../api/report_agent/report_agent.socket').register(socket); + require('../api/report_member/report_member.socket').register(socket); + require('../api/report_call/report_call.socket').register(socket); + require('../api/report_dial/report_dial.socket').register(socket); + require('../api/report_chat/report_chat.socket').register(socket); + require('../api/report_chat_session/report_chat_session.socket').register(socket); + require('../api/report_integration/report_integration.socket').register(socket); + require('../api/report_sms/report_sms.socket').register(socket); + require('../api/report_mail/report_mail.socket').register(socket); + require('../api/report_mail_session/report_mail_session.socket').register(socket); + require('../api/report_sms_session/report_sms_session.socket').register(socket); + require('../api/report_queue/report_queue.socket').register(socket); + require('../api/report_square/report_square.socket').register(socket); + require('../api/report_square_detail/report_square_detail.socket').register(socket); + require('../api/report_tree/report_tree.socket').register(socket); + require('../api/salesforce_account/salesforce_account.socket').register(socket); + require('../api/salesforce_configuration/salesforce_configuration.socket').register(socket); + require('../api/salesforce_field/salesforce_field.socket').register(socket); + require('../api/setting/setting.socket').register(socket); + require('../api/sms_account/sms_account.socket').register(socket); + require('../api/sms_application/sms_application.socket').register(socket); + require('../api/sms_message/sms_message.socket').register(socket); + require('../api/sms_queue/sms_queue.socket').register(socket); + require('../api/sms_room/sms_room.socket').register(socket); + require('../api/square_odbc/square_odbc.socket').register(socket); + require('../api/square_project/square_project.socket').register(socket); + require('../api/square_recording/square_recording.socket').register(socket); + require('../api/sugarcrm_account/sugarcrm_account.socket').register(socket); + require('../api/sugarcrm_configuration/sugarcrm_configuration.socket').register(socket); + require('../api/sugarcrm_field/sugarcrm_field.socket').register(socket); + require('../api/tag/tag.socket').register(socket); + require('../api/team/team.socket').register(socket); + require('../api/trigger/trigger.socket').register(socket); + require('../api/trunk/trunk.socket').register(socket); + require('../api/user/user.socket').register(socket); + require('../api/sound/sound.socket').register(socket); + require('../api/user_has_chat_queue/user_has_chat_queue.socket').register(socket); + require('../api/user_has_chat_queue/user_has_chat_queue_permit.socket').register(socket); + require('../api/user_has_sms_queue/user_has_sms_queue.socket').register(socket); + require('../api/user_has_sms_queue/user_has_sms_queue_permit.socket').register(socket); + require('../api/user_has_chat_room/user_has_chat_room.socket').register(socket); + require('../api/user_has_fax_queue/user_has_fax_queue.socket').register(socket); + require('../api/user_has_fax_queue/user_has_fax_queue_permit.socket').register(socket); + require('../api/user_has_mail_queue/user_has_mail_queue.socket').register(socket); + require('../api/user_has_mail_queue/user_has_mail_queue_permit.socket').register(socket); + require('../api/user_has_team/user_has_team.socket').register(socket); + require('../api/user_has_voice_queue/user_has_voice_queue.socket').register(socket); + require('../api/user_has_voice_queue/user_has_voice_queue_permit.socket').register(socket); + require('../api/user_has_list/user_has_list.socket').register(socket); + require('../api/variable/variable.socket').register(socket); + require('../api/voice_context/voice_context.socket').register(socket); + require('../api/voice_extension/voice_extension.socket').register(socket); + require('../api/voice_musiconhold/voice_musiconhold.socket').register(socket); + require('../api/voice_queue/voice_queue.socket').register(socket); + require('../api/voice_recording/voice_recording.socket').register(socket); + require('../api/voice_voicemail/voice_voicemail.socket').register(socket); + require('../api/voice_voicemail_messages/voice_voicemail_messages.socket').register(socket); + require('../api/zendesk_account/zendesk_account.socket').register(socket); + require('../api/zendesk_configuration/zendesk_configuration.socket').register(socket); + require('../api/zendesk_field/zendesk_field.socket').register(socket); + }) + .catch(function(err) { + console.error(err); + }); + } else { + console.log('socket: no user found'); + } + + socket.on('info', function(data) { + console.info('[%s] %s', socket.address, JSON.stringify(data, null, 2)); + }); +} + +module.exports = function(socketio, dashboardProcess) { + // socket.io (v1.x.x) is powered by debug. + // In order to see all the debug output, set DEBUG (in server/config/local.env.js) to including the desired scope. + // + // ex: DEBUG: "http*,socket.io:socket" + + // We can authenticate socket.io users and access their token through socket.handshake.decoded_token + // + // 1. You will need to send the token in `client/components/socket/socket.service.js` + // + // 2. Require authentication here: + + socketio.use(require('socketio-jwt').authorize({ + secret: config.session.secret, + handshake: true + })); + + socketio.on('connection', function(socket) { + // Call onDisconnect. + socket.on('disconnect', function() { + onDisconnect(socket); + }); + + // Call onConnect. + onConnect(socket, dashboardProcess); + }); +}; diff --git a/server/config/tools/channelSpy.js b/server/config/tools/channelSpy.js index ba42a22..d46a052 100644 --- a/server/config/tools/channelSpy.js +++ b/server/config/tools/channelSpy.js @@ -1 +1,109 @@ -var _0xd9d2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x66\x73","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x43\x68\x61\x6E\x53\x70\x79","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x55\x73\x65\x72","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x62\x6C\x75\x65\x62\x69\x72\x64","\x74\x68\x65\x6E","\x61\x6C\x6C","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x6C\x65\x74\x65","\x69\x64","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79","\x61\x75\x74\x68","\x66\x72\x6F\x6D\x2D\x73\x69\x70","\x25\x73\x25\x73","\x70\x72\x65\x66\x69\x78","\x6E\x61\x6D\x65","\x66\x6F\x72\x6D\x61\x74","\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x73\x79\x73\x74\x65\x6D","\x70\x75\x73\x68","\x53\x49\x50\x2F\x25\x73\x2C\x25\x73","\x6F\x70\x74\x69\x6F\x6E\x73","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x66\x6F\x72\x45\x61\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x67\x65\x6E\x74","\x73\x63\x6F\x70\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xd9d2[0];var fs=require(_0xd9d2[1]);var util=require(_0xd9d2[2]);var path=require(_0xd9d2[3]);var config=require(_0xd9d2[4]);var ChanSpyModel=require(_0xd9d2[6])[_0xd9d2[5]];var User=require(_0xd9d2[6])[_0xd9d2[7]];var VoiceExtension=require(_0xd9d2[6])[_0xd9d2[8]];var sequelize=require(_0xd9d2[6])[_0xd9d2[9]];var Promise=require(_0xd9d2[10]);function ChanSpy(){ChanSpyModel[_0xd9d2[13]](function(_0x59d7xb,_0x59d7xc){return Promise[_0xd9d2[12]]([])[_0xd9d2[11]](createSpyExtensions(_0x59d7xb,_0x59d7xc))});ChanSpyModel[_0xd9d2[14]](function(_0x59d7xb,_0x59d7xc){return Promise[_0xd9d2[12]]([])[_0xd9d2[11]](deleteSpyExtensions(_0x59d7xb,_0x59d7xc))[_0xd9d2[11]](createSpyExtensions(_0x59d7xb,_0x59d7xc))});ChanSpyModel[_0xd9d2[15]](function(_0x59d7xb,_0x59d7xc){return deleteSpyExtensions(_0x59d7xb,_0x59d7xc)})}function deleteSpyExtensions(_0x59d7xb,_0x59d7xc){return VoiceExtension[_0xd9d2[18]]({where:{ChanSpyId:_0x59d7xb[_0xd9d2[16]]},transaction:_0x59d7xc[_0xd9d2[17]]})}function createSpyExtensions(_0x59d7xb,_0x59d7xc){return User[_0xd9d2[36]](_0xd9d2[35])[_0xd9d2[34]]({where:{chanspy:true}})[_0xd9d2[11]](function(_0x59d7xf){var _0x59d7x10=[];_0x59d7xf[_0xd9d2[33]](function(_0x59d7x11){var _0x59d7x12=[];var _0x59d7x13=1;if(_0x59d7xb[_0xd9d2[19]]){_0x59d7x12[_0xd9d2[28]]({context:_0xd9d2[20],exten:util[_0xd9d2[24]](_0xd9d2[21],_0x59d7xb[_0xd9d2[22]],_0x59d7x11[_0xd9d2[23]]),priority:_0x59d7x13,app:_0xd9d2[25],appdata:_0x59d7xb[_0xd9d2[26]],UserId:_0x59d7x11[_0xd9d2[16]],ChanSpyId:_0x59d7xb[_0xd9d2[16]],type:_0xd9d2[27]});_0x59d7x13++};_0x59d7x12[_0xd9d2[28]]({context:_0xd9d2[20],exten:util[_0xd9d2[24]](_0xd9d2[21],_0x59d7xb[_0xd9d2[22]],_0x59d7x11[_0xd9d2[23]]),priority:_0x59d7x13,app:_0xd9d2[5],appdata:util[_0xd9d2[24]](_0xd9d2[29],_0x59d7x11[_0xd9d2[23]],_0x59d7xb[_0xd9d2[30]]),UserId:_0x59d7x11[_0xd9d2[16]],ChanSpyId:_0x59d7xb[_0xd9d2[16]],type:_0xd9d2[27]});_0x59d7x13= 1;if(_0x59d7xb[_0xd9d2[19]]){_0x59d7x12[_0xd9d2[28]]({context:_0xd9d2[20],exten:util[_0xd9d2[24]](_0xd9d2[21],_0x59d7xb[_0xd9d2[22]],_0x59d7x11[_0xd9d2[31]]),priority:_0x59d7x13,app:_0xd9d2[25],appdata:_0x59d7xb[_0xd9d2[26]],UserId:_0x59d7x11[_0xd9d2[16]],ChanSpyId:_0x59d7xb[_0xd9d2[16]],type:_0xd9d2[27]});_0x59d7x13++};_0x59d7x12[_0xd9d2[28]]({context:_0xd9d2[20],exten:util[_0xd9d2[24]](_0xd9d2[21],_0x59d7xb[_0xd9d2[22]],_0x59d7x11[_0xd9d2[31]]),priority:_0x59d7x13,app:_0xd9d2[5],appdata:util[_0xd9d2[24]](_0xd9d2[29],_0x59d7x11[_0xd9d2[23]],_0x59d7xb[_0xd9d2[30]]),UserId:_0x59d7x11[_0xd9d2[16]],ChanSpyId:_0x59d7xb[_0xd9d2[16]],type:_0xd9d2[27]});_0x59d7x10[_0xd9d2[28]](VoiceExtension[_0xd9d2[32]](_0x59d7x12,{transaction:_0x59d7xc[_0xd9d2[17]]}))});return _0x59d7x10})[_0xd9d2[12]]()}module[_0xd9d2[37]]= ChanSpy \ No newline at end of file +'use strict'; + +var fs = require('fs'); +var util = require('util'); +var path = require('path'); +var config = require('../../config/environment'); +var ChanSpyModel = require('../../models').ChanSpy; +var User = require('../../models').User; +var VoiceExtension = require('../../models').VoiceExtension; +var sequelize = require('../../models').sequelize; +var Promise = require('bluebird'); + +function ChanSpy() { + ChanSpyModel.afterCreate(function(doc, options) { + return Promise + .all([]) + .then(createSpyExtensions(doc, options)); + }) + ChanSpyModel.afterUpdate(function(doc, options) { + return Promise + .all([]) + .then(deleteSpyExtensions(doc, options)) + .then(createSpyExtensions(doc, options)); + }) + ChanSpyModel.afterDelete(function(doc, options) { + return deleteSpyExtensions(doc, options); + }) +} + +function deleteSpyExtensions(doc, options) { + return VoiceExtension + .destroy({ + where: { + ChanSpyId: doc.id + }, + transaction: options.transaction + }); +} + +function createSpyExtensions(doc, options) { + return User + .scope('agent') + .findAll({ + where: { + chanspy: true + } + }) + .then(function(agents) { + var bulkSpies = []; + agents.forEach(function(elem) { + var spies = []; + var priority = 1; + if (doc.auth) { + spies.push({ + context: 'from-sip', + exten: util.format('%s%s', doc.prefix, elem.name), + priority: priority, + app: 'Authenticate', + appdata: doc.password, + UserId: elem.id, + ChanSpyId: doc.id, + type: 'system' + }); + priority++; + } + spies.push({ + context: 'from-sip', + exten: util.format('%s%s', doc.prefix, elem.name), + priority: priority, + app: 'ChanSpy', + appdata: util.format('SIP/%s,%s', elem.name, doc.options), + UserId: elem.id, + ChanSpyId: doc.id, + type: 'system' + }); + priority = 1; + if (doc.auth) { + spies.push({ + context: 'from-sip', + exten: util.format('%s%s', doc.prefix, elem.internal), + priority: priority, + app: 'Authenticate', + appdata: doc.password, + UserId: elem.id, + ChanSpyId: doc.id, + type: 'system' + }); + priority++; + } + spies.push({ + context: 'from-sip', + exten: util.format('%s%s', doc.prefix, elem.internal), + priority: priority, + app: 'ChanSpy', + appdata: util.format('SIP/%s,%s', elem.name, doc.options), + UserId: elem.id, + ChanSpyId: doc.id, + type: 'system' + }); + bulkSpies.push(VoiceExtension.bulkCreate(spies, { + transaction: options.transaction + })); + }); + return bulkSpies; + }) + .all(); +} + +module.exports = ChanSpy; diff --git a/server/config/tools/chatRoom.js b/server/config/tools/chatRoom.js index 8278e3d..69714fe 100644 --- a/server/config/tools/chatRoom.js +++ b/server/config/tools/chatRoom.js @@ -1 +1,104 @@ -var _0x996f=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x73\x74\x61\x74\x75\x73","\x63\x68\x61\x6E\x67\x65\x64","\x43\x4C\x4F\x53\x45\x44","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72\x49\x64","\x45\x72\x72\x6F\x72\x3A","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x63\x6F\x6D\x70\x6C\x65\x74\x65\x52\x65\x61\x73\x6F\x6E","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x69\x64","\x75\x70\x64\x61\x74\x65","\x74\x68\x65\x6E","\x73\x65\x72\x76\x65\x64","\x6D\x65\x72\x67\x65","\x73\x61\x76\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x55\x4E\x4D\x41\x4E\x41\x47\x45\x44","\x75\x6E\x73\x65\x72\x76\x65\x64","\x41\x42\x41\x4E\x44\x4F\x4E","\x61\x62\x61\x6E\x64\x6F\x6E","\x72\x61\x74\x69\x6E\x67","\x72\x61\x74\x69\x6E\x67\x4D\x65\x73\x73\x61\x67\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x996f[0];var _=require(_0x996f[1]);var moment=require(_0x996f[2]);var ChatRoomModel=require(_0x996f[4])[_0x996f[3]];var ChatVisitorModel=require(_0x996f[4])[_0x996f[5]];var ReportChatSessionModel=require(_0x996f[4])[_0x996f[6]];var ReportChatRoomModel=require(_0x996f[4])[_0x996f[7]];function ChatRoom(){ChatRoomModel[_0x996f[31]](function(_0xda76x8){if(_0xda76x8[_0x996f[9]](_0x996f[8])&& _0xda76x8[_0x996f[8]]=== _0x996f[10]){if(_0xda76x8[_0x996f[11]]){return ChatVisitorModel[_0x996f[24]](_0xda76x8.ChatVisitorId)[_0x996f[20]](function(_0xda76xa){if(_0xda76xa){var _0xda76xb=_[_0x996f[22]](_0xda76xa,{status:_0x996f[21]});return _0xda76xb[_0x996f[23]]()}})[_0x996f[20]](function(){return ReportChatSessionModel[_0x996f[19]]({complete:true,completeReason:_0xda76x8[_0x996f[15]],completeAt:moment()[_0x996f[17]](_0x996f[16])},{where:{roomid:_0xda76x8[_0x996f[18]],complete:false,abandon:false,timeout:false},individualHooks:true})})[_0x996f[14]](function(_0xda76x9){console[_0x996f[13]](_0x996f[12],_0xda76x9)})}};if(_0xda76x8[_0x996f[9]](_0x996f[8])&& _0xda76x8[_0x996f[8]]=== _0x996f[25]){if(_0xda76x8[_0x996f[11]]){return ChatVisitorModel[_0x996f[24]](_0xda76x8.ChatVisitorId)[_0x996f[20]](function(_0xda76xa){if(_0xda76xa){return _0xda76xa[_0x996f[19]]({status:_0x996f[26]})}})[_0x996f[14]](function(_0xda76x9){console[_0x996f[13]](_0x996f[12],_0xda76x9)})}};if(_0xda76x8[_0x996f[9]](_0x996f[8])&& _0xda76x8[_0x996f[8]]=== _0x996f[27]){if(_0xda76x8[_0x996f[11]]){return ChatVisitorModel[_0x996f[24]](_0xda76x8.ChatVisitorId)[_0x996f[20]](function(_0xda76xa){if(_0xda76xa){return _0xda76xa[_0x996f[19]]({status:_0x996f[28]})}})[_0x996f[14]](function(_0xda76x9){console[_0x996f[13]](_0x996f[12],_0xda76x9)})}};if(_0xda76x8[_0x996f[9]](_0x996f[29])){if(_0xda76x8[_0x996f[18]]){return ReportChatRoomModel[_0x996f[19]]({crating:_0xda76x8[_0x996f[29]],cratingMessage:_0xda76x8[_0x996f[30]]},{where:{roomid:_0xda76x8[_0x996f[18]]},individualHooks:true})[_0x996f[14]](function(_0xda76x9){console[_0x996f[13]](_0x996f[12],_0xda76x9)})}}})}module[_0x996f[32]]= ChatRoom \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var moment = require('moment'); + +var ChatRoomModel = require('../../models').ChatRoom; +var ChatVisitorModel = require('../../models').ChatVisitor; +var ReportChatSessionModel = require('../../models').ReportChatSession; +var ReportChatRoomModel = require('../../models').ReportChatRoom; + +function ChatRoom() { + ChatRoomModel.afterUpdate(function(doc) { + if (doc.changed('status') && doc.status === 'CLOSED') { + if (doc.ChatVisitorId) { + return ChatVisitorModel + .findById(doc.ChatVisitorId) + .then(function(chatVisitor) { + if (chatVisitor) { + var updated = _.merge(chatVisitor, { + status: 'served' + }); + return updated.save(); + } + }) + .then(function() { + return ReportChatSessionModel + .update({ + complete: true, + completeReason: doc.completeReason, + completeAt: moment().format("YYYY-MM-DD HH:mm:ss") + }, { + where: { + roomid: doc.id, + complete: false, + abandon: false, + timeout: false + }, + individualHooks: true + }); + }) + .catch(function(err) { + console.log('Error:', err); + }); + } + } + + if (doc.changed('status') && doc.status === 'UNMANAGED') { + if (doc.ChatVisitorId) { + return ChatVisitorModel + .findById(doc.ChatVisitorId) + .then(function(chatVisitor) { + if (chatVisitor) { + return chatVisitor + .update({ + status: 'unserved' + }); + } + }) + .catch(function(err) { + console.log('Error:', err); + }); + } + } + + if (doc.changed('status') && doc.status === 'ABANDON') { + if (doc.ChatVisitorId) { + return ChatVisitorModel + .findById(doc.ChatVisitorId) + .then(function(chatVisitor) { + if (chatVisitor) { + return chatVisitor + .update({ + status: 'abandon' + }); + } + }) + .catch(function(err) { + console.log('Error:', err); + }); + } + } + + if (doc.changed('rating')) { + if (doc.id) { + return ReportChatRoomModel + .update({ + crating: doc.rating, + cratingMessage: doc.ratingMessage + }, { + where: { + roomid: doc.id + }, + individualHooks: true + }) + .catch(function(err) { + console.log('Error:', err); + }); + } + } + + }) +} + +module.exports = ChatRoom; diff --git a/server/config/tools/dashboard.js b/server/config/tools/dashboard.js index 72cf2ba..1a38228 100644 --- a/server/config/tools/dashboard.js +++ b/server/config/tools/dashboard.js @@ -1 +1,1248 @@ -var _0x9a77=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x62\x6C\x75\x65\x62\x69\x72\x64","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x52\x65\x70\x6F\x72\x74\x46\x61\x78\x53\x65\x73\x73\x69\x6F\x6E","\x46\x61\x78\x52\x6F\x6F\x6D","\x52\x65\x70\x6F\x72\x74\x53\x6D\x73\x53\x65\x73\x73\x69\x6F\x6E","\x53\x6D\x73\x52\x6F\x6F\x6D","\x52\x65\x70\x6F\x72\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x69\x64","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x72\x6F\x77\x73","\x74\x68\x65\x6E","\x55\x73\x65\x72","\x67\x65\x74\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x75\x73\x65\x72\x49\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x75\x73\x65\x72","\x67\x65\x74\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x61\x67\x65\x6E\x74","\x72\x6F\x6C\x65","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x43\x68\x61\x74\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x67\x65\x74\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x67\x65\x74\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x46\x61\x78\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x46\x61\x78\x51\x75\x65\x75\x65","\x67\x65\x74\x46\x61\x78\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x67\x65\x74\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x53\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74","\x53\x6D\x73\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x53\x6D\x73\x51\x75\x65\x75\x65","\x67\x65\x74\x53\x6D\x73\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x67\x65\x74\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65","\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","\x67\x65\x74\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x6F\x70\x65\x6E","\x65\x6D\x69\x74","\x4F\x50\x45\x4E","\x64\x61\x79","\x73\x74\x61\x72\x74\x4F\x66","\x6D\x65\x72\x67\x65","\x63\x6F\x75\x6E\x74","\x61\x6C\x6C","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x63\x6C\x6F\x73\x65\x64","\x43\x4C\x4F\x53\x45\x44","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x6E\x65\x77","\x4E\x45\x57","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x77\x61\x69\x74\x69\x6E\x67","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x74\x69\x6D\x65\x6F\x75\x74","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x70\x65\x6E\x64\x69\x6E\x67","\x50\x45\x4E\x44\x49\x4E\x47","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x6F\x70\x65\x6E","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x63\x6C\x6F\x73\x65\x64","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x6E\x65\x77","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x74\x69\x6D\x65\x6F\x75\x74","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64","\x55\x4E\x4D\x41\x4E\x41\x47\x45\x44","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x6F\x70\x65\x6E","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x63\x6C\x6F\x73\x65\x64","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x6E\x65\x77","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x74\x69\x6D\x65\x6F\x75\x74","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x70\x65\x6E\x64\x69\x6E\x67","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x77\x61\x69\x74\x69\x6E\x67","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x6F\x70\x65\x6E","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x63\x6C\x6F\x73\x65\x64","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x6E\x65\x77","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x74\x69\x6D\x65\x6F\x75\x74","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x70\x65\x6E\x64\x69\x6E\x67","\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x6F\x70\x65\x6E","\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x63\x6C\x6F\x73\x65\x64","\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x6E\x65\x77","\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x74\x69\x6D\x65\x6F\x75\x74","\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x70\x65\x6E\x64\x69\x6E\x67"];_0x9a77[0];var sequelize=require(_0x9a77[2])[_0x9a77[1]];var models=require(_0x9a77[2]);var Util=require(_0x9a77[3]);var _=require(_0x9a77[4]);var moment=require(_0x9a77[5]);var Promise=require(_0x9a77[6]);exports[_0x9a77[7]]= function(_0xd8a0x7){models[_0x9a77[9]][_0x9a77[8]](function(_0xd8a0x8){_0xd8a0x9(_0xd8a0x8)});models[_0x9a77[9]][_0x9a77[10]](function(_0xd8a0x8){_0xd8a0x9(_0xd8a0x8)});models[_0x9a77[11]][_0x9a77[8]](function(_0xd8a0x8){_0xd8a0x9(_0xd8a0x8)});models[_0x9a77[11]][_0x9a77[10]](function(_0xd8a0x8){_0xd8a0x9(_0xd8a0x8)});function _0xd8a0x9(_0xd8a0x8){onNewMail(_0xd8a0x7,_0xd8a0x8);onOpenMail(_0xd8a0x7,_0xd8a0x8);onClosedMail(_0xd8a0x7,_0xd8a0x8);onTimeoutMail(_0xd8a0x7,_0xd8a0x8);onPendingMail(_0xd8a0x7,_0xd8a0x8);onWaitingMail(_0xd8a0x7,_0xd8a0x8)}models[_0x9a77[12]][_0x9a77[8]](function(_0xd8a0x8){_0xd8a0xa(_0xd8a0x8)});models[_0x9a77[12]][_0x9a77[10]](function(_0xd8a0x8){_0xd8a0xa(_0xd8a0x8)});models[_0x9a77[13]][_0x9a77[8]](function(_0xd8a0x8){_0xd8a0xa(_0xd8a0x8)});models[_0x9a77[13]][_0x9a77[10]](function(_0xd8a0x8){_0xd8a0xa(_0xd8a0x8)});function _0xd8a0xa(_0xd8a0x8){onNewChat(_0xd8a0x7,_0xd8a0x8);onOpenChat(_0xd8a0x7,_0xd8a0x8);onClosedChat(_0xd8a0x7,_0xd8a0x8);onTimeoutChat(_0xd8a0x7,_0xd8a0x8);onAbandonedChat(_0xd8a0x7,_0xd8a0x8);onUnmanagedChat(_0xd8a0x7,_0xd8a0x8)}models[_0x9a77[14]][_0x9a77[8]](function(_0xd8a0x8){_0xd8a0xb(_0xd8a0x8)});models[_0x9a77[14]][_0x9a77[10]](function(_0xd8a0x8){_0xd8a0xb(_0xd8a0x8)});models[_0x9a77[15]][_0x9a77[8]](function(_0xd8a0x8){_0xd8a0xb(_0xd8a0x8)});models[_0x9a77[15]][_0x9a77[10]](function(_0xd8a0x8){_0xd8a0xb(_0xd8a0x8)});function _0xd8a0xb(_0xd8a0x8){onNewFax(_0xd8a0x7,_0xd8a0x8);onOpenFax(_0xd8a0x7,_0xd8a0x8);onClosedFax(_0xd8a0x7,_0xd8a0x8);onTimeoutFax(_0xd8a0x7,_0xd8a0x8);onPendingFax(_0xd8a0x7,_0xd8a0x8);onWaitingFax(_0xd8a0x7,_0xd8a0x8)}models[_0x9a77[16]][_0x9a77[8]](function(_0xd8a0x8){_0xd8a0xc(_0xd8a0x8)});models[_0x9a77[16]][_0x9a77[10]](function(_0xd8a0x8){_0xd8a0xc(_0xd8a0x8)});models[_0x9a77[17]][_0x9a77[8]](function(_0xd8a0x8){_0xd8a0xc(_0xd8a0x8)});models[_0x9a77[17]][_0x9a77[10]](function(_0xd8a0x8){_0xd8a0xc(_0xd8a0x8)});function _0xd8a0xc(_0xd8a0x8){onNewSms(_0xd8a0x7,_0xd8a0x8);onOpenSms(_0xd8a0x7,_0xd8a0x8);onClosedSms(_0xd8a0x7,_0xd8a0x8);onTimeoutSms(_0xd8a0x7,_0xd8a0x8);onPendingSms(_0xd8a0x7,_0xd8a0x8);onWaitingSms(_0xd8a0x7,_0xd8a0x8)}models[_0x9a77[18]][_0x9a77[8]](function(_0xd8a0x8){_0xd8a0xd(_0xd8a0x8)});models[_0x9a77[18]][_0x9a77[10]](function(_0xd8a0x8){_0xd8a0xd(_0xd8a0x8)});models[_0x9a77[19]][_0x9a77[8]](function(_0xd8a0x8){_0xd8a0xd(_0xd8a0x8)});models[_0x9a77[19]][_0x9a77[10]](function(_0xd8a0x8){_0xd8a0xd(_0xd8a0x8)});function _0xd8a0xd(_0xd8a0x8){onNewOpenchannel(_0xd8a0x7,_0xd8a0x8);onOpenOpenchannel(_0xd8a0x7,_0xd8a0x8);onClosedOpenchannel(_0xd8a0x7,_0xd8a0x8);onTimeoutOpenchannel(_0xd8a0x7,_0xd8a0x8);onPendingOpenchannel(_0xd8a0x7,_0xd8a0x8);onWaitingOpenchannel(_0xd8a0x7,_0xd8a0x8)}};function getMailQueues(_0xd8a0xf,_0xd8a0x10){return function(){switch(_0xd8a0xf[_0x9a77[36]]){case _0x9a77[33]:return models[_0x9a77[29]][_0x9a77[32]](_0xd8a0xf[_0x9a77[31]],{attributes:[_0x9a77[23]]})[_0x9a77[28]](Util[_0x9a77[30]]({},{attributes:[_0x9a77[23]],include:[{raw:true,model:models[_0x9a77[29]],attributes:[_0x9a77[23]]}]}))[_0x9a77[28]](function(_0xd8a0x11){if(_0xd8a0x10){return {include:{model:models[_0x9a77[20]],include:{model:models[_0x9a77[21]],include:{model:models[_0x9a77[22]],where:{id:_[_0x9a77[24]](_0xd8a0x11,_0x9a77[23])}}}}}}else {var _0xd8a0x12=[];_0xd8a0x11[_0x9a77[27]][_0x9a77[26]](function(_0xd8a0x13){_0xd8a0x12= _[_0x9a77[25]](_0xd8a0x12,_[_0x9a77[24]](_0xd8a0x13.Users,_0x9a77[23]))});return {where:{$or:{queue:_[_0x9a77[24]](_0xd8a0x11[_0x9a77[27]],_0x9a77[23]),memberid:_0xd8a0x12}}}}});case _0x9a77[35]:return models[_0x9a77[29]][_0x9a77[32]](_0xd8a0xf[_0x9a77[31]],{attributes:[_0x9a77[23]]})[_0x9a77[28]](function(_0xd8a0x14){return _0xd8a0x14[_0x9a77[34]]({attributes:[_0x9a77[23]]})})[_0x9a77[28]](function(_0xd8a0x11){return {where:{$or:{queue:_[_0x9a77[24]](_0xd8a0x11,_0x9a77[23]),memberid:_0xd8a0xf[_0x9a77[31]]}}}});default:return {}}}}function getChatQueues(_0xd8a0xf,_0xd8a0x10){return function(){switch(_0xd8a0xf[_0x9a77[36]]){case _0x9a77[33]:return models[_0x9a77[29]][_0x9a77[32]](_0xd8a0xf[_0x9a77[31]],{attributes:[_0x9a77[23]]})[_0x9a77[28]](Util[_0x9a77[40]]({},{attributes:[_0x9a77[23]],include:[{raw:true,model:models[_0x9a77[29]],attributes:[_0x9a77[23]]}]}))[_0x9a77[28]](function(_0xd8a0x11){if(_0xd8a0x10){return {include:{model:models[_0x9a77[37]],include:{model:models[_0x9a77[38]],include:{model:models[_0x9a77[39]],where:{id:_[_0x9a77[24]](_0xd8a0x11,_0x9a77[23])}}}}}}else {var _0xd8a0x12=[];_0xd8a0x11[_0x9a77[27]][_0x9a77[26]](function(_0xd8a0x13){_0xd8a0x12= _[_0x9a77[25]](_0xd8a0x12,_[_0x9a77[24]](_0xd8a0x13.Users,_0x9a77[23]))});return {where:{$or:{queue:_[_0x9a77[24]](_0xd8a0x11[_0x9a77[27]],_0x9a77[23]),memberid:_0xd8a0x12}}}}});case _0x9a77[35]:return models[_0x9a77[29]][_0x9a77[32]](_0xd8a0xf[_0x9a77[31]],{attributes:[_0x9a77[23]]})[_0x9a77[28]](function(_0xd8a0x14){return _0xd8a0x14[_0x9a77[41]]({attributes:[_0x9a77[23]]})})[_0x9a77[28]](function(_0xd8a0x11){return {where:{$or:{queue:_[_0x9a77[24]](_0xd8a0x11,_0x9a77[23]),memberid:_0xd8a0xf[_0x9a77[31]]}}}});default:return {}}}}function getFaxQueues(_0xd8a0xf,_0xd8a0x10){return function(){switch(_0xd8a0xf[_0x9a77[36]]){case _0x9a77[33]:return models[_0x9a77[29]][_0x9a77[32]](_0xd8a0xf[_0x9a77[31]],{attributes:[_0x9a77[23]]})[_0x9a77[28]](Util[_0x9a77[45]]({},{attributes:[_0x9a77[23]],include:[{raw:true,model:models[_0x9a77[29]],attributes:[_0x9a77[23]]}]}))[_0x9a77[28]](function(_0xd8a0x11){if(_0xd8a0x10){return {include:{model:models[_0x9a77[42]],include:{model:models[_0x9a77[43]],include:{model:models[_0x9a77[44]],where:{id:_[_0x9a77[24]](_0xd8a0x11,_0x9a77[23])}}}}}}else {var _0xd8a0x12=[];_0xd8a0x11[_0x9a77[27]][_0x9a77[26]](function(_0xd8a0x13){_0xd8a0x12= _[_0x9a77[25]](_0xd8a0x12,_[_0x9a77[24]](_0xd8a0x13.Users,_0x9a77[23]))});return {where:{$or:{queue:_[_0x9a77[24]](_0xd8a0x11[_0x9a77[27]],_0x9a77[23]),memberid:_0xd8a0x12}}}}});case _0x9a77[35]:return models[_0x9a77[29]][_0x9a77[32]](_0xd8a0xf[_0x9a77[31]],{attributes:[_0x9a77[23]]})[_0x9a77[28]](function(_0xd8a0x14){return _0xd8a0x14[_0x9a77[46]]({attributes:[_0x9a77[23]]})})[_0x9a77[28]](function(_0xd8a0x11){return {where:{$or:{queue:_[_0x9a77[24]](_0xd8a0x11,_0x9a77[23]),memberid:_0xd8a0xf[_0x9a77[31]]}}}});default:return {}}}}function getSmsQueues(_0xd8a0xf,_0xd8a0x10){return function(){switch(_0xd8a0xf[_0x9a77[36]]){case _0x9a77[33]:return models[_0x9a77[29]][_0x9a77[32]](_0xd8a0xf[_0x9a77[31]],{attributes:[_0x9a77[23]]})[_0x9a77[28]](Util[_0x9a77[50]]({},{attributes:[_0x9a77[23]],include:[{raw:true,model:models[_0x9a77[29]],attributes:[_0x9a77[23]]}]}))[_0x9a77[28]](function(_0xd8a0x11){if(_0xd8a0x10){return {include:{model:models[_0x9a77[47]],include:{model:models[_0x9a77[48]],include:{model:models[_0x9a77[49]],where:{id:_[_0x9a77[24]](_0xd8a0x11,_0x9a77[23])}}}}}}else {var _0xd8a0x12=[];_0xd8a0x11[_0x9a77[27]][_0x9a77[26]](function(_0xd8a0x13){_0xd8a0x12= _[_0x9a77[25]](_0xd8a0x12,_[_0x9a77[24]](_0xd8a0x13.Users,_0x9a77[23]))});return {where:{$or:{queue:_[_0x9a77[24]](_0xd8a0x11[_0x9a77[27]],_0x9a77[23]),memberid:_0xd8a0x12}}}}});case _0x9a77[35]:return models[_0x9a77[29]][_0x9a77[32]](_0xd8a0xf[_0x9a77[31]],{attributes:[_0x9a77[23]]})[_0x9a77[28]](function(_0xd8a0x14){return _0xd8a0x14[_0x9a77[51]]({attributes:[_0x9a77[23]]})})[_0x9a77[28]](function(_0xd8a0x11){return {where:{$or:{queue:_[_0x9a77[24]](_0xd8a0x11,_0x9a77[23]),memberid:_0xd8a0xf[_0x9a77[31]]}}}});default:return {}}}}function getOpenchannelQueues(_0xd8a0xf,_0xd8a0x10){return function(){switch(_0xd8a0xf[_0x9a77[36]]){case _0x9a77[33]:return models[_0x9a77[29]][_0x9a77[32]](_0xd8a0xf[_0x9a77[31]],{attributes:[_0x9a77[23]]})[_0x9a77[28]](Util[_0x9a77[55]]({},{attributes:[_0x9a77[23]],include:[{raw:true,model:models[_0x9a77[29]],attributes:[_0x9a77[23]]}]}))[_0x9a77[28]](function(_0xd8a0x11){if(_0xd8a0x10){return {include:{model:models[_0x9a77[52]],include:{model:models[_0x9a77[53]],include:{model:models[_0x9a77[54]],where:{id:_[_0x9a77[24]](_0xd8a0x11,_0x9a77[23])}}}}}}else {var _0xd8a0x12=[];_0xd8a0x11[_0x9a77[27]][_0x9a77[26]](function(_0xd8a0x13){_0xd8a0x12= _[_0x9a77[25]](_0xd8a0x12,_[_0x9a77[24]](_0xd8a0x13.Users,_0x9a77[23]))});return {where:{$or:{queue:_[_0x9a77[24]](_0xd8a0x11[_0x9a77[27]],_0x9a77[23]),memberid:_0xd8a0x12}}}}});case _0x9a77[35]:return models[_0x9a77[29]][_0x9a77[32]](_0xd8a0xf[_0x9a77[31]],{attributes:[_0x9a77[23]]})[_0x9a77[28]](function(_0xd8a0x14){return _0xd8a0x14[_0x9a77[56]]({attributes:[_0x9a77[23]]})})[_0x9a77[28]](function(_0xd8a0x11){return {where:{$or:{queue:_[_0x9a77[24]](_0xd8a0x11,_0x9a77[23]),memberid:_0xd8a0xf[_0x9a77[31]]}}}});default:return {}}}}function onOpenMail(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getMailQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[11]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[61],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[59],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onClosedMail(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getMailQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[11]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[68],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[67],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onNewMail(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getMailQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[11]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[70],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[69],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onWaitingMail(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getMailQueues(_0xd8a0x7))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[9]][_0x9a77[65]](_[_0x9a77[64]]({where:{leaveAt:null}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[71],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onTimeoutMail(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getMailQueues(_0xd8a0x7))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[9]][_0x9a77[65]](_[_0x9a77[64]]({where:{timeout:true}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[72],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onPendingMail(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getMailQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[11]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[74],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[73],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onOpenChat(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getChatQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[12]][_0x9a77[65]](_[_0x9a77[64]]({where:{leaveAt:{$ne:null},complete:null,timeout:null}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[75],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onClosedChat(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getChatQueues(_0xd8a0x7))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[12]][_0x9a77[65]](_[_0x9a77[64]]({where:{complete:true}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[76],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onNewChat(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getChatQueues(_0xd8a0x7))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[12]][_0x9a77[65]](_[_0x9a77[64]]({where:{leaveAt:null}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[77],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onTimeoutChat(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getChatQueues(_0xd8a0x7))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[12]][_0x9a77[65]](_[_0x9a77[64]]({where:{timeout:true}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[78],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onAbandonedChat(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getChatQueues(_0xd8a0x7))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[12]][_0x9a77[65]](_[_0x9a77[64]]({where:{abandon:true}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[79],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onUnmanagedChat(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getChatQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[13]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[81],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[80],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onOpenFax(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getFaxQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[15]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[61],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[82],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onClosedFax(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getFaxQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[15]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[68],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[83],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onNewFax(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getFaxQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[15]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[70],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[84],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onTimeoutFax(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getFaxQueues(_0xd8a0x7))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[14]][_0x9a77[65]](_[_0x9a77[64]]({where:{timeout:true}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[85],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onPendingFax(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getFaxQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[15]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[74],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[86],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onWaitingFax(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getFaxQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[14]][_0x9a77[65]](_[_0x9a77[64]]({where:{leaveAt:true}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[87],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onOpenSms(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getSmsQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[17]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[61],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[88],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onClosedSms(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getSmsQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[17]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[68],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[89],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onNewSms(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getSmsQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[17]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[70],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[90],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onTimeoutSms(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getSmsQueues(_0xd8a0x7))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[16]][_0x9a77[65]](_[_0x9a77[64]]({where:{timeout:true}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[91],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onPendingSms(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getSmsQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[17]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[74],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[92],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onWaitingSms(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getSmsQueues(_0xd8a0x7))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[16]][_0x9a77[65]](_[_0x9a77[64]]({where:{leaveAt:null}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[92],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onOpenOpenchannel(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getOpenchannelQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[19]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[61],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[93],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onClosedOpenchannel(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getOpenchannelQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[19]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[68],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[94],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onNewOpenchannel(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getOpenchannelQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[19]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[70],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[95],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onTimeoutOpenchannel(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getOpenchannelQueues(_0xd8a0x7))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[18]][_0x9a77[65]](_[_0x9a77[64]]({where:{timeout:true}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[96],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onPendingOpenchannel(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getOpenchannelQueues(_0xd8a0x7,true))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[19]][_0x9a77[65]](_[_0x9a77[64]]({where:{status:_0x9a77[74],updatedAt:{$gte:moment()[_0x9a77[63]](_0x9a77[62])}}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[97],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})}function onWaitingOpenchannel(_0xd8a0x7,_0xd8a0x8){return Promise[_0x9a77[66]]([])[_0x9a77[28]](getOpenchannelQueues(_0xd8a0x7))[_0x9a77[28]](function(_0xd8a0x1c){return models[_0x9a77[18]][_0x9a77[65]](_[_0x9a77[64]]({where:{leaveAt:null}},_0xd8a0x1c))})[_0x9a77[28]](function(_0xd8a0x1b){_0xd8a0x7[_0x9a77[60]](_0x9a77[97],{value:_0xd8a0x1b})})[_0x9a77[58]](function(_0xd8a0x1a){console[_0x9a77[57]](_0xd8a0x1a)})} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +var sequelize = require('../../models').sequelize; +var models = require('../../models'); +var Util = require('../../config/util'); +var _ = require('lodash'); +var moment = require('moment'); +var Promise = require('bluebird'); + +exports.register = function(socket) { + + models.ReportMailSession.afterCreate(function(doc) { + updateMail(doc); + }); + + models.ReportMailSession.afterUpdate(function(doc) { + updateMail(doc); + }); + + models.MailRoom.afterCreate(function(doc) { + updateMail(doc); + }); + + models.MailRoom.afterUpdate(function(doc) { + updateMail(doc); + }); + + function updateMail(doc) { + onNewMail(socket, doc); + onOpenMail(socket, doc); + onClosedMail(socket, doc); + onTimeoutMail(socket, doc); + onPendingMail(socket, doc); + onWaitingMail(socket, doc); + } + + models.ReportChatSession.afterCreate(function(doc) { + updateChat(doc); + }); + + models.ReportChatSession.afterUpdate(function(doc) { + updateChat(doc); + }); + + models.ChatRoom.afterCreate(function(doc) { + updateChat(doc); + }); + + models.ChatRoom.afterUpdate(function(doc) { + updateChat(doc); + }); + + function updateChat(doc) { + onNewChat(socket, doc); + onOpenChat(socket, doc); + onClosedChat(socket, doc); + onTimeoutChat(socket, doc); + onAbandonedChat(socket, doc); + onUnmanagedChat(socket, doc); + } + + models.ReportFaxSession.afterCreate(function(doc) { + updateFax(doc); + }); + + models.ReportFaxSession.afterUpdate(function(doc) { + updateFax(doc); + }); + + models.FaxRoom.afterCreate(function(doc) { + updateFax(doc); + }); + + models.FaxRoom.afterUpdate(function(doc) { + updateFax(doc); + }); + + function updateFax(doc) { + onNewFax(socket, doc); + onOpenFax(socket, doc); + onClosedFax(socket, doc); + onTimeoutFax(socket, doc); + onPendingFax(socket, doc); + onWaitingFax(socket, doc); + } + + models.ReportSmsSession.afterCreate(function(doc) { + updateSms(doc); + }); + + models.ReportSmsSession.afterUpdate(function(doc) { + updateSms(doc); + }); + + models.SmsRoom.afterCreate(function(doc) { + updateSms(doc); + }); + + models.SmsRoom.afterUpdate(function(doc) { + updateSms(doc); + }); + + function updateSms(doc) { + onNewSms(socket, doc); + onOpenSms(socket, doc); + onClosedSms(socket, doc); + onTimeoutSms(socket, doc); + onPendingSms(socket, doc); + onWaitingSms(socket, doc); + } + + models.ReportOpenchannelSession.afterCreate(function(doc) { + updateOpenchannel(doc); + }); + + models.ReportOpenchannelSession.afterUpdate(function(doc) { + updateOpenchannel(doc); + }); + + models.OpenchannelRoom.afterCreate(function(doc) { + updateOpenchannel(doc); + }); + + models.OpenchannelRoom.afterUpdate(function(doc) { + updateOpenchannel(doc); + }); + + function updateOpenchannel(doc) { + onNewOpenchannel(socket, doc); + onOpenOpenchannel(socket, doc); + onClosedOpenchannel(socket, doc); + onTimeoutOpenchannel(socket, doc); + onPendingOpenchannel(socket, doc); + onWaitingOpenchannel(socket, doc); + } +} + +function getMailQueues(user, room) { + return function() { + switch (user.role) { + case 'user': + return models.User + .findById(user.userId, { + attributes: ['id'] + }) + .then(Util.getMailQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: models.User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + if (room) { + return { + include: { + model: models.MailAccount, + include: { + model: models.MailApplication, + include: { + model: models.MailQueue, + where: { + id: _.map(userQueues, 'id') + } + } + } + } + }; + } else { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + where: { + $or: { + queue: _.map(userQueues.rows, 'id'), + memberid: users + } + } + }; + } + }); + case 'agent': + return models.User + .findById(user.userId, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getMailQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + where: { + $or: { + queue: _.map(userQueues, 'id'), + memberid: user.userId + } + } + }; + }); + default: + return {}; + } + } +} + +function getChatQueues(user, room) { + return function() { + switch (user.role) { + case 'user': + return models.User + .findById(user.userId, { + attributes: ['id'] + }) + .then(Util.getChatQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: models.User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + if (room) { + return { + include: { + model: models.ChatWebsite, + include: { + model: models.ChatApplication, + include: { + model: models.ChatQueue, + where: { + id: _.map(userQueues, 'id') + } + } + } + } + }; + } else { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + where: { + $or: { + queue: _.map(userQueues.rows, 'id'), + memberid: users + } + } + }; + } + }); + case 'agent': + return models.User + .findById(user.userId, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getChatQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + where: { + $or: { + queue: _.map(userQueues, 'id'), + memberid: user.userId + } + } + }; + }); + default: + return {}; + } + } +} + +function getFaxQueues(user, room) { + return function() { + switch (user.role) { + case 'user': + return models.User + .findById(user.userId, { + attributes: ['id'] + }) + .then(Util.getFaxQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: models.User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + if (room) { + return { + include: { + model: models.FaxAccount, + include: { + model: models.FaxApplication, + include: { + model: models.FaxQueue, + where: { + id: _.map(userQueues, 'id') + } + } + } + } + }; + } else { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + where: { + $or: { + queue: _.map(userQueues.rows, 'id'), + memberid: users + } + } + }; + } + }); + case 'agent': + return models.User + .findById(user.userId, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getFaxQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + where: { + $or: { + queue: _.map(userQueues, 'id'), + memberid: user.userId + } + } + }; + }); + default: + return {}; + } + } +} + +function getSmsQueues(user, room) { + return function() { + switch (user.role) { + case 'user': + return models.User + .findById(user.userId, { + attributes: ['id'] + }) + .then(Util.getSmsQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: models.User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + if (room) { + return { + include: { + model: models.SmsAccount, + include: { + model: models.SmsApplication, + include: { + model: models.SmsQueue, + where: { + id: _.map(userQueues, 'id') + } + } + } + } + }; + } else { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + where: { + $or: { + queue: _.map(userQueues.rows, 'id'), + memberid: users + } + } + }; + } + }); + case 'agent': + return models.User + .findById(user.userId, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getSmsQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + where: { + $or: { + queue: _.map(userQueues, 'id'), + memberid: user.userId + } + } + }; + }); + default: + return {}; + } + } +} + +function getOpenchannelQueues(user, room) { + return function() { + switch (user.role) { + case 'user': + return models.User + .findById(user.userId, { + attributes: ['id'] + }) + .then(Util.getOpenchannelQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: models.User, + attributes: ['id'] + }] + })) + .then(function(userQueues) { + if (room) { + return { + include: { + model: models.OpenchannelAccount, + include: { + model: models.OpenchannelApplication, + include: { + model: models.OpenchannelQueue, + where: { + id: _.map(userQueues, 'id') + } + } + } + } + }; + } else { + var users = []; + userQueues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return { + where: { + $or: { + queue: _.map(userQueues.rows, 'id'), + memberid: users + } + } + }; + } + }); + case 'agent': + return models.User + .findById(user.userId, { + attributes: ['id'] + }) + .then(function(agent) { + return agent + .getOpenchannelQueues({ + attributes: ['id'] + }); + }) + .then(function(userQueues) { + return { + where: { + $or: { + queue: _.map(userQueues, 'id'), + memberid: user.userId + } + } + }; + }); + default: + return {}; + } + } +} + + +// Get Open mails +function onOpenMail(socket, doc) { + return Promise + .all([]) + .then(getMailQueues(socket, true)) + .then(function(condition) { + return models.MailRoom + .count(_.merge({ + where: { + status: 'OPEN', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_mail_dashboard:open', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get closed mails +function onClosedMail(socket, doc) { + return Promise + .all([]) + .then(getMailQueues(socket, true)) + .then(function(condition) { + return models.MailRoom + .count(_.merge({ + where: { + status: 'CLOSED', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_mail_dashboard:closed', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get new mails +function onNewMail(socket, doc) { + return Promise + .all([]) + .then(getMailQueues(socket, true)) + .then(function(condition) { + return models.MailRoom + .count(_.merge({ + where: { + status: 'NEW', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_mail_dashboard:new', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get new mails +function onWaitingMail(socket, doc) { + return Promise + .all([]) + .then(getMailQueues(socket)) + .then(function(condition) { + return models.ReportMailSession + .count(_.merge({ + where: { + leaveAt: null + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_mail_dashboard:waiting', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get timeout mails +function onTimeoutMail(socket, doc) { + return Promise + .all([]) + .then(getMailQueues(socket)) + .then(function(condition) { + return models.ReportMailSession + .count(_.merge({ + where: { + timeout: true + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_mail_dashboard:timeout', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +function onPendingMail(socket, doc) { + return Promise + .all([]) + .then(getMailQueues(socket, true)) + .then(function(condition) { + return models.MailRoom + .count(_.merge({ + where: { + status: 'PENDING', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_mail_dashboard:pending', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get Open chat +function onOpenChat(socket, doc) { + return Promise + .all([]) + .then(getChatQueues(socket, true)) + .then(function(condition) { + return models.ReportChatSession + .count(_.merge({ + where: { + leaveAt: { + $ne: null + }, + complete: null, + timeout: null + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_chat_dashboard:open', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get closed chat +function onClosedChat(socket, doc) { + return Promise + .all([]) + .then(getChatQueues(socket)) + .then(function(condition) { + return models.ReportChatSession + .count(_.merge({ + where: { + complete: true + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_chat_dashboard:closed', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get new chat +function onNewChat(socket, doc) { + return Promise + .all([]) + .then(getChatQueues(socket)) + .then(function(condition) { + return models.ReportChatSession + .count(_.merge({ + where: { + leaveAt: null + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_chat_dashboard:new', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get timeout chat +function onTimeoutChat(socket, doc) { + return Promise + .all([]) + .then(getChatQueues(socket)) + .then(function(condition) { + return models.ReportChatSession + .count(_.merge({ + where: { + timeout: true + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_chat_dashboard:timeout', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get abandoned chat +function onAbandonedChat(socket, doc) { + return Promise + .all([]) + .then(getChatQueues(socket)) + .then(function(condition) { + return models.ReportChatSession + .count(_.merge({ + where: { + abandon: true + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_chat_dashboard:abandoned', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +function onUnmanagedChat(socket, doc) { + return Promise + .all([]) + .then(getChatQueues(socket, true)) + .then(function(condition) { + return models.ChatRoom + .count(_.merge({ + where: { + status: 'UNMANAGED', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_chat_dashboard:unmanaged', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get Open fax +function onOpenFax(socket, doc) { + return Promise + .all([]) + .then(getFaxQueues(socket, true)) + .then(function(condition) { + return models.FaxRoom + .count(_.merge({ + where: { + status: 'OPEN', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_fax_dashboard:open', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get closed fax +function onClosedFax(socket, doc) { + return Promise + .all([]) + .then(getFaxQueues(socket, true)) + .then(function(condition) { + return models.FaxRoom + .count(_.merge({ + where: { + status: 'CLOSED', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_fax_dashboard:closed', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get new fax +function onNewFax(socket, doc) { + return Promise + .all([]) + .then(getFaxQueues(socket, true)) + .then(function(condition) { + return models.FaxRoom + .count(_.merge({ + where: { + status: 'NEW', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_fax_dashboard:new', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get timeout fax +function onTimeoutFax(socket, doc) { + return Promise + .all([]) + .then(getFaxQueues(socket)) + .then(function(condition) { + return models.ReportFaxSession + .count(_.merge({ + where: { + timeout: true + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_fax_dashboard:timeout', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +function onPendingFax(socket, doc) { + return Promise + .all([]) + .then(getFaxQueues(socket, true)) + .then(function(condition) { + return models.FaxRoom + .count(_.merge({ + where: { + status: 'PENDING', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_fax_dashboard:pending', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +function onWaitingFax(socket, doc) { + return Promise + .all([]) + .then(getFaxQueues(socket, true)) + .then(function(condition) { + return models.ReportFaxSession + .count(_.merge({ + where: { + leaveAt: true + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_fax_dashboard:waiting', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get Open sms +function onOpenSms(socket, doc) { + return Promise + .all([]) + .then(getSmsQueues(socket, true)) + .then(function(condition) { + return models.SmsRoom + .count(_.merge({ + where: { + status: 'OPEN', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_sms_dashboard:open', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get closed sms +function onClosedSms(socket, doc) { + return Promise + .all([]) + .then(getSmsQueues(socket, true)) + .then(function(condition) { + return models.SmsRoom + .count(_.merge({ + where: { + status: 'CLOSED', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_sms_dashboard:closed', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get new sms +function onNewSms(socket, doc) { + return Promise + .all([]) + .then(getSmsQueues(socket, true)) + .then(function(condition) { + return models.SmsRoom + .count(_.merge({ + where: { + status: 'NEW', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_sms_dashboard:new', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get timeout sms +function onTimeoutSms(socket, doc) { + return Promise + .all([]) + .then(getSmsQueues(socket)) + .then(function(condition) { + return models.ReportSmsSession + .count(_.merge({ + where: { + timeout: true + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_sms_dashboard:timeout', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +function onPendingSms(socket, doc) { + return Promise + .all([]) + .then(getSmsQueues(socket, true)) + .then(function(condition) { + return models.SmsRoom + .count(_.merge({ + where: { + status: 'PENDING', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_sms_dashboard:pending', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +function onWaitingSms(socket, doc) { + return Promise + .all([]) + .then(getSmsQueues(socket)) + .then(function(condition) { + return models.ReportSmsSession + .count(_.merge({ + where: { + leaveAt: null + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_sms_dashboard:pending', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get Open openchannel +function onOpenOpenchannel(socket, doc) { + return Promise + .all([]) + .then(getOpenchannelQueues(socket, true)) + .then(function(condition) { + return models.OpenchannelRoom + .count(_.merge({ + where: { + status: 'OPEN', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_openchannel_dashboard:open', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get closed openchannel +function onClosedOpenchannel(socket, doc) { + return Promise + .all([]) + .then(getOpenchannelQueues(socket, true)) + .then(function(condition) { + return models.OpenchannelRoom + .count(_.merge({ + where: { + status: 'CLOSED', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_openchannel_dashboard:closed', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get new openchannel +function onNewOpenchannel(socket, doc) { + return Promise + .all([]) + .then(getOpenchannelQueues(socket, true)) + .then(function(condition) { + return models.OpenchannelRoom + .count(_.merge({ + where: { + status: 'NEW', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_openchannel_dashboard:new', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +// Get timeout openchannel +function onTimeoutOpenchannel(socket, doc) { + return Promise + .all([]) + .then(getOpenchannelQueues(socket)) + .then(function(condition) { + return models.ReportOpenchannelSession + .count(_.merge({ + where: { + timeout: true + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_openchannel_dashboard:timeout', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +function onPendingOpenchannel(socket, doc) { + return Promise + .all([]) + .then(getOpenchannelQueues(socket, true)) + .then(function(condition) { + return models.OpenchannelRoom + .count(_.merge({ + where: { + status: 'PENDING', + updatedAt: { + $gte: moment().startOf('day') + } + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_openchannel_dashboard:pending', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +function onWaitingOpenchannel(socket, doc) { + return Promise + .all([]) + .then(getOpenchannelQueues(socket)) + .then(function(condition) { + return models.ReportOpenchannelSession + .count(_.merge({ + where: { + leaveAt: null + } + }, condition)); + }) + .then(function(data) { + socket.emit('report_openchannel_dashboard:pending', { + value: data + }); + }) + .catch(function(err) { + console.error(err); + }); +} diff --git a/server/config/tools/faxAccount.js b/server/config/tools/faxAccount.js index 0d0a208..ccc342d 100644 --- a/server/config/tools/faxAccount.js +++ b/server/config/tools/faxAccount.js @@ -1 +1,257 @@ -var _0x80f5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x75\x74\x69\x6C","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x62\x6C\x75\x65\x62\x69\x72\x64","\x5F\x25\x73","\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64","\x66\x6F\x72\x6D\x61\x74","\x69\x64","\x47\x65\x6E\x65\x72\x61\x74\x65\x64\x20\x62\x79\x20\x46\x61\x78\x20\x43\x68\x61\x6E\x6E\x65\x6C\x20\x2D\x20\x41\x63\x63\x6F\x75\x6E\x74\x3A\x20\x25\x73","\x6E\x61\x6D\x65","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x73","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x72\x6F\x75\x74\x65\x55\x70\x64\x61\x74\x65","\x66\x69\x6E\x64\x4F\x6E\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x44\x65\x6C\x65\x74\x65","\x49\x6E\x62\x6F\x75\x6E\x64\x20\x43\x61\x6C\x6C","\x66\x72\x6F\x6D\x2D\x76\x6F\x69\x70\x2D\x70\x72\x6F\x76\x69\x64\x65\x72","\x31","\x2D\x2D","\x4E\x6F\x4F\x70","\x69\x6E\x62\x6F\x75\x6E\x64","\x49\x6E\x63\x6F\x6D\x69\x6E\x67\x20\x66\x61\x78\x20\x66\x72\x6F\x6D\x20\x24\x7B\x43\x41\x4C\x4C\x45\x52\x49\x44\x28\x6E\x75\x6D\x29\x7D","\x2A\x2C\x2A\x2C\x2A\x2C\x2A","\x63\x75\x73\x74\x6F\x6D","\x41\x63\x63\x6F\x75\x6E\x74\x20\x25\x73","\x43\x44\x52\x28\x74\x79\x70\x65\x29\x3D\x69\x6E\x62\x6F\x75\x6E\x64\x2D\x66\x61\x78","\x53\x65\x74","","\x41\x6E\x73\x77\x65\x72","\x32","\x57\x61\x69\x74","\x46\x41\x58\x4F\x50\x54\x28\x65\x63\x6D\x29\x3D\x25\x73","\x65\x63\x6D","\x46\x41\x58\x4F\x50\x54\x28\x68\x65\x61\x64\x65\x72\x69\x6E\x66\x6F\x29\x3D\x25\x73","\x68\x65\x61\x64\x65\x72\x69\x6E\x66\x6F","\x46\x41\x58\x4F\x50\x54\x28\x6C\x6F\x63\x61\x6C\x73\x74\x61\x74\x69\x6F\x6E\x69\x64\x29\x3D\x25\x73","\x46\x41\x58\x4F\x50\x54\x28\x6D\x69\x6E\x72\x61\x74\x65\x29\x3D\x25\x73","\x6D\x69\x6E\x72\x61\x74\x65","\x46\x41\x58\x4F\x50\x54\x28\x6D\x61\x78\x72\x61\x74\x65\x29\x3D\x25\x73","\x6D\x61\x78\x72\x61\x74\x65","\x46\x41\x58\x4F\x50\x54\x28\x6D\x6F\x64\x65\x6D\x29\x3D\x25\x73","\x6D\x6F\x64\x65\x6D","\x46\x41\x58\x4F\x50\x54\x28\x67\x61\x74\x65\x77\x61\x79\x29\x3D\x25\x73","\x67\x61\x74\x65\x77\x61\x79","\x46\x41\x58\x4F\x50\x54\x28\x74\x33\x38\x74\x69\x6D\x65\x6F\x75\x74\x29\x3D\x25\x73","\x74\x33\x38\x74\x69\x6D\x65\x6F\x75\x74","\x46\x41\x58\x4F\x50\x54\x28\x66\x61\x78\x64\x65\x74\x65\x63\x74\x29\x3D\x25\x73","\x66\x61\x78\x64\x65\x74\x65\x63\x74","\x2F\x76\x61\x72\x2F\x6F\x70\x74\x2F\x6D\x6F\x74\x69\x6F\x6E\x2F\x73\x65\x72\x76\x65\x72\x2F\x66\x69\x6C\x65\x73\x2F\x66\x61\x78\x2F\x69\x6E\x62\x6F\x75\x6E\x64\x2F\x6F\x72\x69\x67\x69\x6E\x61\x6C\x2F\x66\x61\x78\x2D\x24\x7B\x53\x54\x52\x46\x54\x49\x4D\x45\x28\x24\x7B\x45\x50\x4F\x43\x48\x7D\x2C\x2C\x25\x59\x25\x6D\x25\x64\x2D\x25\x48\x25\x4D\x25\x53\x29\x7D\x2E\x74\x69\x66","\x52\x65\x63\x65\x69\x76\x65\x46\x41\x58","\x48\x61\x6E\x67\x75\x70","\x64\x65\x73\x74\x72\x6F\x79","\x65\x78\x70\x6F\x72\x74\x73"];_0x80f5[0];var util=require(_0x80f5[1]);var VoiceExtension=require(_0x80f5[3])[_0x80f5[2]];var FaxAccountModel=require(_0x80f5[3])[_0x80f5[4]];var sequelize=require(_0x80f5[3])[_0x80f5[5]];var veUtil=require(_0x80f5[6]);var Promise=require(_0x80f5[7]);function FaxAccount(){FaxAccountModel[_0x80f5[18]](function(_0x76b4x8,_0x76b4x9){var _0x76b4xa=util[_0x80f5[10]](_0x80f5[8],_0x76b4x8[_0x80f5[9]]);var _0x76b4xb=_0x76b4x8[_0x80f5[11]];var _0x76b4xc=util[_0x80f5[10]](_0x80f5[12],_0x76b4x8[_0x80f5[13]]);var _0x76b4xd=generateExtensionArray(_0x76b4x8);var _0x76b4xe;return VoiceExtension[_0x80f5[17]](_0x76b4xd,{transaction:_0x76b4x9[_0x80f5[14]]})[_0x80f5[16]](function(_0x76b4xf){_0x76b4xe= _0x76b4xf;return _0x76b4xf})[_0x80f5[16]](veUtil[_0x80f5[15]](_0x76b4xd.Applications,_0x76b4x9[_0x80f5[14]]))});FaxAccountModel[_0x80f5[21]](function(_0x76b4x8,_0x76b4x9){var _0x76b4xa=util[_0x80f5[10]](_0x80f5[8],_0x76b4x8[_0x80f5[9]]);var _0x76b4xb=_0x76b4x8[_0x80f5[11]];var _0x76b4xc=util[_0x80f5[10]](_0x80f5[12],_0x76b4x8[_0x80f5[13]]);return VoiceExtension[_0x80f5[20]]({where:{FaxAccountId:_0x76b4x8[_0x80f5[11]]}})[_0x80f5[16]](function(_0x76b4x10){if(!_0x76b4x10){return};var _0x76b4x11={params:{id:_0x76b4x10[_0x80f5[11]]},body:generateExtensionArray(_0x76b4x8)};return veUtil[_0x80f5[19]](_0x76b4x11,_0x76b4x9[_0x80f5[14]])})});FaxAccountModel[_0x80f5[22]](function(_0x76b4x8,_0x76b4x9){return deleteVoiceExtensions(_0x76b4x8,_0x76b4x9)})}function generateExtensionArray(_0x76b4x8){var _0x76b4xa=util[_0x80f5[10]](_0x80f5[8],_0x76b4x8[_0x80f5[9]]);var _0x76b4xb=_0x76b4x8[_0x80f5[11]];var _0x76b4xc=util[_0x80f5[10]](_0x80f5[12],_0x76b4x8[_0x80f5[13]]);return {"\x61\x70\x70\x64\x61\x74\x61":_0x80f5[23],"\x63\x6F\x6E\x74\x65\x78\x74":_0x80f5[24],"\x65\x78\x74\x65\x6E":_0x76b4xa,"\x70\x72\x69\x6F\x72\x69\x74\x79":_0x80f5[25],"\x74\x61\x67":_0x80f5[26],"\x61\x70\x70":_0x80f5[27],"\x74\x79\x70\x65":_0x80f5[28],"\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E":_0x76b4xc,"\x69\x6E\x74\x65\x72\x76\x61\x6C":null,"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x69\x73\x41\x70\x70":false,"\x72\x65\x63\x6F\x72\x64":false,"\x46\x61\x78\x41\x63\x63\x6F\x75\x6E\x74\x49\x64":_0x76b4xb,"\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73":[{"\x61\x70\x70\x64\x61\x74\x61":[_0x80f5[29]],"\x61\x70\x70":_0x80f5[27],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":_0x80f5[31]},{"\x61\x70\x70\x64\x61\x74\x61":[util[_0x80f5[10]](_0x80f5[32],_0x76b4x8[_0x80f5[13]])],"\x61\x70\x70":_0x80f5[27],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":_0x80f5[31]},{"\x61\x70\x70\x64\x61\x74\x61":[_0x80f5[33]],"\x61\x70\x70":_0x80f5[34],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":null},{"\x61\x70\x70\x64\x61\x74\x61":[_0x80f5[35]],"\x61\x70\x70":_0x80f5[36],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":_0x80f5[31]},{"\x61\x70\x70\x64\x61\x74\x61":[_0x80f5[37]],"\x61\x70\x70":_0x80f5[38],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":_0x80f5[31]},{"\x61\x70\x70\x64\x61\x74\x61":[util[_0x80f5[10]](_0x80f5[39],_0x76b4x8[_0x80f5[40]])],"\x61\x70\x70":_0x80f5[34],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":null},{"\x61\x70\x70\x64\x61\x74\x61":[util[_0x80f5[10]](_0x80f5[41],_0x76b4x8[_0x80f5[42]])],"\x61\x70\x70":_0x80f5[34],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":null},{"\x61\x70\x70\x64\x61\x74\x61":[util[_0x80f5[10]](_0x80f5[43],_0x76b4x8[_0x80f5[9]])],"\x61\x70\x70":_0x80f5[34],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":null},{"\x61\x70\x70\x64\x61\x74\x61":[util[_0x80f5[10]](_0x80f5[44],_0x76b4x8[_0x80f5[45]])],"\x61\x70\x70":_0x80f5[34],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":null},{"\x61\x70\x70\x64\x61\x74\x61":[util[_0x80f5[10]](_0x80f5[46],_0x76b4x8[_0x80f5[47]])],"\x61\x70\x70":_0x80f5[34],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":null},{"\x61\x70\x70\x64\x61\x74\x61":[util[_0x80f5[10]](_0x80f5[48],_0x76b4x8[_0x80f5[49]])],"\x61\x70\x70":_0x80f5[34],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":null},{"\x61\x70\x70\x64\x61\x74\x61":[util[_0x80f5[10]](_0x80f5[50],_0x76b4x8[_0x80f5[51]])],"\x61\x70\x70":_0x80f5[34],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":null},{"\x61\x70\x70\x64\x61\x74\x61":[util[_0x80f5[10]](_0x80f5[52],_0x76b4x8[_0x80f5[53]])],"\x61\x70\x70":_0x80f5[34],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":null},{"\x61\x70\x70\x64\x61\x74\x61":[util[_0x80f5[10]](_0x80f5[54],_0x76b4x8[_0x80f5[55]])],"\x61\x70\x70":_0x80f5[34],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":null},{"\x61\x70\x70\x64\x61\x74\x61":[_0x80f5[56]],"\x61\x70\x70":_0x80f5[57],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":_0x80f5[31]},{"\x61\x70\x70\x64\x61\x74\x61":[_0x80f5[35]],"\x61\x70\x70":_0x80f5[58],"\x69\x6E\x74\x65\x72\x76\x61\x6C":_0x80f5[30],"\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64":null,"\x63\x61\x6C\x6C\x65\x72\x49\x44":null,"\x74\x79\x70\x65":_0x80f5[28],"\x61\x70\x70\x54\x79\x70\x65":null}]}}function deleteVoiceExtensions(_0x76b4x8,_0x76b4x9){return VoiceExtension[_0x80f5[59]]({where:{FaxAccountId:_0x76b4x8[_0x80f5[11]]},transaction:_0x76b4x9[_0x80f5[14]]})}module[_0x80f5[60]]= FaxAccount \ No newline at end of file +'use strict'; + +var util = require('util'); + +var VoiceExtension = require('../../models').VoiceExtension; +var FaxAccountModel = require('../../models').FaxAccount; +var sequelize = require('../../models').sequelize; +var veUtil = require('../../utils/voice_extension'); +var Promise = require('bluebird'); + +function FaxAccount() { + + FaxAccountModel.afterCreate(function(doc, options) { + var _exten = util.format('_%s', doc.localstationid); + var _accountId = doc.id; + var _description = util.format("Generated by Fax Channel - Account: %s", doc.name); + + var body = generateExtensionArray(doc); + var _route; + + return VoiceExtension + .create(body, { + transaction: options.transaction + }) + .then(function(route) { + _route = route; + return route; + }) + .then(veUtil.createApps(body.Applications, options.transaction)); + }); + + FaxAccountModel.afterUpdate(function(doc, options) { + var _exten = util.format('_%s', doc.localstationid); + var _accountId = doc.id; + var _description = util.format("Generated by Fax Channel - Account: %s", doc.name); + + return VoiceExtension + .findOne({ + where: { + FaxAccountId: doc.id + } + }) + .then(function(voiceExtension) { + if (!voiceExtension) { + return; + } + var req = { + params: { + id: voiceExtension.id + }, + body: generateExtensionArray(doc) + }; + return veUtil.routeUpdate(req, options.transaction); + }); + + }); + + FaxAccountModel.afterDelete(function(doc, options) { + return deleteVoiceExtensions(doc, options); + }); + +} + +function generateExtensionArray(doc) { + var _exten = util.format('_%s', doc.localstationid); + var _accountId = doc.id; + var _description = util.format("Generated by Fax Channel - Account: %s", doc.name); + + return { + "appdata": "Inbound Call", + "context": "from-voip-provider", + "exten": _exten, + "priority": "1", + "tag": "--", + "app": "NoOp", + "type": "inbound", + "description": _description, + "interval": null, + "IntervalId": null, + "isApp": false, + "record": false, + "FaxAccountId": _accountId, + "Applications": [{ + "appdata": [ + "Incoming fax from ${CALLERID(num)}" + ], + "app": "NoOp", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": "custom" + }, { + "appdata": [ + util.format('Account %s', doc.name) + ], + "app": "NoOp", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": "custom" + }, { + "appdata": [ + "CDR(type)=inbound-fax" + ], + "app": "Set", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": null + }, { + "appdata": [ + "" + ], + "app": "Answer", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": "custom" + }, { + "appdata": [ + "2" + ], + "app": "Wait", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": "custom" + }, { + "appdata": [ + util.format('FAXOPT(ecm)=%s', doc.ecm) + ], + "app": "Set", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": null + }, { + "appdata": [ + util.format('FAXOPT(headerinfo)=%s', doc.headerinfo) + ], + "app": "Set", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": null + }, { + "appdata": [ + util.format('FAXOPT(localstationid)=%s', doc.localstationid) + ], + "app": "Set", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": null + }, { + "appdata": [ + util.format('FAXOPT(minrate)=%s', doc.minrate) + ], + "app": "Set", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": null + }, { + "appdata": [ + util.format('FAXOPT(maxrate)=%s', doc.maxrate) + ], + "app": "Set", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": null + }, { + "appdata": [ + util.format('FAXOPT(modem)=%s', doc.modem) + ], + "app": "Set", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": null + }, { + "appdata": [ + util.format('FAXOPT(gateway)=%s', doc.gateway) + ], + "app": "Set", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": null + }, { + "appdata": [ + util.format('FAXOPT(t38timeout)=%s', doc.t38timeout) + ], + "app": "Set", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": null + }, { + "appdata": [ + util.format('FAXOPT(faxdetect)=%s', doc.faxdetect) + ], + "app": "Set", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": null + }, { + "appdata": [ + '/var/opt/motion/server/files/fax/inbound/original/fax-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}.tif' + ], + "app": "ReceiveFAX", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": "custom" + }, { + "appdata": [ + "" + ], + "app": "Hangup", + "interval": "*,*,*,*", + "IntervalId": null, + "callerID": null, + "type": "inbound", + "appType": null + }] + }; +} + +function deleteVoiceExtensions(doc, options) { + return VoiceExtension + .destroy({ + where: { + FaxAccountId: doc.id + }, + transaction: options.transaction + }); +} + +module.exports = FaxAccount; diff --git a/server/config/tools/faxRoom.js b/server/config/tools/faxRoom.js index 4597f93..3c52a65 100644 --- a/server/config/tools/faxRoom.js +++ b/server/config/tools/faxRoom.js @@ -1 +1,35 @@ -var _0x5627=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x46\x61\x78\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x46\x61\x78\x52\x6F\x6F\x6D\x53\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73","\x75\x73\x65\x72","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x69\x64","\x63\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x6F\x70\x65\x6E\x52\x65\x61\x73\x6F\x6E","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x5627[0];const _=require(_0x5627[1]);const moment=require(_0x5627[2]);const Room=require(_0x5627[4])[_0x5627[3]];const Status=require(_0x5627[4])[_0x5627[5]];function FaxRoom(){Room[_0x5627[12]](function(_0xcd0cx6,_0xcd0cx7){return Status[_0x5627[11]]({status:_0xcd0cx6[_0x5627[6]],data1:_0xcd0cx7[_0x5627[7]]?_0xcd0cx7[_0x5627[7]][_0x5627[8]]:null,data2:_0xcd0cx7[_0x5627[7]]?_0xcd0cx7[_0x5627[7]][_0x5627[9]]:null,FaxRoomId:_0xcd0cx6[_0x5627[10]],UserId:_0xcd0cx7[_0x5627[7]]?_0xcd0cx7[_0x5627[7]][_0x5627[10]]:null})});Room[_0x5627[15]](function(_0xcd0cx6,_0xcd0cx7){if(_0xcd0cx6[_0x5627[13]](_0x5627[6])|| _0xcd0cx6[_0x5627[13]](_0x5627[14])){return Status[_0x5627[11]]({status:_0xcd0cx6[_0x5627[6]],data1:_0xcd0cx7[_0x5627[7]]?_0xcd0cx7[_0x5627[7]][_0x5627[8]]:null,data2:_0xcd0cx7[_0x5627[7]]?_0xcd0cx7[_0x5627[7]][_0x5627[9]]:null,FaxRoomId:_0xcd0cx6[_0x5627[10]],UserId:_0xcd0cx7[_0x5627[7]]?_0xcd0cx7[_0x5627[7]][_0x5627[10]]:null})}})}module[_0x5627[16]]= FaxRoom \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const moment = require('moment'); + +const Room = require('../../models').FaxRoom; +const Status = require('../../models').FaxRoomStatus; + +function FaxRoom() { + Room.afterCreate(function(doc, opt) { + return Status + .create({ + status: doc.status, + data1: opt.user ? opt.user.name : null, + data2: opt.user ? opt.user.fullname : null, + FaxRoomId: doc.id, + UserId: opt.user ? opt.user.id : null + }); + }); + + Room.afterUpdate(function(doc, opt) { + if (doc.changed('status') || doc.changed('openReason')) { + return Status + .create({ + status: doc.status, + data1: opt.user ? opt.user.name : null, + data2: opt.user ? opt.user.fullname : null, + FaxRoomId: doc.id, + UserId: opt.user ? opt.user.id : null + }); + } + }); +} + +module.exports = FaxRoom; diff --git a/server/config/tools/index.js b/server/config/tools/index.js index 3e605f5..f9c1659 100644 --- a/server/config/tools/index.js +++ b/server/config/tools/index.js @@ -1 +1,26 @@ -var _0x3c86=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C","\x2E\x2F\x75\x73\x65\x72","\x2E\x2F\x63\x68\x61\x6E\x6E\x65\x6C\x53\x70\x79","\x2E\x2F\x6D\x61\x69\x6C\x52\x6F\x6F\x6D","\x2E\x2F\x6D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2F\x63\x68\x61\x74\x52\x6F\x6F\x6D","\x2E\x2F\x66\x61\x78\x52\x6F\x6F\x6D","\x2E\x2F\x73\x6D\x73\x52\x6F\x6F\x6D","\x2E\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D","\x2E\x2F\x66\x61\x78\x41\x63\x63\x6F\x75\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x3c86[0];var Interval=require(_0x3c86[1]);var User=require(_0x3c86[2]);var ChanSpy=require(_0x3c86[3]);var MailRoom=require(_0x3c86[4]);var MailAccount=require(_0x3c86[5]);var ChatRoom=require(_0x3c86[6]);var FaxRoom=require(_0x3c86[7]);var SmsRoom=require(_0x3c86[8]);var OpenchannelRoom=require(_0x3c86[9]);var FaxAccount=require(_0x3c86[10]);module[_0x3c86[11]]= function(){ new Interval(); new User(); new ChanSpy(); new MailRoom(); new MailAccount(); new ChatRoom(); new FaxRoom(); new SmsRoom(); new FaxAccount(); new OpenchannelRoom()} \ No newline at end of file +'use strict'; + +var Interval = require('./interval'); +var User = require('./user'); +var ChanSpy = require('./channelSpy'); +var MailRoom = require('./mailRoom'); +var MailAccount = require('./mailAccount'); +var ChatRoom = require('./chatRoom'); +var FaxRoom = require('./faxRoom'); +var SmsRoom = require('./smsRoom'); +var OpenchannelRoom = require('./openchannelRoom'); +var FaxAccount = require('./faxAccount'); + +module.exports = function() { + // Tools Mangament + new Interval(); + new User(); + new ChanSpy(); + new MailRoom(); + new MailAccount(); + new ChatRoom(); + new FaxRoom(); + new SmsRoom(); + new FaxAccount(); + new OpenchannelRoom(); +} diff --git a/server/config/tools/interval.js b/server/config/tools/interval.js index 046a8ce..223b7bf 100644 --- a/server/config/tools/interval.js +++ b/server/config/tools/interval.js @@ -1 +1,74 @@ -var _0x41f3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x75\x74\x69\x6C\x73\x2F\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x49\x6E\x74\x65\x72\x76\x61\x6C\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E","\x6C\x6F\x67","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64","\x62\x65\x66\x6F\x72\x65\x44\x65\x73\x74\x72\x6F\x79","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x69\x64","\x63\x61\x74\x63\x68","\x50\x52\x49\x4D\x41\x52\x59","\x66\x69\x65\x6C\x64\x73","\x6D\x65\x73\x73\x61\x67\x65","\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2F\x63\x6F\x6E\x74\x65\x78\x74\x20\x63\x6F\x6D\x62\x69\x6E\x61\x74\x69\x6F\x6E\x20\x61\x6C\x72\x65\x61\x64\x79\x20\x65\x78\x69\x73\x74","\x74\x72\x61\x6E\x73\x6C\x61\x74\x65\x64\x4D\x65\x73\x73\x61\x67\x65","\x4D\x45\x53\x53\x41\x47\x45\x5F\x45\x58\x49\x53\x54\x5F\x52\x4F\x55\x54\x45","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x72\x6F\x75\x74\x65\x55\x70\x64\x61\x74\x65","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x61\x70\x70","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x63\x61\x6C\x6C\x65\x72\x49\x44","\x61\x70\x70\x64\x61\x74\x61","\x74\x79\x70\x65","\x66\x69\x6E\x64\x41\x6C\x6C","\x65\x78\x70\x6F\x72\x74\x73"];_0x41f3[0];var _=require(_0x41f3[1]);var util=require(_0x41f3[2]);var IntervalModel=require(_0x41f3[4])[_0x41f3[3]];var VoiceExtension=require(_0x41f3[4])[_0x41f3[5]];var veUtil=require(_0x41f3[6]);var sequelize=require(_0x41f3[4])[_0x41f3[7]];var Applications=veUtil[_0x41f3[8]];function Interval(){console[_0x41f3[10]](_0x41f3[9]);IntervalModel[_0x41f3[11]](function(_0x1cb5x9){updatevoiceExtension(_0x1cb5x9)});IntervalModel[_0x41f3[13]](function(_0x1cb5x9){if(_0x1cb5x9[_0x41f3[12]]!== null){updatevoiceExtension(_0x1cb5x9)}});IntervalModel[_0x41f3[14]](function(_0x1cb5x9){if(_0x1cb5x9[_0x41f3[12]]!== null){updatevoiceExtension(_0x1cb5x9)}})}function updatevoiceExtension(_0x1cb5x9){var _0x1cb5xb=_0x1cb5x9[_0x41f3[12]]=== null?_0x1cb5x9[_0x41f3[15]]:_0x1cb5x9[_0x41f3[12]];return VoiceExtension[_0x41f3[33]]({where:{VoiceExtensionId:null},include:[{model:VoiceExtension,as:_0x41f3[8],where:{IntervalId:_0x1cb5xb},attributes:[_0x41f3[28],_0x41f3[29],_0x41f3[12],_0x41f3[30],_0x41f3[31],_0x41f3[32]]}]})[_0x41f3[27]](function(_0x1cb5xd){_0x1cb5xd[_0x41f3[26]](function(_0x1cb5xe){return sequelize[_0x41f3[25]](function(_0x1cb5xf){return veUtil[_0x41f3[24]]({body:_0x1cb5xe[_0x41f3[23]],params:{id:_0x1cb5xe[_0x41f3[15]]}},_0x1cb5xf)})[_0x41f3[16]](sequelize.UniqueConstraintError,function(_0x1cb5xc){if(_0x1cb5xc[_0x41f3[18]][_0x41f3[17]]){_0x1cb5xc[_0x41f3[19]]= _0x41f3[20];_0x1cb5xc[_0x41f3[21]]= _0x41f3[22]};console[_0x41f3[10]](_0x1cb5xc)})[_0x41f3[16]](function(_0x1cb5xc){console[_0x41f3[10]](_0x1cb5xc)})})})[_0x41f3[16]](function(_0x1cb5xc){console[_0x41f3[10]](_0x1cb5xc)})}module[_0x41f3[34]]= Interval \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var IntervalModel = require('../../models').Interval; +var VoiceExtension = require('../../models').VoiceExtension; +var veUtil = require('../../utils/voice_extension'); +var sequelize = require('../../models').sequelize; +var Applications = veUtil.Applications; + +function Interval() { + console.log('Interval Initialization..'); + IntervalModel.afterUpdate(function(interval) { + updatevoiceExtension(interval); + }) + + IntervalModel.beforeDestroy(function(interval) { + if (interval.IntervalId !== null) { + updatevoiceExtension(interval); + } + }) + + IntervalModel.afterCreate(function(interval) { + if (interval.IntervalId !== null) { + updatevoiceExtension(interval); + } + }) +} + +function updatevoiceExtension(interval) { + var IntervalId = interval.IntervalId === null ? interval.id : interval.IntervalId; + return VoiceExtension + .findAll({ + where: { + VoiceExtensionId: null + }, + include: [{ + model: VoiceExtension, + as: 'Applications', + where: { + IntervalId: IntervalId + }, + attributes: ['app', 'interval', 'IntervalId', 'callerID', 'appdata', 'type'] + }] + }) + .then(function(voiceExtensions) { + voiceExtensions.forEach(function(elem) { + return sequelize.transaction(function(t) { + return veUtil.routeUpdate({ + body: elem.dataValues, + params: { + id: elem.id + } + }, t); + }) + .catch(sequelize.UniqueConstraintError, function(err) { + if (err.fields.PRIMARY) { + err.message = 'Extension/context combination already exist'; + err.translatedMessage = 'MESSAGE_EXIST_ROUTE' + } + console.log(err); + }) + .catch(function(err) { + console.log(err); + }); + }); + }) + .catch(function(err) { + console.log(err); + }); +} + + +module.exports = Interval; diff --git a/server/config/tools/mailAccount.js b/server/config/tools/mailAccount.js index edb6f89..e2da0c5 100644 --- a/server/config/tools/mailAccount.js +++ b/server/config/tools/mailAccount.js @@ -1 +1,40 @@ -var _0xc1ef=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x72\x76\x69\x63\x65","\x69\x64","\x75\x70\x64\x61\x74\x65","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xc1ef[0];const _=require(_0xc1ef[1]);const moment=require(_0xc1ef[2]);const Account=require(_0xc1ef[4])[_0xc1ef[3]];function MailAccount(){Account[_0xc1ef[8]](function(_0x2c92x5,_0x2c92x6){if(_0x2c92x5[_0xc1ef[5]]){return Account[_0xc1ef[7]]({service:false},{where:{id:{$ne:_0x2c92x5[_0xc1ef[6]]}}})}});Account[_0xc1ef[10]](function(_0x2c92x5,_0x2c92x6){if(_0x2c92x5[_0xc1ef[9]](_0xc1ef[5])&& _0x2c92x5[_0xc1ef[5]]){return Account[_0xc1ef[7]]({service:false},{where:{id:{$ne:_0x2c92x5[_0xc1ef[6]]}}})}})}module[_0xc1ef[11]]= MailAccount \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const moment = require('moment'); + +const Account = require('../../models').MailAccount; + +function MailAccount() { + Account.afterCreate(function(doc, opt) { + if (doc.service) { + return Account + .update({ + service: false + }, { + where: { + id: { + $ne: doc.id + } + } + }); + } + }); + + Account.afterUpdate(function(doc, opt) { + if (doc.changed('service') && doc.service) { + return Account + .update({ + service: false + }, { + where: { + id: { + $ne: doc.id + } + } + }); + } + }); +} + +module.exports = MailAccount; diff --git a/server/config/tools/mailRoom.js b/server/config/tools/mailRoom.js index ed1fa5e..697cbbb 100644 --- a/server/config/tools/mailRoom.js +++ b/server/config/tools/mailRoom.js @@ -1 +1,35 @@ -var _0xccd5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x53\x74\x61\x74\x75\x73","\x73\x74\x61\x74\x75\x73","\x75\x73\x65\x72","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x69\x64","\x63\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x6F\x70\x65\x6E\x52\x65\x61\x73\x6F\x6E","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xccd5[0];const _=require(_0xccd5[1]);const moment=require(_0xccd5[2]);const Room=require(_0xccd5[4])[_0xccd5[3]];const Status=require(_0xccd5[4])[_0xccd5[5]];function MailRoom(){Room[_0xccd5[12]](function(_0xf1ffx6,_0xf1ffx7){return Status[_0xccd5[11]]({status:_0xf1ffx6[_0xccd5[6]],data1:_0xf1ffx7[_0xccd5[7]]?_0xf1ffx7[_0xccd5[7]][_0xccd5[8]]:null,data2:_0xf1ffx7[_0xccd5[7]]?_0xf1ffx7[_0xccd5[7]][_0xccd5[9]]:null,MailRoomId:_0xf1ffx6[_0xccd5[10]],UserId:_0xf1ffx7[_0xccd5[7]]?_0xf1ffx7[_0xccd5[7]][_0xccd5[10]]:null})});Room[_0xccd5[15]](function(_0xf1ffx6,_0xf1ffx7){if(_0xf1ffx6[_0xccd5[13]](_0xccd5[6])|| _0xf1ffx6[_0xccd5[13]](_0xccd5[14])){return Status[_0xccd5[11]]({status:_0xf1ffx6[_0xccd5[6]],data1:_0xf1ffx7[_0xccd5[7]]?_0xf1ffx7[_0xccd5[7]][_0xccd5[8]]:null,data2:_0xf1ffx7[_0xccd5[7]]?_0xf1ffx7[_0xccd5[7]][_0xccd5[9]]:null,MailRoomId:_0xf1ffx6[_0xccd5[10]],UserId:_0xf1ffx7[_0xccd5[7]]?_0xf1ffx7[_0xccd5[7]][_0xccd5[10]]:null})}})}module[_0xccd5[16]]= MailRoom \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const moment = require('moment'); + +const Room = require('../../models').MailRoom; +const Status = require('../../models').MailRoomStatus; + +function MailRoom() { + Room.afterCreate(function(doc, opt) { + return Status + .create({ + status: doc.status, + data1: opt.user ? opt.user.name : null, + data2: opt.user ? opt.user.fullname : null, + MailRoomId: doc.id, + UserId: opt.user ? opt.user.id : null + }); + }); + + Room.afterUpdate(function(doc, opt) { + if (doc.changed('status') || doc.changed('openReason')) { + return Status + .create({ + status: doc.status, + data1: opt.user ? opt.user.name : null, + data2: opt.user ? opt.user.fullname : null, + MailRoomId: doc.id, + UserId: opt.user ? opt.user.id : null + }); + } + }); +} + +module.exports = MailRoom; diff --git a/server/config/tools/openchannelRoom.js b/server/config/tools/openchannelRoom.js index 917b5b9..6cd41af 100644 --- a/server/config/tools/openchannelRoom.js +++ b/server/config/tools/openchannelRoom.js @@ -1 +1,26 @@ -var _0x2126=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D\x53\x74\x61\x74\x75\x73","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x63\x68\x61\x6E\x67\x65\x64","\x6F\x70\x65\x6E\x52\x65\x61\x73\x6F\x6E","\x75\x73\x65\x72","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x69\x64","\x63\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0x2126[0];const _=require(_0x2126[1]);const moment=require(_0x2126[2]);const Room=require(_0x2126[4])[_0x2126[3]];const Status=require(_0x2126[4])[_0x2126[5]];function OpenchannelRoom(){Room[_0x2126[6]](function(_0x1d02x6,_0x1d02x7){});Room[_0x2126[15]](function(_0x1d02x6,_0x1d02x7){if(_0x1d02x6[_0x2126[8]](_0x2126[7])|| _0x1d02x6[_0x2126[8]](_0x2126[9])){return Status[_0x2126[14]]({status:_0x1d02x6[_0x2126[7]],data1:_0x1d02x7[_0x2126[10]]?_0x1d02x7[_0x2126[10]][_0x2126[11]]:null,data2:_0x1d02x7[_0x2126[10]]?_0x1d02x7[_0x2126[10]][_0x2126[12]]:null,OpenchannelRoomId:_0x1d02x6[_0x2126[13]],UserId:_0x1d02x7[_0x2126[10]]?_0x1d02x7[_0x2126[10]][_0x2126[13]]:null})}})}module[_0x2126[16]]= OpenchannelRoom \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const moment = require('moment'); + +const Room = require('../../models').OpenchannelRoom; +const Status = require('../../models').OpenchannelRoomStatus; + +function OpenchannelRoom() { + Room.afterCreate(function(doc, opt) {}); + + Room.afterUpdate(function(doc, opt) { + if (doc.changed('status') || doc.changed('openReason')) { + return Status + .create({ + status: doc.status, + data1: opt.user ? opt.user.name : null, + data2: opt.user ? opt.user.fullname : null, + OpenchannelRoomId: doc.id, + UserId: opt.user ? opt.user.id : null + }); + } + }); +} + +module.exports = OpenchannelRoom; diff --git a/server/config/tools/queueParameters.js b/server/config/tools/queueParameters.js index 52177ae..81ea345 100644 --- a/server/config/tools/queueParameters.js +++ b/server/config/tools/queueParameters.js @@ -1 +1,384 @@ -var _0x46d0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x62\x6C\x75\x65\x62\x69\x72\x64","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x72\x65\x67\x69\x73\x74\x65\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74","\x63\x68\x61\x6E\x67\x65\x64","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x74\x68\x65\x6E","\x69\x64","\x66\x69\x6E\x64\x42\x79\x49\x64","\x55\x73\x65\x72","\x75\x73\x65\x72","\x66\x69\x6E\x64\x41\x6C\x6C","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x57\x41\x49\x54\x49\x4E\x47\x20\x45\x52\x52\x4F\x52","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x6C\x65\x6E\x67\x74\x68","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x71\x75\x65\x75\x65","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x3A\x70\x61\x72\x61\x6D\x65\x74\x65\x72\x73","\x65\x6D\x69\x74","\x72\x6F\x77\x73","\x66\x69\x6E\x64","\x6E\x61\x6D\x65","\x43\x4F\x55\x4E\x54","\x63\x6F\x6C","\x66\x6E","\x77\x61\x69\x74\x69\x6E\x67","\x75\x73\x65\x72\x49\x64","\x72\x6F\x6C\x65","\x61\x6C\x6C","\x41\x43\x54\x49\x56\x45\x20\x45\x52\x52\x4F\x52","\x61\x63\x74\x69\x76\x65","\x41\x42\x41\x4E\x44\x4F\x4E\x45\x44\x20\x45\x52\x52\x4F\x52","\x61\x62\x61\x6E\x64\x6F\x6E\x65\x64","\x41\x4E\x53\x57\x45\x52\x45\x44\x20\x45\x52\x52\x4F\x52","\x61\x6E\x73\x77\x65\x72\x65\x64","\x48\x4F\x4C\x44\x54\x49\x4D\x45\x20\x45\x52\x52\x4F\x52","\x30\x30\x3A\x30\x30\x3A\x30\x30","","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x20\x41\x53\x20\x27\x6E\x61\x6D\x65\x27\x2C\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x29\x2C\x20\x30\x29\x29\x20\x61\x73\x20\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x20\x57\x48\x45\x52\x45\x20\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x3D\x20\x31\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x20\x3D\x27\x25\x73\x27\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65","\x66\x6F\x72\x6D\x61\x74","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x71\x75\x65\x72\x79","\x54\x41\x4C\x4B\x54\x49\x4D\x45\x20\x45\x52\x52\x4F\x52","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x20\x41\x53\x20\x27\x6E\x61\x6D\x65\x27\x2C\x53\x45\x43\x5F\x54\x4F\x5F\x54\x49\x4D\x45\x28\x52\x4F\x55\x4E\x44\x28\x41\x56\x47\x28\x74\x61\x6C\x6B\x74\x69\x6D\x65\x29\x2C\x20\x30\x29\x29\x20\x61\x73\x20\x74\x61\x6C\x6B\x74\x69\x6D\x65\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x20\x57\x48\x45\x52\x45\x20\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x3D\x20\x31\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x20\x3D\x27\x25\x73\x27\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65","\x54\x4F\x54\x41\x4C\x43\x41\x4C\x4C\x53\x20\x45\x52\x52\x4F\x52","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x20\x41\x53\x20\x27\x6E\x61\x6D\x65\x27\x2C\x43\x4F\x55\x4E\x54\x28\x64\x69\x73\x74\x69\x6E\x63\x74\x20\x75\x6E\x69\x71\x75\x65\x69\x64\x29\x20\x61\x73\x20\x74\x6F\x74\x61\x6C\x63\x61\x6C\x6C\x73\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x20\x3D\x27\x25\x73\x27\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65","\x55\x4E\x4D\x41\x4E\x41\x47\x45\x44\x20\x45\x52\x52\x4F\x52","\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64"];_0x46d0[0];var sequelize=require(_0x46d0[2])[_0x46d0[1]];var models=require(_0x46d0[2]);var Util=require(_0x46d0[3]);var Promise=require(_0x46d0[4]);var _=require(_0x46d0[5]);var util=require(_0x46d0[6]);exports[_0x46d0[7]]= function(_0xbd11x7){models[_0x46d0[9]][_0x46d0[8]](function(_0xbd11x8){onWaiting(_0xbd11x7,_0xbd11x8)});models[_0x46d0[9]][_0x46d0[12]](function(_0xbd11x8){if(_0xbd11x8[_0x46d0[11]](_0x46d0[10])){onWaiting(_0xbd11x7,_0xbd11x8);onActive(_0xbd11x7,_0xbd11x8)}});models[_0x46d0[9]][_0x46d0[12]](function(_0xbd11x8){if(_0xbd11x8[_0x46d0[11]](_0x46d0[13])|| _0xbd11x8[_0x46d0[11]](_0x46d0[14])){onAbandon(_0xbd11x7,_0xbd11x8);onComplete(_0xbd11x7,_0xbd11x8);onActive(_0xbd11x7,_0xbd11x8);onAvgAnswerTime(_0xbd11x7,_0xbd11x8);onAvgTalkTime(_0xbd11x7,_0xbd11x8);onTotalOffered(_0xbd11x7,_0xbd11x8);onUnmanaged(_0xbd11x7,_0xbd11x8)}})};function getQueues(_0xbd11xa,_0xbd11xb){return function(){switch(_0xbd11xb){case _0x46d0[20]:return models[_0x46d0[19]][_0x46d0[18]](_0xbd11xa,{attributes:[_0x46d0[17]]})[_0x46d0[16]](Util[_0x46d0[15]]());default:return models[_0x46d0[22]][_0x46d0[21]]()[_0x46d0[16]](function(_0xbd11xc){return {rows:_0xbd11xc}})}}}function onWaiting(_0xbd11x7,_0xbd11x8){return Promise[_0x46d0[40]]([])[_0x46d0[16]](getQueues(_0xbd11x7[_0x46d0[38]],_0xbd11x7[_0x46d0[39]]))[_0x46d0[16]](function(_0xbd11x11){if(_0xbd11x11[_0x46d0[31]][_0x46d0[26]]){return models[_0x46d0[9]][_0x46d0[21]]({where:{queuecallerleaveAt:null,queue:_[_0x46d0[32]](_0xbd11x11[_0x46d0[31]],{name:_0xbd11x8[_0x46d0[28]]})?_0xbd11x8[_0x46d0[28]]:[]},group:_0x46d0[28],attributes:[[_0x46d0[28],_0x46d0[33]],[sequelize[_0x46d0[36]](_0x46d0[34],sequelize[_0x46d0[35]](_0x46d0[17])),_0x46d0[37]]]})};return null})[_0x46d0[16]](function(_0xbd11xf){if(_0xbd11xf){var _0xbd11x10;if(_0xbd11xf[_0x46d0[26]]){_0xbd11x10= _0xbd11xf[0][_0x46d0[27]]}else {_0xbd11x10= {name:_0xbd11x8[_0x46d0[28]],waiting:0}};_0xbd11x7[_0x46d0[30]](_0x46d0[29],_0xbd11x10)}})[_0x46d0[25]](function(_0xbd11xe){console[_0x46d0[24]](_0x46d0[23],_0xbd11xe)})}function onActive(_0xbd11x7,_0xbd11x8){return Promise[_0x46d0[40]]([])[_0x46d0[16]](getQueues(_0xbd11x7[_0x46d0[38]],_0xbd11x7[_0x46d0[39]]))[_0x46d0[16]](function(_0xbd11x11){if(_0xbd11x11[_0x46d0[31]][_0x46d0[26]]){return models[_0x46d0[9]][_0x46d0[21]]({where:{queuecallerexit:false,queuecallerabandon:false,queuecallercomplete:false,queuecallerleaveAt:{$ne:null},queue:_[_0x46d0[32]](_0xbd11x11[_0x46d0[31]],{name:_0xbd11x8[_0x46d0[28]]})?_0xbd11x8[_0x46d0[28]]:[]},group:_0x46d0[28],attributes:[[_0x46d0[28],_0x46d0[33]],[sequelize[_0x46d0[36]](_0x46d0[34],sequelize[_0x46d0[35]](_0x46d0[17])),_0x46d0[42]]]})};return null})[_0x46d0[16]](function(_0xbd11x13){if(_0xbd11x13){var _0xbd11x10;if(_0xbd11x13[_0x46d0[26]]){_0xbd11x10= _0xbd11x13[0][_0x46d0[27]]}else {_0xbd11x10= {name:_0xbd11x8[_0x46d0[28]],active:0}};_0xbd11x7[_0x46d0[30]](_0x46d0[29],_0xbd11x10)}})[_0x46d0[25]](function(_0xbd11xe){console[_0x46d0[24]](_0x46d0[41],_0xbd11xe)})}function onAbandon(_0xbd11x7,_0xbd11x8){return Promise[_0x46d0[40]]([])[_0x46d0[16]](getQueues(_0xbd11x7[_0x46d0[38]],_0xbd11x7[_0x46d0[39]]))[_0x46d0[16]](function(_0xbd11x11){if(_0xbd11x11[_0x46d0[31]][_0x46d0[26]]){return models[_0x46d0[9]][_0x46d0[21]]({where:{queuecallerabandon:true,queue:_[_0x46d0[32]](_0xbd11x11[_0x46d0[31]],{name:_0xbd11x8[_0x46d0[28]]})?_0xbd11x8[_0x46d0[28]]:[]},group:_0x46d0[28],attributes:[[_0x46d0[28],_0x46d0[33]],[sequelize[_0x46d0[36]](_0x46d0[34],sequelize[_0x46d0[35]](_0x46d0[17])),_0x46d0[44]]]})};return null})[_0x46d0[16]](function(_0xbd11x15){if(_0xbd11x15){var _0xbd11x10;if(_0xbd11x15[_0x46d0[26]]){_0xbd11x10= _0xbd11x15[0][_0x46d0[27]]}else {_0xbd11x10= {name:_0xbd11x8[_0x46d0[28]],abandoned:0}};_0xbd11x7[_0x46d0[30]](_0x46d0[29],_0xbd11x10)}})[_0x46d0[25]](function(_0xbd11xe){console[_0x46d0[24]](_0x46d0[43],_0xbd11xe)})}function onComplete(_0xbd11x7,_0xbd11x8){return Promise[_0x46d0[40]]([])[_0x46d0[16]](getQueues(_0xbd11x7[_0x46d0[38]],_0xbd11x7[_0x46d0[39]]))[_0x46d0[16]](function(_0xbd11x11){if(_0xbd11x11[_0x46d0[31]][_0x46d0[26]]){return models[_0x46d0[9]][_0x46d0[21]]({where:{queuecallercomplete:true,queue:_[_0x46d0[32]](_0xbd11x11[_0x46d0[31]],{name:_0xbd11x8[_0x46d0[28]]})?_0xbd11x8[_0x46d0[28]]:[]},group:_0x46d0[28],attributes:[[_0x46d0[28],_0x46d0[33]],[sequelize[_0x46d0[36]](_0x46d0[34],sequelize[_0x46d0[35]](_0x46d0[17])),_0x46d0[46]]]})};return null})[_0x46d0[16]](function(_0xbd11x17){if(_0xbd11x17){var _0xbd11x10;if(_0xbd11x17[_0x46d0[26]]){_0xbd11x10= _0xbd11x17[0][_0x46d0[27]]}else {_0xbd11x10= {name:_0xbd11x8[_0x46d0[28]],answered:0}};_0xbd11x7[_0x46d0[30]](_0x46d0[29],_0xbd11x10)}})[_0x46d0[25]](function(_0xbd11xe){console[_0x46d0[24]](_0x46d0[45],_0xbd11xe)})}function onAvgAnswerTime(_0xbd11x7,_0xbd11x8){return Promise[_0x46d0[40]]([])[_0x46d0[16]](getQueues(_0xbd11x7[_0x46d0[38]],_0xbd11x7[_0x46d0[39]]))[_0x46d0[16]](function(_0xbd11x11){if(_0xbd11x11[_0x46d0[31]][_0x46d0[26]]){var _0xbd11x1a=_[_0x46d0[32]](_0xbd11x11[_0x46d0[31]],{name:_0xbd11x8[_0x46d0[28]]})?_0xbd11x8[_0x46d0[28]]:_0x46d0[49];var _0xbd11x1b=util[_0x46d0[51]](_0x46d0[50],_0xbd11x1a);return sequelize[_0x46d0[54]](_0xbd11x1b,{type:sequelize[_0x46d0[53]][_0x46d0[52]]})};return null})[_0x46d0[16]](function(_0xbd11x19){if(_0xbd11x19){var _0xbd11x10;if(_0xbd11x19[_0x46d0[26]]){_0xbd11x10= _0xbd11x19[0]}else {_0xbd11x10= {name:_0xbd11x8[_0x46d0[28]],holdtime:_0x46d0[48]}};_0xbd11x7[_0x46d0[30]](_0x46d0[29],_0xbd11x10)}})[_0x46d0[25]](function(_0xbd11xe){console[_0x46d0[24]](_0x46d0[47],_0xbd11xe)})}function onAvgTalkTime(_0xbd11x7,_0xbd11x8){return Promise[_0x46d0[40]]([])[_0x46d0[16]](getQueues(_0xbd11x7[_0x46d0[38]],_0xbd11x7[_0x46d0[39]]))[_0x46d0[16]](function(_0xbd11x11){if(_0xbd11x11[_0x46d0[31]][_0x46d0[26]]){var _0xbd11x1a=_[_0x46d0[32]](_0xbd11x11[_0x46d0[31]],{name:_0xbd11x8[_0x46d0[28]]})?_0xbd11x8[_0x46d0[28]]:_0x46d0[49];return sequelize[_0x46d0[54]](util[_0x46d0[51]](_0x46d0[56],_0xbd11x1a),{type:sequelize[_0x46d0[53]][_0x46d0[52]]})};return null})[_0x46d0[16]](function(_0xbd11x1d){if(_0xbd11x1d){var _0xbd11x10;if(_0xbd11x1d[_0x46d0[26]]){_0xbd11x10= _0xbd11x1d[0]}else {_0xbd11x10= {name:_0xbd11x8[_0x46d0[28]],talktime:_0x46d0[48]}};_0xbd11x7[_0x46d0[30]](_0x46d0[29],_0xbd11x10)}})[_0x46d0[25]](function(_0xbd11xe){console[_0x46d0[24]](_0x46d0[55],_0xbd11xe)})}function onTotalOffered(_0xbd11x7,_0xbd11x8){return Promise[_0x46d0[40]]([])[_0x46d0[16]](getQueues(_0xbd11x7[_0x46d0[38]],_0xbd11x7[_0x46d0[39]]))[_0x46d0[16]](function(_0xbd11x11){if(_0xbd11x11[_0x46d0[31]][_0x46d0[26]]){var _0xbd11x1a=_[_0x46d0[32]](_0xbd11x11[_0x46d0[31]],{name:_0xbd11x8[_0x46d0[28]]})?_0xbd11x8[_0x46d0[28]]:_0x46d0[49];return sequelize[_0x46d0[54]](util[_0x46d0[51]](_0x46d0[58],_0xbd11x1a),{type:sequelize[_0x46d0[53]][_0x46d0[52]]})};return null})[_0x46d0[16]](function(_0xbd11x1f){if(_0xbd11x1f){var _0xbd11x10;if(_0xbd11x1f[_0x46d0[26]]){_0xbd11x10= _0xbd11x1f[0]}else {_0xbd11x10= {name:_0xbd11x8[_0x46d0[28]],totalcalls:0}};_0xbd11x7[_0x46d0[30]](_0x46d0[29],_0xbd11x10)}})[_0x46d0[25]](function(_0xbd11xe){console[_0x46d0[24]](_0x46d0[57],_0xbd11xe)})}function onUnmanaged(_0xbd11x7,_0xbd11x8){return Promise[_0x46d0[40]]([])[_0x46d0[16]](getQueues(_0xbd11x7[_0x46d0[38]],_0xbd11x7[_0x46d0[39]]))[_0x46d0[16]](function(_0xbd11x11){if(_0xbd11x11[_0x46d0[31]][_0x46d0[26]]){return models[_0x46d0[9]][_0x46d0[21]]({where:{queuecallerexit:true,queue:_[_0x46d0[32]](_0xbd11x11[_0x46d0[31]],{name:_0xbd11x8[_0x46d0[28]]})?_0xbd11x8[_0x46d0[28]]:[]},group:_0x46d0[28],attributes:[[_0x46d0[28],_0x46d0[33]],[sequelize[_0x46d0[36]](_0x46d0[34],sequelize[_0x46d0[35]](_0x46d0[17])),_0x46d0[60]]]})};return null})[_0x46d0[16]](function(_0xbd11x21){if(_0xbd11x21){var _0xbd11x10;if(_0xbd11x21[_0x46d0[26]]){_0xbd11x10= _0xbd11x21[0][_0x46d0[27]]}else {_0xbd11x10= {name:_0xbd11x8[_0x46d0[28]],_parameters:0}};_0xbd11x7[_0x46d0[30]](_0x46d0[29],_0xbd11x10)}})[_0x46d0[25]](function(_0xbd11xe){console[_0x46d0[24]](_0x46d0[59],_0xbd11xe)})} \ No newline at end of file +/** + * Broadcast updates to client when the model changes + */ + +'use strict'; + +var sequelize = require('../../models').sequelize; +var models = require('../../models'); +var Util = require('../../config/util'); +var Promise = require('bluebird'); +var _ = require('lodash'); +var util = require('util'); + +exports.register = function(socket) { + // Inbound Events + models.ReportQueue.afterCreate(function(doc) { + onWaiting(socket, doc); + }); + models.ReportQueue.afterUpdate(function(doc) { + if (doc.changed('queuecallerleaveAt')) { + onWaiting(socket, doc); + onActive(socket, doc); + } + }); + models.ReportQueue.afterUpdate(function(doc) { + if (doc.changed('queuecallerabandon') || doc.changed('queuecallercomplete')) { + onAbandon(socket, doc); + onComplete(socket, doc); + onActive(socket, doc); + onAvgAnswerTime(socket, doc); + onAvgTalkTime(socket, doc); + onTotalOffered(socket, doc); + onUnmanaged(socket, doc); + } + }); +} + +function getQueues(id, role) { + return function() { + switch (role) { + case 'user': + return models.User + .findById(id, { + attributes: ['id'] + }) + .then(Util.getVoiceQueuesIdByUser()); + default: + return models.VoiceQueue + .findAll() + .then(function(queues) { + return { + rows: queues + }; + }); + } + } +} + +function onWaiting(socket, doc) { + return Promise + .all([]) + .then(getQueues(socket.userId, socket.role)) + .then(function(userQueues) { + if (userQueues.rows.length) { + return models + .ReportQueue + .findAll({ + where: { + queuecallerleaveAt: null, + queue: _.find(userQueues.rows, { + name: doc.queue + }) ? doc.queue : [] + }, + group: 'queue', + attributes: [ + ['queue', 'name'], + [sequelize.fn('COUNT', sequelize.col('id')), 'waiting'] + ] + }); + } + return null; + }) + .then(function(waiting) { + if (waiting) { + var _parameters; + if (waiting.length) { + _parameters = waiting[0].dataValues; + } else { + _parameters = { + name: doc.queue, + waiting: 0 + }; + } + socket.emit('report_queue:parameters', _parameters); + } + }) + .catch(function(err) { + console.error('WAITING ERROR', err); + }); +} + +function onActive(socket, doc) { + return Promise + .all([]) + .then(getQueues(socket.userId, socket.role)) + .then(function(userQueues) { + if (userQueues.rows.length) { + return models + .ReportQueue + .findAll({ + where: { + queuecallerexit: false, + queuecallerabandon: false, + queuecallercomplete: false, + queuecallerleaveAt: { + $ne: null + }, + queue: _.find(userQueues.rows, { + name: doc.queue + }) ? doc.queue : [] + }, + group: 'queue', + attributes: [ + ['queue', 'name'], + [sequelize.fn('COUNT', sequelize.col('id')), 'active'] + ] + }); + } + return null; + }) + .then(function(active) { + if (active) { + var _parameters; + if (active.length) { + _parameters = active[0].dataValues; + } else { + _parameters = { + name: doc.queue, + active: 0 + }; + } + socket.emit('report_queue:parameters', _parameters); + } + }) + .catch(function(err) { + console.error('ACTIVE ERROR', err); + }); +} + +function onAbandon(socket, doc) { + return Promise + .all([]) + .then(getQueues(socket.userId, socket.role)) + .then(function(userQueues) { + if (userQueues.rows.length) { + return models + .ReportQueue + .findAll({ + where: { + queuecallerabandon: true, + queue: _.find(userQueues.rows, { + name: doc.queue + }) ? doc.queue : [] + }, + group: 'queue', + attributes: [ + ['queue', 'name'], + [sequelize.fn('COUNT', sequelize.col('id')), 'abandoned'] + ] + }); + } + return null; + }) + .then(function(abandoned) { + if (abandoned) { + var _parameters; + if (abandoned.length) { + _parameters = abandoned[0].dataValues; + } else { + _parameters = { + name: doc.queue, + abandoned: 0 + }; + } + socket.emit('report_queue:parameters', _parameters); + } + }) + .catch(function(err) { + console.error('ABANDONED ERROR', err); + }); +} + +function onComplete(socket, doc) { + return Promise + .all([]) + .then(getQueues(socket.userId, socket.role)) + .then(function(userQueues) { + if (userQueues.rows.length) { + return models + .ReportQueue + .findAll({ + where: { + queuecallercomplete: true, + queue: _.find(userQueues.rows, { + name: doc.queue + }) ? doc.queue : [] + }, + group: 'queue', + attributes: [ + ['queue', 'name'], + [sequelize.fn('COUNT', sequelize.col('id')), 'answered'] + ] + }); + } + return null; + }) + .then(function(answered) { + if (answered) { + var _parameters; + if (answered.length) { + _parameters = answered[0].dataValues; + } else { + _parameters = { + name: doc.queue, + answered: 0 + }; + } + socket.emit('report_queue:parameters', _parameters); + } + }) + .catch(function(err) { + console.error('ANSWERED ERROR', err); + }); +} + +function onAvgAnswerTime(socket, doc) { + return Promise + .all([]) + .then(getQueues(socket.userId, socket.role)) + .then(function(userQueues) { + if (userQueues.rows.length) { + var queue = _.find(userQueues.rows, { + name: doc.queue + }) ? doc.queue : ''; + var query = util.format('SELECT queue AS \'name\',SEC_TO_TIME(ROUND(AVG(holdtime), 0)) as holdtime FROM report_agent WHERE agentcomplete = 1 AND queue =\'%s\' GROUP BY queue', queue); + return sequelize + .query(query, { + type: sequelize.QueryTypes.SELECT + }); + } + return null; + }) + .then(function(holdtime) { + if (holdtime) { + var _parameters; + if (holdtime.length) { + _parameters = holdtime[0]; + } else { + _parameters = { + name: doc.queue, + holdtime: '00:00:00' + }; + } + socket.emit('report_queue:parameters', _parameters); + } + }) + .catch(function(err) { + console.error('HOLDTIME ERROR', err); + }); +} + +function onAvgTalkTime(socket, doc) { + return Promise + .all([]) + .then(getQueues(socket.userId, socket.role)) + .then(function(userQueues) { + if (userQueues.rows.length) { + var queue = _.find(userQueues.rows, { + name: doc.queue + }) ? doc.queue : ''; + return sequelize + .query(util.format('SELECT queue AS \'name\',SEC_TO_TIME(ROUND(AVG(talktime), 0)) as talktime FROM report_agent WHERE agentcomplete = 1 AND queue =\'%s\' GROUP BY queue', queue), { + type: sequelize.QueryTypes.SELECT + }); + } + return null; + }) + .then(function(talktime) { + if (talktime) { + var _parameters; + if (talktime.length) { + _parameters = talktime[0]; + } else { + _parameters = { + name: doc.queue, + talktime: '00:00:00' + }; + } + socket.emit('report_queue:parameters', _parameters); + } + }) + .catch(function(err) { + console.error('TALKTIME ERROR', err); + }); +} + + +function onTotalOffered(socket, doc) { + return Promise + .all([]) + .then(getQueues(socket.userId, socket.role)) + .then(function(userQueues) { + if (userQueues.rows.length) { + var queue = _.find(userQueues.rows, { + name: doc.queue + }) ? doc.queue : ''; + return sequelize + .query(util.format('SELECT queue AS \'name\',COUNT(distinct uniqueid) as totalcalls FROM report_queue WHERE queue =\'%s\' GROUP BY queue', queue), { + type: sequelize.QueryTypes.SELECT + }); + } + return null; + }) + .then(function(totalcalls) { + if (totalcalls) { + var _parameters; + if (totalcalls.length) { + _parameters = totalcalls[0]; + } else { + _parameters = { + name: doc.queue, + totalcalls: 0 + }; + } + socket.emit('report_queue:parameters', _parameters); + } + }) + .catch(function(err) { + console.error('TOTALCALLS ERROR', err); + }); +} + +function onUnmanaged(socket, doc) { + return Promise + .all([]) + .then(getQueues(socket.userId, socket.role)) + .then(function(userQueues) { + if (userQueues.rows.length) { + return models + .ReportQueue + .findAll({ + where: { + queuecallerexit: true, + queue: _.find(userQueues.rows, { + name: doc.queue + }) ? doc.queue : [] + }, + group: 'queue', + attributes: [ + ['queue', 'name'], + [sequelize.fn('COUNT', sequelize.col('id')), 'unmanaged'] + ] + }); + } + return null; + }) + .then(function(unmanaged) { + if (unmanaged) { + var _parameters; + if (unmanaged.length) { + _parameters = unmanaged[0].dataValues; + } else { + _parameters = { + name: doc.queue, + _parameters: 0 + }; + } + socket.emit('report_queue:parameters', _parameters); + } + }) + .catch(function(err) { + console.error('UNMANAGED ERROR', err); + }); +} diff --git a/server/config/tools/smsRoom.js b/server/config/tools/smsRoom.js index 95c1dfc..632af77 100644 --- a/server/config/tools/smsRoom.js +++ b/server/config/tools/smsRoom.js @@ -1 +1,26 @@ -var _0xdc2e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x53\x6D\x73\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x6D\x73\x52\x6F\x6F\x6D\x53\x74\x61\x74\x75\x73","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x63\x68\x61\x6E\x67\x65\x64","\x6F\x70\x65\x6E\x52\x65\x61\x73\x6F\x6E","\x75\x73\x65\x72","\x6E\x61\x6D\x65","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x69\x64","\x63\x72\x65\x61\x74\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];_0xdc2e[0];const _=require(_0xdc2e[1]);const moment=require(_0xdc2e[2]);const Room=require(_0xdc2e[4])[_0xdc2e[3]];const Status=require(_0xdc2e[4])[_0xdc2e[5]];function SmsRoom(){Room[_0xdc2e[6]](function(_0xe1bcx6,_0xe1bcx7){});Room[_0xdc2e[15]](function(_0xe1bcx6,_0xe1bcx7){if(_0xe1bcx6[_0xdc2e[8]](_0xdc2e[7])|| _0xe1bcx6[_0xdc2e[8]](_0xdc2e[9])){return Status[_0xdc2e[14]]({status:_0xe1bcx6[_0xdc2e[7]],data1:_0xe1bcx7[_0xdc2e[10]]?_0xe1bcx7[_0xdc2e[10]][_0xdc2e[11]]:null,data2:_0xe1bcx7[_0xdc2e[10]]?_0xe1bcx7[_0xdc2e[10]][_0xdc2e[12]]:null,SmsRoomId:_0xe1bcx6[_0xdc2e[13]],UserId:_0xe1bcx7[_0xdc2e[10]]?_0xe1bcx7[_0xdc2e[10]][_0xdc2e[13]]:null})}})}module[_0xdc2e[16]]= SmsRoom \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const moment = require('moment'); + +const Room = require('../../models').SmsRoom; +const Status = require('../../models').SmsRoomStatus; + +function SmsRoom() { + Room.afterCreate(function(doc, opt) {}); + + Room.afterUpdate(function(doc, opt) { + if (doc.changed('status') || doc.changed('openReason')) { + return Status + .create({ + status: doc.status, + data1: opt.user ? opt.user.name : null, + data2: opt.user ? opt.user.fullname : null, + SmsRoomId: doc.id, + UserId: opt.user ? opt.user.id : null + }); + } + }); +} + +module.exports = SmsRoom; diff --git a/server/config/tools/system.js b/server/config/tools/system.js index 5f0e1ba..ee4b3d3 100644 --- a/server/config/tools/system.js +++ b/server/config/tools/system.js @@ -1 +1,60 @@ -var _0xbe53=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x62\x6C\x75\x65\x62\x69\x72\x64","\x6C\x6F\x64\x61\x73\x68","\x73\x74\x61\x74","\x70\x69\x64\x75\x73\x61\x67\x65","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x6F\x73","\x6E\x6F\x64\x65\x2D\x64\x66","\x63\x68\x65\x63\x6B\x53\x74\x61\x74\x75\x73","\x64\x69\x73\x6B\x73","\x6D\x6F\x75\x6E\x74","\x73\x69\x7A\x65","\x75\x73\x65\x64","\x61\x76\x61\x69\x6C\x61\x62\x6C\x65","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x63\x70\x75","\x6D\x65\x6D\x6F\x72\x79","\x74\x6F\x74\x61\x6C\x6D\x65\x6D","\x46\x72\x65\x65","\x64\x65\x74\x61\x69\x6C\x73","\x66\x72\x65\x65\x6D\x65\x6D","\x4F\x74\x68\x65\x72","\x54\x6F\x74\x61\x6C","\x4D\x6F\x74\x69\x6F\x6E","\x63\x6F\x72\x65\x73","\x70\x69\x64","\x63\x70\x75\x73","\x74\x69\x6D\x65\x73","\x76\x61\x6C\x75\x65\x73","\x73\x75\x6D","\x72\x6F\x75\x6E\x64","\x66\x6F\x72\x4F\x77\x6E"];_0xbe53[0];var Promise=require(_0xbe53[1]),_=require(_0xbe53[2]),pidStat=Promise[_0xbe53[5]](require(_0xbe53[4])[_0xbe53[3]]),os=require(_0xbe53[6]),df=Promise[_0xbe53[5]](require(_0xbe53[7]));exports[_0xbe53[8]]= function(){return function(){var _0x19ccx6={};return pidStat(process[_0xbe53[27]])[_0xbe53[16]](function(_0x19ccx9){_0x19ccx6[_0xbe53[17]]= {motion:_0x19ccx9[_0xbe53[17]]};var _0x19ccxa=_0x19ccx9[_0xbe53[18]]/ 1024;_0x19ccx6[_0xbe53[18]]= {Total:os[_0xbe53[19]]()/ 1024,details:{}};_0x19ccx6[_0xbe53[18]][_0xbe53[21]][_0xbe53[20]]= os[_0xbe53[22]]()/ 1024;_0x19ccx6[_0xbe53[18]][_0xbe53[21]][_0xbe53[23]]= _0x19ccx6[_0xbe53[18]][_0xbe53[24]]- _0x19ccxa- _0x19ccx6[_0xbe53[18]][_0xbe53[21]][_0xbe53[20]];_0x19ccx6[_0xbe53[18]][_0xbe53[21]][_0xbe53[25]]= _0x19ccxa;_0x19ccx6[_0xbe53[17]][_0xbe53[26]]= oscpu();return df()})[_0xbe53[16]](function(_0x19ccx7){_0x19ccx6[_0xbe53[9]]= [];_[_0xbe53[15]](_0x19ccx7,function(_0x19ccx8){_0x19ccx6[_0xbe53[9]][_0xbe53[14]]({mount:_0x19ccx8[_0xbe53[10]],size:_0x19ccx8[_0xbe53[11]],details:{Used:_0x19ccx8[_0xbe53[12]],Available:_0x19ccx8[_0xbe53[13]]}})});return _0x19ccx6})}};function oscpu(){var _0x19ccxc=os[_0xbe53[28]]();var _0x19ccxd=[],_0x19ccxe,_0x19ccxf;_[_0xbe53[15]](_0x19ccxc,function(_0x19ccx10){_0x19ccxe= {};_0x19ccxf= _[_0xbe53[31]](_[_0xbe53[30]](_0x19ccx10[_0xbe53[29]]));_[_0xbe53[33]](_0x19ccx10[_0xbe53[29]],function(_0x19ccx11,_0x19ccx12){_0x19ccxe[_0x19ccx12]= Math[_0xbe53[32]](100* _0x19ccx11/ _0x19ccxf)});_0x19ccxd[_0xbe53[14]](_0x19ccxe)});return _0x19ccxd} \ No newline at end of file +'use strict'; + +var Promise = require('bluebird'), + _ = require('lodash'), + pidStat = Promise.promisify(require('pidusage').stat), + os = require('os'), + df = Promise.promisify(require('node-df')); + +exports.checkStatus = function() { + return function() { + var stats = {}; + return pidStat(process.pid) + .then(function(stat) { + stats.cpu = { + motion: stat.cpu + }; + var motionMem = stat.memory / 1024; + stats.memory = { + Total: os.totalmem() / 1024, + details: {} + }; + stats.memory.details.Free = os.freemem() / 1024; + stats.memory.details.Other = stats.memory.Total - motionMem - stats.memory.details.Free; + stats.memory.details.Motion = motionMem; + stats.cpu.cores = oscpu(); + return df(); + }) + .then(function(disks) { + stats.disks = []; + _.forEach(disks, function(disk) { + stats.disks.push({ + mount: disk.mount, + size: disk.size, + details: { + Used: disk.used, + Available: disk.available + } + }); + }); + return stats; + }); + } +} + +function oscpu() { + var cpus = os.cpus(); + var data = [], + _cpu, total; + + _.forEach(cpus, function(cpu) { + _cpu = {}; + total = _.sum(_.values(cpu.times)); + _.forOwn(cpu.times, function(time, key) { + _cpu[key] = Math.round(100 * time / total); + }); + data.push(_cpu); + }); + + return data; +} diff --git a/server/config/tools/user.js b/server/config/tools/user.js index d6aaa07..50b0908 100644 --- a/server/config/tools/user.js +++ b/server/config/tools/user.js @@ -1 +1,219 @@ -var _0x10c2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x66\x73","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x43\x68\x61\x6E\x53\x70\x79","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x62\x6C\x75\x65\x62\x69\x72\x64","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x5F\x63\x68\x61\x6E\x67\x65\x64","\x63\x68\x61\x6E\x73\x70\x79","\x74\x68\x65\x6E","\x61\x6C\x6C","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x6D\x6F\x64\x69\x66\x79\x20\x74\x68\x65\x20\x69\x6E\x74\x65\x72\x6E\x61\x6C\x20\x6F\x66\x20\x61\x20\x55\x73\x65\x72\x2F\x41\x67\x65\x6E\x74\x2F\x54\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x62\x65\x66\x6F\x72\x65\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x71\x75\x65\x75\x65\x53\x74\x61\x74\x75\x73","\x63\x61\x6C\x6C\x65\x72\x69\x64","\x6C\x61\x73\x74\x4C\x6F\x67\x69\x6E\x41\x74","\x6F\x6E\x6C\x69\x6E\x65","\x6E\x61\x6D\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x43\x72\x65\x61\x74\x69\x6E\x67\x20\x63\x68\x61\x6E\x73\x70\x79\x2E\x2E\x2E","\x6C\x6F\x67","\x61\x75\x74\x68","\x66\x72\x6F\x6D\x2D\x73\x69\x70","\x25\x73\x25\x73","\x70\x72\x65\x66\x69\x78","\x66\x6F\x72\x6D\x61\x74","\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x69\x64","\x73\x79\x73\x74\x65\x6D","\x70\x75\x73\x68","\x53\x49\x50\x2F\x25\x73\x2C\x25\x73","\x6F\x70\x74\x69\x6F\x6E\x73","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x66\x6F\x72\x45\x61\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x44\x65\x6C\x65\x74\x69\x6E\x67\x20\x63\x68\x61\x6E\x73\x70\x79\x2E\x2E\x2E","\x64\x65\x73\x74\x72\x6F\x79","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x43\x72\x65\x61\x74\x69\x6E\x67\x20\x63\x61\x6C\x6C\x65\x72\x49\x44\x2E\x2E\x2E","\x22\x25\x73\x22\x20\x3C\x25\x73\x3E","\x73\x61\x76\x65","\x43\x72\x65\x61\x74\x69\x6E\x67\x20\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2E\x2E\x2E","\x5F","\x53\x65\x74","\x43\x44\x52\x28\x74\x79\x70\x65\x29\x3D\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x44\x69\x61\x6C","\x53\x49\x50\x2F","\x2C\x2C\x74\x54\x78\x58","\x48\x61\x6E\x67\x75\x70","","\x65\x78\x70\x6F\x72\x74\x73"];_0x10c2[0];var fs=require(_0x10c2[1]);var util=require(_0x10c2[2]);var path=require(_0x10c2[3]);var config=require(_0x10c2[4]);var UserModel=require(_0x10c2[6])[_0x10c2[5]];var VoiceExtension=require(_0x10c2[6])[_0x10c2[7]];var ChanSpy=require(_0x10c2[6])[_0x10c2[8]];var sequelize=require(_0x10c2[6])[_0x10c2[9]];var Promise=require(_0x10c2[10]);function User(){UserModel[_0x10c2[16]](function(_0xeebfxb,_0xeebfxc){delete _0xeebfxb[_0x10c2[12]][_0x10c2[11]];return Promise[_0x10c2[15]]([])[_0x10c2[14]](createCallerID(_0xeebfxb,_0xeebfxc))[_0x10c2[14]](createExtension(_0xeebfxb,_0xeebfxc))[_0x10c2[14]](function(){if(_0xeebfxb[_0x10c2[13]]){createChanspy(_0xeebfxb,_0xeebfxc)}})});UserModel[_0x10c2[19]](function(_0xeebfxb,_0xeebfxc){if(_0xeebfxb[_0x10c2[17]](_0x10c2[11])){throw new sequelize.Error(_0x10c2[18])}});UserModel[_0x10c2[26]](function(_0xeebfxb,_0xeebfxc){if(!_0xeebfxb[_0x10c2[17]](_0x10c2[20])&& !_0xeebfxb[_0x10c2[17]](_0x10c2[21])&& !_0xeebfxb[_0x10c2[17]](_0x10c2[22])&& !_0xeebfxb[_0x10c2[17]](_0x10c2[23])&& !_0xeebfxb[_0x10c2[17]](_0x10c2[24])){return Promise[_0x10c2[15]]([])[_0x10c2[14]](createCallerID(_0xeebfxb,_0xeebfxc))[_0x10c2[14]](function(){if((_0xeebfxb[_0x10c2[13]]&& _0xeebfxb[_0x10c2[17]](_0x10c2[13]))){return createChanspy(_0xeebfxb,_0xeebfxc)}})[_0x10c2[14]](function(){if(_0xeebfxb[_0x10c2[13]]&& !_0xeebfxb[_0x10c2[17]](_0x10c2[13])&& _0xeebfxb[_0x10c2[17]](_0x10c2[25])){return deleteChanSpy(_0xeebfxb,_0xeebfxc)}})[_0x10c2[14]](function(){if(_0xeebfxb[_0x10c2[13]]&& !_0xeebfxb[_0x10c2[17]](_0x10c2[13])&& _0xeebfxb[_0x10c2[17]](_0x10c2[25])){return createChanspy(_0xeebfxb,_0xeebfxc)}})[_0x10c2[14]](function(){if(!_0xeebfxb[_0x10c2[13]]&& _0xeebfxb[_0x10c2[17]](_0x10c2[13])){return deleteChanSpy(_0xeebfxb,_0xeebfxc)}})}})}function createChanspy(_0xeebfxb,_0xeebfxc){console[_0x10c2[28]](_0x10c2[27]);return ChanSpy[_0x10c2[44]]()[_0x10c2[14]](function(_0xeebfxe){var _0xeebfxf=[];_0xeebfxe[_0x10c2[43]](function(_0xeebfx10){var _0xeebfx11=[];var _0xeebfx12=1;if(_0xeebfx10[_0x10c2[29]]){_0xeebfx11[_0x10c2[38]]({context:_0x10c2[30],exten:util[_0x10c2[33]](_0x10c2[31],_0xeebfx10[_0x10c2[32]],_0xeebfxb[_0x10c2[25]]),priority:_0xeebfx12,app:_0x10c2[34],appdata:_0xeebfx10[_0x10c2[35]],UserId:_0xeebfxb[_0x10c2[36]],ChanSpyId:_0xeebfx10[_0x10c2[36]],type:_0x10c2[37]});_0xeebfx12++};_0xeebfx11[_0x10c2[38]]({context:_0x10c2[30],exten:util[_0x10c2[33]](_0x10c2[31],_0xeebfx10[_0x10c2[32]],_0xeebfxb[_0x10c2[25]]),priority:_0xeebfx12,app:_0x10c2[8],appdata:util[_0x10c2[33]](_0x10c2[39],_0xeebfxb[_0x10c2[25]],_0xeebfx10[_0x10c2[40]]),UserId:_0xeebfxb[_0x10c2[36]],ChanSpyId:_0xeebfx10[_0x10c2[36]],type:_0x10c2[37]});_0xeebfx12= 1;if(_0xeebfx10[_0x10c2[29]]){_0xeebfx11[_0x10c2[38]]({context:_0x10c2[30],exten:util[_0x10c2[33]](_0x10c2[31],_0xeebfx10[_0x10c2[32]],_0xeebfxb[_0x10c2[11]]),priority:_0xeebfx12,app:_0x10c2[34],appdata:_0xeebfx10[_0x10c2[35]],UserId:_0xeebfxb[_0x10c2[36]],ChanSpyId:_0xeebfx10[_0x10c2[36]],type:_0x10c2[37]});_0xeebfx12++};_0xeebfx11[_0x10c2[38]]({context:_0x10c2[30],exten:util[_0x10c2[33]](_0x10c2[31],_0xeebfx10[_0x10c2[32]],_0xeebfxb[_0x10c2[11]]),priority:_0xeebfx12,app:_0x10c2[8],appdata:util[_0x10c2[33]](_0x10c2[39],_0xeebfxb[_0x10c2[25]],_0xeebfx10[_0x10c2[40]]),UserId:_0xeebfxb[_0x10c2[36]],ChanSpyId:_0xeebfx10[_0x10c2[36]],type:_0x10c2[37]});_0xeebfxf[_0x10c2[38]](VoiceExtension[_0x10c2[42]](_0xeebfx11,{transaction:_0xeebfxc[_0x10c2[41]]}))});return _0xeebfxf})[_0x10c2[15]]()}function deleteChanSpy(_0xeebfxb,_0xeebfxc){console[_0x10c2[28]](_0x10c2[45]);return VoiceExtension[_0x10c2[46]]({where:{UserId:_0xeebfxb[_0x10c2[36]],ChanSpyId:{$ne:null}},transaction:_0xeebfxc[_0x10c2[41]]})}function createCallerID(_0xeebfxb,_0xeebfxc){return function(){if(_0xeebfxb[_0x10c2[47]]&& _0xeebfxb[_0x10c2[11]]&& _0xeebfxb[_0x10c2[17]](_0x10c2[47])){console[_0x10c2[28]](_0x10c2[48]);_0xeebfxb[_0x10c2[22]]= util[_0x10c2[33]](_0x10c2[49],_0xeebfxb[_0x10c2[47]],_0xeebfxb[_0x10c2[11]]);return _0xeebfxb[_0x10c2[50]]({transaction:_0xeebfxc[_0x10c2[41]]})};return}}function createExtension(_0xeebfxb,_0xeebfxc){console[_0x10c2[28]](_0x10c2[51]);return function(){var _0xeebfx16=[{context:_0x10c2[30],exten:_0x10c2[52]+ _0xeebfxb[_0x10c2[11]],priority:1,app:_0x10c2[53],appdata:_0x10c2[54],UserId:_0xeebfxb[_0x10c2[36]],type:_0x10c2[37]},{context:_0x10c2[30],exten:_0x10c2[52]+ _0xeebfxb[_0x10c2[11]],priority:2,app:_0x10c2[55],appdata:_0x10c2[56]+ _0xeebfxb[_0x10c2[25]]+ _0x10c2[57],UserId:_0xeebfxb[_0x10c2[36]],type:_0x10c2[37]},{context:_0x10c2[30],exten:_0x10c2[52]+ _0xeebfxb[_0x10c2[11]],priority:3,app:_0x10c2[58],appdata:_0x10c2[59],UserId:_0xeebfxb[_0x10c2[36]],type:_0x10c2[37]},{context:_0x10c2[30],exten:_0xeebfxb[_0x10c2[25]],priority:1,app:_0x10c2[53],appdata:_0x10c2[54],UserId:_0xeebfxb[_0x10c2[36]],type:_0x10c2[37]},{context:_0x10c2[30],exten:_0xeebfxb[_0x10c2[25]],priority:2,app:_0x10c2[55],appdata:_0x10c2[56]+ _0xeebfxb[_0x10c2[25]]+ _0x10c2[57],UserId:_0xeebfxb[_0x10c2[36]],type:_0x10c2[37]},{context:_0x10c2[30],exten:_0xeebfxb[_0x10c2[25]],priority:3,app:_0x10c2[58],appdata:_0x10c2[59],UserId:_0xeebfxb[_0x10c2[36]],type:_0x10c2[37]}];return VoiceExtension[_0x10c2[42]](_0xeebfx16,{transaction:_0xeebfxc[_0x10c2[41]]})}}module[_0x10c2[60]]= User \ No newline at end of file +'use strict'; + +var fs = require('fs'); +var util = require('util'); +var path = require('path'); +var config = require('../../config/environment'); +var UserModel = require('../../models').User; +var VoiceExtension = require('../../models').VoiceExtension; +var ChanSpy = require('../../models').ChanSpy; +var sequelize = require('../../models').sequelize; +var Promise = require('bluebird'); + +function User() { + UserModel.afterCreate(function(doc, options) { + delete doc._changed.internal; + return Promise + .all([]) + .then(createCallerID(doc, options)) + .then(createExtension(doc, options)) + .then(function() { + if (doc.chanspy) { + createChanspy(doc, options); + } + }) + }) + + UserModel.beforeUpdate(function(doc, options) { + if (doc.changed('internal')) { + throw new sequelize.Error("You can't modify the internal of a User/Agent/Telephone"); + } + }) + + UserModel.afterUpdate(function(doc, options) { + // console.log('Users updated', doc._changed); + // console.log(doc._changed, doc.name, doc.status); + if (!doc.changed('status') && !doc.changed('queueStatus') && !doc.changed('callerid') && !doc.changed('lastLoginAt') && !doc.changed('online')) { + return Promise + .all([]) + .then(createCallerID(doc, options)) + .then(function() { + if ((doc.chanspy && doc.changed('chanspy'))) { + return createChanspy(doc, options); + } + }) + .then(function() { + if (doc.chanspy && !doc.changed('chanspy') && doc.changed('name')) { + return deleteChanSpy(doc, options); + } + }) + .then(function() { + if (doc.chanspy && !doc.changed('chanspy') && doc.changed('name')) { + return createChanspy(doc, options); + } + }) + .then(function() { + if (!doc.chanspy && doc.changed('chanspy')) { + return deleteChanSpy(doc, options); + } + }) + } + }) +} + +function createChanspy(doc, options) { + console.log('Creating chanspy...'); + return ChanSpy + .findAll() + .then(function(chanspy) { + var bulkSpies = []; + chanspy.forEach(function(elem) { + var spies = []; + var priority = 1; + if (elem.auth) { + spies.push({ + context: 'from-sip', + exten: util.format('%s%s', elem.prefix, doc.name), + priority: priority, + app: 'Authenticate', + appdata: elem.password, + UserId: doc.id, + ChanSpyId: elem.id, + type: 'system' + }); + priority++; + } + spies.push({ + context: 'from-sip', + exten: util.format('%s%s', elem.prefix, doc.name), + priority: priority, + app: 'ChanSpy', + appdata: util.format('SIP/%s,%s', doc.name, elem.options), + UserId: doc.id, + ChanSpyId: elem.id, + type: 'system' + }); + priority = 1; + if (elem.auth) { + spies.push({ + context: 'from-sip', + exten: util.format('%s%s', elem.prefix, doc.internal), + priority: priority, + app: 'Authenticate', + appdata: elem.password, + UserId: doc.id, + ChanSpyId: elem.id, + type: 'system' + }); + priority++; + } + spies.push({ + context: 'from-sip', + exten: util.format('%s%s', elem.prefix, doc.internal), + priority: priority, + app: 'ChanSpy', + appdata: util.format('SIP/%s,%s', doc.name, elem.options), + UserId: doc.id, + ChanSpyId: elem.id, + type: 'system' + }); + bulkSpies.push(VoiceExtension.bulkCreate(spies, { + transaction: options.transaction + })); + }); + return bulkSpies; + }) + .all(); +} + +function deleteChanSpy(doc, options) { + console.log('Deleting chanspy...'); + return VoiceExtension + .destroy({ + where: { + UserId: doc.id, + ChanSpyId: { + $ne: null + } + }, + transaction: options.transaction + }); +} + +function createCallerID(doc, options) { + return function() { + // devo aspettare che ci siano entrambi i campi + if (doc.fullname && doc.internal && doc.changed('fullname')) { + console.log('Creating callerID...'); + doc.callerid = util.format('"%s" <%s>', doc.fullname, doc.internal); + return doc.save({ + transaction: options.transaction + }); + // console.log('callerid created'); + } + + return; + } +} + +function createExtension(doc, options) { + console.log('Creating extension...'); + return function() { + var userDials = [{ + context: 'from-sip', + exten: '_' + doc.internal, + priority: 1, + app: 'Set', + appdata: 'CDR(type)=internal', + UserId: doc.id, + type: 'system' + }, { + context: 'from-sip', + exten: '_' + doc.internal, + priority: 2, + app: 'Dial', + appdata: 'SIP/' + doc.name + ',,tTxX', + UserId: doc.id, + type: 'system' + }, { + context: 'from-sip', + exten: '_' + doc.internal, + priority: 3, + app: 'Hangup', + appdata: '', + UserId: doc.id, + type: 'system' + }, { + context: 'from-sip', + exten: doc.name, + priority: 1, + app: 'Set', + appdata: 'CDR(type)=internal', + UserId: doc.id, + type: 'system' + }, { + context: 'from-sip', + exten: doc.name, + priority: 2, + app: 'Dial', + appdata: 'SIP/' + doc.name + ',,tTxX', + UserId: doc.id, + type: 'system' + }, { + context: 'from-sip', + exten: doc.name, + priority: 3, + app: 'Hangup', + appdata: '', + UserId: doc.id, + type: 'system' + }]; + + return VoiceExtension + .bulkCreate(userDials, { + transaction: options.transaction + }) + } +} + +module.exports = User; diff --git a/server/config/triggers/chat.js b/server/config/triggers/chat.js index 8bd4e13..964d4ad 100644 --- a/server/config/triggers/chat.js +++ b/server/config/triggers/chat.js @@ -1 +1,141 @@ -var _0x80c9=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x72\x65\x71\x75\x65\x73\x74\x2D\x70\x72\x6F\x6D\x69\x73\x65","\x6D\x75\x73\x74\x61\x63\x68\x65","\x54\x65\x6D\x70\x6C\x61\x74\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x43\x68\x61\x74\x45\x6E\x71\x75\x69\x72\x79","\x43\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x54\x72\x69\x67\x67\x65\x72\x20\x43\x68\x61\x74\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x5B\x43\x68\x61\x74\x5D\x20\x4E\x65\x77\x20\x45\x6E\x71\x75\x69\x72\x79","\x69\x64","\x75\x73\x65\x72\x6E\x61\x6D\x65","\x65\x6E\x71\x75\x69\x72\x79\x5F\x66\x6F\x72\x77\x61\x72\x64\x69\x6E\x67\x5F\x61\x64\x64\x72\x65\x73\x73","\x73\x75\x62\x6A\x65\x63\x74","\x68\x74\x6D\x6C","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65","\x5B\x43\x68\x61\x74\x5D\x20\x45\x6E\x71\x75\x69\x72\x79\x20\x66\x6F\x72\x77\x61\x72\x64\x20\x66\x61\x69\x6C\x65\x64\x3A\x20\x53\x4D\x54\x50\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x20\x77\x72\x6F\x6E\x67\x20\x66\x6F\x72\x20\x73\x65\x72\x76\x69\x63\x65\x20\x6D\x61\x69\x6C\x20\x61\x63\x63\x6F\x75\x6E\x74\x2E\x20\x50\x6C\x65\x61\x73\x65\x20\x63\x68\x65\x63\x6B\x20\x79\x6F\x75\x72\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x65\x72\x72\x6F\x72","\x5B\x43\x68\x61\x74\x5D\x20\x45\x6E\x71\x75\x69\x72\x79\x20\x66\x6F\x72\x77\x61\x72\x64\x20\x66\x61\x69\x6C\x65\x64\x3A\x20\x4E\x6F\x20\x73\x65\x72\x76\x69\x63\x65\x20\x6D\x61\x69\x6C\x20\x61\x63\x63\x6F\x75\x6E\x74\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x65\x64\x2E\x20\x50\x6C\x65\x61\x73\x65\x20\x63\x68\x65\x63\x6B\x20\x79\x6F\x75\x72\x20\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x74\x68\x65\x6E","\x72\x65\x6E\x64\x65\x72","\x66\x69\x6E\x64\x4F\x6E\x65","\x63\x68\x61\x74\x57\x65\x62\x73\x69\x74\x65","\x6E\x61\x6D\x65","\x65\x6E\x71\x75\x69\x72\x79\x5F\x66\x6F\x72\x77\x61\x72\x64\x69\x6E\x67","\x5B\x43\x68\x61\x74\x5D\x20\x45\x6E\x71\x75\x69\x72\x79\x20\x66\x6F\x72\x77\x61\x72\x64\x20\x69\x73\x20\x73\x65\x74\x20\x66\x6F\x72\x20\x74\x68\x69\x73\x20\x77\x65\x62\x73\x69\x74\x65","\x67\x65\x74\x4F\x66\x66\x6C\x69\x6E\x65\x54\x65\x6D\x70\x6C\x61\x74\x65","\x5B\x43\x68\x61\x74\x5D\x20\x45\x6E\x71\x75\x69\x72\x79\x20\x66\x6F\x72\x77\x61\x72\x64\x20\x69\x73\x20\x6E\x6F\x74\x20\x73\x65\x74\x20\x66\x6F\x72\x20\x74\x68\x69\x73\x20\x77\x65\x62\x73\x69\x74\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x74\x61\x67","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x63\x61\x74\x63\x68","\x3B","\x73\x70\x6C\x69\x74","\x64\x61\x74\x61\x31","\x75\x70\x64\x61\x74\x65","\x63\x6C\x6F\x73\x65","\x43\x4C\x4F\x53\x45\x44","\x65\x78\x70\x6F\x72\x74\x73"];_0x80c9[0];const _=require(_0x80c9[1]);const rp=require(_0x80c9[2]);const Mustache=require(_0x80c9[3]);const Template=require(_0x80c9[5])[_0x80c9[4]];const ChatRoom=require(_0x80c9[5])[_0x80c9[6]];const ChatEnquiry=require(_0x80c9[5])[_0x80c9[7]];const ChatWebsite=require(_0x80c9[5])[_0x80c9[8]];const MailMessage=require(_0x80c9[5])[_0x80c9[9]];const MailAccount=require(_0x80c9[5])[_0x80c9[10]];const MailServerOut=require(_0x80c9[5])[_0x80c9[11]];function Chat(){console[_0x80c9[13]](_0x80c9[12]);ChatEnquiry[_0x80c9[35]](function(_0x6eddxc,_0x6eddxd){var _0x6eddxe=_0x6eddxc;var _0x6eddxf;var _0x6eddx10;var _0x6eddx11;console[_0x80c9[13]](_0x80c9[14],_0x6eddxc[_0x80c9[15]]);return ChatWebsite[_0x80c9[34]](_0x6eddxc.ChatWebsiteId)[_0x80c9[25]](function(_0x6eddx14){_0x6eddxf= _0x6eddx14;_0x6eddxe[_0x80c9[28]]= _0x6eddxf[_0x80c9[29]];if(_0x6eddxf[_0x80c9[30]]&& _0x6eddxf[_0x80c9[17]]){console[_0x80c9[13]](_0x80c9[31],_0x6eddxf[_0x80c9[29]]);return _0x6eddxf[_0x80c9[32]]()}else {console[_0x80c9[13]](_0x80c9[33],_0x6eddxf[_0x80c9[29]]);return null}})[_0x80c9[25]](function(_0x6eddx13){_0x6eddx11= _0x6eddx13;if(_0x6eddx11){_0x6eddx11[_0x80c9[19]]= Mustache[_0x80c9[26]](_0x6eddx11[_0x80c9[19]],_0x6eddxe);_0x6eddx11[_0x80c9[18]]= Mustache[_0x80c9[26]](_0x6eddx11[_0x80c9[18]],_0x6eddxe);return MailAccount[_0x80c9[27]]({where:{service:true},include:[{model:MailServerOut}]})}else {return null}})[_0x80c9[25]](function(_0x6eddx12){if(_0x6eddx12){if(_0x6eddx12[_0x80c9[11]]&& _0x6eddx12[_0x80c9[11]][_0x80c9[16]]){return MailMessage[_0x80c9[21]]({from:[_0x6eddx12[_0x80c9[11]][_0x80c9[16]]],to:[_0x6eddxf[_0x80c9[17]]],subject:_0x6eddx11[_0x80c9[18]],html:_0x6eddx11[_0x80c9[19]]},{transaction:_0x6eddxd?_0x6eddxd[_0x80c9[20]]:null})}else {console[_0x80c9[23]](_0x80c9[22])}}else {console[_0x80c9[23]](_0x80c9[24])};return})})}Chat[_0x80c9[37]][_0x80c9[36]]= function(_0x6eddx15,_0x6eddx16){return ChatRoom[_0x80c9[42]]({tags:_0x6eddx15[_0x80c9[41]][_0x80c9[40]](_0x80c9[39])},{where:{id:_0x6eddx16[_0x80c9[15]]}})[_0x80c9[38]](function(_0x6eddx17){console[_0x80c9[23]](_0x6eddx17)})};Chat[_0x80c9[37]][_0x80c9[43]]= function(_0x6eddx15,_0x6eddx16){return ChatRoom[_0x80c9[42]]({status:_0x80c9[44],disposition:_0x6eddx15[_0x80c9[41]]|| null},{individualHooks:true,where:{id:_0x6eddx16[_0x80c9[15]]}})[_0x80c9[38]](function(_0x6eddx17){console[_0x80c9[23]](_0x6eddx17)})};module[_0x80c9[45]]= Chat \ No newline at end of file +'use strict'; + +const _ = require('lodash'); +const rp = require('request-promise'); +const Mustache = require('mustache'); + +const Template = require('../../models').Template; +const ChatRoom = require('../../models').ChatRoom; +const ChatEnquiry = require('../../models').ChatEnquiry; +const ChatWebsite = require('../../models').ChatWebsite; +const MailMessage = require('../../models').MailMessage; +const MailAccount = require('../../models').MailAccount; +const MailServerOut = require('../../models').MailServerOut; + +function Chat() { + console.log('Trigger Chat Initialization...'); + + ChatEnquiry.afterCreate(function(chatEnquiry, options) { + var _chatEnquiry = chatEnquiry; + var _chatWebsite; + var _mailServerOut; + var _offlineTemplate; + + console.log('[Chat] New Enquiry', chatEnquiry.id); + + return ChatWebsite + .findById(chatEnquiry.ChatWebsiteId) + .then(function(chatWebsite) { + _chatWebsite = chatWebsite; + _chatEnquiry.chatWebsite = _chatWebsite.name; + + if (_chatWebsite.enquiry_forwarding && _chatWebsite.enquiry_forwarding_address) { + console.log('[Chat] Enquiry forward is set for this website', _chatWebsite.name); + return _chatWebsite.getOfflineTemplate(); + } else { + console.log('[Chat] Enquiry forward is not set for this website', _chatWebsite.name); + return null; + } + }) + .then(function(offlineTemplate) { + _offlineTemplate = offlineTemplate; + if (_offlineTemplate) { + _offlineTemplate.html = Mustache.render(_offlineTemplate.html, _chatEnquiry); + _offlineTemplate.subject = Mustache.render(_offlineTemplate.subject, _chatEnquiry); + + return MailAccount + .findOne({ + where: { + service: true + }, + include: [{ + model: MailServerOut + }] + }); + + } else { + return null; + } + + + }) + .then(function(mailAccount) { + + if (mailAccount) { + if (mailAccount.MailServerOut && mailAccount.MailServerOut.username) { + return MailMessage + .create({ + from: [mailAccount.MailServerOut.username], + to: [_chatWebsite.enquiry_forwarding_address], + subject: _offlineTemplate.subject, + html: _offlineTemplate.html + }, { + transaction: options ? options.transaction : null + }); + } else { + console.error('[Chat] Enquiry forward failed: SMTP configuration wrong for service mail account. Please check your configuration'); + } + } else { + console.error('[Chat] Enquiry forward failed: No service mail account configured. Please check your configuration'); + } + + return; + + }); + }); +} + +// Chat.prototype.http = function(action, dataValues) { +// var options = { +// method: action.data1, +// uri: action.data2, +// json: true +// }; +// +// switch (action.data1) { +// case 'GET': +// options.qs = dataValues; +// break; +// case 'POST': +// options.form = dataValues; +// break; +// default: +// } +// +// return rp(options) +// .catch(function(err) { +// console.error(err); +// }); +// } + +Chat.prototype.tag = function(action, dataValues) { + return ChatRoom + .update({ + tags: action.data1.split(';') + }, { + where: { + id: dataValues.id + } + }) + .catch(function(err) { + console.error(err); + }); +} + +Chat.prototype.close = function(action, dataValues) { + return ChatRoom + .update({ + status: 'CLOSED', + disposition: action.data1 || null + }, { + individualHooks: true, + where: { + id: dataValues.id + } + }) + .catch(function(err) { + console.error(err); + }); +} + +module.exports = Chat; diff --git a/server/config/triggers/cm.js b/server/config/triggers/cm.js index 84d57f0..b4ab14c 100644 --- a/server/config/triggers/cm.js +++ b/server/config/triggers/cm.js @@ -1 +1,25 @@ -var _0x9cdf=["\x6C\x6F\x64\x61\x73\x68","\x54\x72\x69\x67\x67\x65\x72\x20\x43\x6D\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x6D\x61\x6E\x61\x67\x65\x43\x6F\x6E\x74\x61\x63\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x43\x6F\x6E\x74\x61\x63\x74","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x43\x6F\x6E\x74\x61\x63\x74\x50\x68\x6F\x6E\x65","\x43\x6F\x6E\x74\x61\x63\x74\x45\x6D\x61\x69\x6C","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x69\x64","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72","\x65\x76\x65\x6E\x74\x43\x68\x61\x6E\x6E\x65\x6C","\x63\x61\x74\x63\x68","\x63\x72\x65\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];var _=require(_0x9cdf[0]);function Cm(){console[_0x9cdf[2]](_0x9cdf[1])}Cm[_0x9cdf[4]][_0x9cdf[3]]= function(_0x9086x3,_0x9086x4){manageContact(_0x9086x3,_0x9086x4)};function manageContact(_0x9086x3,_0x9086x4){var _0x9086x6=require(_0x9cdf[6])[_0x9cdf[5]];var _0x9086x7=require(_0x9cdf[6])[_0x9cdf[7]];var _0x9086x8=require(_0x9cdf[6])[_0x9cdf[8]];var _0x9086x9=require(_0x9cdf[6])[_0x9cdf[9]];delete _0x9086x3[_0x9cdf[10]];_0x9086x3[_0x9cdf[11]]= _0x9cdf[12];_0x9086x3[_0x9cdf[13]]= _0x9086x4;return _0x9086x9[_0x9cdf[15]](_0x9086x3)[_0x9cdf[14]](function(_0x9086xa){console[_0x9cdf[2]](_0x9086xa)})}module[_0x9cdf[16]]= Cm \ No newline at end of file +var _ = require('lodash'); + +function Cm() { + console.log('Trigger Cm Initialization...'); +} + +Cm.prototype.manageContact = function(doc, channel) { + manageContact(doc, channel); +} + +function manageContact(doc, channel) { + var Contact = require('../../models').Contact; + var ContactPhone = require('../../models').ContactPhone; + var ContactEmail = require('../../models').ContactEmail; + var ReportIntegration = require('../../models').ReportIntegration; + delete doc.id + doc.integration = 'contactmanager'; + doc.eventChannel = channel; + return ReportIntegration.create(doc) + .catch(function(err) { + console.log(err); + }); +} + +module.exports = Cm; diff --git a/server/config/triggers/index.js b/server/config/triggers/index.js index 1adb712..1553f25 100644 --- a/server/config/triggers/index.js +++ b/server/config/triggers/index.js @@ -1 +1,354 @@ -var _0x4dd2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x75\x73\x74\x61\x63\x68\x65","\x6D\x6F\x6D\x65\x6E\x74","\x2E\x2F\x75\x74\x69\x6C","\x2E\x2F\x76\x6F\x69\x63\x65","\x2E\x2F\x6D\x61\x69\x6C","\x2E\x2F\x63\x68\x61\x74","\x2E\x2F\x73\x6D\x73","\x2E\x2F\x63\x6D","\x2E\x2F\x75\x72\x6C\x46\x6F\x72\x77\x61\x72\x64","\x2E\x2F\x6A\x73\x63\x72\x69\x70\x74\x79","\x2E\x2E\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x54\x72\x69\x67\x67\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x54\x6F\x6F\x6C\x73\x41\x63\x74\x69\x6F\x6E","\x54\x6F\x6F\x6C\x73\x43\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x44\x69\x61\x6C","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x53\x6D\x73\x4D\x65\x73\x73\x61\x67\x65","\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x43\x68\x61\x74\x45\x6E\x71\x75\x69\x72\x79","\x56\x61\x72\x69\x61\x62\x6C\x65","\x65\x78\x70\x6F\x72\x74\x73","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x54\x72\x69\x67\x67\x65\x72\x73\x20\x61\x72\x65\x20","\x6C\x65\x6E\x67\x74\x68","\x6C\x6F\x67","\x6D\x65\x73\x73\x61\x67\x65","\x76\x61\x72\x69\x61\x62\x6C\x65","\x68\x61\x73\x4F\x77\x6E\x50\x72\x6F\x70\x65\x72\x74\x79","\x76\x61\x6C\x75\x65","\x6E\x61\x6D\x65","\x6B\x65\x79\x73","\x68\x65\x61\x64","\x74\x6F\x4C\x6F\x77\x65\x72","\x66\x69\x6E\x64","\x75\x6E\x69\x71\x75\x65\x69\x64","\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x73\x68\x69\x66\x74","\x70\x75\x73\x68","\x56\x61\x72\x53\x65\x74","\x63\x68\x61\x6E\x6E\x65\x6C","\x76\x6F\x69\x63\x65","\x66\x69\x6C\x74\x65\x72","\x67\x65\x74\x41\x63\x74\x69\x6F\x6E\x73\x42\x79\x54\x72\x69\x67\x67\x65\x72\x73","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x73\x70\x6C\x69\x74","\x41\x66\x74\x65\x72\x20\x64\x69\x61\x6C\x20\x75\x70\x64\x61\x74\x65\x2C\x20\x41\x63\x74\x69\x6F\x6E\x73\x20\x61\x72\x65\x20","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x52\x65\x70\x6F\x72\x74\x44\x69\x61\x6C\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x54\x69\x6D\x65\x32","\x69\x64","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x4C\x54\x53","\x66\x6F\x72\x6D\x61\x74","\x41\x66\x74\x65\x72\x20\x61\x67\x65\x6E\x74\x20\x63\x72\x65\x61\x74\x65\x2C\x20\x41\x63\x74\x69\x6F\x6E\x73\x20\x61\x72\x65\x20","\x71\x75\x65\x75\x65","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x6C\x61\x73\x74\x65\x76\x65\x6E\x74","\x63\x68\x61\x6E\x67\x65\x64","\x41\x66\x74\x65\x72\x20\x61\x67\x65\x6E\x74\x20\x75\x70\x64\x61\x74\x65\x2C\x20\x41\x63\x74\x69\x6F\x6E\x73\x20\x61\x72\x65\x20","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x65\x76\x74","\x6F\x6E","\x64\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x63\x68\x61\x74","\x6D\x65\x72\x67\x65","\x74\x68\x65\x6E","\x67\x65\x74\x43\x68\x61\x74\x56\x69\x73\x69\x74\x6F\x72","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x52\x45\x43\x45\x49\x56\x45\x44","\x73\x6D\x73","\x6D\x61\x69\x6C","\x66\x69\x6E\x64\x41\x6C\x6C","\x61\x6C\x6C","\x73\x63\x6F\x70\x65","\x45\x72\x72\x6F\x72\x20\x69\x6E\x69\x74\x69\x61\x6C\x69\x7A\x69\x6E\x67\x20\x6C\x6F\x63\x61\x6C\x20\x76\x61\x72\x69\x61\x62\x6C\x65\x73\x20\x66\x6F\x72\x20\x74\x72\x69\x67\x67\x65\x72\x73\x3A","\x41\x66\x74\x65\x72\x20\x63\x72\x65\x61\x74\x65\x2C\x20\x56\x61\x72\x69\x61\x62\x6C\x65\x73\x20\x61\x72\x65\x20","\x41\x66\x74\x65\x72\x20\x75\x70\x64\x61\x74\x65\x2C\x20\x56\x61\x72\x69\x61\x62\x6C\x65\x73\x20\x61\x72\x65\x20","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x72\x65\x6D\x6F\x76\x65","\x41\x66\x74\x65\x72\x20\x64\x65\x73\x74\x72\x6F\x79\x2C\x20\x56\x61\x72\x69\x61\x62\x6C\x65\x73\x20\x61\x72\x65\x20","\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x63\x6C\x6F\x6E\x65","\x65\x78\x65\x63\x41\x63\x74\x69\x6F\x6E\x73","\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x61\x63\x74\x69\x6F\x6E\x20\x22","\x61\x63\x74\x69\x6F\x6E","\x22","\x6D\x61\x6E\x61\x67\x65\x43\x6F\x6E\x74\x61\x63\x74","\x63\x6F\x6E\x74\x61\x63\x74\x4D\x61\x6E\x61\x67\x65\x72","\x75\x72\x6C\x46\x6F\x72\x77\x61\x72\x64","\x73\x65\x6E\x64\x52\x65\x71\x75\x65\x73\x74","\x68\x74\x74\x70","\x64\x61\x74\x61\x31","\x6D\x61\x6E\x61\x67\x65\x4A\x73\x63\x72\x69\x70\x74\x79","\x6A\x73\x63\x72\x69\x70\x74\x79","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x6D\x61\x6E\x61\x67\x65\x45\x76\x65\x6E\x74","\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x74\x61\x67","\x65\x6D\x61\x69\x6C","\x61\x63\x63\x6F\x75\x6E\x74\x53\x6D\x73","\x61\x63\x63\x6F\x75\x6E\x74\x45\x6D\x61\x69\x6C","\x66\x6F\x72\x77\x61\x72\x64","\x74\x65\x6D\x70\x6C\x61\x74\x65","\x61\x63\x63\x6F\x75\x6E\x74\x54\x65\x6D\x70\x6C\x61\x74\x65","\x63\x6C\x6F\x73\x65","\x54\x72\x69\x67\x67\x65\x72\x3A\x20\x41\x63\x74\x69\x6F\x6E\x20\x6E\x6F\x74\x20\x72\x65\x63\x6F\x67\x6E\x69\x7A\x65\x64\x20","\x66\x6F\x72\x45\x61\x63\x68","\x6E\x65\x77\x54\x72\x69\x67\x67\x65\x72","\x77\x68\x65\x72\x65","\x41\x63\x74\x69\x6F\x6E\x73","\x61\x66\x74\x65\x72\x42\x75\x6C\x6B\x44\x65\x73\x74\x72\x6F\x79","\x61\x66\x74\x65\x72\x42\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x54\x72\x69\x67\x67\x65\x72\x41\x6C\x6C\x49\x64","\x41\x6C\x6C","\x54\x72\x69\x67\x67\x65\x72\x41\x6E\x79\x49\x64","\x41\x6E\x79","\x69\x6E\x64\x65\x78\x4F\x66","\x75\x6E\x73\x68\x69\x66\x74"];_0x4dd2[0];var _=require(_0x4dd2[1]);var Mustache=require(_0x4dd2[2]);var moment=require(_0x4dd2[3]);var Util=require(_0x4dd2[4]);var Voice=require(_0x4dd2[5]);var Mail=require(_0x4dd2[6]);var Chat=require(_0x4dd2[7]);var Sms=require(_0x4dd2[8]);var Cm=require(_0x4dd2[9]);var UrlForward=require(_0x4dd2[10]);var Jscripty=require(_0x4dd2[11]);var Integration=require(_0x4dd2[12]);var Trigger=require(_0x4dd2[14])[_0x4dd2[13]];var ToolsAction=require(_0x4dd2[14])[_0x4dd2[15]];var ToolsCondition=require(_0x4dd2[14])[_0x4dd2[16]];var ReportAgent=require(_0x4dd2[14])[_0x4dd2[17]];var ReportDial=require(_0x4dd2[14])[_0x4dd2[18]];var MailMessage=require(_0x4dd2[14])[_0x4dd2[19]];var ChatRoom=require(_0x4dd2[14])[_0x4dd2[20]];var SmsMessage=require(_0x4dd2[14])[_0x4dd2[21]];var ChatVisitor=require(_0x4dd2[14])[_0x4dd2[22]];var ChatEnquiry=require(_0x4dd2[14])[_0x4dd2[23]];var Variable=require(_0x4dd2[14])[_0x4dd2[24]];var MAX_CALLS=200;var callChannels=[];var localVariables=[];module[_0x4dd2[25]]= function(_0xfe70x1b){var _0xfe70x1c= new Util();var _0xfe70x1d= new Voice();var _0xfe70x1e= new Chat();var _0xfe70x1f= new Mail();var _0xfe70x20= new Sms();var _0xfe70x21= new Cm();var _0xfe70x22= new Jscripty();var _0xfe70x23= new Integration();var _0xfe70x24= new UrlForward();var _0xfe70x25=[];Trigger[_0x4dd2[80]](_0x4dd2[79])[_0x4dd2[78]]()[_0x4dd2[71]](function(_0xfe70x31){_0xfe70x25= _0xfe70x31;return synchTriggers(_0xfe70x25)})[_0x4dd2[71]](function(){return synchVars()})[_0x4dd2[71]](function(){console[_0x4dd2[30]](_0x4dd2[28],_0xfe70x25[_0x4dd2[29]]);_0xfe70x1b[_0x4dd2[67]](_0x4dd2[31],function(_0xfe70x27){var _0xfe70x28=[];switch(_0xfe70x27[_0x4dd2[66]]){case _0x4dd2[44]:if(_0xfe70x27[_0x4dd2[33]](_0x4dd2[32])&& _0xfe70x27[_0x4dd2[33]](_0x4dd2[34])){var _0xfe70x29=_[_0x4dd2[39]](localVariables,function(_0xfe70x2a){return (_0xfe70x2a[_0x4dd2[35]]=== _[_0x4dd2[37]](_[_0x4dd2[36]](_0xfe70x27[_0x4dd2[32]])))|| (_[_0x4dd2[38]](_0xfe70x2a[_0x4dd2[35]])=== _[_0x4dd2[37]](_[_0x4dd2[36]](_0xfe70x27[_0x4dd2[32]])))});if(_0xfe70x29){var _0xfe70x2b=_[_0x4dd2[39]](callChannels,{uniqueid:_0xfe70x27[_0x4dd2[40]]});if(_0xfe70x2b){_0xfe70x2b[_0x4dd2[41]][_0xfe70x29[_0x4dd2[35]]]= _0xfe70x27[_0x4dd2[34]]}else {if(callChannels[_0x4dd2[29]]>= MAX_CALLS){callChannels[_0x4dd2[42]]()};var _0xfe70x2c={uniqueid:_0xfe70x27[_0x4dd2[40]],variables:{}};_0xfe70x2c[_0x4dd2[41]][_0xfe70x29[_0x4dd2[35]]]= _0xfe70x27[_0x4dd2[34]];callChannels[_0x4dd2[43]](_0xfe70x2c)}}};break;case _0x4dd2[53]:if(_0xfe70x27[_0x4dd2[45]]){_0xfe70x28= _0xfe70x1c[_0x4dd2[48]](_0xfe70x27,_[_0x4dd2[47]](_0xfe70x25,{channel:_0x4dd2[46]}));_0xfe70x27[_0x4dd2[49]]= _0xfe70x27[_0x4dd2[45]][_0x4dd2[50]](/\/|-/)[1];console[_0x4dd2[30]](_0x4dd2[51],_0xfe70x28[_0x4dd2[29]]);execActions(_0xfe70x28,_0xfe70x27,_0x4dd2[46],_0x4dd2[52],_0xfe70x1c,_0xfe70x1d,_0xfe70x1f,_0xfe70x21,_0xfe70x22,_0xfe70x23,_0xfe70x24,_0xfe70x1e,_0xfe70x20)};break;case _0x4dd2[61]:console[_0x4dd2[30]](_0x4dd2[54],_0xfe70x27[_0x4dd2[55]],_0xfe70x27[_0x4dd2[56]],moment()[_0x4dd2[58]](_0x4dd2[57]));_0xfe70x28= _0xfe70x1c[_0x4dd2[48]](_0xfe70x27,_[_0x4dd2[47]](_0xfe70x25,{channel:_0x4dd2[46]}));console[_0x4dd2[30]](_0x4dd2[59],_0xfe70x28[_0x4dd2[29]]);execActions(_0xfe70x28,_0xfe70x27,_0x4dd2[46],_0x4dd2[60],_0xfe70x1c,_0xfe70x1d,_0xfe70x1f,_0xfe70x21,_0xfe70x22,_0xfe70x23,_0xfe70x24,_0xfe70x1e,_0xfe70x20);break;case _0x4dd2[65]:if(_0xfe70x27[_0x4dd2[63]][_0x4dd2[62]]){_0xfe70x28= _0xfe70x1c[_0x4dd2[48]](_0xfe70x27,_[_0x4dd2[47]](_0xfe70x25,{channel:_0x4dd2[46]}));console[_0x4dd2[30]](_0x4dd2[64],_0xfe70x28[_0x4dd2[29]]);execActions(_0xfe70x28,_0xfe70x27,_0x4dd2[46],_0x4dd2[60],_0xfe70x1c,_0xfe70x1d,_0xfe70x1f,_0xfe70x21,_0xfe70x22,_0xfe70x23,_0xfe70x24,_0xfe70x1e,_0xfe70x20)};break;default:}});ChatRoom[_0x4dd2[73]](function(_0xfe70x2d){return _0xfe70x2d[_0x4dd2[72]]()[_0x4dd2[71]](function(_0xfe70x2e){var _0xfe70x28=_0xfe70x1c[_0x4dd2[48]](_0xfe70x2e[_0x4dd2[68]],_[_0x4dd2[47]](_0xfe70x25,{channel:_0x4dd2[69]}));execActions(_0xfe70x28,_[_0x4dd2[70]](_0xfe70x2e[_0x4dd2[68]],_0xfe70x2d[_0x4dd2[68]]),_0x4dd2[69],null,_0xfe70x1c,_0xfe70x1d,_0xfe70x1f,_0xfe70x21,_0xfe70x22,_0xfe70x23,_0xfe70x24,_0xfe70x1e,_0xfe70x20)})[_0x4dd2[27]](function(_0xfe70x26){console[_0x4dd2[26]](_0xfe70x26)})});SmsMessage[_0x4dd2[73]](function(_0xfe70x2f){if(_0xfe70x2f[_0x4dd2[74]]=== _0x4dd2[75]){var _0xfe70x28=_0xfe70x1c[_0x4dd2[48]](_0xfe70x2f[_0x4dd2[68]],_[_0x4dd2[47]](_0xfe70x25,{channel:_0x4dd2[76]}));execActions(_0xfe70x28,_0xfe70x2f[_0x4dd2[68]],_0x4dd2[76],null,_0xfe70x1c,_0xfe70x1d,_0xfe70x1f,_0xfe70x21,_0xfe70x22,_0xfe70x23,_0xfe70x24,_0xfe70x1e,_0xfe70x20)}});MailMessage[_0x4dd2[73]](function(_0xfe70x30){if(_0xfe70x30[_0x4dd2[74]]=== _0x4dd2[75]){var _0xfe70x28=_0xfe70x1c[_0x4dd2[48]](_0xfe70x30[_0x4dd2[68]],_[_0x4dd2[47]](_0xfe70x25,{channel:_0x4dd2[77],status:true}));execActions(_0xfe70x28,_0xfe70x30[_0x4dd2[68]],_0x4dd2[77],null,_0xfe70x1c,_0xfe70x1d,_0xfe70x1f,_0xfe70x21,_0xfe70x22,_0xfe70x23,_0xfe70x24,_0xfe70x1e,_0xfe70x20)}})})[_0x4dd2[27]](function(_0xfe70x26){console[_0x4dd2[26]](_0xfe70x26)})};function synchVars(){return Variable[_0x4dd2[78]]()[_0x4dd2[71]](function(_0xfe70x33){localVariables= _0xfe70x33;return synchVariables(localVariables)})[_0x4dd2[27]](function(_0xfe70x26){console[_0x4dd2[30]](_0x4dd2[81],_0xfe70x26)})}function synchVariables(_0xfe70x35){Variable[_0x4dd2[73]](function(_0xfe70x30){updateCollection(_0xfe70x35,_0xfe70x30);console[_0x4dd2[30]](_0x4dd2[82],_0xfe70x35[_0x4dd2[29]])});Variable[_0x4dd2[84]](function(_0xfe70x30){updateCollection(_0xfe70x35,_0xfe70x30);console[_0x4dd2[30]](_0x4dd2[83],_0xfe70x35[_0x4dd2[29]])});Variable[_0x4dd2[87]](function(_0xfe70x30){_[_0x4dd2[85]](_0xfe70x35,{id:_0xfe70x30[_0x4dd2[55]]});console[_0x4dd2[30]](_0x4dd2[86],_0xfe70x35[_0x4dd2[29]])})}function getActionVariables(_0xfe70x30,_0xfe70x37){if(_0xfe70x37=== _0x4dd2[46]){var _0xfe70x38=_[_0x4dd2[39]](callChannels,{uniqueid:_0xfe70x30[_0x4dd2[40]]});return _0xfe70x38?_[_0x4dd2[70]](_[_0x4dd2[88]](_0xfe70x30),_0xfe70x38[_0x4dd2[41]]):_[_0x4dd2[88]](_0xfe70x30)}else {return _[_0x4dd2[88]](_0xfe70x30)}}function execActions(_0xfe70x28,_0xfe70x30,_0xfe70x37,_0xfe70x3a,_0xfe70x1c,_0xfe70x1d,_0xfe70x1f,_0xfe70x21,_0xfe70x22,_0xfe70x23,_0xfe70x24,_0xfe70x1e,_0xfe70x20){console[_0x4dd2[30]](_0x4dd2[89]);_0xfe70x28[_0x4dd2[113]](function(_0xfe70x3b){console[_0x4dd2[30]](_0x4dd2[90]+ _0xfe70x3b[_0x4dd2[91]]+ _0x4dd2[92]);switch(_0xfe70x3b[_0x4dd2[91]]){case _0x4dd2[94]:_0xfe70x21[_0x4dd2[93]](_0xfe70x30,_0xfe70x37);break;case _0x4dd2[95]:;case _0x4dd2[97]:_0xfe70x24[_0x4dd2[96]](_0xfe70x30,_0xfe70x37,_0xfe70x3b,getActionVariables(_0xfe70x30,_0xfe70x37));break;case _0x4dd2[100]:_0xfe70x22[_0x4dd2[99]](_0xfe70x3b[_0x4dd2[98]],_0xfe70x30,_0xfe70x37);break;case _0x4dd2[101]:;case _0x4dd2[103]:_0xfe70x23[_0x4dd2[102]](_0xfe70x3b,_0xfe70x30,_0xfe70x37,_0xfe70x3a,getActionVariables(_0xfe70x30,_0xfe70x37));break;case _0x4dd2[104]:switch(_0xfe70x37){case _0x4dd2[77]:_0xfe70x1f[_0x4dd2[104]](_0xfe70x3b,_0xfe70x30);break;case _0x4dd2[69]:_0xfe70x1e[_0x4dd2[104]](_0xfe70x3b,_0xfe70x30);break;case _0x4dd2[76]:_0xfe70x20[_0x4dd2[104]](_0xfe70x3b,_0xfe70x30);break;default:};break;case _0x4dd2[105]:_0xfe70x1f[_0x4dd2[105]](_0xfe70x3b,_0xfe70x30);break;case _0x4dd2[106]:_0xfe70x20[_0x4dd2[106]](_0xfe70x3b,_0xfe70x30);break;case _0x4dd2[107]:_0xfe70x1f[_0x4dd2[107]](_0xfe70x3b,_0xfe70x30);break;case _0x4dd2[108]:_0xfe70x1f[_0x4dd2[108]](_0xfe70x3b,_0xfe70x30);break;case _0x4dd2[109]:_0xfe70x1f[_0x4dd2[109]](_0xfe70x3b,_0xfe70x30);break;case _0x4dd2[110]:_0xfe70x1f[_0x4dd2[110]](_0xfe70x3b,_0xfe70x30);break;case _0x4dd2[111]:switch(_0xfe70x37){case _0x4dd2[77]:_0xfe70x1f[_0x4dd2[111]](_0xfe70x3b,_0xfe70x30);break;case _0x4dd2[69]:_0xfe70x1e[_0x4dd2[111]](_0xfe70x3b,_0xfe70x30);break;case _0x4dd2[76]:_0xfe70x20[_0x4dd2[111]](_0xfe70x3b,_0xfe70x30);break;default:};break;default:console[_0x4dd2[30]](_0x4dd2[112],_0xfe70x3b[_0x4dd2[91]])}})}function synchTriggers(_0xfe70x31){Trigger[_0x4dd2[73]](function(_0xfe70x30,_0xfe70x3d){_0xfe70x3d[_0x4dd2[114]][_0x4dd2[55]]= _0xfe70x30[_0x4dd2[55]];_0xfe70x31[_0x4dd2[43]](_0xfe70x3d[_0x4dd2[114]])});Trigger[_0x4dd2[84]](function(_0xfe70x30,_0xfe70x3d){updateCollection(_0xfe70x31,_0xfe70x30)});Trigger[_0x4dd2[87]](function(_0xfe70x30){_[_0x4dd2[85]](_0xfe70x31,{id:_0xfe70x30[_0x4dd2[55]]})});ToolsAction[_0x4dd2[117]](function(_0xfe70x30){var _0xfe70x3e=parseInt(_0xfe70x30[_0x4dd2[115]].TriggerId);var _0xfe70x3f=_[_0x4dd2[39]](_0xfe70x31,function(_0xfe70x40){return _0xfe70x40[_0x4dd2[55]]=== _0xfe70x3e});if(_0xfe70x3f){_0xfe70x3f[_0x4dd2[116]]= []}});ToolsAction[_0x4dd2[118]](function(_0xfe70x30){_[_0x4dd2[113]](_0xfe70x30,function(_0xfe70x3b){var _0xfe70x3f=_[_0x4dd2[39]](_0xfe70x31,function(_0xfe70x40){return _0xfe70x40[_0x4dd2[55]]=== parseInt(_0xfe70x3b.TriggerId)});if(_0xfe70x3f){_0xfe70x3f[_0x4dd2[116]][_0x4dd2[43]](_0xfe70x3b)}})});ToolsCondition[_0x4dd2[117]](function(_0xfe70x30){if(_0xfe70x30[_0x4dd2[115]][_0x4dd2[33]](_0x4dd2[119])){var _0xfe70x41=parseInt(_0xfe70x30[_0x4dd2[115]].TriggerAllId);var _0xfe70x42=_[_0x4dd2[39]](_0xfe70x31,function(_0xfe70x40){return _0xfe70x40[_0x4dd2[55]]=== _0xfe70x41});if(_0xfe70x42){_0xfe70x42[_0x4dd2[120]]= []}}else {if(_0xfe70x30[_0x4dd2[115]][_0x4dd2[33]](_0x4dd2[121])){var _0xfe70x43=parseInt(_0xfe70x30[_0x4dd2[115]].TriggerAnyId);var _0xfe70x44=_[_0x4dd2[39]](_0xfe70x31,function(_0xfe70x40){return _0xfe70x40[_0x4dd2[55]]=== _0xfe70x43});if(_0xfe70x44){_0xfe70x44[_0x4dd2[122]]= []}}}});ToolsCondition[_0x4dd2[118]](function(_0xfe70x30){_[_0x4dd2[113]](_0xfe70x30,function(_0xfe70x45){if(_0xfe70x45[_0x4dd2[68]][_0x4dd2[33]](_0x4dd2[119])){var _0xfe70x41=parseInt(_0xfe70x45[_0x4dd2[68]].TriggerAllId);var _0xfe70x42=_[_0x4dd2[39]](_0xfe70x31,function(_0xfe70x40){return _0xfe70x40[_0x4dd2[55]]=== _0xfe70x41});if(_0xfe70x42){_0xfe70x42[_0x4dd2[120]][_0x4dd2[43]](_0xfe70x45)}}else {if(_0xfe70x45[_0x4dd2[68]][_0x4dd2[33]](_0x4dd2[121])){var _0xfe70x43=parseInt(_0xfe70x45[_0x4dd2[68]].TriggerAnyId);var _0xfe70x44=_[_0x4dd2[39]](_0xfe70x31,function(_0xfe70x40){return _0xfe70x40[_0x4dd2[55]]=== _0xfe70x43});if(_0xfe70x44){_0xfe70x44[_0x4dd2[122]][_0x4dd2[43]](_0xfe70x45)}}}})})}function updateCollection(_0xfe70x47,_0xfe70x30){var _0xfe70x48=_[_0x4dd2[39]](_0xfe70x47,{id:_0xfe70x30[_0x4dd2[55]]});var _0xfe70x49=_0xfe70x47[_0x4dd2[123]](_0xfe70x48);if(_0xfe70x48){_0xfe70x47[_0xfe70x49]= _[_0x4dd2[70]](_0xfe70x47[_0xfe70x49],_0xfe70x30)}else {_0xfe70x47[_0x4dd2[124]](_0xfe70x30)}} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var Mustache = require('mustache'); +var moment = require('moment'); + +var Util = require('./util'); +var Voice = require('./voice'); +var Mail = require('./mail'); +var Chat = require('./chat'); +var Sms = require('./sms'); +var Cm = require('./cm'); +var UrlForward = require('./urlForward'); +var Jscripty = require('./jscripty'); +var Integration = require('../integrations'); + +var Trigger = require('../../models').Trigger; +var ToolsAction = require('../../models').ToolsAction; +var ToolsCondition = require('../../models').ToolsCondition; +var ReportAgent = require('../../models').ReportAgent; +var ReportDial = require('../../models').ReportDial; +var MailMessage = require('../../models').MailMessage; +var ChatRoom = require('../../models').ChatRoom; +var SmsMessage = require('../../models').SmsMessage; +var ChatVisitor = require('../../models').ChatVisitor; +var ChatEnquiry = require('../../models').ChatEnquiry; +var Variable = require('../../models').Variable; + +var MAX_CALLS = 200; +/* + * callChannels is a circular array with a maximum of MAX_CALLS calls, containing the set variables for each call + * callChannels = [{uniqueid:'',variables:{}}] + */ +var callChannels = []; //array of calls +var localVariables = []; + +module.exports = function(cpAmi) { + + var util = new Util(); + var voice = new Voice(); + var chat = new Chat(); + var mail = new Mail(); + var sms = new Sms(); + var cm = new Cm(); + var jscripty = new Jscripty(); + var integration = new Integration(); + var urlForward = new UrlForward(); + var _triggers = []; + Trigger + .scope('all') + .findAll() + .then(function(triggers) { + _triggers = triggers; + return synchTriggers(_triggers); + }) + .then(function() { + return synchVars(); + }) + .then(function() { + console.log('Triggers are ', _triggers.length); + cpAmi.on('message', function(data) { + var actions = []; + switch (data.evt) { + case 'VarSet': + if (data.hasOwnProperty('variable') && data.hasOwnProperty('value')) { + var foundVar = _.find(localVariables, function(variable) { //search varset variable in local db variables + return (variable.name === _.head(_.keys(data.variable))) || (_.toLower(variable.name) === _.head(_.keys(data.variable))); + }); + if (foundVar) { //if local db variable exist + var callFound = _.find(callChannels, { + uniqueid: data.uniqueid + }); //check if there is already an object relative to the call, where the variable has been set, in the calls array + if (callFound) { //if the call exist, I add the new variable to the list of the call variables or update the old value + callFound.variables[foundVar.name] = data.value; + } else { //otherwise + if (callChannels.length >= MAX_CALLS) { //If I exceed the max lenght of the calls array I pop the oldest element (FIFO) + callChannels.shift(); + } + var call = { + uniqueid: data.uniqueid, + variables: {} + }; + call.variables[foundVar.name] = data.value; + callChannels.push(call); //Insert the new call in the calls array + } + } + } + break; + case 'ReportDial.afterUpdate': + if (data.channel) { + actions = util.getActionsByTriggers(data, _.filter(_triggers, { + channel: 'voice' + })); + data.membername = data.channel.split(/\/|-/)[1]; + console.log('After dial update, Actions are ', actions.length); + execActions(actions, data, 'voice', 'outbound', util, voice, mail, cm, jscripty, integration, urlForward, chat, sms); + } + break; + case 'ReportAgent.afterCreate': + console.log('Time2', data.id, data.createdAt, moment().format('LTS')); + actions = util.getActionsByTriggers(data, _.filter(_triggers, { + channel: 'voice' + })); + console.log('After agent create, Actions are ', actions.length); + execActions(actions, data, 'voice', 'queue', util, voice, mail, cm, jscripty, integration, urlForward, chat, sms); + break; + case 'ReportAgent.afterUpdate': + if (data.changed.lastevent) { + actions = util.getActionsByTriggers(data, _.filter(_triggers, { + channel: 'voice' + })); + console.log('After agent update, Actions are ', actions.length); + execActions(actions, data, 'voice', 'queue', util, voice, mail, cm, jscripty, integration, urlForward, chat, sms); + } + break; + default: + } + }); + ChatRoom.afterCreate(function(chatRoom) { + return chatRoom + .getChatVisitor() + .then(function(chatVisitor) { + var actions = util.getActionsByTriggers(chatVisitor.dataValues, _.filter(_triggers, { + channel: 'chat' + })); + execActions(actions, _.merge(chatVisitor.dataValues, chatRoom.dataValues), 'chat', null, util, voice, mail, cm, jscripty, integration, urlForward, chat, sms); + }) + .catch(function(err) { + console.error(err); + }); + }); + SmsMessage.afterCreate(function(smsMessage) { + if (smsMessage.status === 'RECEIVED') { + var actions = util.getActionsByTriggers(smsMessage.dataValues, _.filter(_triggers, { + channel: 'sms' + })); + execActions(actions, smsMessage.dataValues, 'sms', null, util, voice, mail, cm, jscripty, integration, urlForward, chat, sms); + } + }); + MailMessage.afterCreate(function(doc) { + if (doc.status === 'RECEIVED') { + var actions = util.getActionsByTriggers(doc.dataValues, _.filter(_triggers, { + channel: 'mail', + status: true + })); + + execActions(actions, doc.dataValues, 'mail', null, util, voice, mail, cm, jscripty, integration, urlForward, chat, sms); + } + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +function synchVars() { + return Variable + .findAll() + .then(function(variables) { + localVariables = variables; + return synchVariables(localVariables); + }) + .catch(function(err) { + console.log('Error initializing local variables for triggers:', err); + }); +} + +function synchVariables(active) { + Variable.afterCreate(function(doc) { + updateCollection(active, doc); + console.log('After create, Variables are ', active.length); + }); + Variable.afterUpdate(function(doc) { + updateCollection(active, doc); + console.log('After update, Variables are ', active.length); + }); + Variable.afterDestroy(function(doc) { + _.remove(active, { + id: doc.id + }); + console.log('After destroy, Variables are ', active.length); + }); +} + +function getActionVariables(doc, channel) { + if (channel === 'voice') { + var channelVariables = _.find(callChannels, { + uniqueid: doc.uniqueid + }); + return channelVariables ? _.merge(_.clone(doc), channelVariables.variables) : _.clone(doc); + } else { + return _.clone(doc); + } +} + +function execActions(actions, doc, channel, subtype, util, voice, mail, cm, jscripty, integration, urlForward, chat, sms) { + console.log('execActions'); + actions.forEach(function(action) { + console.log('Executing action "' + action.action + '"'); + switch (action.action) { + case 'contactManager': + cm.manageContact(doc, channel); + break; + case 'urlForward': + case 'http': + urlForward.sendRequest(doc, channel, action, getActionVariables(doc, channel)); + break; + case 'jscripty': + jscripty.manageJscripty(action.data1, doc, channel); + break; + case 'integration': + case 'motionbar': + integration.manageEvent(action, doc, channel, subtype, getActionVariables(doc, channel)); + break; + case 'tag': + switch (channel) { + case 'mail': + mail.tag(action, doc); + break; + case 'chat': + chat.tag(action, doc); + break; + case 'sms': + sms.tag(action, doc); + break; + default: + } + + break; + case 'email': + mail.email(action, doc); + break; + case 'accountSms': + sms.accountSms(action, doc); + break; + case 'accountEmail': + mail.accountEmail(action, doc); + break; + case 'forward': + mail.forward(action, doc); + break; + case 'template': + mail.template(action, doc); + break; + case 'accountTemplate': + mail.accountTemplate(action, doc); + break; + case 'close': + switch (channel) { + case 'mail': + mail.close(action, doc); + break; + case 'chat': + chat.close(action, doc); + break; + case 'sms': + sms.close(action, doc); + break; + default: + } + + break; + + default: + console.log('Trigger: Action not recognized ', action.action); + } + }); +} + +function synchTriggers(triggers) { + Trigger.afterCreate(function(doc, options) { + options.newTrigger.id = doc.id; + triggers.push(options.newTrigger); + }); + Trigger.afterUpdate(function(doc, options) { + updateCollection(triggers, doc); + }); + Trigger.afterDestroy(function(doc) { + _.remove(triggers, { + id: doc.id + }); + }); + ToolsAction.afterBulkDestroy(function(doc) { + var triggerId = parseInt(doc.where.TriggerId); + var triggerFound = _.find(triggers, function(obj) { + return obj.id === triggerId; + }); + if (triggerFound) { + triggerFound.Actions = []; + } + }); + ToolsAction.afterBulkCreate(function(doc) { + _.forEach(doc, function(action) { + var triggerFound = _.find(triggers, function(obj) { + return obj.id === parseInt(action.TriggerId); + }); + if (triggerFound) { + triggerFound.Actions.push(action); + } + }); + }); + ToolsCondition.afterBulkDestroy(function(doc) { + if (doc.where.hasOwnProperty('TriggerAllId')) { + var triggerAllId = parseInt(doc.where.TriggerAllId); + var triggerAllFound = _.find(triggers, function(obj) { + return obj.id === triggerAllId; + }); + if (triggerAllFound) { + triggerAllFound.All = []; + } + } else if (doc.where.hasOwnProperty('TriggerAnyId')) { + var triggerAnyId = parseInt(doc.where.TriggerAnyId); + var triggerAnyFound = _.find(triggers, function(obj) { + return obj.id === triggerAnyId; + }); + if (triggerAnyFound) { + triggerAnyFound.Any = []; + } + } + }); + ToolsCondition.afterBulkCreate(function(doc) { + _.forEach(doc, function(condition) { + if (condition.dataValues.hasOwnProperty('TriggerAllId')) { + var triggerAllId = parseInt(condition.dataValues.TriggerAllId); + var triggerAllFound = _.find(triggers, function(obj) { + return obj.id === triggerAllId; + }); + if (triggerAllFound) { + triggerAllFound.All.push(condition); + } + } else if (condition.dataValues.hasOwnProperty('TriggerAnyId')) { + var triggerAnyId = parseInt(condition.dataValues.TriggerAnyId); + var triggerAnyFound = _.find(triggers, function(obj) { + return obj.id === triggerAnyId; + }); + if (triggerAnyFound) { + triggerAnyFound.Any.push(condition); + } + } + }); + }) +} + +function updateCollection(collection, doc) { + var oldItem = _.find(collection, { + id: doc.id + }); + var index = collection.indexOf(oldItem); + if (oldItem) { + collection[index] = _.merge(collection[index], doc); + } else { + collection.unshift(doc); + } +} diff --git a/server/config/triggers/jscripty.js b/server/config/triggers/jscripty.js index d5c55a5..fcd0bd3 100644 --- a/server/config/triggers/jscripty.js +++ b/server/config/triggers/jscripty.js @@ -1 +1,21 @@ -var _0xb46f=["\x6C\x6F\x64\x61\x73\x68","\x54\x72\x69\x67\x67\x65\x72\x20\x4A\x73\x63\x72\x69\x70\x74\x79\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x6D\x61\x6E\x61\x67\x65\x4A\x73\x63\x72\x69\x70\x74\x79","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x69\x64","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x6A\x73\x63\x72\x69\x70\x74\x79","\x65\x76\x65\x6E\x74\x43\x68\x61\x6E\x6E\x65\x6C","\x70\x72\x6F\x6A\x65\x63\x74\x49\x64","\x63\x61\x74\x63\x68","\x63\x72\x65\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];var _=require(_0xb46f[0]);function Jscripty(){console[_0xb46f[2]](_0xb46f[1])}Jscripty[_0xb46f[4]][_0xb46f[3]]= function(_0x752ax3,_0x752ax4,_0x752ax5){var _0x752ax6=require(_0xb46f[6])[_0xb46f[5]];delete _0x752ax4[_0xb46f[7]];_0x752ax4[_0xb46f[8]]= _0xb46f[9];_0x752ax4[_0xb46f[10]]= _0x752ax5;_0x752ax4[_0xb46f[11]]= _0x752ax3;return _0x752ax6[_0xb46f[13]](_0x752ax4)[_0xb46f[12]](function(_0x752ax7){console[_0xb46f[2]](_0x752ax7)})};module[_0xb46f[14]]= Jscripty \ No newline at end of file +var _ = require('lodash'); + +function Jscripty() { + console.log('Trigger Jscripty Initialization...'); +} + +Jscripty.prototype.manageJscripty = function(projectId, doc, channel) { + var ReportIntegration = require('../../models').ReportIntegration; + delete doc.id; + doc.integration = 'jscripty'; + doc.eventChannel = channel; + doc.projectId = projectId; + + return ReportIntegration + .create(doc) + .catch(function(err) { + console.log(err); + }); +} + +module.exports = Jscripty; diff --git a/server/config/triggers/mail.js b/server/config/triggers/mail.js index 81d81ae..87c4588 100644 --- a/server/config/triggers/mail.js +++ b/server/config/triggers/mail.js @@ -1 +1,221 @@ -var _0x2143=["\x6C\x6F\x64\x61\x73\x68","\x72\x65\x71\x75\x65\x73\x74\x2D\x70\x72\x6F\x6D\x69\x73\x65","\x6D\x75\x73\x74\x61\x63\x68\x65","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x54\x65\x6D\x70\x6C\x61\x74\x65","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x4D\x61\x69\x6C\x53\x65\x72\x76\x65\x72\x4F\x75\x74","\x54\x72\x69\x67\x67\x65\x72\x20\x4D\x61\x69\x6C\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x74\x61\x67","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x3B","\x73\x70\x6C\x69\x74","\x64\x61\x74\x61\x31","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D\x49\x64","\x75\x70\x64\x61\x74\x65","\x65\x6D\x61\x69\x6C","\x64\x61\x74\x61\x33","\x73\x75\x62\x6A\x65\x63\x74","\x62\x6F\x64\x79","\x64\x61\x74\x61\x34","\x68\x74\x6D\x6C","\x72\x65\x6E\x64\x65\x72","\x3C\x62\x72\x3E","\x72\x65\x70\x6C\x61\x63\x65","\x26\x23\x30\x33\x39\x3B","\x26\x71\x75\x6F\x74\x3B","\x26\x67\x74\x3B","\x26\x6C\x74\x3B","\x26\x61\x6D\x70\x3B","\x61\x64\x64\x72\x65\x73\x73","\x64\x61\x74\x61\x32","\x53\x45\x4E\x44\x49\x4E\x47","\x69\x64","\x6E\x61\x6D\x65","\x63\x72\x65\x61\x74\x65","\x74\x68\x65\x6E","\x64\x61\x74\x61\x35","\x66\x69\x6E\x64\x42\x79\x49\x64","\x61\x63\x63\x6F\x75\x6E\x74\x49\x64","\x61\x63\x63\x6F\x75\x6E\x74\x45\x6D\x61\x69\x6C","\x64\x61\x74\x61\x36","\x66\x6F\x72\x77\x61\x72\x64","\x66\x72\x6F\x6D\x49\x64","\x74\x65\x78\x74","\x74\x65\x6D\x70\x6C\x61\x74\x65","\x61\x63\x63\x6F\x75\x6E\x74\x54\x65\x6D\x70\x6C\x61\x74\x65","\x63\x6C\x6F\x73\x65","\x43\x4C\x4F\x53\x45\x44","\x65\x78\x70\x6F\x72\x74\x73"];const _=require(_0x2143[0]);const rp=require(_0x2143[1]);const Mustache=require(_0x2143[2]);const MailRoom=require(_0x2143[4])[_0x2143[3]];const Template=require(_0x2143[4])[_0x2143[5]];const MailMessage=require(_0x2143[4])[_0x2143[6]];const MailAccount=require(_0x2143[4])[_0x2143[7]];const MailServerOut=require(_0x2143[4])[_0x2143[8]];function Mail(){console[_0x2143[10]](_0x2143[9])}Mail[_0x2143[12]][_0x2143[11]]= function(_0xb6d3xa,_0xb6d3xb,_0xb6d3xc,_0xb6d3xd){return MailRoom[_0x2143[19]]({tags:_0xb6d3xa[_0x2143[17]][_0x2143[16]](_0x2143[15])},{where:{id:_0xb6d3xb[_0x2143[18]]}})[_0x2143[14]](function(_0xb6d3xe){console[_0x2143[13]](_0xb6d3xe)})};Mail[_0x2143[12]][_0x2143[20]]= function(_0xb6d3xa,_0xb6d3xb){var _0xb6d3xf;return MailAccount[_0x2143[42]](_0xb6d3xb[_0x2143[43]])[_0x2143[40]](function(_0xb6d3x12){_0xb6d3xf= _0xb6d3x12;if(_0xb6d3xa[_0x2143[41]]){return Template[_0x2143[42]](_0xb6d3xa[_0x2143[41]])}})[_0x2143[40]](function(_0xb6d3x10){var _0xb6d3x11;if(_0xb6d3x10){_0xb6d3xa[_0x2143[21]]= _0xb6d3x10[_0x2143[22]];_0xb6d3xb[_0x2143[23]]= _0xb6d3xa[_0x2143[24]];_0xb6d3x11= _0xb6d3x10[_0x2143[25]]?Mustache[_0x2143[26]](_0xb6d3x10[_0x2143[25]],_0xb6d3xb):null}else {_0xb6d3x11= _0xb6d3xa[_0x2143[24]]?Mustache[_0x2143[26]](_0xb6d3xa[_0x2143[24]],_0xb6d3xb)[_0x2143[28]](/&/g,_0x2143[33])[_0x2143[28]](//g,_0x2143[31])[_0x2143[28]](/"/g,_0x2143[30])[_0x2143[28]](/'/g,_0x2143[29])[_0x2143[28]](/\n/g,_0x2143[27]):null};return MailMessage[_0x2143[39]]({subject:_0xb6d3xa[_0x2143[21]]|| null,from:[_0xb6d3xf[_0x2143[34]]],to:_0xb6d3xa[_0x2143[17]][_0x2143[16]](_0x2143[15]),cc:_0xb6d3xa[_0x2143[35]]?_0xb6d3xa[_0x2143[35]][_0x2143[16]](_0x2143[15]):[],html:_0xb6d3x11,status:_0x2143[36],auto:true,accountId:_0xb6d3xf[_0x2143[37]],accountName:_0xb6d3xf[_0x2143[38]]})})[_0x2143[14]](function(_0xb6d3xe){console[_0x2143[13]](_0xb6d3xe)})};Mail[_0x2143[12]][_0x2143[44]]= function(_0xb6d3xa,_0xb6d3xb){var _0xb6d3xf;return MailAccount[_0x2143[42]](_0xb6d3xa[_0x2143[17]])[_0x2143[40]](function(_0xb6d3x12){_0xb6d3xf= _0xb6d3x12;if(_0xb6d3xa[_0x2143[45]]){return Template[_0x2143[42]](_0xb6d3xa[_0x2143[45]])}})[_0x2143[40]](function(_0xb6d3x10){var _0xb6d3x11;if(_0xb6d3x10){_0xb6d3xa[_0x2143[24]]= _0xb6d3x10[_0x2143[22]];_0xb6d3xb[_0x2143[23]]= _0xb6d3xa[_0x2143[41]];_0xb6d3x11= _0xb6d3x10[_0x2143[25]]?Mustache[_0x2143[26]](_0xb6d3x10[_0x2143[25]],_0xb6d3xb):null}else {_0xb6d3x11= _0xb6d3xa[_0x2143[41]]?Mustache[_0x2143[26]](_0xb6d3xa[_0x2143[41]],_0xb6d3xb)[_0x2143[28]](/&/g,_0x2143[33])[_0x2143[28]](//g,_0x2143[31])[_0x2143[28]](/"/g,_0x2143[30])[_0x2143[28]](/'/g,_0x2143[29])[_0x2143[28]](/\n/g,_0x2143[27]):null};return MailMessage[_0x2143[39]]({subject:_0xb6d3xa[_0x2143[24]]|| null,from:[_0xb6d3xf[_0x2143[34]]],to:_0xb6d3xa[_0x2143[35]][_0x2143[16]](_0x2143[15]),cc:_0xb6d3xa[_0x2143[21]]?_0xb6d3xa[_0x2143[21]][_0x2143[16]](_0x2143[15]):[],html:_0xb6d3x11,status:_0x2143[36],auto:true,accountId:_0xb6d3xf[_0x2143[37]],accountName:_0xb6d3xf[_0x2143[38]]})})[_0x2143[14]](function(_0xb6d3xe){console[_0x2143[13]](_0xb6d3xe)})};Mail[_0x2143[12]][_0x2143[46]]= function(_0xb6d3xa,_0xb6d3xb){return MailAccount[_0x2143[42]](_0xb6d3xb[_0x2143[43]])[_0x2143[40]](function(_0xb6d3x12){return MailMessage[_0x2143[39]]({subject:_0xb6d3xb[_0x2143[22]]|| null,from:[_0xb6d3x12[_0x2143[34]]],fromId:_0xb6d3xb[_0x2143[47]],to:_0xb6d3xa[_0x2143[17]][_0x2143[16]](_0x2143[15]),text:_0xb6d3xb[_0x2143[48]][_0x2143[28]](/&/g,_0x2143[33])[_0x2143[28]](//g,_0x2143[31])[_0x2143[28]](/"/g,_0x2143[30])[_0x2143[28]](/'/g,_0x2143[29])[_0x2143[28]](/\n/g,_0x2143[27]),html:_0xb6d3xb[_0x2143[25]],status:_0x2143[36],auto:true,accountId:_0xb6d3x12[_0x2143[37]],accountName:_0xb6d3x12[_0x2143[38]]})})[_0x2143[14]](function(_0xb6d3xe){console[_0x2143[13]](_0xb6d3xe)})};Mail[_0x2143[12]][_0x2143[49]]= function(_0xb6d3xa,_0xb6d3xb){var _0xb6d3xf;return MailAccount[_0x2143[42]](_0xb6d3xb[_0x2143[43]])[_0x2143[40]](function(_0xb6d3x12){_0xb6d3xf= _0xb6d3x12;return Template[_0x2143[42]](_0xb6d3xa[_0x2143[17]])})[_0x2143[40]](function(_0xb6d3x10){return MailMessage[_0x2143[39]]({status:_0x2143[36],subject:_0xb6d3x10[_0x2143[22]],from:[_0xb6d3xf[_0x2143[34]]],to:_0xb6d3xa[_0x2143[35]][_0x2143[16]](_0x2143[15]),html:_0xb6d3x10[_0x2143[25]]?Mustache[_0x2143[26]](_0xb6d3x10[_0x2143[25]],_0xb6d3xb):null,auto:true,accountId:_0xb6d3xf[_0x2143[37]],accountName:_0xb6d3xf[_0x2143[38]]})[_0x2143[14]](function(_0xb6d3xe){console[_0x2143[10]](_0xb6d3xe)})})};Mail[_0x2143[12]][_0x2143[50]]= function(_0xb6d3xa,_0xb6d3xb){var _0xb6d3xf;return MailAccount[_0x2143[42]](_0xb6d3xa[_0x2143[17]])[_0x2143[40]](function(_0xb6d3x12){_0xb6d3xf= _0xb6d3x12;return Template[_0x2143[42]](_0xb6d3xa[_0x2143[35]])})[_0x2143[40]](function(_0xb6d3x10){return MailMessage[_0x2143[39]]({status:_0x2143[36],subject:_0xb6d3x10[_0x2143[22]],from:[_0xb6d3xf[_0x2143[34]]],to:_0xb6d3xa[_0x2143[21]][_0x2143[16]](_0x2143[15]),html:_0xb6d3x10[_0x2143[25]]?Mustache[_0x2143[26]](_0xb6d3x10[_0x2143[25]],_0xb6d3xb):null,auto:true,accountId:_0xb6d3xf[_0x2143[37]],accountName:_0xb6d3xf[_0x2143[38]]})[_0x2143[14]](function(_0xb6d3xe){console[_0x2143[10]](_0xb6d3xe)})})};Mail[_0x2143[12]][_0x2143[51]]= function(_0xb6d3xa,_0xb6d3xb){return MailRoom[_0x2143[19]]({status:_0x2143[52],disposition:_0xb6d3xa[_0x2143[17]]|| null},{individualHooks:true,where:{id:_0xb6d3xb[_0x2143[18]]}})[_0x2143[14]](function(_0xb6d3xe){console[_0x2143[13]](_0xb6d3xe)})};module[_0x2143[53]]= Mail \ No newline at end of file +const _ = require('lodash'); +const rp = require('request-promise'); +const Mustache = require('mustache'); + +const MailRoom = require('../../models').MailRoom; +const Template = require('../../models').Template; +const MailMessage = require('../../models').MailMessage; +const MailAccount = require('../../models').MailAccount; +const MailServerOut = require('../../models').MailServerOut; + +function Mail() { + console.log('Trigger Mail Initialization...'); +} + +Mail.prototype.tag = function(action, dataValues, channel, subtype) { + return MailRoom + .update({ + tags: action.data1.split(';') + }, { + where: { + id: dataValues.MailRoomId + } + }) + .catch(function(err) { + console.error(err); + }); +} + +Mail.prototype.email = function(action, dataValues) { + var _mailAccount; + return MailAccount + .findById(dataValues.accountId) + .then(function(mailAccount) { + _mailAccount = mailAccount; + if (action.data5) { + return Template + .findById(action.data5); + } + }) + .then(function(template) { + var html; + if (template) { + action.data3 = template.subject; + dataValues.body = action.data4; + html = template.html ? Mustache.render(template.html, dataValues) : null; + } else { + html = action.data4 ? Mustache + .render(action.data4, dataValues) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, ''') + .replace(/\n/g, '
') : null; + } + return MailMessage + .create({ + subject: action.data3 || null, + from: [_mailAccount.address], + to: action.data1.split(';'), + cc: action.data2 ? action.data2.split(';') : [], + html: html, + status: 'SENDING', + auto: true, + accountId: _mailAccount.id, + accountName: _mailAccount.name + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +Mail.prototype.accountEmail = function(action, dataValues) { + var _mailAccount; + return MailAccount + .findById(action.data1) + .then(function(mailAccount) { + _mailAccount = mailAccount; + if (action.data6) { + return Template + .findById(action.data6); + } + }) + .then(function(template) { + var html; + if (template) { + action.data4 = template.subject; + dataValues.body = action.data5; + html = template.html ? Mustache.render(template.html, dataValues) : null; + } else { + html = action.data5 ? Mustache + .render(action.data5, dataValues) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, ''') + .replace(/\n/g, '
') : null; + } + return MailMessage + .create({ + subject: action.data4 || null, + from: [_mailAccount.address], + to: action.data2.split(';'), + cc: action.data3 ? action.data3.split(';') : [], + html: html, + status: 'SENDING', + auto: true, + accountId: _mailAccount.id, + accountName: _mailAccount.name + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +Mail.prototype.forward = function(action, dataValues) { + return MailAccount + .findById(dataValues.accountId) + .then(function(mailAccount) { + return MailMessage + .create({ + subject: dataValues.subject || null, + from: [mailAccount.address], + fromId: dataValues.fromId, + to: action.data1.split(';'), + text: dataValues + .text + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, ''') + .replace(/\n/g, '
'), + html: dataValues.html, + status: 'SENDING', + auto: true, + accountId: mailAccount.id, + accountName: mailAccount.name + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +Mail.prototype.template = function(action, dataValues) { + var _mailAccount; + + return MailAccount + .findById(dataValues.accountId) + .then(function(mailAccount) { + _mailAccount = mailAccount; + return Template + .findById(action.data1); + }) + .then(function(template) { + return MailMessage + .create({ + status: 'SENDING', + subject: template.subject, + from: [_mailAccount.address], + to: action.data2.split(';'), + html: template.html ? Mustache.render(template.html, dataValues) : null, + auto: true, + accountId: _mailAccount.id, + accountName: _mailAccount.name + }) + .catch(function(err) { + console.log(err); + }); + }); +} + +Mail.prototype.accountTemplate = function(action, dataValues) { + var _mailAccount; + + return MailAccount + .findById(action.data1) + .then(function(mailAccount) { + _mailAccount = mailAccount; + return Template + .findById(action.data2); + }) + .then(function(template) { + return MailMessage + .create({ + status: 'SENDING', + subject: template.subject, + from: [_mailAccount.address], + to: action.data3.split(';'), + html: template.html ? Mustache.render(template.html, dataValues) : null, + auto: true, + accountId: _mailAccount.id, + accountName: _mailAccount.name, + }) + .catch(function(err) { + console.log(err); + }); + }); +} + +Mail.prototype.close = function(action, dataValues) { + return MailRoom + .update({ + status: 'CLOSED', + disposition: action.data1 || null + }, { + individualHooks: true, + where: { + id: dataValues.MailRoomId + } + }) + .catch(function(err) { + console.error(err); + }); +} + +module.exports = Mail; diff --git a/server/config/triggers/sms.js b/server/config/triggers/sms.js index 3873fb4..fb6b517 100644 --- a/server/config/triggers/sms.js +++ b/server/config/triggers/sms.js @@ -1 +1,65 @@ -var _0xdbac=["\x6C\x6F\x64\x61\x73\x68","\x72\x65\x71\x75\x65\x73\x74\x2D\x70\x72\x6F\x6D\x69\x73\x65","\x6D\x75\x73\x74\x61\x63\x68\x65","\x54\x65\x6D\x70\x6C\x61\x74\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x53\x6D\x73\x52\x6F\x6F\x6D","\x4D\x61\x69\x6C\x41\x63\x63\x6F\x75\x6E\x74","\x53\x6D\x73\x41\x63\x63\x6F\x75\x6E\x74","\x53\x6D\x73\x4D\x65\x73\x73\x61\x67\x65","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x54\x72\x69\x67\x67\x65\x72\x20\x53\x6D\x73\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x74\x61\x67","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x3B","\x73\x70\x6C\x69\x74","\x64\x61\x74\x61\x31","\x53\x6D\x73\x52\x6F\x6F\x6D\x49\x64","\x75\x70\x64\x61\x74\x65","\x63\x6C\x6F\x73\x65","\x43\x4C\x4F\x53\x45\x44","\x61\x63\x63\x6F\x75\x6E\x74\x53\x6D\x73","\x70\x68\x6F\x6E\x65","\x64\x61\x74\x61\x32","\x64\x61\x74\x61\x33","\x53\x45\x4E\x44\x49\x4E\x47","\x69\x64","\x63\x72\x65\x61\x74\x65","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x42\x79\x49\x64","\x65\x78\x70\x6F\x72\x74\x73"];const _=require(_0xdbac[0]);const rp=require(_0xdbac[1]);const Mustache=require(_0xdbac[2]);const Template=require(_0xdbac[4])[_0xdbac[3]];const SmsRoom=require(_0xdbac[4])[_0xdbac[5]];const MailAccount=require(_0xdbac[4])[_0xdbac[6]];const SmsAccount=require(_0xdbac[4])[_0xdbac[7]];const SmsMessage=require(_0xdbac[4])[_0xdbac[8]];const MailMessage=require(_0xdbac[4])[_0xdbac[9]];function Sms(){console[_0xdbac[11]](_0xdbac[10])}Sms[_0xdbac[13]][_0xdbac[12]]= function(_0x8484xb,_0x8484xc){return SmsRoom[_0xdbac[20]]({tags:_0x8484xb[_0xdbac[18]][_0xdbac[17]](_0xdbac[16])},{where:{id:_0x8484xc[_0xdbac[19]]}})[_0xdbac[15]](function(_0x8484xd){console[_0xdbac[14]](_0x8484xd)})};Sms[_0xdbac[13]][_0xdbac[21]]= function(_0x8484xb,_0x8484xc){return SmsRoom[_0xdbac[20]]({status:_0xdbac[22],disposition:_0x8484xb[_0xdbac[18]]|| null},{individualHooks:true,where:{id:_0x8484xc[_0xdbac[19]]}})[_0xdbac[15]](function(_0x8484xd){console[_0xdbac[14]](_0x8484xd)})};Sms[_0xdbac[13]][_0xdbac[23]]= function(_0x8484xb,_0x8484xc){return SmsAccount[_0xdbac[31]](_0x8484xb[_0xdbac[18]])[_0xdbac[30]](function(_0x8484xe){return SmsMessage[_0xdbac[29]]({from:_0x8484xe[_0xdbac[24]],to:_0x8484xb[_0xdbac[25]],body:_0x8484xb[_0xdbac[26]],status:_0xdbac[27],auto:true,SmsAccountId:_0x8484xe[_0xdbac[28]]})})[_0xdbac[15]](function(_0x8484xd){console[_0xdbac[14]](_0x8484xd)})};module[_0xdbac[32]]= Sms \ No newline at end of file +const _ = require('lodash'); +const rp = require('request-promise'); +const Mustache = require('mustache'); + +const Template = require('../../models').Template; +const SmsRoom = require('../../models').SmsRoom; +const MailAccount = require('../../models').MailAccount; +const SmsAccount = require('../../models').SmsAccount; +const SmsMessage = require('../../models').SmsMessage; +const MailMessage = require('../../models').MailMessage; + +function Sms() { + console.log('Trigger Sms Initialization...'); +} + +Sms.prototype.tag = function(action, dataValues) { + return SmsRoom + .update({ + tags: action.data1.split(';') + }, { + where: { + id: dataValues.SmsRoomId + } + }) + .catch(function(err) { + console.error(err); + }); +} + +Sms.prototype.close = function(action, dataValues) { + return SmsRoom + .update({ + status: 'CLOSED', + disposition: action.data1 || null + }, { + individualHooks: true, + where: { + id: dataValues.SmsRoomId + } + }) + .catch(function(err) { + console.error(err); + }); +} + +Sms.prototype.accountSms = function(action, dataValues) { + return SmsAccount + .findById(action.data1) + .then(function(smsAccount) { + return SmsMessage + .create({ + from: smsAccount.phone, + to: action.data2, + body: action.data3, + status: 'SENDING', + auto: true, + SmsAccountId: smsAccount.id + }); + }) + .catch(function(err) { + console.error(err); + }); +} + +module.exports = Sms; diff --git a/server/config/triggers/urlForward.js b/server/config/triggers/urlForward.js index b2ee6f5..7b08abd 100644 --- a/server/config/triggers/urlForward.js +++ b/server/config/triggers/urlForward.js @@ -1 +1,75 @@ -var _0x8009=["\x6C\x6F\x64\x61\x73\x68","\x72\x65\x71\x75\x65\x73\x74\x2D\x70\x72\x6F\x6D\x69\x73\x65","\x6D\x75\x73\x74\x61\x63\x68\x65","\x54\x72\x69\x67\x67\x65\x72\x20\x55\x52\x4C\x20\x46\x6F\x72\x77\x61\x72\x64\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x73\x65\x6E\x64\x52\x65\x71\x75\x65\x73\x74","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x47\x45\x54","\x65\x76\x74","\x63\x68\x61\x6E\x67\x65\x64","\x5B\x55\x52\x4C\x20\x46\x6F\x72\x77\x61\x72\x64\x5D\x20\x45\x78\x65\x63\x75\x74\x69\x6E\x67\x20\x6D\x65\x74\x68\x6F\x64","\x64\x61\x74\x61\x31","\x66\x6F\x72\x20\x63\x68\x61\x6E\x6E\x65\x6C","\x64\x61\x74\x61\x32","\x72\x65\x6E\x64\x65\x72","\x50\x4F\x53\x54","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x5B\x55\x52\x4C\x20\x46\x6F\x72\x77\x61\x72\x64\x5D\x20\x55\x72\x6C\x20\x72\x65\x71\x75\x65\x73\x74\x65\x64","\x69\x64","\x63\x72\x65\x61\x74\x65\x64\x41\x74","\x75\x70\x64\x61\x74\x65\x64\x41\x74","\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x75\x72\x6C\x46\x6F\x72\x77\x61\x72\x64","\x65\x76\x65\x6E\x74\x43\x68\x61\x6E\x6E\x65\x6C","\x75\x72\x6C","\x5B\x55\x52\x4C\x20\x46\x6F\x72\x77\x61\x72\x64\x5D\x20\x45\x72\x72\x6F\x72\x20\x77\x72\x69\x6E\x74\x69\x6E\x67\x20\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x65\x72\x72\x6F\x72","\x5B\x55\x52\x4C\x20\x46\x6F\x72\x77\x61\x72\x64\x5D\x20\x4D\x65\x73\x73\x61\x67\x65","\x6D\x65\x73\x73\x61\x67\x65","\x4E\x6F\x20\x61\x76\x61\x69\x6C\x61\x62\x6C\x65\x20\x6D\x65\x73\x73\x61\x67\x65","\x5B\x55\x52\x4C\x20\x46\x6F\x72\x77\x61\x72\x64\x5D\x20\x53\x74\x61\x63\x6B","\x73\x74\x61\x63\x6B","\x63\x61\x74\x63\x68","\x5B\x55\x52\x4C\x20\x46\x6F\x72\x77\x61\x72\x64\x5D\x20\x45\x72\x72\x6F\x72\x20\x75\x70\x64\x61\x74\x69\x6E\x67\x20\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x65\x78\x69\x74\x53\x74\x61\x74\x75\x73","\x75\x70\x64\x61\x74\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65\x73","\x66\x69\x6E\x61\x6C\x6C\x79","\x5B\x55\x52\x4C\x20\x46\x6F\x72\x77\x61\x72\x64\x5D\x20\x52\x65\x71\x75\x65\x73\x74\x20\x66\x61\x69\x6C\x65\x64\x21","\x5B\x55\x52\x4C\x20\x46\x6F\x72\x77\x61\x72\x64\x5D\x20\x45\x72\x72\x6F\x72","\x66\x61\x69\x6C\x65\x64","\x5B\x55\x52\x4C\x20\x46\x6F\x72\x77\x61\x72\x64\x5D\x20\x52\x65\x71\x75\x65\x73\x74\x20\x65\x78\x69\x74\x20\x77\x69\x74\x68\x20\x73\x75\x63\x63\x65\x73\x73\x21","\x5B\x55\x52\x4C\x20\x46\x6F\x72\x77\x61\x72\x64\x5D\x20\x52\x65\x73\x70\x6F\x6E\x73\x65","\x73\x75\x63\x63\x65\x73\x73","\x74\x68\x65\x6E","\x63\x72\x65\x61\x74\x65","\x65\x78\x70\x6F\x72\x74\x73"];var _=require(_0x8009[0]);var rp=require(_0x8009[1]);var Mustache=require(_0x8009[2]);function UrlForward(){console[_0x8009[4]](_0x8009[3])}UrlForward[_0x8009[6]][_0x8009[5]]= function(_0x6761x5,_0x6761x6,_0x6761x7,_0x6761x8){switch(_0x6761x7[_0x8009[11]]){case _0x8009[7]:;case _0x8009[15]:delete _0x6761x8[_0x8009[8]];delete _0x6761x8[_0x8009[9]];console[_0x8009[4]](_0x8009[10],_0x6761x7[_0x8009[11]],_0x8009[12],_0x6761x6);httpRequest(_0x6761x5,_0x6761x6,_0x6761x7[_0x8009[11]],Mustache[_0x8009[14]](_0x6761x7[_0x8009[13]],_0x6761x8));break;default:}};function httpRequest(_0x6761x5,_0x6761x6,_0x6761xa,_0x6761xb){var _0x6761xc=require(_0x8009[17])[_0x8009[16]];var _0x6761xd={method:_0x6761xa,uri:_0x6761xb,body:_0x6761x5,json:true};console[_0x8009[4]](_0x8009[18],_0x6761xb);delete _0x6761x5[_0x8009[19]];delete _0x6761x5[_0x8009[20]];delete _0x6761x5[_0x8009[21]];_0x6761x5[_0x8009[22]]= _0x8009[23];_0x6761x5[_0x8009[24]]= _0x6761x6;_0x6761x5[_0x8009[25]]= _0x6761xb;return _0x6761xc[_0x8009[45]](_0x6761x5)[_0x8009[44]](function(_0x6761xf){return rp(_0x6761xd)[_0x8009[44]](function(_0x6761x10){console[_0x8009[4]](_0x8009[41]);console[_0x8009[4]](_0x8009[42],_0x6761x10);_0x6761x5[_0x8009[35]]= _0x8009[43]})[_0x8009[33]](function(_0x6761xe){console[_0x8009[27]](_0x8009[38]);console[_0x8009[27]](_0x8009[39],_0x6761xe);_0x6761x5[_0x8009[35]]= _0x8009[40]})[_0x8009[37]](function(){return _0x6761xf[_0x8009[36]]({exitStatus:_0x6761x5[_0x8009[35]]})[_0x8009[33]](function(_0x6761xe){console[_0x8009[27]](_0x8009[34]);console[_0x8009[27]](_0x8009[28],_0x6761xe[_0x8009[29]]|| _0x8009[30]);console[_0x8009[27]](_0x8009[31],_0x6761xe[_0x8009[32]])})})})[_0x8009[33]](function(_0x6761xe){console[_0x8009[27]](_0x8009[26]);console[_0x8009[27]](_0x8009[28],_0x6761xe[_0x8009[29]]|| _0x8009[30]);console[_0x8009[27]](_0x8009[31],_0x6761xe[_0x8009[32]])})}module[_0x8009[46]]= UrlForward \ No newline at end of file +var _ = require('lodash'); +var rp = require('request-promise'); +var Mustache = require('mustache'); + +function UrlForward() { + console.log('Trigger URL Forward Initialization...'); +} + +UrlForward.prototype.sendRequest = function(doc, channel, action, variables) { + switch (action.data1) { + case 'GET': + case 'POST': + delete variables.evt; + delete variables.changed; + console.log('[URL Forward] Executing method', action.data1, 'for channel', channel); + httpRequest(doc, channel, action.data1, Mustache.render(action.data2, variables)); + break; + default: + } +} + +function httpRequest(doc, channel, method, uri) { + var ReportIntegration = require('../../models').ReportIntegration; + var options = { + method: method, + uri: uri, + body: doc, + json: true // Automatically stringifies the body to JSON + }; + + console.log('[URL Forward] Url requested', uri); + + delete doc.id; + delete doc.createdAt; + delete doc.updatedAt; + doc.integration = 'urlForward'; + doc.eventChannel = channel; + doc.url = uri; + + return ReportIntegration + .create(doc) + .then(function(reportIntEntry) { + return rp(options) + .then(function(parsedBody) { + console.log('[URL Forward] Request exit with success!'); + console.log('[URL Forward] Response', parsedBody); + doc.exitStatus = "success"; + }) + .catch(function(err) { + console.error('[URL Forward] Request failed!'); + console.error('[URL Forward] Error', err); + doc.exitStatus = "failed"; + }) + .finally(function() { + return reportIntEntry + .updateAttributes({ + exitStatus: doc.exitStatus + }) + .catch(function(err) { + console.error('[URL Forward] Error updating ReportIntegration'); + console.error('[URL Forward] Message', err.message || 'No available message'); + console.error('[URL Forward] Stack', err.stack); + }); + }); + }) + .catch(function(err) { + console.error('[URL Forward] Error wrinting ReportIntegration'); + console.error('[URL Forward] Message', err.message || 'No available message'); + console.error('[URL Forward] Stack', err.stack); + }); +} + + + +module.exports = UrlForward; diff --git a/server/config/triggers/util.js b/server/config/triggers/util.js index ccebb5c..1bff931 100644 --- a/server/config/triggers/util.js +++ b/server/config/triggers/util.js @@ -1 +1,118 @@ -var _0xcdc0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x54\x72\x69\x67\x67\x65\x72\x20\x55\x74\x69\x6C\x73\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x67\x65\x74\x41\x63\x74\x69\x6F\x6E\x73\x42\x79\x54\x72\x69\x67\x67\x65\x72\x73","\x70\x72\x6F\x74\x6F\x74\x79\x70\x65","\x64\x61\x74\x61\x76\x61\x6C\x75\x65\x73","\x66\x72\x6F\x6D","\x3B","\x73\x70\x6C\x69\x74","\x63\x63","\x74\x6F","\x73\x74\x61\x74\x75\x73","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x41\x6C\x6C","\x41\x6E\x79","\x6C\x65\x6E\x67\x74\x68","\x72\x65\x64\x75\x63\x65","\x63\x6F\x6E\x63\x61\x74","\x6A\x6F\x69\x6E","\x66\x69\x65\x6C\x64","\x76\x61\x6C\x75\x65","\x65\x71\x75\x61\x6C\x73","\x6E\x6F\x74\x5F\x65\x71\x75\x61\x6C\x73","\x69\x73\x41\x72\x72\x61\x79","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x63\x6F\x6E\x74\x61\x69\x6E\x73","\x6E\x6F\x74\x5F\x63\x6F\x6E\x74\x61\x69\x6E\x73","\x67\x72\x65\x61\x74\x65\x72\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x6C\x65\x73\x73\x5F\x6F\x72\x5F\x65\x71\x75\x61\x6C","\x67\x72\x65\x61\x74\x65\x72","\x6C\x65\x73\x73","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x65\x78\x70\x6F\x72\x74\x73"];_0xcdc0[0];var _=require(_0xcdc0[1]);function Util(){console[_0xcdc0[3]](_0xcdc0[2])}Util[_0xcdc0[5]][_0xcdc0[4]]= function(_0xdef4x3,_0xdef4x4){var _0xdef4x5=[];_0xdef4x3= _0xdef4x3[_0xcdc0[6]]|| _0xdef4x3;_0xdef4x3[_0xcdc0[7]]= _0xdef4x3[_0xcdc0[7]]?_0xdef4x3[_0xcdc0[7]][_0xcdc0[9]](_0xcdc0[8]):[];_0xdef4x3[_0xcdc0[10]]= _0xdef4x3[_0xcdc0[10]]?_0xdef4x3[_0xcdc0[10]][_0xcdc0[9]](_0xcdc0[8]):[];_0xdef4x3[_0xcdc0[11]]= _0xdef4x3[_0xcdc0[11]]?_0xdef4x3[_0xcdc0[11]][_0xcdc0[9]](_0xcdc0[8]):[];_0xdef4x4[_0xcdc0[14]](function(_0xdef4x6){if(_0xdef4x6[_0xcdc0[12]]){var _0xdef4x7=[];var _0xdef4x8=[];_0xdef4x6[_0xcdc0[15]][_0xcdc0[14]](function(_0xdef4x9){_0xdef4x7[_0xcdc0[13]](checkCondition(_0xdef4x9|| _0xdef4x9,_0xdef4x3))});_0xdef4x6[_0xcdc0[16]][_0xcdc0[14]](function(_0xdef4x9){_0xdef4x8[_0xcdc0[13]](checkCondition(_0xdef4x9|| _0xdef4x9,_0xdef4x3))});var _0xdef4xa=[],_0xdef4xb=[];_0xdef4xa[_0xcdc0[13]](_[_0xcdc0[18]](_0xdef4x7[_0xcdc0[17]]?_0xdef4x7:[true],function(_0xdef4xc,_0xdef4xd){return _0xdef4xc&& _0xdef4xd}));_0xdef4xb[_0xcdc0[13]](_[_0xcdc0[18]](_0xdef4x8[_0xcdc0[17]]?_0xdef4x8:[true],function(_0xdef4xc,_0xdef4xd){return _0xdef4xc|| _0xdef4xd}));var _0xdef4xe=_0xdef4xa[_0xcdc0[19]](_0xdef4xb);var _0xdef4xf=_[_0xcdc0[18]](_0xdef4xe[_0xcdc0[17]]?_0xdef4xe:[true],function(_0xdef4xc,_0xdef4xd){return _0xdef4xc&& _0xdef4xd});if(_0xdef4xf){_0xdef4x5= _0xdef4x5[_0xcdc0[19]](_0xdef4x6.Actions)}}});_0xdef4x3[_0xcdc0[7]]= _0xdef4x3[_0xcdc0[7]][_0xcdc0[20]](_0xcdc0[8]);_0xdef4x3[_0xcdc0[10]]= _0xdef4x3[_0xcdc0[10]][_0xcdc0[20]](_0xcdc0[8]);_0xdef4x3[_0xcdc0[11]]= _0xdef4x3[_0xcdc0[11]][_0xcdc0[20]](_0xcdc0[8]);return _0xdef4x5};function checkCondition(_0xdef4x9,_0xdef4x3){var _0xdef4x11=false;var _0xdef4x12=0;if(_0xdef4x3[_0xdef4x9[_0xcdc0[21]]]){switch(_0xdef4x9[_0xcdc0[33]]){case _0xcdc0[23]:_0xdef4x11= (_0xdef4x3[_0xdef4x9[_0xcdc0[21]]]== _0xdef4x9[_0xcdc0[22]]);break;case _0xcdc0[24]:_0xdef4x11= (_0xdef4x3[_0xdef4x9[_0xcdc0[21]]]!= _0xdef4x9[_0xcdc0[22]]);break;case _0xcdc0[27]:_0xdef4x11= false;if(_[_0xcdc0[25]](_0xdef4x3[_0xdef4x9[_0xcdc0[21]]])){for(_0xdef4x12= 0;_0xdef4x12< _0xdef4x3[_0xdef4x9[_0xcdc0[21]]][_0xcdc0[17]];_0xdef4x12++){if(_0xdef4x3[_0xdef4x9[_0xcdc0[21]]][_0xdef4x12][_0xcdc0[26]](_0xdef4x9[_0xcdc0[22]])){_0xdef4x11= true;break}}}else {_0xdef4x11= _0xdef4x3[_0xdef4x9[_0xcdc0[21]]][_0xcdc0[26]](_0xdef4x9[_0xcdc0[22]])};break;case _0xcdc0[28]:_0xdef4x11= true;if(_[_0xcdc0[25]](_0xdef4x3[_0xdef4x9[_0xcdc0[21]]])){for(_0xdef4x12= 0;_0xdef4x12< _0xdef4x3[_0xdef4x9[_0xcdc0[21]]][_0xcdc0[17]];_0xdef4x12++){if(_0xdef4x3[_0xdef4x9[_0xcdc0[21]]][_0xdef4x12][_0xcdc0[26]](_0xdef4x9[_0xcdc0[22]])){_0xdef4x11= false;break}}}else {_0xdef4x11= !(_0xdef4x3[_0xdef4x9[_0xcdc0[21]]][_0xcdc0[26]](_0xdef4x9[_0xcdc0[22]]))};break;case _0xcdc0[29]:_0xdef4x11= (_0xdef4x3[_0xdef4x9[_0xcdc0[21]]]>= Number(_0xdef4x9[_0xcdc0[22]]));break;case _0xcdc0[30]:_0xdef4x11= (_0xdef4x3[_0xdef4x9[_0xcdc0[21]]]<= Number(_0xdef4x9[_0xcdc0[22]]));break;case _0xcdc0[31]:_0xdef4x11= (_0xdef4x3[_0xdef4x9[_0xcdc0[21]]]> Number(_0xdef4x9[_0xcdc0[22]]));break;case _0xcdc0[32]:_0xdef4x11= (_0xdef4x3[_0xdef4x9[_0xcdc0[21]]]< Number(_0xdef4x9[_0xcdc0[22]]));break;default:}};return _0xdef4x11}module[_0xcdc0[34]]= Util \ No newline at end of file +'use strict'; + +var _ = require('lodash'); + +function Util() { + console.log('Trigger Utils Initialization...'); +} + +Util.prototype.getActionsByTriggers = function(doc, triggers) { + var actions = []; + doc = doc.datavalues || doc; //in case I forgot something + doc.from = doc.from ? doc.from.split(';') : []; + doc.cc = doc.cc ? doc.cc.split(';') : []; + doc.to = doc.to ? doc.to.split(';') : []; + triggers.forEach(function(trigger) { + if (trigger.status) { + var All = []; + var Any = []; + trigger.All.forEach(function(condition) { + All.push(checkCondition(condition || condition, doc)); + }); + trigger.Any.forEach(function(condition) { + Any.push(checkCondition(condition || condition, doc)); + }); + + var allResult = [], + anyResult = []; + allResult.push(_.reduce(All.length ? All : [true], function(total, n) { + return total && n; + })); + anyResult.push(_.reduce(Any.length ? Any : [true], function(total, n) { + return total || n; + })); + var lastResults = allResult.concat(anyResult); + var finalResult = _.reduce(lastResults.length ? lastResults : [true], function(total, n) { + return total && n; + }) + // console.log('final result is', finalResult); + + if (finalResult) { + //push rules into array to return + actions = actions.concat(trigger.Actions); + } + } + }); + doc.from = doc.from.join(';'); + doc.cc = doc.cc.join(';'); + doc.to = doc.to.join(';'); + //return actions array + return actions; +} + +function checkCondition(condition, doc) { + + // console.log('CONDITION', condition); + // console.log('DOC FIELD', doc[condition.field]); + // console.log('trigger value ', trigger[rule.field.value]); + // console.log('rule data ', rule.data); + var result = false; + var i = 0; + + if (doc[condition.field]) { + switch (condition.operator) { + case 'equals': + result = (doc[condition.field] == condition.value); + break; + case 'not_equals': + result = (doc[condition.field] != condition.value); + break; + case 'contains': + result = false; + + if (_.isArray(doc[condition.field])) { + for (i = 0; i < doc[condition.field].length; i++) { + if (doc[condition.field][i].includes(condition.value)) { + result = true; + break; + } + } + } else { + result = doc[condition.field].includes(condition.value); + } + + break; + case 'not_contains': + result = true; + + if (_.isArray(doc[condition.field])) { + for (i = 0; i < doc[condition.field].length; i++) { + if (doc[condition.field][i].includes(condition.value)) { + result = false; + break; + } + } + } else { + result = !(doc[condition.field].includes(condition.value)); + } + + break; + case 'greater_or_equal': + result = (doc[condition.field] >= Number(condition.value)); + break; + case 'less_or_equal': + result = (doc[condition.field] <= Number(condition.value)); + break; + case 'greater': + result = (doc[condition.field] > Number(condition.value)); + break; + case 'less': + result = (doc[condition.field] < Number(condition.value)); + break; + default: + } + } + return result; +} + +module.exports = Util; diff --git a/server/config/triggers/voice.js b/server/config/triggers/voice.js index b8a8290..2465c50 100644 --- a/server/config/triggers/voice.js +++ b/server/config/triggers/voice.js @@ -1 +1,7 @@ -var _0x9e36=["\x6C\x6F\x64\x61\x73\x68","\x54\x72\x69\x67\x67\x65\x72\x20\x56\x6F\x69\x63\x65\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x65\x78\x70\x6F\x72\x74\x73"];var _=require(_0x9e36[0]);function Voice(){console[_0x9e36[2]](_0x9e36[1])}module[_0x9e36[3]]= Voice \ No newline at end of file +var _ = require('lodash'); + +function Voice() { + console.log('Trigger Voice Initialization...'); +} + +module.exports = Voice; diff --git a/server/config/util/error.js b/server/config/util/error.js index 70c36bb..e265f76 100644 --- a/server/config/util/error.js +++ b/server/config/util/error.js @@ -1 +1,24 @@ -var _0xbacf=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x75\x74\x69\x6C","\x65\x78\x70\x6F\x72\x74\x73","\x70\x61\x74\x68","\x70\x75\x73\x68","\x66\x6F\x72\x45\x61\x63\x68","\x65\x72\x72\x6F\x72\x73","\x20\x6D\x75\x73\x74\x20\x62\x65\x20\x75\x6E\x69\x71\x75\x65","\x6D\x65\x73\x73\x61\x67\x65","\x6A\x6F\x69\x6E","\x73\x65\x6E\x64","\x73\x74\x61\x74\x75\x73","\x49\x6D\x70\x6F\x73\x73\x69\x62\x6C\x65\x20\x74\x6F\x20\x72\x65\x6D\x6F\x76\x65\x20\x25\x73\x20\x25\x73\x20\x62\x65\x63\x61\x75\x73\x65\x20\x6F\x66\x20\x61\x6E\x20\x65\x78\x69\x73\x74\x69\x6E\x67\x20\x61\x73\x73\x6F\x63\x69\x61\x74\x69\x6F\x6E","\x66\x6F\x72\x6D\x61\x74"];_0xbacf[0];var util=require(_0xbacf[1]);module[_0xbacf[2]]= {handleUniqueConstraintError:function(_0x8d37x2,_0x8d37x3){var _0x8d37x4=[];_0x8d37x3[_0xbacf[6]][_0xbacf[5]](function(_0x8d37x5){switch(_0x8d37x5[_0xbacf[3]]){default:_0x8d37x4[_0xbacf[4]](_0x8d37x5[_0xbacf[3]])}});_0x8d37x4[_0xbacf[4]](_0xbacf[7]);_0x8d37x3[_0xbacf[8]]= _0x8d37x4[_0xbacf[9]]();return _0x8d37x2[_0xbacf[11]](500)[_0xbacf[10]](_0x8d37x3)},handleForeignKeyConstraintError:function(_0x8d37x2,_0x8d37x6,_0x8d37x7,_0x8d37x3){_0x8d37x3[_0xbacf[8]]= util[_0xbacf[13]](_0xbacf[12],_0x8d37x6,_0x8d37x7);return _0x8d37x2[_0xbacf[11]](500)[_0xbacf[10]](_0x8d37x3)}} \ No newline at end of file +'use strict'; + +var util = require('util'); + +module.exports = { + handleUniqueConstraintError: function(res, err) { + var paths = []; + + err.errors.forEach(function(error) { + switch (error.path) { + default: paths.push(error.path); + } + }); + + paths.push(' must be unique'); + err.message = paths.join(); + + return res.status(500).send(err); + }, + handleForeignKeyConstraintError: function(res, app, name, err) { + err.message = util.format('Impossible to remove %s %s because of an existing association', app, name); + return res.status(500).send(err); + } +}; diff --git a/server/config/util/index.js b/server/config/util/index.js index 48c2e5d..ae792cd 100644 --- a/server/config/util/index.js +++ b/server/config/util/index.js @@ -1 +1,784 @@ -var _0x2903=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x6D\x6F\x6D\x65\x6E\x74","\x72\x65\x71\x75\x65\x73\x74\x2D\x70\x72\x6F\x6D\x69\x73\x65","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x46\x61\x78\x51\x75\x65\x75\x65","\x53\x6D\x73\x51\x75\x65\x75\x65","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65","\x41\x63\x74\x69\x6F\x6E","\x2C","\x73\x70\x6C\x69\x74","\x2A","\x2D","\x74\x5F\x66\x72\x6F\x6D","\x48\x48\x3A\x6D\x6D","\x74\x5F\x74\x6F","\x77\x64\x5F\x66\x72\x6F\x6D","\x77\x64\x5F\x74\x6F","\x6D\x64\x5F\x66\x72\x6F\x6D","\x6D\x64\x5F\x74\x6F","\x6D\x5F\x66\x72\x6F\x6D","\x6D\x5F\x74\x6F","\x66\x6F\x72\x45\x61\x63\x68","\x66\x6F\x72\x6D\x61\x74","\x45","\x44","\x4D","\x70\x75\x73\x68","\x69\x73\x41\x66\x74\x65\x72","\x5B\x5D","\x69\x73\x42\x65\x74\x77\x65\x65\x6E","\x66\x69\x6C\x74\x65\x72","\x69\x6E\x64\x65\x78\x4F\x66","\x54\x69\x6D\x65\x20\x69\x73\x20","\x2C\x20\x57\x65\x65\x6B\x44\x61\x79\x20\x69\x73\x20","\x2C\x20\x4D\x6F\x6E\x74\x68\x44\x61\x79\x20\x69\x73\x20","\x2C\x20\x4D\x6F\x6E\x74\x68\x20\x69\x73\x20","\x6C\x6F\x67","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D","\x69\x73\x56\x61\x6C\x69\x64","\x64\x61\x79","\x73\x74\x61\x72\x74\x4F\x66","\x64\x61\x79\x53\x74\x61\x72\x74","\x65\x6E\x64\x4F\x66","\x64\x61\x79\x45\x6E\x64","\x5F\x75\x69\x46\x72\x6F\x6D","\x69\x6E\x63\x6C\x75\x64\x65\x73","","\x72\x65\x70\x6C\x61\x63\x65","\x5F\x75\x69\x54\x6F","\x24\x61\x6E\x64","\x77\x68\x65\x72\x65","\x6F\x66\x66\x73\x65\x74","\x6C\x69\x6D\x69\x74","\x6F\x72\x64\x65\x72","\x74\x79\x70\x65","\x70\x61\x72\x65\x6E\x74","\x25","\x6D\x65\x72\x67\x65","\x66\x69\x6E\x64\x41\x6E\x64\x43\x6F\x75\x6E\x74\x41\x6C\x6C","\x74\x68\x65\x6E","\x6E\x61\x6D\x65","\x6D\x61\x70","\x67\x65\x74\x50\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73","\x64\x65\x66\x61\x75\x6C\x74","\x73\x63\x6F\x70\x65","\x69\x64","\x67\x65\x74\x50\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73","\x67\x65\x74\x50\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73","\x67\x65\x74\x50\x53\x6D\x73\x51\x75\x65\x75\x65\x73","\x67\x65\x74\x50\x46\x61\x78\x51\x75\x65\x75\x65\x73","\x67\x65\x74\x50\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x51\x75\x65\x75\x65\x73","\x61\x67\x65\x6E\x74","\x63\x68\x65\x63\x6B\x50\x61\x75\x73\x65\x53\x74\x61\x74\x75\x73","\x63\x68\x65\x63\x6B\x51\x75\x65\x75\x65\x53\x74\x61\x74\x75\x73","\x63\x68\x65\x63\x6B\x4F\x6E\x6C\x69\x6E\x65\x53\x74\x61\x74\x75\x73","\x63\x68\x65\x63\x6B\x53\x69\x70\x53\x74\x61\x74\x75\x73","\x75\x6E\x69\x6F\x6E","\x73\x75\x62\x73\x74\x72","\x2F","\x6C\x65\x6E\x67\x74\x68","\x47\x45\x54","\x50\x4F\x53\x54","\x55\x6E\x6B\x6E\x6F\x77\x6E\x20\x4D\x65\x74\x68\x6F\x64","\x41\x63\x74\x69\x6F\x6E\x20\x46\x61\x69\x6C\x65\x64","\x63\x61\x74\x63\x68","\x41\x63\x74\x69\x6F\x6E\x20\x53\x75\x63\x63\x65\x73\x73\x66\x75\x6C","\x61\x63\x74\x69\x6F\x6E","\x44\x45\x46\x41\x55\x4C\x54\x20\x50\x41\x55\x53\x45","\x6D\x65\x6D\x62\x65\x72\x69\x64","\x63\x72\x65\x61\x74\x65","\x70\x61\x75\x73\x65","\x55\x6E\x6B\x6E\x6F\x77\x6E\x20\x41\x63\x74\x69\x6F\x6E","\x65\x78\x70\x6F\x72\x74\x73","\x2E\x2F\x65\x72\x72\x6F\x72"];_0x2903[0];var _=require(_0x2903[1]);var moment=require(_0x2903[2]);var request=require(_0x2903[3]);var User=require(_0x2903[5])[_0x2903[4]];var VoiceQueue=require(_0x2903[5])[_0x2903[6]];var ChatQueue=require(_0x2903[5])[_0x2903[7]];var MailQueue=require(_0x2903[5])[_0x2903[8]];var FaxQueue=require(_0x2903[5])[_0x2903[9]];var SmsQueue=require(_0x2903[5])[_0x2903[10]];var OpenchannelQueue=require(_0x2903[5])[_0x2903[11]];var Action=require(_0x2903[5])[_0x2903[12]];var weekDaysCollection={mon:1,tue:2,wed:3,thu:4,fri:5,sat:6,sun:7};var monthsCollection={jan:1,feb:2,mar:3,apr:4,may:5,jun:6,jul:7,aug:8,sep:9,oct:10,nov:11,dec:12};function splitInterval(_0x4a39xf){var _0x4a39x10={};var _0x4a39x11=_0x4a39xf[_0x2903[14]](_0x2903[13]);var _0x4a39x12;_0x4a39x11[_0x2903[26]](function(_0x4a39x13,_0x4a39x14){switch(_0x4a39x14){case 0:if(_0x4a39x13!== _0x2903[15]){_0x4a39x12= _0x4a39x13[_0x2903[14]](_0x2903[16]);_0x4a39x10[_0x2903[17]]= moment(_0x4a39x12[0],_0x2903[18]);_0x4a39x10[_0x2903[19]]= moment(_0x4a39x12[1],_0x2903[18])}else {_0x4a39x10[_0x2903[17]]= null;_0x4a39x10[_0x2903[19]]= null};break;case 1:if(_0x4a39x13!== _0x2903[15]){_0x4a39x12= _0x4a39x13[_0x2903[14]](_0x2903[16]);_0x4a39x10[_0x2903[20]]= Number(weekDaysCollection[_0x4a39x12[0]]);_0x4a39x10[_0x2903[21]]= _0x4a39x12[1]?Number(weekDaysCollection[_0x4a39x12[1]]):null}else {_0x4a39x10[_0x2903[20]]= null;_0x4a39x10[_0x2903[21]]= null};break;case 2:if(_0x4a39x13!== _0x2903[15]){_0x4a39x12= _0x4a39x13[_0x2903[14]](_0x2903[16]);_0x4a39x10[_0x2903[22]]= Number(_0x4a39x12[0]);_0x4a39x10[_0x2903[23]]= _0x4a39x12[1]?Number(_0x4a39x12[1]):null}else {_0x4a39x10[_0x2903[22]]= null;_0x4a39x10[_0x2903[23]]= null};break;case 3:if(_0x4a39x13!== _0x2903[15]){_0x4a39x12= _0x4a39x13[_0x2903[14]](_0x2903[16]);_0x4a39x10[_0x2903[24]]= Number(monthsCollection[_0x4a39x12[0]]);_0x4a39x10[_0x2903[25]]= _0x4a39x12[1]?Number(monthsCollection[_0x4a39x12[1]]):null}else {_0x4a39x10[_0x2903[24]]= null;_0x4a39x10[_0x2903[25]]= null};break;default:}});return _0x4a39x10}function isIntervalValid(_0x4a39xf){var _0x4a39x16=moment()[_0x2903[27]](_0x2903[18]);var _0x4a39x17=moment()[_0x2903[27]](_0x2903[28]);var _0x4a39x18=moment()[_0x2903[27]](_0x2903[29]);var _0x4a39x19=moment()[_0x2903[27]](_0x2903[30]);var _0x4a39x1a,_0x4a39x1b,_0x4a39x1c,_0x4a39x1d;var _0x4a39x1e=[1,2,3,4,5,6,7,8,9,10,11,12];var _0x4a39x1f=[1,2,3,4,5,6,7];var _0x4a39x20=[];for(var _0x4a39x21=1;_0x4a39x21<= 31;_0x4a39x21++){_0x4a39x20[_0x2903[31]](_0x4a39x21)};if(_0x4a39xf[_0x2903[17]]&& _0x4a39xf[_0x2903[19]]){if(_0x4a39xf[_0x2903[19]][_0x2903[32]](_0x4a39xf[_0x2903[17]])){_0x4a39x1a= moment(_0x4a39x16,_0x2903[18])[_0x2903[34]](_0x4a39xf[_0x2903[17]],_0x4a39xf[_0x2903[19]],null,_0x2903[33])}else {_0x4a39x1a= !moment(_0x4a39x16,_0x2903[18])[_0x2903[34]](_0x4a39xf[_0x2903[19]],_0x4a39xf[_0x2903[17]],null,_0x2903[33])}}else {_0x4a39x1a= true};if(_0x4a39xf[_0x2903[20]]){if(_0x4a39xf[_0x2903[21]]&& _0x4a39xf[_0x2903[21]]!== _0x4a39xf[_0x2903[20]]){var _0x4a39x22=_[_0x2903[35]](_0x4a39x1f,function(_0x4a39x23){if(_0x4a39xf[_0x2903[20]]< _0x4a39xf[_0x2903[21]]){return (_0x4a39x23>= _0x4a39xf[_0x2903[20]])&& (_0x4a39x23<= _0x4a39xf[_0x2903[21]])}else {return (1<= _0x4a39x23&& _0x4a39x23<= _0x4a39xf[_0x2903[21]])|| (_0x4a39xf[_0x2903[20]]<= _0x4a39x23&& _0x4a39x23<= 7)}});_0x4a39x1b= (_0x4a39x22[_0x2903[36]](parseInt(_0x4a39x17))!== -1)?true:false}else {_0x4a39x1b= (parseInt(_0x4a39x17)=== _0x4a39xf[_0x2903[20]])?true:false}}else {_0x4a39x1b= true};if(_0x4a39xf[_0x2903[22]]){if(_0x4a39xf[_0x2903[23]]&& _0x4a39xf[_0x2903[23]]!== _0x4a39xf[_0x2903[22]]){var _0x4a39x24=_[_0x2903[35]](_0x4a39x20,function(_0x4a39x23){if(_0x4a39xf[_0x2903[22]]< _0x4a39xf[_0x2903[23]]){return (_0x4a39x23>= _0x4a39xf[_0x2903[22]])&& (_0x4a39x23<= _0x4a39xf[_0x2903[23]])}else {return (1<= _0x4a39x23&& _0x4a39x23<= _0x4a39xf[_0x2903[23]])|| (_0x4a39xf[_0x2903[22]]<= _0x4a39x23&& _0x4a39x23<= 7)}});_0x4a39x1c= (_0x4a39x24[_0x2903[36]](parseInt(_0x4a39x18))!== -1)?true:false}else {_0x4a39x1c= (parseInt(_0x4a39x18)=== _0x4a39xf[_0x2903[22]])?true:false}}else {_0x4a39x1c= true};if(_0x4a39xf[_0x2903[24]]){if(_0x4a39xf[_0x2903[25]]&& _0x4a39xf[_0x2903[25]]!== _0x4a39xf[_0x2903[24]]){var _0x4a39x25=_[_0x2903[35]](_0x4a39x1e,function(_0x4a39x23){if(_0x4a39xf[_0x2903[24]]< _0x4a39xf[_0x2903[25]]){return (_0x4a39x23>= _0x4a39xf[_0x2903[24]])&& (_0x4a39x23<= _0x4a39xf[_0x2903[25]])}else {return (1<= _0x4a39x23&& _0x4a39x23<= _0x4a39xf[_0x2903[25]])|| (_0x4a39xf[_0x2903[24]]<= _0x4a39x23&& _0x4a39x23<= 7)}});_0x4a39x1d= (_0x4a39x25[_0x2903[36]](parseInt(_0x4a39x19))!== -1)?true:false}else {_0x4a39x1d= (parseInt(_0x4a39x19)=== _0x4a39xf[_0x2903[24]])?true:false}}else {_0x4a39x1d= true};console[_0x2903[41]](_0x2903[37],_0x4a39x1a,_0x2903[38],_0x4a39x1b,_0x2903[39],_0x4a39x1c,_0x2903[40],_0x4a39x1d);return _0x4a39x1a&& _0x4a39x1b&& _0x4a39x1c&& _0x4a39x1d}var getDate=function(_0x4a39x27,_0x4a39x28){var _0x4a39x29=_0x2903[42];if(moment(_0x4a39x27,_0x4a39x29,true)[_0x2903[43]]()){return moment(_0x4a39x27)}else {switch(_0x4a39x28){case _0x2903[46]:return moment(_0x4a39x27)[_0x2903[45]](_0x2903[44]);case _0x2903[48]:return moment(_0x4a39x27)[_0x2903[47]](_0x2903[44]);default:return moment(_0x4a39x27)}}};var getQuery=function(_0x4a39x2b,_0x4a39x2c){var _0x4a39x2d={where:{}};if(_0x4a39x2b){var _0x4a39x2e,_0x4a39x2f={};for(var _0x4a39x30 in _0x4a39x2b){if(_[_0x2903[50]](_0x4a39x30,_0x2903[49])){_0x4a39x2e= _0x4a39x30[_0x2903[52]](_0x2903[49],_0x2903[51]);if(_0x4a39x2b[_0x4a39x2e+ _0x2903[53]]){_0x4a39x2d[_0x2903[55]][_0x2903[54]]= _0x4a39x2d[_0x2903[55]][_0x2903[54]]|| [];_0x4a39x2f= {};_0x4a39x2f[_0x4a39x2e]= {$gte:getDate(_0x4a39x2b[_0x4a39x30],_0x2903[46])};_0x4a39x2d[_0x2903[55]][_0x2903[54]][_0x2903[31]](_0x4a39x2f);_0x4a39x2f= {};_0x4a39x2f[_0x4a39x2e]= {$lte:getDate(_0x4a39x2b[_0x4a39x2e+ _0x2903[53]],_0x2903[48])};_0x4a39x2d[_0x2903[55]][_0x2903[54]][_0x2903[31]](_0x4a39x2f);delete _0x4a39x2b[_0x4a39x2e+ _0x2903[53]]}else {_0x4a39x2d[_0x2903[55]][_0x4a39x30[_0x2903[52]](_0x2903[49],_0x2903[51])]= {$gte:getDate(_0x4a39x2b[_0x4a39x30],_0x2903[46])}};delete _0x4a39x2b[_0x4a39x30]}else {if(_[_0x2903[50]](_0x4a39x30,_0x2903[53])){_0x4a39x2e= _0x4a39x30[_0x2903[52]](_0x2903[53],_0x2903[51]);if(_0x4a39x2b[_0x4a39x2e+ _0x2903[49]]){_0x4a39x2d[_0x2903[55]][_0x2903[54]]= _0x4a39x2d[_0x2903[55]][_0x2903[54]]|| [];_0x4a39x2f= {};_0x4a39x2f[_0x4a39x2e]= {$lte:getDate(_0x4a39x2b[_0x4a39x30],_0x2903[48])};_0x4a39x2d[_0x2903[55]][_0x2903[54]][_0x2903[31]](_0x4a39x2f);_0x4a39x2f[_0x4a39x2e]= {$gte:getDate(_0x4a39x2b[_0x4a39x2e+ _0x2903[49]],_0x2903[46])};_0x4a39x2d[_0x2903[55]][_0x2903[54]][_0x2903[31]](_0x4a39x2f);delete _0x4a39x2b[_0x4a39x2e+ _0x2903[49]]}else {_0x4a39x2d[_0x2903[55]][_0x4a39x30[_0x2903[52]](_0x2903[53],_0x2903[51])]= {$lte:getDate(_0x4a39x2b[_0x4a39x30],_0x2903[48])}};delete _0x4a39x2b[_0x4a39x30]}}};_[_0x2903[26]](_0x4a39x2b,function(_0x4a39x31,_0x4a39x30){switch(_0x4a39x30){case _0x2903[56]:;case _0x2903[57]:_0x4a39x2d[_0x4a39x30]= Number(_0x4a39x31);break;case _0x2903[58]:_0x4a39x2d[_0x4a39x30]= _0x4a39x31;break;case _0x2903[59]:;case _0x2903[60]:_0x4a39x2d[_0x2903[55]][_0x4a39x30]= _0x4a39x31;break;default:_0x4a39x2d[_0x2903[55]][_0x4a39x30]= {$like:_0x2903[61]+ _0x4a39x31+ _0x2903[61]}}})};if(_0x4a39x2c){_[_0x2903[62]](_0x4a39x2d[_0x2903[55]],_0x4a39x2c)};return _0x4a39x2d};var getVoiceQueuesIdByUser=function(_0x4a39x2b,_0x4a39x33){return function(_0x4a39x34){var _0x4a39x35=[];var _0x4a39x36=_0x4a39x34;var _0x4a39x2d=_0x4a39x2b|| {};var _0x4a39x37=_0x4a39x33|| {};return _0x4a39x36[_0x2903[67]]({attributes:[_0x2903[65]]})[_0x2903[64]](function(_0x4a39x38){_0x4a39x35= _[_0x2903[66]](_0x4a39x38,_0x2903[65])})[_0x2903[64]](function(){return VoiceQueue[_0x2903[63]](_[_0x2903[62]](getQuery(_0x4a39x2b,{name:{$in:_0x4a39x35}}),_0x4a39x37))})}};var getChatQueuesIdByUser=function(_0x4a39x2b,_0x4a39x33){return function(_0x4a39x34){var _0x4a39x35=[];var _0x4a39x36=_0x4a39x34;var _0x4a39x2d=_0x4a39x2b|| {};var _0x4a39x37=_[_0x2903[62]](_0x4a39x33|| {},{distinct:true});return _0x4a39x36[_0x2903[71]]({attributes:[_0x2903[70]]})[_0x2903[64]](function(_0x4a39x38){_0x4a39x35= _[_0x2903[66]](_0x4a39x38,_0x2903[70])})[_0x2903[64]](function(){return ChatQueue[_0x2903[69]](_0x2903[68])[_0x2903[63]](_[_0x2903[62]](getQuery(_0x4a39x2d,{id:{$in:_0x4a39x35}}),_0x4a39x37))})}};var getMailQueuesIdByUser=function(_0x4a39x2b,_0x4a39x33){return function(_0x4a39x34){var _0x4a39x35=[];var _0x4a39x36=_0x4a39x34;var _0x4a39x2d=_0x4a39x2b|| {};var _0x4a39x37=_[_0x2903[62]](_0x4a39x33|| {},{distinct:true});return _0x4a39x36[_0x2903[72]]({attributes:[_0x2903[70]]})[_0x2903[64]](function(_0x4a39x38){_0x4a39x35= _[_0x2903[66]](_0x4a39x38,_0x2903[70])})[_0x2903[64]](function(){return MailQueue[_0x2903[69]](_0x2903[68])[_0x2903[63]](_[_0x2903[62]](getQuery(_0x4a39x2d,{id:{$in:_0x4a39x35}}),_0x4a39x37))})}};var getSmsQueuesIdByUser=function(_0x4a39x2b,_0x4a39x33){return function(_0x4a39x34){var _0x4a39x35=[];var _0x4a39x36=_0x4a39x34;var _0x4a39x2d=_0x4a39x2b|| {};var _0x4a39x37=_[_0x2903[62]](_0x4a39x33|| {},{distinct:true});return _0x4a39x36[_0x2903[73]]({attributes:[_0x2903[70]]})[_0x2903[64]](function(_0x4a39x38){_0x4a39x35= _[_0x2903[66]](_0x4a39x38,_0x2903[70])})[_0x2903[64]](function(){return SmsQueue[_0x2903[69]](_0x2903[68])[_0x2903[63]](_[_0x2903[62]](getQuery(_0x4a39x2d,{id:{$in:_0x4a39x35}}),_0x4a39x37))})}};var getFaxQueuesIdByUser=function(_0x4a39x2b,_0x4a39x33){return function(_0x4a39x34){var _0x4a39x35=[];var _0x4a39x36=_0x4a39x34;var _0x4a39x2d=_0x4a39x2b|| {};var _0x4a39x37=_[_0x2903[62]](_0x4a39x33|| {},{distinct:true});return _0x4a39x36[_0x2903[74]]({attributes:[_0x2903[70]]})[_0x2903[64]](function(_0x4a39x38){_0x4a39x35= _[_0x2903[66]](_0x4a39x38,_0x2903[70])})[_0x2903[64]](function(){return FaxQueue[_0x2903[69]](_0x2903[68])[_0x2903[63]](_[_0x2903[62]](getQuery(_0x4a39x2d,{id:{$in:_0x4a39x35}}),_0x4a39x37))})}};var getOpenchannelQueuesIdByUser=function(_0x4a39x2b,_0x4a39x33){return function(_0x4a39x34){var _0x4a39x35=[];var _0x4a39x36=_0x4a39x34;var _0x4a39x2d=_0x4a39x2b|| {};var _0x4a39x37=_[_0x2903[62]](_0x4a39x33|| {},{distinct:true});return _0x4a39x36[_0x2903[75]]({attributes:[_0x2903[70]]})[_0x2903[64]](function(_0x4a39x38){_0x4a39x35= _[_0x2903[66]](_0x4a39x38,_0x2903[70])})[_0x2903[64]](function(){return OpenchannelQueue[_0x2903[69]](_0x2903[68])[_0x2903[63]](_[_0x2903[62]](getQuery(_0x4a39x2d,{id:{$in:_0x4a39x35}}),_0x4a39x37))})}};var getAgentsIdByUser=function(_0x4a39x2b){return function(_0x4a39x34){var _0x4a39x3f=[];var _0x4a39x36=_0x4a39x34;var _0x4a39x2d=_0x4a39x2b|| {};var _0x4a39x40=[],_0x4a39x41=[],_0x4a39x42=[],_0x4a39x43=[],_0x4a39x44=[],_0x4a39x45=[];return _0x4a39x36[_0x2903[67]]({attributes:[_0x2903[65]],include:[{raw:true,model:User,attributes:[_0x2903[70]]}]})[_0x2903[64]](function(_0x4a39x38){_0x4a39x40= _[_0x2903[66]](_0x4a39x38,_0x2903[65]);_0x4a39x38[_0x2903[26]](function(_0x4a39x46){_0x4a39x3f= _[_0x2903[81]](_0x4a39x3f,_[_0x2903[66]](_0x4a39x46.Users,_0x2903[70]))})})[_0x2903[64]](function(){return _0x4a39x36[_0x2903[71]]({attributes:[_0x2903[70]],include:[{raw:true,model:User,attributes:[_0x2903[70]]}]})})[_0x2903[64]](function(_0x4a39x38){_0x4a39x41= _[_0x2903[66]](_0x4a39x38,_0x2903[70]);_0x4a39x38[_0x2903[26]](function(_0x4a39x46){_0x4a39x3f= _[_0x2903[81]](_0x4a39x3f,_[_0x2903[66]](_0x4a39x46.Users,_0x2903[70]))})})[_0x2903[64]](function(){return _0x4a39x36[_0x2903[72]]({attributes:[_0x2903[70]],include:[{raw:true,model:User,attributes:[_0x2903[70]]}]})})[_0x2903[64]](function(_0x4a39x38){_0x4a39x42= _[_0x2903[66]](_0x4a39x38,_0x2903[70]);_0x4a39x38[_0x2903[26]](function(_0x4a39x46){_0x4a39x3f= _[_0x2903[81]](_0x4a39x3f,_[_0x2903[66]](_0x4a39x46.Users,_0x2903[70]))})})[_0x2903[64]](function(){return _0x4a39x36[_0x2903[74]]({attributes:[_0x2903[70]],include:[{raw:true,model:User,attributes:[_0x2903[70]]}]})})[_0x2903[64]](function(_0x4a39x38){_0x4a39x43= _[_0x2903[66]](_0x4a39x38,_0x2903[70]);_0x4a39x38[_0x2903[26]](function(_0x4a39x46){_0x4a39x3f= _[_0x2903[81]](_0x4a39x3f,_[_0x2903[66]](_0x4a39x46.Users,_0x2903[70]))})})[_0x2903[64]](function(){return _0x4a39x36[_0x2903[73]]({attributes:[_0x2903[70]],include:[{raw:true,model:User,attributes:[_0x2903[70]]}]})})[_0x2903[64]](function(_0x4a39x38){_0x4a39x45= _[_0x2903[66]](_0x4a39x38,_0x2903[70]);_0x4a39x38[_0x2903[26]](function(_0x4a39x46){_0x4a39x3f= _[_0x2903[81]](_0x4a39x3f,_[_0x2903[66]](_0x4a39x46.Users,_0x2903[70]))})})[_0x2903[64]](function(){return _0x4a39x36[_0x2903[75]]({attributes:[_0x2903[70]],include:[{raw:true,model:User,attributes:[_0x2903[70]]}]})})[_0x2903[64]](function(_0x4a39x38){_0x4a39x44= _[_0x2903[66]](_0x4a39x38,_0x2903[70]);_0x4a39x38[_0x2903[26]](function(_0x4a39x46){_0x4a39x3f= _[_0x2903[81]](_0x4a39x3f,_[_0x2903[66]](_0x4a39x46.Users,_0x2903[70]))})})[_0x2903[64]](function(){return User[_0x2903[69]](_0x2903[76],{method:[_0x2903[77],_0x4a39x2d]},{method:[_0x2903[78],_0x4a39x2d]},{method:[_0x2903[79],_0x4a39x2d]},{method:[_0x2903[80],_0x4a39x2d]})[_0x2903[63]](_[_0x2903[62]](getQuery(_0x4a39x2d,{id:{$in:_0x4a39x3f}}),{include:[{model:VoiceQueue,where:{name:{$in:_0x4a39x40}},required:false},{model:ChatQueue,where:{id:{$in:_0x4a39x41}},required:false},{model:MailQueue,where:{id:{$in:_0x4a39x42}},required:false},{model:FaxQueue,where:{id:{$in:_0x4a39x43}},required:false},{model:SmsQueue,where:{id:{$in:_0x4a39x45}},required:false},{model:OpenchannelQueue,where:{id:{$in:_0x4a39x44}},required:false}]}))})}};var stripTrailingSlash=function(_0x4a39x48){if(_0x4a39x48[_0x2903[82]](-1) === _0x2903[83]){return _0x4a39x48[_0x2903[82]](0,_0x4a39x48[_0x2903[84]]- 1)};return _0x4a39x48};var sendRequest=function(_0x4a39x4a,_0x4a39x4b,_0x4a39x4c){if(_0x4a39x4b== _0x2903[85]|| _0x4a39x4b== _0x2903[86]){var _0x4a39x4d={method:_0x4a39x4b,uri:_0x4a39x4c,body:_0x4a39x4a,json:true};return request(_0x4a39x4d)}else {console[_0x2903[41]](_0x2903[87])}};var execAction=function(_0x4a39x4f,_0x4a39x4a){switch(_0x4a39x4f[_0x2903[91]]){case _0x2903[95]:Action[_0x2903[94]]({name:_0x4a39x4f[_0x2903[91]],data4:_0x4a39x4f[_0x2903[59]]|| _0x2903[92]},{body:{name:_0x4a39x4f[_0x2903[91]],agent:_0x4a39x4a[_0x2903[93]],type:_0x4a39x4f[_0x2903[59]]|| _0x2903[92]}})[_0x2903[64]](function(){console[_0x2903[41]](_0x2903[90])})[_0x2903[89]](function(_0x4a39x50){console[_0x2903[41]](_0x2903[88],_0x4a39x50)});break;default:console[_0x2903[41]](_0x2903[96])}};module[_0x2903[97]]= {getQuery:getQuery,getVoiceQueuesIdByUser:getVoiceQueuesIdByUser,getChatQueuesIdByUser:getChatQueuesIdByUser,getMailQueuesIdByUser:getMailQueuesIdByUser,getFaxQueuesIdByUser:getFaxQueuesIdByUser,getSmsQueuesIdByUser:getSmsQueuesIdByUser,getOpenchannelQueuesIdByUser:getOpenchannelQueuesIdByUser,getAgentsIdByUser:getAgentsIdByUser,stripTrailingSlash:stripTrailingSlash,splitInterval:splitInterval,isValidInterval:isIntervalValid,sendRequest:sendRequest,execAction:execAction,errorManager:require(_0x2903[98])} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var moment = require('moment'); +var request = require('request-promise'); + +var User = require('../../models').User; +var VoiceQueue = require('../../models').VoiceQueue; +var ChatQueue = require('../../models').ChatQueue; +var MailQueue = require('../../models').MailQueue; +var FaxQueue = require('../../models').FaxQueue; +var SmsQueue = require('../../models').SmsQueue; +var OpenchannelQueue = require('../../models').OpenchannelQueue; +var Action = require('../../models').Action; + +// var checkInterval = function(interval) { +// +// var daysOfWeek = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']; +// var daysOfMonth = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]; +// var months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']; +// var i, shift; +// +// var tRange = interval.split(',')[0]; +// var dwRange = interval.split(',')[1]; +// var dmRange = interval.split(',')[2]; +// var mRange = interval.split(',')[3]; +// // TIME RANGE CHECKING +// if (tRange !== '*') { +// var time = moment().format("HH:mm"); +// var tFrom = tRange.split('-')[0]; +// var tTo = tRange.split('-')[1]; +// +// if ((time < tFrom) || (time > tTo)) { +// console.log('TRANGE KO'); +// return false; +// } +// } +// // DAYS OF WEEK RANGE CHECKING +// if (dwRange !== '*') { +// var cWeekDay = daysOfWeek[moment().day()]; +// var dwFrom = _.indexOf(daysOfWeek, dwRange.split('-')[0]); +// var dwTo = _.indexOf(daysOfWeek, dwRange.split('-')[1]); +// +// for (i = 0; i < dwFrom; i++) { +// shift = daysOfWeek.shift(); +// daysOfWeek.push(shift); +// } +// +// dwFrom = _.indexOf(daysOfWeek, dwRange.split('-')[0]); +// dwTo = _.indexOf(daysOfWeek, dwRange.split('-')[1]) + 1; +// +// daysOfWeek = daysOfWeek.slice(dwFrom, dwTo); +// +// if (!_.includes(daysOfWeek, cWeekDay)) { +// console.log('DWRANGE KO'); +// return false; +// } +// } +// // DAYS OF MONTH RANGE CHECKING +// if (dmRange !== '*') { +// var cMonthDay = moment().date(); +// var dmFrom = _.indexOf(daysOfMonth, parseInt(dmRange.split('-')[0], 10)); +// var dmTo = _.indexOf(daysOfMonth, parseInt(dmRange.split('-')[1])); +// +// for (i = 0; i < dmFrom; i++) { +// shift = daysOfMonth.shift(); +// daysOfMonth.push(shift); +// } +// +// dmFrom = _.indexOf(daysOfMonth, parseInt(dmRange.split('-')[0], 10)); +// dmTo = _.indexOf(daysOfMonth, parseInt(dmRange.split('-')[1]), 10) + 1; +// +// daysOfMonth = daysOfMonth.slice(dmFrom, dmTo); +// +// if (!_.includes(daysOfMonth, cMonthDay)) { +// console.log('DMRANGE KO'); +// return false; +// } +// } +// // MONTHS RANGE CHECKING +// if (mRange !== '*') { +// var cMonth = months[moment().month()]; +// var mFrom = _.indexOf(months, mRange.split('-')[0]); +// var mTo = _.indexOf(months, mRange.split('-')[1]); +// +// for (i = 0; i < mFrom; i++) { +// shift = months.shift(); +// months.push(shift); +// } +// +// mFrom = _.indexOf(months, mRange.split('-')[0]); +// mTo = _.indexOf(months, mRange.split('-')[1]) + 1; +// +// months = months.slice(mFrom, mTo); +// +// if (!_.includes(months, cMonth)) { +// console.log('MRANGE KO'); +// return false; +// } +// } +// +// console.log('INTERVAL OK'); +// +// return true; +// } + +// var isValidInterval = function(interval) { +// if (_.isObject(interval)) { +// for (var i = 0; i < interval.SubIntervals.length; i++) { +// if (!checkInterval(interval.SubIntervals[i].interval)) { +// return false; +// } +// } +// return true; +// } else { +// return checkInterval(interval); +// } +// } + +var weekDaysCollection = { + mon: 1, + tue: 2, + wed: 3, + thu: 4, + fri: 5, + sat: 6, + sun: 7 +}; +var monthsCollection = { + jan: 1, + feb: 2, + mar: 3, + apr: 4, + may: 5, + jun: 6, + jul: 7, + aug: 8, + sep: 9, + oct: 10, + nov: 11, + dec: 12 +}; + +function splitInterval(interval) { + var finalInterval = {}; + var splittedInterval = interval.split(','); + var intValues; + splittedInterval.forEach(function(element, index) { + switch (index) { + case 0: + if (element !== '*') { + intValues = element.split('-'); + finalInterval.t_from = moment(intValues[0], 'HH:mm'); + finalInterval.t_to = moment(intValues[1], 'HH:mm'); + } else { + finalInterval.t_from = null; + finalInterval.t_to = null; + } + break; + case 1: + if (element !== '*') { + intValues = element.split('-'); + finalInterval.wd_from = Number(weekDaysCollection[intValues[0]]); + finalInterval.wd_to = intValues[1] ? Number(weekDaysCollection[intValues[1]]) : null; + } else { + finalInterval.wd_from = null; + finalInterval.wd_to = null; + } + break; + case 2: + if (element !== '*') { + intValues = element.split('-'); + finalInterval.md_from = Number(intValues[0]); + finalInterval.md_to = intValues[1] ? Number(intValues[1]) : null; + } else { + finalInterval.md_from = null; + finalInterval.md_to = null; + } + break; + case 3: + if (element !== '*') { + intValues = element.split('-'); + finalInterval.m_from = Number(monthsCollection[intValues[0]]); + finalInterval.m_to = intValues[1] ? Number(monthsCollection[intValues[1]]) : null; + } else { + finalInterval.m_from = null; + finalInterval.m_to = null; + } + break; + default: + + } + + + }); + return finalInterval; +} + +function isIntervalValid(interval) { + var hour = moment().format("HH:mm"); + var day = moment().format("E"); + var monthDay = moment().format("D"); + var month = moment().format("M"); + // console.log('Now: Hour: ', hour, ', Day: ', day, ', MonthDay: ', monthDay, ', Month: ', month); + // console.log('Interval:'); + // console.log(' Hours:', moment(interval.t_from, "HH:mm").format('HH:mm'), ' - ', moment(interval.t_to, "HH:mm").format('HH:mm')); + // console.log(' weekday:', interval.wd_from, ' - ', interval.wd_to); + // console.log(' monthday:', interval.md_from, ' - ', interval.md_to); + // console.log(' month:', interval.m_from, ' - ', interval.m_to); + var tValid, wdValid, mdValid, mValid; + var monthsNumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; + var weekDaysNumbers = [1, 2, 3, 4, 5, 6, 7]; + var daysOfMonthsNumbers = []; + for (var i = 1; i <= 31; i++) { + daysOfMonthsNumbers.push(i); + } + // console.log(interval); + if (interval.t_from && interval.t_to) { + if (interval.t_to.isAfter(interval.t_from)) { + tValid = moment(hour, "HH:mm").isBetween(interval.t_from, interval.t_to, null, '[]'); + } else { + tValid = !moment(hour, "HH:mm").isBetween(interval.t_to, interval.t_from, null, '[]'); + } + } else { + tValid = true; + } + if (interval.wd_from) { + if (interval.wd_to && interval.wd_to !== interval.wd_from) { + var validWeekdays = _.filter(weekDaysNumbers, function(elem) { + if (interval.wd_from < interval.wd_to) { + return (elem >= interval.wd_from) && (elem <= interval.wd_to); + } else { + return (1 <= elem && elem <= interval.wd_to) || (interval.wd_from <= elem && elem <= 7); + } + }); + // console.log('valid weekdays', validWeekdays); + wdValid = (validWeekdays.indexOf(parseInt(day)) !== -1) ? true : false; + } else { + wdValid = (parseInt(day) === interval.wd_from) ? true : false; + } + } else { + wdValid = true; + } + if (interval.md_from) { + if (interval.md_to && interval.md_to !== interval.md_from) { + var validMonthsdays = _.filter(daysOfMonthsNumbers, function(elem) { + if (interval.md_from < interval.md_to) { + return (elem >= interval.md_from) && (elem <= interval.md_to); + } else { + return (1 <= elem && elem <= interval.md_to) || (interval.md_from <= elem && elem <= 7); + } + }); + // console.log('valid monthsdays', validMonthsdays); + mdValid = (validMonthsdays.indexOf(parseInt(monthDay)) !== -1) ? true : false; + } else { + mdValid = (parseInt(monthDay) === interval.md_from) ? true : false; + } + } else { + mdValid = true; + } + if (interval.m_from) { + if (interval.m_to && interval.m_to !== interval.m_from) { + var validMonths = _.filter(monthsNumbers, function(elem) { + if (interval.m_from < interval.m_to) { + return (elem >= interval.m_from) && (elem <= interval.m_to); + } else { + return (1 <= elem && elem <= interval.m_to) || (interval.m_from <= elem && elem <= 7); + } + }); + // console.log('valid months', validMonths); + mValid = (validMonths.indexOf(parseInt(month)) !== -1) ? true : false; + } else { + mValid = (parseInt(month) === interval.m_from) ? true : false; + } + } else { + mValid = true; + } + console.log('Time is ', tValid, ', WeekDay is ', wdValid, ', MonthDay is ', mdValid, ', Month is ', mValid); + return tValid && wdValid && mdValid && mValid; +} + +var getDate = function(dateString, when) { + var dateTimeFormat = 'YYYY-MM-DD HH:mm'; + if (moment(dateString, dateTimeFormat, true).isValid()) { + return moment(dateString); + } else { + switch (when) { + case 'dayStart': + return moment(dateString).startOf('day'); + case 'dayEnd': + return moment(dateString).endOf('day'); + default: + return moment(dateString); + } + } +} + +var getQuery = function(query, extraWhere) { + var _query = { + where: {} + }; + + if (query) { + var realKey, condition = {}; + for (var key in query) { //DO NOT change with lodash forEach, or the properties will not be removed from the query object! + if (_.includes(key, '_uiFrom')) { + realKey = key.replace('_uiFrom', ''); + if (query[realKey + '_uiTo']) { + _query.where.$and = _query.where.$and || []; + condition = {}; + condition[realKey] = { + $gte: getDate(query[key], 'dayStart') + }; + _query.where.$and.push(condition); + condition = {}; + condition[realKey] = { + $lte: getDate(query[realKey + '_uiTo'], 'dayEnd') + }; + _query.where.$and.push(condition); + delete query[realKey + '_uiTo']; + } else { + _query.where[key.replace('_uiFrom', '')] = { + $gte: getDate(query[key], 'dayStart') + }; + } + delete query[key]; + } else if (_.includes(key, '_uiTo')) { + realKey = key.replace('_uiTo', ''); + if (query[realKey + '_uiFrom']) { + _query.where.$and = _query.where.$and || []; + condition = {}; + condition[realKey] = { + $lte: getDate(query[key], 'dayEnd') + }; + _query.where.$and.push(condition); + condition[realKey] = { + $gte: getDate(query[realKey + '_uiFrom'], 'dayStart') + }; + _query.where.$and.push(condition); + delete query[realKey + '_uiFrom']; + } else { + _query.where[key.replace('_uiTo', '')] = { + $lte: getDate(query[key], 'dayEnd') + }; + } + delete query[key]; + } + } + + _.forEach(query, function(value, key) { + switch (key) { + case 'offset': + case 'limit': + _query[key] = Number(value); + break; + case 'order': + _query[key] = value; + break; + case 'type': + case 'parent': + _query.where[key] = value; + break; + default: + _query.where[key] = { + $like: '%' + value + '%' + }; + } + }); + } + + + + if (extraWhere) { + _.merge(_query.where, extraWhere); + } + + return _query; +} + +var getVoiceQueuesIdByUser = function(query, extraQuery) { //differently from the extraWhere, this will be merged with all the query options, not just the where. Useful for inclusions and other query options + return function(user) { + var _queues = []; + var _user = user; + var _query = query || {}; + var _extraQuery = extraQuery || {}; + + return _user + .getPVoiceQueues({ + attributes: ['name'] + }) + .then(function(queues) { + _queues = _.map(queues, 'name'); + }) + .then(function() { + return VoiceQueue + .findAndCountAll(_.merge(getQuery(query, { + name: { + $in: _queues + } + }), _extraQuery)); + }); + }; +} + +var getChatQueuesIdByUser = function(query, extraQuery) { + return function(user) { + var _queues = []; + var _user = user; + var _query = query || {}; + var _extraQuery = _.merge(extraQuery || {}, { + distinct: true + }); + + return _user + .getPChatQueues({ + attributes: ['id'] + }) + .then(function(queues) { + _queues = _.map(queues, 'id'); + }) + .then(function() { + return ChatQueue + .scope('default') + .findAndCountAll(_.merge(getQuery(_query, { + id: { + $in: _queues + } + }), _extraQuery)); + }); + }; +} + +var getMailQueuesIdByUser = function(query, extraQuery) { + return function(user) { + var _queues = []; + var _user = user; + var _query = query || {}; + var _extraQuery = _.merge(extraQuery || {}, { + distinct: true + }); + + return _user + .getPMailQueues({ + attributes: ['id'] + }) + .then(function(queues) { + _queues = _.map(queues, 'id'); + }) + .then(function() { + return MailQueue + .scope('default') + .findAndCountAll(_.merge(getQuery(_query, { + id: { + $in: _queues + } + }), _extraQuery)); + }); + }; +} +var getSmsQueuesIdByUser = function(query, extraQuery) { + return function(user) { + var _queues = []; + var _user = user; + var _query = query || {}; + var _extraQuery = _.merge(extraQuery || {}, { + distinct: true + }); + + return _user + .getPSmsQueues({ + attributes: ['id'] + }) + .then(function(queues) { + _queues = _.map(queues, 'id'); + }) + .then(function() { + return SmsQueue + .scope('default') + .findAndCountAll(_.merge(getQuery(_query, { + id: { + $in: _queues + } + }), _extraQuery)); + }); + }; +} + +var getFaxQueuesIdByUser = function(query, extraQuery) { + return function(user) { + var _queues = []; + var _user = user; + var _query = query || {}; + var _extraQuery = _.merge(extraQuery || {}, { + distinct: true + }); + + return _user + .getPFaxQueues({ + attributes: ['id'] + }) + .then(function(queues) { + _queues = _.map(queues, 'id'); + }) + .then(function() { + return FaxQueue + .scope('default') + .findAndCountAll(_.merge(getQuery(_query, { + id: { + $in: _queues + } + }), _extraQuery)); + }); + }; +} +var getOpenchannelQueuesIdByUser = function(query, extraQuery) { + return function(user) { + var _queues = []; + var _user = user; + var _query = query || {}; + var _extraQuery = _.merge(extraQuery || {}, { + distinct: true + }); + + return _user + .getPOpenchannelQueues({ + attributes: ['id'] + }) + .then(function(queues) { + _queues = _.map(queues, 'id'); + }) + .then(function() { + return OpenchannelQueue + .scope('default') + .findAndCountAll(_.merge(getQuery(_query, { + id: { + $in: _queues + } + }), _extraQuery)); + }); + }; +} +var getAgentsIdByUser = function(query) { + return function(user) { + var _users = []; + var _user = user; + var _query = query || {}; + var _voiceQueues = [], + _chatQueues = [], + _mailQueues = [], + _faxQueues = [], + _openchannelQueues = [], + _smsQueues = []; + + return _user + .getPVoiceQueues({ + attributes: ['name'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + }) + .then(function(queues) { + _voiceQueues = _.map(queues, 'name'); + queues.forEach(function(queue) { + _users = _.union(_users, _.map(queue.Users, 'id')); + }); + }) + .then(function() { + return _user + .getPChatQueues({ + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + }); + }) + .then(function(queues) { + _chatQueues = _.map(queues, 'id'); + queues.forEach(function(queue) { + _users = _.union(_users, _.map(queue.Users, 'id')); + }); + }) + .then(function() { + return _user + .getPMailQueues({ + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + }); + }) + .then(function(queues) { + _mailQueues = _.map(queues, 'id'); + queues.forEach(function(queue) { + _users = _.union(_users, _.map(queue.Users, 'id')); + }); + }) + .then(function() { + return _user + .getPFaxQueues({ + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + }); + }) + .then(function(queues) { + _faxQueues = _.map(queues, 'id'); + queues.forEach(function(queue) { + _users = _.union(_users, _.map(queue.Users, 'id')); + }); + }) + .then(function() { + return _user + .getPSmsQueues({ + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + }); + }) + .then(function(queues) { + _smsQueues = _.map(queues, 'id'); + queues.forEach(function(queue) { + _users = _.union(_users, _.map(queue.Users, 'id')); + }); + }) + .then(function() { + return _user + .getPOpenchannelQueues({ + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + }); + }) + .then(function(queues) { + _openchannelQueues = _.map(queues, 'id'); + queues.forEach(function(queue) { + _users = _.union(_users, _.map(queue.Users, 'id')); + }); + }) + .then(function() { + return User + .scope('agent', { + method: ['checkPauseStatus', _query] + }, { + method: ['checkQueueStatus', _query] + }, { + method: ['checkOnlineStatus', _query] + }, { + method: ['checkSipStatus', _query] + }) + .findAndCountAll(_.merge(getQuery(_query, { + id: { + $in: _users + } + }), { + include: [{ + model: VoiceQueue, + where: { + name: { + $in: _voiceQueues + } + }, + required: false + }, { + model: ChatQueue, + where: { + id: { + $in: _chatQueues + } + }, + required: false + }, { + model: MailQueue, + where: { + id: { + $in: _mailQueues + } + }, + required: false + }, { + model: FaxQueue, + where: { + id: { + $in: _faxQueues + } + }, + required: false + }, { + model: SmsQueue, + where: { + id: { + $in: _smsQueues + } + }, + required: false + }, { + model: OpenchannelQueue, + where: { + id: { + $in: _openchannelQueues + } + }, + required: false + }] + })); + }) + }; +} + +var stripTrailingSlash = function(str) { + if (str.substr(-1) === '/') { + return str.substr(0, str.length - 1); + } + return str; +} +var sendRequest = function(data, method, uri) { + if (method == 'GET' || method == 'POST') { + var options = { + method: method, + uri: uri, + body: data, + json: true // Automatically stringifies the body to JSON + }; + return request(options); + } else { + console.log('Unknown Method'); + } + } + // HANDLE action +var execAction = function(action, data) { + switch (action.action) { + case 'pause': + Action + .create({ + name: action.action, + data4: action.type || 'DEFAULT PAUSE' //to track the pause type in the actions table + }, { + body: { + name: action.action, + agent: data.memberid, + type: action.type || 'DEFAULT PAUSE', // to set the pauseType in the user record + } + }) + .then(function() { + console.log('Action Successful'); + }) + .catch(function(err) { + console.log('Action Failed', err); + }); + break; + default: + console.log('Unknown Action'); + } +} +module.exports = { + getQuery: getQuery, + getVoiceQueuesIdByUser: getVoiceQueuesIdByUser, + getChatQueuesIdByUser: getChatQueuesIdByUser, + getMailQueuesIdByUser: getMailQueuesIdByUser, + getFaxQueuesIdByUser: getFaxQueuesIdByUser, + getSmsQueuesIdByUser: getSmsQueuesIdByUser, + getOpenchannelQueuesIdByUser: getOpenchannelQueuesIdByUser, + getAgentsIdByUser: getAgentsIdByUser, + stripTrailingSlash: stripTrailingSlash, + splitInterval: splitInterval, + isValidInterval: isIntervalValid, + sendRequest: sendRequest, + execAction: execAction, + errorManager: require('./error') +}; diff --git a/server/migrations-history/20160801125118-placeholder.js b/server/migrations-history/20160801125118-placeholder.js index 41c2ef7..f9b590d 100644 --- a/server/migrations-history/20160801125118-placeholder.js +++ b/server/migrations-history/20160801125118-placeholder.js @@ -1 +1,23 @@ -var _0x7f1c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73"];_0x7f1c[0];module[_0x7f1c[1]]= {up:function(_0x6253x1,_0x6253x2){},down:function(_0x6253x1,_0x6253x2){}} \ No newline at end of file +'use strict'; + +module.exports = { + up: function (queryInterface, Sequelize) { + /* + Add altering commands here. + Return a promise to correctly handle asynchronicity. + + Example: + return queryInterface.createTable('users', { id: Sequelize.INTEGER }); + */ + }, + + down: function (queryInterface, Sequelize) { + /* + Add reverting commands here. + Return a promise to correctly handle asynchronicity. + + Example: + return queryInterface.dropTable('users'); + */ + } +}; diff --git a/server/migrations-history/20160916135658-report-session.js b/server/migrations-history/20160916135658-report-session.js index b1cedc9..300487f 100644 --- a/server/migrations-history/20160916135658-report-session.js +++ b/server/migrations-history/20160916135658-report-session.js @@ -1 +1,19 @@ -var _0x44b4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x74\x69\x6D\x65\x73\x6C\x6F\x74","\x61\x64\x64\x43\x6F\x6C\x75\x6D\x6E","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x6D\x6F\x76\x65\x43\x6F\x6C\x75\x6D\x6E"];_0x44b4[0];module[_0x44b4[1]]= {up:function(_0xda9bx1,_0xda9bx2){_0xda9bx1[_0x44b4[4]](_0x44b4[2],_0x44b4[3],_0xda9bx2.INTEGER);_0xda9bx1[_0x44b4[4]](_0x44b4[5],_0x44b4[3],_0xda9bx2.INTEGER);_0xda9bx1[_0x44b4[4]](_0x44b4[6],_0x44b4[3],_0xda9bx2.INTEGER);_0xda9bx1[_0x44b4[4]](_0x44b4[7],_0x44b4[3],_0xda9bx2.INTEGER);_0xda9bx1[_0x44b4[4]](_0x44b4[8],_0x44b4[3],_0xda9bx2.INTEGER)},down:function(_0xda9bx1,_0xda9bx2){_0xda9bx1[_0x44b4[9]](_0x44b4[2],_0x44b4[3]);_0xda9bx1[_0x44b4[9]](_0x44b4[5],_0x44b4[3]);_0xda9bx1[_0x44b4[9]](_0x44b4[6],_0x44b4[3]);_0xda9bx1[_0x44b4[9]](_0x44b4[7],_0x44b4[3]);_0xda9bx1[_0x44b4[9]](_0x44b4[8],_0x44b4[3])}} \ No newline at end of file +'use strict'; + +module.exports = { + up: function(queryInterface, Sequelize) { + queryInterface.addColumn('report_chat_session_history', 'timeslot', Sequelize.INTEGER); + queryInterface.addColumn('report_mail_session_history', 'timeslot', Sequelize.INTEGER); + queryInterface.addColumn('report_fax_session_history', 'timeslot', Sequelize.INTEGER); + queryInterface.addColumn('report_sms_session_history', 'timeslot', Sequelize.INTEGER); + queryInterface.addColumn('report_openchannel_session_history', 'timeslot', Sequelize.INTEGER); + }, + + down: function(queryInterface, Sequelize) { + queryInterface.removeColumn('report_chat_session_history', 'timeslot'); + queryInterface.removeColumn('report_mail_session_history', 'timeslot'); + queryInterface.removeColumn('report_fax_session_history', 'timeslot'); + queryInterface.removeColumn('report_sms_session_history', 'timeslot'); + queryInterface.removeColumn('report_openchannel_session_history', 'timeslot'); + } +}; diff --git a/server/migrations-history/20160920170835-report_tdial.js b/server/migrations-history/20160920170835-report_tdial.js index da04549..97e1e5d 100644 --- a/server/migrations-history/20160920170835-report_tdial.js +++ b/server/migrations-history/20160920170835-report_tdial.js @@ -1 +1,14 @@ -var _0x88e4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x72\x65\x70\x6F\x72\x74\x5F\x74\x64\x69\x61\x6C\x5F\x68\x69\x73\x74\x6F\x72\x79","\x6D\x6F\x6E\x69\x74\x6F\x72\x5F\x65\x76\x65\x6E\x74","\x61\x64\x64\x43\x6F\x6C\x75\x6D\x6E","\x72\x65\x6D\x6F\x76\x65\x43\x6F\x6C\x75\x6D\x6E"];_0x88e4[0];module[_0x88e4[1]]= {up:function(_0xb9f6x1,_0xb9f6x2){_0xb9f6x1[_0x88e4[4]](_0x88e4[2],_0x88e4[3],{type:_0xb9f6x2.INTEGER(11),defaultValue:0})},down:function(_0xb9f6x1,_0xb9f6x2){_0xb9f6x1[_0x88e4[5]](_0x88e4[2],_0x88e4[3])}} \ No newline at end of file +'use strict'; + +module.exports = { + up: function(queryInterface, Sequelize) { + queryInterface.addColumn('report_tdial_history', 'monitor_event', { + type: Sequelize.INTEGER(11), + defaultValue: 0 + }); + }, + + down: function(queryInterface, Sequelize) { + queryInterface.removeColumn('report_tdial_history', 'monitor_event'); + } +}; diff --git a/server/migrations-history/20161005162141-report_tdial_history.js b/server/migrations-history/20161005162141-report_tdial_history.js index 0e98b85..78ec4b4 100644 --- a/server/migrations-history/20161005162141-report_tdial_history.js +++ b/server/migrations-history/20161005162141-report_tdial_history.js @@ -1 +1,472 @@ -var _0xabb3=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x72\x65\x70\x6F\x72\x74\x5F\x74\x64\x69\x61\x6C\x5F\x68\x69\x73\x74\x6F\x72\x79","\x70\x72\x65\x76\x69\x65\x77\x5F\x70\x65\x65\x72","\x53\x54\x52\x49\x4E\x47","","\x61\x64\x64\x43\x6F\x6C\x75\x6D\x6E","\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x64\x61\x74\x65","\x44\x41\x54\x45\x4F\x4E\x4C\x59","\x63\x68\x61\x6E\x67\x65\x43\x6F\x6C\x75\x6D\x6E","\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x74\x69\x6D\x65","\x54\x49\x4D\x45","\x64\x69\x61\x6C\x65\x64\x5F\x64\x61\x74\x65","\x64\x69\x61\x6C\x65\x64\x5F\x74\x69\x6D\x65","\x68\x61\x6E\x67\x75\x70\x5F\x64\x61\x74\x65","\x68\x61\x6E\x67\x75\x70\x5F\x74\x69\x6D\x65","\x69\x6E\x73\x65\x72\x74\x5F\x6C\x69\x73\x74\x5F\x64\x61\x74\x65","\x69\x6E\x73\x65\x72\x74\x5F\x6C\x69\x73\x74\x5F\x74\x69\x6D\x65","\x6C\x69\x6E\x6B\x65\x64\x5F\x63\x6F\x6E\x6E\x65\x63\x74\x5F\x64\x61\x74\x65","\x6C\x69\x6E\x6B\x65\x64\x5F\x63\x6F\x6E\x6E\x65\x63\x74\x5F\x74\x69\x6D\x65","\x6C\x69\x6E\x6B\x65\x64\x5F\x64\x61\x74\x65","\x6C\x69\x6E\x6B\x65\x64\x5F\x74\x69\x6D\x65","\x71\x75\x65\x75\x65\x5F\x6A\x6F\x69\x6E\x65\x64\x5F\x64\x61\x74\x65","\x71\x75\x65\x75\x65\x5F\x6A\x6F\x69\x6E\x65\x64\x5F\x74\x69\x6D\x65","\x63\x68\x61\x6E\x6E\x65\x6C","\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x63\x61\x6C\x6C\x65\x72\x69\x64\x5F\x6E\x61\x6D\x65","\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x63\x61\x6C\x6C\x65\x72\x69\x64\x5F\x6E\x75\x6D","\x64\x65\x76\x69\x63\x65","\x64\x69\x61\x6C\x65\x64\x5F\x63\x61\x6C\x6C\x65\x72\x69\x64\x5F\x6E\x61\x6D\x65","\x64\x69\x61\x6C\x65\x64\x5F\x63\x68\x61\x6E\x6E\x65\x6C","\x6C\x69\x6E\x6B\x65\x64\x5F\x63\x61\x6C\x6C\x65\x72\x69\x64\x5F\x6E\x61\x6D\x65","\x6C\x69\x6E\x6B\x65\x64\x5F\x63\x68\x61\x6E\x6E\x65\x6C","\x6C\x69\x6E\x6B\x65\x64\x69\x64","\x6C\x69\x73\x74\x5F\x6E\x61\x6D\x65","\x6E\x75\x6D\x62\x65\x72","\x70\x72\x6F\x63\x65\x73\x73\x5F\x6E\x61\x6D\x65","\x71\x75\x65\x75\x65","\x72\x74\x64\x74\x6D","\x72\x74\x74\x69\x6D\x65","\x73\x6F\x75\x72\x63\x65","\x73\x70\x6F\x6F\x6C\x65\x72\x5F\x6E\x61\x6D\x65","\x75\x6E\x69\x71\x75\x65\x69\x64","\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x65\x76\x65\x6E\x74","\x64\x69\x61\x6C\x65\x64\x5F\x65\x76\x65\x6E\x74","\x69\x64\x5F\x6C\x69\x73\x74","\x42\x49\x47\x49\x4E\x54","\x69\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x69\x64\x5F\x73\x6F\x75\x72\x63\x65","\x69\x64\x5F\x73\x70\x6F\x6F\x6C\x65\x72","\x6C\x69\x6E\x6B\x65\x64\x5F\x65\x76\x65\x6E\x74","\x70\x72\x65\x76\x69\x65\x77\x5F\x65\x76\x65\x6E\x74","\x71\x75\x65\x75\x65\x5F\x65\x6E\x74\x72\x79\x5F\x65\x76\x65\x6E\x74","\x71\x75\x65\x75\x65\x5F\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x72\x65\x6D\x6F\x76\x65\x43\x6F\x6C\x75\x6D\x6E","\x44\x41\x54\x45"];_0xabb3[0];module[_0xabb3[1]]= {up:function(_0x5015x1,_0x5015x2){_0x5015x1[_0xabb3[6]](_0xabb3[2],_0xabb3[3],{type:_0x5015x2[_0xabb3[4]],defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[7],{type:_0x5015x2[_0xabb3[8]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[10],{type:_0x5015x2[_0xabb3[11]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[12],{type:_0x5015x2[_0xabb3[8]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[13],{type:_0x5015x2[_0xabb3[11]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[14],{type:_0x5015x2[_0xabb3[8]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[15],{type:_0x5015x2[_0xabb3[11]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[16],{type:_0x5015x2[_0xabb3[8]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[17],{type:_0x5015x2[_0xabb3[11]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[18],{type:_0x5015x2[_0xabb3[8]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[19],{type:_0x5015x2[_0xabb3[11]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[20],{type:_0x5015x2[_0xabb3[8]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[21],{type:_0x5015x2[_0xabb3[11]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[22],{type:_0x5015x2[_0xabb3[8]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[23],{type:_0x5015x2[_0xabb3[11]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[24],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[25],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[26],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[27],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[28],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[29],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[30],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[31],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[32],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[33],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[34],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[35],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[36],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[37],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[38],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[39],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[40],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[41],{type:_0x5015x2[_0xabb3[4]],allowNull:true,defaultValue:_0xabb3[5]});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[42],{type:_0x5015x2.INTEGER(11),allowNull:true,defaultValue:0});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[43],{type:_0x5015x2.INTEGER(11),allowNull:true,defaultValue:0});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[44],{type:_0x5015x2[_0xabb3[45]],allowNull:true,defaultValue:0});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[46],{type:_0x5015x2[_0xabb3[45]],allowNull:true,defaultValue:0});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[47],{type:_0x5015x2[_0xabb3[45]],allowNull:true,defaultValue:0});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[48],{type:_0x5015x2[_0xabb3[45]],allowNull:true,defaultValue:0});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[49],{type:_0x5015x2.INTEGER(11),allowNull:true,defaultValue:0});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[50],{type:_0x5015x2.INTEGER(11),allowNull:true,defaultValue:0});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[51],{type:_0x5015x2.INTEGER(11),allowNull:true,defaultValue:0});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[52],{type:_0x5015x2.INTEGER(11),allowNull:true,defaultValue:0})},down:function(_0x5015x1,_0x5015x2){_0x5015x1[_0xabb3[53]](_0xabb3[2],_0xabb3[3]);_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[7],{type:_0x5015x2[_0xabb3[54]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[10],{type:_0x5015x2[_0xabb3[54]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[12],{type:_0x5015x2[_0xabb3[54]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[13],{type:_0x5015x2[_0xabb3[54]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[14],{type:_0x5015x2[_0xabb3[54]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[15],{type:_0x5015x2[_0xabb3[54]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[16],{type:_0x5015x2[_0xabb3[54]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[17],{type:_0x5015x2[_0xabb3[54]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[18],{type:_0x5015x2[_0xabb3[54]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[19],{type:_0x5015x2[_0xabb3[54]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[20],{type:_0x5015x2[_0xabb3[54]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[21],{type:_0x5015x2[_0xabb3[54]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[22],{type:_0x5015x2[_0xabb3[54]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[23],{type:_0x5015x2[_0xabb3[54]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[24],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[25],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[26],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[27],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[28],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[29],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[30],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[31],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[32],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[33],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[34],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[35],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[36],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[37],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[38],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[39],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[40],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[41],{type:_0x5015x2[_0xabb3[4]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[42],{type:_0x5015x2.INTEGER(11),allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[43],{type:_0x5015x2.INTEGER(11),allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[44],{type:_0x5015x2[_0xabb3[45]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[46],{type:_0x5015x2[_0xabb3[45]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[47],{type:_0x5015x2[_0xabb3[45]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[48],{type:_0x5015x2[_0xabb3[45]],allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[49],{type:_0x5015x2.INTEGER(11),allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[50],{type:_0x5015x2.INTEGER(11),allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[51],{type:_0x5015x2.INTEGER(11),allowNull:true});_0x5015x1[_0xabb3[9]](_0xabb3[2],_0xabb3[52],{type:_0x5015x2.INTEGER(11),allowNull:true})}} \ No newline at end of file +'use strict'; + +module.exports = { + up: function(queryInterface, Sequelize) { + + //New fields + queryInterface.addColumn('report_tdial_history', 'preview_peer', { + type: Sequelize.STRING, + defaultValue: '' + }); + + //DataTypes wrong + queryInterface.changeColumn('report_tdial_history', 'channel_date', { + type: Sequelize.DATEONLY, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'channel_time', { + type: Sequelize.TIME, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'dialed_date', { + type: Sequelize.DATEONLY, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'dialed_time', { + type: Sequelize.TIME, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'hangup_date', { + type: Sequelize.DATEONLY, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'hangup_time', { + type: Sequelize.TIME, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'insert_list_date', { + type: Sequelize.DATEONLY, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'insert_list_time', { + type: Sequelize.TIME, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'linked_connect_date', { + type: Sequelize.DATEONLY, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'linked_connect_time', { + type: Sequelize.TIME, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'linked_date', { + type: Sequelize.DATEONLY, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'linked_time', { + type: Sequelize.TIME, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'queue_joined_date', { + type: Sequelize.DATEONLY, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'queue_joined_time', { + type: Sequelize.TIME, + allowNull: true + }) + + //defaultValue wrong - STRING + queryInterface.changeColumn('report_tdial_history', 'channel', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'channel_callerid_name', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'channel_callerid_num', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'device', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'dialed_callerid_name', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'dialed_channel', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'linked_callerid_name', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'linked_channel', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'linkedid', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'list_name', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'number', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'process_name', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'queue', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'rtdtm', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'rttime', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'source', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'spooler_name', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + queryInterface.changeColumn('report_tdial_history', 'uniqueid', { + type: Sequelize.STRING, + allowNull: true, + defaultValue: '' + }) + + //defaultValue wrong - INT + queryInterface.changeColumn('report_tdial_history', 'channel_event', { + type: Sequelize.INTEGER(11), + allowNull: true, + defaultValue: 0 + }) + + queryInterface.changeColumn('report_tdial_history', 'dialed_event', { + type: Sequelize.INTEGER(11), + allowNull: true, + defaultValue: 0 + }) + + queryInterface.changeColumn('report_tdial_history', 'id_list', { + type: Sequelize.BIGINT, + allowNull: true, + defaultValue: 0 + }) + + queryInterface.changeColumn('report_tdial_history', 'id_process', { + type: Sequelize.BIGINT, + allowNull: true, + defaultValue: 0 + }) + + queryInterface.changeColumn('report_tdial_history', 'id_source', { + type: Sequelize.BIGINT, + allowNull: true, + defaultValue: 0 + }) + + queryInterface.changeColumn('report_tdial_history', 'id_spooler', { + type: Sequelize.BIGINT, + allowNull: true, + defaultValue: 0 + }) + + queryInterface.changeColumn('report_tdial_history', 'linked_event', { + type: Sequelize.INTEGER(11), + allowNull: true, + defaultValue: 0 + }) + + queryInterface.changeColumn('report_tdial_history', 'preview_event', { + type: Sequelize.INTEGER(11), + allowNull: true, + defaultValue: 0 + }) + + queryInterface.changeColumn('report_tdial_history', 'queue_entry_event', { + type: Sequelize.INTEGER(11), + allowNull: true, + defaultValue: 0 + }) + + queryInterface.changeColumn('report_tdial_history', 'queue_position', { + type: Sequelize.INTEGER(11), + allowNull: true, + defaultValue: 0 + }) + + }, + + down: function(queryInterface, Sequelize) { + //New fields + queryInterface.removeColumn('report_tdial_history', 'preview_peer'); + + //DataTypes wrong + queryInterface.changeColumn('report_tdial_history', 'channel_date', { + type: Sequelize.DATE, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'channel_time', { + type: Sequelize.DATE, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'dialed_date', { + type: Sequelize.DATE, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'dialed_time', { + type: Sequelize.DATE, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'hangup_date', { + type: Sequelize.DATE, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'hangup_time', { + type: Sequelize.DATE, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'insert_list_date', { + type: Sequelize.DATE, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'insert_list_time', { + type: Sequelize.DATE, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'linked_connect_date', { + type: Sequelize.DATE, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'linked_connect_time', { + type: Sequelize.DATE, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'linked_date', { + type: Sequelize.DATE, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'linked_time', { + type: Sequelize.DATE, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'queue_joined_date', { + type: Sequelize.DATE, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'queue_joined_time', { + type: Sequelize.DATE, + allowNull: true + }) + + //defaultValue wrong - STRING + queryInterface.changeColumn('report_tdial_history', 'channel', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'channel_callerid_name', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'channel_callerid_num', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'device', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'dialed_callerid_name', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'dialed_channel', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'linked_callerid_name', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'linked_channel', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'linkedid', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'list_name', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'number', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'process_name', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'queue', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'rtdtm', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'rttime', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'source', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'spooler_name', { + type: Sequelize.STRING, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'uniqueid', { + type: Sequelize.STRING, + allowNull: true + }) + + //defaultValue wrong - INT + queryInterface.changeColumn('report_tdial_history', 'channel_event', { + type: Sequelize.INTEGER(11), + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'dialed_event', { + type: Sequelize.INTEGER(11), + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'id_list', { + type: Sequelize.BIGINT, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'id_process', { + type: Sequelize.BIGINT, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'id_source', { + type: Sequelize.BIGINT, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'id_spooler', { + type: Sequelize.BIGINT, + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'linked_event', { + type: Sequelize.INTEGER(11), + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'preview_event', { + type: Sequelize.INTEGER(11), + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'queue_entry_event', { + type: Sequelize.INTEGER(11), + allowNull: true + }) + + queryInterface.changeColumn('report_tdial_history', 'queue_position', { + type: Sequelize.INTEGER(11), + allowNull: true + }) + } +}; diff --git a/server/routes.js b/server/routes.js index 77aa229..593ba9d 100644 --- a/server/routes.js +++ b/server/routes.js @@ -1 +1,171 @@ -var _0x777c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2F\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73\x2F\x65\x72\x72\x6F\x72\x73","\x70\x61\x74\x68","\x6D\x6F\x6D\x65\x6E\x74","\x65\x78\x70\x6F\x72\x74\x73","\x65\x6E\x76","\x67\x65\x74","\x61\x6D\x69","\x6C\x6F\x63\x61\x6C\x73","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x73\x65\x73\x73\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x75\x73\x65","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C","\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2E\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x72\x6F\x6F\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x72\x6F\x6F\x6D","\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65","\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x73\x6D\x73\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x6D\x73\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x73\x63\x68\x65\x64\x75\x6C\x65\x72","\x2E\x2F\x61\x70\x69\x2F\x73\x63\x68\x65\x64\x75\x6C\x65\x72","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x66\x61\x78\x2F\x73\x65\x73\x73\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x66\x61\x78\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78","\x2F\x61\x70\x69\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x2F\x65\x78\x74\x65\x72\x6E\x69\x70\x73","\x2E\x2F\x61\x70\x69\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x5F\x65\x78\x74\x65\x72\x6E\x69\x70","\x2F\x61\x70\x69\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x2F\x6C\x6F\x63\x61\x6C\x6E\x65\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x6E\x65\x74\x77\x6F\x72\x6B\x5F\x6C\x6F\x63\x61\x6C\x6E\x65\x74","\x2F\x61\x70\x69\x2F\x73\x6D\x73\x2F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x73\x6D\x73\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x6D\x73\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x73\x6D\x73\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x6D\x73\x5F\x6D\x65\x73\x73\x61\x67\x65","\x2F\x61\x70\x69\x2F\x73\x6D\x73\x2F\x72\x6F\x6F\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x6D\x73\x5F\x72\x6F\x6F\x6D","\x2F\x61\x70\x69\x2F\x73\x6D\x73\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x6D\x73\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x63\x61\x6C\x6C\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x64\x69\x61\x6C\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x64\x69\x61\x6C","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x70\x72\x6F\x61\x63\x74\x69\x76\x65\x5F\x61\x63\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x77\x65\x62\x73\x69\x74\x65\x73\x2F\x66\x69\x65\x6C\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65\x73\x5F\x66\x69\x65\x6C\x64","\x2F\x61\x70\x69\x2F\x61\x6E\x73\x77\x65\x72\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x61\x6E\x6E\x65\x64\x5F\x61\x6E\x73\x77\x65\x72","\x2F\x61\x70\x69\x2F\x61\x63\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x61\x63\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x70\x61\x75\x73\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x70\x61\x75\x73\x65","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x6A\x73\x63\x72\x69\x70\x74\x79\x5F\x70\x72\x6F\x6A\x65\x63\x74","\x2F\x61\x70\x69\x2F\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x74\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x2F\x61\x70\x69\x2F\x6C\x69\x63\x65\x6E\x73\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x6C\x69\x63\x65\x6E\x73\x65","\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x66\x69\x65\x6C\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x66\x69\x65\x6C\x64","\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x75\x67\x61\x72\x63\x72\x6D\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64","\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x72\x65\x73\x68\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x66\x69\x65\x6C\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x66\x69\x65\x6C\x64","\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x61\x6C\x65\x73\x66\x6F\x72\x63\x65\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64","\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x72\x65\x70\x6F\x72\x74\x73\x2F\x64\x65\x66\x61\x75\x6C\x74","\x2E\x2F\x61\x70\x69\x2F\x64\x65\x66\x61\x75\x6C\x74\x5F\x72\x65\x70\x6F\x72\x74","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x72\x65\x70\x6F\x72\x74\x73\x2F\x63\x75\x73\x74\x6F\x6D","\x2E\x2F\x61\x70\x69\x2F\x63\x75\x73\x74\x6F\x6D\x5F\x72\x65\x70\x6F\x72\x74","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x72\x65\x70\x6F\x72\x74\x73\x2F\x74\x72\x65\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x6D\x65\x74\x72\x69\x63\x73\x2F\x64\x65\x66\x61\x75\x6C\x74","\x2E\x2F\x61\x70\x69\x2F\x64\x65\x66\x61\x75\x6C\x74\x5F\x6D\x65\x74\x72\x69\x63","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x6D\x65\x74\x72\x69\x63\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x65\x74\x72\x69\x63","\x2F\x61\x70\x69\x2F\x6D\x6F\x64\x75\x6C\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x6F\x64\x75\x6C\x65","\x2F\x61\x70\x69\x2F\x61\x6E\x61\x6C\x79\x74\x69\x63\x73\x2F\x65\x78\x74\x72\x61\x63\x74\x65\x64","\x2E\x2F\x61\x70\x69\x2F\x65\x78\x74\x72\x61\x63\x74\x65\x64\x5F\x72\x65\x70\x6F\x72\x74","\x2F\x61\x70\x69\x2F\x75\x70\x64\x61\x74\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x70\x64\x61\x74\x65","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x63\x68\x61\x74\x2F\x73\x65\x73\x73\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x2F\x66\x69\x65\x6C\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x66\x69\x65\x6C\x64","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x63\x68\x61\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74","\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x2F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x63\x6F\x6E\x66\x69\x67\x75\x72\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x2E\x2F\x61\x70\x69\x2F\x6D\x6F\x74\x69\x6F\x6E\x62\x61\x72","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x6D\x6F\x74\x69\x6F\x6E\x64\x69\x61\x6C\x65\x72","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x74\x69\x67\x65\x72\x5F\x64\x69\x61\x6C","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x6D\x61\x69\x6C\x2F\x73\x65\x73\x73\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x73\x6D\x73\x2F\x73\x65\x73\x73\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x6D\x61\x69\x6C\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x73\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73","\x2F\x61\x70\x69\x2F\x77\x69\x64\x67\x65\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x77\x69\x64\x67\x65\x74","\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x7A\x65\x6E\x64\x65\x73\x6B\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x61\x67\x65\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x6D\x65\x6D\x62\x65\x72\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x73\x71\x75\x61\x72\x65","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65","\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x2F\x73\x71\x75\x61\x72\x65\x2F\x64\x65\x74\x61\x69\x6C\x73","\x2E\x2F\x61\x70\x69\x2F\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x64\x65\x74\x61\x69\x6C","\x2F\x61\x70\x69\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64","\x2F\x61\x70\x69\x2F\x73\x65\x74\x74\x69\x6E\x67\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x65\x74\x74\x69\x6E\x67","\x2F\x61\x70\x69\x2F\x74\x72\x69\x67\x67\x65\x72\x73","\x2E\x2F\x61\x70\x69\x2F\x74\x72\x69\x67\x67\x65\x72","\x2F\x61\x70\x69\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x61\x75\x74\x6F\x6D\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x74\x65\x6D\x70\x6C\x61\x74\x65","\x2F\x61\x70\x69\x2F\x61\x6D\x69","\x2E\x2F\x61\x70\x69\x2F\x61\x6D\x69","\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x6D\x75\x73\x69\x63\x6F\x6E\x68\x6F\x6C\x64","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x76\x6F\x69\x63\x65\x6D\x61\x69\x6C","\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x63\x6F\x6E\x74\x61\x63\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x5F\x6D\x61\x6E\x61\x67\x65\x72","\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x63\x6F\x6D\x70\x61\x6E\x69\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x6F\x6D\x70\x61\x6E\x79","\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x6C\x69\x73\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x6C\x69\x73\x74","\x2F\x61\x70\x69\x2F\x63\x6F\x6E\x74\x61\x63\x74\x6D\x61\x6E\x61\x67\x65\x72\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6C\x69\x73\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6C\x69\x73\x74","\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C\x73","\x2E\x2F\x61\x70\x69\x2F\x69\x6E\x74\x65\x72\x76\x61\x6C","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x63\x6F\x6E\x74\x65\x78\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x63\x6F\x6E\x74\x65\x78\x74","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x2F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x74\x72\x75\x6E\x6B\x73","\x2E\x2F\x61\x70\x69\x2F\x74\x72\x75\x6E\x6B","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x6F\x64\x62\x63","\x2E\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x5F\x6F\x64\x62\x63","\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x73\x6D\x73\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x73\x6D\x73\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x61\x74\x74\x61\x63\x68\x6D\x65\x6E\x74","\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D","\x2F\x61\x70\x69\x2F\x76\x61\x72\x69\x61\x62\x6C\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x76\x61\x72\x69\x61\x62\x6C\x65","\x2F\x61\x70\x69\x2F\x63\x68\x61\x6E\x73\x70\x79","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x6E\x73\x70\x79","\x2F\x61\x70\x69\x2F\x74\x61\x67\x73","\x2E\x2F\x61\x70\x69\x2F\x74\x61\x67","\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x2F\x70\x72\x6F\x6A\x65\x63\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x71\x75\x61\x72\x65\x5F\x70\x72\x6F\x6A\x65\x63\x74","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x72\x6F\x6F\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x72\x6F\x6F\x6D","\x2F\x61\x70\x69\x2F\x66\x61\x78\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x66\x61\x78\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x61\x67\x65\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x61\x67\x65\x6E\x74","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x65\x6E\x71\x75\x69\x72\x69\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x65\x6E\x71\x75\x69\x72\x79","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x72\x6F\x6F\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x76\x69\x73\x69\x74\x6F\x72\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x76\x69\x73\x69\x74\x6F\x72","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x77\x65\x62\x73\x69\x74\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x5F\x77\x65\x62\x73\x69\x74\x65","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x61\x63\x63\x6F\x75\x6E\x74\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x61\x63\x63\x6F\x75\x6E\x74","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x6D\x65\x73\x73\x61\x67\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x72\x6F\x6F\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x73\x65\x72\x76\x65\x72\x73\x2F\x69\x6E","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x69\x6E","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x73\x65\x72\x76\x65\x72\x73\x2F\x6F\x75\x74","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x73\x65\x72\x76\x65\x72\x5F\x6F\x75\x74","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x71\x75\x65\x75\x65\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65","\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x2F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x2E\x2F\x61\x70\x69\x2F\x6D\x61\x69\x6C\x5F\x61\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E","\x2F\x61\x70\x69\x2F\x74\x65\x61\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x74\x65\x61\x6D","\x2F\x61\x70\x69\x2F\x73\x6F\x75\x6E\x64\x73","\x2E\x2F\x61\x70\x69\x2F\x73\x6F\x75\x6E\x64","\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72","\x2F\x61\x70\x69\x2F\x63\x68\x61\x74\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x72\x6F\x6F\x6D\x73","\x2E\x2F\x61\x70\x69\x2F\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D","\x2F\x61\x70\x69\x2F\x78\x63\x68\x61\x74\x74\x79","\x2E\x2F\x61\x70\x69\x2F\x78\x63\x68\x61\x74\x74\x79","\x2F\x61\x75\x74\x68","\x2E\x2F\x61\x75\x74\x68","\x2F\x3A\x75\x72\x6C\x28\x61\x70\x69\x7C\x61\x75\x74\x68\x7C\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73\x7C\x61\x70\x70\x7C\x62\x6F\x77\x65\x72\x5F\x63\x6F\x6D\x70\x6F\x6E\x65\x6E\x74\x73\x7C\x61\x73\x73\x65\x74\x73\x29\x2F\x2A","\x72\x6F\x75\x74\x65","\x2F\x2A","\x70\x72\x6F\x64\x75\x63\x74\x69\x6F\x6E","\x72\x6F\x6F\x74","\x70\x75\x62\x6C\x69\x63","\x6A\x6F\x69\x6E","\x64\x65\x76\x65\x6C\x6F\x70\x6D\x65\x6E\x74","\x74\x65\x73\x74","\x63\x6C\x69\x65\x6E\x74","\x69\x6E\x64\x65\x78\x2E\x68\x74\x6D\x6C","\x73\x65\x6E\x64\x46\x69\x6C\x65","\x61\x6C\x6C"];_0x777c[0];var config=require(_0x777c[1]);var errors=require(_0x777c[2]);var path=require(_0x777c[3]);var moment=require(_0x777c[4]);module[_0x777c[5]]= function(_0xc3eax5,_0xc3eax6){var _0xc3eax7=_0xc3eax5[_0x777c[7]](_0x777c[6]);_0xc3eax5[_0x777c[9]][_0x777c[8]]= _0xc3eax6;_0xc3eax5[_0x777c[12]](_0x777c[10],require(_0x777c[11]));_0xc3eax5[_0x777c[12]](_0x777c[13],require(_0x777c[14]));_0xc3eax5[_0x777c[12]](_0x777c[15],require(_0x777c[16]));_0xc3eax5[_0x777c[12]](_0x777c[17],require(_0x777c[18]));_0xc3eax5[_0x777c[12]](_0x777c[19],require(_0x777c[20]));_0xc3eax5[_0x777c[12]](_0x777c[21],require(_0x777c[22]));_0xc3eax5[_0x777c[12]](_0x777c[23],require(_0x777c[24]));_0xc3eax5[_0x777c[12]](_0x777c[25],require(_0x777c[26]));_0xc3eax5[_0x777c[12]](_0x777c[27],require(_0x777c[28]));_0xc3eax5[_0x777c[12]](_0x777c[29],require(_0x777c[30]));_0xc3eax5[_0x777c[12]](_0x777c[31],require(_0x777c[32]));_0xc3eax5[_0x777c[12]](_0x777c[33],require(_0x777c[34]));_0xc3eax5[_0x777c[12]](_0x777c[35],require(_0x777c[36]));_0xc3eax5[_0x777c[12]](_0x777c[37],require(_0x777c[38]));_0xc3eax5[_0x777c[12]](_0x777c[39],require(_0x777c[40]));_0xc3eax5[_0x777c[12]](_0x777c[41],require(_0x777c[42]));_0xc3eax5[_0x777c[12]](_0x777c[43],require(_0x777c[44]));_0xc3eax5[_0x777c[12]](_0x777c[45],require(_0x777c[46]));_0xc3eax5[_0x777c[12]](_0x777c[47],require(_0x777c[48]));_0xc3eax5[_0x777c[12]](_0x777c[49],require(_0x777c[50]));_0xc3eax5[_0x777c[12]](_0x777c[51],require(_0x777c[52]));_0xc3eax5[_0x777c[12]](_0x777c[53],require(_0x777c[54]));_0xc3eax5[_0x777c[12]](_0x777c[55],require(_0x777c[56]));_0xc3eax5[_0x777c[12]](_0x777c[57],require(_0x777c[58]));_0xc3eax5[_0x777c[12]](_0x777c[59],require(_0x777c[60]));_0xc3eax5[_0x777c[12]](_0x777c[61],require(_0x777c[62]));_0xc3eax5[_0x777c[12]](_0x777c[63],require(_0x777c[64]));_0xc3eax5[_0x777c[12]](_0x777c[65],require(_0x777c[66]));_0xc3eax5[_0x777c[12]](_0x777c[67],require(_0x777c[68]));_0xc3eax5[_0x777c[12]](_0x777c[69],require(_0x777c[70]));_0xc3eax5[_0x777c[12]](_0x777c[71],require(_0x777c[72]));_0xc3eax5[_0x777c[12]](_0x777c[73],require(_0x777c[74]));_0xc3eax5[_0x777c[12]](_0x777c[75],require(_0x777c[76]));_0xc3eax5[_0x777c[12]](_0x777c[77],require(_0x777c[78]));_0xc3eax5[_0x777c[12]](_0x777c[79],require(_0x777c[80]));_0xc3eax5[_0x777c[12]](_0x777c[81],require(_0x777c[82]));_0xc3eax5[_0x777c[12]](_0x777c[83],require(_0x777c[84]));_0xc3eax5[_0x777c[12]](_0x777c[85],require(_0x777c[86]));_0xc3eax5[_0x777c[12]](_0x777c[87],require(_0x777c[88]));_0xc3eax5[_0x777c[12]](_0x777c[89],require(_0x777c[90]));_0xc3eax5[_0x777c[12]](_0x777c[91],require(_0x777c[92]));_0xc3eax5[_0x777c[12]](_0x777c[93],require(_0x777c[94]));_0xc3eax5[_0x777c[12]](_0x777c[95],require(_0x777c[96]));_0xc3eax5[_0x777c[12]](_0x777c[97],require(_0x777c[98]));_0xc3eax5[_0x777c[12]](_0x777c[99],require(_0x777c[100]));_0xc3eax5[_0x777c[12]](_0x777c[101],require(_0x777c[102]));_0xc3eax5[_0x777c[12]](_0x777c[103],require(_0x777c[104]));_0xc3eax5[_0x777c[12]](_0x777c[105],require(_0x777c[106]));_0xc3eax5[_0x777c[12]](_0x777c[107],require(_0x777c[108]));_0xc3eax5[_0x777c[12]](_0x777c[109],require(_0x777c[110]));_0xc3eax5[_0x777c[12]](_0x777c[111],require(_0x777c[112]));_0xc3eax5[_0x777c[12]](_0x777c[113],require(_0x777c[114]));_0xc3eax5[_0x777c[12]](_0x777c[115],require(_0x777c[116]));_0xc3eax5[_0x777c[12]](_0x777c[117],require(_0x777c[118]));_0xc3eax5[_0x777c[12]](_0x777c[119],require(_0x777c[120]));_0xc3eax5[_0x777c[12]](_0x777c[121],require(_0x777c[122]));_0xc3eax5[_0x777c[12]](_0x777c[123],require(_0x777c[124]));_0xc3eax5[_0x777c[12]](_0x777c[125],require(_0x777c[126]));_0xc3eax5[_0x777c[12]](_0x777c[127],require(_0x777c[128]));_0xc3eax5[_0x777c[12]](_0x777c[129],require(_0x777c[130]));_0xc3eax5[_0x777c[12]](_0x777c[131],require(_0x777c[132]));_0xc3eax5[_0x777c[12]](_0x777c[133],require(_0x777c[134]));_0xc3eax5[_0x777c[12]](_0x777c[135],require(_0x777c[136]));_0xc3eax5[_0x777c[12]](_0x777c[137],require(_0x777c[138]));_0xc3eax5[_0x777c[12]](_0x777c[139],require(_0x777c[140]));_0xc3eax5[_0x777c[12]](_0x777c[141],require(_0x777c[142]));_0xc3eax5[_0x777c[12]](_0x777c[143],require(_0x777c[144]));_0xc3eax5[_0x777c[12]](_0x777c[145],require(_0x777c[146]));_0xc3eax5[_0x777c[12]](_0x777c[147],require(_0x777c[148]));_0xc3eax5[_0x777c[12]](_0x777c[149],require(_0x777c[150]));_0xc3eax5[_0x777c[12]](_0x777c[151],require(_0x777c[152]));_0xc3eax5[_0x777c[12]](_0x777c[153],require(_0x777c[154]));_0xc3eax5[_0x777c[12]](_0x777c[155],require(_0x777c[156]));_0xc3eax5[_0x777c[12]](_0x777c[157],require(_0x777c[158]));_0xc3eax5[_0x777c[12]](_0x777c[159],require(_0x777c[160]));_0xc3eax5[_0x777c[12]](_0x777c[161],require(_0x777c[162]));_0xc3eax5[_0x777c[12]](_0x777c[163],require(_0x777c[164]));_0xc3eax5[_0x777c[12]](_0x777c[165],require(_0x777c[166]));_0xc3eax5[_0x777c[12]](_0x777c[167],require(_0x777c[168]));_0xc3eax5[_0x777c[12]](_0x777c[169],require(_0x777c[170]));_0xc3eax5[_0x777c[12]](_0x777c[171],require(_0x777c[172]));_0xc3eax5[_0x777c[12]](_0x777c[173],require(_0x777c[174]));_0xc3eax5[_0x777c[12]](_0x777c[175],require(_0x777c[176]));_0xc3eax5[_0x777c[12]](_0x777c[177],require(_0x777c[178]));_0xc3eax5[_0x777c[12]](_0x777c[179],require(_0x777c[180]));_0xc3eax5[_0x777c[12]](_0x777c[181],require(_0x777c[182]));_0xc3eax5[_0x777c[12]](_0x777c[183],require(_0x777c[184]));_0xc3eax5[_0x777c[12]](_0x777c[185],require(_0x777c[186]));_0xc3eax5[_0x777c[12]](_0x777c[187],require(_0x777c[188]));_0xc3eax5[_0x777c[12]](_0x777c[189],require(_0x777c[190]));_0xc3eax5[_0x777c[12]](_0x777c[191],require(_0x777c[192]));_0xc3eax5[_0x777c[12]](_0x777c[193],require(_0x777c[194]));_0xc3eax5[_0x777c[12]](_0x777c[195],require(_0x777c[196]));_0xc3eax5[_0x777c[12]](_0x777c[197],require(_0x777c[198]));_0xc3eax5[_0x777c[12]](_0x777c[199],require(_0x777c[200]));_0xc3eax5[_0x777c[12]](_0x777c[201],require(_0x777c[202]));_0xc3eax5[_0x777c[12]](_0x777c[203],require(_0x777c[204]));_0xc3eax5[_0x777c[12]](_0x777c[205],require(_0x777c[206]));_0xc3eax5[_0x777c[12]](_0x777c[207],require(_0x777c[208]));_0xc3eax5[_0x777c[12]](_0x777c[209],require(_0x777c[210]));_0xc3eax5[_0x777c[12]](_0x777c[211],require(_0x777c[212]));_0xc3eax5[_0x777c[12]](_0x777c[213],require(_0x777c[214]));_0xc3eax5[_0x777c[12]](_0x777c[215],require(_0x777c[216]));_0xc3eax5[_0x777c[12]](_0x777c[217],require(_0x777c[218]));_0xc3eax5[_0x777c[12]](_0x777c[219],require(_0x777c[220]));_0xc3eax5[_0x777c[12]](_0x777c[221],require(_0x777c[222]));_0xc3eax5[_0x777c[12]](_0x777c[223],require(_0x777c[224]));_0xc3eax5[_0x777c[12]](_0x777c[225],require(_0x777c[226]));_0xc3eax5[_0x777c[12]](_0x777c[227],require(_0x777c[228]));_0xc3eax5[_0x777c[12]](_0x777c[229],require(_0x777c[230]));_0xc3eax5[_0x777c[12]](_0x777c[231],require(_0x777c[232]));_0xc3eax5[_0x777c[12]](_0x777c[233],require(_0x777c[234]));_0xc3eax5[_0x777c[12]](_0x777c[235],require(_0x777c[236]));_0xc3eax5[_0x777c[12]](_0x777c[237],require(_0x777c[238]));_0xc3eax5[_0x777c[12]](_0x777c[239],require(_0x777c[240]));_0xc3eax5[_0x777c[12]](_0x777c[241],require(_0x777c[242]));_0xc3eax5[_0x777c[12]](_0x777c[243],require(_0x777c[244]));_0xc3eax5[_0x777c[12]](_0x777c[245],require(_0x777c[246]));_0xc3eax5[_0x777c[12]](_0x777c[227],require(_0x777c[228]));_0xc3eax5[_0x777c[12]](_0x777c[247],require(_0x777c[248]));_0xc3eax5[_0x777c[12]](_0x777c[249],require(_0x777c[250]));_0xc3eax5[_0x777c[12]](_0x777c[251],require(_0x777c[252]));_0xc3eax5[_0x777c[12]](_0x777c[253],require(_0x777c[254]));_0xc3eax5[_0x777c[12]](_0x777c[255],require(_0x777c[256]));_0xc3eax5[_0x777c[12]](_0x777c[257],require(_0x777c[258]));_0xc3eax5[_0x777c[12]](_0x777c[259],require(_0x777c[260]));_0xc3eax5[_0x777c[12]](_0x777c[261],require(_0x777c[262]));_0xc3eax5[_0x777c[12]](_0x777c[263],require(_0x777c[264]));_0xc3eax5[_0x777c[12]](_0x777c[265],require(_0x777c[266]));_0xc3eax5[_0x777c[12]](_0x777c[267],require(_0x777c[268]));_0xc3eax5[_0x777c[12]](_0x777c[269],require(_0x777c[270]));_0xc3eax5[_0x777c[12]](_0x777c[271],require(_0x777c[272]));_0xc3eax5[_0x777c[12]](_0x777c[273],require(_0x777c[274]));_0xc3eax5[_0x777c[276]](_0x777c[275])[_0x777c[7]](errors[404]);_0xc3eax5[_0x777c[287]](_0x777c[277],function(_0xc3eax8,_0xc3eax9,_0xc3eaxa){var _0xc3eaxb={};if(_0x777c[278]=== _0xc3eax7){_0xc3eaxb[_0x777c[279]]= path[_0x777c[281]](config[_0x777c[279]],_0x777c[280])};if(_0x777c[282]=== _0xc3eax7|| _0x777c[283]=== _0xc3eax7){_0xc3eaxb[_0x777c[279]]= path[_0x777c[281]](config[_0x777c[279]],_0x777c[284])};_0xc3eax9[_0x777c[286]](_0x777c[285],_0xc3eaxb)})} \ No newline at end of file +/** + * Main application routes + */ + +'use strict'; + +var config = require('./config/environment'); +var errors = require('./components/errors'); +var path = require('path'); +var moment = require('moment'); + +module.exports = function(app, ami) { + var env = app.get('env'); + app.locals.ami = ami; + + + + // Insert routes below + app.use('/api/report/openchannel/sessions', require('./api/report_openchannel_session')); + app.use('/api/report/openchannel', require('./api/report_openchannel')); + app.use('/api/openchannel/user_has_queues', require('./api/user_has_openchannel_queue')); + app.use('/api/openchannel/disposition', require('./api/openchannel_disposition')); + app.use('/api/openchannel/applications', require('./api/openchannel_application')); + app.use('/api/openchannel/queues', require('./api/openchannel_queue')); + app.use('/api/openchannel/rooms', require('./api/openchannel_room')); + app.use('/api/openchannel/messages', require('./api/openchannel_message')); + app.use('/api/openchannel/accounts', require('./api/openchannel_account')); + app.use('/api/fax/dispositions', require('./api/fax_disposition')); + app.use('/api/sms/dispositions', require('./api/sms_disposition')); + app.use('/api/mail/dispositions', require('./api/mail_disposition')); + app.use('/api/chat/dispositions', require('./api/chat_disposition')); + app.use('/api/voice/dispositions', require('./api/voice_disposition')); + app.use('/api/scheduler', require('./api/scheduler')); + app.use('/api/fax/attachments', require('./api/fax_attachment')); + app.use('/api/report/fax/sessions', require('./api/report_fax_session')); + app.use('/api/report/faxs', require('./api/report_fax')); + app.use('/api/network/externips', require('./api/network_externip')); + app.use('/api/network/localnets', require('./api/network_localnet')); + app.use('/api/sms/queues', require('./api/sms_queue')); + app.use('/api/sms/applications', require('./api/sms_application')); + app.use('/api/sms/messages', require('./api/sms_message')); + app.use('/api/sms/rooms', require('./api/sms_room')); + app.use('/api/sms/accounts', require('./api/sms_account')); + app.use('/api/report/calls', require('./api/report_call')); + app.use('/api/report/dials', require('./api/report_dial')); + app.use('/api/chat/proactives', require('./api/chat_proactive_action')); + app.use('/api/chat/websites/fields', require('./api/chat_websites_field')); + app.use('/api/answers', require('./api/canned_answer')); + app.use('/api/actions', require('./api/action')); + app.use('/api/pauses', require('./api/pause')); + app.use('/api/voice/recordings', require('./api/voice_recording')); + app.use('/api/jscripty/projects', require('./api/jscripty_project')); + app.use('/api/telephones', require('./api/telephone')); + app.use('/api/licenses', require('./api/license')); + app.use('/api/sugarcrm/fields', require('./api/sugarcrm_field')); + app.use('/api/sugarcrm/configurations', require('./api/sugarcrm_configuration')); + app.use('/api/sugarcrm/accounts', require('./api/sugarcrm_account')); + app.use('/api/freshdesk/fields', require('./api/freshdesk_field')); + app.use('/api/freshdesk/configurations', require('./api/freshdesk_configuration')); + app.use('/api/freshdesk/accounts', require('./api/freshdesk_account')); + app.use('/api/salesforce/fields', require('./api/salesforce_field')); + app.use('/api/salesforce/configurations', require('./api/salesforce_configuration')); + app.use('/api/salesforce/accounts', require('./api/salesforce_account')); + app.use('/api/desk/fields', require('./api/desk_field')); + app.use('/api/desk/configurations', require('./api/desk_configuration')); + app.use('/api/desk/accounts', require('./api/desk_account')); + app.use('/api/analytics/reports/default', require('./api/default_report')); + app.use('/api/analytics/reports/custom', require('./api/custom_report')); + app.use('/api/analytics/reports/trees', require('./api/report_tree')); + app.use('/api/analytics/metrics/default', require('./api/default_metric')); + app.use('/api/analytics/metrics', require('./api/metric')); + app.use('/api/modules', require('./api/module')); + app.use('/api/analytics/extracted', require('./api/extracted_report')); + app.use('/api/updates', require('./api/update')); + app.use('/api/report/chat/sessions', require('./api/report_chat_session')); + app.use('/api/zendesk/fields', require('./api/zendesk_field')); + app.use('/api/report/chats', require('./api/report_chat')); + app.use('/api/zendesk/configurations', require('./api/zendesk_configuration')); + app.use('/api/motionbar', require('./api/motionbar')); + app.use('/api/report/motiondialer', require('./api/report_tiger_dial')); + app.use('/api/report/mail/sessions', require('./api/report_mail_session')); + app.use('/api/report/sms/sessions', require('./api/report_sms_session')); + app.use('/api/report/mails', require('./api/report_mail')); + app.use('/api/report/sms', require('./api/report_sms')); + app.use('/api/widgets', require('./api/widget')); + app.use('/api/zendesk/accounts', require('./api/zendesk_account')); + app.use('/api/report/queues', require('./api/report_queue')); + app.use('/api/report/integrations', require('./api/report_integration')); + app.use('/api/report/agents', require('./api/report_agent')); + app.use('/api/report/members', require('./api/report_member')); + app.use('/api/report/square', require('./api/report_square')); + app.use('/api/report/square/details', require('./api/report_square_detail')); + app.use('/api/dashboards', require('./api/dashboard')); + app.use('/api/settings', require('./api/setting')); + app.use('/api/triggers', require('./api/trigger')); + app.use('/api/automations', require('./api/automation')); + app.use('/api/templates', require('./api/template')); + app.use('/api/ami', require('./api/ami')); + app.use('/api/integrations', require('./api/integration')); + app.use('/api/voice/musiconholds', require('./api/voice_musiconhold')); + app.use('/api/voice/voicemails/messages', require('./api/voice_voicemail_messages')); + app.use('/api/voice/voicemails', require('./api/voice_voicemail')); + app.use('/api/contactmanager/contacts', require('./api/contact_manager')); + app.use('/api/contactmanager/companies', require('./api/company')); + app.use('/api/contactmanager/lists', require('./api/list')); + app.use('/api/contactmanager/user_has_lists', require('./api/user_has_list')); + app.use('/api/intervals', require('./api/interval')); + app.use('/api/voice/extensions', require('./api/voice_extension')); + app.use('/api/voice/contexts', require('./api/voice_context')); + app.use('/api/voice/user_has_queues', require('./api/user_has_voice_queue')); + app.use('/api/voice/queues', require('./api/voice_queue')); + app.use('/api/trunks', require('./api/trunk')); + app.use('/api/chat/applications', require('./api/chat_application')); + app.use('/api/chat/user_has_queues', require('./api/user_has_chat_queue')); + app.use('/api/square/odbc', require('./api/square_odbc')); + app.use('/api/square/recordings', require('./api/square_recording')); + app.use('/api/fax/applications', require('./api/fax_application')); + app.use('/api/fax/user_has_queues', require('./api/user_has_fax_queue')); + app.use('/api/sms/user_has_queues', require('./api/user_has_sms_queue')); + app.use('/api/fax/queues', require('./api/fax_queue')); + app.use('/api/mail/attachments', require('./api/mail_attachment')); + app.use('/api/user_has_teams', require('./api/user_has_team')); + app.use('/api/variables', require('./api/variable')); + app.use('/api/chanspy', require('./api/chanspy')); + app.use('/api/tags', require('./api/tag')); + app.use('/api/square/projects', require('./api/square_project')); + app.use('/api/chat/queues', require('./api/chat_queue')); + app.use('/api/fax/messages', require('./api/fax_message')); + app.use('/api/fax/rooms', require('./api/fax_room')); + app.use('/api/fax/accounts', require('./api/fax_account')); + app.use('/api/agents', require('./api/agent')); + app.use('/api/chat/enquiries', require('./api/chat_enquiry')); + app.use('/api/chat/messages', require('./api/chat_message')); + app.use('/api/chat/rooms', require('./api/chat_room')); + app.use('/api/chat/visitors', require('./api/chat_visitor')); + app.use('/api/chat/websites', require('./api/chat_website')); + app.use('/api/chat/queues', require('./api/chat_queue')); + app.use('/api/mail/accounts', require('./api/mail_account')); + app.use('/api/mail/messages', require('./api/mail_message')); + app.use('/api/mail/rooms', require('./api/mail_room')); + app.use('/api/mail/servers/in', require('./api/mail_server_in')); + app.use('/api/mail/servers/out', require('./api/mail_server_out')); + app.use('/api/mail/queues', require('./api/mail_queue')); + app.use('/api/mail/user_has_queues', require('./api/user_has_mail_queue')); + app.use('/api/mail/applications', require('./api/mail_application')); + app.use('/api/teams', require('./api/team')); + app.use('/api/sounds', require('./api/sound')); + app.use('/api/users', require('./api/user')); + app.use('/api/chat/user_has_rooms', require('./api/user_has_chat_room')); + app.use('/api/xchatty', require('./api/xchatty')); + app.use('/auth', require('./auth')); + + // All undefined asset or api routes should return a 404 + app.route('/:url(api|auth|components|app|bower_components|assets)/*').get(errors[404]); + + // All other routes should redirect to the index.html + app.all("/*", function(req, res, next) { + + var options = {}; + + if ('production' === env) { + options.root = path.join(config.root, 'public'); + } + + if ('development' === env || 'test' === env) { + options.root = path.join(config.root, 'client'); + } + + res.sendFile('index.html', options); + }); +}; diff --git a/server/services/dashboard/hooks/index.js b/server/services/dashboard/hooks/index.js index 8d688dd..b5011ab 100644 --- a/server/services/dashboard/hooks/index.js +++ b/server/services/dashboard/hooks/index.js @@ -1 +1,12 @@ -var _0xfab0=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x6C\x6F\x64\x61\x73\x68","\x65\x78\x70\x6F\x72\x74\x73","\x73\x65\x72\x76\x69\x63\x65\x73\x2F\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x2F\x68\x6F\x6F\x6B\x73","\x6C\x6F\x67","\x2E\x2F\x76\x6F\x69\x63\x65"];_0xfab0[0];const User=require(_0xfab0[2])[_0xfab0[1]];const VoiceQueue=require(_0xfab0[2])[_0xfab0[3]];const _=require(_0xfab0[4]);module[_0xfab0[5]]= function(_0x5200x4,_0x5200x5){console[_0xfab0[7]](_0xfab0[6]);require(_0xfab0[8])(_0x5200x4,_0x5200x5)} \ No newline at end of file +'use strict'; + +const User = require('../../../models').User; +const VoiceQueue = require('../../../models').VoiceQueue; + +const _ = require('lodash'); + +module.exports = function(n, cpAmi) { + console.log('services/dashboard/hooks'); + + require('./voice')(n, cpAmi); +}; diff --git a/server/services/dashboard/hooks/voice.js b/server/services/dashboard/hooks/voice.js index f283eb4..68db8ca 100644 --- a/server/services/dashboard/hooks/voice.js +++ b/server/services/dashboard/hooks/voice.js @@ -1 +1,89 @@ -var _0x36d1=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x6C\x6F\x64\x61\x73\x68","\x74\x79\x70\x65","\x73\x65\x6E\x64","\x65\x78\x70\x6F\x72\x74\x73","\x6D\x65\x73\x73\x61\x67\x65","\x68\x6F\x6C\x64\x74\x69\x6D\x65","\x63\x68\x61\x6E\x67\x65\x64","\x74\x61\x6C\x6B\x74\x69\x6D\x65","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x77\x61\x69\x74\x69\x6E\x67\x3A\x75\x70","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74","\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64\x3A\x75\x70","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74","\x77\x61\x69\x74\x69\x6E\x67\x3A\x64\x6F\x77\x6E","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E","\x61\x63\x74\x69\x76\x65\x3A\x75\x70","\x61\x63\x74\x69\x76\x65\x3A\x64\x6F\x77\x6E","\x63\x6F\x6D\x70\x6C\x65\x74\x65\x3A\x75\x70","\x61\x62\x61\x6E\x64\x6F\x6E\x3A\x75\x70","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x3A\x75\x70","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x67\x65\x6E\x74\x3A\x6A\x6F\x69\x6E","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x61\x67\x65\x6E\x74\x3A\x6C\x65\x61\x76\x65","\x55\x73\x65\x72\x49\x64","\x77\x68\x65\x72\x65","\x71\x75\x65\x75\x65","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x44\x65\x73\x74\x72\x6F\x79","\x6C\x61\x73\x74\x63\x61\x6C\x6C","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x2E\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x65\x76\x74","\x6F\x6E"];_0x36d1[0];const UserHasVoiceQueue=require(_0x36d1[2])[_0x36d1[1]];const ReportAgent=require(_0x36d1[2])[_0x36d1[3]];const ReportQueue=require(_0x36d1[2])[_0x36d1[4]];const ReportCall=require(_0x36d1[2])[_0x36d1[5]];const VoiceQueue=require(_0x36d1[2])[_0x36d1[6]];const sequelize=require(_0x36d1[2])[_0x36d1[7]];const _=require(_0x36d1[8]);function onSend(_0x348fx9,_0x348fxa,_0x348fxb){_0x348fxb[_0x36d1[9]]= _0x348fxa;_0x348fx9[_0x36d1[10]](_0x348fxb)}module[_0x36d1[11]]= function(_0x348fxc,_0x348fxd){_0x348fxd[_0x36d1[43]](_0x36d1[12],function(_0x348fxb){switch(_0x348fxb[_0x36d1[42]]){case _0x36d1[16]:if(_0x348fxb[_0x36d1[14]][_0x36d1[13]]){onSend(_0x348fxc,_0x36d1[13],_0x348fxb)};if(_0x348fxb[_0x36d1[14]][_0x36d1[15]]){onSend(_0x348fxc,_0x36d1[15],_0x348fxb)};break;case _0x36d1[18]:onSend(_0x348fxc,_0x36d1[17],_0x348fxb);break;case _0x36d1[29]:if(_0x348fxb[_0x36d1[14]][_0x36d1[19]]){onSend(_0x348fxc,_0x36d1[20],_0x348fxb)};if(_0x348fxb[_0x36d1[14]][_0x36d1[21]]){onSend(_0x348fxc,_0x36d1[22],_0x348fxb);if(!_0x348fxb[_0x36d1[23]]&& !_0x348fxb[_0x36d1[24]]&& !_0x348fxb[_0x36d1[19]]&& _0x348fxb[_0x36d1[21]]){if(!_0x348fxb[_0x36d1[14]][_0x36d1[24]]){onSend(_0x348fxc,_0x36d1[25],_0x348fxb)}}};if(_0x348fxb[_0x36d1[14]][_0x36d1[23]]&& _0x348fxb[_0x36d1[23]]){onSend(_0x348fxc,_0x36d1[26],_0x348fxb);onSend(_0x348fxc,_0x36d1[27],_0x348fxb)};if(_0x348fxb[_0x36d1[14]][_0x36d1[24]]&& _0x348fxb[_0x36d1[24]]){onSend(_0x348fxc,_0x36d1[28],_0x348fxb)};break;case _0x36d1[32]:if(_0x348fxb[_0x36d1[9]]=== _0x36d1[30]){onSend(_0x348fxc,_0x36d1[31],_0x348fxb)};break;case _0x36d1[34]:onSend(_0x348fxc,_0x36d1[33],_0x348fxb);break;case _0x36d1[39]:onSend(_0x348fxc,_0x36d1[35],{dataValues:{UserId:_0x348fxb[_0x36d1[37]][_0x36d1[36]],queue:_0x348fxb[_0x36d1[37]][_0x36d1[38]]}});break;case _0x36d1[41]:if(_0x348fxb[_0x36d1[14]][_0x36d1[40]]){onSend(_0x348fxc,_0x36d1[40],_0x348fxb)};break;default:}})} \ No newline at end of file +'use strict'; + +const UserHasVoiceQueue = require('../../../models').UserHasVoiceQueue; + +const ReportAgent = require('../../../models').ReportAgent; +const ReportQueue = require('../../../models').ReportQueue; +const ReportCall = require('../../../models').ReportCall; +const VoiceQueue = require('../../../models').VoiceQueue; +const sequelize = require('../../../models').sequelize; + +const _ = require('lodash'); + +function onSend(process, type, doc) { + doc.type = type; + process.send(doc); +} + +module.exports = function(n, cpAmi) { + + cpAmi.on('message', function(doc) { + switch (doc.evt) { + case 'ReportAgent.afterUpdate': + if (doc.changed.holdtime) { + onSend(n, 'holdtime', doc); // OK + } + + if (doc.changed.talktime) { + onSend(n, 'talktime', doc); + } + break; + + case 'ReportQueue.afterCreate': // OK + onSend(n, 'waiting:up', doc); + break; + + case 'ReportQueue.afterUpdate': // OK + if (doc.changed.queuecallerexit) { + onSend(n, 'unmanaged:up', doc) + } + + if (doc.changed.queuecallerleaveAt) { + onSend(n, 'waiting:down', doc) + + if (!doc.queuecallercomplete && !doc.queuecallerabandon && !doc.queuecallerexit && doc.queuecallerleaveAt) { + if (!doc.changed.queuecallerabandon) { + onSend(n, 'active:up', doc); + } + } + } + + if (doc.changed.queuecallercomplete && doc.queuecallercomplete) { + onSend(n, 'active:down', doc); + onSend(n, 'complete:up', doc); + } + + if (doc.changed.queuecallerabandon && doc.queuecallerabandon) { + onSend(n, 'abandon:up', doc); + } + break; + + case 'ReportCall.afterCreate': + if (doc.type === 'outbound') { + onSend(n, 'outbound:up', doc); + } + break; + + case 'UserHasVoiceQueue.afterCreate': + onSend(n, 'agent:join', doc); + break; + + case 'UserHasVoiceQueue.afterDestroy': + onSend(n, 'agent:leave', { + dataValues: { + UserId: doc.where.UserId, + queue: doc.where.queue + } + }); + break; + + case 'UserHasVoiceQueue.afterUpdate': + if (doc.changed.lastcall) { + onSend(n, 'lastcall', doc); + } + break; + + default: + } + }); +}; diff --git a/server/services/dashboard/index.js b/server/services/dashboard/index.js index d481375..9807e6a 100644 --- a/server/services/dashboard/index.js +++ b/server/services/dashboard/index.js @@ -1 +1,19 @@ -var _0x9e6e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x75\x74\x69\x6C","\x63\x68\x69\x6C\x64\x5F\x70\x72\x6F\x63\x65\x73\x73","\x65\x78\x70\x6F\x72\x74\x73","\x65\x72\x72\x6F\x72","\x6F\x6E","\x6D\x65\x73\x73\x61\x67\x65","\x63\x68\x69\x6C\x64\x20\x70\x72\x6F\x63\x65\x73\x73\x20\x6D\x65\x73\x73\x61\x67\x65","\x6C\x6F\x67","\x2F\x77\x6F\x72\x6B\x65\x72\x73","\x66\x6F\x72\x6B","\x2E\x2F\x68\x6F\x6F\x6B\x73"];_0x9e6e[0];const util=require(_0x9e6e[1]);const cp=require(_0x9e6e[2]);module[_0x9e6e[3]]= function(_0x31b1x3){const _0x31b1x4=cp[_0x9e6e[10]](__dirname+ _0x9e6e[9])[_0x9e6e[5]](_0x9e6e[6],function(_0x31b1x6){console[_0x9e6e[8]](_0x9e6e[7],_0x31b1x6)})[_0x9e6e[5]](_0x9e6e[4],function(_0x31b1x5){console[_0x9e6e[4]](_0x31b1x5)});require(_0x9e6e[11])(_0x31b1x4,_0x31b1x3);return _0x31b1x4} \ No newline at end of file +'use strict'; + +const util = require('util'); +const cp = require('child_process'); + +module.exports = function(cpAmi) { + const n = cp + .fork(__dirname + '/workers') + .on('message', function(data) { + console.log('child process message', data); + }) + .on('error', function(err) { + console.error(err); + }); + + require('./hooks')(n, cpAmi); + + return n; +}; diff --git a/server/services/dashboard/workers/index.js b/server/services/dashboard/workers/index.js index 2d39934..41bf8d2 100644 --- a/server/services/dashboard/workers/index.js +++ b/server/services/dashboard/workers/index.js @@ -1 +1,193 @@ -var _0x9b16=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x72\x65\x64\x69\x73","\x2E\x2E\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x2E\x2E\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65","\x72\x65\x64\x69\x73\x50\x77\x64","\x69\x70","\x63\x72\x65\x61\x74\x65\x43\x6C\x69\x65\x6E\x74","\x73\x6F\x63\x6B\x65\x74\x2E\x69\x6F\x2D\x65\x6D\x69\x74\x74\x65\x72","\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x61\x76\x67\x44\x75\x72\x61\x74\x69\x6F\x6E","\x61\x6E\x73\x77\x65\x72\x52\x61\x74\x65","\x61\x6E\x73\x77\x65\x72\x65\x64","\x67\x6C\x6F\x62\x61\x6C\x44\x75\x72\x61\x74\x69\x6F\x6E","\x2E\x2F\x76\x6F\x69\x63\x65","\x74\x68\x65\x6E","\x53\x45\x4C\x45\x43\x54\x20\x41\x56\x47\x28\x64\x75\x72\x61\x74\x69\x6F\x6E\x29\x20\x61\x73\x20\x61\x76\x67\x44\x75\x72\x61\x74\x69\x6F\x6E\x20\x0A\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x20\x0A\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x74\x79\x70\x65\x3D\x27\x6F\x75\x74\x62\x6F\x75\x6E\x64\x27\x3B","\x53\x45\x4C\x45\x43\x54","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x71\x75\x65\x72\x79","\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64","\x53\x45\x4C\x45\x43\x54\x20\x53\x55\x4D\x28\x64\x75\x72\x61\x74\x69\x6F\x6E\x29\x20\x61\x73\x20\x67\x6C\x6F\x62\x61\x6C\x44\x75\x72\x61\x74\x69\x6F\x6E\x20\x0A\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x20\x0A\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x74\x79\x70\x65\x20\x3D\x20\x27\x6F\x75\x74\x62\x6F\x75\x6E\x64\x27\x3B","\x53\x45\x4C\x45\x43\x54\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64\x20\x0A\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x20\x0A\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x74\x79\x70\x65\x20\x3D\x20\x27\x6F\x75\x74\x62\x6F\x75\x6E\x64\x27\x3B","\x71\x75\x65\x75\x65","\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64","\x66\x6F\x72\x45\x61\x63\x68","\x53\x45\x4C\x45\x43\x54\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x61\x6E\x73\x77\x65\x72\x65\x64\x20\x0A\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x20\x0A\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x64\x69\x73\x70\x6F\x73\x69\x74\x69\x6F\x6E\x20\x3D\x20\x27\x41\x4E\x53\x57\x45\x52\x45\x44\x27\x20\x0A\x20\x20\x20\x20\x20\x20\x41\x4E\x44\x20\x74\x79\x70\x65\x20\x3D\x20\x27\x6F\x75\x74\x62\x6F\x75\x6E\x64\x27\x3B","\x74\x61\x6C\x6B\x74\x69\x6D\x65","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x2C\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64\x20\x0A\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x20\x3D\x20\x31\x20\x0A\x20\x20\x20\x20\x20\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65\x3B","\x68\x6F\x6C\x64\x74\x69\x6D\x65","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x2C\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x63\x61\x6C\x6C\x73\x2C\x20\x53\x55\x4D\x28\x74\x61\x6C\x6B\x74\x69\x6D\x65\x29\x20\x61\x73\x20\x74\x61\x6C\x6B\x74\x69\x6D\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x20\x0A\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x3D\x20\x31\x20\x0A\x20\x20\x20\x20\x20\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65\x3B","\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x2C\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x63\x61\x6C\x6C\x73\x2C\x20\x53\x55\x4D\x28\x68\x6F\x6C\x64\x74\x69\x6D\x65\x29\x20\x61\x73\x20\x68\x6F\x6C\x64\x74\x69\x6D\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x20\x0A\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x61\x67\x65\x6E\x74\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x3D\x20\x31\x20\x0A\x20\x20\x20\x20\x20\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65\x3B","\x61\x62\x61\x6E\x64\x6F\x6E","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x2C\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x3D\x20\x31\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65\x3B","\x61\x63\x74\x69\x76\x65","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x2C\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x61\x62\x61\x6E\x64\x6F\x6E\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x20\x3D\x20\x31\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65\x3B","\x77\x61\x69\x74\x69\x6E\x67","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x2C\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x61\x63\x74\x69\x76\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x65\x78\x69\x74\x20\x3D\x20\x30\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x61\x62\x61\x6E\x64\x6F\x6E\x20\x3D\x20\x30\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x63\x6F\x6D\x70\x6C\x65\x74\x65\x20\x3D\x20\x30\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x41\x4E\x44\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x20\x49\x53\x20\x4E\x4F\x54\x20\x4E\x55\x4C\x4C\x20\x0A\x20\x20\x20\x20\x20\x20\x20\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65\x3B","\x6E\x61\x6D\x65","\x6B\x65\x79\x42\x79","\x53\x45\x4C\x45\x43\x54\x20\x71\x75\x65\x75\x65\x2C\x20\x63\x6F\x75\x6E\x74\x28\x2A\x29\x20\x61\x73\x20\x77\x61\x69\x74\x69\x6E\x67\x20\x0A\x20\x20\x20\x20\x20\x20\x46\x52\x4F\x4D\x20\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x20\x0A\x20\x20\x20\x20\x20\x20\x57\x48\x45\x52\x45\x20\x71\x75\x65\x75\x65\x63\x61\x6C\x6C\x65\x72\x6C\x65\x61\x76\x65\x41\x74\x20\x49\x53\x20\x4E\x55\x4C\x4C\x20\x0A\x20\x20\x20\x20\x20\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20\x71\x75\x65\x75\x65\x3B","\x66\x69\x6E\x64\x41\x6C\x6C"];_0x9b16[0];const _=require(_0x9b16[1]);const redis=require(_0x9b16[2]);const config=require(_0x9b16[3]);const sequelize=require(_0x9b16[5])[_0x9b16[4]];const VoiceQueue=require(_0x9b16[5])[_0x9b16[6]];const ReportQueue=require(_0x9b16[5])[_0x9b16[7]];var redisConf;if(config[_0x9b16[8]]){redisConf= {password:config[_0x9b16[8]]}};var redisClient=redis[_0x9b16[10]](6379,config[_0x9b16[9]],redisConf);var io=require(_0x9b16[11])(redisClient);var queues={};var outbound={};VoiceQueue[_0x9b16[46]]({attributes:[_0x9b16[43]],raw:true})[_0x9b16[19]](function(_0xb4a4xd){queues= _[_0x9b16[44]](_0xb4a4xd,_0x9b16[43]);return sequelize[_0x9b16[23]](_0x9b16[45],{type:sequelize[_0x9b16[22]][_0x9b16[21]]})})[_0x9b16[19]](function(_0xb4a4xd){_0xb4a4xd[_0x9b16[29]](function(_0xb4a4xe){if(queues[_0xb4a4xe[_0x9b16[27]]]){queues[_0xb4a4xe[_0x9b16[27]]][_0x9b16[41]]= _0xb4a4xe[_0x9b16[41]]}});return sequelize[_0x9b16[23]](_0x9b16[42],{type:sequelize[_0x9b16[22]][_0x9b16[21]]})})[_0x9b16[19]](function(_0xb4a4xd){_0xb4a4xd[_0x9b16[29]](function(_0xb4a4xe){if(queues[_0xb4a4xe[_0x9b16[27]]]){queues[_0xb4a4xe[_0x9b16[27]]][_0x9b16[39]]= _0xb4a4xe[_0x9b16[39]]}});return sequelize[_0x9b16[23]](_0x9b16[40],{type:sequelize[_0x9b16[22]][_0x9b16[21]]})})[_0x9b16[19]](function(_0xb4a4xd){_0xb4a4xd[_0x9b16[29]](function(_0xb4a4xe){if(queues[_0xb4a4xe[_0x9b16[27]]]){queues[_0xb4a4xe[_0x9b16[27]]][_0x9b16[37]]= _0xb4a4xe[_0x9b16[37]]}});return sequelize[_0x9b16[23]](_0x9b16[38],{type:sequelize[_0x9b16[22]][_0x9b16[21]]})})[_0x9b16[19]](function(_0xb4a4xd){_0xb4a4xd[_0x9b16[29]](function(_0xb4a4xe){if(queues[_0xb4a4xe[_0x9b16[27]]]){queues[_0xb4a4xe[_0x9b16[27]]][_0x9b16[35]]= _0xb4a4xe[_0x9b16[35]]}});return sequelize[_0x9b16[23]](_0x9b16[36],{type:sequelize[_0x9b16[22]][_0x9b16[21]]})})[_0x9b16[19]](function(_0xb4a4xd){_0xb4a4xd[_0x9b16[29]](function(_0xb4a4xe){if(queues[_0xb4a4xe[_0x9b16[27]]]){queues[_0xb4a4xe[_0x9b16[27]]][_0x9b16[33]]= _0xb4a4xe[_0x9b16[33]]}});return sequelize[_0x9b16[23]](_0x9b16[34],{type:sequelize[_0x9b16[22]][_0x9b16[21]]})})[_0x9b16[19]](function(_0xb4a4xd){_0xb4a4xd[_0x9b16[29]](function(_0xb4a4xe){if(queues[_0xb4a4xe[_0x9b16[27]]]){queues[_0xb4a4xe[_0x9b16[27]]][_0x9b16[31]]= _0xb4a4xe[_0x9b16[31]]}});return sequelize[_0x9b16[23]](_0x9b16[32],{type:sequelize[_0x9b16[22]][_0x9b16[21]]})})[_0x9b16[19]](function(_0xb4a4xd){_0xb4a4xd[_0x9b16[29]](function(_0xb4a4xe){if(queues[_0xb4a4xe[_0x9b16[27]]]){queues[_0xb4a4xe[_0x9b16[27]]][_0x9b16[28]]= _0xb4a4xe[_0x9b16[28]]}});return sequelize[_0x9b16[23]](_0x9b16[30],{type:sequelize[_0x9b16[22]][_0x9b16[21]]})})[_0x9b16[19]](function(_0xb4a4xd){outbound[_0x9b16[16]]= _0xb4a4xd[0][_0x9b16[16]];return sequelize[_0x9b16[23]](_0x9b16[26],{type:sequelize[_0x9b16[22]][_0x9b16[21]]})})[_0x9b16[19]](function(_0xb4a4xd){outbound[_0x9b16[24]]= _0xb4a4xd[0][_0x9b16[24]];return sequelize[_0x9b16[23]](_0x9b16[25],{type:sequelize[_0x9b16[22]][_0x9b16[21]]})})[_0x9b16[19]](function(_0xb4a4xd){outbound[_0x9b16[17]]= _0xb4a4xd[0][_0x9b16[17]]|| 0;return sequelize[_0x9b16[23]](_0x9b16[20],{type:sequelize[_0x9b16[22]][_0x9b16[21]]})})[_0x9b16[19]](function(_0xb4a4xd){outbound[_0x9b16[14]]= _0xb4a4xd[0][_0x9b16[14]]|| 0;outbound[_0x9b16[15]]= outbound[_0x9b16[14]]?((outbound[_0x9b16[16]]/ outbound[_0x9b16[17]])* 100):0;require(_0x9b16[18])(queues,outbound,io)})[_0x9b16[13]](function(_0xb4a4xc){console[_0x9b16[12]](_0xb4a4xc)}) \ No newline at end of file +'use strict'; + +/*jshint multistr:true */ + +const _ = require('lodash'); +const redis = require('redis'); + +const config = require('../../../config/environment'); +const sequelize = require('../../../models').sequelize; + +const VoiceQueue = require('../../../models').VoiceQueue; +const ReportQueue = require('../../../models').ReportQueue; + +// SOCKET IO CHILD CONNETION +var redisConf; +if (config.redisPwd) { + redisConf = { + password: config.redisPwd + } +} +var redisClient = redis.createClient(6379, config.ip, redisConf); +var io = require('socket.io-emitter')(redisClient); + +// QUEUE SET +var queues = {}; +var outbound = {}; + +VoiceQueue + .findAll({ + attributes: ['name'], + raw: true + }) + .then(function(data) { + queues = _.keyBy(data, 'name'); + + return sequelize + .query('SELECT queue, count(*) as waiting \ + FROM report_queue \ + WHERE queuecallerleaveAt IS NULL \ + GROUP BY queue;', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + data.forEach(function(elm) { + if (queues[elm.queue]) { + queues[elm.queue].waiting = elm.waiting; + } + }); + + return sequelize + .query( + 'SELECT queue, count(*) as active \ + FROM report_queue \ + WHERE queuecallerexit = 0 \ + AND queuecallerabandon = 0 \ + AND queuecallercomplete = 0 \ + AND queuecallerleaveAt IS NOT NULL \ + GROUP BY queue;', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + data.forEach(function(elm) { + if (queues[elm.queue]) { + queues[elm.queue].active = elm.active; + } + }); + + return sequelize + .query( + 'SELECT queue, count(*) as abandon \ + FROM report_queue \ + WHERE queuecallerabandon = 1 \ + GROUP BY queue;', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + data.forEach(function(elm) { + if (queues[elm.queue]) { + queues[elm.queue].abandon = elm.abandon; + } + }); + + return sequelize + .query( + 'SELECT queue, count(*) as complete \ + FROM report_queue \ + WHERE queuecallercomplete = 1 \ + GROUP BY queue;', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + data.forEach(function(elm) { + if (queues[elm.queue]) { + queues[elm.queue].complete = elm.complete; + } + }); + + return sequelize + .query('SELECT queue, count(*) as calls, SUM(holdtime) as holdtime \ + FROM report_agent \ + WHERE agentcomplete = 1 \ + GROUP BY queue;', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + data.forEach(function(elm) { + if (queues[elm.queue]) { + queues[elm.queue].holdtime = elm.holdtime; + } + }); + + return sequelize + .query('SELECT queue, count(*) as calls, SUM(talktime) as talktime \ + FROM report_agent \ + WHERE agentcomplete = 1 \ + GROUP BY queue;', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + data.forEach(function(elm) { + if (queues[elm.queue]) { + queues[elm.queue].talktime = elm.talktime; + } + }); + + return sequelize + .query('SELECT queue, count(*) as unmanaged \ + FROM report_queue \ + WHERE queuecallerexit = 1 \ + GROUP BY queue;', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + data.forEach(function(elm) { + if (queues[elm.queue]) { + queues[elm.queue].unmanaged = elm.unmanaged; + } + }); + + return sequelize + .query('SELECT count(*) as answered \ + FROM report_call \ + WHERE disposition = \'ANSWERED\' \ + AND type = \'outbound\';', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + outbound.answered = data[0].answered; + + return sequelize + .query('SELECT count(*) as manualOutbound \ + FROM report_call \ + WHERE type = \'outbound\';', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + outbound.manualOutbound = data[0].manualOutbound; + + return sequelize + .query('SELECT SUM(duration) as globalDuration \ + FROM report_call \ + WHERE type = \'outbound\';', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + outbound.globalDuration = data[0].globalDuration || 0; + + return sequelize + .query('SELECT AVG(duration) as avgDuration \ + FROM report_call \ + WHERE type=\'outbound\';', { + type: sequelize.QueryTypes.SELECT + }); + }) + .then(function(data) { + outbound.avgDuration = data[0].avgDuration || 0; + outbound.answerRate = outbound.avgDuration ? ((outbound.answered / outbound.globalDuration) * 100) : 0; + + require('./voice')(queues, outbound, io); + }) + .catch(function(err) { + console.error(err); + }); diff --git a/server/services/dashboard/workers/voice.js b/server/services/dashboard/workers/voice.js index 9c2e72a..5f8efaf 100644 --- a/server/services/dashboard/workers/voice.js +++ b/server/services/dashboard/workers/voice.js @@ -1 +1,226 @@ -var _0xc1be=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x2E\x2E\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65","\x65\x78\x70\x6F\x72\x74\x73","\x71\x75\x65\x75\x65","\x77\x61\x69\x74\x69\x6E\x67","\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x76\x6F\x69\x63\x65\x3A\x77\x61\x69\x74\x69\x6E\x67","\x65\x6D\x69\x74","\x74\x6F","\x61\x63\x74\x69\x76\x65","\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x76\x6F\x69\x63\x65\x3A\x61\x63\x74\x69\x76\x65","\x61\x62\x61\x6E\x64\x6F\x6E","\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x76\x6F\x69\x63\x65\x3A\x61\x62\x61\x6E\x64\x6F\x6E","\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x76\x6F\x69\x63\x65\x3A\x63\x6F\x6D\x70\x6C\x65\x74\x65","\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64","\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x76\x6F\x69\x63\x65\x3A\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64","\x68\x6F\x6C\x64\x74\x69\x6D\x65","\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x76\x6F\x69\x63\x65\x3A\x68\x6F\x6C\x64\x74\x69\x6D\x65","\x74\x61\x6C\x6B\x74\x69\x6D\x65","\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x76\x6F\x69\x63\x65\x3A\x74\x61\x6C\x6B\x74\x69\x6D\x65","\x6D\x61\x6E\x75\x61\x6C\x4F\x75\x74\x62\x6F\x75\x6E\x64","\x61\x6E\x73\x77\x65\x72\x74\x69\x6D\x65","\x61\x6E\x73\x77\x65\x72\x65\x64","\x67\x6C\x6F\x62\x61\x6C\x44\x75\x72\x61\x74\x69\x6F\x6E","\x64\x75\x72\x61\x74\x69\x6F\x6E","\x61\x76\x67\x44\x75\x72\x61\x74\x69\x6F\x6E","\x61\x6E\x73\x77\x65\x72\x52\x61\x74\x65","\x64\x61\x73\x68\x62\x6F\x61\x72\x64\x3A\x76\x6F\x69\x63\x65\x3A\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x75\x73\x65\x72\x73","\x61\x64\x6D\x69\x6E\x73","\x76\x6F\x69\x63\x65\x3A\x71\x75\x65\x75\x65\x3A\x75\x70\x64\x61\x74\x65","\x6C\x61\x73\x74\x63\x61\x6C\x6C","\x63\x61\x6C\x6C\x73\x74\x61\x6B\x65\x6E","\x6C\x6F\x67\x67\x65\x64\x41\x74","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65","\x76\x6F\x69\x63\x65\x3A\x71\x75\x65\x75\x65\x3A\x61\x67\x65\x6E\x74\x3A\x6A\x6F\x69\x6E","\x55\x73\x65\x72\x49\x64","\x61\x67\x65\x6E\x74\x3A\x25\x73","\x66\x6F\x72\x6D\x61\x74","\x76\x6F\x69\x63\x65\x3A\x71\x75\x65\x75\x65\x3A\x61\x67\x65\x6E\x74\x3A\x6C\x65\x61\x76\x65","\x6D\x65\x73\x73\x61\x67\x65","\x77\x61\x69\x74\x69\x6E\x67\x3A\x75\x70","\x77\x61\x69\x74\x69\x6E\x67\x3A\x64\x6F\x77\x6E","\x61\x63\x74\x69\x76\x65\x3A\x75\x70","\x61\x63\x74\x69\x76\x65\x3A\x64\x6F\x77\x6E","\x61\x62\x61\x6E\x64\x6F\x6E\x3A\x75\x70","\x63\x6F\x6D\x70\x6C\x65\x74\x65\x3A\x75\x70","\x75\x6E\x6D\x61\x6E\x61\x67\x65\x64\x3A\x75\x70","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x3A\x75\x70","\x61\x67\x65\x6E\x74\x3A\x6A\x6F\x69\x6E","\x61\x67\x65\x6E\x74\x3A\x6C\x65\x61\x76\x65","\x74\x79\x70\x65","\x6F\x6E"];_0xc1be[0];const _=require(_0xc1be[1]);const util=require(_0xc1be[2]);const config=require(_0xc1be[3]);const User=require(_0xc1be[5])[_0xc1be[4]];const sequelize=require(_0xc1be[5])[_0xc1be[6]];const VoiceQueue=require(_0xc1be[5])[_0xc1be[7]];const ReportQueue=require(_0xc1be[5])[_0xc1be[8]];module[_0xc1be[9]]= function(_0xb31ax8,_0xb31ax9,_0xb31axa){function _0xb31axb(_0xb31axc){if(_0xb31ax8[_0xb31axc[_0xc1be[10]]]){if(!_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[11]]){_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[11]]= 0}}else {_0xb31ax8[_0xb31axc[_0xc1be[10]]]= {};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[11]]= 0};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[11]]++;_0xb31axa[_0xc1be[14]](_0xb31axc[_0xc1be[10]])[_0xc1be[13]](_0xc1be[12],_0xb31ax8[_0xb31axc[_0xc1be[10]]])}function _0xb31axd(_0xb31axc){if(_0xb31ax8[_0xb31axc[_0xc1be[10]]]){if(!_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[11]]){_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[11]]= 0}else {_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[11]]--}}else {_0xb31ax8[_0xb31axc[_0xc1be[10]]]= {};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[11]]= 0};_0xb31axa[_0xc1be[14]](_0xb31axc[_0xc1be[10]])[_0xc1be[13]](_0xc1be[12],_0xb31ax8[_0xb31axc[_0xc1be[10]]])}function _0xb31axe(_0xb31axc){if(_0xb31ax8[_0xb31axc[_0xc1be[10]]]){if(!_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[15]]){_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[15]]= 0}}else {_0xb31ax8[_0xb31axc[_0xc1be[10]]]= {};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[15]]= 0};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[15]]++;_0xb31axa[_0xc1be[14]](_0xb31axc[_0xc1be[10]])[_0xc1be[13]](_0xc1be[16],_0xb31ax8[_0xb31axc[_0xc1be[10]]])}function _0xb31axf(_0xb31axc){if(_0xb31ax8[_0xb31axc[_0xc1be[10]]]){if(!_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[15]]){_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[15]]= 0}else {_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[15]]--}}else {_0xb31ax8[_0xb31axc[_0xc1be[10]]]= {};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[15]]= 0};_0xb31axa[_0xc1be[14]](_0xb31axc[_0xc1be[10]])[_0xc1be[13]](_0xc1be[16],_0xb31ax8[_0xb31axc[_0xc1be[10]]])}function _0xb31ax10(_0xb31axc){if(_0xb31ax8[_0xb31axc[_0xc1be[10]]]){if(!_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[17]]){_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[17]]= 0}}else {_0xb31ax8[_0xb31axc[_0xc1be[10]]]= {};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[17]]= 0};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[17]]++;_0xb31axa[_0xc1be[14]](_0xb31axc[_0xc1be[10]])[_0xc1be[13]](_0xc1be[18],_0xb31ax8[_0xb31axc[_0xc1be[10]]])}function _0xb31ax11(_0xb31axc){if(_0xb31ax8[_0xb31axc[_0xc1be[10]]]){if(!_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[19]]){_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[19]]= 0}}else {_0xb31ax8[_0xb31axc[_0xc1be[10]]]= {};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[19]]= 0};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[19]]++;_0xb31axa[_0xc1be[14]](_0xb31axc[_0xc1be[10]])[_0xc1be[13]](_0xc1be[20],_0xb31ax8[_0xb31axc[_0xc1be[10]]])}function _0xb31ax12(_0xb31axc){if(_0xb31ax8[_0xb31axc[_0xc1be[10]]]){if(!_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[21]]){_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[21]]= 0}}else {_0xb31ax8[_0xb31axc[_0xc1be[10]]]= {};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[21]]= 0};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[21]]++;_0xb31axa[_0xc1be[14]](_0xb31axc[_0xc1be[10]])[_0xc1be[13]](_0xc1be[22],_0xb31ax8[_0xb31axc[_0xc1be[10]]])}function _0xb31ax13(_0xb31axc){if(_0xb31ax8[_0xb31axc[_0xc1be[10]]]){if(!_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[23]]){_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[23]]= 0}}else {_0xb31ax8[_0xb31axc[_0xc1be[10]]]= {};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[23]]= 0};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[23]]+= Number(_0xb31axc[_0xc1be[23]]);_0xb31axa[_0xc1be[14]](_0xb31axc[_0xc1be[10]])[_0xc1be[13]](_0xc1be[24],_0xb31ax8[_0xb31axc[_0xc1be[10]]])}function _0xb31ax14(_0xb31axc){if(_0xb31ax8[_0xb31axc[_0xc1be[10]]]){if(!_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[25]]){_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[25]]= 0}}else {_0xb31ax8[_0xb31axc[_0xc1be[10]]]= {};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[25]]= 0};_0xb31ax8[_0xb31axc[_0xc1be[10]]][_0xc1be[25]]+= Number(_0xb31axc[_0xc1be[25]]);_0xb31axa[_0xc1be[14]](_0xb31axc[_0xc1be[10]])[_0xc1be[13]](_0xc1be[26],_0xb31ax8[_0xb31axc[_0xc1be[10]]])}function _0xb31ax15(_0xb31axc){_0xb31ax9[_0xc1be[27]]++;if(_0xb31axc[_0xc1be[28]]){_0xb31ax9[_0xc1be[29]]++};_0xb31ax9[_0xc1be[30]]+= Number(_0xb31axc[_0xc1be[31]]);_0xb31ax9[_0xc1be[32]]= Number(_0xb31ax9[_0xc1be[30]])/ Number(_0xb31ax9[_0xc1be[27]]);_0xb31ax9[_0xc1be[33]]= (_0xb31ax9[_0xc1be[29]]/ _0xb31ax9[_0xc1be[27]])* 100;_0xb31axa[_0xc1be[14]](_0xc1be[35])[_0xc1be[13]](_0xc1be[34],_0xb31ax9);_0xb31axa[_0xc1be[14]](_0xc1be[36])[_0xc1be[13]](_0xc1be[34],_0xb31ax9)}function _0xb31ax16(_0xb31axc){_0xb31axa[_0xc1be[14]](_0xb31axc[_0xc1be[41]])[_0xc1be[13]](_0xc1be[37],{queue:_0xb31axc[_0xc1be[10]],lastcall:_0xb31axc[_0xc1be[38]],callstaken:_0xb31axc[_0xc1be[39]],loggedAt:_0xb31axc[_0xc1be[40]]})}function _0xb31ax17(_0xb31axc){_0xb31axa[_0xc1be[14]](util[_0xc1be[45]](_0xc1be[44],_0xb31axc.UserId))[_0xc1be[13]](_0xc1be[42],{agent:_0xb31axc[_0xc1be[43]],queue:_0xb31axc[_0xc1be[10]]})}function _0xb31ax18(_0xb31axc){_0xb31axa[_0xc1be[14]](util[_0xc1be[45]](_0xc1be[44],_0xb31axc.UserId))[_0xc1be[13]](_0xc1be[46],{agent:_0xb31axc[_0xc1be[43]],queue:_0xb31axc[_0xc1be[10]]})}process[_0xc1be[59]](_0xc1be[47],function(_0xb31axc){switch(_0xb31axc[_0xc1be[58]]){case _0xc1be[48]:_0xb31axb(_0xb31axc);break;case _0xc1be[49]:_0xb31axd(_0xb31axc);break;case _0xc1be[50]:_0xb31axe(_0xb31axc);break;case _0xc1be[51]:_0xb31axf(_0xb31axc);break;case _0xc1be[52]:_0xb31ax10(_0xb31axc);break;case _0xc1be[53]:_0xb31ax11(_0xb31axc);break;case _0xc1be[54]:_0xb31ax12(_0xb31axc);break;case _0xc1be[23]:_0xb31ax13(_0xb31axc);break;case _0xc1be[25]:_0xb31ax14(_0xb31axc);break;case _0xc1be[55]:_0xb31ax15(_0xb31axc);break;case _0xc1be[38]:_0xb31ax16(_0xb31axc);break;case _0xc1be[56]:_0xb31ax17(_0xb31axc);break;case _0xc1be[57]:_0xb31ax18(_0xb31axc);break;default:}})} \ No newline at end of file +'use strict'; + +/*jshint multistr:true */ + +const _ = require('lodash'); +const util = require('util'); + +const config = require('../../../config/environment'); +const User = require('../../../models').User; +const sequelize = require('../../../models').sequelize; + +const VoiceQueue = require('../../../models').VoiceQueue; +const ReportQueue = require('../../../models').ReportQueue; + +module.exports = function(queues, outbound, io) { + function onVoiceWaitingUp(data) { + if (queues[data.queue]) { + if (!queues[data.queue].waiting) { + queues[data.queue].waiting = 0; + } + } else { + queues[data.queue] = {}; + queues[data.queue].waiting = 0; + } + + queues[data.queue].waiting++; + io.to(data.queue).emit('dashboard:voice:waiting', queues[data.queue]); + } + + function onVoiceWaitingDown(data) { + if (queues[data.queue]) { + if (!queues[data.queue].waiting) { + queues[data.queue].waiting = 0; + } else { + queues[data.queue].waiting--; + } + } else { + queues[data.queue] = {}; + queues[data.queue].waiting = 0; + } + + io.to(data.queue).emit('dashboard:voice:waiting', queues[data.queue]); + } + + function onVoiceActiveUp(data) { + if (queues[data.queue]) { + if (!queues[data.queue].active) { + queues[data.queue].active = 0; + } + } else { + queues[data.queue] = {}; + queues[data.queue].active = 0; + } + + queues[data.queue].active++; + io.to(data.queue).emit('dashboard:voice:active', queues[data.queue]); + } + + function onVoiceActiveDown(data) { + if (queues[data.queue]) { + if (!queues[data.queue].active) { + queues[data.queue].active = 0; + } else { + queues[data.queue].active--; + } + } else { + queues[data.queue] = {}; + queues[data.queue].active = 0; + } + + io.to(data.queue).emit('dashboard:voice:active', queues[data.queue]); + } + + function onVoiceAbandonUp(data) { + if (queues[data.queue]) { + if (!queues[data.queue].abandon) { + queues[data.queue].abandon = 0; + } + } else { + queues[data.queue] = {}; + queues[data.queue].abandon = 0; + } + + queues[data.queue].abandon++; + io.to(data.queue).emit('dashboard:voice:abandon', queues[data.queue]); + } + + function onVoiceCompleteUp(data) { + if (queues[data.queue]) { + if (!queues[data.queue].complete) { + queues[data.queue].complete = 0; + } + } else { + queues[data.queue] = {}; + queues[data.queue].complete = 0; + } + + queues[data.queue].complete++; + io.to(data.queue).emit('dashboard:voice:complete', queues[data.queue]); + } + + function onVoiceUnmanagedUp(data) { + if (queues[data.queue]) { + if (!queues[data.queue].unmanaged) { + queues[data.queue].unmanaged = 0; + } + } else { + queues[data.queue] = {}; + queues[data.queue].unmanaged = 0; + } + + queues[data.queue].unmanaged++; + io.to(data.queue).emit('dashboard:voice:unmanaged', queues[data.queue]); + } + + function onHoldtime(data) { + if (queues[data.queue]) { + if (!queues[data.queue].holdtime) { + queues[data.queue].holdtime = 0; + } + } else { + queues[data.queue] = {}; + queues[data.queue].holdtime = 0; + } + + queues[data.queue].holdtime += Number(data.holdtime); + + io.to(data.queue).emit('dashboard:voice:holdtime', queues[data.queue]); + } + + function onTalktime(data) { + if (queues[data.queue]) { + if (!queues[data.queue].talktime) { + queues[data.queue].talktime = 0; + } + } else { + queues[data.queue] = {}; + queues[data.queue].talktime = 0; + } + + queues[data.queue].talktime += Number(data.talktime); + + io.to(data.queue).emit('dashboard:voice:talktime', queues[data.queue]); + } + + function onOutboundUp(data) { + outbound.manualOutbound++; + if (data.answertime) { + outbound.answered++; + } + outbound.globalDuration += Number(data.duration); + outbound.avgDuration = Number(outbound.globalDuration) / Number(outbound.manualOutbound); + outbound.answerRate = (outbound.answered / outbound.manualOutbound) * 100; + + io.to('users').emit('dashboard:voice:outbound', outbound); + io.to('admins').emit('dashboard:voice:outbound', outbound); + } + + function onUpdateQueue(data) { + io.to(data.membername).emit('voice:queue:update', { + queue: data.queue, + lastcall: data.lastcall, + callstaken: data.callstaken, + loggedAt: data.loggedAt + }); + } + + function onAgentJoin(data) { + io.to(util.format('agent:%s', data.UserId)).emit('voice:queue:agent:join', { + agent: data.UserId, + queue: data.queue + }); + } + + function onAgentLeave(data) { + io.to(util.format('agent:%s', data.UserId)).emit('voice:queue:agent:leave', { + agent: data.UserId, + queue: data.queue + }); + } + + process.on('message', function(data) { + switch (data.type) { + case 'waiting:up': + onVoiceWaitingUp(data); + break; + case 'waiting:down': + onVoiceWaitingDown(data); + break; + case 'active:up': + onVoiceActiveUp(data); + break; + case 'active:down': + onVoiceActiveDown(data); + break; + case 'abandon:up': + onVoiceAbandonUp(data); + break; + case 'complete:up': + onVoiceCompleteUp(data); + break; + case 'unmanaged:up': + onVoiceUnmanagedUp(data); + break; + case 'holdtime': + onHoldtime(data); + break; + case 'talktime': + onTalktime(data); + break; + case 'outbound:up': + onOutboundUp(data); + break; + case 'lastcall': + onUpdateQueue(data); + break; + case 'agent:join': + onAgentJoin(data); + break; + case 'agent:leave': + onAgentLeave(data); + break; + default: + } + }); +}; diff --git a/server/utils/report_build.js b/server/utils/report_build.js index 2b39a44..baa32d4 100644 --- a/server/utils/report_build.js +++ b/server/utils/report_build.js @@ -1 +1,546 @@ -var _0x2acd=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x55\x73\x65\x72","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x62\x6C\x75\x65\x62\x69\x72\x64","\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x75\x74\x69\x6C","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x55\x73\x65\x72\x48\x61\x73\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x76\x6F\x69\x63\x65\x5F\x71\x75\x65\x75\x65\x73","\x72\x65\x70\x6F\x72\x74\x5F\x74\x64\x69\x61\x6C","\x52\x65\x70\x6F\x72\x74\x54\x69\x67\x65\x72\x44\x69\x61\x6C","\x72\x65\x70\x6F\x72\x74\x5F\x74\x64\x69\x61\x6C\x5F\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74","\x52\x65\x70\x6F\x72\x74\x41\x67\x65\x6E\x74\x48\x69\x73\x74\x6F\x72\x79","\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x61\x67\x65\x6E\x74\x5F\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x4D\x61\x69\x6C\x53\x65\x73\x73\x69\x6F\x6E","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x61\x69\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65","\x52\x65\x70\x6F\x72\x74\x51\x75\x65\x75\x65\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x71\x75\x65\x75\x65\x5F\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x43\x68\x61\x74\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x63\x68\x61\x74\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C","\x52\x65\x70\x6F\x72\x74\x43\x61\x6C\x6C\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x63\x61\x6C\x6C\x5F\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72","\x52\x65\x70\x6F\x72\x74\x4D\x65\x6D\x62\x65\x72\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x6D\x65\x6D\x62\x65\x72\x5F\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x49\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x69\x6E\x74\x65\x67\x72\x61\x74\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x53\x6D\x73\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x73\x6D\x73\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x43\x6F\x6E\x74\x61\x63\x74","\x63\x6D\x5F\x63\x6F\x6E\x74\x61\x63\x74\x73","\x56\x6F\x69\x63\x65\x52\x65\x63\x6F\x72\x64\x69\x6E\x67","\x76\x6F\x69\x63\x65\x5F\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x73","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x64\x65\x74\x61\x69\x6C\x73","\x52\x65\x70\x6F\x72\x74\x53\x71\x75\x61\x72\x65\x44\x65\x74\x61\x69\x6C\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x73\x71\x75\x61\x72\x65\x5F\x64\x65\x74\x61\x69\x6C\x73\x5F\x68\x69\x73\x74\x6F\x72\x79","\x75\x73\x65\x72\x73","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x52\x65\x70\x6F\x72\x74\x46\x61\x78\x53\x65\x73\x73\x69\x6F\x6E\x48\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6F\x72\x74\x5F\x66\x61\x78\x5F\x73\x65\x73\x73\x69\x6F\x6E\x5F\x68\x69\x73\x74\x6F\x72\x79","\x4D\x61\x69\x6C\x52\x6F\x6F\x6D","\x6D\x61\x69\x6C\x5F\x72\x6F\x6F\x6D\x73","\x4D\x61\x69\x6C\x4D\x65\x73\x73\x61\x67\x65","\x6D\x61\x69\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x46\x61\x78\x52\x6F\x6F\x6D","\x66\x61\x78\x5F\x72\x6F\x6F\x6D\x73","\x46\x61\x78\x4D\x65\x73\x73\x61\x67\x65","\x66\x61\x78\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x43\x68\x61\x74\x52\x6F\x6F\x6D","\x63\x68\x61\x74\x5F\x72\x6F\x6F\x6D\x73","\x43\x68\x61\x74\x4D\x65\x73\x73\x61\x67\x65","\x63\x68\x61\x74\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x53\x6D\x73\x52\x6F\x6F\x6D","\x73\x6D\x73\x5F\x72\x6F\x6F\x6D\x73","\x53\x6D\x73\x4D\x65\x73\x73\x61\x67\x65","\x73\x6D\x73\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x52\x6F\x6F\x6D","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x72\x6F\x6F\x6D\x73","\x4F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x4D\x65\x73\x73\x61\x67\x65","\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x6D\x65\x73\x73\x61\x67\x65\x73","\x67\x65\x74\x54\x61\x62\x6C\x65","\x62\x75\x69\x6C\x64\x46\x69\x6C\x74\x65\x72","","\x5F\x68\x69\x73\x74\x6F\x72\x79","\x72\x65\x70\x6C\x61\x63\x65","\x6C\x65\x6E\x67\x74\x68","\x28\x71\x75\x65\x75\x65\x20\x49\x4E\x20\x28","\x2C","\x6A\x6F\x69\x6E","\x29","\x20\x4F\x52\x20\x6D\x65\x6D\x62\x65\x72\x69\x64\x20\x49\x4E\x20\x28\x27","\x27\x2C\x27","\x27\x29\x29","\x71\x75\x65\x75\x65\x20\x49\x4E\x20\x28","\x65\x6D\x70\x74\x79","\x3D\x3D\x3D\x3D\x20\x55\x53\x45\x52\x20\x46\x49\x4C\x54\x45\x52\x20\x3D\x3D\x3D\x3D","\x6C\x6F\x67","\x74\x68\x65\x6E","\x72\x6F\x77\x73","\x69\x64","\x6D\x61\x70","\x75\x6E\x69\x6F\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x67\x65\x74\x4D\x61\x69\x6C\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x66\x69\x6E\x64\x42\x79\x49\x64","\x6D\x65\x6D\x62\x65\x72\x6E\x61\x6D\x65\x20\x49\x4E\x20\x28\x27","\x27\x29","\x6E\x61\x6D\x65","\x67\x65\x74\x56\x6F\x69\x63\x65\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x71\x75\x65\x75\x65\x20\x49\x4E\x20\x28\x27","\x67\x65\x74\x43\x68\x61\x74\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x67\x65\x74\x46\x61\x78\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\x67\x65\x74\x53\x6D\x73\x51\x75\x65\x75\x65\x73\x49\x64\x42\x79\x55\x73\x65\x72","\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","\x72\x65\x70\x6F\x72\x74\x5F\x6F\x70\x65\x6E\x63\x68\x61\x6E\x6E\x65\x6C\x5F\x73\x65\x73\x73\x69\x6F\x6E","\x61\x6C\x6C","\x75\x73\x65\x72","\x72\x6F\x6C\x65","\x62\x75\x69\x6C\x64\x51\x75\x65\x72\x79","\x74\x61\x62\x6C\x65","\x6B\x65\x79\x73","\x4D\x65\x74\x72\x69\x63\x49\x64","\x63\x75\x73\x74\x6F\x6D","\x66\x69\x65\x6C\x64","\x60","\x66\x75\x6E\x63\x74\x69\x6F\x6E","\x43\x4F\x55\x4E\x54\x28\x44\x49\x53\x54\x49\x4E\x43\x54\x20\x25\x73\x29","\x66\x6F\x72\x6D\x61\x74","\x43\x4F\x55\x4E\x54\x20\x44\x49\x53\x54\x49\x4E\x43\x54","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x28\x25\x73\x20\x4F\x52\x44\x45\x52\x20\x42\x59\x20\x25\x73\x20\x41\x53\x43\x29","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x20\x41\x53\x43","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x28\x25\x73\x20\x4F\x52\x44\x45\x52\x20\x42\x59\x20\x25\x73\x20\x44\x45\x53\x43\x29","\x47\x52\x4F\x55\x50\x5F\x43\x4F\x4E\x43\x41\x54\x20\x44\x45\x53\x43","\x25\x73\x28\x25\x73\x29","\x44\x41\x54\x45\x28","\x69\x6E\x64\x65\x78\x4F\x66","\x43\x41\x53\x54\x28\x25\x73\x20\x41\x53\x20\x63\x68\x61\x72\x29","\x43\x41\x53\x54\x28\x25\x73\x28\x25\x73\x29\x20\x41\x53\x20\x63\x68\x61\x72\x29","\x44\x41\x54\x45","\x25\x73\x20\x41\x53\x20\x27\x25\x73\x27","\x61\x6C\x69\x61\x73","\x70\x75\x73\x68","\x67\x72\x6F\x75\x70\x42\x79","\x6F\x72\x64\x65\x72\x42\x79","\x25\x73\x20\x25\x73","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E\x73","\x67\x72\x6F\x75\x70","\x70\x61\x72\x73\x65","\x28\x29","\x53\x45\x4C\x45\x43\x54","\x20","\x20\x46\x52\x4F\x4D\x20","\x20\x57\x48\x45\x52\x45\x20","\x73\x74\x61\x72\x74\x44\x61\x74\x65","\x65\x6E\x64\x44\x61\x74\x65","\x73\x74\x61\x72\x74\x54\x69\x6D\x65","\x65\x6E\x64\x54\x69\x6D\x65","\x6F\x66\x66\x73\x65\x74","\x6C\x69\x6D\x69\x74","\x66\x69\x6E\x64","\x20\x4C\x49\x4B\x45\x20\x27\x25","\x25\x27","\x66\x6F\x72\x4F\x77\x6E","\x44\x41\x54\x45\x5F\x46\x4F\x52\x4D\x41\x54\x28\x63\x72\x65\x61\x74\x65\x64\x41\x74\x2C\x27\x25\x59\x2D\x25\x6D\x2D\x25\x64\x20\x25\x48\x3A\x25\x69\x27\x29","\x20\x28\x25\x73\x20\x42\x45\x54\x57\x45\x45\x4E\x20\x27\x25\x73\x27\x20\x41\x4E\x44\x20\x27\x25\x73\x27\x29","\x20\x30\x30\x3A\x30\x30","\x20\x32\x33\x3A\x35\x39","\x20\x25\x73\x20\x3D\x20\x27\x25\x73\x27","\x20\x25\x73\x20\x3E\x3D\x20\x27\x25\x73\x27\x29","\x20\x25\x73\x20\x3C\x3D\x20\x27\x25\x73\x27\x29","\x20\x41\x4E\x44\x20","\x20\x3D\x3D\x3D\x3D\x20\x52\x45\x53\x55\x4C\x54\x49\x4E\x47\x20\x51\x55\x45\x52\x59\x20\x3D\x3D\x3D\x3D","\x4E\x4F\x20\x53\x55\x46\x46\x49\x43\x49\x45\x4E\x54\x20\x50\x45\x52\x4D\x49\x53\x53\x49\x4F\x4E\x53","\x20\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D\x3D","\x70\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E","\x20\x47\x52\x4F\x55\x50\x20\x42\x59\x20","\x20\x4F\x52\x44\x45\x52\x20\x42\x59\x20","\x64\x65\x73\x63\x72\x69\x62\x65","\x63\x68\x65\x63\x6B\x51\x75\x65\x72\x79","\x4E\x6F\x20\x73\x75\x66\x66\x69\x63\x69\x65\x6E\x74\x20\x71\x75\x65\x75\x65\x20\x70\x65\x72\x6D\x69\x73\x73\x69\x6F\x6E\x73\x20\x66\x6F\x72\x20\x74\x68\x65\x20\x75\x73\x65\x72","\x51\x75\x65\x72\x79\x54\x79\x70\x65\x73","\x71\x75\x65\x72\x79","\x28","\x72\x75\x6C\x65\x73","\x6F\x70\x65\x72\x61\x74\x6F\x72","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x49\x53\x20\x4E\x55\x4C\x4C","\x63\x6F\x6E\x64\x69\x74\x69\x6F\x6E","\x49\x53\x20\x4E\x4F\x54\x20\x4E\x55\x4C\x4C","\x20\x3D\x20\x27\x27","\x49\x53\x20\x45\x4D\x50\x54\x59","\x20\x21\x3D\x20\x27\x27","\x49\x53\x20\x4E\x4F\x54\x20\x45\x4D\x50\x54\x59","\x76\x61\x6C\x75\x65"];_0x2acd[0];var _=require(_0x2acd[1]);var util=require(_0x2acd[2]);var User=require(_0x2acd[4])[_0x2acd[3]];var Promise=require(_0x2acd[5]);var Util=require(_0x2acd[6]);var sequelize=require(_0x2acd[4])[_0x2acd[7]];function getTable(_0x3cd3x8){var _0x3cd3x9;switch(_0x3cd3x8){case _0x2acd[9]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[8]];break;case _0x2acd[10]:;case _0x2acd[12]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[11]];break;case _0x2acd[13]:;case _0x2acd[16]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[15]][_0x2acd[14]];break;case _0x2acd[17]:;case _0x2acd[19]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[18]];break;case _0x2acd[20]:;case _0x2acd[22]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[15]][_0x2acd[21]];break;case _0x2acd[23]:;case _0x2acd[25]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[15]][_0x2acd[24]];break;case _0x2acd[26]:;case _0x2acd[28]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[15]][_0x2acd[27]];break;case _0x2acd[29]:;case _0x2acd[31]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[15]][_0x2acd[30]];break;case _0x2acd[32]:;case _0x2acd[34]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[15]][_0x2acd[33]];break;case _0x2acd[35]:;case _0x2acd[37]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[15]][_0x2acd[36]];break;case _0x2acd[39]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[38]];break;case _0x2acd[41]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[40]];break;case _0x2acd[42]:;case _0x2acd[44]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[15]][_0x2acd[43]];break;case _0x2acd[45]:;case _0x2acd[47]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[15]][_0x2acd[46]];break;case _0x2acd[48]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[3]];break;case _0x2acd[49]:;case _0x2acd[51]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[15]][_0x2acd[50]];break;case _0x2acd[53]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[52]];break;case _0x2acd[55]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[54]];break;case _0x2acd[57]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[56]];break;case _0x2acd[59]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[58]];break;case _0x2acd[61]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[60]];break;case _0x2acd[63]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[62]];break;case _0x2acd[65]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[64]];break;case _0x2acd[67]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[66]];break;case _0x2acd[69]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[68]];break;case _0x2acd[71]:_0x3cd3x9= require(_0x2acd[4])[_0x2acd[70]];break;default:};return _0x3cd3x9}exports[_0x2acd[72]]= getTable;exports[_0x2acd[73]]= function(_0x3cd3xa){return function(_0x3cd3x8){switch(_0x3cd3xa[_0x2acd[109]]){case _0x2acd[108]:var _0x3cd3xb=_0x2acd[74];var _0x3cd3xc=_0x3cd3x8[_0x2acd[76]](_0x2acd[75],_0x2acd[74]);switch(_0x3cd3xc){case _0x2acd[17]:var _0x3cd3xd;return User[_0x2acd[96]](_0x3cd3xa[_0x2acd[91]],{attributes:[_0x2acd[91]]})[_0x2acd[89]](Util[_0x2acd[95]]({},{attributes:[_0x2acd[91]],include:[{raw:true,model:User,attributes:[_0x2acd[91]]}]}))[_0x2acd[89]](function(_0x3cd3xf){var _0x3cd3x10=[];_0x3cd3xd= _[_0x2acd[92]](_0x3cd3xf[_0x2acd[90]],_0x2acd[91]);_0x3cd3xf[_0x2acd[90]][_0x2acd[94]](function(_0x3cd3x11){_0x3cd3x10= _[_0x2acd[93]](_0x3cd3x10,_[_0x2acd[92]](_0x3cd3x11.Users,_0x2acd[91]))});return _0x3cd3x10})[_0x2acd[89]](function(_0x3cd3xe){if(_0x3cd3xd[_0x2acd[77]]&& _0x3cd3xe[_0x2acd[77]]){_0x3cd3xb= _0x2acd[78]+ _0x3cd3xd[_0x2acd[80]](_0x2acd[79])+ _0x2acd[81];_0x3cd3xb+= _0x2acd[82]+ _0x3cd3xe[_0x2acd[80]](_0x2acd[83])+ _0x2acd[84]}else {if(_0x3cd3xd[_0x2acd[77]]){_0x3cd3xb= _0x2acd[85]+ _0x3cd3xd[_0x2acd[80]](_0x2acd[79])+ _0x2acd[81]}else {_0x3cd3xb= _0x2acd[86]}};console[_0x2acd[88]](_0x2acd[87],_0x3cd3xb);return _0x3cd3xb});case _0x2acd[29]:var _0x3cd3x12;return User[_0x2acd[96]](_0x3cd3xa[_0x2acd[91]],{attributes:[_0x2acd[91]]})[_0x2acd[89]](Util[_0x2acd[100]]({},{attributes:[_0x2acd[99]],include:[{raw:true,model:User,attributes:[_0x2acd[99]]}]}))[_0x2acd[89]](function(_0x3cd3xf){var _0x3cd3x10=[];_0x3cd3xf[_0x2acd[90]][_0x2acd[94]](function(_0x3cd3x11){_0x3cd3x10= _[_0x2acd[93]](_0x3cd3x10,_[_0x2acd[92]](_0x3cd3x11.Users,_0x2acd[99]))});return _0x3cd3x10})[_0x2acd[89]](function(_0x3cd3xe){if(_0x3cd3xe[_0x2acd[77]]){_0x3cd3xb= _0x2acd[97]+ _0x3cd3xe[_0x2acd[80]](_0x2acd[83])+ _0x2acd[98]}else {_0x3cd3xb= _0x2acd[86]};console[_0x2acd[88]](_0x2acd[87],_0x3cd3xb);return _0x3cd3xb});case _0x2acd[13]:;case _0x2acd[20]:return User[_0x2acd[96]](_0x3cd3xa[_0x2acd[91]],{attributes:[_0x2acd[91]]})[_0x2acd[89]](Util[_0x2acd[100]]())[_0x2acd[89]](function(_0x3cd3x13){if(_0x3cd3x13[_0x2acd[90]][_0x2acd[77]]){_0x3cd3x13= _[_0x2acd[92]](_0x3cd3x13[_0x2acd[90]],_0x2acd[99]);_0x3cd3xb= _0x2acd[101]+ _0x3cd3x13[_0x2acd[80]](_0x2acd[83])+ _0x2acd[98]}else {_0x3cd3xb= _0x2acd[86]};console[_0x2acd[88]](_0x2acd[87],_0x3cd3xb);return _0x3cd3xb});case _0x2acd[23]:var _0x3cd3x14;return User[_0x2acd[96]](_0x3cd3xa[_0x2acd[91]],{attributes:[_0x2acd[91]]})[_0x2acd[89]](Util[_0x2acd[102]]({},{attributes:[_0x2acd[91]],include:[{raw:true,model:User,attributes:[_0x2acd[91]]}]}))[_0x2acd[89]](function(_0x3cd3xf){var _0x3cd3x10=[];_0x3cd3x14= _[_0x2acd[92]](_0x3cd3xf[_0x2acd[90]],_0x2acd[91]);_0x3cd3xf[_0x2acd[90]][_0x2acd[94]](function(_0x3cd3x11){_0x3cd3x10= _[_0x2acd[93]](_0x3cd3x10,_[_0x2acd[92]](_0x3cd3x11.Users,_0x2acd[91]))});return _0x3cd3x10})[_0x2acd[89]](function(_0x3cd3xe){if(_0x3cd3x14[_0x2acd[77]]&& _0x3cd3xe[_0x2acd[77]]){_0x3cd3xb= _0x2acd[78]+ _0x3cd3x14[_0x2acd[80]](_0x2acd[79])+ _0x2acd[81];_0x3cd3xb+= _0x2acd[82]+ _0x3cd3xe[_0x2acd[80]](_0x2acd[83])+ _0x2acd[84]}else {if(_0x3cd3x14[_0x2acd[77]]){_0x3cd3xb= _0x2acd[85]+ _0x3cd3x14[_0x2acd[80]](_0x2acd[79])+ _0x2acd[81]}else {_0x3cd3xb= _0x2acd[86]}};console[_0x2acd[88]](_0x2acd[87],_0x3cd3xb);return _0x3cd3xb});case _0x2acd[49]:var _0x3cd3x15;return User[_0x2acd[96]](_0x3cd3xa[_0x2acd[91]],{attributes:[_0x2acd[91]]})[_0x2acd[89]](Util[_0x2acd[103]]({},{attributes:[_0x2acd[91]],include:[{raw:true,model:User,attributes:[_0x2acd[91]]}]}))[_0x2acd[89]](function(_0x3cd3xf){var _0x3cd3x10=[];_0x3cd3x15= _[_0x2acd[92]](_0x3cd3xf[_0x2acd[90]],_0x2acd[91]);_0x3cd3xf[_0x2acd[90]][_0x2acd[94]](function(_0x3cd3x11){_0x3cd3x10= _[_0x2acd[93]](_0x3cd3x10,_[_0x2acd[92]](_0x3cd3x11.Users,_0x2acd[91]))});return _0x3cd3x10})[_0x2acd[89]](function(_0x3cd3xe){if(_0x3cd3x15[_0x2acd[77]]&& _0x3cd3xe[_0x2acd[77]]){_0x3cd3xb= _0x2acd[78]+ _0x3cd3x15[_0x2acd[80]](_0x2acd[79])+ _0x2acd[81];_0x3cd3xb+= _0x2acd[82]+ _0x3cd3xe[_0x2acd[80]](_0x2acd[83])+ _0x2acd[84]}else {if(_0x3cd3x15[_0x2acd[77]]){_0x3cd3xb= _0x2acd[85]+ _0x3cd3x15[_0x2acd[80]](_0x2acd[79])+ _0x2acd[81]}else {_0x3cd3xb= _0x2acd[86]}};console[_0x2acd[88]](_0x2acd[87],_0x3cd3xb);return _0x3cd3xb});case _0x2acd[35]:var _0x3cd3x16;return User[_0x2acd[96]](_0x3cd3xa[_0x2acd[91]],{attributes:[_0x2acd[91]]})[_0x2acd[89]](Util[_0x2acd[104]]({},{attributes:[_0x2acd[91]],include:[{raw:true,model:User,attributes:[_0x2acd[91]]}]}))[_0x2acd[89]](function(_0x3cd3xf){var _0x3cd3x10=[];_0x3cd3x16= _[_0x2acd[92]](_0x3cd3xf[_0x2acd[90]],_0x2acd[91]);_0x3cd3xf[_0x2acd[90]][_0x2acd[94]](function(_0x3cd3x11){_0x3cd3x10= _[_0x2acd[93]](_0x3cd3x10,_[_0x2acd[92]](_0x3cd3x11.Users,_0x2acd[91]))});return _0x3cd3x10})[_0x2acd[89]](function(_0x3cd3xe){if(_0x3cd3x16[_0x2acd[77]]&& _0x3cd3xe[_0x2acd[77]]){_0x3cd3xb= _0x2acd[78]+ _0x3cd3x16[_0x2acd[80]](_0x2acd[79])+ _0x2acd[81];_0x3cd3xb+= _0x2acd[82]+ _0x3cd3xe[_0x2acd[80]](_0x2acd[83])+ _0x2acd[84]}else {if(_0x3cd3x16[_0x2acd[77]]){_0x3cd3xb= _0x2acd[85]+ _0x3cd3x16[_0x2acd[80]](_0x2acd[79])+ _0x2acd[81]}else {_0x3cd3xb= _0x2acd[86]}};console[_0x2acd[88]](_0x2acd[87],_0x3cd3xb);return _0x3cd3xb});case _0x2acd[106]:var _0x3cd3x17;return User[_0x2acd[96]](_0x3cd3xa[_0x2acd[91]],{attributes:[_0x2acd[91]]})[_0x2acd[89]](Util[_0x2acd[105]]({},{attributes:[_0x2acd[91]],include:[{raw:true,model:User,attributes:[_0x2acd[91]]}]}))[_0x2acd[89]](function(_0x3cd3xf){var _0x3cd3x10=[];_0x3cd3x17= _[_0x2acd[92]](_0x3cd3xf[_0x2acd[90]],_0x2acd[91]);_0x3cd3xf[_0x2acd[90]][_0x2acd[94]](function(_0x3cd3x11){_0x3cd3x10= _[_0x2acd[93]](_0x3cd3x10,_[_0x2acd[92]](_0x3cd3x11.Users,_0x2acd[91]))});return _0x3cd3x10})[_0x2acd[89]](function(_0x3cd3xe){if(_0x3cd3x17[_0x2acd[77]]&& _0x3cd3xe[_0x2acd[77]]){_0x3cd3xb= _0x2acd[78]+ _0x3cd3x17[_0x2acd[80]](_0x2acd[79])+ _0x2acd[81];_0x3cd3xb+= _0x2acd[82]+ _0x3cd3xe[_0x2acd[80]](_0x2acd[83])+ _0x2acd[84]}else {if(_0x3cd3x17[_0x2acd[77]]){_0x3cd3xb= _0x2acd[85]+ _0x3cd3x17[_0x2acd[80]](_0x2acd[79])+ _0x2acd[81]}else {_0x3cd3xb= _0x2acd[86]}};console[_0x2acd[88]](_0x2acd[87],_0x3cd3xb);return _0x3cd3xb});case _0x2acd[32]:;case _0x2acd[26]:return Promise[_0x2acd[107]]([])[_0x2acd[89]](function(){return null});default:return Promise[_0x2acd[107]]([])[_0x2acd[89]](function(){return null})};break;default:return Promise[_0x2acd[107]]([])[_0x2acd[89]](function(){return null})}}};exports[_0x2acd[110]]= function(_0x3cd3x18){return function(_0x3cd3x19,_0x3cd3x1a){var _0x3cd3x9=getTable(_0x3cd3x1a[_0x2acd[111]]);return _0x3cd3x9[_0x2acd[169]]()[_0x2acd[89]](function(_0x3cd3x1b){var _0x3cd3x1c=_[_0x2acd[112]](_0x3cd3x1b);var _0x3cd3x1d=[],_0x3cd3x1e=[],_0x3cd3x1f=[];_[_0x2acd[94]](_0x3cd3x1a.Fields,function(_0x3cd3x20){if(!_0x3cd3x20[_0x2acd[113]]&& !_0x3cd3x20[_0x2acd[114]]){_0x3cd3x20[_0x2acd[115]]= _0x2acd[116]+ _0x3cd3x20[_0x2acd[115]]+ _0x2acd[116]};var _0x3cd3x21=_0x2acd[74];if(_0x3cd3x20[_0x2acd[117]]){switch(_0x3cd3x20[_0x2acd[117]]){case _0x2acd[120]:_0x3cd3x21= util[_0x2acd[119]](_0x2acd[118],_0x3cd3x20[_0x2acd[115]]);break;case _0x2acd[122]:_0x3cd3x21= util[_0x2acd[119]](_0x2acd[121],_0x3cd3x20[_0x2acd[115]],_0x3cd3x20[_0x2acd[115]]);break;case _0x2acd[124]:_0x3cd3x21= util[_0x2acd[119]](_0x2acd[123],_0x3cd3x20[_0x2acd[115]],_0x3cd3x20[_0x2acd[115]]);break;default:_0x3cd3x21= util[_0x2acd[119]](_0x2acd[125],_0x3cd3x20[_0x2acd[117]],_0x3cd3x20[_0x2acd[115]])}}else {_0x3cd3x21= _0x3cd3x20[_0x2acd[115]]};if(_0x3cd3x21[_0x2acd[127]](_0x2acd[126])=== 0){_0x3cd3x21= util[_0x2acd[119]](_0x2acd[128],_0x3cd3x21)};if(_0x3cd3x20[_0x2acd[119]]){switch(_0x3cd3x20[_0x2acd[119]]){case _0x2acd[130]:_0x3cd3x21= util[_0x2acd[119]](_0x2acd[129],_0x3cd3x20[_0x2acd[119]],_0x3cd3x21);break;default:_0x3cd3x21= util[_0x2acd[119]](_0x2acd[125],_0x3cd3x20[_0x2acd[119]],_0x3cd3x21)}};_0x3cd3x1d[_0x2acd[133]](util[_0x2acd[119]](_0x2acd[131],_0x3cd3x21,_0x3cd3x20[_0x2acd[132]]));if(_0x3cd3x20[_0x2acd[134]]){_0x3cd3x1e[_0x2acd[133]](_0x3cd3x21)};if(_0x3cd3x20[_0x2acd[135]]){_0x3cd3x1f[_0x2acd[133]](util[_0x2acd[119]](_0x2acd[136],_0x3cd3x21,_0x3cd3x20[_0x2acd[135]]))}});var _0x3cd3x22=_0x3cd3x1a[_0x2acd[137]]?getConditions(JSON[_0x2acd[139]](_0x3cd3x1a[_0x2acd[137]])[_0x2acd[138]],_0x3cd3x1c):_0x2acd[140];var _0x3cd3x23=_0x2acd[141];_0x3cd3x23+= _0x2acd[142]+ _0x3cd3x1d[_0x2acd[80]](_0x2acd[79]);switch(_0x3cd3x1a[_0x2acd[111]]){case _0x2acd[19]:_0x3cd3x1a[_0x2acd[111]]= _0x3cd3x1a[_0x2acd[111]][_0x2acd[76]](_0x2acd[75],_0x2acd[74]);break;default:};_0x3cd3x23+= _0x2acd[143]+ _0x3cd3x1a[_0x2acd[111]];_0x3cd3x23+= _0x3cd3x22!== _0x2acd[140]?_0x2acd[144]+ _0x3cd3x22:_0x2acd[74];var _0x3cd3x24,_0x3cd3x25,_0x3cd3x26,_0x3cd3x27;var _0x3cd3x28=[];if(_0x3cd3x18){_[_0x2acd[154]](_0x3cd3x18,function(_0x3cd3x29,_0x3cd3x2a){switch(_0x3cd3x2a){case _0x2acd[145]:_0x3cd3x24= _0x3cd3x29;break;case _0x2acd[146]:_0x3cd3x25= _0x3cd3x29;break;case _0x2acd[147]:_0x3cd3x26= _0x3cd3x29;break;case _0x2acd[148]:_0x3cd3x27= _0x3cd3x29;break;case _0x2acd[149]:;case _0x2acd[150]:break;default:var _0x3cd3x2b=_[_0x2acd[151]](_0x3cd3x1a.Fields,{alias:_0x3cd3x2a});if(_0x3cd3x2b){_0x3cd3x28[_0x2acd[133]](_0x3cd3x2b[_0x2acd[115]]+ _0x2acd[152]+ _0x3cd3x29+ _0x2acd[153])}else {_0x3cd3x28[_0x2acd[133]](_0x3cd3x2a+ _0x2acd[152]+ _0x3cd3x29+ _0x2acd[153])}}})};var _0x3cd3x2c=_0x2acd[155];console[_0x2acd[88]](_0x3cd3x24,_0x3cd3x25,_0x3cd3x26,_0x3cd3x27);if(_0x3cd3x24&& _0x3cd3x25){if(_0x3cd3x24=== _0x3cd3x25){if(_0x3cd3x26|| _0x3cd3x27){console[_0x2acd[88]](_0x3cd3x24,_0x3cd3x25,_0x3cd3x26,_0x3cd3x27);_0x3cd3x28[_0x2acd[133]](util[_0x2acd[119]](_0x2acd[156],_0x3cd3x2c,_0x3cd3x24+ (_0x3cd3x26?_0x2acd[142]+ _0x3cd3x26:_0x2acd[157]),_0x3cd3x25+ (_0x3cd3x27?_0x2acd[142]+ _0x3cd3x27:_0x2acd[158])))}else {_0x3cd3x28[_0x2acd[133]](util[_0x2acd[119]](_0x2acd[159],_0x3cd3x2c,_0x3cd3x24))}}else {_0x3cd3x28[_0x2acd[133]](util[_0x2acd[119]](_0x2acd[156],_0x3cd3x2c,_0x3cd3x24+ (_0x3cd3x26?_0x2acd[142]+ _0x3cd3x26:_0x2acd[157]),_0x3cd3x25+ (_0x3cd3x27?_0x2acd[142]+ _0x3cd3x27:_0x2acd[158])))}}else {if(_0x3cd3x24){_0x3cd3x28[_0x2acd[133]](util[_0x2acd[119]](_0x2acd[160],_0x3cd3x2c,_0x3cd3x24+ (_0x3cd3x26?_0x2acd[142]+ _0x3cd3x26:_0x2acd[157])))}else {if(_0x3cd3x25){_0x3cd3x28[_0x2acd[133]](util[_0x2acd[119]](_0x2acd[161],_0x3cd3x2c,_0x3cd3x25+ (_0x3cd3x27?_0x2acd[142]+ _0x3cd3x27:_0x2acd[158])))}}};if(_0x3cd3x28[_0x2acd[77]]){_0x3cd3x23+= ((_0x3cd3x22!== _0x2acd[140])?_0x2acd[162]:_0x2acd[144])+ _0x3cd3x28[_0x2acd[80]](_0x2acd[162])};if(_0x3cd3x19){if(_0x3cd3x19=== _0x2acd[86]){console[_0x2acd[88]](_0x2acd[163]);console[_0x2acd[88]](_0x2acd[164]);console[_0x2acd[88]](_0x2acd[165]);return _0x2acd[166]};_0x3cd3x23+= ((_0x3cd3x22!== _0x2acd[140]|| _0x3cd3x28[_0x2acd[77]])?_0x2acd[162]:_0x2acd[144])+ _0x3cd3x19};_0x3cd3x23+= _0x3cd3x1e[_0x2acd[77]]?_0x2acd[167]+ _0x3cd3x1e[_0x2acd[80]](_0x2acd[79]):_0x2acd[74];_0x3cd3x23+= _0x3cd3x1f[_0x2acd[77]]?_0x2acd[168]+ _0x3cd3x1f[_0x2acd[80]](_0x2acd[79]):_0x2acd[74];console[_0x2acd[88]](_0x2acd[163]);console[_0x2acd[88]](_0x3cd3x23);console[_0x2acd[88]](_0x2acd[165]);return _0x3cd3x23})}};exports[_0x2acd[170]]= function(){return function(_0x3cd3x18){if(_0x3cd3x18){var _0x3cd3x2d=_0x2acd[74];switch(_0x3cd3x18){case _0x2acd[166]:_0x3cd3x2d= _0x2acd[171];break;default:_0x3cd3x2d= sequelize[_0x2acd[173]](_0x3cd3x18,{type:sequelize[_0x2acd[172]][_0x2acd[141]]})};return _0x3cd3x2d};return _0x3cd3x18}};function getConditions(_0x3cd3x2f,_0x3cd3x1b){if(!_0x3cd3x2f){return _0x2acd[140]};for(var _0x3cd3x30=_0x2acd[174],_0x3cd3x31=0;_0x3cd3x31< _0x3cd3x2f[_0x2acd[175]][_0x2acd[77]];_0x3cd3x31++){_0x3cd3x31> 0&& (_0x3cd3x30+= _0x2acd[142]+ _0x3cd3x2f[_0x2acd[176]]+ _0x2acd[142]);if(_0x3cd3x2f[_0x2acd[175]][_0x3cd3x31][_0x2acd[138]]){_0x3cd3x30+= getConditions(_0x3cd3x2f[_0x2acd[175]][_0x3cd3x31][_0x2acd[138]],_0x3cd3x1b)}else {_0x3cd3x30+= _[_0x2acd[177]](_0x3cd3x1b,_0x3cd3x2f[_0x2acd[175]][_0x3cd3x31][_0x2acd[115]])?_0x2acd[116]+ _0x3cd3x2f[_0x2acd[175]][_0x3cd3x31][_0x2acd[115]]+ _0x2acd[116]:_0x3cd3x2f[_0x2acd[175]][_0x3cd3x31][_0x2acd[115]];switch(_0x3cd3x2f[_0x2acd[175]][_0x3cd3x31][_0x2acd[179]]){case _0x2acd[178]:;case _0x2acd[180]:_0x3cd3x30+= _0x2acd[142]+ _0x3cd3x2f[_0x2acd[175]][_0x3cd3x31][_0x2acd[179]];break;case _0x2acd[182]:_0x3cd3x30+= _0x2acd[181];break;case _0x2acd[184]:_0x3cd3x30+= _0x2acd[183];break;default:_0x3cd3x30+= _0x2acd[142]+ _0x3cd3x2f[_0x2acd[175]][_0x3cd3x31][_0x2acd[179]]+ _0x2acd[142]+ _0x3cd3x2f[_0x2acd[175]][_0x3cd3x31][_0x2acd[185]]+ _0x2acd[74]}}};return _0x3cd3x30+ _0x2acd[81]} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var User = require('../models').User; +var Promise = require('bluebird'); +var Util = require('../config/util'); +var sequelize = require('../models').sequelize; + +function getTable(table) { + var tableModel; + switch (table) { + case 'user_has_voice_queues': + tableModel = require('../models').UserHasVoiceQueue; + break; + case 'report_tdial': + case 'report_tdial_history': + tableModel = require('../models').ReportTigerDial; + break; + case 'report_agent': + case 'report_agent_history': + tableModel = require('../models').history.ReportAgentHistory; + break; + case 'report_mail_session': + case 'report_mail_session_history': + tableModel = require('../models').ReportMailSession; + break; + case 'report_queue': + case 'report_queue_history': + tableModel = require('../models').history.ReportQueueHistory; + break; + case 'report_chat_session': + case 'report_chat_session_history': + tableModel = require('../models').history.ReportChatSessionHistory; + break; + case 'report_call': + case 'report_call_history': + tableModel = require('../models').history.ReportCallHistory; + break; + case 'report_member': + case 'report_member_history': + tableModel = require('../models').history.ReportMemberHistory; + break; + case 'report_integration': + case 'report_integration_history': + tableModel = require('../models').history.ReportIntegrationHistory; + break; + case 'report_sms_session': + case 'report_sms_session_history': + tableModel = require('../models').history.ReportSmsSessionHistory; + break; + case 'cm_contacts': + tableModel = require('../models').Contact; + break; + case 'voice_recordings': + tableModel = require('../models').VoiceRecording; + break; + case 'report_square': + case 'report_square_history': + tableModel = require('../models').history.ReportSquareHistory; + break; + case 'report_square_details': + case 'report_square_details_history': + tableModel = require('../models').history.ReportSquareDetailHistory; + break; + case 'users': + tableModel = require('../models').User; + break; + case 'report_fax_session': + case 'report_fax_session_history': + tableModel = require('../models').history.ReportFaxSessionHistory; + break; + case 'mail_rooms': + tableModel = require('../models').MailRoom; + break; + case 'mail_messages': + tableModel = require('../models').MailMessage; + break; + case 'fax_rooms': + tableModel = require('../models').FaxRoom; + break; + case 'fax_messages': + tableModel = require('../models').FaxMessage; + break; + case 'chat_rooms': + tableModel = require('../models').ChatRoom; + break; + case 'chat_messages': + tableModel = require('../models').ChatMessage; + break; + case 'sms_rooms': + tableModel = require('../models').SmsRoom; + break; + case 'sms_messages': + tableModel = require('../models').SmsMessage; + break; + case 'openchannel_rooms': + tableModel = require('../models').OpenchannelRoom; + break; + case 'openchannel_messages': + tableModel = require('../models').OpenchannelMessage; + break; + default: + } + return tableModel; +} + +exports.getTable = getTable; + +exports.buildFilter = function(reqUser) { + return function(table) { + switch (reqUser.role) { + case 'user': + var filter = ''; + var checkTable = table.replace('_history', ''); + + switch (checkTable) { + case 'report_mail_session': + var _mailQueues; + return User + .findById(reqUser.id, { + attributes: ['id'] + }) + .then(Util.getMailQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(queues) { + var users = []; + _mailQueues = _.map(queues.rows, 'id'); + queues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return users; + }) + .then(function(agents) { + if (_mailQueues.length && agents.length) { + filter = '(queue IN (' + _mailQueues.join(",") + ')'; + filter += ' OR memberid IN (\'' + agents.join("','") + '\'))'; + } else if (_mailQueues.length) { + filter = 'queue IN (' + _mailQueues.join(",") + ')'; + } else { + filter = 'empty'; + } + console.log('==== USER FILTER ====', filter); + return filter; + }) + case 'report_member': + var _voiceQueues; + return User + .findById(reqUser.id, { + attributes: ['id'] + }) + .then(Util.getVoiceQueuesIdByUser({}, { + attributes: ['name'], + include: [{ + raw: true, + model: User, + attributes: ['name'] + }] + })) + .then(function(queues) { + var users = []; + queues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'name')); + }); + return users; + }) + .then(function(agents) { + if (agents.length) { + filter = 'membername IN (\'' + agents.join("','") + '\')'; + } else { + filter = 'empty'; + } + console.log('==== USER FILTER ====', filter); + return filter; + }) + case 'report_agent': + case 'report_queue': + return User + .findById(reqUser.id, { + attributes: ['id'] + }) + .then(Util.getVoiceQueuesIdByUser()) + .then(function(voiceQueues) { + if (voiceQueues.rows.length) { + voiceQueues = _.map(voiceQueues.rows, 'name'); + filter = 'queue IN (\'' + voiceQueues.join("','") + '\')'; + } else { + filter = 'empty'; + } + console.log('==== USER FILTER ====', filter); + return filter; + }) + case 'report_chat_session': + var _chatQueues; + return User + .findById(reqUser.id, { + attributes: ['id'] + }) + .then(Util.getChatQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(queues) { + var users = []; + _chatQueues = _.map(queues.rows, 'id'); + queues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return users; + }) + .then(function(agents) { + if (_chatQueues.length && agents.length) { + filter = '(queue IN (' + _chatQueues.join(",") + ')'; + filter += ' OR memberid IN (\'' + agents.join("','") + '\'))'; + } else if (_chatQueues.length) { + filter = 'queue IN (' + _chatQueues.join(",") + ')'; + } else { + filter = 'empty'; + } + console.log('==== USER FILTER ====', filter); + return filter; + }) + case 'report_fax_session': + var _faxQueues; + return User + .findById(reqUser.id, { + attributes: ['id'] + }) + .then(Util.getFaxQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(queues) { + var users = []; + _faxQueues = _.map(queues.rows, 'id'); + queues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return users; + }) + .then(function(agents) { + if (_faxQueues.length && agents.length) { + filter = '(queue IN (' + _faxQueues.join(",") + ')'; + filter += ' OR memberid IN (\'' + agents.join("','") + '\'))'; + } else if (_faxQueues.length) { + filter = 'queue IN (' + _faxQueues.join(",") + ')'; + } else { + filter = 'empty'; + } + console.log('==== USER FILTER ====', filter); + return filter; + }) + case 'report_sms_session': + var _smsQueues; + return User + .findById(reqUser.id, { + attributes: ['id'] + }) + .then(Util.getSmsQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(queues) { + var users = []; + _smsQueues = _.map(queues.rows, 'id'); + queues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return users; + }) + .then(function(agents) { + if (_smsQueues.length && agents.length) { + filter = '(queue IN (' + _smsQueues.join(",") + ')'; + filter += ' OR memberid IN (\'' + agents.join("','") + '\'))'; + } else if (_smsQueues.length) { + filter = 'queue IN (' + _smsQueues.join(",") + ')'; + } else { + filter = 'empty'; + } + console.log('==== USER FILTER ====', filter); + return filter; + }) + case 'report_openchannel_session': + var _openchannelQueues; + return User + .findById(reqUser.id, { + attributes: ['id'] + }) + .then(Util.getOpenchannelQueuesIdByUser({}, { + attributes: ['id'], + include: [{ + raw: true, + model: User, + attributes: ['id'] + }] + })) + .then(function(queues) { + var users = []; + _openchannelQueues = _.map(queues.rows, 'id'); + queues.rows.forEach(function(queue) { + users = _.union(users, _.map(queue.Users, 'id')); + }); + return users; + }) + .then(function(agents) { + if (_openchannelQueues.length && agents.length) { + filter = '(queue IN (' + _openchannelQueues.join(",") + ')'; + filter += ' OR memberid IN (\'' + agents.join("','") + '\'))'; + } else if (_openchannelQueues.length) { + filter = 'queue IN (' + _openchannelQueues.join(",") + ')'; + } else { + filter = 'empty'; + } + console.log('==== USER FILTER ====', filter); + return filter; + }) + case 'report_integration': + case 'report_call': + return Promise + .all([]) + .then(function() { + return null; + }) + default: + return Promise + .all([]) + .then(function() { + return null; + }) + } + break; + default: + return Promise + .all([]) + .then(function() { + return null; + }) + } + } +} + +exports.buildQuery = function(query) { + return function(userFilter, report) { + var tableModel = getTable(report.table); + return tableModel + .describe() + .then(function(tableFields) { + var _tableFields = _.keys(tableFields); + var fields = [], + groupBy = [], + orderBy = []; + _.forEach(report.Fields, function(elem) { + if (!elem.MetricId && !elem.custom) { + elem.field = '`' + elem.field + '`'; + } + var field = ''; + if (elem.function) { + switch (elem.function) { + case 'COUNT DISTINCT': + field = util.format('COUNT(DISTINCT %s)', elem.field); + break; + case 'GROUP_CONCAT ASC': + field = util.format('GROUP_CONCAT(%s ORDER BY %s ASC)', elem.field, elem.field); + break; + case 'GROUP_CONCAT DESC': + field = util.format('GROUP_CONCAT(%s ORDER BY %s DESC)', elem.field, elem.field); + break; + default: + field = util.format('%s(%s)', elem.function, elem.field); + } + } else { + field = elem.field; + } + if (field.indexOf('DATE(') === 0) { + field = util.format('CAST(%s AS char)', field); //same cast as the previous switch in case of custom field with DATE function + } + if (elem.format) { + switch (elem.format) { + case 'DATE': + field = util.format('CAST(%s(%s) AS char)', elem.format, field); //CAST return the date as string instead of as a Date object, so the latter processing will not convert it in the standard choosen format + break; + default: + field = util.format('%s(%s)', elem.format, field); + } + + } + fields.push(util.format('%s AS \'%s\'', field, elem.alias)); + if (elem.groupBy) { + groupBy.push(field); + } + if (elem.orderBy) { + orderBy.push(util.format('%s %s', field, elem.orderBy)); + } + }); + + var conditions = report.conditions ? getConditions(JSON.parse(report.conditions).group, _tableFields) : '()'; + var resultQuery = 'SELECT'; + // query += fields.length ? ' ' + fields.join(',') : ' *';//right if you want to select all fields also + resultQuery += ' ' + fields.join(','); //generate a wrong query if there isn' t any field + switch (report.table) { + case 'report_mail_session_history': + report.table = report.table.replace('_history', ''); + break; + default: + } + resultQuery += ' FROM ' + report.table; + resultQuery += conditions !== '()' ? ' WHERE ' + conditions : ''; + var startDate, endDate, startTime, endTime; + var otherConditions = []; + if (query) { + _.forOwn(query, function(value, key) { + switch (key) { + case 'startDate': + startDate = value; + break; + case 'endDate': + endDate = value; + break; + case 'startTime': + startTime = value; + break; + case 'endTime': + endTime = value; + break; + case 'offset': + case 'limit': + break; + default: + var column = _.find(report.Fields, { + alias: key + }); + if (column) { + otherConditions.push(column.field + ' LIKE \'%' + value + '%\''); + } else { + otherConditions.push(key + ' LIKE \'%' + value + '%\''); + } + } + }); + } + var fieldFormat = 'DATE_FORMAT(createdAt,\'%Y-%m-%d %H:%i\')'; + console.log(startDate, endDate, startTime, endTime); + if (startDate && endDate) { + if (startDate === endDate) { + if (startTime || endTime) { + console.log(startDate, endDate, startTime, endTime); + otherConditions.push(util.format(' (%s BETWEEN \'%s\' AND \'%s\')', fieldFormat, startDate + (startTime ? ' ' + startTime : ' 00:00'), endDate + (endTime ? ' ' + endTime : + ' 23:59'))); + } else { + otherConditions.push(util.format(' %s = \'%s\'', fieldFormat, startDate)); + } + } else { + otherConditions.push(util.format(' (%s BETWEEN \'%s\' AND \'%s\')', fieldFormat, startDate + (startTime ? ' ' + startTime : ' 00:00'), endDate + (endTime ? ' ' + endTime : ' 23:59'))); + } + } else if (startDate) { + otherConditions.push(util.format(' %s >= \'%s\')', fieldFormat, startDate + (startTime ? ' ' + startTime : ' 00:00'))); + } else if (endDate) { + otherConditions.push(util.format(' %s <= \'%s\')', fieldFormat, endDate + (endTime ? ' ' + endTime : ' 23:59'))); + } + if (otherConditions.length) { + resultQuery += ((conditions !== '()') ? ' AND ' : ' WHERE ') + otherConditions.join(' AND '); + } + + + if (userFilter) { + if (userFilter === 'empty') { + console.log(' ==== RESULTING QUERY ===='); + console.log('NO SUFFICIENT PERMISSIONS'); + console.log(' ========================='); + return 'permission'; + } + resultQuery += ((conditions !== '()' || otherConditions.length) ? ' AND ' : ' WHERE ') + userFilter; + } + resultQuery += groupBy.length ? ' GROUP BY ' + groupBy.join(',') : ''; + resultQuery += orderBy.length ? ' ORDER BY ' + orderBy.join(',') : ''; + + console.log(' ==== RESULTING QUERY ===='); + console.log(resultQuery); + console.log(' ========================='); + return resultQuery; + }) + } +} + +exports.checkQuery = function() { + return function(query) { + if (query) { + var result = ''; + switch (query) { + case 'permission': + result = 'No sufficient queue permissions for the user'; + break; + default: + result = sequelize.query(query, { + type: sequelize.QueryTypes.SELECT + }); + } + return result; + } + return query; + } +} + +function getConditions(group, tableFields) { + if (!group) return '()'; + for (var str = '(', i = 0; i < group.rules.length; i++) { + i > 0 && (str += ' ' + group.operator + ' '); + if (group.rules[i].group) { + str += getConditions(group.rules[i].group, tableFields); + } else { + str += _.includes(tableFields, group.rules[i].field) ? '`' + group.rules[i].field + '`' : group.rules[i].field; + switch (group.rules[i].condition) { + case 'IS NULL': + case 'IS NOT NULL': + str += " " + group.rules[i].condition; + break; + case 'IS EMPTY': + str += " = ''"; + break; + case 'IS NOT EMPTY': + str += " != ''"; + break; + default: + str += " " + group.rules[i].condition + " " + group.rules[i].value + ""; + } + } + } + return str + ')'; +} diff --git a/server/utils/report_extraction.js b/server/utils/report_extraction.js index 8782cfb..7e1bf00 100644 --- a/server/utils/report_extraction.js +++ b/server/utils/report_extraction.js @@ -1 +1,299 @@ -var _0x4c97=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x74\x6F\x2D\x63\x73\x76","\x70\x64\x66\x6D\x61\x6B\x65","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x45\x78\x74\x72\x61\x63\x74\x65\x64\x52\x65\x70\x6F\x72\x74","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x4C\x69\x63\x65\x6E\x73\x65","\x53\x65\x74\x74\x69\x6E\x67","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x66\x73","\x6D\x6F\x6D\x65\x6E\x74","\x62\x6C\x75\x65\x62\x69\x72\x64","\x65\x6E\x63\x6F\x64\x65","\x66\x69\x6C\x65\x2D\x62\x61\x73\x65\x36\x34","\x70\x72\x6F\x6D\x69\x73\x69\x66\x79","\x73\x69\x6D\x70\x6C\x65\x2D\x72\x61\x6E\x64\x6F\x6D","\x70\x61\x74\x68","\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x2E\x2F\x72\x65\x70\x6F\x72\x74\x5F\x62\x75\x69\x6C\x64","\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2F\x6C\x69\x63\x65\x6E\x73\x65\x2E\x73\x65\x72\x76\x69\x63\x65","\x66\x6F\x6E\x74\x73","\x52\x6F\x62\x6F\x74\x6F\x2D\x52\x65\x67\x75\x6C\x61\x72\x2E\x74\x74\x66","\x6A\x6F\x69\x6E","\x52\x6F\x62\x6F\x74\x6F\x2D\x4D\x65\x64\x69\x75\x6D\x2E\x74\x74\x66","\x52\x6F\x62\x6F\x74\x6F\x2D\x49\x74\x61\x6C\x69\x63\x2E\x74\x74\x66","\x6D\x65\x73\x73\x61\x67\x65","\x73\x74\x69\x63\x6B\x79\x3A\x62\x61\x6C\x61\x6E\x63\x65","\x72\x65\x70\x6F\x72\x74","\x71\x75\x65\x72\x79","\x65\x78\x74\x72\x61\x63\x74\x65\x64\x49\x64","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x74\x79\x70\x65","\x75\x73\x65\x72","\x6F\x6E","\x6C\x6F\x67","\x71\x75\x65\x72\x79\x20\x65\x72\x72\x6F\x72","\x63\x61\x74\x63\x68","\x69\x73\x41\x72\x72\x61\x79","\x6C\x65\x6E\x67\x74\x68","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D\x3A\x73\x73","\x66\x6F\x72\x6D\x61\x74","\x66\x6F\x72\x4F\x77\x6E","\x66\x6F\x72\x45\x61\x63\x68","\x6C\x69\x63\x65\x6E\x73\x65","\x64\x61\x74\x61\x31","\x64\x65\x63\x72\x79\x70\x74","\x70\x61\x72\x73\x65","\x64\x65\x66\x61\x75\x6C\x74\x4C\x6F\x67\x69\x6E\x4C\x6F\x67\x6F","\x6C\x6F\x67\x69\x6E\x4C\x6F\x67\x6F","\x63\x75\x73\x74\x6F\x6D","\x72\x6F\x6F\x74","\x73\x65\x72\x76\x65\x72","\x66\x69\x6C\x65\x73","\x69\x6D\x61\x67\x65\x73","\x64\x65\x66\x61\x75\x6C\x74","\x6C\x6F\x67\x6F\x2D\x62\x69\x67\x2D\x70\x64\x66\x2E\x70\x6E\x67","\x70\x6F\x70","\x2E","\x73\x70\x6C\x69\x74","\x74\x68\x65\x6E","\x70\x64\x66","\x63\x73\x76","\x65\x6D\x70\x74\x79","\x71\x75\x65\x72\x79\x20\x65\x78\x74\x72\x61\x63\x74\x69\x6F\x6E\x20\x65\x72\x72\x6F\x72","\x63\x68\x65\x63\x6B\x51\x75\x65\x72\x79","\x62\x75\x69\x6C\x64\x51\x75\x65\x72\x79","\x73\x70\x72\x65\x61\x64","\x62\x75\x69\x6C\x64\x46\x69\x6C\x74\x65\x72","\x74\x61\x62\x6C\x65","\x66\x69\x6E\x64\x42\x79\x49\x64","\x6A\x70\x65\x67","\x6A\x70\x67","\x72\x65\x70\x6F\x72\x74\x5F","\x6E\x61\x6D\x65","\x5F","\x2E\x70\x64\x66","\x61\x6C\x69\x61\x73","\x74\x61\x62\x6C\x65\x48\x65\x61\x64\x65\x72","\x70\x75\x73\x68","","\x68\x65\x61\x64\x65\x72","\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6F\x6E","\x23\x38\x32\x38\x36\x38\x32","\x73\x74\x61\x72\x74\x44\x61\x74\x65","\x46\x72\x6F\x6D\x3A\x20","\x6C\x61\x62\x65\x6C","\x59\x59\x59\x59\x2D\x4D\x4D\x2D\x44\x44\x20\x48\x48\x3A\x6D\x6D","\x64\x61\x79","\x73\x74\x61\x72\x74\x4F\x66","\x20\x20\x54\x6F\x3A\x20","\x65\x6E\x64\x4F\x66","\x65\x6E\x64\x44\x61\x74\x65","\x74\x61\x62\x6C\x65\x45\x78\x61\x6D\x70\x6C\x65","\x6C\x61\x6E\x64\x73\x63\x61\x70\x65","\x2A","\x64\x61\x74\x61\x3A\x69\x6D\x61\x67\x65\x2F","\x3B\x62\x61\x73\x65\x36\x34\x2C","\x6E\x6F\x42\x6F\x72\x64\x65\x72\x73","\x20\x6F\x66\x20","\x63\x65\x6E\x74\x65\x72","\x62\x6C\x61\x63\x6B","\x62\x72\x65\x61\x6B\x2D\x77\x6F\x72\x64","\x63\x72\x65\x61\x74\x65\x50\x64\x66\x4B\x69\x74\x44\x6F\x63\x75\x6D\x65\x6E\x74","\x72\x65\x70\x6F\x72\x74\x73","\x63\x72\x65\x61\x74\x65\x57\x72\x69\x74\x65\x53\x74\x72\x65\x61\x6D","\x65\x72\x72\x6F\x72","\x70\x64\x66\x20\x77\x72\x69\x74\x65\x20\x65\x72\x72\x6F\x72","\x66\x69\x6E\x69\x73\x68","\x63\x6F\x6D\x70\x6C\x65\x74\x65\x64","\x70\x69\x70\x65","\x65\x6E\x64","\x70\x64\x66\x20\x63\x72\x65\x61\x74\x69\x6F\x6E\x20\x65\x72\x72\x6F\x72","\x2E\x63\x73\x76","\x63\x73\x76\x20\x77\x72\x69\x74\x65\x20\x65\x72\x72\x6F\x72","\x77\x72\x69\x74\x65\x46\x69\x6C\x65","\x63\x73\x76\x20\x63\x72\x65\x61\x74\x69\x6F\x6E\x20\x65\x72\x72\x6F\x72","\x66\x69\x6E\x69\x73\x68\x65\x64","\x73\x65\x6E\x64","\x66\x69\x6E\x61\x6C\x6C\x79","\x2D\x2D\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x65\x78\x74\x72\x61\x63\x74\x69\x6E\x67\x20\x72\x65\x70\x6F\x72\x74\x20\x77\x69\x74\x68\x20\x65\x72\x72\x6F\x72\x20\x3A\x20","\x2D\x2D\x46\x69\x6E\x69\x73\x68\x65\x64\x20\x65\x78\x74\x72\x61\x63\x74\x69\x6E\x67\x20\x72\x65\x70\x6F\x72\x74","\x75\x70\x64\x61\x74\x65"];_0x4c97[0];var csv=require(_0x4c97[1]);var PdfMake=require(_0x4c97[2]);var _=require(_0x4c97[3]);var util=require(_0x4c97[4]);var ExtractedReport=require(_0x4c97[6])[_0x4c97[5]];var License=require(_0x4c97[6])[_0x4c97[7]];var Setting=require(_0x4c97[6])[_0x4c97[8]];var sequelize=require(_0x4c97[6])[_0x4c97[9]];var fs=require(_0x4c97[10]);var moment=require(_0x4c97[11]);var Promise=require(_0x4c97[12]);var base64=Promise[_0x4c97[15]](require(_0x4c97[14])[_0x4c97[13]]);var sr=require(_0x4c97[16]);var path=require(_0x4c97[17]);var config=require(_0x4c97[18]);var reportBuildUtils=require(_0x4c97[19]);var license=require(_0x4c97[20]);var fonts={Roboto:{normal:path[_0x4c97[23]](config[_0x4c97[21]],_0x4c97[22]),bold:path[_0x4c97[23]](config[_0x4c97[21]],_0x4c97[24]),italics:path[_0x4c97[23]](config[_0x4c97[21]],_0x4c97[25]),bolditalics:path[_0x4c97[23]](config[_0x4c97[21]],_0x4c97[25])}};process[_0x4c97[34]](_0x4c97[26],function(_0xe4c9x13){if(_0xe4c9x13!== _0x4c97[27]){general(_0xe4c9x13[_0x4c97[28]],_0xe4c9x13[_0x4c97[29]],_0xe4c9x13[_0x4c97[30]],_0xe4c9x13[_0x4c97[32]][_0x4c97[31]](),_0xe4c9x13[_0x4c97[33]])}});function general(_0xe4c9x15,_0xe4c9x16,_0xe4c9x17,_0xe4c9x18,_0xe4c9x19){extract(_0xe4c9x15,_0xe4c9x16,_0xe4c9x17,_0xe4c9x18,_0xe4c9x19)}function extract(_0xe4c9x15,_0xe4c9x1b,_0xe4c9x17,_0xe4c9x18,_0xe4c9x19){var _0xe4c9x1c,_0xe4c9x1d;return License[_0x4c97[70]](1)[_0x4c97[60]](function(_0xe4c9x23){_0xe4c9x1c= _0xe4c9x23;return Setting[_0x4c97[70]](1)})[_0x4c97[60]](function(_0xe4c9x28){_0xe4c9x1d= _0xe4c9x28;return _0xe4c9x15[_0x4c97[69]]})[_0x4c97[60]](reportBuildUtils[_0x4c97[68]](_0xe4c9x19))[_0x4c97[60]](function(_0xe4c9x27){return [_0xe4c9x27,_0xe4c9x15]})[_0x4c97[67]](reportBuildUtils[_0x4c97[66]](_0xe4c9x1b))[_0x4c97[60]](reportBuildUtils[_0x4c97[65]]())[_0x4c97[60]](function(_0xe4c9x1f){if(_0xe4c9x1f){if(_[_0x4c97[38]](_0xe4c9x1f)){if(_0xe4c9x1f[_0x4c97[39]]){_[_0x4c97[43]](_0xe4c9x1f,function(_0xe4c9x20){_[_0x4c97[42]](_0xe4c9x20,function(_0xe4c9x21,_0xe4c9x22){if(_0xe4c9x21 instanceof Date){_0xe4c9x20[_0xe4c9x22]= moment(_0xe4c9x21)[_0x4c97[41]](_0x4c97[40]).toString()}})});switch(_0xe4c9x18){case _0x4c97[61]:var _0xe4c9x23=_0xe4c9x1c?JSON[_0x4c97[47]](license[_0x4c97[46]](_0xe4c9x1c[_0x4c97[44]],_0xe4c9x1c[_0x4c97[45]])):null;var _0xe4c9x24=(_0xe4c9x1d&& !_0xe4c9x1d[_0x4c97[48]]&& _0xe4c9x1d[_0x4c97[49]]&& _0xe4c9x23&& _0xe4c9x23[_0x4c97[50]])?path[_0x4c97[23]](config[_0x4c97[51]],_0x4c97[52],_0x4c97[53],_0x4c97[54],_0xe4c9x1d[_0x4c97[49]]):path[_0x4c97[23]](config[_0x4c97[51]],_0x4c97[52],_0x4c97[53],_0x4c97[54],_0x4c97[55],_0x4c97[56]);return base64(_0xe4c9x24)[_0x4c97[60]](function(_0xe4c9x25){var _0xe4c9x26=_0xe4c9x24[_0x4c97[59]](_0x4c97[58])[_0x4c97[57]]();return createPdf(_0xe4c9x1f,_0xe4c9x15,_0xe4c9x1b,_0xe4c9x17,_0xe4c9x25,_0xe4c9x26)});case _0x4c97[62]:return createCsv(_0xe4c9x1f,_0xe4c9x15,_0xe4c9x1b,_0xe4c9x17);default:return createCsv(_0xe4c9x1f,_0xe4c9x15,_0xe4c9x1b,_0xe4c9x17)}}else {return updateExtracted(_0xe4c9x17,null,_0x4c97[63])}}else {return updateExtracted(_0xe4c9x17,null,_0xe4c9x1f)}}else {return updateExtracted(_0xe4c9x17,null,_0x4c97[64])}})[_0x4c97[37]](function(_0xe4c9x1e){console[_0x4c97[35]](_0xe4c9x1e);return updateExtracted(_0xe4c9x17,null,_0x4c97[36])})}function createPdf(_0xe4c9x1f,_0xe4c9x15,_0xe4c9x1b,_0xe4c9x2a,_0xe4c9x2b,_0xe4c9x26){switch(_0xe4c9x26){case _0x4c97[72]:_0xe4c9x26= _0x4c97[71];break;default:};var _0xe4c9x2c=sr({length:20,prefix:_0x4c97[73]+ _0xe4c9x15[_0x4c97[74]]+ _0x4c97[75],suffix:_0x4c97[76]});var _0xe4c9x2d=[];_[_0x4c97[43]](_0xe4c9x15.Fields,function(_0xe4c9x2e){_0xe4c9x2d[_0x4c97[79]]({text:String(_0xe4c9x2e[_0x4c97[77]]),style:_0x4c97[78]})});var _0xe4c9x2f=[_0xe4c9x2d];_[_0x4c97[43]](_0xe4c9x1f,function(_0xe4c9x2e){var _0xe4c9x20=[];_[_0x4c97[42]](_0xe4c9x2e,function(_0xe4c9x30,_0xe4c9x22){_0xe4c9x20[_0x4c97[79]](_0xe4c9x30?String(_0xe4c9x30):_0x4c97[80])});_0xe4c9x2f[_0x4c97[79]](_0xe4c9x20)});var _0xe4c9x31=[{text:_0xe4c9x15[_0x4c97[74]],style:_0x4c97[81]}];if(_0xe4c9x15[_0x4c97[82]]){_0xe4c9x31[_0x4c97[79]]({text:_0xe4c9x15[_0x4c97[82]]|| _0x4c97[80],color:_0x4c97[83],margin:[0,0,0,5]})};if(_0xe4c9x1b[_0x4c97[84]]){_0xe4c9x31[_0x4c97[79]]({text:[{text:_0x4c97[85],style:_0x4c97[86]},moment(_0xe4c9x1b[_0x4c97[84]])[_0x4c97[89]](_0x4c97[88])[_0x4c97[41]](_0x4c97[87]).toString(),{text:_0x4c97[90],style:_0x4c97[86]},moment(_0xe4c9x1b[_0x4c97[92]]|| _0xe4c9x1b[_0x4c97[84]])[_0x4c97[91]](_0x4c97[88])[_0x4c97[41]](_0x4c97[87]).toString()]})};var _0xe4c9x32=[];_0xe4c9x32[_0x4c97[79]]({style:_0x4c97[93],table:{headerRows:1,dontBreakRows:true,body:_0xe4c9x2f}});var _0xe4c9x33={pageOrientation:_0x4c97[94],pageMargins:[15,90,15,25],header:function(){return {margin:[15,15,0,0],columns:[{table:{widths:[100,_0x4c97[95]],body:[[{image:_0x4c97[96]+ _0xe4c9x26+ _0x4c97[97]+ _0xe4c9x2b,fit:[100,60]},_0xe4c9x31]]},layout:_0x4c97[98]}]}},content:_0xe4c9x32,footer:function(_0xe4c9x34,_0xe4c9x35){return {columns:[{text:_0xe4c9x34.toString()+ _0x4c97[99]+ _0xe4c9x35,alignment:_0x4c97[100]}]}},styles:{header:{fontSize:18,bold:true,margin:[0,0,0,5]},tableExample:{margin:[0,0,0,5],fontSize:8},tableHeader:{bold:true,fontSize:8,color:_0x4c97[101],wordWrap:_0x4c97[102]},label:{bold:true,color:_0x4c97[101]}}};var _0xe4c9x36= new PdfMake(fonts);var _0xe4c9x37=_0xe4c9x36[_0x4c97[103]](_0xe4c9x33);if(_0xe4c9x37){var _0xe4c9x38=fs[_0x4c97[105]](config[_0x4c97[104]]+ _0xe4c9x2c);_0xe4c9x38[_0x4c97[34]](_0x4c97[106],function(){return updateExtracted(_0xe4c9x2a,null,_0x4c97[107])});_0xe4c9x38[_0x4c97[34]](_0x4c97[108],function(){return updateExtracted(_0xe4c9x2a,_0xe4c9x2c,_0x4c97[109])});_0xe4c9x37[_0x4c97[110]](_0xe4c9x38);_0xe4c9x37[_0x4c97[111]]()}else {return updateExtracted(_0xe4c9x2a,null,_0x4c97[112])}}function createCsv(_0xe4c9x1f,_0xe4c9x15,_0xe4c9x1b,_0xe4c9x2a){var _0xe4c9x2c=sr({length:20,prefix:_0x4c97[73]+ _0xe4c9x15[_0x4c97[74]]+ _0x4c97[75],suffix:_0x4c97[113]});var _0xe4c9x3a=csv(_0xe4c9x1f);if(_0xe4c9x3a){fs[_0x4c97[115]](config[_0x4c97[104]]+ _0xe4c9x2c,_0xe4c9x3a,function(_0xe4c9x1e){if(_0xe4c9x1e){console[_0x4c97[35]](_0xe4c9x1e);return updateExtracted(_0xe4c9x2a,null,_0x4c97[114])}else {return updateExtracted(_0xe4c9x2a,_0xe4c9x2c,_0x4c97[109])}})}else {return updateExtracted(_0xe4c9x2a,null,_0x4c97[116])}}function updateExtracted(_0xe4c9x2a,_0xe4c9x2c,_0xe4c9x3c){return ExtractedReport[_0x4c97[122]]({status:_0xe4c9x3c,savename:_0xe4c9x2c},{where:{id:_0xe4c9x2a}})[_0x4c97[60]](function(){console[_0x4c97[35]](_0x4c97[121])})[_0x4c97[37]](function(_0xe4c9x1e){console[_0x4c97[35]](_0x4c97[120]+ _0xe4c9x1e)})[_0x4c97[119]](function(){process[_0x4c97[118]]({message:_0x4c97[117],status:_0xe4c9x3c})})} \ No newline at end of file +'use strict'; + +var csv = require('to-csv'); +var PdfMake = require('pdfmake'); +var _ = require('lodash'); +var util = require('util'); +var ExtractedReport = require('../models').ExtractedReport; +var License = require('../models').License; +var Setting = require('../models').Setting; +var sequelize = require('../models').sequelize; +var fs = require('fs'); +var moment = require('moment'); +var Promise = require('bluebird'); +var base64 = Promise.promisify(require('file-base64').encode); +var sr = require('simple-random'); +var path = require('path'); +var config = require('../config/environment'); +var reportBuildUtils = require('./report_build'); +var license = require('../config/license/license.service'); + +var fonts = { + Roboto: { + normal: path.join(config.fonts, 'Roboto-Regular.ttf'), + bold: path.join(config.fonts, 'Roboto-Medium.ttf'), + italics: path.join(config.fonts, 'Roboto-Italic.ttf'), + bolditalics: path.join(config.fonts, 'Roboto-Italic.ttf') + } +}; + +process.on('message', function(data) { + if (data !== 'sticky:balance') { + general(data.report, data.query, data.extractedId, data.type.toLowerCase(), data.user) + } +}); + +function general(report, query, extractedId, type, user) { + // console.log('--general function, calling extract function...'); + extract(report, query, extractedId, type, user); +} + +function extract(report, dataQuery, extractedId, type, user) { + // console.log('--extract function, building query...'); + var _license, _settings; + return License + .findById(1) + .then(function(myLicense) { + _license = myLicense; + return Setting + .findById(1); + }) + .then(function(settings) { + _settings = settings; + return report.table; + }) + .then(reportBuildUtils.buildFilter(user)) + .then(function(filter) { + return [filter, report]; + }) + .spread(reportBuildUtils.buildQuery(dataQuery)) + .then(reportBuildUtils.checkQuery()) + .then(function(res) { + if (res) { + if (_.isArray(res)) { + if (res.length) { + _.forEach(res, function(row) { + _.forOwn(row, function(property, key) { + if (property instanceof Date) { + row[key] = moment(property).format("YYYY-MM-DD HH:mm:ss").toString(); + } + }); + }); + // console.log('--report extracted, creating output as: ' + type); + switch (type) { + case 'pdf': + var myLicense = _license ? JSON.parse(license.decrypt(_license.license, _license.data1)) : null; + var imagePath = (_settings && !_settings.defaultLoginLogo && _settings.loginLogo && myLicense && myLicense.custom) ? path.join(config.root, 'server', 'files', 'images', _settings.loginLogo) : + path.join(config.root, 'server', 'files', 'images', 'default', 'logo-big-pdf.png'); + return base64(imagePath) + .then(function(base64String) { + var extension = imagePath.split('.').pop(); + return createPdf(res, report, dataQuery, extractedId, base64String, extension); + }) + case 'csv': + return createCsv(res, report, dataQuery, extractedId); + default: + return createCsv(res, report, dataQuery, extractedId); + } + } else { + return updateExtracted(extractedId, null, 'empty'); + } + } else { + return updateExtracted(extractedId, null, res); + } + } else { + // console.log('--error executing the report query'); + return updateExtracted(extractedId, null, 'query extraction error'); + + } + }) + .catch(function(err) { + console.log(err); + return updateExtracted(extractedId, null, 'query error'); + }); +} + +function createPdf(res, report, dataQuery, id, logo, extension) { + switch (extension) { + case 'jpg': + extension = 'jpeg'; + break; + default: + } + // console.log('--pdf function, creating pdf output...'); + var filename = sr({ + length: 20, + prefix: "report_" + report.name + '_', + suffix: ".pdf" + }); + var tableHeader = []; + // width = 100 / report.Fields.length, + // widths = []; + _.forEach(report.Fields, function(elem) { + tableHeader.push({ + text: String(elem.alias), + style: 'tableHeader' + }); + // widths.push(width + '%'); + }); + // console.log(widths); + var tableBody = [tableHeader]; + _.forEach(res, function(elem) { + var row = []; + _.forOwn(elem, function(value, key) { + row.push(value ? String(value) : ''); + }); + tableBody.push(row); + }); + + var headerColumns = [{ + text: report.name, + style: 'header', + }]; + if (report.description) { + headerColumns.push({ + text: report.description || '', + color: '#828682', + margin: [0, 0, 0, 5] + }); + } + if (dataQuery.startDate) { + headerColumns.push({ + text: [{ + text: 'From: ', + style: 'label' + }, + moment(dataQuery.startDate).startOf('day').format("YYYY-MM-DD HH:mm").toString(), { + text: ' To: ', + style: 'label' + }, + moment(dataQuery.endDate || dataQuery.startDate).endOf('day').format("YYYY-MM-DD HH:mm").toString() + ] + }); + } + var content = []; + content.push({ + style: 'tableExample', + table: { + headerRows: 1, + dontBreakRows: true, + // widths: widths, + // keepWithHeaderRows: 1, + // dontBreakRows: true, + body: tableBody, + + } + }); + var pdfContent = { + pageOrientation: 'landscape', + pageMargins: [15, 90, 15, 25], + header: function() { + return { + margin: [15, 15, 0, 0], + columns: [{ + table: { + widths: [100, '*'], + body: [ + [{ + image: 'data:image/' + extension + ';base64,' + logo, + fit: [100, 60] + }, + headerColumns + ] + ] + }, + layout: 'noBorders' + }] + }; + }, + content: content, + footer: function(currentPage, pageCount) { + return { + columns: [{ + text: currentPage.toString() + ' of ' + pageCount, + alignment: 'center' + }] + } + }, + styles: { + header: { + fontSize: 18, + bold: true, + margin: [0, 0, 0, 5] + }, + tableExample: { + margin: [0, 0, 0, 5], + fontSize: 8, + }, + tableHeader: { + bold: true, + fontSize: 8, + color: 'black', + wordWrap: 'break-word' + }, + label: { + bold: true, + color: 'black' + } + } + }; + var printer = new PdfMake(fonts); + var pdfDoc = printer.createPdfKitDocument(pdfContent); + if (pdfDoc) { + // pdfDoc is a stream so you can pipe it to the file system + var writeStream = fs.createWriteStream(config.reports + filename); + writeStream.on('error', function() { + // console.log('--pdf write error'); + return updateExtracted(id, null, 'pdf write error') + }); + writeStream.on('finish', function() { + // console.log('--pdf write finished'); + return updateExtracted(id, filename, 'completed') + }); + pdfDoc.pipe(writeStream); + pdfDoc.end(); + } else { + // console.log('--pdf creation error'); + return updateExtracted(id, null, 'pdf creation error') + } +} + +function createCsv(res, report, dataQuery, id) { + // console.log(res); + // console.log('--csv function, creating pdf output...'); + var filename = sr({ + length: 20, + prefix: "report_" + report.name + '_', + suffix: ".csv" + }); + var csv_report = csv(res); + if (csv_report) { + fs.writeFile(config.reports + filename, csv_report, function(err) { + if (err) { + // console.log('--csv write error'); + console.log(err); + return updateExtracted(id, null, 'csv write error') + } else { + // console.log('--csv write completed'); + return updateExtracted(id, filename, 'completed') + } + }); + } else { + // console.log('--csv creation error'); + return updateExtracted(id, null, 'csv creation error') + } +} + +function updateExtracted(id, filename, status) { + // console.log('--updating the extracted report db row..'); + return ExtractedReport.update({ + status: status, + savename: filename + }, { + where: { + id: id + } + }) + .then(function() { + console.log('--Finished extracting report'); + }) + .catch(function(err) { + console.log('--Finished extracting report with error : ' + err); + }) + .finally(function() { + process.send({ + message: 'finished', + status: status + }); + }); +} diff --git a/server/utils/voice_extension.js b/server/utils/voice_extension.js index 3cf9693..6617972 100644 --- a/server/utils/voice_extension.js +++ b/server/utils/voice_extension.js @@ -1 +1,321 @@ -var _0xc951=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x6C\x6F\x64\x61\x73\x68","\x75\x74\x69\x6C","\x49\x6E\x74\x65\x72\x76\x61\x6C","\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x63\x72\x65\x61\x74\x65\x41\x70\x70\x73","\x72\x6F\x75\x74\x65\x55\x70\x64\x61\x74\x65","\x69\x64","\x62\x6F\x64\x79","\x74\x68\x65\x6E","\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x73","\x69\x73\x41\x72\x72\x61\x79","\x6C\x65\x6E\x67\x74\x68","\x70\x61\x72\x61\x6D\x73","\x64\x65\x73\x74\x72\x6F\x79","\x75\x70\x64\x61\x74\x65","\x61\x6C\x6C","\x65\x78\x74\x65\x6E","\x74\x79\x70\x65","\x63\x6F\x6E\x74\x65\x78\x74","\x53\x65\x74","\x43\x44\x52\x28\x74\x79\x70\x65\x29\x3D\x25\x73","\x66\x6F\x72\x6D\x61\x74","\x6D\x65\x72\x67\x65","\x70\x75\x73\x68","\x6F\x75\x74\x62\x6F\x75\x6E\x64","\x43\x44\x52\x28\x74\x61\x67\x29\x3D\x25\x73","\x74\x61\x67","\x2D\x2D","\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x61\x70\x70","\x61\x67\x69","\x66\x69\x6E\x64","\x56\x4F\x4C\x55\x4D\x45\x28\x52\x58\x29\x3D\x30","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x49\x6E\x74\x65\x72\x76\x61\x6C\x49\x64","\x66\x69\x6C\x74\x65\x72","\x69\x6E\x74\x65\x72\x76\x61\x6C","\x6D\x61\x70","\x2A\x2C\x2A\x2C\x2A\x2C\x2A","\x6E\x61\x6D\x65","\x4E\x6F\x4F\x50","\x20\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x53\x74\x61\x72\x74","\x47\x6F\x74\x6F\x49\x66\x54\x69\x6D\x65","\x25\x73\x3F\x25\x73\x2C\x24\x7B\x45\x58\x54\x45\x4E\x7D\x2C\x25\x73\x3A\x25\x73\x2C\x24\x7B\x45\x58\x54\x45\x4E\x7D\x2C\x25\x73","\x66\x6F\x72\x45\x61\x63\x68","\x64\x69\x61\x6C","\x61\x70\x70\x64\x61\x74\x61","\x43\x41\x4C\x4C\x45\x52\x49\x44\x28\x61\x6C\x6C\x29\x3D\x25\x73","\x53\x6B\x69\x70\x70\x65\x64\x20\x43\x61\x6C\x6C\x65\x72\x49\x44\x20\x53\x65\x74","\x72\x65\x63\x6F\x72\x64","\x4D\x69\x78\x4D\x6F\x6E\x69\x74\x6F\x72","\x24\x7B\x55\x4E\x49\x51\x55\x45\x49\x44\x7D\x2E","\x72\x65\x63\x6F\x72\x64\x69\x6E\x67\x46\x6F\x72\x6D\x61\x74","\x77\x61\x76","\x2C\x61\x62","\x53\x6B\x69\x70\x70\x65\x64\x20\x4D\x69\x78\x4D\x6F\x6E\x69\x74\x6F\x72","\x71\x75\x65\x75\x65","\x61\x70\x70\x54\x79\x70\x65","\x63\x75\x73\x74\x6F\x6D","\x61\x6E\x73\x77\x65\x72","\x50\x72\x6F\x67\x72\x65\x73\x73","","\x53\x6B\x69\x70\x70\x65\x64\x20\x50\x72\x6F\x67\x72\x65\x73\x73","\x70\x6C\x61\x79\x62\x61\x63\x6B","\x41\x6E\x73\x77\x65\x72","\x53\x6B\x69\x70\x70\x65\x64\x20\x41\x6E\x73\x77\x65\x72","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x72\x6F\x75\x74\x65\x69\x64\x3D\x25\x64","\x53\x6B\x69\x70\x70\x65\x64\x20\x4F\x75\x74\x6F\x75\x6E\x64\x20\x52\x6F\x75\x74\x65\x20\x49\x64\x20\x53\x65\x74","\x6F\x75\x74\x62\x6F\x75\x6E\x64\x44\x69\x61\x6C","\x78","\x69\x6E\x63\x6C\x75\x64\x65\x73","\x58","\x53\x49\x50\x2F\x25\x73\x2F\x25\x73\x24\x7B\x45\x58\x54\x45\x4E\x3A\x25\x73\x7D\x2C\x25\x73\x2C\x25\x73\x2C\x25\x73","\x63\x75\x74\x64\x69\x67\x69\x74\x73","\x65\x78\x74\x65\x72\x6E\x61\x6C\x44\x69\x61\x6C","\x53\x49\x50\x2F\x25\x73\x2F\x25\x73\x2C\x25\x73\x2C\x25\x73\x2C\x25\x73","\x69\x6E\x74\x65\x72\x6E\x61\x6C\x44\x69\x61\x6C","\x53\x49\x50\x2F\x25\x73\x2C\x25\x73\x2C\x25\x73\x2C\x25\x73","\x2C","\x6A\x6F\x69\x6E","\x53\x74\x6F\x70\x4D\x69\x78\x4D\x6F\x6E\x69\x74\x6F\x72","\x53\x6B\x69\x70\x70\x65\x64\x20\x53\x74\x6F\x70\x4D\x69\x78\x4D\x6F\x6E\x69\x74\x6F\x72","\x20\x41\x70\x70\x6C\x69\x63\x61\x74\x69\x6F\x6E\x20\x45\x6E\x64","\x20\x63\x61\x6C\x6C\x20\x65\x6E\x64","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x48\x61\x6E\x67\x75\x70","\x66\x69\x6E\x64\x41\x6C\x6C"];_0xc951[0];var _=require(_0xc951[1]);var util=require(_0xc951[2]);var Interval=require(_0xc951[4])[_0xc951[3]];var sequelize=require(_0xc951[4])[_0xc951[5]];var VoiceExtension=require(_0xc951[4])[_0xc951[6]];exports[_0xc951[7]]= createApplications;exports[_0xc951[8]]= function(_0xefcax6,_0xefcax7){var sequelize=require(_0xc951[4])[_0xc951[5]];var VoiceExtension=require(_0xc951[4])[_0xc951[6]];if(_0xefcax6[_0xc951[10]][_0xc951[9]]){delete _0xefcax6[_0xc951[10]][_0xc951[9]]};return VoiceExtension[_0xc951[17]](_0xefcax6[_0xc951[10]],{where:{id:_0xefcax6[_0xc951[15]][_0xc951[9]]},transaction:_0xefcax7})[_0xc951[11]](function(_0xefcax8){if(_0xefcax6[_0xc951[10]][_0xc951[12]]){_0xefcax6[_0xc951[10]][_0xc951[9]]= _0xefcax6[_0xc951[15]][_0xc951[9]];return VoiceExtension[_0xc951[16]]({where:{VoiceExtensionId:_0xefcax6[_0xc951[15]][_0xc951[9]]},transaction:_0xefcax7})}})[_0xc951[11]](function(){if(_0xefcax6[_0xc951[10]][_0xc951[12]]&& Array[_0xc951[13]](_0xefcax6[_0xc951[10]].Applications)&& _0xefcax6[_0xc951[10]][_0xc951[12]][_0xc951[14]]){return _0xefcax6[_0xc951[10]]}})[_0xc951[11]](createApplications(_0xefcax6[_0xc951[10]].Applications,_0xefcax7))};function createApplications(_0xefcaxa,_0xefcax7){var Interval=require(_0xc951[4])[_0xc951[3]];var VoiceExtension=require(_0xc951[4])[_0xc951[6]];return function(_0xefcax8){if(_0xefcax8){return Interval[_0xc951[89]]()[_0xc951[11]](function(_0xefcaxb){var _0xefcaxc=2;var _0xefcaxd={exten:_0xefcax8[_0xc951[19]],type:_0xefcax8[_0xc951[20]],context:_0xefcax8[_0xc951[21]],VoiceExtensionId:_0xefcax8[_0xc951[9]]};var _0xefcaxe=[];var _0xefcaxf=8;var _0xefcax10=[],_0xefcax11=[];_0xefcax10[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[22],appdata:util[_0xc951[24]](_0xc951[23],_0xefcax8[_0xc951[20]]),priority:_0xefcaxc},_0xefcaxd));_0xefcaxc++;if(_0xefcax8[_0xc951[20]]=== _0xc951[27]){_0xefcax10[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[22],appdata:util[_0xc951[24]](_0xc951[28],_0xefcax8[_0xc951[29]]|| _0xc951[30]),priority:_0xefcaxc},_0xefcaxd));_0xefcaxc++};var _0xefcax12=_[_0xc951[34]](_0xefcaxa,function(_0xefcax13){return _0xefcax13[_0xc951[32]][_0xc951[31]]()=== _0xc951[33]});if(_0xefcax12){_0xefcax10[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[22],appdata:_0xc951[35],priority:_0xefcaxc},_0xefcaxd));_0xefcaxc++};_0xefcaxe[_0xc951[26]](VoiceExtension[_0xc951[36]](_0xefcax10,{transaction:_0xefcax7}));_0xefcaxa[_0xc951[47]](function(_0xefcax13){var _0xefcax14=[];var _0xefcax15=[];if(_0xefcax13[_0xc951[37]]){var _0xefcax16=_[_0xc951[38]](_0xefcaxb,{IntervalId:_0xefcax13[_0xc951[37]]});_0xefcax14= _0xefcax16[_0xc951[14]]?_[_0xc951[40]](_0xefcax16,_0xc951[39]):[_0xc951[41]];var _0xefcax17=_[_0xc951[34]](_0xefcaxb,{id:_0xefcax13[_0xc951[37]]});_0xefcax13[_0xc951[39]]= _0xefcax17?_0xefcax17[_0xc951[42]]:_0xc951[41]}else {_0xefcax14= [_0xefcax13[_0xc951[39]]]};_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[43],appdata:_0xefcax13[_0xc951[32]]+ _0xc951[44],priority:_0xefcaxc},_0xefcaxd));_0xefcaxc++;var _0xefcax18=_0xefcax14[_0xc951[14]];_0xefcax14[_0xc951[47]](function(_0xefcax19,_0xefcax1a){_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[45],appdata:util[_0xc951[24]](_0xc951[46],_0xefcax19,_0xefcax8[_0xc951[21]],_0xefcaxc+ (_0xefcax18- _0xefcax1a),_0xefcax8[_0xc951[21]],((_0xefcax1a+ 1)< _0xefcax18)?_0xefcaxc+ 1:_0xefcaxc+ _0xefcaxf),priority:_0xefcaxc},_0xefcaxd));_0xefcaxc++});if(_0xefcax13[_0xc951[32]][_0xc951[31]]()=== _0xc951[48]&& _0xefcax8[_0xc951[20]]=== _0xc951[27]&& _0xefcax13[_0xc951[49]][1]){_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[22],appdata:util[_0xc951[24]](_0xc951[50],_0xefcax13[_0xc951[49]][1]),priority:_0xefcaxc},_0xefcaxd))}else {_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[43],appdata:_0xc951[51],priority:_0xefcaxc},_0xefcaxd))};_0xefcaxc++;if(_0xefcax13[_0xc951[32]][_0xc951[31]]()=== _0xc951[48]&& _0xefcax8[_0xc951[52]]&& _0xefcax8[_0xc951[20]]=== _0xc951[27]){_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[53],appdata:_0xc951[54]+ (_0xefcax8[_0xc951[55]]|| _0xc951[56])+ _0xc951[57],priority:_0xefcaxc},_0xefcaxd))}else {_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[43],appdata:_0xc951[58],priority:_0xefcaxc},_0xefcaxd))};_0xefcaxc++;if(_0xefcax13[_0xc951[32]][_0xc951[31]]()=== _0xc951[59]&& _0xefcax13[_0xc951[60]]!== _0xc951[61]&& !_0xefcax13[_0xc951[62]]){_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[63],appdata:_0xc951[64],priority:_0xefcaxc},_0xefcaxd))}else {_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[43],appdata:_0xc951[65],priority:_0xefcaxc},_0xefcaxd))};_0xefcaxc++;if((_0xefcax13[_0xc951[32]][_0xc951[31]]()=== _0xc951[59]|| _0xefcax13[_0xc951[32]][_0xc951[31]]()=== _0xc951[66])&& _0xefcax13[_0xc951[60]]!== _0xc951[61]&& _0xefcax13[_0xc951[62]]){_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[67],appdata:_0xc951[64],priority:_0xefcaxc},_0xefcaxd))}else {_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[43],appdata:_0xc951[68],priority:_0xefcaxc},_0xefcaxd))};_0xefcaxc++;if(_0xefcax13[_0xc951[32]][_0xc951[31]]()=== _0xc951[48]&& _0xefcax8[_0xc951[20]]=== _0xc951[27]){_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[22],appdata:util[_0xc951[24]](_0xc951[69],_0xefcax8[_0xc951[9]]|| _0xc951[64]),priority:_0xefcaxc},_0xefcaxd))}else {_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[43],appdata:_0xc951[70],priority:_0xefcaxc},_0xefcaxd))};_0xefcaxc++;if(_0xefcax13[_0xc951[32]][_0xc951[31]]()=== _0xc951[48]&& _0xefcax13[_0xc951[60]]=== _0xc951[71]){_0xefcax13[_0xc951[49]][4]= _0xefcax13[_0xc951[49]][4]|| _0xc951[64];_0xefcax13[_0xc951[49]][4]+= (_[_0xc951[73]](_0xefcax13[_0xc951[49]][4],_0xc951[72])?_0xc951[64]:_0xc951[72])+ (_[_0xc951[73]](_0xefcax13[_0xc951[49]][4],_0xc951[74])?_0xc951[64]:_0xc951[74]);_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xefcax13[_0xc951[32]],appdata:util[_0xc951[24]](_0xc951[75],_0xefcax13[_0xc951[49]][0],_0xefcax13[_0xc951[49]][2]|| _0xc951[64],_0xefcax8[_0xc951[76]]|| 0,_0xefcax13[_0xc951[49]][3]|| _0xc951[64],_0xefcax13[_0xc951[49]][4]|| _0xc951[64],_0xefcax13[_0xc951[49]][5]|| _0xc951[64]),priority:_0xefcaxc,IntervalId:_0xefcax13[_0xc951[37]]|| null,interval:_0xefcax13[_0xc951[39]]|| _0xc951[41],isApp:true,callerID:_0xefcax13[_0xc951[49]][1]|| null,appType:_0xefcax13[_0xc951[60]]},_0xefcaxd))}else {if(_0xefcax13[_0xc951[32]][_0xc951[31]]()=== _0xc951[48]&& _0xefcax13[_0xc951[60]]=== _0xc951[77]){_0xefcax13[_0xc951[49]][3]= _0xefcax13[_0xc951[49]][3]|| _0xc951[64];_0xefcax13[_0xc951[49]][3]+= (_[_0xc951[73]](_0xefcax13[_0xc951[49]][3],_0xc951[72])?_0xc951[64]:_0xc951[72])+ (_[_0xc951[73]](_0xefcax13[_0xc951[49]][3],_0xc951[74])?_0xc951[64]:_0xc951[74]);_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xefcax13[_0xc951[32]],appdata:util[_0xc951[24]](_0xc951[78],_0xefcax13[_0xc951[49]][0],_0xefcax13[_0xc951[49]][1],_0xefcax13[_0xc951[49]][2]|| _0xc951[64],_0xefcax13[_0xc951[49]][3]|| _0xc951[64],_0xefcax13[_0xc951[49]][4]|| _0xc951[64]),priority:_0xefcaxc,IntervalId:_0xefcax13[_0xc951[37]]|| null,interval:_0xefcax13[_0xc951[39]]|| _0xc951[41],isApp:true,appType:_0xefcax13[_0xc951[60]]},_0xefcaxd))}else {if(_0xefcax13[_0xc951[32]][_0xc951[31]]()=== _0xc951[48]&& _0xefcax13[_0xc951[60]]=== _0xc951[79]){_0xefcax13[_0xc951[49]][2]= _0xefcax13[_0xc951[49]][2]|| _0xc951[64];_0xefcax13[_0xc951[49]][2]+= (_[_0xc951[73]](_0xefcax13[_0xc951[49]][2],_0xc951[72])?_0xc951[64]:_0xc951[72])+ (_[_0xc951[73]](_0xefcax13[_0xc951[49]][2],_0xc951[74])?_0xc951[64]:_0xc951[74]);_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xefcax13[_0xc951[32]],appdata:util[_0xc951[24]](_0xc951[80],_0xefcax13[_0xc951[49]][0],_0xefcax13[_0xc951[49]][1]|| _0xc951[64],_0xefcax13[_0xc951[49]][2]|| _0xc951[64],_0xefcax13[_0xc951[49]][3]|| _0xc951[64]),priority:_0xefcaxc,IntervalId:_0xefcax13[_0xc951[37]]|| null,interval:_0xefcax13[_0xc951[39]]|| _0xc951[41],isApp:true,appType:_0xefcax13[_0xc951[60]]},_0xefcaxd))}else {if((_0xefcax13[_0xc951[32]][_0xc951[31]]()=== _0xc951[48]|| _0xefcax13[_0xc951[32]][_0xc951[31]]()=== _0xc951[59])&& _0xefcax13[_0xc951[60]]!== _0xc951[61]){var _0xefcax1b=_0xefcax13[_0xc951[32]][_0xc951[31]]()=== _0xc951[48]?2:1;_0xefcax13[_0xc951[49]][_0xefcax1b]= _0xefcax13[_0xc951[49]][_0xefcax1b]|| _0xc951[64];_0xefcax13[_0xc951[49]][_0xefcax1b]+= (_[_0xc951[73]](_0xefcax13[_0xc951[49]][_0xefcax1b],_0xc951[72])?_0xc951[64]:_0xc951[72])+ (_[_0xc951[73]](_0xefcax13[_0xc951[49]][_0xefcax1b],_0xc951[74])?_0xc951[64]:_0xc951[74])};_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xefcax13[_0xc951[32]],appdata:_0xefcax13[_0xc951[49]][_0xc951[82]](_0xc951[81]),priority:_0xefcaxc,IntervalId:_0xefcax13[_0xc951[37]],interval:_0xefcax13[_0xc951[39]]|| _0xc951[41],isApp:true,appType:_0xefcax13[_0xc951[60]]|| null,answer:_0xefcax13[_0xc951[62]]|| false},_0xefcaxd))}}};_0xefcaxc++;if(_0xefcax13[_0xc951[32]][_0xc951[31]]()=== _0xc951[48]&& _0xefcax8[_0xc951[52]]&& _0xefcax8[_0xc951[20]]=== _0xc951[27]){_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[83],appdata:_0xc951[64],priority:_0xefcaxc},_0xefcaxd))}else {_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[43],appdata:_0xc951[84],priority:_0xefcaxc},_0xefcaxd))};_0xefcaxc++;_0xefcax15[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[43],appdata:_0xefcax13[_0xc951[32]]+ _0xc951[85],priority:_0xefcaxc},_0xefcaxd));_0xefcaxc++;_0xefcaxe[_0xc951[26]](VoiceExtension[_0xc951[36]](_0xefcax15,{transaction:_0xefcax7}))});_0xefcax11[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[43],appdata:_0xefcax8[_0xc951[20]]+ _0xc951[86],priority:_0xefcaxc},_0xefcaxd));_0xefcaxc++;if(_0xefcax8[_0xc951[20]]=== _0xc951[87]|| _0xefcax8[_0xc951[20]]=== _0xc951[27]){_0xefcax11[_0xc951[26]](_[_0xc951[25]]({app:_0xc951[88],appdata:_0xc951[64],priority:_0xefcaxc},_0xefcaxd));_0xefcaxc++};_0xefcaxe[_0xc951[26]](VoiceExtension[_0xc951[36]](_0xefcax11,{transaction:_0xefcax7}));return _0xefcaxe})[_0xc951[18]]()}}} \ No newline at end of file +'use strict'; + +var _ = require('lodash'); +var util = require('util'); +var Interval = require('../models').Interval; +var sequelize = require('../models').sequelize; +var VoiceExtension = require('../models').VoiceExtension; + +exports.createApps = createApplications; + +exports.routeUpdate = function(req, t) { + var sequelize = require('../models').sequelize; + var VoiceExtension = require('../models').VoiceExtension; + if (req.body.id) { + delete req.body.id; + } + return VoiceExtension + .update(req.body, { + where: { + id: req.params.id + }, + transaction: t + }) + .then(function(route) { + if (req.body.Applications) { + req.body.id = req.params.id; + return VoiceExtension + .destroy({ + where: { + VoiceExtensionId: req.params.id + }, + transaction: t + }); + } + }) + .then(function() { + if (req.body.Applications && Array.isArray(req.body.Applications) && req.body.Applications.length) { + return req.body; + } + }) + .then(createApplications(req.body.Applications, t)); +} + + +function createApplications(applications, t) { + var Interval = require('../models').Interval; + var VoiceExtension = require('../models').VoiceExtension; + return function(route) { + if (route) { + return Interval + .findAll() //find all existing intervals + .then(function(intervals) { + var priority = 2; + var routeDefault = { + exten: route.exten, + type: route.type, + context: route.context, + VoiceExtensionId: route.id + }; + var bulkApps = []; + var applicationLength = 8; //update in case of adding other rows in the extension + var firstRows = [], + lastRows = []; + firstRows.push(_.merge({ + app: 'Set', + appdata: util.format('CDR(type)=%s', route.type), + priority: priority + }, + routeDefault)); + priority++; + if (route.type === 'outbound') { + firstRows.push(_.merge({ + app: 'Set', + appdata: util.format('CDR(tag)=%s', route.tag || '--'), + priority: priority + }, + routeDefault)); + priority++; + } + var hasAgi = _.find(applications, function(application) { + return application.app.toLowerCase() === 'agi'; + }); + if (hasAgi) { + firstRows.push(_.merge({ + app: 'Set', + appdata: 'VOLUME(RX)=0', + priority: priority + }, + routeDefault)); + priority++; + } + bulkApps.push(VoiceExtension.bulkCreate(firstRows, { + transaction: t + })); + applications.forEach(function(application) { + var appIntervals = []; + var extension = []; + if (application.IntervalId) { //if the interval for the app is chosen by a list we search for the subintervals + var foundIntervals = _.filter(intervals, { + IntervalId: application.IntervalId + }); + appIntervals = foundIntervals.length ? _.map(foundIntervals, 'interval') : ['*,*,*,*']; //if the interval list has no subintervals the interval is always + var parentInterval = _.find(intervals, { + id: application.IntervalId + }); + application.interval = parentInterval ? parentInterval.name : '*,*,*,*'; + } else { //otherwise i will have the interval directly from the app, i still use an array to keep the creation logic the same + appIntervals = [application.interval]; + } + extension.push(_.merge({ + app: 'NoOP', + appdata: application.app + ' Application Start', + priority: priority + }, + routeDefault)); + priority++; + var intLength = appIntervals.length; + appIntervals.forEach(function(elem, index) { + extension.push(_.merge({ + app: 'GotoIfTime', + appdata: util.format('%s?%s,${EXTEN},%s:%s,${EXTEN},%s', elem, route.context, priority + (intLength - index), route.context, ((index + 1) < intLength) ? priority + + 1 : priority + + applicationLength), + priority: priority + }, + routeDefault)); + priority++; + }); + if (application.app.toLowerCase() === 'dial' && route.type === 'outbound' && application.appdata[1]) { + extension.push(_.merge({ + app: 'Set', + appdata: util.format('CALLERID(all)=%s', application.appdata[1]), + priority: priority + }, + routeDefault)); + } else { + extension.push(_.merge({ + app: 'NoOP', + appdata: 'Skipped CallerID Set', + priority: priority + }, + routeDefault)); + } + priority++; + if (application.app.toLowerCase() === 'dial' && route.record && route.type === 'outbound') { + extension.push(_.merge({ + app: 'MixMonitor', + appdata: '${UNIQUEID}.' + (route.recordingFormat || 'wav') + ',ab', + priority: priority + }, + routeDefault)); + } else { + extension.push(_.merge({ + app: 'NoOP', + appdata: 'Skipped MixMonitor', + priority: priority + }, + routeDefault)); + } + priority++; + if (application.app.toLowerCase() === 'queue' && application.appType !== 'custom' && !application.answer) { + extension.push(_.merge({ + app: 'Progress', + appdata: '', + priority: priority + }, + routeDefault)); + } else { + extension.push(_.merge({ + app: 'NoOP', + appdata: 'Skipped Progress', + priority: priority + }, + routeDefault)); + } + priority++; + if ((application.app.toLowerCase() === 'queue' || application.app.toLowerCase() === 'playback') && application.appType !== 'custom' && application.answer) { + extension.push(_.merge({ + app: 'Answer', + appdata: '', + priority: priority + }, + routeDefault)); + } else { + extension.push(_.merge({ + app: 'NoOP', + appdata: 'Skipped Answer', + priority: priority + }, + routeDefault)); + } + priority++; + if (application.app.toLowerCase() === 'dial' && route.type === 'outbound') { + extension.push(_.merge({ + app: 'Set', + appdata: util.format('outboundrouteid=%d', route.id || ''), + priority: priority + }, + routeDefault)); + } else { + extension.push(_.merge({ + app: 'NoOP', + appdata: 'Skipped Outound Route Id Set', + priority: priority + }, + routeDefault)); + } + priority++; + if (application.app.toLowerCase() === 'dial' && application.appType === 'outboundDial') { + application.appdata[4] = application.appdata[4] || ''; + application.appdata[4] += (_.includes(application.appdata[4], 'x') ? '' : 'x') + (_.includes(application.appdata[4], 'X') ? '' : 'X'); + extension.push(_.merge({ + app: application.app, + appdata: util.format('SIP/%s/%s${EXTEN:%s},%s,%s,%s', application.appdata[0], application.appdata[2] || '', route.cutdigits || 0, application.appdata[3] || '', + application.appdata[4] || '', application.appdata[5] || ''), + priority: priority, + IntervalId: application.IntervalId || null, + interval: application.interval || '*,*,*,*', + isApp: true, + callerID: application.appdata[1] || null, + appType: application.appType + }, + routeDefault)); + } else if (application.app.toLowerCase() === 'dial' && application.appType === 'externalDial') { + application.appdata[3] = application.appdata[3] || ''; + application.appdata[3] += (_.includes(application.appdata[3], 'x') ? '' : 'x') + (_.includes(application.appdata[3], 'X') ? '' : 'X'); + extension.push(_.merge({ + app: application.app, + appdata: util.format('SIP/%s/%s,%s,%s,%s', application.appdata[0], application.appdata[1], application.appdata[2] || '', application.appdata[3] || '', application.appdata[ + 4] || ''), + priority: priority, + IntervalId: application.IntervalId || null, + interval: application.interval || '*,*,*,*', + isApp: true, + appType: application.appType + }, + routeDefault)); + } else if (application.app.toLowerCase() === 'dial' && application.appType === 'internalDial') { + application.appdata[2] = application.appdata[2] || ''; + application.appdata[2] += (_.includes(application.appdata[2], 'x') ? '' : 'x') + (_.includes(application.appdata[2], 'X') ? '' : 'X'); + extension.push(_.merge({ + app: application.app, + appdata: util.format('SIP/%s,%s,%s,%s', application.appdata[0], application.appdata[1] || '', application.appdata[2] || '', application.appdata[3] || ''), + priority: priority, + IntervalId: application.IntervalId || null, + interval: application.interval || '*,*,*,*', + isApp: true, + appType: application.appType + }, + routeDefault)); + } else { + if ((application.app.toLowerCase() === 'dial' || application.app.toLowerCase() === 'queue') && application.appType !== 'custom') { + var appdataIndex = application.app.toLowerCase() === 'dial' ? 2 : 1; + application.appdata[appdataIndex] = application.appdata[appdataIndex] || ''; + application.appdata[appdataIndex] += (_.includes(application.appdata[appdataIndex], 'x') ? '' : 'x') + (_.includes(application.appdata[appdataIndex], 'X') ? '' : 'X'); + } + extension.push(_.merge({ + app: application.app, + appdata: application.appdata.join(','), + priority: priority, + IntervalId: application.IntervalId, + interval: application.interval || '*,*,*,*', + isApp: true, + appType: application.appType || null, + answer: application.answer || false + }, + routeDefault)); + } + priority++; + if (application.app.toLowerCase() === 'dial' && route.record && route.type === 'outbound') { + extension.push(_.merge({ + app: 'StopMixMonitor', + appdata: '', + priority: priority + }, + routeDefault)); + } else { + extension.push(_.merge({ + app: 'NoOP', + appdata: 'Skipped StopMixMonitor', + priority: priority + }, + routeDefault)); + } + priority++; + extension.push(_.merge({ + app: 'NoOP', + appdata: application.app + ' Application End', + priority: priority + }, + routeDefault)); + priority++; + bulkApps.push(VoiceExtension.bulkCreate(extension, { + transaction: t + })); + }); + lastRows.push(_.merge({ + app: 'NoOP', + appdata: route.type + ' call end', + priority: priority + }, + routeDefault)); + priority++; + if (route.type === 'internal' || route.type === 'outbound') { + lastRows.push(_.merge({ + app: 'Hangup', + appdata: '', + priority: priority + }, + routeDefault)); + priority++; + } + bulkApps.push(VoiceExtension.bulkCreate(lastRows, { + transaction: t + })); + return bulkApps; + }) + .all(); + } + } +}