diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/Create3rdONAPE2EServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/Create3rdONAPE2EServiceInstance.groovy
index a2f4e35..fb21574 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/Create3rdONAPE2EServiceInstance.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/Create3rdONAPE2EServiceInstance.groovy
@@ -4,7 +4,7 @@
  * ================================================================================
  * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed under the Apache License, Version 2.0 (the "License")
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  * 
@@ -18,12 +18,12 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.bpmn.infrastructure.scripts;
+package org.onap.so.bpmn.infrastructure.scripts
 
 import org.json.JSONObject
-import org.json.XML;
+import org.json.XML
 
-import static org.apache.commons.lang3.StringUtils.*;
+import static org.apache.commons.lang3.StringUtils.*
 import groovy.xml.XmlUtil
 import groovy.json.*
 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
@@ -31,7 +31,7 @@
 import org.onap.so.bpmn.common.scripts.ExternalAPIUtil
 import org.onap.so.bpmn.common.scripts.AaiUtil
 import org.onap.so.bpmn.common.scripts.MsoUtils
-import org.onap.so.bpmn.common.recipe.ResourceInput;
+import org.onap.so.bpmn.common.recipe.ResourceInput
 import org.onap.so.bpmn.common.resource.ResourceRequestBuilder
 import org.onap.so.bpmn.core.WorkflowException
 import org.onap.so.bpmn.core.json.JsonUtils
@@ -39,13 +39,14 @@
 import org.onap.so.rest.APIResponse
 import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
 import org.onap.so.bpmn.infrastructure.workflow.service.ServicePluginFactory
-import java.util.UUID;
+import java.util.UUID
+import org.onap.so.logger.MsoLogger
 
 import org.camunda.bpm.engine.runtime.Execution
 import org.camunda.bpm.engine.delegate.BpmnError
 import org.camunda.bpm.engine.delegate.DelegateExecution
 import org.apache.commons.lang3.*
-import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.codec.binary.Base64
 import org.springframework.web.util.UriUtils
 import org.onap.so.rest.RESTClient
 import org.onap.so.rest.RESTConfig
@@ -56,24 +57,25 @@
  */
 public class Create3rdONAPE2EServiceInstance extends AbstractServiceTaskProcessor {
 
-	String Prefix="CRE3rdONAPESI_"
+	String Prefix = "CRE3rdONAPESI_"
 
 	ExceptionUtil exceptionUtil = new ExceptionUtil()
 
 	JsonUtils jsonUtil = new JsonUtils()
+	
+	private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, Create3rdONAPE2EServiceInstance.class)
 
 	public void checkSPPartnerInfo (DelegateExecution execution) {
-		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-		utils.log("INFO"," ***** Started checkSPPartnerInfo *****",  isDebugEnabled)
+		msoLogger.info(" ***** Started checkSPPartnerInfo *****")
 		try {
 			//get bpmn inputs from resource request.
 			String requestId = execution.getVariable("mso-request-id")
 			String requestAction = execution.getVariable("requestAction")
-			utils.log("INFO","The requestAction is: " + requestAction,  isDebugEnabled)
+			msoLogger.info("The requestAction is: " + requestAction)
 			String recipeParamsFromRequest = execution.getVariable("recipeParams")
-			utils.log("INFO","The recipeParams is: " + recipeParamsFromRequest,  isDebugEnabled)
+			msoLogger.info("The recipeParams is: " + recipeParamsFromRequest)
 			String resourceInput = execution.getVariable("resourceInput")
-			utils.log("INFO","The resourceInput is: " + resourceInput,  isDebugEnabled)
+			msoLogger.info("The resourceInput is: " + resourceInput)
 			//Get ResourceInput Object
 			ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)			
 			String resourceInputPrameters = resourceInputObj.getResourceParameters()
@@ -81,7 +83,7 @@
 			JSONObject inputParameters = new JSONObject(customizeResourceParam(inputParametersJson))
 			
 			// set local resourceInput
-			execution.setVariable(Prefix + "resourceInput", resourceInputObj)
+			execution.setVariable(Prefix + "ResourceInput", resourceInputObj)
 			
 			boolean is3rdONAPExist = false
 
@@ -93,163 +95,161 @@
 			{
 				String sppartnerUrl = inputParameters.get("url")
 				if(!isBlank(sppartnerUrl)) {
-					execution.setVariable(Prefix + "sppartnerUrl", sppartnerUrl)
+					execution.setVariable(Prefix + "SppartnerUrl", sppartnerUrl)
 					is3rdONAPExist = true
 				}
 				else {
 					is3rdONAPExist = false
 					String msg = "sppartner Url is blank."
-					utils.log("DEBUG", msg, isDebugEnabled)
+					msoLogger.debug(msg)
 				}
 			}
 			if(inputParameters.has("providingServiceInvarianteUuid"))
 			{
 				String sppartnerInvarianteUUID = inputParameters.get("providingServiceInvarianteUuid")
-				execution.setVariable(Prefix + "sppartnerInvarianteUUID", sppartnerInvarianteUUID)
+				execution.setVariable(Prefix + "SppartnerInvarianteUUID", sppartnerInvarianteUUID)
 				is3rdONAPExist = true
 			}
 			else {
 				is3rdONAPExist = false
 				String msg = "sppartner providingServiceInvarianteUuid is blank."
-				utils.log("DEBUG", msg, isDebugEnabled)
+				msoLogger.debug(msg)
 			}
 			if(inputParameters.has("providingServiceUuid"))
 			{
 				String sppartnerUUID = inputParameters.get("providingServiceUuid")
-				execution.setVariable(Prefix + "sppartnerUUID", sppartnerUUID)
+				execution.setVariable(Prefix + "SppartnerUUID", sppartnerUUID)
 				is3rdONAPExist = true
 			}
 			else {
 				is3rdONAPExist = false
 				String msg = "sppartner providingServiceUuid is blank."
-				utils.log("DEBUG", msg, isDebugEnabled)
+				msoLogger.debug(msg)
 			}
 			
 			if(inputParameters.has("handoverMode"))
 			{
 				String handoverMode = inputParameters.get("handoverMode")
-				execution.setVariable(Prefix + "handoverMode", handoverMode)
+				execution.setVariable(Prefix + "HandoverMode", handoverMode)
 			    is3rdONAPExist = true
 			}
 			else {
 				is3rdONAPExist = false
 				String msg = "sppartner handoverMode is blank."
-				utils.log("DEBUG", msg, isDebugEnabled)
+				msoLogger.debug(msg)
 			}
 			
 			execution.setVariable("Is3rdONAPExist", is3rdONAPExist)
-			execution.setVariable(Prefix + "serviceInstanceId", resourceInputObj.getServiceInstanceId())
+			execution.setVariable(Prefix + "ServiceInstanceId", resourceInputObj.getServiceInstanceId())
 			execution.setVariable("mso-request-id", requestId)
 			execution.setVariable("mso-service-instance-id", resourceInputObj.getServiceInstanceId())
 
 		} catch (BpmnError e) {
-			throw e;
+			throw e
 		} catch (Exception ex){
 			String msg = "Exception in checkSPPartnerInfo " + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
+			msoLogger.debug(msg)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
 	}
 
 	public void checkLocallCall (DelegateExecution execution) {
 		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-		utils.log("INFO"," ***** Started checkLocallCall *****",  isDebugEnabled)
+		msoLogger.info(" ***** Started checkLocallCall *****")
 		try {
 					
 			//Get ResourceInput Object
-			ResourceInput resourceInputObj = execution.getVariable(Prefix + "resourceInput")			
+			ResourceInput resourceInputObj = execution.getVariable(Prefix + "ResourceInput")			
 
 			//uuiRequest
 			String incomingRequest = resourceInputObj.getRequestsInputs()
 			String serviceParameters = jsonUtil.getJsonValue(incomingRequest, "service.parameters")
 			JSONObject inputParameters = new JSONObject(customizeResourceParam(serviceParameters))
-			execution.setVariable(Prefix + "serviceParameters", inputParameters)
+			execution.setVariable(Prefix + "ServiceParameters", inputParameters)
 			
-			// CallSource is added only when ONAP SO calling 3rdONAP SO(Remote call)
+			// CallSource is added only when ONAP SO calling 3rdONAP(External API) SO(Remote call)
 			boolean isLocalCall = true
+			String callSource = "UUI"
 			if(inputParameters.has("CallSource"))
 			{
-				String callSource = inputParameters.get("CallSource")
-				if("3rdONAP".equalsIgnoreCase(callSource)) {
+				callSource = inputParameters.get("CallSource")
+				if("ExternalAPI".equalsIgnoreCase(callSource)) {
 					isLocalCall = false
-				}
-				execution.setVariable(Prefix + "CallSource", callSource)
-				utils.log("DEBUG", "callSource is: " + callSource , isDebugEnabled)
-				isLocalCall = true
+				}							
 			}
+			execution.setVariable(Prefix + "CallSource", callSource)
+			msoLogger.debug("callSource is: " + callSource )
 			
 			execution.setVariable("IsLocalCall", isLocalCall)
 
-		} catch (BpmnError e) {
-			throw e;
 		} catch (Exception ex){
 			String msg = "Exception in checkLocallCall " + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
+			msoLogger.debug(msg)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
 	}
 
 	public void preProcessRequest(DelegateExecution execution){
 		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-		utils.log("INFO"," ***** Started preProcessRequest *****",  isDebugEnabled)
+		msoLogger.info(" ***** Started preProcessRequest *****")
 		try {
-			ResourceInput resourceInputObj = execution.getVariable(Prefix + "resourceInput")
+			ResourceInput resourceInputObj = execution.getVariable(Prefix + "ResourceInput")
 			String msg = ""
 
 			String globalSubscriberId = resourceInputObj.getGlobalSubscriberId()
 			if (isBlank(globalSubscriberId)) {
 				msg = "Input globalSubscriberId is null"
-				utils.log("INFO", msg, isDebugEnabled)
+				msoLogger.info(msg)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
 			//set local variable
-			execution.setVariable("globalSubscriberId", globalSubscriberId);
-			utils.log("INFO", "globalSubscriberId:" + globalSubscriberId, isDebugEnabled)
+			execution.setVariable("globalSubscriberId", globalSubscriberId)
+			msoLogger.info("globalSubscriberId:" + globalSubscriberId)
 
 			String serviceType = resourceInputObj.getServiceType()
 			if (isBlank(serviceType)) {
 				msg = "Input serviceType is null"
-				utils.log("INFO", msg, isDebugEnabled)
+				msoLogger.info(msg)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
 			execution.setVariable("serviceType", serviceType)
-			utils.log("INFO", "serviceType:" + serviceType, isDebugEnabled)
+			msoLogger.info("serviceType:" + serviceType)
 			
-			String resourceName = resourceInputObj.getResourceInstanceName();
+			String resourceName = resourceInputObj.getResourceInstanceName()
 			if (isBlank(resourceName)) {
 				msg = "Input resourceName is null"
-				utils.log("INFO", msg, isDebugEnabled)
+				msoLogger.info(msg)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
 			execution.setVariable("resourceName", resourceName)
-			utils.log("INFO", "resourceName:" + resourceName, isDebugEnabled)
+			msoLogger.info("resourceName:" + resourceName)
 			
 			int beginIndex = resourceName.indexOf("_") + 1
 			String serviceInstanceName = resourceName.substring(beginIndex)
 			execution.setVariable("serviceInstanceName", serviceInstanceName)
 			
-			String serviceInstanceId = resourceInputObj.getServiceInstanceId();
+			String serviceInstanceId = resourceInputObj.getServiceInstanceId()
 			if (isBlank(serviceInstanceId)) {
 				msg = "Input serviceInstanceId is null"
-				utils.log("INFO", msg, isDebugEnabled)
+				msoLogger.info(msg)
 				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
 			}
 			execution.setVariable("serviceInstanceId", serviceInstanceId)
-			utils.log("INFO", "serviceInstanceId:" + serviceInstanceId, isDebugEnabled)
+			msoLogger.info("serviceInstanceId:" + serviceInstanceId)
 
 		} catch (BpmnError e) {
-			throw e;
+			throw e
 		} catch (Exception ex){
 			String msg = "Exception in preProcessRequest " + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
+			msoLogger.debug(msg)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
 	}
 
 	public void prepareUpdateProgress(DelegateExecution execution) {
 		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-		utils.log("INFO"," ***** Started prepareUpdateProgress *****",  isDebugEnabled)
-		ResourceInput resourceInputObj = execution.getVariable(Prefix + "resourceInput")
+		msoLogger.info(" ***** Started prepareUpdateProgress *****")
+		ResourceInput resourceInputObj = execution.getVariable(Prefix + "ResourceInput")
 		String operType = resourceInputObj.getOperationType()
 		String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
 		String ServiceInstanceId = resourceInputObj.getServiceInstanceId()
@@ -274,18 +274,18 @@
                                <statusDescription>${statusDescription}</statusDescription>
                     </ns:updateResourceOperationStatus>
                 </soapenv:Body>
-                </soapenv:Envelope>""";
+                </soapenv:Envelope>"""
 
 		setProgressUpdateVariables(execution, body)
-		utils.log("INFO"," ***** End prepareUpdateProgress *****",  isDebugEnabled)
+		msoLogger.info(" ***** Exit prepareUpdateProgress *****")
 	}
 
 	public void allocateCrossONAPResource(DelegateExecution execution) {
 		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-		utils.log("INFO"," ***** Started allocateCrossONAPResource *****",  isDebugEnabled)
+		msoLogger.info(" ***** Started allocateCrossONAPResource *****")
 		
 		//get TP links from AAI for SOTN handoverMode only
-		String handoverMode = execution.getVariable(Prefix + "handoverMode")
+		String handoverMode = execution.getVariable(Prefix + "HandoverMode")
 		if("SOTN".equalsIgnoreCase(handoverMode)) {
 			//to do get tp link in AAI
 			
@@ -296,29 +296,29 @@
 			String accessTopologyId = ""
 			String accessNodeId = ""
 			String accessLtpId = ""
-			JSONObject inputParameters = execution.getVariable(Prefix + "serviceParameters")			
+			JSONObject inputParameters = execution.getVariable(Prefix + "ServiceParameters")			
 			inputParameters.put("access-provider-id", accessProviderId)
 			inputParameters.put("access-client-id", accessClientId)
 			inputParameters.put("access-topology-id", accessTopologyId)
 			inputParameters.put("access-node-id", accessNodeId)
 			inputParameters.put("access-ltp-id", accessLtpId)
-			execution.setVariable(Prefix + "serviceParameters", inputParameters)
+			execution.setVariable(Prefix + "ServiceParameters", inputParameters)
 		}
 		
-		utils.log("INFO", "Exited " + allocateCrossONAPResource, isDebugEnabled)
+		msoLogger.info("Exit " + allocateCrossONAPResource)
 	}
 
 	public void prepare3rdONAPRequest(DelegateExecution execution) {
 		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-		utils.log("INFO"," ***** Started prepare3rdONAPRequest *****",  isDebugEnabled)
+		msoLogger.info(" ***** Started prepare3rdONAPRequest *****")
 		
-		String sppartnerUrl = execution.getVariable(Prefix + "sppartnerUrl")
+		String sppartnerUrl = execution.getVariable(Prefix + "SppartnerUrl")
 		String extAPIPath = sppartnerUrl + 'serviceOrder'
 		execution.setVariable("ExternalAPIURL", extAPIPath)
 		
 		// ExternalAPI message format
 		String externalId = execution.getVariable("resourceName")
-		String category = "Network Service"
+		String category = "E2E Service"
 		String description = "Service Order from SPPartner"
 		String requestedStartDate = utils.generateCurrentTimeInUtc()
 		String requestedCompletionDate = utils.generateCurrentTimeInUtc()
@@ -352,17 +352,17 @@
 		
 		ExternalAPIUtil externalAPIUtil = new ExternalAPIUtil(this)
 		
-		// insert CallSource='3rdONAP' to uuiRequest		
+		// insert CallSource='ExternalAPI' to uuiRequest		
 		Map<String, String> callSourceMap = new HashMap<>()
 		callSourceMap.put("inputName", "CallSource")
-		callSourceMap.put("inputValue", "3rdONAP")
+		callSourceMap.put("inputValue", "ExternalAPI")
 		String _requestInputs_ = externalAPIUtil.setTemplate(ExternalAPIUtil.RequestInputsTemplate, callSourceMap)
 		
 		// Transfer all uuiRequest incomeParameters to ExternalAPI format
-		JSONObject inputParameters = execution.getVariable(Prefix + "serviceParameters")
+		JSONObject inputParameters = execution.getVariable(Prefix + "ServiceParameters")
 		for(String key : inputParameters.keySet()) {			
-			String inputName = key;
-			String inputValue = inputParameters.opt(key);
+			String inputName = key
+			String inputValue = inputParameters.opt(key)
 			Map<String, String> requestInputsMap = new HashMap<>()
 			requestInputsMap.put("inputName", '"' + inputName+ '"')
 			requestInputsMap.put("inputValue", '"' + inputValue + '"')
@@ -371,49 +371,49 @@
 		valueMap.put("_requestInputs_",  _requestInputs_)
 		
 		String payload = externalAPIUtil.setTemplate(ExternalAPIUtil.PostServiceOrderRequestsTemplate, valueMap)
-		execution.setVariable(Prefix + "payload", payload)
-		utils.log("INFO", "Exited " + prepare3rdONAPRequest, isDebugEnabled)
+		execution.setVariable(Prefix + "Payload", payload)
+		msoLogger.info("Exit " + prepare3rdONAPRequest)
 	}
 
 	public void doCreateE2ESIin3rdONAP(DelegateExecution execution) {
 		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-		utils.log("INFO"," ***** Started doCreateE2ESIin3rdONAP *****",  isDebugEnabled)
+		msoLogger.info(" ***** Started doCreateE2ESIin3rdONAP *****")
 		
 		String extAPIPath = execution.getVariable("ExternalAPIURL")
-		String payload = execution.getVariable(Prefix + "payload")
+		String payload = execution.getVariable(Prefix + "Payload")
 		
 		ExternalAPIUtil externalAPIUtil = new ExternalAPIUtil(this)
 
 		APIResponse response = externalAPIUtil.executeExternalAPIPostCall(execution, extAPIPath, payload)
 
 		int responseCode = response.getStatusCode()
-		execution.setVariable(Prefix + "postServiceOrderResponseCode", responseCode)
-		utils.log("DEBUG", "Post ServiceOrder response code is: " + responseCode, isDebugEnabled)
+		execution.setVariable(Prefix + "PostServiceOrderResponseCode", responseCode)
+		msoLogger.debug("Post ServiceOrder response code is: " + responseCode)
 
 		String extApiResponse = response.getResponseBodyAsString()
 		JSONObject responseObj = new JSONObject(extApiResponse)
-		execution.setVariable(Prefix + "postServiceOrderResponse", extApiResponse)
+		execution.setVariable(Prefix + "PostServiceOrderResponse", extApiResponse)
 		//Process Response
 		if(responseCode == 200 || responseCode == 201 || responseCode == 202 )
 			//200 OK 201 CREATED 202 ACCEPTED
 		{
-			utils.log("DEBUG", "Post ServiceOrder Received a Good Response", isDebugEnabled)
+			msoLogger.debug("Post ServiceOrder Received a Good Response")
 			String serviceOrderId = responseObj.get("ServiceOrderId")
 			execution.setVariable(Prefix + "SuccessIndicator", true)
 			execution.setVariable("serviceOrderId", serviceOrderId)
 		}
 		else{
-			utils.log("DEBUG", "Post ServiceOrder Received a Bad Response Code. Response Code is: " + responseCode, isDebugEnabled)
+			msoLogger.debug("Post ServiceOrder Received a Bad Response Code. Response Code is: " + responseCode)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Post ServiceOrder Received a bad response from 3rdONAP External API")
 		}
 		
-		utils.log("INFO", "Exited " + doCreateE2ESIin3rdONAP, isDebugEnabled)
+		msoLogger.info("Exit " + doCreateE2ESIin3rdONAP)
 	}
 	
 
 	public void getE2ESIProgressin3rdONAP(DelegateExecution execution) {
 		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-		utils.log("INFO"," ***** Started getE2ESIProgressin3rdONAP *****",  isDebugEnabled)
+		msoLogger.info(" ***** Started getE2ESIProgressin3rdONAP *****")
 		
 		String extAPIPath = execution.getVariable("ExternalAPIURL")
 		extAPIPath += "/" + execution.getVariable("ServiceOrderId")
@@ -423,17 +423,17 @@
 		APIResponse response = externalAPIUtil.executeExternalAPIGetCall(execution, extAPIPath)
 
 		int responseCode = response.getStatusCode()
-		execution.setVariable(Prefix + "getServiceOrderResponseCode", responseCode)
-		utils.log("DEBUG", "Get ServiceOrder response code is: " + responseCode, isDebugEnabled)
+		execution.setVariable(Prefix + "GetServiceOrderResponseCode", responseCode)
+		msoLogger.debug("Get ServiceOrder response code is: " + responseCode)
 
 		String extApiResponse = response.getResponseBodyAsString()
 		JSONObject responseObj = new JSONObject(extApiResponse)
-		execution.setVariable(Prefix + "getServiceOrderResponse", extApiResponse)
+		execution.setVariable(Prefix + "GetServiceOrderResponse", extApiResponse)
 		
 		//Process Response //200 OK 201 CREATED 202 ACCEPTED
 		if(responseCode == 200 || responseCode == 201 || responseCode == 202 )			
 		{
-			utils.log("DEBUG", "Get ServiceOrder Received a Good Response", isDebugEnabled)
+			msoLogger.debug("Get ServiceOrder Received a Good Response")
 			String serviceOrderState = responseObj.get("State")
 			execution.setVariable(Prefix + "SuccessIndicator", true)
 			execution.setVariable("serviceOrderState", serviceOrderState)			
@@ -463,14 +463,14 @@
 			execution.setVariable("statusDescription", "Create Service Order Status is " + serviceOrderState)
 		}
 		else{			
-			utils.log("DEBUG", "Get ServiceOrder Received a Bad Response Code. Response Code is: " + responseCode, isDebugEnabled)
+			msoLogger.debug("Get ServiceOrder Received a Bad Response Code. Response Code is: " + responseCode)
 			execution.setVariable("progress", 100)
 			execution.setVariable("status", "error")
 			execution.setVariable("statusDescription", "Get ServiceOrder Received a bad response")
 			exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Get ServiceOrder Received a bad response from 3rdONAP External API")
 		}		
 		
-		utils.log("INFO", "Exited " + getE2ESIProgressin3rdONAP, isDebugEnabled)
+		msoLogger.info("Exit " + getE2ESIProgressin3rdONAP)
 	}
 	
 	/**
@@ -479,18 +479,19 @@
 	public void timeDelay(DelegateExecution execution) {
 		def isDebugEnabled= execution.getVariable("isDebugLogEnabled")
 		try {
-			Thread.sleep(5000);
+			Thread.sleep(5000)
 		} catch(InterruptedException e) {
-			utils.log("ERROR", "Time Delay exception" + e , isDebugEnabled)
+			utils.log("ERROR", "Time Delay exception" + e )
 		}
 	}
 
 	public void saveSPPartnerInAAI(DelegateExecution execution) {
 		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-		utils.log("INFO"," ***** Started postCreateE2ESIin3rdONAP *****",  isDebugEnabled)	
+		msoLogger.info(" ***** Started postCreateE2ESIin3rdONAP *****")	
 		
 		String sppartnerId = UUID.randomUUID().toString()
-		String sppartnerUrl = execution.getVariable(Prefix + "sppartnerUrl")
+		String sppartnerUrl = execution.getVariable(Prefix + "SppartnerUrl")
+		String callSource = execution.getVariable(Prefix + "CallSource")
 		String serviceInstanceId = execution.getVariable("serviceInstanceId")
 		
 		AaiUtil aaiUriUtil = new AaiUtil(this)
@@ -501,6 +502,7 @@
 				"""<sp-partner xmlns=\"${namespace}\">
 			        <id>${sppartnerId}</id>
 			        <url>${sppartnerUrl}</url>
+			        <callSource>${callSource}</callSource>
 					<service-instance>					
 					    <service-instance-id>${serviceInstanceId}</service-instance-id>				    
 				    </service-instance>
@@ -512,28 +514,28 @@
 		
 		APIResponse response = aaiUriUtil.executeAAIPutCall(execution, serviceAaiPath, payload)
 		int responseCode = response.getStatusCode()
-		execution.setVariable(Prefix + "putSppartnerResponseCode", responseCode)
-		utils.log("DEBUG", "  Put sppartner response code is: " + responseCode, isDebugEnabled)
+		execution.setVariable(Prefix + "PutSppartnerResponseCode", responseCode)
+		msoLogger.debug("  Put sppartner response code is: " + responseCode)
 
 		String aaiResponse = response.getResponseBodyAsString()
 		aaiResponse = StringEscapeUtils.unescapeXml(aaiResponse)
-		execution.setVariable(Prefix + "putSppartnerResponse", aaiResponse)
+		execution.setVariable(Prefix + "PutSppartnerResponse", aaiResponse)
 
 		//Process Response
 		if(responseCode == 200 || responseCode == 201 || responseCode == 202 )
 			//200 OK 201 CREATED 202 ACCEPTED
 		{
-			utils.log("DEBUG", "PUT sppartner Received a Good Response", isDebugEnabled)
+			msoLogger.debug("PUT sppartner Received a Good Response")
 			execution.setVariable(Prefix + "SuccessIndicator", true)
 		}
 		else
 		{
-			utils.log("DEBUG", "Put sppartner Received a Bad Response Code. Response Code is: " + responseCode, isDebugEnabled)
+			msoLogger.debug("Put sppartner Received a Bad Response Code. Response Code is: " + responseCode)
 			exceptionUtil.MapAAIExceptionToWorkflowExceptionGeneric(execution, aaiResponse, responseCode)
 			throw new BpmnError("MSOWorkflowException")
 		}
 		
-		utils.log("INFO", "Exited " + saveSPPartnerInAAI, isDebugEnabled)
+		msoLogger.info("Exit " + saveSPPartnerInAAI)
 	}
 
 	private void setProgressUpdateVariables(DelegateExecution execution, String body) {
@@ -544,48 +546,48 @@
 
 	public void postProcess(DelegateExecution execution){
 		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
-		utils.log("INFO"," ***** Started postProcess *****",  isDebugEnabled)
-		String responseCode = execution.getVariable(Prefix + "putSppartnerResponseCode")
-		String responseObj = execution.getVariable(Prefix + "putSppartnerResponse")
+		msoLogger.info(" ***** Started postProcess *****")
+		String responseCode = execution.getVariable(Prefix + "PutSppartnerResponseCode")
+		String responseObj = execution.getVariable(Prefix + "PutSppartnerResponse")
 
-		utils.log("INFO","response from AAI for put sppartner, response code :" + responseCode + "  response object :" + responseObj,  isDebugEnabled)
-		utils.log("INFO"," ***** Exit postProcess *****",  isDebugEnabled)
+		msoLogger.info("response from AAI for put sppartner, response code :" + responseCode + "  response object :" + responseObj)
+		msoLogger.info(" ***** Exit postProcess *****")
 	}
 
 	public void sendSyncResponse (DelegateExecution execution) {
 		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
-		utils.log("DEBUG", " *** sendSyncResponse *** ", isDebugEnabled)
+		msoLogger.debug(" *** sendSyncResponse *** ")
 
 		try {
 			String operationStatus = "finished"
 			// RESTResponse for main flow
 			String resourceOperationResp = """{"operationStatus":"${operationStatus}"}""".trim()
-			utils.log("DEBUG", " sendSyncResponse to APIH:" + "\n" + resourceOperationResp, isDebugEnabled)
+			msoLogger.debug(" sendSyncResponse to APIH:" + "\n" + resourceOperationResp)
 			sendWorkflowResponse(execution, 202, resourceOperationResp)
 			execution.setVariable("sentSyncResponse", true)
 
 		} catch (Exception ex) {
 			String msg = "Exceptuion in sendSyncResponse:" + ex.getMessage()
-			utils.log("DEBUG", msg, isDebugEnabled)
+			msoLogger.debug(msg)
 			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
 		}
-		utils.log("DEBUG"," ***** Exit sendSyncResopnse *****",  isDebugEnabled)
+		msoLogger.debug(" ***** Exit sendSyncResopnse *****")
 	}
 	
 	String customizeResourceParam(String inputParametersJson) {
-		List<Map<String, Object>> paramList = new ArrayList();
-		JSONObject jsonObject = new JSONObject(inputParametersJson);
-		Iterator iterator = jsonObject.keys();
+		List<Map<String, Object>> paramList = new ArrayList()
+		JSONObject jsonObject = new JSONObject(inputParametersJson)
+		Iterator iterator = jsonObject.keys()
 		while (iterator.hasNext()) {
-			String key = iterator.next();
-			HashMap<String, String> hashMap = new HashMap();
-			hashMap.put("name", key);
+			String key = iterator.next()
+			HashMap<String, String> hashMap = new HashMap()
+			hashMap.put("name", key)
 			hashMap.put("value", jsonObject.get(key))
 			paramList.add(hashMap)
 		}
-		Map<String, List<Map<String, Object>>> paramMap = new HashMap();
-		paramMap.put("param", paramList);
+		Map<String, List<Map<String, Object>>> paramMap = new HashMap()
+		paramMap.put("param", paramList)
 
-		return  new JSONObject(paramMap).toString();
+		return  new JSONObject(paramMap).toString()
 	}
 }
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/Delete3rdONAPE2EServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/Delete3rdONAPE2EServiceInstance.groovy
new file mode 100644
index 0000000..122fd50
--- /dev/null
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/Delete3rdONAPE2EServiceInstance.groovy
@@ -0,0 +1,517 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * OPENECOMP - SO
+ * ================================================================================
+ * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License")
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.scripts
+
+import org.json.JSONObject
+import org.json.XML
+
+import static org.apache.commons.lang3.StringUtils.*
+import groovy.xml.XmlUtil
+import groovy.json.*
+import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
+import org.onap.so.bpmn.common.scripts.ExceptionUtil
+import org.onap.so.bpmn.common.scripts.ExternalAPIUtil
+import org.onap.so.bpmn.common.scripts.AaiUtil
+import org.onap.so.bpmn.common.scripts.MsoUtils
+import org.onap.so.bpmn.common.recipe.ResourceInput
+import org.onap.so.bpmn.common.resource.ResourceRequestBuilder
+import org.onap.so.bpmn.core.WorkflowException
+import org.onap.so.bpmn.core.json.JsonUtils
+import org.onap.so.bpmn.infrastructure.workflow.serviceTask.client.builder.AbstractBuilder
+import org.onap.so.rest.APIResponse
+import org.onap.so.bpmn.common.scripts.SDNCAdapterUtils
+import org.onap.so.bpmn.infrastructure.workflow.service.ServicePluginFactory
+import java.util.UUID
+
+import org.camunda.bpm.engine.runtime.Execution
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.delegate.DelegateExecution
+import org.apache.commons.lang3.*
+import org.apache.commons.codec.binary.Base64
+import org.springframework.web.util.UriUtils
+import org.onap.so.rest.RESTClient
+import org.onap.so.rest.RESTConfig
+
+/**
+ * This groovy class supports the <class>Delete3rdONAPE2EServiceInstance.bpmn</class> process.
+ * flow for Delete E2EServiceInstance in 3rdONAP 
+ */
+public class Delete3rdONAPE2EServiceInstance extends AbstractServiceTaskProcessor {
+
+	String Prefix="CRE3rdONAPESI_"
+
+	ExceptionUtil exceptionUtil = new ExceptionUtil()
+
+	JsonUtils jsonUtil = new JsonUtils()
+
+	public void checkSPPartnerInfoFromAAI (DelegateExecution execution) {
+		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+		utils.log("INFO"," ***** Started checkSPPartnerInfo *****",  isDebugEnabled)
+		try {
+			//get bpmn inputs from resource request.
+			String requestId = execution.getVariable("mso-request-id")
+			String requestAction = execution.getVariable("requestAction")
+			utils.log("INFO","The requestAction is: " + requestAction,  isDebugEnabled)
+			String recipeParamsFromRequest = execution.getVariable("recipeParams")
+			utils.log("INFO","The recipeParams is: " + recipeParamsFromRequest,  isDebugEnabled)
+			String resourceInput = execution.getVariable("resourceInput")
+			utils.log("INFO","The resourceInput is: " + resourceInput,  isDebugEnabled)
+			//Get ResourceInput Object
+			ResourceInput resourceInputObj = ResourceRequestBuilder.getJsonObject(resourceInput, ResourceInput.class)					
+			// set local resourceInput
+			execution.setVariable(Prefix + "ResourceInput", resourceInputObj)
+			
+			String resourceInstanceId = resourceInputObj.getResourceInstancenUuid()
+			String sppartnerId = resourceInstanceId
+			execution.setVariable(Prefix + "SppartnerId", sppartnerId)
+			utils.log("INFO", "sppartnerId:" + sppartnerId, isDebugEnabled)
+			
+			// Get Sppartner from AAI
+			AaiUtil aaiUriUtil = new AaiUtil(this)
+			String aai_uri = aaiUriUtil.getBusinessSPPartnerUri(execution)
+			String namespace = aaiUriUtil.getNamespaceFromUri(aai_uri)			
+			String aai_endpoint = execution.getVariable("URN_aai_endpoint")
+			String serviceAaiPath = "${aai_endpoint}${aai_uri}/" + UriUtils.encode(sppartnerId,"UTF-8")
+			execution.setVariable(Prefix + "serviceAaiPath", serviceAaiPath)
+			
+			getSPPartnerInAAI(execution)
+			
+			String callSource = "UUI"
+			String sppartnerUrl = ""
+			String sppartnerVersion = ""
+			if(execution.getVariable(Prefix + "SuccessIndicator")) {
+				callSource = execution.getVariable(Prefix + "CallSource")
+				sppartnerId = execution.getVariable(Prefix + "SppartnerId")
+				sppartnerUrl = execution.getVariable(Prefix + "SppartnerUrl")
+				sppartnerVersion = execution.getVariable(Prefix + "SppartnerVersion")				
+			}
+			
+			boolean is3rdONAPExist = false	
+			if(!isBlank(sppartnerUrl)) {				
+				is3rdONAPExist = true
+			}
+			
+			execution.setVariable("Is3rdONAPExist", is3rdONAPExist)
+			execution.setVariable(Prefix + "ServiceInstanceId", resourceInputObj.getServiceInstanceId())
+			execution.setVariable("mso-request-id", requestId)
+			execution.setVariable("mso-service-instance-id", resourceInputObj.getServiceInstanceId())
+
+		} catch (BpmnError e) {
+			throw e
+		} catch (Exception ex){
+			String msg = "Exception in checkSPPartnerInfoFromAAI " + ex.getMessage()
+			utils.log("DEBUG", msg, isDebugEnabled)
+			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+		}
+	}
+
+	public void checkLocallCall (DelegateExecution execution) {
+		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+		utils.log("INFO"," ***** Started checkLocallCall *****",  isDebugEnabled)
+		
+		boolean isLocalCall = true
+		String callSource = execution.getVariable(Prefix + "CallSource")
+		if("ExternalAPI".equalsIgnoreCase(callSource)) {
+			isLocalCall = false
+		}
+		execution.setVariable("IsLocalCall", isLocalCall)
+	}
+
+	public void preProcessRequest(DelegateExecution execution){
+		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+		utils.log("INFO"," ***** Started preProcessRequest *****",  isDebugEnabled)
+		try {
+			ResourceInput resourceInputObj = execution.getVariable(Prefix + "resourceInput")
+			String msg = ""			
+
+			String globalSubscriberId = resourceInputObj.getGlobalSubscriberId()
+			if (isBlank(globalSubscriberId)) {
+				msg = "Input globalSubscriberId is null"
+				utils.log("INFO", msg, isDebugEnabled)
+				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+			}
+			//set local variable
+			execution.setVariable("globalSubscriberId", globalSubscriberId)
+			utils.log("INFO", "globalSubscriberId:" + globalSubscriberId, isDebugEnabled)
+
+			String serviceType = resourceInputObj.getServiceType()
+			if (isBlank(serviceType)) {
+				msg = "Input serviceType is null"
+				utils.log("INFO", msg, isDebugEnabled)
+				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+			}
+			execution.setVariable("serviceType", serviceType)
+			utils.log("INFO", "serviceType:" + serviceType, isDebugEnabled)
+			
+			String operationId = resourceInputObj.getOperationId()			
+			if (isBlank(operationId)) {
+				msg = "Input operationId is null"
+				utils.log("INFO", msg, isDebugEnabled)
+				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+			}
+			execution.setVariable("operationId", operationId)
+			utils.log("INFO", "operationId:" + operationId, isDebugEnabled)
+			
+			String resourceName = resourceInputObj.getResourceInstanceName()			
+			if (isBlank(resourceName)) {
+				msg = "Input resourceName is null"
+				utils.log("INFO", msg, isDebugEnabled)
+				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+			}
+			execution.setVariable("resourceName", resourceName)
+			utils.log("INFO", "resourceInstanceId:" + resourceName, isDebugEnabled)
+			
+			String resourceTemplateId = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
+			if (isBlank(resourceTemplateId)) {
+				msg = "Input resourceTemplateId is null"
+				utils.log("INFO", msg, isDebugEnabled)
+				exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+			}
+			execution.setVariable("resourceTemplateId", resourceTemplateId)
+			utils.log("INFO", "resourceTemplateId:" + resourceTemplateId, isDebugEnabled)
+
+		} catch (BpmnError e) {
+			throw e
+		} catch (Exception ex){
+			String msg = "Exception in preProcessRequest " + ex.getMessage()
+			utils.log("DEBUG", msg, isDebugEnabled)
+			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+		}
+	}
+
+	public void prepareUpdateProgress(DelegateExecution execution) {
+		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+		utils.log("INFO"," ***** Started prepareUpdateProgress *****",  isDebugEnabled)
+		ResourceInput resourceInputObj = execution.getVariable(Prefix + "ResourceInput")
+		String operType = resourceInputObj.getOperationType()
+		String resourceCustomizationUuid = resourceInputObj.getResourceModelInfo().getModelCustomizationUuid()
+		String ServiceInstanceId = resourceInputObj.getServiceInstanceId()
+		String modelName = resourceInputObj.getResourceModelInfo().getModelName()
+		String operationId = resourceInputObj.getOperationId()
+		String progress = execution.getVariable("progress")
+		String status = execution.getVariable("status")
+		String statusDescription = execution.getVariable("statusDescription")
+
+		String body = """
+                <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+                        xmlns:ns="http://org.openecomp.mso/requestsdb">
+                        <soapenv:Header/>
+                <soapenv:Body>
+                    <ns:updateResourceOperationStatus>
+                               <operType>${operType}</operType>
+                               <operationId>${operationId}</operationId>
+                               <progress>${progress}</progress>
+                               <resourceTemplateUUID>${resourceCustomizationUuid}</resourceTemplateUUID>
+                               <serviceId>${ServiceInstanceId}</serviceId>
+                               <status>${status}</status>
+                               <statusDescription>${statusDescription}</statusDescription>
+                    </ns:updateResourceOperationStatus>
+                </soapenv:Body>
+                </soapenv:Envelope>"""
+
+		setProgressUpdateVariables(execution, body)
+		utils.log("INFO"," ***** End prepareUpdateProgress *****",  isDebugEnabled)
+	}
+
+	public void prepare3rdONAPRequest(DelegateExecution execution) {
+		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+		utils.log("INFO"," ***** Started prepare3rdONAPRequest *****",  isDebugEnabled)
+		
+		String sppartnerUrl = execution.getVariable(Prefix + "SppartnerUrl")
+		String extAPIPath = sppartnerUrl + 'serviceOrder'
+		execution.setVariable("ExternalAPIURL", extAPIPath)
+		
+		// ExternalAPI message format
+		String externalId = execution.getVariable("resourceName")
+		String category = "E2E Service"
+		String description = "Service Order from SPPartner"
+		String requestedStartDate = utils.generateCurrentTimeInUtc()
+		String requestedCompletionDate = utils.generateCurrentTimeInUtc()
+		String priority = "1" // 0-4 0:highest
+		String subscriberId = execution.getVariable("globalSubscriberId")
+		String customerRole = ""
+		String subscriberName = ""
+		String referredType = execution.getVariable("serviceType")
+		String orderItemId = "1"
+		String action = "delete" //for delete
+		String serviceState = "active"
+		String serviceName = ""
+		String serviceId = execution.getVariable(Prefix + "ServiceInstanceId")
+		
+		Map<String, String> valueMap = new HashMap<>()
+		valueMap.put("externalId", '"' + externalId + '"')
+		valueMap.put("category", '"' + category + '"')
+		valueMap.put("description", '"' + description + '"')
+		valueMap.put("requestedStartDate", '"' + requestedStartDate + '"')
+		valueMap.put("requestedCompletionDate", '"' + requestedCompletionDate + '"')
+		valueMap.put("priority", '"'+ priority + '"')
+		valueMap.put("subscriberId", '"' + subscriberId + '"')
+		valueMap.put("customerRole", '"' + customerRole + '"')
+		valueMap.put("subscriberName", '"' + subscriberName + '"')
+		valueMap.put("referredType", '"' + referredType + '"')
+		valueMap.put("orderItemId", '"' + orderItemId + '"')
+		valueMap.put("action", '"' + action + '"')
+		valueMap.put("serviceState", '"' + serviceState + '"')
+		valueMap.put("serviceName", '"' + serviceName + '"')
+		valueMap.put("serviceId", '"' + serviceId + '"')
+		
+		ExternalAPIUtil externalAPIUtil = new ExternalAPIUtil(this)		
+	 
+		valueMap.put("_requestInputs_",  "")
+		
+		String payload = externalAPIUtil.setTemplate(ExternalAPIUtil.PostServiceOrderRequestsTemplate, valueMap)
+		execution.setVariable(Prefix + "Payload", payload)
+		utils.log("INFO", "Exit " + prepare3rdONAPRequest, isDebugEnabled)
+	}
+
+	public void doDeleteE2ESIin3rdONAP(DelegateExecution execution) {
+		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+		utils.log("INFO"," ***** Started doDeleteE2ESIin3rdONAP *****",  isDebugEnabled)
+		
+		String extAPIPath = execution.getVariable("ExternalAPIURL")
+		String payload = execution.getVariable(Prefix + "Payload")
+		
+		ExternalAPIUtil externalAPIUtil = new ExternalAPIUtil(this)
+
+		APIResponse response = externalAPIUtil.executeExternalAPIPostCall(execution, extAPIPath, payload)
+
+		int responseCode = response.getStatusCode()
+		execution.setVariable(Prefix + "postServiceOrderResponseCode", responseCode)
+		utils.log("DEBUG", "Post ServiceOrder response code is: " + responseCode, isDebugEnabled)
+
+		String extApiResponse = response.getResponseBodyAsString()
+		JSONObject responseObj = new JSONObject(extApiResponse)
+		execution.setVariable(Prefix + "postServiceOrderResponse", extApiResponse)
+		//Process Response
+		if(responseCode == 200 || responseCode == 201 || responseCode == 202 )
+			//200 OK 201 CREATED 202 ACCEPTED
+		{
+			utils.log("DEBUG", "Post ServiceOrder Received a Good Response", isDebugEnabled)
+			String serviceOrderId = responseObj.get("ServiceOrderId")
+			execution.setVariable(Prefix + "SuccessIndicator", true)
+			execution.setVariable("serviceOrderId", serviceOrderId)
+		}
+		else{
+			utils.log("DEBUG", "Post ServiceOrder Received a Bad Response Code. Response Code is: " + responseCode, isDebugEnabled)
+			exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Post ServiceOrder Received a bad response from 3rdONAP External API")
+		}
+		
+		utils.log("INFO", "Exit " + doDeleteE2ESIin3rdONAP, isDebugEnabled)
+	}
+	
+
+	public void getE2ESIProgressin3rdONAP(DelegateExecution execution) {
+		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+		utils.log("INFO"," ***** Started getE2ESIProgressin3rdONAP *****",  isDebugEnabled)
+		
+		String extAPIPath = execution.getVariable("ExternalAPIURL")
+		extAPIPath += "/" + execution.getVariable("ServiceOrderId")
+		
+		ExternalAPIUtil externalAPIUtil = new ExternalAPIUtil(this)
+
+		APIResponse response = externalAPIUtil.executeExternalAPIGetCall(execution, extAPIPath)
+
+		int responseCode = response.getStatusCode()
+		execution.setVariable(Prefix + "getServiceOrderResponseCode", responseCode)
+		utils.log("DEBUG", "Get ServiceOrder response code is: " + responseCode, isDebugEnabled)
+
+		String extApiResponse = response.getResponseBodyAsString()
+		JSONObject responseObj = new JSONObject(extApiResponse)
+		execution.setVariable(Prefix + "getServiceOrderResponse", extApiResponse)
+		
+		//Process Response //200 OK 201 CREATED 202 ACCEPTED
+		if(responseCode == 200 || responseCode == 201 || responseCode == 202 )			
+		{
+			utils.log("DEBUG", "Get ServiceOrder Received a Good Response", isDebugEnabled)
+			String serviceOrderState = responseObj.get("State")
+			execution.setVariable(Prefix + "SuccessIndicator", true)
+			execution.setVariable("serviceOrderState", serviceOrderState)			
+			
+			// Get serviceOrder State and process progress
+			if("ACKNOWLEDGED".equalsIgnoreCase(serviceOrderState)) {
+				execution.setVariable("progress", 15)
+				execution.setVariable("status", "processing")				
+			}
+			if("INPROGRESS".equalsIgnoreCase(serviceOrderState)) {
+				execution.setVariable("progress", 40)
+				execution.setVariable("status", "processing")
+			}
+			if("COMPLETED".equalsIgnoreCase(serviceOrderState)) {
+				execution.setVariable("progress", 100)
+				execution.setVariable("status", "finished")
+			}
+			if("FAILED".equalsIgnoreCase(serviceOrderState)) {
+				execution.setVariable("progress", 100)
+				execution.setVariable("status", "error")
+			}
+			else {
+				execution.setVariable("progress", 100)
+				execution.setVariable("status", "error")
+				execution.setVariable("statusDescription", "Delete Service Order Status is unknown")
+			}
+			execution.setVariable("statusDescription", "Delete Service Order Status is " + serviceOrderState)
+		}
+		else{			
+			utils.log("DEBUG", "Get ServiceOrder Received a Bad Response Code. Response Code is: " + responseCode, isDebugEnabled)
+			execution.setVariable("progress", 100)
+			execution.setVariable("status", "error")
+			execution.setVariable("statusDescription", "Get ServiceOrder Received a bad response")
+			exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Get ServiceOrder Received a bad response from 3rdONAP External API")
+		}		
+		
+		utils.log("INFO", "Exit " + getE2ESIProgressin3rdONAP, isDebugEnabled)
+	}
+	
+	/**
+	 * delay 5 sec
+	 */
+	public void timeDelay(DelegateExecution execution) {
+		def isDebugEnabled= execution.getVariable("isDebugLogEnabled")
+		try {
+			Thread.sleep(5000)
+		} catch(InterruptedException e) {
+			utils.log("ERROR", "Time Delay exception" + e , isDebugEnabled)
+		}
+	}
+
+	private void getSPPartnerInAAI(DelegateExecution execution) {
+		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+		utils.log("INFO"," ***** Started postDeleteE2ESIin3rdONAP *****",  isDebugEnabled)	
+		
+		AaiUtil aaiUriUtil = new AaiUtil(this)
+		String serviceAaiPath = execution.getVariable(Prefix + "serviceAaiPath")		
+		APIResponse response = aaiUriUtil.executeAAIGetCall(execution, serviceAaiPath)
+		int responseCode = response.getStatusCode()
+		execution.setVariable(Prefix + "GetSppartnerResponseCode", responseCode)
+		utils.log("DEBUG", "  Get sppartner response code is: " + responseCode, isDebugEnabled)
+
+		String aaiResponse = response.getResponseBodyAsString()
+		aaiResponse = StringEscapeUtils.unescapeXml(aaiResponse)
+		aaiResponse = aaiResponse.replaceAll("&", "&amp;")
+		execution.setVariable(Prefix + "GetSppartnerResponse", aaiResponse)
+
+		//Process Response
+		if(responseCode == 200 || responseCode == 201 || responseCode == 202 )
+			//200 OK 201 CREATED 202 ACCEPTED
+		{
+			utils.log("DEBUG", "GET sppartner Received a Good Response", isDebugEnabled)
+			execution.setVariable(Prefix + "SuccessIndicator", true)
+			execution.setVariable(Prefix + "FoundIndicator", true)
+			
+			String sppartnerId = utils.getNodeText1(aaiResponse, "sppartner-id")
+			execution.setVariable(Prefix + "SppartnerId", sppartnerId)
+			utils.log("DEBUG", " SppartnerId is: " + sppartnerId, isDebugEnabled)
+			String sppartnerUrl = utils.getNodeText1(aaiResponse, "sppartner-url")
+			execution.setVariable(Prefix + "SppartnerUrl", sppartnerUrl)
+			utils.log("DEBUG", " SppartnerUrl is: " + sppartnerUrl, isDebugEnabled)
+			String callSource = utils.getNodeText1(aaiResponse, "sppartner-callsource")
+			execution.setVariable(Prefix + "CallSource", callSource)
+			utils.log("DEBUG", " CallSource is: " + callSource, isDebugEnabled)
+			String sppartnerVersion = utils.getNodeText1(aaiResponse, "resource-version")
+			execution.setVariable(Prefix + "SppartnerVersion", sppartnerVersion)
+			utils.log("DEBUG", " Resource Version is: " + sppartnerVersion, isDebugEnabled)
+		}
+		else
+		{
+			utils.log("DEBUG", "Get sppartner Received a Bad Response Code. Response Code is: " + responseCode, isDebugEnabled)
+			exceptionUtil.MapAAIExceptionToWorkflowExceptionGeneric(execution, aaiResponse, responseCode)
+			throw new BpmnError("MSOWorkflowException")
+		}
+		
+		utils.log("INFO", "Exit " + deleteSPPartnerInAAI, isDebugEnabled)
+	}
+	
+	public void deleteSPPartnerInAAI(DelegateExecution execution) {
+		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+		utils.log("INFO"," ***** Started postDeleteE2ESIin3rdONAP *****",  isDebugEnabled)
+		
+		String sppartnerId = execution.getVariable(Prefix + "SppartnerId")
+		String sppartnerUrl = execution.getVariable(Prefix + "sppartnerUrl")
+		String sppartnerVersion = execution.getVariable(Prefix + "sppartnerVersion")
+		
+		AaiUtil aaiUriUtil = new AaiUtil(this)
+		String serviceAaiPath = execution.getVariable(Prefix + "serviceAaiPath") + "/${sppartnerVersion}"
+		APIResponse response = aaiUriUtil.executeAAIDeleteCall(execution, serviceAaiPath)
+		int responseCode = response.getStatusCode()
+		execution.setVariable(Prefix + "DeleteSppartnerResponseCode", responseCode)
+		utils.log("DEBUG", "  Get sppartner response code is: " + responseCode, isDebugEnabled)
+
+		String aaiResponse = response.getResponseBodyAsString()
+		aaiResponse = StringEscapeUtils.unescapeXml(aaiResponse)
+		execution.setVariable(Prefix + "DeleteSppartnerResponse", aaiResponse)
+
+		//Process Response
+		if(responseCode == 200 || responseCode == 201 || responseCode == 202 )
+			//200 OK 201 CREATED 202 ACCEPTED
+		{
+			utils.log("DEBUG", "Delete sppartner Received a Good Response", isDebugEnabled)
+			execution.setVariable(Prefix + "SuccessIndicator", true)
+		}
+		else if(responseCode == 404){
+			utils.log("DEBUG", " Delete sppartner Received a Not Found (404) Response", isDebugEnabled)
+			execution.setVariable(Prefix + "FoundIndicator", false)
+		}
+		else
+		{
+			utils.log("DEBUG", "Delete sppartner Received a Bad Response Code. Response Code is: " + responseCode, isDebugEnabled)
+			exceptionUtil.MapAAIExceptionToWorkflowExceptionGeneric(execution, aaiResponse, responseCode)
+			throw new BpmnError("MSOWorkflowException")
+		}
+		
+		utils.log("INFO", "Exit " + deleteSPPartnerInAAI, isDebugEnabled)
+	}
+	
+	private void setProgressUpdateVariables(DelegateExecution execution, String body) {
+		def dbAdapterEndpoint = execution.getVariable("URN_mso_adapters_openecomp_db_endpoint")
+		execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
+		execution.setVariable("CVFMI_updateResOperStatusRequest", body)
+	}	
+
+	public void postProcess(DelegateExecution execution){
+		def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+		utils.log("INFO"," ***** Started postProcess *****",  isDebugEnabled)
+		String responseCode = execution.getVariable(Prefix + "putSppartnerResponseCode")
+		String responseObj = execution.getVariable(Prefix + "putSppartnerResponse")
+
+		utils.log("INFO","response from AAI for put sppartner, response code :" + responseCode + "  response object :" + responseObj,  isDebugEnabled)
+		utils.log("INFO"," ***** Exit postProcess *****",  isDebugEnabled)
+	}
+
+	public void sendSyncResponse (DelegateExecution execution) {
+		def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+		utils.log("DEBUG", " *** sendSyncResponse *** ", isDebugEnabled)
+
+		try {
+			String operationStatus = "finished"
+			// RESTResponse for main flow
+			String resourceOperationResp = """{"operationStatus":"${operationStatus}"}""".trim()
+			utils.log("DEBUG", " sendSyncResponse to APIH:" + "\n" + resourceOperationResp, isDebugEnabled)
+			sendWorkflowResponse(execution, 202, resourceOperationResp)
+			execution.setVariable("sentSyncResponse", true)
+
+		} catch (Exception ex) {
+			String msg = "Exceptuion in sendSyncResponse:" + ex.getMessage()
+			utils.log("DEBUG", msg, isDebugEnabled)
+			exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+		}
+		utils.log("DEBUG"," ***** Exit sendSyncResopnse *****",  isDebugEnabled)
+	}
+}
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateResources.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateResources.groovy
index 9da8a90..9591898 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateResources.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateResources.groovy
@@ -226,6 +226,7 @@
 		 resourceInput.setResourceModelInfo(currentResource.getModelInfo());
 		 ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
 		 resourceInput.setServiceModelInfo(serviceDecomposition.getModelInfo());
+		 def String resourceCustomizationUuid = currentResource.getModelInfo().getModelCustomizationUuid();
 		 
 		 String incomingRequest = execution.getVariable("uuiRequest")
 		 //set the requestInputs from tempalte  To Be Done
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteE2EServiceInstance.groovy b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteE2EServiceInstance.groovy
index 54dfae3..6d23ae7 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteE2EServiceInstance.groovy
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeleteE2EServiceInstance.groovy
@@ -192,76 +192,93 @@
                     //Confirm there are no related service instances (vnf/network or volume)
                     if (utils.nodeExists(siData, "relationship-list")) {
                         utils.log("INFO", "SI Data relationship-list exists:", isDebugEnabled)
-                        //test(siData)
-                        NodeList nodeList = serviceXml.getElementsByTagName("relationship")
                         JSONArray jArray = new JSONArray()
-                        for (int x = 0; x < nodeList.getLength(); x++) {
-                            Node node = nodeList.item(x)
-                            if (node.getNodeType() == Node.ELEMENT_NODE) {
-                                Element eElement = (Element) node
-                                def e = eElement.getElementsByTagName("related-to").item(0).getTextContent()    								//for ns
-                                if(e.equals("service-instance")){
-                                    def relatedObject = eElement.getElementsByTagName("related-link").item(0).getTextContent()
-                                    utils.log("INFO", "ServiceInstance Related NS :" + relatedObject, isDebugEnabled)
-                                    NodeList dataList = node.getChildNodes()
-                                    if(null != dataList) {
-                                        JSONObject jObj = new JSONObject()
-                                        for (int i = 0; i < dataList.getLength(); i++) {
-                                            Node dNode = dataList.item(i)
-                                            if(dNode.getNodeName() == "relationship-data") {
-                                                Element rDataEle = (Element)dNode
-                                                def eKey =  rDataEle.getElementsByTagName("relationship-key").item(0).getTextContent()
-                                                def eValue = rDataEle.getElementsByTagName("relationship-value").item(0).getTextContent()
-                                                if(eKey.equals("service-instance.service-instance-id")){
-                                                    jObj.put("resourceInstanceId", eValue)
-                                                }
 
-                                            }
-                                            else if(dNode.getNodeName() == "related-to-property"){
-                                                Element rDataEle = (Element)dNode
-                                                def eKey =  rDataEle.getElementsByTagName("property-key").item(0).getTextContent()
-                                                def eValue = rDataEle.getElementsByTagName("property-value").item(0).getTextContent()
-                                                if(eKey.equals("service-instance.service-instance-name")){
-                                                    jObj.put("resourceType", eValue)
-                                                }
-                                            }
-                                        }
-                                        utils.log("INFO", "Relationship related to Resource:" + jObj.toString(), isDebugEnabled)
-                                        jArray.put(jObj)
-                                    }
-                                    //for overlay/underlay
-                                }else if (e.equals("configuration")){
-                                    def relatedObject = eElement.getElementsByTagName("related-link").item(0).getTextContent()
-                                    utils.log("INFO", "ServiceInstance Related Configuration :" + relatedObject, isDebugEnabled)
-                                    NodeList dataList = node.getChildNodes()
-                                    if(null != dataList) {
-                                        JSONObject jObj = new JSONObject()
-                                        for (int i = 0; i < dataList.getLength(); i++) {
-                                            Node dNode = dataList.item(i)
-                                            if(dNode.getNodeName() == "relationship-data") {
-                                                Element rDataEle = (Element)dNode
-                                                def eKey =  rDataEle.getElementsByTagName("relationship-key").item(0).getTextContent()
-                                                def eValue = rDataEle.getElementsByTagName("relationship-value").item(0).getTextContent()
-                                                if(eKey.equals("configuration.configuration-id")){
-                                                    jObj.put("resourceInstanceId", eValue)
-                                                }
-                                            }
-                                            else if(dNode.getNodeName() == "related-to-property"){
-                                                Element rDataEle = (Element)dNode
-                                                def eKey =  rDataEle.getElementsByTagName("property-key").item(0).getTextContent()
-                                                def eValue = rDataEle.getElementsByTagName("property-value").item(0).getTextContent()
-                                                if(eKey.equals("configuration.configuration-type")){
-                                                    jObj.put("resourceType", eValue)
-                                                }
-                                            }
-                                        }
-                                        utils.log("INFO", "Relationship related to Resource:" + jObj.toString(), isDebugEnabled)
-                                        jArray.put(jObj)
-                                    }
-                                }
-                            }
+                        XmlParser xmlParser = new XmlParser()
+                        Node root = xmlParser.parseText(siData)
+                        def relation_list = utils.getChildNode(root, 'relationship-list')
+                        def relationships = utils.getIdenticalChildren(relation_list, 'relationship')
+
+                        for (def relation: relationships) {
+                        	def jObj = getRelationShipData(relation, isDebugEnabled)
+                        	jArray.put(jObj)
                         }
+
                         execution.setVariable("serviceRelationShip", jArray.toString())
+						
+//                        //test(siData)
+//                        NodeList nodeList = serviceXml.getElementsByTagName("relationship")
+//                        JSONArray jArray = new JSONArray()
+//                        for (int x = 0; x < nodeList.getLength(); x++) {
+//                            Node node = nodeList.item(x)
+//                            if (node.getNodeType() == Node.ELEMENT_NODE) {
+//                                Element eElement = (Element) node
+//                                def e = eElement.getElementsByTagName("related-to").item(0).getTextContent()    								//for ns
+//                                if(e.equals("service-instance")){
+//                                    def relatedObject = eElement.getElementsByTagName("related-link").item(0).getTextContent()
+//                                    utils.log("INFO", "ServiceInstance Related NS :" + relatedObject, isDebugEnabled)
+//                                    NodeList dataList = node.getChildNodes()
+//                                    if(null != dataList) {
+//                                        JSONObject jObj = new JSONObject()
+//                                        for (int i = 0; i < dataList.getLength(); i++) {
+//                                            Node dNode = dataList.item(i)
+//                                            if(dNode.getNodeName() == "relationship-data") {
+//                                                Element rDataEle = (Element)dNode
+//                                                def eKey =  rDataEle.getElementsByTagName("relationship-key").item(0).getTextContent()
+//                                                def eValue = rDataEle.getElementsByTagName("relationship-value").item(0).getTextContent()
+//                                                if(eKey.equals("service-instance.service-instance-id")){
+//                                                    jObj.put("resourceInstanceId", eValue)
+//                                                }
+//
+//                                            }
+//                                            else if(dNode.getNodeName() == "related-to-property"){
+//                                                Element rDataEle = (Element)dNode
+//                                                def eKey =  rDataEle.getElementsByTagName("property-key").item(0).getTextContent()
+//                                                def eValue = rDataEle.getElementsByTagName("property-value").item(0).getTextContent()
+//                                                if(eKey.equals("service-instance.service-instance-name")){
+//                                                    jObj.put("resourceType", eValue)
+//                                                }
+//                                            }
+//                                        }
+//                                        utils.log("INFO", "Relationship related to Resource:" + jObj.toString(), isDebugEnabled)
+//                                        jArray.put(jObj)
+//                                    }
+//                                    //for overlay/underlay
+//                                }else if (e.equals("configuration")){
+//                                    def relatedObject = eElement.getElementsByTagName("related-link").item(0).getTextContent()
+//                                    utils.log("INFO", "ServiceInstance Related Configuration :" + relatedObject, isDebugEnabled)
+//                                    NodeList dataList = node.getChildNodes()
+//                                    if(null != dataList) {
+//                                        JSONObject jObj = new JSONObject()
+//                                        for (int i = 0; i < dataList.getLength(); i++) {
+//                                            Node dNode = dataList.item(i)
+//                                            if(dNode.getNodeName() == "relationship-data") {
+//                                                Element rDataEle = (Element)dNode
+//                                                def eKey =  rDataEle.getElementsByTagName("relationship-key").item(0).getTextContent()
+//                                                def eValue = rDataEle.getElementsByTagName("relationship-value").item(0).getTextContent()
+//                                                if(eKey.equals("configuration.configuration-id")){
+//                                                    jObj.put("resourceInstanceId", eValue)
+//                                                }
+//                                            }
+//                                            else if(dNode.getNodeName() == "related-to-property"){
+//                                                Element rDataEle = (Element)dNode
+//                                                def eKey =  rDataEle.getElementsByTagName("property-key").item(0).getTextContent()
+//                                                def eValue = rDataEle.getElementsByTagName("property-value").item(0).getTextContent()
+//                                                if(eKey.equals("configuration.configuration-type")){
+//                                                    jObj.put("resourceType", eValue)
+//                                                }
+//                                            }
+//                                        }
+//                                        utils.log("INFO", "Relationship related to Resource:" + jObj.toString(), isDebugEnabled)
+//                                        jArray.put(jObj)
+//                                    }
+//                                // for SP-Partner
+//                                }else if (e.equals("sp-partner")){
+//									
+//								}								
+//                            }
+//                        }
+//                        execution.setVariable("serviceRelationShip", jArray.toString())
                     }
                 }
             }else{
@@ -292,6 +309,50 @@
         }
         utils.log("INFO"," *** Exit postProcessAAIGET *** ", isDebugEnabled)
     }
+	
+	private JSONObject getRelationShipData(node, isDebugEnabled){
+		JSONObject jObj = new JSONObject()
+		
+		def relation  = utils.nodeToString(node)
+		def rt  = utils.getNodeText1(relation, "related-to")
+		
+		def rl  = utils.getNodeText1(relation, "related-link")
+		utils.log("INFO", "ServiceInstance Related NS/Configuration :" + rl, isDebugEnabled)
+		
+		def rl_datas = utils.getIdenticalChildren(node, "relationship-data")
+		for(def rl_data : rl_datas) {
+			def eKey =  utils.getChildNodeText(rl_data, "relationship-key")
+			def eValue = utils.getChildNodeText(rl_data, "relationship-value")
+
+			if ((rt == "service-instance" && eKey.equals("service-instance.service-instance-id"))
+			//for overlay/underlay
+			|| (rt == "configuration" && eKey.equals("configuration.configuration-id")
+			)){
+				jObj.put("resourceInstanceId", eValue)
+			}
+			// for sp-partner
+			if(rt == "sp-partner" && eKey.equals("sp-partner.id")) {
+				jObj.put("resourceInstanceId", eValue)
+				String sppartnerName = "sp-partner" + eValue
+				jObj.put("resourceType", sppartnerName)
+			}
+		}
+
+		def rl_props = utils.getIdenticalChildren(node, "related-to-property")
+		for(def rl_prop : rl_props) {
+			def eKey =  utils.getChildNodeText(rl_prop, "property-key")
+			def eValue = utils.getChildNodeText(rl_prop, "property-value")
+			if((rt == "service-instance" && eKey.equals("service-instance.service-instance-name"))
+			//for overlay/underlay
+			|| (rt == "configuration" && eKey.equals("configuration.configuration-type"))){
+				jObj.put("resourceType", eValue)
+			}
+		}
+
+		utils.log("INFO", "Relationship related to Resource:" + jObj.toString(), isDebugEnabled)
+
+		return jObj
+	}
 
    public void getCurrentNS(DelegateExecution execution){
        def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/Delete3rdONAPE2EServiceInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/Delete3rdONAPE2EServiceInstance.bpmn
index 116a8a6..0c1fb77 100644
--- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/Delete3rdONAPE2EServiceInstance.bpmn
+++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/Delete3rdONAPE2EServiceInstance.bpmn
@@ -1,188 +1,44 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.3">
   <bpmn:process id="Delete3rdONAPE2EServiceInstance" name="Delete3rdONAPE2EServiceInstance" isExecutable="true">
-    <bpmn:startEvent id="StartEvent_01a6g9a" name="Delete3rdONAPRES_Start">
-      <bpmn:outgoing>SequenceFlow_0ecyqjf</bpmn:outgoing>
+    <bpmn:startEvent id="StartEvent_0hj12gh" name="Delete3rdONAPRES_Start">
+      <bpmn:outgoing>SequenceFlow_190fewc</bpmn:outgoing>
     </bpmn:startEvent>
-    <bpmn:scriptTask id="ScriptTask_0viqs1u" name="prepare 3rdONAP Delete Request" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1sql6c3</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1soxbjk</bpmn:outgoing>
+    <bpmn:scriptTask id="ScriptTask_0rs5t7w" name="prepare 3rdONAP Delete Request" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_1suwdgi</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_15mvx68</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def dcsi = new Delete3rdONAPE2EServiceInstance()
-dcsi.prepareSDNCRequest(execution)]]></bpmn:script>
+dcsi.prepare3rdONAPRequest(execution)]]></bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:endEvent id="EndEvent_1993lyd" name="Delete3rdONAPRES_End">
-      <bpmn:incoming>SequenceFlow_170nvzi</bpmn:incoming>
+    <bpmn:endEvent id="EndEvent_013449q" name="Delete3rdONAPRES_End">
+      <bpmn:incoming>SequenceFlow_0a8k9xi</bpmn:incoming>
     </bpmn:endEvent>
-    <bpmn:scriptTask id="ScriptTask_093lzuq" name="Save SPPartner In AAI">
-      <bpmn:incoming>SequenceFlow_1tlym3z</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0z0u7x1</bpmn:outgoing>
-      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new Delete3rdONAPE2EServiceInstance()
-dcsi.saveSPPartnerInAAI(execution)]]></bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:scriptTask id="ScriptTask_02oc89f" name="Pre Process Request" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_114wjuf</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1sql6c3</bpmn:outgoing>
-      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new Delete3rdONAPE2EServiceInstance()
-dcsi.preProcessRequest(execution)]]></bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:scriptTask id="ScriptTask_1e4pgbj" name="Delete progress update parameters before delete" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1soxbjk</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_000q9m3</bpmn:outgoing>
-      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new Delete3rdONAPE2EServiceInstance()
-dcsi.prepareUpdateBeforeDeleteSDNCResource(execution)]]></bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:serviceTask id="ServiceTask_0r6g690" name="update progress update">
-      <bpmn:extensionElements>
-        <camunda:connector>
-          <camunda:inputOutput>
-            <camunda:inputParameter name="url">${CVFMI_dbAdapterEndpoint}</camunda:inputParameter>
-            <camunda:inputParameter name="headers">
-              <camunda:map>
-                <camunda:entry key="content-type">application/soap+xml</camunda:entry>
-                <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry>
-              </camunda:map>
-            </camunda:inputParameter>
-            <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter>
-            <camunda:inputParameter name="method">POST</camunda:inputParameter>
-            <camunda:outputParameter name="CVFMI_dbResponseCode">${statusCode}</camunda:outputParameter>
-            <camunda:outputParameter name="CVFMI_dbResponse">${response}</camunda:outputParameter>
-          </camunda:inputOutput>
-          <camunda:connectorId>http-connector</camunda:connectorId>
-        </camunda:connector>
-      </bpmn:extensionElements>
-      <bpmn:incoming>SequenceFlow_000q9m3</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1lhdwv6</bpmn:outgoing>
-    </bpmn:serviceTask>
-    <bpmn:scriptTask id="ScriptTask_1e5o8dz" name="Post process" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_0z0u7x1</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1bo3fu4</bpmn:outgoing>
-      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def csi = new  Delete3rdONAPE2EServiceInstance()
-csi.postProcess(execution)]]></bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:scriptTask id="ScriptTask_0ombt1l" name="Delete E2ESI in 3rdONAP" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_0t0jlzs</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_06fak6j</bpmn:outgoing>
-      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new Delete3rdONAPE2EServiceInstance()
-dcsi.doDeleteE2ESIin3rdONAP(execution)]]></bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:serviceTask id="ServiceTask_0lgqtdm" name="update progress update">
-      <bpmn:extensionElements>
-        <camunda:connector>
-          <camunda:inputOutput>
-            <camunda:inputParameter name="url">${CVFMI_dbAdapterEndpoint}</camunda:inputParameter>
-            <camunda:inputParameter name="headers">
-              <camunda:map>
-                <camunda:entry key="content-type">application/soap+xml</camunda:entry>
-                <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry>
-              </camunda:map>
-            </camunda:inputParameter>
-            <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter>
-            <camunda:inputParameter name="method">POST</camunda:inputParameter>
-            <camunda:outputParameter name="CVFMI_dbResponseCode">${statusCode}</camunda:outputParameter>
-            <camunda:outputParameter name="CVFMI_dbResponse">${response}</camunda:outputParameter>
-          </camunda:inputOutput>
-          <camunda:connectorId>http-connector</camunda:connectorId>
-        </camunda:connector>
-      </bpmn:extensionElements>
-      <bpmn:incoming>SequenceFlow_0lpbqkc</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1tlym3z</bpmn:outgoing>
-    </bpmn:serviceTask>
-    <bpmn:scriptTask id="ScriptTask_0blh9n0" name="Allocate connection resources for cross ONAP" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1lhdwv6</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0t0jlzs</bpmn:outgoing>
-      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new Delete3rdONAPE2EServiceInstance()
-dcsi.postActivateSDNC(execution)]]></bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:scriptTask id="ScriptTask_1vlm2lw" name="Check SPPartner Info" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_0ecyqjf</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1jgurvk</bpmn:outgoing>
-      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new Delete3rdONAPE2EServiceInstance()
-dcsi.checkSPPartnerand LocallCall(execution)]]></bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:exclusiveGateway id="ExclusiveGateway_0d7a4pw" name="Is 3rdONAP Existing" default="SequenceFlow_0u3tca8">
-      <bpmn:incoming>SequenceFlow_1jgurvk</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0u3tca8</bpmn:outgoing>
-      <bpmn:outgoing>SequenceFlow_11pvz8i</bpmn:outgoing>
-    </bpmn:exclusiveGateway>
-    <bpmn:intermediateCatchEvent id="IntermediateCatchEvent_14mk5it" name="Start3rdONAPDeleteE2ESI">
-      <bpmn:outgoing>SequenceFlow_114wjuf</bpmn:outgoing>
-      <bpmn:linkEventDefinition name="Start3rdONAPDeleteE2ESI" />
-    </bpmn:intermediateCatchEvent>
-    <bpmn:intermediateThrowEvent id="IntermediateThrowEvent_0bqnalt" name="GoTo Start3rdONAPDeleteE2ESI">
-      <bpmn:incoming>SequenceFlow_06avdut</bpmn:incoming>
-      <bpmn:linkEventDefinition name="Start3rdONAPDeleteE2ESI" />
-    </bpmn:intermediateThrowEvent>
-    <bpmn:scriptTask id="ScriptTask_1trt7oc" name="post Delete E2ESI in 3rdONAP" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_06fak6j</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0cuvrsr</bpmn:outgoing>
-      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new Delete3rdONAPE2EServiceInstance()
-dcsi.doDeleteE2ESIin3rdONAP(execution)]]></bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:scriptTask id="ScriptTask_01s6c7j" name="Query E2ESI progress in 3rdONAP" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_0cuvrsr</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0lpbqkc</bpmn:outgoing>
-      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new Delete3rdONAPE2EServiceInstance()
-dcsi.getE2ESIProgressin3rdONAP(execution)]]></bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:scriptTask id="ScriptTask_1ri59nm" name="Send Sync Ack Response" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1bo3fu4</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_170nvzi</bpmn:outgoing>
-      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def csi = new  Delete3rdONAPE2EServiceInstance()
-csi.sendSyncResponse(execution)]]></bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:scriptTask id="ScriptTask_0d7cawc" name="Check Locall Call" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_11pvz8i</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1lqmzex</bpmn:outgoing>
-      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
-def dcsi = new Delete3rdONAPE2EServiceInstance()
-dcsi.checkSPPartnerand LocallCall(execution)]]></bpmn:script>
-    </bpmn:scriptTask>
-    <bpmn:exclusiveGateway id="ExclusiveGateway_0j2ccax" name="Is Called from Local">
-      <bpmn:incoming>SequenceFlow_1lqmzex</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_06avdut</bpmn:outgoing>
-      <bpmn:outgoing>SequenceFlow_1pwflny</bpmn:outgoing>
-    </bpmn:exclusiveGateway>
-    <bpmn:intermediateThrowEvent id="IntermediateThrowEvent_0bmqdpg" name="GoTo  StartLocalONAPDeleteE2ESI">
-      <bpmn:incoming>SequenceFlow_0u3tca8</bpmn:incoming>
-      <bpmn:incoming>SequenceFlow_1pwflny</bpmn:incoming>
-      <bpmn:linkEventDefinition name="StartLocalONAPDeleteE2ESI" />
-    </bpmn:intermediateThrowEvent>
-    <bpmn:endEvent id="EndEvent_1itzq8n" name="Delete3rdONAPRES_End">
-      <bpmn:incoming>SequenceFlow_0vhbw8y</bpmn:incoming>
-    </bpmn:endEvent>
-    <bpmn:scriptTask id="ScriptTask_1aigzk8" name="Delete SPPartner In AAI">
-      <bpmn:incoming>SequenceFlow_03mc2qq</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_03ngo7h</bpmn:outgoing>
+    <bpmn:scriptTask id="ScriptTask_1b88nnk" name="Delete SPPartner In AAI">
+      <bpmn:incoming>SequenceFlow_0y2g8mr</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0znwu8z</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def dcsi = new Delete3rdONAPE2EServiceInstance()
 dcsi.deleteSPPartnerInAAI(execution)]]></bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:scriptTask id="ScriptTask_0cpsjwl" name="Pre Process Request" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1x1sk3t</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_02l74nc</bpmn:outgoing>
+    <bpmn:scriptTask id="ScriptTask_16rcjl3" name="Pre Process Request" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_1ttrqml</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0brxjic</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def dcsi = new Delete3rdONAPE2EServiceInstance()
 dcsi.preProcessRequest(execution)]]></bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:scriptTask id="ScriptTask_01cer09" name="Delete progress update parameters before delete" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_02l74nc</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0ff0jf2</bpmn:outgoing>
+    <bpmn:scriptTask id="ScriptTask_10n1tb6" name="Init Delete resource progress" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_0brxjic</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0ezt5f0</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+execution.setVariable("progress", "5")
+execution.setVariable("status", "processing")
+execution.setVariable("statusDescription", "Start Creating")
 def dcsi = new Delete3rdONAPE2EServiceInstance()
-dcsi.prepareUpdate(execution)]]></bpmn:script>
+dcsi.prepareUpdateProgress(execution)]]></bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:serviceTask id="ServiceTask_1go9g1i" name="update progress update">
+    <bpmn:serviceTask id="ServiceTask_039ju3f" name="resource progress update">
       <bpmn:extensionElements>
         <camunda:connector>
           <camunda:inputOutput>
@@ -201,411 +57,665 @@
           <camunda:connectorId>http-connector</camunda:connectorId>
         </camunda:connector>
       </bpmn:extensionElements>
-      <bpmn:incoming>SequenceFlow_03ngo7h</bpmn:incoming>
-      <bpmn:incoming>SequenceFlow_177yb27</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1784pcx</bpmn:outgoing>
+      <bpmn:incoming>SequenceFlow_0ezt5f0</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1suwdgi</bpmn:outgoing>
     </bpmn:serviceTask>
-    <bpmn:scriptTask id="ScriptTask_0ywn2ec" name="Post process" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1784pcx</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1xhcwoo</bpmn:outgoing>
+    <bpmn:scriptTask id="ScriptTask_1aj6okk" name="Post process" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_0znwu8z</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_04hwfll</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def csi = new  Delete3rdONAPE2EServiceInstance()
 csi.postProcess(execution)]]></bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:intermediateCatchEvent id="IntermediateCatchEvent_0ui7e2m" name="StartLocalONAPDeleteE2ESI">
-      <bpmn:outgoing>SequenceFlow_1x1sk3t</bpmn:outgoing>
+    <bpmn:scriptTask id="ScriptTask_0r2cxvb" name="Delete E2ESI in 3rdONAP" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_15mvx68</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0wp73cw</bpmn:outgoing>
+      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+def dcsi = new Delete3rdONAPE2EServiceInstance()
+dcsi.doDeleteE2ESIin3rdONAP(execution)]]></bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:serviceTask id="ServiceTask_0p5029r" name="resource progress update">
+      <bpmn:extensionElements>
+        <camunda:connector>
+          <camunda:inputOutput>
+            <camunda:inputParameter name="url">${CVFMI_dbAdapterEndpoint}</camunda:inputParameter>
+            <camunda:inputParameter name="headers">
+              <camunda:map>
+                <camunda:entry key="content-type">application/soap+xml</camunda:entry>
+                <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry>
+              </camunda:map>
+            </camunda:inputParameter>
+            <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter>
+            <camunda:inputParameter name="method">POST</camunda:inputParameter>
+            <camunda:outputParameter name="CVFMI_dbResponseCode">${statusCode}</camunda:outputParameter>
+            <camunda:outputParameter name="CVFMI_dbResponse">${response}</camunda:outputParameter>
+          </camunda:inputOutput>
+          <camunda:connectorId>http-connector</camunda:connectorId>
+        </camunda:connector>
+      </bpmn:extensionElements>
+      <bpmn:incoming>SequenceFlow_0fkfn70</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1luhljs</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_190fewc" sourceRef="StartEvent_0hj12gh" targetRef="ScriptTask_160sboy" />
+    <bpmn:sequenceFlow id="SequenceFlow_0brxjic" sourceRef="ScriptTask_16rcjl3" targetRef="ScriptTask_10n1tb6" />
+    <bpmn:sequenceFlow id="SequenceFlow_0znwu8z" sourceRef="ScriptTask_1b88nnk" targetRef="ScriptTask_1aj6okk" />
+    <bpmn:sequenceFlow id="SequenceFlow_0ezt5f0" sourceRef="ScriptTask_10n1tb6" targetRef="ServiceTask_039ju3f" />
+    <bpmn:scriptTask id="ScriptTask_160sboy" name="Check SPPartner Info from AAI" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_190fewc</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1f71u71</bpmn:outgoing>
+      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+def dcsi = new Delete3rdONAPE2EServiceInstance()
+dcsi.checkSPPartnerInfoFromAAI(execution)]]></bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:exclusiveGateway id="ExclusiveGateway_01c0nhq" name="Is 3rdONAP SPPartner Existing" default="SequenceFlow_0h1rnsw">
+      <bpmn:incoming>SequenceFlow_1f71u71</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0h1rnsw</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_1msw3xo</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:sequenceFlow id="SequenceFlow_0h1rnsw" name="no" sourceRef="ExclusiveGateway_01c0nhq" targetRef="IntermediateThrowEvent_1y4vypx" />
+    <bpmn:sequenceFlow id="SequenceFlow_1msw3xo" name="yes" sourceRef="ExclusiveGateway_01c0nhq" targetRef="ScriptTask_1y8kdt3">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{(execution.getVariable("Is3rdONAPExist" )  == "true" )}]]></bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
+    <bpmn:intermediateCatchEvent id="IntermediateCatchEvent_0cql41g" name="Start3rdONAPDeleteE2ESI">
+      <bpmn:outgoing>SequenceFlow_1ttrqml</bpmn:outgoing>
+      <bpmn:linkEventDefinition name="Start3rdONAPDeleteE2ESI" />
+    </bpmn:intermediateCatchEvent>
+    <bpmn:sequenceFlow id="SequenceFlow_1f71u71" sourceRef="ScriptTask_160sboy" targetRef="ExclusiveGateway_01c0nhq" />
+    <bpmn:sequenceFlow id="SequenceFlow_1ttrqml" sourceRef="IntermediateCatchEvent_0cql41g" targetRef="ScriptTask_16rcjl3" />
+    <bpmn:intermediateThrowEvent id="IntermediateThrowEvent_0wbo4nq" name="GoTo Start3rdONAPDeleteE2ESI">
+      <bpmn:incoming>SequenceFlow_0o376do</bpmn:incoming>
+      <bpmn:linkEventDefinition name="Start3rdONAPDeleteE2ESI" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:scriptTask id="ScriptTask_0yz8d8c" name="Query E2ESI progress in 3rdONAP" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_13s0mg5</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_0kkou66</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0fkfn70</bpmn:outgoing>
+      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+def dcsi = new Delete3rdONAPE2EServiceInstance()
+dcsi.getE2ESIProgressin3rdONAP(execution)]]></bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="SequenceFlow_04hwfll" sourceRef="ScriptTask_1aj6okk" targetRef="ScriptTask_18auy29" />
+    <bpmn:scriptTask id="ScriptTask_1y8kdt3" name="Check Locall Call" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_1msw3xo</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1kcu53z</bpmn:outgoing>
+      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+def dcsi = new Delete3rdONAPE2EServiceInstance()
+dcsi.checkLocallCall(execution)]]></bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="SequenceFlow_1kcu53z" sourceRef="ScriptTask_1y8kdt3" targetRef="ExclusiveGateway_0pj14lp" />
+    <bpmn:exclusiveGateway id="ExclusiveGateway_0pj14lp" name="Is Called from Local">
+      <bpmn:incoming>SequenceFlow_1kcu53z</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0o376do</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_1y8xkzy</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:sequenceFlow id="SequenceFlow_0o376do" name="yes" sourceRef="ExclusiveGateway_0pj14lp" targetRef="IntermediateThrowEvent_0wbo4nq">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{(execution.getVariable("IsLocalCall" )  == "true" )}]]></bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
+    <bpmn:sequenceFlow id="SequenceFlow_1y8xkzy" name="no" sourceRef="ExclusiveGateway_0pj14lp" targetRef="IntermediateThrowEvent_1y4vypx" />
+    <bpmn:intermediateThrowEvent id="IntermediateThrowEvent_1y4vypx" name="GoTo  StartLocalONAPDeleteE2ESI">
+      <bpmn:incoming>SequenceFlow_1y8xkzy</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_0h1rnsw</bpmn:incoming>
+      <bpmn:linkEventDefinition name=" StartLocalONAPDeleteE2ESI" />
+    </bpmn:intermediateThrowEvent>
+    <bpmn:endEvent id="EndEvent_0o0n3fa" name="Delete3rdONAPRES_End">
+      <bpmn:incoming>SequenceFlow_131f1jj</bpmn:incoming>
+    </bpmn:endEvent>
+    <bpmn:scriptTask id="ScriptTask_1lazb8l" name="Delete SPPartner In AAI">
+      <bpmn:incoming>SequenceFlow_1wq9f5k</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_18gb81f</bpmn:outgoing>
+      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+def dcsi = new Delete3rdONAPE2EServiceInstance()
+dcsi.deleteSPPartnerInAAI(execution)]]></bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:scriptTask id="ScriptTask_0buj724" name="Pre Process Request" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_0wnyy50</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0z9axn6</bpmn:outgoing>
+      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+def dcsi = new Delete3rdONAPE2EServiceInstance()
+dcsi.preProcessRequest(execution)]]></bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:scriptTask id="ScriptTask_0rixvgj" name="Prepare Delete resource progress" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_0z9axn6</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_04l4to1</bpmn:outgoing>
+      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+execution.setVariable("progress", "100")
+execution.setVariable("status", "finished")
+execution.setVariable("statusDescription", "Local Creation Only")
+def dcsi = new Delete3rdONAPE2EServiceInstance()
+dcsi.prepareUpdateProgress(execution)]]></bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:serviceTask id="ServiceTask_1kgvq5e" name="update progress update">
+      <bpmn:extensionElements>
+        <camunda:connector>
+          <camunda:inputOutput>
+            <camunda:inputParameter name="url">${CVFMI_dbAdapterEndpoint}</camunda:inputParameter>
+            <camunda:inputParameter name="headers">
+              <camunda:map>
+                <camunda:entry key="content-type">application/soap+xml</camunda:entry>
+                <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry>
+              </camunda:map>
+            </camunda:inputParameter>
+            <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter>
+            <camunda:inputParameter name="method">POST</camunda:inputParameter>
+            <camunda:outputParameter name="CVFMI_dbResponseCode">${statusCode}</camunda:outputParameter>
+            <camunda:outputParameter name="CVFMI_dbResponse">${response}</camunda:outputParameter>
+          </camunda:inputOutput>
+          <camunda:connectorId>http-connector</camunda:connectorId>
+        </camunda:connector>
+      </bpmn:extensionElements>
+      <bpmn:incoming>SequenceFlow_18gb81f</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_1swgag2</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0dkbe3r</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:scriptTask id="ScriptTask_17s3yrn" name="Post process" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_0dkbe3r</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1wn6y9u</bpmn:outgoing>
+      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+def csi = new  Delete3rdONAPE2EServiceInstance()
+csi.postProcess(execution)]]></bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:intermediateCatchEvent id="IntermediateCatchEvent_18h4prx" name="StartLocalONAPDeleteE2ESI">
+      <bpmn:outgoing>SequenceFlow_0wnyy50</bpmn:outgoing>
       <bpmn:linkEventDefinition name="StartLocalONAPDeleteE2ESI" />
     </bpmn:intermediateCatchEvent>
-    <bpmn:scriptTask id="ScriptTask_0y6ox5c" name="Send Sync Ack Response" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1xhcwoo</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0vhbw8y</bpmn:outgoing>
+    <bpmn:scriptTask id="ScriptTask_03gddkg" name="Send Sync Ack Response" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_1wn6y9u</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_131f1jj</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
 def csi = new  Delete3rdONAPE2EServiceInstance()
 csi.sendSyncResponse(execution)]]></bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:exclusiveGateway id="ExclusiveGateway_02l57i8" name="Is 3rdONAP Existing" default="SequenceFlow_177yb27">
-      <bpmn:incoming>SequenceFlow_0ff0jf2</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_03mc2qq</bpmn:outgoing>
-      <bpmn:outgoing>SequenceFlow_177yb27</bpmn:outgoing>
+    <bpmn:sequenceFlow id="SequenceFlow_0z9axn6" sourceRef="ScriptTask_0buj724" targetRef="ScriptTask_0rixvgj" />
+    <bpmn:sequenceFlow id="SequenceFlow_131f1jj" sourceRef="ScriptTask_03gddkg" targetRef="EndEvent_0o0n3fa" />
+    <bpmn:sequenceFlow id="SequenceFlow_18gb81f" sourceRef="ScriptTask_1lazb8l" targetRef="ServiceTask_1kgvq5e" />
+    <bpmn:sequenceFlow id="SequenceFlow_0wnyy50" sourceRef="IntermediateCatchEvent_18h4prx" targetRef="ScriptTask_0buj724" />
+    <bpmn:sequenceFlow id="SequenceFlow_04l4to1" sourceRef="ScriptTask_0rixvgj" targetRef="ExclusiveGateway_1cz6dwq" />
+    <bpmn:sequenceFlow id="SequenceFlow_1wn6y9u" sourceRef="ScriptTask_17s3yrn" targetRef="ScriptTask_03gddkg" />
+    <bpmn:exclusiveGateway id="ExclusiveGateway_1cz6dwq" name="Is 3rdONAP SPPartner Existing" default="SequenceFlow_1swgag2">
+      <bpmn:incoming>SequenceFlow_04l4to1</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1wq9f5k</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_1swgag2</bpmn:outgoing>
     </bpmn:exclusiveGateway>
-    <bpmn:sequenceFlow id="SequenceFlow_0ecyqjf" sourceRef="StartEvent_01a6g9a" targetRef="ScriptTask_1vlm2lw" />
-    <bpmn:sequenceFlow id="SequenceFlow_1sql6c3" sourceRef="ScriptTask_02oc89f" targetRef="ScriptTask_0viqs1u" />
-    <bpmn:sequenceFlow id="SequenceFlow_1soxbjk" sourceRef="ScriptTask_0viqs1u" targetRef="ScriptTask_1e4pgbj" />
-    <bpmn:sequenceFlow id="SequenceFlow_170nvzi" sourceRef="ScriptTask_1ri59nm" targetRef="EndEvent_1993lyd" />
-    <bpmn:sequenceFlow id="SequenceFlow_1tlym3z" sourceRef="ServiceTask_0lgqtdm" targetRef="ScriptTask_093lzuq" />
-    <bpmn:sequenceFlow id="SequenceFlow_0z0u7x1" sourceRef="ScriptTask_093lzuq" targetRef="ScriptTask_1e5o8dz" />
-    <bpmn:sequenceFlow id="SequenceFlow_114wjuf" sourceRef="IntermediateCatchEvent_14mk5it" targetRef="ScriptTask_02oc89f" />
-    <bpmn:sequenceFlow id="SequenceFlow_000q9m3" sourceRef="ScriptTask_1e4pgbj" targetRef="ServiceTask_0r6g690" />
-    <bpmn:sequenceFlow id="SequenceFlow_1lhdwv6" sourceRef="ServiceTask_0r6g690" targetRef="ScriptTask_0blh9n0" />
-    <bpmn:sequenceFlow id="SequenceFlow_1bo3fu4" sourceRef="ScriptTask_1e5o8dz" targetRef="ScriptTask_1ri59nm" />
-    <bpmn:sequenceFlow id="SequenceFlow_0t0jlzs" sourceRef="ScriptTask_0blh9n0" targetRef="ScriptTask_0ombt1l" />
-    <bpmn:sequenceFlow id="SequenceFlow_06fak6j" sourceRef="ScriptTask_0ombt1l" targetRef="ScriptTask_1trt7oc" />
-    <bpmn:sequenceFlow id="SequenceFlow_0lpbqkc" sourceRef="ScriptTask_01s6c7j" targetRef="ServiceTask_0lgqtdm" />
-    <bpmn:sequenceFlow id="SequenceFlow_1jgurvk" sourceRef="ScriptTask_1vlm2lw" targetRef="ExclusiveGateway_0d7a4pw" />
-    <bpmn:sequenceFlow id="SequenceFlow_0u3tca8" name="no" sourceRef="ExclusiveGateway_0d7a4pw" targetRef="IntermediateThrowEvent_0bmqdpg" />
-    <bpmn:sequenceFlow id="SequenceFlow_11pvz8i" name="yes" sourceRef="ExclusiveGateway_0d7a4pw" targetRef="ScriptTask_0d7cawc">
+    <bpmn:sequenceFlow id="SequenceFlow_0dkbe3r" sourceRef="ServiceTask_1kgvq5e" targetRef="ScriptTask_17s3yrn" />
+    <bpmn:sequenceFlow id="SequenceFlow_1wq9f5k" name="yes" sourceRef="ExclusiveGateway_1cz6dwq" targetRef="ScriptTask_1lazb8l">
       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{(execution.getVariable("Is3rdONAPExist" )  == "true" )}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
-    <bpmn:sequenceFlow id="SequenceFlow_06avdut" name="yes" sourceRef="ExclusiveGateway_0j2ccax" targetRef="IntermediateThrowEvent_0bqnalt">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{(execution.getVariable("IsLocalCall" )  == "true" )}]]></bpmn:conditionExpression>
+    <bpmn:sequenceFlow id="SequenceFlow_1swgag2" name="No" sourceRef="ExclusiveGateway_1cz6dwq" targetRef="ServiceTask_1kgvq5e" />
+    <bpmn:scriptTask id="ScriptTask_1pdhttw" name="timeDelay" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_1udji9x</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0kkou66</bpmn:outgoing>
+      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+def dcsi = new Delete3rdONAPE2EServiceInstance()
+dcsi.timeDelay(execution)]]></bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:exclusiveGateway id="ExclusiveGateway_1662gjm" name="Delete SI in 3rdONAP Success?" default="SequenceFlow_12seu6n">
+      <bpmn:incoming>SequenceFlow_0wp73cw</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_13s0mg5</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_12seu6n</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:exclusiveGateway id="ExclusiveGateway_1we7izu" name="Delete  SI in 3rdONAP Finished?">
+      <bpmn:incoming>SequenceFlow_1luhljs</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1udji9x</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_0y2g8mr</bpmn:outgoing>
+    </bpmn:exclusiveGateway>
+    <bpmn:scriptTask id="ScriptTask_18auy29" name="Send Sync Ack Response" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_04hwfll</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0a8k9xi</bpmn:outgoing>
+      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+def csi = new  Delete3rdONAPE2EServiceInstance()
+csi.sendSyncResponse(execution)]]></bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="SequenceFlow_0a8k9xi" sourceRef="ScriptTask_18auy29" targetRef="EndEvent_013449q" />
+    <bpmn:sequenceFlow id="SequenceFlow_15mvx68" sourceRef="ScriptTask_0rs5t7w" targetRef="ScriptTask_0r2cxvb" />
+    <bpmn:sequenceFlow id="SequenceFlow_0wp73cw" sourceRef="ScriptTask_0r2cxvb" targetRef="ExclusiveGateway_1662gjm" />
+    <bpmn:sequenceFlow id="SequenceFlow_13s0mg5" name="yes" sourceRef="ExclusiveGateway_1662gjm" targetRef="ScriptTask_0yz8d8c">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{(execution.getVariable("serviceOrderId" )  != null && execution.getVariable("serviceOrderId" )  != "" )}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
-    <bpmn:sequenceFlow id="SequenceFlow_0cuvrsr" sourceRef="ScriptTask_1trt7oc" targetRef="ScriptTask_01s6c7j" />
-    <bpmn:sequenceFlow id="SequenceFlow_1lqmzex" sourceRef="ScriptTask_0d7cawc" targetRef="ExclusiveGateway_0j2ccax" />
-    <bpmn:sequenceFlow id="SequenceFlow_1pwflny" name="no" sourceRef="ExclusiveGateway_0j2ccax" targetRef="IntermediateThrowEvent_0bmqdpg" />
-    <bpmn:sequenceFlow id="SequenceFlow_0vhbw8y" sourceRef="ScriptTask_0y6ox5c" targetRef="EndEvent_1itzq8n" />
-    <bpmn:sequenceFlow id="SequenceFlow_03mc2qq" name="yes" sourceRef="ExclusiveGateway_02l57i8" targetRef="ScriptTask_1aigzk8">
-      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{(execution.getVariable("Is3rdONAPExist" )  == "true" )}]]></bpmn:conditionExpression>
+    <bpmn:sequenceFlow id="SequenceFlow_0fkfn70" sourceRef="ScriptTask_0yz8d8c" targetRef="ServiceTask_0p5029r" />
+    <bpmn:sequenceFlow id="SequenceFlow_1suwdgi" sourceRef="ServiceTask_039ju3f" targetRef="ScriptTask_0rs5t7w" />
+    <bpmn:sequenceFlow id="SequenceFlow_0kkou66" sourceRef="ScriptTask_1pdhttw" targetRef="ScriptTask_0yz8d8c" />
+    <bpmn:sequenceFlow id="SequenceFlow_1luhljs" sourceRef="ServiceTask_0p5029r" targetRef="ExclusiveGateway_1we7izu" />
+    <bpmn:sequenceFlow id="SequenceFlow_1udji9x" name="no" sourceRef="ExclusiveGateway_1we7izu" targetRef="ScriptTask_1pdhttw">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[ #{(execution.getVariable("status" ) == "processing" )}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
-    <bpmn:sequenceFlow id="SequenceFlow_03ngo7h" sourceRef="ScriptTask_1aigzk8" targetRef="ServiceTask_1go9g1i" />
-    <bpmn:sequenceFlow id="SequenceFlow_1x1sk3t" sourceRef="IntermediateCatchEvent_0ui7e2m" targetRef="ScriptTask_0cpsjwl" />
-    <bpmn:sequenceFlow id="SequenceFlow_02l74nc" sourceRef="ScriptTask_0cpsjwl" targetRef="ScriptTask_01cer09" />
-    <bpmn:sequenceFlow id="SequenceFlow_0ff0jf2" sourceRef="ScriptTask_01cer09" targetRef="ExclusiveGateway_02l57i8" />
-    <bpmn:sequenceFlow id="SequenceFlow_177yb27" name="No" sourceRef="ExclusiveGateway_02l57i8" targetRef="ServiceTask_1go9g1i" />
-    <bpmn:sequenceFlow id="SequenceFlow_1784pcx" sourceRef="ServiceTask_1go9g1i" targetRef="ScriptTask_0ywn2ec" />
-    <bpmn:sequenceFlow id="SequenceFlow_1xhcwoo" sourceRef="ScriptTask_0ywn2ec" targetRef="ScriptTask_0y6ox5c" />
+    <bpmn:endEvent id="EndEvent_19joonf">
+      <bpmn:incoming>SequenceFlow_1mei7hu</bpmn:incoming>
+    </bpmn:endEvent>
+    <bpmn:sequenceFlow id="SequenceFlow_12seu6n" name="no" sourceRef="ExclusiveGateway_1662gjm" targetRef="ScriptTask_07cq0pw" />
+    <bpmn:sequenceFlow id="SequenceFlow_0y2g8mr" name="yes" sourceRef="ExclusiveGateway_1we7izu" targetRef="ScriptTask_1b88nnk">
+      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[ #{(execution.getVariable("status" )  != "processing" )}]]></bpmn:conditionExpression>
+    </bpmn:sequenceFlow>
+    <bpmn:scriptTask id="ScriptTask_07cq0pw" name="update resource progress failed" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_12seu6n</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0i9iiuo</bpmn:outgoing>
+      <bpmn:script><![CDATA[import org.onap.so.bpmn.infrastructure.scripts.*
+execution.setVariable("progress", "100")
+execution.setVariable("status", "error")
+execution.setVariable("statusDescription", "Delete Service Order failed ")
+def dcsi = new Delete3rdONAPE2EServiceInstance()
+dcsi.prepareUpdateProgress(execution)]]></bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:serviceTask id="ServiceTask_1ixmamy" name="resource progress update">
+      <bpmn:extensionElements>
+        <camunda:connector>
+          <camunda:inputOutput>
+            <camunda:inputParameter name="url">${CVFMI_dbAdapterEndpoint}</camunda:inputParameter>
+            <camunda:inputParameter name="headers">
+              <camunda:map>
+                <camunda:entry key="content-type">application/soap+xml</camunda:entry>
+                <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry>
+              </camunda:map>
+            </camunda:inputParameter>
+            <camunda:inputParameter name="payload">${CVFMI_updateResOperStatusRequest}</camunda:inputParameter>
+            <camunda:inputParameter name="method">POST</camunda:inputParameter>
+            <camunda:outputParameter name="CVFMI_dbResponseCode">${statusCode}</camunda:outputParameter>
+            <camunda:outputParameter name="CVFMI_dbResponse">${response}</camunda:outputParameter>
+          </camunda:inputOutput>
+          <camunda:connectorId>http-connector</camunda:connectorId>
+        </camunda:connector>
+      </bpmn:extensionElements>
+      <bpmn:incoming>SequenceFlow_0i9iiuo</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1mei7hu</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_0i9iiuo" sourceRef="ScriptTask_07cq0pw" targetRef="ServiceTask_1ixmamy" />
+    <bpmn:sequenceFlow id="SequenceFlow_1mei7hu" sourceRef="ServiceTask_1ixmamy" targetRef="EndEvent_19joonf" />
   </bpmn:process>
   <bpmn:error id="Error_0nbdy47" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Delete3rdONAPE2EServiceInstance">
-      <bpmndi:BPMNShape id="StartEvent_01a6g9a_di" bpmnElement="StartEvent_01a6g9a">
-        <dc:Bounds x="870" y="-707" width="36" height="36" />
+      <bpmndi:BPMNShape id="StartEvent_0hj12gh_di" bpmnElement="StartEvent_0hj12gh">
+        <dc:Bounds x="-9" y="-418" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="849" y="-671" width="84" height="28" />
+          <dc:Bounds x="-30" y="-382" width="84" height="28" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_0viqs1u_di" bpmnElement="ScriptTask_0viqs1u">
-        <dc:Bounds x="1245" y="-442" width="100" height="80" />
+      <bpmndi:BPMNShape id="ScriptTask_0rs5t7w_di" bpmnElement="ScriptTask_0rs5t7w">
+        <dc:Bounds x="-41" y="12" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="EndEvent_1993lyd_di" bpmnElement="EndEvent_1993lyd">
-        <dc:Bounds x="1848" y="-46" width="36" height="36" />
+      <bpmndi:BPMNShape id="EndEvent_013449q_di" bpmnElement="EndEvent_013449q">
+        <dc:Bounds x="799" y="393" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1812" y="-4" width="84" height="28" />
+          <dc:Bounds x="763" y="435" width="84" height="28" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_093lzuq_di" bpmnElement="ScriptTask_093lzuq">
-        <dc:Bounds x="1245" y="-68" width="100" height="80" />
+      <bpmndi:BPMNShape id="ScriptTask_1b88nnk_di" bpmnElement="ScriptTask_1b88nnk">
+        <dc:Bounds x="-41" y="371" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_02oc89f_di" bpmnElement="ScriptTask_02oc89f">
-        <dc:Bounds x="1042" y="-442" width="100" height="80" />
+      <bpmndi:BPMNShape id="ScriptTask_16rcjl3_di" bpmnElement="ScriptTask_16rcjl3">
+        <dc:Bounds x="163" y="-153" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1e4pgbj_di" bpmnElement="ScriptTask_1e4pgbj">
-        <dc:Bounds x="1442" y="-442" width="100" height="80" />
+      <bpmndi:BPMNShape id="ScriptTask_10n1tb6_di" bpmnElement="ScriptTask_10n1tb6">
+        <dc:Bounds x="366" y="-153" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_0r6g690_di" bpmnElement="ServiceTask_0r6g690">
-        <dc:Bounds x="1678" y="-442" width="100" height="80" />
+      <bpmndi:BPMNShape id="ServiceTask_039ju3f_di" bpmnElement="ServiceTask_039ju3f">
+        <dc:Bounds x="573" y="-153" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1e5o8dz_di" bpmnElement="ScriptTask_1e5o8dz">
-        <dc:Bounds x="1442" y="-68" width="100" height="80" />
+      <bpmndi:BPMNShape id="ScriptTask_1aj6okk_di" bpmnElement="ScriptTask_1aj6okk">
+        <dc:Bounds x="231" y="371" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_0ombt1l_di" bpmnElement="ScriptTask_0ombt1l">
-        <dc:Bounds x="1245" y="-271" width="100" height="80" />
+      <bpmndi:BPMNShape id="ScriptTask_0r2cxvb_di" bpmnElement="ScriptTask_0r2cxvb">
+        <dc:Bounds x="163" y="12" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_0lgqtdm_di" bpmnElement="ServiceTask_0lgqtdm">
-        <dc:Bounds x="1042" y="-68" width="100" height="80" />
+      <bpmndi:BPMNShape id="ServiceTask_0p5029r_di" bpmnElement="ServiceTask_0p5029r">
+        <dc:Bounds x="798" y="12" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_0blh9n0_di" bpmnElement="ScriptTask_0blh9n0">
-        <dc:Bounds x="1042" y="-271" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1vlm2lw_di" bpmnElement="ScriptTask_1vlm2lw">
-        <dc:Bounds x="1042" y="-729" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ExclusiveGateway_0d7a4pw_di" bpmnElement="ExclusiveGateway_0d7a4pw" isMarkerVisible="true">
-        <dc:Bounds x="1259" y="-715" width="50" height="50" />
+      <bpmndi:BPMNEdge id="SequenceFlow_190fewc_di" bpmnElement="SequenceFlow_190fewc">
+        <di:waypoint xsi:type="dc:Point" x="27" y="-400" />
+        <di:waypoint xsi:type="dc:Point" x="163" y="-400" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1243" y="-747" width="56" height="28" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="IntermediateCatchEvent_14mk5it_di" bpmnElement="IntermediateCatchEvent_14mk5it">
-        <dc:Bounds x="870" y="-420" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="850" y="-384" width="85" height="28" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="IntermediateThrowEvent_0bqnalt_di" bpmnElement="IntermediateThrowEvent_0bqnalt">
-        <dc:Bounds x="1835" y="-707" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1813" y="-666" width="85" height="42" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1trt7oc_di" bpmnElement="ScriptTask_1trt7oc">
-        <dc:Bounds x="1442" y="-271" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_01s6c7j_di" bpmnElement="ScriptTask_01s6c7j">
-        <dc:Bounds x="1678" y="-271" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1ri59nm_di" bpmnElement="ScriptTask_1ri59nm">
-        <dc:Bounds x="1678" y="-68" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_0d7cawc_di" bpmnElement="ScriptTask_0d7cawc">
-        <dc:Bounds x="1442" y="-729" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ExclusiveGateway_0j2ccax_di" bpmnElement="ExclusiveGateway_0j2ccax" isMarkerVisible="true">
-        <dc:Bounds x="1671" y="-715" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1655" y="-747" width="65" height="28" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="IntermediateThrowEvent_0bmqdpg_di" bpmnElement="IntermediateThrowEvent_0bmqdpg">
-        <dc:Bounds x="1678" y="-589" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1656" y="-548" width="85" height="42" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="EndEvent_1itzq8n_di" bpmnElement="EndEvent_1itzq8n">
-        <dc:Bounds x="1848" y="288" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1812" y="330" width="84" height="28" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_1aigzk8_di" bpmnElement="ScriptTask_1aigzk8">
-        <dc:Bounds x="1665" y="67" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_0cpsjwl_di" bpmnElement="ScriptTask_0cpsjwl">
-        <dc:Bounds x="1042" y="67" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_01cer09_di" bpmnElement="ScriptTask_01cer09">
-        <dc:Bounds x="1245" y="67" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_1go9g1i_di" bpmnElement="ServiceTask_1go9g1i">
-        <dc:Bounds x="1042" y="266" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_0ywn2ec_di" bpmnElement="ScriptTask_0ywn2ec">
-        <dc:Bounds x="1245" y="266" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="IntermediateCatchEvent_0ui7e2m_di" bpmnElement="IntermediateCatchEvent_0ui7e2m">
-        <dc:Bounds x="870" y="89" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="850" y="125" width="85" height="28" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ScriptTask_0y6ox5c_di" bpmnElement="ScriptTask_0y6ox5c">
-        <dc:Bounds x="1442" y="266" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ExclusiveGateway_02l57i8_di" bpmnElement="ExclusiveGateway_02l57i8" isMarkerVisible="true">
-        <dc:Bounds x="1467" y="82" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="1461" y="50" width="56" height="28" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0ecyqjf_di" bpmnElement="SequenceFlow_0ecyqjf">
-        <di:waypoint xsi:type="dc:Point" x="906" y="-689" />
-        <di:waypoint xsi:type="dc:Point" x="1042" y="-689" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="929" y="-711" width="0" height="14" />
+          <dc:Bounds x="95" y="-422" width="0" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1sql6c3_di" bpmnElement="SequenceFlow_1sql6c3">
-        <di:waypoint xsi:type="dc:Point" x="1142" y="-402" />
-        <di:waypoint xsi:type="dc:Point" x="1245" y="-402" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0brxjic_di" bpmnElement="SequenceFlow_0brxjic">
+        <di:waypoint xsi:type="dc:Point" x="263" y="-113" />
+        <di:waypoint xsi:type="dc:Point" x="366" y="-113" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1149.5" y="-424" width="0" height="14" />
+          <dc:Bounds x="269.5" y="-135" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1soxbjk_di" bpmnElement="SequenceFlow_1soxbjk">
-        <di:waypoint xsi:type="dc:Point" x="1345" y="-402" />
-        <di:waypoint xsi:type="dc:Point" x="1442" y="-402" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0znwu8z_di" bpmnElement="SequenceFlow_0znwu8z">
+        <di:waypoint xsi:type="dc:Point" x="59" y="411" />
+        <di:waypoint xsi:type="dc:Point" x="231" y="411" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1349.5" y="-424" width="0" height="14" />
+          <dc:Bounds x="100" y="389" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_170nvzi_di" bpmnElement="SequenceFlow_170nvzi">
-        <di:waypoint xsi:type="dc:Point" x="1778" y="-28" />
-        <di:waypoint xsi:type="dc:Point" x="1848" y="-28" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0ezt5f0_di" bpmnElement="SequenceFlow_0ezt5f0">
+        <di:waypoint xsi:type="dc:Point" x="466" y="-113" />
+        <di:waypoint xsi:type="dc:Point" x="573" y="-113" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1768" y="-50" width="0" height="14" />
+          <dc:Bounds x="474.5" y="-135" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1tlym3z_di" bpmnElement="SequenceFlow_1tlym3z">
-        <di:waypoint xsi:type="dc:Point" x="1142" y="-28" />
-        <di:waypoint xsi:type="dc:Point" x="1194" y="-28" />
-        <di:waypoint xsi:type="dc:Point" x="1194" y="-28" />
-        <di:waypoint xsi:type="dc:Point" x="1245" y="-28" />
+      <bpmndi:BPMNShape id="ScriptTask_160sboy_di" bpmnElement="ScriptTask_160sboy">
+        <dc:Bounds x="163" y="-440" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ExclusiveGateway_01c0nhq_di" bpmnElement="ExclusiveGateway_01c0nhq" isMarkerVisible="true">
+        <dc:Bounds x="380" y="-426" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1164" y="-35" width="0" height="14" />
+          <dc:Bounds x="378" y="-458" width="56" height="28" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0h1rnsw_di" bpmnElement="SequenceFlow_0h1rnsw">
+        <di:waypoint xsi:type="dc:Point" x="405" y="-376" />
+        <di:waypoint xsi:type="dc:Point" x="405" y="-282" />
+        <di:waypoint xsi:type="dc:Point" x="525" y="-282" />
+        <di:waypoint xsi:type="dc:Point" x="525" y="-282" />
+        <di:waypoint xsi:type="dc:Point" x="799" y="-282" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="389" y="-368.53991291727147" width="12" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0z0u7x1_di" bpmnElement="SequenceFlow_0z0u7x1">
-        <di:waypoint xsi:type="dc:Point" x="1345" y="-28" />
-        <di:waypoint xsi:type="dc:Point" x="1394" y="-28" />
-        <di:waypoint xsi:type="dc:Point" x="1394" y="-28" />
-        <di:waypoint xsi:type="dc:Point" x="1442" y="-28" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1msw3xo_di" bpmnElement="SequenceFlow_1msw3xo">
+        <di:waypoint xsi:type="dc:Point" x="430" y="-401" />
+        <di:waypoint xsi:type="dc:Point" x="563" y="-400" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1364" y="-35" width="0" height="14" />
+          <dc:Bounds x="499.95320010152244" y="-422.3646305622811" width="18" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_114wjuf_di" bpmnElement="SequenceFlow_114wjuf">
-        <di:waypoint xsi:type="dc:Point" x="906" y="-402" />
-        <di:waypoint xsi:type="dc:Point" x="1042" y="-402" />
+      <bpmndi:BPMNShape id="IntermediateCatchEvent_0cql41g_di" bpmnElement="IntermediateCatchEvent_0cql41g">
+        <dc:Bounds x="-9" y="-131" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="929" y="-424" width="0" height="14" />
+          <dc:Bounds x="-29" y="-95" width="85" height="28" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1f71u71_di" bpmnElement="SequenceFlow_1f71u71">
+        <di:waypoint xsi:type="dc:Point" x="263" y="-400" />
+        <di:waypoint xsi:type="dc:Point" x="380" y="-401" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="321.5" y="-422.5" width="0" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_000q9m3_di" bpmnElement="SequenceFlow_000q9m3">
-        <di:waypoint xsi:type="dc:Point" x="1545" y="-402" />
-        <di:waypoint xsi:type="dc:Point" x="1678" y="-402" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1ttrqml_di" bpmnElement="SequenceFlow_1ttrqml">
+        <di:waypoint xsi:type="dc:Point" x="27" y="-113" />
+        <di:waypoint xsi:type="dc:Point" x="163" y="-113" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1567.5" y="-424" width="0" height="14" />
+          <dc:Bounds x="50" y="-135" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1lhdwv6_di" bpmnElement="SequenceFlow_1lhdwv6">
-        <di:waypoint xsi:type="dc:Point" x="1728" y="-362" />
-        <di:waypoint xsi:type="dc:Point" x="1728" y="-316" />
-        <di:waypoint xsi:type="dc:Point" x="1092" y="-316" />
-        <di:waypoint xsi:type="dc:Point" x="1092" y="-271" />
+      <bpmndi:BPMNShape id="IntermediateThrowEvent_0wbo4nq_di" bpmnElement="IntermediateThrowEvent_0wbo4nq">
+        <dc:Bounds x="1026" y="-418" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1365" y="-338" width="0" height="14" />
+          <dc:Bounds x="1004" y="-377" width="85" height="42" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_0yz8d8c_di" bpmnElement="ScriptTask_0yz8d8c">
+        <dc:Bounds x="573" y="12" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_04hwfll_di" bpmnElement="SequenceFlow_04hwfll">
+        <di:waypoint xsi:type="dc:Point" x="331" y="411" />
+        <di:waypoint xsi:type="dc:Point" x="509" y="411" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="375" y="389" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1bo3fu4_di" bpmnElement="SequenceFlow_1bo3fu4">
-        <di:waypoint xsi:type="dc:Point" x="1542" y="-28" />
-        <di:waypoint xsi:type="dc:Point" x="1678" y="-28" />
+      <bpmndi:BPMNShape id="ScriptTask_1y8kdt3_di" bpmnElement="ScriptTask_1y8kdt3">
+        <dc:Bounds x="563" y="-440" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1kcu53z_di" bpmnElement="SequenceFlow_1kcu53z">
+        <di:waypoint xsi:type="dc:Point" x="663" y="-400" />
+        <di:waypoint xsi:type="dc:Point" x="792" y="-401" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1565" y="-50" width="0" height="14" />
+          <dc:Bounds x="727.5" y="-422.5" width="0" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0t0jlzs_di" bpmnElement="SequenceFlow_0t0jlzs">
-        <di:waypoint xsi:type="dc:Point" x="1142" y="-231" />
-        <di:waypoint xsi:type="dc:Point" x="1245" y="-231" />
+      <bpmndi:BPMNShape id="ExclusiveGateway_0pj14lp_di" bpmnElement="ExclusiveGateway_0pj14lp" isMarkerVisible="true">
+        <dc:Bounds x="792" y="-426" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1148.5" y="-253" width="0" height="14" />
+          <dc:Bounds x="776" y="-458" width="83" height="28" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0o376do_di" bpmnElement="SequenceFlow_0o376do">
+        <di:waypoint xsi:type="dc:Point" x="842" y="-401" />
+        <di:waypoint xsi:type="dc:Point" x="1026" y="-400" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="924.8735220112762" y="-422.0003436810377" width="18" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_06fak6j_di" bpmnElement="SequenceFlow_06fak6j">
-        <di:waypoint xsi:type="dc:Point" x="1345" y="-231" />
-        <di:waypoint xsi:type="dc:Point" x="1442" y="-231" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1y8xkzy_di" bpmnElement="SequenceFlow_1y8xkzy">
+        <di:waypoint xsi:type="dc:Point" x="817" y="-376" />
+        <di:waypoint xsi:type="dc:Point" x="817" y="-300" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1348.5" y="-253" width="0" height="14" />
+          <dc:Bounds x="827" y="-357" width="12" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0lpbqkc_di" bpmnElement="SequenceFlow_0lpbqkc">
-        <di:waypoint xsi:type="dc:Point" x="1728" y="-191" />
-        <di:waypoint xsi:type="dc:Point" x="1728" y="-137" />
-        <di:waypoint xsi:type="dc:Point" x="1092" y="-137" />
-        <di:waypoint xsi:type="dc:Point" x="1092" y="-68" />
+      <bpmndi:BPMNShape id="IntermediateThrowEvent_1y4vypx_di" bpmnElement="IntermediateThrowEvent_1y4vypx">
+        <dc:Bounds x="799" y="-300" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1365" y="-159" width="0" height="14" />
+          <dc:Bounds x="777" y="-259" width="85" height="42" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_0o0n3fa_di" bpmnElement="EndEvent_0o0n3fa">
+        <dc:Bounds x="794" y="733" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="758" y="775" width="84" height="28" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_1lazb8l_di" bpmnElement="ScriptTask_1lazb8l">
+        <dc:Bounds x="762" y="512" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_0buj724_di" bpmnElement="ScriptTask_0buj724">
+        <dc:Bounds x="139" y="512" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_0rixvgj_di" bpmnElement="ScriptTask_0rixvgj">
+        <dc:Bounds x="342" y="512" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1kgvq5e_di" bpmnElement="ServiceTask_1kgvq5e">
+        <dc:Bounds x="-41" y="711" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_17s3yrn_di" bpmnElement="ScriptTask_17s3yrn">
+        <dc:Bounds x="231" y="711" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="IntermediateCatchEvent_18h4prx_di" bpmnElement="IntermediateCatchEvent_18h4prx">
+        <dc:Bounds x="-9" y="534" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="-29" y="570" width="85" height="28" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_03gddkg_di" bpmnElement="ScriptTask_03gddkg">
+        <dc:Bounds x="496" y="711" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0z9axn6_di" bpmnElement="SequenceFlow_0z9axn6">
+        <di:waypoint xsi:type="dc:Point" x="239" y="552" />
+        <di:waypoint xsi:type="dc:Point" x="342" y="552" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="246" y="530" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1jgurvk_di" bpmnElement="SequenceFlow_1jgurvk">
-        <di:waypoint xsi:type="dc:Point" x="1142" y="-689" />
-        <di:waypoint xsi:type="dc:Point" x="1259" y="-690" />
+      <bpmndi:BPMNEdge id="SequenceFlow_131f1jj_di" bpmnElement="SequenceFlow_131f1jj">
+        <di:waypoint xsi:type="dc:Point" x="596" y="751" />
+        <di:waypoint xsi:type="dc:Point" x="794" y="751" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1156.5" y="-710.5" width="0" height="14" />
+          <dc:Bounds x="650" y="729" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0u3tca8_di" bpmnElement="SequenceFlow_0u3tca8">
-        <di:waypoint xsi:type="dc:Point" x="1284" y="-665" />
-        <di:waypoint xsi:type="dc:Point" x="1284" y="-571" />
-        <di:waypoint xsi:type="dc:Point" x="1404" y="-571" />
-        <di:waypoint xsi:type="dc:Point" x="1404" y="-571" />
-        <di:waypoint xsi:type="dc:Point" x="1678" y="-571" />
+      <bpmndi:BPMNEdge id="SequenceFlow_18gb81f_di" bpmnElement="SequenceFlow_18gb81f">
+        <di:waypoint xsi:type="dc:Point" x="812" y="592" />
+        <di:waypoint xsi:type="dc:Point" x="812" y="641" />
+        <di:waypoint xsi:type="dc:Point" x="9" y="641" />
+        <di:waypoint xsi:type="dc:Point" x="9" y="711" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1268" y="-658" width="12" height="14" />
+          <dc:Bounds x="365.5" y="619" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_11pvz8i_di" bpmnElement="SequenceFlow_11pvz8i">
-        <di:waypoint xsi:type="dc:Point" x="1309" y="-690" />
-        <di:waypoint xsi:type="dc:Point" x="1442" y="-689" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0wnyy50_di" bpmnElement="SequenceFlow_0wnyy50">
+        <di:waypoint xsi:type="dc:Point" x="27" y="552" />
+        <di:waypoint xsi:type="dc:Point" x="139" y="552" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1378.5" y="-711.5" width="18" height="14" />
+          <dc:Bounds x="38" y="530" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_06avdut_di" bpmnElement="SequenceFlow_06avdut">
-        <di:waypoint xsi:type="dc:Point" x="1721" y="-690" />
-        <di:waypoint xsi:type="dc:Point" x="1835" y="-689" />
+      <bpmndi:BPMNEdge id="SequenceFlow_04l4to1_di" bpmnElement="SequenceFlow_04l4to1">
+        <di:waypoint xsi:type="dc:Point" x="442" y="552" />
+        <di:waypoint xsi:type="dc:Point" x="564" y="552" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1769" y="-710.5" width="18" height="14" />
+          <dc:Bounds x="458" y="530" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0cuvrsr_di" bpmnElement="SequenceFlow_0cuvrsr">
-        <di:waypoint xsi:type="dc:Point" x="1542" y="-231" />
-        <di:waypoint xsi:type="dc:Point" x="1678" y="-231" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1wn6y9u_di" bpmnElement="SequenceFlow_1wn6y9u">
+        <di:waypoint xsi:type="dc:Point" x="331" y="751" />
+        <di:waypoint xsi:type="dc:Point" x="496" y="751" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1565" y="-253" width="0" height="14" />
+          <dc:Bounds x="368.5" y="729" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1lqmzex_di" bpmnElement="SequenceFlow_1lqmzex">
-        <di:waypoint xsi:type="dc:Point" x="1542" y="-689" />
-        <di:waypoint xsi:type="dc:Point" x="1671" y="-690" />
+      <bpmndi:BPMNShape id="ExclusiveGateway_1cz6dwq_di" bpmnElement="ExclusiveGateway_1cz6dwq" isMarkerVisible="true">
+        <dc:Bounds x="564" y="527" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1606.5" y="-711.5" width="0" height="14" />
+          <dc:Bounds x="558" y="495" width="56" height="28" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0dkbe3r_di" bpmnElement="SequenceFlow_0dkbe3r">
+        <di:waypoint xsi:type="dc:Point" x="59" y="751" />
+        <di:waypoint xsi:type="dc:Point" x="231" y="751" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="100" y="729" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1pwflny_di" bpmnElement="SequenceFlow_1pwflny">
-        <di:waypoint xsi:type="dc:Point" x="1696" y="-665" />
-        <di:waypoint xsi:type="dc:Point" x="1696" y="-589" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1wq9f5k_di" bpmnElement="SequenceFlow_1wq9f5k">
+        <di:waypoint xsi:type="dc:Point" x="614" y="552" />
+        <di:waypoint xsi:type="dc:Point" x="762" y="552" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1706" y="-646" width="12" height="14" />
+          <dc:Bounds x="679" y="530" width="18" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0vhbw8y_di" bpmnElement="SequenceFlow_0vhbw8y">
-        <di:waypoint xsi:type="dc:Point" x="1542" y="306" />
-        <di:waypoint xsi:type="dc:Point" x="1848" y="306" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1swgag2_di" bpmnElement="SequenceFlow_1swgag2">
+        <di:waypoint xsi:type="dc:Point" x="589" y="577" />
+        <di:waypoint xsi:type="dc:Point" x="589" y="641" />
+        <di:waypoint xsi:type="dc:Point" x="9" y="641" />
+        <di:waypoint xsi:type="dc:Point" x="9" y="711" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1695" y="284" width="0" height="14" />
+          <dc:Bounds x="293.22499999999997" y="619" width="13" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_03mc2qq_di" bpmnElement="SequenceFlow_03mc2qq">
-        <di:waypoint xsi:type="dc:Point" x="1517" y="107" />
-        <di:waypoint xsi:type="dc:Point" x="1665" y="107" />
+      <bpmndi:BPMNShape id="ScriptTask_1pdhttw_di" bpmnElement="ScriptTask_1pdhttw">
+        <dc:Bounds x="573" y="187" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ExclusiveGateway_1662gjm_di" bpmnElement="ExclusiveGateway_1662gjm" isMarkerVisible="true">
+        <dc:Bounds x="386" y="27" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1582" y="85" width="18" height="14" />
+          <dc:Bounds x="384" y="-25" width="55" height="42" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ExclusiveGateway_1we7izu_di" bpmnElement="ExclusiveGateway_1we7izu" isMarkerVisible="true">
+        <dc:Bounds x="823" y="202" width="50" height="50" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="880" y="206" width="68" height="42" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_18auy29_di" bpmnElement="ScriptTask_18auy29">
+        <dc:Bounds x="509" y="371" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0a8k9xi_di" bpmnElement="SequenceFlow_0a8k9xi">
+        <di:waypoint xsi:type="dc:Point" x="609" y="411" />
+        <di:waypoint xsi:type="dc:Point" x="704" y="411" />
+        <di:waypoint xsi:type="dc:Point" x="704" y="411" />
+        <di:waypoint xsi:type="dc:Point" x="799" y="411" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="674" y="404" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_03ngo7h_di" bpmnElement="SequenceFlow_03ngo7h">
-        <di:waypoint xsi:type="dc:Point" x="1715" y="147" />
-        <di:waypoint xsi:type="dc:Point" x="1715" y="196" />
-        <di:waypoint xsi:type="dc:Point" x="1092" y="196" />
-        <di:waypoint xsi:type="dc:Point" x="1092" y="266" />
+      <bpmndi:BPMNEdge id="SequenceFlow_15mvx68_di" bpmnElement="SequenceFlow_15mvx68">
+        <di:waypoint xsi:type="dc:Point" x="59" y="52" />
+        <di:waypoint xsi:type="dc:Point" x="163" y="52" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1403.5" y="174" width="0" height="14" />
+          <dc:Bounds x="66" y="30" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1x1sk3t_di" bpmnElement="SequenceFlow_1x1sk3t">
-        <di:waypoint xsi:type="dc:Point" x="906" y="107" />
-        <di:waypoint xsi:type="dc:Point" x="1042" y="107" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0wp73cw_di" bpmnElement="SequenceFlow_0wp73cw">
+        <di:waypoint xsi:type="dc:Point" x="263" y="52" />
+        <di:waypoint xsi:type="dc:Point" x="386" y="52" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="929" y="85" width="0" height="14" />
+          <dc:Bounds x="279.5" y="30" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_02l74nc_di" bpmnElement="SequenceFlow_02l74nc">
-        <di:waypoint xsi:type="dc:Point" x="1142" y="107" />
-        <di:waypoint xsi:type="dc:Point" x="1245" y="107" />
+      <bpmndi:BPMNEdge id="SequenceFlow_13s0mg5_di" bpmnElement="SequenceFlow_13s0mg5">
+        <di:waypoint xsi:type="dc:Point" x="436" y="52" />
+        <di:waypoint xsi:type="dc:Point" x="573" y="52" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1193.5" y="85" width="0" height="14" />
+          <dc:Bounds x="496" y="30" width="18" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0ff0jf2_di" bpmnElement="SequenceFlow_0ff0jf2">
-        <di:waypoint xsi:type="dc:Point" x="1345" y="107" />
-        <di:waypoint xsi:type="dc:Point" x="1467" y="107" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0fkfn70_di" bpmnElement="SequenceFlow_0fkfn70">
+        <di:waypoint xsi:type="dc:Point" x="673" y="52" />
+        <di:waypoint xsi:type="dc:Point" x="798" y="52" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1406" y="85" width="0" height="14" />
+          <dc:Bounds x="690.5" y="30" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_177yb27_di" bpmnElement="SequenceFlow_177yb27">
-        <di:waypoint xsi:type="dc:Point" x="1492" y="132" />
-        <di:waypoint xsi:type="dc:Point" x="1492" y="196" />
-        <di:waypoint xsi:type="dc:Point" x="1092" y="196" />
-        <di:waypoint xsi:type="dc:Point" x="1092" y="266" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1suwdgi_di" bpmnElement="SequenceFlow_1suwdgi">
+        <di:waypoint xsi:type="dc:Point" x="673" y="-113" />
+        <di:waypoint xsi:type="dc:Point" x="848" y="-113" />
+        <di:waypoint xsi:type="dc:Point" x="848" y="-39" />
+        <di:waypoint xsi:type="dc:Point" x="9" y="-39" />
+        <di:waypoint xsi:type="dc:Point" x="9" y="12" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1286" y="174" width="13" height="14" />
+          <dc:Bounds x="818" y="-83" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1784pcx_di" bpmnElement="SequenceFlow_1784pcx">
-        <di:waypoint xsi:type="dc:Point" x="1142" y="306" />
-        <di:waypoint xsi:type="dc:Point" x="1176" y="306" />
-        <di:waypoint xsi:type="dc:Point" x="1241" y="306" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0kkou66_di" bpmnElement="SequenceFlow_0kkou66">
+        <di:waypoint xsi:type="dc:Point" x="623" y="187" />
+        <di:waypoint xsi:type="dc:Point" x="623" y="92" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1159" y="284" width="0" height="14" />
+          <dc:Bounds x="593" y="132.5" width="90" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1xhcwoo_di" bpmnElement="SequenceFlow_1xhcwoo">
-        <di:waypoint xsi:type="dc:Point" x="1345" y="306" />
-        <di:waypoint xsi:type="dc:Point" x="1400" y="306" />
-        <di:waypoint xsi:type="dc:Point" x="1400" y="306" />
-        <di:waypoint xsi:type="dc:Point" x="1442" y="306" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1luhljs_di" bpmnElement="SequenceFlow_1luhljs">
+        <di:waypoint xsi:type="dc:Point" x="848" y="92" />
+        <di:waypoint xsi:type="dc:Point" x="848" y="202" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1415" y="299" width="0" height="14" />
+          <dc:Bounds x="818" y="140" width="90" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1udji9x_di" bpmnElement="SequenceFlow_1udji9x">
+        <di:waypoint xsi:type="dc:Point" x="823" y="227" />
+        <di:waypoint xsi:type="dc:Point" x="673" y="227" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="746" y="208" width="12" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="EndEvent_19joonf_di" bpmnElement="EndEvent_19joonf">
+        <dc:Bounds x="387" y="197" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="360" y="236" width="90" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_12seu6n_di" bpmnElement="SequenceFlow_12seu6n">
+        <di:waypoint xsi:type="dc:Point" x="411" y="77" />
+        <di:waypoint xsi:type="dc:Point" x="411" y="137" />
+        <di:waypoint xsi:type="dc:Point" x="9" y="137" />
+        <di:waypoint xsi:type="dc:Point" x="9" y="175" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="183.26272082138004" y="113.00000000000001" width="12" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0y2g8mr_di" bpmnElement="SequenceFlow_0y2g8mr">
+        <di:waypoint xsi:type="dc:Point" x="848" y="252" />
+        <di:waypoint xsi:type="dc:Point" x="848" y="324" />
+        <di:waypoint xsi:type="dc:Point" x="9" y="324" />
+        <di:waypoint xsi:type="dc:Point" x="9" y="371" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="419.8991436726927" y="302" width="18" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_07cq0pw_di" bpmnElement="ScriptTask_07cq0pw">
+        <dc:Bounds x="-41" y="175" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1ixmamy_di" bpmnElement="ServiceTask_1ixmamy">
+        <dc:Bounds x="166" y="175" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0i9iiuo_di" bpmnElement="SequenceFlow_0i9iiuo">
+        <di:waypoint xsi:type="dc:Point" x="59" y="215" />
+        <di:waypoint xsi:type="dc:Point" x="166" y="215" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="68.5" y="193" width="0" height="14" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1mei7hu_di" bpmnElement="SequenceFlow_1mei7hu">
+        <di:waypoint xsi:type="dc:Point" x="266" y="215" />
+        <di:waypoint xsi:type="dc:Point" x="387" y="215" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="326.5" y="193" width="0" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
